diff --git a/.bazelrc.common b/.bazelrc.common index d93c107637b79..e8cdda8d2ae9a 100644 --- a/.bazelrc.common +++ b/.bazelrc.common @@ -49,12 +49,11 @@ query --incompatible_no_implicit_file_export # Log configs ## different from default common --color=yes -common --show_progress +common --noshow_progress common --show_task_finish common --show_progress_rate_limit=10 build --progress_report_interval=10 -build --show_loading_progress -build --show_result=1 +build --noshow_loading_progress # Specifies desired output mode for running tests. # Valid values are diff --git a/.buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts b/.buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts index 2468111d6933b..43abaa7dcc527 100644 --- a/.buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts +++ b/.buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts @@ -294,14 +294,14 @@ export async function pickTestGroupRunOrder() { groups: [ { type: UNIT_TYPE, - defaultMin: 3, + defaultMin: 60, maxMin: JEST_MAX_MINUTES, overheadMin: 0.2, names: jestUnitConfigs, }, { type: INTEGRATION_TYPE, - defaultMin: 10, + defaultMin: 60, maxMin: JEST_MAX_MINUTES, overheadMin: 0.2, names: jestIntegrationConfigs, @@ -389,7 +389,7 @@ export async function pickTestGroupRunOrder() { label: 'Jest Tests', command: getRequiredEnv('JEST_UNIT_SCRIPT'), parallelism: unit.count, - timeout_in_minutes: 60, + timeout_in_minutes: 120, key: 'jest', agents: { queue: 'n2-4-spot', @@ -409,7 +409,7 @@ export async function pickTestGroupRunOrder() { label: 'Jest Integration Tests', command: getRequiredEnv('JEST_INTEGRATION_SCRIPT'), parallelism: integration.count, - timeout_in_minutes: 60, + timeout_in_minutes: 120, key: 'jest-integration', agents: { queue: 'n2-4-spot', diff --git a/.buildkite/scripts/steps/checks.sh b/.buildkite/scripts/steps/checks.sh index 0e11ac04eea1d..c7c22d7958edc 100755 --- a/.buildkite/scripts/steps/checks.sh +++ b/.buildkite/scripts/steps/checks.sh @@ -6,18 +6,18 @@ export DISABLE_BOOTSTRAP_VALIDATION=false .buildkite/scripts/bootstrap.sh .buildkite/scripts/steps/checks/precommit_hook.sh -.buildkite/scripts/steps/checks/ftr_configs.sh +.buildkite/scripts/steps/checks/ts_projects.sh .buildkite/scripts/steps/checks/bazel_packages.sh +.buildkite/scripts/steps/checks/verify_notice.sh +.buildkite/scripts/steps/checks/plugin_list_docs.sh .buildkite/scripts/steps/checks/event_log.sh .buildkite/scripts/steps/checks/telemetry.sh -.buildkite/scripts/steps/checks/ts_projects.sh .buildkite/scripts/steps/checks/jest_configs.sh -.buildkite/scripts/steps/checks/plugin_list_docs.sh .buildkite/scripts/steps/checks/bundle_limits.sh .buildkite/scripts/steps/checks/i18n.sh .buildkite/scripts/steps/checks/file_casing.sh .buildkite/scripts/steps/checks/licenses.sh .buildkite/scripts/steps/checks/plugins_with_circular_deps.sh -.buildkite/scripts/steps/checks/verify_notice.sh .buildkite/scripts/steps/checks/test_projects.sh .buildkite/scripts/steps/checks/test_hardening.sh +.buildkite/scripts/steps/checks/ftr_configs.sh diff --git a/.buildkite/scripts/steps/checks/bazel_packages.sh b/.buildkite/scripts/steps/checks/bazel_packages.sh index a8a631ed48ae4..507b0d5bbdc1c 100755 --- a/.buildkite/scripts/steps/checks/bazel_packages.sh +++ b/.buildkite/scripts/steps/checks/bazel_packages.sh @@ -4,10 +4,6 @@ set -euo pipefail source .buildkite/scripts/common/util.sh -echo --- Check Bazel Packages Manifest -node scripts/generate packages_build_manifest -check_for_changed_files 'node scripts/generate packages_build_manifest' true - echo --- Check Codeowners Manifest if [ -f ".github/CODEOWNERS" ]; then node scripts/generate codeowners diff --git a/.buildkite/scripts/steps/checks/ts_projects.sh b/.buildkite/scripts/steps/checks/ts_projects.sh index a98f0f6d90f16..ed0c6890675c1 100755 --- a/.buildkite/scripts/steps/checks/ts_projects.sh +++ b/.buildkite/scripts/steps/checks/ts_projects.sh @@ -4,5 +4,11 @@ set -euo pipefail source .buildkite/scripts/common/util.sh -echo --- Check TypeScript Projects -node scripts/check_ts_projects +echo --- Run TS Project Linter +cmd="node scripts/ts_project_linter" +if is_pr && ! is_auto_commit_disabled; then + cmd="$cmd --fix" +fi + +eval "$cmd" +check_for_changed_files "$cmd" true diff --git a/.buildkite/tsconfig.json b/.buildkite/tsconfig.json index f40776430f39b..52a8d88f3d85c 100644 --- a/.buildkite/tsconfig.json +++ b/.buildkite/tsconfig.json @@ -1,12 +1,9 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "declarationMap": true, "incremental": false, "composite": false, - "emitDeclarationOnly": true, - "outDir": "./target/types", + "outDir": "target/types", "types": ["node", "mocha"], "paths": { "#pipeline-utils": [".buildkite/pipeline-utils/index.ts"], @@ -19,5 +16,8 @@ "scripts/**/*", "pipelines/flaky_tests/groups.json", "pull_requests.json" + ], + "exclude": [ + "target/**/*", ] } diff --git a/.eslintrc.js b/.eslintrc.js index 5a5648935685a..29956462b0343 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,12 +6,14 @@ * Side Public License, v 1. */ +require('@kbn/babel-register').install(); + const Path = require('path'); const Fs = require('fs'); const normalizePath = require('normalize-path'); const { discoverPackageManifestPaths, Jsonc } = require('@kbn/bazel-packages'); -const { REPO_ROOT } = require('@kbn/utils'); +const { REPO_ROOT } = require('@kbn/repo-info'); const APACHE_2_0_LICENSE_HEADER = ` /* @@ -137,6 +139,7 @@ const DEV_DIRECTORIES = [ '__mocks__', '__stories__', 'e2e', + 'cypress', 'fixtures', 'ftr_e2e', 'integration_tests', @@ -165,7 +168,7 @@ const DEV_FILE_PATTERNS = [ 'mock.{js,ts,tsx}', '_stubs.{js,ts,tsx}', '{testHelpers,test_helper,test_utils}.{js,ts,tsx}', - '{postcss,webpack}.config.js', + '{postcss,webpack,cypress}.config.{js,ts}', ]; /** Glob patterns which describe dev-only code. */ @@ -175,10 +178,10 @@ const DEV_PATTERNS = [ ...DEV_FILE_PATTERNS.map((file) => `{packages,src,x-pack}/**/${file}`), 'packages/kbn-interpreter/tasks/**/*', 'src/dev/**/*', - 'x-pack/{dev-tools,tasks,scripts,test,build_chromium}/**/*', - 'x-pack/plugins/*/server/scripts/**/*', - 'x-pack/plugins/fleet/cypress', + 'x-pack/{dev-tools,tasks,test,build_chromium}/**/*', 'x-pack/performance/**/*', + 'src/setup_node_env/index.js', + 'src/cli/dev.js', ]; /** Restricted imports with suggested alternatives */ @@ -599,6 +602,7 @@ module.exports = { 'x-pack/test/saved_object_api_integration/*/apis/**/*', 'x-pack/test/ui_capabilities/*/tests/**/*', 'x-pack/test/performance/**/*.ts', + '**/cypress.config.{js,ts}', ], rules: { 'import/no-default-export': 'off', diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0e3865ae5b28f..b4e1691627c23 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -889,8 +889,10 @@ packages/kbn-apm-config-loader @elastic/kibana-core @vigneshshanmugam packages/kbn-apm-synthtrace @elastic/apm-ui packages/kbn-apm-utils @elastic/apm-ui packages/kbn-axe-config @elastic/kibana-qa -packages/kbn-babel-plugin-synthetic-packages @elastic/kibana-operations +packages/kbn-babel-plugin-package-imports @elastic/kibana-operations packages/kbn-babel-preset @elastic/kibana-operations +packages/kbn-babel-register @elastic/kibana-operations +packages/kbn-babel-transform @elastic/kibana-operations packages/kbn-bazel-packages @elastic/kibana-operations packages/kbn-bazel-runner @elastic/kibana-operations packages/kbn-cases-components @elastic/response-ops @@ -905,6 +907,7 @@ packages/kbn-config-mocks @elastic/kibana-core packages/kbn-config-schema @elastic/kibana-core packages/kbn-crypto @elastic/kibana-security packages/kbn-crypto-browser @elastic/kibana-core +packages/kbn-cypress-config @elastic/kibana-operations packages/kbn-datemath @elastic/kibana-app-services packages/kbn-dev-cli-errors @elastic/kibana-operations packages/kbn-dev-cli-runner @elastic/kibana-operations @@ -954,6 +957,7 @@ packages/kbn-monaco @elastic/kibana-global-experience packages/kbn-optimizer @elastic/kibana-operations packages/kbn-optimizer-webpack-helpers @elastic/kibana-operations packages/kbn-osquery-io-ts-types @elastic/security-asset-management +packages/kbn-package-map @elastic/kibana-operations packages/kbn-peggy @elastic/kibana-operations packages/kbn-peggy-loader @elastic/kibana-operations packages/kbn-performance-testing-dataset-extractor @elastic/kibana-performance-testing @@ -961,6 +965,8 @@ packages/kbn-plugin-discovery @elastic/kibana-operations packages/kbn-plugin-generator @elastic/kibana-operations packages/kbn-plugin-helpers @elastic/kibana-operations packages/kbn-react-field @elastic/kibana-app-services +packages/kbn-repo-info @elastic/kibana-operations +packages/kbn-repo-path @elastic/kibana-operations packages/kbn-repo-source-classifier @elastic/kibana-operations packages/kbn-repo-source-classifier-cli @elastic/kibana-operations packages/kbn-rison @elastic/kibana-operations @@ -991,7 +997,6 @@ packages/kbn-spec-to-console @elastic/platform-deployment-management packages/kbn-std @elastic/kibana-core packages/kbn-stdio-dev-helpers @elastic/kibana-operations packages/kbn-storybook @elastic/kibana-operations -packages/kbn-synthetic-package-map @elastic/kibana-operations packages/kbn-telemetry-tools @elastic/kibana-core packages/kbn-test @elastic/kibana-operations packages/kbn-test-jest-helpers @elastic/kibana-operations @@ -999,9 +1004,10 @@ packages/kbn-test-subj-selector @elastic/kibana-operations packages/kbn-timelion-grammar @elastic/kibana-visualizations packages/kbn-tinymath @elastic/kibana-visualizations packages/kbn-tooling-log @elastic/kibana-operations -packages/kbn-type-summarizer @elastic/kibana-operations -packages/kbn-type-summarizer-cli @elastic/kibana-operations -packages/kbn-type-summarizer-core @elastic/kibana-operations +packages/kbn-ts-project-linter @elastic/kibana-operations +packages/kbn-ts-project-linter-cli @elastic/kibana-operations +packages/kbn-ts-projects @elastic/kibana-operations +packages/kbn-ts-type-check-cli @elastic/kibana-operations packages/kbn-typed-react-router-config @elastic/apm-ui packages/kbn-ui-framework @elastic/kibana-design packages/kbn-ui-shared-deps-npm @elastic/kibana-operations @@ -1011,6 +1017,7 @@ packages/kbn-user-profile-components @elastic/kibana-security packages/kbn-utility-types @elastic/kibana-core packages/kbn-utility-types-jest @elastic/kibana-operations packages/kbn-utils @elastic/kibana-operations +packages/kbn-web-worker-stub @elastic/kibana-operations packages/kbn-yarn-lock-validator @elastic/kibana-operations packages/shared-ux/avatar/solution @elastic/kibana-global-experience packages/shared-ux/avatar/user_profile/impl @elastic/kibana-global-experience diff --git a/.gitignore b/.gitignore index e2e526faa5ff9..ac56ce3034f7f 100644 --- a/.gitignore +++ b/.gitignore @@ -94,8 +94,7 @@ report.asciidoc # Automatically generated and user-modifiable /tsconfig.refs.json -tsconfig.base.type_check.json -tsconfig.type_check.json +*.type_check.json # Yarn local mirror content .yarn-local-mirror @@ -111,5 +110,5 @@ elastic-agent-* fleet-server-* elastic-agent.yml fleet-server.yml -/packages/kbn-synthetic-package-map/synthetic-packages.json - +/packages/kbn-package-map/package-map.json +/packages/kbn-synthetic-package-map/ diff --git a/BUILD.bazel b/BUILD.bazel index e838d312d8762..02ed0e7a2973d 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -3,11 +3,18 @@ exports_files( [ "tsconfig.base.json", - "tsconfig.bazel.json", "tsconfig.browser.json", "tsconfig.browser_bazel.json", "tsconfig.json", - "package.json" + "package.json", + ".browserslistrc" ], visibility = ["//visibility:public"] ) + +config_setting( + name = "dist", + values = { + "define": "dist=true" + } +) diff --git a/NOTICE.txt b/NOTICE.txt index 5115746affeb2..358f52f23a0ef 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -135,6 +135,32 @@ THE SOFTWARE. This product uses Noto fonts that are licensed under the SIL Open Font License, Version 1.1. +--- +This project includes code from the NX project, which is MIT licensed: + +(The MIT License) + +Copyright (c) 2017-2022 Narwhal Technologies Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + --- Vendored copy of `strip-json-comments` so that we can use it when npm modules are not available. https://github.com/sindresorhus/strip-json-comments/tree/34b79cb0f1129aa85ef4b5c3292e8bc546984ef9 diff --git a/dev_docs/operations/operations_landing.mdx b/dev_docs/operations/operations_landing.mdx index b38570ea44d13..ab572bb73bb09 100644 --- a/dev_docs/operations/operations_landing.mdx +++ b/dev_docs/operations/operations_landing.mdx @@ -37,7 +37,7 @@ layout: landing { pageId: "kibDevDocsOpsOptimizer" }, { pageId: "kibDevDocsOpsBabelPreset" }, { pageId: "kibDevDocsOpsTypeSummarizer" }, - { pageId: "kibDevDocsOpsBabelPluginSyntheticPackages" }, + { pageId: "kibDevDocsOpsBabelPluginPackageImports" }, { pageId: "kibDevDocsOpsUiSharedDepsNpm" }, { pageId: "kibDevDocsOpsUiSharedDepsSrc" }, { pageId: "kibDevDocsOpsPluginDiscovery" }, diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 814beb270c7fd..06666957c9ee4 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -6,7 +6,7 @@ NOTE: node scripts/build_plugin_list_docs - You can update the template within node_modules/@kbn/dev-utils/target_node/src/plugin_list/generate_plugin_list.js + You can update the template within packages/kbn-dev-utils/src/plugin_list/generate_plugin_list.ts //// diff --git a/examples/bfetch_explorer/tsconfig.json b/examples/bfetch_explorer/tsconfig.json index 42e691f7ad155..94a4f021199d7 100644 --- a/examples/bfetch_explorer/tsconfig.json +++ b/examples/bfetch_explorer/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", + "outDir": "target/types", }, "include": [ "index.ts", @@ -10,11 +10,13 @@ "server/**/*.ts", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, - { "path": "../../src/plugins/bfetch/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, + "@kbn/core", + "@kbn/developer-examples-plugin", + "@kbn/bfetch-plugin", + "@kbn/kibana-react-plugin", ] } diff --git a/examples/controls_example/tsconfig.json b/examples/controls_example/tsconfig.json index 43673c863c7d4..1af21f31728df 100644 --- a/examples/controls_example/tsconfig.json +++ b/examples/controls_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,13 +11,19 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, - { "path": "../../src/plugins/data/tsconfig.json" }, - { "path": "../../src/plugins/controls/tsconfig.json" }, - { "path": "../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../src/plugins/presentation_util/tsconfig.json" } + "@kbn/core", + "@kbn/developer-examples-plugin", + "@kbn/data-plugin", + "@kbn/controls-plugin", + "@kbn/navigation-plugin", + "@kbn/presentation-util-plugin", + "@kbn/shared-ux-page-kibana-template", + "@kbn/embeddable-plugin", + "@kbn/data-views-plugin", + "@kbn/es-query", ] } diff --git a/examples/dashboard_embeddable_examples/tsconfig.json b/examples/dashboard_embeddable_examples/tsconfig.json index f35247900bc7c..1258cf36fcb2b 100644 --- a/examples/dashboard_embeddable_examples/tsconfig.json +++ b/examples/dashboard_embeddable_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,13 +10,14 @@ "server/**/*.ts", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/dashboard/tsconfig.json" }, - { "path": "../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../embeddable_examples/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/dashboard-plugin", + "@kbn/kibana-react-plugin", + "@kbn/embeddable-examples-plugin", + "@kbn/developer-examples-plugin", ] } diff --git a/examples/data_view_field_editor_example/tsconfig.json b/examples/data_view_field_editor_example/tsconfig.json index 51e599fd0eff5..7411ac2608a65 100644 --- a/examples/data_view_field_editor_example/tsconfig.json +++ b/examples/data_view_field_editor_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,13 +9,14 @@ "public/**/*.tsx", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../src/plugins/data/tsconfig.json" }, - { "path": "../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../src/plugins/data_view_field_editor/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/data-view-field-editor-plugin", + "@kbn/developer-examples-plugin", ] } diff --git a/examples/developer_examples/tsconfig.json b/examples/developer_examples/tsconfig.json index 0f3d8e259cb56..fdd37bde1e1eb 100644 --- a/examples/developer_examples/tsconfig.json +++ b/examples/developer_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,8 +10,10 @@ "server/**/*.ts", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/examples/embeddable_examples/tsconfig.json b/examples/embeddable_examples/tsconfig.json index f32e7eb0850d3..e80cad0399c9d 100644 --- a/examples/embeddable_examples/tsconfig.json +++ b/examples/embeddable_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,15 +11,18 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../src/plugins/dashboard/tsconfig.json" }, - { "path": "../../src/plugins/saved_objects/tsconfig.json" }, - { "path": "../../src/plugins/presentation_util/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/ui-actions-plugin", + "@kbn/embeddable-plugin", + "@kbn/dashboard-plugin", + "@kbn/saved-objects-plugin", + "@kbn/i18n", + "@kbn/utility-types", ] } diff --git a/examples/embeddable_explorer/tsconfig.json b/examples/embeddable_explorer/tsconfig.json index b0c9c5dd74e20..b69738ab1f0bc 100644 --- a/examples/embeddable_explorer/tsconfig.json +++ b/examples/embeddable_explorer/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,13 +10,15 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../src/plugins/inspector/tsconfig.json" }, - { "path": "../embeddable_examples/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/embeddable-plugin", + "@kbn/ui-actions-plugin", + "@kbn/inspector-plugin", + "@kbn/embeddable-examples-plugin", + "@kbn/developer-examples-plugin", ] } diff --git a/examples/expressions_explorer/tsconfig.json b/examples/expressions_explorer/tsconfig.json index 0386f5e7188fa..14703c0a4b8d9 100644 --- a/examples/expressions_explorer/tsconfig.json +++ b/examples/expressions_explorer/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,13 +9,17 @@ "public/**/*.tsx", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../src/plugins/inspector/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/expressions-plugin", + "@kbn/ui-actions-plugin", + "@kbn/inspector-plugin", + "@kbn/developer-examples-plugin", + "@kbn/i18n", + "@kbn/i18n-react", ] } diff --git a/examples/field_formats_example/tsconfig.json b/examples/field_formats_example/tsconfig.json index a7651b649e5b3..4bedd7ff663b6 100644 --- a/examples/field_formats_example/tsconfig.json +++ b/examples/field_formats_example/tsconfig.json @@ -1,8 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target", - "skipLibCheck": true + "outDir": "target/types", }, "include": [ "index.ts", @@ -12,12 +11,15 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, - { "path": "../../src/plugins/field_formats/tsconfig.json" }, - { "path": "../../src/plugins/data/tsconfig.json" }, - { "path": "../../src/plugins/data_view_field_editor/tsconfig.json" } + "@kbn/core", + "@kbn/developer-examples-plugin", + "@kbn/field-formats-plugin", + "@kbn/data-plugin", + "@kbn/data-view-field-editor-plugin", + "@kbn/field-types", ] } diff --git a/examples/files_example/tsconfig.json b/examples/files_example/tsconfig.json index 9329f941c1006..1a8172e728869 100644 --- a/examples/files_example/tsconfig.json +++ b/examples/files_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,10 +11,18 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, - { "path": "../../src/plugins/files/tsconfig.json" }, + "@kbn/core", + "@kbn/files-plugin", + "@kbn/shared-ux-file-types", + "@kbn/core-application-browser", + "@kbn/shared-ux-file-context", + "@kbn/shared-ux-file-image", + "@kbn/shared-ux-file-upload", + "@kbn/shared-ux-file-picker", + "@kbn/developer-examples-plugin", ] } diff --git a/examples/guided_onboarding_example/tsconfig.json b/examples/guided_onboarding_example/tsconfig.json index 579818d8cbf76..d3c93fc9ec38f 100644 --- a/examples/guided_onboarding_example/tsconfig.json +++ b/examples/guided_onboarding_example/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "__jest__/**/*", @@ -13,11 +11,13 @@ "../../typings/**/*", ], "kbn_references": [ - { - "path": "../../src/core/tsconfig.json" - }, - { - "path": "../../src/plugins/guided_onboarding/tsconfig.json" - }, + "@kbn/core", + "@kbn/guided-onboarding-plugin", + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/guided-onboarding", + ], + "exclude": [ + "target/**/*", ] } diff --git a/examples/hello_world/tsconfig.json b/examples/hello_world/tsconfig.json index 6cfb28f7b3317..6bf319afc2d9a 100644 --- a/examples/hello_world/tsconfig.json +++ b/examples/hello_world/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,9 +11,11 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" } + "@kbn/core", + "@kbn/developer-examples-plugin" ] } diff --git a/examples/locator_examples/tsconfig.json b/examples/locator_examples/tsconfig.json index 43d13f87d005f..2548553d7d1b9 100644 --- a/examples/locator_examples/tsconfig.json +++ b/examples/locator_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,9 +10,13 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/share/tsconfig.json" }, + "@kbn/core", + "@kbn/share-plugin", + "@kbn/utility-types", + "@kbn/kibana-utils-plugin", ] } diff --git a/examples/locator_explorer/tsconfig.json b/examples/locator_explorer/tsconfig.json index c609c50849cb4..4cd9cc3f79a57 100644 --- a/examples/locator_explorer/tsconfig.json +++ b/examples/locator_explorer/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,11 +10,13 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/share/tsconfig.json" }, - { "path": "../locator_examples/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/share-plugin", + "@kbn/locator-examples-plugin", + "@kbn/developer-examples-plugin", ] } diff --git a/examples/partial_results_example/tsconfig.json b/examples/partial_results_example/tsconfig.json index 97d4c752cc3b5..d552b69a1670f 100644 --- a/examples/partial_results_example/tsconfig.json +++ b/examples/partial_results_example/tsconfig.json @@ -1,8 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target", - "skipLibCheck": true + "outDir": "target/types", }, "include": [ "index.ts", @@ -10,10 +9,12 @@ "public/**/*.tsx", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, - { "path": "../../src/plugins/expressions/tsconfig.json" }, + "@kbn/core", + "@kbn/developer-examples-plugin", + "@kbn/expressions-plugin", ] } diff --git a/examples/preboot_example/tsconfig.json b/examples/preboot_example/tsconfig.json index 270d718917518..130f586399611 100644 --- a/examples/preboot_example/tsconfig.json +++ b/examples/preboot_example/tsconfig.json @@ -1,10 +1,15 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*", "server/**/*"], - "kbn_references": [{ "path": "../../src/core/tsconfig.json" }] + "kbn_references": [ + "@kbn/core", + "@kbn/core-http-browser", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", + ] } diff --git a/examples/response_stream/tsconfig.json b/examples/response_stream/tsconfig.json index 162ecac0dca93..9e54eb4fb1522 100644 --- a/examples/response_stream/tsconfig.json +++ b/examples/response_stream/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", + "outDir": "target/types", }, "include": [ "index.ts", @@ -11,11 +11,15 @@ "server/**/*.ts", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, - { "path": "../../src/plugins/data/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, + "@kbn/core", + "@kbn/developer-examples-plugin", + "@kbn/data-plugin", + "@kbn/kibana-react-plugin", + "@kbn/aiops-utils", + "@kbn/config-schema", ] } diff --git a/examples/routing_example/tsconfig.json b/examples/routing_example/tsconfig.json index b3962d53fa4f3..bf0c7af2e33c2 100644 --- a/examples/routing_example/tsconfig.json +++ b/examples/routing_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,9 +11,13 @@ "common/**/*.ts", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/developer-examples-plugin", + "@kbn/core-http-browser", + "@kbn/config-schema", ] } diff --git a/examples/screenshot_mode_example/tsconfig.json b/examples/screenshot_mode_example/tsconfig.json index 5fc60b67ef569..ef8a3647d1d11 100644 --- a/examples/screenshot_mode_example/tsconfig.json +++ b/examples/screenshot_mode_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,12 +11,16 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../src/plugins/screenshot_mode/tsconfig.json" }, - { "path": "../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/navigation-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/usage-collection-plugin", + "@kbn/developer-examples-plugin", + "@kbn/analytics", + "@kbn/i18n-react", ] } diff --git a/examples/search_examples/tsconfig.json b/examples/search_examples/tsconfig.json index ef6c3e9c307e2..3c5ac732dbfc3 100644 --- a/examples/search_examples/tsconfig.json +++ b/examples/search_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,16 +11,25 @@ "server/**/*.ts", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/data/tsconfig.json" }, - { "path": "../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../src/plugins/inspector/tsconfig.json" }, - { "path": "../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../src/plugins/share/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/inspector-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/navigation-plugin", + "@kbn/share-plugin", + "@kbn/developer-examples-plugin", + "@kbn/unified-search-plugin", + "@kbn/i18n-react", + "@kbn/utility-types", + "@kbn/es-query", + "@kbn/i18n", + "@kbn/core-mount-utils-browser-internal", + "@kbn/config-schema", ] } diff --git a/examples/share_examples/tsconfig.json b/examples/share_examples/tsconfig.json index 43d13f87d005f..102ef302040fe 100644 --- a/examples/share_examples/tsconfig.json +++ b/examples/share_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,9 +10,11 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/share/tsconfig.json" }, + "@kbn/core", + "@kbn/share-plugin", ] } diff --git a/examples/state_containers_examples/tsconfig.json b/examples/state_containers_examples/tsconfig.json index 09652684fecfa..24bef65c50b44 100644 --- a/examples/state_containers_examples/tsconfig.json +++ b/examples/state_containers_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,14 +11,16 @@ "common/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../src/plugins/data/tsconfig.json" }, - { "path": "../../src/plugins/data_views/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/navigation-plugin", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/developer-examples-plugin", + "@kbn/es-query", ] } diff --git a/examples/ui_action_examples/tsconfig.json b/examples/ui_action_examples/tsconfig.json index 3a141670cb3fe..b87f7cdf0d864 100644 --- a/examples/ui_action_examples/tsconfig.json +++ b/examples/ui_action_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,9 +10,12 @@ "server/**/*.ts", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../src/plugins/ui_actions/tsconfig.json" }, + "@kbn/kibana-react-plugin", + "@kbn/ui-actions-plugin", + "@kbn/core", ] } diff --git a/examples/ui_actions_explorer/tsconfig.json b/examples/ui_actions_explorer/tsconfig.json index cfa13411c270d..494a2b188a574 100644 --- a/examples/ui_actions_explorer/tsconfig.json +++ b/examples/ui_actions_explorer/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,12 +9,14 @@ "public/**/*.tsx", "../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../ui_action_examples/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/ui-actions-plugin", + "@kbn/ui-actions-examples-plugin", + "@kbn/developer-examples-plugin", ] } diff --git a/examples/user_profile_examples/tsconfig.json b/examples/user_profile_examples/tsconfig.json index f1d9145a39c1b..0891a2ac5cc8f 100644 --- a/examples/user_profile_examples/tsconfig.json +++ b/examples/user_profile_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,10 +10,17 @@ "server/**/*.ts", "../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../x-pack/plugins/security/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" } + "@kbn/core", + "@kbn/security-plugin", + "@kbn/developer-examples-plugin", + "@kbn/user-profile-components", + "@kbn/shared-ux-page-kibana-template", + "@kbn/features-plugin", + "@kbn/spaces-plugin", + "@kbn/config-schema", ] } diff --git a/kbn_pm/README.mdx b/kbn_pm/README.mdx index 03568d5667a25..99f9316540f83 100644 --- a/kbn_pm/README.mdx +++ b/kbn_pm/README.mdx @@ -38,7 +38,7 @@ There are cases where `@kbn/pm` relies on code from packages, mostly to prevent Option 1 is used in several places, with contingencies in place in case bootstrap failed. Option 2 is used for two pieces of code which are needed in order to run bootstrap: - 1. `@kbn/plugin-discovery` as we need to populate the `@kbn/synthetic-package-map` to run Bazel + 1. `@kbn/plugin-discovery` as we need to populate the `@kbn/package-map` to run Bazel 2. `@kbn/bazel-runner` as we want to have the logic for running bazel in a single location Because we load these two packages from source, without being built, before bootstrap is ever run, they can not depend on other packages and must be written in Vanilla JS as well. \ No newline at end of file diff --git a/kbn_pm/src/cli.mjs b/kbn_pm/src/cli.mjs index 2c9d1019b588f..376369cd98332 100644 --- a/kbn_pm/src/cli.mjs +++ b/kbn_pm/src/cli.mjs @@ -20,6 +20,7 @@ import { getHelp } from './lib/help.mjs'; import { createFlagError, isCliError } from './lib/cli_error.mjs'; import { getCmd } from './commands/index.mjs'; import { Log } from './lib/log.mjs'; +import External from './lib/external_packages.js'; const start = Date.now(); const args = new Args(process.argv.slice(2), process.env.CI ? ['--quiet'] : []); @@ -31,7 +32,7 @@ const cmdName = args.getCommandName(); */ async function tryToGetCiStatsReporter(log) { try { - const { CiStatsReporter } = await import('@kbn/ci-stats-reporter'); + const { CiStatsReporter } = External['@kbn/ci-stats-reporter'](); return CiStatsReporter.fromEnv(log); } catch { return; diff --git a/kbn_pm/src/commands/bootstrap/bootstrap_command.mjs b/kbn_pm/src/commands/bootstrap/bootstrap_command.mjs index e00316aac3e77..1ed315fb93df9 100644 --- a/kbn_pm/src/commands/bootstrap/bootstrap_command.mjs +++ b/kbn_pm/src/commands/bootstrap/bootstrap_command.mjs @@ -8,13 +8,15 @@ import { run } from '../../lib/spawn.mjs'; import * as Bazel from '../../lib/bazel.mjs'; +import External from '../../lib/external_packages.js'; + import { haveNodeModulesBeenManuallyDeleted, removeYarnIntegrityFileIfExists } from './yarn.mjs'; import { setupRemoteCache } from './setup_remote_cache.mjs'; -import { regenerateSyntheticPackageMap } from './regenerate_synthetic_package_map.mjs'; import { sortPackageJson } from './sort_package_json.mjs'; -import { REPO_ROOT } from '../../lib/paths.mjs'; -import { pluginDiscovery } from './plugins.mjs'; +import { regeneratePackageMap } from './regenerate_package_map.mjs'; import { regenerateBaseTsconfig } from './regenerate_base_tsconfig.mjs'; +import { packageDiscovery, pluginDiscovery } from './discovery.mjs'; +import { validatePackageJson } from './validate_package_json.mjs'; /** @type {import('../../lib/command').Command} */ export const command = { @@ -83,45 +85,50 @@ export const command = { }); } - const plugins = await time('plugin discovery', async () => { - return await pluginDiscovery(); - }); + // discover the location of packages and plugins + const [plugins, packages] = await Promise.all([ + time('plugin discovery', pluginDiscovery), + time('package discovery', packageDiscovery), + ]); - // generate the synthetic package map which powers several other features, needed - // as an input to the package build - await time('regenerate synthetic package map', async () => { - await regenerateSyntheticPackageMap(plugins); + // generate the package map which powers the resolver and several other features + // needed as an input to the bazel builds + await time('regenerate package map', async () => { + await regeneratePackageMap(packages, plugins, log); }); - await time('build packages', async () => { - await Bazel.buildPackages(log, { offline, quiet }); - }); - await time('sort package json', async () => { - await sortPackageJson(); + await time('pre-build webpack bundles for packages', async () => { + await Bazel.buildWebpackBundles(log, { offline, quiet }); }); + await time('regenerate tsconfig.base.json', async () => { - const { discoverBazelPackages } = await import('@kbn/bazel-packages'); - await regenerateBaseTsconfig(await discoverBazelPackages(REPO_ROOT), plugins); + await regenerateBaseTsconfig(); }); - if (validate) { - // now that packages are built we can import `@kbn/yarn-lock-validator` - const { readYarnLock, validateDependencies } = await import('@kbn/yarn-lock-validator'); - const yarnLock = await time('read yarn.lock', async () => { - return await readYarnLock(); - }); - await time('validate dependencies', async () => { - await validateDependencies(log, yarnLock); - }); - } - - if (vscodeConfig) { - await time('update vscode config', async () => { - // Update vscode settings - await run('node', ['scripts/update_vscode_config']); + await Promise.all([ + time('sort package json', async () => { + await sortPackageJson(); + }), + time('validate package json', async () => { + // now that deps are installed we can import `@kbn/yarn-lock-validator` + const { kibanaPackageJson } = External['@kbn/repo-info'](); + await validatePackageJson(kibanaPackageJson, log); + }), + validate + ? time('validate dependencies', async () => { + // now that deps are installed we can import `@kbn/yarn-lock-validator` + const { readYarnLock, validateDependencies } = External['@kbn/yarn-lock-validator'](); + await validateDependencies(log, await readYarnLock()); + }) + : undefined, + vscodeConfig + ? time('update vscode config', async () => { + // Update vscode settings + await run('node', ['scripts/update_vscode_config']); - log.success('vscode config updated'); - }); - } + log.success('vscode config updated'); + }) + : undefined, + ]); }, }; diff --git a/kbn_pm/src/commands/bootstrap/discovery.mjs b/kbn_pm/src/commands/bootstrap/discovery.mjs new file mode 100644 index 0000000000000..42cce1ed3a123 --- /dev/null +++ b/kbn_pm/src/commands/bootstrap/discovery.mjs @@ -0,0 +1,38 @@ +/* + * 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 { REPO_ROOT } from '../../lib/paths.mjs'; + +// we need to run these in order to generate the pkg map which is used by things +// like `@kbn/babel-register`, so we have to import the JS files directory and can't +// rely on `@kbn/babel-register`. + +export async function packageDiscovery() { + const { discoverBazelPackages } = await import( + // eslint-disable-next-line @kbn/imports/uniform_imports + '../../../../packages/kbn-bazel-packages/index.js' + ); + + return await discoverBazelPackages(REPO_ROOT); +} + +export async function pluginDiscovery() { + const { getPluginSearchPaths, simpleKibanaPlatformPluginDiscovery } = await import( + // eslint-disable-next-line @kbn/imports/uniform_imports + '../../../../packages/kbn-plugin-discovery/index.js' + ); + + const searchPaths = getPluginSearchPaths({ + rootDir: REPO_ROOT, + examples: true, + oss: false, + testPlugins: true, + }); + + return simpleKibanaPlatformPluginDiscovery(searchPaths, []); +} diff --git a/kbn_pm/src/commands/bootstrap/regenerate_base_tsconfig.mjs b/kbn_pm/src/commands/bootstrap/regenerate_base_tsconfig.mjs index e7fc7fd2be48e..c86a04c4d7b9c 100644 --- a/kbn_pm/src/commands/bootstrap/regenerate_base_tsconfig.mjs +++ b/kbn_pm/src/commands/bootstrap/regenerate_base_tsconfig.mjs @@ -10,47 +10,23 @@ import Path from 'path'; import Fsp from 'fs/promises'; import { REPO_ROOT } from '../../lib/paths.mjs'; -import { convertPluginIdToPackageId } from './plugins.mjs'; -import { normalizePath } from './normalize_path.mjs'; +import External from '../../lib/external_packages.js'; -/** - * @param {import('@kbn/bazel-packages').BazelPackage[]} packages - * @param {import('@kbn/plugin-discovery').KibanaPlatformPlugin[]} plugins - */ -export async function regenerateBaseTsconfig(packages, plugins) { +export async function regenerateBaseTsconfig() { + const pkgMap = External['@kbn/package-map']().readPackageMap(); const tsconfigPath = Path.resolve(REPO_ROOT, 'tsconfig.base.json'); const lines = (await Fsp.readFile(tsconfigPath, 'utf-8')).split('\n'); - const packagesMap = packages - .slice() - .sort((a, b) => a.normalizedRepoRelativeDir.localeCompare(b.normalizedRepoRelativeDir)) - .flatMap((p) => { - if (!p.pkg) { - return []; - } - - const id = p.pkg.name; - const path = p.normalizedRepoRelativeDir; - return [` "${id}": ["${path}"],`, ` "${id}/*": ["${path}/*"],`]; - }); - - const pluginsMap = plugins - .slice() - .sort((a, b) => a.manifestPath.localeCompare(b.manifestPath)) - .flatMap((p) => { - const id = convertPluginIdToPackageId(p.manifest.id); - const path = normalizePath(Path.relative(REPO_ROOT, p.directory)); - return [` "${id}": ["${path}"],`, ` "${id}/*": ["${path}/*"],`]; - }); - const start = lines.findIndex((l) => l.trim() === '// START AUTOMATED PACKAGE LISTING'); const end = lines.findIndex((l) => l.trim() === '// END AUTOMATED PACKAGE LISTING'); const current = await Fsp.readFile(tsconfigPath, 'utf8'); const updated = [ ...lines.slice(0, start + 1), - ...packagesMap, - ...pluginsMap, + ...Array.from(pkgMap.entries()).flatMap(([moduleId, repoRelPath]) => [ + ` "${moduleId}": ["${repoRelPath}"],`, + ` "${moduleId}/*": ["${repoRelPath}/*"],`, + ]), ...lines.slice(end), ].join('\n'); diff --git a/kbn_pm/src/commands/bootstrap/regenerate_package_map.mjs b/kbn_pm/src/commands/bootstrap/regenerate_package_map.mjs new file mode 100644 index 0000000000000..03f806fae5b25 --- /dev/null +++ b/kbn_pm/src/commands/bootstrap/regenerate_package_map.mjs @@ -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 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 Path from 'path'; +import Fs from 'fs'; +import Fsp from 'fs/promises'; + +import { convertPluginIdToPackageId } from '../../lib/plugins.mjs'; +import { normalizePath } from '../../lib/normalize_path.mjs'; +import { REPO_ROOT } from '../../lib/paths.mjs'; + +/** + * + * @param {import('@kbn/bazel-packages').BazelPackage[]} packages + * @param {import('@kbn/plugin-discovery').KibanaPlatformPlugin[]} plugins + * @param {import('@kbn/some-dev-log').SomeDevLog} log + */ +export async function regeneratePackageMap(packages, plugins, log) { + // clean up old version of package map package + Fs.rmSync(Path.resolve(REPO_ROOT, 'packages/kbn-synthetic-package-map'), { + recursive: true, + force: true, + }); + + const path = Path.resolve(REPO_ROOT, 'packages/kbn-package-map/package-map.json'); + const existingContent = Fs.existsSync(path) ? await Fsp.readFile(path, 'utf8') : undefined; + + /** @type {Array<[string, string]>} */ + const entries = [['@kbn/core', 'src/core']]; + + for (const pkg of packages) { + entries.push([pkg.manifest.id, pkg.normalizedRepoRelativeDir]); + } + + for (const plugin of plugins) { + entries.push([ + convertPluginIdToPackageId(plugin.manifest.id), + normalizePath(Path.relative(REPO_ROOT, plugin.directory)), + ]); + } + + const content = JSON.stringify( + entries.sort((a, b) => a[0].localeCompare(b[0])), + null, + 2 + ); + + if (content !== existingContent) { + await Fsp.writeFile(path, content); + log.warning('updated package map, many caches may be invalidated'); + } +} diff --git a/kbn_pm/src/commands/bootstrap/regenerate_synthetic_package_map.mjs b/kbn_pm/src/commands/bootstrap/regenerate_synthetic_package_map.mjs deleted file mode 100644 index ea1f53727997d..0000000000000 --- a/kbn_pm/src/commands/bootstrap/regenerate_synthetic_package_map.mjs +++ /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 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 Path from 'path'; -import Fsp from 'fs/promises'; - -import { normalizePath } from './normalize_path.mjs'; -import { REPO_ROOT } from '../../lib/paths.mjs'; -import { convertPluginIdToPackageId } from './plugins.mjs'; - -/** - * @param {import('@kbn/plugin-discovery').KibanaPlatformPlugin[]} plugins - */ -export async function regenerateSyntheticPackageMap(plugins) { - /** @type {Array<[string, string]>} */ - const entries = [['@kbn/core', 'src/core']]; - - for (const plugin of plugins) { - entries.push([ - convertPluginIdToPackageId(plugin.manifest.id), - normalizePath(Path.relative(REPO_ROOT, plugin.directory)), - ]); - } - - await Fsp.writeFile( - Path.resolve(REPO_ROOT, 'packages/kbn-synthetic-package-map/synthetic-packages.json'), - JSON.stringify(entries, null, 2) - ); -} diff --git a/kbn_pm/src/commands/bootstrap/sort_package_json.mjs b/kbn_pm/src/commands/bootstrap/sort_package_json.mjs index f78401c257e40..959b6297da967 100644 --- a/kbn_pm/src/commands/bootstrap/sort_package_json.mjs +++ b/kbn_pm/src/commands/bootstrap/sort_package_json.mjs @@ -10,9 +10,10 @@ import Path from 'path'; import Fs from 'fs'; import { REPO_ROOT } from '../../lib/paths.mjs'; +import External from '../../lib/external_packages.js'; export async function sortPackageJson() { - const { sortPackageJson } = await import('@kbn/sort-package-json'); + const { sortPackageJson } = External['@kbn/sort-package-json'](); const path = Path.resolve(REPO_ROOT, 'package.json'); const json = Fs.readFileSync(path, 'utf8'); diff --git a/kbn_pm/src/commands/bootstrap/validate_package_json.mjs b/kbn_pm/src/commands/bootstrap/validate_package_json.mjs new file mode 100644 index 0000000000000..8a88898dcf310 --- /dev/null +++ b/kbn_pm/src/commands/bootstrap/validate_package_json.mjs @@ -0,0 +1,29 @@ +/* + * 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 { createCliError } from '../../lib/cli_error.mjs'; + +/** + * @param {import('@kbn/repo-info').KibanaPackageJson} pkgJson + * @param {import('@kbn/some-dev-log').SomeDevLog} log + */ +export async function validatePackageJson(pkgJson, log) { + const failures = false; + + const typesInProd = Object.keys(pkgJson.dependencies).filter((id) => id.startsWith('@types/')); + if (typesInProd.length) { + const list = typesInProd.map((id) => ` - ${id}`).join('\n'); + log.error( + `The following @types/* packages are listed in dependencies but should be in the devDependencies:\n${list}` + ); + } + + if (failures) { + throw createCliError('failed to validate package.json, check for errors above'); + } +} diff --git a/kbn_pm/src/commands/run_in_packages_command.mjs b/kbn_pm/src/commands/run_in_packages_command.mjs index 84649f60e0099..362fd499d115b 100644 --- a/kbn_pm/src/commands/run_in_packages_command.mjs +++ b/kbn_pm/src/commands/run_in_packages_command.mjs @@ -10,6 +10,7 @@ import Path from 'path'; import { REPO_ROOT } from '../lib/paths.mjs'; import { run, spawnStreaming } from '../lib/spawn.mjs'; +import External from '../lib/external_packages.js'; /** @type {import('../lib/command').Command} */ export const command = { @@ -39,7 +40,7 @@ export const command = { const exclude = args.getStringValues('exclude') ?? []; const include = args.getStringValues('include') ?? []; - const { discoverBazelPackages } = await import('@kbn/bazel-packages'); + const { discoverBazelPackages } = External['@kbn/bazel-packages'](); const packages = await discoverBazelPackages(REPO_ROOT); for (const { manifest, pkg, normalizedRepoRelativeDir } of packages) { if ( diff --git a/kbn_pm/src/commands/x_command.mjs b/kbn_pm/src/commands/x_command.mjs index f42d20c93d301..e46c7eb0f740e 100644 --- a/kbn_pm/src/commands/x_command.mjs +++ b/kbn_pm/src/commands/x_command.mjs @@ -6,267 +6,8 @@ * Side Public License, v 1. */ -import Fs from 'fs'; -import Path from 'path'; - -import { REPO_ROOT } from '../lib/paths.mjs'; -import { pluginDiscovery } from './bootstrap/plugins.mjs'; - -const RULE_DEPS = /([\s\n]deps\s*=\s*)((?:\w+(?: \+ )?)?(?:\[[^\]]*\])?)(\s*,|\s*\))/; - -/** - * @param {string} text - * @param {number} index - */ -function findStartOfLine(text, index) { - let cursor = index; - while (cursor > 0) { - if (text[cursor - 1] === '\n') { - return cursor; - } - cursor -= 1; - } - - return cursor; -} - -/** - * @param {string} starlark - * @param {string} name - */ -function findBazelRule(starlark, name) { - const match = starlark.match(new RegExp(`name\\s*=\\s*${name}`)); - if (typeof match?.index !== 'number') { - throw new Error(`unable to find rule named [${name}]`); - } - - const openParen = starlark.slice(0, match.index).lastIndexOf('('); - if (openParen === -1) { - throw new Error(`unable to find opening paren for rule [${name}] [index=${match.index}]`); - } - - const start = findStartOfLine(starlark, openParen); - const end = starlark.indexOf(')', start); - if (end === -1) { - throw new Error(`unable to find closing parent for rule [${name}] [start=${start}]`); - } - - const type = starlark.slice(start, starlark.indexOf('(', start)).trim(); - - // add 1 so that the "end" chunk starts after the closing ) - return { start, end: end + 1, type }; -} - -/** - * @param {string} starlark - * @param {string} name - */ -function removeBazelRule(starlark, name) { - const pos = findBazelRule(starlark, name); - - let end = pos.end; - - // slurp up all the newlines directly after the closing ) - while (starlark[end] === '\n') { - end += 1; - } - - return starlark.slice(0, pos.start) + starlark.slice(end); -} - -/** - * @param {string} starlark - * @param {string} dep - * @returns - */ -function addDep(starlark, dep) { - const depsMatch = starlark.match(RULE_DEPS); - - if (typeof depsMatch?.index !== 'number') { - return starlark.replace(/,?[\s\n]*\)[\s\n]*$/, '') + `,\n deps = [${dep}],\n)`; - } - - const [, head, value, tail] = depsMatch; - - return ( - starlark.slice(0, depsMatch.index) + - head + - (() => { - const multiline = value.includes('\n'); - const existingArray = value.indexOf(']'); - if (existingArray === -1) { - return value + ` + [${dep}]`; - } - - const valHead = value.slice(0, existingArray).replace(/,?\s*$/, ','); - const valTail = value.slice(existingArray); - - return `${valHead}${multiline ? '\n ' : ' '}${dep}${multiline ? ',\n' : ''}${valTail}`; - })() + - tail + - starlark.slice(depsMatch.index + depsMatch[0].length) - ); -} - -/** - * @param {string} starlark - * @param {string} name - * @param {string} newName - * @param {(rule: string) => string} mod - */ -function duplicateRule(starlark, name, newName, mod) { - const origPos = findBazelRule(starlark, name); - - const orig = starlark.slice(origPos.start, origPos.end); - - const withName = orig.replace( - /^(\s*)name\s*=\s*.*$/m, - (match, head) => `${head}name = ${newName}${match.endsWith(',') ? ',' : ''}` - ); - - return starlark.slice(0, origPos.end) + `\n\n${mod(withName)}` + starlark.slice(origPos.end); -} - /** @type {import('../lib/command').Command} */ export const command = { name: '_x', - async run({ log }) { - const updates = { pkgJson: 0, buildBazel: 0, tsconfig: 0, tsconfigRefs: 0 }; - - await import('../../../src/setup_node_env/index' + '.js'); - const { PROJECTS } = await import('./projects' + '.js'); - const { discoverBazelPackages } = await import('@kbn/bazel-packages'); - const pkgs = await discoverBazelPackages(REPO_ROOT); - const plugins = await pluginDiscovery(); - - // update package.json files to point to their target_types dir - const relTypes = './target_types/index.d.ts'; - for (const pkg of pkgs) { - if (!pkg.hasBuildTypesRule()) { - log.warning(`not defining "types" for ${pkg.manifest.id} because it doesn't build types`); - continue; - } - - const dir = Path.resolve(REPO_ROOT, pkg.normalizedRepoRelativeDir); - const pkgJsonPath = Path.resolve(dir, 'package.json'); - - const pkgJson = Fs.readFileSync(pkgJsonPath, 'utf8'); - const parsed = JSON.parse(pkgJson); - - if (parsed.types === relTypes) { - continue; - } - - Fs.writeFileSync( - pkgJsonPath, - JSON.stringify( - { - ...parsed, - types: relTypes, - }, - null, - 2 - ) + (pkgJson.endsWith('\n') ? '\n' : '') - ); - - updates.pkgJson += 1; - } - log.success(`updated ${updates.pkgJson} package.json files`); - - // update BUILD.bazel files to not rely on type_summarizer - for (const pkg of pkgs) { - if (!pkg.hasBuildTypesRule()) { - continue; - } - - const starlark = pkg.buildBazelContent; - if (typeof starlark !== 'string') { - throw new Error('missing buildBazelContent'); - } - - const npmTypes = findBazelRule(starlark, '"npm_module_types"'); - - if (npmTypes.type === 'alias') { - log.info(`ignoring npm_module_types rule which is an alias in ${pkg.manifest.id}`); - continue; - } - - // remove rules for old npm_module_types - const withoutOldTypes = removeBazelRule(starlark, '"npm_module_types"'); - - // duplicate js_library rule and name npm_module_types rule which adds the ':tsc_types' dep - const withTypesJsLib = duplicateRule( - withoutOldTypes, - 'PKG_DIRNAME', - '"npm_module_types"', - (newRule) => addDep(newRule, '":tsc_types"') - ); - - const withBuildTypesWrapper = - removeBazelRule(withTypesJsLib, '"build_types"').trimEnd() + - ` - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) -`; - - Fs.writeFileSync( - Path.resolve(REPO_ROOT, pkg.normalizedRepoRelativeDir, 'BUILD.bazel'), - withBuildTypesWrapper - ); - - updates.buildBazel += 1; - } - log.success(`updated ${updates.buildBazel} BUILD.bazel files`); - - // stop enabling declaration source maps in tsconfig - for (const pkg of [...pkgs, ...plugins]) { - const dir = - 'normalizedRepoRelativeDir' in pkg - ? Path.resolve(REPO_ROOT, pkg.normalizedRepoRelativeDir) - : pkg.directory; - - let changed; - - const tsconfigPath = Path.resolve(dir, 'tsconfig.json'); - if (Fs.existsSync(tsconfigPath)) { - const current = Fs.readFileSync(tsconfigPath, 'utf8'); - const next = current.replace(/\n\s*"declarationMap"\s*:.+\n/m, '\n'); - - if (current !== next) { - changed = true; - Fs.writeFileSync(tsconfigPath, next); - } - } - - const buildBazelPath = Path.resolve(dir, 'BUILD.bazel'); - if (Fs.existsSync(buildBazelPath)) { - const current = Fs.readFileSync(buildBazelPath, 'utf8'); - const next = current.replace(/\n.*\bdeclaration_map\b.*\n/, '\n'); - if (current !== next) { - changed = true; - Fs.writeFileSync(buildBazelPath, next); - } - } - - if (changed) { - updates.tsconfig += 1; - } - } - log.success(`dropped declarationMap from ${updates.tsconfig} tsconfig.json files`); - - // rename "references" in plugin tsconfig.json files to "kbn_references" - for (const project of PROJECTS) { - const tsconfigJson = Fs.readFileSync(project.tsConfigPath, 'utf8'); - const updated = tsconfigJson.replace('"references"', '"kbn_references"'); - if (updated !== tsconfigJson) { - Fs.writeFileSync(project.tsConfigPath, updated); - updates.tsconfigRefs += 1; - } - } - log.success(`updated tsconfig references key in ${updates.tsconfigRefs} tsconfig.json files`); - }, + async run() {}, }; diff --git a/kbn_pm/src/lib/bazel.mjs b/kbn_pm/src/lib/bazel.mjs index 7e0256633cfd6..2ec27b359f153 100644 --- a/kbn_pm/src/lib/bazel.mjs +++ b/kbn_pm/src/lib/bazel.mjs @@ -18,6 +18,12 @@ import { indent } from './indent.mjs'; const BAZEL_RUNNER_SRC = '../../../packages/kbn-bazel-runner/index.js'; +const BAZEL_TARGETS = [ + '//packages/kbn-ui-shared-deps-npm:shared_built_assets', + '//packages/kbn-ui-shared-deps-src:shared_built_assets', + '//packages/kbn-monaco:target_workers', +]; + async function getBazelRunner() { /* eslint-disable no-unsanitized/method */ /** @type {import('@kbn/bazel-runner')} */ @@ -83,7 +89,7 @@ export async function watch(log, opts = undefined) { // `.bazel_fix_commands.json` but its not needed at the moment '--run_output=false', 'build', - '//packages:build', + ...BAZEL_TARGETS, '--show_result=1', ...(opts?.offline ? ['--config=offline'] : []), ]; @@ -158,13 +164,13 @@ export async function installYarnDeps(log, opts = undefined) { * @param {import('./log.mjs').Log} log * @param {{ offline?: boolean, quiet?: boolean } | undefined} opts */ -export async function buildPackages(log, opts = undefined) { - await runBazel(log, ['build', '//packages:build', '--show_result=1'], { +export async function buildWebpackBundles(log, opts = undefined) { + await runBazel(log, ['build', ...BAZEL_TARGETS, '--show_result=1'], { offline: opts?.offline, quiet: opts?.quiet, }); - log.success('packages built'); + log.success('shared bundles built'); } /** diff --git a/kbn_pm/src/lib/external_packages.js b/kbn_pm/src/lib/external_packages.js new file mode 100644 index 0000000000000..d984a15dfd026 --- /dev/null +++ b/kbn_pm/src/lib/external_packages.js @@ -0,0 +1,58 @@ +/* + * 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. + */ +module.exports = { + ['@kbn/bazel-packages']() { + require('@kbn/babel-register').install(); + return require('@kbn/bazel-packages'); + }, + + ['@kbn/ci-stats-reporter']() { + require('@kbn/babel-register').install(); + return require('@kbn/ci-stats-reporter'); + }, + + ['@kbn/yarn-lock-validator']() { + require('@kbn/babel-register').install(); + return require('@kbn/yarn-lock-validator'); + }, + + ['@kbn/sort-package-json']() { + require('@kbn/babel-register').install(); + return require('@kbn/sort-package-json'); + }, + + ['@kbn/package-map']() { + require('@kbn/babel-register').install(); + return require('@kbn/package-map'); + }, + + ['@kbn/get-repo-files']() { + require('@kbn/babel-register').install(); + return require('@kbn/get-repo-files'); + }, + + ['@kbn/repo-info']() { + require('@kbn/babel-register').install(); + return require('@kbn/repo-info'); + }, + + ['@kbn/ts-projects']() { + require('@kbn/babel-register').install(); + return require('@kbn/ts-projects'); + }, + + /** + * @param {string} absPath + * @returns {unknown} + */ + reqAbs(absPath) { + require('@kbn/babel-register').install(); + // eslint-disable-next-line import/no-dynamic-require + return require(absPath); + }, +}; diff --git a/kbn_pm/src/lib/find_clean_paths.mjs b/kbn_pm/src/lib/find_clean_paths.mjs index a15118031038b..62874358d4673 100644 --- a/kbn_pm/src/lib/find_clean_paths.mjs +++ b/kbn_pm/src/lib/find_clean_paths.mjs @@ -10,21 +10,20 @@ import Path from 'path'; import Fs from 'fs'; import { REPO_ROOT } from './paths.mjs'; +import External from './external_packages.js'; /** - * Attempt to load the synthetic package map, if bootstrap hasn't run successfully + * Attempt to load the package map, if bootstrap hasn't run successfully * this might fail. * @param {import('@kbn/some-dev-log').SomeDevLog} log - * @returns {Promise} + * @returns {Promise} */ -async function tryToGetSyntheticPackageMap(log) { +async function tryToGetPackageMap(log) { try { - const { readPackageMap } = await import('@kbn/synthetic-package-map'); + const { readPackageMap } = External['@kbn/package-map'](); return readPackageMap(); } catch (error) { - log.warning( - 'unable to load synthetic package map, unable to clean target directories in synthetic packages' - ); + log.warning('unable to load package map, unable to clean target directories in packages'); return new Map(); } } @@ -67,7 +66,7 @@ export function readCleanPatterns(packageDir) { * @returns {Promise} */ export async function findPluginCleanPaths(log) { - const packageMap = await tryToGetSyntheticPackageMap(log); + const packageMap = await tryToGetPackageMap(log); return [...packageMap.values()].flatMap((repoRelativePath) => { const pkgDir = Path.resolve(REPO_ROOT, repoRelativePath); return [Path.resolve(pkgDir, 'target'), ...readCleanPatterns(pkgDir)]; diff --git a/kbn_pm/src/commands/bootstrap/normalize_path.mjs b/kbn_pm/src/lib/normalize_path.mjs similarity index 100% rename from kbn_pm/src/commands/bootstrap/normalize_path.mjs rename to kbn_pm/src/lib/normalize_path.mjs diff --git a/kbn_pm/src/commands/bootstrap/plugins.mjs b/kbn_pm/src/lib/plugins.mjs similarity index 51% rename from kbn_pm/src/commands/bootstrap/plugins.mjs rename to kbn_pm/src/lib/plugins.mjs index b4d48d8ef74ca..01bdbfd41c8e6 100644 --- a/kbn_pm/src/commands/bootstrap/plugins.mjs +++ b/kbn_pm/src/lib/plugins.mjs @@ -6,14 +6,8 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '../../lib/paths.mjs'; - -/** @type {string} */ -const PLUGIN_DISCOVERY_SRC = '../../../../packages/kbn-plugin-discovery/index.js'; - /** * @param {string} pluginId - * @returns {string} */ export function convertPluginIdToPackageId(pluginId) { if (pluginId === 'core') { @@ -28,24 +22,3 @@ export function convertPluginIdToPackageId(pluginId) { .replace(/-\w(-\w)+-/g, (match) => `-${match.split('-').join('')}-`) .replace(/-plugin-plugin$/, '-plugin'); } - -/** - * @returns {Promise} - */ -export async function pluginDiscovery() { - /* eslint-disable no-unsanitized/method */ - /** @type {import('@kbn/plugin-discovery')} */ - const { getPluginSearchPaths, simpleKibanaPlatformPluginDiscovery } = await import( - PLUGIN_DISCOVERY_SRC - ); - /* eslint-enable no-unsanitized/method */ - - const searchPaths = getPluginSearchPaths({ - rootDir: REPO_ROOT, - examples: true, - oss: false, - testPlugins: true, - }); - - return simpleKibanaPlatformPluginDiscovery(searchPaths, []); -} diff --git a/kbn_pm/tsconfig.json b/kbn_pm/tsconfig.json index f8ef60867aca2..78117e296355c 100644 --- a/kbn_pm/tsconfig.json +++ b/kbn_pm/tsconfig.json @@ -1,14 +1,28 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { - "outDir": "target", + "outDir": "target/types", "checkJs": true, - "target": "ES2022", "module": "ESNext" }, "include": [ "src/**/*.mjs", + "src/**/*.js", "src/**/*.ts", ], - "exclude": [] + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/babel-register", + "@kbn/bazel-packages", + "@kbn/repo-info", + "@kbn/yarn-lock-validator", + "@kbn/get-repo-files", + "@kbn/sort-package-json", + { "path": "../src/dev/tsconfig.json" }, + "@kbn/ci-stats-reporter", + "@kbn/package-map", + "@kbn/ts-projects" + ] } diff --git a/package.json b/package.json index 6fc8d8aec7eb9..af670efaa684a 100644 --- a/package.json +++ b/package.json @@ -128,314 +128,315 @@ "@hapi/hoek": "^9.2.1", "@hapi/inert": "^6.0.4", "@hapi/wreck": "^17.1.0", - "@kbn/ace": "link:bazel-bin/packages/kbn-ace", - "@kbn/aiops-components": "link:bazel-bin/x-pack/packages/ml/aiops_components", - "@kbn/aiops-utils": "link:bazel-bin/x-pack/packages/ml/aiops_utils", - "@kbn/alerts": "link:bazel-bin/packages/kbn-alerts", - "@kbn/analytics": "link:bazel-bin/packages/kbn-analytics", - "@kbn/analytics-client": "link:bazel-bin/packages/analytics/client", - "@kbn/analytics-shippers-elastic-v3-browser": "link:bazel-bin/packages/analytics/shippers/elastic_v3/browser", - "@kbn/analytics-shippers-elastic-v3-common": "link:bazel-bin/packages/analytics/shippers/elastic_v3/common", - "@kbn/analytics-shippers-elastic-v3-server": "link:bazel-bin/packages/analytics/shippers/elastic_v3/server", - "@kbn/analytics-shippers-fullstory": "link:bazel-bin/packages/analytics/shippers/fullstory", - "@kbn/analytics-shippers-gainsight": "link:bazel-bin/packages/analytics/shippers/gainsight", - "@kbn/apm-config-loader": "link:bazel-bin/packages/kbn-apm-config-loader", - "@kbn/apm-utils": "link:bazel-bin/packages/kbn-apm-utils", - "@kbn/cases-components": "link:bazel-bin/packages/kbn-cases-components", - "@kbn/chart-icons": "link:bazel-bin/packages/kbn-chart-icons", - "@kbn/coloring": "link:bazel-bin/packages/kbn-coloring", - "@kbn/config": "link:bazel-bin/packages/kbn-config", - "@kbn/config-mocks": "link:bazel-bin/packages/kbn-config-mocks", - "@kbn/config-schema": "link:bazel-bin/packages/kbn-config-schema", + "@kbn/ace": "link:packages/kbn-ace", + "@kbn/aiops-components": "link:x-pack/packages/ml/aiops_components", + "@kbn/aiops-utils": "link:x-pack/packages/ml/aiops_utils", + "@kbn/alerts": "link:packages/kbn-alerts", + "@kbn/analytics": "link:packages/kbn-analytics", + "@kbn/analytics-client": "link:packages/analytics/client", + "@kbn/analytics-shippers-elastic-v3-browser": "link:packages/analytics/shippers/elastic_v3/browser", + "@kbn/analytics-shippers-elastic-v3-common": "link:packages/analytics/shippers/elastic_v3/common", + "@kbn/analytics-shippers-elastic-v3-server": "link:packages/analytics/shippers/elastic_v3/server", + "@kbn/analytics-shippers-fullstory": "link:packages/analytics/shippers/fullstory", + "@kbn/analytics-shippers-gainsight": "link:packages/analytics/shippers/gainsight", + "@kbn/apm-config-loader": "link:packages/kbn-apm-config-loader", + "@kbn/apm-utils": "link:packages/kbn-apm-utils", + "@kbn/cases-components": "link:packages/kbn-cases-components", + "@kbn/chart-icons": "link:packages/kbn-chart-icons", + "@kbn/coloring": "link:packages/kbn-coloring", + "@kbn/config": "link:packages/kbn-config", + "@kbn/config-mocks": "link:packages/kbn-config-mocks", + "@kbn/config-schema": "link:packages/kbn-config-schema", "@kbn/content-management-content-editor": "link:bazel-bin/packages/content-management/content_editor", "@kbn/content-management-table-list": "link:bazel-bin/packages/content-management/table_list", - "@kbn/core-analytics-browser": "link:bazel-bin/packages/core/analytics/core-analytics-browser", - "@kbn/core-analytics-browser-internal": "link:bazel-bin/packages/core/analytics/core-analytics-browser-internal", - "@kbn/core-analytics-browser-mocks": "link:bazel-bin/packages/core/analytics/core-analytics-browser-mocks", - "@kbn/core-analytics-server": "link:bazel-bin/packages/core/analytics/core-analytics-server", - "@kbn/core-analytics-server-internal": "link:bazel-bin/packages/core/analytics/core-analytics-server-internal", - "@kbn/core-analytics-server-mocks": "link:bazel-bin/packages/core/analytics/core-analytics-server-mocks", - "@kbn/core-application-browser": "link:bazel-bin/packages/core/application/core-application-browser", - "@kbn/core-application-browser-internal": "link:bazel-bin/packages/core/application/core-application-browser-internal", - "@kbn/core-application-browser-mocks": "link:bazel-bin/packages/core/application/core-application-browser-mocks", - "@kbn/core-application-common": "link:bazel-bin/packages/core/application/core-application-common", - "@kbn/core-apps-browser-internal": "link:bazel-bin/packages/core/apps/core-apps-browser-internal", - "@kbn/core-apps-browser-mocks": "link:bazel-bin/packages/core/apps/core-apps-browser-mocks", - "@kbn/core-apps-server-internal": "link:bazel-bin/packages/core/apps/core-apps-server-internal", - "@kbn/core-base-browser-internal": "link:bazel-bin/packages/core/base/core-base-browser-internal", - "@kbn/core-base-browser-mocks": "link:bazel-bin/packages/core/base/core-base-browser-mocks", - "@kbn/core-base-common": "link:bazel-bin/packages/core/base/core-base-common", - "@kbn/core-base-common-internal": "link:bazel-bin/packages/core/base/core-base-common-internal", - "@kbn/core-base-server-internal": "link:bazel-bin/packages/core/base/core-base-server-internal", - "@kbn/core-base-server-mocks": "link:bazel-bin/packages/core/base/core-base-server-mocks", - "@kbn/core-capabilities-browser-internal": "link:bazel-bin/packages/core/capabilities/core-capabilities-browser-internal", - "@kbn/core-capabilities-browser-mocks": "link:bazel-bin/packages/core/capabilities/core-capabilities-browser-mocks", - "@kbn/core-capabilities-common": "link:bazel-bin/packages/core/capabilities/core-capabilities-common", - "@kbn/core-capabilities-server": "link:bazel-bin/packages/core/capabilities/core-capabilities-server", - "@kbn/core-capabilities-server-internal": "link:bazel-bin/packages/core/capabilities/core-capabilities-server-internal", - "@kbn/core-capabilities-server-mocks": "link:bazel-bin/packages/core/capabilities/core-capabilities-server-mocks", - "@kbn/core-chrome-browser": "link:bazel-bin/packages/core/chrome/core-chrome-browser", - "@kbn/core-chrome-browser-internal": "link:bazel-bin/packages/core/chrome/core-chrome-browser-internal", - "@kbn/core-chrome-browser-mocks": "link:bazel-bin/packages/core/chrome/core-chrome-browser-mocks", - "@kbn/core-config-server-internal": "link:bazel-bin/packages/core/config/core-config-server-internal", - "@kbn/core-config-server-mocks": "link:bazel-bin/packages/core/config/core-config-server-mocks", - "@kbn/core-deprecations-browser": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser", - "@kbn/core-deprecations-browser-internal": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser-internal", - "@kbn/core-deprecations-browser-mocks": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser-mocks", - "@kbn/core-deprecations-common": "link:bazel-bin/packages/core/deprecations/core-deprecations-common", - "@kbn/core-deprecations-server": "link:bazel-bin/packages/core/deprecations/core-deprecations-server", - "@kbn/core-deprecations-server-internal": "link:bazel-bin/packages/core/deprecations/core-deprecations-server-internal", - "@kbn/core-deprecations-server-mocks": "link:bazel-bin/packages/core/deprecations/core-deprecations-server-mocks", - "@kbn/core-doc-links-browser": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser", - "@kbn/core-doc-links-browser-internal": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser-internal", - "@kbn/core-doc-links-browser-mocks": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser-mocks", - "@kbn/core-doc-links-server": "link:bazel-bin/packages/core/doc-links/core-doc-links-server", - "@kbn/core-doc-links-server-internal": "link:bazel-bin/packages/core/doc-links/core-doc-links-server-internal", - "@kbn/core-doc-links-server-mocks": "link:bazel-bin/packages/core/doc-links/core-doc-links-server-mocks", - "@kbn/core-elasticsearch-client-server": "link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-client-server", - "@kbn/core-elasticsearch-client-server-internal": "link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-client-server-internal", - "@kbn/core-elasticsearch-client-server-mocks": "link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-client-server-mocks", - "@kbn/core-elasticsearch-server": "link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-server", - "@kbn/core-elasticsearch-server-internal": "link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-server-internal", - "@kbn/core-elasticsearch-server-mocks": "link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-server-mocks", - "@kbn/core-environment-server-internal": "link:bazel-bin/packages/core/environment/core-environment-server-internal", - "@kbn/core-environment-server-mocks": "link:bazel-bin/packages/core/environment/core-environment-server-mocks", - "@kbn/core-execution-context-browser": "link:bazel-bin/packages/core/execution-context/core-execution-context-browser", - "@kbn/core-execution-context-browser-internal": "link:bazel-bin/packages/core/execution-context/core-execution-context-browser-internal", - "@kbn/core-execution-context-browser-mocks": "link:bazel-bin/packages/core/execution-context/core-execution-context-browser-mocks", - "@kbn/core-execution-context-common": "link:bazel-bin/packages/core/execution-context/core-execution-context-common", - "@kbn/core-execution-context-server": "link:bazel-bin/packages/core/execution-context/core-execution-context-server", - "@kbn/core-execution-context-server-internal": "link:bazel-bin/packages/core/execution-context/core-execution-context-server-internal", - "@kbn/core-execution-context-server-mocks": "link:bazel-bin/packages/core/execution-context/core-execution-context-server-mocks", - "@kbn/core-fatal-errors-browser": "link:bazel-bin/packages/core/fatal-errors/core-fatal-errors-browser", - "@kbn/core-fatal-errors-browser-internal": "link:bazel-bin/packages/core/fatal-errors/core-fatal-errors-browser-internal", - "@kbn/core-fatal-errors-browser-mocks": "link:bazel-bin/packages/core/fatal-errors/core-fatal-errors-browser-mocks", - "@kbn/core-http-browser": "link:bazel-bin/packages/core/http/core-http-browser", - "@kbn/core-http-browser-internal": "link:bazel-bin/packages/core/http/core-http-browser-internal", - "@kbn/core-http-browser-mocks": "link:bazel-bin/packages/core/http/core-http-browser-mocks", - "@kbn/core-http-common": "link:bazel-bin/packages/core/http/core-http-common", - "@kbn/core-http-context-server-internal": "link:bazel-bin/packages/core/http/core-http-context-server-internal", - "@kbn/core-http-context-server-mocks": "link:bazel-bin/packages/core/http/core-http-context-server-mocks", - "@kbn/core-http-request-handler-context-server": "link:bazel-bin/packages/core/http/core-http-request-handler-context-server", - "@kbn/core-http-request-handler-context-server-internal": "link:bazel-bin/packages/core/http/core-http-request-handler-context-server-internal", - "@kbn/core-http-resources-server": "link:bazel-bin/packages/core/http/core-http-resources-server", - "@kbn/core-http-resources-server-internal": "link:bazel-bin/packages/core/http/core-http-resources-server-internal", - "@kbn/core-http-resources-server-mocks": "link:bazel-bin/packages/core/http/core-http-resources-server-mocks", - "@kbn/core-http-router-server-internal": "link:bazel-bin/packages/core/http/core-http-router-server-internal", - "@kbn/core-http-router-server-mocks": "link:bazel-bin/packages/core/http/core-http-router-server-mocks", - "@kbn/core-http-server": "link:bazel-bin/packages/core/http/core-http-server", - "@kbn/core-http-server-internal": "link:bazel-bin/packages/core/http/core-http-server-internal", - "@kbn/core-http-server-mocks": "link:bazel-bin/packages/core/http/core-http-server-mocks", - "@kbn/core-i18n-browser": "link:bazel-bin/packages/core/i18n/core-i18n-browser", - "@kbn/core-i18n-browser-internal": "link:bazel-bin/packages/core/i18n/core-i18n-browser-internal", - "@kbn/core-i18n-browser-mocks": "link:bazel-bin/packages/core/i18n/core-i18n-browser-mocks", - "@kbn/core-i18n-server": "link:bazel-bin/packages/core/i18n/core-i18n-server", - "@kbn/core-i18n-server-internal": "link:bazel-bin/packages/core/i18n/core-i18n-server-internal", - "@kbn/core-i18n-server-mocks": "link:bazel-bin/packages/core/i18n/core-i18n-server-mocks", - "@kbn/core-injected-metadata-browser-internal": "link:bazel-bin/packages/core/injected-metadata/core-injected-metadata-browser-internal", - "@kbn/core-injected-metadata-browser-mocks": "link:bazel-bin/packages/core/injected-metadata/core-injected-metadata-browser-mocks", - "@kbn/core-injected-metadata-common-internal": "link:bazel-bin/packages/core/injected-metadata/core-injected-metadata-common-internal", - "@kbn/core-integrations-browser-internal": "link:bazel-bin/packages/core/integrations/core-integrations-browser-internal", - "@kbn/core-integrations-browser-mocks": "link:bazel-bin/packages/core/integrations/core-integrations-browser-mocks", - "@kbn/core-lifecycle-browser": "link:bazel-bin/packages/core/lifecycle/core-lifecycle-browser", - "@kbn/core-lifecycle-browser-internal": "link:bazel-bin/packages/core/lifecycle/core-lifecycle-browser-internal", - "@kbn/core-lifecycle-browser-mocks": "link:bazel-bin/packages/core/lifecycle/core-lifecycle-browser-mocks", - "@kbn/core-lifecycle-server": "link:bazel-bin/packages/core/lifecycle/core-lifecycle-server", - "@kbn/core-lifecycle-server-internal": "link:bazel-bin/packages/core/lifecycle/core-lifecycle-server-internal", - "@kbn/core-lifecycle-server-mocks": "link:bazel-bin/packages/core/lifecycle/core-lifecycle-server-mocks", - "@kbn/core-logging-browser-internal": "link:bazel-bin/packages/core/logging/core-logging-browser-internal", - "@kbn/core-logging-browser-mocks": "link:bazel-bin/packages/core/logging/core-logging-browser-mocks", - "@kbn/core-logging-common-internal": "link:bazel-bin/packages/core/logging/core-logging-common-internal", - "@kbn/core-logging-server": "link:bazel-bin/packages/core/logging/core-logging-server", - "@kbn/core-logging-server-internal": "link:bazel-bin/packages/core/logging/core-logging-server-internal", - "@kbn/core-logging-server-mocks": "link:bazel-bin/packages/core/logging/core-logging-server-mocks", - "@kbn/core-metrics-collectors-server-internal": "link:bazel-bin/packages/core/metrics/core-metrics-collectors-server-internal", - "@kbn/core-metrics-collectors-server-mocks": "link:bazel-bin/packages/core/metrics/core-metrics-collectors-server-mocks", - "@kbn/core-metrics-server": "link:bazel-bin/packages/core/metrics/core-metrics-server", - "@kbn/core-metrics-server-internal": "link:bazel-bin/packages/core/metrics/core-metrics-server-internal", - "@kbn/core-metrics-server-mocks": "link:bazel-bin/packages/core/metrics/core-metrics-server-mocks", - "@kbn/core-mount-utils-browser": "link:bazel-bin/packages/core/mount-utils/core-mount-utils-browser", - "@kbn/core-mount-utils-browser-internal": "link:bazel-bin/packages/core/mount-utils/core-mount-utils-browser-internal", - "@kbn/core-node-server": "link:bazel-bin/packages/core/node/core-node-server", - "@kbn/core-node-server-internal": "link:bazel-bin/packages/core/node/core-node-server-internal", - "@kbn/core-node-server-mocks": "link:bazel-bin/packages/core/node/core-node-server-mocks", - "@kbn/core-notifications-browser": "link:bazel-bin/packages/core/notifications/core-notifications-browser", - "@kbn/core-notifications-browser-internal": "link:bazel-bin/packages/core/notifications/core-notifications-browser-internal", - "@kbn/core-notifications-browser-mocks": "link:bazel-bin/packages/core/notifications/core-notifications-browser-mocks", - "@kbn/core-overlays-browser": "link:bazel-bin/packages/core/overlays/core-overlays-browser", - "@kbn/core-overlays-browser-internal": "link:bazel-bin/packages/core/overlays/core-overlays-browser-internal", - "@kbn/core-overlays-browser-mocks": "link:bazel-bin/packages/core/overlays/core-overlays-browser-mocks", - "@kbn/core-plugins-base-server-internal": "link:bazel-bin/packages/core/plugins/core-plugins-base-server-internal", - "@kbn/core-plugins-browser": "link:bazel-bin/packages/core/plugins/core-plugins-browser", - "@kbn/core-plugins-browser-internal": "link:bazel-bin/packages/core/plugins/core-plugins-browser-internal", - "@kbn/core-plugins-browser-mocks": "link:bazel-bin/packages/core/plugins/core-plugins-browser-mocks", - "@kbn/core-plugins-server": "link:bazel-bin/packages/core/plugins/core-plugins-server", - "@kbn/core-plugins-server-internal": "link:bazel-bin/packages/core/plugins/core-plugins-server-internal", - "@kbn/core-plugins-server-mocks": "link:bazel-bin/packages/core/plugins/core-plugins-server-mocks", - "@kbn/core-preboot-server": "link:bazel-bin/packages/core/preboot/core-preboot-server", - "@kbn/core-preboot-server-internal": "link:bazel-bin/packages/core/preboot/core-preboot-server-internal", - "@kbn/core-preboot-server-mocks": "link:bazel-bin/packages/core/preboot/core-preboot-server-mocks", - "@kbn/core-rendering-browser-internal": "link:bazel-bin/packages/core/rendering/core-rendering-browser-internal", - "@kbn/core-rendering-browser-mocks": "link:bazel-bin/packages/core/rendering/core-rendering-browser-mocks", - "@kbn/core-rendering-server-internal": "link:bazel-bin/packages/core/rendering/core-rendering-server-internal", - "@kbn/core-rendering-server-mocks": "link:bazel-bin/packages/core/rendering/core-rendering-server-mocks", - "@kbn/core-root-browser-internal": "link:bazel-bin/packages/core/root/core-root-browser-internal", - "@kbn/core-root-server-internal": "link:bazel-bin/packages/core/root/core-root-server-internal", - "@kbn/core-saved-objects-api-browser": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-api-browser", - "@kbn/core-saved-objects-api-server": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-api-server", - "@kbn/core-saved-objects-api-server-internal": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-api-server-internal", - "@kbn/core-saved-objects-api-server-mocks": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-api-server-mocks", - "@kbn/core-saved-objects-base-server-internal": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-base-server-internal", - "@kbn/core-saved-objects-base-server-mocks": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-base-server-mocks", - "@kbn/core-saved-objects-browser": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-browser", - "@kbn/core-saved-objects-browser-internal": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-browser-internal", - "@kbn/core-saved-objects-browser-mocks": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-browser-mocks", - "@kbn/core-saved-objects-common": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-common", - "@kbn/core-saved-objects-import-export-server-internal": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-import-export-server-internal", - "@kbn/core-saved-objects-import-export-server-mocks": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-import-export-server-mocks", - "@kbn/core-saved-objects-migration-server-internal": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-migration-server-internal", - "@kbn/core-saved-objects-migration-server-mocks": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-migration-server-mocks", - "@kbn/core-saved-objects-server": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-server", - "@kbn/core-saved-objects-server-internal": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-server-internal", - "@kbn/core-saved-objects-server-mocks": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-server-mocks", - "@kbn/core-saved-objects-utils-server": "link:bazel-bin/packages/core/saved-objects/core-saved-objects-utils-server", - "@kbn/core-status-common": "link:bazel-bin/packages/core/status/core-status-common", - "@kbn/core-status-common-internal": "link:bazel-bin/packages/core/status/core-status-common-internal", - "@kbn/core-status-server": "link:bazel-bin/packages/core/status/core-status-server", - "@kbn/core-status-server-internal": "link:bazel-bin/packages/core/status/core-status-server-internal", - "@kbn/core-status-server-mocks": "link:bazel-bin/packages/core/status/core-status-server-mocks", - "@kbn/core-test-helpers-deprecations-getters": "link:bazel-bin/packages/core/test-helpers/core-test-helpers-deprecations-getters", - "@kbn/core-test-helpers-http-setup-browser": "link:bazel-bin/packages/core/test-helpers/core-test-helpers-http-setup-browser", - "@kbn/core-test-helpers-so-type-serializer": "link:bazel-bin/packages/core/test-helpers/core-test-helpers-so-type-serializer", - "@kbn/core-test-helpers-test-utils": "link:bazel-bin/packages/core/test-helpers/core-test-helpers-test-utils", - "@kbn/core-theme-browser": "link:bazel-bin/packages/core/theme/core-theme-browser", - "@kbn/core-theme-browser-internal": "link:bazel-bin/packages/core/theme/core-theme-browser-internal", - "@kbn/core-theme-browser-mocks": "link:bazel-bin/packages/core/theme/core-theme-browser-mocks", - "@kbn/core-ui-settings-browser": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser", - "@kbn/core-ui-settings-browser-internal": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-internal", - "@kbn/core-ui-settings-browser-mocks": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-mocks", - "@kbn/core-ui-settings-common": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-common", - "@kbn/core-ui-settings-server": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-server", - "@kbn/core-ui-settings-server-internal": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-server-internal", - "@kbn/core-ui-settings-server-mocks": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-server-mocks", - "@kbn/core-usage-data-base-server-internal": "link:bazel-bin/packages/core/usage-data/core-usage-data-base-server-internal", - "@kbn/core-usage-data-server": "link:bazel-bin/packages/core/usage-data/core-usage-data-server", - "@kbn/core-usage-data-server-internal": "link:bazel-bin/packages/core/usage-data/core-usage-data-server-internal", - "@kbn/core-usage-data-server-mocks": "link:bazel-bin/packages/core/usage-data/core-usage-data-server-mocks", - "@kbn/crypto": "link:bazel-bin/packages/kbn-crypto", - "@kbn/crypto-browser": "link:bazel-bin/packages/kbn-crypto-browser", - "@kbn/datemath": "link:bazel-bin/packages/kbn-datemath", - "@kbn/doc-links": "link:bazel-bin/packages/kbn-doc-links", - "@kbn/ebt-tools": "link:bazel-bin/packages/kbn-ebt-tools", - "@kbn/ecs": "link:bazel-bin/packages/kbn-ecs", - "@kbn/es-errors": "link:bazel-bin/packages/kbn-es-errors", - "@kbn/es-query": "link:bazel-bin/packages/kbn-es-query", - "@kbn/es-types": "link:bazel-bin/packages/kbn-es-types", - "@kbn/field-types": "link:bazel-bin/packages/kbn-field-types", - "@kbn/flot-charts": "link:bazel-bin/packages/kbn-flot-charts", - "@kbn/guided-onboarding": "link:bazel-bin/packages/kbn-guided-onboarding", - "@kbn/handlebars": "link:bazel-bin/packages/kbn-handlebars", - "@kbn/hapi-mocks": "link:bazel-bin/packages/kbn-hapi-mocks", - "@kbn/health-gateway-server": "link:bazel-bin/packages/kbn-health-gateway-server", - "@kbn/home-sample-data-card": "link:bazel-bin/packages/home/sample_data_card", - "@kbn/home-sample-data-tab": "link:bazel-bin/packages/home/sample_data_tab", - "@kbn/home-sample-data-types": "link:bazel-bin/packages/home/sample_data_types", - "@kbn/i18n": "link:bazel-bin/packages/kbn-i18n", - "@kbn/i18n-react": "link:bazel-bin/packages/kbn-i18n-react", - "@kbn/interpreter": "link:bazel-bin/packages/kbn-interpreter", - "@kbn/io-ts-utils": "link:bazel-bin/packages/kbn-io-ts-utils", - "@kbn/language-documentation-popover": "link:bazel-bin/packages/kbn-language-documentation-popover", - "@kbn/logging": "link:bazel-bin/packages/kbn-logging", - "@kbn/logging-mocks": "link:bazel-bin/packages/kbn-logging-mocks", - "@kbn/mapbox-gl": "link:bazel-bin/packages/kbn-mapbox-gl", - "@kbn/ml-agg-utils": "link:bazel-bin/x-pack/packages/ml/agg_utils", - "@kbn/ml-is-populated-object": "link:bazel-bin/x-pack/packages/ml/is_populated_object", - "@kbn/ml-string-hash": "link:bazel-bin/x-pack/packages/ml/string_hash", - "@kbn/monaco": "link:bazel-bin/packages/kbn-monaco", - "@kbn/osquery-io-ts-types": "link:bazel-bin/packages/kbn-osquery-io-ts-types", - "@kbn/plugin-discovery": "link:bazel-bin/packages/kbn-plugin-discovery", - "@kbn/react-field": "link:bazel-bin/packages/kbn-react-field", - "@kbn/rison": "link:bazel-bin/packages/kbn-rison", - "@kbn/rule-data-utils": "link:bazel-bin/packages/kbn-rule-data-utils", - "@kbn/safer-lodash-set": "link:bazel-bin/packages/kbn-safer-lodash-set", - "@kbn/securitysolution-autocomplete": "link:bazel-bin/packages/kbn-securitysolution-autocomplete", - "@kbn/securitysolution-es-utils": "link:bazel-bin/packages/kbn-securitysolution-es-utils", - "@kbn/securitysolution-exception-list-components": "link:bazel-bin/packages/kbn-securitysolution-exception-list-components", - "@kbn/securitysolution-hook-utils": "link:bazel-bin/packages/kbn-securitysolution-hook-utils", - "@kbn/securitysolution-io-ts-alerting-types": "link:bazel-bin/packages/kbn-securitysolution-io-ts-alerting-types", - "@kbn/securitysolution-io-ts-list-types": "link:bazel-bin/packages/kbn-securitysolution-io-ts-list-types", - "@kbn/securitysolution-io-ts-types": "link:bazel-bin/packages/kbn-securitysolution-io-ts-types", - "@kbn/securitysolution-io-ts-utils": "link:bazel-bin/packages/kbn-securitysolution-io-ts-utils", - "@kbn/securitysolution-list-api": "link:bazel-bin/packages/kbn-securitysolution-list-api", - "@kbn/securitysolution-list-constants": "link:bazel-bin/packages/kbn-securitysolution-list-constants", - "@kbn/securitysolution-list-hooks": "link:bazel-bin/packages/kbn-securitysolution-list-hooks", - "@kbn/securitysolution-list-utils": "link:bazel-bin/packages/kbn-securitysolution-list-utils", - "@kbn/securitysolution-rules": "link:bazel-bin/packages/kbn-securitysolution-rules", - "@kbn/securitysolution-t-grid": "link:bazel-bin/packages/kbn-securitysolution-t-grid", - "@kbn/securitysolution-utils": "link:bazel-bin/packages/kbn-securitysolution-utils", - "@kbn/server-http-tools": "link:bazel-bin/packages/kbn-server-http-tools", - "@kbn/server-route-repository": "link:bazel-bin/packages/kbn-server-route-repository", - "@kbn/shared-svg": "link:bazel-bin/packages/kbn-shared-svg", - "@kbn/shared-ux-avatar-solution": "link:bazel-bin/packages/shared-ux/avatar/solution", - "@kbn/shared-ux-avatar-user-profile-components": "link:bazel-bin/packages/shared-ux/avatar/user_profile/impl", - "@kbn/shared-ux-button-exit-full-screen": "link:bazel-bin/packages/shared-ux/button/exit_full_screen/impl", - "@kbn/shared-ux-button-exit-full-screen-mocks": "link:bazel-bin/packages/shared-ux/button/exit_full_screen/mocks", - "@kbn/shared-ux-button-exit-full-screen-types": "link:bazel-bin/packages/shared-ux/button/exit_full_screen/types", - "@kbn/shared-ux-button-toolbar": "link:bazel-bin/packages/shared-ux/button_toolbar", - "@kbn/shared-ux-card-no-data": "link:bazel-bin/packages/shared-ux/card/no_data/impl", - "@kbn/shared-ux-card-no-data-mocks": "link:bazel-bin/packages/shared-ux/card/no_data/mocks", - "@kbn/shared-ux-card-no-data-types": "link:bazel-bin/packages/shared-ux/card/no_data/types", - "@kbn/shared-ux-file-context": "link:bazel-bin/packages/shared-ux/file/context", - "@kbn/shared-ux-file-image": "link:bazel-bin/packages/shared-ux/file/image/impl", - "@kbn/shared-ux-file-image-mocks": "link:bazel-bin/packages/shared-ux/file/image/mocks", - "@kbn/shared-ux-file-mocks": "link:bazel-bin/packages/shared-ux/file/mocks", - "@kbn/shared-ux-file-picker": "link:bazel-bin/packages/shared-ux/file/file_picker/impl", - "@kbn/shared-ux-file-types": "link:bazel-bin/packages/shared-ux/file/types", - "@kbn/shared-ux-file-upload": "link:bazel-bin/packages/shared-ux/file/file_upload/impl", - "@kbn/shared-ux-file-util": "link:bazel-bin/packages/shared-ux/file/util", - "@kbn/shared-ux-link-redirect-app": "link:bazel-bin/packages/shared-ux/link/redirect_app/impl", - "@kbn/shared-ux-link-redirect-app-mocks": "link:bazel-bin/packages/shared-ux/link/redirect_app/mocks", - "@kbn/shared-ux-link-redirect-app-types": "link:bazel-bin/packages/shared-ux/link/redirect_app/types", - "@kbn/shared-ux-markdown": "link:bazel-bin/packages/shared-ux/markdown/impl", - "@kbn/shared-ux-markdown-mocks": "link:bazel-bin/packages/shared-ux/markdown/mocks", - "@kbn/shared-ux-markdown-types": "link:bazel-bin/packages/shared-ux/markdown/types", - "@kbn/shared-ux-page-analytics-no-data": "link:bazel-bin/packages/shared-ux/page/analytics_no_data/impl", - "@kbn/shared-ux-page-analytics-no-data-mocks": "link:bazel-bin/packages/shared-ux/page/analytics_no_data/mocks", - "@kbn/shared-ux-page-analytics-no-data-types": "link:bazel-bin/packages/shared-ux/page/analytics_no_data/types", - "@kbn/shared-ux-page-kibana-no-data": "link:bazel-bin/packages/shared-ux/page/kibana_no_data/impl", - "@kbn/shared-ux-page-kibana-no-data-mocks": "link:bazel-bin/packages/shared-ux/page/kibana_no_data/mocks", - "@kbn/shared-ux-page-kibana-no-data-types": "link:bazel-bin/packages/shared-ux/page/kibana_no_data/types", - "@kbn/shared-ux-page-kibana-template": "link:bazel-bin/packages/shared-ux/page/kibana_template/impl", - "@kbn/shared-ux-page-kibana-template-mocks": "link:bazel-bin/packages/shared-ux/page/kibana_template/mocks", - "@kbn/shared-ux-page-kibana-template-types": "link:bazel-bin/packages/shared-ux/page/kibana_template/types", - "@kbn/shared-ux-page-no-data": "link:bazel-bin/packages/shared-ux/page/no_data/impl", - "@kbn/shared-ux-page-no-data-config": "link:bazel-bin/packages/shared-ux/page/no_data_config/impl", - "@kbn/shared-ux-page-no-data-config-mocks": "link:bazel-bin/packages/shared-ux/page/no_data_config/mocks", - "@kbn/shared-ux-page-no-data-config-types": "link:bazel-bin/packages/shared-ux/page/no_data_config/types", - "@kbn/shared-ux-page-no-data-mocks": "link:bazel-bin/packages/shared-ux/page/no_data/mocks", - "@kbn/shared-ux-page-no-data-types": "link:bazel-bin/packages/shared-ux/page/no_data/types", - "@kbn/shared-ux-page-solution-nav": "link:bazel-bin/packages/shared-ux/page/solution_nav", - "@kbn/shared-ux-prompt-no-data-views": "link:bazel-bin/packages/shared-ux/prompt/no_data_views/impl", - "@kbn/shared-ux-prompt-no-data-views-mocks": "link:bazel-bin/packages/shared-ux/prompt/no_data_views/mocks", - "@kbn/shared-ux-prompt-no-data-views-types": "link:bazel-bin/packages/shared-ux/prompt/no_data_views/types", - "@kbn/shared-ux-prompt-not-found": "link:bazel-bin/packages/shared-ux/prompt/not_found", - "@kbn/shared-ux-router-mocks": "link:bazel-bin/packages/shared-ux/router/mocks", - "@kbn/shared-ux-services": "link:bazel-bin/packages/kbn-shared-ux-services", - "@kbn/shared-ux-storybook": "link:bazel-bin/packages/kbn-shared-ux-storybook", - "@kbn/shared-ux-storybook-mock": "link:bazel-bin/packages/shared-ux/storybook/mock", - "@kbn/shared-ux-utility": "link:bazel-bin/packages/kbn-shared-ux-utility", - "@kbn/std": "link:bazel-bin/packages/kbn-std", - "@kbn/timelion-grammar": "link:bazel-bin/packages/kbn-timelion-grammar", - "@kbn/tinymath": "link:bazel-bin/packages/kbn-tinymath", - "@kbn/typed-react-router-config": "link:bazel-bin/packages/kbn-typed-react-router-config", - "@kbn/ui-framework": "link:bazel-bin/packages/kbn-ui-framework", - "@kbn/ui-shared-deps-npm": "link:bazel-bin/packages/kbn-ui-shared-deps-npm", - "@kbn/ui-shared-deps-src": "link:bazel-bin/packages/kbn-ui-shared-deps-src", - "@kbn/ui-theme": "link:bazel-bin/packages/kbn-ui-theme", - "@kbn/user-profile-components": "link:bazel-bin/packages/kbn-user-profile-components", - "@kbn/utility-types": "link:bazel-bin/packages/kbn-utility-types", - "@kbn/utility-types-jest": "link:bazel-bin/packages/kbn-utility-types-jest", - "@kbn/utils": "link:bazel-bin/packages/kbn-utils", + "@kbn/core-analytics-browser": "link:packages/core/analytics/core-analytics-browser", + "@kbn/core-analytics-browser-internal": "link:packages/core/analytics/core-analytics-browser-internal", + "@kbn/core-analytics-browser-mocks": "link:packages/core/analytics/core-analytics-browser-mocks", + "@kbn/core-analytics-server": "link:packages/core/analytics/core-analytics-server", + "@kbn/core-analytics-server-internal": "link:packages/core/analytics/core-analytics-server-internal", + "@kbn/core-analytics-server-mocks": "link:packages/core/analytics/core-analytics-server-mocks", + "@kbn/core-application-browser": "link:packages/core/application/core-application-browser", + "@kbn/core-application-browser-internal": "link:packages/core/application/core-application-browser-internal", + "@kbn/core-application-browser-mocks": "link:packages/core/application/core-application-browser-mocks", + "@kbn/core-application-common": "link:packages/core/application/core-application-common", + "@kbn/core-apps-browser-internal": "link:packages/core/apps/core-apps-browser-internal", + "@kbn/core-apps-browser-mocks": "link:packages/core/apps/core-apps-browser-mocks", + "@kbn/core-apps-server-internal": "link:packages/core/apps/core-apps-server-internal", + "@kbn/core-base-browser-internal": "link:packages/core/base/core-base-browser-internal", + "@kbn/core-base-browser-mocks": "link:packages/core/base/core-base-browser-mocks", + "@kbn/core-base-common": "link:packages/core/base/core-base-common", + "@kbn/core-base-common-internal": "link:packages/core/base/core-base-common-internal", + "@kbn/core-base-server-internal": "link:packages/core/base/core-base-server-internal", + "@kbn/core-base-server-mocks": "link:packages/core/base/core-base-server-mocks", + "@kbn/core-capabilities-browser-internal": "link:packages/core/capabilities/core-capabilities-browser-internal", + "@kbn/core-capabilities-browser-mocks": "link:packages/core/capabilities/core-capabilities-browser-mocks", + "@kbn/core-capabilities-common": "link:packages/core/capabilities/core-capabilities-common", + "@kbn/core-capabilities-server": "link:packages/core/capabilities/core-capabilities-server", + "@kbn/core-capabilities-server-internal": "link:packages/core/capabilities/core-capabilities-server-internal", + "@kbn/core-capabilities-server-mocks": "link:packages/core/capabilities/core-capabilities-server-mocks", + "@kbn/core-chrome-browser": "link:packages/core/chrome/core-chrome-browser", + "@kbn/core-chrome-browser-internal": "link:packages/core/chrome/core-chrome-browser-internal", + "@kbn/core-chrome-browser-mocks": "link:packages/core/chrome/core-chrome-browser-mocks", + "@kbn/core-config-server-internal": "link:packages/core/config/core-config-server-internal", + "@kbn/core-config-server-mocks": "link:packages/core/config/core-config-server-mocks", + "@kbn/core-deprecations-browser": "link:packages/core/deprecations/core-deprecations-browser", + "@kbn/core-deprecations-browser-internal": "link:packages/core/deprecations/core-deprecations-browser-internal", + "@kbn/core-deprecations-browser-mocks": "link:packages/core/deprecations/core-deprecations-browser-mocks", + "@kbn/core-deprecations-common": "link:packages/core/deprecations/core-deprecations-common", + "@kbn/core-deprecations-server": "link:packages/core/deprecations/core-deprecations-server", + "@kbn/core-deprecations-server-internal": "link:packages/core/deprecations/core-deprecations-server-internal", + "@kbn/core-deprecations-server-mocks": "link:packages/core/deprecations/core-deprecations-server-mocks", + "@kbn/core-doc-links-browser": "link:packages/core/doc-links/core-doc-links-browser", + "@kbn/core-doc-links-browser-internal": "link:packages/core/doc-links/core-doc-links-browser-internal", + "@kbn/core-doc-links-browser-mocks": "link:packages/core/doc-links/core-doc-links-browser-mocks", + "@kbn/core-doc-links-server": "link:packages/core/doc-links/core-doc-links-server", + "@kbn/core-doc-links-server-internal": "link:packages/core/doc-links/core-doc-links-server-internal", + "@kbn/core-doc-links-server-mocks": "link:packages/core/doc-links/core-doc-links-server-mocks", + "@kbn/core-elasticsearch-client-server": "link:packages/core/elasticsearch/core-elasticsearch-client-server", + "@kbn/core-elasticsearch-client-server-internal": "link:packages/core/elasticsearch/core-elasticsearch-client-server-internal", + "@kbn/core-elasticsearch-client-server-mocks": "link:packages/core/elasticsearch/core-elasticsearch-client-server-mocks", + "@kbn/core-elasticsearch-server": "link:packages/core/elasticsearch/core-elasticsearch-server", + "@kbn/core-elasticsearch-server-internal": "link:packages/core/elasticsearch/core-elasticsearch-server-internal", + "@kbn/core-elasticsearch-server-mocks": "link:packages/core/elasticsearch/core-elasticsearch-server-mocks", + "@kbn/core-environment-server-internal": "link:packages/core/environment/core-environment-server-internal", + "@kbn/core-environment-server-mocks": "link:packages/core/environment/core-environment-server-mocks", + "@kbn/core-execution-context-browser": "link:packages/core/execution-context/core-execution-context-browser", + "@kbn/core-execution-context-browser-internal": "link:packages/core/execution-context/core-execution-context-browser-internal", + "@kbn/core-execution-context-browser-mocks": "link:packages/core/execution-context/core-execution-context-browser-mocks", + "@kbn/core-execution-context-common": "link:packages/core/execution-context/core-execution-context-common", + "@kbn/core-execution-context-server": "link:packages/core/execution-context/core-execution-context-server", + "@kbn/core-execution-context-server-internal": "link:packages/core/execution-context/core-execution-context-server-internal", + "@kbn/core-execution-context-server-mocks": "link:packages/core/execution-context/core-execution-context-server-mocks", + "@kbn/core-fatal-errors-browser": "link:packages/core/fatal-errors/core-fatal-errors-browser", + "@kbn/core-fatal-errors-browser-internal": "link:packages/core/fatal-errors/core-fatal-errors-browser-internal", + "@kbn/core-fatal-errors-browser-mocks": "link:packages/core/fatal-errors/core-fatal-errors-browser-mocks", + "@kbn/core-http-browser": "link:packages/core/http/core-http-browser", + "@kbn/core-http-browser-internal": "link:packages/core/http/core-http-browser-internal", + "@kbn/core-http-browser-mocks": "link:packages/core/http/core-http-browser-mocks", + "@kbn/core-http-common": "link:packages/core/http/core-http-common", + "@kbn/core-http-context-server-internal": "link:packages/core/http/core-http-context-server-internal", + "@kbn/core-http-context-server-mocks": "link:packages/core/http/core-http-context-server-mocks", + "@kbn/core-http-request-handler-context-server": "link:packages/core/http/core-http-request-handler-context-server", + "@kbn/core-http-request-handler-context-server-internal": "link:packages/core/http/core-http-request-handler-context-server-internal", + "@kbn/core-http-resources-server": "link:packages/core/http/core-http-resources-server", + "@kbn/core-http-resources-server-internal": "link:packages/core/http/core-http-resources-server-internal", + "@kbn/core-http-resources-server-mocks": "link:packages/core/http/core-http-resources-server-mocks", + "@kbn/core-http-router-server-internal": "link:packages/core/http/core-http-router-server-internal", + "@kbn/core-http-router-server-mocks": "link:packages/core/http/core-http-router-server-mocks", + "@kbn/core-http-server": "link:packages/core/http/core-http-server", + "@kbn/core-http-server-internal": "link:packages/core/http/core-http-server-internal", + "@kbn/core-http-server-mocks": "link:packages/core/http/core-http-server-mocks", + "@kbn/core-i18n-browser": "link:packages/core/i18n/core-i18n-browser", + "@kbn/core-i18n-browser-internal": "link:packages/core/i18n/core-i18n-browser-internal", + "@kbn/core-i18n-browser-mocks": "link:packages/core/i18n/core-i18n-browser-mocks", + "@kbn/core-i18n-server": "link:packages/core/i18n/core-i18n-server", + "@kbn/core-i18n-server-internal": "link:packages/core/i18n/core-i18n-server-internal", + "@kbn/core-i18n-server-mocks": "link:packages/core/i18n/core-i18n-server-mocks", + "@kbn/core-injected-metadata-browser-internal": "link:packages/core/injected-metadata/core-injected-metadata-browser-internal", + "@kbn/core-injected-metadata-browser-mocks": "link:packages/core/injected-metadata/core-injected-metadata-browser-mocks", + "@kbn/core-injected-metadata-common-internal": "link:packages/core/injected-metadata/core-injected-metadata-common-internal", + "@kbn/core-integrations-browser-internal": "link:packages/core/integrations/core-integrations-browser-internal", + "@kbn/core-integrations-browser-mocks": "link:packages/core/integrations/core-integrations-browser-mocks", + "@kbn/core-lifecycle-browser": "link:packages/core/lifecycle/core-lifecycle-browser", + "@kbn/core-lifecycle-browser-internal": "link:packages/core/lifecycle/core-lifecycle-browser-internal", + "@kbn/core-lifecycle-browser-mocks": "link:packages/core/lifecycle/core-lifecycle-browser-mocks", + "@kbn/core-lifecycle-server": "link:packages/core/lifecycle/core-lifecycle-server", + "@kbn/core-lifecycle-server-internal": "link:packages/core/lifecycle/core-lifecycle-server-internal", + "@kbn/core-lifecycle-server-mocks": "link:packages/core/lifecycle/core-lifecycle-server-mocks", + "@kbn/core-logging-browser-internal": "link:packages/core/logging/core-logging-browser-internal", + "@kbn/core-logging-browser-mocks": "link:packages/core/logging/core-logging-browser-mocks", + "@kbn/core-logging-common-internal": "link:packages/core/logging/core-logging-common-internal", + "@kbn/core-logging-server": "link:packages/core/logging/core-logging-server", + "@kbn/core-logging-server-internal": "link:packages/core/logging/core-logging-server-internal", + "@kbn/core-logging-server-mocks": "link:packages/core/logging/core-logging-server-mocks", + "@kbn/core-metrics-collectors-server-internal": "link:packages/core/metrics/core-metrics-collectors-server-internal", + "@kbn/core-metrics-collectors-server-mocks": "link:packages/core/metrics/core-metrics-collectors-server-mocks", + "@kbn/core-metrics-server": "link:packages/core/metrics/core-metrics-server", + "@kbn/core-metrics-server-internal": "link:packages/core/metrics/core-metrics-server-internal", + "@kbn/core-metrics-server-mocks": "link:packages/core/metrics/core-metrics-server-mocks", + "@kbn/core-mount-utils-browser": "link:packages/core/mount-utils/core-mount-utils-browser", + "@kbn/core-mount-utils-browser-internal": "link:packages/core/mount-utils/core-mount-utils-browser-internal", + "@kbn/core-node-server": "link:packages/core/node/core-node-server", + "@kbn/core-node-server-internal": "link:packages/core/node/core-node-server-internal", + "@kbn/core-node-server-mocks": "link:packages/core/node/core-node-server-mocks", + "@kbn/core-notifications-browser": "link:packages/core/notifications/core-notifications-browser", + "@kbn/core-notifications-browser-internal": "link:packages/core/notifications/core-notifications-browser-internal", + "@kbn/core-notifications-browser-mocks": "link:packages/core/notifications/core-notifications-browser-mocks", + "@kbn/core-overlays-browser": "link:packages/core/overlays/core-overlays-browser", + "@kbn/core-overlays-browser-internal": "link:packages/core/overlays/core-overlays-browser-internal", + "@kbn/core-overlays-browser-mocks": "link:packages/core/overlays/core-overlays-browser-mocks", + "@kbn/core-plugins-base-server-internal": "link:packages/core/plugins/core-plugins-base-server-internal", + "@kbn/core-plugins-browser": "link:packages/core/plugins/core-plugins-browser", + "@kbn/core-plugins-browser-internal": "link:packages/core/plugins/core-plugins-browser-internal", + "@kbn/core-plugins-browser-mocks": "link:packages/core/plugins/core-plugins-browser-mocks", + "@kbn/core-plugins-server": "link:packages/core/plugins/core-plugins-server", + "@kbn/core-plugins-server-internal": "link:packages/core/plugins/core-plugins-server-internal", + "@kbn/core-plugins-server-mocks": "link:packages/core/plugins/core-plugins-server-mocks", + "@kbn/core-preboot-server": "link:packages/core/preboot/core-preboot-server", + "@kbn/core-preboot-server-internal": "link:packages/core/preboot/core-preboot-server-internal", + "@kbn/core-preboot-server-mocks": "link:packages/core/preboot/core-preboot-server-mocks", + "@kbn/core-rendering-browser-internal": "link:packages/core/rendering/core-rendering-browser-internal", + "@kbn/core-rendering-browser-mocks": "link:packages/core/rendering/core-rendering-browser-mocks", + "@kbn/core-rendering-server-internal": "link:packages/core/rendering/core-rendering-server-internal", + "@kbn/core-rendering-server-mocks": "link:packages/core/rendering/core-rendering-server-mocks", + "@kbn/core-root-browser-internal": "link:packages/core/root/core-root-browser-internal", + "@kbn/core-root-server-internal": "link:packages/core/root/core-root-server-internal", + "@kbn/core-saved-objects-api-browser": "link:packages/core/saved-objects/core-saved-objects-api-browser", + "@kbn/core-saved-objects-api-server": "link:packages/core/saved-objects/core-saved-objects-api-server", + "@kbn/core-saved-objects-api-server-internal": "link:packages/core/saved-objects/core-saved-objects-api-server-internal", + "@kbn/core-saved-objects-api-server-mocks": "link:packages/core/saved-objects/core-saved-objects-api-server-mocks", + "@kbn/core-saved-objects-base-server-internal": "link:packages/core/saved-objects/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-base-server-mocks": "link:packages/core/saved-objects/core-saved-objects-base-server-mocks", + "@kbn/core-saved-objects-browser": "link:packages/core/saved-objects/core-saved-objects-browser", + "@kbn/core-saved-objects-browser-internal": "link:packages/core/saved-objects/core-saved-objects-browser-internal", + "@kbn/core-saved-objects-browser-mocks": "link:packages/core/saved-objects/core-saved-objects-browser-mocks", + "@kbn/core-saved-objects-common": "link:packages/core/saved-objects/core-saved-objects-common", + "@kbn/core-saved-objects-import-export-server-internal": "link:packages/core/saved-objects/core-saved-objects-import-export-server-internal", + "@kbn/core-saved-objects-import-export-server-mocks": "link:packages/core/saved-objects/core-saved-objects-import-export-server-mocks", + "@kbn/core-saved-objects-migration-server-internal": "link:packages/core/saved-objects/core-saved-objects-migration-server-internal", + "@kbn/core-saved-objects-migration-server-mocks": "link:packages/core/saved-objects/core-saved-objects-migration-server-mocks", + "@kbn/core-saved-objects-server": "link:packages/core/saved-objects/core-saved-objects-server", + "@kbn/core-saved-objects-server-internal": "link:packages/core/saved-objects/core-saved-objects-server-internal", + "@kbn/core-saved-objects-server-mocks": "link:packages/core/saved-objects/core-saved-objects-server-mocks", + "@kbn/core-saved-objects-utils-server": "link:packages/core/saved-objects/core-saved-objects-utils-server", + "@kbn/core-status-common": "link:packages/core/status/core-status-common", + "@kbn/core-status-common-internal": "link:packages/core/status/core-status-common-internal", + "@kbn/core-status-server": "link:packages/core/status/core-status-server", + "@kbn/core-status-server-internal": "link:packages/core/status/core-status-server-internal", + "@kbn/core-status-server-mocks": "link:packages/core/status/core-status-server-mocks", + "@kbn/core-test-helpers-deprecations-getters": "link:packages/core/test-helpers/core-test-helpers-deprecations-getters", + "@kbn/core-test-helpers-http-setup-browser": "link:packages/core/test-helpers/core-test-helpers-http-setup-browser", + "@kbn/core-test-helpers-so-type-serializer": "link:packages/core/test-helpers/core-test-helpers-so-type-serializer", + "@kbn/core-test-helpers-test-utils": "link:packages/core/test-helpers/core-test-helpers-test-utils", + "@kbn/core-theme-browser": "link:packages/core/theme/core-theme-browser", + "@kbn/core-theme-browser-internal": "link:packages/core/theme/core-theme-browser-internal", + "@kbn/core-theme-browser-mocks": "link:packages/core/theme/core-theme-browser-mocks", + "@kbn/core-ui-settings-browser": "link:packages/core/ui-settings/core-ui-settings-browser", + "@kbn/core-ui-settings-browser-internal": "link:packages/core/ui-settings/core-ui-settings-browser-internal", + "@kbn/core-ui-settings-browser-mocks": "link:packages/core/ui-settings/core-ui-settings-browser-mocks", + "@kbn/core-ui-settings-common": "link:packages/core/ui-settings/core-ui-settings-common", + "@kbn/core-ui-settings-server": "link:packages/core/ui-settings/core-ui-settings-server", + "@kbn/core-ui-settings-server-internal": "link:packages/core/ui-settings/core-ui-settings-server-internal", + "@kbn/core-ui-settings-server-mocks": "link:packages/core/ui-settings/core-ui-settings-server-mocks", + "@kbn/core-usage-data-base-server-internal": "link:packages/core/usage-data/core-usage-data-base-server-internal", + "@kbn/core-usage-data-server": "link:packages/core/usage-data/core-usage-data-server", + "@kbn/core-usage-data-server-internal": "link:packages/core/usage-data/core-usage-data-server-internal", + "@kbn/core-usage-data-server-mocks": "link:packages/core/usage-data/core-usage-data-server-mocks", + "@kbn/crypto": "link:packages/kbn-crypto", + "@kbn/crypto-browser": "link:packages/kbn-crypto-browser", + "@kbn/datemath": "link:packages/kbn-datemath", + "@kbn/doc-links": "link:packages/kbn-doc-links", + "@kbn/ebt-tools": "link:packages/kbn-ebt-tools", + "@kbn/ecs": "link:packages/kbn-ecs", + "@kbn/es-errors": "link:packages/kbn-es-errors", + "@kbn/es-query": "link:packages/kbn-es-query", + "@kbn/es-types": "link:packages/kbn-es-types", + "@kbn/field-types": "link:packages/kbn-field-types", + "@kbn/flot-charts": "link:packages/kbn-flot-charts", + "@kbn/guided-onboarding": "link:packages/kbn-guided-onboarding", + "@kbn/handlebars": "link:packages/kbn-handlebars", + "@kbn/hapi-mocks": "link:packages/kbn-hapi-mocks", + "@kbn/health-gateway-server": "link:packages/kbn-health-gateway-server", + "@kbn/home-sample-data-card": "link:packages/home/sample_data_card", + "@kbn/home-sample-data-tab": "link:packages/home/sample_data_tab", + "@kbn/home-sample-data-types": "link:packages/home/sample_data_types", + "@kbn/i18n": "link:packages/kbn-i18n", + "@kbn/i18n-react": "link:packages/kbn-i18n-react", + "@kbn/interpreter": "link:packages/kbn-interpreter", + "@kbn/io-ts-utils": "link:packages/kbn-io-ts-utils", + "@kbn/language-documentation-popover": "link:packages/kbn-language-documentation-popover", + "@kbn/logging": "link:packages/kbn-logging", + "@kbn/logging-mocks": "link:packages/kbn-logging-mocks", + "@kbn/mapbox-gl": "link:packages/kbn-mapbox-gl", + "@kbn/ml-agg-utils": "link:x-pack/packages/ml/agg_utils", + "@kbn/ml-is-populated-object": "link:x-pack/packages/ml/is_populated_object", + "@kbn/ml-string-hash": "link:x-pack/packages/ml/string_hash", + "@kbn/monaco": "link:packages/kbn-monaco", + "@kbn/osquery-io-ts-types": "link:packages/kbn-osquery-io-ts-types", + "@kbn/plugin-discovery": "link:packages/kbn-plugin-discovery", + "@kbn/react-field": "link:packages/kbn-react-field", + "@kbn/repo-info": "link:packages/kbn-repo-info", + "@kbn/rison": "link:packages/kbn-rison", + "@kbn/rule-data-utils": "link:packages/kbn-rule-data-utils", + "@kbn/safer-lodash-set": "link:packages/kbn-safer-lodash-set", + "@kbn/securitysolution-autocomplete": "link:packages/kbn-securitysolution-autocomplete", + "@kbn/securitysolution-es-utils": "link:packages/kbn-securitysolution-es-utils", + "@kbn/securitysolution-exception-list-components": "link:packages/kbn-securitysolution-exception-list-components", + "@kbn/securitysolution-hook-utils": "link:packages/kbn-securitysolution-hook-utils", + "@kbn/securitysolution-io-ts-alerting-types": "link:packages/kbn-securitysolution-io-ts-alerting-types", + "@kbn/securitysolution-io-ts-list-types": "link:packages/kbn-securitysolution-io-ts-list-types", + "@kbn/securitysolution-io-ts-types": "link:packages/kbn-securitysolution-io-ts-types", + "@kbn/securitysolution-io-ts-utils": "link:packages/kbn-securitysolution-io-ts-utils", + "@kbn/securitysolution-list-api": "link:packages/kbn-securitysolution-list-api", + "@kbn/securitysolution-list-constants": "link:packages/kbn-securitysolution-list-constants", + "@kbn/securitysolution-list-hooks": "link:packages/kbn-securitysolution-list-hooks", + "@kbn/securitysolution-list-utils": "link:packages/kbn-securitysolution-list-utils", + "@kbn/securitysolution-rules": "link:packages/kbn-securitysolution-rules", + "@kbn/securitysolution-t-grid": "link:packages/kbn-securitysolution-t-grid", + "@kbn/securitysolution-utils": "link:packages/kbn-securitysolution-utils", + "@kbn/server-http-tools": "link:packages/kbn-server-http-tools", + "@kbn/server-route-repository": "link:packages/kbn-server-route-repository", + "@kbn/shared-svg": "link:packages/kbn-shared-svg", + "@kbn/shared-ux-avatar-solution": "link:packages/shared-ux/avatar/solution", + "@kbn/shared-ux-avatar-user-profile-components": "link:packages/shared-ux/avatar/user_profile/impl", + "@kbn/shared-ux-button-exit-full-screen": "link:packages/shared-ux/button/exit_full_screen/impl", + "@kbn/shared-ux-button-exit-full-screen-mocks": "link:packages/shared-ux/button/exit_full_screen/mocks", + "@kbn/shared-ux-button-exit-full-screen-types": "link:packages/shared-ux/button/exit_full_screen/types", + "@kbn/shared-ux-button-toolbar": "link:packages/shared-ux/button_toolbar", + "@kbn/shared-ux-card-no-data": "link:packages/shared-ux/card/no_data/impl", + "@kbn/shared-ux-card-no-data-mocks": "link:packages/shared-ux/card/no_data/mocks", + "@kbn/shared-ux-card-no-data-types": "link:packages/shared-ux/card/no_data/types", + "@kbn/shared-ux-file-context": "link:packages/shared-ux/file/context", + "@kbn/shared-ux-file-image": "link:packages/shared-ux/file/image/impl", + "@kbn/shared-ux-file-image-mocks": "link:packages/shared-ux/file/image/mocks", + "@kbn/shared-ux-file-mocks": "link:packages/shared-ux/file/mocks", + "@kbn/shared-ux-file-picker": "link:packages/shared-ux/file/file_picker/impl", + "@kbn/shared-ux-file-types": "link:packages/shared-ux/file/types", + "@kbn/shared-ux-file-upload": "link:packages/shared-ux/file/file_upload/impl", + "@kbn/shared-ux-file-util": "link:packages/shared-ux/file/util", + "@kbn/shared-ux-link-redirect-app": "link:packages/shared-ux/link/redirect_app/impl", + "@kbn/shared-ux-link-redirect-app-mocks": "link:packages/shared-ux/link/redirect_app/mocks", + "@kbn/shared-ux-link-redirect-app-types": "link:packages/shared-ux/link/redirect_app/types", + "@kbn/shared-ux-markdown": "link:packages/shared-ux/markdown/impl", + "@kbn/shared-ux-markdown-mocks": "link:packages/shared-ux/markdown/mocks", + "@kbn/shared-ux-markdown-types": "link:packages/shared-ux/markdown/types", + "@kbn/shared-ux-page-analytics-no-data": "link:packages/shared-ux/page/analytics_no_data/impl", + "@kbn/shared-ux-page-analytics-no-data-mocks": "link:packages/shared-ux/page/analytics_no_data/mocks", + "@kbn/shared-ux-page-analytics-no-data-types": "link:packages/shared-ux/page/analytics_no_data/types", + "@kbn/shared-ux-page-kibana-no-data": "link:packages/shared-ux/page/kibana_no_data/impl", + "@kbn/shared-ux-page-kibana-no-data-mocks": "link:packages/shared-ux/page/kibana_no_data/mocks", + "@kbn/shared-ux-page-kibana-no-data-types": "link:packages/shared-ux/page/kibana_no_data/types", + "@kbn/shared-ux-page-kibana-template": "link:packages/shared-ux/page/kibana_template/impl", + "@kbn/shared-ux-page-kibana-template-mocks": "link:packages/shared-ux/page/kibana_template/mocks", + "@kbn/shared-ux-page-kibana-template-types": "link:packages/shared-ux/page/kibana_template/types", + "@kbn/shared-ux-page-no-data": "link:packages/shared-ux/page/no_data/impl", + "@kbn/shared-ux-page-no-data-config": "link:packages/shared-ux/page/no_data_config/impl", + "@kbn/shared-ux-page-no-data-config-mocks": "link:packages/shared-ux/page/no_data_config/mocks", + "@kbn/shared-ux-page-no-data-config-types": "link:packages/shared-ux/page/no_data_config/types", + "@kbn/shared-ux-page-no-data-mocks": "link:packages/shared-ux/page/no_data/mocks", + "@kbn/shared-ux-page-no-data-types": "link:packages/shared-ux/page/no_data/types", + "@kbn/shared-ux-page-solution-nav": "link:packages/shared-ux/page/solution_nav", + "@kbn/shared-ux-prompt-no-data-views": "link:packages/shared-ux/prompt/no_data_views/impl", + "@kbn/shared-ux-prompt-no-data-views-mocks": "link:packages/shared-ux/prompt/no_data_views/mocks", + "@kbn/shared-ux-prompt-no-data-views-types": "link:packages/shared-ux/prompt/no_data_views/types", + "@kbn/shared-ux-prompt-not-found": "link:packages/shared-ux/prompt/not_found", + "@kbn/shared-ux-router-mocks": "link:packages/shared-ux/router/mocks", + "@kbn/shared-ux-services": "link:packages/kbn-shared-ux-services", + "@kbn/shared-ux-storybook": "link:packages/kbn-shared-ux-storybook", + "@kbn/shared-ux-storybook-mock": "link:packages/shared-ux/storybook/mock", + "@kbn/shared-ux-utility": "link:packages/kbn-shared-ux-utility", + "@kbn/std": "link:packages/kbn-std", + "@kbn/timelion-grammar": "link:packages/kbn-timelion-grammar", + "@kbn/tinymath": "link:packages/kbn-tinymath", + "@kbn/typed-react-router-config": "link:packages/kbn-typed-react-router-config", + "@kbn/ui-framework": "link:packages/kbn-ui-framework", + "@kbn/ui-shared-deps-npm": "link:packages/kbn-ui-shared-deps-npm", + "@kbn/ui-shared-deps-src": "link:packages/kbn-ui-shared-deps-src", + "@kbn/ui-theme": "link:packages/kbn-ui-theme", + "@kbn/user-profile-components": "link:packages/kbn-user-profile-components", + "@kbn/utility-types": "link:packages/kbn-utility-types", + "@kbn/utility-types-jest": "link:packages/kbn-utility-types-jest", + "@kbn/utils": "link:packages/kbn-utils", "@loaders.gl/core": "^2.3.1", "@loaders.gl/json": "^2.3.1", "@loaders.gl/shapefile": "^2.3.1", @@ -464,8 +465,6 @@ "@turf/distance": "6.0.1", "@turf/helpers": "6.0.1", "@turf/length": "^6.0.2", - "@types/adm-zip": "^0.5.0", - "@types/byte-size": "^8.1.0", "@xstate/react": "^3.0.1", "JSONStream": "1.3.5", "abort-controller": "^3.0.0", @@ -732,69 +731,75 @@ "@jest/reporters": "^29.3.1", "@jest/transform": "^29.3.1", "@jest/types": "^29.3.1", - "@kbn/ambient-common-types": "link:bazel-bin/packages/kbn-ambient-common-types", - "@kbn/ambient-ftr-types": "link:bazel-bin/packages/kbn-ambient-ftr-types", - "@kbn/ambient-storybook-types": "link:bazel-bin/packages/kbn-ambient-storybook-types", - "@kbn/ambient-ui-types": "link:bazel-bin/packages/kbn-ambient-ui-types", - "@kbn/apm-synthtrace": "link:bazel-bin/packages/kbn-apm-synthtrace", - "@kbn/axe-config": "link:bazel-bin/packages/kbn-axe-config", - "@kbn/babel-plugin-synthetic-packages": "link:bazel-bin/packages/kbn-babel-plugin-synthetic-packages", - "@kbn/babel-preset": "link:bazel-bin/packages/kbn-babel-preset", - "@kbn/bazel-packages": "link:bazel-bin/packages/kbn-bazel-packages", - "@kbn/bazel-runner": "link:bazel-bin/packages/kbn-bazel-runner", - "@kbn/ci-stats-core": "link:bazel-bin/packages/kbn-ci-stats-core", - "@kbn/ci-stats-performance-metrics": "link:bazel-bin/packages/kbn-ci-stats-performance-metrics", - "@kbn/ci-stats-reporter": "link:bazel-bin/packages/kbn-ci-stats-reporter", - "@kbn/cli-dev-mode": "link:bazel-bin/packages/kbn-cli-dev-mode", - "@kbn/core-test-helpers-kbn-server": "link:bazel-bin/packages/core/test-helpers/core-test-helpers-kbn-server", - "@kbn/dev-cli-errors": "link:bazel-bin/packages/kbn-dev-cli-errors", - "@kbn/dev-cli-runner": "link:bazel-bin/packages/kbn-dev-cli-runner", - "@kbn/dev-proc-runner": "link:bazel-bin/packages/kbn-dev-proc-runner", - "@kbn/dev-utils": "link:bazel-bin/packages/kbn-dev-utils", - "@kbn/docs-utils": "link:bazel-bin/packages/kbn-docs-utils", - "@kbn/es": "link:bazel-bin/packages/kbn-es", - "@kbn/es-archiver": "link:bazel-bin/packages/kbn-es-archiver", - "@kbn/eslint-config": "link:bazel-bin/packages/kbn-eslint-config", - "@kbn/eslint-plugin-disable": "link:bazel-bin/packages/kbn-eslint-plugin-disable", - "@kbn/eslint-plugin-eslint": "link:bazel-bin/packages/kbn-eslint-plugin-eslint", - "@kbn/eslint-plugin-imports": "link:bazel-bin/packages/kbn-eslint-plugin-imports", - "@kbn/expect": "link:bazel-bin/packages/kbn-expect", - "@kbn/failed-test-reporter-cli": "link:bazel-bin/packages/kbn-failed-test-reporter-cli", - "@kbn/find-used-node-modules": "link:bazel-bin/packages/kbn-find-used-node-modules", - "@kbn/ftr-common-functional-services": "link:bazel-bin/packages/kbn-ftr-common-functional-services", - "@kbn/ftr-screenshot-filename": "link:bazel-bin/packages/kbn-ftr-screenshot-filename", - "@kbn/generate": "link:bazel-bin/packages/kbn-generate", - "@kbn/get-repo-files": "link:bazel-bin/packages/kbn-get-repo-files", - "@kbn/import-resolver": "link:bazel-bin/packages/kbn-import-resolver", - "@kbn/jest-serializers": "link:bazel-bin/packages/kbn-jest-serializers", - "@kbn/journeys": "link:bazel-bin/packages/kbn-journeys", - "@kbn/kibana-manifest-schema": "link:bazel-bin/packages/kbn-kibana-manifest-schema", - "@kbn/managed-vscode-config": "link:bazel-bin/packages/kbn-managed-vscode-config", - "@kbn/managed-vscode-config-cli": "link:bazel-bin/packages/kbn-managed-vscode-config-cli", - "@kbn/optimizer": "link:bazel-bin/packages/kbn-optimizer", - "@kbn/optimizer-webpack-helpers": "link:bazel-bin/packages/kbn-optimizer-webpack-helpers", - "@kbn/peggy": "link:bazel-bin/packages/kbn-peggy", - "@kbn/peggy-loader": "link:bazel-bin/packages/kbn-peggy-loader", - "@kbn/performance-testing-dataset-extractor": "link:bazel-bin/packages/kbn-performance-testing-dataset-extractor", - "@kbn/plugin-generator": "link:bazel-bin/packages/kbn-plugin-generator", - "@kbn/plugin-helpers": "link:bazel-bin/packages/kbn-plugin-helpers", - "@kbn/repo-source-classifier": "link:bazel-bin/packages/kbn-repo-source-classifier", - "@kbn/repo-source-classifier-cli": "link:bazel-bin/packages/kbn-repo-source-classifier-cli", - "@kbn/some-dev-log": "link:bazel-bin/packages/kbn-some-dev-log", - "@kbn/sort-package-json": "link:bazel-bin/packages/kbn-sort-package-json", - "@kbn/spec-to-console": "link:bazel-bin/packages/kbn-spec-to-console", - "@kbn/stdio-dev-helpers": "link:bazel-bin/packages/kbn-stdio-dev-helpers", - "@kbn/storybook": "link:bazel-bin/packages/kbn-storybook", - "@kbn/synthetic-package-map": "link:bazel-bin/packages/kbn-synthetic-package-map", - "@kbn/telemetry-tools": "link:bazel-bin/packages/kbn-telemetry-tools", - "@kbn/test": "link:bazel-bin/packages/kbn-test", - "@kbn/test-jest-helpers": "link:bazel-bin/packages/kbn-test-jest-helpers", - "@kbn/test-subj-selector": "link:bazel-bin/packages/kbn-test-subj-selector", - "@kbn/tooling-log": "link:bazel-bin/packages/kbn-tooling-log", - "@kbn/type-summarizer": "link:bazel-bin/packages/kbn-type-summarizer", - "@kbn/type-summarizer-cli": "link:bazel-bin/packages/kbn-type-summarizer-cli", - "@kbn/type-summarizer-core": "link:bazel-bin/packages/kbn-type-summarizer-core", - "@kbn/yarn-lock-validator": "link:bazel-bin/packages/kbn-yarn-lock-validator", + "@kbn/ambient-common-types": "link:packages/kbn-ambient-common-types", + "@kbn/ambient-ftr-types": "link:packages/kbn-ambient-ftr-types", + "@kbn/ambient-storybook-types": "link:packages/kbn-ambient-storybook-types", + "@kbn/ambient-ui-types": "link:packages/kbn-ambient-ui-types", + "@kbn/apm-synthtrace": "link:packages/kbn-apm-synthtrace", + "@kbn/axe-config": "link:packages/kbn-axe-config", + "@kbn/babel-plugin-package-imports": "link:packages/kbn-babel-plugin-package-imports", + "@kbn/babel-preset": "link:packages/kbn-babel-preset", + "@kbn/babel-register": "link:packages/kbn-babel-register", + "@kbn/babel-transform": "link:packages/kbn-babel-transform", + "@kbn/bazel-packages": "link:packages/kbn-bazel-packages", + "@kbn/bazel-runner": "link:packages/kbn-bazel-runner", + "@kbn/ci-stats-core": "link:packages/kbn-ci-stats-core", + "@kbn/ci-stats-performance-metrics": "link:packages/kbn-ci-stats-performance-metrics", + "@kbn/ci-stats-reporter": "link:packages/kbn-ci-stats-reporter", + "@kbn/cli-dev-mode": "link:packages/kbn-cli-dev-mode", + "@kbn/core-test-helpers-kbn-server": "link:packages/core/test-helpers/core-test-helpers-kbn-server", + "@kbn/cypress-config": "link:packages/kbn-cypress-config", + "@kbn/dev-cli-errors": "link:packages/kbn-dev-cli-errors", + "@kbn/dev-cli-runner": "link:packages/kbn-dev-cli-runner", + "@kbn/dev-proc-runner": "link:packages/kbn-dev-proc-runner", + "@kbn/dev-utils": "link:packages/kbn-dev-utils", + "@kbn/docs-utils": "link:packages/kbn-docs-utils", + "@kbn/es": "link:packages/kbn-es", + "@kbn/es-archiver": "link:packages/kbn-es-archiver", + "@kbn/eslint-config": "link:packages/kbn-eslint-config", + "@kbn/eslint-plugin-disable": "link:packages/kbn-eslint-plugin-disable", + "@kbn/eslint-plugin-eslint": "link:packages/kbn-eslint-plugin-eslint", + "@kbn/eslint-plugin-imports": "link:packages/kbn-eslint-plugin-imports", + "@kbn/expect": "link:packages/kbn-expect", + "@kbn/failed-test-reporter-cli": "link:packages/kbn-failed-test-reporter-cli", + "@kbn/find-used-node-modules": "link:packages/kbn-find-used-node-modules", + "@kbn/ftr-common-functional-services": "link:packages/kbn-ftr-common-functional-services", + "@kbn/ftr-screenshot-filename": "link:packages/kbn-ftr-screenshot-filename", + "@kbn/generate": "link:packages/kbn-generate", + "@kbn/get-repo-files": "link:packages/kbn-get-repo-files", + "@kbn/import-resolver": "link:packages/kbn-import-resolver", + "@kbn/jest-serializers": "link:packages/kbn-jest-serializers", + "@kbn/journeys": "link:packages/kbn-journeys", + "@kbn/kibana-manifest-schema": "link:packages/kbn-kibana-manifest-schema", + "@kbn/managed-vscode-config": "link:packages/kbn-managed-vscode-config", + "@kbn/managed-vscode-config-cli": "link:packages/kbn-managed-vscode-config-cli", + "@kbn/optimizer": "link:packages/kbn-optimizer", + "@kbn/optimizer-webpack-helpers": "link:packages/kbn-optimizer-webpack-helpers", + "@kbn/package-map": "link:packages/kbn-package-map", + "@kbn/peggy": "link:packages/kbn-peggy", + "@kbn/peggy-loader": "link:packages/kbn-peggy-loader", + "@kbn/performance-testing-dataset-extractor": "link:packages/kbn-performance-testing-dataset-extractor", + "@kbn/plugin-generator": "link:packages/kbn-plugin-generator", + "@kbn/plugin-helpers": "link:packages/kbn-plugin-helpers", + "@kbn/repo-path": "link:packages/kbn-repo-path", + "@kbn/repo-source-classifier": "link:packages/kbn-repo-source-classifier", + "@kbn/repo-source-classifier-cli": "link:packages/kbn-repo-source-classifier-cli", + "@kbn/some-dev-log": "link:packages/kbn-some-dev-log", + "@kbn/sort-package-json": "link:packages/kbn-sort-package-json", + "@kbn/spec-to-console": "link:packages/kbn-spec-to-console", + "@kbn/stdio-dev-helpers": "link:packages/kbn-stdio-dev-helpers", + "@kbn/storybook": "link:packages/kbn-storybook", + "@kbn/telemetry-tools": "link:packages/kbn-telemetry-tools", + "@kbn/test": "link:packages/kbn-test", + "@kbn/test-jest-helpers": "link:packages/kbn-test-jest-helpers", + "@kbn/test-subj-selector": "link:packages/kbn-test-subj-selector", + "@kbn/tooling-log": "link:packages/kbn-tooling-log", + "@kbn/ts-project-linter": "link:packages/kbn-ts-project-linter", + "@kbn/ts-project-linter-cli": "link:packages/kbn-ts-project-linter-cli", + "@kbn/ts-projects": "link:packages/kbn-ts-projects", + "@kbn/ts-type-check-cli": "link:packages/kbn-ts-type-check-cli", + "@kbn/web-worker-stub": "link:packages/kbn-web-worker-stub", + "@kbn/yarn-lock-validator": "link:packages/kbn-yarn-lock-validator", "@loaders.gl/polyfills": "^2.3.5", "@mapbox/vector-tile": "1.3.1", "@octokit/rest": "^16.35.0", @@ -824,12 +829,14 @@ "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^13.5.0", + "@types/adm-zip": "^0.5.0", "@types/archiver": "^5.3.1", "@types/async": "^3.2.3", "@types/babel__core": "^7.1.20", "@types/babel__generator": "^7.6.4", "@types/babel__helper-plugin-utils": "^7.10.0", "@types/base64-js": "^1.2.5", + "@types/byte-size": "^8.1.0", "@types/chance": "^1.0.0", "@types/chroma-js": "^1.4.2", "@types/chromedriver": "^81.0.1", @@ -1134,7 +1141,6 @@ "terser-webpack-plugin": "^4.2.3", "tough-cookie": "^4.1.2", "tree-kill": "^1.2.2", - "ts-loader": "^7.0.5", "ts-morph": "^13.0.2", "tsd": "^0.20.0", "typescript": "4.6.3", diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel deleted file mode 100644 index f30be8be46065..0000000000000 --- a/packages/BUILD.bazel +++ /dev/null @@ -1,748 +0,0 @@ -################ -################ -## This file is automatically generated, to create a new package use `node scripts/generate package --help` or run -## `node scripts/generate packages_build_manifest` to regenerate it from the current state of the repo -################ -################ - -# It will build all declared code packages -filegroup( - name = "build_pkg_code", - srcs = [ - "//packages/analytics/client:build", - "//packages/analytics/shippers/elastic_v3/browser:build", - "//packages/analytics/shippers/elastic_v3/common:build", - "//packages/analytics/shippers/elastic_v3/server:build", - "//packages/analytics/shippers/fullstory:build", - "//packages/analytics/shippers/gainsight:build", - "//packages/content-management/content_editor:build", - "//packages/content-management/table_list:build", - "//packages/core/analytics/core-analytics-browser:build", - "//packages/core/analytics/core-analytics-browser-internal:build", - "//packages/core/analytics/core-analytics-browser-mocks:build", - "//packages/core/analytics/core-analytics-server:build", - "//packages/core/analytics/core-analytics-server-internal:build", - "//packages/core/analytics/core-analytics-server-mocks:build", - "//packages/core/application/core-application-browser:build", - "//packages/core/application/core-application-browser-internal:build", - "//packages/core/application/core-application-browser-mocks:build", - "//packages/core/application/core-application-common:build", - "//packages/core/apps/core-apps-browser-internal:build", - "//packages/core/apps/core-apps-browser-mocks:build", - "//packages/core/apps/core-apps-server-internal:build", - "//packages/core/base/core-base-browser-internal:build", - "//packages/core/base/core-base-browser-mocks:build", - "//packages/core/base/core-base-common:build", - "//packages/core/base/core-base-common-internal:build", - "//packages/core/base/core-base-server-internal:build", - "//packages/core/base/core-base-server-mocks:build", - "//packages/core/capabilities/core-capabilities-browser-internal:build", - "//packages/core/capabilities/core-capabilities-browser-mocks:build", - "//packages/core/capabilities/core-capabilities-common:build", - "//packages/core/capabilities/core-capabilities-server:build", - "//packages/core/capabilities/core-capabilities-server-internal:build", - "//packages/core/capabilities/core-capabilities-server-mocks:build", - "//packages/core/chrome/core-chrome-browser:build", - "//packages/core/chrome/core-chrome-browser-internal:build", - "//packages/core/chrome/core-chrome-browser-mocks:build", - "//packages/core/config/core-config-server-internal:build", - "//packages/core/deprecations/core-deprecations-browser:build", - "//packages/core/deprecations/core-deprecations-browser-internal:build", - "//packages/core/deprecations/core-deprecations-browser-mocks:build", - "//packages/core/deprecations/core-deprecations-common:build", - "//packages/core/deprecations/core-deprecations-server:build", - "//packages/core/deprecations/core-deprecations-server-internal:build", - "//packages/core/deprecations/core-deprecations-server-mocks:build", - "//packages/core/doc-links/core-doc-links-browser:build", - "//packages/core/doc-links/core-doc-links-browser-internal:build", - "//packages/core/doc-links/core-doc-links-browser-mocks:build", - "//packages/core/doc-links/core-doc-links-server:build", - "//packages/core/doc-links/core-doc-links-server-internal:build", - "//packages/core/doc-links/core-doc-links-server-mocks:build", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal:build", - "//packages/core/elasticsearch/core-elasticsearch-client-server-mocks:build", - "//packages/core/elasticsearch/core-elasticsearch-server:build", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:build", - "//packages/core/elasticsearch/core-elasticsearch-server-mocks:build", - "//packages/core/environment/core-environment-server-internal:build", - "//packages/core/environment/core-environment-server-mocks:build", - "//packages/core/execution-context/core-execution-context-browser:build", - "//packages/core/execution-context/core-execution-context-browser-internal:build", - "//packages/core/execution-context/core-execution-context-browser-mocks:build", - "//packages/core/execution-context/core-execution-context-common:build", - "//packages/core/execution-context/core-execution-context-server:build", - "//packages/core/execution-context/core-execution-context-server-internal:build", - "//packages/core/execution-context/core-execution-context-server-mocks:build", - "//packages/core/fatal-errors/core-fatal-errors-browser:build", - "//packages/core/fatal-errors/core-fatal-errors-browser-internal:build", - "//packages/core/fatal-errors/core-fatal-errors-browser-mocks:build", - "//packages/core/http/core-http-browser:build", - "//packages/core/http/core-http-browser-internal:build", - "//packages/core/http/core-http-browser-mocks:build", - "//packages/core/http/core-http-common:build", - "//packages/core/http/core-http-context-server-internal:build", - "//packages/core/http/core-http-context-server-mocks:build", - "//packages/core/http/core-http-request-handler-context-server:build", - "//packages/core/http/core-http-request-handler-context-server-internal:build", - "//packages/core/http/core-http-resources-server:build", - "//packages/core/http/core-http-resources-server-internal:build", - "//packages/core/http/core-http-resources-server-mocks:build", - "//packages/core/http/core-http-router-server-internal:build", - "//packages/core/http/core-http-router-server-mocks:build", - "//packages/core/http/core-http-server:build", - "//packages/core/http/core-http-server-internal:build", - "//packages/core/http/core-http-server-mocks:build", - "//packages/core/i18n/core-i18n-browser:build", - "//packages/core/i18n/core-i18n-browser-internal:build", - "//packages/core/i18n/core-i18n-browser-mocks:build", - "//packages/core/i18n/core-i18n-server:build", - "//packages/core/i18n/core-i18n-server-internal:build", - "//packages/core/i18n/core-i18n-server-mocks:build", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:build", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks:build", - "//packages/core/injected-metadata/core-injected-metadata-common-internal:build", - "//packages/core/integrations/core-integrations-browser-internal:build", - "//packages/core/integrations/core-integrations-browser-mocks:build", - "//packages/core/lifecycle/core-lifecycle-browser:build", - "//packages/core/lifecycle/core-lifecycle-browser-internal:build", - "//packages/core/lifecycle/core-lifecycle-browser-mocks:build", - "//packages/core/lifecycle/core-lifecycle-server:build", - "//packages/core/lifecycle/core-lifecycle-server-internal:build", - "//packages/core/lifecycle/core-lifecycle-server-mocks:build", - "//packages/core/logging/core-logging-browser-internal:build", - "//packages/core/logging/core-logging-browser-mocks:build", - "//packages/core/logging/core-logging-common-internal:build", - "//packages/core/logging/core-logging-server:build", - "//packages/core/logging/core-logging-server-internal:build", - "//packages/core/logging/core-logging-server-mocks:build", - "//packages/core/metrics/core-metrics-collectors-server-internal:build", - "//packages/core/metrics/core-metrics-collectors-server-mocks:build", - "//packages/core/metrics/core-metrics-server:build", - "//packages/core/metrics/core-metrics-server-internal:build", - "//packages/core/metrics/core-metrics-server-mocks:build", - "//packages/core/mount-utils/core-mount-utils-browser:build", - "//packages/core/mount-utils/core-mount-utils-browser-internal:build", - "//packages/core/node/core-node-server:build", - "//packages/core/node/core-node-server-internal:build", - "//packages/core/node/core-node-server-mocks:build", - "//packages/core/notifications/core-notifications-browser:build", - "//packages/core/notifications/core-notifications-browser-internal:build", - "//packages/core/notifications/core-notifications-browser-mocks:build", - "//packages/core/overlays/core-overlays-browser:build", - "//packages/core/overlays/core-overlays-browser-internal:build", - "//packages/core/overlays/core-overlays-browser-mocks:build", - "//packages/core/plugins/core-plugins-base-server-internal:build", - "//packages/core/plugins/core-plugins-browser:build", - "//packages/core/plugins/core-plugins-browser-internal:build", - "//packages/core/plugins/core-plugins-browser-mocks:build", - "//packages/core/plugins/core-plugins-server:build", - "//packages/core/plugins/core-plugins-server-internal:build", - "//packages/core/plugins/core-plugins-server-mocks:build", - "//packages/core/preboot/core-preboot-server:build", - "//packages/core/preboot/core-preboot-server-internal:build", - "//packages/core/preboot/core-preboot-server-mocks:build", - "//packages/core/rendering/core-rendering-browser-internal:build", - "//packages/core/rendering/core-rendering-browser-mocks:build", - "//packages/core/rendering/core-rendering-server-internal:build", - "//packages/core/rendering/core-rendering-server-mocks:build", - "//packages/core/root/core-root-browser-internal:build", - "//packages/core/root/core-root-server-internal:build", - "//packages/core/saved-objects/core-saved-objects-api-browser:build", - "//packages/core/saved-objects/core-saved-objects-api-server:build", - "//packages/core/saved-objects/core-saved-objects-api-server-internal:build", - "//packages/core/saved-objects/core-saved-objects-api-server-mocks:build", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:build", - "//packages/core/saved-objects/core-saved-objects-base-server-mocks:build", - "//packages/core/saved-objects/core-saved-objects-browser:build", - "//packages/core/saved-objects/core-saved-objects-browser-internal:build", - "//packages/core/saved-objects/core-saved-objects-browser-mocks:build", - "//packages/core/saved-objects/core-saved-objects-common:build", - "//packages/core/saved-objects/core-saved-objects-import-export-server-internal:build", - "//packages/core/saved-objects/core-saved-objects-import-export-server-mocks:build", - "//packages/core/saved-objects/core-saved-objects-migration-server-internal:build", - "//packages/core/saved-objects/core-saved-objects-migration-server-mocks:build", - "//packages/core/saved-objects/core-saved-objects-server:build", - "//packages/core/saved-objects/core-saved-objects-server-internal:build", - "//packages/core/saved-objects/core-saved-objects-server-mocks:build", - "//packages/core/saved-objects/core-saved-objects-utils-server:build", - "//packages/core/status/core-status-common:build", - "//packages/core/status/core-status-common-internal:build", - "//packages/core/status/core-status-server:build", - "//packages/core/status/core-status-server-internal:build", - "//packages/core/status/core-status-server-mocks:build", - "//packages/core/test-helpers/core-test-helpers-deprecations-getters:build", - "//packages/core/test-helpers/core-test-helpers-http-setup-browser:build", - "//packages/core/test-helpers/core-test-helpers-kbn-server:build", - "//packages/core/test-helpers/core-test-helpers-so-type-serializer:build", - "//packages/core/test-helpers/core-test-helpers-test-utils:build", - "//packages/core/theme/core-theme-browser:build", - "//packages/core/theme/core-theme-browser-internal:build", - "//packages/core/theme/core-theme-browser-mocks:build", - "//packages/core/ui-settings/core-ui-settings-browser:build", - "//packages/core/ui-settings/core-ui-settings-browser-internal:build", - "//packages/core/ui-settings/core-ui-settings-browser-mocks:build", - "//packages/core/ui-settings/core-ui-settings-common:build", - "//packages/core/ui-settings/core-ui-settings-server:build", - "//packages/core/ui-settings/core-ui-settings-server-internal:build", - "//packages/core/ui-settings/core-ui-settings-server-mocks:build", - "//packages/core/usage-data/core-usage-data-base-server-internal:build", - "//packages/core/usage-data/core-usage-data-server:build", - "//packages/core/usage-data/core-usage-data-server-internal:build", - "//packages/core/usage-data/core-usage-data-server-mocks:build", - "//packages/home/sample_data_card:build", - "//packages/home/sample_data_tab:build", - "//packages/home/sample_data_types:build", - "//packages/kbn-ace:build", - "//packages/kbn-alerts:build", - "//packages/kbn-ambient-common-types:build", - "//packages/kbn-ambient-ftr-types:build", - "//packages/kbn-ambient-storybook-types:build", - "//packages/kbn-ambient-ui-types:build", - "//packages/kbn-analytics:build", - "//packages/kbn-apm-config-loader:build", - "//packages/kbn-apm-synthtrace:build", - "//packages/kbn-apm-utils:build", - "//packages/kbn-axe-config:build", - "//packages/kbn-babel-plugin-synthetic-packages:build", - "//packages/kbn-babel-preset:build", - "//packages/kbn-bazel-packages:build", - "//packages/kbn-bazel-runner:build", - "//packages/kbn-cases-components:build", - "//packages/kbn-chart-icons:build", - "//packages/kbn-ci-stats-core:build", - "//packages/kbn-ci-stats-performance-metrics:build", - "//packages/kbn-ci-stats-reporter:build", - "//packages/kbn-cli-dev-mode:build", - "//packages/kbn-coloring:build", - "//packages/kbn-config:build", - "//packages/kbn-config-mocks:build", - "//packages/kbn-config-schema:build", - "//packages/kbn-crypto:build", - "//packages/kbn-crypto-browser:build", - "//packages/kbn-datemath:build", - "//packages/kbn-dev-cli-errors:build", - "//packages/kbn-dev-cli-runner:build", - "//packages/kbn-dev-proc-runner:build", - "//packages/kbn-dev-utils:build", - "//packages/kbn-doc-links:build", - "//packages/kbn-docs-utils:build", - "//packages/kbn-ebt-tools:build", - "//packages/kbn-ecs:build", - "//packages/kbn-es:build", - "//packages/kbn-es-archiver:build", - "//packages/kbn-es-errors:build", - "//packages/kbn-es-query:build", - "//packages/kbn-es-types:build", - "//packages/kbn-eslint-config:build", - "//packages/kbn-eslint-plugin-disable:build", - "//packages/kbn-eslint-plugin-eslint:build", - "//packages/kbn-eslint-plugin-imports:build", - "//packages/kbn-expect:build", - "//packages/kbn-failed-test-reporter-cli:build", - "//packages/kbn-field-types:build", - "//packages/kbn-find-used-node-modules:build", - "//packages/kbn-flot-charts:build", - "//packages/kbn-ftr-common-functional-services:build", - "//packages/kbn-ftr-screenshot-filename:build", - "//packages/kbn-generate:build", - "//packages/kbn-get-repo-files:build", - "//packages/kbn-guided-onboarding:build", - "//packages/kbn-handlebars:build", - "//packages/kbn-hapi-mocks:build", - "//packages/kbn-health-gateway-server:build", - "//packages/kbn-i18n:build", - "//packages/kbn-i18n-react:build", - "//packages/kbn-import-resolver:build", - "//packages/kbn-interpreter:build", - "//packages/kbn-io-ts-utils:build", - "//packages/kbn-jest-serializers:build", - "//packages/kbn-journeys:build", - "//packages/kbn-kibana-manifest-schema:build", - "//packages/kbn-language-documentation-popover:build", - "//packages/kbn-logging:build", - "//packages/kbn-logging-mocks:build", - "//packages/kbn-managed-vscode-config:build", - "//packages/kbn-managed-vscode-config-cli:build", - "//packages/kbn-mapbox-gl:build", - "//packages/kbn-monaco:build", - "//packages/kbn-optimizer:build", - "//packages/kbn-optimizer-webpack-helpers:build", - "//packages/kbn-osquery-io-ts-types:build", - "//packages/kbn-peggy:build", - "//packages/kbn-peggy-loader:build", - "//packages/kbn-performance-testing-dataset-extractor:build", - "//packages/kbn-plugin-discovery:build", - "//packages/kbn-plugin-generator:build", - "//packages/kbn-plugin-helpers:build", - "//packages/kbn-react-field:build", - "//packages/kbn-repo-source-classifier:build", - "//packages/kbn-repo-source-classifier-cli:build", - "//packages/kbn-rison:build", - "//packages/kbn-rule-data-utils:build", - "//packages/kbn-safer-lodash-set:build", - "//packages/kbn-securitysolution-autocomplete:build", - "//packages/kbn-securitysolution-es-utils:build", - "//packages/kbn-securitysolution-exception-list-components:build", - "//packages/kbn-securitysolution-hook-utils:build", - "//packages/kbn-securitysolution-io-ts-alerting-types:build", - "//packages/kbn-securitysolution-io-ts-list-types:build", - "//packages/kbn-securitysolution-io-ts-types:build", - "//packages/kbn-securitysolution-io-ts-utils:build", - "//packages/kbn-securitysolution-list-api:build", - "//packages/kbn-securitysolution-list-constants:build", - "//packages/kbn-securitysolution-list-hooks:build", - "//packages/kbn-securitysolution-list-utils:build", - "//packages/kbn-securitysolution-rules:build", - "//packages/kbn-securitysolution-t-grid:build", - "//packages/kbn-securitysolution-utils:build", - "//packages/kbn-server-http-tools:build", - "//packages/kbn-server-route-repository:build", - "//packages/kbn-shared-svg:build", - "//packages/kbn-shared-ux-utility:build", - "//packages/kbn-some-dev-log:build", - "//packages/kbn-sort-package-json:build", - "//packages/kbn-spec-to-console:build", - "//packages/kbn-std:build", - "//packages/kbn-stdio-dev-helpers:build", - "//packages/kbn-storybook:build", - "//packages/kbn-synthetic-package-map:build", - "//packages/kbn-telemetry-tools:build", - "//packages/kbn-test:build", - "//packages/kbn-test-jest-helpers:build", - "//packages/kbn-test-subj-selector:build", - "//packages/kbn-timelion-grammar:build", - "//packages/kbn-tinymath:build", - "//packages/kbn-tooling-log:build", - "//packages/kbn-type-summarizer:build", - "//packages/kbn-type-summarizer-cli:build", - "//packages/kbn-type-summarizer-core:build", - "//packages/kbn-typed-react-router-config:build", - "//packages/kbn-ui-framework:build", - "//packages/kbn-ui-shared-deps-npm:build", - "//packages/kbn-ui-shared-deps-src:build", - "//packages/kbn-ui-theme:build", - "//packages/kbn-user-profile-components:build", - "//packages/kbn-utility-types:build", - "//packages/kbn-utility-types-jest:build", - "//packages/kbn-utils:build", - "//packages/kbn-yarn-lock-validator:build", - "//packages/shared-ux/avatar/solution:build", - "//packages/shared-ux/avatar/user_profile/impl:build", - "//packages/shared-ux/button_toolbar:build", - "//packages/shared-ux/button/exit_full_screen/impl:build", - "//packages/shared-ux/button/exit_full_screen/mocks:build", - "//packages/shared-ux/button/exit_full_screen/types:build", - "//packages/shared-ux/card/no_data/impl:build", - "//packages/shared-ux/card/no_data/mocks:build", - "//packages/shared-ux/card/no_data/types:build", - "//packages/shared-ux/file/context:build", - "//packages/shared-ux/file/file_picker/impl:build", - "//packages/shared-ux/file/file_upload/impl:build", - "//packages/shared-ux/file/image/impl:build", - "//packages/shared-ux/file/image/mocks:build", - "//packages/shared-ux/file/mocks:build", - "//packages/shared-ux/file/types:build", - "//packages/shared-ux/file/util:build", - "//packages/shared-ux/link/redirect_app/impl:build", - "//packages/shared-ux/link/redirect_app/mocks:build", - "//packages/shared-ux/link/redirect_app/types:build", - "//packages/shared-ux/markdown/impl:build", - "//packages/shared-ux/markdown/mocks:build", - "//packages/shared-ux/markdown/types:build", - "//packages/shared-ux/page/analytics_no_data/impl:build", - "//packages/shared-ux/page/analytics_no_data/mocks:build", - "//packages/shared-ux/page/analytics_no_data/types:build", - "//packages/shared-ux/page/kibana_no_data/impl:build", - "//packages/shared-ux/page/kibana_no_data/mocks:build", - "//packages/shared-ux/page/kibana_no_data/types:build", - "//packages/shared-ux/page/kibana_template/impl:build", - "//packages/shared-ux/page/kibana_template/mocks:build", - "//packages/shared-ux/page/kibana_template/types:build", - "//packages/shared-ux/page/no_data_config/impl:build", - "//packages/shared-ux/page/no_data_config/mocks:build", - "//packages/shared-ux/page/no_data_config/types:build", - "//packages/shared-ux/page/no_data/impl:build", - "//packages/shared-ux/page/no_data/mocks:build", - "//packages/shared-ux/page/no_data/types:build", - "//packages/shared-ux/page/solution_nav:build", - "//packages/shared-ux/prompt/no_data_views/impl:build", - "//packages/shared-ux/prompt/no_data_views/mocks:build", - "//packages/shared-ux/prompt/no_data_views/types:build", - "//packages/shared-ux/prompt/not_found:build", - "//packages/shared-ux/router/impl:build", - "//packages/shared-ux/router/mocks:build", - "//packages/shared-ux/router/types:build", - "//packages/shared-ux/storybook/config:build", - "//packages/shared-ux/storybook/mock:build", - "//x-pack/packages/ml/agg_utils:build", - "//x-pack/packages/ml/aiops_components:build", - "//x-pack/packages/ml/aiops_utils:build", - "//x-pack/packages/ml/is_populated_object:build", - "//x-pack/packages/ml/string_hash:build", - ], -) - -# It will build all declared package types -filegroup( - name = "build_pkg_types", - srcs = [ - "//packages/analytics/client:build_types", - "//packages/analytics/shippers/elastic_v3/browser:build_types", - "//packages/analytics/shippers/elastic_v3/common:build_types", - "//packages/analytics/shippers/elastic_v3/server:build_types", - "//packages/analytics/shippers/fullstory:build_types", - "//packages/analytics/shippers/gainsight:build_types", - "//packages/content-management/content_editor:build_types", - "//packages/content-management/table_list:build_types", - "//packages/core/analytics/core-analytics-browser:build_types", - "//packages/core/analytics/core-analytics-browser-internal:build_types", - "//packages/core/analytics/core-analytics-browser-mocks:build_types", - "//packages/core/analytics/core-analytics-server:build_types", - "//packages/core/analytics/core-analytics-server-internal:build_types", - "//packages/core/analytics/core-analytics-server-mocks:build_types", - "//packages/core/application/core-application-browser:build_types", - "//packages/core/application/core-application-browser-internal:build_types", - "//packages/core/application/core-application-browser-mocks:build_types", - "//packages/core/application/core-application-common:build_types", - "//packages/core/apps/core-apps-browser-internal:build_types", - "//packages/core/apps/core-apps-browser-mocks:build_types", - "//packages/core/apps/core-apps-server-internal:build_types", - "//packages/core/base/core-base-browser-internal:build_types", - "//packages/core/base/core-base-browser-mocks:build_types", - "//packages/core/base/core-base-common:build_types", - "//packages/core/base/core-base-common-internal:build_types", - "//packages/core/base/core-base-server-internal:build_types", - "//packages/core/base/core-base-server-mocks:build_types", - "//packages/core/capabilities/core-capabilities-browser-internal:build_types", - "//packages/core/capabilities/core-capabilities-browser-mocks:build_types", - "//packages/core/capabilities/core-capabilities-common:build_types", - "//packages/core/capabilities/core-capabilities-server:build_types", - "//packages/core/capabilities/core-capabilities-server-internal:build_types", - "//packages/core/capabilities/core-capabilities-server-mocks:build_types", - "//packages/core/chrome/core-chrome-browser:build_types", - "//packages/core/chrome/core-chrome-browser-internal:build_types", - "//packages/core/chrome/core-chrome-browser-mocks:build_types", - "//packages/core/config/core-config-server-internal:build_types", - "//packages/core/deprecations/core-deprecations-browser:build_types", - "//packages/core/deprecations/core-deprecations-browser-internal:build_types", - "//packages/core/deprecations/core-deprecations-browser-mocks:build_types", - "//packages/core/deprecations/core-deprecations-common:build_types", - "//packages/core/deprecations/core-deprecations-server:build_types", - "//packages/core/deprecations/core-deprecations-server-internal:build_types", - "//packages/core/deprecations/core-deprecations-server-mocks:build_types", - "//packages/core/doc-links/core-doc-links-browser:build_types", - "//packages/core/doc-links/core-doc-links-browser-internal:build_types", - "//packages/core/doc-links/core-doc-links-browser-mocks:build_types", - "//packages/core/doc-links/core-doc-links-server:build_types", - "//packages/core/doc-links/core-doc-links-server-internal:build_types", - "//packages/core/doc-links/core-doc-links-server-mocks:build_types", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal:build_types", - "//packages/core/elasticsearch/core-elasticsearch-client-server-mocks:build_types", - "//packages/core/elasticsearch/core-elasticsearch-server:build_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:build_types", - "//packages/core/elasticsearch/core-elasticsearch-server-mocks:build_types", - "//packages/core/environment/core-environment-server-internal:build_types", - "//packages/core/environment/core-environment-server-mocks:build_types", - "//packages/core/execution-context/core-execution-context-browser:build_types", - "//packages/core/execution-context/core-execution-context-browser-internal:build_types", - "//packages/core/execution-context/core-execution-context-browser-mocks:build_types", - "//packages/core/execution-context/core-execution-context-common:build_types", - "//packages/core/execution-context/core-execution-context-server:build_types", - "//packages/core/execution-context/core-execution-context-server-internal:build_types", - "//packages/core/execution-context/core-execution-context-server-mocks:build_types", - "//packages/core/fatal-errors/core-fatal-errors-browser:build_types", - "//packages/core/fatal-errors/core-fatal-errors-browser-internal:build_types", - "//packages/core/fatal-errors/core-fatal-errors-browser-mocks:build_types", - "//packages/core/http/core-http-browser:build_types", - "//packages/core/http/core-http-browser-internal:build_types", - "//packages/core/http/core-http-browser-mocks:build_types", - "//packages/core/http/core-http-common:build_types", - "//packages/core/http/core-http-context-server-internal:build_types", - "//packages/core/http/core-http-context-server-mocks:build_types", - "//packages/core/http/core-http-request-handler-context-server:build_types", - "//packages/core/http/core-http-request-handler-context-server-internal:build_types", - "//packages/core/http/core-http-resources-server:build_types", - "//packages/core/http/core-http-resources-server-internal:build_types", - "//packages/core/http/core-http-resources-server-mocks:build_types", - "//packages/core/http/core-http-router-server-internal:build_types", - "//packages/core/http/core-http-router-server-mocks:build_types", - "//packages/core/http/core-http-server:build_types", - "//packages/core/http/core-http-server-internal:build_types", - "//packages/core/http/core-http-server-mocks:build_types", - "//packages/core/i18n/core-i18n-browser:build_types", - "//packages/core/i18n/core-i18n-browser-internal:build_types", - "//packages/core/i18n/core-i18n-browser-mocks:build_types", - "//packages/core/i18n/core-i18n-server:build_types", - "//packages/core/i18n/core-i18n-server-internal:build_types", - "//packages/core/i18n/core-i18n-server-mocks:build_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:build_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks:build_types", - "//packages/core/injected-metadata/core-injected-metadata-common-internal:build_types", - "//packages/core/integrations/core-integrations-browser-internal:build_types", - "//packages/core/integrations/core-integrations-browser-mocks:build_types", - "//packages/core/lifecycle/core-lifecycle-browser:build_types", - "//packages/core/lifecycle/core-lifecycle-browser-internal:build_types", - "//packages/core/lifecycle/core-lifecycle-browser-mocks:build_types", - "//packages/core/lifecycle/core-lifecycle-server:build_types", - "//packages/core/lifecycle/core-lifecycle-server-internal:build_types", - "//packages/core/lifecycle/core-lifecycle-server-mocks:build_types", - "//packages/core/logging/core-logging-browser-internal:build_types", - "//packages/core/logging/core-logging-browser-mocks:build_types", - "//packages/core/logging/core-logging-common-internal:build_types", - "//packages/core/logging/core-logging-server:build_types", - "//packages/core/logging/core-logging-server-internal:build_types", - "//packages/core/logging/core-logging-server-mocks:build_types", - "//packages/core/metrics/core-metrics-collectors-server-internal:build_types", - "//packages/core/metrics/core-metrics-collectors-server-mocks:build_types", - "//packages/core/metrics/core-metrics-server:build_types", - "//packages/core/metrics/core-metrics-server-internal:build_types", - "//packages/core/metrics/core-metrics-server-mocks:build_types", - "//packages/core/mount-utils/core-mount-utils-browser:build_types", - "//packages/core/mount-utils/core-mount-utils-browser-internal:build_types", - "//packages/core/node/core-node-server:build_types", - "//packages/core/node/core-node-server-internal:build_types", - "//packages/core/node/core-node-server-mocks:build_types", - "//packages/core/notifications/core-notifications-browser:build_types", - "//packages/core/notifications/core-notifications-browser-internal:build_types", - "//packages/core/notifications/core-notifications-browser-mocks:build_types", - "//packages/core/overlays/core-overlays-browser:build_types", - "//packages/core/overlays/core-overlays-browser-internal:build_types", - "//packages/core/overlays/core-overlays-browser-mocks:build_types", - "//packages/core/plugins/core-plugins-base-server-internal:build_types", - "//packages/core/plugins/core-plugins-browser:build_types", - "//packages/core/plugins/core-plugins-browser-internal:build_types", - "//packages/core/plugins/core-plugins-browser-mocks:build_types", - "//packages/core/plugins/core-plugins-server:build_types", - "//packages/core/plugins/core-plugins-server-internal:build_types", - "//packages/core/plugins/core-plugins-server-mocks:build_types", - "//packages/core/preboot/core-preboot-server:build_types", - "//packages/core/preboot/core-preboot-server-internal:build_types", - "//packages/core/preboot/core-preboot-server-mocks:build_types", - "//packages/core/rendering/core-rendering-browser-internal:build_types", - "//packages/core/rendering/core-rendering-browser-mocks:build_types", - "//packages/core/rendering/core-rendering-server-internal:build_types", - "//packages/core/rendering/core-rendering-server-mocks:build_types", - "//packages/core/root/core-root-browser-internal:build_types", - "//packages/core/root/core-root-server-internal:build_types", - "//packages/core/saved-objects/core-saved-objects-api-browser:build_types", - "//packages/core/saved-objects/core-saved-objects-api-server:build_types", - "//packages/core/saved-objects/core-saved-objects-api-server-internal:build_types", - "//packages/core/saved-objects/core-saved-objects-api-server-mocks:build_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:build_types", - "//packages/core/saved-objects/core-saved-objects-base-server-mocks:build_types", - "//packages/core/saved-objects/core-saved-objects-browser:build_types", - "//packages/core/saved-objects/core-saved-objects-browser-internal:build_types", - "//packages/core/saved-objects/core-saved-objects-browser-mocks:build_types", - "//packages/core/saved-objects/core-saved-objects-common:build_types", - "//packages/core/saved-objects/core-saved-objects-import-export-server-internal:build_types", - "//packages/core/saved-objects/core-saved-objects-import-export-server-mocks:build_types", - "//packages/core/saved-objects/core-saved-objects-migration-server-internal:build_types", - "//packages/core/saved-objects/core-saved-objects-migration-server-mocks:build_types", - "//packages/core/saved-objects/core-saved-objects-server:build_types", - "//packages/core/saved-objects/core-saved-objects-server-internal:build_types", - "//packages/core/saved-objects/core-saved-objects-server-mocks:build_types", - "//packages/core/saved-objects/core-saved-objects-utils-server:build_types", - "//packages/core/status/core-status-common:build_types", - "//packages/core/status/core-status-common-internal:build_types", - "//packages/core/status/core-status-server:build_types", - "//packages/core/status/core-status-server-internal:build_types", - "//packages/core/status/core-status-server-mocks:build_types", - "//packages/core/test-helpers/core-test-helpers-deprecations-getters:build_types", - "//packages/core/test-helpers/core-test-helpers-http-setup-browser:build_types", - "//packages/core/test-helpers/core-test-helpers-kbn-server:build_types", - "//packages/core/test-helpers/core-test-helpers-so-type-serializer:build_types", - "//packages/core/test-helpers/core-test-helpers-test-utils:build_types", - "//packages/core/theme/core-theme-browser:build_types", - "//packages/core/theme/core-theme-browser-internal:build_types", - "//packages/core/theme/core-theme-browser-mocks:build_types", - "//packages/core/ui-settings/core-ui-settings-browser:build_types", - "//packages/core/ui-settings/core-ui-settings-browser-internal:build_types", - "//packages/core/ui-settings/core-ui-settings-browser-mocks:build_types", - "//packages/core/ui-settings/core-ui-settings-common:build_types", - "//packages/core/ui-settings/core-ui-settings-server:build_types", - "//packages/core/ui-settings/core-ui-settings-server-internal:build_types", - "//packages/core/ui-settings/core-ui-settings-server-mocks:build_types", - "//packages/core/usage-data/core-usage-data-base-server-internal:build_types", - "//packages/core/usage-data/core-usage-data-server:build_types", - "//packages/core/usage-data/core-usage-data-server-internal:build_types", - "//packages/core/usage-data/core-usage-data-server-mocks:build_types", - "//packages/home/sample_data_card:build_types", - "//packages/home/sample_data_tab:build_types", - "//packages/kbn-ace:build_types", - "//packages/kbn-alerts:build_types", - "//packages/kbn-analytics:build_types", - "//packages/kbn-apm-config-loader:build_types", - "//packages/kbn-apm-synthtrace:build_types", - "//packages/kbn-apm-utils:build_types", - "//packages/kbn-axe-config:build_types", - "//packages/kbn-bazel-packages:build_types", - "//packages/kbn-bazel-runner:build_types", - "//packages/kbn-cases-components:build_types", - "//packages/kbn-chart-icons:build_types", - "//packages/kbn-ci-stats-core:build_types", - "//packages/kbn-ci-stats-performance-metrics:build_types", - "//packages/kbn-ci-stats-reporter:build_types", - "//packages/kbn-cli-dev-mode:build_types", - "//packages/kbn-coloring:build_types", - "//packages/kbn-config:build_types", - "//packages/kbn-config-mocks:build_types", - "//packages/kbn-config-schema:build_types", - "//packages/kbn-crypto:build_types", - "//packages/kbn-crypto-browser:build_types", - "//packages/kbn-datemath:build_types", - "//packages/kbn-dev-cli-errors:build_types", - "//packages/kbn-dev-cli-runner:build_types", - "//packages/kbn-dev-proc-runner:build_types", - "//packages/kbn-dev-utils:build_types", - "//packages/kbn-doc-links:build_types", - "//packages/kbn-docs-utils:build_types", - "//packages/kbn-ebt-tools:build_types", - "//packages/kbn-ecs:build_types", - "//packages/kbn-es-archiver:build_types", - "//packages/kbn-es-errors:build_types", - "//packages/kbn-es-query:build_types", - "//packages/kbn-es-types:build_types", - "//packages/kbn-eslint-plugin-disable:build_types", - "//packages/kbn-eslint-plugin-imports:build_types", - "//packages/kbn-failed-test-reporter-cli:build_types", - "//packages/kbn-field-types:build_types", - "//packages/kbn-find-used-node-modules:build_types", - "//packages/kbn-ftr-common-functional-services:build_types", - "//packages/kbn-ftr-screenshot-filename:build_types", - "//packages/kbn-generate:build_types", - "//packages/kbn-get-repo-files:build_types", - "//packages/kbn-guided-onboarding:build_types", - "//packages/kbn-handlebars:build_types", - "//packages/kbn-hapi-mocks:build_types", - "//packages/kbn-health-gateway-server:build_types", - "//packages/kbn-i18n:build_types", - "//packages/kbn-i18n-react:build_types", - "//packages/kbn-import-resolver:build_types", - "//packages/kbn-interpreter:build_types", - "//packages/kbn-io-ts-utils:build_types", - "//packages/kbn-jest-serializers:build_types", - "//packages/kbn-journeys:build_types", - "//packages/kbn-kibana-manifest-schema:build_types", - "//packages/kbn-language-documentation-popover:build_types", - "//packages/kbn-logging:build_types", - "//packages/kbn-logging-mocks:build_types", - "//packages/kbn-managed-vscode-config:build_types", - "//packages/kbn-managed-vscode-config-cli:build_types", - "//packages/kbn-mapbox-gl:build_types", - "//packages/kbn-monaco:build_types", - "//packages/kbn-optimizer:build_types", - "//packages/kbn-optimizer-webpack-helpers:build_types", - "//packages/kbn-osquery-io-ts-types:build_types", - "//packages/kbn-peggy:build_types", - "//packages/kbn-peggy-loader:build_types", - "//packages/kbn-performance-testing-dataset-extractor:build_types", - "//packages/kbn-plugin-discovery:build_types", - "//packages/kbn-plugin-generator:build_types", - "//packages/kbn-plugin-helpers:build_types", - "//packages/kbn-react-field:build_types", - "//packages/kbn-repo-source-classifier:build_types", - "//packages/kbn-repo-source-classifier-cli:build_types", - "//packages/kbn-rison:build_types", - "//packages/kbn-rule-data-utils:build_types", - "//packages/kbn-safer-lodash-set:build_types", - "//packages/kbn-securitysolution-autocomplete:build_types", - "//packages/kbn-securitysolution-es-utils:build_types", - "//packages/kbn-securitysolution-exception-list-components:build_types", - "//packages/kbn-securitysolution-hook-utils:build_types", - "//packages/kbn-securitysolution-io-ts-alerting-types:build_types", - "//packages/kbn-securitysolution-io-ts-list-types:build_types", - "//packages/kbn-securitysolution-io-ts-types:build_types", - "//packages/kbn-securitysolution-io-ts-utils:build_types", - "//packages/kbn-securitysolution-list-api:build_types", - "//packages/kbn-securitysolution-list-constants:build_types", - "//packages/kbn-securitysolution-list-hooks:build_types", - "//packages/kbn-securitysolution-list-utils:build_types", - "//packages/kbn-securitysolution-rules:build_types", - "//packages/kbn-securitysolution-t-grid:build_types", - "//packages/kbn-securitysolution-utils:build_types", - "//packages/kbn-server-http-tools:build_types", - "//packages/kbn-server-route-repository:build_types", - "//packages/kbn-shared-svg:build_types", - "//packages/kbn-shared-ux-utility:build_types", - "//packages/kbn-some-dev-log:build_types", - "//packages/kbn-sort-package-json:build_types", - "//packages/kbn-std:build_types", - "//packages/kbn-stdio-dev-helpers:build_types", - "//packages/kbn-storybook:build_types", - "//packages/kbn-telemetry-tools:build_types", - "//packages/kbn-test:build_types", - "//packages/kbn-test-jest-helpers:build_types", - "//packages/kbn-test-subj-selector:build_types", - "//packages/kbn-tooling-log:build_types", - "//packages/kbn-type-summarizer:build_types", - "//packages/kbn-type-summarizer-cli:build_types", - "//packages/kbn-type-summarizer-core:build_types", - "//packages/kbn-typed-react-router-config:build_types", - "//packages/kbn-ui-shared-deps-npm:build_types", - "//packages/kbn-ui-shared-deps-src:build_types", - "//packages/kbn-ui-theme:build_types", - "//packages/kbn-user-profile-components:build_types", - "//packages/kbn-utility-types:build_types", - "//packages/kbn-utility-types-jest:build_types", - "//packages/kbn-utils:build_types", - "//packages/kbn-yarn-lock-validator:build_types", - "//packages/shared-ux/avatar/solution:build_types", - "//packages/shared-ux/avatar/user_profile/impl:build_types", - "//packages/shared-ux/button_toolbar:build_types", - "//packages/shared-ux/button/exit_full_screen/impl:build_types", - "//packages/shared-ux/button/exit_full_screen/mocks:build_types", - "//packages/shared-ux/card/no_data/impl:build_types", - "//packages/shared-ux/card/no_data/mocks:build_types", - "//packages/shared-ux/file/context:build_types", - "//packages/shared-ux/file/file_picker/impl:build_types", - "//packages/shared-ux/file/file_upload/impl:build_types", - "//packages/shared-ux/file/image/impl:build_types", - "//packages/shared-ux/file/image/mocks:build_types", - "//packages/shared-ux/file/mocks:build_types", - "//packages/shared-ux/file/util:build_types", - "//packages/shared-ux/link/redirect_app/impl:build_types", - "//packages/shared-ux/link/redirect_app/mocks:build_types", - "//packages/shared-ux/markdown/impl:build_types", - "//packages/shared-ux/markdown/mocks:build_types", - "//packages/shared-ux/markdown/types:build_types", - "//packages/shared-ux/page/analytics_no_data/impl:build_types", - "//packages/shared-ux/page/analytics_no_data/mocks:build_types", - "//packages/shared-ux/page/kibana_no_data/impl:build_types", - "//packages/shared-ux/page/kibana_no_data/mocks:build_types", - "//packages/shared-ux/page/kibana_template/impl:build_types", - "//packages/shared-ux/page/kibana_template/mocks:build_types", - "//packages/shared-ux/page/no_data_config/impl:build_types", - "//packages/shared-ux/page/no_data_config/mocks:build_types", - "//packages/shared-ux/page/no_data/impl:build_types", - "//packages/shared-ux/page/no_data/mocks:build_types", - "//packages/shared-ux/page/solution_nav:build_types", - "//packages/shared-ux/prompt/no_data_views/impl:build_types", - "//packages/shared-ux/prompt/no_data_views/mocks:build_types", - "//packages/shared-ux/prompt/not_found:build_types", - "//packages/shared-ux/router/impl:build_types", - "//packages/shared-ux/router/mocks:build_types", - "//packages/shared-ux/storybook/config:build_types", - "//packages/shared-ux/storybook/mock:build_types", - "//x-pack/packages/ml/agg_utils:build_types", - "//x-pack/packages/ml/aiops_components:build_types", - "//x-pack/packages/ml/aiops_utils:build_types", - "//x-pack/packages/ml/is_populated_object:build_types", - "//x-pack/packages/ml/string_hash:build_types", - ], -) - -# Grouping target to call all underlying packages js builds -filegroup( - name = "build", - srcs = [ - ":build_pkg_code" - ], -) - -# Grouping target to call all underlying packages ts builds -filegroup( - name = "build_types", - srcs = [ - ":build_pkg_types" - ], -) diff --git a/packages/analytics/client/BUILD.bazel b/packages/analytics/client/BUILD.bazel deleted file mode 100644 index cc9cf69242b8c..0000000000000 --- a/packages/analytics/client/BUILD.bazel +++ /dev/null @@ -1,137 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "client" -PKG_REQUIRE_NAME = "@kbn/analytics-client" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//fp-ts", - "@npm//io-ts", - "@npm//rxjs", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//rxjs", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/analytics/client/kibana.jsonc b/packages/analytics/client/kibana.jsonc index 5f5aa11feb994..a027e7ee866b5 100644 --- a/packages/analytics/client/kibana.jsonc +++ b/packages/analytics/client/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/analytics-client", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/analytics/client/package.json b/packages/analytics/client/package.json index 247d642adf6d1..6db911a1bac86 100644 --- a/packages/analytics/client/package.json +++ b/packages/analytics/client/package.json @@ -2,9 +2,6 @@ "name": "@kbn/analytics-client", "private": true, "version": "1.0.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/analytics/client/tsconfig.json b/packages/analytics/client/tsconfig.json index cc7ee1b2ebd68..b5bb1c1f7c010 100644 --- a/packages/analytics/client/tsconfig.json +++ b/packages/analytics/client/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../tsconfig.bazel.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/logging-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/analytics/shippers/elastic_v3/browser/BUILD.bazel b/packages/analytics/shippers/elastic_v3/browser/BUILD.bazel deleted file mode 100644 index 790079da9d8ff..0000000000000 --- a/packages/analytics/shippers/elastic_v3/browser/BUILD.bazel +++ /dev/null @@ -1,136 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "browser" -PKG_REQUIRE_NAME = "@kbn/analytics-shippers-elastic-v3-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/analytics/client", - "//packages/analytics/shippers/elastic_v3/common", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/analytics/client:npm_module_types", - "//packages/analytics/shippers/elastic_v3/common:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/analytics/shippers/elastic_v3/browser/kibana.jsonc b/packages/analytics/shippers/elastic_v3/browser/kibana.jsonc index cefab4152c994..a54bd23df252d 100644 --- a/packages/analytics/shippers/elastic_v3/browser/kibana.jsonc +++ b/packages/analytics/shippers/elastic_v3/browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/analytics-shippers-elastic-v3-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/analytics/shippers/elastic_v3/browser/package.json b/packages/analytics/shippers/elastic_v3/browser/package.json index 59c2e7e9fa5bd..88d42d1fd184b 100644 --- a/packages/analytics/shippers/elastic_v3/browser/package.json +++ b/packages/analytics/shippers/elastic_v3/browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/analytics-shippers-elastic-v3-browser", "private": true, "version": "1.0.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/analytics/shippers/elastic_v3/browser/tsconfig.json b/packages/analytics/shippers/elastic_v3/browser/tsconfig.json index 6d893e10d8cc9..7808dee7058f0 100644 --- a/packages/analytics/shippers/elastic_v3/browser/tsconfig.json +++ b/packages/analytics/shippers/elastic_v3/browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client", + "@kbn/analytics-shippers-elastic-v3-common", + "@kbn/logging-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/analytics/shippers/elastic_v3/common/BUILD.bazel b/packages/analytics/shippers/elastic_v3/common/BUILD.bazel deleted file mode 100644 index bb38300b97302..0000000000000 --- a/packages/analytics/shippers/elastic_v3/common/BUILD.bazel +++ /dev/null @@ -1,132 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "common" -PKG_REQUIRE_NAME = "@kbn/analytics-shippers-elastic-v3-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//rxjs", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/analytics/client:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/analytics/shippers/elastic_v3/common/kibana.jsonc b/packages/analytics/shippers/elastic_v3/common/kibana.jsonc index c347233693ff3..30c723c2b5217 100644 --- a/packages/analytics/shippers/elastic_v3/common/kibana.jsonc +++ b/packages/analytics/shippers/elastic_v3/common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/analytics-shippers-elastic-v3-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/analytics/shippers/elastic_v3/common/package.json b/packages/analytics/shippers/elastic_v3/common/package.json index 9e9c8f3054097..4e1caaf0d6a2f 100644 --- a/packages/analytics/shippers/elastic_v3/common/package.json +++ b/packages/analytics/shippers/elastic_v3/common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/analytics-shippers-elastic-v3-common", "private": true, "version": "1.0.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/analytics/shippers/elastic_v3/common/tsconfig.json b/packages/analytics/shippers/elastic_v3/common/tsconfig.json index 6d893e10d8cc9..698191a0c3816 100644 --- a/packages/analytics/shippers/elastic_v3/common/tsconfig.json +++ b/packages/analytics/shippers/elastic_v3/common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/analytics/shippers/elastic_v3/server/BUILD.bazel b/packages/analytics/shippers/elastic_v3/server/BUILD.bazel deleted file mode 100644 index 8f78c9a9c1a71..0000000000000 --- a/packages/analytics/shippers/elastic_v3/server/BUILD.bazel +++ /dev/null @@ -1,131 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "server" -PKG_REQUIRE_NAME = "@kbn/analytics-shippers-elastic-v3-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//node-fetch", - "@npm//rxjs", - "//packages/analytics/client", - "//packages/analytics/shippers/elastic_v3/common", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/node-fetch", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/analytics/client:npm_module_types", - "//packages/analytics/shippers/elastic_v3/common:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/analytics/shippers/elastic_v3/server/kibana.jsonc b/packages/analytics/shippers/elastic_v3/server/kibana.jsonc index 11c29924f3c21..a516db1bbf30e 100644 --- a/packages/analytics/shippers/elastic_v3/server/kibana.jsonc +++ b/packages/analytics/shippers/elastic_v3/server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/analytics-shippers-elastic-v3-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/analytics/shippers/elastic_v3/server/package.json b/packages/analytics/shippers/elastic_v3/server/package.json index 9b05193e3aec0..3fcbd5062d35f 100644 --- a/packages/analytics/shippers/elastic_v3/server/package.json +++ b/packages/analytics/shippers/elastic_v3/server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/analytics-shippers-elastic-v3-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/analytics/shippers/elastic_v3/server/tsconfig.json b/packages/analytics/shippers/elastic_v3/server/tsconfig.json index 6d893e10d8cc9..7808dee7058f0 100644 --- a/packages/analytics/shippers/elastic_v3/server/tsconfig.json +++ b/packages/analytics/shippers/elastic_v3/server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client", + "@kbn/analytics-shippers-elastic-v3-common", + "@kbn/logging-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/analytics/shippers/fullstory/BUILD.bazel b/packages/analytics/shippers/fullstory/BUILD.bazel deleted file mode 100644 index b949d085e5d80..0000000000000 --- a/packages/analytics/shippers/fullstory/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "fullstory" -PKG_REQUIRE_NAME = "@kbn/analytics-shippers-fullstory" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//moment", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment", - "//packages/analytics/client:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/analytics/shippers/fullstory/kibana.jsonc b/packages/analytics/shippers/fullstory/kibana.jsonc index 5d8720fa7486c..d2848e7b3c453 100644 --- a/packages/analytics/shippers/fullstory/kibana.jsonc +++ b/packages/analytics/shippers/fullstory/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/analytics-shippers-fullstory", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/analytics/shippers/fullstory/package.json b/packages/analytics/shippers/fullstory/package.json index 8b8f09163ceb7..4eca1476236a1 100644 --- a/packages/analytics/shippers/fullstory/package.json +++ b/packages/analytics/shippers/fullstory/package.json @@ -2,9 +2,6 @@ "name": "@kbn/analytics-shippers-fullstory", "private": true, "version": "1.0.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/analytics/shippers/fullstory/tsconfig.json b/packages/analytics/shippers/fullstory/tsconfig.json index ef521586433c9..f3b62b9be125f 100644 --- a/packages/analytics/shippers/fullstory/tsconfig.json +++ b/packages/analytics/shippers/fullstory/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client", + "@kbn/logging-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/analytics/shippers/gainsight/BUILD.bazel b/packages/analytics/shippers/gainsight/BUILD.bazel deleted file mode 100644 index 12a1890e8add5..0000000000000 --- a/packages/analytics/shippers/gainsight/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "gainsight" -PKG_REQUIRE_NAME = "@kbn/analytics-shippers-gainsight" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//moment", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment", - "//packages/analytics/client:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/analytics/shippers/gainsight/kibana.jsonc b/packages/analytics/shippers/gainsight/kibana.jsonc index bd490542f9dd4..3731f34d34ad1 100644 --- a/packages/analytics/shippers/gainsight/kibana.jsonc +++ b/packages/analytics/shippers/gainsight/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-browser", "id": "@kbn/analytics-shippers-gainsight", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/analytics/shippers/gainsight/package.json b/packages/analytics/shippers/gainsight/package.json index bd15dac62c115..8b68459c29bfe 100644 --- a/packages/analytics/shippers/gainsight/package.json +++ b/packages/analytics/shippers/gainsight/package.json @@ -2,9 +2,6 @@ "name": "@kbn/analytics-shippers-gainsight", "private": true, "version": "1.0.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/analytics/shippers/gainsight/tsconfig.json b/packages/analytics/shippers/gainsight/tsconfig.json index ef521586433c9..f3b62b9be125f 100644 --- a/packages/analytics/shippers/gainsight/tsconfig.json +++ b/packages/analytics/shippers/gainsight/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client", + "@kbn/logging-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/content-management/content_editor/BUILD.bazel b/packages/content-management/content_editor/BUILD.bazel deleted file mode 100644 index 4239f1b51466c..0000000000000 --- a/packages/content-management/content_editor/BUILD.bazel +++ /dev/null @@ -1,149 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "content_editor" -PKG_REQUIRE_NAME = "@kbn/content-management-content-editor" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/core/mount-utils/core-mount-utils-browser", - "//packages/core/overlays/core-overlays-browser", - "@npm//@elastic/eui", - "@npm//@emotion/react", - "@npm//react", - "@npm//@emotion/css" -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-ambient-storybook-types", - "//packages/kbn-ambient-ui-types", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types", - "//packages/core/overlays/core-overlays-browser:npm_module_types", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//@elastic/eui", - "@npm//rxjs" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/content-management/content_editor/kibana.jsonc b/packages/content-management/content_editor/kibana.jsonc index c462cd7103cbd..ebb0d3e59f63d 100644 --- a/packages/content-management/content_editor/kibana.jsonc +++ b/packages/content-management/content_editor/kibana.jsonc @@ -2,6 +2,4 @@ "type": "shared-common", "id": "@kbn/content-management-content-editor", "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [], } diff --git a/packages/content-management/content_editor/package.json b/packages/content-management/content_editor/package.json index 7f09d1faa2f8b..fb804da89fefa 100644 --- a/packages/content-management/content_editor/package.json +++ b/packages/content-management/content_editor/package.json @@ -2,8 +2,5 @@ "name": "@kbn/content-management-content-editor", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/content-management/content_editor/tsconfig.json b/packages/content-management/content_editor/tsconfig.json index 695a24957687b..c5ee5594be9ff 100644 --- a/packages/content-management/content_editor/tsconfig.json +++ b/packages/content-management/content_editor/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../../tsconfig.bazel.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", + "jsx": "react", + "esModuleInterop": true, "types": [ "jest", "node", @@ -16,5 +16,15 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/core-mount-utils-browser", + "@kbn/core-overlays-browser", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/content-management/table_list/BUILD.bazel b/packages/content-management/table_list/BUILD.bazel deleted file mode 100644 index b8758eb21314f..0000000000000 --- a/packages/content-management/table_list/BUILD.bazel +++ /dev/null @@ -1,164 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "table_list" -PKG_REQUIRE_NAME = "@kbn/content-management-table-list" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/content-management/content_editor", - "//packages/core/http/core-http-browser", - "//packages/core/theme/core-theme-browser", - "//packages/kbn-safer-lodash-set", - "//packages/shared-ux/page/kibana_template/impl", - "@npm//@elastic/eui", - "@npm//@emotion/react", - "@npm//@emotion/css", - "@npm//lodash", - "@npm//moment", - "@npm//react-use", - "@npm//react", - "@npm//rxjs", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/content-management/content_editor:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types", - "//packages/core/overlays/core-overlays-browser:npm_module_types", - "//packages/kbn-ambient-storybook-types", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-safer-lodash-set:npm_module_types", - "//packages/shared-ux/page/kibana_template/impl:npm_module_types", - "//packages/shared-ux/page/kibana_template/types", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/react", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//@elastic/eui", - "@npm//react-use", - "@npm//rxjs", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/content-management/table_list/kibana.jsonc b/packages/content-management/table_list/kibana.jsonc index 0808195639877..1837c97e9d2a5 100644 --- a/packages/content-management/table_list/kibana.jsonc +++ b/packages/content-management/table_list/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/content-management-table-list", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/content-management/table_list/package.json b/packages/content-management/table_list/package.json index 2df98754b0224..b387c8a466b5e 100644 --- a/packages/content-management/table_list/package.json +++ b/packages/content-management/table_list/package.json @@ -2,8 +2,5 @@ "name": "@kbn/content-management-table-list", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/content-management/table_list/tsconfig.json b/packages/content-management/table_list/tsconfig.json index 695a24957687b..16a8a6b1a6de1 100644 --- a/packages/content-management/table_list/tsconfig.json +++ b/packages/content-management/table_list/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../tsconfig.bazel.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -16,5 +14,19 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/content-management-content-editor", + "@kbn/core-http-browser", + "@kbn/core-mount-utils-browser", + "@kbn/core-overlays-browser", + "@kbn/shared-ux-page-kibana-template", + "@kbn/shared-ux-link-redirect-app", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/analytics/core-analytics-browser-internal/BUILD.bazel b/packages/core/analytics/core-analytics-browser-internal/BUILD.bazel deleted file mode 100644 index 3413eaf4fdda1..0000000000000 --- a/packages/core/analytics/core-analytics-browser-internal/BUILD.bazel +++ /dev/null @@ -1,126 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-analytics-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-analytics-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//uuid", - "//packages/analytics/client", - "//packages/kbn-ebt-tools", - "//packages/core/base/core-base-browser-mocks", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/uuid", - "@npm//rxjs", - "//packages/kbn-logging:npm_module_types", - "//packages/analytics/client:npm_module_types", - "//packages/kbn-ebt-tools:npm_module_types", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/core/analytics/core-analytics-browser:npm_module_types", - "//packages/core/base/core-base-browser-mocks:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/analytics/core-analytics-browser-internal/kibana.jsonc b/packages/core/analytics/core-analytics-browser-internal/kibana.jsonc index 45bd5d5bc041a..459e71b2c0e5a 100644 --- a/packages/core/analytics/core-analytics-browser-internal/kibana.jsonc +++ b/packages/core/analytics/core-analytics-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-analytics-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/analytics/core-analytics-browser-internal/package.json b/packages/core/analytics/core-analytics-browser-internal/package.json index f40589e37d198..cf034acaaa1eb 100644 --- a/packages/core/analytics/core-analytics-browser-internal/package.json +++ b/packages/core/analytics/core-analytics-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-analytics-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/analytics/core-analytics-browser-internal/tsconfig.json b/packages/core/analytics/core-analytics-browser-internal/tsconfig.json index ef521586433c9..4c2daa18d079d 100644 --- a/packages/core/analytics/core-analytics-browser-internal/tsconfig.json +++ b/packages/core/analytics/core-analytics-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,18 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/analytics-client", + "@kbn/ebt-tools", + "@kbn/core-base-browser-internal", + "@kbn/core-injected-metadata-browser-internal", + "@kbn/core-analytics-browser", + "@kbn/core-base-browser-mocks", + "@kbn/core-injected-metadata-browser-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/analytics/core-analytics-browser-mocks/BUILD.bazel b/packages/core/analytics/core-analytics-browser-mocks/BUILD.bazel deleted file mode 100644 index d80d2a8feae21..0000000000000 --- a/packages/core/analytics/core-analytics-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-analytics-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-analytics-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/analytics/core-analytics-browser:npm_module_types", - "//packages/core/analytics/core-analytics-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/analytics/core-analytics-browser-mocks/kibana.jsonc b/packages/core/analytics/core-analytics-browser-mocks/kibana.jsonc index 2c3ce58f95d62..93bbc23fbbb79 100644 --- a/packages/core/analytics/core-analytics-browser-mocks/kibana.jsonc +++ b/packages/core/analytics/core-analytics-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-analytics-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/analytics/core-analytics-browser-mocks/package.json b/packages/core/analytics/core-analytics-browser-mocks/package.json index b8dd2d03bad66..fefe7e0c5f04a 100644 --- a/packages/core/analytics/core-analytics-browser-mocks/package.json +++ b/packages/core/analytics/core-analytics-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-analytics-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/analytics/core-analytics-browser-mocks/tsconfig.json b/packages/core/analytics/core-analytics-browser-mocks/tsconfig.json index ef521586433c9..6a1a1a6244c7e 100644 --- a/packages/core/analytics/core-analytics-browser-mocks/tsconfig.json +++ b/packages/core/analytics/core-analytics-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-analytics-browser", + "@kbn/core-analytics-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/analytics/core-analytics-browser/BUILD.bazel b/packages/core/analytics/core-analytics-browser/BUILD.bazel deleted file mode 100644 index 2dbf3c4791bba..0000000000000 --- a/packages/core/analytics/core-analytics-browser/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-analytics-browser" -PKG_REQUIRE_NAME = "@kbn/core-analytics-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/analytics/client:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/analytics/core-analytics-browser/kibana.jsonc b/packages/core/analytics/core-analytics-browser/kibana.jsonc index a17a1e5d5e94b..a82e9d1c78f38 100644 --- a/packages/core/analytics/core-analytics-browser/kibana.jsonc +++ b/packages/core/analytics/core-analytics-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-analytics-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/analytics/core-analytics-browser/package.json b/packages/core/analytics/core-analytics-browser/package.json index 4ef1d65780abb..1df304c1fb38a 100644 --- a/packages/core/analytics/core-analytics-browser/package.json +++ b/packages/core/analytics/core-analytics-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-analytics-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/analytics/core-analytics-browser/tsconfig.json b/packages/core/analytics/core-analytics-browser/tsconfig.json index ef521586433c9..9c3a721a57e23 100644 --- a/packages/core/analytics/core-analytics-browser/tsconfig.json +++ b/packages/core/analytics/core-analytics-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/analytics/core-analytics-server-internal/BUILD.bazel b/packages/core/analytics/core-analytics-server-internal/BUILD.bazel deleted file mode 100644 index 1a507d0a065ce..0000000000000 --- a/packages/core/analytics/core-analytics-server-internal/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-analytics-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-analytics-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/analytics/client", - "//packages/kbn-ebt-tools", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/analytics/client:npm_module_types", - "//packages/kbn-ebt-tools:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/analytics/core-analytics-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/analytics/core-analytics-server-internal/kibana.jsonc b/packages/core/analytics/core-analytics-server-internal/kibana.jsonc index 1ae2d06e0fa77..3d660a39be144 100644 --- a/packages/core/analytics/core-analytics-server-internal/kibana.jsonc +++ b/packages/core/analytics/core-analytics-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-analytics-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/analytics/core-analytics-server-internal/package.json b/packages/core/analytics/core-analytics-server-internal/package.json index 742c092fa58f4..142cc8ffa98d4 100644 --- a/packages/core/analytics/core-analytics-server-internal/package.json +++ b/packages/core/analytics/core-analytics-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-analytics-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts b/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts index 3d98cf4392926..a3bd814f1e32f 100644 --- a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts +++ b/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts @@ -18,6 +18,7 @@ export const analyticsClientMock: jest.Mocked = { registerShipper: jest.fn(), telemetryCounter$: new Subject(), shutdown: jest.fn(), + flush: jest.fn(), }; jest.doMock('@kbn/analytics-client', () => ({ diff --git a/packages/core/analytics/core-analytics-server-internal/tsconfig.json b/packages/core/analytics/core-analytics-server-internal/tsconfig.json index ef521586433c9..56292065f7af6 100644 --- a/packages/core/analytics/core-analytics-server-internal/tsconfig.json +++ b/packages/core/analytics/core-analytics-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client", + "@kbn/ebt-tools", + "@kbn/core-base-server-internal", + "@kbn/core-analytics-server", + "@kbn/config-mocks", + "@kbn/core-base-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/analytics/core-analytics-server-mocks/BUILD.bazel b/packages/core/analytics/core-analytics-server-mocks/BUILD.bazel deleted file mode 100644 index cfcf0175d52db..0000000000000 --- a/packages/core/analytics/core-analytics-server-mocks/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-analytics-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-analytics-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/analytics/core-analytics-server:npm_module_types", - "//packages/core/analytics/core-analytics-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/analytics/core-analytics-server-mocks/kibana.jsonc b/packages/core/analytics/core-analytics-server-mocks/kibana.jsonc index 9c49235144c4d..319fec0506fe4 100644 --- a/packages/core/analytics/core-analytics-server-mocks/kibana.jsonc +++ b/packages/core/analytics/core-analytics-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-analytics-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/analytics/core-analytics-server-mocks/package.json b/packages/core/analytics/core-analytics-server-mocks/package.json index 864715f795249..90a3c4fa6be26 100644 --- a/packages/core/analytics/core-analytics-server-mocks/package.json +++ b/packages/core/analytics/core-analytics-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-analytics-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/analytics/core-analytics-server-mocks/tsconfig.json b/packages/core/analytics/core-analytics-server-mocks/tsconfig.json index ef521586433c9..14613f5e09315 100644 --- a/packages/core/analytics/core-analytics-server-mocks/tsconfig.json +++ b/packages/core/analytics/core-analytics-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-analytics-server", + "@kbn/core-analytics-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/analytics/core-analytics-server/BUILD.bazel b/packages/core/analytics/core-analytics-server/BUILD.bazel deleted file mode 100644 index 7cb5e329e0ffe..0000000000000 --- a/packages/core/analytics/core-analytics-server/BUILD.bazel +++ /dev/null @@ -1,103 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-analytics-server" -PKG_REQUIRE_NAME = "@kbn/core-analytics-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/analytics/client:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/analytics/core-analytics-server/kibana.jsonc b/packages/core/analytics/core-analytics-server/kibana.jsonc index d8faa138efc72..ab497b22d0c9f 100644 --- a/packages/core/analytics/core-analytics-server/kibana.jsonc +++ b/packages/core/analytics/core-analytics-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-analytics-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/analytics/core-analytics-server/package.json b/packages/core/analytics/core-analytics-server/package.json index 0b5d1fce5638e..cacde75dd8b69 100644 --- a/packages/core/analytics/core-analytics-server/package.json +++ b/packages/core/analytics/core-analytics-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-analytics-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/analytics/core-analytics-server/tsconfig.json b/packages/core/analytics/core-analytics-server/tsconfig.json index ef521586433c9..9c3a721a57e23 100644 --- a/packages/core/analytics/core-analytics-server/tsconfig.json +++ b/packages/core/analytics/core-analytics-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/application/core-application-browser-internal/BUILD.bazel b/packages/core/application/core-application-browser-internal/BUILD.bazel deleted file mode 100644 index 3232dfc677aff..0000000000000 --- a/packages/core/application/core-application-browser-internal/BUILD.bazel +++ /dev/null @@ -1,148 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-application-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-application-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-router-dom", - "@npm//react-use", - "@npm//enzyme", - "@npm//rxjs", - "@npm//history", - "@npm//@elastic/eui", - "//packages/kbn-std", - "//packages/kbn-i18n", - "//packages/kbn-i18n-react", - "//packages/core/application/core-application-common", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/enzyme", - "@npm//@types/react", - "@npm//@types/react-router-dom", - "@npm//react-use", - "@npm//@types/history", - "@npm//rxjs", - "@npm//@elastic/eui", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/capabilities/core-capabilities-common:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/overlays/core-overlays-browser:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types", - "//packages/core/capabilities/core-capabilities-browser-internal:npm_module_types", - "//packages/core/application/core-application-common:npm_module_types", - "//packages/core/application/core-application-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/application/core-application-browser-internal/kibana.jsonc b/packages/core/application/core-application-browser-internal/kibana.jsonc index 5ebb9290df118..2c21e932f1ccd 100644 --- a/packages/core/application/core-application-browser-internal/kibana.jsonc +++ b/packages/core/application/core-application-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-application-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/application/core-application-browser-internal/package.json b/packages/core/application/core-application-browser-internal/package.json index 4ded58a99f55c..cfcd138706d33 100644 --- a/packages/core/application/core-application-browser-internal/package.json +++ b/packages/core/application/core-application-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-application-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/application/core-application-browser-internal/src/application_service.tsx b/packages/core/application/core-application-browser-internal/src/application_service.tsx index 28c7dd1b6ebb0..54e4c98dd241e 100644 --- a/packages/core/application/core-application-browser-internal/src/application_service.tsx +++ b/packages/core/application/core-application-browser-internal/src/application_service.tsx @@ -36,14 +36,14 @@ import { getLeaveAction, isConfirmAction } from './application_leave'; import { getUserConfirmationHandler } from './navigation_confirm'; import { appendAppPath, parseAppUrl, relativeToAbsolute, getAppInfo } from './utils'; -interface SetupDeps { +export interface SetupDeps { http: HttpSetup; history?: History; /** Used to redirect to external urls */ redirectTo?: (path: string) => void; } -interface StartDeps { +export interface StartDeps { http: HttpStart; theme: ThemeServiceStart; overlays: OverlayStart; diff --git a/packages/core/application/core-application-browser-internal/tsconfig.json b/packages/core/application/core-application-browser-internal/tsconfig.json index c561d9f220124..e6bff7c88eb49 100644 --- a/packages/core/application/core-application-browser-internal/tsconfig.json +++ b/packages/core/application/core-application-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,28 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/std", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/core-base-common", + "@kbn/core-http-browser", + "@kbn/core-capabilities-common", + "@kbn/core-theme-browser", + "@kbn/core-overlays-browser", + "@kbn/core-mount-utils-browser", + "@kbn/core-capabilities-browser-internal", + "@kbn/core-application-common", + "@kbn/core-application-browser", + "@kbn/core-capabilities-browser-mocks", + "@kbn/core-overlays-browser-mocks", + "@kbn/core-http-browser-mocks", + "@kbn/core-theme-browser-mocks", + "@kbn/core-http-browser-internal", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/application/core-application-browser-mocks/BUILD.bazel b/packages/core/application/core-application-browser-mocks/BUILD.bazel deleted file mode 100644 index 979cc8d11021b..0000000000000 --- a/packages/core/application/core-application-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,121 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-application-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-application-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-std", - "//packages/core/capabilities/core-capabilities-browser-mocks" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/history", - "@npm//rxjs", - "//packages/kbn-std:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types", - "//packages/core/application/core-application-browser:npm_module_types", - "//packages/core/application/core-application-browser-internal:npm_module_types", - "//packages/core/capabilities/core-capabilities-browser-mocks:npm_module_types", - "//packages/core/theme/core-theme-browser-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/application/core-application-browser-mocks/kibana.jsonc b/packages/core/application/core-application-browser-mocks/kibana.jsonc index bdbeafdcc2652..35714d9df41d4 100644 --- a/packages/core/application/core-application-browser-mocks/kibana.jsonc +++ b/packages/core/application/core-application-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-application-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/application/core-application-browser-mocks/package.json b/packages/core/application/core-application-browser-mocks/package.json index 925c02bcbb09d..530be8622ac26 100644 --- a/packages/core/application/core-application-browser-mocks/package.json +++ b/packages/core/application/core-application-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-application-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/application/core-application-browser-mocks/tsconfig.json b/packages/core/application/core-application-browser-mocks/tsconfig.json index 37f8e83d0d7a6..aac8040ebe3ec 100644 --- a/packages/core/application/core-application-browser-mocks/tsconfig.json +++ b/packages/core/application/core-application-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,16 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-mount-utils-browser", + "@kbn/core-application-browser", + "@kbn/core-application-browser-internal", + "@kbn/core-capabilities-browser-mocks", + "@kbn/core-theme-browser-mocks", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/application/core-application-browser/BUILD.bazel b/packages/core/application/core-application-browser/BUILD.bazel deleted file mode 100644 index b2e1184ef03ed..0000000000000 --- a/packages/core/application/core-application-browser/BUILD.bazel +++ /dev/null @@ -1,120 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-application-browser" -PKG_REQUIRE_NAME = "@kbn/core-application-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/history", - "@npm//@elastic/eui", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types", - "//packages/core/capabilities/core-capabilities-common:npm_module_types", - "//packages/core/application/core-application-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/application/core-application-browser/kibana.jsonc b/packages/core/application/core-application-browser/kibana.jsonc index 6a8931fa36f74..6d8428610bba0 100644 --- a/packages/core/application/core-application-browser/kibana.jsonc +++ b/packages/core/application/core-application-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-application-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/application/core-application-browser/package.json b/packages/core/application/core-application-browser/package.json index 3626396a9eff3..4ff030fb4b9ee 100644 --- a/packages/core/application/core-application-browser/package.json +++ b/packages/core/application/core-application-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-application-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/application/core-application-browser/tsconfig.json b/packages/core/application/core-application-browser/tsconfig.json index 48df8f2957246..3a15995e0a007 100644 --- a/packages/core/application/core-application-browser/tsconfig.json +++ b/packages/core/application/core-application-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,15 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-theme-browser", + "@kbn/core-mount-utils-browser", + "@kbn/core-capabilities-common", + "@kbn/core-application-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/application/core-application-common/BUILD.bazel b/packages/core/application/core-application-common/BUILD.bazel deleted file mode 100644 index 43edda698fa09..0000000000000 --- a/packages/core/application/core-application-common/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-application-common" -PKG_REQUIRE_NAME = "@kbn/core-application-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "//packages/kbn-i18n", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-i18n:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/application/core-application-common/kibana.jsonc b/packages/core/application/core-application-common/kibana.jsonc index da1cc4d8f7d9b..762e4f62119e8 100644 --- a/packages/core/application/core-application-common/kibana.jsonc +++ b/packages/core/application/core-application-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-application-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/application/core-application-common/package.json b/packages/core/application/core-application-common/package.json index 22b9a3e452f17..6a402e1ad15d4 100644 --- a/packages/core/application/core-application-common/package.json +++ b/packages/core/application/core-application-common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-application-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/application/core-application-common/tsconfig.json b/packages/core/application/core-application-common/tsconfig.json index 48df8f2957246..648faae82941a 100644 --- a/packages/core/application/core-application-common/tsconfig.json +++ b/packages/core/application/core-application-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,11 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/apps/core-apps-browser-internal/BUILD.bazel b/packages/core/apps/core-apps-browser-internal/BUILD.bazel deleted file mode 100644 index 941b011104ba9..0000000000000 --- a/packages/core/apps/core-apps-browser-internal/BUILD.bazel +++ /dev/null @@ -1,135 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-apps-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-apps-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-dom", - "@npm//history", - "@npm//@elastic/eui", - "//packages/kbn-i18n", - "//packages/kbn-i18n-react", - "//packages/core/mount-utils/core-mount-utils-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@types/react-dom", - "@npm//@types/history", - "@npm//@elastic/eui", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/core/doc-links/core-doc-links-browser:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types", - "//packages/core/notifications/core-notifications-browser:npm_module_types", - "//packages/core/application/core-application-browser:npm_module_types", - "//packages/core/application/core-application-browser-internal:npm_module_types", - "//packages/core/theme/core-theme-browser-internal:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser-internal:npm_module_types", - "//packages/core/status/core-status-common-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/apps/core-apps-browser-internal/kibana.jsonc b/packages/core/apps/core-apps-browser-internal/kibana.jsonc index 552de143ce1de..29b64390ec547 100644 --- a/packages/core/apps/core-apps-browser-internal/kibana.jsonc +++ b/packages/core/apps/core-apps-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-apps-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/apps/core-apps-browser-internal/package.json b/packages/core/apps/core-apps-browser-internal/package.json index 04029a6f91fbc..f5ff325da6c59 100644 --- a/packages/core/apps/core-apps-browser-internal/package.json +++ b/packages/core/apps/core-apps-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-apps-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/apps/core-apps-browser-internal/tsconfig.json b/packages/core/apps/core-apps-browser-internal/tsconfig.json index 37f8e83d0d7a6..f824f9f638215 100644 --- a/packages/core/apps/core-apps-browser-internal/tsconfig.json +++ b/packages/core/apps/core-apps-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,32 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/core-base-browser-internal", + "@kbn/core-injected-metadata-browser-internal", + "@kbn/core-doc-links-browser", + "@kbn/core-http-browser", + "@kbn/core-ui-settings-browser", + "@kbn/core-notifications-browser", + "@kbn/core-application-browser", + "@kbn/core-application-browser-internal", + "@kbn/core-theme-browser-internal", + "@kbn/core-mount-utils-browser-internal", + "@kbn/core-status-common-internal", + "@kbn/core-http-browser-internal", + "@kbn/core-application-browser-mocks", + "@kbn/core-notifications-browser-mocks", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/core-http-browser-mocks", + "@kbn/core-metrics-collectors-server-mocks", + "@kbn/core-status-common", + "@kbn/core-doc-links-browser-mocks", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/apps/core-apps-browser-mocks/BUILD.bazel b/packages/core/apps/core-apps-browser-mocks/BUILD.bazel deleted file mode 100644 index 65ce563a97d97..0000000000000 --- a/packages/core/apps/core-apps-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-apps-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-apps-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/apps/core-apps-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/apps/core-apps-browser-mocks/kibana.jsonc b/packages/core/apps/core-apps-browser-mocks/kibana.jsonc index 074993f2bd62b..970d9411462ad 100644 --- a/packages/core/apps/core-apps-browser-mocks/kibana.jsonc +++ b/packages/core/apps/core-apps-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-apps-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/apps/core-apps-browser-mocks/package.json b/packages/core/apps/core-apps-browser-mocks/package.json index 690d50dc3a1cf..af2cd7b1027ba 100644 --- a/packages/core/apps/core-apps-browser-mocks/package.json +++ b/packages/core/apps/core-apps-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-apps-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/apps/core-apps-browser-mocks/tsconfig.json b/packages/core/apps/core-apps-browser-mocks/tsconfig.json index 741519055e986..8b74f6d511cc2 100644 --- a/packages/core/apps/core-apps-browser-mocks/tsconfig.json +++ b/packages/core/apps/core-apps-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-apps-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/apps/core-apps-server-internal/BUILD.bazel b/packages/core/apps/core-apps-server-internal/BUILD.bazel deleted file mode 100644 index 94f52482c27d4..0000000000000 --- a/packages/core/apps/core-apps-server-internal/BUILD.bazel +++ /dev/null @@ -1,141 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-apps-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-apps-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -ASSETS = glob(["assets/**/*"]) - -filegroup( - name = "assets", - srcs = ASSETS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - ":assets" -] - -RUNTIME_DEPS = [ - "@npm//elastic-apm-node", - "@npm//lru-cache", - "@npm//mime-types", - "//packages/kbn-config", - "//packages/kbn-config-schema", - "//packages/kbn-utils", - "//packages/kbn-logging", - "//packages/kbn-ui-shared-deps-npm", - "//packages/kbn-ui-shared-deps-src", - "//packages/core/base/core-base-server-internal", - "//packages/core/lifecycle/core-lifecycle-server-internal", - "//packages/core/plugins/core-plugins-base-server-internal", -] - -TYPES_DEPS = [ - "@npm//elastic-apm-node", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lru-cache", - "@npm//@types/mime-types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/kbn-ui-shared-deps-src:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/http/core-http-resources-server:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-server-internal:npm_module_types", - "//packages/core/plugins/core-plugins-base-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/apps/core-apps-server-internal/kibana.jsonc b/packages/core/apps/core-apps-server-internal/kibana.jsonc index 976f82a69e7c9..8c73dfc0752d4 100644 --- a/packages/core/apps/core-apps-server-internal/kibana.jsonc +++ b/packages/core/apps/core-apps-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-apps-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/apps/core-apps-server-internal/package.json b/packages/core/apps/core-apps-server-internal/package.json index 04c52e856bf2a..0a91a88092468 100644 --- a/packages/core/apps/core-apps-server-internal/package.json +++ b/packages/core/apps/core-apps-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-apps-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.mocks.ts b/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.mocks.ts index 218fee67289a9..c5937886ad3e4 100644 --- a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.mocks.ts +++ b/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.mocks.ts @@ -18,3 +18,7 @@ jest.doMock('@kbn/ui-shared-deps-src', () => ({ jest.doMock('@kbn/ui-shared-deps-npm', () => ({ distDir: 'uiSharedDepsNpmDistDir', })); + +jest.doMock('@kbn/monaco/server', () => ({ + bundleDir: 'kbnMonacoBundleDir', +})); diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts b/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts index 6ec5603137340..249d3880c07d6 100644 --- a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts +++ b/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts @@ -56,7 +56,7 @@ describe('registerBundleRoutes', () => { uiPlugins: createUiPlugins(), }); - expect(registerRouteForBundleMock).toHaveBeenCalledTimes(3); + expect(registerRouteForBundleMock).toHaveBeenCalledTimes(4); expect(registerRouteForBundleMock).toHaveBeenCalledWith(router, { fileHashCache: expect.any(FileHashCache), @@ -81,6 +81,14 @@ describe('registerBundleRoutes', () => { publicPath: '/server-base-path/42/bundles/core/', routePath: '/42/bundles/core/', }); + + expect(registerRouteForBundleMock).toHaveBeenCalledWith(router, { + fileHashCache: expect.any(FileHashCache), + isDist: true, + bundlesPath: 'kbnMonacoBundleDir', + publicPath: '/server-base-path/42/bundles/kbn-monaco/', + routePath: '/42/bundles/kbn-monaco/', + }); }); it('registers plugin bundles', () => { @@ -91,7 +99,7 @@ describe('registerBundleRoutes', () => { uiPlugins: createUiPlugins('plugin-a', 'plugin-b'), }); - expect(registerRouteForBundleMock).toHaveBeenCalledTimes(5); + expect(registerRouteForBundleMock).toHaveBeenCalledTimes(6); expect(registerRouteForBundleMock).toHaveBeenCalledWith(router, { fileHashCache: expect.any(FileHashCache), diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.ts b/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.ts index d0b5094edf94c..ad1008c5ac1e3 100644 --- a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.ts +++ b/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.ts @@ -8,9 +8,10 @@ import { join } from 'path'; import type { PackageInfo } from '@kbn/config'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; import UiSharedDepsNpm from '@kbn/ui-shared-deps-npm'; import { distDir as UiSharedDepsSrcDistDir } from '@kbn/ui-shared-deps-src'; +import * as KbnMonaco from '@kbn/monaco/server'; import type { IRouter } from '@kbn/core-http-server'; import type { UiPlugins } from '@kbn/core-plugins-base-server-internal'; import { FileHashCache } from './file_hash_cache'; @@ -64,6 +65,13 @@ export function registerBundleRoutes({ fileHashCache, isDist, }); + registerRouteForBundle(router, { + publicPath: `${serverBasePath}/${buildNum}/bundles/kbn-monaco/`, + routePath: `/${buildNum}/bundles/kbn-monaco/`, + bundlesPath: KbnMonaco.bundleDir, + fileHashCache, + isDist, + }); [...uiPlugins.internal.entries()].forEach(([id, { publicTargetDir, version }]) => { registerRouteForBundle(router, { diff --git a/packages/core/apps/core-apps-server-internal/src/core_app.ts b/packages/core/apps/core-apps-server-internal/src/core_app.ts index 3e094fab889a6..872f3761b327f 100644 --- a/packages/core/apps/core-apps-server-internal/src/core_app.ts +++ b/packages/core/apps/core-apps-server-internal/src/core_app.ts @@ -9,7 +9,7 @@ import { stringify } from 'querystring'; import { Env } from '@kbn/config'; import { schema } from '@kbn/config-schema'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; import type { Logger } from '@kbn/logging'; import type { CoreContext } from '@kbn/core-base-server-internal'; import type { diff --git a/packages/core/apps/core-apps-server-internal/tsconfig.json b/packages/core/apps/core-apps-server-internal/tsconfig.json index ff48529c6f303..36ecc68c7cbc1 100644 --- a/packages/core/apps/core-apps-server-internal/tsconfig.json +++ b/packages/core/apps/core-apps-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": false, "types": [ "jest", @@ -12,5 +10,30 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/config", + "@kbn/config-schema", + "@kbn/ui-shared-deps-npm", + "@kbn/ui-shared-deps-src", + "@kbn/logging", + "@kbn/core-base-server-internal", + "@kbn/core-http-resources-server", + "@kbn/core-http-server", + "@kbn/core-lifecycle-server-internal", + "@kbn/core-plugins-base-server-internal", + "@kbn/repo-info", + "@kbn/core-base-server-mocks", + "@kbn/core-http-router-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-http-resources-server-mocks", + "@kbn/core-base-common", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-lifecycle-server-mocks", + "@kbn/core-ui-settings-server", + "@kbn/monaco", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/base/core-base-browser-internal/BUILD.bazel b/packages/core/base/core-base-browser-internal/BUILD.bazel deleted file mode 100644 index 02e0c85678632..0000000000000 --- a/packages/core/base/core-base-browser-internal/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-base-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-base-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/core/base/core-base-common-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/base/core-base-browser-internal/kibana.jsonc b/packages/core/base/core-base-browser-internal/kibana.jsonc index 7254343b42c5f..e264f079717ed 100644 --- a/packages/core/base/core-base-browser-internal/kibana.jsonc +++ b/packages/core/base/core-base-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-base-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/base/core-base-browser-internal/package.json b/packages/core/base/core-base-browser-internal/package.json index dc3cbe0f4fd5f..cda8355033624 100644 --- a/packages/core/base/core-base-browser-internal/package.json +++ b/packages/core/base/core-base-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-base-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/base/core-base-browser-internal/tsconfig.json b/packages/core/base/core-base-browser-internal/tsconfig.json index 3cdea36de9eac..a3e5d5fc950b9 100644 --- a/packages/core/base/core-base-browser-internal/tsconfig.json +++ b/packages/core/base/core-base-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/config", + "@kbn/core-base-common-internal", + "@kbn/logging", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/base/core-base-browser-mocks/BUILD.bazel b/packages/core/base/core-base-browser-mocks/BUILD.bazel deleted file mode 100644 index 4eefc60344077..0000000000000 --- a/packages/core/base/core-base-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-base-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-base-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-logging-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-logging-mocks:npm_module_types", - "//packages/core/base/core-base-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/base/core-base-browser-mocks/kibana.jsonc b/packages/core/base/core-base-browser-mocks/kibana.jsonc index 5911ba33ca9d4..48c6b95d3afbd 100644 --- a/packages/core/base/core-base-browser-mocks/kibana.jsonc +++ b/packages/core/base/core-base-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-base-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/base/core-base-browser-mocks/package.json b/packages/core/base/core-base-browser-mocks/package.json index b0e8f7612cbc0..a6c7560e4cccd 100644 --- a/packages/core/base/core-base-browser-mocks/package.json +++ b/packages/core/base/core-base-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-base-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/base/core-base-browser-mocks/tsconfig.json b/packages/core/base/core-base-browser-mocks/tsconfig.json index ef521586433c9..c55b005c3a570 100644 --- a/packages/core/base/core-base-browser-mocks/tsconfig.json +++ b/packages/core/base/core-base-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging-mocks", + "@kbn/core-base-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/base/core-base-common-internal/BUILD.bazel b/packages/core/base/core-base-common-internal/BUILD.bazel deleted file mode 100644 index 06e7daca4fa3e..0000000000000 --- a/packages/core/base/core-base-common-internal/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-base-common-internal" -PKG_REQUIRE_NAME = "@kbn/core-base-common-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/base/core-base-common-internal/kibana.jsonc b/packages/core/base/core-base-common-internal/kibana.jsonc index 61abd6d9a872c..8f2083119d1ba 100644 --- a/packages/core/base/core-base-common-internal/kibana.jsonc +++ b/packages/core/base/core-base-common-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-base-common-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/base/core-base-common-internal/package.json b/packages/core/base/core-base-common-internal/package.json index ea555dbf17a7d..aa0d19ac4689c 100644 --- a/packages/core/base/core-base-common-internal/package.json +++ b/packages/core/base/core-base-common-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-base-common-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/base/core-base-common-internal/tsconfig.json b/packages/core/base/core-base-common-internal/tsconfig.json index 3cdea36de9eac..0f16c2b9311d8 100644 --- a/packages/core/base/core-base-common-internal/tsconfig.json +++ b/packages/core/base/core-base-common-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/base/core-base-common/BUILD.bazel b/packages/core/base/core-base-common/BUILD.bazel deleted file mode 100644 index 4a5b48d3aaeb3..0000000000000 --- a/packages/core/base/core-base-common/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-base-common" -PKG_REQUIRE_NAME = "@kbn/core-base-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-std", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-config:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/base/core-base-common/kibana.jsonc b/packages/core/base/core-base-common/kibana.jsonc index d72d5da919f1c..5a9691ad80c45 100644 --- a/packages/core/base/core-base-common/kibana.jsonc +++ b/packages/core/base/core-base-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-base-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/base/core-base-common/package.json b/packages/core/base/core-base-common/package.json index 6eb5ea8f82bc7..6d794b679b3cb 100644 --- a/packages/core/base/core-base-common/package.json +++ b/packages/core/base/core-base-common/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-base-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/base/core-base-common/tsconfig.json b/packages/core/base/core-base-common/tsconfig.json index ef521586433c9..40ac62b671e04 100644 --- a/packages/core/base/core-base-common/tsconfig.json +++ b/packages/core/base/core-base-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/base/core-base-server-internal/BUILD.bazel b/packages/core/base/core-base-server-internal/BUILD.bazel deleted file mode 100644 index b30d20874ae1c..0000000000000 --- a/packages/core/base/core-base-server-internal/BUILD.bazel +++ /dev/null @@ -1,107 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-base-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-base-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/base/core-base-common-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/base/core-base-server-internal/kibana.jsonc b/packages/core/base/core-base-server-internal/kibana.jsonc index 0a21a2b7e6384..569148c437ddc 100644 --- a/packages/core/base/core-base-server-internal/kibana.jsonc +++ b/packages/core/base/core-base-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-base-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/base/core-base-server-internal/package.json b/packages/core/base/core-base-server-internal/package.json index 88348d974ae7a..1b35ac29d27e0 100644 --- a/packages/core/base/core-base-server-internal/package.json +++ b/packages/core/base/core-base-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-base-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/base/core-base-server-internal/tsconfig.json b/packages/core/base/core-base-server-internal/tsconfig.json index ef521586433c9..fa2b8ec8c8cb1 100644 --- a/packages/core/base/core-base-server-internal/tsconfig.json +++ b/packages/core/base/core-base-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/utility-types", + "@kbn/core-base-common-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/base/core-base-server-mocks/BUILD.bazel b/packages/core/base/core-base-server-mocks/BUILD.bazel deleted file mode 100644 index 164c71eade849..0000000000000 --- a/packages/core/base/core-base-server-mocks/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-base-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-base-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-utils", - "//packages/kbn-config", - "//packages/kbn-logging-mocks", - "//packages/kbn-config-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types-jest:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-mocks:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/base/core-base-server-mocks/kibana.jsonc b/packages/core/base/core-base-server-mocks/kibana.jsonc index 762615e557b81..438181d917750 100644 --- a/packages/core/base/core-base-server-mocks/kibana.jsonc +++ b/packages/core/base/core-base-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-base-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/base/core-base-server-mocks/package.json b/packages/core/base/core-base-server-mocks/package.json index 99b8d1823c036..88bd6628ffd85 100644 --- a/packages/core/base/core-base-server-mocks/package.json +++ b/packages/core/base/core-base-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-base-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/base/core-base-server-mocks/src/core_context.mock.ts b/packages/core/base/core-base-server-mocks/src/core_context.mock.ts index 6a0ed511a97b0..ca9cb0a654a90 100644 --- a/packages/core/base/core-base-server-mocks/src/core_context.mock.ts +++ b/packages/core/base/core-base-server-mocks/src/core_context.mock.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; import { Env, IConfigService } from '@kbn/config'; import type { LoggerFactory } from '@kbn/logging'; diff --git a/packages/core/base/core-base-server-mocks/tsconfig.json b/packages/core/base/core-base-server-mocks/tsconfig.json index ef521586433c9..55ec929a987a5 100644 --- a/packages/core/base/core-base-server-mocks/tsconfig.json +++ b/packages/core/base/core-base-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,17 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types-jest", + "@kbn/config", + "@kbn/config-mocks", + "@kbn/logging", + "@kbn/logging-mocks", + "@kbn/core-base-server-internal", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/capabilities/core-capabilities-browser-internal/BUILD.bazel b/packages/core/capabilities/core-capabilities-browser-internal/BUILD.bazel deleted file mode 100644 index ae1ae63ce7275..0000000000000 --- a/packages/core/capabilities/core-capabilities-browser-internal/BUILD.bazel +++ /dev/null @@ -1,119 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-capabilities-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-capabilities-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-std", - ### test dependencies - "//packages/core/http/core-http-browser-mocks" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/capabilities/core-capabilities-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/capabilities/core-capabilities-browser-internal/kibana.jsonc b/packages/core/capabilities/core-capabilities-browser-internal/kibana.jsonc index 48f55a81a7a68..4986d1386610f 100644 --- a/packages/core/capabilities/core-capabilities-browser-internal/kibana.jsonc +++ b/packages/core/capabilities/core-capabilities-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-capabilities-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/capabilities/core-capabilities-browser-internal/package.json b/packages/core/capabilities/core-capabilities-browser-internal/package.json index db46291953708..6734b2b734937 100644 --- a/packages/core/capabilities/core-capabilities-browser-internal/package.json +++ b/packages/core/capabilities/core-capabilities-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-capabilities-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/capabilities/core-capabilities-browser-internal/tsconfig.json b/packages/core/capabilities/core-capabilities-browser-internal/tsconfig.json index 48df8f2957246..258f96a51d15b 100644 --- a/packages/core/capabilities/core-capabilities-browser-internal/tsconfig.json +++ b/packages/core/capabilities/core-capabilities-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,6 +9,16 @@ }, "include": [ "**/*.ts", - "**/*.tsx", + "**/*.tsx", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/std", + "@kbn/core-http-browser", + "@kbn/core-http-browser-mocks", + "@kbn/core-capabilities-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/capabilities/core-capabilities-browser-mocks/BUILD.bazel b/packages/core/capabilities/core-capabilities-browser-mocks/BUILD.bazel deleted file mode 100644 index bed02693f0b20..0000000000000 --- a/packages/core/capabilities/core-capabilities-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-capabilities-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-capabilities-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-std", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/capabilities/core-capabilities-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/capabilities/core-capabilities-browser-mocks/kibana.jsonc b/packages/core/capabilities/core-capabilities-browser-mocks/kibana.jsonc index 5e6ddff3a4283..ab693c53daa3f 100644 --- a/packages/core/capabilities/core-capabilities-browser-mocks/kibana.jsonc +++ b/packages/core/capabilities/core-capabilities-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-capabilities-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/capabilities/core-capabilities-browser-mocks/package.json b/packages/core/capabilities/core-capabilities-browser-mocks/package.json index c278de75213cd..848ca72a3449f 100644 --- a/packages/core/capabilities/core-capabilities-browser-mocks/package.json +++ b/packages/core/capabilities/core-capabilities-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-capabilities-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/capabilities/core-capabilities-browser-mocks/tsconfig.json b/packages/core/capabilities/core-capabilities-browser-mocks/tsconfig.json index 48df8f2957246..d281d8f8d1ebb 100644 --- a/packages/core/capabilities/core-capabilities-browser-mocks/tsconfig.json +++ b/packages/core/capabilities/core-capabilities-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/std", + "@kbn/utility-types", + "@kbn/core-capabilities-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/capabilities/core-capabilities-common/BUILD.bazel b/packages/core/capabilities/core-capabilities-common/BUILD.bazel deleted file mode 100644 index 1cb1470f2c4e7..0000000000000 --- a/packages/core/capabilities/core-capabilities-common/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-capabilities-common" -PKG_REQUIRE_NAME = "@kbn/core-capabilities-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/capabilities/core-capabilities-common/kibana.jsonc b/packages/core/capabilities/core-capabilities-common/kibana.jsonc index 5349e81ad3626..87bb4d2977a33 100644 --- a/packages/core/capabilities/core-capabilities-common/kibana.jsonc +++ b/packages/core/capabilities/core-capabilities-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-capabilities-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/capabilities/core-capabilities-common/package.json b/packages/core/capabilities/core-capabilities-common/package.json index c0454d5a5e73e..160b66ad7ecfd 100644 --- a/packages/core/capabilities/core-capabilities-common/package.json +++ b/packages/core/capabilities/core-capabilities-common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-capabilities-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/capabilities/core-capabilities-common/tsconfig.json b/packages/core/capabilities/core-capabilities-common/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/capabilities/core-capabilities-common/tsconfig.json +++ b/packages/core/capabilities/core-capabilities-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/capabilities/core-capabilities-server-internal/BUILD.bazel b/packages/core/capabilities/core-capabilities-server-internal/BUILD.bazel deleted file mode 100644 index 2c99ea26797aa..0000000000000 --- a/packages/core/capabilities/core-capabilities-server-internal/BUILD.bazel +++ /dev/null @@ -1,120 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-capabilities-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-capabilities-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "//packages/kbn-config-schema", - "//packages/kbn-apm-utils", - ### test dependencies - "//packages/core/base/core-base-server-mocks", - "//packages/core/http/core-http-router-server-mocks", - "//packages/core/http/core-http-server-mocks", - -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//lodash", - "//packages/kbn-apm-utils:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/capabilities/core-capabilities-common:npm_module_types", - "//packages/core/capabilities/core-capabilities-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/capabilities/core-capabilities-server-internal/kibana.jsonc b/packages/core/capabilities/core-capabilities-server-internal/kibana.jsonc index 3c464af07ea43..89591227f2542 100644 --- a/packages/core/capabilities/core-capabilities-server-internal/kibana.jsonc +++ b/packages/core/capabilities/core-capabilities-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-capabilities-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/capabilities/core-capabilities-server-internal/package.json b/packages/core/capabilities/core-capabilities-server-internal/package.json index c5d445c4ae520..9637e88808e20 100644 --- a/packages/core/capabilities/core-capabilities-server-internal/package.json +++ b/packages/core/capabilities/core-capabilities-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-capabilities-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/capabilities/core-capabilities-server-internal/tsconfig.json b/packages/core/capabilities/core-capabilities-server-internal/tsconfig.json index ef521586433c9..64ee048df3913 100644 --- a/packages/core/capabilities/core-capabilities-server-internal/tsconfig.json +++ b/packages/core/capabilities/core-capabilities-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,21 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/apm-utils", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/core-base-server-internal", + "@kbn/core-http-server", + "@kbn/core-http-server-internal", + "@kbn/core-capabilities-common", + "@kbn/core-capabilities-server", + "@kbn/core-base-server-mocks", + "@kbn/core-http-router-server-mocks", + "@kbn/core-http-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/capabilities/core-capabilities-server-mocks/BUILD.bazel b/packages/core/capabilities/core-capabilities-server-mocks/BUILD.bazel deleted file mode 100644 index 1666555ef5f37..0000000000000 --- a/packages/core/capabilities/core-capabilities-server-mocks/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-capabilities-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-capabilities-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/capabilities/core-capabilities-common:npm_module_types", - "//packages/core/capabilities/core-capabilities-server:npm_module_types", - "//packages/core/capabilities/core-capabilities-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/capabilities/core-capabilities-server-mocks/kibana.jsonc b/packages/core/capabilities/core-capabilities-server-mocks/kibana.jsonc index 5404ed714a6eb..68739c985d15b 100644 --- a/packages/core/capabilities/core-capabilities-server-mocks/kibana.jsonc +++ b/packages/core/capabilities/core-capabilities-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-capabilities-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/capabilities/core-capabilities-server-mocks/package.json b/packages/core/capabilities/core-capabilities-server-mocks/package.json index 0c82d3de94e53..edd5860d2136c 100644 --- a/packages/core/capabilities/core-capabilities-server-mocks/package.json +++ b/packages/core/capabilities/core-capabilities-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-capabilities-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/capabilities/core-capabilities-server-mocks/tsconfig.json b/packages/core/capabilities/core-capabilities-server-mocks/tsconfig.json index ef521586433c9..a8fa17426573a 100644 --- a/packages/core/capabilities/core-capabilities-server-mocks/tsconfig.json +++ b/packages/core/capabilities/core-capabilities-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-capabilities-common", + "@kbn/core-capabilities-server", + "@kbn/core-capabilities-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/capabilities/core-capabilities-server/BUILD.bazel b/packages/core/capabilities/core-capabilities-server/BUILD.bazel deleted file mode 100644 index f52df2ffaec03..0000000000000 --- a/packages/core/capabilities/core-capabilities-server/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-capabilities-server" -PKG_REQUIRE_NAME = "@kbn/core-capabilities-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/capabilities/core-capabilities-common:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/capabilities/core-capabilities-server/kibana.jsonc b/packages/core/capabilities/core-capabilities-server/kibana.jsonc index dc6e6ac3c1279..cfa34dba13ad9 100644 --- a/packages/core/capabilities/core-capabilities-server/kibana.jsonc +++ b/packages/core/capabilities/core-capabilities-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-capabilities-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/capabilities/core-capabilities-server/package.json b/packages/core/capabilities/core-capabilities-server/package.json index 013a8a5e8fa38..d0aaa15414614 100644 --- a/packages/core/capabilities/core-capabilities-server/package.json +++ b/packages/core/capabilities/core-capabilities-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-capabilities-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/capabilities/core-capabilities-server/tsconfig.json b/packages/core/capabilities/core-capabilities-server/tsconfig.json index ef521586433c9..1bb52580bb4df 100644 --- a/packages/core/capabilities/core-capabilities-server/tsconfig.json +++ b/packages/core/capabilities/core-capabilities-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-http-server", + "@kbn/core-capabilities-common", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/chrome/core-chrome-browser-internal/BUILD.bazel b/packages/core/chrome/core-chrome-browser-internal/BUILD.bazel deleted file mode 100644 index 7399951064bff..0000000000000 --- a/packages/core/chrome/core-chrome-browser-internal/BUILD.bazel +++ /dev/null @@ -1,142 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-chrome-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-chrome-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//lodash", - "@npm//rxjs", - "@npm//classnames", - "@npm//react-use", - "@npm//@elastic/eui", - "//packages/kbn-i18n", - "//packages/kbn-i18n-react", - "//packages/core/mount-utils/core-mount-utils-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@types/classnames", - "@npm//react-use", - "@npm//lodash", - "@npm//rxjs", - "@npm//@elastic/eui", - "//packages/kbn-crypto-browser:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/core/doc-links/core-doc-links-browser:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/notifications/core-notifications-browser:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser-internal:npm_module_types", - "//packages/core/application/core-application-browser:npm_module_types", - "//packages/core/application/core-application-browser-internal:npm_module_types", - "//packages/core/chrome/core-chrome-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ] -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/chrome/core-chrome-browser-internal/kibana.jsonc b/packages/core/chrome/core-chrome-browser-internal/kibana.jsonc index 2d0a7bada7bb9..84db611a0b348 100644 --- a/packages/core/chrome/core-chrome-browser-internal/kibana.jsonc +++ b/packages/core/chrome/core-chrome-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-chrome-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/chrome/core-chrome-browser-internal/package.json b/packages/core/chrome/core-chrome-browser-internal/package.json index 121dce5d9fe60..51108d8d25023 100644 --- a/packages/core/chrome/core-chrome-browser-internal/package.json +++ b/packages/core/chrome/core-chrome-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-chrome-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/chrome/core-chrome-browser-internal/tsconfig.json b/packages/core/chrome/core-chrome-browser-internal/tsconfig.json index c561d9f220124..d55e52c906a05 100644 --- a/packages/core/chrome/core-chrome-browser-internal/tsconfig.json +++ b/packages/core/chrome/core-chrome-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,30 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/crypto-browser", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/core-injected-metadata-browser-internal", + "@kbn/core-doc-links-browser", + "@kbn/core-http-browser", + "@kbn/core-notifications-browser", + "@kbn/core-mount-utils-browser-internal", + "@kbn/core-application-browser", + "@kbn/core-application-browser-internal", + "@kbn/core-chrome-browser", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-doc-links-browser-mocks", + "@kbn/core-http-browser-mocks", + "@kbn/core-application-browser-mocks", + "@kbn/core-notifications-browser-mocks", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/test-jest-helpers", + "@kbn/core-application-common", + "@kbn/core-mount-utils-browser", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/chrome/core-chrome-browser-mocks/BUILD.bazel b/packages/core/chrome/core-chrome-browser-mocks/BUILD.bazel deleted file mode 100644 index 4a45606503f67..0000000000000 --- a/packages/core/chrome/core-chrome-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,117 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-chrome-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-chrome-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-utility-types-jest:npm_module_types", - "//packages/core/chrome/core-chrome-browser:npm_module_types", - "//packages/core/chrome/core-chrome-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/chrome/core-chrome-browser-mocks/kibana.jsonc b/packages/core/chrome/core-chrome-browser-mocks/kibana.jsonc index 5968ce1224da8..e9283e5dab605 100644 --- a/packages/core/chrome/core-chrome-browser-mocks/kibana.jsonc +++ b/packages/core/chrome/core-chrome-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-chrome-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/chrome/core-chrome-browser-mocks/package.json b/packages/core/chrome/core-chrome-browser-mocks/package.json index bd5b73194a52f..f73bd5dba44f4 100644 --- a/packages/core/chrome/core-chrome-browser-mocks/package.json +++ b/packages/core/chrome/core-chrome-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-chrome-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/chrome/core-chrome-browser-mocks/tsconfig.json b/packages/core/chrome/core-chrome-browser-mocks/tsconfig.json index 741519055e986..46d416acc55c1 100644 --- a/packages/core/chrome/core-chrome-browser-mocks/tsconfig.json +++ b/packages/core/chrome/core-chrome-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,14 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/utility-types-jest", + "@kbn/core-chrome-browser", + "@kbn/core-chrome-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/chrome/core-chrome-browser/BUILD.bazel b/packages/core/chrome/core-chrome-browser/BUILD.bazel deleted file mode 100644 index 00e46c7614988..0000000000000 --- a/packages/core/chrome/core-chrome-browser/BUILD.bazel +++ /dev/null @@ -1,116 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-chrome-browser" -PKG_REQUIRE_NAME = "@kbn/core-chrome-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@elastic/eui", - "@npm//rxjs", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types", - "//packages/core/application/core-application-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/chrome/core-chrome-browser/kibana.jsonc b/packages/core/chrome/core-chrome-browser/kibana.jsonc index 64eba06444507..ea1cb4638d0f9 100644 --- a/packages/core/chrome/core-chrome-browser/kibana.jsonc +++ b/packages/core/chrome/core-chrome-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-chrome-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/chrome/core-chrome-browser/package.json b/packages/core/chrome/core-chrome-browser/package.json index 42854ddcca13c..ac747187f1375 100644 --- a/packages/core/chrome/core-chrome-browser/package.json +++ b/packages/core/chrome/core-chrome-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-chrome-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/chrome/core-chrome-browser/tsconfig.json b/packages/core/chrome/core-chrome-browser/tsconfig.json index 741519055e986..281389cd0927c 100644 --- a/packages/core/chrome/core-chrome-browser/tsconfig.json +++ b/packages/core/chrome/core-chrome-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-mount-utils-browser", + "@kbn/core-application-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/config/core-config-server-internal/BUILD.bazel b/packages/core/config/core-config-server-internal/BUILD.bazel deleted file mode 100644 index 2b4ef85f0484c..0000000000000 --- a/packages/core/config/core-config-server-internal/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-config-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-config-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-safer-lodash-set", - "//packages/kbn-config", - "//packages/core/base/core-base-server-internal", - "//packages/kbn-config-mocks", - "//packages/core/test-helpers/core-test-helpers-deprecations-getters", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-safer-lodash-set:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-mocks:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/test-helpers/core-test-helpers-deprecations-getters:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/config/core-config-server-internal/kibana.jsonc b/packages/core/config/core-config-server-internal/kibana.jsonc index a6ba80afe9590..7b1e11349fc73 100644 --- a/packages/core/config/core-config-server-internal/kibana.jsonc +++ b/packages/core/config/core-config-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-config-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/config/core-config-server-internal/package.json b/packages/core/config/core-config-server-internal/package.json index 504824cb9613f..a3864186c5f47 100644 --- a/packages/core/config/core-config-server-internal/package.json +++ b/packages/core/config/core-config-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-config-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/config/core-config-server-internal/tsconfig.json b/packages/core/config/core-config-server-internal/tsconfig.json index ef521586433c9..23a51196a73c3 100644 --- a/packages/core/config/core-config-server-internal/tsconfig.json +++ b/packages/core/config/core-config-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config", + "@kbn/config-mocks", + "@kbn/core-base-server-internal", + "@kbn/core-test-helpers-deprecations-getters" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/deprecations/core-deprecations-browser-internal/BUILD.bazel b/packages/core/deprecations/core-deprecations-browser-internal/BUILD.bazel deleted file mode 100644 index 799d368a5a66b..0000000000000 --- a/packages/core/deprecations/core-deprecations-browser-internal/BUILD.bazel +++ /dev/null @@ -1,119 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-deprecations-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-deprecations-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-i18n", - "//packages/core/http/core-http-browser-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-i18n:npm_module_types", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/http/core-http-browser-mocks:npm_module_types", - "//packages/core/deprecations/core-deprecations-common:npm_module_types", - "//packages/core/deprecations/core-deprecations-browser:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/deprecations/core-deprecations-browser-internal/kibana.jsonc b/packages/core/deprecations/core-deprecations-browser-internal/kibana.jsonc index c5bf07aa7052f..7db30fcf05173 100644 --- a/packages/core/deprecations/core-deprecations-browser-internal/kibana.jsonc +++ b/packages/core/deprecations/core-deprecations-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-deprecations-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/deprecations/core-deprecations-browser-internal/package.json b/packages/core/deprecations/core-deprecations-browser-internal/package.json index 5778e7fa149a5..014cadb77f35b 100644 --- a/packages/core/deprecations/core-deprecations-browser-internal/package.json +++ b/packages/core/deprecations/core-deprecations-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-deprecations-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/deprecations/core-deprecations-browser-internal/tsconfig.json b/packages/core/deprecations/core-deprecations-browser-internal/tsconfig.json index ef521586433c9..8c7dde1c84e07 100644 --- a/packages/core/deprecations/core-deprecations-browser-internal/tsconfig.json +++ b/packages/core/deprecations/core-deprecations-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/core-base-browser-internal", + "@kbn/core-http-browser", + "@kbn/core-http-browser-mocks", + "@kbn/core-deprecations-common", + "@kbn/core-deprecations-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/BUILD.bazel b/packages/core/deprecations/core-deprecations-browser-mocks/BUILD.bazel deleted file mode 100644 index bea9231acf84e..0000000000000 --- a/packages/core/deprecations/core-deprecations-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-deprecations-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-deprecations-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/deprecations/core-deprecations-browser-internal" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/deprecations/core-deprecations-browser:npm_module_types", - "//packages/core/deprecations/core-deprecations-browser-internal:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/kibana.jsonc b/packages/core/deprecations/core-deprecations-browser-mocks/kibana.jsonc index 28424208cd582..464f09cb0edd1 100644 --- a/packages/core/deprecations/core-deprecations-browser-mocks/kibana.jsonc +++ b/packages/core/deprecations/core-deprecations-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-deprecations-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/package.json b/packages/core/deprecations/core-deprecations-browser-mocks/package.json index cd9f1986ad146..3c01322543a1f 100644 --- a/packages/core/deprecations/core-deprecations-browser-mocks/package.json +++ b/packages/core/deprecations/core-deprecations-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-deprecations-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/tsconfig.json b/packages/core/deprecations/core-deprecations-browser-mocks/tsconfig.json index ef521586433c9..db74de14068d4 100644 --- a/packages/core/deprecations/core-deprecations-browser-mocks/tsconfig.json +++ b/packages/core/deprecations/core-deprecations-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-deprecations-browser", + "@kbn/core-deprecations-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/deprecations/core-deprecations-browser/BUILD.bazel b/packages/core/deprecations/core-deprecations-browser/BUILD.bazel deleted file mode 100644 index 98367818f6162..0000000000000 --- a/packages/core/deprecations/core-deprecations-browser/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-deprecations-browser" -PKG_REQUIRE_NAME = "@kbn/core-deprecations-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/core/deprecations/core-deprecations-common:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/deprecations/core-deprecations-browser/kibana.jsonc b/packages/core/deprecations/core-deprecations-browser/kibana.jsonc index 3e708f34935b5..624ce8f9a24c2 100644 --- a/packages/core/deprecations/core-deprecations-browser/kibana.jsonc +++ b/packages/core/deprecations/core-deprecations-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-deprecations-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/deprecations/core-deprecations-browser/package.json b/packages/core/deprecations/core-deprecations-browser/package.json index 410b55d4d1751..cade193e602d1 100644 --- a/packages/core/deprecations/core-deprecations-browser/package.json +++ b/packages/core/deprecations/core-deprecations-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-deprecations-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/deprecations/core-deprecations-browser/tsconfig.json b/packages/core/deprecations/core-deprecations-browser/tsconfig.json index ef521586433c9..60c79345dd69f 100644 --- a/packages/core/deprecations/core-deprecations-browser/tsconfig.json +++ b/packages/core/deprecations/core-deprecations-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-deprecations-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/deprecations/core-deprecations-common/BUILD.bazel b/packages/core/deprecations/core-deprecations-common/BUILD.bazel deleted file mode 100644 index 0a21fa19ef491..0000000000000 --- a/packages/core/deprecations/core-deprecations-common/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-deprecations-common" -PKG_REQUIRE_NAME = "@kbn/core-deprecations-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/deprecations/core-deprecations-common/kibana.jsonc b/packages/core/deprecations/core-deprecations-common/kibana.jsonc index 60494dec2502f..81fc008124c78 100644 --- a/packages/core/deprecations/core-deprecations-common/kibana.jsonc +++ b/packages/core/deprecations/core-deprecations-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-deprecations-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/deprecations/core-deprecations-common/package.json b/packages/core/deprecations/core-deprecations-common/package.json index 511e4a942f32e..cd3ba57b35d0b 100644 --- a/packages/core/deprecations/core-deprecations-common/package.json +++ b/packages/core/deprecations/core-deprecations-common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-deprecations-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/deprecations/core-deprecations-common/tsconfig.json b/packages/core/deprecations/core-deprecations-common/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/deprecations/core-deprecations-common/tsconfig.json +++ b/packages/core/deprecations/core-deprecations-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/deprecations/core-deprecations-server-internal/BUILD.bazel b/packages/core/deprecations/core-deprecations-server-internal/BUILD.bazel deleted file mode 100644 index 336bda22def79..0000000000000 --- a/packages/core/deprecations/core-deprecations-server-internal/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-deprecations-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-deprecations-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/kbn-i18n", - "//packages/kbn-std", - ### test dependencies - "//packages/kbn-logging-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-internal:npm_module_types", - "//packages/core/deprecations/core-deprecations-common:npm_module_types", - "//packages/core/deprecations/core-deprecations-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/deprecations/core-deprecations-server-internal/kibana.jsonc b/packages/core/deprecations/core-deprecations-server-internal/kibana.jsonc index 367adb98a89b2..7c9e02b525c04 100644 --- a/packages/core/deprecations/core-deprecations-server-internal/kibana.jsonc +++ b/packages/core/deprecations/core-deprecations-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-deprecations-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/deprecations/core-deprecations-server-internal/package.json b/packages/core/deprecations/core-deprecations-server-internal/package.json index 4dca63aa16619..a022cfdf83733 100644 --- a/packages/core/deprecations/core-deprecations-server-internal/package.json +++ b/packages/core/deprecations/core-deprecations-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-deprecations-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/deprecations/core-deprecations-server-internal/tsconfig.json b/packages/core/deprecations/core-deprecations-server-internal/tsconfig.json index 4582562d6c9bb..ba06a3e9ec2f7 100644 --- a/packages/core/deprecations/core-deprecations-server-internal/tsconfig.json +++ b/packages/core/deprecations/core-deprecations-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,32 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/utility-types", + "@kbn/std", + "@kbn/i18n", + "@kbn/logging", + "@kbn/config", + "@kbn/core-base-server-internal", + "@kbn/core-http-server-internal", + "@kbn/core-elasticsearch-server", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-server-internal", + "@kbn/core-deprecations-common", + "@kbn/core-deprecations-server", + "@kbn/logging-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/config-mocks", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/core-http-server", + "@kbn/core-elasticsearch-client-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/deprecations/core-deprecations-server-mocks/BUILD.bazel b/packages/core/deprecations/core-deprecations-server-mocks/BUILD.bazel deleted file mode 100644 index ab178fad79f1f..0000000000000 --- a/packages/core/deprecations/core-deprecations-server-mocks/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-deprecations-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-deprecations-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/deprecations/core-deprecations-server:npm_module_types", - "//packages/core/deprecations/core-deprecations-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/deprecations/core-deprecations-server-mocks/kibana.jsonc b/packages/core/deprecations/core-deprecations-server-mocks/kibana.jsonc index fc56bc34368f1..f897a7c512b97 100644 --- a/packages/core/deprecations/core-deprecations-server-mocks/kibana.jsonc +++ b/packages/core/deprecations/core-deprecations-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-deprecations-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/deprecations/core-deprecations-server-mocks/package.json b/packages/core/deprecations/core-deprecations-server-mocks/package.json index 15318700c494f..9b429d07ee721 100644 --- a/packages/core/deprecations/core-deprecations-server-mocks/package.json +++ b/packages/core/deprecations/core-deprecations-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-deprecations-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/deprecations/core-deprecations-server-mocks/tsconfig.json b/packages/core/deprecations/core-deprecations-server-mocks/tsconfig.json index 4582562d6c9bb..84627ac21e204 100644 --- a/packages/core/deprecations/core-deprecations-server-mocks/tsconfig.json +++ b/packages/core/deprecations/core-deprecations-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-deprecations-server", + "@kbn/core-deprecations-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/deprecations/core-deprecations-server/BUILD.bazel b/packages/core/deprecations/core-deprecations-server/BUILD.bazel deleted file mode 100644 index 27f711ff83b43..0000000000000 --- a/packages/core/deprecations/core-deprecations-server/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-deprecations-server" -PKG_REQUIRE_NAME = "@kbn/core-deprecations-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/deprecations/core-deprecations-common:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/deprecations/core-deprecations-server/kibana.jsonc b/packages/core/deprecations/core-deprecations-server/kibana.jsonc index 96270007d4ad3..6747cae836866 100644 --- a/packages/core/deprecations/core-deprecations-server/kibana.jsonc +++ b/packages/core/deprecations/core-deprecations-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-deprecations-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/deprecations/core-deprecations-server/package.json b/packages/core/deprecations/core-deprecations-server/package.json index 68882ca7ba6dd..e21b001ee9328 100644 --- a/packages/core/deprecations/core-deprecations-server/package.json +++ b/packages/core/deprecations/core-deprecations-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-deprecations-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/deprecations/core-deprecations-server/tsconfig.json b/packages/core/deprecations/core-deprecations-server/tsconfig.json index 4582562d6c9bb..fa09534af0b92 100644 --- a/packages/core/deprecations/core-deprecations-server/tsconfig.json +++ b/packages/core/deprecations/core-deprecations-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-deprecations-common", + "@kbn/core-elasticsearch-server", + "@kbn/core-saved-objects-api-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/doc-links/core-doc-links-browser-internal/BUILD.bazel b/packages/core/doc-links/core-doc-links-browser-internal/BUILD.bazel deleted file mode 100644 index b0a8cea7da17d..0000000000000 --- a/packages/core/doc-links/core-doc-links-browser-internal/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-doc-links-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-doc-links-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-doc-links:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/core/doc-links/core-doc-links-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/doc-links/core-doc-links-browser-internal/kibana.jsonc b/packages/core/doc-links/core-doc-links-browser-internal/kibana.jsonc index b72ad3a17021a..8b54adc776848 100644 --- a/packages/core/doc-links/core-doc-links-browser-internal/kibana.jsonc +++ b/packages/core/doc-links/core-doc-links-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-doc-links-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/doc-links/core-doc-links-browser-internal/package.json b/packages/core/doc-links/core-doc-links-browser-internal/package.json index 00bfad1514cc1..26b93132d397b 100644 --- a/packages/core/doc-links/core-doc-links-browser-internal/package.json +++ b/packages/core/doc-links/core-doc-links-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-doc-links-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/doc-links/core-doc-links-browser-internal/tsconfig.json b/packages/core/doc-links/core-doc-links-browser-internal/tsconfig.json index ef521586433c9..dda4c975120d7 100644 --- a/packages/core/doc-links/core-doc-links-browser-internal/tsconfig.json +++ b/packages/core/doc-links/core-doc-links-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/doc-links", + "@kbn/core-injected-metadata-browser-internal", + "@kbn/core-doc-links-browser", + "@kbn/core-injected-metadata-browser-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/doc-links/core-doc-links-browser-mocks/BUILD.bazel b/packages/core/doc-links/core-doc-links-browser-mocks/BUILD.bazel deleted file mode 100644 index 67d4cf29a1e48..0000000000000 --- a/packages/core/doc-links/core-doc-links-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-doc-links-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-doc-links-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks", - "//packages/core/doc-links/core-doc-links-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks:npm_module_types", - "//packages/core/doc-links/core-doc-links-browser:npm_module_types", - "//packages/core/doc-links/core-doc-links-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/doc-links/core-doc-links-browser-mocks/kibana.jsonc b/packages/core/doc-links/core-doc-links-browser-mocks/kibana.jsonc index d1c5b7af28390..c081dab3fdb64 100644 --- a/packages/core/doc-links/core-doc-links-browser-mocks/kibana.jsonc +++ b/packages/core/doc-links/core-doc-links-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-doc-links-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/doc-links/core-doc-links-browser-mocks/package.json b/packages/core/doc-links/core-doc-links-browser-mocks/package.json index d2085b6c99089..e83064509f12c 100644 --- a/packages/core/doc-links/core-doc-links-browser-mocks/package.json +++ b/packages/core/doc-links/core-doc-links-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-doc-links-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/doc-links/core-doc-links-browser-mocks/tsconfig.json b/packages/core/doc-links/core-doc-links-browser-mocks/tsconfig.json index ef521586433c9..473ae750e67ee 100644 --- a/packages/core/doc-links/core-doc-links-browser-mocks/tsconfig.json +++ b/packages/core/doc-links/core-doc-links-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-doc-links-browser", + "@kbn/core-doc-links-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/doc-links/core-doc-links-browser/BUILD.bazel b/packages/core/doc-links/core-doc-links-browser/BUILD.bazel deleted file mode 100644 index 564858b40c5a7..0000000000000 --- a/packages/core/doc-links/core-doc-links-browser/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-doc-links-browser" -PKG_REQUIRE_NAME = "@kbn/core-doc-links-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-doc-links:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/doc-links/core-doc-links-browser/kibana.jsonc b/packages/core/doc-links/core-doc-links-browser/kibana.jsonc index 68ed9f30aff6b..e21e71f26fbe0 100644 --- a/packages/core/doc-links/core-doc-links-browser/kibana.jsonc +++ b/packages/core/doc-links/core-doc-links-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-doc-links-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/doc-links/core-doc-links-browser/package.json b/packages/core/doc-links/core-doc-links-browser/package.json index 91d8b643949d2..af280c55ade61 100644 --- a/packages/core/doc-links/core-doc-links-browser/package.json +++ b/packages/core/doc-links/core-doc-links-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-doc-links-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/doc-links/core-doc-links-browser/tsconfig.json b/packages/core/doc-links/core-doc-links-browser/tsconfig.json index ef521586433c9..68b5d3d0d0194 100644 --- a/packages/core/doc-links/core-doc-links-browser/tsconfig.json +++ b/packages/core/doc-links/core-doc-links-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/doc-links" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/doc-links/core-doc-links-server-internal/BUILD.bazel b/packages/core/doc-links/core-doc-links-server-internal/BUILD.bazel deleted file mode 100644 index 911d177dd40ba..0000000000000 --- a/packages/core/doc-links/core-doc-links-server-internal/BUILD.bazel +++ /dev/null @@ -1,107 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-doc-links-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-doc-links-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/base/core-base-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-doc-links:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/base/core-base-server-mocks:npm_module_types", - "//packages/core/doc-links/core-doc-links-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/doc-links/core-doc-links-server-internal/kibana.jsonc b/packages/core/doc-links/core-doc-links-server-internal/kibana.jsonc index f2158ec018209..2e8ef46d85c88 100644 --- a/packages/core/doc-links/core-doc-links-server-internal/kibana.jsonc +++ b/packages/core/doc-links/core-doc-links-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-doc-links-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/doc-links/core-doc-links-server-internal/package.json b/packages/core/doc-links/core-doc-links-server-internal/package.json index 1c5ee24849e21..675462eb9661b 100644 --- a/packages/core/doc-links/core-doc-links-server-internal/package.json +++ b/packages/core/doc-links/core-doc-links-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-doc-links-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/doc-links/core-doc-links-server-internal/tsconfig.json b/packages/core/doc-links/core-doc-links-server-internal/tsconfig.json index ef521586433c9..2cbc824289c1f 100644 --- a/packages/core/doc-links/core-doc-links-server-internal/tsconfig.json +++ b/packages/core/doc-links/core-doc-links-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/doc-links", + "@kbn/core-base-server-internal", + "@kbn/core-base-server-mocks", + "@kbn/core-doc-links-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/doc-links/core-doc-links-server-mocks/BUILD.bazel b/packages/core/doc-links/core-doc-links-server-mocks/BUILD.bazel deleted file mode 100644 index 546564f9f581b..0000000000000 --- a/packages/core/doc-links/core-doc-links-server-mocks/BUILD.bazel +++ /dev/null @@ -1,107 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-doc-links-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-doc-links-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-doc-links", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-doc-links:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks:npm_module_types", - "//packages/core/doc-links/core-doc-links-server:npm_module_types", - "//packages/core/doc-links/core-doc-links-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/doc-links/core-doc-links-server-mocks/kibana.jsonc b/packages/core/doc-links/core-doc-links-server-mocks/kibana.jsonc index 5d61cf066d312..76c59c8f5b31a 100644 --- a/packages/core/doc-links/core-doc-links-server-mocks/kibana.jsonc +++ b/packages/core/doc-links/core-doc-links-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-doc-links-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/doc-links/core-doc-links-server-mocks/package.json b/packages/core/doc-links/core-doc-links-server-mocks/package.json index 7d15b2ecb0a7d..b3a6f1f05aa13 100644 --- a/packages/core/doc-links/core-doc-links-server-mocks/package.json +++ b/packages/core/doc-links/core-doc-links-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-doc-links-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/doc-links/core-doc-links-server-mocks/tsconfig.json b/packages/core/doc-links/core-doc-links-server-mocks/tsconfig.json index ef521586433c9..7ffdec8e985dc 100644 --- a/packages/core/doc-links/core-doc-links-server-mocks/tsconfig.json +++ b/packages/core/doc-links/core-doc-links-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/doc-links", + "@kbn/core-doc-links-server", + "@kbn/core-doc-links-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/doc-links/core-doc-links-server/BUILD.bazel b/packages/core/doc-links/core-doc-links-server/BUILD.bazel deleted file mode 100644 index b670b86f3b41f..0000000000000 --- a/packages/core/doc-links/core-doc-links-server/BUILD.bazel +++ /dev/null @@ -1,103 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-doc-links-server" -PKG_REQUIRE_NAME = "@kbn/core-doc-links-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-doc-links:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/doc-links/core-doc-links-server/kibana.jsonc b/packages/core/doc-links/core-doc-links-server/kibana.jsonc index e0460f4da99bc..74063c462a4bd 100644 --- a/packages/core/doc-links/core-doc-links-server/kibana.jsonc +++ b/packages/core/doc-links/core-doc-links-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-doc-links-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/doc-links/core-doc-links-server/package.json b/packages/core/doc-links/core-doc-links-server/package.json index 98e82071c1afb..891b6e625ec7d 100644 --- a/packages/core/doc-links/core-doc-links-server/package.json +++ b/packages/core/doc-links/core-doc-links-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-doc-links-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/doc-links/core-doc-links-server/tsconfig.json b/packages/core/doc-links/core-doc-links-server/tsconfig.json index ef521586433c9..68b5d3d0d0194 100644 --- a/packages/core/doc-links/core-doc-links-server/tsconfig.json +++ b/packages/core/doc-links/core-doc-links-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/doc-links" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/BUILD.bazel b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/BUILD.bazel deleted file mode 100644 index af435dff173a7..0000000000000 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/BUILD.bazel +++ /dev/null @@ -1,121 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-elasticsearch-client-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-elasticsearch-client-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//moment", - "@npm//@elastic/elasticsearch", - "@npm//@elastic/numeral", - "//packages/kbn-std", - "//packages/kbn-es-errors", - "//packages/core/http/core-http-router-server-internal", - ### test dependencies - "//packages/core/logging/core-logging-server-mocks", - "//packages/core/http/core-http-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment", - "@npm//@elastic/elasticsearch", - "@npm//@elastic/numeral", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-es-errors:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-router-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/kibana.jsonc b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/kibana.jsonc index e2393e888d5de..064e503803d9a 100644 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/kibana.jsonc +++ b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-elasticsearch-client-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/package.json b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/package.json index 26a5453f7deb8..393f1c5418ff4 100644 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/package.json +++ b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-elasticsearch-client-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/tsconfig.json b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/tsconfig.json index ef521586433c9..d43e5bcbe630d 100644 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/tsconfig.json +++ b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,20 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/std", + "@kbn/es-errors", + "@kbn/logging", + "@kbn/core-http-server", + "@kbn/core-http-router-server-internal", + "@kbn/core-elasticsearch-server", + "@kbn/logging-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/core-http-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/BUILD.bazel b/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/BUILD.bazel deleted file mode 100644 index 903df3a4bf668..0000000000000 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-elasticsearch-client-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-elasticsearch-client-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@elastic/elasticsearch", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/kibana.jsonc b/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/kibana.jsonc index ae267b45ddc1c..234f583289e7a 100644 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/kibana.jsonc +++ b/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-elasticsearch-client-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/package.json b/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/package.json index 2e40a2411c6f5..481aeec61ba6a 100644 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/package.json +++ b/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-elasticsearch-client-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/tsconfig.json b/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/tsconfig.json index ef521586433c9..961653f7e4c0e 100644 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/tsconfig.json +++ b/packages/core/elasticsearch/core-elasticsearch-client-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-elasticsearch-server", + "@kbn/core-elasticsearch-client-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/BUILD.bazel b/packages/core/elasticsearch/core-elasticsearch-server-internal/BUILD.bazel deleted file mode 100644 index a609d040b08f3..0000000000000 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/BUILD.bazel +++ /dev/null @@ -1,140 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-elasticsearch-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-elasticsearch-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//semver", - "@npm//moment", - "@npm//@elastic/elasticsearch", - "//packages/kbn-std", - "//packages/kbn-i18n", - "//packages/kbn-crypto", - "//packages/kbn-config-schema", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal", - ### test dependencies - "//packages/kbn-config-mocks", - "//packages/core/logging/core-logging-server-mocks", - "//packages/core/analytics/core-analytics-server-mocks", - "//packages/core/execution-context/core-execution-context-server-mocks", - "//packages/core/http/core-http-server-mocks", - "//packages/core/elasticsearch/core-elasticsearch-client-server-mocks", - "//packages/core/config/core-config-server-internal", - "//packages/core/test-helpers/core-test-helpers-deprecations-getters", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//@types/semver", - "@npm//moment", - "@npm//@elastic/elasticsearch", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-crypto:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/status/core-status-common:npm_module_types", - "//packages/core/analytics/core-analytics-server:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/execution-context/core-execution-context-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal:npm_module_types", - "//packages/core/test-helpers/core-test-helpers-deprecations-getters:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/kibana.jsonc b/packages/core/elasticsearch/core-elasticsearch-server-internal/kibana.jsonc index 34ea515ba045f..d7d99fa587f47 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/kibana.jsonc +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-elasticsearch-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/package.json b/packages/core/elasticsearch/core-elasticsearch-server-internal/package.json index 7da243a2ddd91..01035adcda8b1 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/package.json +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-elasticsearch-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts index ecd364b4283cf..f523cfe8c4a8f 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts @@ -21,7 +21,7 @@ import { MockClusterClient, isScriptingEnabledMock } from './elasticsearch_servi import type { NodesVersionCompatibility } from './version_check/ensure_es_version'; import { BehaviorSubject, firstValueFrom } from 'rxjs'; import { first, concatMap } from 'rxjs/operators'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Env } from '@kbn/config'; import { configServiceMock, getEnvOptions } from '@kbn/config-mocks'; import type { CoreContext } from '@kbn/core-base-server-internal'; diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/tsconfig.json b/packages/core/elasticsearch/core-elasticsearch-server-internal/tsconfig.json index ef521586433c9..7b444c90f62c9 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/tsconfig.json +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,33 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/std", + "@kbn/logging", + "@kbn/i18n", + "@kbn/crypto", + "@kbn/config-schema", + "@kbn/core-base-server-internal", + "@kbn/core-status-common", + "@kbn/core-analytics-server", + "@kbn/core-http-server", + "@kbn/core-http-server-internal", + "@kbn/core-execution-context-server-internal", + "@kbn/core-elasticsearch-server", + "@kbn/core-elasticsearch-client-server-internal", + "@kbn/core-test-helpers-deprecations-getters", + "@kbn/config", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/core-analytics-server-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/repo-info", + "@kbn/config-mocks", + "@kbn/core-execution-context-server-mocks", + "@kbn/core-http-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/elasticsearch/core-elasticsearch-server-mocks/BUILD.bazel b/packages/core/elasticsearch/core-elasticsearch-server-mocks/BUILD.bazel deleted file mode 100644 index bfc62c14edd0b..0000000000000 --- a/packages/core/elasticsearch/core-elasticsearch-server-mocks/BUILD.bazel +++ /dev/null @@ -1,109 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-elasticsearch-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-elasticsearch-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/core/elasticsearch/core-elasticsearch-client-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/status/core-status-common:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-client-server-mocks:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/elasticsearch/core-elasticsearch-server-mocks/kibana.jsonc b/packages/core/elasticsearch/core-elasticsearch-server-mocks/kibana.jsonc index d08d5d04cbb39..07c507160e1b3 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-mocks/kibana.jsonc +++ b/packages/core/elasticsearch/core-elasticsearch-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-elasticsearch-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/elasticsearch/core-elasticsearch-server-mocks/package.json b/packages/core/elasticsearch/core-elasticsearch-server-mocks/package.json index 4bfdb9ae43502..8e5774d75f6a9 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-mocks/package.json +++ b/packages/core/elasticsearch/core-elasticsearch-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-elasticsearch-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/elasticsearch/core-elasticsearch-server-mocks/tsconfig.json b/packages/core/elasticsearch/core-elasticsearch-server-mocks/tsconfig.json index ef521586433c9..ee0d179f22017 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-mocks/tsconfig.json +++ b/packages/core/elasticsearch/core-elasticsearch-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-status-common", + "@kbn/core-elasticsearch-server", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/core-elasticsearch-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/elasticsearch/core-elasticsearch-server/BUILD.bazel b/packages/core/elasticsearch/core-elasticsearch-server/BUILD.bazel deleted file mode 100644 index b21a8c7febbb4..0000000000000 --- a/packages/core/elasticsearch/core-elasticsearch-server/BUILD.bazel +++ /dev/null @@ -1,107 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-elasticsearch-server" -PKG_REQUIRE_NAME = "@kbn/core-elasticsearch-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment", - "@npm//@elastic/elasticsearch", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-es-errors:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/elasticsearch/core-elasticsearch-server/kibana.jsonc b/packages/core/elasticsearch/core-elasticsearch-server/kibana.jsonc index 5bf72319cc41b..0cc1c07fa2b30 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server/kibana.jsonc +++ b/packages/core/elasticsearch/core-elasticsearch-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-elasticsearch-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/elasticsearch/core-elasticsearch-server/package.json b/packages/core/elasticsearch/core-elasticsearch-server/package.json index 3c922fc3fff6d..db40eec90146f 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server/package.json +++ b/packages/core/elasticsearch/core-elasticsearch-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-elasticsearch-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/elasticsearch/core-elasticsearch-server/tsconfig.json b/packages/core/elasticsearch/core-elasticsearch-server/tsconfig.json index ef521586433c9..88e18c12e41e0 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server/tsconfig.json +++ b/packages/core/elasticsearch/core-elasticsearch-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/es-errors", + "@kbn/core-http-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/environment/core-environment-server-internal/BUILD.bazel b/packages/core/environment/core-environment-server-internal/BUILD.bazel deleted file mode 100644 index 02787bec3ad60..0000000000000 --- a/packages/core/environment/core-environment-server-internal/BUILD.bazel +++ /dev/null @@ -1,116 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-environment-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-environment-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//lodash", - "@npm//uuid", - "//packages/core/base/core-base-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/uuid", - "@npm//rxjs", - "@npm//lodash", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/analytics/core-analytics-server:npm_module_types", - "//packages/core/logging/core-logging-server-mocks:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/environment/core-environment-server-internal/kibana.jsonc b/packages/core/environment/core-environment-server-internal/kibana.jsonc index 9d8de1124ce0f..c25c03c1a433d 100644 --- a/packages/core/environment/core-environment-server-internal/kibana.jsonc +++ b/packages/core/environment/core-environment-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-environment-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/environment/core-environment-server-internal/package.json b/packages/core/environment/core-environment-server-internal/package.json index 4be8f11e12fc6..698f7c88923e9 100644 --- a/packages/core/environment/core-environment-server-internal/package.json +++ b/packages/core/environment/core-environment-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-environment-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/environment/core-environment-server-internal/tsconfig.json b/packages/core/environment/core-environment-server-internal/tsconfig.json index ef521586433c9..b1853e14a9ead 100644 --- a/packages/core/environment/core-environment-server-internal/tsconfig.json +++ b/packages/core/environment/core-environment-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,20 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utils", + "@kbn/logging", + "@kbn/config", + "@kbn/core-base-server-internal", + "@kbn/core-analytics-server", + "@kbn/core-logging-server-mocks", + "@kbn/config-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-analytics-server-mocks", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/environment/core-environment-server-mocks/BUILD.bazel b/packages/core/environment/core-environment-server-mocks/BUILD.bazel deleted file mode 100644 index 99bb5420b5685..0000000000000 --- a/packages/core/environment/core-environment-server-mocks/BUILD.bazel +++ /dev/null @@ -1,103 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-environment-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-environment-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/environment/core-environment-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/environment/core-environment-server-mocks/kibana.jsonc b/packages/core/environment/core-environment-server-mocks/kibana.jsonc index 6644816727a70..6905db81b1d91 100644 --- a/packages/core/environment/core-environment-server-mocks/kibana.jsonc +++ b/packages/core/environment/core-environment-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-environment-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/environment/core-environment-server-mocks/package.json b/packages/core/environment/core-environment-server-mocks/package.json index c8de3e7c69acf..3d8c7cb8525c0 100644 --- a/packages/core/environment/core-environment-server-mocks/package.json +++ b/packages/core/environment/core-environment-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-environment-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/environment/core-environment-server-mocks/tsconfig.json b/packages/core/environment/core-environment-server-mocks/tsconfig.json index ef521586433c9..a3529d5cdb9f3 100644 --- a/packages/core/environment/core-environment-server-mocks/tsconfig.json +++ b/packages/core/environment/core-environment-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-environment-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/execution-context/core-execution-context-browser-internal/BUILD.bazel b/packages/core/execution-context/core-execution-context-browser-internal/BUILD.bazel deleted file mode 100644 index 5dafaa8a707cf..0000000000000 --- a/packages/core/execution-context/core-execution-context-browser-internal/BUILD.bazel +++ /dev/null @@ -1,117 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-execution-context-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-execution-context-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//rxjs", - "//packages/core/analytics/core-analytics-browser-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/analytics/core-analytics-browser:npm_module_types", - "//packages/core/execution-context/core-execution-context-common:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/execution-context/core-execution-context-browser-internal/kibana.jsonc b/packages/core/execution-context/core-execution-context-browser-internal/kibana.jsonc index 1771d94a14b8a..36f56a25426a8 100644 --- a/packages/core/execution-context/core-execution-context-browser-internal/kibana.jsonc +++ b/packages/core/execution-context/core-execution-context-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-execution-context-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/execution-context/core-execution-context-browser-internal/package.json b/packages/core/execution-context/core-execution-context-browser-internal/package.json index 448610f80f573..601ce7cce3ec5 100644 --- a/packages/core/execution-context/core-execution-context-browser-internal/package.json +++ b/packages/core/execution-context/core-execution-context-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-execution-context-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/execution-context/core-execution-context-browser-internal/tsconfig.json b/packages/core/execution-context/core-execution-context-browser-internal/tsconfig.json index ef521586433c9..a8301ada1eaa4 100644 --- a/packages/core/execution-context/core-execution-context-browser-internal/tsconfig.json +++ b/packages/core/execution-context/core-execution-context-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-base-browser-internal", + "@kbn/core-analytics-browser", + "@kbn/core-analytics-browser-mocks", + "@kbn/core-execution-context-common", + "@kbn/core-execution-context-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/execution-context/core-execution-context-browser-mocks/BUILD.bazel b/packages/core/execution-context/core-execution-context-browser-mocks/BUILD.bazel deleted file mode 100644 index f47b874438a3a..0000000000000 --- a/packages/core/execution-context/core-execution-context-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-execution-context-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-execution-context-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/execution-context/core-execution-context-browser-mocks/kibana.jsonc b/packages/core/execution-context/core-execution-context-browser-mocks/kibana.jsonc index 8d27a9ec919dd..63963af90bdff 100644 --- a/packages/core/execution-context/core-execution-context-browser-mocks/kibana.jsonc +++ b/packages/core/execution-context/core-execution-context-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-execution-context-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/execution-context/core-execution-context-browser-mocks/package.json b/packages/core/execution-context/core-execution-context-browser-mocks/package.json index e6e278b62aec6..79332249636a7 100644 --- a/packages/core/execution-context/core-execution-context-browser-mocks/package.json +++ b/packages/core/execution-context/core-execution-context-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-execution-context-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/execution-context/core-execution-context-browser-mocks/tsconfig.json b/packages/core/execution-context/core-execution-context-browser-mocks/tsconfig.json index ef521586433c9..39e9576ba62e0 100644 --- a/packages/core/execution-context/core-execution-context-browser-mocks/tsconfig.json +++ b/packages/core/execution-context/core-execution-context-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-execution-context-browser", + "@kbn/core-execution-context-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/execution-context/core-execution-context-browser/BUILD.bazel b/packages/core/execution-context/core-execution-context-browser/BUILD.bazel deleted file mode 100644 index bd66cba6f7716..0000000000000 --- a/packages/core/execution-context/core-execution-context-browser/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-execution-context-browser" -PKG_REQUIRE_NAME = "@kbn/core-execution-context-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/core/execution-context/core-execution-context-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/execution-context/core-execution-context-browser/kibana.jsonc b/packages/core/execution-context/core-execution-context-browser/kibana.jsonc index 550d63fc67de1..ee8dd2fad5ebe 100644 --- a/packages/core/execution-context/core-execution-context-browser/kibana.jsonc +++ b/packages/core/execution-context/core-execution-context-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-execution-context-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/execution-context/core-execution-context-browser/package.json b/packages/core/execution-context/core-execution-context-browser/package.json index fe065da833ba4..c450345458713 100644 --- a/packages/core/execution-context/core-execution-context-browser/package.json +++ b/packages/core/execution-context/core-execution-context-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-execution-context-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/execution-context/core-execution-context-browser/tsconfig.json b/packages/core/execution-context/core-execution-context-browser/tsconfig.json index ef521586433c9..b240bd7f5bc8e 100644 --- a/packages/core/execution-context/core-execution-context-browser/tsconfig.json +++ b/packages/core/execution-context/core-execution-context-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-execution-context-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/execution-context/core-execution-context-common/BUILD.bazel b/packages/core/execution-context/core-execution-context-common/BUILD.bazel deleted file mode 100644 index 2346a268246e5..0000000000000 --- a/packages/core/execution-context/core-execution-context-common/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-execution-context-common" -PKG_REQUIRE_NAME = "@kbn/core-execution-context-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/execution-context/core-execution-context-common/kibana.jsonc b/packages/core/execution-context/core-execution-context-common/kibana.jsonc index d3cf33be164d2..4775632a026b7 100644 --- a/packages/core/execution-context/core-execution-context-common/kibana.jsonc +++ b/packages/core/execution-context/core-execution-context-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-execution-context-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/execution-context/core-execution-context-common/package.json b/packages/core/execution-context/core-execution-context-common/package.json index 8811373e38431..e8bc5a341ca8b 100644 --- a/packages/core/execution-context/core-execution-context-common/package.json +++ b/packages/core/execution-context/core-execution-context-common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-execution-context-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/execution-context/core-execution-context-common/tsconfig.json b/packages/core/execution-context/core-execution-context-common/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/execution-context/core-execution-context-common/tsconfig.json +++ b/packages/core/execution-context/core-execution-context-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/execution-context/core-execution-context-server-internal/BUILD.bazel b/packages/core/execution-context/core-execution-context-server-internal/BUILD.bazel deleted file mode 100644 index bc44df8b75205..0000000000000 --- a/packages/core/execution-context/core-execution-context-server-internal/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-execution-context-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-execution-context-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//rxjs", - "//packages/kbn-config-schema", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//rxjs", - "@npm//elastic-apm-node", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/execution-context/core-execution-context-common:npm_module_types", - "//packages/core/execution-context/core-execution-context-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/execution-context/core-execution-context-server-internal/kibana.jsonc b/packages/core/execution-context/core-execution-context-server-internal/kibana.jsonc index d344f53f34f57..7da11bd3d4571 100644 --- a/packages/core/execution-context/core-execution-context-server-internal/kibana.jsonc +++ b/packages/core/execution-context/core-execution-context-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-execution-context-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/execution-context/core-execution-context-server-internal/package.json b/packages/core/execution-context/core-execution-context-server-internal/package.json index 40e2e6b7d1a2d..aceeec16d11e4 100644 --- a/packages/core/execution-context/core-execution-context-server-internal/package.json +++ b/packages/core/execution-context/core-execution-context-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-execution-context-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/execution-context/core-execution-context-server-internal/tsconfig.json b/packages/core/execution-context/core-execution-context-server-internal/tsconfig.json index ef521586433c9..ecaf9eb98cc59 100644 --- a/packages/core/execution-context/core-execution-context-server-internal/tsconfig.json +++ b/packages/core/execution-context/core-execution-context-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,17 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/logging", + "@kbn/core-base-server-internal", + "@kbn/core-execution-context-common", + "@kbn/core-execution-context-server", + "@kbn/core-base-server-mocks", + "@kbn/core-logging-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/execution-context/core-execution-context-server-mocks/BUILD.bazel b/packages/core/execution-context/core-execution-context-server-mocks/BUILD.bazel deleted file mode 100644 index 4f20c479b8de3..0000000000000 --- a/packages/core/execution-context/core-execution-context-server-mocks/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-execution-context-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-execution-context-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/execution-context/core-execution-context-common:npm_module_types", - "//packages/core/execution-context/core-execution-context-server:npm_module_types", - "//packages/core/execution-context/core-execution-context-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/execution-context/core-execution-context-server-mocks/kibana.jsonc b/packages/core/execution-context/core-execution-context-server-mocks/kibana.jsonc index e73d0b4f9b216..05ebf05ec64ba 100644 --- a/packages/core/execution-context/core-execution-context-server-mocks/kibana.jsonc +++ b/packages/core/execution-context/core-execution-context-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-execution-context-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/execution-context/core-execution-context-server-mocks/package.json b/packages/core/execution-context/core-execution-context-server-mocks/package.json index 398a5984a4568..1b5660f4ba2c3 100644 --- a/packages/core/execution-context/core-execution-context-server-mocks/package.json +++ b/packages/core/execution-context/core-execution-context-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-execution-context-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/execution-context/core-execution-context-server-mocks/tsconfig.json b/packages/core/execution-context/core-execution-context-server-mocks/tsconfig.json index ef521586433c9..3b28753beb435 100644 --- a/packages/core/execution-context/core-execution-context-server-mocks/tsconfig.json +++ b/packages/core/execution-context/core-execution-context-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-execution-context-common", + "@kbn/core-execution-context-server", + "@kbn/core-execution-context-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/execution-context/core-execution-context-server/BUILD.bazel b/packages/core/execution-context/core-execution-context-server/BUILD.bazel deleted file mode 100644 index 8b50d3351a8cd..0000000000000 --- a/packages/core/execution-context/core-execution-context-server/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-execution-context-server" -PKG_REQUIRE_NAME = "@kbn/core-execution-context-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//elastic-apm-node", - "//packages/core/execution-context/core-execution-context-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/execution-context/core-execution-context-server/kibana.jsonc b/packages/core/execution-context/core-execution-context-server/kibana.jsonc index 5de7baaaccb32..3249180ad327e 100644 --- a/packages/core/execution-context/core-execution-context-server/kibana.jsonc +++ b/packages/core/execution-context/core-execution-context-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-execution-context-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/execution-context/core-execution-context-server/package.json b/packages/core/execution-context/core-execution-context-server/package.json index 898c44da57f1c..84e77a89939d8 100644 --- a/packages/core/execution-context/core-execution-context-server/package.json +++ b/packages/core/execution-context/core-execution-context-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-execution-context-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/execution-context/core-execution-context-server/tsconfig.json b/packages/core/execution-context/core-execution-context-server/tsconfig.json index ef521586433c9..b240bd7f5bc8e 100644 --- a/packages/core/execution-context/core-execution-context-server/tsconfig.json +++ b/packages/core/execution-context/core-execution-context-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-execution-context-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-internal/BUILD.bazel b/packages/core/fatal-errors/core-fatal-errors-browser-internal/BUILD.bazel deleted file mode 100644 index bd1cf9b240027..0000000000000 --- a/packages/core/fatal-errors/core-fatal-errors-browser-internal/BUILD.bazel +++ /dev/null @@ -1,132 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-fatal-errors-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-fatal-errors-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-dom", - "@npm//rxjs", - "@npm//@elastic/eui", - "//packages/core/theme/core-theme-browser-internal", - "//packages/core/theme/core-theme-browser-mocks", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks", - "//packages/kbn-i18n-react", - "//packages/kbn-test-jest-helpers", - "//packages/kbn-test-subj-selector", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@types/react-dom", - "@npm//rxjs", - "@npm//@elastic/eui", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/theme/core-theme-browser-internal:npm_module_types", - "//packages/core/i18n/core-i18n-browser:npm_module_types", - "//packages/core/fatal-errors/core-fatal-errors-browser:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-test-jest-helpers", - "//packages/kbn-test-subj-selector", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-internal/kibana.jsonc b/packages/core/fatal-errors/core-fatal-errors-browser-internal/kibana.jsonc index 76752593fd00c..5b5b044518d52 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-internal/kibana.jsonc +++ b/packages/core/fatal-errors/core-fatal-errors-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-fatal-errors-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-internal/package.json b/packages/core/fatal-errors/core-fatal-errors-browser-internal/package.json index 327573f65a502..aa45271c86bbd 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-internal/package.json +++ b/packages/core/fatal-errors/core-fatal-errors-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-fatal-errors-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-internal/tsconfig.json b/packages/core/fatal-errors/core-fatal-errors-browser-internal/tsconfig.json index c561d9f220124..0e892d0a955ea 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-internal/tsconfig.json +++ b/packages/core/fatal-errors/core-fatal-errors-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,20 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-injected-metadata-browser-internal", + "@kbn/core-theme-browser", + "@kbn/core-theme-browser-internal", + "@kbn/core-i18n-browser", + "@kbn/core-fatal-errors-browser", + "@kbn/i18n-react", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-theme-browser-mocks", + "@kbn/test-subj-selector", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-mocks/BUILD.bazel b/packages/core/fatal-errors/core-fatal-errors-browser-mocks/BUILD.bazel deleted file mode 100644 index cc6407d5d9e3e..0000000000000 --- a/packages/core/fatal-errors/core-fatal-errors-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-fatal-errors-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-fatal-errors-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "//packages/core/fatal-errors/core-fatal-errors-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/core/fatal-errors/core-fatal-errors-browser:npm_module_types", - "//packages/core/fatal-errors/core-fatal-errors-browser-internal:npm_module_types", - "//packages/kbn-utility-types:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-mocks/kibana.jsonc b/packages/core/fatal-errors/core-fatal-errors-browser-mocks/kibana.jsonc index 6109111801eb1..61cb6496a2410 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-mocks/kibana.jsonc +++ b/packages/core/fatal-errors/core-fatal-errors-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-fatal-errors-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-mocks/package.json b/packages/core/fatal-errors/core-fatal-errors-browser-mocks/package.json index edc9e1832b147..906b532c1fb98 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-mocks/package.json +++ b/packages/core/fatal-errors/core-fatal-errors-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-fatal-errors-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-mocks/tsconfig.json b/packages/core/fatal-errors/core-fatal-errors-browser-mocks/tsconfig.json index 3cdea36de9eac..ee791562dfd89 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-mocks/tsconfig.json +++ b/packages/core/fatal-errors/core-fatal-errors-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-fatal-errors-browser", + "@kbn/core-fatal-errors-browser-internal", + "@kbn/utility-types" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/fatal-errors/core-fatal-errors-browser/BUILD.bazel b/packages/core/fatal-errors/core-fatal-errors-browser/BUILD.bazel deleted file mode 100644 index 680205ac2db28..0000000000000 --- a/packages/core/fatal-errors/core-fatal-errors-browser/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-fatal-errors-browser" -PKG_REQUIRE_NAME = "@kbn/core-fatal-errors-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//rxjs", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/fatal-errors/core-fatal-errors-browser/kibana.jsonc b/packages/core/fatal-errors/core-fatal-errors-browser/kibana.jsonc index 95423568bca93..a8e7670392301 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser/kibana.jsonc +++ b/packages/core/fatal-errors/core-fatal-errors-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-fatal-errors-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/fatal-errors/core-fatal-errors-browser/package.json b/packages/core/fatal-errors/core-fatal-errors-browser/package.json index 880780bb73c05..4e40d1aa3eddb 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser/package.json +++ b/packages/core/fatal-errors/core-fatal-errors-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-fatal-errors-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/fatal-errors/core-fatal-errors-browser/tsconfig.json b/packages/core/fatal-errors/core-fatal-errors-browser/tsconfig.json index 3cdea36de9eac..0f16c2b9311d8 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser/tsconfig.json +++ b/packages/core/fatal-errors/core-fatal-errors-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-browser-internal/BUILD.bazel b/packages/core/http/core-http-browser-internal/BUILD.bazel deleted file mode 100644 index 5f46ac65c2c24..0000000000000 --- a/packages/core/http/core-http-browser-internal/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-http-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//rxjs", - "//packages/core/execution-context/core-execution-context-browser-internal", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks", - "//packages/kbn-crypto-browser", - "//packages/kbn-std", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/http/core-http-common:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser-internal:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser:npm_module_types", - "//packages/core/fatal-errors/core-fatal-errors-browser:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/kbn-crypto-browser:npm_module_types", - "//packages/kbn-std:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-browser-internal/kibana.jsonc b/packages/core/http/core-http-browser-internal/kibana.jsonc index d5855d71ca178..aca4d47656686 100644 --- a/packages/core/http/core-http-browser-internal/kibana.jsonc +++ b/packages/core/http/core-http-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-browser-internal/package.json b/packages/core/http/core-http-browser-internal/package.json index f61b71cc8d6ea..e2558c9cf2ae9 100644 --- a/packages/core/http/core-http-browser-internal/package.json +++ b/packages/core/http/core-http-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-http-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-browser-internal/tsconfig.json b/packages/core/http/core-http-browser-internal/tsconfig.json index ef521586433c9..382c591951eb7 100644 --- a/packages/core/http/core-http-browser-internal/tsconfig.json +++ b/packages/core/http/core-http-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,23 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-base-browser-internal", + "@kbn/core-http-browser", + "@kbn/core-http-common", + "@kbn/core-execution-context-browser-internal", + "@kbn/core-execution-context-browser", + "@kbn/core-fatal-errors-browser", + "@kbn/core-injected-metadata-browser-internal", + "@kbn/crypto-browser", + "@kbn/std", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-execution-context-browser-mocks", + "@kbn/core-fatal-errors-browser-mocks", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-browser-mocks/BUILD.bazel b/packages/core/http/core-http-browser-mocks/BUILD.bazel deleted file mode 100644 index f951d30645a75..0000000000000 --- a/packages/core/http/core-http-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-http-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/core/http/core-http-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/http/core-http-browser-internal:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-browser-mocks/kibana.jsonc b/packages/core/http/core-http-browser-mocks/kibana.jsonc index 9819977cb419d..929adb25ee477 100644 --- a/packages/core/http/core-http-browser-mocks/kibana.jsonc +++ b/packages/core/http/core-http-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-browser-mocks/package.json b/packages/core/http/core-http-browser-mocks/package.json index 85d397fcb3018..2f6d39a345de8 100644 --- a/packages/core/http/core-http-browser-mocks/package.json +++ b/packages/core/http/core-http-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-http-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-browser-mocks/tsconfig.json b/packages/core/http/core-http-browser-mocks/tsconfig.json index ef521586433c9..e370c748ef29b 100644 --- a/packages/core/http/core-http-browser-mocks/tsconfig.json +++ b/packages/core/http/core-http-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-http-browser-internal", + "@kbn/core-http-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-browser/BUILD.bazel b/packages/core/http/core-http-browser/BUILD.bazel deleted file mode 100644 index f0566749a6206..0000000000000 --- a/packages/core/http/core-http-browser/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-browser" -PKG_REQUIRE_NAME = "@kbn/core-http-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/execution-context/core-execution-context-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-browser/kibana.jsonc b/packages/core/http/core-http-browser/kibana.jsonc index 87510d65336e3..8c1fdee8d3298 100644 --- a/packages/core/http/core-http-browser/kibana.jsonc +++ b/packages/core/http/core-http-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-browser/package.json b/packages/core/http/core-http-browser/package.json index 6124448731b9d..0c1dd7495fb9c 100644 --- a/packages/core/http/core-http-browser/package.json +++ b/packages/core/http/core-http-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-http-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-browser/tsconfig.json b/packages/core/http/core-http-browser/tsconfig.json index ef521586433c9..ae85ff081604a 100644 --- a/packages/core/http/core-http-browser/tsconfig.json +++ b/packages/core/http/core-http-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-execution-context-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-common/BUILD.bazel b/packages/core/http/core-http-common/BUILD.bazel deleted file mode 100644 index 4852f4c69dcba..0000000000000 --- a/packages/core/http/core-http-common/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-common" -PKG_REQUIRE_NAME = "@kbn/core-http-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-common/kibana.jsonc b/packages/core/http/core-http-common/kibana.jsonc index bdf00df353c63..372eaf2d892a8 100644 --- a/packages/core/http/core-http-common/kibana.jsonc +++ b/packages/core/http/core-http-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-common/package.json b/packages/core/http/core-http-common/package.json index 42a7a24c829e7..83275f6a576c8 100644 --- a/packages/core/http/core-http-common/package.json +++ b/packages/core/http/core-http-common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-http-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-common/tsconfig.json b/packages/core/http/core-http-common/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/http/core-http-common/tsconfig.json +++ b/packages/core/http/core-http-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-context-server-internal/BUILD.bazel b/packages/core/http/core-http-context-server-internal/BUILD.bazel deleted file mode 100644 index 93229dd4f2eee..0000000000000 --- a/packages/core/http/core-http-context-server-internal/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-context-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-http-context-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.mocks.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//lodash", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/base/core-base-common-internal:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-context-server-internal/kibana.jsonc b/packages/core/http/core-http-context-server-internal/kibana.jsonc index 18f306d721759..434d1c3055670 100644 --- a/packages/core/http/core-http-context-server-internal/kibana.jsonc +++ b/packages/core/http/core-http-context-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-context-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-context-server-internal/package.json b/packages/core/http/core-http-context-server-internal/package.json index 3c43287f81311..58171795a82cd 100644 --- a/packages/core/http/core-http-context-server-internal/package.json +++ b/packages/core/http/core-http-context-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-context-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-context-server-internal/tsconfig.json b/packages/core/http/core-http-context-server-internal/tsconfig.json index ef521586433c9..0caeb0d5e0093 100644 --- a/packages/core/http/core-http-context-server-internal/tsconfig.json +++ b/packages/core/http/core-http-context-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-base-common", + "@kbn/core-base-common-internal", + "@kbn/core-base-server-internal", + "@kbn/core-http-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-context-server-mocks/BUILD.bazel b/packages/core/http/core-http-context-server-mocks/BUILD.bazel deleted file mode 100644 index e6deb74b09ab9..0000000000000 --- a/packages/core/http/core-http-context-server-mocks/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-context-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-http-context-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-context-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-context-server-mocks/kibana.jsonc b/packages/core/http/core-http-context-server-mocks/kibana.jsonc index 323d78350596b..aee5e424e6d33 100644 --- a/packages/core/http/core-http-context-server-mocks/kibana.jsonc +++ b/packages/core/http/core-http-context-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-context-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-context-server-mocks/package.json b/packages/core/http/core-http-context-server-mocks/package.json index a45376bd7c46f..b04f6ca97de75 100644 --- a/packages/core/http/core-http-context-server-mocks/package.json +++ b/packages/core/http/core-http-context-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-context-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-context-server-mocks/tsconfig.json b/packages/core/http/core-http-context-server-mocks/tsconfig.json index ef521586433c9..a47257e63f059 100644 --- a/packages/core/http/core-http-context-server-mocks/tsconfig.json +++ b/packages/core/http/core-http-context-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-http-server", + "@kbn/core-http-context-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-request-handler-context-server-internal/BUILD.bazel b/packages/core/http/core-http-request-handler-context-server-internal/BUILD.bazel deleted file mode 100644 index af501978f3246..0000000000000 --- a/packages/core/http/core-http-request-handler-context-server-internal/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-request-handler-context-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-http-request-handler-context-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/elasticsearch/core-elasticsearch-server-internal", - "//packages/core/saved-objects/core-saved-objects-server-internal", - "//packages/core/deprecations/core-deprecations-server-internal", - "//packages/core/ui-settings/core-ui-settings-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-request-handler-context-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-internal:npm_module_types", - "//packages/core/deprecations/core-deprecations-server-internal:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-request-handler-context-server-internal/kibana.jsonc b/packages/core/http/core-http-request-handler-context-server-internal/kibana.jsonc index 98b452aec0d97..5e5099ff6933b 100644 --- a/packages/core/http/core-http-request-handler-context-server-internal/kibana.jsonc +++ b/packages/core/http/core-http-request-handler-context-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-request-handler-context-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-request-handler-context-server-internal/package.json b/packages/core/http/core-http-request-handler-context-server-internal/package.json index 15efa6e69096b..4569a702d9991 100644 --- a/packages/core/http/core-http-request-handler-context-server-internal/package.json +++ b/packages/core/http/core-http-request-handler-context-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-request-handler-context-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-request-handler-context-server-internal/tsconfig.json b/packages/core/http/core-http-request-handler-context-server-internal/tsconfig.json index 4582562d6c9bb..5a15616fd2e54 100644 --- a/packages/core/http/core-http-request-handler-context-server-internal/tsconfig.json +++ b/packages/core/http/core-http-request-handler-context-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,22 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-http-server", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-saved-objects-server-internal", + "@kbn/core-deprecations-server-internal", + "@kbn/core-ui-settings-server", + "@kbn/core-ui-settings-server-internal", + "@kbn/core-http-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/core-saved-objects-server-mocks", + "@kbn/core-ui-settings-server-mocks", + "@kbn/core-deprecations-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-request-handler-context-server/BUILD.bazel b/packages/core/http/core-http-request-handler-context-server/BUILD.bazel deleted file mode 100644 index 6ca6411dbfbd1..0000000000000 --- a/packages/core/http/core-http-request-handler-context-server/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-request-handler-context-server" -PKG_REQUIRE_NAME = "@kbn/core-http-request-handler-context-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/deprecations/core-deprecations-server:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-request-handler-context-server/kibana.jsonc b/packages/core/http/core-http-request-handler-context-server/kibana.jsonc index 3fba38b6444e4..488812d9ae1f0 100644 --- a/packages/core/http/core-http-request-handler-context-server/kibana.jsonc +++ b/packages/core/http/core-http-request-handler-context-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-request-handler-context-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-request-handler-context-server/package.json b/packages/core/http/core-http-request-handler-context-server/package.json index 665e4f309631a..fb92737110781 100644 --- a/packages/core/http/core-http-request-handler-context-server/package.json +++ b/packages/core/http/core-http-request-handler-context-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-request-handler-context-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-request-handler-context-server/tsconfig.json b/packages/core/http/core-http-request-handler-context-server/tsconfig.json index 4582562d6c9bb..64112effbcc17 100644 --- a/packages/core/http/core-http-request-handler-context-server/tsconfig.json +++ b/packages/core/http/core-http-request-handler-context-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-http-server", + "@kbn/core-elasticsearch-server", + "@kbn/core-saved-objects-server", + "@kbn/core-deprecations-server", + "@kbn/core-ui-settings-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-resources-server-internal/BUILD.bazel b/packages/core/http/core-http-resources-server-internal/BUILD.bazel deleted file mode 100644 index 3c299b5442ebc..0000000000000 --- a/packages/core/http/core-http-resources-server-internal/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-resources-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-http-resources-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//elastic-apm-node", - "//packages/kbn-logging", - "//packages/kbn-apm-config-loader", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//elastic-apm-node", - "//packages/kbn-apm-config-loader:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-resources-server:npm_module_types", - "//packages/core/rendering/core-rendering-server-internal:npm_module_types", - "//packages/core/http/core-http-request-handler-context-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-resources-server-internal/kibana.jsonc b/packages/core/http/core-http-resources-server-internal/kibana.jsonc index bea96a4a60844..5aaa476b2b770 100644 --- a/packages/core/http/core-http-resources-server-internal/kibana.jsonc +++ b/packages/core/http/core-http-resources-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-resources-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-resources-server-internal/package.json b/packages/core/http/core-http-resources-server-internal/package.json index 70144170ed0b0..d491c4940f818 100644 --- a/packages/core/http/core-http-resources-server-internal/package.json +++ b/packages/core/http/core-http-resources-server-internal/package.json @@ -2,7 +2,5 @@ "name": "@kbn/core-http-resources-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-resources-server-internal/tsconfig.json b/packages/core/http/core-http-resources-server-internal/tsconfig.json index 4582562d6c9bb..446edf2894177 100644 --- a/packages/core/http/core-http-resources-server-internal/tsconfig.json +++ b/packages/core/http/core-http-resources-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,22 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/apm-config-loader", + "@kbn/logging", + "@kbn/core-http-server", + "@kbn/core-http-resources-server", + "@kbn/core-rendering-server-internal", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-http-server-mocks", + "@kbn/core-ui-settings-server-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-rendering-server-mocks", + "@kbn/core-base-server-internal", + "@kbn/core-http-server-internal", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-resources-server-mocks/BUILD.bazel b/packages/core/http/core-http-resources-server-mocks/BUILD.bazel deleted file mode 100644 index 5060511ec65ee..0000000000000 --- a/packages/core/http/core-http-resources-server-mocks/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-resources-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-http-resources-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/http/core-http-server-mocks", - "//packages/core/http/core-http-resources-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/http/core-http-server-mocks:npm_module_types", - "//packages/core/http/core-http-resources-server:npm_module_types", - "//packages/core/http/core-http-resources-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-resources-server-mocks/kibana.jsonc b/packages/core/http/core-http-resources-server-mocks/kibana.jsonc index e8703bdd42aa3..fee811ff5d489 100644 --- a/packages/core/http/core-http-resources-server-mocks/kibana.jsonc +++ b/packages/core/http/core-http-resources-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-resources-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-resources-server-mocks/package.json b/packages/core/http/core-http-resources-server-mocks/package.json index 7a264c389f642..cbc4795106a19 100644 --- a/packages/core/http/core-http-resources-server-mocks/package.json +++ b/packages/core/http/core-http-resources-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-resources-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-resources-server-mocks/tsconfig.json b/packages/core/http/core-http-resources-server-mocks/tsconfig.json index 4582562d6c9bb..d4b986317e6a1 100644 --- a/packages/core/http/core-http-resources-server-mocks/tsconfig.json +++ b/packages/core/http/core-http-resources-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-http-server-mocks", + "@kbn/core-http-resources-server", + "@kbn/core-http-resources-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-resources-server/BUILD.bazel b/packages/core/http/core-http-resources-server/BUILD.bazel deleted file mode 100644 index a17973e8d5e64..0000000000000 --- a/packages/core/http/core-http-resources-server/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-resources-server" -PKG_REQUIRE_NAME = "@kbn/core-http-resources-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-request-handler-context-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-resources-server/kibana.jsonc b/packages/core/http/core-http-resources-server/kibana.jsonc index a05c1223a7817..dd204cfcd25e0 100644 --- a/packages/core/http/core-http-resources-server/kibana.jsonc +++ b/packages/core/http/core-http-resources-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-resources-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-resources-server/package.json b/packages/core/http/core-http-resources-server/package.json index ecf7f2691ae9f..43b494116cf57 100644 --- a/packages/core/http/core-http-resources-server/package.json +++ b/packages/core/http/core-http-resources-server/package.json @@ -2,7 +2,5 @@ "name": "@kbn/core-http-resources-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-resources-server/tsconfig.json b/packages/core/http/core-http-resources-server/tsconfig.json index 4582562d6c9bb..3f8e3b88aece5 100644 --- a/packages/core/http/core-http-resources-server/tsconfig.json +++ b/packages/core/http/core-http-resources-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-http-server", + "@kbn/core-http-request-handler-context-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-router-server-internal/BUILD.bazel b/packages/core/http/core-http-router-server-internal/BUILD.bazel deleted file mode 100644 index 511f84695274d..0000000000000 --- a/packages/core/http/core-http-router-server-internal/BUILD.bazel +++ /dev/null @@ -1,119 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-router-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-http-router-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//@hapi/boom", - "@npm//uuid", - "@npm//rxjs", - "@npm//type-detect", - "//packages/kbn-config-schema", - "//packages/kbn-es-errors", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/uuid", - "@npm//type-detect", - "@npm//@hapi/hapi", - "@npm//@types/hapi__hapi", - "@npm//@hapi/boom", - "@npm//rxjs", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-es-errors:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-router-server-internal/kibana.jsonc b/packages/core/http/core-http-router-server-internal/kibana.jsonc index 5f7482d9fa06c..329d03a5490cb 100644 --- a/packages/core/http/core-http-router-server-internal/kibana.jsonc +++ b/packages/core/http/core-http-router-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-router-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-router-server-internal/package.json b/packages/core/http/core-http-router-server-internal/package.json index 6bf05d2b0d2c3..b93c901bae3d4 100644 --- a/packages/core/http/core-http-router-server-internal/package.json +++ b/packages/core/http/core-http-router-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-router-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-router-server-internal/tsconfig.json b/packages/core/http/core-http-router-server-internal/tsconfig.json index ef521586433c9..347f4b4162268 100644 --- a/packages/core/http/core-http-router-server-internal/tsconfig.json +++ b/packages/core/http/core-http-router-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,18 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/std", + "@kbn/utility-types", + "@kbn/config-schema", + "@kbn/es-errors", + "@kbn/core-http-server", + "@kbn/hapi-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/logging", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-router-server-mocks/BUILD.bazel b/packages/core/http/core-http-router-server-mocks/BUILD.bazel deleted file mode 100644 index 867785d471708..0000000000000 --- a/packages/core/http/core-http-router-server-mocks/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-router-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-http-router-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//query-string", - "//packages/kbn-hapi-mocks", - "//packages/kbn-config-schema", - "//packages/core/http/core-http-router-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//query-string", - "//packages/kbn-hapi-mocks:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-router-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-router-server-mocks/kibana.jsonc b/packages/core/http/core-http-router-server-mocks/kibana.jsonc index a1883a9c92ff7..a00b5ef3bdf10 100644 --- a/packages/core/http/core-http-router-server-mocks/kibana.jsonc +++ b/packages/core/http/core-http-router-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-router-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-router-server-mocks/package.json b/packages/core/http/core-http-router-server-mocks/package.json index 578109fa9e5b0..679793dab8056 100644 --- a/packages/core/http/core-http-router-server-mocks/package.json +++ b/packages/core/http/core-http-router-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-router-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-router-server-mocks/tsconfig.json b/packages/core/http/core-http-router-server-mocks/tsconfig.json index ef521586433c9..4504850612bee 100644 --- a/packages/core/http/core-http-router-server-mocks/tsconfig.json +++ b/packages/core/http/core-http-router-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/hapi-mocks", + "@kbn/config-schema", + "@kbn/core-http-server", + "@kbn/core-http-router-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-server-internal/BUILD.bazel b/packages/core/http/core-http-server-internal/BUILD.bazel deleted file mode 100644 index a5457aca25e03..0000000000000 --- a/packages/core/http/core-http-server-internal/BUILD.bazel +++ /dev/null @@ -1,153 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-http-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//rxjs", - "@npm//uuid", - "@npm//moment", - "@npm//@elastic/numeral", - "@npm//@hapi/boom", - "@npm//@hapi/cookie", - "@npm//@hapi/inert", - "@npm//elastic-apm-node", - "@npm//brok", - "//packages/kbn-utils", - "//packages/kbn-std", - "//packages/kbn-config-schema", - "//packages/kbn-logging", - "//packages/kbn-crypto", - "//packages/kbn-server-http-tools", - "//packages/core/http/core-http-router-server-internal", - ### test dependencies - "@npm//supertest", - "@npm//chance", - "//packages/kbn-hapi-mocks", - "//packages/core/http/core-http-router-server-mocks", - "//packages/core/logging/core-logging-server-mocks", - "//packages/core/http/core-http-context-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/uuid", - "@npm//rxjs", - "@npm//moment", - "@npm//@elastic/numeral", - "@npm//lodash", - "@npm//brok", - "@npm//@hapi/hapi", - "@npm//@hapi/boom", - "@npm//@hapi/cookie", - "@npm//@hapi/inert", - "@npm//@types/hapi__hapi", - "@npm//@types/hapi__cookie", - "@npm//@types/hapi__inert", - "@npm//elastic-apm-node", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-server-http-tools:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-crypto:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/execution-context/core-execution-context-server-internal:npm_module_types", - "//packages/core/http/core-http-common:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-context-server-internal:npm_module_types", - "//packages/core/http/core-http-router-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-server-internal/kibana.jsonc b/packages/core/http/core-http-server-internal/kibana.jsonc index 0d1d5b04eaae2..984aaa761f171 100644 --- a/packages/core/http/core-http-server-internal/kibana.jsonc +++ b/packages/core/http/core-http-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-server-internal/package.json b/packages/core/http/core-http-server-internal/package.json index 10e06bebc4846..7ce5acd43b67e 100644 --- a/packages/core/http/core-http-server-internal/package.json +++ b/packages/core/http/core-http-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-server-internal/src/http_service.test.ts b/packages/core/http/core-http-server-internal/src/http_service.test.ts index 8201560c935df..6fe180536e61e 100644 --- a/packages/core/http/core-http-server-internal/src/http_service.test.ts +++ b/packages/core/http/core-http-server-internal/src/http_service.test.ts @@ -10,7 +10,7 @@ import { mockHttpServer } from './http_service.test.mocks'; import { noop } from 'lodash'; import { BehaviorSubject } from 'rxjs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { hapiMocks } from '@kbn/hapi-mocks'; import { ConfigService, Env } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; diff --git a/packages/core/http/core-http-server-internal/tsconfig.json b/packages/core/http/core-http-server-internal/tsconfig.json index ef521586433c9..e163741c21c7e 100644 --- a/packages/core/http/core-http-server-internal/tsconfig.json +++ b/packages/core/http/core-http-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,32 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/std", + "@kbn/server-http-tools", + "@kbn/logging", + "@kbn/config-schema", + "@kbn/crypto", + "@kbn/core-base-common", + "@kbn/core-base-server-internal", + "@kbn/core-execution-context-server-internal", + "@kbn/core-http-common", + "@kbn/core-http-server", + "@kbn/core-http-context-server-internal", + "@kbn/core-http-router-server-internal", + "@kbn/core-http-router-server-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/dev-utils", + "@kbn/config", + "@kbn/repo-info", + "@kbn/hapi-mocks", + "@kbn/config-mocks", + "@kbn/core-execution-context-server-mocks", + "@kbn/core-http-context-server-mocks", + "@kbn/logging-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-server-mocks/BUILD.bazel b/packages/core/http/core-http-server-mocks/BUILD.bazel deleted file mode 100644 index e5f898bd4f632..0000000000000 --- a/packages/core/http/core-http-server-mocks/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-http-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//moment", - "//packages/kbn-hapi-mocks", - "//packages/kbn-config-schema", - "//packages/kbn-config-mocks", - "//packages/core/logging/core-logging-server-mocks", - "//packages/core/http/core-http-router-server-mocks", - "//packages/core/http/core-http-router-server-internal", - "//packages/core/http/core-http-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//moment", - "@npm//@hapi/hapi", - "@npm//@types/hapi__hapi", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-config-mocks:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-hapi-mocks:npm_module_types", - "//packages/core/logging/core-logging-server-mocks:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-router-server-mocks:npm_module_types", - "//packages/core/http/core-http-router-server-internal:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-server-mocks/kibana.jsonc b/packages/core/http/core-http-server-mocks/kibana.jsonc index 598898176f62c..6964e15f6ab82 100644 --- a/packages/core/http/core-http-server-mocks/kibana.jsonc +++ b/packages/core/http/core-http-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-server-mocks/package.json b/packages/core/http/core-http-server-mocks/package.json index e1d3718cfc708..a04777e75202a 100644 --- a/packages/core/http/core-http-server-mocks/package.json +++ b/packages/core/http/core-http-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-server-mocks/src/test_utils.ts b/packages/core/http/core-http-server-mocks/src/test_utils.ts index 18e6a21ed2dba..17b493e96b869 100644 --- a/packages/core/http/core-http-server-mocks/src/test_utils.ts +++ b/packages/core/http/core-http-server-mocks/src/test_utils.ts @@ -8,7 +8,7 @@ import { BehaviorSubject } from 'rxjs'; import moment from 'moment'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ByteSizeValue } from '@kbn/config-schema'; import { Env } from '@kbn/config'; import { getEnvOptions, configServiceMock } from '@kbn/config-mocks'; diff --git a/packages/core/http/core-http-server-mocks/tsconfig.json b/packages/core/http/core-http-server-mocks/tsconfig.json index ef521586433c9..e039916845bbd 100644 --- a/packages/core/http/core-http-server-mocks/tsconfig.json +++ b/packages/core/http/core-http-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,21 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/config-mocks", + "@kbn/config-schema", + "@kbn/hapi-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/core-http-server", + "@kbn/core-http-router-server-mocks", + "@kbn/core-http-server-internal", + "@kbn/repo-info", + "@kbn/config", + "@kbn/core-base-server-internal", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/http/core-http-server/BUILD.bazel b/packages/core/http/core-http-server/BUILD.bazel deleted file mode 100644 index 128d466207ed6..0000000000000 --- a/packages/core/http/core-http-server/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-http-server" -PKG_REQUIRE_NAME = "@kbn/core-http-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-config-schema", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//@hapi/hapi", - "@npm//@types/hapi__hapi", - "@npm//@hapi/boom", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/http/core-http-common:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/http/core-http-server/kibana.jsonc b/packages/core/http/core-http-server/kibana.jsonc index da671fec6aaec..6ff36f0dea0d6 100644 --- a/packages/core/http/core-http-server/kibana.jsonc +++ b/packages/core/http/core-http-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-http-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/http/core-http-server/package.json b/packages/core/http/core-http-server/package.json index 17ad2086c6034..5a4cdcaf5fdc6 100644 --- a/packages/core/http/core-http-server/package.json +++ b/packages/core/http/core-http-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-http-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/http/core-http-server/tsconfig.json b/packages/core/http/core-http-server/tsconfig.json index ef521586433c9..737c4e54906f9 100644 --- a/packages/core/http/core-http-server/tsconfig.json +++ b/packages/core/http/core-http-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/utility-types", + "@kbn/core-base-common", + "@kbn/core-http-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/i18n/core-i18n-browser-internal/BUILD.bazel b/packages/core/i18n/core-i18n-browser-internal/BUILD.bazel deleted file mode 100644 index fbfe5f0d565a0..0000000000000 --- a/packages/core/i18n/core-i18n-browser-internal/BUILD.bazel +++ /dev/null @@ -1,116 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-i18n-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-i18n-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - '//packages/kbn-i18n-react' -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/core/i18n/core-i18n-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/i18n/core-i18n-browser-internal/kibana.jsonc b/packages/core/i18n/core-i18n-browser-internal/kibana.jsonc index 424e9d3dcdbcd..40d9d2ffbb869 100644 --- a/packages/core/i18n/core-i18n-browser-internal/kibana.jsonc +++ b/packages/core/i18n/core-i18n-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-i18n-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/i18n/core-i18n-browser-internal/package.json b/packages/core/i18n/core-i18n-browser-internal/package.json index b2a27795b4663..ca12ff980fb50 100644 --- a/packages/core/i18n/core-i18n-browser-internal/package.json +++ b/packages/core/i18n/core-i18n-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-i18n-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/i18n/core-i18n-browser-internal/tsconfig.json b/packages/core/i18n/core-i18n-browser-internal/tsconfig.json index 741519055e986..fe90039b68112 100644 --- a/packages/core/i18n/core-i18n-browser-internal/tsconfig.json +++ b/packages/core/i18n/core-i18n-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/core-i18n-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/i18n/core-i18n-browser-mocks/BUILD.bazel b/packages/core/i18n/core-i18n-browser-mocks/BUILD.bazel deleted file mode 100644 index 024b03ca186e6..0000000000000 --- a/packages/core/i18n/core-i18n-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-i18n-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-i18n-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks", - "//packages/core/i18n/core-i18n-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks:npm_module_types", - "//packages/core/i18n/core-i18n-browser:npm_module_types", - "//packages/core/i18n/core-i18n-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/i18n/core-i18n-browser-mocks/kibana.jsonc b/packages/core/i18n/core-i18n-browser-mocks/kibana.jsonc index 0f5b73ed3b453..b53670e4d6265 100644 --- a/packages/core/i18n/core-i18n-browser-mocks/kibana.jsonc +++ b/packages/core/i18n/core-i18n-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-i18n-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/i18n/core-i18n-browser-mocks/package.json b/packages/core/i18n/core-i18n-browser-mocks/package.json index b04b9ab71bc6b..dd4e0ccb9db58 100644 --- a/packages/core/i18n/core-i18n-browser-mocks/package.json +++ b/packages/core/i18n/core-i18n-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-i18n-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/i18n/core-i18n-browser-mocks/tsconfig.json b/packages/core/i18n/core-i18n-browser-mocks/tsconfig.json index ef521586433c9..e7888be88e12d 100644 --- a/packages/core/i18n/core-i18n-browser-mocks/tsconfig.json +++ b/packages/core/i18n/core-i18n-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-i18n-browser", + "@kbn/core-i18n-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/i18n/core-i18n-browser/BUILD.bazel b/packages/core/i18n/core-i18n-browser/BUILD.bazel deleted file mode 100644 index be675f43567fb..0000000000000 --- a/packages/core/i18n/core-i18n-browser/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-i18n-browser" -PKG_REQUIRE_NAME = "@kbn/core-i18n-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-i18n:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/i18n/core-i18n-browser/kibana.jsonc b/packages/core/i18n/core-i18n-browser/kibana.jsonc index dcbf951b201f1..ef5cba0b357e0 100644 --- a/packages/core/i18n/core-i18n-browser/kibana.jsonc +++ b/packages/core/i18n/core-i18n-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-i18n-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/i18n/core-i18n-browser/package.json b/packages/core/i18n/core-i18n-browser/package.json index cb97be2e54d99..aa13430095ffe 100644 --- a/packages/core/i18n/core-i18n-browser/package.json +++ b/packages/core/i18n/core-i18n-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-i18n-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/i18n/core-i18n-browser/tsconfig.json b/packages/core/i18n/core-i18n-browser/tsconfig.json index ef521586433c9..6f535b8372d54 100644 --- a/packages/core/i18n/core-i18n-browser/tsconfig.json +++ b/packages/core/i18n/core-i18n-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,10 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/i18n/core-i18n-server-internal/BUILD.bazel b/packages/core/i18n/core-i18n-server-internal/BUILD.bazel deleted file mode 100644 index d1885f2ff09c1..0000000000000 --- a/packages/core/i18n/core-i18n-server-internal/BUILD.bazel +++ /dev/null @@ -1,128 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-i18n-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-i18n-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//json-stable-stringify", - "@npm//globby", - "@npm//rxjs", - "//packages/kbn-config-schema", - "//packages/core/base/core-base-common", - "//packages/kbn-i18n", - "//packages/kbn-utils", - "//packages/kbn-config-mocks", - "//packages/kbn-utility-types", - "//packages/core/base/core-base-server-mocks", - "//packages/core/http/core-http-server-mocks" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/json-stable-stringify", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/deprecations/core-deprecations-common:npm_module_types", - "//packages/core/i18n/core-i18n-server:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/usage-data/core-usage-data-base-server-internal:npm_module_types", - "//packages/core/deprecations/core-deprecations-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/i18n/core-i18n-server-internal/kibana.jsonc b/packages/core/i18n/core-i18n-server-internal/kibana.jsonc index 3b89a42976bbc..fe63ef9f53f9a 100644 --- a/packages/core/i18n/core-i18n-server-internal/kibana.jsonc +++ b/packages/core/i18n/core-i18n-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-i18n-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/i18n/core-i18n-server-internal/package.json b/packages/core/i18n/core-i18n-server-internal/package.json index eeee098fa9348..752cf62a4f322 100644 --- a/packages/core/i18n/core-i18n-server-internal/package.json +++ b/packages/core/i18n/core-i18n-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-i18n-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/i18n/core-i18n-server-internal/src/get_kibana_translation_files.test.ts b/packages/core/i18n/core-i18n-server-internal/src/get_kibana_translation_files.test.ts index 89a03c35d66ae..76c8ba7c02808 100644 --- a/packages/core/i18n/core-i18n-server-internal/src/get_kibana_translation_files.test.ts +++ b/packages/core/i18n/core-i18n-server-internal/src/get_kibana_translation_files.test.ts @@ -14,7 +14,7 @@ const mockGetTranslationPaths = getTranslationPaths as jest.Mock; jest.mock('./get_translation_paths', () => ({ getTranslationPaths: jest.fn().mockResolvedValue([]), })); -jest.mock('@kbn/utils', () => ({ +jest.mock('@kbn/repo-info', () => ({ fromRoot: jest.fn().mockImplementation((path: string) => path), })); diff --git a/packages/core/i18n/core-i18n-server-internal/src/get_kibana_translation_files.ts b/packages/core/i18n/core-i18n-server-internal/src/get_kibana_translation_files.ts index 4e7ee718113ce..672ec2f0a3a27 100644 --- a/packages/core/i18n/core-i18n-server-internal/src/get_kibana_translation_files.ts +++ b/packages/core/i18n/core-i18n-server-internal/src/get_kibana_translation_files.ts @@ -7,7 +7,7 @@ */ import { basename } from 'path'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; import { getTranslationPaths } from './get_translation_paths'; export const getKibanaTranslationFiles = async ( diff --git a/packages/core/i18n/core-i18n-server-internal/tsconfig.json b/packages/core/i18n/core-i18n-server-internal/tsconfig.json index 4582562d6c9bb..813e3469b746c 100644 --- a/packages/core/i18n/core-i18n-server-internal/tsconfig.json +++ b/packages/core/i18n/core-i18n-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,22 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/config", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/core-base-server-internal", + "@kbn/core-i18n-server", + "@kbn/core-http-server", + "@kbn/core-http-server-internal", + "@kbn/repo-info", + "@kbn/config-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/i18n/core-i18n-server-mocks/BUILD.bazel b/packages/core/i18n/core-i18n-server-mocks/BUILD.bazel deleted file mode 100644 index 0468c8d6b8628..0000000000000 --- a/packages/core/i18n/core-i18n-server-mocks/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-i18n-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-i18n-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/i18n/core-i18n-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/i18n/core-i18n-server:npm_module_types", - "//packages/core/i18n/core-i18n-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/i18n/core-i18n-server-mocks/kibana.jsonc b/packages/core/i18n/core-i18n-server-mocks/kibana.jsonc index 41ef001641b57..7cd0a24565bd7 100644 --- a/packages/core/i18n/core-i18n-server-mocks/kibana.jsonc +++ b/packages/core/i18n/core-i18n-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-i18n-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/i18n/core-i18n-server-mocks/package.json b/packages/core/i18n/core-i18n-server-mocks/package.json index e53b59962a3bf..e7042cd84a160 100644 --- a/packages/core/i18n/core-i18n-server-mocks/package.json +++ b/packages/core/i18n/core-i18n-server-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-i18n-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/i18n/core-i18n-server-mocks/tsconfig.json b/packages/core/i18n/core-i18n-server-mocks/tsconfig.json index ef521586433c9..f8ed0171fb0af 100644 --- a/packages/core/i18n/core-i18n-server-mocks/tsconfig.json +++ b/packages/core/i18n/core-i18n-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-i18n-server", + "@kbn/core-i18n-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/i18n/core-i18n-server/BUILD.bazel b/packages/core/i18n/core-i18n-server/BUILD.bazel deleted file mode 100644 index ac40679dcbefb..0000000000000 --- a/packages/core/i18n/core-i18n-server/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-i18n-server" -PKG_REQUIRE_NAME = "@kbn/core-i18n-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/i18n/core-i18n-server/kibana.jsonc b/packages/core/i18n/core-i18n-server/kibana.jsonc index c32d5d9cd8e7b..52cd43387a99c 100644 --- a/packages/core/i18n/core-i18n-server/kibana.jsonc +++ b/packages/core/i18n/core-i18n-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-i18n-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/i18n/core-i18n-server/package.json b/packages/core/i18n/core-i18n-server/package.json index 6e4c172f54200..cb280a7458799 100644 --- a/packages/core/i18n/core-i18n-server/package.json +++ b/packages/core/i18n/core-i18n-server/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-i18n-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/i18n/core-i18n-server/tsconfig.json b/packages/core/i18n/core-i18n-server/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/i18n/core-i18n-server/tsconfig.json +++ b/packages/core/i18n/core-i18n-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/injected-metadata/core-injected-metadata-browser-internal/BUILD.bazel b/packages/core/injected-metadata/core-injected-metadata-browser-internal/BUILD.bazel deleted file mode 100644 index 619d355c908fc..0000000000000 --- a/packages/core/injected-metadata/core-injected-metadata-browser-internal/BUILD.bazel +++ /dev/null @@ -1,117 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-injected-metadata-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-injected-metadata-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "//packages/kbn-std", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-common-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/injected-metadata/core-injected-metadata-browser-internal/kibana.jsonc b/packages/core/injected-metadata/core-injected-metadata-browser-internal/kibana.jsonc index d66f834c08eb3..efa2b0d56127e 100644 --- a/packages/core/injected-metadata/core-injected-metadata-browser-internal/kibana.jsonc +++ b/packages/core/injected-metadata/core-injected-metadata-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-injected-metadata-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/injected-metadata/core-injected-metadata-browser-internal/package.json b/packages/core/injected-metadata/core-injected-metadata-browser-internal/package.json index 107773154a0b5..348afceed3187 100644 --- a/packages/core/injected-metadata/core-injected-metadata-browser-internal/package.json +++ b/packages/core/injected-metadata/core-injected-metadata-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-injected-metadata-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/injected-metadata/core-injected-metadata-browser-internal/tsconfig.json b/packages/core/injected-metadata/core-injected-metadata-browser-internal/tsconfig.json index 3cdea36de9eac..a3a2ef572e19a 100644 --- a/packages/core/injected-metadata/core-injected-metadata-browser-internal/tsconfig.json +++ b/packages/core/injected-metadata/core-injected-metadata-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/std", + "@kbn/ui-shared-deps-npm", + "@kbn/core-base-common", + "@kbn/core-injected-metadata-common-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/injected-metadata/core-injected-metadata-browser-mocks/BUILD.bazel b/packages/core/injected-metadata/core-injected-metadata-browser-mocks/BUILD.bazel deleted file mode 100644 index f4c3fbdec9a1c..0000000000000 --- a/packages/core/injected-metadata/core-injected-metadata-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-injected-metadata-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-injected-metadata-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/injected-metadata/core-injected-metadata-browser-mocks/kibana.jsonc b/packages/core/injected-metadata/core-injected-metadata-browser-mocks/kibana.jsonc index cfbfae1b907e2..340968dde25f6 100644 --- a/packages/core/injected-metadata/core-injected-metadata-browser-mocks/kibana.jsonc +++ b/packages/core/injected-metadata/core-injected-metadata-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-injected-metadata-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/injected-metadata/core-injected-metadata-browser-mocks/package.json b/packages/core/injected-metadata/core-injected-metadata-browser-mocks/package.json index 4c96174666f69..94098a16650b3 100644 --- a/packages/core/injected-metadata/core-injected-metadata-browser-mocks/package.json +++ b/packages/core/injected-metadata/core-injected-metadata-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-injected-metadata-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/injected-metadata/core-injected-metadata-browser-mocks/tsconfig.json b/packages/core/injected-metadata/core-injected-metadata-browser-mocks/tsconfig.json index 3cdea36de9eac..236476943bc6f 100644 --- a/packages/core/injected-metadata/core-injected-metadata-browser-mocks/tsconfig.json +++ b/packages/core/injected-metadata/core-injected-metadata-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-injected-metadata-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/injected-metadata/core-injected-metadata-common-internal/BUILD.bazel b/packages/core/injected-metadata/core-injected-metadata-common-internal/BUILD.bazel deleted file mode 100644 index 0540de01bc9c4..0000000000000 --- a/packages/core/injected-metadata/core-injected-metadata-common-internal/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-injected-metadata-common-internal" -PKG_REQUIRE_NAME = "@kbn/core-injected-metadata-common-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/injected-metadata/core-injected-metadata-common-internal/kibana.jsonc b/packages/core/injected-metadata/core-injected-metadata-common-internal/kibana.jsonc index 88943c788515f..c3dcd61159ae0 100644 --- a/packages/core/injected-metadata/core-injected-metadata-common-internal/kibana.jsonc +++ b/packages/core/injected-metadata/core-injected-metadata-common-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-injected-metadata-common-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/injected-metadata/core-injected-metadata-common-internal/package.json b/packages/core/injected-metadata/core-injected-metadata-common-internal/package.json index 7f4052847f183..d3a691a7db3e0 100644 --- a/packages/core/injected-metadata/core-injected-metadata-common-internal/package.json +++ b/packages/core/injected-metadata/core-injected-metadata-common-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-injected-metadata-common-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/injected-metadata/core-injected-metadata-common-internal/tsconfig.json b/packages/core/injected-metadata/core-injected-metadata-common-internal/tsconfig.json index 3cdea36de9eac..7ff1f2d20bd53 100644 --- a/packages/core/injected-metadata/core-injected-metadata-common-internal/tsconfig.json +++ b/packages/core/injected-metadata/core-injected-metadata-common-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config", + "@kbn/ui-shared-deps-npm", + "@kbn/core-base-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/integrations/core-integrations-browser-internal/BUILD.bazel b/packages/core/integrations/core-integrations-browser-internal/BUILD.bazel deleted file mode 100644 index 049424ab2bc9a..0000000000000 --- a/packages/core/integrations/core-integrations-browser-internal/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-integrations-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-integrations-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.css", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//moment-timezone", - ### test dependencies - "//packages/core/ui-settings/core-ui-settings-browser-mocks" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment-timezone", - "@npm//rxjs", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/integrations/core-integrations-browser-internal/kibana.jsonc b/packages/core/integrations/core-integrations-browser-internal/kibana.jsonc index fd72743c08597..73312e0e70a99 100644 --- a/packages/core/integrations/core-integrations-browser-internal/kibana.jsonc +++ b/packages/core/integrations/core-integrations-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-integrations-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/integrations/core-integrations-browser-internal/package.json b/packages/core/integrations/core-integrations-browser-internal/package.json index a4e0066c114a0..6a515cf11da9a 100644 --- a/packages/core/integrations/core-integrations-browser-internal/package.json +++ b/packages/core/integrations/core-integrations-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-integrations-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/integrations/core-integrations-browser-internal/tsconfig.json b/packages/core/integrations/core-integrations-browser-internal/tsconfig.json index e1805086a07a5..a160ce80ae03a 100644 --- a/packages/core/integrations/core-integrations-browser-internal/tsconfig.json +++ b/packages/core/integrations/core-integrations-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,13 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/core-base-browser-internal", + "@kbn/core-ui-settings-browser", + "@kbn/core-ui-settings-browser-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/integrations/core-integrations-browser-mocks/BUILD.bazel b/packages/core/integrations/core-integrations-browser-mocks/BUILD.bazel deleted file mode 100644 index ce47f36d5853e..0000000000000 --- a/packages/core/integrations/core-integrations-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-integrations-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-integrations-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/integrations/core-integrations-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/integrations/core-integrations-browser-mocks/kibana.jsonc b/packages/core/integrations/core-integrations-browser-mocks/kibana.jsonc index a4bcddaecba14..3231c3e282bcd 100644 --- a/packages/core/integrations/core-integrations-browser-mocks/kibana.jsonc +++ b/packages/core/integrations/core-integrations-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-integrations-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/integrations/core-integrations-browser-mocks/package.json b/packages/core/integrations/core-integrations-browser-mocks/package.json index eea3536fe806a..33caac2c4d2ac 100644 --- a/packages/core/integrations/core-integrations-browser-mocks/package.json +++ b/packages/core/integrations/core-integrations-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-integrations-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/integrations/core-integrations-browser-mocks/tsconfig.json b/packages/core/integrations/core-integrations-browser-mocks/tsconfig.json index 3cdea36de9eac..71ce10bb0c909 100644 --- a/packages/core/integrations/core-integrations-browser-mocks/tsconfig.json +++ b/packages/core/integrations/core-integrations-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-integrations-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/lifecycle/core-lifecycle-browser-internal/BUILD.bazel b/packages/core/lifecycle/core-lifecycle-browser-internal/BUILD.bazel deleted file mode 100644 index 9cbc08c356faf..0000000000000 --- a/packages/core/lifecycle/core-lifecycle-browser-internal/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-lifecycle-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-lifecycle-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/lifecycle/core-lifecycle-browser:npm_module_types", - "//packages/core/application/core-application-browser-internal:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/lifecycle/core-lifecycle-browser-internal/kibana.jsonc b/packages/core/lifecycle/core-lifecycle-browser-internal/kibana.jsonc index c552d622aa43c..33ea1f94aecc5 100644 --- a/packages/core/lifecycle/core-lifecycle-browser-internal/kibana.jsonc +++ b/packages/core/lifecycle/core-lifecycle-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-lifecycle-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/lifecycle/core-lifecycle-browser-internal/package.json b/packages/core/lifecycle/core-lifecycle-browser-internal/package.json index c78d95efa4f5a..1d945c215fe7b 100644 --- a/packages/core/lifecycle/core-lifecycle-browser-internal/package.json +++ b/packages/core/lifecycle/core-lifecycle-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-lifecycle-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/lifecycle/core-lifecycle-browser-internal/tsconfig.json b/packages/core/lifecycle/core-lifecycle-browser-internal/tsconfig.json index 61706db827bc4..2031aa4b6f6c4 100644 --- a/packages/core/lifecycle/core-lifecycle-browser-internal/tsconfig.json +++ b/packages/core/lifecycle/core-lifecycle-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-lifecycle-browser", + "@kbn/core-application-browser-internal", + "@kbn/core-injected-metadata-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/lifecycle/core-lifecycle-browser-mocks/BUILD.bazel b/packages/core/lifecycle/core-lifecycle-browser-mocks/BUILD.bazel deleted file mode 100644 index b94917a0f63d8..0000000000000 --- a/packages/core/lifecycle/core-lifecycle-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,138 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-lifecycle-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-lifecycle-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/doc-links/core-doc-links-browser-mocks", - "//packages/core/theme/core-theme-browser-mocks", - "//packages/core/analytics/core-analytics-browser-mocks", - "//packages/core/execution-context/core-execution-context-browser-mocks", - "//packages/core/i18n/core-i18n-browser-mocks", - "//packages/core/fatal-errors/core-fatal-errors-browser-mocks", - "//packages/core/http/core-http-browser-mocks", - "//packages/core/ui-settings/core-ui-settings-browser-mocks", - "//packages/core/deprecations/core-deprecations-browser-mocks", - "//packages/core/overlays/core-overlays-browser-mocks", - "//packages/core/saved-objects/core-saved-objects-browser-mocks", - "//packages/core/notifications/core-notifications-browser-mocks", - "//packages/core/application/core-application-browser-mocks", - "//packages/core/chrome/core-chrome-browser-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/doc-links/core-doc-links-browser-mocks:npm_module_types", - "//packages/core/theme/core-theme-browser-mocks:npm_module_types", - "//packages/core/analytics/core-analytics-browser-mocks:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser-mocks:npm_module_types", - "//packages/core/i18n/core-i18n-browser-mocks:npm_module_types", - "//packages/core/fatal-errors/core-fatal-errors-browser-mocks:npm_module_types", - "//packages/core/http/core-http-browser-mocks:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser-mocks:npm_module_types", - "//packages/core/deprecations/core-deprecations-browser-mocks:npm_module_types", - "//packages/core/overlays/core-overlays-browser-mocks:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-browser-mocks:npm_module_types", - "//packages/core/notifications/core-notifications-browser-mocks:npm_module_types", - "//packages/core/application/core-application-browser-mocks:npm_module_types", - "//packages/core/chrome/core-chrome-browser-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/lifecycle/core-lifecycle-browser-mocks/kibana.jsonc b/packages/core/lifecycle/core-lifecycle-browser-mocks/kibana.jsonc index ed65ce8dacf54..e3dda6943018b 100644 --- a/packages/core/lifecycle/core-lifecycle-browser-mocks/kibana.jsonc +++ b/packages/core/lifecycle/core-lifecycle-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-lifecycle-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/lifecycle/core-lifecycle-browser-mocks/package.json b/packages/core/lifecycle/core-lifecycle-browser-mocks/package.json index 2017564049aa9..e584b3ccf878b 100644 --- a/packages/core/lifecycle/core-lifecycle-browser-mocks/package.json +++ b/packages/core/lifecycle/core-lifecycle-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-lifecycle-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/lifecycle/core-lifecycle-browser-mocks/tsconfig.json b/packages/core/lifecycle/core-lifecycle-browser-mocks/tsconfig.json index 47ad657279cbb..f75992604faac 100644 --- a/packages/core/lifecycle/core-lifecycle-browser-mocks/tsconfig.json +++ b/packages/core/lifecycle/core-lifecycle-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,24 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-doc-links-browser-mocks", + "@kbn/core-theme-browser-mocks", + "@kbn/core-analytics-browser-mocks", + "@kbn/core-execution-context-browser-mocks", + "@kbn/core-i18n-browser-mocks", + "@kbn/core-fatal-errors-browser-mocks", + "@kbn/core-http-browser-mocks", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/core-deprecations-browser-mocks", + "@kbn/core-overlays-browser-mocks", + "@kbn/core-saved-objects-browser-mocks", + "@kbn/core-notifications-browser-mocks", + "@kbn/core-application-browser-mocks", + "@kbn/core-chrome-browser-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/lifecycle/core-lifecycle-browser/BUILD.bazel b/packages/core/lifecycle/core-lifecycle-browser/BUILD.bazel deleted file mode 100644 index 2b311e9c58fde..0000000000000 --- a/packages/core/lifecycle/core-lifecycle-browser/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-lifecycle-browser" -PKG_REQUIRE_NAME = "@kbn/core-lifecycle-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/analytics/core-analytics-browser:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/fatal-errors/core-fatal-errors-browser:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types", - "//packages/core/notifications/core-notifications-browser:npm_module_types", - "//packages/core/application/core-application-browser:npm_module_types", - "//packages/core/doc-links/core-doc-links-browser:npm_module_types", - "//packages/core/i18n/core-i18n-browser:npm_module_types", - "//packages/core/deprecations/core-deprecations-browser:npm_module_types", - "//packages/core/overlays/core-overlays-browser:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-browser:npm_module_types", - "//packages/core/chrome/core-chrome-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/lifecycle/core-lifecycle-browser/kibana.jsonc b/packages/core/lifecycle/core-lifecycle-browser/kibana.jsonc index e17c98379b110..664562cba4d09 100644 --- a/packages/core/lifecycle/core-lifecycle-browser/kibana.jsonc +++ b/packages/core/lifecycle/core-lifecycle-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-lifecycle-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/lifecycle/core-lifecycle-browser/package.json b/packages/core/lifecycle/core-lifecycle-browser/package.json index 72eae4ae4d40e..d47bfd2d3dd84 100644 --- a/packages/core/lifecycle/core-lifecycle-browser/package.json +++ b/packages/core/lifecycle/core-lifecycle-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-lifecycle-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/lifecycle/core-lifecycle-browser/tsconfig.json b/packages/core/lifecycle/core-lifecycle-browser/tsconfig.json index 48df8f2957246..7db13f868ee5f 100644 --- a/packages/core/lifecycle/core-lifecycle-browser/tsconfig.json +++ b/packages/core/lifecycle/core-lifecycle-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,24 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-theme-browser", + "@kbn/core-analytics-browser", + "@kbn/core-execution-context-browser", + "@kbn/core-http-browser", + "@kbn/core-fatal-errors-browser", + "@kbn/core-ui-settings-browser", + "@kbn/core-notifications-browser", + "@kbn/core-application-browser", + "@kbn/core-doc-links-browser", + "@kbn/core-i18n-browser", + "@kbn/core-deprecations-browser", + "@kbn/core-overlays-browser", + "@kbn/core-saved-objects-browser", + "@kbn/core-chrome-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/lifecycle/core-lifecycle-server-internal/BUILD.bazel b/packages/core/lifecycle/core-lifecycle-server-internal/BUILD.bazel deleted file mode 100644 index 650127f655d2a..0000000000000 --- a/packages/core/lifecycle/core-lifecycle-server-internal/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-lifecycle-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-lifecycle-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/logging/core-logging-server-internal:npm_module_types", - "//packages/core/analytics/core-analytics-server:npm_module_types", - "//packages/core/preboot/core-preboot-server-internal:npm_module_types", - "//packages/core/http/core-http-context-server-internal:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server-internal:npm_module_types", - "//packages/core/http/core-http-resources-server-internal:npm_module_types", - "//packages/core/capabilities/core-capabilities-server:npm_module_types", - "//packages/core/doc-links/core-doc-links-server:npm_module_types", - "//packages/core/i18n/core-i18n-server:npm_module_types", - "//packages/core/environment/core-environment-server-internal:npm_module_types", - "//packages/core/execution-context/core-execution-context-server-internal:npm_module_types", - "//packages/core/deprecations/core-deprecations-server-internal:npm_module_types", - "//packages/core/metrics/core-metrics-server-internal:npm_module_types", - "//packages/core/rendering/core-rendering-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-internal:npm_module_types", - "//packages/core/status/core-status-server-internal:npm_module_types", - "//packages/core/usage-data/core-usage-data-base-server-internal:npm_module_types", - "//packages/core/usage-data/core-usage-data-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/lifecycle/core-lifecycle-server-internal/kibana.jsonc b/packages/core/lifecycle/core-lifecycle-server-internal/kibana.jsonc index 7f8fa2fc8f6ad..d456283f5a607 100644 --- a/packages/core/lifecycle/core-lifecycle-server-internal/kibana.jsonc +++ b/packages/core/lifecycle/core-lifecycle-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-lifecycle-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/lifecycle/core-lifecycle-server-internal/package.json b/packages/core/lifecycle/core-lifecycle-server-internal/package.json index 6b02fc1feea5e..b24f4f55fa640 100644 --- a/packages/core/lifecycle/core-lifecycle-server-internal/package.json +++ b/packages/core/lifecycle/core-lifecycle-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-lifecycle-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/lifecycle/core-lifecycle-server-internal/tsconfig.json b/packages/core/lifecycle/core-lifecycle-server-internal/tsconfig.json index 4582562d6c9bb..a92db0274831c 100644 --- a/packages/core/lifecycle/core-lifecycle-server-internal/tsconfig.json +++ b/packages/core/lifecycle/core-lifecycle-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,30 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-logging-server-internal", + "@kbn/core-analytics-server", + "@kbn/core-preboot-server-internal", + "@kbn/core-http-context-server-internal", + "@kbn/core-http-server-internal", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-ui-settings-server-internal", + "@kbn/core-http-resources-server-internal", + "@kbn/core-capabilities-server", + "@kbn/core-doc-links-server", + "@kbn/core-i18n-server", + "@kbn/core-environment-server-internal", + "@kbn/core-execution-context-server-internal", + "@kbn/core-deprecations-server-internal", + "@kbn/core-metrics-server-internal", + "@kbn/core-rendering-server-internal", + "@kbn/core-saved-objects-server-internal", + "@kbn/core-status-server-internal", + "@kbn/core-usage-data-base-server-internal", + "@kbn/core-usage-data-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/lifecycle/core-lifecycle-server-mocks/BUILD.bazel b/packages/core/lifecycle/core-lifecycle-server-mocks/BUILD.bazel deleted file mode 100644 index 8edde25e3ea13..0000000000000 --- a/packages/core/lifecycle/core-lifecycle-server-mocks/BUILD.bazel +++ /dev/null @@ -1,141 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-lifecycle-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-lifecycle-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/analytics/core-analytics-server-mocks", - "//packages/core/capabilities/core-capabilities-server-mocks", - "//packages/core/doc-links/core-doc-links-server-mocks", - "//packages/core/deprecations/core-deprecations-server-mocks", - "//packages/core/elasticsearch/core-elasticsearch-server-mocks", - "//packages/core/environment/core-environment-server-mocks", - "//packages/core/execution-context/core-execution-context-server-mocks", - "//packages/core/http/core-http-context-server-mocks", - "//packages/core/http/core-http-server-mocks", - "//packages/core/http/core-http-resources-server-mocks", - "//packages/core/i18n/core-i18n-server-mocks", - "//packages/core/lifecycle/core-lifecycle-server", - "//packages/core/metrics/core-metrics-server-mocks", - "//packages/core/preboot/core-preboot-server-mocks", - "//packages/core/rendering/core-rendering-server-mocks", - "//packages/core/saved-objects/core-saved-objects-server-mocks", - "//packages/core/status/core-status-server-mocks", - "//packages/core/ui-settings/core-ui-settings-server-mocks", - "//packages/core/usage-data/core-usage-data-server-mocks", - -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types-jest:npm_module_types", - "//packages/core/analytics/core-analytics-server-mocks:npm_module_types", - "//packages/core/capabilities/core-capabilities-server-mocks:npm_module_types", - "//packages/core/doc-links/core-doc-links-server-mocks:npm_module_types", - "//packages/core/deprecations/core-deprecations-server-mocks:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-mocks:npm_module_types", - "//packages/core/environment/core-environment-server-mocks:npm_module_types", - "//packages/core/execution-context/core-execution-context-server-mocks:npm_module_types", - "//packages/core/http/core-http-context-server-mocks:npm_module_types", - "//packages/core/http/core-http-server-mocks:npm_module_types", - "//packages/core/http/core-http-resources-server-mocks:npm_module_types", - "//packages/core/i18n/core-i18n-server-mocks:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-server:npm_module_types", - "//packages/core/metrics/core-metrics-server-mocks:npm_module_types", - "//packages/core/preboot/core-preboot-server-mocks:npm_module_types", - "//packages/core/rendering/core-rendering-server-mocks:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-mocks:npm_module_types", - "//packages/core/status/core-status-server-mocks:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server-mocks:npm_module_types", - "//packages/core/usage-data/core-usage-data-server-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/lifecycle/core-lifecycle-server-mocks/kibana.jsonc b/packages/core/lifecycle/core-lifecycle-server-mocks/kibana.jsonc index ea9bbadfd57e9..abb14b3c14867 100644 --- a/packages/core/lifecycle/core-lifecycle-server-mocks/kibana.jsonc +++ b/packages/core/lifecycle/core-lifecycle-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-lifecycle-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/lifecycle/core-lifecycle-server-mocks/package.json b/packages/core/lifecycle/core-lifecycle-server-mocks/package.json index 532c072107303..416cbf484ca8a 100644 --- a/packages/core/lifecycle/core-lifecycle-server-mocks/package.json +++ b/packages/core/lifecycle/core-lifecycle-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-lifecycle-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/lifecycle/core-lifecycle-server-mocks/tsconfig.json b/packages/core/lifecycle/core-lifecycle-server-mocks/tsconfig.json index 4582562d6c9bb..7ae60869a501e 100644 --- a/packages/core/lifecycle/core-lifecycle-server-mocks/tsconfig.json +++ b/packages/core/lifecycle/core-lifecycle-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,32 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types-jest", + "@kbn/core-analytics-server-mocks", + "@kbn/core-capabilities-server-mocks", + "@kbn/core-doc-links-server-mocks", + "@kbn/core-deprecations-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/core-environment-server-mocks", + "@kbn/core-execution-context-server-mocks", + "@kbn/core-http-context-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-http-resources-server-mocks", + "@kbn/core-i18n-server-mocks", + "@kbn/core-lifecycle-server", + "@kbn/core-metrics-server-mocks", + "@kbn/core-preboot-server-mocks", + "@kbn/core-rendering-server-mocks", + "@kbn/core-saved-objects-server-mocks", + "@kbn/core-status-server-mocks", + "@kbn/core-ui-settings-server-mocks", + "@kbn/core-usage-data-server-mocks", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-logging-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/lifecycle/core-lifecycle-server/BUILD.bazel b/packages/core/lifecycle/core-lifecycle-server/BUILD.bazel deleted file mode 100644 index ad8be070d8fa0..0000000000000 --- a/packages/core/lifecycle/core-lifecycle-server/BUILD.bazel +++ /dev/null @@ -1,120 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-lifecycle-server" -PKG_REQUIRE_NAME = "@kbn/core-lifecycle-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/analytics/core-analytics-server:npm_module_types", - "//packages/core/capabilities/core-capabilities-server:npm_module_types", - "//packages/core/deprecations/core-deprecations-server:npm_module_types", - "//packages/core/doc-links/core-doc-links-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/execution-context/core-execution-context-server:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-request-handler-context-server:npm_module_types", - "//packages/core/http/core-http-resources-server:npm_module_types", - "//packages/core/i18n/core-i18n-server:npm_module_types", - "//packages/core/logging/core-logging-server:npm_module_types", - "//packages/core/metrics/core-metrics-server:npm_module_types", - "//packages/core/preboot/core-preboot-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/status/core-status-server:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server:npm_module_types", - "//packages/core/usage-data/core-usage-data-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/lifecycle/core-lifecycle-server/kibana.jsonc b/packages/core/lifecycle/core-lifecycle-server/kibana.jsonc index 867db6cc2dab0..76017c824b42a 100644 --- a/packages/core/lifecycle/core-lifecycle-server/kibana.jsonc +++ b/packages/core/lifecycle/core-lifecycle-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-lifecycle-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/lifecycle/core-lifecycle-server/package.json b/packages/core/lifecycle/core-lifecycle-server/package.json index e594d4972e6c8..8dc7f723b1ef0 100644 --- a/packages/core/lifecycle/core-lifecycle-server/package.json +++ b/packages/core/lifecycle/core-lifecycle-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-lifecycle-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/lifecycle/core-lifecycle-server/tsconfig.json b/packages/core/lifecycle/core-lifecycle-server/tsconfig.json index 4582562d6c9bb..560cde1c3152d 100644 --- a/packages/core/lifecycle/core-lifecycle-server/tsconfig.json +++ b/packages/core/lifecycle/core-lifecycle-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,27 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-analytics-server", + "@kbn/core-capabilities-server", + "@kbn/core-deprecations-server", + "@kbn/core-doc-links-server", + "@kbn/core-elasticsearch-server", + "@kbn/core-execution-context-server", + "@kbn/core-http-server", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-http-resources-server", + "@kbn/core-i18n-server", + "@kbn/core-logging-server", + "@kbn/core-metrics-server", + "@kbn/core-preboot-server", + "@kbn/core-saved-objects-server", + "@kbn/core-status-server", + "@kbn/core-ui-settings-server", + "@kbn/core-usage-data-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/logging/core-logging-browser-internal/BUILD.bazel b/packages/core/logging/core-logging-browser-internal/BUILD.bazel deleted file mode 100644 index b707b68279e4b..0000000000000 --- a/packages/core/logging/core-logging-browser-internal/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-logging-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-logging-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/logging/core-logging-common-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-logging:npm_module_types", - "//packages/core/logging/core-logging-common-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/logging/core-logging-browser-internal/kibana.jsonc b/packages/core/logging/core-logging-browser-internal/kibana.jsonc index 6d60078e34da8..326b03a2367f0 100644 --- a/packages/core/logging/core-logging-browser-internal/kibana.jsonc +++ b/packages/core/logging/core-logging-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-logging-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/logging/core-logging-browser-internal/package.json b/packages/core/logging/core-logging-browser-internal/package.json index 56cf9d28f32b2..a594baa046962 100644 --- a/packages/core/logging/core-logging-browser-internal/package.json +++ b/packages/core/logging/core-logging-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-logging-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/logging/core-logging-browser-internal/tsconfig.json b/packages/core/logging/core-logging-browser-internal/tsconfig.json index fbd1249f66205..d0d9f725a4ee0 100644 --- a/packages/core/logging/core-logging-browser-internal/tsconfig.json +++ b/packages/core/logging/core-logging-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/core-logging-common-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/logging/core-logging-browser-mocks/BUILD.bazel b/packages/core/logging/core-logging-browser-mocks/BUILD.bazel deleted file mode 100644 index a5e2c1ac54b19..0000000000000 --- a/packages/core/logging/core-logging-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-logging-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-logging-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "//packages/kbn-logging-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-logging-mocks:npm_module_types", - "//packages/core/logging/core-logging-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/logging/core-logging-browser-mocks/kibana.jsonc b/packages/core/logging/core-logging-browser-mocks/kibana.jsonc index 377320816c652..122934b8cfd18 100644 --- a/packages/core/logging/core-logging-browser-mocks/kibana.jsonc +++ b/packages/core/logging/core-logging-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-logging-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/logging/core-logging-browser-mocks/package.json b/packages/core/logging/core-logging-browser-mocks/package.json index 8ab9610e35470..288da29de2ba4 100644 --- a/packages/core/logging/core-logging-browser-mocks/package.json +++ b/packages/core/logging/core-logging-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-logging-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/logging/core-logging-browser-mocks/tsconfig.json b/packages/core/logging/core-logging-browser-mocks/tsconfig.json index 37f8e83d0d7a6..5f39bc493b33c 100644 --- a/packages/core/logging/core-logging-browser-mocks/tsconfig.json +++ b/packages/core/logging/core-logging-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/logging-mocks", + "@kbn/core-logging-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/logging/core-logging-common-internal/BUILD.bazel b/packages/core/logging/core-logging-common-internal/BUILD.bazel deleted file mode 100644 index 2f78f8df668ae..0000000000000 --- a/packages/core/logging/core-logging-common-internal/BUILD.bazel +++ /dev/null @@ -1,116 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-logging-common-internal" -PKG_REQUIRE_NAME = "@kbn/core-logging-common-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//moment-timezone", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment-timezone", - "@npm//lodash", - "//packages/kbn-logging:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/logging/core-logging-common-internal/kibana.jsonc b/packages/core/logging/core-logging-common-internal/kibana.jsonc index 353df47ee9dd0..4e4f23a47c56a 100644 --- a/packages/core/logging/core-logging-common-internal/kibana.jsonc +++ b/packages/core/logging/core-logging-common-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-logging-common-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/logging/core-logging-common-internal/package.json b/packages/core/logging/core-logging-common-internal/package.json index 3c0aff6df7b0b..4a10d4dacaac9 100644 --- a/packages/core/logging/core-logging-common-internal/package.json +++ b/packages/core/logging/core-logging-common-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-logging-common-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/logging/core-logging-common-internal/src/logger.test.ts b/packages/core/logging/core-logging-common-internal/src/logger.test.ts index adf4275a7d6cd..613c0cbde93da 100644 --- a/packages/core/logging/core-logging-common-internal/src/logger.test.ts +++ b/packages/core/logging/core-logging-common-internal/src/logger.test.ts @@ -7,7 +7,7 @@ */ import { Appender, LogLevel, LogMeta, LogRecord } from '@kbn/logging'; -import { getLoggerContext } from '@kbn/core-logging-common-internal'; +import { getLoggerContext } from '..'; import { AbstractLogger, CreateLogRecordFn } from './logger'; describe('AbstractLogger', () => { diff --git a/packages/core/logging/core-logging-common-internal/tsconfig.json b/packages/core/logging/core-logging-common-internal/tsconfig.json index fbd1249f66205..371dc89b18172 100644 --- a/packages/core/logging/core-logging-common-internal/tsconfig.json +++ b/packages/core/logging/core-logging-common-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/logging" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/logging/core-logging-server-internal/BUILD.bazel b/packages/core/logging/core-logging-server-internal/BUILD.bazel deleted file mode 100644 index 078fdd6ac348a..0000000000000 --- a/packages/core/logging/core-logging-server-internal/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-logging-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-logging-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//moment-timezone", - "@npm//chalk", - "@npm//elastic-apm-node", - "//packages/kbn-safer-lodash-set", - "//packages/kbn-config-schema", - "//packages/kbn-std", - "//packages/core/logging/core-logging-common-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//rxjs", - "@npm//moment-timezone", - "@npm//elastic-apm-node", - "@npm//chalk", - "//packages/kbn-safer-lodash-set:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-ecs:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/logging/core-logging-common-internal:npm_module_types", - "//packages/core/logging/core-logging-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/logging/core-logging-server-internal/kibana.jsonc b/packages/core/logging/core-logging-server-internal/kibana.jsonc index ec5ab06a6effd..827b3e7ed1203 100644 --- a/packages/core/logging/core-logging-server-internal/kibana.jsonc +++ b/packages/core/logging/core-logging-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-logging-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/logging/core-logging-server-internal/package.json b/packages/core/logging/core-logging-server-internal/package.json index df0984f8e6cab..8aa6c20bffeed 100644 --- a/packages/core/logging/core-logging-server-internal/package.json +++ b/packages/core/logging/core-logging-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-logging-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/logging/core-logging-server-internal/tsconfig.json b/packages/core/logging/core-logging-server-internal/tsconfig.json index ef521586433c9..43c80b0fcdcd5 100644 --- a/packages/core/logging/core-logging-server-internal/tsconfig.json +++ b/packages/core/logging/core-logging-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,21 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/safer-lodash-set", + "@kbn/logging", + "@kbn/config-schema", + "@kbn/core-base-server-internal", + "@kbn/core-logging-common-internal", + "@kbn/core-logging-server", + "@kbn/logging-mocks", + "@kbn/std", + "@kbn/utility-types-jest", + "@kbn/utility-types", + "@kbn/ecs", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/logging/core-logging-server-mocks/BUILD.bazel b/packages/core/logging/core-logging-server-mocks/BUILD.bazel deleted file mode 100644 index c81d459fe3982..0000000000000 --- a/packages/core/logging/core-logging-server-mocks/BUILD.bazel +++ /dev/null @@ -1,107 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-logging-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-logging-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-logging-mocks" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", - "//packages/core/logging/core-logging-server:npm_module_types", - "//packages/core/logging/core-logging-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/logging/core-logging-server-mocks/kibana.jsonc b/packages/core/logging/core-logging-server-mocks/kibana.jsonc index 83793b02fca6b..3408f6692746c 100644 --- a/packages/core/logging/core-logging-server-mocks/kibana.jsonc +++ b/packages/core/logging/core-logging-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-logging-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/logging/core-logging-server-mocks/package.json b/packages/core/logging/core-logging-server-mocks/package.json index d028f9469f534..63e4abc2e8c0b 100644 --- a/packages/core/logging/core-logging-server-mocks/package.json +++ b/packages/core/logging/core-logging-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-logging-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/logging/core-logging-server-mocks/tsconfig.json b/packages/core/logging/core-logging-server-mocks/tsconfig.json index ef521586433c9..3bf688eeda73b 100644 --- a/packages/core/logging/core-logging-server-mocks/tsconfig.json +++ b/packages/core/logging/core-logging-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/logging", + "@kbn/logging-mocks", + "@kbn/core-logging-server", + "@kbn/core-logging-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/logging/core-logging-server/BUILD.bazel b/packages/core/logging/core-logging-server/BUILD.bazel deleted file mode 100644 index 9a34097e42504..0000000000000 --- a/packages/core/logging/core-logging-server/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-logging-server" -PKG_REQUIRE_NAME = "@kbn/core-logging-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment-timezone", - "@npm//rxjs", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-config-schema:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/logging/core-logging-server/kibana.jsonc b/packages/core/logging/core-logging-server/kibana.jsonc index 27dadd782dcdc..92940b93a8dbe 100644 --- a/packages/core/logging/core-logging-server/kibana.jsonc +++ b/packages/core/logging/core-logging-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-logging-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/logging/core-logging-server/package.json b/packages/core/logging/core-logging-server/package.json index 924cbc152d03d..c81cdbd23a650 100644 --- a/packages/core/logging/core-logging-server/package.json +++ b/packages/core/logging/core-logging-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-logging-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/logging/core-logging-server/tsconfig.json b/packages/core/logging/core-logging-server/tsconfig.json index ef521586433c9..0f3e14ff4a6f6 100644 --- a/packages/core/logging/core-logging-server/tsconfig.json +++ b/packages/core/logging/core-logging-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/config-schema" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/BUILD.bazel b/packages/core/metrics/core-metrics-collectors-server-internal/BUILD.bazel deleted file mode 100644 index 16a97c7e54995..0000000000000 --- a/packages/core/metrics/core-metrics-collectors-server-internal/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-metrics-collectors-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-metrics-collectors-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__mocks__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-logging", - "@npm//moment", - "@npm//getos", - ### test dependencies - "//packages/core/elasticsearch/core-elasticsearch-client-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment", - "@npm//@types/getos", - "@npm//@hapi/hapi", - "@npm//@types/hapi__hapi", - "//packages/kbn-logging:npm_module_types", - "//packages/core/metrics/core-metrics-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/kibana.jsonc b/packages/core/metrics/core-metrics-collectors-server-internal/kibana.jsonc index 39a1aff44dba5..a277d5fad2112 100644 --- a/packages/core/metrics/core-metrics-collectors-server-internal/kibana.jsonc +++ b/packages/core/metrics/core-metrics-collectors-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-metrics-collectors-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/package.json b/packages/core/metrics/core-metrics-collectors-server-internal/package.json index d9df7f7c232db..779d682ec60f0 100644 --- a/packages/core/metrics/core-metrics-collectors-server-internal/package.json +++ b/packages/core/metrics/core-metrics-collectors-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-metrics-collectors-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/tsconfig.json b/packages/core/metrics/core-metrics-collectors-server-internal/tsconfig.json index ef521586433c9..d1a2498ffbd68 100644 --- a/packages/core/metrics/core-metrics-collectors-server-internal/tsconfig.json +++ b/packages/core/metrics/core-metrics-collectors-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/core-metrics-server", + "@kbn/core-elasticsearch-client-server-internal", + "@kbn/logging-mocks", + "@kbn/core-elasticsearch-client-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/metrics/core-metrics-collectors-server-mocks/BUILD.bazel b/packages/core/metrics/core-metrics-collectors-server-mocks/BUILD.bazel deleted file mode 100644 index 9b7f70aed3743..0000000000000 --- a/packages/core/metrics/core-metrics-collectors-server-mocks/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-metrics-collectors-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-metrics-collectors-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//moment", - "//packages/core/metrics/core-metrics-server", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment", - "//packages/core/metrics/core-metrics-server:npm_module_types", - "//packages/core/metrics/core-metrics-collectors-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/metrics/core-metrics-collectors-server-mocks/kibana.jsonc b/packages/core/metrics/core-metrics-collectors-server-mocks/kibana.jsonc index 053d67afb5f68..3b24f1787e049 100644 --- a/packages/core/metrics/core-metrics-collectors-server-mocks/kibana.jsonc +++ b/packages/core/metrics/core-metrics-collectors-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-metrics-collectors-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/metrics/core-metrics-collectors-server-mocks/package.json b/packages/core/metrics/core-metrics-collectors-server-mocks/package.json index 344b8978cd02e..b2f71629e5d10 100644 --- a/packages/core/metrics/core-metrics-collectors-server-mocks/package.json +++ b/packages/core/metrics/core-metrics-collectors-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-metrics-collectors-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/metrics/core-metrics-collectors-server-mocks/tsconfig.json b/packages/core/metrics/core-metrics-collectors-server-mocks/tsconfig.json index ef521586433c9..e872cb26accf5 100644 --- a/packages/core/metrics/core-metrics-collectors-server-mocks/tsconfig.json +++ b/packages/core/metrics/core-metrics-collectors-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-metrics-server", + "@kbn/core-metrics-collectors-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/metrics/core-metrics-server-internal/BUILD.bazel b/packages/core/metrics/core-metrics-server-internal/BUILD.bazel deleted file mode 100644 index aceafc4e3ca86..0000000000000 --- a/packages/core/metrics/core-metrics-server-internal/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-metrics-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-metrics-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//moment", - "//packages/kbn-config-schema", - "//packages/core/metrics/core-metrics-collectors-server-internal", - "//packages/core/elasticsearch/core-elasticsearch-server-internal", - ### test dependencies - "//packages/kbn-logging-mocks", - "//packages/core/http/core-http-server-mocks", - "//packages/core/metrics/core-metrics-server-mocks", - "//packages/core/metrics/core-metrics-collectors-server-mocks", - "//packages/core/elasticsearch/core-elasticsearch-server-mocks", - -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//moment", - "@npm//@hapi/hapi", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/metrics/core-metrics-server:npm_module_types", - "//packages/core/metrics/core-metrics-collectors-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/metrics/core-metrics-server-internal/kibana.jsonc b/packages/core/metrics/core-metrics-server-internal/kibana.jsonc index 325f7e64bbb52..303c3a46d8eaf 100644 --- a/packages/core/metrics/core-metrics-server-internal/kibana.jsonc +++ b/packages/core/metrics/core-metrics-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-metrics-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/metrics/core-metrics-server-internal/package.json b/packages/core/metrics/core-metrics-server-internal/package.json index f6d827b4edc36..ca9b0c6d1d6d8 100644 --- a/packages/core/metrics/core-metrics-server-internal/package.json +++ b/packages/core/metrics/core-metrics-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-metrics-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/metrics/core-metrics-server-internal/src/logging/get_ops_metrics_log.test.ts b/packages/core/metrics/core-metrics-server-internal/src/logging/get_ops_metrics_log.test.ts index d997433667e27..1e774d1403848 100644 --- a/packages/core/metrics/core-metrics-server-internal/src/logging/get_ops_metrics_log.test.ts +++ b/packages/core/metrics/core-metrics-server-internal/src/logging/get_ops_metrics_log.test.ts @@ -7,10 +7,16 @@ */ import type { OpsMetrics } from '@kbn/core-metrics-server'; +import type { ElasticsearchClientsMetrics } from '@kbn/core-metrics-server'; import { getEcsOpsMetricsLog } from './get_ops_metrics_log'; -import { sampleEsClientMetrics } from '@kbn/core-metrics-server-mocks'; import { collectorMock } from '@kbn/core-metrics-collectors-server-mocks'; +export const sampleEsClientMetrics: ElasticsearchClientsMetrics = { + totalActiveSockets: 25, + totalIdleSockets: 2, + totalQueuedRequests: 0, +}; + function createBaseOpsMetrics(): OpsMetrics { const mockProcess = collectorMock.createOpsProcessMetrics(); diff --git a/packages/core/metrics/core-metrics-server-internal/src/ops_metrics_collector.test.ts b/packages/core/metrics/core-metrics-server-internal/src/ops_metrics_collector.test.ts index 87011a663404f..7c4682e4c24c0 100644 --- a/packages/core/metrics/core-metrics-server-internal/src/ops_metrics_collector.test.ts +++ b/packages/core/metrics/core-metrics-server-internal/src/ops_metrics_collector.test.ts @@ -8,8 +8,8 @@ import { loggerMock } from '@kbn/logging-mocks'; import { httpServiceMock } from '@kbn/core-http-server-mocks'; -import { sampleEsClientMetrics } from '@kbn/core-metrics-server-mocks'; import { AgentManager } from '@kbn/core-elasticsearch-client-server-internal'; +import type { ElasticsearchClientsMetrics } from '@kbn/core-metrics-server'; import { mockEsClientCollector, mockOsCollector, @@ -18,6 +18,12 @@ import { } from './ops_metrics_collector.test.mocks'; import { OpsMetricsCollector } from './ops_metrics_collector'; +export const sampleEsClientMetrics: ElasticsearchClientsMetrics = { + totalActiveSockets: 25, + totalIdleSockets: 2, + totalQueuedRequests: 0, +}; + describe('OpsMetricsCollector', () => { let collector: OpsMetricsCollector; diff --git a/packages/core/metrics/core-metrics-server-internal/tsconfig.json b/packages/core/metrics/core-metrics-server-internal/tsconfig.json index ef521586433c9..5478a32a45859 100644 --- a/packages/core/metrics/core-metrics-server-internal/tsconfig.json +++ b/packages/core/metrics/core-metrics-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,25 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/config-schema", + "@kbn/core-base-server-internal", + "@kbn/core-http-server-internal", + "@kbn/core-metrics-server", + "@kbn/core-metrics-collectors-server-internal", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-metrics-collectors-server-mocks", + "@kbn/logging-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-elasticsearch-client-server-internal", + "@kbn/config-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/metrics/core-metrics-server-mocks/BUILD.bazel b/packages/core/metrics/core-metrics-server-mocks/BUILD.bazel deleted file mode 100644 index afd9c1a6d6bc9..0000000000000 --- a/packages/core/metrics/core-metrics-server-mocks/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-metrics-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-metrics-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/core/metrics/core-metrics-collectors-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/metrics/core-metrics-server:npm_module_types", - "//packages/core/metrics/core-metrics-server-internal:npm_module_types", - "//packages/core/metrics/core-metrics-collectors-server-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/metrics/core-metrics-server-mocks/kibana.jsonc b/packages/core/metrics/core-metrics-server-mocks/kibana.jsonc index 6af29213a86ce..4e55b952f1321 100644 --- a/packages/core/metrics/core-metrics-server-mocks/kibana.jsonc +++ b/packages/core/metrics/core-metrics-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-metrics-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/metrics/core-metrics-server-mocks/package.json b/packages/core/metrics/core-metrics-server-mocks/package.json index f6eb0962aaba7..3f621d044b5cd 100644 --- a/packages/core/metrics/core-metrics-server-mocks/package.json +++ b/packages/core/metrics/core-metrics-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-metrics-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/metrics/core-metrics-server-mocks/tsconfig.json b/packages/core/metrics/core-metrics-server-mocks/tsconfig.json index ef521586433c9..7ea68efec0aa9 100644 --- a/packages/core/metrics/core-metrics-server-mocks/tsconfig.json +++ b/packages/core/metrics/core-metrics-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-metrics-server", + "@kbn/core-metrics-server-internal", + "@kbn/core-metrics-collectors-server-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/metrics/core-metrics-server/BUILD.bazel b/packages/core/metrics/core-metrics-server/BUILD.bazel deleted file mode 100644 index d0d2f3218b408..0000000000000 --- a/packages/core/metrics/core-metrics-server/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-metrics-server" -PKG_REQUIRE_NAME = "@kbn/core-metrics-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/metrics/core-metrics-server/kibana.jsonc b/packages/core/metrics/core-metrics-server/kibana.jsonc index 64136f9466cb7..094d9112f26b1 100644 --- a/packages/core/metrics/core-metrics-server/kibana.jsonc +++ b/packages/core/metrics/core-metrics-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-metrics-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/metrics/core-metrics-server/package.json b/packages/core/metrics/core-metrics-server/package.json index 62890dfc756ce..5d7f0e022fe7d 100644 --- a/packages/core/metrics/core-metrics-server/package.json +++ b/packages/core/metrics/core-metrics-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-metrics-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/metrics/core-metrics-server/tsconfig.json b/packages/core/metrics/core-metrics-server/tsconfig.json index ef521586433c9..5dccac215ffaf 100644 --- a/packages/core/metrics/core-metrics-server/tsconfig.json +++ b/packages/core/metrics/core-metrics-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/mount-utils/core-mount-utils-browser-internal/BUILD.bazel b/packages/core/mount-utils/core-mount-utils-browser-internal/BUILD.bazel deleted file mode 100644 index 56ff089165622..0000000000000 --- a/packages/core/mount-utils/core-mount-utils-browser-internal/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-mount-utils-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-mount-utils-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-dom", - "@npm//enzyme", - "//packages/kbn-i18n-react", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@types/react-dom", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ] -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/mount-utils/core-mount-utils-browser-internal/kibana.jsonc b/packages/core/mount-utils/core-mount-utils-browser-internal/kibana.jsonc index c0853a96b395a..4f22bf70d7983 100644 --- a/packages/core/mount-utils/core-mount-utils-browser-internal/kibana.jsonc +++ b/packages/core/mount-utils/core-mount-utils-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-mount-utils-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/mount-utils/core-mount-utils-browser-internal/package.json b/packages/core/mount-utils/core-mount-utils-browser-internal/package.json index 560e995b68ad1..c842576767671 100644 --- a/packages/core/mount-utils/core-mount-utils-browser-internal/package.json +++ b/packages/core/mount-utils/core-mount-utils-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-mount-utils-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/mount-utils/core-mount-utils-browser-internal/tsconfig.json b/packages/core/mount-utils/core-mount-utils-browser-internal/tsconfig.json index c561d9f220124..fad08cdeb8787 100644 --- a/packages/core/mount-utils/core-mount-utils-browser-internal/tsconfig.json +++ b/packages/core/mount-utils/core-mount-utils-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n-react", + "@kbn/core-mount-utils-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/mount-utils/core-mount-utils-browser/BUILD.bazel b/packages/core/mount-utils/core-mount-utils-browser/BUILD.bazel deleted file mode 100644 index ee91849586b48..0000000000000 --- a/packages/core/mount-utils/core-mount-utils-browser/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-mount-utils-browser" -PKG_REQUIRE_NAME = "@kbn/core-mount-utils-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/mount-utils/core-mount-utils-browser/kibana.jsonc b/packages/core/mount-utils/core-mount-utils-browser/kibana.jsonc index 8f8977af53327..87b8148dbed3c 100644 --- a/packages/core/mount-utils/core-mount-utils-browser/kibana.jsonc +++ b/packages/core/mount-utils/core-mount-utils-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-mount-utils-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/mount-utils/core-mount-utils-browser/package.json b/packages/core/mount-utils/core-mount-utils-browser/package.json index 07c43e9ef9e0f..f86069561f530 100644 --- a/packages/core/mount-utils/core-mount-utils-browser/package.json +++ b/packages/core/mount-utils/core-mount-utils-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-mount-utils-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/mount-utils/core-mount-utils-browser/tsconfig.json b/packages/core/mount-utils/core-mount-utils-browser/tsconfig.json index 3cdea36de9eac..0f16c2b9311d8 100644 --- a/packages/core/mount-utils/core-mount-utils-browser/tsconfig.json +++ b/packages/core/mount-utils/core-mount-utils-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/node/core-node-server-internal/BUILD.bazel b/packages/core/node/core-node-server-internal/BUILD.bazel deleted file mode 100644 index a7f8ae678685b..0000000000000 --- a/packages/core/node/core-node-server-internal/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-node-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-node-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//rxjs", - "//packages/kbn-config-schema", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/logging/core-logging-server-internal:npm_module_types", - "//packages/core/node/core-node-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/node/core-node-server-internal/kibana.jsonc b/packages/core/node/core-node-server-internal/kibana.jsonc index dedee6005b483..15542a4e3042e 100644 --- a/packages/core/node/core-node-server-internal/kibana.jsonc +++ b/packages/core/node/core-node-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-node-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/node/core-node-server-internal/package.json b/packages/core/node/core-node-server-internal/package.json index 7d114d9377587..d5ef852555d41 100644 --- a/packages/core/node/core-node-server-internal/package.json +++ b/packages/core/node/core-node-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-node-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/node/core-node-server-internal/tsconfig.json b/packages/core/node/core-node-server-internal/tsconfig.json index ef521586433c9..7bbe90ab8be74 100644 --- a/packages/core/node/core-node-server-internal/tsconfig.json +++ b/packages/core/node/core-node-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,19 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/core-base-server-internal", + "@kbn/core-logging-server-internal", + "@kbn/core-node-server", + "@kbn/config-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-logging-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/node/core-node-server-mocks/BUILD.bazel b/packages/core/node/core-node-server-mocks/BUILD.bazel deleted file mode 100644 index c1e2d83989b11..0000000000000 --- a/packages/core/node/core-node-server-mocks/BUILD.bazel +++ /dev/null @@ -1,103 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-node-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-node-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - '//packages/core/node/core-node-server-internal' -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - '//packages/core/node/core-node-server-internal:npm_module_types' -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/node/core-node-server-mocks/kibana.jsonc b/packages/core/node/core-node-server-mocks/kibana.jsonc index 7070f0218b1c9..1f1b6639042ec 100644 --- a/packages/core/node/core-node-server-mocks/kibana.jsonc +++ b/packages/core/node/core-node-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-node-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/node/core-node-server-mocks/package.json b/packages/core/node/core-node-server-mocks/package.json index 103ca0f3dce9b..0b7c01a79ba94 100644 --- a/packages/core/node/core-node-server-mocks/package.json +++ b/packages/core/node/core-node-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-node-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/node/core-node-server-mocks/tsconfig.json b/packages/core/node/core-node-server-mocks/tsconfig.json index ef521586433c9..5300b31bcd611 100644 --- a/packages/core/node/core-node-server-mocks/tsconfig.json +++ b/packages/core/node/core-node-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-node-server-internal", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/node/core-node-server/BUILD.bazel b/packages/core/node/core-node-server/BUILD.bazel deleted file mode 100644 index 5be2d208a1bfe..0000000000000 --- a/packages/core/node/core-node-server/BUILD.bazel +++ /dev/null @@ -1,102 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-node-server" -PKG_REQUIRE_NAME = "@kbn/core-node-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/node/core-node-server/kibana.jsonc b/packages/core/node/core-node-server/kibana.jsonc index a2322cffe8ac4..4f4a4d0969bda 100644 --- a/packages/core/node/core-node-server/kibana.jsonc +++ b/packages/core/node/core-node-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-node-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/node/core-node-server/package.json b/packages/core/node/core-node-server/package.json index d303dbbe08b41..96c0f254bc342 100644 --- a/packages/core/node/core-node-server/package.json +++ b/packages/core/node/core-node-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-node-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/node/core-node-server/tsconfig.json b/packages/core/node/core-node-server/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/node/core-node-server/tsconfig.json +++ b/packages/core/node/core-node-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/notifications/core-notifications-browser-internal/BUILD.bazel b/packages/core/notifications/core-notifications-browser-internal/BUILD.bazel deleted file mode 100644 index 59a85f07f2e4b..0000000000000 --- a/packages/core/notifications/core-notifications-browser-internal/BUILD.bazel +++ /dev/null @@ -1,139 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-notifications-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-notifications-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-dom", - "@npm//rxjs", - "@npm//lodash", - "@npm//@elastic/eui", - "@npm//enzyme", - "//packages/kbn-i18n", - "//packages/kbn-i18n-react", - "//packages/core/theme/core-theme-browser-internal", - "//packages/core/overlays/core-overlays-browser-mocks", - "//packages/core/theme/core-theme-browser-mocks", - "//packages/core/ui-settings/core-ui-settings-browser-mocks", - "//packages/core/mount-utils/core-mount-utils-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@types/react-dom", - "@npm//rxjs", - "@npm//lodash", - "@npm//@elastic/eui", - "@npm//enzyme", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/theme/core-theme-browser-internal:npm_module_types", - "//packages/core/i18n/core-i18n-browser:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types", - "//packages/core/overlays/core-overlays-browser:npm_module_types", - "//packages/core/notifications/core-notifications-browser:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/notifications/core-notifications-browser-internal/kibana.jsonc b/packages/core/notifications/core-notifications-browser-internal/kibana.jsonc index 03ad251d65c7b..f41a7a0867ccb 100644 --- a/packages/core/notifications/core-notifications-browser-internal/kibana.jsonc +++ b/packages/core/notifications/core-notifications-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-notifications-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/notifications/core-notifications-browser-internal/package.json b/packages/core/notifications/core-notifications-browser-internal/package.json index 116a9d21f6012..3eb1c32452fe9 100644 --- a/packages/core/notifications/core-notifications-browser-internal/package.json +++ b/packages/core/notifications/core-notifications-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-notifications-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/notifications/core-notifications-browser-internal/tsconfig.json b/packages/core/notifications/core-notifications-browser-internal/tsconfig.json index e1805086a07a5..f2828768aa26b 100644 --- a/packages/core/notifications/core-notifications-browser-internal/tsconfig.json +++ b/packages/core/notifications/core-notifications-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,25 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/core-theme-browser", + "@kbn/core-theme-browser-internal", + "@kbn/core-i18n-browser", + "@kbn/core-ui-settings-browser", + "@kbn/core-overlays-browser", + "@kbn/core-notifications-browser", + "@kbn/core-mount-utils-browser-internal", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/core-i18n-browser-mocks", + "@kbn/test-jest-helpers", + "@kbn/core-overlays-browser-mocks", + "@kbn/core-theme-browser-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/notifications/core-notifications-browser-mocks/BUILD.bazel b/packages/core/notifications/core-notifications-browser-mocks/BUILD.bazel deleted file mode 100644 index b1eedb89fb2c1..0000000000000 --- a/packages/core/notifications/core-notifications-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,107 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-notifications-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-notifications-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/core/notifications/core-notifications-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types-jest:npm_module_types", - "//packages/core/notifications/core-notifications-browser:npm_module_types", - "//packages/core/notifications/core-notifications-browser-internal:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/notifications/core-notifications-browser-mocks/kibana.jsonc b/packages/core/notifications/core-notifications-browser-mocks/kibana.jsonc index d1c1d8f58f935..1705ff3144b48 100644 --- a/packages/core/notifications/core-notifications-browser-mocks/kibana.jsonc +++ b/packages/core/notifications/core-notifications-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-notifications-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/notifications/core-notifications-browser-mocks/package.json b/packages/core/notifications/core-notifications-browser-mocks/package.json index cb403f57dfc47..60b4aa160c403 100644 --- a/packages/core/notifications/core-notifications-browser-mocks/package.json +++ b/packages/core/notifications/core-notifications-browser-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-notifications-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/notifications/core-notifications-browser-mocks/tsconfig.json b/packages/core/notifications/core-notifications-browser-mocks/tsconfig.json index ef521586433c9..37547a6cd6b1b 100644 --- a/packages/core/notifications/core-notifications-browser-mocks/tsconfig.json +++ b/packages/core/notifications/core-notifications-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types-jest", + "@kbn/core-notifications-browser", + "@kbn/core-notifications-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/notifications/core-notifications-browser/BUILD.bazel b/packages/core/notifications/core-notifications-browser/BUILD.bazel deleted file mode 100644 index 1e96205532362..0000000000000 --- a/packages/core/notifications/core-notifications-browser/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-notifications-browser" -PKG_REQUIRE_NAME = "@kbn/core-notifications-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//@elastic/eui", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/notifications/core-notifications-browser/kibana.jsonc b/packages/core/notifications/core-notifications-browser/kibana.jsonc index ae6140a86a200..0bbdd53e56eb2 100644 --- a/packages/core/notifications/core-notifications-browser/kibana.jsonc +++ b/packages/core/notifications/core-notifications-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-notifications-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/notifications/core-notifications-browser/package.json b/packages/core/notifications/core-notifications-browser/package.json index 9274f6230e315..a75f3f598d622 100644 --- a/packages/core/notifications/core-notifications-browser/package.json +++ b/packages/core/notifications/core-notifications-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-notifications-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/notifications/core-notifications-browser/tsconfig.json b/packages/core/notifications/core-notifications-browser/tsconfig.json index 3faa31fe437a8..e74804a5abae4 100644 --- a/packages/core/notifications/core-notifications-browser/tsconfig.json +++ b/packages/core/notifications/core-notifications-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-mount-utils-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/overlays/core-overlays-browser-internal/BUILD.bazel b/packages/core/overlays/core-overlays-browser-internal/BUILD.bazel deleted file mode 100644 index b605c45b504d2..0000000000000 --- a/packages/core/overlays/core-overlays-browser-internal/BUILD.bazel +++ /dev/null @@ -1,129 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-overlays-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-overlays-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss" - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-markdown", - "//packages/kbn-i18n-react", - "//packages/core/theme/core-theme-browser-internal", - "//packages/core/mount-utils/core-mount-utils-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//react-markdown", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/theme/core-theme-browser-internal:npm_module_types", - "//packages/core/mount-utils/core-mount-utils-browser-internal:npm_module_types", - "//packages/core/i18n/core-i18n-browser:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types", - "//packages/core/overlays/core-overlays-browser:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ] -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/overlays/core-overlays-browser-internal/kibana.jsonc b/packages/core/overlays/core-overlays-browser-internal/kibana.jsonc index 8890a3c132d66..b0b38b2e851c0 100644 --- a/packages/core/overlays/core-overlays-browser-internal/kibana.jsonc +++ b/packages/core/overlays/core-overlays-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-overlays-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/overlays/core-overlays-browser-internal/package.json b/packages/core/overlays/core-overlays-browser-internal/package.json index 0e2232e3f1cef..6888b986b779d 100644 --- a/packages/core/overlays/core-overlays-browser-internal/package.json +++ b/packages/core/overlays/core-overlays-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-overlays-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/overlays/core-overlays-browser-internal/tsconfig.json b/packages/core/overlays/core-overlays-browser-internal/tsconfig.json index e1805086a07a5..06f6c2c1d36f7 100644 --- a/packages/core/overlays/core-overlays-browser-internal/tsconfig.json +++ b/packages/core/overlays/core-overlays-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,22 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/i18n-react", + "@kbn/core-theme-browser", + "@kbn/core-theme-browser-internal", + "@kbn/core-mount-utils-browser-internal", + "@kbn/core-i18n-browser", + "@kbn/core-ui-settings-browser", + "@kbn/core-overlays-browser", + "@kbn/core-i18n-browser-mocks", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/core-mount-utils-browser", + "@kbn/core-theme-browser-mocks", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/overlays/core-overlays-browser-mocks/BUILD.bazel b/packages/core/overlays/core-overlays-browser-mocks/BUILD.bazel deleted file mode 100644 index f376cb502121a..0000000000000 --- a/packages/core/overlays/core-overlays-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-overlays-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-overlays-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/overlays/core-overlays-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-utility-types-jest:npm_module_types", - "//packages/core/overlays/core-overlays-browser:npm_module_types", - "//packages/core/overlays/core-overlays-browser-internal:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/overlays/core-overlays-browser-mocks/kibana.jsonc b/packages/core/overlays/core-overlays-browser-mocks/kibana.jsonc index 61b14d5cbc8b0..f157b590fb35b 100644 --- a/packages/core/overlays/core-overlays-browser-mocks/kibana.jsonc +++ b/packages/core/overlays/core-overlays-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-overlays-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/overlays/core-overlays-browser-mocks/package.json b/packages/core/overlays/core-overlays-browser-mocks/package.json index 336f714766496..b15df0984c00a 100644 --- a/packages/core/overlays/core-overlays-browser-mocks/package.json +++ b/packages/core/overlays/core-overlays-browser-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-overlays-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/overlays/core-overlays-browser-mocks/tsconfig.json b/packages/core/overlays/core-overlays-browser-mocks/tsconfig.json index ef521586433c9..a35954a44cd72 100644 --- a/packages/core/overlays/core-overlays-browser-mocks/tsconfig.json +++ b/packages/core/overlays/core-overlays-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/utility-types-jest", + "@kbn/core-overlays-browser", + "@kbn/core-overlays-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/overlays/core-overlays-browser/BUILD.bazel b/packages/core/overlays/core-overlays-browser/BUILD.bazel deleted file mode 100644 index c77d2fe12d6be..0000000000000 --- a/packages/core/overlays/core-overlays-browser/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-overlays-browser" -PKG_REQUIRE_NAME = "@kbn/core-overlays-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//rxjs", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@elastic/eui", - "//packages/core/mount-utils/core-mount-utils-browser:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/overlays/core-overlays-browser/kibana.jsonc b/packages/core/overlays/core-overlays-browser/kibana.jsonc index de43c7689f1fc..6d5de7ad36d43 100644 --- a/packages/core/overlays/core-overlays-browser/kibana.jsonc +++ b/packages/core/overlays/core-overlays-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-overlays-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/overlays/core-overlays-browser/package.json b/packages/core/overlays/core-overlays-browser/package.json index 02c1fee3083c0..abae9d3ec97d0 100644 --- a/packages/core/overlays/core-overlays-browser/package.json +++ b/packages/core/overlays/core-overlays-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-overlays-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/overlays/core-overlays-browser/tsconfig.json b/packages/core/overlays/core-overlays-browser/tsconfig.json index 3cdea36de9eac..461df2c838a70 100644 --- a/packages/core/overlays/core-overlays-browser/tsconfig.json +++ b/packages/core/overlays/core-overlays-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-mount-utils-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/plugins/core-plugins-base-server-internal/BUILD.bazel b/packages/core/plugins/core-plugins-base-server-internal/BUILD.bazel deleted file mode 100644 index 3a88e9ead9844..0000000000000 --- a/packages/core/plugins/core-plugins-base-server-internal/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-plugins-base-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-plugins-base-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/core/base/core-base-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/plugins/core-plugins-base-server-internal/kibana.jsonc b/packages/core/plugins/core-plugins-base-server-internal/kibana.jsonc index a593530ab5fc4..313d463f8f8c5 100644 --- a/packages/core/plugins/core-plugins-base-server-internal/kibana.jsonc +++ b/packages/core/plugins/core-plugins-base-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-plugins-base-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/plugins/core-plugins-base-server-internal/package.json b/packages/core/plugins/core-plugins-base-server-internal/package.json index d11839515ba61..75b20566bc175 100644 --- a/packages/core/plugins/core-plugins-base-server-internal/package.json +++ b/packages/core/plugins/core-plugins-base-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-plugins-base-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/plugins/core-plugins-base-server-internal/tsconfig.json b/packages/core/plugins/core-plugins-base-server-internal/tsconfig.json index 4582562d6c9bb..48f63905bf591 100644 --- a/packages/core/plugins/core-plugins-base-server-internal/tsconfig.json +++ b/packages/core/plugins/core-plugins-base-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-base-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/plugins/core-plugins-browser-internal/BUILD.bazel b/packages/core/plugins/core-plugins-browser-internal/BUILD.bazel deleted file mode 100644 index b1ce21eaff312..0000000000000 --- a/packages/core/plugins/core-plugins-browser-internal/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-plugins-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-plugins-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//rxjs", - "@npm//lodash", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//lodash", - "//packages/kbn-config:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-common-internal:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-browser:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-browser-internal:npm_module_types", - "//packages/core/plugins/core-plugins-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/plugins/core-plugins-browser-internal/kibana.jsonc b/packages/core/plugins/core-plugins-browser-internal/kibana.jsonc index 61935e6670ae9..a55852a5f5249 100644 --- a/packages/core/plugins/core-plugins-browser-internal/kibana.jsonc +++ b/packages/core/plugins/core-plugins-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-plugins-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/plugins/core-plugins-browser-internal/package.json b/packages/core/plugins/core-plugins-browser-internal/package.json index c8679403e28c4..348a6378ddc43 100644 --- a/packages/core/plugins/core-plugins-browser-internal/package.json +++ b/packages/core/plugins/core-plugins-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-plugins-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/plugins/core-plugins-browser-internal/src/plugins_service.test.ts b/packages/core/plugins/core-plugins-browser-internal/src/plugins_service.test.ts index 6155e4bcdb6b5..7127f633f0ca8 100644 --- a/packages/core/plugins/core-plugins-browser-internal/src/plugins_service.test.ts +++ b/packages/core/plugins/core-plugins-browser-internal/src/plugins_service.test.ts @@ -86,6 +86,7 @@ describe('PluginsService', () => { plugin: createManifest('pluginC', { required: ['pluginA'], optional: ['nonexist'] }), }, ]; + // @ts-expect-error this file was not being type checked properly in the past, error is legit mockSetupDeps = { analytics: analyticsServiceMock.createAnalyticsServiceSetup(), application: applicationServiceMock.createInternalSetupContract(), @@ -102,6 +103,7 @@ describe('PluginsService', () => { application: expect.any(Object), getStartServices: expect.any(Function), }; + // @ts-expect-error this file was not being type checked properly in the past, error is legit mockStartDeps = { analytics: analyticsServiceMock.createAnalyticsServiceStart(), application: applicationServiceMock.createInternalStartContract(), diff --git a/packages/core/plugins/core-plugins-browser-internal/tsconfig.json b/packages/core/plugins/core-plugins-browser-internal/tsconfig.json index 47ad657279cbb..29a75896edda9 100644 --- a/packages/core/plugins/core-plugins-browser-internal/tsconfig.json +++ b/packages/core/plugins/core-plugins-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,33 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-base-common", + "@kbn/core-base-browser-internal", + "@kbn/core-injected-metadata-common-internal", + "@kbn/core-lifecycle-browser", + "@kbn/core-lifecycle-browser-internal", + "@kbn/core-plugins-browser", + "@kbn/logging-mocks", + "@kbn/core-base-browser-mocks", + "@kbn/core-analytics-browser-mocks", + "@kbn/core-doc-links-browser-mocks", + "@kbn/core-execution-context-browser-mocks", + "@kbn/core-i18n-browser-mocks", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-theme-browser-mocks", + "@kbn/core-notifications-browser-mocks", + "@kbn/core-application-browser-mocks", + "@kbn/core-overlays-browser-mocks", + "@kbn/core-chrome-browser-mocks", + "@kbn/core-fatal-errors-browser-mocks", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/core-http-browser-mocks", + "@kbn/core-saved-objects-browser-mocks", + "@kbn/core-deprecations-browser-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/plugins/core-plugins-browser-mocks/BUILD.bazel b/packages/core/plugins/core-plugins-browser-mocks/BUILD.bazel deleted file mode 100644 index dbe94e7ba9649..0000000000000 --- a/packages/core/plugins/core-plugins-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-plugins-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-plugins-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-logging-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", - "//packages/core/plugins/core-plugins-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/plugins/core-plugins-browser-mocks/kibana.jsonc b/packages/core/plugins/core-plugins-browser-mocks/kibana.jsonc index c451ce7aac057..1a3f5258dca2d 100644 --- a/packages/core/plugins/core-plugins-browser-mocks/kibana.jsonc +++ b/packages/core/plugins/core-plugins-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-plugins-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/plugins/core-plugins-browser-mocks/package.json b/packages/core/plugins/core-plugins-browser-mocks/package.json index b8cb7ed38fc34..dac2ee0cb2a65 100644 --- a/packages/core/plugins/core-plugins-browser-mocks/package.json +++ b/packages/core/plugins/core-plugins-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-plugins-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/plugins/core-plugins-browser-mocks/tsconfig.json b/packages/core/plugins/core-plugins-browser-mocks/tsconfig.json index 47ad657279cbb..6b14fa13dd8b5 100644 --- a/packages/core/plugins/core-plugins-browser-mocks/tsconfig.json +++ b/packages/core/plugins/core-plugins-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,14 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/logging-mocks", + "@kbn/core-plugins-browser-internal", + "@kbn/core-plugins-browser", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/plugins/core-plugins-browser/BUILD.bazel b/packages/core/plugins/core-plugins-browser/BUILD.bazel deleted file mode 100644 index b56de1b3a8391..0000000000000 --- a/packages/core/plugins/core-plugins-browser/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-plugins-browser" -PKG_REQUIRE_NAME = "@kbn/core-plugins-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-config:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/plugins/core-plugins-browser/kibana.jsonc b/packages/core/plugins/core-plugins-browser/kibana.jsonc index f7457049acc04..2f521b0048f73 100644 --- a/packages/core/plugins/core-plugins-browser/kibana.jsonc +++ b/packages/core/plugins/core-plugins-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-plugins-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/plugins/core-plugins-browser/package.json b/packages/core/plugins/core-plugins-browser/package.json index 20337d05ec8fc..cd335165b6ac9 100644 --- a/packages/core/plugins/core-plugins-browser/package.json +++ b/packages/core/plugins/core-plugins-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-plugins-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/plugins/core-plugins-browser/tsconfig.json b/packages/core/plugins/core-plugins-browser/tsconfig.json index 47ad657279cbb..854df4f553204 100644 --- a/packages/core/plugins/core-plugins-browser/tsconfig.json +++ b/packages/core/plugins/core-plugins-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,14 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/config", + "@kbn/core-base-common", + "@kbn/core-lifecycle-browser", + "@kbn/logging", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/plugins/core-plugins-server-internal/BUILD.bazel b/packages/core/plugins/core-plugins-server-internal/BUILD.bazel deleted file mode 100644 index 480a21f44eed0..0000000000000 --- a/packages/core/plugins/core-plugins-server-internal/BUILD.bazel +++ /dev/null @@ -1,153 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-plugins-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-plugins-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//moment", - "@npm//rxjs", - "@npm//semver", - "@npm//type-detect", - "@npm//lodash", - "//packages/kbn-std", - "//packages/kbn-config", - "//packages/kbn-config-schema", - "//packages/kbn-logging", - "//packages/kbn-utils", - "//packages/core/base/core-base-common", - "//packages/core/base/core-base-server-internal", - "//packages/core/lifecycle/core-lifecycle-server-internal", - "//packages/core/elasticsearch/core-elasticsearch-server-internal", - "//packages/core/node/core-node-server", - "//packages/core/saved-objects/core-saved-objects-base-server-internal", - # test dependencies - "@npm//mock-fs", - "//packages/kbn-config-mocks", - "//packages/core/base/core-base-server-mocks", - "//packages/core/lifecycle/core-lifecycle-server-mocks", - "//packages/core/logging/core-logging-server-mocks", - "//packages/core/node/core-node-server-mocks", - "//packages/core/plugins/core-plugins-server", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//moment", - "@npm//rxjs", - "@npm//semver", - "@npm//type-detect", - "@npm//lodash", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/node/core-node-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-request-handler-context-server:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-server:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-server-internal:npm_module_types", - "//packages/core/plugins/core-plugins-server:npm_module_types", - # test dependencies' mocks - "@npm//mock-fs", - "//packages/kbn-config-mocks:npm_module_types", - "//packages/core/base/core-base-server-mocks:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-server-mocks:npm_module_types", - "//packages/core/logging/core-logging-server-mocks:npm_module_types", - "//packages/core/node/core-node-server-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/plugins/core-plugins-server-internal/kibana.jsonc b/packages/core/plugins/core-plugins-server-internal/kibana.jsonc index 2354b5ea2054e..e4cbaaef2341d 100644 --- a/packages/core/plugins/core-plugins-server-internal/kibana.jsonc +++ b/packages/core/plugins/core-plugins-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-plugins-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/plugins/core-plugins-server-internal/package.json b/packages/core/plugins/core-plugins-server-internal/package.json index fef5ddbf7b61d..0c68762d1b821 100644 --- a/packages/core/plugins/core-plugins-server-internal/package.json +++ b/packages/core/plugins/core-plugins-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-plugins-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts index 8c1c50e8a612c..222788487fe0e 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts @@ -7,7 +7,7 @@ */ // must be before mocks imports to avoid conflicting with `REPO_ROOT` accessor. -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { mockPackage, scanPluginSearchPathsMock } from './plugins_discovery.test.mocks'; import mockFs from 'mock-fs'; import { getEnvOptions, rawConfigServiceMock } from '@kbn/config-mocks'; diff --git a/packages/core/plugins/core-plugins-server-internal/src/legacy_config.test.ts b/packages/core/plugins/core-plugins-server-internal/src/legacy_config.test.ts index 2bd50db020d0e..1bb1dbb98cfa3 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/legacy_config.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/legacy_config.test.ts @@ -8,7 +8,7 @@ import { take } from 'rxjs/operators'; import { getGlobalConfig, getGlobalConfig$ } from './legacy_config'; import { duration } from 'moment'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; import { ByteSizeValue } from '@kbn/config-schema'; import { createCoreContextConfigServiceMock } from './test_helpers'; diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugin.test.ts b/packages/core/plugins/core-plugins-server-internal/src/plugin.test.ts index 008b8eaf6665a..da1060ae4feb1 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugin.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugin.test.ts @@ -8,7 +8,7 @@ import { join } from 'path'; import { BehaviorSubject } from 'rxjs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { schema } from '@kbn/config-schema'; import { Env } from '@kbn/config'; diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugin_context.test.ts b/packages/core/plugins/core-plugins-server-internal/src/plugin_context.test.ts index 978bf62222f07..bba736aa3d31f 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugin_context.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugin_context.test.ts @@ -8,7 +8,7 @@ import { duration } from 'moment'; import { first } from 'rxjs/operators'; -import { REPO_ROOT, fromRoot } from '@kbn/utils'; +import { REPO_ROOT, fromRoot } from '@kbn/repo-info'; import { rawConfigServiceMock, getEnvOptions, configServiceMock } from '@kbn/config-mocks'; import type { CoreContext } from '@kbn/core-base-server-internal'; import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_config.test.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_config.test.ts index 49bfdf34a34b9..2513d51616ef6 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_config.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_config.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Env } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; import { PluginsConfig, PluginsConfigType } from './plugins_config'; diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.mocks.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.mocks.ts index b79db7791a919..270f824b432f4 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.mocks.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.mocks.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { resolve } from 'path'; const loadJsonFile = jest.requireActual('load-json-file'); diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts index 4664db6e710c7..948939b143dd0 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts @@ -11,7 +11,7 @@ import { mockDiscover, mockPackage } from './plugins_service.test.mocks'; import { resolve, join } from 'path'; import { BehaviorSubject, from } from 'rxjs'; import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { schema } from '@kbn/config-schema'; import { ConfigPath, ConfigService, Env } from '@kbn/config'; diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_system.test.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_system.test.ts index 8b61665f097cf..f949d039eb0ce 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_system.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_system.test.ts @@ -14,7 +14,7 @@ import { import { BehaviorSubject } from 'rxjs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { type PluginName, PluginType } from '@kbn/core-base-common'; import type { CoreContext } from '@kbn/core-base-server-internal'; import { Logger } from '@kbn/logging'; diff --git a/packages/core/plugins/core-plugins-server-internal/src/test_helpers/create_core_context_config_service.mock.ts b/packages/core/plugins/core-plugins-server-internal/src/test_helpers/create_core_context_config_service.mock.ts index 399d45398eefb..60941696b0374 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/test_helpers/create_core_context_config_service.mock.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/test_helpers/create_core_context_config_service.mock.ts @@ -9,7 +9,7 @@ import { IConfigService } from '@kbn/config'; import { configServiceMock } from '@kbn/config-mocks'; import { ByteSizeValue } from '@kbn/config-schema'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; import { duration } from 'moment'; import { from } from 'rxjs'; diff --git a/packages/core/plugins/core-plugins-server-internal/tsconfig.json b/packages/core/plugins/core-plugins-server-internal/tsconfig.json index 4582562d6c9bb..526d9e9f46fe2 100644 --- a/packages/core/plugins/core-plugins-server-internal/tsconfig.json +++ b/packages/core/plugins/core-plugins-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,36 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/std", + "@kbn/config", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/utils", + "@kbn/core-base-common", + "@kbn/core-base-server-internal", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-node-server", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-http-server", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-lifecycle-server", + "@kbn/core-lifecycle-server-internal", + "@kbn/core-plugins-server", + "@kbn/config-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-lifecycle-server-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/core-node-server-mocks", + "@kbn/repo-info", + "@kbn/jest-serializers", + "@kbn/core-environment-server-mocks", + "@kbn/core-environment-server-internal", + "@kbn/core-node-server-internal", + "@kbn/core-plugins-base-server-internal", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/plugins/core-plugins-server-mocks/BUILD.bazel b/packages/core/plugins/core-plugins-server-mocks/BUILD.bazel deleted file mode 100644 index 18c5beb51fb46..0000000000000 --- a/packages/core/plugins/core-plugins-server-mocks/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-plugins-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-plugins-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/plugins/core-plugins-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/plugins/core-plugins-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/plugins/core-plugins-server-mocks/kibana.jsonc b/packages/core/plugins/core-plugins-server-mocks/kibana.jsonc index 4a1b2c0bd2258..62d8b6d118156 100644 --- a/packages/core/plugins/core-plugins-server-mocks/kibana.jsonc +++ b/packages/core/plugins/core-plugins-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-plugins-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/plugins/core-plugins-server-mocks/package.json b/packages/core/plugins/core-plugins-server-mocks/package.json index 2ac79f595e267..4e883adb00736 100644 --- a/packages/core/plugins/core-plugins-server-mocks/package.json +++ b/packages/core/plugins/core-plugins-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-plugins-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/plugins/core-plugins-server-mocks/tsconfig.json b/packages/core/plugins/core-plugins-server-mocks/tsconfig.json index 4582562d6c9bb..b1ed9a23b486c 100644 --- a/packages/core/plugins/core-plugins-server-mocks/tsconfig.json +++ b/packages/core/plugins/core-plugins-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-plugins-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/plugins/core-plugins-server/BUILD.bazel b/packages/core/plugins/core-plugins-server/BUILD.bazel deleted file mode 100644 index 1204629766db4..0000000000000 --- a/packages/core/plugins/core-plugins-server/BUILD.bazel +++ /dev/null @@ -1,117 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-plugins-server" -PKG_REQUIRE_NAME = "@kbn/core-plugins-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/kbn-config-schema", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/node/core-node-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-server:npm_module_types", - -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/plugins/core-plugins-server/kibana.jsonc b/packages/core/plugins/core-plugins-server/kibana.jsonc index 708281a40646b..e152670fd40e7 100644 --- a/packages/core/plugins/core-plugins-server/kibana.jsonc +++ b/packages/core/plugins/core-plugins-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-plugins-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/plugins/core-plugins-server/package.json b/packages/core/plugins/core-plugins-server/package.json index 72e1521adb935..649fa288c8fc3 100644 --- a/packages/core/plugins/core-plugins-server/package.json +++ b/packages/core/plugins/core-plugins-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-plugins-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/plugins/core-plugins-server/tsconfig.json b/packages/core/plugins/core-plugins-server/tsconfig.json index 4582562d6c9bb..c6eee13f49312 100644 --- a/packages/core/plugins/core-plugins-server/tsconfig.json +++ b/packages/core/plugins/core-plugins-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,20 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/config", + "@kbn/config-schema", + "@kbn/utility-types", + "@kbn/utils", + "@kbn/logging", + "@kbn/core-base-common", + "@kbn/core-node-server", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-lifecycle-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/preboot/core-preboot-server-internal/BUILD.bazel b/packages/core/preboot/core-preboot-server-internal/BUILD.bazel deleted file mode 100644 index 5f6d76b008d5f..0000000000000 --- a/packages/core/preboot/core-preboot-server-internal/BUILD.bazel +++ /dev/null @@ -1,116 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-preboot-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-preboot-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-logging", - "//packages/core/base/core-base-server-internal", - "//packages/core/base/core-base-common", - "//packages/kbn-utils", - "//packages/kbn-config", - "//packages/kbn-config-mocks", - "//packages/core/logging/core-logging-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-mocks:npm_module_types", - "//packages/core/logging/core-logging-server-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/preboot/core-preboot-server-internal/kibana.jsonc b/packages/core/preboot/core-preboot-server-internal/kibana.jsonc index 9a2eadb716ea8..2f391bdfd0f5d 100644 --- a/packages/core/preboot/core-preboot-server-internal/kibana.jsonc +++ b/packages/core/preboot/core-preboot-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-preboot-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/preboot/core-preboot-server-internal/package.json b/packages/core/preboot/core-preboot-server-internal/package.json index f768ed11d3533..bce9fb66f2312 100644 --- a/packages/core/preboot/core-preboot-server-internal/package.json +++ b/packages/core/preboot/core-preboot-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-preboot-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/preboot/core-preboot-server-internal/src/preboot_service.test.ts b/packages/core/preboot/core-preboot-server-internal/src/preboot_service.test.ts index beb3e9d71b9c7..5fb4fbe5781a3 100644 --- a/packages/core/preboot/core-preboot-server-internal/src/preboot_service.test.ts +++ b/packages/core/preboot/core-preboot-server-internal/src/preboot_service.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { LoggerFactory } from '@kbn/logging'; import { Env } from '@kbn/config'; import { configServiceMock, getEnvOptions } from '@kbn/config-mocks'; diff --git a/packages/core/preboot/core-preboot-server-internal/tsconfig.json b/packages/core/preboot/core-preboot-server-internal/tsconfig.json index ef521586433c9..fa2cee0f60496 100644 --- a/packages/core/preboot/core-preboot-server-internal/tsconfig.json +++ b/packages/core/preboot/core-preboot-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,17 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/core-base-server-internal", + "@kbn/core-base-common", + "@kbn/config", + "@kbn/config-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/preboot/core-preboot-server-mocks/BUILD.bazel b/packages/core/preboot/core-preboot-server-mocks/BUILD.bazel deleted file mode 100644 index 2decb5b2d8f2f..0000000000000 --- a/packages/core/preboot/core-preboot-server-mocks/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-preboot-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-preboot-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-utility-types", - "//packages/core/preboot/core-preboot-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/preboot/core-preboot-server-internal:npm_module_types", - "//packages/core/preboot/core-preboot-server:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/preboot/core-preboot-server-mocks/kibana.jsonc b/packages/core/preboot/core-preboot-server-mocks/kibana.jsonc index 87a035b99530e..91e60bd62b1e1 100644 --- a/packages/core/preboot/core-preboot-server-mocks/kibana.jsonc +++ b/packages/core/preboot/core-preboot-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-preboot-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/preboot/core-preboot-server-mocks/package.json b/packages/core/preboot/core-preboot-server-mocks/package.json index 150053877e939..3b550e2243daf 100644 --- a/packages/core/preboot/core-preboot-server-mocks/package.json +++ b/packages/core/preboot/core-preboot-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-preboot-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/preboot/core-preboot-server-mocks/tsconfig.json b/packages/core/preboot/core-preboot-server-mocks/tsconfig.json index ef521586433c9..3ee5616edbd6d 100644 --- a/packages/core/preboot/core-preboot-server-mocks/tsconfig.json +++ b/packages/core/preboot/core-preboot-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-preboot-server-internal", + "@kbn/core-preboot-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/preboot/core-preboot-server/BUILD.bazel b/packages/core/preboot/core-preboot-server/BUILD.bazel deleted file mode 100644 index 6bd1af7108de3..0000000000000 --- a/packages/core/preboot/core-preboot-server/BUILD.bazel +++ /dev/null @@ -1,102 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-preboot-server" -PKG_REQUIRE_NAME = "@kbn/core-preboot-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/preboot/core-preboot-server/kibana.jsonc b/packages/core/preboot/core-preboot-server/kibana.jsonc index e529cfdd65685..adcbf3c84aeed 100644 --- a/packages/core/preboot/core-preboot-server/kibana.jsonc +++ b/packages/core/preboot/core-preboot-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-preboot-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/preboot/core-preboot-server/package.json b/packages/core/preboot/core-preboot-server/package.json index b658189601696..e86ff58f703e9 100644 --- a/packages/core/preboot/core-preboot-server/package.json +++ b/packages/core/preboot/core-preboot-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-preboot-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/preboot/core-preboot-server/tsconfig.json b/packages/core/preboot/core-preboot-server/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/preboot/core-preboot-server/tsconfig.json +++ b/packages/core/preboot/core-preboot-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/rendering/core-rendering-browser-internal/BUILD.bazel b/packages/core/rendering/core-rendering-browser-internal/BUILD.bazel deleted file mode 100644 index c0fb214bfb960..0000000000000 --- a/packages/core/rendering/core-rendering-browser-internal/BUILD.bazel +++ /dev/null @@ -1,136 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-rendering-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-rendering-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-dom", - "@npm//rxjs", - "@npm//classnames", - "@npm//react-use", - "//packages/core/application/core-application-common", - "//packages/core/theme/core-theme-browser-internal", - ### test dependencies - "//packages/core/application/core-application-browser-mocks", - "//packages/core/chrome/core-chrome-browser-mocks", - "//packages/core/overlays/core-overlays-browser-mocks", - "//packages/core/theme/core-theme-browser-mocks", - "//packages/core/i18n/core-i18n-browser-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@types/classnames", - "@npm//@types/react-dom", - "@npm//rxjs", - "@npm//react-use", - "//packages/core/application/core-application-common:npm_module_types", - "//packages/core/application/core-application-browser-internal:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/theme/core-theme-browser-internal:npm_module_types", - "//packages/core/i18n/core-i18n-browser:npm_module_types", - "//packages/core/overlays/core-overlays-browser:npm_module_types", - "//packages/core/chrome/core-chrome-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/rendering/core-rendering-browser-internal/kibana.jsonc b/packages/core/rendering/core-rendering-browser-internal/kibana.jsonc index aaca72f8b4843..87f174de187ff 100644 --- a/packages/core/rendering/core-rendering-browser-internal/kibana.jsonc +++ b/packages/core/rendering/core-rendering-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-rendering-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/rendering/core-rendering-browser-internal/package.json b/packages/core/rendering/core-rendering-browser-internal/package.json index 1ccaccf9621ee..6942411ed56b3 100644 --- a/packages/core/rendering/core-rendering-browser-internal/package.json +++ b/packages/core/rendering/core-rendering-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-rendering-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/rendering/core-rendering-browser-internal/tsconfig.json b/packages/core/rendering/core-rendering-browser-internal/tsconfig.json index 37f8e83d0d7a6..7851397e49120 100644 --- a/packages/core/rendering/core-rendering-browser-internal/tsconfig.json +++ b/packages/core/rendering/core-rendering-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,22 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-application-common", + "@kbn/core-application-browser-internal", + "@kbn/core-theme-browser", + "@kbn/core-theme-browser-internal", + "@kbn/core-i18n-browser", + "@kbn/core-overlays-browser", + "@kbn/core-chrome-browser-internal", + "@kbn/core-application-browser-mocks", + "@kbn/core-chrome-browser-mocks", + "@kbn/core-overlays-browser-mocks", + "@kbn/core-theme-browser-mocks", + "@kbn/core-i18n-browser-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/rendering/core-rendering-browser-mocks/BUILD.bazel b/packages/core/rendering/core-rendering-browser-mocks/BUILD.bazel deleted file mode 100644 index d2cdb9c78c286..0000000000000 --- a/packages/core/rendering/core-rendering-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-rendering-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-rendering-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/rendering/core-rendering-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/rendering/core-rendering-browser-mocks/kibana.jsonc b/packages/core/rendering/core-rendering-browser-mocks/kibana.jsonc index 82b891ad721d3..38be88afd1499 100644 --- a/packages/core/rendering/core-rendering-browser-mocks/kibana.jsonc +++ b/packages/core/rendering/core-rendering-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-rendering-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/rendering/core-rendering-browser-mocks/package.json b/packages/core/rendering/core-rendering-browser-mocks/package.json index b9cef0d400733..8c471403e757d 100644 --- a/packages/core/rendering/core-rendering-browser-mocks/package.json +++ b/packages/core/rendering/core-rendering-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-rendering-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/rendering/core-rendering-browser-mocks/tsconfig.json b/packages/core/rendering/core-rendering-browser-mocks/tsconfig.json index 741519055e986..67c2b7619323a 100644 --- a/packages/core/rendering/core-rendering-browser-mocks/tsconfig.json +++ b/packages/core/rendering/core-rendering-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-rendering-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/rendering/core-rendering-server-internal/BUILD.bazel b/packages/core/rendering/core-rendering-server-internal/BUILD.bazel deleted file mode 100644 index 9b9c41de78663..0000000000000 --- a/packages/core/rendering/core-rendering-server-internal/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-rendering-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-rendering-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-dom", - "@npm//rxjs", - "//packages/kbn-i18n", - "//packages/kbn-ui-shared-deps-npm", - "//packages/kbn-ui-shared-deps-src", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@types/react-dom", - "@npm//rxjs", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/kbn-ui-shared-deps-src:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-common-internal:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/status/core-status-server-internal:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-common:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server:npm_module_types", - "//packages/core/plugins/core-plugins-base-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/rendering/core-rendering-server-internal/kibana.jsonc b/packages/core/rendering/core-rendering-server-internal/kibana.jsonc index 2ce227d70528f..9f7f2ea9c43a1 100644 --- a/packages/core/rendering/core-rendering-server-internal/kibana.jsonc +++ b/packages/core/rendering/core-rendering-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-rendering-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/rendering/core-rendering-server-internal/package.json b/packages/core/rendering/core-rendering-server-internal/package.json index b41efec088ad2..b6eb85b15abd1 100644 --- a/packages/core/rendering/core-rendering-server-internal/package.json +++ b/packages/core/rendering/core-rendering-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-rendering-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.ts b/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.ts index 8424bb3e68a1d..83043a100c857 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.ts @@ -82,6 +82,7 @@ export const bootstrapRendererFactory: BootstrapRendererFactory = ({ core: `${regularBundlePath}/core/`, 'kbn-ui-shared-deps-src': `${regularBundlePath}/kbn-ui-shared-deps-src/`, 'kbn-ui-shared-deps-npm': `${regularBundlePath}/kbn-ui-shared-deps-npm/`, + 'kbn-monaco': `${regularBundlePath}/kbn-monaco/`, ...Object.fromEntries( [...bundlePaths.entries()].map(([pluginId, plugin]) => [pluginId, plugin.publicPath]) ), diff --git a/packages/core/rendering/core-rendering-server-internal/tsconfig.json b/packages/core/rendering/core-rendering-server-internal/tsconfig.json index 2279a16c99adf..54274d5e5e3cf 100644 --- a/packages/core/rendering/core-rendering-server-internal/tsconfig.json +++ b/packages/core/rendering/core-rendering-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,31 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/ui-shared-deps-npm", + "@kbn/ui-shared-deps-src", + "@kbn/core-base-server-internal", + "@kbn/core-injected-metadata-common-internal", + "@kbn/core-http-server", + "@kbn/core-http-server-internal", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-status-server-internal", + "@kbn/core-ui-settings-common", + "@kbn/core-ui-settings-server", + "@kbn/core-plugins-base-server-internal", + "@kbn/core-http-router-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-ui-settings-server-mocks", + "@kbn/config", + "@kbn/core-base-common", + "@kbn/core-base-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/core-status-server-mocks", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/rendering/core-rendering-server-mocks/BUILD.bazel b/packages/core/rendering/core-rendering-server-mocks/BUILD.bazel deleted file mode 100644 index 7f960ef9e8067..0000000000000 --- a/packages/core/rendering/core-rendering-server-mocks/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-rendering-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-rendering-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/rendering/core-rendering-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/rendering/core-rendering-server-mocks/kibana.jsonc b/packages/core/rendering/core-rendering-server-mocks/kibana.jsonc index a04eae9cadc20..8d836f9acddaa 100644 --- a/packages/core/rendering/core-rendering-server-mocks/kibana.jsonc +++ b/packages/core/rendering/core-rendering-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-rendering-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/rendering/core-rendering-server-mocks/package.json b/packages/core/rendering/core-rendering-server-mocks/package.json index e729d1c022bc7..2add3ab42dcc9 100644 --- a/packages/core/rendering/core-rendering-server-mocks/package.json +++ b/packages/core/rendering/core-rendering-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-rendering-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/rendering/core-rendering-server-mocks/tsconfig.json b/packages/core/rendering/core-rendering-server-mocks/tsconfig.json index 4582562d6c9bb..ffd8b5b62c9d7 100644 --- a/packages/core/rendering/core-rendering-server-mocks/tsconfig.json +++ b/packages/core/rendering/core-rendering-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-rendering-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/root/core-root-browser-internal/BUILD.bazel b/packages/core/root/core-root-browser-internal/BUILD.bazel deleted file mode 100644 index 05f41123181e3..0000000000000 --- a/packages/core/root/core-root-browser-internal/BUILD.bazel +++ /dev/null @@ -1,172 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-root-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-root-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//@elastic/apm-rum", - "//packages/kbn-std", - "//packages/kbn-i18n", - "//packages/kbn-ebt-tools", - "//packages/core/application/core-application-browser-internal", - "//packages/core/logging/core-logging-browser-internal", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal", - "//packages/core/doc-links/core-doc-links-browser-internal", - "//packages/core/theme/core-theme-browser-internal", - "//packages/core/analytics/core-analytics-browser-internal", - "//packages/core/i18n/core-i18n-browser-internal", - "//packages/core/execution-context/core-execution-context-browser-internal", - "//packages/core/fatal-errors/core-fatal-errors-browser-internal", - "//packages/core/http/core-http-browser-internal", - "//packages/core/ui-settings/core-ui-settings-browser-internal", - "//packages/core/deprecations/core-deprecations-browser-internal", - "//packages/core/integrations/core-integrations-browser-internal", - "//packages/core/overlays/core-overlays-browser-internal", - "//packages/core/saved-objects/core-saved-objects-browser-internal", - "//packages/core/notifications/core-notifications-browser-internal", - "//packages/core/chrome/core-chrome-browser-internal", - "//packages/core/rendering/core-rendering-browser-internal", - "//packages/core/apps/core-apps-browser-internal", - "//packages/core/lifecycle/core-lifecycle-browser-internal", - "//packages/core/plugins/core-plugins-browser-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//@elastic/apm-rum", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-ebt-tools:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser:npm_module_types", - "//packages/core/application/core-application-browser-internal:npm_module_types", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/logging/core-logging-browser-internal:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/core/doc-links/core-doc-links-browser-internal:npm_module_types", - "//packages/core/theme/core-theme-browser-internal:npm_module_types", - "//packages/core/analytics/core-analytics-browser:npm_module_types", - "//packages/core/analytics/core-analytics-browser-internal:npm_module_types", - "//packages/core/i18n/core-i18n-browser-internal:npm_module_types", - "//packages/core/execution-context/core-execution-context-browser-internal:npm_module_types", - "//packages/core/fatal-errors/core-fatal-errors-browser:npm_module_types", - "//packages/core/fatal-errors/core-fatal-errors-browser-internal:npm_module_types", - "//packages/core/http/core-http-browser-internal:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser-internal:npm_module_types", - "//packages/core/deprecations/core-deprecations-browser-internal:npm_module_types", - "//packages/core/integrations/core-integrations-browser-internal:npm_module_types", - "//packages/core/overlays/core-overlays-browser-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-browser-internal:npm_module_types", - "//packages/core/notifications/core-notifications-browser-internal:npm_module_types", - "//packages/core/chrome/core-chrome-browser-internal:npm_module_types", - "//packages/core/rendering/core-rendering-browser-internal:npm_module_types", - "//packages/core/apps/core-apps-browser-internal:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-browser-internal:npm_module_types", - "//packages/core/plugins/core-plugins-browser-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/root/core-root-browser-internal/kibana.jsonc b/packages/core/root/core-root-browser-internal/kibana.jsonc index 0dd7d5ae6beb4..e99eaefd0e847 100644 --- a/packages/core/root/core-root-browser-internal/kibana.jsonc +++ b/packages/core/root/core-root-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-root-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/root/core-root-browser-internal/package.json b/packages/core/root/core-root-browser-internal/package.json index d010180d2747d..8ced433c4940a 100644 --- a/packages/core/root/core-root-browser-internal/package.json +++ b/packages/core/root/core-root-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-root-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/root/core-root-browser-internal/tsconfig.json b/packages/core/root/core-root-browser-internal/tsconfig.json index 47ad657279cbb..f5b66338a52b3 100644 --- a/packages/core/root/core-root-browser-internal/tsconfig.json +++ b/packages/core/root/core-root-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,59 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/std", + "@kbn/i18n", + "@kbn/ebt-tools", + "@kbn/core-execution-context-browser", + "@kbn/core-application-browser-internal", + "@kbn/core-base-browser-internal", + "@kbn/core-logging-browser-internal", + "@kbn/core-injected-metadata-browser-internal", + "@kbn/core-doc-links-browser-internal", + "@kbn/core-theme-browser-internal", + "@kbn/core-analytics-browser", + "@kbn/core-analytics-browser-internal", + "@kbn/core-i18n-browser-internal", + "@kbn/core-execution-context-browser-internal", + "@kbn/core-fatal-errors-browser", + "@kbn/core-fatal-errors-browser-internal", + "@kbn/core-http-browser-internal", + "@kbn/core-ui-settings-browser-internal", + "@kbn/core-deprecations-browser-internal", + "@kbn/core-integrations-browser-internal", + "@kbn/core-overlays-browser-internal", + "@kbn/core-saved-objects-browser-internal", + "@kbn/core-notifications-browser-internal", + "@kbn/core-chrome-browser-internal", + "@kbn/core-rendering-browser-internal", + "@kbn/core-apps-browser-internal", + "@kbn/core-lifecycle-browser-internal", + "@kbn/core-plugins-browser-internal", + "@kbn/utility-types-jest", + "@kbn/core-execution-context-browser-mocks", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-doc-links-browser-mocks", + "@kbn/core-theme-browser-mocks", + "@kbn/core-analytics-browser-mocks", + "@kbn/core-application-browser-mocks", + "@kbn/core-chrome-browser-mocks", + "@kbn/core-fatal-errors-browser-mocks", + "@kbn/core-http-browser-mocks", + "@kbn/core-i18n-browser-mocks", + "@kbn/core-notifications-browser-mocks", + "@kbn/core-overlays-browser-mocks", + "@kbn/core-plugins-browser-mocks", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/core-rendering-browser-mocks", + "@kbn/core-integrations-browser-mocks", + "@kbn/core-apps-browser-mocks", + "@kbn/core-logging-browser-mocks", + "@kbn/logging", + "@kbn/config", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/root/core-root-server-internal/BUILD.bazel b/packages/core/root/core-root-server-internal/BUILD.bazel deleted file mode 100644 index 4d88acf881782..0000000000000 --- a/packages/core/root/core-root-server-internal/BUILD.bazel +++ /dev/null @@ -1,167 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-root-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-root-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//elastic-apm-node", - "//packages/kbn-utils", - "//packages/kbn-config", - "//packages/kbn-ebt-tools", - "//packages/core/doc-links/core-doc-links-server-internal", - "//packages/core/logging/core-logging-server-internal", - "//packages/core/config/core-config-server-internal", - "//packages/core/node/core-node-server-internal", - "//packages/core/analytics/core-analytics-server-internal", - "//packages/core/environment/core-environment-server-internal", - "//packages/core/execution-context/core-execution-context-server-internal", - "//packages/core/preboot/core-preboot-server-internal", - "//packages/core/http/core-http-context-server-internal", - "//packages/core/http/core-http-server-internal", - "//packages/core/elasticsearch/core-elasticsearch-server-internal", - "//packages/core/metrics/core-metrics-server-internal", - "//packages/core/capabilities/core-capabilities-server-internal", - "//packages/core/saved-objects/core-saved-objects-base-server-internal", - "//packages/core/saved-objects/core-saved-objects-server-internal", - "//packages/core/i18n/core-i18n-server-internal", - "//packages/core/deprecations/core-deprecations-server-internal", - "//packages/core/usage-data/core-usage-data-server-internal", - "//packages/core/status/core-status-server-internal", - "//packages/core/ui-settings/core-ui-settings-server-internal", - "//packages/core/http/core-http-request-handler-context-server-internal", - "//packages/core/rendering/core-rendering-server-internal", - "//packages/core/http/core-http-resources-server-internal", - "//packages/core/plugins/core-plugins-server-internal", - "//packages/core/apps/core-apps-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//elastic-apm-node", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-ebt-tools:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/doc-links/core-doc-links-server-internal:npm_module_types", - "//packages/core/logging/core-logging-server-internal:npm_module_types", - "//packages/core/config/core-config-server-internal:npm_module_types", - "//packages/core/node/core-node-server-internal:npm_module_types", - "//packages/core/analytics/core-analytics-server-internal:npm_module_types", - "//packages/core/analytics/core-analytics-server:npm_module_types", - "//packages/core/environment/core-environment-server-internal:npm_module_types", - "//packages/core/execution-context/core-execution-context-server-internal:npm_module_types", - "//packages/core/preboot/core-preboot-server-internal:npm_module_types", - "//packages/core/http/core-http-context-server-internal:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/metrics/core-metrics-server-internal:npm_module_types", - "//packages/core/capabilities/core-capabilities-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-internal:npm_module_types", - "//packages/core/i18n/core-i18n-server-internal:npm_module_types", - "//packages/core/deprecations/core-deprecations-server-internal:npm_module_types", - "//packages/core/usage-data/core-usage-data-server-internal:npm_module_types", - "//packages/core/status/core-status-server-internal:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server-internal:npm_module_types", - "//packages/core/http/core-http-request-handler-context-server-internal:npm_module_types", - "//packages/core/http/core-http-request-handler-context-server:npm_module_types", - "//packages/core/rendering/core-rendering-server-internal:npm_module_types", - "//packages/core/http/core-http-resources-server-internal:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-server-internal:npm_module_types", - "//packages/core/plugins/core-plugins-server-internal:npm_module_types", - "//packages/core/apps/core-apps-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "build_types", - srcs = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/root/core-root-server-internal/kibana.jsonc b/packages/core/root/core-root-server-internal/kibana.jsonc index b2cd75af099ee..45446380c4498 100644 --- a/packages/core/root/core-root-server-internal/kibana.jsonc +++ b/packages/core/root/core-root-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-root-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/root/core-root-server-internal/package.json b/packages/core/root/core-root-server-internal/package.json index 2d71f791a6e5e..eed5c24376fd8 100644 --- a/packages/core/root/core-root-server-internal/package.json +++ b/packages/core/root/core-root-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-root-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts", "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/core/root/core-root-server-internal/src/bootstrap.ts b/packages/core/root/core-root-server-internal/src/bootstrap.ts index 5aa602328e67b..d37e589e66efb 100644 --- a/packages/core/root/core-root-server-internal/src/bootstrap.ts +++ b/packages/core/root/core-root-server-internal/src/bootstrap.ts @@ -34,7 +34,7 @@ export async function bootstrap({ configs, cliArgs, applyConfigOverrides }: Boot // and as `REPO_ROOT` is initialized on the fly when importing `dev-utils` and requires // the `fs` package, it causes failures. This is why we use a dynamic `require` here. // eslint-disable-next-line @typescript-eslint/no-var-requires - const { REPO_ROOT } = require('@kbn/utils'); + const { REPO_ROOT } = require('@kbn/repo-info'); const env = Env.createDefault(REPO_ROOT, { configs, diff --git a/packages/core/root/core-root-server-internal/src/root/index.test.ts b/packages/core/root/core-root-server-internal/src/root/index.test.ts index 707975affd2b8..278c56bbe7450 100644 --- a/packages/core/root/core-root-server-internal/src/root/index.test.ts +++ b/packages/core/root/core-root-server-internal/src/root/index.test.ts @@ -10,7 +10,7 @@ import { rawConfigService, configService, logger, mockServer } from './index.tes import { BehaviorSubject } from 'rxjs'; import { filter, first } from 'rxjs/operators'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Env } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; import { Root } from '.'; diff --git a/packages/core/root/core-root-server-internal/src/server.test.ts b/packages/core/root/core-root-server-internal/src/server.test.ts index 9826430b23406..894dbeca94f64 100644 --- a/packages/core/root/core-root-server-internal/src/server.test.ts +++ b/packages/core/root/core-root-server-internal/src/server.test.ts @@ -28,7 +28,7 @@ import { } from './server.test.mocks'; import { BehaviorSubject } from 'rxjs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Env } from '@kbn/config'; import { rawConfigServiceMock, getEnvOptions } from '@kbn/config-mocks'; import { Server } from './server'; diff --git a/packages/core/root/core-root-server-internal/tsconfig.json b/packages/core/root/core-root-server-internal/tsconfig.json index 4582562d6c9bb..2e4947a51c399 100644 --- a/packages/core/root/core-root-server-internal/tsconfig.json +++ b/packages/core/root/core-root-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,64 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utils", + "@kbn/logging", + "@kbn/config", + "@kbn/ebt-tools", + "@kbn/core-base-server-internal", + "@kbn/core-doc-links-server-internal", + "@kbn/core-logging-server-internal", + "@kbn/core-config-server-internal", + "@kbn/core-node-server-internal", + "@kbn/core-analytics-server-internal", + "@kbn/core-analytics-server", + "@kbn/core-environment-server-internal", + "@kbn/core-execution-context-server-internal", + "@kbn/core-preboot-server-internal", + "@kbn/core-http-context-server-internal", + "@kbn/core-http-server-internal", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-metrics-server-internal", + "@kbn/core-capabilities-server-internal", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-server-internal", + "@kbn/core-i18n-server-internal", + "@kbn/core-deprecations-server-internal", + "@kbn/core-usage-data-server-internal", + "@kbn/core-status-server-internal", + "@kbn/core-ui-settings-server-internal", + "@kbn/core-http-request-handler-context-server-internal", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-rendering-server-internal", + "@kbn/core-http-resources-server-internal", + "@kbn/core-lifecycle-server-internal", + "@kbn/core-plugins-server-internal", + "@kbn/core-apps-server-internal", + "@kbn/core-http-server-mocks", + "@kbn/core-plugins-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/config-mocks", + "@kbn/core-saved-objects-server-mocks", + "@kbn/core-http-context-server-mocks", + "@kbn/core-ui-settings-server-mocks", + "@kbn/core-rendering-server-mocks", + "@kbn/core-environment-server-mocks", + "@kbn/core-node-server-mocks", + "@kbn/core-metrics-server-mocks", + "@kbn/core-status-server-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/core-i18n-server-mocks", + "@kbn/core-preboot-server-mocks", + "@kbn/core-deprecations-server-mocks", + "@kbn/core-doc-links-server-mocks", + "@kbn/repo-info", + "@kbn/config-schema", + "@kbn/apm-config-loader", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-api-browser/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-api-browser/BUILD.bazel deleted file mode 100644 index c5335b58bdd18..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-api-browser/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-api-browser" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-api-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-api-browser/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-api-browser/kibana.jsonc index dc9bc275a4cb1..29d24ccc6a086 100644 --- a/packages/core/saved-objects/core-saved-objects-api-browser/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-api-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-api-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-api-browser/package.json b/packages/core/saved-objects/core-saved-objects-api-browser/package.json index af4889e4c3418..3b9859c73e289 100644 --- a/packages/core/saved-objects/core-saved-objects-api-browser/package.json +++ b/packages/core/saved-objects/core-saved-objects-api-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-saved-objects-api-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-api-browser/tsconfig.json b/packages/core/saved-objects/core-saved-objects-api-browser/tsconfig.json index ef521586433c9..271f341183fce 100644 --- a/packages/core/saved-objects/core-saved-objects-api-browser/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-api-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-api-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-api-server-internal/BUILD.bazel deleted file mode 100644 index c35025c728e59..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/BUILD.bazel +++ /dev/null @@ -1,130 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-api-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-api-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks/*", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//p-map", - "@npm//@hapi/boom", - "//packages/kbn-config-schema", - "//packages/kbn-es-query", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal", - "//packages/core/elasticsearch/core-elasticsearch-server-internal", - "//packages/core/usage-data/core-usage-data-base-server-internal", - "//packages/core/saved-objects/core-saved-objects-utils-server", - #### test dependencies - "//packages/core/elasticsearch/core-elasticsearch-client-server-mocks", - "//packages/core/saved-objects/core-saved-objects-base-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//lodash", - "@npm//p-map", - "@npm//@hapi/boom", - "@npm//@elastic/elasticsearch", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-es-query:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/usage-data/core-usage-data-base-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-utils-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-api-server-internal/kibana.jsonc index afef1f03740a0..e85d65a507884 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-api-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/package.json b/packages/core/saved-objects/core-saved-objects-api-server-internal/package.json index 99461f483c868..6e0e4b37c6ddc 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/package.json +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-api-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts index 99b87279c8b62..a6b9ba684b568 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts @@ -484,7 +484,7 @@ export const mockUpdateResponse = ( ); }; -export const updateSuccess = async ( +export const updateSuccess = async >( client: ElasticsearchClientMock, repository: SavedObjectsRepository, registry: SavedObjectTypeRegistry, diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/tsconfig.json b/packages/core/saved-objects/core-saved-objects-api-server-internal/tsconfig.json index 4582562d6c9bb..6f7ca16e5d58a 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,31 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/es-query", + "@kbn/core-elasticsearch-client-server-internal", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-usage-data-base-server-internal", + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-utils-server", + "@kbn/logging-mocks", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/core-saved-objects-base-server-mocks", + "@kbn/es-errors", + "@kbn/safer-lodash-set", + "@kbn/utility-types-jest", + "@kbn/logging", + "@kbn/core-elasticsearch-server", + "@kbn/core-http-server", + "@kbn/core-http-server-mocks", + "@kbn/core-saved-objects-migration-server-internal", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-api-server-mocks/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-api-server-mocks/BUILD.bazel deleted file mode 100644 index c746f77a7473e..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-api-server-mocks/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-api-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-api-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/saved-objects/core-saved-objects-utils-server", - "//packages/core/saved-objects/core-saved-objects-api-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-utils-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-api-server-mocks/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-api-server-mocks/kibana.jsonc index beb632af28c08..0bb78d126e72d 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-mocks/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-api-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-api-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-api-server-mocks/package.json b/packages/core/saved-objects/core-saved-objects-api-server-mocks/package.json index 344dee3e9e712..d1b99b1ab49ae 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-mocks/package.json +++ b/packages/core/saved-objects/core-saved-objects-api-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-api-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-api-server-mocks/tsconfig.json b/packages/core/saved-objects/core-saved-objects-api-server-mocks/tsconfig.json index 4582562d6c9bb..96548fe6eaacd 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-mocks/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-api-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-api-server-internal", + "@kbn/core-saved-objects-utils-server", + "@kbn/logging-mocks", + "@kbn/core-saved-objects-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-api-server/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-api-server/BUILD.bazel deleted file mode 100644 index 80a40011e1a99..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-api-server/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-api-server" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-api-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@elastic/elasticsearch", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-api-server/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-api-server/kibana.jsonc index 08ebe81051b65..4f6c6b3f761dd 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-api-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-api-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-api-server/package.json b/packages/core/saved-objects/core-saved-objects-api-server/package.json index 006b28669cf72..36b5e9f23a63a 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/package.json +++ b/packages/core/saved-objects/core-saved-objects-api-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-api-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-api-server/tsconfig.json b/packages/core/saved-objects/core-saved-objects-api-server/tsconfig.json index ef521586433c9..0e593db446f6f 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-api-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-saved-objects-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-base-server-internal/BUILD.bazel deleted file mode 100644 index 99fc132ed18ec..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-base-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-base-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//semver", - "//packages/kbn-config-schema", - ### test dependencies - "//packages/kbn-logging-mocks", - "@npm//@hapi/boom", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/semver", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-utils-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-base-server-internal/kibana.jsonc index a14d74263ec95..fba789e2893c8 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-base-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/package.json b/packages/core/saved-objects/core-saved-objects-base-server-internal/package.json index d630f04e66318..31ed83a1f27ff 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/package.json +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-base-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/tsconfig.json b/packages/core/saved-objects/core-saved-objects-base-server-internal/tsconfig.json index ef521586433c9..5227e67e6947a 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,17 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/config-schema", + "@kbn/core-base-server-internal", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-utils-server", + "@kbn/std", + "@kbn/logging-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-base-server-mocks/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-base-server-mocks/BUILD.bazel deleted file mode 100644 index c5ef952013257..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-base-server-mocks/BUILD.bazel +++ /dev/null @@ -1,103 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-base-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-base-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-base-server-mocks/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-base-server-mocks/kibana.jsonc index deab59887d747..29356da39ae30 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-mocks/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-base-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-base-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-base-server-mocks/package.json b/packages/core/saved-objects/core-saved-objects-base-server-mocks/package.json index 3ff49367166fc..3a5786139f6c5 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-mocks/package.json +++ b/packages/core/saved-objects/core-saved-objects-base-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-base-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-base-server-mocks/tsconfig.json b/packages/core/saved-objects/core-saved-objects-base-server-mocks/tsconfig.json index ef521586433c9..d609791958329 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-mocks/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-base-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-base-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-browser-internal/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-browser-internal/BUILD.bazel deleted file mode 100644 index 0228c86c6d99f..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-browser-internal/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "//packages/kbn-safer-lodash-set", - ### test dependencies - "//packages/core/http/core-http-browser-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//lodash", - "//packages/kbn-safer-lodash-set:npm_module_types", - "//packages/core/base/core-base-browser-internal:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-browser:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-browser-internal/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-browser-internal/kibana.jsonc index ec1e45b0ffb38..85abf04f839f4 100644 --- a/packages/core/saved-objects/core-saved-objects-browser-internal/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-browser-internal/package.json b/packages/core/saved-objects/core-saved-objects-browser-internal/package.json index 1117da4a27c9d..5cfe8ec3aeae7 100644 --- a/packages/core/saved-objects/core-saved-objects-browser-internal/package.json +++ b/packages/core/saved-objects/core-saved-objects-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-saved-objects-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-browser-internal/tsconfig.json b/packages/core/saved-objects/core-saved-objects-browser-internal/tsconfig.json index ef521586433c9..a29dbf58b4117 100644 --- a/packages/core/saved-objects/core-saved-objects-browser-internal/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,18 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/safer-lodash-set", + "@kbn/core-base-browser-internal", + "@kbn/core-http-browser", + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-browser", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-api-browser", + "@kbn/core-http-browser-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-browser-mocks/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-browser-mocks/BUILD.bazel deleted file mode 100644 index 0bea85871440b..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/saved-objects/core-saved-objects-browser-internal" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-browser:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-browser-internal:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-browser-mocks/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-browser-mocks/kibana.jsonc index cf0623a36b708..105338611b28f 100644 --- a/packages/core/saved-objects/core-saved-objects-browser-mocks/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-browser-mocks/package.json b/packages/core/saved-objects/core-saved-objects-browser-mocks/package.json index bba43d5d36aee..db85475b718cc 100644 --- a/packages/core/saved-objects/core-saved-objects-browser-mocks/package.json +++ b/packages/core/saved-objects/core-saved-objects-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-saved-objects-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-browser-mocks/tsconfig.json b/packages/core/saved-objects/core-saved-objects-browser-mocks/tsconfig.json index ef521586433c9..0a68b34d3b836 100644 --- a/packages/core/saved-objects/core-saved-objects-browser-mocks/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-saved-objects-browser", + "@kbn/core-saved-objects-browser-internal", + "@kbn/core-saved-objects-api-browser", + "@kbn/core-saved-objects-common", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-browser/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-browser/BUILD.bazel deleted file mode 100644 index e540033110900..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-browser/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-browser" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/saved-objects/core-saved-objects-api-browser:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-browser/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-browser/kibana.jsonc index 923add888b03e..b09f75ea9f6c9 100644 --- a/packages/core/saved-objects/core-saved-objects-browser/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-browser/package.json b/packages/core/saved-objects/core-saved-objects-browser/package.json index 76019a9aaab85..d897a3fbf3d9d 100644 --- a/packages/core/saved-objects/core-saved-objects-browser/package.json +++ b/packages/core/saved-objects/core-saved-objects-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-saved-objects-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-browser/tsconfig.json b/packages/core/saved-objects/core-saved-objects-browser/tsconfig.json index ef521586433c9..737e72c758c99 100644 --- a/packages/core/saved-objects/core-saved-objects-browser/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-saved-objects-api-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-common/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-common/BUILD.bazel deleted file mode 100644 index 18376aa9960ea..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-common/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-common" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-common/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-common/kibana.jsonc index d82a9bf67d323..205503f731e74 100644 --- a/packages/core/saved-objects/core-saved-objects-common/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-common/package.json b/packages/core/saved-objects/core-saved-objects-common/package.json index 11849bd364a11..64260227c7a5a 100644 --- a/packages/core/saved-objects/core-saved-objects-common/package.json +++ b/packages/core/saved-objects/core-saved-objects-common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-saved-objects-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-common/tsconfig.json b/packages/core/saved-objects/core-saved-objects-common/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/saved-objects/core-saved-objects-common/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/BUILD.bazel deleted file mode 100644 index 1004b8bdc0061..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/BUILD.bazel +++ /dev/null @@ -1,118 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-import-export-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-import-export-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//uuid", - "@npm//p-map", - "//packages/kbn-utils", - ### test dependencies - "//packages/core/saved-objects/core-saved-objects-api-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/uuid", - "@npm//p-map", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/kibana.jsonc index eabb9e670baf3..cde6f2516df0d 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-import-export-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/package.json b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/package.json index 83b06bcce8d24..e06b053497dd8 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/package.json +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-import-export-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/tsconfig.json b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/tsconfig.json index 4582562d6c9bb..0cd74a160792a 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,23 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utils", + "@kbn/logging", + "@kbn/core-http-server", + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-server", + "@kbn/core-http-server-mocks", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/logging-mocks", + "@kbn/core-saved-objects-base-server-mocks", + "@kbn/core-http-router-server-internal", + "@kbn/core-saved-objects-utils-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/BUILD.bazel deleted file mode 100644 index 4189affe70b4c..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-import-export-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-import-export-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/kibana.jsonc index 174960bd1aadc..20b09ed4cf69a 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-import-export-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/package.json b/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/package.json index e6117d0a4df34..27679e3917088 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/package.json +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-import-export-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/tsconfig.json b/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/tsconfig.json index 4582562d6c9bb..473437fa0be81 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-saved-objects-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-migration-server-internal/BUILD.bazel deleted file mode 100644 index e582bb0811880..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/BUILD.bazel +++ /dev/null @@ -1,132 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-migration-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-migration-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//uuid", - "@npm//semver", - "@npm//fp-ts", - "@npm//lodash", - "@npm//@hapi/boom", - "@npm//@elastic/elasticsearch", - "//packages/kbn-std", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal", - ### test dependencies - "//packages/core/elasticsearch/core-elasticsearch-server-mocks", - "//packages/core/elasticsearch/core-elasticsearch-client-server-mocks", - "//packages/core/logging/core-logging-server-mocks", - -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/uuid", - "@npm//@types/semver", - "@npm//fp-ts", - "@npm//lodash", - "@npm//@hapi/boom", - "@npm//@elastic/elasticsearch", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/core/doc-links/core-doc-links-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-client-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-utils-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-migration-server-internal/kibana.jsonc index 4a04817a139c2..05f06aeb86b89 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-migration-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/package.json b/packages/core/saved-objects/core-saved-objects-migration-server-internal/package.json index 1759e06b65948..82412503a8781 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/package.json +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-migration-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/tsconfig.json b/packages/core/saved-objects/core-saved-objects-migration-server-internal/tsconfig.json index 4582562d6c9bb..3612fae05aba1 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,28 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/std", + "@kbn/core-doc-links-server", + "@kbn/core-elasticsearch-server", + "@kbn/core-elasticsearch-client-server-internal", + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-utils-server", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-logging-server-mocks", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/config-schema", + "@kbn/core-doc-links-server-mocks", + "@kbn/core-logging-server-internal", + "@kbn/core-saved-objects-base-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/doc-links", + "@kbn/safer-lodash-set", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-mocks/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-migration-server-mocks/BUILD.bazel deleted file mode 100644 index 9dbf4e0b79d68..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-migration-server-mocks/BUILD.bazel +++ /dev/null @@ -1,109 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-migration-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-migration-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/core/saved-objects/core-saved-objects-migration-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-migration-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-mocks/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-migration-server-mocks/kibana.jsonc index b27f6951cb0d0..49e49c7d12b4f 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-mocks/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-migration-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-migration-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-mocks/package.json b/packages/core/saved-objects/core-saved-objects-migration-server-mocks/package.json index ac9a5a8191858..b509883da0916 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-mocks/package.json +++ b/packages/core/saved-objects/core-saved-objects-migration-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-migration-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-mocks/tsconfig.json b/packages/core/saved-objects/core-saved-objects-migration-server-mocks/tsconfig.json index 4582562d6c9bb..b228481a3207a 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-mocks/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-migration-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-migration-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-server-internal/BUILD.bazel deleted file mode 100644 index 7bcee948e25ea..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-server-internal/BUILD.bazel +++ /dev/null @@ -1,131 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//json-stable-stringify", - "//packages/kbn-config-schema", - "//packages/core/base/core-base-common", - "//packages/core/status/core-status-common", - "//packages/core/saved-objects/core-saved-objects-base-server-internal", - "//packages/core/saved-objects/core-saved-objects-api-server-internal", - "//packages/core/saved-objects/core-saved-objects-migration-server-internal", - "//packages/core/saved-objects/core-saved-objects-import-export-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/json-stable-stringify", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/status/core-status-common:npm_module_types", - "//packages/core/deprecations/core-deprecations-common:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-migration-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-import-export-server-internal:npm_module_types", - "//packages/core/usage-data/core-usage-data-base-server-internal:npm_module_types", - "//packages/core/deprecations/core-deprecations-server:npm_module_types", - "//packages/core/node/core-node-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-server-internal/kibana.jsonc index 43cadd207f914..4e71454f9ca73 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/package.json b/packages/core/saved-objects/core-saved-objects-server-internal/package.json index 1d0e563c9440a..a39ed97cfeb6c 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/package.json +++ b/packages/core/saved-objects/core-saved-objects-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.ts index af364b6a1a872..6afe9eb18b4f9 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.ts @@ -21,7 +21,7 @@ import { BehaviorSubject, firstValueFrom } from 'rxjs'; import { skip } from 'rxjs/operators'; import { type RawPackageInfo, Env } from '@kbn/config'; import { ByteSizeValue } from '@kbn/config-schema'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getEnvOptions } from '@kbn/config-mocks'; import { docLinksServiceMock } from '@kbn/core-doc-links-server-mocks'; import { nodeServiceMock } from '@kbn/core-node-server-mocks'; diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/tsconfig.json b/packages/core/saved-objects/core-saved-objects-server-internal/tsconfig.json index 4582562d6c9bb..4d43cd2ea06b3 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,45 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/logging", + "@kbn/core-status-common", + "@kbn/core-deprecations-common", + "@kbn/core-http-server", + "@kbn/core-http-server-internal", + "@kbn/core-elasticsearch-server", + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-api-server-internal", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-migration-server-internal", + "@kbn/core-saved-objects-import-export-server-internal", + "@kbn/core-usage-data-base-server-internal", + "@kbn/core-deprecations-server", + "@kbn/core-node-server", + "@kbn/core-saved-objects-migration-server-mocks", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/core-saved-objects-base-server-mocks", + "@kbn/core-base-server-internal", + "@kbn/core-doc-links-server", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/i18n", + "@kbn/config", + "@kbn/repo-info", + "@kbn/config-mocks", + "@kbn/core-doc-links-server-mocks", + "@kbn/core-node-server-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/utils", + "@kbn/core-http-router-server-internal", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-server-mocks/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-server-mocks/BUILD.bazel deleted file mode 100644 index 83fc281ab340d..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-server-mocks/BUILD.bazel +++ /dev/null @@ -1,118 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/core/status/core-status-common", - "//packages/core/saved-objects/core-saved-objects-api-server-mocks", - "//packages/core/saved-objects/core-saved-objects-base-server-mocks", - "//packages/core/saved-objects/core-saved-objects-import-export-server-mocks", - "//packages/core/saved-objects/core-saved-objects-migration-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/status/core-status-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server-mocks:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-mocks:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-import-export-server-mocks:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-migration-server-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-server-mocks/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-server-mocks/kibana.jsonc index c9cb96751b210..4e9f3fa49b016 100644 --- a/packages/core/saved-objects/core-saved-objects-server-mocks/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-server-mocks/package.json b/packages/core/saved-objects/core-saved-objects-server-mocks/package.json index 9057e65e2b314..c9a4ce797ab31 100644 --- a/packages/core/saved-objects/core-saved-objects-server-mocks/package.json +++ b/packages/core/saved-objects/core-saved-objects-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-server-mocks/tsconfig.json b/packages/core/saved-objects/core-saved-objects-server-mocks/tsconfig.json index 4582562d6c9bb..30ab276e44e3b 100644 --- a/packages/core/saved-objects/core-saved-objects-server-mocks/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,18 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-status-common", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-server-internal", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/core-saved-objects-base-server-mocks", + "@kbn/core-saved-objects-import-export-server-mocks", + "@kbn/core-saved-objects-migration-server-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-server/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-server/BUILD.bazel deleted file mode 100644 index 8be58e1f28568..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-server/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-server" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@elastic/elasticsearch", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-ecs:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-server/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-server/kibana.jsonc index 8e1a56b92f1f2..b6baeefd08b95 100644 --- a/packages/core/saved-objects/core-saved-objects-server/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-server/package.json b/packages/core/saved-objects/core-saved-objects-server/package.json index 1cfa72bf9cee7..0212a1c862e2c 100644 --- a/packages/core/saved-objects/core-saved-objects-server/package.json +++ b/packages/core/saved-objects/core-saved-objects-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-server/tsconfig.json b/packages/core/saved-objects/core-saved-objects-server/tsconfig.json index ef521586433c9..427b46dc70afb 100644 --- a/packages/core/saved-objects/core-saved-objects-server/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,18 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/core-http-server", + "@kbn/core-elasticsearch-server", + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-api-server", + "@kbn/ecs" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/BUILD.bazel b/packages/core/saved-objects/core-saved-objects-utils-server/BUILD.bazel deleted file mode 100644 index ae246f3976c45..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-utils-server/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-saved-objects-utils-server" -PKG_REQUIRE_NAME = "@kbn/core-saved-objects-utils-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//uuid", - "@npm//@hapi/boom", -] - - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/uuid", - "@npm//@hapi/boom", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/kibana.jsonc b/packages/core/saved-objects/core-saved-objects-utils-server/kibana.jsonc index 61d87e1fe9bdc..17724acc7468f 100644 --- a/packages/core/saved-objects/core-saved-objects-utils-server/kibana.jsonc +++ b/packages/core/saved-objects/core-saved-objects-utils-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-saved-objects-utils-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/package.json b/packages/core/saved-objects/core-saved-objects-utils-server/package.json index 28293054578d7..9b89498d64fc3 100644 --- a/packages/core/saved-objects/core-saved-objects-utils-server/package.json +++ b/packages/core/saved-objects/core-saved-objects-utils-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-saved-objects-utils-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/tsconfig.json b/packages/core/saved-objects/core-saved-objects-utils-server/tsconfig.json index ef521586433c9..25ba9d5fefac7 100644 --- a/packages/core/saved-objects/core-saved-objects-utils-server/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-utils-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-api-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/status/core-status-common-internal/BUILD.bazel b/packages/core/status/core-status-common-internal/BUILD.bazel deleted file mode 100644 index 10c02ceed52f5..0000000000000 --- a/packages/core/status/core-status-common-internal/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-status-common-internal" -PKG_REQUIRE_NAME = "@kbn/core-status-common-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/status/core-status-common:npm_module_types", - "//packages/core/metrics/core-metrics-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/status/core-status-common-internal/kibana.jsonc b/packages/core/status/core-status-common-internal/kibana.jsonc index 3ce3b2bfbcbdb..20ce17ae3cefa 100644 --- a/packages/core/status/core-status-common-internal/kibana.jsonc +++ b/packages/core/status/core-status-common-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-status-common-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/status/core-status-common-internal/package.json b/packages/core/status/core-status-common-internal/package.json index 7d5bbf52425a2..73f0212c43850 100644 --- a/packages/core/status/core-status-common-internal/package.json +++ b/packages/core/status/core-status-common-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-status-common-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/status/core-status-common-internal/tsconfig.json b/packages/core/status/core-status-common-internal/tsconfig.json index 741519055e986..c746e7133cd2c 100644 --- a/packages/core/status/core-status-common-internal/tsconfig.json +++ b/packages/core/status/core-status-common-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-status-common", + "@kbn/core-metrics-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/status/core-status-common/BUILD.bazel b/packages/core/status/core-status-common/BUILD.bazel deleted file mode 100644 index a488a5999df06..0000000000000 --- a/packages/core/status/core-status-common/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-status-common" -PKG_REQUIRE_NAME = "@kbn/core-status-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "//packages/kbn-std", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-std:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/status/core-status-common/kibana.jsonc b/packages/core/status/core-status-common/kibana.jsonc index 13d67c52659ca..bb40934299c7c 100644 --- a/packages/core/status/core-status-common/kibana.jsonc +++ b/packages/core/status/core-status-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-status-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/status/core-status-common/package.json b/packages/core/status/core-status-common/package.json index 0c32405177b40..c8428e799d266 100644 --- a/packages/core/status/core-status-common/package.json +++ b/packages/core/status/core-status-common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-status-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/status/core-status-common/tsconfig.json b/packages/core/status/core-status-common/tsconfig.json index 741519055e986..a63f70f93043d 100644 --- a/packages/core/status/core-status-common/tsconfig.json +++ b/packages/core/status/core-status-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,11 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/std" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/status/core-status-server-internal/BUILD.bazel b/packages/core/status/core-status-server-internal/BUILD.bazel deleted file mode 100644 index 2e15439eee3d8..0000000000000 --- a/packages/core/status/core-status-server-internal/BUILD.bazel +++ /dev/null @@ -1,132 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-status-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-status-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//lodash", - "//packages/kbn-config-schema", - "//packages/kbn-std", - "//packages/kbn-i18n", - "//packages/core/status/core-status-common", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//lodash", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/analytics/client:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/metrics/core-metrics-server:npm_module_types", - "//packages/core/metrics/core-metrics-server-internal:npm_module_types", - "//packages/core/usage-data/core-usage-data-server:npm_module_types", - "//packages/core/usage-data/core-usage-data-server-internal:npm_module_types", - "//packages/core/analytics/core-analytics-server:npm_module_types", - "//packages/core/environment/core-environment-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-internal:npm_module_types", - "//packages/core/status/core-status-server:npm_module_types", - "//packages/core/status/core-status-common:npm_module_types", - "//packages/core/status/core-status-common-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/status/core-status-server-internal/kibana.jsonc b/packages/core/status/core-status-server-internal/kibana.jsonc index 9ed3627ce73ed..166476e13adaa 100644 --- a/packages/core/status/core-status-server-internal/kibana.jsonc +++ b/packages/core/status/core-status-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-status-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/status/core-status-server-internal/package.json b/packages/core/status/core-status-server-internal/package.json index 0c20231606015..a9be6cf042d3d 100644 --- a/packages/core/status/core-status-server-internal/package.json +++ b/packages/core/status/core-status-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-status-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/status/core-status-server-internal/tsconfig.json b/packages/core/status/core-status-server-internal/tsconfig.json index 4582562d6c9bb..ec555e676e1e8 100644 --- a/packages/core/status/core-status-server-internal/tsconfig.json +++ b/packages/core/status/core-status-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,39 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/config", + "@kbn/std", + "@kbn/logging", + "@kbn/i18n", + "@kbn/analytics-client", + "@kbn/core-base-common", + "@kbn/core-base-server-internal", + "@kbn/core-http-server", + "@kbn/core-http-server-internal", + "@kbn/core-metrics-server", + "@kbn/core-metrics-server-internal", + "@kbn/core-usage-data-server", + "@kbn/core-analytics-server", + "@kbn/core-environment-server-internal", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-saved-objects-server-internal", + "@kbn/core-status-server", + "@kbn/core-status-common", + "@kbn/core-status-common-internal", + "@kbn/core-usage-data-base-server-internal", + "@kbn/core-base-server-mocks", + "@kbn/core-environment-server-mocks", + "@kbn/core-http-router-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-metrics-server-mocks", + "@kbn/config-mocks", + "@kbn/core-usage-data-server-mocks", + "@kbn/core-analytics-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/status/core-status-server-mocks/BUILD.bazel b/packages/core/status/core-status-server-mocks/BUILD.bazel deleted file mode 100644 index ba64513644814..0000000000000 --- a/packages/core/status/core-status-server-mocks/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-status-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-status-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/status/core-status-server:npm_module_types", - "//packages/core/status/core-status-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/status/core-status-server-mocks/kibana.jsonc b/packages/core/status/core-status-server-mocks/kibana.jsonc index 04f0e29eedf72..ebb50f47fb40f 100644 --- a/packages/core/status/core-status-server-mocks/kibana.jsonc +++ b/packages/core/status/core-status-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-status-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/status/core-status-server-mocks/package.json b/packages/core/status/core-status-server-mocks/package.json index 666843aad8947..25c27fc8dd0b5 100644 --- a/packages/core/status/core-status-server-mocks/package.json +++ b/packages/core/status/core-status-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-status-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/status/core-status-server-mocks/tsconfig.json b/packages/core/status/core-status-server-mocks/tsconfig.json index 4582562d6c9bb..84ca957ca1579 100644 --- a/packages/core/status/core-status-server-mocks/tsconfig.json +++ b/packages/core/status/core-status-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-status-server", + "@kbn/core-status-server-internal", + "@kbn/core-status-common", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/status/core-status-server/BUILD.bazel b/packages/core/status/core-status-server/BUILD.bazel deleted file mode 100644 index d9cf0a216956d..0000000000000 --- a/packages/core/status/core-status-server/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-status-server" -PKG_REQUIRE_NAME = "@kbn/core-status-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/status/core-status-common", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/core/status/core-status-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/status/core-status-server/kibana.jsonc b/packages/core/status/core-status-server/kibana.jsonc index 3021a52ce4c17..7e7eafcbe13c2 100644 --- a/packages/core/status/core-status-server/kibana.jsonc +++ b/packages/core/status/core-status-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-status-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/status/core-status-server/package.json b/packages/core/status/core-status-server/package.json index 95e42e16f8096..4f3719672132a 100644 --- a/packages/core/status/core-status-server/package.json +++ b/packages/core/status/core-status-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-status-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/status/core-status-server/tsconfig.json b/packages/core/status/core-status-server/tsconfig.json index 4582562d6c9bb..f1268b704981a 100644 --- a/packages/core/status/core-status-server/tsconfig.json +++ b/packages/core/status/core-status-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-status-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/test-helpers/core-test-helpers-deprecations-getters/BUILD.bazel b/packages/core/test-helpers/core-test-helpers-deprecations-getters/BUILD.bazel deleted file mode 100644 index 72af0cdf54522..0000000000000 --- a/packages/core/test-helpers/core-test-helpers-deprecations-getters/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-test-helpers-deprecations-getters" -PKG_REQUIRE_NAME = "@kbn/core-test-helpers-deprecations-getters" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-safer-lodash-set", - "//packages/kbn-config", - "//packages/kbn-config-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-safer-lodash-set:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/test-helpers/core-test-helpers-deprecations-getters/kibana.jsonc b/packages/core/test-helpers/core-test-helpers-deprecations-getters/kibana.jsonc index 1c245768d3f7d..58b022edc2143 100644 --- a/packages/core/test-helpers/core-test-helpers-deprecations-getters/kibana.jsonc +++ b/packages/core/test-helpers/core-test-helpers-deprecations-getters/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-test-helpers-deprecations-getters", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/test-helpers/core-test-helpers-deprecations-getters/package.json b/packages/core/test-helpers/core-test-helpers-deprecations-getters/package.json index 37bfe7ddbf750..cc23ac6bc5075 100644 --- a/packages/core/test-helpers/core-test-helpers-deprecations-getters/package.json +++ b/packages/core/test-helpers/core-test-helpers-deprecations-getters/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-test-helpers-deprecations-getters", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/test-helpers/core-test-helpers-deprecations-getters/tsconfig.json b/packages/core/test-helpers/core-test-helpers-deprecations-getters/tsconfig.json index ef521586433c9..709b092761e40 100644 --- a/packages/core/test-helpers/core-test-helpers-deprecations-getters/tsconfig.json +++ b/packages/core/test-helpers/core-test-helpers-deprecations-getters/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/safer-lodash-set", + "@kbn/config", + "@kbn/config-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/BUILD.bazel b/packages/core/test-helpers/core-test-helpers-http-setup-browser/BUILD.bazel deleted file mode 100644 index 4161d62c3a056..0000000000000 --- a/packages/core/test-helpers/core-test-helpers-http-setup-browser/BUILD.bazel +++ /dev/null @@ -1,118 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-test-helpers-http-setup-browser" -PKG_REQUIRE_NAME = "@kbn/core-test-helpers-http-setup-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/execution-context/core-execution-context-browser-mocks", - "//packages/core/fatal-errors/core-fatal-errors-browser-mocks", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks", - "//packages/core/http/core-http-browser-internal" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/execution-context/core-execution-context-browser-mocks:npm_module_types", - "//packages/core/fatal-errors/core-fatal-errors-browser-mocks:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-mocks:npm_module_types", - "//packages/core/http/core-http-browser-internal:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/kibana.jsonc b/packages/core/test-helpers/core-test-helpers-http-setup-browser/kibana.jsonc index f5e257dd883a5..ccb44bf669f6a 100644 --- a/packages/core/test-helpers/core-test-helpers-http-setup-browser/kibana.jsonc +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-test-helpers-http-setup-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/package.json b/packages/core/test-helpers/core-test-helpers-http-setup-browser/package.json index 813f6050c044c..b9de84e85e875 100644 --- a/packages/core/test-helpers/core-test-helpers-http-setup-browser/package.json +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-test-helpers-http-setup-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/tsconfig.json b/packages/core/test-helpers/core-test-helpers-http-setup-browser/tsconfig.json index ef521586433c9..50f950223c66c 100644 --- a/packages/core/test-helpers/core-test-helpers-http-setup-browser/tsconfig.json +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-execution-context-browser-mocks", + "@kbn/core-fatal-errors-browser-mocks", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-http-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/BUILD.bazel b/packages/core/test-helpers/core-test-helpers-kbn-server/BUILD.bazel deleted file mode 100644 index aaa2b09a3ebf3..0000000000000 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/BUILD.bazel +++ /dev/null @@ -1,121 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-test-helpers-kbn-server" -PKG_REQUIRE_NAME = "@kbn/core-test-helpers-kbn-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//rxjs", - "@npm//supertest", - "//packages/kbn-tooling-log", - "//packages/kbn-utils", - "//packages/kbn-test", - "//packages/kbn-config", - "//packages/core/lifecycle/core-lifecycle-server-internal", - "//packages/core/root/core-root-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//lodash", - "@npm//rxjs", - "@npm//supertest", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-test:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/core/lifecycle/core-lifecycle-server-internal:npm_module_types", - "//packages/core/root/core-root-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "build_types", - srcs = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/kibana.jsonc b/packages/core/test-helpers/core-test-helpers-kbn-server/kibana.jsonc index 8c67f3103320a..399c4032208ce 100644 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/kibana.jsonc +++ b/packages/core/test-helpers/core-test-helpers-kbn-server/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/core-test-helpers-kbn-server", "owner": "@elastic/kibana-core", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/package.json b/packages/core/test-helpers/core-test-helpers-kbn-server/package.json index 6f5c80544bd18..dbdbcfb374194 100644 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/package.json +++ b/packages/core/test-helpers/core-test-helpers-kbn-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-test-helpers-kbn-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "types": "./target_types/index.d.ts", "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts b/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts index 8a2ef2e7c81ed..08a99ae61a96a 100644 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts +++ b/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts @@ -13,7 +13,7 @@ import { BehaviorSubject } from 'rxjs'; import supertest from 'supertest'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createTestEsCluster, CreateTestEsClusterOptions, diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json b/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json index 4582562d6c9bb..4f2c8c210354d 100644 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json +++ b/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/tooling-log", + "@kbn/test", + "@kbn/config", + "@kbn/core-lifecycle-server-internal", + "@kbn/core-root-server-internal", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/test-helpers/core-test-helpers-so-type-serializer/BUILD.bazel b/packages/core/test-helpers/core-test-helpers-so-type-serializer/BUILD.bazel deleted file mode 100644 index 4f9f25dd77077..0000000000000 --- a/packages/core/test-helpers/core-test-helpers-so-type-serializer/BUILD.bazel +++ /dev/null @@ -1,109 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-test-helpers-so-type-serializer" -PKG_REQUIRE_NAME = "@kbn/core-test-helpers-so-type-serializer" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//semver", - "//packages/kbn-std", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/semver", - "//packages/kbn-std:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-common:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/test-helpers/core-test-helpers-so-type-serializer/kibana.jsonc b/packages/core/test-helpers/core-test-helpers-so-type-serializer/kibana.jsonc index 4a4a765bbc519..7c8c4da8c303d 100644 --- a/packages/core/test-helpers/core-test-helpers-so-type-serializer/kibana.jsonc +++ b/packages/core/test-helpers/core-test-helpers-so-type-serializer/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-test-helpers-so-type-serializer", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/test-helpers/core-test-helpers-so-type-serializer/package.json b/packages/core/test-helpers/core-test-helpers-so-type-serializer/package.json index 2c0288ec01238..b3cc2a7504095 100644 --- a/packages/core/test-helpers/core-test-helpers-so-type-serializer/package.json +++ b/packages/core/test-helpers/core-test-helpers-so-type-serializer/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-test-helpers-so-type-serializer", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/test-helpers/core-test-helpers-so-type-serializer/tsconfig.json b/packages/core/test-helpers/core-test-helpers-so-type-serializer/tsconfig.json index 4582562d6c9bb..9e3df6e49fac9 100644 --- a/packages/core/test-helpers/core-test-helpers-so-type-serializer/tsconfig.json +++ b/packages/core/test-helpers/core-test-helpers-so-type-serializer/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/std", + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-server", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/test-helpers/core-test-helpers-test-utils/BUILD.bazel b/packages/core/test-helpers/core-test-helpers-test-utils/BUILD.bazel deleted file mode 100644 index 19fda628add70..0000000000000 --- a/packages/core/test-helpers/core-test-helpers-test-utils/BUILD.bazel +++ /dev/null @@ -1,124 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-test-helpers-test-utils" -PKG_REQUIRE_NAME = "@kbn/core-test-helpers-test-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/core/deprecations/core-deprecations-server-mocks", - "//packages/core/execution-context/core-execution-context-server-mocks", - "//packages/core/elasticsearch/core-elasticsearch-server-mocks", - "//packages/core/http/core-http-context-server-internal", - "//packages/core/http/core-http-context-server-mocks", - "//packages/core/http/core-http-server-mocks", - "//packages/core/saved-objects/core-saved-objects-api-server-mocks", - "//packages/core/saved-objects/core-saved-objects-base-server-mocks", - "//packages/core/saved-objects/core-saved-objects-server-mocks", - "//packages/core/ui-settings/core-ui-settings-server-mocks", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/deprecations/core-deprecations-server-mocks:npm_module_types", - "//packages/core/execution-context/core-execution-context-server-mocks:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-mocks:npm_module_types", - "//packages/core/http/core-http-context-server-internal:npm_module_types", - "//packages/core/http/core-http-context-server-mocks:npm_module_types", - "//packages/core/http/core-http-server-mocks:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server-mocks:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-mocks:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-mocks:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/test-helpers/core-test-helpers-test-utils/kibana.jsonc b/packages/core/test-helpers/core-test-helpers-test-utils/kibana.jsonc index a587c1fd8566f..3e4b11f13d95f 100644 --- a/packages/core/test-helpers/core-test-helpers-test-utils/kibana.jsonc +++ b/packages/core/test-helpers/core-test-helpers-test-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-test-helpers-test-utils", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/test-helpers/core-test-helpers-test-utils/package.json b/packages/core/test-helpers/core-test-helpers-test-utils/package.json index e812501e0ff73..f417a155fed2b 100644 --- a/packages/core/test-helpers/core-test-helpers-test-utils/package.json +++ b/packages/core/test-helpers/core-test-helpers-test-utils/package.json @@ -2,7 +2,5 @@ "name": "@kbn/core-test-helpers-test-utils", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/test-helpers/core-test-helpers-test-utils/tsconfig.json b/packages/core/test-helpers/core-test-helpers-test-utils/tsconfig.json index 4582562d6c9bb..6f63745884070 100644 --- a/packages/core/test-helpers/core-test-helpers-test-utils/tsconfig.json +++ b/packages/core/test-helpers/core-test-helpers-test-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,21 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-deprecations-server-mocks", + "@kbn/core-execution-context-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/core-http-context-server-internal", + "@kbn/core-http-context-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/core-saved-objects-base-server-mocks", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-server-mocks", + "@kbn/core-ui-settings-server-mocks" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/theme/core-theme-browser-internal/BUILD.bazel b/packages/core/theme/core-theme-browser-internal/BUILD.bazel deleted file mode 100644 index c149e0b9e0695..0000000000000 --- a/packages/core/theme/core-theme-browser-internal/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-theme-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-theme-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react", - "@npm//rxjs", - "@npm//@elastic/eui", - "@npm//@emotion/cache", - "@npm//react-use", - "//packages/core/base/core-base-common", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//rxjs", - "@npm//@emotion/cache", - "@npm//react-use", - "@npm//@elastic/eui", - "//packages/core/base/core-base-common:npm_module_types", - "//packages/core/injected-metadata/core-injected-metadata-browser-internal:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/i18n/core-i18n-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/theme/core-theme-browser-internal/kibana.jsonc b/packages/core/theme/core-theme-browser-internal/kibana.jsonc index 36842b069548b..4f52d3655e060 100644 --- a/packages/core/theme/core-theme-browser-internal/kibana.jsonc +++ b/packages/core/theme/core-theme-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-theme-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/theme/core-theme-browser-internal/package.json b/packages/core/theme/core-theme-browser-internal/package.json index 9a5bf644a384e..bd819f36617f0 100644 --- a/packages/core/theme/core-theme-browser-internal/package.json +++ b/packages/core/theme/core-theme-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-theme-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/theme/core-theme-browser-internal/tsconfig.json b/packages/core/theme/core-theme-browser-internal/tsconfig.json index c561d9f220124..1f52b9cf1408e 100644 --- a/packages/core/theme/core-theme-browser-internal/tsconfig.json +++ b/packages/core/theme/core-theme-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,16 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/core-base-common", + "@kbn/core-injected-metadata-browser-internal", + "@kbn/core-theme-browser", + "@kbn/core-i18n-browser", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/theme/core-theme-browser-mocks/BUILD.bazel b/packages/core/theme/core-theme-browser-mocks/BUILD.bazel deleted file mode 100644 index d67987e887b02..0000000000000 --- a/packages/core/theme/core-theme-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-theme-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-theme-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//react" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/theme/core-theme-browser:npm_module_types", - "//packages/core/theme/core-theme-browser-internal:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/theme/core-theme-browser-mocks/kibana.jsonc b/packages/core/theme/core-theme-browser-mocks/kibana.jsonc index e46f0193c4068..f04c78bf09fe5 100644 --- a/packages/core/theme/core-theme-browser-mocks/kibana.jsonc +++ b/packages/core/theme/core-theme-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-theme-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/theme/core-theme-browser-mocks/package.json b/packages/core/theme/core-theme-browser-mocks/package.json index d90fe901d7969..205ae4ee096f7 100644 --- a/packages/core/theme/core-theme-browser-mocks/package.json +++ b/packages/core/theme/core-theme-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-theme-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/theme/core-theme-browser-mocks/tsconfig.json b/packages/core/theme/core-theme-browser-mocks/tsconfig.json index 3cdea36de9eac..590e3729953ef 100644 --- a/packages/core/theme/core-theme-browser-mocks/tsconfig.json +++ b/packages/core/theme/core-theme-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-theme-browser", + "@kbn/core-theme-browser-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/theme/core-theme-browser/BUILD.bazel b/packages/core/theme/core-theme-browser/BUILD.bazel deleted file mode 100644 index bf1b34b975a3a..0000000000000 --- a/packages/core/theme/core-theme-browser/BUILD.bazel +++ /dev/null @@ -1,111 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-theme-browser" -PKG_REQUIRE_NAME = "@kbn/core-theme-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/theme/core-theme-browser/kibana.jsonc b/packages/core/theme/core-theme-browser/kibana.jsonc index 9dbe039d70640..28faccea003bb 100644 --- a/packages/core/theme/core-theme-browser/kibana.jsonc +++ b/packages/core/theme/core-theme-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-theme-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/theme/core-theme-browser/package.json b/packages/core/theme/core-theme-browser/package.json index 4f21a8f07883e..1e8a8861ba25b 100644 --- a/packages/core/theme/core-theme-browser/package.json +++ b/packages/core/theme/core-theme-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-theme-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/theme/core-theme-browser/tsconfig.json b/packages/core/theme/core-theme-browser/tsconfig.json index ef521586433c9..e7513f6481e89 100644 --- a/packages/core/theme/core-theme-browser/tsconfig.json +++ b/packages/core/theme/core-theme-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-browser-internal/BUILD.bazel deleted file mode 100644 index 8407c14febccf..0000000000000 --- a/packages/core/ui-settings/core-ui-settings-browser-internal/BUILD.bazel +++ /dev/null @@ -1,118 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-ui-settings-browser-internal" -PKG_REQUIRE_NAME = "@kbn/core-ui-settings-browser-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//lodash", - "//packages/core/test-helpers/core-test-helpers-http-setup-browser" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//lodash", - "//packages/core/test-helpers/core-test-helpers-http-setup-browser:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/kibana.jsonc b/packages/core/ui-settings/core-ui-settings-browser-internal/kibana.jsonc index 9a46e97ec89af..1197ce3268992 100644 --- a/packages/core/ui-settings/core-ui-settings-browser-internal/kibana.jsonc +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-ui-settings-browser-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/package.json b/packages/core/ui-settings/core-ui-settings-browser-internal/package.json index 496fc4fb73861..c33e1b84f354d 100644 --- a/packages/core/ui-settings/core-ui-settings-browser-internal/package.json +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-ui-settings-browser-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/tsconfig.json b/packages/core/ui-settings/core-ui-settings-browser-internal/tsconfig.json index ef521586433c9..0beed2d6ddfb0 100644 --- a/packages/core/ui-settings/core-ui-settings-browser-internal/tsconfig.json +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,17 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-test-helpers-http-setup-browser", + "@kbn/core-http-browser", + "@kbn/core-ui-settings-browser", + "@kbn/core-ui-settings-common", + "@kbn/core-http-browser-mocks", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-injected-metadata-browser-internal", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-browser-mocks/BUILD.bazel deleted file mode 100644 index 944128daf6dc4..0000000000000 --- a/packages/core/ui-settings/core-ui-settings-browser-mocks/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-ui-settings-browser-mocks" -PKG_REQUIRE_NAME = "@kbn/core-ui-settings-browser-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", - "//packages/core/ui-settings/core-ui-settings-browser-internal" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser-internal:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/kibana.jsonc b/packages/core/ui-settings/core-ui-settings-browser-mocks/kibana.jsonc index f6906835b648f..fe1b1c48238cd 100644 --- a/packages/core/ui-settings/core-ui-settings-browser-mocks/kibana.jsonc +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-ui-settings-browser-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/package.json b/packages/core/ui-settings/core-ui-settings-browser-mocks/package.json index 9f3010fa6d923..2f78aad5793e5 100644 --- a/packages/core/ui-settings/core-ui-settings-browser-mocks/package.json +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-ui-settings-browser-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/tsconfig.json b/packages/core/ui-settings/core-ui-settings-browser-mocks/tsconfig.json index ef521586433c9..1fb7aec053ef8 100644 --- a/packages/core/ui-settings/core-ui-settings-browser-mocks/tsconfig.json +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-ui-settings-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/ui-settings/core-ui-settings-browser/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-browser/BUILD.bazel deleted file mode 100644 index 0b46af92d86e3..0000000000000 --- a/packages/core/ui-settings/core-ui-settings-browser/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-ui-settings-browser" -PKG_REQUIRE_NAME = "@kbn/core-ui-settings-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/core/ui-settings/core-ui-settings-common:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/ui-settings/core-ui-settings-browser/kibana.jsonc b/packages/core/ui-settings/core-ui-settings-browser/kibana.jsonc index 9129ef435fb67..57036db46d663 100644 --- a/packages/core/ui-settings/core-ui-settings-browser/kibana.jsonc +++ b/packages/core/ui-settings/core-ui-settings-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-ui-settings-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/ui-settings/core-ui-settings-browser/package.json b/packages/core/ui-settings/core-ui-settings-browser/package.json index 0d4798f84d103..ded763061b0b3 100644 --- a/packages/core/ui-settings/core-ui-settings-browser/package.json +++ b/packages/core/ui-settings/core-ui-settings-browser/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-ui-settings-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/ui-settings/core-ui-settings-browser/tsconfig.json b/packages/core/ui-settings/core-ui-settings-browser/tsconfig.json index 3faa31fe437a8..95fe1b5c6ea01 100644 --- a/packages/core/ui-settings/core-ui-settings-browser/tsconfig.json +++ b/packages/core/ui-settings/core-ui-settings-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/core-ui-settings-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/ui-settings/core-ui-settings-common/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-common/BUILD.bazel deleted file mode 100644 index c88e3142602d3..0000000000000 --- a/packages/core/ui-settings/core-ui-settings-common/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-ui-settings-common" -PKG_REQUIRE_NAME = "@kbn/core-ui-settings-common" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-analytics:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/ui-settings/core-ui-settings-common/kibana.jsonc b/packages/core/ui-settings/core-ui-settings-common/kibana.jsonc index 4d9b575423696..9d12715c5ebf1 100644 --- a/packages/core/ui-settings/core-ui-settings-common/kibana.jsonc +++ b/packages/core/ui-settings/core-ui-settings-common/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-ui-settings-common", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/ui-settings/core-ui-settings-common/package.json b/packages/core/ui-settings/core-ui-settings-common/package.json index 12da969fe70f7..844f81ccab1c3 100644 --- a/packages/core/ui-settings/core-ui-settings-common/package.json +++ b/packages/core/ui-settings/core-ui-settings-common/package.json @@ -2,9 +2,6 @@ "name": "@kbn/core-ui-settings-common", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/ui-settings/core-ui-settings-common/tsconfig.json b/packages/core/ui-settings/core-ui-settings-common/tsconfig.json index ef521586433c9..3b43c09cbaa08 100644 --- a/packages/core/ui-settings/core-ui-settings-common/tsconfig.json +++ b/packages/core/ui-settings/core-ui-settings-common/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/analytics" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-server-internal/BUILD.bazel deleted file mode 100644 index de69c73467472..0000000000000 --- a/packages/core/ui-settings/core-ui-settings-server-internal/BUILD.bazel +++ /dev/null @@ -1,127 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-ui-settings-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-ui-settings-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//semver", - "@npm//moment-timezone", - "//packages/kbn-std", - "//packages/kbn-i18n", - "//packages/kbn-config-schema", - "//packages/core/saved-objects/core-saved-objects-utils-server", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/semver", - "@npm//moment-timezone", - "@npm//lodash", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-utils-server:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-common:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/kibana.jsonc b/packages/core/ui-settings/core-ui-settings-server-internal/kibana.jsonc index b6c943e1e6677..e0f62711171c2 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/kibana.jsonc +++ b/packages/core/ui-settings/core-ui-settings-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-ui-settings-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/package.json b/packages/core/ui-settings/core-ui-settings-server-internal/package.json index 04b1646e4a86a..79a2460ed510e 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/package.json +++ b/packages/core/ui-settings/core-ui-settings-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-ui-settings-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_factory.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_factory.ts index db1c69a6074fd..893a45d6830b2 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_factory.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_factory.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { UiSettingsServiceOptions } from '@kbn/core-ui-settings-server-internal'; +import type { UiSettingsServiceOptions } from '../..'; import { UiSettingsClient } from './ui_settings_client'; import { UiSettingsGlobalClient } from './ui_settings_global_client'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/tsconfig.json b/packages/core/ui-settings/core-ui-settings-server-internal/tsconfig.json index 4582562d6c9bb..b90718d624e97 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/tsconfig.json +++ b/packages/core/ui-settings/core-ui-settings-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,32 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/ui-shared-deps-npm", + "@kbn/logging", + "@kbn/std", + "@kbn/i18n", + "@kbn/config-schema", + "@kbn/core-base-server-internal", + "@kbn/core-http-server", + "@kbn/core-http-server-internal", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-server-internal", + "@kbn/core-saved-objects-utils-server", + "@kbn/core-ui-settings-common", + "@kbn/core-ui-settings-server", + "@kbn/config", + "@kbn/core-base-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/core-saved-objects-server-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/core-saved-objects-api-server-internal", + "@kbn/core-saved-objects-common", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/ui-settings/core-ui-settings-server-mocks/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-server-mocks/BUILD.bazel deleted file mode 100644 index 8b016335d66e4..0000000000000 --- a/packages/core/ui-settings/core-ui-settings-server-mocks/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-ui-settings-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-ui-settings-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/ui-settings/core-ui-settings-server-mocks/kibana.jsonc b/packages/core/ui-settings/core-ui-settings-server-mocks/kibana.jsonc index 5426961c3a663..b82edffb705dd 100644 --- a/packages/core/ui-settings/core-ui-settings-server-mocks/kibana.jsonc +++ b/packages/core/ui-settings/core-ui-settings-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-ui-settings-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/ui-settings/core-ui-settings-server-mocks/package.json b/packages/core/ui-settings/core-ui-settings-server-mocks/package.json index c22f7b69954bf..e7de21bf88c8f 100644 --- a/packages/core/ui-settings/core-ui-settings-server-mocks/package.json +++ b/packages/core/ui-settings/core-ui-settings-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-ui-settings-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/ui-settings/core-ui-settings-server-mocks/tsconfig.json b/packages/core/ui-settings/core-ui-settings-server-mocks/tsconfig.json index 4582562d6c9bb..7c315c5cded70 100644 --- a/packages/core/ui-settings/core-ui-settings-server-mocks/tsconfig.json +++ b/packages/core/ui-settings/core-ui-settings-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-ui-settings-server", + "@kbn/core-ui-settings-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/ui-settings/core-ui-settings-server/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-server/BUILD.bazel deleted file mode 100644 index 0cf8fb2d3119b..0000000000000 --- a/packages/core/ui-settings/core-ui-settings-server/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-ui-settings-server" -PKG_REQUIRE_NAME = "@kbn/core-ui-settings-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-common:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/ui-settings/core-ui-settings-server/kibana.jsonc b/packages/core/ui-settings/core-ui-settings-server/kibana.jsonc index 5ac08792e518e..11926aebbc873 100644 --- a/packages/core/ui-settings/core-ui-settings-server/kibana.jsonc +++ b/packages/core/ui-settings/core-ui-settings-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-ui-settings-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/core/ui-settings/core-ui-settings-server/package.json b/packages/core/ui-settings/core-ui-settings-server/package.json index 4f4e046e69801..8ecf2790ced16 100644 --- a/packages/core/ui-settings/core-ui-settings-server/package.json +++ b/packages/core/ui-settings/core-ui-settings-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-ui-settings-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/ui-settings/core-ui-settings-server/tsconfig.json b/packages/core/ui-settings/core-ui-settings-server/tsconfig.json index 4582562d6c9bb..dce14385f9e70 100644 --- a/packages/core/ui-settings/core-ui-settings-server/tsconfig.json +++ b/packages/core/ui-settings/core-ui-settings-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-saved-objects-api-server", + "@kbn/core-ui-settings-common" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/usage-data/core-usage-data-base-server-internal/BUILD.bazel b/packages/core/usage-data/core-usage-data-base-server-internal/BUILD.bazel deleted file mode 100644 index d2412fae38af9..0000000000000 --- a/packages/core/usage-data/core-usage-data-base-server-internal/BUILD.bazel +++ /dev/null @@ -1,107 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-usage-data-base-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-usage-data-base-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/usage-data/core-usage-data-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/usage-data/core-usage-data-base-server-internal/kibana.jsonc b/packages/core/usage-data/core-usage-data-base-server-internal/kibana.jsonc index d35d6c2bbd6d7..8c2a2c4b191d9 100644 --- a/packages/core/usage-data/core-usage-data-base-server-internal/kibana.jsonc +++ b/packages/core/usage-data/core-usage-data-base-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-usage-data-base-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/usage-data/core-usage-data-base-server-internal/package.json b/packages/core/usage-data/core-usage-data-base-server-internal/package.json index 3bac6ca65b835..38a8bf6f749f2 100644 --- a/packages/core/usage-data/core-usage-data-base-server-internal/package.json +++ b/packages/core/usage-data/core-usage-data-base-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-usage-data-base-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/usage-data/core-usage-data-base-server-internal/tsconfig.json b/packages/core/usage-data/core-usage-data-base-server-internal/tsconfig.json index 4582562d6c9bb..cfcefb9833f7f 100644 --- a/packages/core/usage-data/core-usage-data-base-server-internal/tsconfig.json +++ b/packages/core/usage-data/core-usage-data-base-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-http-server", + "@kbn/core-usage-data-server", + "@kbn/core-saved-objects-server" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/usage-data/core-usage-data-server-internal/BUILD.bazel b/packages/core/usage-data/core-usage-data-server-internal/BUILD.bazel deleted file mode 100644 index c677b2c16ecee..0000000000000 --- a/packages/core/usage-data/core-usage-data-server-internal/BUILD.bazel +++ /dev/null @@ -1,128 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-usage-data-server-internal" -PKG_REQUIRE_NAME = "@kbn/core-usage-data-server-internal" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//rxjs", - "@npm//@elastic/elasticsearch", - "//packages/kbn-config", - "//packages/core/saved-objects/core-saved-objects-base-server-internal", - "//packages/core/saved-objects/core-saved-objects-utils-server", - "//packages/core/usage-data/core-usage-data-base-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//lodash", - "@npm//rxjs", - "@npm//@elastic/elasticsearch", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/logging/core-logging-server-internal:npm_module_types", - "//packages/core/http/core-http-server:npm_module_types", - "//packages/core/http/core-http-server-internal:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/core/elasticsearch/core-elasticsearch-server-internal:npm_module_types", - "//packages/core/metrics/core-metrics-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-api-server:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-base-server-internal:npm_module_types", - "//packages/core/saved-objects/core-saved-objects-utils-server:npm_module_types", - "//packages/core/usage-data/core-usage-data-server:npm_module_types", - "//packages/core/usage-data/core-usage-data-base-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/usage-data/core-usage-data-server-internal/kibana.jsonc b/packages/core/usage-data/core-usage-data-server-internal/kibana.jsonc index 30bf6865b5bb4..9e8be00d3c9dd 100644 --- a/packages/core/usage-data/core-usage-data-server-internal/kibana.jsonc +++ b/packages/core/usage-data/core-usage-data-server-internal/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-usage-data-server-internal", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/usage-data/core-usage-data-server-internal/package.json b/packages/core/usage-data/core-usage-data-server-internal/package.json index 3138c86ae3baa..65e97da09e266 100644 --- a/packages/core/usage-data/core-usage-data-server-internal/package.json +++ b/packages/core/usage-data/core-usage-data-server-internal/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-usage-data-server-internal", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/usage-data/core-usage-data-server-internal/tsconfig.json b/packages/core/usage-data/core-usage-data-server-internal/tsconfig.json index 4582562d6c9bb..51b42f8df7736 100644 --- a/packages/core/usage-data/core-usage-data-server-internal/tsconfig.json +++ b/packages/core/usage-data/core-usage-data-server-internal/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,33 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/config", + "@kbn/logging", + "@kbn/core-base-server-internal", + "@kbn/core-logging-server-internal", + "@kbn/core-http-server", + "@kbn/core-http-server-internal", + "@kbn/core-elasticsearch-server", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-metrics-server", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-utils-server", + "@kbn/core-usage-data-server", + "@kbn/core-usage-data-base-server-internal", + "@kbn/config-mocks", + "@kbn/core-base-server-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-metrics-server-mocks", + "@kbn/core-saved-objects-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/core-saved-objects-base-server-mocks", + "@kbn/core-saved-objects-api-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/usage-data/core-usage-data-server-mocks/BUILD.bazel b/packages/core/usage-data/core-usage-data-server-mocks/BUILD.bazel deleted file mode 100644 index d75bd1efb5724..0000000000000 --- a/packages/core/usage-data/core-usage-data-server-mocks/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-usage-data-server-mocks" -PKG_REQUIRE_NAME = "@kbn/core-usage-data-server-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//rxjs", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "//packages/kbn-utility-types:npm_module_types", - "//packages/core/usage-data/core-usage-data-server:npm_module_types", - "//packages/core/usage-data/core-usage-data-base-server-internal:npm_module_types", - "//packages/core/usage-data/core-usage-data-server-internal:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/usage-data/core-usage-data-server-mocks/kibana.jsonc b/packages/core/usage-data/core-usage-data-server-mocks/kibana.jsonc index f12bd25bee867..f916d41050f66 100644 --- a/packages/core/usage-data/core-usage-data-server-mocks/kibana.jsonc +++ b/packages/core/usage-data/core-usage-data-server-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-usage-data-server-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/usage-data/core-usage-data-server-mocks/package.json b/packages/core/usage-data/core-usage-data-server-mocks/package.json index 90dca09cf1471..ab47ad04bc448 100644 --- a/packages/core/usage-data/core-usage-data-server-mocks/package.json +++ b/packages/core/usage-data/core-usage-data-server-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-usage-data-server-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/usage-data/core-usage-data-server-mocks/tsconfig.json b/packages/core/usage-data/core-usage-data-server-mocks/tsconfig.json index 4582562d6c9bb..0488bb38c3ce7 100644 --- a/packages/core/usage-data/core-usage-data-server-mocks/tsconfig.json +++ b/packages/core/usage-data/core-usage-data-server-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/core-usage-data-server", + "@kbn/core-usage-data-base-server-internal", + "@kbn/core-usage-data-server-internal" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/core/usage-data/core-usage-data-server/BUILD.bazel b/packages/core/usage-data/core-usage-data-server/BUILD.bazel deleted file mode 100644 index 2133607f6aa8c..0000000000000 --- a/packages/core/usage-data/core-usage-data-server/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "core-usage-data-server" -PKG_REQUIRE_NAME = "@kbn/core-usage-data-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/core/usage-data/core-usage-data-server/kibana.jsonc b/packages/core/usage-data/core-usage-data-server/kibana.jsonc index a785db8090713..722bd81550aa8 100644 --- a/packages/core/usage-data/core-usage-data-server/kibana.jsonc +++ b/packages/core/usage-data/core-usage-data-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-usage-data-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/core/usage-data/core-usage-data-server/package.json b/packages/core/usage-data/core-usage-data-server/package.json index 5f6f8f77a93a8..8b367cbfa3202 100644 --- a/packages/core/usage-data/core-usage-data-server/package.json +++ b/packages/core/usage-data/core-usage-data-server/package.json @@ -2,8 +2,6 @@ "name": "@kbn/core-usage-data-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/core/usage-data/core-usage-data-server/tsconfig.json b/packages/core/usage-data/core-usage-data-server/tsconfig.json index 4582562d6c9bb..77d0aa6ade3b1 100644 --- a/packages/core/usage-data/core-usage-data-server/tsconfig.json +++ b/packages/core/usage-data/core-usage-data-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/home/sample_data_card/BUILD.bazel b/packages/home/sample_data_card/BUILD.bazel deleted file mode 100644 index 6697c6c0cefb4..0000000000000 --- a/packages/home/sample_data_card/BUILD.bazel +++ /dev/null @@ -1,152 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "sample_data_card" -PKG_REQUIRE_NAME = "@kbn/home-sample-data-card" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - "**/*.svg", - "**/*.png", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//@storybook/addon-actions", - "@npm//@storybook/react", - "@npm//enzyme", - "@npm//lodash", - "@npm//react", - "//packages/kbn-i18n", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@storybook/addon-actions", - "@npm//@storybook/react", - "@npm//@types/enzyme", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n:npm_module_types", - "//packages/home/sample_data_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/home/sample_data_card/kibana.jsonc b/packages/home/sample_data_card/kibana.jsonc index 37c9a72d03e46..03869fcdb70bf 100644 --- a/packages/home/sample_data_card/kibana.jsonc +++ b/packages/home/sample_data_card/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/home-sample-data-card", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/home/sample_data_card/package.json b/packages/home/sample_data_card/package.json index 35d0f1b22ef39..c82ba35d94238 100644 --- a/packages/home/sample_data_card/package.json +++ b/packages/home/sample_data_card/package.json @@ -2,8 +2,5 @@ "name": "@kbn/home-sample-data-card", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/home/sample_data_card/tsconfig.json b/packages/home/sample_data_card/tsconfig.json index 158e1387bb883..531dd52379f12 100644 --- a/packages/home/sample_data_card/tsconfig.json +++ b/packages/home/sample_data_card/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../tsconfig.bazel.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/home-sample-data-types", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/home/sample_data_tab/BUILD.bazel b/packages/home/sample_data_tab/BUILD.bazel deleted file mode 100644 index 54e0ea0c82c6f..0000000000000 --- a/packages/home/sample_data_tab/BUILD.bazel +++ /dev/null @@ -1,146 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "sample_data_tab" -PKG_REQUIRE_NAME = "@kbn/home-sample-data-tab" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - "**/*.png", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//@elastic/eui", - "//packages/kbn-i18n", - "//packages/home/sample_data_card", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@elastic/eui", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-ambient-ui-types", - "//packages/home/sample_data_types", - "//packages/home/sample_data_card:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/home/sample_data_tab/kibana.jsonc b/packages/home/sample_data_tab/kibana.jsonc index 9e57d400caa61..ecf1eae5d146a 100644 --- a/packages/home/sample_data_tab/kibana.jsonc +++ b/packages/home/sample_data_tab/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/home-sample-data-tab", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/home/sample_data_tab/package.json b/packages/home/sample_data_tab/package.json index beb7a99f8aa6c..435df25207ff8 100644 --- a/packages/home/sample_data_tab/package.json +++ b/packages/home/sample_data_tab/package.json @@ -2,8 +2,5 @@ "name": "@kbn/home-sample-data-tab", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/home/sample_data_tab/tsconfig.json b/packages/home/sample_data_tab/tsconfig.json index 158e1387bb883..3cdeb5489c22a 100644 --- a/packages/home/sample_data_tab/tsconfig.json +++ b/packages/home/sample_data_tab/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../tsconfig.bazel.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/home-sample-data-card", + "@kbn/home-sample-data-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/home/sample_data_types/BUILD.bazel b/packages/home/sample_data_types/BUILD.bazel deleted file mode 100644 index 574f07ca11e66..0000000000000 --- a/packages/home/sample_data_types/BUILD.bazel +++ /dev/null @@ -1,58 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "sample_data_types" -PKG_REQUIRE_NAME = "@kbn/home-sample-data-types" -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/home/sample_data_types/kibana.jsonc b/packages/home/sample_data_types/kibana.jsonc index db7884dd0d07f..f82d226f836e0 100644 --- a/packages/home/sample_data_types/kibana.jsonc +++ b/packages/home/sample_data_types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/home-sample-data-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/home/sample_data_types/package.json b/packages/home/sample_data_types/package.json index dd42a0e0a1934..e18945e544a5e 100644 --- a/packages/home/sample_data_types/package.json +++ b/packages/home/sample_data_types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/home-sample-data-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/home/sample_data_types/tsconfig.json b/packages/home/sample_data_types/tsconfig.json index 2ff5d03a149c7..493400e55a76f 100644 --- a/packages/home/sample_data_types/tsconfig.json +++ b/packages/home/sample_data_types/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../../tsconfig.bazel.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ace/BUILD.bazel b/packages/kbn-ace/BUILD.bazel deleted file mode 100644 index 87b2e9f57354d..0000000000000 --- a/packages/kbn-ace/BUILD.bazel +++ /dev/null @@ -1,131 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ace" -PKG_REQUIRE_NAME = "@kbn/ace" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "src/ace/modes/x_json/worker/x_json.ace.worker.js", - ], - exclude = [ - "src/ace/modes/x_json/worker/worker.d.ts", - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "@npm//brace", - "@npm//lodash", - "@npm//raw-loader", -] - -TYPES_DEPS = [ - "@npm//brace", - "@npm//@types/lodash", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - additional_args = [ - "--copy-files", - "--ignore", - "**/*/src/ace/modes/x_json/worker/x_json.ace.worker.js", - "--quiet" - ], - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - additional_args = [ - "--copy-files", - "--ignore", - "**/*/src/ace/modes/x_json/worker/x_json.ace.worker.js", - "--quiet" - ], - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ace/kibana.jsonc b/packages/kbn-ace/kibana.jsonc index 25da4fe177ee2..8c5e29f19b54a 100644 --- a/packages/kbn-ace/kibana.jsonc +++ b/packages/kbn-ace/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ace", - "owner": "@elastic/platform-deployment-management", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/platform-deployment-management" } diff --git a/packages/kbn-ace/package.json b/packages/kbn-ace/package.json index da9587a86cb16..71718766f4cab 100644 --- a/packages/kbn-ace/package.json +++ b/packages/kbn-ace/package.json @@ -2,8 +2,5 @@ "name": "@kbn/ace", "version": "1.0.0", "private": true, - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-ace/tsconfig.json b/packages/kbn-ace/tsconfig.json index 1cf2f1e9ac9a0..a545abd7d65a6 100644 --- a/packages/kbn-ace/tsconfig.json +++ b/packages/kbn-ace/tsconfig.json @@ -1,15 +1,16 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "allowJs": false, - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": true, "types": ["node"] }, "include": [ "**/*.ts", "src/ace/modes/x_json/worker/x_json.ace.worker.js" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-alerts/BUILD.bazel b/packages/kbn-alerts/BUILD.bazel deleted file mode 100644 index 74f684fc6d458..0000000000000 --- a/packages/kbn-alerts/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-alerts" -PKG_REQUIRE_NAME = "@kbn/alerts" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx" - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-i18n", - "@npm//@elastic/eui", - "@npm//enzyme", - "@npm//react", -] - -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "@npm//@elastic/eui", - "@npm//tslib", - "@npm//@types/enzyme", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-alerts/kibana.jsonc b/packages/kbn-alerts/kibana.jsonc index 93b42c4ef86bf..d801aa493acf9 100644 --- a/packages/kbn-alerts/kibana.jsonc +++ b/packages/kbn-alerts/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/alerts", - "owner": "@elastic/security-solution", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution" } diff --git a/packages/kbn-alerts/package.json b/packages/kbn-alerts/package.json index cc4285cfc50a8..3246bcfb5b3e0 100644 --- a/packages/kbn-alerts/package.json +++ b/packages/kbn-alerts/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "Alerts components and hooks", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-alerts/tsconfig.json b/packages/kbn-alerts/tsconfig.json index fccc6563c0e73..91f7ce820b25e 100644 --- a/packages/kbn-alerts/tsconfig.json +++ b/packages/kbn-alerts/tsconfig.json @@ -1,13 +1,17 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": ["jest", "node"] }, "include": [ "**/*.ts", "**/*.tsx" ], + "kbn_references": [ + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-ambient-common-types/BUILD.bazel b/packages/kbn-ambient-common-types/BUILD.bazel deleted file mode 100644 index 3a8b17248da22..0000000000000 --- a/packages/kbn-ambient-common-types/BUILD.bazel +++ /dev/null @@ -1,58 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-ambient-common-types" -PKG_REQUIRE_NAME = "@kbn/ambient-common-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ambient-common-types/README.mdx b/packages/kbn-ambient-common-types/README.mdx index f08885537225c..6bc1ab253e792 100644 --- a/packages/kbn-ambient-common-types/README.mdx +++ b/packages/kbn-ambient-common-types/README.mdx @@ -14,7 +14,4 @@ These types will automatically be included for plugins. ## Packages -To include these types in a package: - -- add `"//packages/kbn-ambient-ui-types:npm_module_types"` to the `TYPES_DEPS` portion of the `BUILD.bazel` file. -- add `"@kbn/ambient-ui-types"` to the `types` portion of the `tsconfig.json` file. \ No newline at end of file +To include these types in a package add `"@kbn/ambient-ui-types"` to the `types` portion of the `tsconfig.json` file. \ No newline at end of file diff --git a/packages/kbn-ambient-common-types/kibana.jsonc b/packages/kbn-ambient-common-types/kibana.jsonc index 70537777cc825..941cb38015f0d 100644 --- a/packages/kbn-ambient-common-types/kibana.jsonc +++ b/packages/kbn-ambient-common-types/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ambient-common-types", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-ambient-common-types/package.json b/packages/kbn-ambient-common-types/package.json index 1794b046ef16e..989705008e0cf 100644 --- a/packages/kbn-ambient-common-types/package.json +++ b/packages/kbn-ambient-common-types/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ambient-common-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts", "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-ambient-common-types/tsconfig.json b/packages/kbn-ambient-common-types/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-ambient-common-types/tsconfig.json +++ b/packages/kbn-ambient-common-types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ambient-ftr-types/BUILD.bazel b/packages/kbn-ambient-ftr-types/BUILD.bazel deleted file mode 100644 index f6de3cba29f6a..0000000000000 --- a/packages/kbn-ambient-ftr-types/BUILD.bazel +++ /dev/null @@ -1,58 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-ambient-ftr-types" -PKG_REQUIRE_NAME = "@kbn/ambient-ftr-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ambient-ftr-types/kibana.jsonc b/packages/kbn-ambient-ftr-types/kibana.jsonc index 5fa351e4d7814..0464c850c1663 100644 --- a/packages/kbn-ambient-ftr-types/kibana.jsonc +++ b/packages/kbn-ambient-ftr-types/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ambient-ftr-types", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-ambient-ftr-types/package.json b/packages/kbn-ambient-ftr-types/package.json index 7928b304529cf..840c9c81d7bbd 100644 --- a/packages/kbn-ambient-ftr-types/package.json +++ b/packages/kbn-ambient-ftr-types/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ambient-ftr-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts", "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-ambient-ftr-types/tsconfig.json b/packages/kbn-ambient-ftr-types/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-ambient-ftr-types/tsconfig.json +++ b/packages/kbn-ambient-ftr-types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ambient-storybook-types/BUILD.bazel b/packages/kbn-ambient-storybook-types/BUILD.bazel deleted file mode 100644 index 1d4beea5fee4f..0000000000000 --- a/packages/kbn-ambient-storybook-types/BUILD.bazel +++ /dev/null @@ -1,64 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ambient-storybook-types" -PKG_REQUIRE_NAME = "@kbn/ambient-storybook-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - # Storybook react doesn't depend on these types even though their types use - # them, so we depend on them in this package and import them to make sure that they - # are available to users of the ambient types - "@npm//react-textarea-autosize", - "@npm//@storybook/react-docgen-typescript-plugin", -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ambient-storybook-types/README.mdx b/packages/kbn-ambient-storybook-types/README.mdx index f0db9b552d6ee..8dcd0c9f04c7a 100644 --- a/packages/kbn-ambient-storybook-types/README.mdx +++ b/packages/kbn-ambient-storybook-types/README.mdx @@ -11,8 +11,4 @@ This package holds ambient typescript definitions needed to use storybooks. ## Packages -To include these types in a package: - -- add `"//packages/kbn-ambient-storybook-types"` to the `RUNTIME_DEPS` portion of the `BUILD.bazel` file. -- add `"//packages/kbn-ambient-storybook-types:npm_module_types"` to the `TYPES_DEPS` portion of the `BUILD.bazel` file. -- add `"@kbn/ambient-storybook-types"` to the `types` portion of the `tsconfig.json` file. +To include these types in a package add `"@kbn/ambient-storybook-types"` to the `types` portion of the `tsconfig.json` file. diff --git a/packages/kbn-ambient-storybook-types/kibana.jsonc b/packages/kbn-ambient-storybook-types/kibana.jsonc index d04a5a93e2960..c746094ae008a 100644 --- a/packages/kbn-ambient-storybook-types/kibana.jsonc +++ b/packages/kbn-ambient-storybook-types/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ambient-storybook-types", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-ambient-storybook-types/tsconfig.json b/packages/kbn-ambient-storybook-types/tsconfig.json index c0217a1c1a013..36ec9753b7936 100644 --- a/packages/kbn-ambient-storybook-types/tsconfig.json +++ b/packages/kbn-ambient-storybook-types/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ambient-ui-types/BUILD.bazel b/packages/kbn-ambient-ui-types/BUILD.bazel deleted file mode 100644 index b6913eedc6d9c..0000000000000 --- a/packages/kbn-ambient-ui-types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ambient-ui-types" -PKG_REQUIRE_NAME = "@kbn/ambient-ui-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ambient-ui-types/README.mdx b/packages/kbn-ambient-ui-types/README.mdx index dbff6fb8e18a2..818f20e48d058 100644 --- a/packages/kbn-ambient-ui-types/README.mdx +++ b/packages/kbn-ambient-ui-types/README.mdx @@ -14,8 +14,4 @@ These types will automatically be included for plugins. ## Packages -To include these types in a package: - -- add `"//packages/kbn-ambient-ui-types"` to the `RUNTIME_DEPS` portion of the `BUILD.bazel` file. -- add `"//packages/kbn-ambient-ui-types:npm_module_types"` to the `TYPES_DEPS` portion of the `BUILD.bazel` file. -- add `"@kbn/ambient-ui-types"` to the `types` portion of the `tsconfig.json` file. \ No newline at end of file +To include these types in a package add `"@kbn/ambient-ui-types"` to the `types` portion of the `tsconfig.json` file. \ No newline at end of file diff --git a/packages/kbn-ambient-ui-types/kibana.jsonc b/packages/kbn-ambient-ui-types/kibana.jsonc index 1837bcfbd5619..940c59f8c3e28 100644 --- a/packages/kbn-ambient-ui-types/kibana.jsonc +++ b/packages/kbn-ambient-ui-types/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ambient-ui-types", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-ambient-ui-types/tsconfig.json b/packages/kbn-ambient-ui-types/tsconfig.json index 6904725bb1b26..1b6c3402c64d7 100644 --- a/packages/kbn-ambient-ui-types/tsconfig.json +++ b/packages/kbn-ambient-ui-types/tsconfig.json @@ -1,14 +1,15 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "@types/react", ] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-analytics/BUILD.bazel b/packages/kbn-analytics/BUILD.bazel index d1d6b6c90d1cf..3d30665907d2a 100644 --- a/packages/kbn-analytics/BUILD.bazel +++ b/packages/kbn-analytics/BUILD.bazel @@ -1,11 +1,6 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-analytics" -PKG_REQUIRE_NAME = "@kbn/analytics" - -SOURCE_FILES = glob( +SRCS = glob( [ "**/*.ts", ], @@ -24,103 +19,16 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json" -] - -RUNTIME_DEPS = [ +BUNDLER_DEPS = [ "@npm//moment", "@npm//moment-timezone", "@npm//tslib", ] -TYPES_DEPS = [ - "@npm//moment", - "@npm//moment-timezone", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_config( - name = "tsconfig_browser", - src = "tsconfig.browser.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.browser.json", - "//:tsconfig.browser_bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + name = "kbn-analytics", + package_name = "@kbn/analytics", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, visibility = ["//visibility:public"], ) diff --git a/packages/kbn-analytics/kibana.jsonc b/packages/kbn-analytics/kibana.jsonc index 06320d851340b..b10ca7bb960f6 100644 --- a/packages/kbn-analytics/kibana.jsonc +++ b/packages/kbn-analytics/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/analytics", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-analytics/package.json b/packages/kbn-analytics/package.json index 57216d4e563db..128870ecff50f 100644 --- a/packages/kbn-analytics/package.json +++ b/packages/kbn-analytics/package.json @@ -3,9 +3,6 @@ "private": true, "version": "1.0.0", "description": "Kibana Analytics tool", - "main": "target_node/index.js", - "browser": "target_web/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-analytics/tsconfig.json b/packages/kbn-analytics/tsconfig.json index c1b62ffb7d142..d2dc35192fa55 100644 --- a/packages/kbn-analytics/tsconfig.json +++ b/packages/kbn-analytics/tsconfig.json @@ -1,15 +1,16 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, "isolatedModules": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node" ] }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-apm-config-loader/BUILD.bazel b/packages/kbn-apm-config-loader/BUILD.bazel deleted file mode 100644 index fd51d0719bac6..0000000000000 --- a/packages/kbn-apm-config-loader/BUILD.bazel +++ /dev/null @@ -1,116 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-apm-config-loader" -PKG_REQUIRE_NAME = "@kbn/apm-config-loader" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-safer-lodash-set", - "//packages/kbn-utils", - "@npm//js-yaml", - "@npm//lodash", -] - -TYPES_DEPS = [ - "//packages/kbn-safer-lodash-set:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "@npm//@elastic/apm-rum", - "@npm//@types/jest", - "@npm//@types/js-yaml", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//elastic-apm-node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-apm-config-loader/kibana.jsonc b/packages/kbn-apm-config-loader/kibana.jsonc index 904a7eda0177a..e9d06f3539492 100644 --- a/packages/kbn-apm-config-loader/kibana.jsonc +++ b/packages/kbn-apm-config-loader/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/apm-config-loader", - "owner": ["@elastic/kibana-core", "@vigneshshanmugam"], - "runtimeDeps": [], - "typeDeps": [] + "owner": ["@elastic/kibana-core", "@vigneshshanmugam"] } diff --git a/packages/kbn-apm-config-loader/package.json b/packages/kbn-apm-config-loader/package.json index 30d7f3780f83e..c4645cdf148fc 100644 --- a/packages/kbn-apm-config-loader/package.json +++ b/packages/kbn-apm-config-loader/package.json @@ -1,8 +1,6 @@ { "name": "@kbn/apm-config-loader", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-apm-config-loader/tsconfig.json b/packages/kbn-apm-config-loader/tsconfig.json index 57c1dd1c94e0f..09575e5e2b745 100644 --- a/packages/kbn-apm-config-loader/tsconfig.json +++ b/packages/kbn-apm-config-loader/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/safer-lodash-set", + "@kbn/utils", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-apm-synthtrace/BUILD.bazel b/packages/kbn-apm-synthtrace/BUILD.bazel deleted file mode 100644 index 2e7b4ac1f4562..0000000000000 --- a/packages/kbn-apm-synthtrace/BUILD.bazel +++ /dev/null @@ -1,127 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-apm-synthtrace" -PKG_REQUIRE_NAME = "@kbn/apm-synthtrace" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/.eslintrc.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-datemath", - "@npm//@elastic/elasticsearch", - "@npm//lodash", - "@npm//moment", - "@npm//object-hash", - "@npm//p-limit", - "@npm//yargs", - "@npm//node-fetch", - "@npm//semver", - "@npm//elastic-apm-http-client", -] - -TYPES_DEPS = [ - "//packages/kbn-datemath:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/object-hash", - "@npm//moment", - "@npm//p-limit", - "@npm//@types/node-fetch", - "@npm//@types/semver", - "@npm//@types/yargs", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", - validate = False, -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-apm-synthtrace/kibana.jsonc b/packages/kbn-apm-synthtrace/kibana.jsonc index 0bde4f9d7715a..1ae0bbcbaa7ae 100644 --- a/packages/kbn-apm-synthtrace/kibana.jsonc +++ b/packages/kbn-apm-synthtrace/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/apm-synthtrace", "devOnly": true, - "owner": "@elastic/apm-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/apm-ui" } diff --git a/packages/kbn-apm-synthtrace/package.json b/packages/kbn-apm-synthtrace/package.json index 935eb518639db..827e251d8a137 100644 --- a/packages/kbn-apm-synthtrace/package.json +++ b/packages/kbn-apm-synthtrace/package.json @@ -6,7 +6,5 @@ "bin": { "synthtrace": "./bin/synthtrace" }, - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-apm-synthtrace/tsconfig.json b/packages/kbn-apm-synthtrace/tsconfig.json index cc3e7412412df..6c61405223cd6 100644 --- a/packages/kbn-apm-synthtrace/tsconfig.json +++ b/packages/kbn-apm-synthtrace/tsconfig.json @@ -1,10 +1,14 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": ["node", "jest"] }, - "include": ["**/*.ts"] + "include": ["**/*.ts"], + "kbn_references": [ + "@kbn/datemath" + ], + "exclude": [ + "target/**/*", + ] } diff --git a/packages/kbn-apm-utils/BUILD.bazel b/packages/kbn-apm-utils/BUILD.bazel deleted file mode 100644 index 5f685b859613a..0000000000000 --- a/packages/kbn-apm-utils/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-apm-utils" -PKG_REQUIRE_NAME = "@kbn/apm-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//elastic-apm-node", -] - -TYPES_DEPS = [ - "@npm//elastic-apm-node", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-apm-utils/kibana.jsonc b/packages/kbn-apm-utils/kibana.jsonc index 3db7022ea44c5..950a5dacb9ba8 100644 --- a/packages/kbn-apm-utils/kibana.jsonc +++ b/packages/kbn-apm-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/apm-utils", - "owner": "@elastic/apm-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/apm-ui" } diff --git a/packages/kbn-apm-utils/package.json b/packages/kbn-apm-utils/package.json index 7e31210e1d19d..46979a22a9478 100644 --- a/packages/kbn-apm-utils/package.json +++ b/packages/kbn-apm-utils/package.json @@ -1,8 +1,6 @@ { "name": "@kbn/apm-utils", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-apm-utils/tsconfig.json b/packages/kbn-apm-utils/tsconfig.json index b4316f3d2faac..2649fb45f0a42 100644 --- a/packages/kbn-apm-utils/tsconfig.json +++ b/packages/kbn-apm-utils/tsconfig.json @@ -1,14 +1,15 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node" ] }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-axe-config/BUILD.bazel b/packages/kbn-axe-config/BUILD.bazel deleted file mode 100644 index b565aea2e8c04..0000000000000 --- a/packages/kbn-axe-config/BUILD.bazel +++ /dev/null @@ -1,130 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-axe-config" -PKG_REQUIRE_NAME = "@kbn/axe-config" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//axe-core", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-axe-config/kibana.jsonc b/packages/kbn-axe-config/kibana.jsonc index f2444755f9096..09252ba807fa1 100644 --- a/packages/kbn-axe-config/kibana.jsonc +++ b/packages/kbn-axe-config/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/axe-config", "devOnly": true, - "owner": "@elastic/kibana-qa", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-qa" } diff --git a/packages/kbn-axe-config/package.json b/packages/kbn-axe-config/package.json index 77c6d2b4c31c4..54f699538acb5 100644 --- a/packages/kbn-axe-config/package.json +++ b/packages/kbn-axe-config/package.json @@ -2,8 +2,5 @@ "name": "@kbn/axe-config", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-axe-config/tsconfig.json b/packages/kbn-axe-config/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-axe-config/tsconfig.json +++ b/packages/kbn-axe-config/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-babel-plugin-package-imports/BUILD.bazel b/packages/kbn-babel-plugin-package-imports/BUILD.bazel new file mode 100644 index 0000000000000..87b5126abb74f --- /dev/null +++ b/packages/kbn-babel-plugin-package-imports/BUILD.bazel @@ -0,0 +1,31 @@ +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") + +SRCS = [ + "babel_plugin_package_imports.js", + "index.js", +] + +# In this array place runtime dependencies, including other packages and NPM packages +# which must be available for this code to run. +# +# To reference other packages use: +# "//repo/relative/path/to/package" +# eg. "//packages/kbn-utils" +# +# To reference a NPM package use: +# "@npm//name-of-package" +# eg. "@npm//lodash" +BUNDLER_DEPS = [ + "@npm//@babel/helper-plugin-utils", + "@npm//normalize-path", + "//packages/kbn-repo-info", + "//packages/kbn-package-map", +] + +js_library( + name = "kbn-babel-plugin-package-imports", + package_name = "@kbn/babel-plugin-package-imports", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, + visibility = ["//visibility:public"], +) diff --git a/packages/kbn-babel-plugin-package-imports/README.mdx b/packages/kbn-babel-plugin-package-imports/README.mdx new file mode 100644 index 0000000000000..1f36b2266b4a9 --- /dev/null +++ b/packages/kbn-babel-plugin-package-imports/README.mdx @@ -0,0 +1,11 @@ +--- +id: kibDevDocsOpsBabelPluginPackageImports +slug: /kibana-dev-docs/ops/babel-plugin-package-imports +title: "@kbn/babel-plugin-package-imports" +description: A babel plugin that transforms our @kbn/{NAME} imports into paths +date: 2022-05-19 +tags: ['kibana', 'dev', 'contributor', 'operations', 'babel', 'plugin', 'packages', 'imports'] +--- + +When developing inside the Kibana repository importing a package from any other package is just easy as +importing `@kbn/{package-name}`. However not every package is a node_module yet and while that is something we are working on to accomplish we need a way to dealing with it for now. Using this babel plugin is our transitory solution. It allows us to import from module ids and then transform it automatically back into paths on the transpiled code without friction for our engineering teams. \ No newline at end of file diff --git a/packages/kbn-babel-plugin-synthetic-packages/babel_plugin_synthetic_packages.js b/packages/kbn-babel-plugin-package-imports/babel_plugin_package_imports.js similarity index 55% rename from packages/kbn-babel-plugin-synthetic-packages/babel_plugin_synthetic_packages.js rename to packages/kbn-babel-plugin-package-imports/babel_plugin_package_imports.js index 8caa3906c8fe0..3f3b155ff7abf 100644 --- a/packages/kbn-babel-plugin-synthetic-packages/babel_plugin_synthetic_packages.js +++ b/packages/kbn-babel-plugin-package-imports/babel_plugin_package_imports.js @@ -6,84 +6,79 @@ * Side Public License, v 1. */ -/** @typedef {import('@babel/core').PluginObj} PluginObj */ - const Path = require('path'); -const Fs = require('fs'); const T = require('@babel/types'); const normalizePath = require('normalize-path'); const { declare } = require('@babel/helper-plugin-utils'); -const KbnSyntheticPackageMap = require('@kbn/synthetic-package-map'); +const KbnSyntheticPackageMap = require('@kbn/package-map'); +const { REPO_ROOT } = require('@kbn/repo-info'); const PKG_MAP = KbnSyntheticPackageMap.readPackageMap(); -const PKG_MAP_HASH = KbnSyntheticPackageMap.readHashOfPackageMap(); +/** + * @param {unknown} v + * @returns {v is Record} + */ +const isObj = (v) => typeof v === 'object' && !!v; + +/** + * @param {unknown} state + * @returns {string} + */ function getFilename(state) { - if (typeof state !== 'object' || !state || !state.filename || !Path.isAbsolute(state.filename)) { + if (!isObj(state) || typeof state.filename !== 'string' || !Path.isAbsolute(state.filename)) { throw new Error( - `@kbn/babel-plugin-synthetic-packages is only compatible when building files with absolute filename state` + `@kbn/babel-plugin-package-imports is only compatible when building files with absolute filename state` ); } return state.filename; } -let foundKibanaRoot; -function getKibanaRoot(someSourceFilename) { - if (foundKibanaRoot) { - return foundKibanaRoot; - } - - // try to find the Kibana package.json file in a parent directory of the sourceFile - let cursorDir = Path.dirname(someSourceFilename); - while (true) { - const packageJsonPath = Path.resolve(cursorDir, 'package.json'); - try { - const pkg = JSON.parse(Fs.readFileSync(packageJsonPath, 'utf8')); - if (pkg && pkg.name === 'kibana') { - foundKibanaRoot = cursorDir; - return foundKibanaRoot; - } - } catch { - // this directory is not the Kibana dir - } - - const nextCursor = Path.dirname(cursorDir); - if (!nextCursor || nextCursor === cursorDir) { - // stop iterating when we get to the root of the root of the filesystem - break; - } - - cursorDir = nextCursor; - } - - throw new Error( - '@kbn/*-plugin and @kbn/core imports can only be used by source files which have not been converted to packages, building packages which rely on these imports requires converting the thing you want into a package.' - ); -} - -function fixImportRequest(req, filename, kibanaRoot) { +/** + * @param {string} req + * @returns {import('./types').ParsedReq | undefined} + */ +function parseReq(req) { if (!req.startsWith('@kbn/')) { return; } const parts = req.split('/'); - const dir = PKG_MAP.get(`@kbn/${parts[1]}`); + const moduleId = `@kbn/${parts[1]}`; + const dir = PKG_MAP.get(moduleId); if (!dir) { return; } - return normalizePath( - Path.relative( - Path.dirname(filename), - Path.resolve(kibanaRoot ?? getKibanaRoot(filename), dir, ...parts.slice(2)) - ) + return { + req, + moduleId, + dir, + subParts: parts.slice(2), + }; +} + +/** + * @param {import('./types').ParsedReq} req + * @param {string} filename + */ +function fixImportRequest(req, filename) { + if (process.env.BAZEL_WORKSPACE === 'kibana') { + return; + } + + const rel = normalizePath( + Path.relative(Path.dirname(filename), Path.resolve(REPO_ROOT, req.dir, ...req.subParts)) ); + + return rel.startsWith('.') ? rel : `./${rel}`; } /** * @param {T.CallExpression} node + * @returns {node is T.Import & { arguments: [T.StringLiteral] }} */ function isDynamicImport(node) { return !!( @@ -95,6 +90,7 @@ function isDynamicImport(node) { /** * @param {T.CallExpression} node + * @returns {node is T.CallExpression & { arguments: [T.StringLiteral] }} */ function isRequire(node) { return !!( @@ -107,6 +103,7 @@ function isRequire(node) { /** * @param {T.CallExpression} node + * @returns {node is T.CallExpression & { arguments: [T.StringLiteral] }} */ function isRequireResolve(node) { return !!( @@ -122,6 +119,7 @@ function isRequireResolve(node) { /** * @param {T.CallExpression} node + * @returns {node is T.CallExpression & { arguments: [T.StringLiteral] }} */ function isJestMockCall(node) { return !!( @@ -134,15 +132,17 @@ function isJestMockCall(node) { } module.exports = declare((api, options) => { - const kibanaRoot = options['kibana/rootDir']; + /** @type {Set | undefined} */ + const ignoredPkgIds = options.ignoredPkgIds; api.assertVersion(7); - api.cache.using(() => `${PKG_MAP_HASH}:${kibanaRoot}`); - /** @type {PluginObj} */ - const plugin = { - name: 'synthetic-packages', + return { + name: 'kbn-package-imports', visitor: { + /** + * @param {import('@babel/core').NodePath} path + */ 'ImportDeclaration|ExportNamedDeclaration|ExportAllDeclaration'(path) { const filename = getFilename(this); @@ -152,11 +152,20 @@ module.exports = declare((api, options) => { } const req = source.value; - const newReq = fixImportRequest(req, filename, kibanaRoot); + const parsed = parseReq(req); + if (!parsed || ignoredPkgIds?.has(parsed.moduleId)) { + return; + } + + const newReq = fixImportRequest(parsed, filename); if (newReq) { path.get('source').replaceWith(T.stringLiteral(newReq)); } }, + + /** + * @param {import('@babel/core').NodePath} path + */ CallExpression(path) { const filename = getFilename(this); @@ -171,13 +180,16 @@ module.exports = declare((api, options) => { } const req = node.arguments[0].value; - const newReq = fixImportRequest(req, filename, kibanaRoot); + const parsed = parseReq(req); + if (!parsed || ignoredPkgIds?.has(parsed.moduleId)) { + return; + } + + const newReq = fixImportRequest(parsed, filename); if (newReq) { - path.get('arguments.0').replaceWith(T.stringLiteral(newReq)); + path.get('arguments')[0].replaceWith(T.stringLiteral(newReq)); } }, }, }; - - return plugin; }); diff --git a/packages/kbn-optimizer/src/node/index.ts b/packages/kbn-babel-plugin-package-imports/index.js similarity index 85% rename from packages/kbn-optimizer/src/node/index.ts rename to packages/kbn-babel-plugin-package-imports/index.js index a6c019425bf2e..ce314829e93c3 100644 --- a/packages/kbn-optimizer/src/node/index.ts +++ b/packages/kbn-babel-plugin-package-imports/index.js @@ -6,4 +6,4 @@ * Side Public License, v 1. */ -export * from './node_auto_tranpilation'; +module.exports = require('./babel_plugin_package_imports'); diff --git a/packages/kbn-babel-plugin-package-imports/kibana.jsonc b/packages/kbn-babel-plugin-package-imports/kibana.jsonc new file mode 100644 index 0000000000000..c555d9f008776 --- /dev/null +++ b/packages/kbn-babel-plugin-package-imports/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/babel-plugin-package-imports", + "devOnly": true, + "owner": "@elastic/kibana-operations" +} diff --git a/packages/kbn-babel-plugin-package-imports/package.json b/packages/kbn-babel-plugin-package-imports/package.json new file mode 100644 index 0000000000000..1d7206c6b1001 --- /dev/null +++ b/packages/kbn-babel-plugin-package-imports/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/babel-plugin-package-imports", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-babel-plugin-package-imports/tsconfig.json b/packages/kbn-babel-plugin-package-imports/tsconfig.json new file mode 100644 index 0000000000000..cdf3aa866fce4 --- /dev/null +++ b/packages/kbn-babel-plugin-package-imports/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "checkJs": true, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.js", + "**/*.ts", + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/repo-info", + "@kbn/package-map" + ] +} diff --git a/kbn_pm/src/commands/projects.js b/packages/kbn-babel-plugin-package-imports/types.ts similarity index 77% rename from kbn_pm/src/commands/projects.js rename to packages/kbn-babel-plugin-package-imports/types.ts index 8ebd3be073d07..c556aa9b07339 100644 --- a/kbn_pm/src/commands/projects.js +++ b/packages/kbn-babel-plugin-package-imports/types.ts @@ -6,5 +6,9 @@ * Side Public License, v 1. */ -const { PROJECTS } = require('../../../src/dev/typescript/projects'); -module.exports = { PROJECTS }; +export interface ParsedReq { + req: string; + moduleId: string; + dir: string; + subParts: string[]; +} diff --git a/packages/kbn-babel-plugin-synthetic-packages/BUILD.bazel b/packages/kbn-babel-plugin-synthetic-packages/BUILD.bazel deleted file mode 100644 index a1e6891f23ec5..0000000000000 --- a/packages/kbn-babel-plugin-synthetic-packages/BUILD.bazel +++ /dev/null @@ -1,62 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-babel-plugin-synthetic-packages" -PKG_REQUIRE_NAME = "@kbn/babel-plugin-synthetic-packages" - -filegroup( - name = "srcs", - srcs = [ - "babel_plugin_synthetic_packages.js" - ], -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@babel/helper-plugin-utils", - "@npm//normalize-path", - "//packages/kbn-synthetic-package-map", -] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES + [ - ":srcs", - ], - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-babel-plugin-synthetic-packages/README.mdx b/packages/kbn-babel-plugin-synthetic-packages/README.mdx deleted file mode 100644 index 6f11e9cf2d6b9..0000000000000 --- a/packages/kbn-babel-plugin-synthetic-packages/README.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -id: kibDevDocsOpsBabelPluginSyntheticPackages -slug: /kibana-dev-docs/ops/babel-plugin-synthetic-packages -title: "@kbn/babel-plugin-synthetic-packages" -description: A babel plugin that transforms our @kbn/{NAME} imports into paths -date: 2022-05-19 -tags: ['kibana', 'dev', 'contributor', 'operations', 'babel', 'plugin', 'synthetic', 'packages'] ---- - -When developing inside the Kibana repository importing a package from any other package is just easy as importing `@kbn/{package-name}`. -However not every package is a node_module yet and while that is something we are working on to accomplish we need a way to dealing with it for -now. Using this babel plugin is our transitory solution. It allows us to import from module ids and then transform it automatically back into -paths on the transpiled code without friction for our engineering teams. \ No newline at end of file diff --git a/packages/kbn-babel-plugin-synthetic-packages/kibana.jsonc b/packages/kbn-babel-plugin-synthetic-packages/kibana.jsonc deleted file mode 100644 index a426d7bec6a2b..0000000000000 --- a/packages/kbn-babel-plugin-synthetic-packages/kibana.jsonc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "shared-common", - "id": "@kbn/babel-plugin-synthetic-packages", - "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] -} diff --git a/packages/kbn-babel-plugin-synthetic-packages/package.json b/packages/kbn-babel-plugin-synthetic-packages/package.json deleted file mode 100644 index 89de157a11724..0000000000000 --- a/packages/kbn-babel-plugin-synthetic-packages/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "@kbn/babel-plugin-synthetic-packages", - "private": true, - "version": "1.0.0", - "main": "./babel_plugin_synthetic_packages.js", - "license": "SSPL-1.0 OR Elastic License 2.0" -} diff --git a/packages/kbn-babel-preset/BUILD.bazel b/packages/kbn-babel-preset/BUILD.bazel index 7b4090ceac48e..73313161f6ac4 100644 --- a/packages/kbn-babel-preset/BUILD.bazel +++ b/packages/kbn-babel-preset/BUILD.bazel @@ -39,7 +39,7 @@ RUNTIME_DEPS = [ "@npm//babel-plugin-add-module-exports", "@npm//babel-plugin-styled-components", "@npm//babel-plugin-transform-react-remove-prop-types", - "//packages/kbn-babel-plugin-synthetic-packages", + "//packages/kbn-babel-plugin-package-imports", ] js_library( @@ -51,16 +51,3 @@ js_library( package_name = PKG_REQUIRE_NAME, visibility = ["//visibility:public"], ) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-babel-preset/common_babel_parser_options.js b/packages/kbn-babel-preset/common_babel_parser_options.js index aea9b94fd4180..576050b9d8862 100644 --- a/packages/kbn-babel-preset/common_babel_parser_options.js +++ b/packages/kbn-babel-preset/common_babel_parser_options.js @@ -8,6 +8,7 @@ // The @babel/parser options documentation can be found here: // https://babeljs.io/docs/en/babel-parser#options +/** @type {import('@babel/core').ParserOptions} */ module.exports = { sourceType: 'unambiguous', plugins: [ diff --git a/packages/kbn-babel-preset/common_preset.js b/packages/kbn-babel-preset/common_preset.js index 1c3e2135d1049..cfb8bf495c6a2 100644 --- a/packages/kbn-babel-preset/common_preset.js +++ b/packages/kbn-babel-preset/common_preset.js @@ -47,7 +47,18 @@ module.exports = (_, options = {}) => ({ }, ], - [require.resolve('@kbn/babel-plugin-synthetic-packages'), options], + ...(options['kibana/ignoreAllPkgImports'] + ? [] + : [ + [ + require.resolve('@kbn/babel-plugin-package-imports'), + { + ignoredPkgIds: options['kibana/ignoredPkgIds'] + ? new Set(options['kibana/ignoredPkgIds']) + : undefined, + }, + ], + ]), ], }, diff --git a/packages/kbn-babel-preset/kibana.jsonc b/packages/kbn-babel-preset/kibana.jsonc index fa4ca725c56de..f63a0c554e7e1 100644 --- a/packages/kbn-babel-preset/kibana.jsonc +++ b/packages/kbn-babel-preset/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/babel-preset", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-babel-preset/tsconfig.json b/packages/kbn-babel-preset/tsconfig.json new file mode 100644 index 0000000000000..0792a42605d46 --- /dev/null +++ b/packages/kbn-babel-preset/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": [ + "**/*.js" + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/packages/kbn-babel-preset/webpack_preset.js b/packages/kbn-babel-preset/webpack_preset.js index 75ceab91d8af5..7d8f092384b4c 100644 --- a/packages/kbn-babel-preset/webpack_preset.js +++ b/packages/kbn-babel-preset/webpack_preset.js @@ -8,7 +8,8 @@ const { USES_STYLED_COMPONENTS } = require('./styled_components_files'); -module.exports = (_, options = {}) => { +/** @type {import('@babel/core').ConfigFunction} */ +module.exports = (api, options = {}) => { return { presets: [ [ @@ -20,6 +21,7 @@ module.exports = (_, options = {}) => { // in node_preset.js corejs: '3.26.1', bugfixes: true, + browserslistEnv: api.env('production') ? 'production' : 'dev', }, ], [require('./common_preset'), options], diff --git a/packages/kbn-babel-register/BUILD.bazel b/packages/kbn-babel-register/BUILD.bazel new file mode 100644 index 0000000000000..962f000fb4fa8 --- /dev/null +++ b/packages/kbn-babel-register/BUILD.bazel @@ -0,0 +1,50 @@ +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") + +SRCS = glob( + [ + "**/*.js", + "**/*.ts", + ], + exclude = [ + "**/*.config.js", + "**/*.mock.*", + "**/*.test.*", + "**/*.stories.*", + "**/__snapshots__/**", + "**/integration_tests/**", + "**/mocks/**", + "**/scripts/**", + "**/storybook/**", + "**/test_fixtures/**", + "**/test_helpers/**", + ], +) + +# In this array place runtime dependencies, including other packages and NPM packages +# which must be available for this code to run. +# +# To reference other packages use: +# "//repo/relative/path/to/package" +# eg. "//packages/kbn-utils" +# +# To reference a NPM package use: +# "@npm//name-of-package" +# eg. "@npm//lodash" +BUNDLER_DEPS = [ + "@npm//@babel/core", + "@npm//chalk", + "@npm//pirates", + "@npm//lmdb", + "@npm//source-map-support", + "//packages/kbn-package-map", + "//packages/kbn-repo-info", + "//packages/kbn-babel-transform", +] + +js_library( + name = "kbn-babel-register", + package_name = "@kbn/babel-register", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, + visibility = ["//visibility:public"], +) diff --git a/packages/kbn-babel-register/README.md b/packages/kbn-babel-register/README.md new file mode 100644 index 0000000000000..5c11943e31813 --- /dev/null +++ b/packages/kbn-babel-register/README.md @@ -0,0 +1,3 @@ +# @kbn/babel-register + +Empty package generated by @kbn/generate diff --git a/packages/kbn-babel-register/cache/index.js b/packages/kbn-babel-register/cache/index.js new file mode 100644 index 0000000000000..78d17cf3e059d --- /dev/null +++ b/packages/kbn-babel-register/cache/index.js @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +const Fs = require('fs'); +const Path = require('path'); +const Crypto = require('crypto'); + +const { readHashOfPackageMap } = require('@kbn/package-map'); +const babel = require('@babel/core'); +const peggy = require('@kbn/peggy'); +const { REPO_ROOT, UPSTREAM_BRANCH } = require('@kbn/repo-info'); +const { getBabelOptions } = require('@kbn/babel-transform'); + +/** + * @babel/register uses a JSON encoded copy of the config + babel.version + * as the cache key for files, so we do something similar but we don't need + * a unique cache key for every file as our config isn't different for + * different files (by design). Instead we determine a unique prefix and + * automatically prepend all paths with the prefix to create cache keys + */ +function determineCachePrefix() { + const json = JSON.stringify({ + synthPkgMapHash: readHashOfPackageMap(), + babelVersion: babel.version, + peggyVersion: peggy.version, + // get a config for a fake js, ts, and tsx file to make sure we + // capture conditional config portions based on the file extension + js: babel.loadOptions(getBabelOptions(Path.resolve('foo.js'))), + ts: babel.loadOptions(getBabelOptions(Path.resolve('foo.ts'))), + tsx: babel.loadOptions(getBabelOptions(Path.resolve('foo.tsx'))), + }); + + return Crypto.createHash('sha256').update(json).digest('hex').slice(0, 10); +} + +function lmdbAvailable() { + try { + require('lmdb'); + return true; + } catch (error) { + return false; + } +} + +/** + * @returns {import('./types').Cache} + */ +function getCache() { + const log = process.env.DEBUG_BABEL_REGISTER_CACHE + ? Fs.createWriteStream('babel_register_cache.log', { flags: 'a' }) + : undefined; + + if (process.env.DISABLE_BABEL_REGISTER_CACHE) { + log?.end('lmdb cache is disabled\n'); + return new (require('./no_cache_cache').NoCacheCache)(); + } + + if (lmdbAvailable()) { + log?.write('lmdb is available, using lmdb cache\n'); + return new (require('./lmdb_cache').LmdbCache)({ + pathRoot: REPO_ROOT, + dir: Path.resolve(REPO_ROOT, 'data/babel_register_cache_v1', UPSTREAM_BRANCH), + prefix: determineCachePrefix(), + log, + }); + } + + log?.end('lmdb is unavailable, disabling cache\n'); + console.error('unable to load LMDB in this env, disabling babel/register cache'); + return new (require('./no_cache_cache').NoCacheCache)(); +} + +module.exports = { + getCache, +}; diff --git a/packages/kbn-babel-register/cache/lmdb_cache.js b/packages/kbn-babel-register/cache/lmdb_cache.js new file mode 100644 index 0000000000000..1c69ba1ed12a9 --- /dev/null +++ b/packages/kbn-babel-register/cache/lmdb_cache.js @@ -0,0 +1,280 @@ +/* + * 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. + */ + +const Path = require('path'); + +const chalk = require('chalk'); +const LmdbStore = require('lmdb'); + +const GLOBAL_ATIME = `${Date.now()}`; +const MINUTE = 1000 * 60; +const HOUR = MINUTE * 60; +const DAY = HOUR * 24; + +/** @typedef {import('./types').Cache} CacheInterface */ +/** @typedef {import('lmdb').Database} Db */ + +/** + * @param {Db} db + * @returns {string} + */ +const dbName = (db) => + // @ts-expect-error db.name is not a documented/typed property + db.name; + +/** + * @implements {CacheInterface} + */ +class LmdbCache { + /** @type {import('lmdb').RootDatabase} */ + #codes; + /** @type {Db} */ + #atimes; + /** @type {Db} */ + #mtimes; + /** @type {Db} */ + #sourceMaps; + /** @type {string} */ + #pathRoot; + /** @type {string} */ + #prefix; + /** @type {import('stream').Writable | undefined} */ + #log; + /** @type {ReturnType} */ + #timer; + + /** + * @param {import('./types').CacheConfig} config + */ + constructor(config) { + if (!Path.isAbsolute(config.pathRoot)) { + throw new Error('cache requires an absolute path to resolve paths relative to'); + } + + this.#pathRoot = config.pathRoot; + this.#prefix = config.prefix; + this.#log = config.log; + + this.#codes = LmdbStore.open(config.dir, { + name: 'codes', + encoding: 'string', + maxReaders: 500, + }); + + // TODO: redundant 'name' syntax is necessary because of a bug that I have yet to fix + this.#atimes = this.#codes.openDB('atimes', { + name: 'atimes', + encoding: 'string', + }); + + this.#mtimes = this.#codes.openDB('mtimes', { + name: 'mtimes', + encoding: 'string', + }); + + this.#sourceMaps = this.#codes.openDB('sourceMaps', { + name: 'sourceMaps', + encoding: 'string', + }); + + // after the process has been running for 30 minutes prune the + // keys which haven't been used in 30 days. We use `unref()` to + // make sure this timer doesn't hold other processes open + // unexpectedly + this.#timer = setTimeout(() => { + this.#pruneOldKeys().catch((error) => { + process.stderr.write(` +Failed to cleanup @kbn/babel-register cache: + + ${error.stack.split('\n').join('\n ')} + +To eliminate this problem you may want to delete the "${Path.relative(process.cwd(), config.dir)}" +directory and report this error to the Operations team.\n`); + }); + }, 30 * MINUTE); + + // timer.unref is not defined in jest which emulates the dom by default + if (typeof this.#timer.unref === 'function') { + this.#timer.unref(); + } + } + + /** + * @param {string} path + */ + getMtime(path) { + return this.#safeGet(this.#mtimes, this.#getKey(path)); + } + + /** + * @param {string} path + */ + getCode(path) { + const key = this.#getKey(path); + const code = this.#safeGet(this.#codes, key); + + if (code !== undefined) { + // when we use a file from the cache set the "atime" of that cache entry + // so that we know which cache items we use and which haven't been + // touched in a long time (currently 30 days) + this.#safePut(this.#atimes, key, GLOBAL_ATIME); + } + + return code; + } + + /** + * @param {string} path + */ + getSourceMap(path) { + const map = this.#safeGet(this.#sourceMaps, this.#getKey(path)); + if (typeof map === 'string') { + return JSON.parse(map); + } + } + + close() { + clearTimeout(this.#timer); + } + + /** + * @param {string} path + * @param {{ mtime: string; code: string; map?: any }} file + */ + async update(path, file) { + const key = this.#getKey(path); + + this.#safePut(this.#atimes, key, GLOBAL_ATIME); + this.#safePut(this.#mtimes, key, file.mtime); + this.#safePut(this.#codes, key, file.code); + + if (file.map) { + this.#safePut(this.#sourceMaps, key, JSON.stringify(file.map)); + } + } + + /** + * @param {string} path + */ + #getKey(path) { + const normalizedPath = + Path.sep !== '/' + ? Path.relative(this.#pathRoot, path).split(Path.sep).join('/') + : Path.relative(this.#pathRoot, path); + + return `${this.#prefix}:${normalizedPath}`; + } + + /** + * @param {LmdbStore.Database} db + * @param {string} key + */ + #safeGet(db, key) { + try { + const value = db.get(key); + this.#debug(value === undefined ? 'MISS' : 'HIT', db, key); + return value; + } catch (error) { + if (error.message.includes('No transaction to renew')) { + // this happens on errors very early in the process + return undefined; + } + + this.#logError('GET', db, key, error); + } + } + + /** + * @param {LmdbStore.Database} db + * @param {string} key + * @param {string} value + */ + #safePut(db, key, value) { + try { + db.putSync(key, value); + this.#debug('PUT', db, key); + } catch (error) { + this.#logError('PUT', db, key, error); + } + } + + /** + * @param {string} type + * @param {LmdbStore.Database} db + * @param {string} key + */ + #debug(type, db, key) { + this.#log?.write(`${type} [${dbName(db)}] ${String(key)}\n`); + } + + /** + * @param {'GET' | 'PUT'} type + * @param {LmdbStore.Database} db + * @param {string} key + * @param {Error} error + */ + #logError(type, db, key, error) { + this.#debug(`ERROR/${type}`, db, `${String(key)}: ${error.stack}`); + process.stderr.write( + chalk.red( + `[@kbn/optimizer/node] ${type} error [${dbName(db)}/${String(key)}]: ${error.stack}\n` + ) + ); + } + + async #pruneOldKeys() { + try { + const ATIME_LIMIT = Date.now() - 30 * DAY; + const BATCH_SIZE = 1000; + + /** @type {string[]} */ + const validKeys = []; + /** @type {string[]} */ + const invalidKeys = []; + + for (const { key, value } of this.#atimes.getRange()) { + const atime = parseInt(`${value}`, 10); + if (Number.isNaN(atime) || atime < ATIME_LIMIT) { + invalidKeys.push(key); + } else { + validKeys.push(key); + } + + if (validKeys.length + invalidKeys.length >= BATCH_SIZE) { + const promises = new Set(); + + if (invalidKeys.length) { + for (const k of invalidKeys) { + // all these promises are the same currently, so Set() will + // optimise this to a single promise, but I wouldn't be shocked + // if a future version starts returning independent promises so + // this is just for some future-proofing + promises.add(this.#atimes.remove(k)); + promises.add(this.#mtimes.remove(k)); + promises.add(this.#codes.remove(k)); + promises.add(this.#sourceMaps.remove(k)); + } + } else { + // delay a smidge to allow other things to happen before the next batch of checks + promises.add(new Promise((resolve) => setTimeout(resolve, 1))); + } + + invalidKeys.length = 0; + validKeys.length = 0; + await Promise.all(Array.from(promises)); + } + } + } catch { + // ignore errors, the cache is totally disposable and will rebuild if there is some sort of corruption + } + } +} + +module.exports = { + LmdbCache, +}; diff --git a/packages/kbn-optimizer/src/node/integration_tests/cache.test.ts b/packages/kbn-babel-register/cache/lmdb_cache.test.ts similarity index 91% rename from packages/kbn-optimizer/src/node/integration_tests/cache.test.ts rename to packages/kbn-babel-register/cache/lmdb_cache.test.ts index 55a4a500359ef..d752e45879aec 100644 --- a/packages/kbn-optimizer/src/node/integration_tests/cache.test.ts +++ b/packages/kbn-babel-register/cache/lmdb_cache.test.ts @@ -11,7 +11,7 @@ import { Writable } from 'stream'; import del from 'del'; -import { Cache } from '../cache'; +import { LmdbCache } from './lmdb_cache'; const DIR = Path.resolve(__dirname, '../__tmp__/cache'); @@ -31,9 +31,9 @@ const makeTestLog = () => { return log; }; -const instances: Cache[] = []; -const makeCache = (...options: ConstructorParameters) => { - const instance = new Cache(...options); +const instances: LmdbCache[] = []; +const makeCache = (...options: ConstructorParameters) => { + const instance = new LmdbCache(...options); instances.push(instance); return instance; }; diff --git a/packages/kbn-babel-register/cache/no_cache_cache.js b/packages/kbn-babel-register/cache/no_cache_cache.js new file mode 100644 index 0000000000000..b4608e866d3b6 --- /dev/null +++ b/packages/kbn-babel-register/cache/no_cache_cache.js @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +/** @typedef {import('./types').Cache} CacheInterface */ + +/** + * @implements {CacheInterface} + */ +class NoCacheCache { + getCode() { + return undefined; + } + + getMtime() { + return undefined; + } + + getSourceMap() { + return undefined; + } + + async update() { + return undefined; + } + + close() {} +} + +module.exports = { + NoCacheCache, +}; diff --git a/packages/kbn-babel-register/cache/types.ts b/packages/kbn-babel-register/cache/types.ts new file mode 100644 index 0000000000000..6438662ae2d65 --- /dev/null +++ b/packages/kbn-babel-register/cache/types.ts @@ -0,0 +1,24 @@ +/* + * 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 { Writable } from 'stream'; + +export interface CacheConfig { + pathRoot: string; + dir: string; + prefix: string; + log?: Writable; +} + +export interface Cache { + getMtime(path: string): string | undefined; + getCode(path: string): string | undefined; + getSourceMap(path: string): object | undefined; + update(path: string, opts: { mtime: string; code: string; map?: any }): Promise; + close(): void; +} diff --git a/packages/kbn-babel-register/index.js b/packages/kbn-babel-register/index.js new file mode 100644 index 0000000000000..ba20e1f1b18f0 --- /dev/null +++ b/packages/kbn-babel-register/index.js @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +/* eslint-disable @kbn/eslint/require-license-header */ + +/** + * This module is based on @babel/register @ 9808d25, modified to use + * a more efficient caching implementation which writes to disk as + * the cache is built rather than keeping the whole cache in memory + * and then dumping it to disk when the process exits. + */ + +/** + * @notice + * MIT License + * + * Copyright (c) 2014-present Sebastian McKenzie and other contributors + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +const Path = require('path'); + +const { addHook } = require('pirates'); +const sourceMapSupport = require('source-map-support'); + +const { getCache } = require('./cache'); + +const { TRANSFORMS } = require('./transforms'); + +/** @typedef {RegExp | string} Matcher */ + +/** @type {Matcher[]} */ +const IGNORE_PATTERNS = [ + // ignore paths matching `/node_modules/{a}`, unless `a` is "@kbn" + /[\/\\]node_modules[\/\\](?!@kbn)([^\/\\]+)[\/\\]/, + + // ignore packages with "babel" in their names + /[\/\\]packages[\/\\]([^\/\\]+-)?babel(-[^\/\\]+)?[\/\\]/, + + // ignore paths matching `/canvas/canvas_plugin/` + /[\/\\]canvas[\/\\]canvas_plugin[\/\\]/, +]; + +/** + * + * @param {string} path + * @param {Matcher[] | undefined} matchers + */ +function match(path, matchers) { + if (!matchers) { + return false; + } + + return matchers.some((m) => { + if (typeof m === 'string') { + if (m.endsWith('/')) { + return path.startsWith(m); + } + + return path === m || path.startsWith(m + Path.sep); + } + + return m.test(path); + }); +} + +let installed = false; + +/** + * @param {{ ignore?: Matcher[], only?: Matcher[] } | undefined} options + */ +function install(options = undefined) { + if (installed) { + return; + } + + installed = true; + const cache = getCache(); + + sourceMapSupport.install({ + handleUncaughtExceptions: false, + environment: 'node', + // @ts-expect-error bad source-map-support types + retrieveSourceMap(path) { + const map = cache.getSourceMap(path); + return map ? { map, url: null } : null; + }, + }); + + const ignorePatterns = options?.ignore + ? [...options.ignore, ...IGNORE_PATTERNS] + : IGNORE_PATTERNS; + + addHook( + (code, path) => { + const ext = Path.extname(path); + const transform = (Object.hasOwn(TRANSFORMS, ext) && TRANSFORMS[ext]) || TRANSFORMS.default; + return transform(path, code, cache); + }, + { + exts: ['.js', '.ts', '.tsx', '.peggy'], + ignoreNodeModules: false, + matcher(path) { + if (options?.only && !match(path, options.only)) { + return false; + } + + return !match(path, ignorePatterns); + }, + } + ); +} + +module.exports = { install }; diff --git a/packages/kbn-optimizer/src/node/polyfill.ts b/packages/kbn-babel-register/install.js similarity index 93% rename from packages/kbn-optimizer/src/node/polyfill.ts rename to packages/kbn-babel-register/install.js index e84906bda1468..55a635e6184a8 100644 --- a/packages/kbn-optimizer/src/node/polyfill.ts +++ b/packages/kbn-babel-register/install.js @@ -6,4 +6,4 @@ * Side Public License, v 1. */ -import 'core-js/stable'; +require('.').install(); diff --git a/packages/kbn-type-summarizer/jest.config.js b/packages/kbn-babel-register/jest.config.js similarity index 89% rename from packages/kbn-type-summarizer/jest.config.js rename to packages/kbn-babel-register/jest.config.js index 76d7b935cfce7..03d9d66acdc08 100644 --- a/packages/kbn-type-summarizer/jest.config.js +++ b/packages/kbn-babel-register/jest.config.js @@ -9,5 +9,5 @@ module.exports = { preset: '@kbn/test/jest_node', rootDir: '../..', - roots: ['/packages/kbn-type-summarizer'], + roots: ['/packages/kbn-babel-register'], }; diff --git a/packages/kbn-babel-register/kibana.jsonc b/packages/kbn-babel-register/kibana.jsonc new file mode 100644 index 0000000000000..33dd730bc10b9 --- /dev/null +++ b/packages/kbn-babel-register/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/babel-register", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-babel-register/package.json b/packages/kbn-babel-register/package.json new file mode 100644 index 0000000000000..efca23be6801a --- /dev/null +++ b/packages/kbn-babel-register/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/babel-register", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-babel-register/transforms/babel.js b/packages/kbn-babel-register/transforms/babel.js new file mode 100644 index 0000000000000..a1557bd528896 --- /dev/null +++ b/packages/kbn-babel-register/transforms/babel.js @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +const Fs = require('fs'); + +const { transformCode } = require('@kbn/babel-transform'); + +/** @type {import('./types').Transform} */ +const babelTransform = (path, source, cache) => { + const mtime = `${Fs.statSync(path).mtimeMs}`; + + if (cache.getMtime(path) === mtime) { + const code = cache.getCode(path); + if (code) { + return code; + } + } + + const result = transformCode(path, source); + + cache.update(path, { + mtime, + code: result.code, + map: result.map, + }); + + return result.code; +}; + +module.exports = { babelTransform }; diff --git a/packages/kbn-babel-register/transforms/index.js b/packages/kbn-babel-register/transforms/index.js new file mode 100644 index 0000000000000..5b656eae913d1 --- /dev/null +++ b/packages/kbn-babel-register/transforms/index.js @@ -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. + */ + +const { peggyTransform } = require('./peggy'); +const { babelTransform } = require('./babel'); + +module.exports = { + TRANSFORMS: { + '.peggy': peggyTransform, + default: babelTransform, + }, +}; diff --git a/packages/kbn-optimizer/src/node/transforms/peggy.ts b/packages/kbn-babel-register/transforms/peggy.js similarity index 81% rename from packages/kbn-optimizer/src/node/transforms/peggy.ts rename to packages/kbn-babel-register/transforms/peggy.js index 23edb608ef560..b87676ca03bc3 100644 --- a/packages/kbn-optimizer/src/node/transforms/peggy.ts +++ b/packages/kbn-babel-register/transforms/peggy.js @@ -6,14 +6,13 @@ * Side Public License, v 1. */ -import Fs from 'fs'; -import Crypto from 'crypto'; +const Fs = require('fs'); +const Crypto = require('crypto'); -import * as Peggy from '@kbn/peggy'; +const Peggy = require('@kbn/peggy'); -import { Transform } from './transform'; - -export const peggyTransform: Transform = (path, source, cache) => { +/** @type {import('./types').Transform} */ +const peggyTransform = (path, source, cache) => { const config = Peggy.findConfigFile(path); const mtime = `${Fs.statSync(path).mtimeMs}`; const key = !config @@ -46,3 +45,5 @@ export const peggyTransform: Transform = (path, source, cache) => { return code; }; + +module.exports = { peggyTransform }; diff --git a/packages/kbn-optimizer/src/node/transforms/transform.ts b/packages/kbn-babel-register/transforms/types.ts similarity index 90% rename from packages/kbn-optimizer/src/node/transforms/transform.ts rename to packages/kbn-babel-register/transforms/types.ts index 49c76a8c14bd9..9d649f22ae627 100644 --- a/packages/kbn-optimizer/src/node/transforms/transform.ts +++ b/packages/kbn-babel-register/transforms/types.ts @@ -6,6 +6,6 @@ * Side Public License, v 1. */ -import { Cache } from '../cache'; +import type { Cache } from '../cache/types'; export type Transform = (path: string, source: string, cache: Cache) => string; diff --git a/packages/kbn-babel-register/tsconfig.json b/packages/kbn-babel-register/tsconfig.json new file mode 100644 index 0000000000000..5d46380d2ef76 --- /dev/null +++ b/packages/kbn-babel-register/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "checkJs": true, + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.js", + "**/*.ts", + ], + "kbn_references": [ + "@kbn/package-map", + "@kbn/repo-info", + "@kbn/babel-transform", + "@kbn/peggy", + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/packages/kbn-babel-transform/BUILD.bazel b/packages/kbn-babel-transform/BUILD.bazel new file mode 100644 index 0000000000000..eb292fe60390d --- /dev/null +++ b/packages/kbn-babel-transform/BUILD.bazel @@ -0,0 +1,33 @@ +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") + +SRCS = glob( + [ + "**/*.js", + ], + exclude = [ + "**/*.config.js", + "**/*.mock.*", + "**/*.test.*", + "**/*.stories.*", + "**/__snapshots__/**", + "**/integration_tests/**", + "**/mocks/**", + "**/scripts/**", + "**/storybook/**", + "**/test_fixtures/**", + "**/test_helpers/**", + ], +) + +BUNDLER_DEPS = [ + "@npm//piscina", + "@npm//@babel/core", +] + +js_library( + name = "kbn-babel-transform", + package_name = "@kbn/babel-transform", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, + visibility = ["//visibility:public"], +) diff --git a/packages/kbn-babel-transform/README.md b/packages/kbn-babel-transform/README.md new file mode 100644 index 0000000000000..8f14d5ab82ba9 --- /dev/null +++ b/packages/kbn-babel-transform/README.md @@ -0,0 +1,3 @@ +# @kbn/babel-transform + +Empty package generated by @kbn/generate diff --git a/packages/kbn-babel-transform/fast_async_transformer.js b/packages/kbn-babel-transform/fast_async_transformer.js new file mode 100644 index 0000000000000..fad1a1762ba4d --- /dev/null +++ b/packages/kbn-babel-transform/fast_async_transformer.js @@ -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 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. + */ + +const Piscina = require('piscina'); + +/** + * @param {import('./types').TransformConfig} config + * @param {(transform: import('./types').Transform) => Promise} block + * @returns {Promise} + */ +async function withFastAsyncTransform(config, block) { + /** @type {import('./types').WorkerData} */ + const workerData = { + config, + }; + + const pool = new Piscina({ + filename: require.resolve('./fast_async_worker.mjs'), + idleTimeout: 200, + workerData, + }); + + /** @type {import('./types').Transform} */ + const transform = async (path, source) => { + /** @type {import('./types').WorkerTask} */ + const task = { + path, + source, + }; + return await pool.run(task); + }; + + let success = false; + try { + await block(transform); + success = true; + } finally { + try { + await pool.destroy(); + } catch (error) { + if (success === true) { + console.error(`Failure closing piscina pool: ${error.stack}`); + } + } + } +} + +module.exports = { withFastAsyncTransform }; diff --git a/packages/kbn-type-summarizer/src/lib/type_summary/export_some_name.ts b/packages/kbn-babel-transform/fast_async_worker.mjs similarity index 50% rename from packages/kbn-type-summarizer/src/lib/type_summary/export_some_name.ts rename to packages/kbn-babel-transform/fast_async_worker.mjs index d8616d5ae4923..171c1151c4340 100644 --- a/packages/kbn-type-summarizer/src/lib/type_summary/export_some_name.ts +++ b/packages/kbn-babel-transform/fast_async_worker.mjs @@ -6,13 +6,16 @@ * Side Public License, v 1. */ -import { NamedExportDetails } from '../export_details'; +import { workerData } from 'piscina'; +import { transformCode } from './sync_transform.js'; + +/** @type {import('./types').WorkerData} */ +const { config } = workerData; /** - * Create an export statement for some name already in scope + * @param {import('./types').WorkerTask} param0 + * @returns {Promise} */ -export const exportSomeName = ({ name, typeOnly }: NamedExportDetails, localName: string) => { - return `export ${typeOnly ? `type ` : ''}{${ - name === localName ? name : `${localName} as ${name}` - }}\n`; +export default async ({ path, source }) => { + return transformCode(path, source, config); }; diff --git a/packages/kbn-type-summarizer-core/src/log/test_log.ts b/packages/kbn-babel-transform/index.js similarity index 52% rename from packages/kbn-type-summarizer-core/src/log/test_log.ts rename to packages/kbn-babel-transform/index.js index 8f05c8b609899..2ee140e1260ea 100644 --- a/packages/kbn-type-summarizer-core/src/log/test_log.ts +++ b/packages/kbn-babel-transform/index.js @@ -6,22 +6,10 @@ * Side Public License, v 1. */ -import { CliLog } from './cli_log'; +/** @typedef {import('./types').TransformConfig} TransformConfig */ -/** - * Logger which collects messages in memory for testing - */ -export class TestLog extends CliLog { - messages: string[] = []; - constructor() { - super( - 'debug', - { - write: (chunk) => { - this.messages.push(chunk); - }, - }, - false - ); - } -} +const { getBabelOptions } = require('./options'); +const { transformCode } = require('./sync_transform'); +const { withFastAsyncTransform } = require('./fast_async_transformer'); + +module.exports = { transformCode, getBabelOptions, withFastAsyncTransform }; diff --git a/packages/kbn-type-summarizer-cli/jest.config.js b/packages/kbn-babel-transform/jest.config.js similarity index 88% rename from packages/kbn-type-summarizer-cli/jest.config.js rename to packages/kbn-babel-transform/jest.config.js index bbf8a9ab4449c..78f6018332bdd 100644 --- a/packages/kbn-type-summarizer-cli/jest.config.js +++ b/packages/kbn-babel-transform/jest.config.js @@ -9,5 +9,5 @@ module.exports = { preset: '@kbn/test/jest_node', rootDir: '../..', - roots: ['/packages/kbn-type-summarizer-cli'], + roots: ['/packages/kbn-babel-transform'], }; diff --git a/packages/kbn-babel-transform/kibana.jsonc b/packages/kbn-babel-transform/kibana.jsonc new file mode 100644 index 0000000000000..72b7cf1a9cc82 --- /dev/null +++ b/packages/kbn-babel-transform/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/babel-transform", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-babel-transform/options.js b/packages/kbn-babel-transform/options.js new file mode 100644 index 0000000000000..c8c089f873da7 --- /dev/null +++ b/packages/kbn-babel-transform/options.js @@ -0,0 +1,39 @@ +/* + * 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. + */ + +const NODE_PRESET = require.resolve('@kbn/babel-preset/node_preset'); + +const cwd = process.cwd(); + +/** + * get the babel options for a specific path, path does not + * exist, utit just might vary based on the file extension + * + * @param {string | undefined} path + * @param {import('./types').TransformConfig} config + * @returns {import('@babel/core').TransformOptions} + */ +function getBabelOptions(path, config = {}) { + return { + filename: path, + presets: [ + [ + NODE_PRESET, + { + 'kibana/ignoredPkgIds': config.ignoredPkgIds, + }, + ], + ], + cwd, + babelrc: false, + sourceMaps: !config.disableSourceMaps, + ast: false, + }; +} + +module.exports = { getBabelOptions }; diff --git a/packages/kbn-babel-transform/package.json b/packages/kbn-babel-transform/package.json new file mode 100644 index 0000000000000..6756ec19c71e0 --- /dev/null +++ b/packages/kbn-babel-transform/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/babel-transform", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-babel-transform/sync_transform.js b/packages/kbn-babel-transform/sync_transform.js new file mode 100644 index 0000000000000..d96ec0d6e854f --- /dev/null +++ b/packages/kbn-babel-transform/sync_transform.js @@ -0,0 +1,38 @@ +/* + * 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. + */ + +const babel = require('@babel/core'); + +const { getBabelOptions } = require('./options'); + +/** + * transform the source code at the given path with babel + * using the standard configuration for the repository + * @param {string} path + * @param {string | undefined} source + * @param {import('./types').TransformConfig} config + * @returns + */ +function transformCode(path, source, config = {}) { + const options = getBabelOptions(path, config); + const result = + source === undefined + ? babel.transformFileSync(path, options) + : babel.transformSync(source, options); + + if (!result || !result.code) { + throw new Error(`babel failed to transpile [${path}]`); + } + + return { + code: result.code, + map: result.map, + }; +} + +module.exports = { transformCode }; diff --git a/packages/kbn-babel-transform/tsconfig.json b/packages/kbn-babel-transform/tsconfig.json new file mode 100644 index 0000000000000..d87e149617bd0 --- /dev/null +++ b/packages/kbn-babel-transform/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "checkJs": true, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.js", + "**/*.ts", + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/packages/kbn-babel-transform/types.ts b/packages/kbn-babel-transform/types.ts new file mode 100644 index 0000000000000..1ccb31d9ebb7f --- /dev/null +++ b/packages/kbn-babel-transform/types.ts @@ -0,0 +1,28 @@ +/* + * 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. + */ + +export interface TransformConfig { + disableSourceMaps?: boolean; + ignoredPkgIds?: string[]; +} + +export interface WorkerData { + config: TransformConfig; +} + +export interface WorkerTask { + path: string; + source: string; +} + +export interface WorkerResult { + code: string; + map?: any; +} + +export type Transform = (path: string, source: string) => Promise; diff --git a/packages/kbn-bazel-packages/BUILD.bazel b/packages/kbn-bazel-packages/BUILD.bazel deleted file mode 100644 index 83804b96e50be..0000000000000 --- a/packages/kbn-bazel-packages/BUILD.bazel +++ /dev/null @@ -1,126 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-bazel-packages" -PKG_REQUIRE_NAME = "@kbn/bazel-packages" - -SOURCE_FILES = glob( - [ - "**/*.js", - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS: -# eg. "@npm//@types/babel__core" -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - allow_js = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-bazel-packages/kibana.jsonc b/packages/kbn-bazel-packages/kibana.jsonc index fc373ccad73ad..b6e523cf1d5d7 100644 --- a/packages/kbn-bazel-packages/kibana.jsonc +++ b/packages/kbn-bazel-packages/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/bazel-packages", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-bazel-packages/package.json b/packages/kbn-bazel-packages/package.json index 32e4cdd4df279..4754d876b7aa4 100644 --- a/packages/kbn-bazel-packages/package.json +++ b/packages/kbn-bazel-packages/package.json @@ -2,7 +2,5 @@ "name": "@kbn/bazel-packages", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-bazel-packages/src/bazel_package.js b/packages/kbn-bazel-packages/src/bazel_package.js index 4a6d1b69bd8b2..bb5d42192bfee 100644 --- a/packages/kbn-bazel-packages/src/bazel_package.js +++ b/packages/kbn-bazel-packages/src/bazel_package.js @@ -8,21 +8,16 @@ const { inspect } = require('util'); const Path = require('path'); -const Fsp = require('fs/promises'); const { readPackageJson } = require('./parse_package_json'); const { readPackageManifest } = require('./parse_package_manifest'); -const BUILD_RULE_NAME = /(^|\s)name\s*=\s*"build"/; -const BUILD_TYPES_RULE_NAME = /(^|\s)name\s*=\s*"build_types"/; - /** * Representation of a Bazel Package in the Kibana repository * @class * @property {string} normalizedRepoRelativeDir * @property {import('./types').KibanaPackageManifest} manifest * @property {import('./types').ParsedPackageJson | undefined} pkg - * @property {string | undefined} buildBazelContent */ class BazelPackage { /** @@ -35,18 +30,10 @@ class BazelPackage { const manifest = readPackageManifest(path); const dir = Path.dirname(path); - let buildBazelContent; - try { - buildBazelContent = await Fsp.readFile(Path.resolve(dir, 'BUILD.bazel'), 'utf8'); - } catch (error) { - throw new Error(`unable to read BUILD.bazel file in [${dir}]: ${error.message}`); - } - return new BazelPackage( Path.relative(repoRoot, dir), manifest, - readPackageJson(Path.resolve(dir, 'package.json')), - buildBazelContent + readPackageJson(Path.resolve(dir, 'package.json')) ); } @@ -82,31 +69,11 @@ class BazelPackage { * Parsed package.json file from the package * @type {import('./types').ParsedPackageJson | undefined} */ - pkg, - /** - * Content of the BUILD.bazel file - * @type {string | undefined} - */ - buildBazelContent = undefined + pkg ) { this.normalizedRepoRelativeDir = normalizedRepoRelativeDir; this.manifest = manifest; this.pkg = pkg; - this.buildBazelContent = buildBazelContent; - } - - /** - * Returns true if the package includes a `:build` bazel rule - */ - hasBuildRule() { - return !!(this.buildBazelContent && BUILD_RULE_NAME.test(this.buildBazelContent)); - } - - /** - * Returns true if the package includes a `:build_types` bazel rule - */ - hasBuildTypesRule() { - return !!(this.buildBazelContent && BUILD_TYPES_RULE_NAME.test(this.buildBazelContent)); } /** diff --git a/packages/kbn-bazel-packages/src/bazel_package.test.ts b/packages/kbn-bazel-packages/src/bazel_package.test.ts deleted file mode 100644 index 202d4d96204e7..0000000000000 --- a/packages/kbn-bazel-packages/src/bazel_package.test.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 Fs from 'fs'; -import Path from 'path'; - -import { BazelPackage } from './bazel_package'; -import { KibanaPackageManifest, ParsedPackageJson } from './types'; - -const OWN_BAZEL_BUILD_FILE = Fs.readFileSync(Path.resolve(__dirname, '../BUILD.bazel'), 'utf8'); - -const pkgJson: ParsedPackageJson = { - name: 'foo', -}; -const manifest: KibanaPackageManifest = { - type: 'shared-common', - id: '@kbn/foo', - owner: ['@elastic/kibana-operations'], - runtimeDeps: [], - typeDeps: [], -}; - -describe('hasBuildRule()', () => { - it('returns true if there is a rule with the name "build"', () => { - const pkg = new BazelPackage('foo', manifest, pkgJson, OWN_BAZEL_BUILD_FILE); - expect(pkg.hasBuildRule()).toBe(true); - }); - - it('returns false if there is no rule with name "build"', () => { - const pkg = new BazelPackage('foo', manifest, pkgJson, ``); - expect(pkg.hasBuildRule()).toBe(false); - }); - - it('returns false if there is no BUILD.bazel file', () => { - const pkg = new BazelPackage('foo', manifest, pkgJson); - expect(pkg.hasBuildRule()).toBe(false); - }); -}); - -describe('hasBuildTypesRule()', () => { - it('returns true if there is a rule with the name "build_types"', () => { - const pkg = new BazelPackage('foo', manifest, pkgJson, OWN_BAZEL_BUILD_FILE); - expect(pkg.hasBuildTypesRule()).toBe(true); - }); - - it('returns false if there is no rule with name "build_types"', () => { - const pkg = new BazelPackage('foo', manifest, pkgJson, ``); - expect(pkg.hasBuildTypesRule()).toBe(false); - }); - - it('returns false if there is no BUILD.bazel file', () => { - const pkg = new BazelPackage('foo', manifest, pkgJson); - expect(pkg.hasBuildTypesRule()).toBe(false); - }); -}); diff --git a/packages/kbn-bazel-packages/src/parse_package_manifest.js b/packages/kbn-bazel-packages/src/parse_package_manifest.js index 97a209bb47383..cd7310d278127 100644 --- a/packages/kbn-bazel-packages/src/parse_package_manifest.js +++ b/packages/kbn-bazel-packages/src/parse_package_manifest.js @@ -122,8 +122,7 @@ function validatePackageManifest(parsed) { throw new Error('expected manifest root to be an object'); } - const { type, id, owner, typeDeps, runtimeDeps, devOnly, plugin, sharedBrowserBundle, ...extra } = - parsed; + const { type, id, owner, devOnly, plugin, sharedBrowserBundle, ...extra } = parsed; const extraKeys = Object.keys(extra); if (extraKeys.length) { @@ -149,14 +148,6 @@ function validatePackageManifest(parsed) { ); } - if (!isArrOfStrings(typeDeps)) { - throw err(`typeDeps`, typeDeps, `must be an array of strings`); - } - - if (!isArrOfStrings(runtimeDeps)) { - throw err(`runtimeDeps`, runtimeDeps, `must be an array of strings`); - } - if (devOnly !== undefined && typeof devOnly !== 'boolean') { throw err(`devOnly`, devOnly, `must be a boolean when defined`); } @@ -164,8 +155,6 @@ function validatePackageManifest(parsed) { const base = { id, owner: Array.isArray(owner) ? owner : [owner], - typeDeps, - runtimeDeps, devOnly, }; diff --git a/packages/kbn-bazel-packages/src/types.ts b/packages/kbn-bazel-packages/src/types.ts index 106d0bce3fe52..2ad621900d492 100644 --- a/packages/kbn-bazel-packages/src/types.ts +++ b/packages/kbn-bazel-packages/src/types.ts @@ -58,16 +58,6 @@ interface PackageManifestBaseFields { * These values will be used in the codeowners files for this package. */ owner: string[]; - /** - * Packages which are required for the source code in the package to be type- - * checked. This list is updated automatically by the package linter - */ - typeDeps: string[]; - /** - * Packages which are required for the source code of the package to run. This - * list is updated automatically by the package linter. - */ - runtimeDeps: string[]; /** * A devOnly package can be used by other devOnly packages (and only * other devOnly packages) and will never be included in the distributable diff --git a/packages/kbn-bazel-packages/tsconfig.json b/packages/kbn-bazel-packages/tsconfig.json index b58cd70b2c650..19c7e8d59f651 100644 --- a/packages/kbn-bazel-packages/tsconfig.json +++ b/packages/kbn-bazel-packages/tsconfig.json @@ -1,10 +1,8 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, "checkJs": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -13,5 +11,8 @@ "include": [ "**/*.ts", "**/*.js" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-bazel-runner/BUILD.bazel b/packages/kbn-bazel-runner/BUILD.bazel deleted file mode 100644 index 6d5f2efd9defd..0000000000000 --- a/packages/kbn-bazel-runner/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-bazel-runner" -PKG_REQUIRE_NAME = "@kbn/bazel-runner" - -SOURCE_FILES = glob( - [ - "**/*.js", - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//execa", - "@npm//chalk", - "@npm//rxjs", - "//packages/kbn-dev-utils", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//execa", - "@npm//chalk", - "@npm//rxjs", - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - allow_js = True, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-bazel-runner/kibana.jsonc b/packages/kbn-bazel-runner/kibana.jsonc index b313e99f5b9cc..893ce216fc14b 100644 --- a/packages/kbn-bazel-runner/kibana.jsonc +++ b/packages/kbn-bazel-runner/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/bazel-runner", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-bazel-runner/package.json b/packages/kbn-bazel-runner/package.json index bf34fa74f8a69..c847ffbf6e907 100644 --- a/packages/kbn-bazel-runner/package.json +++ b/packages/kbn-bazel-runner/package.json @@ -2,7 +2,5 @@ "name": "@kbn/bazel-runner", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-bazel-runner/tsconfig.json b/packages/kbn-bazel-runner/tsconfig.json index 6065463237d14..b19a1a8e8cdd9 100644 --- a/packages/kbn-bazel-runner/tsconfig.json +++ b/packages/kbn-bazel-runner/tsconfig.json @@ -1,10 +1,8 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, "checkJs": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -13,5 +11,10 @@ "include": [ "**/*.js", "**/*.ts" + ], + "kbn_references": [ + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-cases-components/BUILD.bazel b/packages/kbn-cases-components/BUILD.bazel deleted file mode 100644 index 742948f37f0f7..0000000000000 --- a/packages/kbn-cases-components/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-cases-components" -PKG_REQUIRE_NAME = "@kbn/cases-components" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-i18n", - "//packages/kbn-i18n-react", - "@npm//@elastic/eui", - "@npm//@testing-library/react", - "@npm//react", -] - -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "@npm//@elastic/eui", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@testing-library/react", - "@npm//tslib", - "@npm//@types/react", - "@npm//@testing-library/jest-dom", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-cases-components/kibana.jsonc b/packages/kbn-cases-components/kibana.jsonc index 6893f2473ed17..8fa02ddd80ebb 100644 --- a/packages/kbn-cases-components/kibana.jsonc +++ b/packages/kbn-cases-components/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/cases-components", - "owner": "@elastic/response-ops", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/response-ops" } diff --git a/packages/kbn-cases-components/package.json b/packages/kbn-cases-components/package.json index 09d1d72ea8366..392a1a79b2047 100644 --- a/packages/kbn-cases-components/package.json +++ b/packages/kbn-cases-components/package.json @@ -2,8 +2,5 @@ "name": "@kbn/cases-components", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-cases-components/tsconfig.json b/packages/kbn-cases-components/tsconfig.json index f48d8e4a548bf..3d7519541dc8d 100644 --- a/packages/kbn-cases-components/tsconfig.json +++ b/packages/kbn-cases-components/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,11 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-chart-icons/BUILD.bazel b/packages/kbn-chart-icons/BUILD.bazel deleted file mode 100644 index d1ef991c0befd..0000000000000 --- a/packages/kbn-chart-icons/BUILD.bazel +++ /dev/null @@ -1,142 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-chart-icons" -PKG_REQUIRE_NAME = "@kbn/chart-icons" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx" - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-ui-theme", - "@npm//react", - "@npm//@elastic/eui", - "@npm//@emotion/css", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-ui-theme:npm_module_types", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@elastic/eui", - "@npm//@emotion/css", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-chart-icons/kibana.jsonc b/packages/kbn-chart-icons/kibana.jsonc index 47e7394190fa7..95089968838f1 100644 --- a/packages/kbn-chart-icons/kibana.jsonc +++ b/packages/kbn-chart-icons/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/chart-icons", - "owner": "@elastic/kibana-visualizations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-visualizations" } diff --git a/packages/kbn-chart-icons/package.json b/packages/kbn-chart-icons/package.json index 901cc41588b06..eb2854aa56120 100644 --- a/packages/kbn-chart-icons/package.json +++ b/packages/kbn-chart-icons/package.json @@ -2,8 +2,5 @@ "name": "@kbn/chart-icons", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-chart-icons/tsconfig.json b/packages/kbn-chart-icons/tsconfig.json index aed4b0c3763dc..c4f38f3a8ec94 100644 --- a/packages/kbn-chart-icons/tsconfig.json +++ b/packages/kbn-chart-icons/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,11 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/ui-theme" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ci-stats-core/BUILD.bazel b/packages/kbn-ci-stats-core/BUILD.bazel deleted file mode 100644 index 6d68336effc27..0000000000000 --- a/packages/kbn-ci-stats-core/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ci-stats-core" -PKG_REQUIRE_NAME = "@kbn/ci-stats-core" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-tooling-log", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-some-dev-log:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ci-stats-core/kibana.jsonc b/packages/kbn-ci-stats-core/kibana.jsonc index 9140ec71ef912..f25ef3ae32e9c 100644 --- a/packages/kbn-ci-stats-core/kibana.jsonc +++ b/packages/kbn-ci-stats-core/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ci-stats-core", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-ci-stats-core/package.json b/packages/kbn-ci-stats-core/package.json index eb271889023a3..3b6f2c9c4c5db 100644 --- a/packages/kbn-ci-stats-core/package.json +++ b/packages/kbn-ci-stats-core/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ci-stats-core", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-ci-stats-core/tsconfig.json b/packages/kbn-ci-stats-core/tsconfig.json index 57c1dd1c94e0f..053fda6b37925 100644 --- a/packages/kbn-ci-stats-core/tsconfig.json +++ b/packages/kbn-ci-stats-core/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/some-dev-log" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ci-stats-performance-metrics/BUILD.bazel b/packages/kbn-ci-stats-performance-metrics/BUILD.bazel deleted file mode 100644 index 3b3340c0e6cb3..0000000000000 --- a/packages/kbn-ci-stats-performance-metrics/BUILD.bazel +++ /dev/null @@ -1,132 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ci-stats-performance-metrics" -PKG_REQUIRE_NAME = "@kbn/ci-stats-performance-metrics" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-dev-cli-errors", - "//packages/kbn-dev-cli-runner", - "//packages/kbn-test", - "//packages/kbn-tooling-log", - "//packages/kbn-ci-stats-reporter", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-dev-cli-errors:npm_module_types", - "//packages/kbn-dev-cli-runner:npm_module_types", - "//packages/kbn-test:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-ci-stats-reporter:npm_module_types", - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ci-stats-performance-metrics/kibana.jsonc b/packages/kbn-ci-stats-performance-metrics/kibana.jsonc index 3c4b4a440a98f..720a500b7f28e 100644 --- a/packages/kbn-ci-stats-performance-metrics/kibana.jsonc +++ b/packages/kbn-ci-stats-performance-metrics/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ci-stats-performance-metrics", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-ci-stats-performance-metrics/package.json b/packages/kbn-ci-stats-performance-metrics/package.json index 6d12a45cc4dbe..d12d40c45a545 100644 --- a/packages/kbn-ci-stats-performance-metrics/package.json +++ b/packages/kbn-ci-stats-performance-metrics/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ci-stats-performance-metrics", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-ci-stats-performance-metrics/tsconfig.json b/packages/kbn-ci-stats-performance-metrics/tsconfig.json index 57c1dd1c94e0f..9eb039a7e008e 100644 --- a/packages/kbn-ci-stats-performance-metrics/tsconfig.json +++ b/packages/kbn-ci-stats-performance-metrics/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-cli-errors", + "@kbn/dev-cli-runner", + "@kbn/tooling-log", + "@kbn/ci-stats-reporter" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ci-stats-reporter/BUILD.bazel b/packages/kbn-ci-stats-reporter/BUILD.bazel deleted file mode 100644 index 1a43bc14012ed..0000000000000 --- a/packages/kbn-ci-stats-reporter/BUILD.bazel +++ /dev/null @@ -1,131 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ci-stats-reporter" -PKG_REQUIRE_NAME = "@kbn/ci-stats-reporter" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//axios", - "@npm//execa", - "//packages/kbn-tooling-log", - "//packages/kbn-ci-stats-core", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//axios", - "@npm//execa", - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-ci-stats-core:npm_module_types", - "//packages/kbn-some-dev-log:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ci-stats-reporter/kibana.jsonc b/packages/kbn-ci-stats-reporter/kibana.jsonc index 9991f55a342f9..71eff10133dd3 100644 --- a/packages/kbn-ci-stats-reporter/kibana.jsonc +++ b/packages/kbn-ci-stats-reporter/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ci-stats-reporter", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-ci-stats-reporter/package.json b/packages/kbn-ci-stats-reporter/package.json index b16ac7db77dcf..52d6fcea7607d 100644 --- a/packages/kbn-ci-stats-reporter/package.json +++ b/packages/kbn-ci-stats-reporter/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ci-stats-reporter", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-ci-stats-reporter/src/ci_stats_reporter.ts b/packages/kbn-ci-stats-reporter/src/ci_stats_reporter.ts index f3c80eb3b22e6..0f469de2a4ebe 100644 --- a/packages/kbn-ci-stats-reporter/src/ci_stats_reporter.ts +++ b/packages/kbn-ci-stats-reporter/src/ci_stats_reporter.ts @@ -14,7 +14,7 @@ import crypto from 'crypto'; import execa from 'execa'; import Axios, { AxiosRequestConfig } from 'axios'; -import { REPO_ROOT, kibanaPackageJson } from '@kbn/utils'; +import { REPO_ROOT, kibanaPackageJson } from '@kbn/repo-info'; import { parseConfig, Config, CiStatsMetadata } from '@kbn/ci-stats-core'; import type { SomeDevLog } from '@kbn/some-dev-log'; diff --git a/packages/kbn-ci-stats-reporter/tsconfig.json b/packages/kbn-ci-stats-reporter/tsconfig.json index 57c1dd1c94e0f..e723397947260 100644 --- a/packages/kbn-ci-stats-reporter/tsconfig.json +++ b/packages/kbn-ci-stats-reporter/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/tooling-log", + "@kbn/ci-stats-core", + "@kbn/some-dev-log", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-cli-dev-mode/BUILD.bazel b/packages/kbn-cli-dev-mode/BUILD.bazel deleted file mode 100644 index 399ee78330c6a..0000000000000 --- a/packages/kbn-cli-dev-mode/BUILD.bazel +++ /dev/null @@ -1,144 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-cli-dev-mode" -PKG_REQUIRE_NAME = "@kbn/cli-dev-mode" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-config", - "//packages/kbn-config-schema", - "//packages/kbn-dev-utils", - "//packages/kbn-logging", - "//packages/kbn-optimizer", - "//packages/kbn-server-http-tools", - "//packages/kbn-std", - "//packages/kbn-utils", - "@npm//@hapi/h2o2", - "@npm//@hapi/hapi", - "@npm//argsplit", - "@npm//chokidar", - "@npm//elastic-apm-node", - "@npm//execa", - "@npm//getopts", - "@npm//lodash", - "@npm//moment", - "@npm//rxjs", - "@npm//supertest", -] - -TYPES_DEPS = [ - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-optimizer:npm_module_types", - "//packages/kbn-server-http-tools:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "@npm//argsplit", - "@npm//chokidar", - "@npm//elastic-apm-node", - "@npm//execa", - "@npm//getopts", - "@npm//moment", - "@npm//rxjs", - "@npm//supertest", - "@npm//@types/hapi__h2o2", - "@npm//@types/hapi__hapi", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/supertest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-cli-dev-mode/kibana.jsonc b/packages/kbn-cli-dev-mode/kibana.jsonc index 18c9cb7ba46a0..3c55d047b0efc 100644 --- a/packages/kbn-cli-dev-mode/kibana.jsonc +++ b/packages/kbn-cli-dev-mode/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/cli-dev-mode", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-cli-dev-mode/package.json b/packages/kbn-cli-dev-mode/package.json index f799551d83adc..08c4fc3598cd4 100644 --- a/packages/kbn-cli-dev-mode/package.json +++ b/packages/kbn-cli-dev-mode/package.json @@ -1,8 +1,6 @@ { "name": "@kbn/cli-dev-mode", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-cli-dev-mode/src/bootstrap.ts b/packages/kbn-cli-dev-mode/src/bootstrap.ts index 0428051b77e31..b4d7324ee7265 100644 --- a/packages/kbn-cli-dev-mode/src/bootstrap.ts +++ b/packages/kbn-cli-dev-mode/src/bootstrap.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { CliArgs, Env, RawConfigAdapter } from '@kbn/config'; import { CliDevMode } from './cli_dev_mode'; import { CliLog } from './log'; diff --git a/packages/kbn-cli-dev-mode/src/cli_dev_mode.test.ts b/packages/kbn-cli-dev-mode/src/cli_dev_mode.test.ts index 6dd96cbb0634b..675ffdc6faa79 100644 --- a/packages/kbn-cli-dev-mode/src/cli_dev_mode.test.ts +++ b/packages/kbn-cli-dev-mode/src/cli_dev_mode.test.ts @@ -10,7 +10,7 @@ import Path from 'path'; import * as Rx from 'rxjs'; import { createAbsolutePathSerializer, createAnyInstanceSerializer } from '@kbn/jest-serializers'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { TestLog } from './log'; import { CliDevMode, SomeCliArgs } from './cli_dev_mode'; diff --git a/packages/kbn-cli-dev-mode/src/cli_dev_mode.ts b/packages/kbn-cli-dev-mode/src/cli_dev_mode.ts index ccd3e61214463..3edfe5100f3e1 100644 --- a/packages/kbn-cli-dev-mode/src/cli_dev_mode.ts +++ b/packages/kbn-cli-dev-mode/src/cli_dev_mode.ts @@ -23,7 +23,7 @@ import { } from 'rxjs/operators'; import { CliArgs } from '@kbn/config'; import { CiStatsReporter } from '@kbn/ci-stats-reporter'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Log, CliLog } from './log'; import { Optimizer } from './optimizer'; diff --git a/packages/kbn-cli-dev-mode/src/get_server_watch_paths.test.ts b/packages/kbn-cli-dev-mode/src/get_server_watch_paths.test.ts index 7cf35cb908e30..3c20254add43a 100644 --- a/packages/kbn-cli-dev-mode/src/get_server_watch_paths.test.ts +++ b/packages/kbn-cli-dev-mode/src/get_server_watch_paths.test.ts @@ -9,7 +9,7 @@ import Path from 'path'; import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getServerWatchPaths } from './get_server_watch_paths'; @@ -33,6 +33,14 @@ it('produces the right watch and ignore list', () => { /src/plugins, /test/plugin_functional/plugins, /x-pack/plugins, + /packages, + /packages/shared-ux, + /packages/analytics, + /packages/analytics/shippers, + /packages/analytics/shippers/elastic_v3, + /packages/home, + /packages/content-management, + /x-pack/packages/ml, ] `); diff --git a/packages/kbn-cli-dev-mode/src/get_server_watch_paths.ts b/packages/kbn-cli-dev-mode/src/get_server_watch_paths.ts index 452186c5ce179..9c2795482c999 100644 --- a/packages/kbn-cli-dev-mode/src/get_server_watch_paths.ts +++ b/packages/kbn-cli-dev-mode/src/get_server_watch_paths.ts @@ -9,7 +9,8 @@ import Path from 'path'; import Fs from 'fs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; +import { BAZEL_PACKAGE_DIRS } from '@kbn/bazel-packages'; interface Options { pluginPaths: string[]; @@ -46,6 +47,7 @@ export function getServerWatchPaths({ pluginPaths, pluginScanDirs }: Options) { fromRoot('config'), ...pluginPaths, ...pluginScanDirs, + ...BAZEL_PACKAGE_DIRS, ].map((path) => Path.resolve(path)) ) ).filter((path) => Fs.existsSync(fromRoot(path))); diff --git a/packages/kbn-cli-dev-mode/tsconfig.json b/packages/kbn-cli-dev-mode/tsconfig.json index 60a261148e76b..b43017cae136b 100644 --- a/packages/kbn-cli-dev-mode/tsconfig.json +++ b/packages/kbn-cli-dev-mode/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,4 +10,20 @@ "include": [ "**/*.ts" ], + "kbn_references": [ + "@kbn/config", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/optimizer", + "@kbn/server-http-tools", + "@kbn/repo-info", + "@kbn/ci-stats-reporter", + "@kbn/jest-serializers", + "@kbn/stdio-dev-helpers", + "@kbn/bazel-packages", + "@kbn/tooling-log", + ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-coloring/BUILD.bazel b/packages/kbn-coloring/BUILD.bazel deleted file mode 100644 index 80a1f90ce918a..0000000000000 --- a/packages/kbn-coloring/BUILD.bazel +++ /dev/null @@ -1,155 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-coloring" -PKG_REQUIRE_NAME = "@kbn/coloring" - -SOURCE_FILES = glob( - [ - "**/*.scss", - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-i18n", - "//packages/kbn-i18n-react", - "//packages/kbn-interpreter", - "//packages/kbn-utility-types", - "//packages/kbn-shared-ux-utility", - "@npm//chroma-js", - "@npm//@elastic/eui", - "@npm//react-use", - "@npm//react", - "@npm//@emotion/react", - "@npm//@emotion/css", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-interpreter:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-shared-ux-utility:npm_module_types", - "@npm//@types/chroma-js", - "@npm//@types/react", - "@npm//@elastic/eui", - "@npm//react-use", - "@npm//@emotion/react", - "@npm//@emotion/css", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-coloring/kibana.jsonc b/packages/kbn-coloring/kibana.jsonc index 410698f345809..54d8787c964f5 100644 --- a/packages/kbn-coloring/kibana.jsonc +++ b/packages/kbn-coloring/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/coloring", - "owner": "@elastic/kibana-visualizations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-visualizations" } diff --git a/packages/kbn-coloring/package.json b/packages/kbn-coloring/package.json index df816c6e892b8..ec8092b3c6130 100644 --- a/packages/kbn-coloring/package.json +++ b/packages/kbn-coloring/package.json @@ -2,8 +2,5 @@ "name": "@kbn/coloring", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-coloring/tsconfig.json b/packages/kbn-coloring/tsconfig.json index e0b5f2c053305..54c068f8bd3b6 100644 --- a/packages/kbn-coloring/tsconfig.json +++ b/packages/kbn-coloring/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -15,5 +13,16 @@ "**/*.scss", "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/interpreter", + "@kbn/utility-types", + "@kbn/shared-ux-utility", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-config-mocks/BUILD.bazel b/packages/kbn-config-mocks/BUILD.bazel deleted file mode 100644 index 5389233b8419b..0000000000000 --- a/packages/kbn-config-mocks/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-config-mocks" -PKG_REQUIRE_NAME = "@kbn/config-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-config", - "//packages/kbn-utils", -] - -TYPES_DEPS = [ - "@npm//rxjs", - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-config-mocks/kibana.jsonc b/packages/kbn-config-mocks/kibana.jsonc index de1d13289e8ff..db330e90a69f1 100644 --- a/packages/kbn-config-mocks/kibana.jsonc +++ b/packages/kbn-config-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/config-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-config-mocks/package.json b/packages/kbn-config-mocks/package.json index c2bbafd095dbe..5a6e504f3e4ba 100644 --- a/packages/kbn-config-mocks/package.json +++ b/packages/kbn-config-mocks/package.json @@ -2,8 +2,6 @@ "name": "@kbn/config-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-config-mocks/src/env.mock.ts b/packages/kbn-config-mocks/src/env.mock.ts index dd244cbf9500d..405a043863a81 100644 --- a/packages/kbn-config-mocks/src/env.mock.ts +++ b/packages/kbn-config-mocks/src/env.mock.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Env, type RawPackageInfo, type EnvOptions } from '@kbn/config'; type DeepPartial = { diff --git a/packages/kbn-config-mocks/tsconfig.json b/packages/kbn-config-mocks/tsconfig.json index 57c1dd1c94e0f..2594906b1362f 100644 --- a/packages/kbn-config-mocks/tsconfig.json +++ b/packages/kbn-config-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config", + "@kbn/utility-types", + "@kbn/doc-links", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-config-schema/BUILD.bazel b/packages/kbn-config-schema/BUILD.bazel deleted file mode 100644 index 64734fa5f133b..0000000000000 --- a/packages/kbn-config-schema/BUILD.bazel +++ /dev/null @@ -1,116 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-config-schema" -PKG_REQUIRE_NAME = "@kbn/config-schema" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//joi", - "@npm//lodash", - "@npm//moment", - "@npm//tsd", - "@npm//type-detect", -] - -TYPES_DEPS = [ - "@npm//moment", - "@npm//tsd", - "@npm//@types/jest", - "@npm//joi", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/type-detect", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-config-schema/kibana.jsonc b/packages/kbn-config-schema/kibana.jsonc index c889555708675..9c936a1e3fa7f 100644 --- a/packages/kbn-config-schema/kibana.jsonc +++ b/packages/kbn-config-schema/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/config-schema", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-config-schema/package.json b/packages/kbn-config-schema/package.json index 4b58a5c559651..ee30ae58be3ca 100644 --- a/packages/kbn-config-schema/package.json +++ b/packages/kbn-config-schema/package.json @@ -1,9 +1,7 @@ { "name": "@kbn/config-schema", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", "author": "Kibana Core", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-config-schema/tsconfig.json b/packages/kbn-config-schema/tsconfig.json index 569d575c72bcb..ffb5b09f86995 100644 --- a/packages/kbn-config-schema/tsconfig.json +++ b/packages/kbn-config-schema/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": true, "types": [ "jest", @@ -12,5 +10,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-config/BUILD.bazel b/packages/kbn-config/BUILD.bazel deleted file mode 100644 index 69436dbcb4f6f..0000000000000 --- a/packages/kbn-config/BUILD.bazel +++ /dev/null @@ -1,135 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-config" -PKG_REQUIRE_NAME = "@kbn/config" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__fixtures__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-safer-lodash-set", - "//packages/kbn-config-schema", - "//packages/kbn-logging", - "//packages/kbn-logging-mocks", - "//packages/kbn-std", - "//packages/kbn-utility-types", - "//packages/kbn-i18n", - "//packages/kbn-plugin-discovery", - "//packages/kbn-doc-links", - "@npm//js-yaml", - "@npm//load-json-file", - "@npm//lodash", - "@npm//rxjs", - "@npm//type-detect", -] - -TYPES_DEPS = [ - "//packages/kbn-safer-lodash-set:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-plugin-discovery:npm_module_types", - "//packages/kbn-doc-links:npm_module_types", - "@npm//load-json-file", - "@npm//rxjs", - "@npm//@types/jest", - "@npm//@types/js-yaml", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/type-detect", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-config/kibana.jsonc b/packages/kbn-config/kibana.jsonc index e3bac638520bd..c6b4d1dc742c7 100644 --- a/packages/kbn-config/kibana.jsonc +++ b/packages/kbn-config/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/config", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-config/package.json b/packages/kbn-config/package.json index 11fabd92af291..fd26081187a8d 100644 --- a/packages/kbn-config/package.json +++ b/packages/kbn-config/package.json @@ -1,9 +1,7 @@ { "name": "@kbn/config", - "main": "./target_node/index.js", "version": "1.0.0", "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-config/tsconfig.json b/packages/kbn-config/tsconfig.json index 57c1dd1c94e0f..0b75e6b015b33 100644 --- a/packages/kbn-config/tsconfig.json +++ b/packages/kbn-config/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,19 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/safer-lodash-set", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/logging-mocks", + "@kbn/std", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/plugin-discovery", + "@kbn/doc-links" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-crypto-browser/BUILD.bazel b/packages/kbn-crypto-browser/BUILD.bazel deleted file mode 100644 index bf3b4e43ef362..0000000000000 --- a/packages/kbn-crypto-browser/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-crypto-browser" -PKG_REQUIRE_NAME = "@kbn/crypto-browser" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-crypto-browser/kibana.jsonc b/packages/kbn-crypto-browser/kibana.jsonc index 9faf12c5f05b0..7bcbc106f23aa 100644 --- a/packages/kbn-crypto-browser/kibana.jsonc +++ b/packages/kbn-crypto-browser/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/crypto-browser", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-crypto-browser/package.json b/packages/kbn-crypto-browser/package.json index 98bedc14e7b0b..6838d31a7a6ba 100644 --- a/packages/kbn-crypto-browser/package.json +++ b/packages/kbn-crypto-browser/package.json @@ -2,8 +2,5 @@ "name": "@kbn/crypto-browser", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-crypto-browser/tsconfig.json b/packages/kbn-crypto-browser/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-crypto-browser/tsconfig.json +++ b/packages/kbn-crypto-browser/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-crypto/BUILD.bazel b/packages/kbn-crypto/BUILD.bazel deleted file mode 100644 index fb3bcbcfbd060..0000000000000 --- a/packages/kbn-crypto/BUILD.bazel +++ /dev/null @@ -1,113 +0,0 @@ - -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-crypto" -PKG_REQUIRE_NAME = "@kbn/crypto" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__fixtures__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-utils", - "@npm//node-forge", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-utils:npm_module_types", - "@npm//@types/flot", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/node-forge", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-crypto/kibana.jsonc b/packages/kbn-crypto/kibana.jsonc index 21f9cbbc81c74..c5f3a3e89edcb 100644 --- a/packages/kbn-crypto/kibana.jsonc +++ b/packages/kbn-crypto/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/crypto", - "owner": "@elastic/kibana-security", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-security" } diff --git a/packages/kbn-crypto/package.json b/packages/kbn-crypto/package.json index 8fa6cd3c232fa..f190b6edbd63d 100644 --- a/packages/kbn-crypto/package.json +++ b/packages/kbn-crypto/package.json @@ -2,7 +2,5 @@ "name": "@kbn/crypto", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-crypto/tsconfig.json b/packages/kbn-crypto/tsconfig.json index f40f9a4ee1cfb..9fbc68fcba64f 100644 --- a/packages/kbn-crypto/tsconfig.json +++ b/packages/kbn-crypto/tsconfig.json @@ -1,13 +1,17 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" ] }, - "include": ["**/*.ts"] + "include": ["**/*.ts"], + "kbn_references": [ + "@kbn/dev-utils" + ], + "exclude": [ + "target/**/*", + ] } diff --git a/packages/kbn-cypress-config/README.md b/packages/kbn-cypress-config/README.md new file mode 100644 index 0000000000000..7c1d1012d2c35 --- /dev/null +++ b/packages/kbn-cypress-config/README.md @@ -0,0 +1,3 @@ +# @kbn/cypress-config + +Empty package generated by @kbn/generate diff --git a/packages/kbn-cypress-config/index.ts b/packages/kbn-cypress-config/index.ts new file mode 100644 index 0000000000000..eed0d71288115 --- /dev/null +++ b/packages/kbn-cypress-config/index.ts @@ -0,0 +1,58 @@ +/* + * 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 { defineConfig } from 'cypress'; +import wp from '@cypress/webpack-preprocessor'; + +export function defineCypressConfig(options?: Cypress.ConfigOptions) { + return defineConfig({ + ...options, + e2e: { + ...options?.e2e, + setupNodeEvents(on, config) { + on( + 'file:preprocessor', + wp({ + webpackOptions: { + resolve: { + extensions: ['.ts', '.tsx', '.js'], + }, + module: { + rules: [ + { + test: /\.(js|tsx?)$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + babelrc: false, + envName: 'development', + presets: [require.resolve('@kbn/babel-preset/webpack_preset')], + }, + }, + }, + ], + }, + }, + }) + ); + + const external = options?.e2e?.setupNodeEvents; + if (external) { + external((event: any, task: any) => { + if (event === 'file:preprocessor') { + throw new Error('file:preprocessor is defined in @kbn/cypress-config'); + } + + on(event, task); + }, config); + } + }, + }, + }); +} diff --git a/packages/kbn-type-summarizer-core/jest.config.js b/packages/kbn-cypress-config/jest.config.js similarity index 88% rename from packages/kbn-type-summarizer-core/jest.config.js rename to packages/kbn-cypress-config/jest.config.js index 1b0c701319036..80b50e63dd2ce 100644 --- a/packages/kbn-type-summarizer-core/jest.config.js +++ b/packages/kbn-cypress-config/jest.config.js @@ -9,5 +9,5 @@ module.exports = { preset: '@kbn/test/jest_node', rootDir: '../..', - roots: ['/packages/kbn-type-summarizer-core'], + roots: ['/packages/kbn-cypress-config'], }; diff --git a/packages/kbn-cypress-config/kibana.jsonc b/packages/kbn-cypress-config/kibana.jsonc new file mode 100644 index 0000000000000..ff6bf9e11adec --- /dev/null +++ b/packages/kbn-cypress-config/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/cypress-config", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-cypress-config/package.json b/packages/kbn-cypress-config/package.json new file mode 100644 index 0000000000000..e4dd2c17427dc --- /dev/null +++ b/packages/kbn-cypress-config/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/cypress-config", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-cypress-config/tsconfig.json b/packages/kbn-cypress-config/tsconfig.json new file mode 100644 index 0000000000000..2f9ddddbeea23 --- /dev/null +++ b/packages/kbn-cypress-config/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [] +} diff --git a/packages/kbn-datemath/BUILD.bazel b/packages/kbn-datemath/BUILD.bazel index 4e33d59d71823..cd0d792c43c9e 100644 --- a/packages/kbn-datemath/BUILD.bazel +++ b/packages/kbn-datemath/BUILD.bazel @@ -1,11 +1,6 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "ts_project", "pkg_npm", "pkg_npm_types") -PKG_DIRNAME = "kbn-datemath" -PKG_REQUIRE_NAME = "@kbn/datemath" - -SOURCE_FILES = glob( +SRCS = glob( [ "**/*.ts", ], @@ -24,82 +19,14 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -TYPES_DEPS = [ +BUNDLER_DEPS = [ "@npm//moment", - "@npm//@types/node", ] -RUNTIME_DEPS = TYPES_DEPS - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig" -) - js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + name = "kbn-datemath", + package_name = "@kbn/datemath", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, visibility = ["//visibility:public"], ) diff --git a/packages/kbn-datemath/kibana.jsonc b/packages/kbn-datemath/kibana.jsonc index 85522ceb11b9e..ab8ac6257044c 100644 --- a/packages/kbn-datemath/kibana.jsonc +++ b/packages/kbn-datemath/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/datemath", - "owner": "@elastic/kibana-app-services", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-app-services" } diff --git a/packages/kbn-datemath/package.json b/packages/kbn-datemath/package.json index 933620644ddd6..e6c119d7a1f88 100644 --- a/packages/kbn-datemath/package.json +++ b/packages/kbn-datemath/package.json @@ -3,9 +3,7 @@ "version": "5.0.4", "description": "elasticsearch datemath parser, used in kibana", "license": "Apache-2.0", - "main": "./target_node/index.js", "peerDependencies": { "moment": "^2.24.0" - }, - "types": "./target_types/index.d.ts" + } } \ No newline at end of file diff --git a/packages/kbn-datemath/tsconfig.json b/packages/kbn-datemath/tsconfig.json index b4316f3d2faac..2649fb45f0a42 100644 --- a/packages/kbn-datemath/tsconfig.json +++ b/packages/kbn-datemath/tsconfig.json @@ -1,14 +1,15 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node" ] }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-dev-cli-errors/BUILD.bazel b/packages/kbn-dev-cli-errors/BUILD.bazel deleted file mode 100644 index 07b095254a0a7..0000000000000 --- a/packages/kbn-dev-cli-errors/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-dev-cli-errors" -PKG_REQUIRE_NAME = "@kbn/dev-cli-errors" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-dev-cli-errors/kibana.jsonc b/packages/kbn-dev-cli-errors/kibana.jsonc index 66a63cdce3074..86fb72d378b19 100644 --- a/packages/kbn-dev-cli-errors/kibana.jsonc +++ b/packages/kbn-dev-cli-errors/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/dev-cli-errors", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-dev-cli-errors/package.json b/packages/kbn-dev-cli-errors/package.json index a40c9a3bccacc..da5f5ff1384db 100644 --- a/packages/kbn-dev-cli-errors/package.json +++ b/packages/kbn-dev-cli-errors/package.json @@ -2,7 +2,5 @@ "name": "@kbn/dev-cli-errors", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-dev-cli-errors/tsconfig.json b/packages/kbn-dev-cli-errors/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-dev-cli-errors/tsconfig.json +++ b/packages/kbn-dev-cli-errors/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-dev-cli-runner/BUILD.bazel b/packages/kbn-dev-cli-runner/BUILD.bazel deleted file mode 100644 index 65036f7070977..0000000000000 --- a/packages/kbn-dev-cli-runner/BUILD.bazel +++ /dev/null @@ -1,145 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-dev-cli-runner" -PKG_REQUIRE_NAME = "@kbn/dev-cli-runner" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//chalk", - "@npm//dedent", - "@npm//execa", - "@npm//exit-hook", - "@npm//getopts", - "@npm//normalize-path", - "//packages/kbn-dev-cli-errors", - "//packages/kbn-ci-stats-reporter", - "//packages/kbn-dev-proc-runner", - "//packages/kbn-tooling-log", - "//packages/kbn-utils", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/dedent", - "@npm//@types/normalize-path", - "@npm//chalk", - "@npm//execa", - "@npm//exit-hook", - "@npm//getopts", - "//packages/kbn-dev-cli-errors:npm_module_types", - "//packages/kbn-ci-stats-reporter:npm_module_types", - "//packages/kbn-dev-proc-runner:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/kbn-utils:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-dev-cli-runner/kibana.jsonc b/packages/kbn-dev-cli-runner/kibana.jsonc index 43e1b39ab17f2..0be99cae70fba 100644 --- a/packages/kbn-dev-cli-runner/kibana.jsonc +++ b/packages/kbn-dev-cli-runner/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/dev-cli-runner", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-dev-cli-runner/package.json b/packages/kbn-dev-cli-runner/package.json index 94e1769933ce0..1d6b6fe158e66 100644 --- a/packages/kbn-dev-cli-runner/package.json +++ b/packages/kbn-dev-cli-runner/package.json @@ -2,7 +2,5 @@ "name": "@kbn/dev-cli-runner", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-dev-cli-runner/src/metrics.ts b/packages/kbn-dev-cli-runner/src/metrics.ts index af9ee7478f637..c200a231926f4 100644 --- a/packages/kbn-dev-cli-runner/src/metrics.ts +++ b/packages/kbn-dev-cli-runner/src/metrics.ts @@ -9,7 +9,7 @@ import path from 'path'; import normalizePath from 'normalize-path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { CiStatsReporter } from '@kbn/ci-stats-reporter'; import { ToolingLog } from '@kbn/tooling-log'; diff --git a/packages/kbn-dev-cli-runner/tsconfig.json b/packages/kbn-dev-cli-runner/tsconfig.json index 57c1dd1c94e0f..326a02a92f2c6 100644 --- a/packages/kbn-dev-cli-runner/tsconfig.json +++ b/packages/kbn-dev-cli-runner/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-cli-errors", + "@kbn/ci-stats-reporter", + "@kbn/dev-proc-runner", + "@kbn/tooling-log", + "@kbn/jest-serializers", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-dev-proc-runner/BUILD.bazel b/packages/kbn-dev-proc-runner/BUILD.bazel deleted file mode 100644 index a2a344f41c35a..0000000000000 --- a/packages/kbn-dev-proc-runner/BUILD.bazel +++ /dev/null @@ -1,138 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-dev-proc-runner" -PKG_REQUIRE_NAME = "@kbn/dev-proc-runner" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//chalk", - "@npm//exit-hook", - "@npm//execa", - "@npm//rxjs", - "@npm//tree-kill", - "//packages/kbn-dev-cli-errors", - "//packages/kbn-tooling-log", - "//packages/kbn-stdio-dev-helpers", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//chalk", - "@npm//exit-hook", - "@npm//execa", - "@npm//rxjs", - "@npm//tree-kill", - "//packages/kbn-dev-cli-errors:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-stdio-dev-helpers:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-dev-proc-runner/kibana.jsonc b/packages/kbn-dev-proc-runner/kibana.jsonc index e028b7e7d795d..8f7a5ec071667 100644 --- a/packages/kbn-dev-proc-runner/kibana.jsonc +++ b/packages/kbn-dev-proc-runner/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/dev-proc-runner", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-dev-proc-runner/package.json b/packages/kbn-dev-proc-runner/package.json index bdc3c1793cf31..9052dda122970 100644 --- a/packages/kbn-dev-proc-runner/package.json +++ b/packages/kbn-dev-proc-runner/package.json @@ -2,7 +2,5 @@ "name": "@kbn/dev-proc-runner", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-dev-proc-runner/tsconfig.json b/packages/kbn-dev-proc-runner/tsconfig.json index 57c1dd1c94e0f..06d628ebfe73c 100644 --- a/packages/kbn-dev-proc-runner/tsconfig.json +++ b/packages/kbn-dev-proc-runner/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-cli-errors", + "@kbn/tooling-log", + "@kbn/stdio-dev-helpers" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-dev-utils/BUILD.bazel b/packages/kbn-dev-utils/BUILD.bazel deleted file mode 100644 index acdd6d9d4f557..0000000000000 --- a/packages/kbn-dev-utils/BUILD.bazel +++ /dev/null @@ -1,187 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-dev-utils" -PKG_REQUIRE_NAME = "@kbn/dev-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -filegroup( - name = "certs", - srcs = glob( - [ - "certs/**/*", - ], - exclude = [ - "**/README.md" - ], - ), -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-cli-runner", - "//packages/kbn-dev-cli-errors", - "//packages/kbn-dev-proc-runner", - "//packages/kbn-std", - "//packages/kbn-utils", - "//packages/kbn-plugin-discovery", - "//packages/kbn-tooling-log", - "//packages/kbn-stdio-dev-helpers", - "//packages/kbn-ci-stats-reporter", - "//packages/kbn-jest-serializers", - "//packages/kbn-kibana-manifest-schema", - "@npm//@babel/core", - "@npm//axios", - "@npm//chalk", - "@npm//cheerio", - "@npm//dedent", - "@npm//execa", - "@npm//exit-hook", - "@npm//getopts", - "@npm//jest-diff", - "@npm//load-json-file", - "@npm//markdown-it", - "@npm//normalize-path", - "@npm//prettier", - "@npm//rxjs", - "@npm//strip-ansi", - "@npm//sort-package-json", - "@npm//tar", - "@npm//tree-kill", - "@npm//vinyl", - "@npm//yauzl", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-cli-runner:npm_module_types", - "//packages/kbn-dev-cli-errors:npm_module_types", - "//packages/kbn-dev-proc-runner:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-plugin-discovery:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-stdio-dev-helpers:npm_module_types", - "//packages/kbn-ci-stats-reporter:npm_module_types", - "//packages/kbn-jest-serializers:npm_module_types", - "//packages/kbn-kibana-manifest-schema:npm_module_types", - "@npm//@babel/parser", - "@npm//@babel/types", - "@npm//@types/babel__core", - "@npm//@types/cheerio", - "@npm//@types/dedent", - "@npm//@types/flot", - "@npm//@types/jest", - "@npm//@types/markdown-it", - "@npm//@types/node", - "@npm//@types/normalize-path", - "@npm//@types/prettier", - "@npm//@types/react", - "@npm//@types/tar", - "@npm//@types/testing-library__jest-dom", - "@npm//@types/vinyl", - "@npm//@types/yauzl", - "@npm//axios", - "@npm//execa", - "@npm//exit-hook", - "@npm//getopts", - "@npm//jest-diff", - "@npm//rxjs", - "@npm//sort-package-json", - "@npm//strip-ansi", - "@npm//tree-kill", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS + [":certs"], - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-dev-utils/index.ts b/packages/kbn-dev-utils/index.ts index d13e1c1f745bd..c1ee96a2a35ab 100644 --- a/packages/kbn-dev-utils/index.ts +++ b/packages/kbn-dev-utils/index.ts @@ -23,6 +23,5 @@ export * from './src/axios'; export * from './src/ship_ci_stats_cli'; export * from './src/plugin_list'; export * from './src/streams'; -export * from './src/babel'; export * from './src/extract'; export * from './src/diff_strings'; diff --git a/packages/kbn-dev-utils/kibana.jsonc b/packages/kbn-dev-utils/kibana.jsonc index 7a9e4e644dcf0..7cb93b0f5a1d4 100644 --- a/packages/kbn-dev-utils/kibana.jsonc +++ b/packages/kbn-dev-utils/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/dev-utils", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-dev-utils/package.json b/packages/kbn-dev-utils/package.json index b7c8416c7b1a9..ee5b938ed8630 100644 --- a/packages/kbn-dev-utils/package.json +++ b/packages/kbn-dev-utils/package.json @@ -2,7 +2,5 @@ "name": "@kbn/dev-utils", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-dev-utils/src/plugin_list/discover_plugins.ts b/packages/kbn-dev-utils/src/plugin_list/discover_plugins.ts index 5f0b623b29b18..f86d535e92914 100644 --- a/packages/kbn-dev-utils/src/plugin_list/discover_plugins.ts +++ b/packages/kbn-dev-utils/src/plugin_list/discover_plugins.ts @@ -11,7 +11,7 @@ import Fs from 'fs'; import MarkdownIt from 'markdown-it'; import cheerio from 'cheerio'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { simpleKibanaPlatformPluginDiscovery } from '@kbn/plugin-discovery'; import { extractAsciidocInfo } from './extract_asciidoc_info'; diff --git a/packages/kbn-dev-utils/src/plugin_list/generate_plugin_list.ts b/packages/kbn-dev-utils/src/plugin_list/generate_plugin_list.ts index 127e2a9904a4f..a0562b4ab846c 100644 --- a/packages/kbn-dev-utils/src/plugin_list/generate_plugin_list.ts +++ b/packages/kbn-dev-utils/src/plugin_list/generate_plugin_list.ts @@ -9,7 +9,7 @@ import Path from 'path'; import normalizePath from 'normalize-path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Plugins } from './discover_plugins'; diff --git a/packages/kbn-dev-utils/src/plugin_list/run_plugin_list_cli.ts b/packages/kbn-dev-utils/src/plugin_list/run_plugin_list_cli.ts index c03658cad8e2b..69bcd3389bf1c 100644 --- a/packages/kbn-dev-utils/src/plugin_list/run_plugin_list_cli.ts +++ b/packages/kbn-dev-utils/src/plugin_list/run_plugin_list_cli.ts @@ -8,7 +8,7 @@ import Path from 'path'; import Fs from 'fs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { run } from '@kbn/dev-cli-runner'; import { discoverPlugins } from './discover_plugins'; diff --git a/packages/kbn-dev-utils/src/precommit_hook/cli.ts b/packages/kbn-dev-utils/src/precommit_hook/cli.ts index b0d6e57eee623..c3b1a62fc33f8 100644 --- a/packages/kbn-dev-utils/src/precommit_hook/cli.ts +++ b/packages/kbn-dev-utils/src/precommit_hook/cli.ts @@ -9,7 +9,7 @@ import Path from 'path'; import { chmod, writeFile } from 'fs'; import { promisify } from 'util'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { run } from '@kbn/dev-cli-runner'; import { createFailError } from '@kbn/dev-cli-errors'; diff --git a/packages/kbn-dev-utils/src/precommit_hook/git_utils.ts b/packages/kbn-dev-utils/src/precommit_hook/git_utils.ts index 6ea1b12cbf5d5..ce6743ecbded8 100644 --- a/packages/kbn-dev-utils/src/precommit_hook/git_utils.ts +++ b/packages/kbn-dev-utils/src/precommit_hook/git_utils.ts @@ -8,7 +8,7 @@ import execa from 'execa'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; // Retrieves the correct location for the .git dir for // every git setup (including git worktree) diff --git a/packages/kbn-dev-utils/tsconfig.json b/packages/kbn-dev-utils/tsconfig.json index 57c1dd1c94e0f..a4ad2f1db3a71 100644 --- a/packages/kbn-dev-utils/tsconfig.json +++ b/packages/kbn-dev-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/plugin-discovery", + "@kbn/ci-stats-reporter", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-doc-links/BUILD.bazel b/packages/kbn-doc-links/BUILD.bazel deleted file mode 100644 index af0668f181897..0000000000000 --- a/packages/kbn-doc-links/BUILD.bazel +++ /dev/null @@ -1,116 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-doc-links" -PKG_REQUIRE_NAME = "@kbn/doc-links" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__fixtures__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-std", -] - -TYPES_DEPS = [ - "//packages/kbn-std:npm_module_types", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-doc-links/kibana.jsonc b/packages/kbn-doc-links/kibana.jsonc index a3af199f6c32e..3fed0ac08449c 100644 --- a/packages/kbn-doc-links/kibana.jsonc +++ b/packages/kbn-doc-links/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/doc-links", - "owner": "@elastic/kibana-docs", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-docs" } diff --git a/packages/kbn-doc-links/package.json b/packages/kbn-doc-links/package.json index f041cf1b37dd4..169bc7043e264 100644 --- a/packages/kbn-doc-links/package.json +++ b/packages/kbn-doc-links/package.json @@ -1,9 +1,6 @@ { "name": "@kbn/doc-links", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-doc-links/tsconfig.json b/packages/kbn-doc-links/tsconfig.json index 60a261148e76b..df789404c43f2 100644 --- a/packages/kbn-doc-links/tsconfig.json +++ b/packages/kbn-doc-links/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,4 +10,10 @@ "include": [ "**/*.ts" ], + "kbn_references": [ + "@kbn/std" + ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-docs-utils/BUILD.bazel b/packages/kbn-docs-utils/BUILD.bazel deleted file mode 100644 index 6add8283f9648..0000000000000 --- a/packages/kbn-docs-utils/BUILD.bazel +++ /dev/null @@ -1,120 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-docs-utils" -PKG_REQUIRE_NAME = "@kbn/docs-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__fixtures__/**", - "**/__snapshots__/**", - "**/snapshots/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-plugin-discovery", - "//packages/kbn-dev-utils", - "//packages/kbn-utils", - "@npm//dedent", - "@npm//ts-morph", -] - -TYPES_DEPS = [ - "//packages/kbn-plugin-discovery:npm_module_types", - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "@npm//ts-morph", - "@npm//@types/dedent", - "@npm//@types/jest", - "@npm//@types/js-yaml", - "@npm//@types/node", - "@npm//globby", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-docs-utils/kibana.jsonc b/packages/kbn-docs-utils/kibana.jsonc index 5e0ea2367d531..9700d3341a77a 100644 --- a/packages/kbn-docs-utils/kibana.jsonc +++ b/packages/kbn-docs-utils/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/docs-utils", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-docs-utils/package.json b/packages/kbn-docs-utils/package.json index 7f0c60985ad62..7449ac47a234c 100644 --- a/packages/kbn-docs-utils/package.json +++ b/packages/kbn-docs-utils/package.json @@ -2,7 +2,5 @@ "name": "@kbn/docs-utils", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": "true", - "main": "target_node/index.js", - "types": "./target_types/index.d.ts" + "private": "true" } \ No newline at end of file diff --git a/packages/kbn-docs-utils/src/api_docs/build_api_declarations/extract_import_refs.test.ts b/packages/kbn-docs-utils/src/api_docs/build_api_declarations/extract_import_refs.test.ts index 04a5101360a98..22d4d021198c4 100644 --- a/packages/kbn-docs-utils/src/api_docs/build_api_declarations/extract_import_refs.test.ts +++ b/packages/kbn-docs-utils/src/api_docs/build_api_declarations/extract_import_refs.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; import { getPluginApiDocId } from '../utils'; import { extractImportReferences } from './extract_import_refs'; diff --git a/packages/kbn-docs-utils/src/api_docs/build_api_declarations/utils.ts b/packages/kbn-docs-utils/src/api_docs/build_api_declarations/utils.ts index 76328a314b066..eca5f4598bfb6 100644 --- a/packages/kbn-docs-utils/src/api_docs/build_api_declarations/utils.ts +++ b/packages/kbn-docs-utils/src/api_docs/build_api_declarations/utils.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ParameterDeclaration, ClassMemberTypes, Node } from 'ts-morph'; import { BuildApiDecOpts } from './types'; import { isNamedNode } from '../tsmorph_utils'; diff --git a/packages/kbn-docs-utils/src/api_docs/build_api_docs_cli.ts b/packages/kbn-docs-utils/src/api_docs/build_api_docs_cli.ts index 97a94c469b0a5..e76fffe77ad29 100644 --- a/packages/kbn-docs-utils/src/api_docs/build_api_docs_cli.ts +++ b/packages/kbn-docs-utils/src/api_docs/build_api_docs_cli.ts @@ -13,7 +13,7 @@ import Path from 'path'; import { run } from '@kbn/dev-cli-runner'; import { createFlagError } from '@kbn/dev-cli-errors'; import { CiStatsReporter } from '@kbn/ci-stats-reporter'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Project } from 'ts-morph'; import { writePluginDocs } from './mdx/write_plugin_mdx_docs'; diff --git a/packages/kbn-docs-utils/src/api_docs/find_plugins.ts b/packages/kbn-docs-utils/src/api_docs/find_plugins.ts index 6ba699d1466d0..a6f0a75cfe7a5 100644 --- a/packages/kbn-docs-utils/src/api_docs/find_plugins.ts +++ b/packages/kbn-docs-utils/src/api_docs/find_plugins.ts @@ -12,7 +12,7 @@ import globby from 'globby'; import loadJsonFile from 'load-json-file'; import { getPluginSearchPaths, simpleKibanaPlatformPluginDiscovery } from '@kbn/plugin-discovery'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ApiScope, PluginOrPackage } from './types'; export function findPlugins(): PluginOrPackage[] { diff --git a/packages/kbn-docs-utils/src/api_docs/trim_deleted_docs_from_nav.ts b/packages/kbn-docs-utils/src/api_docs/trim_deleted_docs_from_nav.ts index 2aa7dbf58f6f8..c6d9edbd483aa 100644 --- a/packages/kbn-docs-utils/src/api_docs/trim_deleted_docs_from_nav.ts +++ b/packages/kbn-docs-utils/src/api_docs/trim_deleted_docs_from_nav.ts @@ -9,7 +9,7 @@ import Path from 'path'; import Fsp from 'fs/promises'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; import { getAllDocFileIds } from './mdx/get_all_doc_file_ids'; diff --git a/packages/kbn-docs-utils/tsconfig.json b/packages/kbn-docs-utils/tsconfig.json index 884ead81c781f..8d8d715372cd7 100644 --- a/packages/kbn-docs-utils/tsconfig.json +++ b/packages/kbn-docs-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -13,6 +11,16 @@ "**/*.ts", ], "exclude": [ - "**/__fixtures__/**" + "**/__fixtures__/**", + "target/**/*", + ], + "kbn_references": [ + "@kbn/plugin-discovery", + "@kbn/tooling-log", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/ci-stats-reporter", + "@kbn/repo-info", + "@kbn/std", ] } diff --git a/packages/kbn-ebt-tools/BUILD.bazel b/packages/kbn-ebt-tools/BUILD.bazel deleted file mode 100644 index 07908d50346e8..0000000000000 --- a/packages/kbn-ebt-tools/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ebt-tools" -PKG_REQUIRE_NAME = "@kbn/ebt-tools" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [] - -TYPES_DEPS = [ - "//packages/analytics/client:npm_module_types", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ebt-tools/kibana.jsonc b/packages/kbn-ebt-tools/kibana.jsonc index f9fde6d48f046..8c063d20246e8 100644 --- a/packages/kbn-ebt-tools/kibana.jsonc +++ b/packages/kbn-ebt-tools/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ebt-tools", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-ebt-tools/package.json b/packages/kbn-ebt-tools/package.json index c3c73a542d016..39d718e0783b5 100644 --- a/packages/kbn-ebt-tools/package.json +++ b/packages/kbn-ebt-tools/package.json @@ -2,8 +2,5 @@ "name": "@kbn/ebt-tools", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-ebt-tools/tsconfig.json b/packages/kbn-ebt-tools/tsconfig.json index 57c1dd1c94e0f..278801bc74c53 100644 --- a/packages/kbn-ebt-tools/tsconfig.json +++ b/packages/kbn-ebt-tools/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/analytics-client", + "@kbn/logging-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ecs/BUILD.bazel b/packages/kbn-ecs/BUILD.bazel deleted file mode 100644 index c6701f62915cf..0000000000000 --- a/packages/kbn-ecs/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ecs" -PKG_REQUIRE_NAME = "@kbn/ecs" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ecs/kibana.jsonc b/packages/kbn-ecs/kibana.jsonc index 34d275e79c10a..380147ef4b203 100644 --- a/packages/kbn-ecs/kibana.jsonc +++ b/packages/kbn-ecs/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ecs", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-ecs/package.json b/packages/kbn-ecs/package.json index 9a00ecaa5c178..6b925c18388a3 100644 --- a/packages/kbn-ecs/package.json +++ b/packages/kbn-ecs/package.json @@ -3,7 +3,5 @@ "version": "1.0.0", "private": true, "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-ecs/tsconfig.json b/packages/kbn-ecs/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-ecs/tsconfig.json +++ b/packages/kbn-ecs/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-es-archiver/BUILD.bazel b/packages/kbn-es-archiver/BUILD.bazel deleted file mode 100644 index 8358212331445..0000000000000 --- a/packages/kbn-es-archiver/BUILD.bazel +++ /dev/null @@ -1,128 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-es-archiver" -PKG_REQUIRE_NAME = "@kbn/es-archiver" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__fixtures__", - "**/__mocks__", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-utils", - "//packages/kbn-test", - "//packages/kbn-utils", - "@npm//@elastic/elasticsearch", - "@npm//aggregate-error", - "@npm//chance", - "@npm//globby", - "@npm//json-stable-stringify", - "@npm//lodash", - "@npm//sinon", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-test:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//aggregate-error", - "@npm//globby", - "@npm//@types/chance", - "@npm//@types/jest", - "@npm//@types/json-stable-stringify", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/sinon", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-es-archiver/kibana.jsonc b/packages/kbn-es-archiver/kibana.jsonc index cc2b4530ea552..d8cc353c56356 100644 --- a/packages/kbn-es-archiver/kibana.jsonc +++ b/packages/kbn-es-archiver/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/es-archiver", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-es-archiver/package.json b/packages/kbn-es-archiver/package.json index 5fd04d0f1b693..13346ad4f8346 100644 --- a/packages/kbn-es-archiver/package.json +++ b/packages/kbn-es-archiver/package.json @@ -2,7 +2,5 @@ "name": "@kbn/es-archiver", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": "true", - "main": "target_node/index.js", - "types": "./target_types/index.d.ts" -} + "private": "true" +} \ No newline at end of file diff --git a/packages/kbn-es-archiver/src/actions/load.ts b/packages/kbn-es-archiver/src/actions/load.ts index 82462a9421520..b6a4c46d42743 100644 --- a/packages/kbn-es-archiver/src/actions/load.ts +++ b/packages/kbn-es-archiver/src/actions/load.ts @@ -10,8 +10,8 @@ import { resolve, relative } from 'path'; import { createReadStream } from 'fs'; import { Readable } from 'stream'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; -import { KbnClient } from '@kbn/test'; +import { REPO_ROOT } from '@kbn/repo-info'; +import type { KbnClient } from '@kbn/test'; import type { Client } from '@elastic/elasticsearch'; import { createPromiseFromStreams, concatStreamProviders } from '@kbn/utils'; import { ES_CLIENT_HEADERS } from '../client_headers'; diff --git a/packages/kbn-es-archiver/src/actions/rebuild_all.ts b/packages/kbn-es-archiver/src/actions/rebuild_all.ts index 74062125fd795..ac5b75336c61b 100644 --- a/packages/kbn-es-archiver/src/actions/rebuild_all.ts +++ b/packages/kbn-es-archiver/src/actions/rebuild_all.ts @@ -11,7 +11,8 @@ import { Stats, createReadStream, createWriteStream } from 'fs'; import { stat, rename } from 'fs/promises'; import { Readable, Writable } from 'stream'; import { ToolingLog } from '@kbn/tooling-log'; -import { createPromiseFromStreams, REPO_ROOT } from '@kbn/utils'; +import { createPromiseFromStreams } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { prioritizeMappings, readDirectory, diff --git a/packages/kbn-es-archiver/src/actions/save.ts b/packages/kbn-es-archiver/src/actions/save.ts index 9fcbe45946eb7..b0a7c8153eeb9 100644 --- a/packages/kbn-es-archiver/src/actions/save.ts +++ b/packages/kbn-es-archiver/src/actions/save.ts @@ -11,7 +11,8 @@ import { createWriteStream, mkdirSync } from 'fs'; import { Readable, Writable } from 'stream'; import type { Client } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/tooling-log'; -import { createListStream, createPromiseFromStreams, REPO_ROOT } from '@kbn/utils'; +import { createListStream, createPromiseFromStreams } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createStats, diff --git a/packages/kbn-es-archiver/src/actions/unload.ts b/packages/kbn-es-archiver/src/actions/unload.ts index e564bcbb1a703..f8e3118a9a04b 100644 --- a/packages/kbn-es-archiver/src/actions/unload.ts +++ b/packages/kbn-es-archiver/src/actions/unload.ts @@ -11,8 +11,9 @@ import { createReadStream } from 'fs'; import { Readable, Writable } from 'stream'; import type { Client } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/tooling-log'; -import { KbnClient } from '@kbn/test'; -import { createPromiseFromStreams, REPO_ROOT } from '@kbn/utils'; +import type { KbnClient } from '@kbn/test'; +import { createPromiseFromStreams } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { isGzip, diff --git a/packages/kbn-es-archiver/src/es_archiver.ts b/packages/kbn-es-archiver/src/es_archiver.ts index 0a9937ca3d9b4..65de41148d8db 100644 --- a/packages/kbn-es-archiver/src/es_archiver.ts +++ b/packages/kbn-es-archiver/src/es_archiver.ts @@ -11,7 +11,7 @@ import Path from 'path'; import type { Client } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { KbnClient } from '@kbn/test'; import { diff --git a/packages/kbn-es-archiver/src/lib/archives/parse.test.ts b/packages/kbn-es-archiver/src/lib/archives/parse.test.ts index ae8fc7216ba27..40ac21d666a98 100644 --- a/packages/kbn-es-archiver/src/lib/archives/parse.test.ts +++ b/packages/kbn-es-archiver/src/lib/archives/parse.test.ts @@ -9,12 +9,8 @@ import Stream, { PassThrough, Readable, Writable, Transform } from 'stream'; import { createGzip } from 'zlib'; -import { - createConcatStream, - createListStream, - createPromiseFromStreams, - kibanaPackageJson, -} from '@kbn/utils'; +import { createConcatStream, createListStream, createPromiseFromStreams } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { createParseArchiveStreams } from './parse'; diff --git a/packages/kbn-es-archiver/src/lib/archives/parse.ts b/packages/kbn-es-archiver/src/lib/archives/parse.ts index a2657fbd661ad..d84846f3503d0 100644 --- a/packages/kbn-es-archiver/src/lib/archives/parse.ts +++ b/packages/kbn-es-archiver/src/lib/archives/parse.ts @@ -13,8 +13,8 @@ import { createSplitStream, createReplaceStream, createMapStream, - kibanaPackageJson, } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { RECORD_SEPARATOR } from './constants'; diff --git a/packages/kbn-es-archiver/tsconfig.json b/packages/kbn-es-archiver/tsconfig.json index 57c1dd1c94e0f..0301480548fc7 100644 --- a/packages/kbn-es-archiver/tsconfig.json +++ b/packages/kbn-es-archiver/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,18 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-utils", + "@kbn/test", + "@kbn/tooling-log", + "@kbn/utils", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/repo-info", + "@kbn/jest-serializers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-es-errors/BUILD.bazel b/packages/kbn-es-errors/BUILD.bazel deleted file mode 100644 index 0da72c1c13103..0000000000000 --- a/packages/kbn-es-errors/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-es-errors" -PKG_REQUIRE_NAME = "@kbn/es-errors" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//@elastic/elasticsearch" -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@elastic/elasticsearch" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-es-errors/kibana.jsonc b/packages/kbn-es-errors/kibana.jsonc index 3a121caaf95cc..aacc61f02c28d 100644 --- a/packages/kbn-es-errors/kibana.jsonc +++ b/packages/kbn-es-errors/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/es-errors", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-es-errors/package.json b/packages/kbn-es-errors/package.json index 91cd12e91b809..cb1314e45e6bc 100644 --- a/packages/kbn-es-errors/package.json +++ b/packages/kbn-es-errors/package.json @@ -2,8 +2,6 @@ "name": "@kbn/es-errors", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-es-errors/tsconfig.json b/packages/kbn-es-errors/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-es-errors/tsconfig.json +++ b/packages/kbn-es-errors/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-es-query/BUILD.bazel b/packages/kbn-es-query/BUILD.bazel index 95e7dcdcbe3cc..8d064f3e1262a 100644 --- a/packages/kbn-es-query/BUILD.bazel +++ b/packages/kbn-es-query/BUILD.bazel @@ -1,11 +1,6 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-es-query" -PKG_REQUIRE_NAME = "@kbn/es-query" - -SOURCE_FILES = glob( +SRCS = glob( [ "**/*.ts", "**/grammar.peggy.config.json", @@ -28,20 +23,7 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-utility-types", +BUNDLER_DEPS = [ "//packages/kbn-i18n", "@npm//@elastic/elasticsearch", "@npm//load-json-file", @@ -49,90 +31,10 @@ RUNTIME_DEPS = [ "@npm//moment-timezone", ] -TYPES_DEPS = [ - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-ambient-common-types:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//moment-timezone", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + name = "kbn-es-query", + package_name = "@kbn/es-query", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, visibility = ["//visibility:public"], ) diff --git a/packages/kbn-es-query/kibana.jsonc b/packages/kbn-es-query/kibana.jsonc index 2bd959eec53eb..727aad02554f6 100644 --- a/packages/kbn-es-query/kibana.jsonc +++ b/packages/kbn-es-query/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/es-query", - "owner": "@elastic/kibana-app-services", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-app-services" } diff --git a/packages/kbn-es-query/package.json b/packages/kbn-es-query/package.json index 026ceae873e39..7894764af2d87 100644 --- a/packages/kbn-es-query/package.json +++ b/packages/kbn-es-query/package.json @@ -1,9 +1,6 @@ { "name": "@kbn/es-query", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts b/packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts index a7328758ec429..fb715039a5182 100644 --- a/packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts +++ b/packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts @@ -14,7 +14,7 @@ import { buildQueryFilter, FilterStateStore, } from '..'; -import { DataViewBase } from '@kbn/es-query'; +import { DataViewBase } from '../../..'; describe('filter manager utilities', () => { describe('compare filters', () => { diff --git a/packages/kbn-es-query/src/kuery/grammar/__mocks__/index.ts b/packages/kbn-es-query/src/kuery/grammar/__mocks__/index.ts index 9103c852c4845..c8466fead14a1 100644 --- a/packages/kbn-es-query/src/kuery/grammar/__mocks__/index.ts +++ b/packages/kbn-es-query/src/kuery/grammar/__mocks__/index.ts @@ -5,5 +5,5 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -// @ts-expect-error + export { parse } from './grammar'; diff --git a/packages/kbn-es-query/tsconfig.json b/packages/kbn-es-query/tsconfig.json index 8561f4bdc4a31..07000887f13f8 100644 --- a/packages/kbn-es-query/tsconfig.json +++ b/packages/kbn-es-query/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,13 @@ }, "include": [ "**/*.ts", + "**/*.js", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-es-types/BUILD.bazel b/packages/kbn-es-types/BUILD.bazel deleted file mode 100644 index 77db3b126b120..0000000000000 --- a/packages/kbn-es-types/BUILD.bazel +++ /dev/null @@ -1,105 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-es-types" -PKG_REQUIRE_NAME = "@kbn/es-types" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//utility-types", - "@npm//@elastic/elasticsearch", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-es-types/kibana.jsonc b/packages/kbn-es-types/kibana.jsonc index 18af5562c4eeb..1c00cab81d2c4 100644 --- a/packages/kbn-es-types/kibana.jsonc +++ b/packages/kbn-es-types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/es-types", - "owner": ["@elastic/kibana-core", "@elastic/apm-ui"], - "runtimeDeps": [], - "typeDeps": [], + "owner": ["@elastic/kibana-core", "@elastic/apm-ui"] } diff --git a/packages/kbn-es-types/package.json b/packages/kbn-es-types/package.json index 1e5c960975672..b8cae07fc5abd 100644 --- a/packages/kbn-es-types/package.json +++ b/packages/kbn-es-types/package.json @@ -2,8 +2,6 @@ "name": "@kbn/es-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-es-types/tsconfig.json b/packages/kbn-es-types/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-es-types/tsconfig.json +++ b/packages/kbn-es-types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-es/BUILD.bazel b/packages/kbn-es/BUILD.bazel deleted file mode 100644 index 2aeaee4071d53..0000000000000 --- a/packages/kbn-es/BUILD.bazel +++ /dev/null @@ -1,78 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm") - -PKG_DIRNAME = "kbn-es" -PKG_REQUIRE_NAME = "@kbn/es" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.js", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__fixtures__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//@elastic/elasticsearch", - "@npm//abort-controller", - "@npm//chalk", - "@npm//dedent", - "@npm//del", - "@npm//execa", - "@npm//getopts", - "@npm//globby", - "@npm//node-fetch", - "@npm//simple-git", - "@npm//tree-kill", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-es/index.ts b/packages/kbn-es/index.ts index 7ec9f4482ea5f..aed2ab7af41c5 100644 --- a/packages/kbn-es/index.ts +++ b/packages/kbn-es/index.ts @@ -6,8 +6,6 @@ * Side Public License, v 1. */ -// @ts-expect-error not typed yet export { run } from './src/cli'; -// @ts-expect-error not typed yet export { Cluster } from './src/cluster'; export { SYSTEM_INDICES_SUPERUSER } from './src/utils'; diff --git a/packages/kbn-es/kibana.jsonc b/packages/kbn-es/kibana.jsonc index 6407107c3639c..d575c727ef33e 100644 --- a/packages/kbn-es/kibana.jsonc +++ b/packages/kbn-es/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/es", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-es/package.json b/packages/kbn-es/package.json index 38c138d688362..f3f33cf5e1ff6 100644 --- a/packages/kbn-es/package.json +++ b/packages/kbn-es/package.json @@ -1,6 +1,5 @@ { "name": "@kbn/es", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", "private": true diff --git a/packages/kbn-es/src/cli.js b/packages/kbn-es/src/cli.ts similarity index 74% rename from packages/kbn-es/src/cli.js rename to packages/kbn-es/src/cli.ts index a57b99ce9ca1b..d58a485f45f68 100644 --- a/packages/kbn-es/src/cli.js +++ b/packages/kbn-es/src/cli.ts @@ -6,18 +6,20 @@ * Side Public License, v 1. */ -const chalk = require('chalk'); -const getopts = require('getopts'); -const dedent = require('dedent'); -const commands = require('./cli_commands'); -const { isCliError } = require('./errors'); -const { log } = require('./utils'); +import chalk from 'chalk'; +import getopts from 'getopts'; +import dedent from 'dedent'; +import { commands } from './cli_commands'; +import { isCliError } from './errors'; +import { log } from './utils'; + +const isCmdName = (string: any): string is keyof typeof commands => Object.hasOwn(commands, string); +const commandNames = Object.keys(commands).filter(isCmdName); function help() { - const availableCommands = Object.keys(commands).map( - (name) => `${name} - ${commands[name].description}` - ); + const availableCommands = commandNames.map((name) => `${name} - ${commands[name].description}`); + // eslint-disable-next-line no-console console.log(dedent` usage: es [] @@ -33,7 +35,7 @@ function help() { `); } -exports.run = async (defaults = {}) => { +export async function run(defaults = {}) { try { const argv = process.argv.slice(2); const options = getopts(argv, { @@ -51,13 +53,12 @@ exports.run = async (defaults = {}) => { return; } - const command = commands[commandName]; - - if (command === undefined) { + if (!isCmdName(commandName)) { log.error(chalk.red(`[${commandName}] is not a valid command, see 'es --help'`)); process.exitCode = 1; return; } + const command = commands[commandName]; if (commandName && options.help) { log.write(dedent` @@ -83,4 +84,4 @@ exports.run = async (defaults = {}) => { process.exitCode = 1; } -}; +} diff --git a/packages/kbn-es/src/cli_commands/archive.js b/packages/kbn-es/src/cli_commands/archive.js deleted file mode 100644 index 96ffc1fec34c2..0000000000000 --- a/packages/kbn-es/src/cli_commands/archive.js +++ /dev/null @@ -1,69 +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. - */ - -const dedent = require('dedent'); -const getopts = require('getopts'); -const { Cluster } = require('../cluster'); -const { createCliError } = require('../errors'); -const { parseTimeoutToMs } = require('../utils'); - -exports.description = 'Install and run from an Elasticsearch tar'; - -exports.usage = 'es archive []'; - -exports.help = (defaults = {}) => { - const { password = 'changeme', 'base-path': basePath } = defaults; - - return dedent` - Options: - - --base-path Path containing cache/installations [default: ${basePath}] - --install-path Installation path, defaults to 'source' within base-path - --password Sets password for elastic user [default: ${password}] - --password.[user] Sets password for native realm user [default: ${password}] - --ssl Sets up SSL on Elasticsearch - -E Additional key=value settings to pass to Elasticsearch - --skip-ready-check Disable the ready check, - --ready-timeout Customize the ready check timeout, in seconds or "Xm" format, defaults to 1m - - Example: - - es archive ../elasticsearch.tar.gz -E cluster.name=test -E path.data=/tmp/es-data - `; -}; - -exports.run = async (defaults = {}) => { - const argv = process.argv.slice(2); - const options = getopts(argv, { - alias: { - basePath: 'base-path', - installPath: 'install-path', - esArgs: 'E', - skipReadyCheck: 'skip-ready-check', - readyTimeout: 'ready-timeout', - }, - - string: ['ready-timeout'], - boolean: ['skip-ready-check'], - - default: defaults, - }); - - const cluster = new Cluster({ ssl: options.ssl }); - const [, path] = options._; - - if (!path || !path.endsWith('tar.gz')) { - throw createCliError('you must provide a path to an ES tar file'); - } - - const { installPath } = await cluster.installArchive(path, options); - await cluster.run(installPath, { - ...options, - readyTimeout: parseTimeoutToMs(options.readyTimeout), - }); -}; diff --git a/packages/kbn-es/src/cli_commands/archive.ts b/packages/kbn-es/src/cli_commands/archive.ts new file mode 100644 index 0000000000000..af697975c59ed --- /dev/null +++ b/packages/kbn-es/src/cli_commands/archive.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 dedent from 'dedent'; +import getopts from 'getopts'; +import { Cluster } from '../cluster'; +import { createCliError } from '../errors'; +import { parseTimeoutToMs } from '../utils'; + +export const archive = { + description: 'Install and run from an Elasticsearch tar', + usage: 'es archive []', + help: (defaults: Record = {}) => { + const { password = 'changeme', 'base-path': basePath } = defaults; + + return dedent` + Options: + + --base-path Path containing cache/installations [default: ${basePath}] + --install-path Installation path, defaults to 'source' within base-path + --password Sets password for elastic user [default: ${password}] + --password.[user] Sets password for native realm user [default: ${password}] + --ssl Sets up SSL on Elasticsearch + -E Additional key=value settings to pass to Elasticsearch + --skip-ready-check Disable the ready check, + --ready-timeout Customize the ready check timeout, in seconds or "Xm" format, defaults to 1m + + Example: + + es archive ../elasticsearch.tar.gz -E cluster.name=test -E path.data=/tmp/es-data + `; + }, + run: async (defaults = {}) => { + const argv = process.argv.slice(2); + const options = getopts(argv, { + alias: { + basePath: 'base-path', + installPath: 'install-path', + esArgs: 'E', + skipReadyCheck: 'skip-ready-check', + readyTimeout: 'ready-timeout', + }, + + string: ['ready-timeout'], + boolean: ['skip-ready-check'], + + default: defaults, + }); + + const cluster = new Cluster({ ssl: options.ssl }); + const [, path] = options._; + + if (!path || !path.endsWith('tar.gz')) { + throw createCliError('you must provide a path to an ES tar file'); + } + + const { installPath } = await cluster.installArchive(path, options); + await cluster.run(installPath, { + ...options, + readyTimeout: parseTimeoutToMs(options.readyTimeout), + }); + }, +}; diff --git a/packages/kbn-es/src/cli_commands/build_snapshots.js b/packages/kbn-es/src/cli_commands/build_snapshots.js deleted file mode 100644 index b4a15a0645cce..0000000000000 --- a/packages/kbn-es/src/cli_commands/build_snapshots.js +++ /dev/null @@ -1,82 +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. - */ - -const dedent = require('dedent'); -const { resolve, basename } = require('path'); -const { createHash } = require('crypto'); -const { promisify } = require('util'); -const { pipeline, Transform } = require('stream'); -const Fs = require('fs'); - -const getopts = require('getopts'); -const del = require('del'); - -const { buildSnapshot, log } = require('../utils'); - -const pipelineAsync = promisify(pipeline); - -exports.description = 'Build and collect ES snapshots'; - -exports.help = () => dedent` - Options: - - --output Path to create the built elasticsearch snapshots - --source-path Path where the elasticsearch repository is checked out - - Example: - - es build_snapshots --source-path=/path/to/es/checked/repo --output=/tmp/es-built-snapshots - `; - -exports.run = async (defaults = {}) => { - const argv = process.argv.slice(2); - const options = getopts(argv, { - alias: { - sourcePath: 'source-path', - }, - default: { - ...defaults, - output: 'es_snapshots', - }, - }); - - const outputDir = resolve(process.cwd(), options.output); - del.sync(outputDir); - Fs.mkdirSync(outputDir, { recursive: true }); - - for (const license of ['oss', 'trial']) { - for (const platform of ['darwin', 'win32', 'linux']) { - log.info('Building', platform, license === 'trial' ? 'default' : 'oss', 'snapshot'); - await log.indent(4, async () => { - const snapshotPath = await buildSnapshot({ - license, - sourcePath: options.sourcePath, - log, - platform, - }); - - const filename = basename(snapshotPath); - const outputPath = resolve(outputDir, filename); - const hash = createHash('sha512'); - await pipelineAsync( - Fs.createReadStream(snapshotPath), - new Transform({ - transform(chunk, _, cb) { - hash.update(chunk); - cb(undefined, chunk); - }, - }), - Fs.createWriteStream(outputPath) - ); - - Fs.writeFileSync(`${outputPath}.sha512`, `${hash.digest('hex')} ${filename}`); - log.success('snapshot and shasum written to', outputPath); - }); - } - } -}; diff --git a/packages/kbn-es/src/cli_commands/build_snapshots.ts b/packages/kbn-es/src/cli_commands/build_snapshots.ts new file mode 100644 index 0000000000000..cc730418af338 --- /dev/null +++ b/packages/kbn-es/src/cli_commands/build_snapshots.ts @@ -0,0 +1,83 @@ +/* + * 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 dedent from 'dedent'; +import { resolve, basename } from 'path'; +import { createHash } from 'crypto'; +import { promisify } from 'util'; +import { pipeline, Transform } from 'stream'; +import Fs from 'fs'; + +import getopts from 'getopts'; +import del from 'del'; + +import { buildSnapshot, log } from '../utils'; +import { Command } from './types'; + +const pipelineAsync = promisify(pipeline); + +export const buildSnapshots: Command = { + description: 'Build and collect ES snapshots', + help: () => dedent` + Options: + + --output Path to create the built elasticsearch snapshots + --source-path Path where the elasticsearch repository is checked out + + Example: + + es build_snapshots --source-path=/path/to/es/checked/repo --output=/tmp/es-built-snapshots + `, + run: async (defaults = {}) => { + const argv = process.argv.slice(2); + const options = getopts(argv, { + alias: { + sourcePath: 'source-path', + }, + default: { + ...defaults, + output: 'es_snapshots', + }, + }); + + const outputDir = resolve(process.cwd(), options.output); + del.sync(outputDir); + Fs.mkdirSync(outputDir, { recursive: true }); + + for (const license of ['oss', 'trial']) { + for (const platform of ['darwin', 'win32', 'linux']) { + log.info('Building', platform, license === 'trial' ? 'default' : 'oss', 'snapshot'); + await log.indent(4, async () => { + const snapshotPath = await buildSnapshot({ + license, + sourcePath: options.sourcePath, + log, + platform, + }); + + const filename = basename(snapshotPath); + const outputPath = resolve(outputDir, filename); + const hash = createHash('sha512'); + await pipelineAsync( + Fs.createReadStream(snapshotPath), + new Transform({ + transform(chunk, _, cb) { + hash.update(chunk); + cb(undefined, chunk); + }, + }), + Fs.createWriteStream(outputPath) + ); + + Fs.writeFileSync(`${outputPath}.sha512`, `${hash.digest('hex')} ${filename}`); + log.success('snapshot and shasum written to', outputPath); + }); + } + } + }, +}; diff --git a/packages/kbn-es/src/cli_commands/index.ts b/packages/kbn-es/src/cli_commands/index.ts new file mode 100644 index 0000000000000..f83829476563d --- /dev/null +++ b/packages/kbn-es/src/cli_commands/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { snapshot } from './snapshot'; +import { source } from './source'; +import { archive } from './archive'; +import { buildSnapshots } from './build_snapshots'; + +export const commands = { + snapshot, + source, + archive, + build_snapshots: buildSnapshots, +}; diff --git a/packages/kbn-es/src/cli_commands/snapshot.js b/packages/kbn-es/src/cli_commands/snapshot.js deleted file mode 100644 index c0256fafbae7d..0000000000000 --- a/packages/kbn-es/src/cli_commands/snapshot.js +++ /dev/null @@ -1,103 +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. - */ - -const dedent = require('dedent'); -const getopts = require('getopts'); -import { ToolingLog } from '@kbn/tooling-log'; -import { getTimeReporter } from '@kbn/ci-stats-reporter'; -const { Cluster } = require('../cluster'); -const { parseTimeoutToMs } = require('../utils'); - -exports.description = 'Downloads and run from a nightly snapshot'; - -exports.help = (defaults = {}) => { - const { license = 'basic', password = 'changeme', 'base-path': basePath } = defaults; - - return dedent` - Options: - - --license Run with a 'oss', 'basic', or 'trial' license [default: ${license}] - --version Version of ES to download [default: ${defaults.version}] - --base-path Path containing cache/installations [default: ${basePath}] - --install-path Installation path, defaults to 'source' within base-path - --data-archive Path to zip or tarball containing an ES data directory to seed the cluster with. - --password Sets password for elastic user [default: ${password}] - --password.[user] Sets password for native realm user [default: ${password}] - -E Additional key=value settings to pass to Elasticsearch - --download-only Download the snapshot but don't actually start it - --ssl Sets up SSL on Elasticsearch - --use-cached Skips cache verification and use cached ES snapshot. - --skip-ready-check Disable the ready check, - --ready-timeout Customize the ready check timeout, in seconds or "Xm" format, defaults to 1m - --plugins Comma seperated list of Elasticsearch plugins to install - --secure-files Comma seperated list of secure_setting_name=/path pairs - - Example: - - es snapshot --version 5.6.8 -E cluster.name=test -E path.data=/tmp/es-data - `; -}; - -exports.run = async (defaults = {}) => { - const runStartTime = Date.now(); - const log = new ToolingLog({ - level: 'info', - writeTo: process.stdout, - }); - const reportTime = getTimeReporter(log, 'scripts/es snapshot'); - - const argv = process.argv.slice(2); - const options = getopts(argv, { - alias: { - basePath: 'base-path', - installPath: 'install-path', - dataArchive: 'data-archive', - esArgs: 'E', - useCached: 'use-cached', - skipReadyCheck: 'skip-ready-check', - readyTimeout: 'ready-timeout', - secureFiles: 'secure-files', - }, - - string: ['version', 'ready-timeout'], - boolean: ['download-only', 'use-cached', 'skip-ready-check'], - - default: defaults, - }); - - const cluster = new Cluster({ ssl: options.ssl }); - if (options['download-only']) { - await cluster.downloadSnapshot(options); - } else { - const installStartTime = Date.now(); - const { installPath } = await cluster.installSnapshot(options); - - if (options.dataArchive) { - await cluster.extractDataDirectory(installPath, options.dataArchive); - } - if (options.plugins) { - await cluster.installPlugins(installPath, options.plugins, options); - } - if (options.secureFiles) { - const pairs = options.secureFiles.split(',').map((kv) => kv.split('=').map((v) => v.trim())); - await cluster.configureKeystoreWithSecureSettingsFiles(installPath, pairs); - } - - reportTime(installStartTime, 'installed', { - success: true, - ...options, - }); - - await cluster.run(installPath, { - reportTime, - startTime: runStartTime, - ...options, - readyTimeout: parseTimeoutToMs(options.readyTimeout), - }); - } -}; diff --git a/packages/kbn-es/src/cli_commands/snapshot.ts b/packages/kbn-es/src/cli_commands/snapshot.ts new file mode 100644 index 0000000000000..837acc3395e6b --- /dev/null +++ b/packages/kbn-es/src/cli_commands/snapshot.ts @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 dedent from 'dedent'; +import getopts from 'getopts'; +import { ToolingLog } from '@kbn/tooling-log'; +import { getTimeReporter } from '@kbn/ci-stats-reporter'; + +import { Cluster } from '../cluster'; +import { parseTimeoutToMs } from '../utils'; +import { Command } from './types'; + +export const snapshot: Command = { + description: 'Downloads and run from a nightly snapshot', + help: (defaults = {}) => { + const { license = 'basic', password = 'changeme', 'base-path': basePath } = defaults; + + return dedent` + Options: + + --license Run with a 'oss', 'basic', or 'trial' license [default: ${license}] + --version Version of ES to download [default: ${defaults.version}] + --base-path Path containing cache/installations [default: ${basePath}] + --install-path Installation path, defaults to 'source' within base-path + --data-archive Path to zip or tarball containing an ES data directory to seed the cluster with. + --password Sets password for elastic user [default: ${password}] + --password.[user] Sets password for native realm user [default: ${password}] + -E Additional key=value settings to pass to Elasticsearch + --download-only Download the snapshot but don't actually start it + --ssl Sets up SSL on Elasticsearch + --use-cached Skips cache verification and use cached ES snapshot. + --skip-ready-check Disable the ready check, + --ready-timeout Customize the ready check timeout, in seconds or "Xm" format, defaults to 1m + --plugins Comma seperated list of Elasticsearch plugins to install + --secure-files Comma seperated list of secure_setting_name=/path pairs + + Example: + + es snapshot --version 5.6.8 -E cluster.name=test -E path.data=/tmp/es-data + `; + }, + run: async (defaults = {}) => { + const runStartTime = Date.now(); + const log = new ToolingLog({ + level: 'info', + writeTo: process.stdout, + }); + const reportTime = getTimeReporter(log, 'scripts/es snapshot'); + + const argv = process.argv.slice(2); + const options = getopts(argv, { + alias: { + basePath: 'base-path', + installPath: 'install-path', + dataArchive: 'data-archive', + esArgs: 'E', + useCached: 'use-cached', + skipReadyCheck: 'skip-ready-check', + readyTimeout: 'ready-timeout', + secureFiles: 'secure-files', + }, + + string: ['version', 'ready-timeout'], + boolean: ['download-only', 'use-cached', 'skip-ready-check'], + + default: defaults, + }); + + const cluster = new Cluster({ ssl: options.ssl }); + if (options['download-only']) { + await cluster.downloadSnapshot(options); + } else { + const installStartTime = Date.now(); + const { installPath } = await cluster.installSnapshot(options); + + if (options.dataArchive) { + await cluster.extractDataDirectory(installPath, options.dataArchive); + } + if (options.plugins) { + await cluster.installPlugins(installPath, options.plugins, options); + } + if (typeof options.secureFiles === 'string' && options.secureFiles) { + const pairs = options.secureFiles + .split(',') + .map((kv) => kv.split('=').map((v) => v.trim())); + await cluster.configureKeystoreWithSecureSettingsFiles(installPath, pairs); + } + + reportTime(installStartTime, 'installed', { + success: true, + ...options, + }); + + await cluster.run(installPath, { + reportTime, + startTime: runStartTime, + ...options, + readyTimeout: parseTimeoutToMs(options.readyTimeout), + }); + } + }, +}; diff --git a/packages/kbn-es/src/cli_commands/source.js b/packages/kbn-es/src/cli_commands/source.js deleted file mode 100644 index d1f8e02b55680..0000000000000 --- a/packages/kbn-es/src/cli_commands/source.js +++ /dev/null @@ -1,80 +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. - */ - -const dedent = require('dedent'); -const getopts = require('getopts'); -const { Cluster } = require('../cluster'); -const { parseTimeoutToMs } = require('../utils'); - -exports.description = 'Build and run from source'; - -exports.help = (defaults = {}) => { - const { license = 'basic', password = 'changeme', 'base-path': basePath } = defaults; - - return dedent` - Options: - - --license Run with a 'oss', 'basic', or 'trial' license [default: ${license}] - --source-path Path to ES source [default: ${defaults['source-path']}] - --base-path Path containing cache/installations [default: ${basePath}] - --install-path Installation path, defaults to 'source' within base-path - --data-archive Path to zip or tarball containing an ES data directory to seed the cluster with. - --password Sets password for elastic user [default: ${password}] - --password.[user] Sets password for native realm user [default: ${password}] - --ssl Sets up SSL on Elasticsearch - --plugins Comma seperated list of Elasticsearch plugins to install - --secure-files Comma seperated list of secure_setting_name=/path pairs - -E Additional key=value settings to pass to Elasticsearch - --skip-ready-check Disable the ready check, - --ready-timeout Customize the ready check timeout, in seconds or "Xm" format, defaults to 1m - - Example: - - es snapshot --source-path=../elasticsearch -E cluster.name=test -E path.data=/tmp/es-data - `; -}; - -exports.run = async (defaults = {}) => { - const argv = process.argv.slice(2); - const options = getopts(argv, { - alias: { - basePath: 'base-path', - installPath: 'install-path', - sourcePath: 'source-path', - dataArchive: 'data-archive', - skipReadyCheck: 'skip-ready-check', - readyTimeout: 'ready-timeout', - secureFiles: 'secure-files', - esArgs: 'E', - }, - - string: ['ready-timeout'], - boolean: ['skip-ready-check'], - - default: defaults, - }); - - const cluster = new Cluster({ ssl: options.ssl }); - const { installPath } = await cluster.installSource(options); - - if (options.dataArchive) { - await cluster.extractDataDirectory(installPath, options.dataArchive); - } - if (options.plugins) { - await cluster.installPlugins(installPath, options.plugins, options); - } - if (options.secureFiles) { - const pairs = options.secureFiles.split(',').map((kv) => kv.split('=').map((v) => v.trim())); - await cluster.configureKeystoreWithSecureSettingsFiles(installPath, pairs); - } - - await cluster.run(installPath, { - ...options, - readyTimeout: parseTimeoutToMs(options.readyTimeout), - }); -}; diff --git a/packages/kbn-es/src/cli_commands/source.ts b/packages/kbn-es/src/cli_commands/source.ts new file mode 100644 index 0000000000000..19bb59c057ac9 --- /dev/null +++ b/packages/kbn-es/src/cli_commands/source.ts @@ -0,0 +1,81 @@ +/* + * 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 dedent from 'dedent'; +import getopts from 'getopts'; +import { Cluster } from '../cluster'; +import { parseTimeoutToMs } from '../utils'; +import { Command } from './types'; + +export const source: Command = { + description: 'Build and run from source', + help: (defaults: Record = {}) => { + const { license = 'basic', password = 'changeme', 'base-path': basePath } = defaults; + + return dedent` + Options: + + --license Run with a 'oss', 'basic', or 'trial' license [default: ${license}] + --source-path Path to ES source [default: ${defaults['source-path']}] + --base-path Path containing cache/installations [default: ${basePath}] + --install-path Installation path, defaults to 'source' within base-path + --data-archive Path to zip or tarball containing an ES data directory to seed the cluster with. + --password Sets password for elastic user [default: ${password}] + --password.[user] Sets password for native realm user [default: ${password}] + --ssl Sets up SSL on Elasticsearch + --plugins Comma seperated list of Elasticsearch plugins to install + --secure-files Comma seperated list of secure_setting_name=/path pairs + -E Additional key=value settings to pass to Elasticsearch + --skip-ready-check Disable the ready check, + --ready-timeout Customize the ready check timeout, in seconds or "Xm" format, defaults to 1m + + Example: + + es snapshot --source-path=../elasticsearch -E cluster.name=test -E path.data=/tmp/es-data + `; + }, + run: async (defaults = {}) => { + const argv = process.argv.slice(2); + const options = getopts(argv, { + alias: { + basePath: 'base-path', + installPath: 'install-path', + sourcePath: 'source-path', + dataArchive: 'data-archive', + skipReadyCheck: 'skip-ready-check', + readyTimeout: 'ready-timeout', + secureFiles: 'secure-files', + esArgs: 'E', + }, + + string: ['ready-timeout'], + boolean: ['skip-ready-check'], + + default: defaults, + }); + + const cluster = new Cluster({ ssl: options.ssl }); + const { installPath } = await cluster.installSource(options); + + if (options.dataArchive) { + await cluster.extractDataDirectory(installPath, options.dataArchive); + } + if (options.plugins) { + await cluster.installPlugins(installPath, options.plugins, options); + } + if (typeof options.secureFiles === 'string' && options.secureFiles) { + const pairs = options.secureFiles.split(',').map((kv) => kv.split('=').map((v) => v.trim())); + await cluster.configureKeystoreWithSecureSettingsFiles(installPath, pairs); + } + + await cluster.run(installPath, { + ...options, + readyTimeout: parseTimeoutToMs(options.readyTimeout), + }); + }, +}; diff --git a/packages/kbn-monaco/src/worker.d.ts b/packages/kbn-es/src/cli_commands/types.ts similarity index 66% rename from packages/kbn-monaco/src/worker.d.ts rename to packages/kbn-es/src/cli_commands/types.ts index 6544070c684d8..46ee273c3738c 100644 --- a/packages/kbn-monaco/src/worker.d.ts +++ b/packages/kbn-es/src/cli_commands/types.ts @@ -6,9 +6,9 @@ * Side Public License, v 1. */ -declare module '!!raw-loader!*.editor.worker.js' { - const contents: string; - - // eslint-disable-next-line import/no-default-export - export default contents; +export interface Command { + description: string; + usage?: string; + help: (defaults: Record) => string; + run: (defaults: Record) => Promise; } diff --git a/packages/kbn-es/src/cluster_exec_options.ts b/packages/kbn-es/src/cluster_exec_options.ts index da21aaf05b139..f1b91bb52ff7e 100644 --- a/packages/kbn-es/src/cluster_exec_options.ts +++ b/packages/kbn-es/src/cluster_exec_options.ts @@ -16,4 +16,5 @@ export interface EsClusterExecOptions { skipReadyCheck?: boolean; readyTimeout?: number; onEarlyExit?: (msg: string) => void; + writeLogsToPath?: string; } diff --git a/packages/kbn-es/src/integration_tests/cluster.test.js b/packages/kbn-es/src/integration_tests/cluster.test.js index 1a871667bd7a9..9f62e0c46a018 100644 --- a/packages/kbn-es/src/integration_tests/cluster.test.js +++ b/packages/kbn-es/src/integration_tests/cluster.test.js @@ -59,6 +59,7 @@ function mockEsBin({ exitCode, start }) { jest.requireActual('execa')( process.execPath, [ + '--require=@kbn/babel-register/install', require.resolve('./__fixtures__/es_bin.js'), JSON.stringify({ exitCode, diff --git a/packages/kbn-es/src/utils/extract_config_files.js b/packages/kbn-es/src/utils/extract_config_files.ts similarity index 77% rename from packages/kbn-es/src/utils/extract_config_files.js rename to packages/kbn-es/src/utils/extract_config_files.ts index 16cd2514f7a43..ff07c77258d05 100644 --- a/packages/kbn-es/src/utils/extract_config_files.js +++ b/packages/kbn-es/src/utils/extract_config_files.ts @@ -6,20 +6,22 @@ * Side Public License, v 1. */ -const path = require('path'); -const fs = require('fs'); +import path from 'path'; +import fs from 'fs'; +import type { ToolingLog } from '@kbn/tooling-log'; /** * Copies config references to an absolute path to * the provided destination. This is necessary as ES security * requires files to be within the installation directory - * - * @param {Array} config - * @param {String} dest */ -exports.extractConfigFiles = function extractConfigFiles(config, dest, options = {}) { +export function extractConfigFiles( + config: string | string[], + dest: string, + options?: { log: ToolingLog } +) { const originalConfig = typeof config === 'string' ? [config] : config; - const localConfig = []; + const localConfig: string[] = []; originalConfig.forEach((prop) => { const [key, value] = prop.split('='); @@ -29,9 +31,7 @@ exports.extractConfigFiles = function extractConfigFiles(config, dest, options = const destPath = path.resolve(dest, 'config', filename); copyFileSync(value, destPath); - if (options.log) { - options.log.info('moved %s in config to %s', value, destPath); - } + options?.log.info('moved %s in config to %s', value, destPath); localConfig.push(`${key}=${filename}`); } else { @@ -40,13 +40,13 @@ exports.extractConfigFiles = function extractConfigFiles(config, dest, options = }); return localConfig; -}; +} function isFile(dest = '') { return path.isAbsolute(dest) && path.extname(dest).length > 0 && fs.existsSync(dest); } -function copyFileSync(src, dest) { +function copyFileSync(src: string, dest: string) { const destPath = path.dirname(dest); if (!fs.existsSync(destPath)) { diff --git a/packages/kbn-es/src/utils/index.ts b/packages/kbn-es/src/utils/index.ts index 4e75d1d81f6fb..79a57846cc00a 100644 --- a/packages/kbn-es/src/utils/index.ts +++ b/packages/kbn-es/src/utils/index.ts @@ -8,10 +8,8 @@ export { cache } from './cache'; export { log } from './log'; -// @ts-expect-error not typed yet export { parseEsLog } from './parse_es_log'; export { findMostRecentlyChanged } from './find_most_recently_changed'; -// @ts-expect-error not typed yet export { extractConfigFiles } from './extract_config_files'; // @ts-expect-error not typed yet export { NativeRealm, SYSTEM_INDICES_SUPERUSER } from './native_realm'; diff --git a/packages/kbn-es/src/utils/parse_es_log.js b/packages/kbn-es/src/utils/parse_es_log.ts similarity index 87% rename from packages/kbn-es/src/utils/parse_es_log.js rename to packages/kbn-es/src/utils/parse_es_log.ts index bf2c6769a07c2..b5862495f647b 100644 --- a/packages/kbn-es/src/utils/parse_es_log.js +++ b/packages/kbn-es/src/utils/parse_es_log.ts @@ -6,13 +6,12 @@ * Side Public License, v 1. */ -const chalk = require('chalk'); +import chalk from 'chalk'; /** - * @param {String} data - * @returns {Array} lines + * extract useful info about an es log line */ -exports.parseEsLog = function parseEsLog(data) { +export function parseEsLog(data: string) { const lines = []; const regex = /\[([0-9-T:,]+)\]\[([A-Z]+)\s?\]\[([A-Za-z0-9.]+)\s*\]\s?([\S\s]+?(?=$|\n\[))/g; let capture = regex.exec(data); @@ -40,9 +39,9 @@ exports.parseEsLog = function parseEsLog(data) { capture = regex.exec(data); } while (capture); return lines; -}; +} -function colorForLevel(level) { +function colorForLevel(level: string) { switch (level) { case 'WARN': return chalk.yellow; diff --git a/packages/kbn-es/tsconfig.json b/packages/kbn-es/tsconfig.json index a47c95fc504e8..95253080f47be 100644 --- a/packages/kbn-es/tsconfig.json +++ b/packages/kbn-es/tsconfig.json @@ -1,10 +1,20 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "target_types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.js" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/tooling-log", + "@kbn/dev-utils", + "@kbn/dev-proc-runner", + "@kbn/ci-stats-reporter", + "@kbn/jest-serializers", ] } diff --git a/packages/kbn-eslint-config/.eslintrc.js b/packages/kbn-eslint-config/.eslintrc.js index f10e5f233efa5..e7ae18281748a 100644 --- a/packages/kbn-eslint-config/.eslintrc.js +++ b/packages/kbn-eslint-config/.eslintrc.js @@ -258,6 +258,17 @@ module.exports = { 'ProcRunner', ] }, + { + fromPackage: '@kbn/utils', + toPackage: '@kbn/repo-info', + exportNames: [ + 'REPO_ROOT', + 'UPSTREAM_BRANCH', + 'kibanaPackageJson', + 'isKibanaDistributable', + 'fromRoot', + ] + }, ]], '@kbn/disable/no_protected_eslint_disable': 'error', diff --git a/packages/kbn-eslint-config/BUILD.bazel b/packages/kbn-eslint-config/BUILD.bazel deleted file mode 100644 index 708136256498d..0000000000000 --- a/packages/kbn-eslint-config/BUILD.bazel +++ /dev/null @@ -1,57 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-eslint-config" -PKG_REQUIRE_NAME = "@kbn/eslint-config" - -SOURCE_FILES = glob([ - ".eslintrc.js", - "javascript.js", - "jest.js", - "react.js", - "restricted_globals.js", - "typescript.js", -]) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-babel-preset", - "//packages/kbn-dev-utils", - "//packages/kbn-eslint-plugin-disable", - "//packages/kbn-eslint-plugin-imports", - "@npm//eslint-config-prettier", - "@npm//semver", -] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES + [ - ":srcs", - ], - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-eslint-config/kibana.jsonc b/packages/kbn-eslint-config/kibana.jsonc index 3afe0461c4861..057d11ec43db3 100644 --- a/packages/kbn-eslint-config/kibana.jsonc +++ b/packages/kbn-eslint-config/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/eslint-config", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-eslint-config/react.js b/packages/kbn-eslint-config/react.js index 0b1cce15de9ad..c5db0546630a5 100644 --- a/packages/kbn-eslint-config/react.js +++ b/packages/kbn-eslint-config/react.js @@ -1,5 +1,5 @@ const semver = require('semver'); -const { kibanaPackageJson: PKG } = require('@kbn/utils'); +const { PKG_JSON } = require('@kbn/repo-info'); module.exports = { plugins: [ @@ -16,7 +16,7 @@ module.exports = { settings: { react: { - version: semver.valid(semver.coerce(PKG.dependencies.react)), + version: semver.valid(semver.coerce(PKG_JSON.dependencies.react)), }, }, diff --git a/packages/kbn-eslint-config/typescript.js b/packages/kbn-eslint-config/typescript.js index 76506b640746d..04e847224df58 100644 --- a/packages/kbn-eslint-config/typescript.js +++ b/packages/kbn-eslint-config/typescript.js @@ -3,9 +3,6 @@ // Some IDEs could not be running eslint with the correct extensions yet // as this package was moved from typescript-eslint-parser to @typescript-eslint/parser -const semver = require('semver'); -const { kibanaPackageJson: PKG } = require('@kbn/utils'); - const eslintConfigPrettierRules = require('eslint-config-prettier').rules; // The current implementation excluded all the variables matching the regexp. diff --git a/packages/kbn-eslint-plugin-disable/BUILD.bazel b/packages/kbn-eslint-plugin-disable/BUILD.bazel deleted file mode 100644 index 9fb19d53e2c18..0000000000000 --- a/packages/kbn-eslint-plugin-disable/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-eslint-plugin-disable" -PKG_REQUIRE_NAME = "@kbn/eslint-plugin-disable" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//eslint", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//tslib", - "@npm//@types/eslint", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-eslint-plugin-disable/kibana.jsonc b/packages/kbn-eslint-plugin-disable/kibana.jsonc index 43a4d8f8f90bb..312829bbd6285 100644 --- a/packages/kbn-eslint-plugin-disable/kibana.jsonc +++ b/packages/kbn-eslint-plugin-disable/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/eslint-plugin-disable", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-eslint-plugin-disable/package.json b/packages/kbn-eslint-plugin-disable/package.json index aab648cd1d4a1..439b5959642c2 100644 --- a/packages/kbn-eslint-plugin-disable/package.json +++ b/packages/kbn-eslint-plugin-disable/package.json @@ -2,7 +2,5 @@ "name": "@kbn/eslint-plugin-disable", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-eslint-plugin-disable/tsconfig.json b/packages/kbn-eslint-plugin-disable/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-eslint-plugin-disable/tsconfig.json +++ b/packages/kbn-eslint-plugin-disable/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-eslint-plugin-eslint/BUILD.bazel b/packages/kbn-eslint-plugin-eslint/BUILD.bazel deleted file mode 100644 index 0bb2ff549c9f9..0000000000000 --- a/packages/kbn-eslint-plugin-eslint/BUILD.bazel +++ /dev/null @@ -1,69 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-eslint-plugin-eslint" -PKG_REQUIRE_NAME = "@kbn/eslint-plugin-eslint" - -SOURCE_FILES = glob( - [ - "rules/**/*.js", - "helpers/**/*.js", - "index.js", - "lib.js", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-utils", - "@npm//@babel/eslint-parser", - "@npm//dedent", - "@npm//eslint", - "@npm//eslint-module-utils", -] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES + [ - ":srcs", - ], - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-eslint-plugin-eslint/helpers/exports.js b/packages/kbn-eslint-plugin-eslint/helpers/exports.js index 971364633356c..ade2fb57ebad1 100644 --- a/packages/kbn-eslint-plugin-eslint/helpers/exports.js +++ b/packages/kbn-eslint-plugin-eslint/helpers/exports.js @@ -9,7 +9,7 @@ const Fs = require('fs'); const Path = require('path'); const ts = require('typescript'); -const { REPO_ROOT } = require('@kbn/utils'); +const { REPO_ROOT } = require('@kbn/repo-info'); const { ExportSet } = require('./export_set'); /** @typedef {import("@typescript-eslint/types").TSESTree.ExportAllDeclaration} ExportAllDeclaration */ diff --git a/packages/kbn-eslint-plugin-eslint/kibana.jsonc b/packages/kbn-eslint-plugin-eslint/kibana.jsonc index fc9c384c41562..9ee29217efea7 100644 --- a/packages/kbn-eslint-plugin-eslint/kibana.jsonc +++ b/packages/kbn-eslint-plugin-eslint/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/eslint-plugin-eslint", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-eslint-plugin-imports/BUILD.bazel b/packages/kbn-eslint-plugin-imports/BUILD.bazel deleted file mode 100644 index dab195054dda2..0000000000000 --- a/packages/kbn-eslint-plugin-imports/BUILD.bazel +++ /dev/null @@ -1,137 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-eslint-plugin-imports" -PKG_REQUIRE_NAME = "@kbn/eslint-plugin-imports" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-utils", - "//packages/kbn-import-resolver", - "@npm//resolve", - "@npm//@typescript-eslint/typescript-estree", - "@npm//eslint", - "@npm//normalize-path", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-dev-utils:npm_module_types", # only required for the tests, which are excluded except on windows - "//packages/kbn-import-resolver:npm_module_types", - "//packages/kbn-repo-source-classifier:npm_module_types", - "@npm//dedent", # only required for the tests, which are excluded except on windows - "@npm//@types/eslint", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/normalize-path", - "@npm//@types/resolve", - "@npm//@typescript-eslint/typescript-estree", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-eslint-plugin-imports/kibana.jsonc b/packages/kbn-eslint-plugin-imports/kibana.jsonc index 658733d10535b..093ab0f5b59a1 100644 --- a/packages/kbn-eslint-plugin-imports/kibana.jsonc +++ b/packages/kbn-eslint-plugin-imports/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/eslint-plugin-imports", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-eslint-plugin-imports/package.json b/packages/kbn-eslint-plugin-imports/package.json index bf29c788f4134..6e38ed0f036a3 100644 --- a/packages/kbn-eslint-plugin-imports/package.json +++ b/packages/kbn-eslint-plugin-imports/package.json @@ -2,7 +2,5 @@ "name": "@kbn/eslint-plugin-imports", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-eslint-plugin-imports/src/get_import_resolver.ts b/packages/kbn-eslint-plugin-imports/src/get_import_resolver.ts index 331232288aef1..fa1f12181f743 100644 --- a/packages/kbn-eslint-plugin-imports/src/get_import_resolver.ts +++ b/packages/kbn-eslint-plugin-imports/src/get_import_resolver.ts @@ -7,7 +7,7 @@ */ import { ImportResolver } from '@kbn/import-resolver'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Rule } from 'eslint'; import { RUNNING_IN_EDITOR } from './helpers/running_in_editor'; diff --git a/packages/kbn-eslint-plugin-imports/src/rules/uniform_imports.ts b/packages/kbn-eslint-plugin-imports/src/rules/uniform_imports.ts index 5d6daad4cfdee..d853c791640e5 100644 --- a/packages/kbn-eslint-plugin-imports/src/rules/uniform_imports.ts +++ b/packages/kbn-eslint-plugin-imports/src/rules/uniform_imports.ts @@ -9,7 +9,7 @@ import Path from 'path'; import Eslint from 'eslint'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getRelativeImportReq, getPackageRelativeImportReq } from '@kbn/import-resolver'; import { report } from '../helpers/report'; @@ -54,8 +54,9 @@ export const UniformImportsRule: Eslint.Rule.RuleModule = { return; } - const packageId = resolver.getPackageIdForPath(absolute); - if (ownPackageId && !packageId) { + const { pkgId } = result; + + if (ownPackageId && !pkgId) { // special cases, files that aren't in packages but packages are allowed to import them if ( absolute === PKGJSON_PATH || @@ -74,11 +75,12 @@ export const UniformImportsRule: Eslint.Rule.RuleModule = { } } - if (packageId === ownPackageId || !packageId) { + if (pkgId === ownPackageId || !pkgId) { const correct = getRelativeImportReq({ ...result, original: req, dirname: sourceDirname, + sourcePath, type, }); @@ -92,11 +94,11 @@ export const UniformImportsRule: Eslint.Rule.RuleModule = { return; } - const packageDir = resolver.getAbsolutePackageDir(packageId); + const packageDir = resolver.getAbsolutePackageDir(pkgId); if (!packageDir) { report(context, { node, - message: `Unable to determine location of package [${packageId}]`, + message: `Unable to determine location of package [${pkgId}]`, }); return; } @@ -104,9 +106,10 @@ export const UniformImportsRule: Eslint.Rule.RuleModule = { const correct = getPackageRelativeImportReq({ ...result, packageDir, - packageId, + pkgId, type, }); + if (req !== correct) { report(context, { node, diff --git a/packages/kbn-eslint-plugin-imports/tsconfig.json b/packages/kbn-eslint-plugin-imports/tsconfig.json index 57c1dd1c94e0f..087d77fbfe437 100644 --- a/packages/kbn-eslint-plugin-imports/tsconfig.json +++ b/packages/kbn-eslint-plugin-imports/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/import-resolver", + "@kbn/repo-source-classifier", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-expect/BUILD.bazel b/packages/kbn-expect/BUILD.bazel deleted file mode 100644 index 70ed34ad091ce..0000000000000 --- a/packages/kbn-expect/BUILD.bazel +++ /dev/null @@ -1,44 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-expect" -PKG_REQUIRE_NAME = "@kbn/expect" - -SOURCE_FILES = glob([ - "expect.js", - "expect.d.ts", -]) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "LICENSE.txt", - "package.json", -] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES + [ - ":srcs", - ], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-expect/kibana.jsonc b/packages/kbn-expect/kibana.jsonc index 53f789961dd33..86eae76001f8c 100644 --- a/packages/kbn-expect/kibana.jsonc +++ b/packages/kbn-expect/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/expect", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-expect/tsconfig.json b/packages/kbn-expect/tsconfig.json index 5ad392a7d8d5a..4346803ced341 100644 --- a/packages/kbn-expect/tsconfig.json +++ b/packages/kbn-expect/tsconfig.json @@ -1,9 +1,12 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "skipLibCheck": false + "outDir": "target/types" }, "include": [ "expect.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-failed-test-reporter-cli/BUILD.bazel b/packages/kbn-failed-test-reporter-cli/BUILD.bazel deleted file mode 100644 index 9cbd8ec6b0bce..0000000000000 --- a/packages/kbn-failed-test-reporter-cli/BUILD.bazel +++ /dev/null @@ -1,144 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-failed-test-reporter-cli" -PKG_REQUIRE_NAME = "@kbn/failed-test-reporter-cli" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.html", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-ci-stats-reporter:npm_module_types", - "//packages/kbn-dev-cli-runner:npm_module_types", - "//packages/kbn-dev-cli-errors:npm_module_types", - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-ftr-screenshot-filename:npm_module_types", - "//packages/kbn-jest-serializers:npm_module_types", - "//packages/kbn-journeys:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//@types/node", - "@npm//@types/he", - "@npm//@types/jest", - "@npm//strip-ansi", - "@npm//@types/normalize-path", - "@npm//@types/xml2js", - "@npm//axios", - "@npm//dedent", - "@npm//globby", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/failed_tests_reporter_cli.ts b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/failed_tests_reporter_cli.ts index b105b6d80ac37..1c81df82ef665 100644 --- a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/failed_tests_reporter_cli.ts +++ b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/failed_tests_reporter_cli.ts @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { run } from '@kbn/dev-cli-runner'; import { createFailError, createFlagError } from '@kbn/dev-cli-errors'; import { CiStatsReporter } from '@kbn/ci-stats-reporter'; diff --git a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failures_to_file.ts b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failures_to_file.ts index da643164a14aa..ab54d7f60dfe5 100644 --- a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failures_to_file.ts +++ b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/report_failures_to_file.ts @@ -12,7 +12,7 @@ import { createHash } from 'crypto'; import globby from 'globby'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { escape } from 'he'; import { FtrScreenshotFilename } from '@kbn/ftr-screenshot-filename'; import { JourneyScreenshots } from '@kbn/journeys'; diff --git a/packages/kbn-failed-test-reporter-cli/kibana.jsonc b/packages/kbn-failed-test-reporter-cli/kibana.jsonc index dfaa875e12735..9dbfec546ed11 100644 --- a/packages/kbn-failed-test-reporter-cli/kibana.jsonc +++ b/packages/kbn-failed-test-reporter-cli/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/failed-test-reporter-cli", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-failed-test-reporter-cli/package.json b/packages/kbn-failed-test-reporter-cli/package.json index 1aec5a4e73a09..5f40a008317ab 100644 --- a/packages/kbn-failed-test-reporter-cli/package.json +++ b/packages/kbn-failed-test-reporter-cli/package.json @@ -2,7 +2,5 @@ "name": "@kbn/failed-test-reporter-cli", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-failed-test-reporter-cli/tsconfig.json b/packages/kbn-failed-test-reporter-cli/tsconfig.json index 292157c18591a..13a5510a4ed55 100644 --- a/packages/kbn-failed-test-reporter-cli/tsconfig.json +++ b/packages/kbn-failed-test-reporter-cli/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,19 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/ci-stats-reporter", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/dev-utils", + "@kbn/tooling-log", + "@kbn/ftr-screenshot-filename", + "@kbn/jest-serializers", + "@kbn/journeys", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-field-types/BUILD.bazel b/packages/kbn-field-types/BUILD.bazel deleted file mode 100644 index c6186d28953da..0000000000000 --- a/packages/kbn-field-types/BUILD.bazel +++ /dev/null @@ -1,121 +0,0 @@ - -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library",) -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-field-types" -PKG_REQUIRE_NAME = "@kbn/field-types" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "@npm//jest-styled-components", - "@npm//node-forge", -] - -TYPES_DEPS = [ - "@npm//@types/flot", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/node-forge", - "@npm//@types/testing-library__jest-dom", - "@npm//@emotion/react", - "@npm//jest-styled-components", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-field-types/kibana.jsonc b/packages/kbn-field-types/kibana.jsonc index 5bcf174037008..fadb82dabf4a4 100644 --- a/packages/kbn-field-types/kibana.jsonc +++ b/packages/kbn-field-types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/field-types", - "owner": "@elastic/kibana-app-services", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-app-services" } diff --git a/packages/kbn-field-types/package.json b/packages/kbn-field-types/package.json index 5e8205f07c8ec..520429bbe0812 100644 --- a/packages/kbn-field-types/package.json +++ b/packages/kbn-field-types/package.json @@ -2,8 +2,5 @@ "name": "@kbn/field-types", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-field-types/tsconfig.json b/packages/kbn-field-types/tsconfig.json index 1cc4616a7ee49..6818562972f08 100644 --- a/packages/kbn-field-types/tsconfig.json +++ b/packages/kbn-field-types/tsconfig.json @@ -1,14 +1,15 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "target_types", - "declaration": true, - "emitDeclarationOnly": true, + "outDir": "target/types", "types": [ "jest", ], }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-find-used-node-modules/BUILD.bazel b/packages/kbn-find-used-node-modules/BUILD.bazel deleted file mode 100644 index f8ae0bb461b1a..0000000000000 --- a/packages/kbn-find-used-node-modules/BUILD.bazel +++ /dev/null @@ -1,130 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-find-used-node-modules" -PKG_REQUIRE_NAME = "@kbn/find-used-node-modules" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-babel-preset", - "@npm//@babel/core", - "@npm//@babel/types", - "@npm//@babel/traverse", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-import-resolver:npm_module_types", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/babel__core", - "@npm//@babel/traverse", - "@npm//@babel/types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-find-used-node-modules/kibana.jsonc b/packages/kbn-find-used-node-modules/kibana.jsonc index d5c72f5927737..77c4e5d64e794 100644 --- a/packages/kbn-find-used-node-modules/kibana.jsonc +++ b/packages/kbn-find-used-node-modules/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/find-used-node-modules", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-find-used-node-modules/package.json b/packages/kbn-find-used-node-modules/package.json index 2d5c10aab3372..d78d27e88aa00 100644 --- a/packages/kbn-find-used-node-modules/package.json +++ b/packages/kbn-find-used-node-modules/package.json @@ -2,7 +2,5 @@ "name": "@kbn/find-used-node-modules", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-find-used-node-modules/src/find_used_node_modules.test.ts b/packages/kbn-find-used-node-modules/src/find_used_node_modules.test.ts index a5175c8734183..c336927c9e6d3 100644 --- a/packages/kbn-find-used-node-modules/src/find_used_node_modules.test.ts +++ b/packages/kbn-find-used-node-modules/src/find_used_node_modules.test.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import * as Rx from 'rxjs'; import { findUsedNodeModules } from './find_used_node_modules'; import { ImportResolver } from '@kbn/import-resolver'; @@ -36,14 +37,16 @@ const RESOLVER = new MockResolver(); beforeEach(() => { jest.resetAllMocks(); - jest.requireMock('./fs').readFile.mockImplementation((path: string) => { + jest.requireMock('./fs').readFile$.mockImplementation((path: string) => { if (Object.hasOwn(FILES, path)) { - return FILES[path]; + return Rx.of(FILES[path]); } - const error: any = new Error(`ENOENT, missing file [${path}]`); - error.code = 'ENOENT'; - throw error; + return Rx.throwError(() => { + const error: any = new Error(`ENOENT, missing file [${path}]`); + error.code = 'ENOENT'; + return error; + }); }); }); diff --git a/packages/kbn-find-used-node-modules/src/find_used_node_modules.ts b/packages/kbn-find-used-node-modules/src/find_used_node_modules.ts index d02cc084e8901..0ecb7f10bb090 100644 --- a/packages/kbn-find-used-node-modules/src/find_used_node_modules.ts +++ b/packages/kbn-find-used-node-modules/src/find_used_node_modules.ts @@ -8,27 +8,15 @@ import Path from 'path'; -import { asyncForEachWithLimit } from '@kbn/std'; +import * as Rx from 'rxjs'; import type { ImportResolver } from '@kbn/import-resolver'; -import { readFile, readFileSync } from './fs'; -import { getImportRequests } from './get_import_requests'; +import { readFile$ } from './fs'; function isObj(v: any): v is Record { return typeof v === 'object' && v !== null; } -function getPeerDeps(thisNodeModule: string) { - const pkgPath = require.resolve(`${thisNodeModule}/package.json`); - const pkg = JSON.parse(readFileSync(pkgPath)); - - if (isObj(pkg) && isObj(pkg.peerDependencies)) { - return Object.keys(pkg.peerDependencies); - } else { - return []; - } -} - interface Options { resolver: ImportResolver; entryPaths: string[]; @@ -55,83 +43,130 @@ interface Options { * solve this by scanning the node_modules directory for all the packages which are used but that * was much slower and lead to extra entries in package.json. */ + +import { getImportRequests } from './get_import_requests'; + export async function findUsedNodeModules(options: Options) { - const queue = new Set(options.entryPaths); const results = new Set(); - const entryPathsIntoNodeModules = new Map>(); - for (const path of queue) { - if (Path.extname(path) !== '.js') { - continue; - } - - const dirname = Path.dirname(path); - const code = await readFile(path); - const reqs = getImportRequests(code); - - for (const req of reqs) { - // resolve the request to it's actual file on dist - const result = options.resolver.resolve(req, dirname); - - // ignore non-file resolution results, these represent files which aren't on - // the file-system yet (like during the build) built-ins, explicitily ignored - // files, and @types only imports - if (result?.type !== 'file') { - continue; - } - - // if the result points to a node_module (or another node_module)... - if (result.nodeModule && result.nodeModule !== options.thisNodeModule) { - // add it to the results - results.add(result.nodeModule); - - // record this absolute path as an entry path into the node module from our entries, if we - // need to scan this node_module for used deps we need to know how we access it. - const nmEntries = entryPathsIntoNodeModules.get(result.nodeModule); - if (!nmEntries) { - entryPathsIntoNodeModules.set(result.nodeModule, new Set([result.absolute])); - } else { - nmEntries.add(result.absolute); + const path$ = new Rx.Subject(); + + let inputs = 0; + let outputs = 0; + const promise = Rx.lastValueFrom( + path$.pipe( + Rx.filter((path) => Path.extname(path) === '.js'), + Rx.distinct(), + Rx.tap(() => { + inputs += 1; + }), + Rx.mergeMap((path) => readFile$(path, 'utf8').pipe(Rx.map((code) => ({ code, path })))), + Rx.mergeMap(async ({ path, code }) => { + const reqs = getImportRequests(code); + const dirname = Path.dirname(path); + + for (const req of reqs) { + // resolve the request to it's actual file on dist + const result = options.resolver.resolve(req, dirname); + + // ignore non-file resolution results, these represent files which aren't on + // the file-system yet (like during the build) built-ins, explicitily ignored + // files, and @types only imports + if (result?.type !== 'file') { + continue; + } + + if (result.pkgId) { + results.add(result.pkgId); + path$.next(result.absolute); + continue; + } + + // if the result points to a node_module (or another node_module)... + if (result.nodeModule && result.nodeModule !== options.thisNodeModule) { + // add it to the results + results.add(result.nodeModule); + + // record this absolute path as an entry path into the node module from our entries, if we + // need to scan this node_module for used deps we need to know how we access it. + const nmEntries = entryPathsIntoNodeModules.get(result.nodeModule); + if (!nmEntries) { + entryPathsIntoNodeModules.set(result.nodeModule, new Set([result.absolute])); + } else { + nmEntries.add(result.absolute); + } + } + + // no need to scan node_modules unless they're bazel packages + if ( + !result.nodeModule || + result.nodeModule === options.thisNodeModule || + options.resolver.isBazelPackage(result.nodeModule) + ) { + path$.next(result.absolute); + continue; + } + } + }, 40), + Rx.tap(() => { + outputs += 1; + if (inputs === outputs) { + path$.complete(); } - } - - // no need to scan node_modules unless they're bazel packages - if ( - !result.nodeModule || - result.nodeModule === options.thisNodeModule || - options.resolver.isBazelPackage(result.nodeModule) - ) { - queue.add(result.absolute); - } - } + }) + ) + ); + + for (const path of options.entryPaths) { + path$.next(path); } + await promise; + if (options.findUsedPeers) { - await asyncForEachWithLimit(results, 10, async (dep) => { - const entryPaths = entryPathsIntoNodeModules.get(dep); - if (!entryPaths?.size) { - return; - } - - const peerDeps = getPeerDeps(dep); - if (!peerDeps.length) { - return; - } - - const usedInside = await findUsedNodeModules({ - resolver: options.resolver, - entryPaths: Array.from(entryPaths), - findUsedPeers: false, - thisNodeModule: dep, - }); - - for (const peer of peerDeps) { - if (usedInside.includes(peer)) { - results.add(peer); - } - } - }); + await Rx.lastValueFrom( + Rx.from(results).pipe( + Rx.mergeMap((dep) => { + const entryPaths = entryPathsIntoNodeModules.get(dep); + if (!entryPaths?.size) { + return Rx.EMPTY; + } + + const pkgPath = require.resolve(`${dep}/package.json`); + return readFile$(pkgPath, 'utf8').pipe( + Rx.mergeMap((pkgJson) => { + const pkg = JSON.parse(pkgJson); + + if (!isObj(pkg) || !isObj(pkg.peerDependencies)) { + return Rx.EMPTY; + } + + const peerDeps = Object.keys(pkg.peerDependencies); + if (!peerDeps.length) { + return Rx.EMPTY; + } + + return Rx.of({ entryPaths, dep, peerDeps }); + }) + ); + }, 50), + Rx.concatMap(async ({ entryPaths, dep, peerDeps }) => { + const usedInside = await findUsedNodeModules({ + resolver: options.resolver, + entryPaths: Array.from(entryPaths), + findUsedPeers: false, + thisNodeModule: dep, + }); + + for (const peer of peerDeps) { + if (usedInside.includes(peer)) { + results.add(peer); + } + } + }) + ) + ); } return Array.from(results).sort((a, b) => a.localeCompare(b)); diff --git a/packages/kbn-find-used-node-modules/src/fs.ts b/packages/kbn-find-used-node-modules/src/fs.ts index e0e9c9690803c..13d36697df2eb 100644 --- a/packages/kbn-find-used-node-modules/src/fs.ts +++ b/packages/kbn-find-used-node-modules/src/fs.ts @@ -7,12 +7,6 @@ */ import Fs from 'fs'; -import Fsp from 'fs/promises'; +import * as Rx from 'rxjs'; -export function readFileSync(path: string) { - return Fs.readFileSync(path, 'utf8'); -} - -export function readFile(path: string) { - return Fsp.readFile(path, 'utf8'); -} +export const readFile$ = Rx.bindNodeCallback<[string, BufferEncoding], [string]>(Fs.readFile); diff --git a/packages/kbn-find-used-node-modules/src/get_import_requests.ts b/packages/kbn-find-used-node-modules/src/get_import_requests.ts index 03de25f7fb92a..5ae08f77645ee 100644 --- a/packages/kbn-find-used-node-modules/src/get_import_requests.ts +++ b/packages/kbn-find-used-node-modules/src/get_import_requests.ts @@ -8,7 +8,6 @@ import * as parser from '@babel/parser'; import traverse from '@babel/traverse'; -// @ts-expect-error Not available with types import babelParserOptions from '@kbn/babel-preset/common_babel_parser_options'; import { importVisitor } from './import_visitor'; diff --git a/packages/kbn-find-used-node-modules/tsconfig.json b/packages/kbn-find-used-node-modules/tsconfig.json index 57c1dd1c94e0f..b43f686f33854 100644 --- a/packages/kbn-find-used-node-modules/tsconfig.json +++ b/packages/kbn-find-used-node-modules/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/import-resolver", + "@kbn/babel-preset", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-flot-charts/BUILD.bazel b/packages/kbn-flot-charts/BUILD.bazel index ec2655bc2bbf1..88b7b4a553e36 100644 --- a/packages/kbn-flot-charts/BUILD.bazel +++ b/packages/kbn-flot-charts/BUILD.bazel @@ -34,16 +34,3 @@ js_library( package_name = PKG_REQUIRE_NAME, visibility = ["//visibility:public"], ) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-flot-charts/kibana.jsonc b/packages/kbn-flot-charts/kibana.jsonc index ad96bcf118b1b..5176e4a96d9f0 100644 --- a/packages/kbn-flot-charts/kibana.jsonc +++ b/packages/kbn-flot-charts/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/flot-charts", - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-flot-charts/tsconfig.json b/packages/kbn-flot-charts/tsconfig.json new file mode 100644 index 0000000000000..7718842c7491f --- /dev/null +++ b/packages/kbn-flot-charts/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": [ + "**/*.js" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/i18n" + ] +} diff --git a/packages/kbn-ftr-common-functional-services/BUILD.bazel b/packages/kbn-ftr-common-functional-services/BUILD.bazel deleted file mode 100644 index 37e6f35ae2405..0000000000000 --- a/packages/kbn-ftr-common-functional-services/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ftr-common-functional-services" -PKG_REQUIRE_NAME = "@kbn/ftr-common-functional-services" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-es-archiver:npm_module_types", - "//packages/kbn-test:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ftr-common-functional-services/kibana.jsonc b/packages/kbn-ftr-common-functional-services/kibana.jsonc index 5ceecdcda8610..c8f706e5acf38 100644 --- a/packages/kbn-ftr-common-functional-services/kibana.jsonc +++ b/packages/kbn-ftr-common-functional-services/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ftr-common-functional-services", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-ftr-common-functional-services/package.json b/packages/kbn-ftr-common-functional-services/package.json index 0de1d379fff8a..7821b80e36ba4 100644 --- a/packages/kbn-ftr-common-functional-services/package.json +++ b/packages/kbn-ftr-common-functional-services/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ftr-common-functional-services", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-ftr-common-functional-services/tsconfig.json b/packages/kbn-ftr-common-functional-services/tsconfig.json index 292157c18591a..639991bb2ce77 100644 --- a/packages/kbn-ftr-common-functional-services/tsconfig.json +++ b/packages/kbn-ftr-common-functional-services/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/tooling-log", + "@kbn/es-archiver", + "@kbn/test" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ftr-screenshot-filename/BUILD.bazel b/packages/kbn-ftr-screenshot-filename/BUILD.bazel deleted file mode 100644 index 5ac795bfe2e03..0000000000000 --- a/packages/kbn-ftr-screenshot-filename/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-ftr-screenshot-filename" -PKG_REQUIRE_NAME = "@kbn/ftr-screenshot-filename" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//tslib", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ftr-screenshot-filename/kibana.jsonc b/packages/kbn-ftr-screenshot-filename/kibana.jsonc index 61ce39de5a622..5429602d9c0ed 100644 --- a/packages/kbn-ftr-screenshot-filename/kibana.jsonc +++ b/packages/kbn-ftr-screenshot-filename/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/ftr-screenshot-filename", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-ftr-screenshot-filename/package.json b/packages/kbn-ftr-screenshot-filename/package.json index 060e1ca7018b2..16e6a60922fb1 100644 --- a/packages/kbn-ftr-screenshot-filename/package.json +++ b/packages/kbn-ftr-screenshot-filename/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ftr-screenshot-filename", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-ftr-screenshot-filename/tsconfig.json b/packages/kbn-ftr-screenshot-filename/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-ftr-screenshot-filename/tsconfig.json +++ b/packages/kbn-ftr-screenshot-filename/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-generate/BUILD.bazel b/packages/kbn-generate/BUILD.bazel deleted file mode 100644 index 3a470bc08ffb8..0000000000000 --- a/packages/kbn-generate/BUILD.bazel +++ /dev/null @@ -1,119 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-generate" -PKG_REQUIRE_NAME = "@kbn/generate" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = glob(["templates/**/*"]) + [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-utils", - "//packages/kbn-bazel-packages", - "//packages/kbn-utils", - "//packages/kbn-sort-package-json", - "@npm//ejs", - "@npm//micromatch", - "@npm//normalize-path", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-bazel-packages:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-sort-package-json:npm_module_types", - "@npm//@types/micromatch", - "@npm//ejs", - "@npm//micromatch", - "@npm//normalize-path", - "@npm//@types/ejs", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-generate/kibana.jsonc b/packages/kbn-generate/kibana.jsonc index d7d38e4822cb7..26a6f52e21c3a 100644 --- a/packages/kbn-generate/kibana.jsonc +++ b/packages/kbn-generate/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/generate", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-generate/package.json b/packages/kbn-generate/package.json index bd92463816cad..b0d3896e41150 100644 --- a/packages/kbn-generate/package.json +++ b/packages/kbn-generate/package.json @@ -2,7 +2,5 @@ "name": "@kbn/generate", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-generate/src/cli.ts b/packages/kbn-generate/src/cli.ts index d3d1366682fea..e31d651f955b6 100644 --- a/packages/kbn-generate/src/cli.ts +++ b/packages/kbn-generate/src/cli.ts @@ -13,7 +13,6 @@ import { ContextExtensions } from './generate_command'; import { PackageCommand } from './commands/package_command'; import { CodeownersCommand } from './commands/codeowners_command'; -import { PackagesBuildManifestCommand } from './commands/packages_build_manifest_command'; /** * Runs the generate CLI. Called by `node scripts/generate` and not intended for use outside of that script @@ -28,6 +27,6 @@ export function runGenerateCli() { }; }, }, - [PackageCommand, PackagesBuildManifestCommand, CodeownersCommand] + [PackageCommand, CodeownersCommand] ).execute(); } diff --git a/packages/kbn-generate/src/commands/codeowners_command.ts b/packages/kbn-generate/src/commands/codeowners_command.ts index f1c42dc54173f..27b81ada9466b 100644 --- a/packages/kbn-generate/src/commands/codeowners_command.ts +++ b/packages/kbn-generate/src/commands/codeowners_command.ts @@ -9,7 +9,7 @@ import Fsp from 'fs/promises'; import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { discoverBazelPackages } from '@kbn/bazel-packages'; import type { GenerateCommand } from '../generate_command'; diff --git a/packages/kbn-generate/src/commands/package_command.ts b/packages/kbn-generate/src/commands/package_command.ts index 4d09ab45c9728..0fbf960899e21 100644 --- a/packages/kbn-generate/src/commands/package_command.ts +++ b/packages/kbn-generate/src/commands/package_command.ts @@ -14,13 +14,13 @@ import globby from 'globby'; import { ESLint } from 'eslint'; import micromatch from 'micromatch'; -import { REPO_ROOT } from '@kbn/utils'; -import { discoverBazelPackages, BAZEL_PACKAGE_DIRS } from '@kbn/bazel-packages'; +import { REPO_ROOT } from '@kbn/repo-info'; +import { BAZEL_PACKAGE_DIRS } from '@kbn/bazel-packages'; import { createFailError, createFlagError, isFailError } from '@kbn/dev-cli-errors'; import { sortPackageJson } from '@kbn/sort-package-json'; import { validateElasticTeam } from '../lib/validate_elastic_team'; -import { TEMPLATE_DIR, ROOT_PKG_DIR, PKG_TEMPLATE_DIR } from '../paths'; +import { ROOT_PKG_DIR, PKG_TEMPLATE_DIR } from '../paths'; import type { GenerateCommand } from '../generate_command'; import { ask } from '../lib/ask'; @@ -180,21 +180,12 @@ ${BAZEL_PACKAGE_DIRS.map((dir) => ` ./${dir}/*\n`).join ? [packageJson.devDependencies, packageJson.dependencies] : [packageJson.dependencies, packageJson.devDependencies]; - addDeps[pkgId] = `link:bazel-bin/${normalizedRepoRelativeDir}`; + addDeps[pkgId] = `link:${normalizedRepoRelativeDir}`; delete removeDeps[pkgId]; await Fsp.writeFile(packageJsonPath, sortPackageJson(JSON.stringify(packageJson))); log.info('Updated package.json file'); - await render.toFile( - Path.resolve(TEMPLATE_DIR, 'packages_BUILD.bazel.ejs'), - Path.resolve(REPO_ROOT, 'packages/BUILD.bazel'), - { - packages: await discoverBazelPackages(REPO_ROOT), - } - ); - log.info('Updated packages/BUILD.bazel'); - log.success(`Generated ${pkgId}! Please bootstrap to make sure it works.`); }, }; diff --git a/packages/kbn-generate/src/commands/packages_build_manifest_command.ts b/packages/kbn-generate/src/commands/packages_build_manifest_command.ts deleted file mode 100644 index 4e27753479853..0000000000000 --- a/packages/kbn-generate/src/commands/packages_build_manifest_command.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 Path from 'path'; -import Fsp from 'fs/promises'; - -import { REPO_ROOT } from '@kbn/utils'; -import { discoverBazelPackages } from '@kbn/bazel-packages'; - -import { TEMPLATE_DIR } from '../paths'; -import { GenerateCommand } from '../generate_command'; - -const USAGE = `node scripts/generate packages_build_manifest`; - -export const PackagesBuildManifestCommand: GenerateCommand = { - name: 'packages_build_manifest', - usage: USAGE, - description: 'Generate the packages/BUILD.bazel file', - async run({ log, render }) { - const packages = await discoverBazelPackages(REPO_ROOT); - const dest = Path.resolve(REPO_ROOT, 'packages/BUILD.bazel'); - const relDest = Path.relative(process.cwd(), dest); - - const content = await render.toString( - Path.join(TEMPLATE_DIR, 'packages_BUILD.bazel.ejs'), - dest, - { packages } - ); - - let existing; - try { - existing = await Fsp.readFile(dest, 'utf8'); - } catch { - // noop - } - - if (existing === content) { - log.success(relDest, 'is already updated'); - return; - } - - await Fsp.writeFile(dest, content); - log.info(relDest, 'updated'); - }, -}; diff --git a/packages/kbn-generate/src/lib/render.ts b/packages/kbn-generate/src/lib/render.ts index 33c6a903875f4..ada8316ba4b21 100644 --- a/packages/kbn-generate/src/lib/render.ts +++ b/packages/kbn-generate/src/lib/render.ts @@ -13,7 +13,7 @@ import Ejs from 'ejs'; import normalizePath from 'normalize-path'; import { ToolingLog } from '@kbn/tooling-log'; import { sortPackageJson } from '@kbn/sort-package-json'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; export type Vars = Record; export interface RenderContext extends Vars { diff --git a/packages/kbn-generate/src/paths.ts b/packages/kbn-generate/src/paths.ts index 79319f58d0670..d73bd60cc16b7 100644 --- a/packages/kbn-generate/src/paths.ts +++ b/packages/kbn-generate/src/paths.ts @@ -8,8 +8,8 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; export const ROOT_PKG_DIR = Path.resolve(REPO_ROOT, 'packages'); -export const TEMPLATE_DIR = Path.resolve(__dirname, '../../templates'); +export const TEMPLATE_DIR = Path.resolve(__dirname, '../templates'); export const PKG_TEMPLATE_DIR = Path.resolve(TEMPLATE_DIR, 'package'); diff --git a/packages/kbn-generate/templates/package/BUILD.bazel.ejs b/packages/kbn-generate/templates/package/BUILD.bazel.ejs deleted file mode 100644 index 4046385998554..0000000000000 --- a/packages/kbn-generate/templates/package/BUILD.bazel.ejs +++ /dev/null @@ -1,138 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = <%- json(pkg.directoryName) %> -PKG_REQUIRE_NAME = <%- json(pkg.id) %> - -SOURCE_FILES = glob( - [ - "**/*.ts", - <%_ if (pkg.web) { _%> - "**/*.tsx", - <%_ } _%> - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -<%_ if (pkg.web) { _%> - "@npm//react" -<%_ } _%> -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -<%_ if (pkg.web) { _%> - "@npm//@types/react" -<%_ } _%> -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) -<% if (pkg.web) { %> -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) -<% } %> -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + <%- pkg.web ? '[":target_node", ":target_web"]' : '[":target_node"]' %>, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + <%- pkg.web ? '[":target_node", ":target_web", ":tsc_types"]' : '[":target_node", ":tsc_types"]' %>, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-generate/templates/package/kibana.jsonc.ejs b/packages/kbn-generate/templates/package/kibana.jsonc.ejs index f39655160f82f..48ef56f462fcd 100644 --- a/packages/kbn-generate/templates/package/kibana.jsonc.ejs +++ b/packages/kbn-generate/templates/package/kibana.jsonc.ejs @@ -1,8 +1,6 @@ { "type": "shared-common", "id": <%- json(pkg.id) %>, - "owner": <%- json(pkg.owner) %>,<% if (pkg.dev) { %> - "devOnly": true,<% } %> - "runtimeDeps": [], - "typeDeps": [], + "owner": <%- json(pkg.owner) %><% if (pkg.dev) { %>, + "devOnly": true<% } %> } diff --git a/packages/kbn-generate/templates/package/package.json.ejs b/packages/kbn-generate/templates/package/package.json.ejs index 7ab4cb3dfc20f..af66105cb2cbb 100644 --- a/packages/kbn-generate/templates/package/package.json.ejs +++ b/packages/kbn-generate/templates/package/package.json.ejs @@ -2,10 +2,5 @@ "name": <%- json(pkg.id) %>, "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" - <%_ if (pkg.web) { %>, - "browser": "./target_web/index.js" - <%_ } %> + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-generate/templates/package/tsconfig.json.ejs b/packages/kbn-generate/templates/package/tsconfig.json.ejs index 2b1e544d34239..29693643cbd3f 100644 --- a/packages/kbn-generate/templates/package/tsconfig.json.ejs +++ b/packages/kbn-generate/templates/package/tsconfig.json.ejs @@ -1,9 +1,7 @@ { - "extends": "<%- relativePathTo("tsconfig.bazel.json") %>", + "extends": "<%- relativePathTo("tsconfig.base.json") %>", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ <%_ if (pkg.web) { _%> "jest", @@ -20,5 +18,9 @@ <%_ if (pkg.web) { _%> "**/*.tsx", <%_ } _%> - ] + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [] } diff --git a/packages/kbn-generate/templates/packages_BUILD.bazel.ejs b/packages/kbn-generate/templates/packages_BUILD.bazel.ejs deleted file mode 100644 index 2656c97ad40e5..0000000000000 --- a/packages/kbn-generate/templates/packages_BUILD.bazel.ejs +++ /dev/null @@ -1,42 +0,0 @@ -################ -################ -## This file is automatically generated, to create a new package use `node scripts/generate package --help` or run -## `node scripts/generate packages_build_manifest` to regenerate it from the current state of the repo -################ -################ - -# It will build all declared code packages -filegroup( - name = "build_pkg_code", - srcs = [ -<% for (const p of packages.filter(p => p.hasBuildRule())) { _%> - "//<%- p.normalizedRepoRelativeDir %>:build", -<% } _%> - ], -) - -# It will build all declared package types -filegroup( - name = "build_pkg_types", - srcs = [ -<% for (const p of packages.filter(p => p.hasBuildTypesRule())) { _%> - "//<%- p.normalizedRepoRelativeDir %>:build_types", -<% } _%> - ], -) - -# Grouping target to call all underlying packages js builds -filegroup( - name = "build", - srcs = [ - ":build_pkg_code" - ], -) - -# Grouping target to call all underlying packages ts builds -filegroup( - name = "build_types", - srcs = [ - ":build_pkg_types" - ], -) diff --git a/packages/kbn-generate/tsconfig.json b/packages/kbn-generate/tsconfig.json index 57c1dd1c94e0f..4ecb368ed162f 100644 --- a/packages/kbn-generate/tsconfig.json +++ b/packages/kbn-generate/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/bazel-packages", + "@kbn/sort-package-json", + "@kbn/dev-cli-runner", + "@kbn/repo-info", + "@kbn/dev-cli-errors", + "@kbn/tooling-log", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-get-repo-files/BUILD.bazel b/packages/kbn-get-repo-files/BUILD.bazel deleted file mode 100644 index 215dc3efda888..0000000000000 --- a/packages/kbn-get-repo-files/BUILD.bazel +++ /dev/null @@ -1,124 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-get-repo-files" -PKG_REQUIRE_NAME = "@kbn/get-repo-files" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//execa", - "//packages/kbn-utils:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-get-repo-files/kibana.jsonc b/packages/kbn-get-repo-files/kibana.jsonc index 44ee4e026ba7e..9bf339cc5c321 100644 --- a/packages/kbn-get-repo-files/kibana.jsonc +++ b/packages/kbn-get-repo-files/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/get-repo-files", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-get-repo-files/package.json b/packages/kbn-get-repo-files/package.json index 10613d821446b..d16a1b7dbe668 100644 --- a/packages/kbn-get-repo-files/package.json +++ b/packages/kbn-get-repo-files/package.json @@ -2,7 +2,5 @@ "name": "@kbn/get-repo-files", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-get-repo-files/src/get_repo_files.ts b/packages/kbn-get-repo-files/src/get_repo_files.ts index f63018b99e0d7..f0b52b5021510 100644 --- a/packages/kbn-get-repo-files/src/get_repo_files.ts +++ b/packages/kbn-get-repo-files/src/get_repo_files.ts @@ -10,14 +10,8 @@ import Path from 'path'; import Fs from 'fs'; import execa from 'execa'; -import { REPO_ROOT } from '@kbn/utils'; - -interface RepoPath { - /** repo-relative path to the file */ - repoRel: string; - /** absolute path to the file */ - abs: string; -} +import { REPO_ROOT } from '@kbn/repo-info'; +import { RepoPath } from '@kbn/repo-path'; /** * List the files in the repo, only including files which are manged by version @@ -47,7 +41,7 @@ export async function getRepoFiles(include?: string[], exclude?: string[]) { const repoRel = line.slice(2); // trim the single char status and separating space from the line const existingPath = paths.get(repoRel); - const path = existingPath ?? { repoRel, abs: Path.resolve(REPO_ROOT, repoRel) }; + const path = existingPath ?? new RepoPath(REPO_ROOT, repoRel); if (!existingPath) { paths.set(repoRel, path); } diff --git a/packages/kbn-get-repo-files/tsconfig.json b/packages/kbn-get-repo-files/tsconfig.json index 57c1dd1c94e0f..4c74f7e7042c5 100644 --- a/packages/kbn-get-repo-files/tsconfig.json +++ b/packages/kbn-get-repo-files/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/repo-info", + "@kbn/repo-path", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-guided-onboarding/BUILD.bazel b/packages/kbn-guided-onboarding/BUILD.bazel deleted file mode 100644 index 9e3bde78c5d23..0000000000000 --- a/packages/kbn-guided-onboarding/BUILD.bazel +++ /dev/null @@ -1,150 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-guided-onboarding" -PKG_REQUIRE_NAME = "@kbn/guided-onboarding" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//enzyme", - "@npm//react", - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/core/http/core-http-browser", - "//packages/core/ui-settings/core-ui-settings-browser", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@elastic/eui", - "@npm//@types/enzyme", - "@npm//@types/react", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/core/http/core-http-browser:npm_module_types", - "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types", - "//packages/core/application/core-application-browser:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-guided-onboarding/kibana.jsonc b/packages/kbn-guided-onboarding/kibana.jsonc index 4715fec8fbd5e..6f9768ce87ce3 100644 --- a/packages/kbn-guided-onboarding/kibana.jsonc +++ b/packages/kbn-guided-onboarding/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/guided-onboarding", - "owner": "@elastic/platform-onboarding", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/platform-onboarding" } diff --git a/packages/kbn-guided-onboarding/package.json b/packages/kbn-guided-onboarding/package.json index f0f92c8a130e4..d25b7c04bc4a0 100644 --- a/packages/kbn-guided-onboarding/package.json +++ b/packages/kbn-guided-onboarding/package.json @@ -2,8 +2,5 @@ "name": "@kbn/guided-onboarding", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-guided-onboarding/tsconfig.json b/packages/kbn-guided-onboarding/tsconfig.json index 16588a28c9bfb..5f0ba6f1c54f6 100644 --- a/packages/kbn-guided-onboarding/tsconfig.json +++ b/packages/kbn-guided-onboarding/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,12 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/core-application-browser" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-handlebars/BUILD.bazel b/packages/kbn-handlebars/BUILD.bazel deleted file mode 100644 index 2588bbe7857c0..0000000000000 --- a/packages/kbn-handlebars/BUILD.bazel +++ /dev/null @@ -1,118 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-handlebars" -PKG_REQUIRE_NAME = "@kbn/handlebars" -TYPES_PKG_REQUIRE_NAME = "@types/kbn__handlebars" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__jest__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//handlebars", -] - -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/node", - "@npm//handlebars", - "@npm//tslib", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-handlebars/kibana.jsonc b/packages/kbn-handlebars/kibana.jsonc index 64249345bce8e..59b3c28ddb391 100644 --- a/packages/kbn-handlebars/kibana.jsonc +++ b/packages/kbn-handlebars/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/handlebars", - "owner": "@elastic/kibana-security", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-security" } diff --git a/packages/kbn-handlebars/package.json b/packages/kbn-handlebars/package.json index 85a52e60d749b..46ca823a476d4 100644 --- a/packages/kbn-handlebars/package.json +++ b/packages/kbn-handlebars/package.json @@ -2,8 +2,5 @@ "name": "@kbn/handlebars", "version": "1.0.0", "private": true, - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "types": "./target_types/index.d.ts", "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/kbn-handlebars/tsconfig.json b/packages/kbn-handlebars/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-handlebars/tsconfig.json +++ b/packages/kbn-handlebars/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-hapi-mocks/BUILD.bazel b/packages/kbn-hapi-mocks/BUILD.bazel deleted file mode 100644 index 120a4fc0b0d9a..0000000000000 --- a/packages/kbn-hapi-mocks/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-hapi-mocks" -PKG_REQUIRE_NAME = "@kbn/hapi-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@hapi/hapi", - "@npm//@types/hapi__hapi", - "//packages/kbn-utility-types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-hapi-mocks/kibana.jsonc b/packages/kbn-hapi-mocks/kibana.jsonc index 9a2632c95d814..f88e6e29df493 100644 --- a/packages/kbn-hapi-mocks/kibana.jsonc +++ b/packages/kbn-hapi-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/hapi-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-hapi-mocks/package.json b/packages/kbn-hapi-mocks/package.json index 67968be611826..f2b3ea9de9e16 100644 --- a/packages/kbn-hapi-mocks/package.json +++ b/packages/kbn-hapi-mocks/package.json @@ -2,7 +2,5 @@ "name": "@kbn/hapi-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-hapi-mocks/tsconfig.json b/packages/kbn-hapi-mocks/tsconfig.json index 57c1dd1c94e0f..11f148d713b3b 100644 --- a/packages/kbn-hapi-mocks/tsconfig.json +++ b/packages/kbn-hapi-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/utility-types" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-health-gateway-server/BUILD.bazel b/packages/kbn-health-gateway-server/BUILD.bazel deleted file mode 100644 index 1273cc7a0d7a0..0000000000000 --- a/packages/kbn-health-gateway-server/BUILD.bazel +++ /dev/null @@ -1,127 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-health-gateway-server" -PKG_REQUIRE_NAME = "@kbn/health-gateway-server" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//@hapi/hapi", - "@npm//node-fetch", - "//packages/kbn-config", - "//packages/kbn-config-mocks", - "//packages/kbn-config-schema", - "//packages/kbn-logging-mocks", - "//packages/kbn-server-http-tools", - "//packages/kbn-utils", - "//packages/core/logging/core-logging-server-internal", -] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/hapi__hapi", - "@npm//@types/node-fetch", - "@npm//moment", - "//packages/core/base/core-base-server-internal:npm_module_types", - "//packages/core/logging/core-logging-server-internal:npm_module_types", - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-mocks:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-logging:npm_module_types", - "//packages/kbn-logging-mocks:npm_module_types", - "//packages/kbn-server-http-tools:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-utility-types-jest:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-health-gateway-server/kibana.jsonc b/packages/kbn-health-gateway-server/kibana.jsonc index 5c31c05c82461..6f9470fac54e5 100644 --- a/packages/kbn-health-gateway-server/kibana.jsonc +++ b/packages/kbn-health-gateway-server/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-server", "id": "@kbn/health-gateway-server", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-health-gateway-server/package.json b/packages/kbn-health-gateway-server/package.json index d38191a879a84..8e11c679f325b 100644 --- a/packages/kbn-health-gateway-server/package.json +++ b/packages/kbn-health-gateway-server/package.json @@ -2,11 +2,9 @@ "name": "@kbn/health-gateway-server", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0", "scripts": { - "start": "node ../../bazel-bin/packages/kbn-health-gateway-server/target_node/scripts/init.js" - }, - "types": "./target_types/index.d.ts" -} + "start": "node -r '@kbn/babel-register/install' ./scripts/init" + } +} \ No newline at end of file diff --git a/packages/kbn-health-gateway-server/src/config/config_service.test.ts b/packages/kbn-health-gateway-server/src/config/config_service.test.ts index 351467085195d..b686b2ec171a3 100644 --- a/packages/kbn-health-gateway-server/src/config/config_service.test.ts +++ b/packages/kbn-health-gateway-server/src/config/config_service.test.ts @@ -12,7 +12,7 @@ import { rawConfigServiceMock, } from './config_service.test.mocks'; import { loggerMock, MockedLogger } from '@kbn/logging-mocks'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; import { getConfigService } from './config_service'; const DEFAULT_CONFIG_PATH = fromRoot('config/gateway.yml'); diff --git a/packages/kbn-health-gateway-server/src/config/config_service.ts b/packages/kbn-health-gateway-server/src/config/config_service.ts index 059a1773d29c3..4b2b4b68f91ff 100644 --- a/packages/kbn-health-gateway-server/src/config/config_service.ts +++ b/packages/kbn-health-gateway-server/src/config/config_service.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { fromRoot, REPO_ROOT } from '@kbn/utils'; +import { fromRoot, REPO_ROOT } from '@kbn/repo-info'; import type { LoggerFactory } from '@kbn/logging'; import { ConfigService as KbnConfigService, CliArgs, Env, RawConfigService } from '@kbn/config'; import { getArgValues } from './read_argv'; diff --git a/packages/kbn-health-gateway-server/tsconfig.json b/packages/kbn-health-gateway-server/tsconfig.json index 98e6b09c1c81a..02a2f9c776b2c 100644 --- a/packages/kbn-health-gateway-server/tsconfig.json +++ b/packages/kbn-health-gateway-server/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": false, "types": [ "jest", @@ -12,5 +10,20 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-base-server-internal", + "@kbn/core-logging-server-internal", + "@kbn/config", + "@kbn/config-mocks", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/logging-mocks", + "@kbn/server-http-tools", + "@kbn/utility-types", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-i18n-react/BUILD.bazel b/packages/kbn-i18n-react/BUILD.bazel index 644507b4a45b5..b2c2dff7eaba3 100644 --- a/packages/kbn-i18n-react/BUILD.bazel +++ b/packages/kbn-i18n-react/BUILD.bazel @@ -1,11 +1,6 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-i18n-react" -PKG_REQUIRE_NAME = "@kbn/i18n-react" - -SOURCE_FILES = glob( +SRCS = glob( [ "**/*.ts", "**/*.tsx", @@ -25,99 +20,17 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ +BUNDLER_DEPS = [ "//packages/kbn-i18n", "@npm//prop-types", "@npm//react", "@npm//react-intl" ] -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/prop-types", - "@npm//@types/react", - "@npm//@types/react-intl", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + name = "kbn-i18n-react", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, + package_name = "@kbn/i18n-react", visibility = ["//visibility:public"], ) diff --git a/packages/kbn-i18n-react/kibana.jsonc b/packages/kbn-i18n-react/kibana.jsonc index 296e7295e52b6..090a4f0fa61be 100644 --- a/packages/kbn-i18n-react/kibana.jsonc +++ b/packages/kbn-i18n-react/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/i18n-react", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-i18n-react/package.json b/packages/kbn-i18n-react/package.json index d0f23a32a555e..ae9e5d36beff7 100644 --- a/packages/kbn-i18n-react/package.json +++ b/packages/kbn-i18n-react/package.json @@ -1,10 +1,7 @@ { "name": "@kbn/i18n-react", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "version": "1.0.0", "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-i18n-react/tsconfig.json b/packages/kbn-i18n-react/tsconfig.json index 14bb804696bbd..74fb754fc3d2d 100644 --- a/packages/kbn-i18n-react/tsconfig.json +++ b/packages/kbn-i18n-react/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -13,4 +11,10 @@ "**/*.ts", "**/*.tsx", ], + "kbn_references": [ + "@kbn/i18n" + ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-i18n/BUILD.bazel b/packages/kbn-i18n/BUILD.bazel index 1cf9837ec074b..3df0fa95e05ff 100644 --- a/packages/kbn-i18n/BUILD.bazel +++ b/packages/kbn-i18n/BUILD.bazel @@ -1,11 +1,6 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-i18n" -PKG_REQUIRE_NAME = "@kbn/i18n" - -SOURCE_FILES = glob( +SRCS = glob( [ "**/*.ts", "**/*.tsx", @@ -27,97 +22,16 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "GUIDELINE.md", - "README.md" -] - -RUNTIME_DEPS = [ +BUNDLER_DEPS = [ "@npm//intl-format-cache", "@npm//intl-messageformat", "@npm//intl-relativeformat", ] -TYPES_DEPS = [ - "@npm//intl-messageformat", - "@npm//tslib", - "@npm//@types/intl-relativeformat", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + name = "kbn-i18n", + package_name = "@kbn/i18n", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, visibility = ["//visibility:public"], ) diff --git a/packages/kbn-i18n/kibana.jsonc b/packages/kbn-i18n/kibana.jsonc index cd5613bc493c0..8d4bdf6f003c9 100644 --- a/packages/kbn-i18n/kibana.jsonc +++ b/packages/kbn-i18n/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/i18n", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-i18n/package.json b/packages/kbn-i18n/package.json index 26a8aeb99dc34..d15b66768fd39 100644 --- a/packages/kbn-i18n/package.json +++ b/packages/kbn-i18n/package.json @@ -1,10 +1,8 @@ { "name": "@kbn/i18n", - "browser": "./target_web/src/browser.js", - "main": "./target_node/index.js", + "browser": "./src/browser", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", "author": "Kibana Core", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-i18n/tsconfig.json b/packages/kbn-i18n/tsconfig.json index 90a2bc53a9b1c..b3ffcae3f1c24 100644 --- a/packages/kbn-i18n/tsconfig.json +++ b/packages/kbn-i18n/tsconfig.json @@ -1,21 +1,21 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" ] }, "include": [ + "**/*.js", "**/*.ts", "**/*.tsx", "types/intl_format_cache.d.ts", "types/intl_relativeformat.d.ts" ], "exclude": [ - "**/__fixtures__/**/*" + "**/__fixtures__/**/*", + "target/**/*", ] } diff --git a/packages/kbn-import-resolver/BUILD.bazel b/packages/kbn-import-resolver/BUILD.bazel deleted file mode 100644 index c32b02f8ba821..0000000000000 --- a/packages/kbn-import-resolver/BUILD.bazel +++ /dev/null @@ -1,134 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-import-resolver" -PKG_REQUIRE_NAME = "@kbn/import-resolver" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__fixtures__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-bazel-packages", - "//packages/kbn-utils", - "//packages/kbn-synthetic-package-map", - "@npm//resolve", - "@npm//normalize-path", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-bazel-packages:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-dev-utils:npm_module_types", # needed for testing, only required for windows dev - "//packages/kbn-synthetic-package-map:npm_module_types", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/resolve", - "@npm//@types/normalize-path", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-import-resolver/kibana.jsonc b/packages/kbn-import-resolver/kibana.jsonc index 9e05986966210..6b7ae00f9da8d 100644 --- a/packages/kbn-import-resolver/kibana.jsonc +++ b/packages/kbn-import-resolver/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/import-resolver", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-import-resolver/package.json b/packages/kbn-import-resolver/package.json index bb114bbc01752..21a8f5362436c 100644 --- a/packages/kbn-import-resolver/package.json +++ b/packages/kbn-import-resolver/package.json @@ -2,7 +2,5 @@ "name": "@kbn/import-resolver", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-import-resolver/src/helpers/import_req.ts b/packages/kbn-import-resolver/src/helpers/import_req.ts index 5844f47e880fe..98a394ae1431a 100644 --- a/packages/kbn-import-resolver/src/helpers/import_req.ts +++ b/packages/kbn-import-resolver/src/helpers/import_req.ts @@ -24,10 +24,19 @@ const EXT_RE = /\.(jsx?|(d\.)?tsx?)$/; const INDEX_IN_INDEX_RE = /\/index\/index(\.jsx?|\.d\.tsx?|\.tsx?)$/; const INCLUDES_FILENAME_RE = /\/.*\..{2,4}$/; -export function reduceImportRequest(req: string, type: ImportType, original?: string) { +export function reduceImportRequest( + req: string, + type: ImportType, + original?: string, + sourceExt?: string +) { let reduced = req; - if (type === 'require-resolve' && original && original.match(INCLUDES_FILENAME_RE)) { + if ( + original && + (type === 'require-resolve' || sourceExt === '.mjs') && + original.match(INCLUDES_FILENAME_RE) + ) { // require.resolve() can be a complicated, it's often used in config files and // sometimes we don't have babel to help resolve .ts to .js, so we try to rely // on the original request and keep the filename listed if it's in the original @@ -65,6 +74,7 @@ interface RelativeImportReqOptions extends WrapOptions { dirname: string; absolute: string; type: ImportType; + sourcePath?: string; original?: string; } @@ -74,7 +84,8 @@ export function getRelativeImportReq(options: RelativeImportReqOptions) { reduceImportRequest( relative.startsWith('.') ? relative : `./${relative}`, options.type, - options.original + options.original, + options.sourcePath ? Path.extname(options.sourcePath) : undefined ), options ); @@ -82,19 +93,43 @@ export function getRelativeImportReq(options: RelativeImportReqOptions) { interface PackageRelativeImportReqOptions extends WrapOptions { packageDir: string; - packageId: string; absolute: string; + pkgId: string; type: ImportType; } +const pkgMainCache = new Map(); +function getPkgMain(pkgDir: string) { + const cached = pkgMainCache.get(pkgDir); + if (cached !== undefined) { + return cached; + } + try { + const main = require.resolve(pkgDir); + pkgMainCache.set(pkgDir, main); + return main; + } catch (error) { + if (error.code === 'MODULE_NOT_FOUND') { + pkgMainCache.set(pkgDir, null); + return null; + } + + throw error; + } +} + export function getPackageRelativeImportReq(options: PackageRelativeImportReqOptions) { + if (options.absolute === getPkgMain(options.packageDir)) { + return wrap(options.pkgId, options); + } + const relative = normalizePath(Path.relative(options.packageDir, options.absolute)); if (!relative) { - return wrap(options.packageId, options); + return wrap(options.pkgId, options); } const subPath = reduceImportRequest(relative, options.type); - return wrap(subPath ? `${options.packageId}/${subPath}` : options.packageId, options); + return wrap(subPath ? `${options.pkgId}/${subPath}` : options.pkgId, options); } diff --git a/packages/kbn-import-resolver/src/import_resolver.ts b/packages/kbn-import-resolver/src/import_resolver.ts index bab9a9000dd6c..ca37341b2e4fb 100644 --- a/packages/kbn-import-resolver/src/import_resolver.ts +++ b/packages/kbn-import-resolver/src/import_resolver.ts @@ -7,13 +7,12 @@ */ import Path from 'path'; +import Fs from 'fs'; import Resolve from 'resolve'; -import { readPackageManifest } from '@kbn/bazel-packages'; -import { REPO_ROOT } from '@kbn/utils'; -import normalizePath from 'normalize-path'; -import { discoverPackageManifestPaths } from '@kbn/bazel-packages'; -import { readPackageMap, PackageMap } from '@kbn/synthetic-package-map'; +import { readPackageManifest, type KibanaPackageManifest } from '@kbn/bazel-packages'; +import { REPO_ROOT } from '@kbn/repo-info'; +import { readPackageMap, PackageMap } from '@kbn/package-map'; import { safeStat, readFileSync } from './helpers/fs'; import { ResolveResult } from './resolve_result'; @@ -24,14 +23,20 @@ const NODE_MODULE_SEG = Path.sep + 'node_modules' + Path.sep; export class ImportResolver { static create(repoRoot: string) { - const pkgMap = new Map(); - for (const manifestPath of discoverPackageManifestPaths(REPO_ROOT)) { - const relativeBazelPackageDir = Path.relative(REPO_ROOT, Path.dirname(manifestPath)); - const pkg = readPackageManifest(manifestPath); - pkgMap.set(pkg.id, normalizePath(relativeBazelPackageDir)); - } + const pkgMap = readPackageMap(); + + const manifests = new Map( + Array.from(pkgMap.entries()).flatMap(([id, repoRelPath]) => { + const manifestPath = Path.resolve(repoRoot, repoRelPath, 'kibana.jsonc'); + if (!Fs.existsSync(manifestPath)) { + return []; + } + + return [[id, readPackageManifest(manifestPath)] as const]; + }) + ); - return new ImportResolver(repoRoot, pkgMap, readPackageMap()); + return new ImportResolver(repoRoot, pkgMap, manifests); } private safeStat = memoize(safeStat); @@ -61,52 +66,62 @@ export class ImportResolver { */ private readonly cwd: string, /** - * Map of actual package names to normalized root-relative directories + * Map of package ids to normalized root-relative directories * for each package */ private readonly pkgMap: PackageMap, /** - * Map of synthetic package names to normalized root-relative directories - * for each simulated package + * Map of package ids to pkg manifests, if there is no manifest it is + * assumed to be a legacy plugin */ - private readonly synthPkgMap: PackageMap - ) {} + private readonly pkgManifests: Map + ) { + // invert the pkgMap, we will update this map with new results as we determine them. + this._dirToPkgId = new Map(Array.from(this.pkgMap).map(([k, v]) => [v, k])); + } - getPackageIdForPath(path: string) { - const relative = normalizePath(Path.relative(this.cwd, path)); - if (relative.startsWith('..')) { - throw new Error(`path is outside of cwd [${this.cwd}]`); + private readonly _dirToPkgId: Map; + private pkgIdForDir(dir: string): string | null { + const cached = this._dirToPkgId.get(dir); + if (cached !== undefined) { + return cached; } - for (const [synthPkgId, dir] of this.synthPkgMap) { - if (relative === dir || relative.startsWith(dir + '/')) { - return synthPkgId; - } + const parent = Path.dirname(dir); + if (parent === '.') { + this._dirToPkgId.set(dir, null); + return null; } - for (const [pkgId, dir] of this.pkgMap) { - if (relative === dir || relative.startsWith(dir + '/')) { - return pkgId; - } + const pkgId = this.pkgIdForDir(parent); + this._dirToPkgId.set(dir, pkgId); + return pkgId; + } + + getPackageIdForPath(path: string) { + const relative = Path.relative(this.cwd, path); + if (relative.startsWith('..')) { + return null; } - return null; + return this.pkgIdForDir(Path.dirname(relative)); } getAbsolutePackageDir(pkgId: string) { - const dir = this.synthPkgMap.get(pkgId) ?? this.pkgMap.get(pkgId); - if (!dir) { - return null; - } - return Path.resolve(this.cwd, dir); + const dir = this.pkgMap.get(pkgId); + return dir ? Path.resolve(this.cwd, dir) : null; } + /** + * Is the package a bazel package? + * @deprecated + */ isBazelPackage(pkgId: string) { - return this.pkgMap.has(pkgId); + return !!this.getPkgManifest(pkgId); } - isSyntheticPackage(pkgId: string) { - return this.synthPkgMap.has(pkgId); + getPkgManifest(pkgId: string) { + return this.pkgManifests.get(pkgId); } private shouldIgnore(req: string): boolean { @@ -125,13 +140,6 @@ export class ImportResolver { return true; } - // ignore requests to bazel target dirs, these files are only available in the build output - // and will never resolve in dev. We will validate that people don't import these files from - // outside the package in another rule - if (req.includes('/target_workers/') || req.includes('/target_node/')) { - return true; - } - // typescript validates these imports fine and they're purely virtual thanks to ambient type definitions in @elastic/eui so /shrug if ( req.startsWith('@elastic/eui/src/components/') || @@ -180,6 +188,15 @@ export class ImportResolver { }; } + const pkgId = this.getPackageIdForPath(path); + if (pkgId) { + return { + type: 'file', + absolute: path, + pkgId, + }; + } + const lastNmSeg = path.lastIndexOf(NODE_MODULE_SEG); if (lastNmSeg !== -1) { const segs = path.slice(lastNmSeg + NODE_MODULE_SEG.length).split(Path.sep); @@ -252,15 +269,14 @@ export class ImportResolver { if (req[0] !== '.') { const parts = req.split('/'); const pkgId = parts[0].startsWith('@') ? `${parts[0]}/${parts[1]}` : `${parts[0]}`; - if (this.synthPkgMap.has(pkgId)) { + if (this.pkgMap.has(pkgId)) { const pkgDir = this.getAbsolutePackageDir(pkgId); if (pkgDir) { return this.resolve( - getRelativeImportReq({ - absolute: parts.length > 2 ? Path.resolve(pkgDir, ...parts.slice(2)) : pkgDir, + `./${Path.relative( dirname, - type: 'esm', - }), + parts.length > 2 ? Path.resolve(pkgDir, ...parts.slice(2)) : pkgDir + )}`, dirname ); } diff --git a/packages/kbn-import-resolver/src/integration_tests/import_resolver.test.ts b/packages/kbn-import-resolver/src/integration_tests/import_resolver.test.ts index a6a3a84602cd7..4fbedcaf38510 100644 --- a/packages/kbn-import-resolver/src/integration_tests/import_resolver.test.ts +++ b/packages/kbn-import-resolver/src/integration_tests/import_resolver.test.ts @@ -17,8 +17,20 @@ expect.addSnapshotSerializer(createAbsolutePathSerializer()); const resolver = new ImportResolver( FIXTURES_DIR, - new Map([['@pkg/box', 'packages/box']]), - new Map([['@synth/bar', 'src/bar']]) + new Map([ + ['@synth/bar', 'src/bar'], + ['@pkg/box', 'packages/box'], + ]), + new Map([ + [ + '@pkg/box', + { + id: '@pkg/box', + type: 'shared-common', + owner: [], + }, + ], + ]) ); describe('#resolve()', () => { @@ -26,16 +38,17 @@ describe('#resolve()', () => { expect(resolver.resolve('@synth/bar', FIXTURES_DIR)).toMatchInlineSnapshot(` Object { "absolute": /packages/kbn-import-resolver/src/__fixtures__/src/bar/index.js, + "pkgId": "@synth/bar", "type": "file", } `); }); - it('resolves imports to bazel packages that are also found in node_modules', () => { + it('resolves imports to bazel packages', () => { expect(resolver.resolve('@pkg/box', FIXTURES_DIR)).toMatchInlineSnapshot(` Object { - "absolute": /packages/kbn-import-resolver/src/__fixtures__/node_modules/@pkg/box/index.js, - "nodeModule": "@pkg/box", + "absolute": /packages/kbn-import-resolver/src/__fixtures__/packages/box/index.js, + "pkgId": "@pkg/box", "type": "file", } `); @@ -64,6 +77,7 @@ describe('#resolve()', () => { expect(resolver.resolve('./bar', Path.resolve(FIXTURES_DIR, 'src/bar'))).toMatchInlineSnapshot(` Object { "absolute": /packages/kbn-import-resolver/src/__fixtures__/src/bar/bar.js, + "pkgId": "@synth/bar", "type": "file", } `); @@ -169,18 +183,3 @@ describe('#isBazelPackage()', () => { expect(resolver.isBazelPackage('@kbn/invalid')).toBe(false); }); }); - -describe('#isSyntheticPackage()', () => { - it('returns true for synth packages', () => { - expect(resolver.isSyntheticPackage('@synth/bar')).toBe(true); - }); - it('returns false for bazel packages', () => { - expect(resolver.isSyntheticPackage('@pkg/box')).toBe(false); - }); - it('returns false for node_modules packages', () => { - expect(resolver.isSyntheticPackage('foo')).toBe(false); - }); - it('returns false for unknown packages', () => { - expect(resolver.isSyntheticPackage('@kbn/invalid')).toBe(false); - }); -}); diff --git a/packages/kbn-import-resolver/src/resolve_result.ts b/packages/kbn-import-resolver/src/resolve_result.ts index 3174da55fb58a..2f9602758b0ce 100644 --- a/packages/kbn-import-resolver/src/resolve_result.ts +++ b/packages/kbn-import-resolver/src/resolve_result.ts @@ -49,6 +49,7 @@ export interface TypesResult { export interface FileResult { type: 'file'; absolute: string; + pkgId?: string; nodeModule?: string; prefix?: string; postfix?: string; diff --git a/packages/kbn-import-resolver/tsconfig.json b/packages/kbn-import-resolver/tsconfig.json index 57c1dd1c94e0f..d9efcd9bf27b9 100644 --- a/packages/kbn-import-resolver/tsconfig.json +++ b/packages/kbn-import-resolver/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/bazel-packages", + "@kbn/package-map", + "@kbn/repo-info", + "@kbn/jest-serializers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-interpreter/BUILD.bazel b/packages/kbn-interpreter/BUILD.bazel deleted file mode 100644 index 26a359a89cbe6..0000000000000 --- a/packages/kbn-interpreter/BUILD.bazel +++ /dev/null @@ -1,130 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-interpreter" -PKG_REQUIRE_NAME = "@kbn/interpreter" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.js", - "**/grammar.peggy.config.json", - "**/grammar.peggy", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -TYPE_FILES = [] - -SRCS = SOURCE_FILES + TYPE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//lodash", -] - -TYPES_DEPS = [ - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "//packages/kbn-ambient-common-types:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - allow_js = True, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-interpreter/kibana.jsonc b/packages/kbn-interpreter/kibana.jsonc index 0326ff88e9f58..9f11015263cf0 100644 --- a/packages/kbn-interpreter/kibana.jsonc +++ b/packages/kbn-interpreter/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/interpreter", - "owner": "@elastic/kibana-visualizations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-visualizations" } diff --git a/packages/kbn-interpreter/package.json b/packages/kbn-interpreter/package.json index 3f7bad2a4e2dd..ea1c3343312ec 100644 --- a/packages/kbn-interpreter/package.json +++ b/packages/kbn-interpreter/package.json @@ -1,10 +1,7 @@ { "name": "@kbn/interpreter", "author": "Visualizations", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-interpreter/src/common/lib/ast/from_expression.test.js b/packages/kbn-interpreter/src/common/lib/ast/from_expression.test.js index 24a652e29bb09..2aa240956fa6f 100644 --- a/packages/kbn-interpreter/src/common/lib/ast/from_expression.test.js +++ b/packages/kbn-interpreter/src/common/lib/ast/from_expression.test.js @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { fromExpression } from '@kbn/interpreter'; +import { fromExpression } from './from_expression'; import { getType } from '../get_type'; describe('fromExpression', () => { diff --git a/packages/kbn-interpreter/src/common/lib/ast/to_expression.test.js b/packages/kbn-interpreter/src/common/lib/ast/to_expression.test.js index 18e6b8fe88cf1..98d2cfa1153f2 100644 --- a/packages/kbn-interpreter/src/common/lib/ast/to_expression.test.js +++ b/packages/kbn-interpreter/src/common/lib/ast/to_expression.test.js @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { toExpression } from '@kbn/interpreter'; +import { toExpression } from './to_expression'; import { cloneDeep, set, unset } from 'lodash'; describe('toExpression', () => { diff --git a/packages/kbn-interpreter/tsconfig.json b/packages/kbn-interpreter/tsconfig.json index e3b4140d05822..8af1ae01dce1b 100644 --- a/packages/kbn-interpreter/tsconfig.json +++ b/packages/kbn-interpreter/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,10 @@ "include": [ "**/*.ts", "**/*.js" + ], + "kbn_references": [ + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-io-ts-utils/BUILD.bazel b/packages/kbn-io-ts-utils/BUILD.bazel deleted file mode 100644 index dd1b7b1d9250f..0000000000000 --- a/packages/kbn-io-ts-utils/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-io-ts-utils" -PKG_REQUIRE_NAME = "@kbn/io-ts-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-config-schema", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//lodash", - "@npm//tslib", -] - -TYPES_DEPS = [ - "//packages/kbn-config-schema:npm_module_types", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-io-ts-utils/kibana.jsonc b/packages/kbn-io-ts-utils/kibana.jsonc index f903e878366b2..7d03717a53153 100644 --- a/packages/kbn-io-ts-utils/kibana.jsonc +++ b/packages/kbn-io-ts-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/io-ts-utils", - "owner": "@elastic/apm-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/apm-ui" } diff --git a/packages/kbn-io-ts-utils/package.json b/packages/kbn-io-ts-utils/package.json index 65fd13e605336..d62960217f948 100644 --- a/packages/kbn-io-ts-utils/package.json +++ b/packages/kbn-io-ts-utils/package.json @@ -1,9 +1,6 @@ { "name": "@kbn/io-ts-utils", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-io-ts-utils/tsconfig.json b/packages/kbn-io-ts-utils/tsconfig.json index 57c1dd1c94e0f..d5fd475db97a1 100644 --- a/packages/kbn-io-ts-utils/tsconfig.json +++ b/packages/kbn-io-ts-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config-schema" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-jest-serializers/BUILD.bazel b/packages/kbn-jest-serializers/BUILD.bazel deleted file mode 100644 index edfae6d725f9a..0000000000000 --- a/packages/kbn-jest-serializers/BUILD.bazel +++ /dev/null @@ -1,126 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-jest-serializers" -PKG_REQUIRE_NAME = "@kbn/jest-serializers" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//strip-ansi", - "//packages/kbn-utils", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//strip-ansi", - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-utils:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-jest-serializers/kibana.jsonc b/packages/kbn-jest-serializers/kibana.jsonc index 2742ade92e31a..b10e323733573 100644 --- a/packages/kbn-jest-serializers/kibana.jsonc +++ b/packages/kbn-jest-serializers/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/jest-serializers", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-jest-serializers/package.json b/packages/kbn-jest-serializers/package.json index 8c3ac00c0fd43..36830b86ec5ab 100644 --- a/packages/kbn-jest-serializers/package.json +++ b/packages/kbn-jest-serializers/package.json @@ -2,7 +2,5 @@ "name": "@kbn/jest-serializers", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-jest-serializers/src/absolute_path_serializer.ts b/packages/kbn-jest-serializers/src/absolute_path_serializer.ts index 4af98494dc785..ab1c957497a4a 100644 --- a/packages/kbn-jest-serializers/src/absolute_path_serializer.ts +++ b/packages/kbn-jest-serializers/src/absolute_path_serializer.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; export function createAbsolutePathSerializer( rootPath: string = REPO_ROOT, diff --git a/packages/kbn-jest-serializers/tsconfig.json b/packages/kbn-jest-serializers/tsconfig.json index 57c1dd1c94e0f..f87610efe52de 100644 --- a/packages/kbn-jest-serializers/tsconfig.json +++ b/packages/kbn-jest-serializers/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-journeys/BUILD.bazel b/packages/kbn-journeys/BUILD.bazel deleted file mode 100644 index 298b36dbca2e3..0000000000000 --- a/packages/kbn-journeys/BUILD.bazel +++ /dev/null @@ -1,132 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-journeys" -PKG_REQUIRE_NAME = "@kbn/journeys" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//playwright", - "@npm//uuid", - "@npm//axios", - "@npm//callsites", - "@npm//rxjs", - "@npm//elastic-apm-node", - "//packages/kbn-ftr-common-functional-services:npm_module_types", - "//packages/kbn-ftr-screenshot-filename:npm_module_types", - "//packages/kbn-test:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-ambient-ftr-types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-journeys/journey/journey_config.ts b/packages/kbn-journeys/journey/journey_config.ts index e23b2a748fbe7..5323d7989bdf5 100644 --- a/packages/kbn-journeys/journey/journey_config.ts +++ b/packages/kbn-journeys/journey/journey_config.ts @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { BaseStepCtx } from './journey'; diff --git a/packages/kbn-journeys/journey/journey_ftr_config.ts b/packages/kbn-journeys/journey/journey_ftr_config.ts index 2a80c20c79490..ad85bb426fe4f 100644 --- a/packages/kbn-journeys/journey/journey_ftr_config.ts +++ b/packages/kbn-journeys/journey/journey_ftr_config.ts @@ -9,8 +9,8 @@ import Path from 'path'; import { v4 as uuidV4 } from 'uuid'; -import { REPO_ROOT } from '@kbn/utils'; -import { FtrConfigProviderContext, FtrConfigProvider } from '@kbn/test'; +import { REPO_ROOT } from '@kbn/repo-info'; +import type { FtrConfigProviderContext, FtrConfigProvider } from '@kbn/test'; import { commonFunctionalServices } from '@kbn/ftr-common-functional-services'; import { AnyStep } from './journey'; diff --git a/packages/kbn-journeys/journey/journey_screenshots.ts b/packages/kbn-journeys/journey/journey_screenshots.ts index 955d00ca4c372..9adb8cbec1766 100644 --- a/packages/kbn-journeys/journey/journey_screenshots.ts +++ b/packages/kbn-journeys/journey/journey_screenshots.ts @@ -10,7 +10,7 @@ import Path from 'path'; import Fsp from 'fs/promises'; import * as Rx from 'rxjs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { FtrScreenshotFilename } from '@kbn/ftr-screenshot-filename'; import type { AnyStep } from './journey'; diff --git a/packages/kbn-journeys/kibana.jsonc b/packages/kbn-journeys/kibana.jsonc index ab8a15547c158..f27a7c228cb41 100644 --- a/packages/kbn-journeys/kibana.jsonc +++ b/packages/kbn-journeys/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/journeys", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-journeys/package.json b/packages/kbn-journeys/package.json index 728e8e8bdebd7..e9404f05989a0 100644 --- a/packages/kbn-journeys/package.json +++ b/packages/kbn-journeys/package.json @@ -2,7 +2,5 @@ "name": "@kbn/journeys", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-journeys/tsconfig.json b/packages/kbn-journeys/tsconfig.json index 7e77ca978f3e8..461260f7364b0 100644 --- a/packages/kbn-journeys/tsconfig.json +++ b/packages/kbn-journeys/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", "@kbn/ambient-ftr-types", @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/ftr-common-functional-services", + "@kbn/ftr-screenshot-filename", + "@kbn/test", + "@kbn/tooling-log", + "@kbn/repo-info", + "@kbn/std", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-kibana-manifest-schema/BUILD.bazel b/packages/kbn-kibana-manifest-schema/BUILD.bazel deleted file mode 100644 index c0a8ff97d7fe8..0000000000000 --- a/packages/kbn-kibana-manifest-schema/BUILD.bazel +++ /dev/null @@ -1,126 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-kibana-manifest-schema" -PKG_REQUIRE_NAME = "@kbn/kibana-manifest-schema" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//dedent", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/dedent", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/json-schema", - "@npm//json-schema-typed", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-kibana-manifest-schema/kibana.jsonc b/packages/kbn-kibana-manifest-schema/kibana.jsonc index 5ddba1f9529a7..e615498fe7e92 100644 --- a/packages/kbn-kibana-manifest-schema/kibana.jsonc +++ b/packages/kbn-kibana-manifest-schema/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/kibana-manifest-schema", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-kibana-manifest-schema/package.json b/packages/kbn-kibana-manifest-schema/package.json index 127b9fc74fad9..16d5198ad1a33 100644 --- a/packages/kbn-kibana-manifest-schema/package.json +++ b/packages/kbn-kibana-manifest-schema/package.json @@ -2,7 +2,5 @@ "name": "@kbn/kibana-manifest-schema", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-kibana-manifest-schema/src/kibana_json_v2_schema.ts b/packages/kbn-kibana-manifest-schema/src/kibana_json_v2_schema.ts index 21b3b3b717380..71df5b4449bfc 100644 --- a/packages/kbn-kibana-manifest-schema/src/kibana_json_v2_schema.ts +++ b/packages/kbn-kibana-manifest-schema/src/kibana_json_v2_schema.ts @@ -13,7 +13,7 @@ export const PLUGIN_ID_PATTERN = /^[a-z][a-zA-Z_]*$/; export const MANIFEST_V2: JSONSchema = { type: 'object', - required: ['id', 'type', 'owner', 'typeDeps', 'runtimeDeps'], + required: ['id', 'type', 'owner'], // @ts-expect-error VSCode specific JSONSchema extension allowTrailingCommas: true, properties: { @@ -47,26 +47,6 @@ export const MANIFEST_V2: JSONSchema = { For additional codeowners, the value can be an array of user/team names. `, }, - typeDeps: { - type: 'array', - description: desc` - Packages which are required for the source code in the package to be - type-checked. This list is updated automatically by the package linter. - `, - items: { - type: 'string', - }, - }, - runtimeDeps: { - type: 'array', - description: desc` - Packages which are required for the source code in the package to run. This list - is updated automatically by the package linter. - `, - items: { - type: 'string', - }, - }, devOnly: { type: 'boolean', description: desc` diff --git a/packages/kbn-kibana-manifest-schema/tsconfig.json b/packages/kbn-kibana-manifest-schema/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-kibana-manifest-schema/tsconfig.json +++ b/packages/kbn-kibana-manifest-schema/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-language-documentation-popover/BUILD.bazel b/packages/kbn-language-documentation-popover/BUILD.bazel deleted file mode 100644 index 86a6a03388a4a..0000000000000 --- a/packages/kbn-language-documentation-popover/BUILD.bazel +++ /dev/null @@ -1,135 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-language-documentation-popover" -PKG_REQUIRE_NAME = "@kbn/language-documentation-popover" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - "**/*.svg", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-i18n", - "@npm//@elastic/eui", - "@npm//classnames", - "@npm//prop-types", - "@npm//react", -] - -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "@npm//tslib", - "@npm//@elastic/eui", - "@npm//@types/classnames", - "@npm//@types/jest", - "@npm//@types/prop-types", - "@npm//@types/node", - "@npm//@types/react", -] - -jsts_transpiler( - name = "target_webpack", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_webpack"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_webpack", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-language-documentation-popover/kibana.jsonc b/packages/kbn-language-documentation-popover/kibana.jsonc index 45b3f21296bd4..49dcff96d5f86 100644 --- a/packages/kbn-language-documentation-popover/kibana.jsonc +++ b/packages/kbn-language-documentation-popover/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/language-documentation-popover", - "owner": "@elastic/kibana-visualizations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-visualizations" } diff --git a/packages/kbn-language-documentation-popover/package.json b/packages/kbn-language-documentation-popover/package.json index a710551dd0553..dfa1e7e4fd372 100644 --- a/packages/kbn-language-documentation-popover/package.json +++ b/packages/kbn-language-documentation-popover/package.json @@ -1,9 +1,6 @@ { "name": "@kbn/language-documentation-popover", - "main": "./target_node/index.js", - "browser": "./target_webpack/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-language-documentation-popover/tsconfig.json b/packages/kbn-language-documentation-popover/tsconfig.json index ab59ea0429ac2..82710b41d10b4 100644 --- a/packages/kbn-language-documentation-popover/tsconfig.json +++ b/packages/kbn-language-documentation-popover/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,4 +11,11 @@ "**/*.ts", "**/*.tsx", ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-logging-mocks/BUILD.bazel b/packages/kbn-logging-mocks/BUILD.bazel deleted file mode 100644 index 10dcbe3f69505..0000000000000 --- a/packages/kbn-logging-mocks/BUILD.bazel +++ /dev/null @@ -1,106 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-logging-mocks" -PKG_REQUIRE_NAME = "@kbn/logging-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-logging" -] - -TYPES_DEPS = [ - "//packages/kbn-logging:npm_module_types", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-logging-mocks/kibana.jsonc b/packages/kbn-logging-mocks/kibana.jsonc index 6b95f3a750f28..78fdda54a8a9b 100644 --- a/packages/kbn-logging-mocks/kibana.jsonc +++ b/packages/kbn-logging-mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/logging-mocks", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-logging-mocks/package.json b/packages/kbn-logging-mocks/package.json index 30bd2b81ce507..a16fe51ba5c12 100644 --- a/packages/kbn-logging-mocks/package.json +++ b/packages/kbn-logging-mocks/package.json @@ -3,7 +3,5 @@ "version": "1.0.0", "private": true, "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-logging-mocks/tsconfig.json b/packages/kbn-logging-mocks/tsconfig.json index 57c1dd1c94e0f..10cff0e73883b 100644 --- a/packages/kbn-logging-mocks/tsconfig.json +++ b/packages/kbn-logging-mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/logging" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-logging/BUILD.bazel b/packages/kbn-logging/BUILD.bazel deleted file mode 100644 index d4938c14c8247..0000000000000 --- a/packages/kbn-logging/BUILD.bazel +++ /dev/null @@ -1,110 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-logging" -PKG_REQUIRE_NAME = "@kbn/logging" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-std", - "//packages/kbn-ecs" -] - -TYPES_DEPS = [ - "//packages/kbn-std:npm_module_types", - "@npm//@types/jest", - "@npm//@types/node", - "//packages/kbn-ecs:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-logging/kibana.jsonc b/packages/kbn-logging/kibana.jsonc index ab4df8442093b..77e12786e908b 100644 --- a/packages/kbn-logging/kibana.jsonc +++ b/packages/kbn-logging/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/logging", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-logging/package.json b/packages/kbn-logging/package.json index 837a9aab94981..7ffb4903932de 100644 --- a/packages/kbn-logging/package.json +++ b/packages/kbn-logging/package.json @@ -3,7 +3,5 @@ "version": "1.0.0", "private": true, "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-logging/tsconfig.json b/packages/kbn-logging/tsconfig.json index 57c1dd1c94e0f..4c2b00ad27915 100644 --- a/packages/kbn-logging/tsconfig.json +++ b/packages/kbn-logging/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/ecs", + "@kbn/std" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-managed-vscode-config-cli/BUILD.bazel b/packages/kbn-managed-vscode-config-cli/BUILD.bazel deleted file mode 100644 index a6ebbf057fc99..0000000000000 --- a/packages/kbn-managed-vscode-config-cli/BUILD.bazel +++ /dev/null @@ -1,126 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-managed-vscode-config-cli" -PKG_REQUIRE_NAME = "@kbn/managed-vscode-config-cli" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//dedent", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-dev-cli-runner:npm_module_types", - "//packages/kbn-managed-vscode-config:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-managed-vscode-config-cli/index.ts b/packages/kbn-managed-vscode-config-cli/index.ts index deb829da76407..5b1c7cdc8426b 100644 --- a/packages/kbn-managed-vscode-config-cli/index.ts +++ b/packages/kbn-managed-vscode-config-cli/index.ts @@ -9,7 +9,7 @@ import Path from 'path'; import Fsp from 'fs/promises'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import dedent from 'dedent'; import { run } from '@kbn/dev-cli-runner'; diff --git a/packages/kbn-managed-vscode-config-cli/kibana.jsonc b/packages/kbn-managed-vscode-config-cli/kibana.jsonc index 1cbb5cb7ce7cb..3ca5963ba3b9b 100644 --- a/packages/kbn-managed-vscode-config-cli/kibana.jsonc +++ b/packages/kbn-managed-vscode-config-cli/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/managed-vscode-config-cli", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-managed-vscode-config-cli/package.json b/packages/kbn-managed-vscode-config-cli/package.json index ad22c98077e23..dd2b5fabee94c 100644 --- a/packages/kbn-managed-vscode-config-cli/package.json +++ b/packages/kbn-managed-vscode-config-cli/package.json @@ -2,7 +2,5 @@ "name": "@kbn/managed-vscode-config-cli", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-managed-vscode-config-cli/tsconfig.json b/packages/kbn-managed-vscode-config-cli/tsconfig.json index 57c1dd1c94e0f..e5ff31a29b3fe 100644 --- a/packages/kbn-managed-vscode-config-cli/tsconfig.json +++ b/packages/kbn-managed-vscode-config-cli/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-cli-runner", + "@kbn/managed-vscode-config", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-managed-vscode-config/BUILD.bazel b/packages/kbn-managed-vscode-config/BUILD.bazel deleted file mode 100644 index 1225a95d6c3ff..0000000000000 --- a/packages/kbn-managed-vscode-config/BUILD.bazel +++ /dev/null @@ -1,128 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-managed-vscode-config" -PKG_REQUIRE_NAME = "@kbn/managed-vscode-config" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@babel/parser", - "@npm//@babel/types", - "@npm//@types/babel__generator", - "@npm//@types/prettier", - "@npm//tslib", - "//packages/kbn-kibana-manifest-schema:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-managed-vscode-config/kibana.jsonc b/packages/kbn-managed-vscode-config/kibana.jsonc index c973127eb5485..ce565e9ed3015 100644 --- a/packages/kbn-managed-vscode-config/kibana.jsonc +++ b/packages/kbn-managed-vscode-config/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/managed-vscode-config", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-managed-vscode-config/package.json b/packages/kbn-managed-vscode-config/package.json index 9e260b8a64a58..951b90336351b 100644 --- a/packages/kbn-managed-vscode-config/package.json +++ b/packages/kbn-managed-vscode-config/package.json @@ -2,7 +2,5 @@ "name": "@kbn/managed-vscode-config", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-managed-vscode-config/tsconfig.json b/packages/kbn-managed-vscode-config/tsconfig.json index 57c1dd1c94e0f..d57e4bb9718b7 100644 --- a/packages/kbn-managed-vscode-config/tsconfig.json +++ b/packages/kbn-managed-vscode-config/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/kibana-manifest-schema" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-mapbox-gl/BUILD.bazel b/packages/kbn-mapbox-gl/BUILD.bazel deleted file mode 100644 index d72e79f8f5397..0000000000000 --- a/packages/kbn-mapbox-gl/BUILD.bazel +++ /dev/null @@ -1,118 +0,0 @@ - -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-mapbox-gl" -PKG_REQUIRE_NAME = "@kbn/mapbox-gl" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "@npm//@mapbox/mapbox-gl-rtl-text", - "@npm//file-loader", - "@npm//maplibre-gl", -] - -TYPES_DEPS = [ - "@npm//@mapbox/mapbox-gl-rtl-text", - "@npm//file-loader", - "@npm//maplibre-gl", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-mapbox-gl/kibana.jsonc b/packages/kbn-mapbox-gl/kibana.jsonc index 35ffb25b0b115..4238b33f6aefd 100644 --- a/packages/kbn-mapbox-gl/kibana.jsonc +++ b/packages/kbn-mapbox-gl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/mapbox-gl", - "owner": "@elastic/kibana-gis", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-gis" } diff --git a/packages/kbn-mapbox-gl/package.json b/packages/kbn-mapbox-gl/package.json index e21ea665ef26f..f791e3d3b5f29 100644 --- a/packages/kbn-mapbox-gl/package.json +++ b/packages/kbn-mapbox-gl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/mapbox-gl", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-mapbox-gl/tsconfig.json b/packages/kbn-mapbox-gl/tsconfig.json index 6a59fac1e0248..225d37d8136ea 100644 --- a/packages/kbn-mapbox-gl/tsconfig.json +++ b/packages/kbn-mapbox-gl/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-monaco/BUILD.bazel b/packages/kbn-monaco/BUILD.bazel index 35da648bccb59..8d13702e74588 100644 --- a/packages/kbn-monaco/BUILD.bazel +++ b/packages/kbn-monaco/BUILD.bazel @@ -1,15 +1,11 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@npm//webpack-cli:index.bzl", webpack = "webpack_cli") +load("@npm//webpack-cli:index.bzl", "webpack_cli") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-monaco" -PKG_REQUIRE_NAME = "@kbn/monaco" - -SOURCE_FILES = glob( +SRCS = glob( [ "src/**/*", - "**/*.ts", + "index.ts", + "server.ts", ], exclude = [ "**/*.config.js", @@ -27,59 +23,24 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-babel-preset", +SHARED_DEPS = [ "//packages/kbn-i18n", "//packages/kbn-ui-theme", - "@npm//@babel/runtime", "@npm//antlr4ts", - "@npm//babel-loader", "@npm//monaco-editor", "@npm//monaco-yaml", - "@npm//raw-loader", - "@npm//rxjs", -] - -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-ui-theme:npm_module_types", - "@npm//antlr4ts", - "@npm//monaco-editor", - "@npm//rxjs", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", ] -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -webpack( +webpack_cli( name = "target_workers", - data = RUNTIME_DEPS + [ - ":src", + data = SRCS + SHARED_DEPS + [ + "//:.browserslistrc", + "//packages/kbn-babel-preset", + "@npm//@babel/runtime", + "@npm//babel-loader", + "@npm//raw-loader", + "@npm//rxjs", + "webpack.config.js", ], output_dir = True, @@ -90,61 +51,23 @@ webpack( "$(@D)", "--env", "prod", - "--no-stats" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", + "--stats=errors-only" ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":target_workers"], - package_name = PKG_REQUIRE_NAME, + env = select({ + "//:dist": { + "NODE_ENV": "production", + }, + "//conditions:default": { + "NODE_ENV": "development", + }, + }), visibility = ["//visibility:public"], ) js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":target_workers", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + name = "kbn-monaco", + package_name = "@kbn/monaco", + srcs = ["package.json"] + SRCS, + deps = SHARED_DEPS, visibility = ["//visibility:public"], ) diff --git a/packages/kbn-monaco/index.ts b/packages/kbn-monaco/index.ts index a2c4d18b57cf1..057ea84d07093 100644 --- a/packages/kbn-monaco/index.ts +++ b/packages/kbn-monaco/index.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -// global setup for supported languages import './src/register_globals'; export { monaco } from './src/monaco_imports'; diff --git a/packages/kbn-monaco/kibana.jsonc b/packages/kbn-monaco/kibana.jsonc index 0634c00ae6f77..c258ae7584a55 100644 --- a/packages/kbn-monaco/kibana.jsonc +++ b/packages/kbn-monaco/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/monaco", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/kbn-monaco/package.json b/packages/kbn-monaco/package.json index 05717e4922a6e..fc546d73017cb 100644 --- a/packages/kbn-monaco/package.json +++ b/packages/kbn-monaco/package.json @@ -2,14 +2,10 @@ "name": "@kbn/monaco", "version": "1.0.0", "private": true, - "browser": "target_web/index.js", - "main": "target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0", "scripts": { "build:antlr4ts:painless": "../../node_modules/antlr4ts-cli/antlr4ts ./src/painless/antlr/painless_lexer.g4 ./src/painless/antlr/painless_parser.g4 && node ./scripts/fix_generated_antlr.js painless", "build:antlr4ts:esql": "../../node_modules/antlr4ts-cli/antlr4ts src/esql/antlr/esql_lexer.g4 src/esql/antlr/esql_parser.g4 && node ./scripts/fix_generated_antlr.js esql", "build:antlr4ts": "npm run build:antlr4ts:painless && npm run build:antlr4ts:esql" - - }, - "types": "./target_types/index.d.ts" + } } diff --git a/packages/kbn-monaco/server.ts b/packages/kbn-monaco/server.ts new file mode 100644 index 0000000000000..71313c13d5437 --- /dev/null +++ b/packages/kbn-monaco/server.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 Path from 'path'; +import Fs from 'fs'; + +import { REPO_ROOT } from '@kbn/repo-info'; + +const localBundles = Path.resolve(__dirname, './target_workers'); +const bazelBundles = Path.resolve(REPO_ROOT, 'bazel-bin', Path.relative(REPO_ROOT, localBundles)); + +// extracted const vars +export const bundleDir = Fs.existsSync(localBundles) ? localBundles : bazelBundles; diff --git a/packages/kbn-monaco/src/register_globals.ts b/packages/kbn-monaco/src/register_globals.ts index 7754b140305aa..ad5645df31bef 100644 --- a/packages/kbn-monaco/src/register_globals.ts +++ b/packages/kbn-monaco/src/register_globals.ts @@ -12,43 +12,15 @@ import { SQLLang } from './sql'; import { monaco } from './monaco_imports'; import { ESQL_THEME_ID, ESQLLang, buildESQlTheme } from './esql'; import { registerLanguage, registerTheme } from './helpers'; -import { createWorkersRegistry } from './workers_registry'; export const DEFAULT_WORKER_ID = 'default'; - -const Yaml = 'yaml'; - -const workerRegistry = createWorkersRegistry(DEFAULT_WORKER_ID); - -workerRegistry.register( - DEFAULT_WORKER_ID, - async () => await import('!!raw-loader!../../target_workers/default.editor.worker.js') -); - -workerRegistry.register( +const langSpecificWorkerIds = [ XJsonLang.ID, - async () => await import('!!raw-loader!../../target_workers/xjson.editor.worker.js') -); - -workerRegistry.register( PainlessLang.ID, - async () => await import('!!raw-loader!../../target_workers/painless.editor.worker.js') -); - -workerRegistry.register( ESQLLang.ID, - async () => await import('!!raw-loader!../../target_workers/esql.editor.worker.js') -); - -workerRegistry.register( monaco.languages.json.jsonDefaults.languageId, - async () => await import('!!raw-loader!../../target_workers/json.editor.worker.js') -); - -workerRegistry.register( - Yaml, - async () => await import('!!raw-loader!../../target_workers/yaml.editor.worker.js') -); + 'yaml', +]; /** * Register languages and lexer rules @@ -63,9 +35,18 @@ registerLanguage(ESQLLang); */ registerTheme(ESQL_THEME_ID, buildESQlTheme()); +const monacoBundleDir = (window as any).__kbnPublicPath__?.['kbn-monaco']; + // @ts-ignore window.MonacoEnvironment = { // needed for functional tests so that we can get value from 'editor' monaco, - getWorker: workerRegistry.getWorker, + getWorkerUrl: monacoBundleDir + ? (_: string, languageId: string) => { + const workerId = langSpecificWorkerIds.includes(languageId) + ? languageId + : DEFAULT_WORKER_ID; + return `${monacoBundleDir}${workerId}.editor.worker.js`; + } + : () => undefined, }; diff --git a/packages/kbn-monaco/src/workers_registry.ts b/packages/kbn-monaco/src/workers_registry.ts deleted file mode 100644 index 474e531dee55b..0000000000000 --- a/packages/kbn-monaco/src/workers_registry.ts +++ /dev/null @@ -1,31 +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. - */ - -export const createWorkersRegistry = (defaultWorkerId: string) => { - const registry = new Map Promise>(); - - return { - register: (languageId: string, getWorkerSrc: () => Promise) => { - registry.set(languageId, getWorkerSrc); - }, - - getWorker: async (module: string, languageId: string) => { - const getWorkerSrc = registry.get(languageId) || registry.get(defaultWorkerId); - if (getWorkerSrc) { - const src = await getWorkerSrc(); - - const blob = new Blob([src.default], { type: 'application/javascript' }); - return new Worker(URL.createObjectURL(blob)); - } else { - throw new Error(`Worker for ${languageId} is not registered`); - } - }, - }; -}; - -export type WorkersRegistry = ReturnType; diff --git a/packages/kbn-monaco/tsconfig.json b/packages/kbn-monaco/tsconfig.json index abba6736b0c28..f6ce023d74c67 100644 --- a/packages/kbn-monaco/tsconfig.json +++ b/packages/kbn-monaco/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,6 +9,24 @@ }, "include": [ "src/**/*", - "**/*.ts" + "**/*.ts", + "src/painless/autocomplete_definitions/boolean_script_field_script_field.json", + "src/painless/autocomplete_definitions/common.json", + "src/painless/autocomplete_definitions/date_script_field.json", + "src/painless/autocomplete_definitions/double_script_field_script_field.json", + "src/painless/autocomplete_definitions/filter.json", + "src/painless/autocomplete_definitions/ip_script_field_script_field.json", + "src/painless/autocomplete_definitions/long_script_field_script_field.json", + "src/painless/autocomplete_definitions/processor_conditional.json", + "src/painless/autocomplete_definitions/score.json", + "src/painless/autocomplete_definitions/string_script_field_script_field.json", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/repo-info", + "@kbn/ui-theme", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-monaco/webpack.config.js b/packages/kbn-monaco/webpack.config.js index f15f48ac10da5..7d5d137a65b93 100644 --- a/packages/kbn-monaco/webpack.config.js +++ b/packages/kbn-monaco/webpack.config.js @@ -22,8 +22,9 @@ const getWorkerEntry = (language) => { }; const getWorkerConfig = (language) => ({ - mode: 'production', + mode: process.env.NODE_ENV || 'development', entry: getWorkerEntry(language), + devtool: process.env.NODE_ENV === 'production' ? false : '#cheap-source-map', output: { path: path.resolve(__dirname, 'target_workers'), filename: `${language}.editor.worker.js`, @@ -35,12 +36,13 @@ const getWorkerConfig = (language) => ({ module: { rules: [ { - test: /\.(js|ts)$/, - exclude: /node_modules/, + test: /\.(jsx?|tsx?)$/, + exclude: /node_modules(?!\/@kbn\/)(\/[^\/]+\/)/, use: { loader: 'babel-loader', options: { babelrc: false, + envName: process.env.NODE_ENV || 'development', presets: [require.resolve('@kbn/babel-preset/webpack_preset')], }, }, diff --git a/packages/kbn-optimizer-webpack-helpers/BUILD.bazel b/packages/kbn-optimizer-webpack-helpers/BUILD.bazel deleted file mode 100644 index e0a5d2fda7e2e..0000000000000 --- a/packages/kbn-optimizer-webpack-helpers/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-optimizer-webpack-helpers" -PKG_REQUIRE_NAME = "@kbn/optimizer-webpack-helpers" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/webpack", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-optimizer-webpack-helpers/kibana.jsonc b/packages/kbn-optimizer-webpack-helpers/kibana.jsonc index 102818ed032c2..1fa8375008f26 100644 --- a/packages/kbn-optimizer-webpack-helpers/kibana.jsonc +++ b/packages/kbn-optimizer-webpack-helpers/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/optimizer-webpack-helpers", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-optimizer-webpack-helpers/package.json b/packages/kbn-optimizer-webpack-helpers/package.json index 52f873cc9ee80..b8e220880e415 100644 --- a/packages/kbn-optimizer-webpack-helpers/package.json +++ b/packages/kbn-optimizer-webpack-helpers/package.json @@ -2,7 +2,5 @@ "name": "@kbn/optimizer-webpack-helpers", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-optimizer-webpack-helpers/tsconfig.json b/packages/kbn-optimizer-webpack-helpers/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-optimizer-webpack-helpers/tsconfig.json +++ b/packages/kbn-optimizer-webpack-helpers/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-optimizer/BUILD.bazel b/packages/kbn-optimizer/BUILD.bazel deleted file mode 100644 index 0af9dff2a58e7..0000000000000 --- a/packages/kbn-optimizer/BUILD.bazel +++ /dev/null @@ -1,169 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-optimizer" -PKG_REQUIRE_NAME = "@kbn/optimizer" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__fixtures__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "limits.yml", - "package.json", - "postcss.config.js", -] - -RUNTIME_DEPS = [ - "//packages/kbn-config", - "//packages/kbn-config-schema", - "//packages/kbn-dev-utils", - "//packages/kbn-std", - "//packages/kbn-ui-shared-deps-npm", - "//packages/kbn-ui-shared-deps-src", - "//packages/kbn-utils", - "//packages/kbn-synthetic-package-map", - "//packages/kbn-peggy", - "@npm//@babel/core", - "@npm//chalk", - "@npm//clean-webpack-plugin", - "@npm//compression-webpack-plugin", - "@npm//cpy", - "@npm//dedent", - "@npm//del", - "@npm//execa", - "@npm//json-stable-stringify", - "@npm//js-yaml", - "@npm//lmdb", - "@npm//loader-utils", - "@npm//node-sass", - "@npm//normalize-path", - "@npm//pirates", - "@npm//rxjs", - "@npm//source-map-support", - "@npm//watchpack", - "@npm//webpack", - "@npm//webpack-merge", - "@npm//webpack-sources", -] - -TYPES_DEPS = [ - "//packages/kbn-config:npm_module_types", - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-optimizer-webpack-helpers:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/kbn-ui-shared-deps-src:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-synthetic-package-map:npm_module_types", - "//packages/kbn-peggy:npm_module_types", - "@npm//chalk", - "@npm//clean-webpack-plugin", - "@npm//cpy", - "@npm//del", - "@npm//execa", - "@npm//lmdb", - "@npm//pirates", - "@npm//rxjs", - "@npm//@types/babel__core", - "@npm//@types/compression-webpack-plugin", - "@npm//@types/dedent", - "@npm//@types/jest", - "@npm//@types/json-stable-stringify", - "@npm//@types/js-yaml", - "@npm//@types/loader-utils", - "@npm//@types/node", - "@npm//@types/normalize-path", - "@npm//@types/source-map-support", - "@npm//@types/watchpack", - "@npm//@types/webpack", - "@npm//@types/webpack-merge", - "@npm//@types/webpack-sources", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-optimizer/index.ts b/packages/kbn-optimizer/index.ts index 0252e47ab35ce..ca82995c857b5 100644 --- a/packages/kbn-optimizer/index.ts +++ b/packages/kbn-optimizer/index.ts @@ -10,7 +10,6 @@ export { OptimizerConfig } from './src/optimizer'; export * from './src/run_optimizer'; export * from './src/log_optimizer_state'; export * from './src/log_optimizer_progress'; -export * from './src/node'; export * from './src/limits'; export * from './src/cli'; export * from './src/report_optimizer_timings'; diff --git a/packages/kbn-optimizer/kibana.jsonc b/packages/kbn-optimizer/kibana.jsonc index 945fdc1e0366c..1e912e055844e 100644 --- a/packages/kbn-optimizer/kibana.jsonc +++ b/packages/kbn-optimizer/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/optimizer", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-optimizer/package.json b/packages/kbn-optimizer/package.json index 488e1b5dbfde8..06d47a19f1dde 100644 --- a/packages/kbn-optimizer/package.json +++ b/packages/kbn-optimizer/package.json @@ -2,7 +2,5 @@ "name": "@kbn/optimizer", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-optimizer/src/audit_bundle_dependencies/find_babel_runtime_helpers_in_entry_bundles.ts b/packages/kbn-optimizer/src/audit_bundle_dependencies/find_babel_runtime_helpers_in_entry_bundles.ts index 3846476869489..00e18666d90b9 100644 --- a/packages/kbn-optimizer/src/audit_bundle_dependencies/find_babel_runtime_helpers_in_entry_bundles.ts +++ b/packages/kbn-optimizer/src/audit_bundle_dependencies/find_babel_runtime_helpers_in_entry_bundles.ts @@ -9,7 +9,7 @@ import Path from 'path'; import { run } from '@kbn/dev-cli-runner'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { OptimizerConfig } from '../optimizer'; import { parseStats, inAnyEntryChunk } from './parse_stats'; diff --git a/packages/kbn-optimizer/src/audit_bundle_dependencies/find_node_libs_browser_polyfills_in_entry_bundles.ts b/packages/kbn-optimizer/src/audit_bundle_dependencies/find_node_libs_browser_polyfills_in_entry_bundles.ts index 4d283e95b1f6f..691a67a7f1cbe 100644 --- a/packages/kbn-optimizer/src/audit_bundle_dependencies/find_node_libs_browser_polyfills_in_entry_bundles.ts +++ b/packages/kbn-optimizer/src/audit_bundle_dependencies/find_node_libs_browser_polyfills_in_entry_bundles.ts @@ -9,7 +9,7 @@ import Path from 'path'; import { run } from '@kbn/dev-cli-runner'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { OptimizerConfig } from '../optimizer'; import { parseStats, inAnyEntryChunk } from './parse_stats'; diff --git a/packages/kbn-optimizer/src/audit_bundle_dependencies/find_target_node_imports.ts b/packages/kbn-optimizer/src/audit_bundle_dependencies/find_target_node_imports.ts deleted file mode 100644 index 6021950cdb40a..0000000000000 --- a/packages/kbn-optimizer/src/audit_bundle_dependencies/find_target_node_imports.ts +++ /dev/null @@ -1,56 +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 Path from 'path'; - -import { run } from '@kbn/dev-cli-runner'; -import { REPO_ROOT } from '@kbn/utils'; - -import { OptimizerConfig } from '../optimizer'; -import { parseStats } from './parse_stats'; - -/** - * Analyzes the bundle dependencies to find any imports using the `@kbn//target_node` build target. - * - * We should aim for those packages to be imported using the `@kbn//target_web` build because it's optimized - * for browser compatibility. - * - * This utility also helps identify when code that should only run in the server is leaked into the browser. - */ -export async function runFindTargetNodeImportsCli() { - run(async ({ log }) => { - const config = OptimizerConfig.create({ - includeCoreBundle: true, - repoRoot: REPO_ROOT, - }); - - const paths = config.bundles.map((b) => Path.resolve(b.outputDir, 'stats.json')); - - log.info('analyzing', paths.length, 'stats files'); - log.verbose(paths); - - const imports = new Set(); - for (const path of paths) { - const stats = parseStats(path); - - for (const module of stats.modules) { - if (module.name.includes('/target_node/')) { - const [, cleanName] = /\/((?:kbn-|@kbn\/).+)\/target_node/.exec(module.name) ?? []; - imports.add(cleanName || module.name); - } - } - } - - log.success('found', imports.size, '@kbn/*/target_node imports in entry bundles and chunks'); - log.write( - Array.from(imports, (i) => `'${i}',`) - .sort() - .join('\n') - ); - }); -} diff --git a/packages/kbn-optimizer/src/audit_bundle_dependencies/index.ts b/packages/kbn-optimizer/src/audit_bundle_dependencies/index.ts index e6059c4c2c9b5..3a7987f867bc5 100644 --- a/packages/kbn-optimizer/src/audit_bundle_dependencies/index.ts +++ b/packages/kbn-optimizer/src/audit_bundle_dependencies/index.ts @@ -8,4 +8,3 @@ export * from './find_babel_runtime_helpers_in_entry_bundles'; export * from './find_node_libs_browser_polyfills_in_entry_bundles'; -export * from './find_target_node_imports'; diff --git a/packages/kbn-optimizer/src/cli.ts b/packages/kbn-optimizer/src/cli.ts index 974bd4dbbcbc0..b0732e931e04f 100644 --- a/packages/kbn-optimizer/src/cli.ts +++ b/packages/kbn-optimizer/src/cli.ts @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { lastValueFrom } from 'rxjs'; import { run, Flags } from '@kbn/dev-cli-runner'; import { createFlagError } from '@kbn/dev-cli-errors'; diff --git a/packages/kbn-optimizer/src/integration_tests/basic_optimization.test.ts b/packages/kbn-optimizer/src/integration_tests/basic_optimization.test.ts index fdd36c76f6e4d..1e84f4443b375 100644 --- a/packages/kbn-optimizer/src/integration_tests/basic_optimization.test.ts +++ b/packages/kbn-optimizer/src/integration_tests/basic_optimization.test.ts @@ -15,7 +15,7 @@ import prettier from 'prettier'; import cpy from 'cpy'; import del from 'del'; import { tap, filter } from 'rxjs/operators'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; import { createReplaceSerializer } from '@kbn/jest-serializers'; import { runOptimizer, OptimizerConfig, OptimizerUpdate, logOptimizerState } from '../..'; @@ -134,13 +134,13 @@ it('builds expected bundles, saves bundle counts to metadata', async () => { expect(foo.cache.getModuleCount()).toBe(6); expect(foo.cache.getReferencedPaths()).toMatchInlineSnapshot(` Array [ - /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/bazel-out/-fastbuild/bin/packages/kbn-ui-shared-deps-npm/target_node/src/public_path_module_creator.js, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/plugins/foo/kibana.json, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/plugins/foo/public/async_import.ts, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/plugins/foo/public/ext.ts, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/plugins/foo/public/index.ts, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/plugins/foo/public/lib.ts, /packages/kbn-optimizer/src/worker/entry_point_creator.ts, + /packages/kbn-ui-shared-deps-npm/src/public_path_module_creator.js, ] `); @@ -154,10 +154,9 @@ it('builds expected bundles, saves bundle counts to metadata', async () => { expect(bar.cache.getReferencedPaths()).toMatchInlineSnapshot(` Array [ - /node_modules/@kbn/optimizer/postcss.config.js, /node_modules/css-loader/package.json, /node_modules/style-loader/package.json, - /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/bazel-out/-fastbuild/bin/packages/kbn-ui-shared-deps-npm/target_node/src/public_path_module_creator.js, + /packages/kbn-optimizer/postcss.config.js, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/plugins/bar/kibana.json, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/plugins/bar/public/index.scss, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/plugins/bar/public/index.ts, @@ -167,6 +166,7 @@ it('builds expected bundles, saves bundle counts to metadata', async () => { /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/src/core/public/styles/core_app/_globals_v8dark.scss, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/src/core/public/styles/core_app/_globals_v8light.scss, /packages/kbn-optimizer/src/worker/entry_point_creator.ts, + /packages/kbn-ui-shared-deps-npm/src/public_path_module_creator.js, ] `); @@ -177,10 +177,10 @@ it('builds expected bundles, saves bundle counts to metadata', async () => { expect(baz.cache.getReferencedPaths()).toMatchInlineSnapshot(` Array [ - /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/bazel-out/-fastbuild/bin/packages/kbn-ui-shared-deps-npm/target_node/src/public_path_module_creator.js, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/x-pack/baz/kibana.json, /packages/kbn-optimizer/src/__fixtures__/__tmp__/mock_repo/x-pack/baz/public/index.ts, /packages/kbn-optimizer/src/worker/entry_point_creator.ts, + /packages/kbn-ui-shared-deps-npm/src/public_path_module_creator.js, ] `); }); diff --git a/packages/kbn-optimizer/src/integration_tests/optimizer_built_paths.test.ts b/packages/kbn-optimizer/src/integration_tests/optimizer_built_paths.test.ts index 1810f40e0fa30..2c4f130ce9490 100644 --- a/packages/kbn-optimizer/src/integration_tests/optimizer_built_paths.test.ts +++ b/packages/kbn-optimizer/src/integration_tests/optimizer_built_paths.test.ts @@ -6,8 +6,7 @@ * Side Public License, v 1. */ -// @ts-expect-error -import { getOptimizerBuiltPaths } from '@kbn/optimizer/target_node/src/optimizer/optimizer_built_paths'; +import { getOptimizerBuiltPaths } from '../optimizer/optimizer_built_paths'; import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; expect.addSnapshotSerializer(createAbsolutePathSerializer()); @@ -16,56 +15,56 @@ it(`finds all the optimizer files relative to it's path`, async () => { const paths = await getOptimizerBuiltPaths(); expect(paths).toMatchInlineSnapshot(` Array [ - /node_modules/@kbn/optimizer/target_node/src/cli.js, - /node_modules/@kbn/optimizer/target_node/src/common/array_helpers.js, - /node_modules/@kbn/optimizer/target_node/src/common/bundle_cache.js, - /node_modules/@kbn/optimizer/target_node/src/common/bundle_refs.js, - /node_modules/@kbn/optimizer/target_node/src/common/bundle.js, - /node_modules/@kbn/optimizer/target_node/src/common/compiler_messages.js, - /node_modules/@kbn/optimizer/target_node/src/common/dll_manifest.js, - /node_modules/@kbn/optimizer/target_node/src/common/event_stream_helpers.js, - /node_modules/@kbn/optimizer/target_node/src/common/hashes.js, - /node_modules/@kbn/optimizer/target_node/src/common/index.js, - /node_modules/@kbn/optimizer/target_node/src/common/obj_helpers.js, - /node_modules/@kbn/optimizer/target_node/src/common/parse_path.js, - /node_modules/@kbn/optimizer/target_node/src/common/rxjs_helpers.js, - /node_modules/@kbn/optimizer/target_node/src/common/theme_tags.js, - /node_modules/@kbn/optimizer/target_node/src/common/ts_helpers.js, - /node_modules/@kbn/optimizer/target_node/src/common/worker_config.js, - /node_modules/@kbn/optimizer/target_node/src/common/worker_messages.js, - /node_modules/@kbn/optimizer/target_node/src/limits.js, - /node_modules/@kbn/optimizer/target_node/src/log_optimizer_progress.js, - /node_modules/@kbn/optimizer/target_node/src/log_optimizer_state.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/assign_bundles_to_workers.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/bundle_cache.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/diff_cache_key.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/filter_by_id.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/focus_bundles.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/get_plugin_bundles.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/handle_optimizer_completion.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/index.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/kibana_platform_plugins.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/observe_stdio.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/observe_worker.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/optimizer_built_paths.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/optimizer_cache_key.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/optimizer_config.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/optimizer_state.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/run_workers.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/watch_bundles_for_changes.js, - /node_modules/@kbn/optimizer/target_node/src/optimizer/watcher.js, - /node_modules/@kbn/optimizer/target_node/src/report_optimizer_timings.js, - /node_modules/@kbn/optimizer/target_node/src/run_optimizer.js, - /node_modules/@kbn/optimizer/target_node/src/worker/bundle_metrics_plugin.js, - /node_modules/@kbn/optimizer/target_node/src/worker/bundle_ref_module.js, - /node_modules/@kbn/optimizer/target_node/src/worker/bundle_refs_plugin.js, - /node_modules/@kbn/optimizer/target_node/src/worker/emit_stats_plugin.js, - /node_modules/@kbn/optimizer/target_node/src/worker/entry_point_creator.js, - /node_modules/@kbn/optimizer/target_node/src/worker/populate_bundle_cache_plugin.js, - /node_modules/@kbn/optimizer/target_node/src/worker/run_compilers.js, - /node_modules/@kbn/optimizer/target_node/src/worker/run_worker.js, - /node_modules/@kbn/optimizer/target_node/src/worker/theme_loader.js, - /node_modules/@kbn/optimizer/target_node/src/worker/webpack.config.js, + /packages/kbn-optimizer/src/cli.ts, + /packages/kbn-optimizer/src/common/array_helpers.ts, + /packages/kbn-optimizer/src/common/bundle_cache.ts, + /packages/kbn-optimizer/src/common/bundle_refs.ts, + /packages/kbn-optimizer/src/common/bundle.ts, + /packages/kbn-optimizer/src/common/compiler_messages.ts, + /packages/kbn-optimizer/src/common/dll_manifest.ts, + /packages/kbn-optimizer/src/common/event_stream_helpers.ts, + /packages/kbn-optimizer/src/common/hashes.ts, + /packages/kbn-optimizer/src/common/index.ts, + /packages/kbn-optimizer/src/common/obj_helpers.ts, + /packages/kbn-optimizer/src/common/parse_path.ts, + /packages/kbn-optimizer/src/common/rxjs_helpers.ts, + /packages/kbn-optimizer/src/common/theme_tags.ts, + /packages/kbn-optimizer/src/common/ts_helpers.ts, + /packages/kbn-optimizer/src/common/worker_config.ts, + /packages/kbn-optimizer/src/common/worker_messages.ts, + /packages/kbn-optimizer/src/limits.ts, + /packages/kbn-optimizer/src/log_optimizer_progress.ts, + /packages/kbn-optimizer/src/log_optimizer_state.ts, + /packages/kbn-optimizer/src/optimizer/assign_bundles_to_workers.ts, + /packages/kbn-optimizer/src/optimizer/bundle_cache.ts, + /packages/kbn-optimizer/src/optimizer/diff_cache_key.ts, + /packages/kbn-optimizer/src/optimizer/filter_by_id.ts, + /packages/kbn-optimizer/src/optimizer/focus_bundles.ts, + /packages/kbn-optimizer/src/optimizer/get_plugin_bundles.ts, + /packages/kbn-optimizer/src/optimizer/handle_optimizer_completion.ts, + /packages/kbn-optimizer/src/optimizer/index.ts, + /packages/kbn-optimizer/src/optimizer/kibana_platform_plugins.ts, + /packages/kbn-optimizer/src/optimizer/observe_stdio.ts, + /packages/kbn-optimizer/src/optimizer/observe_worker.ts, + /packages/kbn-optimizer/src/optimizer/optimizer_built_paths.ts, + /packages/kbn-optimizer/src/optimizer/optimizer_cache_key.ts, + /packages/kbn-optimizer/src/optimizer/optimizer_config.ts, + /packages/kbn-optimizer/src/optimizer/optimizer_state.ts, + /packages/kbn-optimizer/src/optimizer/run_workers.ts, + /packages/kbn-optimizer/src/optimizer/watch_bundles_for_changes.ts, + /packages/kbn-optimizer/src/optimizer/watcher.ts, + /packages/kbn-optimizer/src/report_optimizer_timings.ts, + /packages/kbn-optimizer/src/run_optimizer.ts, + /packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts, + /packages/kbn-optimizer/src/worker/bundle_ref_module.ts, + /packages/kbn-optimizer/src/worker/bundle_refs_plugin.ts, + /packages/kbn-optimizer/src/worker/emit_stats_plugin.ts, + /packages/kbn-optimizer/src/worker/entry_point_creator.ts, + /packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts, + /packages/kbn-optimizer/src/worker/run_compilers.ts, + /packages/kbn-optimizer/src/worker/run_worker.ts, + /packages/kbn-optimizer/src/worker/theme_loader.ts, + /packages/kbn-optimizer/src/worker/webpack.config.ts, ] `); }); diff --git a/packages/kbn-optimizer/src/node/cache.ts b/packages/kbn-optimizer/src/node/cache.ts deleted file mode 100644 index bb7a65090c541..0000000000000 --- a/packages/kbn-optimizer/src/node/cache.ts +++ /dev/null @@ -1,211 +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 Path from 'path'; -import { Writable } from 'stream'; - -import chalk from 'chalk'; -import * as LmdbStore from 'lmdb'; - -const GLOBAL_ATIME = `${Date.now()}`; -const MINUTE = 1000 * 60; -const HOUR = MINUTE * 60; -const DAY = HOUR * 24; - -const dbName = (db: LmdbStore.Database) => - // @ts-expect-error db.name is not a documented/typed property - db.name; - -export class Cache { - private readonly codes: LmdbStore.RootDatabase; - private readonly atimes: LmdbStore.Database; - private readonly mtimes: LmdbStore.Database; - private readonly sourceMaps: LmdbStore.Database; - private readonly pathRoot: string; - private readonly prefix: string; - private readonly log?: Writable; - private readonly timer: NodeJS.Timer; - - constructor(config: { pathRoot: string; dir: string; prefix: string; log?: Writable }) { - if (!Path.isAbsolute(config.pathRoot)) { - throw new Error('cache requires an absolute path to resolve paths relative to'); - } - - this.pathRoot = config.pathRoot; - this.prefix = config.prefix; - this.log = config.log; - - this.codes = LmdbStore.open(config.dir, { - name: 'codes', - encoding: 'string', - maxReaders: 500, - overlappingSync: false, - noSync: true, - noMetaSync: true, - noMemInit: true, - }); - - // TODO: redundant 'name' syntax is necessary because of a bug that I have yet to fix - this.atimes = this.codes.openDB('atimes', { - name: 'atimes', - encoding: 'string', - }); - - this.mtimes = this.codes.openDB('mtimes', { - name: 'mtimes', - encoding: 'string', - }); - - this.sourceMaps = this.codes.openDB('sourceMaps', { - name: 'sourceMaps', - encoding: 'string', - }); - - // after the process has been running for 30 minutes prune the - // keys which haven't been used in 30 days. We use `unref()` to - // make sure this timer doesn't hold other processes open - // unexpectedly - this.timer = setTimeout(async () => { - await this.pruneOldKeys(); - }, 30 * MINUTE); - - // timer.unref is not defined in jest which emulates the dom by default - if (typeof this.timer.unref === 'function') { - this.timer.unref(); - } - } - - getMtime(path: string) { - return this.safeGet(this.mtimes, this.getKey(path)); - } - - getCode(path: string) { - const key = this.getKey(path); - const code = this.safeGet(this.codes, key); - - if (code !== undefined) { - // when we use a file from the cache set the "atime" of that cache entry - // so that we know which cache items we use and which haven't been - // touched in a long time (currently 30 days) - this.safePut(this.atimes, key, GLOBAL_ATIME); - } - - return code; - } - - getSourceMap(path: string) { - const map = this.safeGet(this.sourceMaps, this.getKey(path)); - if (typeof map === 'string') { - return JSON.parse(map); - } - } - - close() { - clearTimeout(this.timer); - } - - async update(path: string, file: { mtime: string; code: string; map?: any }) { - const key = this.getKey(path); - - this.safePut(this.atimes, key, GLOBAL_ATIME); - this.safePut(this.mtimes, key, file.mtime); - this.safePut(this.codes, key, file.code); - - if (file.map != null) { - this.safePut(this.sourceMaps, key, JSON.stringify(file.map)); - } - } - - private getKey(path: string) { - const normalizedPath = - Path.sep !== '/' - ? Path.relative(this.pathRoot, path).split(Path.sep).join('/') - : Path.relative(this.pathRoot, path); - - return `${this.prefix}:${normalizedPath}`; - } - - private safeGet(db: LmdbStore.Database, key: string) { - try { - const value = db.get(key); - this.debug(value === undefined ? 'MISS' : 'HIT', db, key); - return value; - } catch (error) { - this.logError('GET', db, key, error); - } - } - - private safePut(db: LmdbStore.Database, key: string, value: V) { - try { - db.putSync(key, value); - this.debug('PUT', db, key); - } catch (error) { - this.logError('PUT', db, key, error); - } - } - - private debug(type: string, db: LmdbStore.Database, key: LmdbStore.Key) { - if (this.log) { - this.log.write(`${type} [${dbName(db)}] ${String(key)}\n`); - } - } - - private logError(type: 'GET' | 'PUT', db: LmdbStore.Database, key: LmdbStore.Key, error: Error) { - this.debug(`ERROR/${type}`, db, `${String(key)}: ${error.stack}`); - process.stderr.write( - chalk.red( - `[@kbn/optimizer/node] ${type} error [${dbName(db)}/${String(key)}]: ${error.stack}\n` - ) - ); - } - - private async pruneOldKeys() { - try { - const ATIME_LIMIT = Date.now() - 30 * DAY; - const BATCH_SIZE = 1000; - - const validKeys: string[] = []; - const invalidKeys: string[] = []; - - for (const { key, value } of this.atimes.getRange()) { - const atime = parseInt(`${value}`, 10); - if (Number.isNaN(atime) || atime < ATIME_LIMIT) { - invalidKeys.push(key); - } else { - validKeys.push(key); - } - - if (validKeys.length + invalidKeys.length >= BATCH_SIZE) { - const promises = new Set(); - - if (invalidKeys.length) { - for (const k of invalidKeys) { - // all these promises are the same currently, so Set() will - // optimise this to a single promise, but I wouldn't be shocked - // if a future version starts returning independent promises so - // this is just for some future-proofing - promises.add(this.atimes.remove(k)); - promises.add(this.mtimes.remove(k)); - promises.add(this.codes.remove(k)); - promises.add(this.sourceMaps.remove(k)); - } - } else { - // delay a smidge to allow other things to happen before the next batch of checks - promises.add(new Promise((resolve) => setTimeout(resolve, 1))); - } - - invalidKeys.length = 0; - validKeys.length = 0; - await Promise.all(Array.from(promises)); - } - } - } catch { - // ignore errors, the cache is totally disposable and will rebuild if there is some sort of corruption - } - } -} diff --git a/packages/kbn-optimizer/src/node/node_auto_tranpilation.ts b/packages/kbn-optimizer/src/node/node_auto_tranpilation.ts deleted file mode 100644 index ad739bdd48829..0000000000000 --- a/packages/kbn-optimizer/src/node/node_auto_tranpilation.ts +++ /dev/null @@ -1,160 +0,0 @@ -/* eslint-disable @kbn/eslint/require-license-header */ - -/** - * This module is based on @babel/register @ 9808d25, modified to use - * a more efficient caching implementation which writes to disk as - * the cache is built rather than keeping the whole cache in memory - * and then dumping it to disk when the process exits. - */ - -/** - * @notice - * MIT License - * - * Copyright (c) 2014-present Sebastian McKenzie and other contributors - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -import Fs from 'fs'; -import Path from 'path'; -import Crypto from 'crypto'; - -import { version as babelVersion } from '@babel/core'; -import { VERSION as peggyVersion } from '@kbn/peggy'; -import { addHook } from 'pirates'; -import { REPO_ROOT, UPSTREAM_BRANCH } from '@kbn/utils'; -import sourceMapSupport from 'source-map-support'; -import { readHashOfPackageMap } from '@kbn/synthetic-package-map'; - -import { TRANSFORMS } from './transforms'; -import { getBabelOptions } from './transforms/babel'; - -import { Cache } from './cache'; - -const IGNORE_PATTERNS = [ - /[\/\\]kbn-pm[\/\\]dist[\/\\]/, - - // ignore paths matching `/node_modules/{a}/{b}`, unless `a` - // is `x-pack` and `b` is not `node_modules` - /[\/\\]node_modules[\/\\](?!x-pack[\/\\](?!node_modules)([^\/\\]+))([^\/\\]+[\/\\][^\/\\]+)/, - - // ignore paths matching `/canvas/canvas_plugin/` - /[\/\\]canvas[\/\\]canvas_plugin[\/\\]/, - - // ignore any path in the packages, unless it is in the package's - // root `src` directory, in any test or __tests__ directory, or it - // ends with .test.js, .test.ts, or .test.tsx - /[\/\\]packages[\/\\](eslint-|kbn-)[^\/\\]+[\/\\](?!src[\/\\].*|(.+[\/\\])?(test|__tests__)[\/\\].+|.+\.test\.(js|ts|tsx)$)(.+$)/, -]; - -let installed = false; - -export function registerNodeAutoTranspilation() { - if (installed) { - return; - } - installed = true; - - const cacheLog = process.env.DEBUG_NODE_TRANSPILER_CACHE - ? Fs.createWriteStream(Path.resolve(REPO_ROOT, 'node_auto_transpilation_cache.log')) - : undefined; - - const cacheDir = Path.resolve( - REPO_ROOT, - 'data/node_auto_transpilation_cache_v6', - UPSTREAM_BRANCH - ); - - /** - * @babel/register uses a JSON encoded copy of the config + babel.version - * as the cache key for files, so we do something similar but we don't need - * a unique cache key for every file as our config isn't different for - * different files (by design). Instead we determine a unique prefix and - * automatically prepend all paths with the prefix to create cache keys - */ - - const cache = new Cache({ - dir: cacheDir, - log: cacheLog, - pathRoot: REPO_ROOT, - prefix: Crypto.createHash('sha256') - .update( - JSON.stringify({ - synthPkgMapHash: readHashOfPackageMap(), - babelVersion, - peggyVersion, - // get a config for a fake js, ts, and tsx file to make sure we - // capture conditional config portions based on the file extension - js: getBabelOptions(Path.resolve(REPO_ROOT, 'foo.js')), - ts: getBabelOptions(Path.resolve(REPO_ROOT, 'foo.ts')), - tsx: getBabelOptions(Path.resolve(REPO_ROOT, 'foo.tsx')), - }) - ) - .digest('hex') - .slice(0, 8), - }); - cacheLog?.write(`cache initialized\n`); - - sourceMapSupport.install({ - handleUncaughtExceptions: false, - environment: 'node', - // @ts-expect-error bad source-map-support types - retrieveSourceMap(path: string) { - const map = cache.getSourceMap(path); - return map ? { map, url: null } : null; - }, - }); - - let transformInProgress = false; - addHook( - (code, path) => { - if (transformInProgress) { - return code; - } - - const ext = Path.extname(path); - - if (ext !== '.peggy' && IGNORE_PATTERNS.some((re) => re.test(path))) { - return code; - } - - try { - transformInProgress = true; - const transform = Object.hasOwn(TRANSFORMS, ext) - ? TRANSFORMS[ext as keyof typeof TRANSFORMS] - : TRANSFORMS.default; - - return transform(path, code, cache); - } finally { - transformInProgress = false; - } - }, - { - exts: ['.js', '.ts', '.tsx', '.peggy'], - ignoreNodeModules: false, - } - ); - - // require the polyfills after setting up the require hook so that @babel/preset-env - // will spot the import in the polyfill file and replace it with the necessary polyfills - // for the current node.js version - require('./polyfill'); -} diff --git a/packages/kbn-optimizer/src/node/transforms/babel.ts b/packages/kbn-optimizer/src/node/transforms/babel.ts deleted file mode 100644 index 6bbe7ba67f76a..0000000000000 --- a/packages/kbn-optimizer/src/node/transforms/babel.ts +++ /dev/null @@ -1,52 +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 Path from 'path'; -import Fs from 'fs'; - -import * as babel from '@babel/core'; - -import { Transform } from './transform'; - -export function getBabelOptions(path: string) { - return babel.loadOptions({ - cwd: process.cwd(), - sourceRoot: Path.dirname(path) + Path.sep, - filename: path, - babelrc: false, - presets: [require.resolve('@kbn/babel-preset/node_preset')], - sourceMaps: 'both', - ast: false, - })!; -} - -export const babelTransform: Transform = (path, source, cache) => { - const mtime = `${Fs.statSync(path).mtimeMs}`; - - if (cache.getMtime(path) === mtime) { - const code = cache.getCode(path); - if (code) { - return code; - } - } - - const options = getBabelOptions(path); - const result = babel.transform(source, options); - - if (!result || !result.code || !result.map) { - throw new Error(`babel failed to transpile [${path}]`); - } - - cache.update(path, { - mtime, - code: result.code, - map: result.map, - }); - - return result.code; -}; diff --git a/packages/kbn-optimizer/src/optimizer/handle_optimizer_completion.test.ts b/packages/kbn-optimizer/src/optimizer/handle_optimizer_completion.test.ts index 45d476558e051..9a3b7c6abb14c 100644 --- a/packages/kbn-optimizer/src/optimizer/handle_optimizer_completion.test.ts +++ b/packages/kbn-optimizer/src/optimizer/handle_optimizer_completion.test.ts @@ -7,7 +7,7 @@ */ import * as Rx from 'rxjs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Update, allValuesFrom } from '../common'; diff --git a/packages/kbn-optimizer/src/optimizer/observe_worker.ts b/packages/kbn-optimizer/src/optimizer/observe_worker.ts index b73e441671eaf..cf250a7deef6e 100644 --- a/packages/kbn-optimizer/src/optimizer/observe_worker.ts +++ b/packages/kbn-optimizer/src/optimizer/observe_worker.ts @@ -8,7 +8,7 @@ import { inspect } from 'util'; -import execa from 'execa'; +import { fork, type ChildProcess } from 'child_process'; import * as Rx from 'rxjs'; import { map, takeUntil, first, ignoreElements } from 'rxjs/operators'; @@ -31,7 +31,7 @@ export interface WorkerStarted { export type WorkerStatus = WorkerStdio | WorkerStarted; interface ProcResource extends Rx.Unsubscribable { - proc: execa.ExecaChildProcess; + proc: ChildProcess; } const isNumeric = (input: any) => String(input).match(/^[0-9]+$/); @@ -55,31 +55,18 @@ if (inspectFlagIndex !== -1) { } } -function usingWorkerProc( - config: OptimizerConfig, - fn: (proc: execa.ExecaChildProcess) => Rx.Observable -) { +function usingWorkerProc(config: OptimizerConfig, fn: (proc: ChildProcess) => Rx.Observable) { return Rx.using( (): ProcResource => { - const workerPath = require.resolve('../worker/run_worker'); - const proc = execa.node( - workerPath.endsWith('.ts') - ? require.resolve('../worker/run_worker_from_source') // workerFromSourcePath - : workerPath, - [], - { - nodeOptions: [ - '--preserve-symlinks', - '--preserve-symlinks-main', - ...(inspectFlag && config.inspectWorkers - ? [`${inspectFlag}=${inspectPortCounter++}`] - : []), - ], - buffer: false, - stderr: 'pipe', - stdout: 'pipe', - } - ); + const proc = fork(require.resolve('../worker/run_worker'), [], { + execArgv: [ + `--require=@kbn/babel-register/install`, + ...(inspectFlag && config.inspectWorkers + ? [`${inspectFlag}=${inspectPortCounter++}`] + : []), + ], + stdio: ['ignore', 'pipe', 'pipe', 'ipc'], + }); return { proc, @@ -104,7 +91,7 @@ function usingWorkerProc( * be initialized in the worker before most of the code is run. */ function initWorker( - proc: execa.ExecaChildProcess, + proc: ChildProcess, config: OptimizerConfig, workerConfig: WorkerConfig, bundles: Bundle[] diff --git a/packages/kbn-optimizer/src/optimizer/optimizer_built_paths.ts b/packages/kbn-optimizer/src/optimizer/optimizer_built_paths.ts index 8421c0846d52a..e3e99943236f5 100644 --- a/packages/kbn-optimizer/src/optimizer/optimizer_built_paths.ts +++ b/packages/kbn-optimizer/src/optimizer/optimizer_built_paths.ts @@ -17,6 +17,7 @@ export async function getOptimizerBuiltPaths() { [ '**/*', '!**/{__fixtures__,__snapshots__,integration_tests,audit_bundle_dependencies,node}/**', + '!**/*.test.*', ], { cwd: Path.resolve(__dirname, '../'), diff --git a/packages/kbn-optimizer/src/optimizer/optimizer_cache_key.test.ts b/packages/kbn-optimizer/src/optimizer/optimizer_cache_key.test.ts index d22ba95282002..0302968ce2927 100644 --- a/packages/kbn-optimizer/src/optimizer/optimizer_cache_key.test.ts +++ b/packages/kbn-optimizer/src/optimizer/optimizer_cache_key.test.ts @@ -6,13 +6,13 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; import { getOptimizerCacheKey } from './optimizer_cache_key'; import { OptimizerConfig } from './optimizer_config'; -jest.mock('@kbn/synthetic-package-map', () => { +jest.mock('@kbn/package-map', () => { return { readHashOfPackageMap() { return ''; diff --git a/packages/kbn-optimizer/src/optimizer/optimizer_cache_key.ts b/packages/kbn-optimizer/src/optimizer/optimizer_cache_key.ts index 586846653802c..1cf00de874b28 100644 --- a/packages/kbn-optimizer/src/optimizer/optimizer_cache_key.ts +++ b/packages/kbn-optimizer/src/optimizer/optimizer_cache_key.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { readHashOfPackageMap } from '@kbn/synthetic-package-map'; +import { readHashOfPackageMap } from '@kbn/package-map'; import { CacheableWorkerConfig, Hashes } from '../common'; import { OptimizerConfig } from './optimizer_config'; diff --git a/packages/kbn-optimizer/src/optimizer/optimizer_config.test.ts b/packages/kbn-optimizer/src/optimizer/optimizer_config.test.ts index 95db0ae10b3bd..d6b0a2c860bc3 100644 --- a/packages/kbn-optimizer/src/optimizer/optimizer_config.test.ts +++ b/packages/kbn-optimizer/src/optimizer/optimizer_config.test.ts @@ -24,7 +24,7 @@ jest.mock('os', () => { }); import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; import { OptimizerConfig, ParsedOptions } from './optimizer_config'; diff --git a/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts b/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts index ac010da7a8340..b2e036cb7e00a 100644 --- a/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts +++ b/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -import Fs from 'fs'; import Path from 'path'; import { inspect } from 'util'; @@ -39,20 +38,6 @@ import { BundleRefModule } from './bundle_ref_module'; */ const EXTRA_SCSS_WORK_UNITS = 100; -const isBazelPackageCache = new Map(); -function isBazelPackage(pkgJsonPath: string) { - const cached = isBazelPackageCache.get(pkgJsonPath); - if (typeof cached === 'boolean') { - return cached; - } - - const path = parseFilePath(Fs.realpathSync(pkgJsonPath, 'utf-8')); - const match = !!path.matchDirs('bazel-out', /-fastbuild$/, 'bin', 'packages'); - isBazelPackageCache.set(pkgJsonPath, match); - - return match; -} - export class PopulateBundleCachePlugin { constructor( private readonly workerConfig: WorkerConfig, @@ -100,18 +85,8 @@ export class PopulateBundleCachePlugin { for (const module of compilation.modules) { if (isNormalModule(module)) { moduleCount += 1; - let path = getModulePath(module); - let parsedPath = parseFilePath(path); - - const bazelOutIndex = parsedPath.dirs.indexOf('bazel-out'); - if (bazelOutIndex >= 0) { - path = Path.resolve( - this.workerConfig.repoRoot, - ...parsedPath.dirs.slice(bazelOutIndex), - parsedPath.filename ?? '' - ); - parsedPath = parseFilePath(path); - } + const path = getModulePath(module); + const parsedPath = parseFilePath(path); if (!parsedPath.dirs.includes('node_modules')) { addReferenced(path); @@ -134,8 +109,7 @@ export class PopulateBundleCachePlugin { ...parsedPath.dirs.slice(0, nmIndex + 1 + (isScoped ? 2 : 1)), 'package.json' ); - - addReferenced(isBazelPackage(pkgJsonPath) ? path : pkgJsonPath); + addReferenced(pkgJsonPath); continue; } diff --git a/packages/kbn-optimizer/src/worker/webpack.config.ts b/packages/kbn-optimizer/src/worker/webpack.config.ts index 888089203be4b..a5511c7ae0e5a 100644 --- a/packages/kbn-optimizer/src/worker/webpack.config.ts +++ b/packages/kbn-optimizer/src/worker/webpack.config.ts @@ -27,7 +27,12 @@ import { PopulateBundleCachePlugin } from './populate_bundle_cache_plugin'; const IS_CODE_COVERAGE = !!process.env.CODE_COVERAGE; const ISTANBUL_PRESET_PATH = require.resolve('@kbn/babel-preset/istanbul_preset'); -const BABEL_PRESET_PATH = require.resolve('@kbn/babel-preset/webpack_preset'); +const BABEL_PRESET = [ + require.resolve('@kbn/babel-preset/webpack_preset'), + { + 'kibana/ignoredPkgIds': Object.keys(UiSharedDepsSrc.externals), + }, +]; const DLL_MANIFEST = JSON.parse(Fs.readFileSync(UiSharedDepsNpm.dllManifestPath, 'utf8')); const nodeModulesButNotKbnPackages = (path: string) => { @@ -76,7 +81,7 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: }, }, - externals: [UiSharedDepsSrc.externals], + externals: UiSharedDepsSrc.externals, plugins: [ new CleanWebpackPlugin(), @@ -149,7 +154,7 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: options: { sourceMap: !worker.dist, postcssOptions: { - config: require.resolve('@kbn/optimizer/postcss.config.js'), + config: require.resolve('../../postcss.config.js'), }, }, }, @@ -176,7 +181,7 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: options: { sourceMap: !worker.dist, postcssOptions: { - config: require.resolve('@kbn/optimizer/postcss.config.js'), + config: require.resolve('../../postcss.config.js'), }, }, }, @@ -227,9 +232,7 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: options: { babelrc: false, envName: worker.dist ? 'production' : 'development', - presets: IS_CODE_COVERAGE - ? [ISTANBUL_PRESET_PATH, BABEL_PRESET_PATH] - : [BABEL_PRESET_PATH], + presets: IS_CODE_COVERAGE ? [ISTANBUL_PRESET_PATH, BABEL_PRESET] : [BABEL_PRESET], }, }, }, @@ -241,7 +244,7 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: }, { test: /\.peggy$/, - loader: '@kbn/peggy-loader', + loader: require.resolve('@kbn/peggy-loader'), }, ], }, diff --git a/packages/kbn-optimizer/tsconfig.json b/packages/kbn-optimizer/tsconfig.json index 93c0f5ba2a57f..b8f5a04481115 100644 --- a/packages/kbn-optimizer/tsconfig.json +++ b/packages/kbn-optimizer/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -13,6 +11,23 @@ "**/*.ts" ], "exclude": [ - "**/__fixtures__/**/*" + "**/__fixtures__/**/*", + "target/**/*", + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/dev-utils", + "@kbn/optimizer-webpack-helpers", + "@kbn/std", + "@kbn/ui-shared-deps-npm", + "@kbn/ui-shared-deps-src", + "@kbn/tooling-log", + "@kbn/package-map", + "@kbn/ci-stats-reporter", + "@kbn/dev-cli-errors", + "@kbn/repo-info", + "@kbn/dev-cli-runner", + "@kbn/jest-serializers", + "@kbn/plugin-discovery", ] } diff --git a/packages/kbn-osquery-io-ts-types/BUILD.bazel b/packages/kbn-osquery-io-ts-types/BUILD.bazel deleted file mode 100644 index 80390c1de4b0a..0000000000000 --- a/packages/kbn-osquery-io-ts-types/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-osquery-io-ts-types" -PKG_REQUIRE_NAME = "@kbn/osquery-io-ts-types" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//io-ts", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//tslib", - "@npm//io-ts", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-osquery-io-ts-types/kibana.jsonc b/packages/kbn-osquery-io-ts-types/kibana.jsonc index bddaaf9b3543f..d989501855da2 100644 --- a/packages/kbn-osquery-io-ts-types/kibana.jsonc +++ b/packages/kbn-osquery-io-ts-types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/osquery-io-ts-types", - "owner": "@elastic/security-asset-management", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/security-asset-management" } diff --git a/packages/kbn-osquery-io-ts-types/package.json b/packages/kbn-osquery-io-ts-types/package.json index 49b11c73a039a..71db0385e6117 100644 --- a/packages/kbn-osquery-io-ts-types/package.json +++ b/packages/kbn-osquery-io-ts-types/package.json @@ -3,8 +3,5 @@ "private": true, "version": "1.0.0", "description": "io ts utilities and types to be shared with plugins from the osquery project", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-osquery-io-ts-types/tsconfig.json b/packages/kbn-osquery-io-ts-types/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-osquery-io-ts-types/tsconfig.json +++ b/packages/kbn-osquery-io-ts-types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-package-map/BUILD.bazel b/packages/kbn-package-map/BUILD.bazel new file mode 100644 index 0000000000000..9c29c0f656332 --- /dev/null +++ b/packages/kbn-package-map/BUILD.bazel @@ -0,0 +1,16 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "pkg_npm", "ts_project") + +js_library( + name = "kbn-package-map", + package_name = "@kbn/package-map", + srcs = [ + "package.json", + "index.js", + "index.d.ts", + "package-map.json", + ], + deps = [], + visibility = ["//visibility:public"], +) diff --git a/packages/kbn-synthetic-package-map/index.d.ts b/packages/kbn-package-map/index.d.ts similarity index 100% rename from packages/kbn-synthetic-package-map/index.d.ts rename to packages/kbn-package-map/index.d.ts diff --git a/packages/kbn-synthetic-package-map/index.js b/packages/kbn-package-map/index.js similarity index 90% rename from packages/kbn-synthetic-package-map/index.js rename to packages/kbn-package-map/index.js index 9a9b8c51d90a9..e81700334878a 100644 --- a/packages/kbn-synthetic-package-map/index.js +++ b/packages/kbn-package-map/index.js @@ -10,7 +10,7 @@ const Fs = require('fs'); const Path = require('path'); const Crypto = require('crypto'); -const PACKAGE_MAP_PATH = Path.resolve(__dirname, 'synthetic-packages.json'); +const PACKAGE_MAP_PATH = Path.resolve(__dirname, 'package-map.json'); function readPackageMap() { return new Map(JSON.parse(Fs.readFileSync(PACKAGE_MAP_PATH, 'utf8'))); diff --git a/packages/kbn-package-map/kibana.jsonc b/packages/kbn-package-map/kibana.jsonc new file mode 100644 index 0000000000000..9b2bea0bfc1d9 --- /dev/null +++ b/packages/kbn-package-map/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/package-map", + "devOnly": true, + "owner": "@elastic/kibana-operations" +} diff --git a/packages/kbn-synthetic-package-map/package.json b/packages/kbn-package-map/package.json similarity index 74% rename from packages/kbn-synthetic-package-map/package.json rename to packages/kbn-package-map/package.json index ec6ac454bf31d..f122e147219a9 100644 --- a/packages/kbn-synthetic-package-map/package.json +++ b/packages/kbn-package-map/package.json @@ -1,5 +1,5 @@ { - "name": "@kbn/synthetic-package-map", + "name": "@kbn/package-map", "private": true, "version": "1.0.0", "main": "./index.js", diff --git a/packages/kbn-package-map/tsconfig.json b/packages/kbn-package-map/tsconfig.json new file mode 100644 index 0000000000000..9a17e744de9e0 --- /dev/null +++ b/packages/kbn-package-map/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "node" + ] + }, + "include": [ + "index.d.ts" + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/packages/kbn-peggy-loader/BUILD.bazel b/packages/kbn-peggy-loader/BUILD.bazel index 2d8bed8dd59a4..13afe2c2bc2de 100644 --- a/packages/kbn-peggy-loader/BUILD.bazel +++ b/packages/kbn-peggy-loader/BUILD.bazel @@ -1,11 +1,6 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-peggy-loader" -PKG_REQUIRE_NAME = "@kbn/peggy-loader" - -SOURCE_FILES = glob( +SRCS = glob( [ "**/*.ts", ], @@ -24,105 +19,16 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ +BUNDLER_DEPS = [ "//packages/kbn-peggy", "@npm//peggy", "@npm//webpack", ] -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-peggy:npm_module_types", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/webpack", - "@npm//peggy", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "build_types", - srcs = [":npm_module_types"], + name = "kbn-peggy-loader", + package_name = "@kbn/peggy-loader", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, visibility = ["//visibility:public"], ) diff --git a/packages/kbn-peggy-loader/kibana.jsonc b/packages/kbn-peggy-loader/kibana.jsonc index e651946dce5eb..3fb6c0848b3d9 100644 --- a/packages/kbn-peggy-loader/kibana.jsonc +++ b/packages/kbn-peggy-loader/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/peggy-loader", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-peggy-loader/package.json b/packages/kbn-peggy-loader/package.json index 6c2807a006f4a..c3c90681a442f 100644 --- a/packages/kbn-peggy-loader/package.json +++ b/packages/kbn-peggy-loader/package.json @@ -2,7 +2,5 @@ "name": "@kbn/peggy-loader", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts", "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-peggy-loader/tsconfig.json b/packages/kbn-peggy-loader/tsconfig.json index 292157c18591a..3e412325cfa91 100644 --- a/packages/kbn-peggy-loader/tsconfig.json +++ b/packages/kbn-peggy-loader/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/peggy" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-peggy/BUILD.bazel b/packages/kbn-peggy/BUILD.bazel index dcb225c7da403..9e577817f77af 100644 --- a/packages/kbn-peggy/BUILD.bazel +++ b/packages/kbn-peggy/BUILD.bazel @@ -1,12 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-peggy" -PKG_REQUIRE_NAME = "@kbn/peggy" - -SOURCE_FILES = glob( +SRCS = glob( [ + "**/*.js", "**/*.ts", ], exclude = [ @@ -24,101 +20,14 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//peggy", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", +BUNDLER_DEPS = [ "@npm//peggy", ] -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "build_types", - srcs = [":npm_module_types"], + name = "kbn-peggy", + package_name = "@kbn/peggy", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, visibility = ["//visibility:public"], ) diff --git a/packages/kbn-peggy/README.mdx b/packages/kbn-peggy/README.mdx index 5d9779976b15a..a522690265460 100644 --- a/packages/kbn-peggy/README.mdx +++ b/packages/kbn-peggy/README.mdx @@ -16,8 +16,4 @@ These types will automatically be included for plugins. ## Packages -To include these types in a package: - -- add `"//packages/kbn-ambient-ui-types"` to the `RUNTIME_DEPS` portion of the `BUILD.bazel` file. -- add `"//packages/kbn-ambient-ui-types:npm_module_types"` to the `TYPES_DEPS` portion of the `BUILD.bazel` file. -- add `"@kbn/ambient-ui-types"` to the `types` portion of the `tsconfig.json` file. \ No newline at end of file +To include these types in a package add `"@kbn/ambient-ui-types"` to the `types` portion of the `tsconfig.json` file. \ No newline at end of file diff --git a/packages/kbn-peggy/index.js b/packages/kbn-peggy/index.js new file mode 100644 index 0000000000000..0a5910fcf04f2 --- /dev/null +++ b/packages/kbn-peggy/index.js @@ -0,0 +1,94 @@ +/* + * 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. + */ + +const Path = require('path'); +const Fs = require('fs'); +const Fsp = require('fs/promises'); + +const Peggy = require('peggy'); + +/** + * @param {string} grammarPath + * @returns {import('./types').Config | undefined} + */ +function findConfigFile(grammarPath) { + const path = Path.resolve(Path.dirname(grammarPath), `${Path.basename(grammarPath)}.config.json`); + + let source; + let parsed; + try { + source = Fs.readFileSync(path, 'utf8'); + parsed = JSON.parse(source); + } catch (error) { + if (error.code === 'ENOENT') { + return undefined; + } + + throw error; + } + + return { path, source, parsed }; +} + +/** + * + * @param {import('./types').Options} options + * @returns {Promise} + */ +async function getJsSource(options) { + let source; + if (options.content) { + source = options.content; + } else if (options.path) { + source = await Fsp.readFile(options.path, 'utf8'); + } else { + throw new Error('you must either specify the path of the grammar file, or the content'); + } + + return getJsSourceSync({ + content: source, + ...options, + }); +} + +/** + * @param {import('./types').SyncOptions} options + * @returns + */ +function getJsSourceSync(options) { + const config = + options.config ?? + (options.path && options.skipConfigSearch !== true ? findConfigFile(options.path) : null); + + const result = Peggy.generate(options.content, { + ...config?.parsed, + format: options.format === 'esm' ? 'es' : 'commonjs', + optimize: options.optimize, + output: 'source', + }); + + return { + /** + * The source code of the module which parses expressions in the format + * defined by the peggy grammar file + */ + source: /** @type {string} */ (/** @type {unknown} */ (result)), + + /** + * The loaded config if it was found + */ + config: config ?? null, + }; +} + +module.exports = { + findConfigFile, + getJsSource, + getJsSourceSync, + version: Peggy.VERSION, +}; diff --git a/packages/kbn-peggy/index.ts b/packages/kbn-peggy/index.ts deleted file mode 100644 index b5b35f131d2ee..0000000000000 --- a/packages/kbn-peggy/index.ts +++ /dev/null @@ -1,133 +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 Path from 'path'; -import Fs from 'fs'; -import Fsp from 'fs/promises'; - -import Peggy from 'peggy'; - -export interface Options { - /** - * The path to the peggy content. If this is not defined then - * config files can not be found and `content` must be passed. - */ - path?: string; - /** - * Prevent loading the content from disk by specifying it here - */ - content?: string; - /** - * Prevent loading the config from disk by specifying it here - */ - config?: Config; - /** - * What type of module format should the generated code use. Defaults to - * commonjs for broadest compatibility - */ - format?: 'esm' | 'commonjs'; - /** - * Should the parser optimize for execution speed or size of the code - */ - optimize?: 'size' | 'speed'; - /** - * Disable checking for a config file a `{basename}.config.json` in - * the same directory as the grammar file. - */ - skipConfigSearch?: boolean; -} - -export interface Config { - /** the path of the discovered config file */ - path: string; - /** the content of the config file as a string (primarily for hashing) */ - source: string; - /** the parsed content of the config file */ - parsed: any; -} - -export interface Result { - /** - * The source code of the module which parses expressions in the format - * defined by the peggy grammar file - */ - config: Config | null; - - /** - * The loaded config if it was found - */ - source: string; -} - -export function findConfigFile(grammarPath: string): Config | undefined { - const path = Path.resolve(Path.dirname(grammarPath), `${Path.basename(grammarPath)}.config.json`); - - let source; - let parsed; - try { - source = Fs.readFileSync(path, 'utf8'); - parsed = JSON.parse(source); - } catch (error) { - if (error.code === 'ENOENT') { - return undefined; - } - - throw error; - } - - return { path, source, parsed }; -} - -export async function getJsSource(options: Options): Promise { - let source; - if (options.content) { - source = options.content; - } else if (options.path) { - source = await Fsp.readFile(options.path, 'utf8'); - } else { - throw new Error('you must either specify the path of the grammar file, or the content'); - } - - return getJsSourceSync({ - content: source, - ...options, - }); -} - -export function getJsSourceSync( - options: Options & { - /** The content of the grammar file to parse */ - content: string; - } -): Result { - const config = - options.config ?? - (options.path && options.skipConfigSearch !== true ? findConfigFile(options.path) : null); - - const result = Peggy.generate(options.content, { - ...config?.parsed, - format: options.format === 'esm' ? 'es' : 'commonjs', - optimize: options.optimize, - output: 'source', - }); - - return { - /** - * The source code of the module which parses expressions in the format - * defined by the peggy grammar file - */ - source: result as unknown as string, - - /** - * The loaded config if it was found - */ - config: config ?? null, - }; -} - -export const VERSION = Peggy.VERSION; diff --git a/packages/kbn-peggy/kibana.jsonc b/packages/kbn-peggy/kibana.jsonc index 8b44dc5604d19..a1cdcc8f802aa 100644 --- a/packages/kbn-peggy/kibana.jsonc +++ b/packages/kbn-peggy/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/peggy", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-peggy/package.json b/packages/kbn-peggy/package.json index cd976c2e8d97b..0151ea6842987 100644 --- a/packages/kbn-peggy/package.json +++ b/packages/kbn-peggy/package.json @@ -2,7 +2,5 @@ "name": "@kbn/peggy", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts", "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-peggy/tsconfig.json b/packages/kbn-peggy/tsconfig.json index 292157c18591a..501c4341b89ad 100644 --- a/packages/kbn-peggy/tsconfig.json +++ b/packages/kbn-peggy/tsconfig.json @@ -1,15 +1,18 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "checkJs": true, + "outDir": "target/types", "types": [ "jest", "node" ] }, "include": [ - "**/*.ts", + "index.js", + "types.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-peggy/types.ts b/packages/kbn-peggy/types.ts new file mode 100644 index 0000000000000..b4c2500e5f8e1 --- /dev/null +++ b/packages/kbn-peggy/types.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. + */ + +export interface Options { + /** + * The path to the peggy content. If this is not defined then + * config files can not be found and `content` must be passed. + */ + path?: string; + /** + * Prevent loading the content from disk by specifying it here + */ + content?: string; + /** + * Prevent loading the config from disk by specifying it here + */ + config?: Config; + /** + * What type of module format should the generated code use. Defaults to + * commonjs for broadest compatibility + */ + format?: 'esm' | 'commonjs'; + /** + * Should the parser optimize for execution speed or size of the code + */ + optimize?: 'size' | 'speed'; + /** + * Disable checking for a config file a `{basename}.config.json` in + * the same directory as the grammar file. + */ + skipConfigSearch?: boolean; +} + +export interface SyncOptions extends Options { + /** the content of the peggy grammar to parse */ + content: string; +} + +export interface Config { + /** the path of the discovered config file */ + path: string; + /** the content of the config file as a string (primarily for hashing) */ + source: string; + /** the parsed content of the config file */ + parsed: any; +} + +export interface Result { + /** + * The source code of the module which parses expressions in the format + * defined by the peggy grammar file + */ + config: Config | null; + + /** + * The loaded config if it was found + */ + source: string; +} diff --git a/packages/kbn-performance-testing-dataset-extractor/BUILD.bazel b/packages/kbn-performance-testing-dataset-extractor/BUILD.bazel deleted file mode 100644 index 2b088b0cfdc4a..0000000000000 --- a/packages/kbn-performance-testing-dataset-extractor/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-performance-testing-dataset-extractor" -PKG_REQUIRE_NAME = "@kbn/performance-testing-dataset-extractor" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-dev-cli-errors", - "//packages/kbn-dev-cli-runner", - "//packages/kbn-test", - "//packages/kbn-tooling-log", - "@npm//@elastic/elasticsearch", - "@npm//moment", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-dev-cli-errors:npm_module_types", - "//packages/kbn-dev-cli-runner:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-journeys:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-performance-testing-dataset-extractor/kibana.jsonc b/packages/kbn-performance-testing-dataset-extractor/kibana.jsonc index f09d991b49ec1..1363aaa66d61f 100644 --- a/packages/kbn-performance-testing-dataset-extractor/kibana.jsonc +++ b/packages/kbn-performance-testing-dataset-extractor/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/performance-testing-dataset-extractor", "devOnly": true, - "owner": "@elastic/kibana-performance-testing", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-performance-testing" } diff --git a/packages/kbn-performance-testing-dataset-extractor/package.json b/packages/kbn-performance-testing-dataset-extractor/package.json index f4da970da1525..d3be2848570b9 100644 --- a/packages/kbn-performance-testing-dataset-extractor/package.json +++ b/packages/kbn-performance-testing-dataset-extractor/package.json @@ -3,7 +3,5 @@ "description": "A library to convert APM traces into JSON format for performance testing.", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-performance-testing-dataset-extractor/tsconfig.json b/packages/kbn-performance-testing-dataset-extractor/tsconfig.json index 57c1dd1c94e0f..995f8bde4d93a 100644 --- a/packages/kbn-performance-testing-dataset-extractor/tsconfig.json +++ b/packages/kbn-performance-testing-dataset-extractor/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-cli-errors", + "@kbn/dev-cli-runner", + "@kbn/tooling-log", + "@kbn/journeys" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-plugin-discovery/BUILD.bazel b/packages/kbn-plugin-discovery/BUILD.bazel deleted file mode 100644 index cdfcc23545c83..0000000000000 --- a/packages/kbn-plugin-discovery/BUILD.bazel +++ /dev/null @@ -1,124 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-plugin-discovery" -PKG_REQUIRE_NAME = "@kbn/plugin-discovery" - -SOURCE_FILES = glob( - [ - "**/*.js", - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - allow_js = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-plugin-discovery/kibana.jsonc b/packages/kbn-plugin-discovery/kibana.jsonc index 8e6ad8a0c35de..d14b8a8eadb99 100644 --- a/packages/kbn-plugin-discovery/kibana.jsonc +++ b/packages/kbn-plugin-discovery/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/plugin-discovery", - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-plugin-discovery/package.json b/packages/kbn-plugin-discovery/package.json index ff8f17b0fa2ce..359dd420d87e3 100644 --- a/packages/kbn-plugin-discovery/package.json +++ b/packages/kbn-plugin-discovery/package.json @@ -2,7 +2,5 @@ "name": "@kbn/plugin-discovery", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-plugin-discovery/tsconfig.json b/packages/kbn-plugin-discovery/tsconfig.json index e5578a8b0eeac..03ae7bfe1cee1 100644 --- a/packages/kbn-plugin-discovery/tsconfig.json +++ b/packages/kbn-plugin-discovery/tsconfig.json @@ -1,9 +1,8 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, "checkJs": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +11,8 @@ "include": [ "**/*.js", "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-plugin-generator/BUILD.bazel b/packages/kbn-plugin-generator/BUILD.bazel deleted file mode 100644 index 82a7c0f250ce3..0000000000000 --- a/packages/kbn-plugin-generator/BUILD.bazel +++ /dev/null @@ -1,136 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-plugin-generator" -PKG_REQUIRE_NAME = "@kbn/plugin-generator" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -filegroup( - name = "template", - srcs = glob( - [ - "template/**/*", - ], - ), -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", - ":template", -] - -RUNTIME_DEPS = [ - "//packages/kbn-utils", - "//packages/kbn-dev-utils", - "@npm//del", - "@npm//ejs", - "@npm//execa", - "@npm//globby", - "@npm//inquirer", - "@npm//minimatch", - "@npm//prettier", - "@npm//vinyl-fs", -] - -TYPES_DEPS = [ - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-dev-utils:npm_module_types", - "@npm//del", - "@npm//execa", - "@npm//globby", - "@npm//@types/ejs", - "@npm//@types/inquirer", - "@npm//@types/jest", - "@npm//@types/minimatch", - "@npm//@types/node", - "@npm//@types/prettier", - "@npm//@types/vinyl-fs", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-plugin-generator/kibana.jsonc b/packages/kbn-plugin-generator/kibana.jsonc index 1045f43539324..7b73a516f7663 100644 --- a/packages/kbn-plugin-generator/kibana.jsonc +++ b/packages/kbn-plugin-generator/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/plugin-generator", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-plugin-generator/package.json b/packages/kbn-plugin-generator/package.json index add2a70f0e5be..99dd77ab9a434 100644 --- a/packages/kbn-plugin-generator/package.json +++ b/packages/kbn-plugin-generator/package.json @@ -2,7 +2,5 @@ "name": "@kbn/plugin-generator", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-plugin-generator/src/ask_questions.ts b/packages/kbn-plugin-generator/src/ask_questions.ts index aeee8dfdbdad1..96aaec218e64f 100644 --- a/packages/kbn-plugin-generator/src/ask_questions.ts +++ b/packages/kbn-plugin-generator/src/ask_questions.ts @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import inquirer from 'inquirer'; export interface Answers { diff --git a/packages/kbn-plugin-generator/src/cli.ts b/packages/kbn-plugin-generator/src/cli.ts index a4a18317283c7..90a0b971530bf 100644 --- a/packages/kbn-plugin-generator/src/cli.ts +++ b/packages/kbn-plugin-generator/src/cli.ts @@ -10,7 +10,7 @@ import Path from 'path'; import Fs from 'fs'; import execa from 'execa'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { run } from '@kbn/dev-cli-runner'; import { createFailError, createFlagError } from '@kbn/dev-cli-errors'; diff --git a/packages/kbn-plugin-generator/src/integration_tests/generate_plugin.test.ts b/packages/kbn-plugin-generator/src/integration_tests/generate_plugin.test.ts index a9df7fdd2be90..ce359d1eb8104 100644 --- a/packages/kbn-plugin-generator/src/integration_tests/generate_plugin.test.ts +++ b/packages/kbn-plugin-generator/src/integration_tests/generate_plugin.test.ts @@ -10,7 +10,7 @@ import Path from 'path'; import del from 'del'; import execa from 'execa'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; import globby from 'globby'; diff --git a/packages/kbn-plugin-generator/src/plugin_types.ts b/packages/kbn-plugin-generator/src/plugin_types.ts index 33f30381c78a5..e3b36eb16e0a6 100644 --- a/packages/kbn-plugin-generator/src/plugin_types.ts +++ b/packages/kbn-plugin-generator/src/plugin_types.ts @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; export interface PluginType { thirdParty: boolean; diff --git a/packages/kbn-plugin-generator/src/render_template.ts b/packages/kbn-plugin-generator/src/render_template.ts index 385239706b56d..f64796ecad3dd 100644 --- a/packages/kbn-plugin-generator/src/render_template.ts +++ b/packages/kbn-plugin-generator/src/render_template.ts @@ -12,7 +12,7 @@ import { promisify } from 'util'; import vfs from 'vinyl-fs'; import prettier from 'prettier'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { transformFileStream } from '@kbn/dev-utils'; import ejs from 'ejs'; import { Minimatch } from 'minimatch'; @@ -78,7 +78,7 @@ export async function renderTemplates({ dot: true, buffer: true, nodir: true, - cwd: Path.resolve(__dirname, '../../template'), + cwd: Path.resolve(__dirname, '../template'), }), // exclude files from the template based on selected options, patterns diff --git a/packages/kbn-plugin-generator/tsconfig.json b/packages/kbn-plugin-generator/tsconfig.json index 70567fe331a27..7c818fe8c5583 100644 --- a/packages/kbn-plugin-generator/tsconfig.json +++ b/packages/kbn-plugin-generator/tsconfig.json @@ -1,10 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", - "target": "ES2019", + "outDir": "target/types", "types": [ "jest", "node" @@ -14,6 +11,14 @@ "**/*.ts" ], "exclude": [ - "template/*" + "template/*", + "target/**/*", + ], + "kbn_references": [ + "@kbn/dev-utils", + "@kbn/repo-info", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/jest-serializers", ], } diff --git a/packages/kbn-plugin-helpers/BUILD.bazel b/packages/kbn-plugin-helpers/BUILD.bazel deleted file mode 100644 index 482b5bdf8b4d5..0000000000000 --- a/packages/kbn-plugin-helpers/BUILD.bazel +++ /dev/null @@ -1,129 +0,0 @@ - -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-plugin-helpers" -PKG_REQUIRE_NAME = "@kbn/plugin-helpers" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-utils", - "//packages/kbn-optimizer", - "//packages/kbn-utils", - "@npm//del", - "@npm//execa", - "@npm//extract-zip", - "@npm//globby", - "@npm//gulp-zip", - "@npm//inquirer", - "@npm//load-json-file", - "@npm//vinyl-fs", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-optimizer:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "@npm//del", - "@npm//execa", - "@npm//globby", - "@npm//load-json-file", - "@npm//@types/extract-zip", - "@npm//@types/gulp-zip", - "@npm//@types/inquirer", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/vinyl-fs", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-plugin-helpers/kibana.jsonc b/packages/kbn-plugin-helpers/kibana.jsonc index 84a87720dab0c..bee9b9486a644 100644 --- a/packages/kbn-plugin-helpers/kibana.jsonc +++ b/packages/kbn-plugin-helpers/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/plugin-helpers", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-plugin-helpers/package.json b/packages/kbn-plugin-helpers/package.json index dc12d7ddb6b64..9380f15c083e4 100644 --- a/packages/kbn-plugin-helpers/package.json +++ b/packages/kbn-plugin-helpers/package.json @@ -4,9 +4,7 @@ "private": true, "description": "Just some helpers for kibana plugin devs.", "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "target_node/index.js", "bin": { "plugin-helpers": "bin/plugin-helpers.js" - }, - "types": "./target_types/index.d.ts" + } } \ No newline at end of file diff --git a/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts b/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts index 10ad022e45a79..bae49182aab10 100644 --- a/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts +++ b/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts @@ -10,7 +10,7 @@ import Path from 'path'; import Fs from 'fs'; import execa from 'execa'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createStripAnsiSerializer, createReplaceSerializer } from '@kbn/jest-serializers'; import extract from 'extract-zip'; import del from 'del'; diff --git a/packages/kbn-plugin-helpers/src/load_kibana_platform_plugin.ts b/packages/kbn-plugin-helpers/src/load_kibana_platform_plugin.ts index fb01d6deeded7..b3a3716f91ea1 100644 --- a/packages/kbn-plugin-helpers/src/load_kibana_platform_plugin.ts +++ b/packages/kbn-plugin-helpers/src/load_kibana_platform_plugin.ts @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { parseKibanaPlatformPlugin, KibanaPlatformPlugin } from '@kbn/plugin-discovery'; import { createFailError } from '@kbn/dev-cli-errors'; diff --git a/packages/kbn-plugin-helpers/src/tasks/optimize.ts b/packages/kbn-plugin-helpers/src/tasks/optimize.ts index ee05fa3d3354c..96b4550c49d8b 100644 --- a/packages/kbn-plugin-helpers/src/tasks/optimize.ts +++ b/packages/kbn-plugin-helpers/src/tasks/optimize.ts @@ -10,7 +10,7 @@ import Fs from 'fs'; import Path from 'path'; import { promisify } from 'util'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { OptimizerConfig, runOptimizer, logOptimizerState } from '@kbn/optimizer'; import { BuildContext } from '../build_context'; diff --git a/packages/kbn-dev-utils/src/babel.ts b/packages/kbn-plugin-helpers/src/tasks/transform_file_with_babel.ts similarity index 100% rename from packages/kbn-dev-utils/src/babel.ts rename to packages/kbn-plugin-helpers/src/tasks/transform_file_with_babel.ts diff --git a/packages/kbn-plugin-helpers/src/tasks/write_server_files.ts b/packages/kbn-plugin-helpers/src/tasks/write_server_files.ts index 371937c21c709..42816082b4bbe 100644 --- a/packages/kbn-plugin-helpers/src/tasks/write_server_files.ts +++ b/packages/kbn-plugin-helpers/src/tasks/write_server_files.ts @@ -10,7 +10,8 @@ import { pipeline } from 'stream'; import { promisify } from 'util'; import vfs from 'vinyl-fs'; -import { transformFileWithBabel, transformFileStream } from '@kbn/dev-utils'; +import { transformFileStream } from '@kbn/dev-utils'; +import { transformFileWithBabel } from './transform_file_with_babel'; import { BuildContext } from '../build_context'; diff --git a/packages/kbn-plugin-helpers/tsconfig.json b/packages/kbn-plugin-helpers/tsconfig.json index 11089e8846334..37c93a7d51735 100644 --- a/packages/kbn-plugin-helpers/tsconfig.json +++ b/packages/kbn-plugin-helpers/tsconfig.json @@ -1,10 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", - "target": "ES2018", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +9,18 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-utils", + "@kbn/optimizer", + "@kbn/tooling-log", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/repo-info", + "@kbn/plugin-discovery", + "@kbn/jest-serializers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-react-field/BUILD.bazel b/packages/kbn-react-field/BUILD.bazel deleted file mode 100644 index 0437d78106355..0000000000000 --- a/packages/kbn-react-field/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-react-field" -PKG_REQUIRE_NAME = "@kbn/react-field" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - "**/*.svg", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//classnames", - "@npm//prop-types", - "@npm//react", -] - -TYPES_DEPS = [ - "@npm//tslib", - "@npm//@elastic/eui", - "@npm//@types/classnames", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/prop-types", - "@npm//@types/react", -] - -jsts_transpiler( - name = "target_webpack", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_webpack"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_webpack", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-react-field/kibana.jsonc b/packages/kbn-react-field/kibana.jsonc index aade3b0242974..4b85e53ad6af2 100644 --- a/packages/kbn-react-field/kibana.jsonc +++ b/packages/kbn-react-field/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/react-field", - "owner": "@elastic/kibana-app-services", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-app-services" } diff --git a/packages/kbn-react-field/package.json b/packages/kbn-react-field/package.json index aae5d673b5fbd..c0fc936e297f1 100644 --- a/packages/kbn-react-field/package.json +++ b/packages/kbn-react-field/package.json @@ -1,9 +1,6 @@ { "name": "@kbn/react-field", - "main": "./target_node/index.js", - "browser": "./target_webpack/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-react-field/tsconfig.json b/packages/kbn-react-field/tsconfig.json index ab59ea0429ac2..b85e4312e707d 100644 --- a/packages/kbn-react-field/tsconfig.json +++ b/packages/kbn-react-field/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,4 +11,7 @@ "**/*.ts", "**/*.tsx", ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-repo-info/BUILD.bazel b/packages/kbn-repo-info/BUILD.bazel new file mode 100644 index 0000000000000..91d330a9ec888 --- /dev/null +++ b/packages/kbn-repo-info/BUILD.bazel @@ -0,0 +1,36 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "pkg_npm", "ts_project") + +SRCS = glob( + [ + "**/*.js", + "**/*.ts", + ], + exclude = [ + "**/*.config.js", + "**/*.mock.*", + "**/*.test.*", + "**/*.stories.*", + "**/__snapshots__/**", + "**/integration_tests/**", + "**/mocks/**", + "**/scripts/**", + "**/storybook/**", + "**/test_fixtures/**", + "**/test_helpers/**", + ], +) + +filegroup( + name = 'root_pkg_json', + srcs = ["//:package.json"] +) + +js_library( + name = "kbn-repo-info", + package_name = "@kbn/repo-info", + srcs = ["package.json"] + SRCS, + deps = [":root_pkg_json"], + visibility = ["//visibility:public"], +) diff --git a/packages/kbn-repo-info/README.md b/packages/kbn-repo-info/README.md new file mode 100644 index 0000000000000..00bbf64ba4d9b --- /dev/null +++ b/packages/kbn-repo-info/README.md @@ -0,0 +1,3 @@ +# @kbn/repo-info + +Empty package generated by @kbn/generate diff --git a/packages/kbn-utils/src/repo_root.ts b/packages/kbn-repo-info/index.js similarity index 61% rename from packages/kbn-utils/src/repo_root.ts rename to packages/kbn-repo-info/index.js index 816a4133a7fbb..bb38c8bff64e9 100644 --- a/packages/kbn-utils/src/repo_root.ts +++ b/packages/kbn-repo-info/index.js @@ -6,14 +6,18 @@ * Side Public License, v 1. */ -import Path from 'path'; -import Fs from 'fs'; +/** @typedef {import('./types').KibanaPackageJson} KibanaPackageJson */ -import loadJsonFile from 'load-json-file'; +const Path = require('path'); +const Fs = require('fs'); -const readKibanaPkgJson = (path: string) => { +/** + * @param {string} path + * @returns {undefined | KibanaPackageJson} + */ +const readKibanaPkgJson = (path) => { try { - const json = loadJsonFile.sync(path); + const json = JSON.parse(Fs.readFileSync(path, 'utf8')); if (json && typeof json === 'object' && 'name' in json && json.name === 'kibana') { return json; } @@ -36,16 +40,13 @@ const findKibanaPackageJson = () => { while (true) { const packageJsonPath = Path.resolve(cursor, 'package.json'); const kibanaPkgJson = readKibanaPkgJson(packageJsonPath); + if (kibanaPkgJson) { return { - // when this script is run by ESLint in IDEs it doesn't use --preserve-symlinks, so we have to - // use `Fs.realpathSync()` to resolve the package.json path to the actual file in the repo rather - // than the sym-linked version in the bazel-out dir + // we use `Fs.realpathSync()` to resolve the package.json path to the actual file + // in the repo rather than the sym-linked version if it is symlinked kibanaDir: Path.dirname(Fs.realpathSync(packageJsonPath)), - kibanaPkgJson: kibanaPkgJson as { - name: string; - branch: string; - }, + kibanaPkgJson, }; } @@ -59,7 +60,20 @@ const findKibanaPackageJson = () => { const { kibanaDir, kibanaPkgJson } = findKibanaPackageJson(); -export const REPO_ROOT = kibanaDir; -export const UPSTREAM_BRANCH = kibanaPkgJson.branch; +const REPO_ROOT = kibanaDir; +const PKG_JSON = kibanaPkgJson; +const UPSTREAM_BRANCH = kibanaPkgJson.branch; -export const fromRoot = (...paths: string[]) => Path.resolve(REPO_ROOT, ...paths); +/** + * @param {string[]} paths + */ +const fromRoot = (...paths) => Path.resolve(REPO_ROOT, ...paths); + +module.exports = { + REPO_ROOT, + PKG_JSON, + kibanaPackageJson: PKG_JSON, + isKibanaDistributable: () => !!PKG_JSON.build.distributable, + UPSTREAM_BRANCH, + fromRoot, +}; diff --git a/packages/kbn-type-summarizer/jest.integration.config.js b/packages/kbn-repo-info/jest.config.js similarity index 80% rename from packages/kbn-type-summarizer/jest.integration.config.js rename to packages/kbn-repo-info/jest.config.js index 50a3f64b6338d..6a3ee546e5e57 100644 --- a/packages/kbn-type-summarizer/jest.integration.config.js +++ b/packages/kbn-repo-info/jest.config.js @@ -7,7 +7,7 @@ */ module.exports = { - preset: '@kbn/test/jest_integration_node', + preset: '@kbn/test/jest_node', rootDir: '../..', - roots: ['/packages/kbn-type-summarizer'], + roots: ['/packages/kbn-repo-info'], }; diff --git a/packages/kbn-repo-info/kibana.jsonc b/packages/kbn-repo-info/kibana.jsonc new file mode 100644 index 0000000000000..ab12583890dfd --- /dev/null +++ b/packages/kbn-repo-info/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/repo-info", + "owner": "@elastic/kibana-operations" +} diff --git a/packages/kbn-repo-info/package.json b/packages/kbn-repo-info/package.json new file mode 100644 index 0000000000000..e01117eee3cd8 --- /dev/null +++ b/packages/kbn-repo-info/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/repo-info", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-repo-info/tsconfig.json b/packages/kbn-repo-info/tsconfig.json new file mode 100644 index 0000000000000..3bbf05e134ce1 --- /dev/null +++ b/packages/kbn-repo-info/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "checkJs": true, + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "index.js", + "types.ts" + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/packages/kbn-utils/src/package_json/index.ts b/packages/kbn-repo-info/types.ts similarity index 52% rename from packages/kbn-utils/src/package_json/index.ts rename to packages/kbn-repo-info/types.ts index fada3e15b97d6..21aab323e57c1 100644 --- a/packages/kbn-utils/src/package_json/index.ts +++ b/packages/kbn-repo-info/types.ts @@ -6,12 +6,7 @@ * Side Public License, v 1. */ -import Path from 'path'; -import Fs from 'fs'; - -import { REPO_ROOT } from '../repo_root'; - -interface KibanaPackageJson { +export interface KibanaPackageJson { name: string; version: string; branch: string; @@ -31,22 +26,3 @@ interface KibanaPackageJson { }; [key: string]: unknown; } - -function parseKibanaPackageJson() { - const path = Path.resolve(REPO_ROOT, 'package.json'); - const json = Fs.readFileSync(path, 'utf8'); - let pkg; - try { - pkg = JSON.parse(json); - } catch (error) { - throw new Error(`unable to parse kibana's package.json file: ${error.message}`); - } - - return pkg as KibanaPackageJson; -} - -export const kibanaPackageJson = parseKibanaPackageJson(); - -export const isKibanaDistributable = () => { - return kibanaPackageJson.build.distributable === true; -}; diff --git a/packages/kbn-repo-path/README.md b/packages/kbn-repo-path/README.md new file mode 100644 index 0000000000000..ef281b3caba9f --- /dev/null +++ b/packages/kbn-repo-path/README.md @@ -0,0 +1,3 @@ +# @kbn/repo-path + +Empty package generated by @kbn/generate diff --git a/src/setup_node_env/polyfill.js b/packages/kbn-repo-path/index.ts similarity index 89% rename from src/setup_node_env/polyfill.js rename to packages/kbn-repo-path/index.ts index 465f9fef734f9..3d79cd011ef40 100644 --- a/src/setup_node_env/polyfill.js +++ b/packages/kbn-repo-path/index.ts @@ -6,4 +6,4 @@ * Side Public License, v 1. */ -require('core-js/stable'); +export { RepoPath } from './repo_path'; diff --git a/packages/kbn-repo-path/jest.config.js b/packages/kbn-repo-path/jest.config.js new file mode 100644 index 0000000000000..68e96763c2637 --- /dev/null +++ b/packages/kbn-repo-path/jest.config.js @@ -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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-repo-path'], +}; diff --git a/packages/kbn-repo-path/kibana.jsonc b/packages/kbn-repo-path/kibana.jsonc new file mode 100644 index 0000000000000..2c0bc6368ff67 --- /dev/null +++ b/packages/kbn-repo-path/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/repo-path", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-repo-path/package.json b/packages/kbn-repo-path/package.json new file mode 100644 index 0000000000000..8f53e6f63866b --- /dev/null +++ b/packages/kbn-repo-path/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/repo-path", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-repo-path/repo_path.ts b/packages/kbn-repo-path/repo_path.ts new file mode 100644 index 0000000000000..65873bb4c2249 --- /dev/null +++ b/packages/kbn-repo-path/repo_path.ts @@ -0,0 +1,71 @@ +/* + * 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 Path from 'path'; + +export class RepoPath { + constructor( + /** root path of the repo where this file was found */ + public readonly repoRoot: string, + /** repo-relative path to the file */ + public readonly repoRel: string + ) {} + + private _abs: string | undefined; + /** + * absolute path to the file + * (lazy and cached getter) + */ + public get abs() { + return (this._abs ??= Path.resolve(this.repoRoot, this.repoRel)); + } + + private _ext: string | undefined; + /** + * extension to the filename + * (lazy and cached getter) + */ + public get ext() { + return (this._ext ??= Path.extname(this.repoRel)); + } + + private _basename: string | undefined; + /** + * basename of the path + * (lazy and cached getter) + */ + public get basename() { + return (this._basename ??= Path.basename(this.repoRel)); + } + + isTypeScript() { + return this.ext === '.ts' || this.ext === '.tsx'; + } + + isTypeScriptAmbient() { + return this.repoRel.endsWith('.d.ts'); + } + + isJavaScript() { + return this.ext === '.js' || this.ext === '.jsx' || this.ext === '.mjs'; + } + + isFixture() { + const parts = this.repoRel.split('/'); + if (parts.includes('__fixtures__') || this.repoRel.endsWith('.test-d.ts')) { + return true; + } + + const i = parts.indexOf('kbn-generate'); + if (i >= 0 && parts[i + 1] === 'templates') { + return true; + } + + return false; + } +} diff --git a/packages/kbn-repo-path/tsconfig.json b/packages/kbn-repo-path/tsconfig.json new file mode 100644 index 0000000000000..2f9ddddbeea23 --- /dev/null +++ b/packages/kbn-repo-path/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [] +} diff --git a/packages/kbn-repo-source-classifier-cli/BUILD.bazel b/packages/kbn-repo-source-classifier-cli/BUILD.bazel deleted file mode 100644 index 6706dc9aa2c13..0000000000000 --- a/packages/kbn-repo-source-classifier-cli/BUILD.bazel +++ /dev/null @@ -1,134 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-repo-source-classifier-cli" -PKG_REQUIRE_NAME = "@kbn/repo-source-classifier-cli" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-dev-cli-runner", - "//packages/kbn-dev-cli-errors", - "//packages/kbn-import-resolver", - "//packages/kbn-repo-source-classifier", - "//packages/kbn-get-repo-files", - "//packages/kbn-utils", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-dev-cli-runner:npm_module_types", - "//packages/kbn-dev-cli-errors:npm_module_types", - "//packages/kbn-import-resolver:npm_module_types", - "//packages/kbn-repo-source-classifier:npm_module_types", - "//packages/kbn-get-repo-files:npm_module_types", - "//packages/kbn-utils:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-repo-source-classifier-cli/index.ts b/packages/kbn-repo-source-classifier-cli/index.ts index 13531215ee678..0e30d92b4a8e7 100644 --- a/packages/kbn-repo-source-classifier-cli/index.ts +++ b/packages/kbn-repo-source-classifier-cli/index.ts @@ -10,7 +10,7 @@ import Path from 'path'; import { RepoSourceClassifier } from '@kbn/repo-source-classifier'; import { ImportResolver } from '@kbn/import-resolver'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getRepoFiles } from '@kbn/get-repo-files'; import { run } from '@kbn/dev-cli-runner'; import { createFlagError } from '@kbn/dev-cli-errors'; diff --git a/packages/kbn-repo-source-classifier-cli/kibana.jsonc b/packages/kbn-repo-source-classifier-cli/kibana.jsonc index a93259974364a..916b42e59d7bc 100644 --- a/packages/kbn-repo-source-classifier-cli/kibana.jsonc +++ b/packages/kbn-repo-source-classifier-cli/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/repo-source-classifier-cli", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-repo-source-classifier-cli/package.json b/packages/kbn-repo-source-classifier-cli/package.json index 490014811b834..cc52a3314a1bf 100644 --- a/packages/kbn-repo-source-classifier-cli/package.json +++ b/packages/kbn-repo-source-classifier-cli/package.json @@ -2,7 +2,5 @@ "name": "@kbn/repo-source-classifier-cli", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-repo-source-classifier-cli/tsconfig.json b/packages/kbn-repo-source-classifier-cli/tsconfig.json index 57c1dd1c94e0f..07b64f1834e46 100644 --- a/packages/kbn-repo-source-classifier-cli/tsconfig.json +++ b/packages/kbn-repo-source-classifier-cli/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/import-resolver", + "@kbn/repo-source-classifier", + "@kbn/get-repo-files", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-repo-source-classifier/BUILD.bazel b/packages/kbn-repo-source-classifier/BUILD.bazel deleted file mode 100644 index b143ea3f93121..0000000000000 --- a/packages/kbn-repo-source-classifier/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-repo-source-classifier" -PKG_REQUIRE_NAME = "@kbn/repo-source-classifier" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//normalize-path", - "//packages/kbn-import-resolver:npm_module_types", - "//packages/kbn-utils:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-repo-source-classifier/kibana.jsonc b/packages/kbn-repo-source-classifier/kibana.jsonc index edeb2d3c64a39..e717374c9c7ee 100644 --- a/packages/kbn-repo-source-classifier/kibana.jsonc +++ b/packages/kbn-repo-source-classifier/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/repo-source-classifier", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-repo-source-classifier/package.json b/packages/kbn-repo-source-classifier/package.json index bda6886d162dd..65aac900e204c 100644 --- a/packages/kbn-repo-source-classifier/package.json +++ b/packages/kbn-repo-source-classifier/package.json @@ -2,7 +2,5 @@ "name": "@kbn/repo-source-classifier", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-repo-source-classifier/src/config.ts b/packages/kbn-repo-source-classifier/src/config.ts index 6f6b9251988c0..283ca70b20c6d 100644 --- a/packages/kbn-repo-source-classifier/src/config.ts +++ b/packages/kbn-repo-source-classifier/src/config.ts @@ -19,6 +19,7 @@ export const RANDOM_TEST_FILE_NAMES = new Set([ 'enzyme_helpers', 'fixtures', 'testbed', + 'jest.config', ]); // tags are found in filenames after a `.`, like `name.tag.ts` diff --git a/packages/kbn-repo-source-classifier/src/repo_path.ts b/packages/kbn-repo-source-classifier/src/repo_path.ts index cd13adf0cb824..e1e5151ff2079 100644 --- a/packages/kbn-repo-source-classifier/src/repo_path.ts +++ b/packages/kbn-repo-source-classifier/src/repo_path.ts @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ImportResolver } from '@kbn/import-resolver'; import normalizePath from 'normalize-path'; diff --git a/packages/kbn-repo-source-classifier/src/repo_source_classifier.ts b/packages/kbn-repo-source-classifier/src/repo_source_classifier.ts index f3aecbb49d246..d0fcbf496654a 100644 --- a/packages/kbn-repo-source-classifier/src/repo_source_classifier.ts +++ b/packages/kbn-repo-source-classifier/src/repo_source_classifier.ts @@ -142,14 +142,40 @@ export class RepoSourceClassifier { } const { pkgId, rel } = pkgInfo; + + if (pkgId === '@kbn/test' || pkgId === '@kbn/test-subj-selector') { + return 'common package'; + } + const pkgIdWords = new Set(pkgId.split(/\W+/)); // treat any package with "mocks" or "storybook" in the ID as a test-specific package if (pkgIdWords.has('mocks') || pkgIdWords.has('storybook') || pkgIdWords.has('test')) { return 'tests or mocks'; } + if (Array.from(pkgIdWords).at(-1) === 'cli') { + return 'tooling'; + } - if (path.resolver.isBazelPackage(pkgId)) { - return 'common package'; + const manifest = this.resolver.getPkgManifest(pkgId); + if (manifest) { + switch (manifest.type) { + case 'functional-tests': + case 'test-helper': + return 'tests or mocks'; + case 'plugin-browser': + case 'shared-browser': + return 'browser package'; + case 'plugin-server': + case 'shared-server': + return 'server package'; + case 'shared-scss': + return 'static'; + case 'shared-common': + return 'common package'; + default: + // @ts-expect-error if there isn't an error here we are missing a case for a package type + throw new Error(`unexpected package type [${manifest.type}]`); + } } const [root, ...dirs] = rel.split('/'); diff --git a/packages/kbn-repo-source-classifier/tsconfig.json b/packages/kbn-repo-source-classifier/tsconfig.json index 57c1dd1c94e0f..f41dffcd32f06 100644 --- a/packages/kbn-repo-source-classifier/tsconfig.json +++ b/packages/kbn-repo-source-classifier/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/import-resolver", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-rison/BUILD.bazel b/packages/kbn-rison/BUILD.bazel index 948affb52f443..4cb5cd714a025 100644 --- a/packages/kbn-rison/BUILD.bazel +++ b/packages/kbn-rison/BUILD.bazel @@ -1,11 +1,6 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-rison" -PKG_REQUIRE_NAME = "@kbn/rison" - -SOURCE_FILES = glob( +SRCS = glob( [ "**/*.ts", ], @@ -24,100 +19,14 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ +BUNDLER_DEPS = [ "@npm//rison-node", ] -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "build_types", - srcs = [":npm_module_types"], + name = "kbn-rison", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, + package_name = "@kbn/rison", visibility = ["//visibility:public"], ) diff --git a/packages/kbn-rison/kibana.jsonc b/packages/kbn-rison/kibana.jsonc index e2543dbebbc1b..c0e6145d04a7d 100644 --- a/packages/kbn-rison/kibana.jsonc +++ b/packages/kbn-rison/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/rison", - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-rison/package.json b/packages/kbn-rison/package.json index 692d31de22435..efe4223acd33e 100644 --- a/packages/kbn-rison/package.json +++ b/packages/kbn-rison/package.json @@ -2,7 +2,5 @@ "name": "@kbn/rison", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts", "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-rison/tsconfig.json b/packages/kbn-rison/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-rison/tsconfig.json +++ b/packages/kbn-rison/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-rule-data-utils/BUILD.bazel b/packages/kbn-rule-data-utils/BUILD.bazel deleted file mode 100644 index fe77bd4443fe9..0000000000000 --- a/packages/kbn-rule-data-utils/BUILD.bazel +++ /dev/null @@ -1,120 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-rule-data-utils" -PKG_REQUIRE_NAME = "@kbn/rule-data-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-es-query", - "@npm//@elastic/elasticsearch", - "@npm//tslib", - "@npm//utility-types", -] - -TYPES_DEPS = [ - "//packages/kbn-es-query:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//tslib", - "@npm//utility-types", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-rule-data-utils/kibana.jsonc b/packages/kbn-rule-data-utils/kibana.jsonc index 654155c883971..6650a9b1d67f0 100644 --- a/packages/kbn-rule-data-utils/kibana.jsonc +++ b/packages/kbn-rule-data-utils/kibana.jsonc @@ -5,7 +5,5 @@ "@elastic/security-detections-response", "@elastic/actionable-observability", "@elastic/response-ops" - ], - "runtimeDeps": [], - "typeDeps": [] + ] } diff --git a/packages/kbn-rule-data-utils/package.json b/packages/kbn-rule-data-utils/package.json index 9613e173d6f4a..bf1c9795a3671 100644 --- a/packages/kbn-rule-data-utils/package.json +++ b/packages/kbn-rule-data-utils/package.json @@ -1,9 +1,6 @@ { "name": "@kbn/rule-data-utils", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-rule-data-utils/tsconfig.json b/packages/kbn-rule-data-utils/tsconfig.json index 57c1dd1c94e0f..5c94013fc2eaf 100644 --- a/packages/kbn-rule-data-utils/tsconfig.json +++ b/packages/kbn-rule-data-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/es-query" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-safer-lodash-set/BUILD.bazel b/packages/kbn-safer-lodash-set/BUILD.bazel index 3a5d07ab38904..b7cfbbe50bd53 100644 --- a/packages/kbn-safer-lodash-set/BUILD.bazel +++ b/packages/kbn-safer-lodash-set/BUILD.bazel @@ -1,9 +1,6 @@ load("@build_bazel_rules_nodejs//:index.bzl", "js_library", "pkg_npm") -PKG_DIRNAME = "kbn-safer-lodash-set" -PKG_REQUIRE_NAME = "@kbn/safer-lodash-set" - -SOURCE_FILES = glob( +SRCS = glob( [ "fp/**/*", "lodash/**/*", @@ -16,60 +13,14 @@ SOURCE_FILES = glob( ], ) -TYPE_FILES = glob([ - "fp/**/*.d.ts", - "index.d.ts", - "set.d.ts", - "setWith.d.ts", -]) - -SRCS = SOURCE_FILES + TYPE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - DEPS = [ "@npm//lodash", ] js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES + [ - ":srcs", - ], + name = "kbn-safer-lodash-set", + package_name = "@kbn/safer-lodash-set", + srcs = ["package.json"] + SRCS, deps = DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = PKG_DIRNAME, - visibility = ["//visibility:public"], -) - -alias( - name = "build_types", - actual = "build", visibility = ["//visibility:public"], ) diff --git a/packages/kbn-safer-lodash-set/kibana.jsonc b/packages/kbn-safer-lodash-set/kibana.jsonc index 8d7c5dfbb6bb3..d01d41b9a6219 100644 --- a/packages/kbn-safer-lodash-set/kibana.jsonc +++ b/packages/kbn-safer-lodash-set/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/safer-lodash-set", - "owner": "@elastic/kibana-security", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-security" } diff --git a/packages/kbn-safer-lodash-set/package.json b/packages/kbn-safer-lodash-set/package.json index 8d1b80bdfb082..5004f18930618 100644 --- a/packages/kbn-safer-lodash-set/package.json +++ b/packages/kbn-safer-lodash-set/package.json @@ -2,8 +2,6 @@ "name": "@kbn/safer-lodash-set", "version": "0.0.0", "description": "A safer version of the lodash set and setWith functions", - "main": "index.js", - "types": "./target_types/index.d.ts", "scripts": { "lint": "../../node_modules/.bin/dependency-check --missing ../../package.json ./packages/kbn-safer-lodash-set/set.js ./packages/kbn-safer-lodash-set/setWith.js ./packages/kbn-safer-lodash-set/fp/*.js", "test": "npm run lint && ../../node_modules/.bin/tape test/*.js && npm run test:types", diff --git a/packages/kbn-safer-lodash-set/tsconfig.json b/packages/kbn-safer-lodash-set/tsconfig.json index 48aa6ed341d61..0d3736eeafd07 100644 --- a/packages/kbn-safer-lodash-set/tsconfig.json +++ b/packages/kbn-safer-lodash-set/tsconfig.json @@ -1,7 +1,12 @@ { - "extends": "../../tsconfig.bazel.json", - "compilerOptions": {}, + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, "include": [ "**/*", ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-securitysolution-autocomplete/BUILD.bazel b/packages/kbn-securitysolution-autocomplete/BUILD.bazel deleted file mode 100644 index 8309ff7f0ef47..0000000000000 --- a/packages/kbn-securitysolution-autocomplete/BUILD.bazel +++ /dev/null @@ -1,143 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-autocomplete" -PKG_REQUIRE_NAME = "@kbn/securitysolution-autocomplete" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-datemath", - "//packages/kbn-es-query", - "//packages/kbn-i18n", - "//packages/kbn-securitysolution-io-ts-list-types", - "//packages/kbn-securitysolution-list-hooks", - "//packages/kbn-securitysolution-list-utils", - "//packages/kbn-doc-links", - "@npm//@elastic/eui", - "@npm//@testing-library/react", - "@npm//@testing-library/react-hooks", - "@npm//enzyme", - "@npm//lodash", - "@npm//moment", - "@npm//react", -] - -TYPES_DEPS = [ - "//packages/kbn-datemath:npm_module_types", - "//packages/kbn-es-query:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-securitysolution-io-ts-list-types:npm_module_types", - "//packages/kbn-securitysolution-list-hooks:npm_module_types", - "//packages/kbn-securitysolution-list-utils:npm_module_types", - "//packages/kbn-doc-links:npm_module_types", - "@npm//@elastic/eui", - "@npm//@testing-library/react", - "@npm//@testing-library/react-hooks", - "@npm//moment", - "@npm//tslib", - "@npm//@types/enzyme", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/react", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-autocomplete/kibana.jsonc b/packages/kbn-securitysolution-autocomplete/kibana.jsonc index fbf73ddf07fb4..8fb42cbdb30f8 100644 --- a/packages/kbn-securitysolution-autocomplete/kibana.jsonc +++ b/packages/kbn-securitysolution-autocomplete/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-autocomplete", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-autocomplete/package.json b/packages/kbn-securitysolution-autocomplete/package.json index 91b92d5aa4b3a..33bcb4e05206e 100644 --- a/packages/kbn-securitysolution-autocomplete/package.json +++ b/packages/kbn-securitysolution-autocomplete/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "Security Solution auto complete", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-autocomplete/tsconfig.json b/packages/kbn-securitysolution-autocomplete/tsconfig.json index 2b02a63db1d05..f7df7da6f06ad 100644 --- a/packages/kbn-securitysolution-autocomplete/tsconfig.json +++ b/packages/kbn-securitysolution-autocomplete/tsconfig.json @@ -1,13 +1,24 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": ["jest", "node"] }, "include": [ "**/*.ts", "**/*.tsx", ], + "kbn_references": [ + "@kbn/datemath", + "@kbn/es-query", + "@kbn/i18n", + "@kbn/securitysolution-io-ts-list-types", + "@kbn/securitysolution-list-hooks", + "@kbn/securitysolution-list-utils", + "@kbn/doc-links", + "@kbn/securitysolution-utils", + ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-securitysolution-es-utils/BUILD.bazel b/packages/kbn-securitysolution-es-utils/BUILD.bazel deleted file mode 100644 index c4ff9faedce27..0000000000000 --- a/packages/kbn-securitysolution-es-utils/BUILD.bazel +++ /dev/null @@ -1,114 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-es-utils" -PKG_REQUIRE_NAME = "@kbn/securitysolution-es-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//@elastic/elasticsearch", - "@npm//@hapi/boom", - "@npm//@hapi/hapi", - "@npm//tslib", -] - -TYPES_DEPS = [ - "@npm//@elastic/elasticsearch", - "@npm//@hapi/boom", - "@npm//tslib", - "@npm//@types/hapi__hapi", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-es-utils/kibana.jsonc b/packages/kbn-securitysolution-es-utils/kibana.jsonc index a798aefeae37d..b04ff412e507b 100644 --- a/packages/kbn-securitysolution-es-utils/kibana.jsonc +++ b/packages/kbn-securitysolution-es-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-es-utils", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-es-utils/package.json b/packages/kbn-securitysolution-es-utils/package.json index d4cc8d25a36ff..3083acffa0636 100644 --- a/packages/kbn-securitysolution-es-utils/package.json +++ b/packages/kbn-securitysolution-es-utils/package.json @@ -3,7 +3,5 @@ "version": "1.0.0", "description": "security solution elastic search utilities to use across plugins such lists, security_solution, cases, etc...", "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-es-utils/tsconfig.json b/packages/kbn-securitysolution-es-utils/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-securitysolution-es-utils/tsconfig.json +++ b/packages/kbn-securitysolution-es-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-exception-list-components/BUILD.bazel b/packages/kbn-securitysolution-exception-list-components/BUILD.bazel deleted file mode 100644 index 36379eea91840..0000000000000 --- a/packages/kbn-securitysolution-exception-list-components/BUILD.bazel +++ /dev/null @@ -1,163 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - - -PKG_DIRNAME = "kbn-securitysolution-exception-list-components" -PKG_REQUIRE_NAME = "@kbn/securitysolution-exception-list-components" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.svg", - "**/*.d.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "jest.config.js" -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "//packages/kbn-securitysolution-io-ts-list-types", - "//packages/kbn-securitysolution-autocomplete", - "//packages/kbn-ui-theme", - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "@npm//@elastic/eui", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//@testing-library/jest-dom", - "@npm//jest", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-securitysolution-io-ts-list-types:npm_module_types", - "//packages/kbn-securitysolution-autocomplete:npm_module_types", - "//packages/kbn-ui-theme:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "@npm//@elastic/eui", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//jest", - -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-exception-list-components/kibana.jsonc b/packages/kbn-securitysolution-exception-list-components/kibana.jsonc index 081c50d35af0d..8ab71311e449e 100644 --- a/packages/kbn-securitysolution-exception-list-components/kibana.jsonc +++ b/packages/kbn-securitysolution-exception-list-components/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-exception-list-components", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-exception-list-components/package.json b/packages/kbn-securitysolution-exception-list-components/package.json index b0acf0d547f8e..297b54d4a80a4 100644 --- a/packages/kbn-securitysolution-exception-list-components/package.json +++ b/packages/kbn-securitysolution-exception-list-components/package.json @@ -2,8 +2,5 @@ "name": "@kbn/securitysolution-exception-list-components", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-exception-list-components/tsconfig.json b/packages/kbn-securitysolution-exception-list-components/tsconfig.json index e1a84c71fdfd1..988ad42191b74 100644 --- a/packages/kbn-securitysolution-exception-list-components/tsconfig.json +++ b/packages/kbn-securitysolution-exception-list-components/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -15,5 +13,14 @@ "**/*.ts", "**/*.tsx", "**/*.d.ts" + ], + "kbn_references": [ + "@kbn/securitysolution-io-ts-list-types", + "@kbn/securitysolution-autocomplete", + "@kbn/ui-theme", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-hook-utils/BUILD.bazel b/packages/kbn-securitysolution-hook-utils/BUILD.bazel deleted file mode 100644 index f2886137fedd5..0000000000000 --- a/packages/kbn-securitysolution-hook-utils/BUILD.bazel +++ /dev/null @@ -1,121 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-hook-utils" -PKG_REQUIRE_NAME = "@kbn/securitysolution-hook-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//@testing-library/react-hooks", - "@npm//react", - "@npm//rxjs", - "@npm//tslib", -] - -TYPES_DEPS = [ - "@npm//@testing-library/react-hooks", - "@npm//rxjs", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-hook-utils/kibana.jsonc b/packages/kbn-securitysolution-hook-utils/kibana.jsonc index cd7d23f07792d..0ce78952b9fed 100644 --- a/packages/kbn-securitysolution-hook-utils/kibana.jsonc +++ b/packages/kbn-securitysolution-hook-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-hook-utils", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-hook-utils/package.json b/packages/kbn-securitysolution-hook-utils/package.json index e676b6494a01b..39c3b9aa01335 100644 --- a/packages/kbn-securitysolution-hook-utils/package.json +++ b/packages/kbn-securitysolution-hook-utils/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "Security Solution utilities for React hooks", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-hook-utils/tsconfig.json b/packages/kbn-securitysolution-hook-utils/tsconfig.json index b1621b0cd4477..9b5c5373afe0e 100644 --- a/packages/kbn-securitysolution-hook-utils/tsconfig.json +++ b/packages/kbn-securitysolution-hook-utils/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": ["jest", "node"] }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-io-ts-alerting-types/BUILD.bazel b/packages/kbn-securitysolution-io-ts-alerting-types/BUILD.bazel deleted file mode 100644 index 51ab304ca82a2..0000000000000 --- a/packages/kbn-securitysolution-io-ts-alerting-types/BUILD.bazel +++ /dev/null @@ -1,124 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-io-ts-alerting-types" -PKG_REQUIRE_NAME = "@kbn/securitysolution-io-ts-alerting-types" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-securitysolution-io-ts-types", - "//packages/kbn-securitysolution-io-ts-utils", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//uuid", -] - -TYPES_DEPS = [ - "//packages/kbn-securitysolution-io-ts-types:npm_module_types", - "//packages/kbn-securitysolution-io-ts-utils:npm_module_types", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/uuid" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-io-ts-alerting-types/kibana.jsonc b/packages/kbn-securitysolution-io-ts-alerting-types/kibana.jsonc index d1e730f414d18..617a3125a8c7b 100644 --- a/packages/kbn-securitysolution-io-ts-alerting-types/kibana.jsonc +++ b/packages/kbn-securitysolution-io-ts-alerting-types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-io-ts-alerting-types", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-io-ts-alerting-types/package.json b/packages/kbn-securitysolution-io-ts-alerting-types/package.json index bcfacbe9c5146..c570745f51677 100644 --- a/packages/kbn-securitysolution-io-ts-alerting-types/package.json +++ b/packages/kbn-securitysolution-io-ts-alerting-types/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "io ts utilities and types to be shared with plugins from the security solution project", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-io-ts-alerting-types/tsconfig.json b/packages/kbn-securitysolution-io-ts-alerting-types/tsconfig.json index 57c1dd1c94e0f..f9fb0b0fcebb2 100644 --- a/packages/kbn-securitysolution-io-ts-alerting-types/tsconfig.json +++ b/packages/kbn-securitysolution-io-ts-alerting-types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/securitysolution-io-ts-types", + "@kbn/securitysolution-io-ts-utils" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-io-ts-list-types/BUILD.bazel b/packages/kbn-securitysolution-io-ts-list-types/BUILD.bazel deleted file mode 100644 index 28b36936420f0..0000000000000 --- a/packages/kbn-securitysolution-io-ts-list-types/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-io-ts-list-types" -PKG_REQUIRE_NAME = "@kbn/securitysolution-io-ts-list-types" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-securitysolution-io-ts-types", - "//packages/kbn-securitysolution-io-ts-utils", - "//packages/kbn-securitysolution-list-constants", - "@npm//fp-ts", - "@npm//io-ts", -] - -TYPES_DEPS = [ - "//packages/kbn-securitysolution-io-ts-types:npm_module_types", - "//packages/kbn-securitysolution-io-ts-utils:npm_module_types", - "//packages/kbn-securitysolution-list-constants:npm_module_types", - "//packages/kbn-es-query:npm_module_types", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-io-ts-list-types/kibana.jsonc b/packages/kbn-securitysolution-io-ts-list-types/kibana.jsonc index d50df0b0d6512..404a225ca7f8f 100644 --- a/packages/kbn-securitysolution-io-ts-list-types/kibana.jsonc +++ b/packages/kbn-securitysolution-io-ts-list-types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-io-ts-list-types", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-io-ts-list-types/package.json b/packages/kbn-securitysolution-io-ts-list-types/package.json index 20dd5d2e37ad0..3794f95d0f8b7 100644 --- a/packages/kbn-securitysolution-io-ts-list-types/package.json +++ b/packages/kbn-securitysolution-io-ts-list-types/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "io ts utilities and types to be shared with plugins from the security solution project", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-io-ts-list-types/tsconfig.json b/packages/kbn-securitysolution-io-ts-list-types/tsconfig.json index 57c1dd1c94e0f..fa66258766fda 100644 --- a/packages/kbn-securitysolution-io-ts-list-types/tsconfig.json +++ b/packages/kbn-securitysolution-io-ts-list-types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,14 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/securitysolution-io-ts-types", + "@kbn/securitysolution-io-ts-utils", + "@kbn/securitysolution-list-constants", + "@kbn/es-query" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-io-ts-types/BUILD.bazel b/packages/kbn-securitysolution-io-ts-types/BUILD.bazel deleted file mode 100644 index 4b102f68e2a4e..0000000000000 --- a/packages/kbn-securitysolution-io-ts-types/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-io-ts-types" -PKG_REQUIRE_NAME = "@kbn/securitysolution-io-ts-types" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-securitysolution-io-ts-utils", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//uuid", -] - -TYPES_DEPS = [ - "//packages/kbn-securitysolution-io-ts-utils:npm_module_types", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/uuid" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-io-ts-types/kibana.jsonc b/packages/kbn-securitysolution-io-ts-types/kibana.jsonc index 6ef8a21b00e1e..007244ad6f098 100644 --- a/packages/kbn-securitysolution-io-ts-types/kibana.jsonc +++ b/packages/kbn-securitysolution-io-ts-types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-io-ts-types", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-io-ts-types/package.json b/packages/kbn-securitysolution-io-ts-types/package.json index e02a79f16a098..6bbb9a2300338 100644 --- a/packages/kbn-securitysolution-io-ts-types/package.json +++ b/packages/kbn-securitysolution-io-ts-types/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "io ts utilities and types to be shared with plugins from the security solution project", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-io-ts-types/tsconfig.json b/packages/kbn-securitysolution-io-ts-types/tsconfig.json index 57c1dd1c94e0f..25b82d38b7dc9 100644 --- a/packages/kbn-securitysolution-io-ts-types/tsconfig.json +++ b/packages/kbn-securitysolution-io-ts-types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/securitysolution-io-ts-utils" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-io-ts-utils/BUILD.bazel b/packages/kbn-securitysolution-io-ts-utils/BUILD.bazel deleted file mode 100644 index 9ec44f8d52546..0000000000000 --- a/packages/kbn-securitysolution-io-ts-utils/BUILD.bazel +++ /dev/null @@ -1,125 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-io-ts-utils" -PKG_REQUIRE_NAME = "@kbn/securitysolution-io-ts-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-datemath", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//lodash", - "@npm//moment", - "@npm//tslib", -] - -TYPES_DEPS = [ - "//packages/kbn-datemath:npm_module_types", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//moment", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-io-ts-utils/kibana.jsonc b/packages/kbn-securitysolution-io-ts-utils/kibana.jsonc index 2c86eea21c0c1..980cdb3979fc9 100644 --- a/packages/kbn-securitysolution-io-ts-utils/kibana.jsonc +++ b/packages/kbn-securitysolution-io-ts-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-io-ts-utils", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-io-ts-utils/package.json b/packages/kbn-securitysolution-io-ts-utils/package.json index 8ae2eff526ac9..c6bdf4a7d0987 100644 --- a/packages/kbn-securitysolution-io-ts-utils/package.json +++ b/packages/kbn-securitysolution-io-ts-utils/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "io ts utilities and types to be shared with plugins from the security solution project", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-io-ts-utils/tsconfig.json b/packages/kbn-securitysolution-io-ts-utils/tsconfig.json index 57c1dd1c94e0f..13f8244edd1ad 100644 --- a/packages/kbn-securitysolution-io-ts-utils/tsconfig.json +++ b/packages/kbn-securitysolution-io-ts-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/datemath" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-list-api/BUILD.bazel b/packages/kbn-securitysolution-list-api/BUILD.bazel deleted file mode 100644 index 05254f32c2c7e..0000000000000 --- a/packages/kbn-securitysolution-list-api/BUILD.bazel +++ /dev/null @@ -1,124 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-list-api" -PKG_REQUIRE_NAME = "@kbn/securitysolution-list-api" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-securitysolution-io-ts-list-types", - "//packages/kbn-securitysolution-io-ts-utils", - "//packages/kbn-securitysolution-list-constants", - "@npm//fp-ts", - "@npm//io-ts", -] - -TYPES_DEPS = [ - "//packages/kbn-securitysolution-io-ts-list-types:npm_module_types", - "//packages/kbn-securitysolution-io-ts-utils:npm_module_types", - "//packages/kbn-securitysolution-list-constants:npm_module_types", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - srcs = SRCS, - deps = TYPES_DEPS, - args = ["--pretty"], - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-list-api/kibana.jsonc b/packages/kbn-securitysolution-list-api/kibana.jsonc index b162805a8c8b4..d8dc7a8a9057d 100644 --- a/packages/kbn-securitysolution-list-api/kibana.jsonc +++ b/packages/kbn-securitysolution-list-api/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-list-api", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-list-api/package.json b/packages/kbn-securitysolution-list-api/package.json index 01156ef460a99..681f624f1d8c9 100644 --- a/packages/kbn-securitysolution-list-api/package.json +++ b/packages/kbn-securitysolution-list-api/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "security solution list REST API", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-list-api/src/api/index.test.ts b/packages/kbn-securitysolution-list-api/src/api/index.test.ts deleted file mode 100644 index 02cc02ced5ac4..0000000000000 --- a/packages/kbn-securitysolution-list-api/src/api/index.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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. - */ -describe('Exceptions Lists API', () => { - test('we should port these tests', () => { - // See the file outside of this at: x-pack/plugins/lists/public/exceptions/api.test.ts - // for the tests. We cannot port the tests over until we move the mocks into their own package - // and possibly core mocks end up within packages. - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-api/tsconfig.json b/packages/kbn-securitysolution-list-api/tsconfig.json index 57c1dd1c94e0f..2c2ca29316fcd 100644 --- a/packages/kbn-securitysolution-list-api/tsconfig.json +++ b/packages/kbn-securitysolution-list-api/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/securitysolution-io-ts-list-types", + "@kbn/securitysolution-io-ts-utils", + "@kbn/securitysolution-list-constants", + "@kbn/core-http-browser", + "@kbn/core-http-browser-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-list-constants/BUILD.bazel b/packages/kbn-securitysolution-list-constants/BUILD.bazel deleted file mode 100644 index ac40cb7889e8d..0000000000000 --- a/packages/kbn-securitysolution-list-constants/BUILD.bazel +++ /dev/null @@ -1,115 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-list-constants" -PKG_REQUIRE_NAME = "@kbn/securitysolution-list-constants" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-std", -] - -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/node", - "//packages/kbn-std:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - srcs = SRCS, - deps = TYPES_DEPS, - args = ["--pretty"], - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-list-constants/kibana.jsonc b/packages/kbn-securitysolution-list-constants/kibana.jsonc index ffe606ca6ade8..898927abb1ea8 100644 --- a/packages/kbn-securitysolution-list-constants/kibana.jsonc +++ b/packages/kbn-securitysolution-list-constants/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-list-constants", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-list-constants/package.json b/packages/kbn-securitysolution-list-constants/package.json index 2b8be64d94547..adba0ce4ab22d 100644 --- a/packages/kbn-securitysolution-list-constants/package.json +++ b/packages/kbn-securitysolution-list-constants/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "security solution list constants to use across plugins such lists, security_solution, cases, etc...", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-list-constants/tsconfig.json b/packages/kbn-securitysolution-list-constants/tsconfig.json index 57c1dd1c94e0f..0cd8de173ed4f 100644 --- a/packages/kbn-securitysolution-list-constants/tsconfig.json +++ b/packages/kbn-securitysolution-list-constants/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/std" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-list-hooks/BUILD.bazel b/packages/kbn-securitysolution-list-hooks/BUILD.bazel deleted file mode 100644 index e1cbefa4ab0c6..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/BUILD.bazel +++ /dev/null @@ -1,131 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-list-hooks" -PKG_REQUIRE_NAME = "@kbn/securitysolution-list-hooks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-securitysolution-hook-utils", - "//packages/kbn-securitysolution-io-ts-list-types", - "//packages/kbn-securitysolution-list-api", - "//packages/kbn-securitysolution-list-constants", - "//packages/kbn-securitysolution-list-utils", - "//packages/kbn-securitysolution-utils", - "@npm//@testing-library/react-hooks", - "@npm//fp-ts", - "@npm//react", -] - -TYPES_DEPS = [ - "//packages/kbn-securitysolution-hook-utils:npm_module_types", - "//packages/kbn-securitysolution-io-ts-list-types:npm_module_types", - "//packages/kbn-securitysolution-list-api:npm_module_types", - "//packages/kbn-securitysolution-list-constants:npm_module_types", - "//packages/kbn-securitysolution-list-utils:npm_module_types", - "//packages/kbn-securitysolution-utils:npm_module_types", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "@npm//fp-ts", - "@npm//tslib", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-list-hooks/kibana.jsonc b/packages/kbn-securitysolution-list-hooks/kibana.jsonc index 12d670f46ae32..bf885e2ac37cb 100644 --- a/packages/kbn-securitysolution-list-hooks/kibana.jsonc +++ b/packages/kbn-securitysolution-list-hooks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-list-hooks", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-list-hooks/package.json b/packages/kbn-securitysolution-list-hooks/package.json index 75d0ec81e656c..0a21618561b2e 100644 --- a/packages/kbn-securitysolution-list-hooks/package.json +++ b/packages/kbn-securitysolution-list-hooks/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "Security solution list ReactJS hooks", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-list-hooks/src/transforms/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/transforms/index.test.ts index aab7dfd7b2b70..6b46fb33cfabd 100644 --- a/packages/kbn-securitysolution-list-hooks/src/transforms/index.test.ts +++ b/packages/kbn-securitysolution-list-hooks/src/transforms/index.test.ts @@ -19,7 +19,7 @@ import { removeIdFromExceptionItemsEntries, transformInput, transformOutput, -} from '@kbn/securitysolution-list-hooks'; +} from '../..'; import { getCreateExceptionListItemSchemaMock } from '../mocks/request/create_exception_list_item_schema.mock'; import { getUpdateExceptionListItemSchemaMock } from '../mocks/request/update_exception_list_item_schema.mock'; diff --git a/packages/kbn-securitysolution-list-hooks/src/use_api/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/use_api/index.test.ts deleted file mode 100644 index 7ccf2146594be..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/src/use_api/index.test.ts +++ /dev/null @@ -1,14 +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. - */ - -describe('useApi', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/exceptions/hooks/use_api.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-hooks/src/use_create_list_index/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/use_create_list_index/index.test.ts deleted file mode 100644 index e0285d39f2fa9..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/src/use_create_list_index/index.test.ts +++ /dev/null @@ -1,14 +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. - */ - -describe('useCreateListIndex', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/lists/hooks/use_create_list_index.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-hooks/src/use_exception_lists/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/use_exception_lists/index.test.ts deleted file mode 100644 index 7236000fef999..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/src/use_exception_lists/index.test.ts +++ /dev/null @@ -1,14 +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. - */ - -describe('useExceptionLists', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/exceptions/hooks/use_exception_lists.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-hooks/src/use_export_list/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/use_export_list/index.test.ts deleted file mode 100644 index 92ac43c834273..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/src/use_export_list/index.test.ts +++ /dev/null @@ -1,14 +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. - */ - -describe('useExceptionLists', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/lists/hooks/use_export_list.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-hooks/src/use_import_list/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/use_import_list/index.test.ts deleted file mode 100644 index 0bf2a722a8332..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/src/use_import_list/index.test.ts +++ /dev/null @@ -1,14 +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. - */ - -describe('useImportList', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/lists/hooks/use_import_list.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-hooks/src/use_persist_exception_item/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/use_persist_exception_item/index.test.ts deleted file mode 100644 index 3971d066ddee1..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/src/use_persist_exception_item/index.test.ts +++ /dev/null @@ -1,14 +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. - */ - -describe('usePersistExceptionItem', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/exceptions/hooks/persist_exception_item.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-hooks/src/use_persist_exception_list/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/use_persist_exception_list/index.test.ts deleted file mode 100644 index 6fe38f4d6d273..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/src/use_persist_exception_list/index.test.ts +++ /dev/null @@ -1,14 +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. - */ - -describe('usePersistExceptionList', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/exceptions/hooks/persist_exception_list.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-hooks/src/use_read_list_index/index.test.ts b/packages/kbn-securitysolution-list-hooks/src/use_read_list_index/index.test.ts deleted file mode 100644 index bb63ed86d01ef..0000000000000 --- a/packages/kbn-securitysolution-list-hooks/src/use_read_list_index/index.test.ts +++ /dev/null @@ -1,14 +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. - */ - -describe('useReadListIndex', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/lists/hooks/use_read_list_index.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-hooks/tsconfig.json b/packages/kbn-securitysolution-list-hooks/tsconfig.json index 57c1dd1c94e0f..417beef57542f 100644 --- a/packages/kbn-securitysolution-list-hooks/tsconfig.json +++ b/packages/kbn-securitysolution-list-hooks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/securitysolution-hook-utils", + "@kbn/securitysolution-io-ts-list-types", + "@kbn/securitysolution-list-api", + "@kbn/securitysolution-list-utils", + "@kbn/securitysolution-utils", + "@kbn/core-http-browser-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-list-utils/BUILD.bazel b/packages/kbn-securitysolution-list-utils/BUILD.bazel deleted file mode 100644 index 20a6074aee9c9..0000000000000 --- a/packages/kbn-securitysolution-list-utils/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-list-utils" -PKG_REQUIRE_NAME = "@kbn/securitysolution-list-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-es-query", - "//packages/kbn-i18n", - "//packages/kbn-securitysolution-io-ts-list-types", - "//packages/kbn-securitysolution-io-ts-utils", - "//packages/kbn-securitysolution-list-constants", - "//packages/kbn-securitysolution-utils", - "@npm//lodash", - "@npm//uuid", -] - -TYPES_DEPS = [ - "//packages/kbn-es-query:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-securitysolution-io-ts-list-types:npm_module_types", - "//packages/kbn-securitysolution-io-ts-utils:npm_module_types", - "//packages/kbn-securitysolution-list-constants:npm_module_types", - "//packages/kbn-securitysolution-utils:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/uuid", - "@npm//tslib", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], - -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], - -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-list-utils/kibana.jsonc b/packages/kbn-securitysolution-list-utils/kibana.jsonc index db7d0a5ec334f..0c6f734a2360f 100644 --- a/packages/kbn-securitysolution-list-utils/kibana.jsonc +++ b/packages/kbn-securitysolution-list-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-list-utils", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-list-utils/package.json b/packages/kbn-securitysolution-list-utils/package.json index 548f68c1f0ebb..0cb4d35b2d5e8 100644 --- a/packages/kbn-securitysolution-list-utils/package.json +++ b/packages/kbn-securitysolution-list-utils/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "security solution list utilities", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-list-utils/src/helpers/index.test.ts b/packages/kbn-securitysolution-list-utils/src/helpers/index.test.ts deleted file mode 100644 index e0cab13b44521..0000000000000 --- a/packages/kbn-securitysolution-list-utils/src/helpers/index.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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. - */ -describe('Exception builder helpers', () => { - test('we should port these tests', () => { - // See the file outside of this at: x-pack/plugins/lists/public/exceptions/components/builder/helpers.test.ts - // for the tests. We cannot port the tests over until we move the mocks into their own package - // and possibly core mocks end up within packages. - expect(true).toBe(true); - }); -}); diff --git a/packages/kbn-securitysolution-list-utils/tsconfig.json b/packages/kbn-securitysolution-list-utils/tsconfig.json index 57c1dd1c94e0f..c0aaedaafd845 100644 --- a/packages/kbn-securitysolution-list-utils/tsconfig.json +++ b/packages/kbn-securitysolution-list-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,16 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/es-query", + "@kbn/i18n", + "@kbn/securitysolution-io-ts-list-types", + "@kbn/securitysolution-io-ts-utils", + "@kbn/securitysolution-list-constants", + "@kbn/securitysolution-utils" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-rules/BUILD.bazel b/packages/kbn-securitysolution-rules/BUILD.bazel deleted file mode 100644 index 7519e7bae1dd4..0000000000000 --- a/packages/kbn-securitysolution-rules/BUILD.bazel +++ /dev/null @@ -1,119 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-rules" -PKG_REQUIRE_NAME = "@kbn/securitysolution-rules" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//tslib", - "@npm//uuid", -] - -TYPES_DEPS = [ - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/uuid" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-rules/kibana.jsonc b/packages/kbn-securitysolution-rules/kibana.jsonc index b7e64cfd39e6b..38deebcbbdc55 100644 --- a/packages/kbn-securitysolution-rules/kibana.jsonc +++ b/packages/kbn-securitysolution-rules/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-rules", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-rules/package.json b/packages/kbn-securitysolution-rules/package.json index 5e41733300a35..1ca22df9300f1 100644 --- a/packages/kbn-securitysolution-rules/package.json +++ b/packages/kbn-securitysolution-rules/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "security solution rule utilities to use across plugins", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-rules/tsconfig.json b/packages/kbn-securitysolution-rules/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-securitysolution-rules/tsconfig.json +++ b/packages/kbn-securitysolution-rules/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-t-grid/BUILD.bazel b/packages/kbn-securitysolution-t-grid/BUILD.bazel deleted file mode 100644 index 219d8e85a6642..0000000000000 --- a/packages/kbn-securitysolution-t-grid/BUILD.bazel +++ /dev/null @@ -1,120 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-t-grid" -PKG_REQUIRE_NAME = "@kbn/securitysolution-t-grid" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//jest", - "@npm//lodash", - "@npm//react-beautiful-dnd", - "@npm//tslib", -] - -TYPES_DEPS = [ - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/react-beautiful-dnd", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-t-grid/kibana.jsonc b/packages/kbn-securitysolution-t-grid/kibana.jsonc index bc0f533b72120..bc63fa6a8cb1f 100644 --- a/packages/kbn-securitysolution-t-grid/kibana.jsonc +++ b/packages/kbn-securitysolution-t-grid/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-t-grid", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-t-grid/package.json b/packages/kbn-securitysolution-t-grid/package.json index 95c525df9b152..5144111cca187 100644 --- a/packages/kbn-securitysolution-t-grid/package.json +++ b/packages/kbn-securitysolution-t-grid/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "security solution t-grid packages will allow sharing components between timelines and security_solution plugin until we transfer all functionality to timelines plugin", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-t-grid/tsconfig.json b/packages/kbn-securitysolution-t-grid/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-securitysolution-t-grid/tsconfig.json +++ b/packages/kbn-securitysolution-t-grid/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-securitysolution-utils/BUILD.bazel b/packages/kbn-securitysolution-utils/BUILD.bazel deleted file mode 100644 index 1144c136e74a2..0000000000000 --- a/packages/kbn-securitysolution-utils/BUILD.bazel +++ /dev/null @@ -1,119 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-securitysolution-utils" -PKG_REQUIRE_NAME = "@kbn/securitysolution-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-i18n", - "@npm//tslib", - "@npm//uuid" -] - -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/uuid" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ["--pretty"], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-securitysolution-utils/kibana.jsonc b/packages/kbn-securitysolution-utils/kibana.jsonc index 24e63965c20c8..de28a8dae699e 100644 --- a/packages/kbn-securitysolution-utils/kibana.jsonc +++ b/packages/kbn-securitysolution-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/securitysolution-utils", - "owner": "@elastic/security-solution-platform", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/security-solution-platform" } diff --git a/packages/kbn-securitysolution-utils/package.json b/packages/kbn-securitysolution-utils/package.json index 2c77139c326dd..63bcac7f14f15 100644 --- a/packages/kbn-securitysolution-utils/package.json +++ b/packages/kbn-securitysolution-utils/package.json @@ -3,8 +3,5 @@ "version": "1.0.0", "description": "security solution utilities to use across plugins such lists, security_solution, cases, etc...", "license": "SSPL-1.0 OR Elastic License 2.0", - "browser": "./target_web/index.js", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-securitysolution-utils/tsconfig.json b/packages/kbn-securitysolution-utils/tsconfig.json index 57c1dd1c94e0f..9e62b09e954fc 100644 --- a/packages/kbn-securitysolution-utils/tsconfig.json +++ b/packages/kbn-securitysolution-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/i18n" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-server-http-tools/BUILD.bazel b/packages/kbn-server-http-tools/BUILD.bazel deleted file mode 100644 index 6cbd74e12656d..0000000000000 --- a/packages/kbn-server-http-tools/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-server-http-tools" -PKG_REQUIRE_NAME = "@kbn/server-http-tools" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.mocks.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-config-schema", - "//packages/kbn-crypto", - "@npm//@hapi/hapi", - "@npm//@hapi/hoek", - "@npm//joi", - "@npm//moment", - "@npm//uuid", -] - -TYPES_DEPS = [ - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-crypto:npm_module_types", - "@npm//@hapi/hapi", - "@npm//@hapi/hoek", - "@npm//joi", - "@npm//moment", - "@npm//@types/hapi__hapi", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/uuid", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-server-http-tools/kibana.jsonc b/packages/kbn-server-http-tools/kibana.jsonc index b96916745c984..c2b6aae999c2f 100644 --- a/packages/kbn-server-http-tools/kibana.jsonc +++ b/packages/kbn-server-http-tools/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/server-http-tools", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-server-http-tools/package.json b/packages/kbn-server-http-tools/package.json index b0abbd436e938..309e405200e4a 100644 --- a/packages/kbn-server-http-tools/package.json +++ b/packages/kbn-server-http-tools/package.json @@ -1,9 +1,7 @@ { "name": "@kbn/server-http-tools", - "main": "./target_node/index.js", "version": "1.0.0", "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-server-http-tools/tsconfig.json b/packages/kbn-server-http-tools/tsconfig.json index 57c1dd1c94e0f..179eec6f37c26 100644 --- a/packages/kbn-server-http-tools/tsconfig.json +++ b/packages/kbn-server-http-tools/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/crypto" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-server-route-repository/BUILD.bazel b/packages/kbn-server-route-repository/BUILD.bazel deleted file mode 100644 index 19360a1da0f80..0000000000000 --- a/packages/kbn-server-route-repository/BUILD.bazel +++ /dev/null @@ -1,130 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-server-route-repository" -PKG_REQUIRE_NAME = "@kbn/server-route-repository" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-config-schema", - "//packages/kbn-io-ts-utils", - "@npm//@hapi/boom", - "@npm//fp-ts", - "@npm//lodash", - "@npm//utility-types" -] - -TYPES_DEPS = [ - "//packages/kbn-config-schema:npm_module_types", - "//packages/kbn-io-ts-utils:npm_module_types", - "@npm//@hapi/boom", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//utility-types", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = [ - "web_index.ts", - "src/format_request.ts", - "src/parse_endpoint.ts", - ], - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-server-route-repository/web_index.ts b/packages/kbn-server-route-repository/browser_index.ts similarity index 100% rename from packages/kbn-server-route-repository/web_index.ts rename to packages/kbn-server-route-repository/browser_index.ts diff --git a/packages/kbn-server-route-repository/kibana.jsonc b/packages/kbn-server-route-repository/kibana.jsonc index e1e69049b1791..8161be4b80951 100644 --- a/packages/kbn-server-route-repository/kibana.jsonc +++ b/packages/kbn-server-route-repository/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/server-route-repository", - "owner": "@elastic/apm-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/apm-ui" } diff --git a/packages/kbn-server-route-repository/package.json b/packages/kbn-server-route-repository/package.json index 04ca169ad0ab3..a1c4cfa515633 100644 --- a/packages/kbn-server-route-repository/package.json +++ b/packages/kbn-server-route-repository/package.json @@ -1,9 +1,7 @@ { "name": "@kbn/server-route-repository", - "browser": "./target_web/web_index.js", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", "private": true, - "types": "./target_types/index.d.ts" -} + "browser": "./browser_index" +} \ No newline at end of file diff --git a/packages/kbn-server-route-repository/tsconfig.json b/packages/kbn-server-route-repository/tsconfig.json index a1cd5336c6255..68e576e00b06e 100644 --- a/packages/kbn-server-route-repository/tsconfig.json +++ b/packages/kbn-server-route-repository/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/io-ts-utils" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-shared-svg/BUILD.bazel b/packages/kbn-shared-svg/BUILD.bazel deleted file mode 100644 index 79262ef0b54b1..0000000000000 --- a/packages/kbn-shared-svg/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-shared-svg" -PKG_REQUIRE_NAME = "@kbn/shared-svg" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.svg", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react" -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-shared-svg/kibana.jsonc b/packages/kbn-shared-svg/kibana.jsonc index e816819c9c24a..6634bd9dffc5d 100644 --- a/packages/kbn-shared-svg/kibana.jsonc +++ b/packages/kbn-shared-svg/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-svg", - "owner": "@elastic/apm-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/apm-ui" } diff --git a/packages/kbn-shared-svg/package.json b/packages/kbn-shared-svg/package.json index d28953d0d843a..16d0ddda08510 100644 --- a/packages/kbn-shared-svg/package.json +++ b/packages/kbn-shared-svg/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-svg", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-shared-svg/tsconfig.json b/packages/kbn-shared-svg/tsconfig.json index df76c43764ad6..faea0b4bf0765 100644 --- a/packages/kbn-shared-svg/tsconfig.json +++ b/packages/kbn-shared-svg/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,10 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-shared-ux-utility/BUILD.bazel b/packages/kbn-shared-ux-utility/BUILD.bazel deleted file mode 100644 index d19df36a5ea49..0000000000000 --- a/packages/kbn-shared-ux-utility/BUILD.bazel +++ /dev/null @@ -1,138 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-shared-ux-utility" -PKG_REQUIRE_NAME = "@kbn/shared-ux-utility" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//@elastic/eui", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@emotion/react", - "@npm//@emotion/css", - "@npm//@elastic/eui", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-shared-ux-utility/kibana.jsonc b/packages/kbn-shared-ux-utility/kibana.jsonc index 63b05a89f558b..db36089572290 100644 --- a/packages/kbn-shared-ux-utility/kibana.jsonc +++ b/packages/kbn-shared-ux-utility/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-utility", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/kbn-shared-ux-utility/package.json b/packages/kbn-shared-ux-utility/package.json index 6bf6571104b45..302da6f03a812 100644 --- a/packages/kbn-shared-ux-utility/package.json +++ b/packages/kbn-shared-ux-utility/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-utility", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-shared-ux-utility/tsconfig.json b/packages/kbn-shared-ux-utility/tsconfig.json index 4990376ba9063..b89bc5610aa12 100644 --- a/packages/kbn-shared-ux-utility/tsconfig.json +++ b/packages/kbn-shared-ux-utility/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,8 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-some-dev-log/BUILD.bazel b/packages/kbn-some-dev-log/BUILD.bazel deleted file mode 100644 index 02ba30b3d1dba..0000000000000 --- a/packages/kbn-some-dev-log/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-some-dev-log" -PKG_REQUIRE_NAME = "@kbn/some-dev-log" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-some-dev-log/kibana.jsonc b/packages/kbn-some-dev-log/kibana.jsonc index e39904defc552..d83704903bdfb 100644 --- a/packages/kbn-some-dev-log/kibana.jsonc +++ b/packages/kbn-some-dev-log/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/some-dev-log", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-some-dev-log/package.json b/packages/kbn-some-dev-log/package.json index 2dccc54aa1e35..e68e9b1e29066 100644 --- a/packages/kbn-some-dev-log/package.json +++ b/packages/kbn-some-dev-log/package.json @@ -2,7 +2,5 @@ "name": "@kbn/some-dev-log", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-some-dev-log/tsconfig.json b/packages/kbn-some-dev-log/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-some-dev-log/tsconfig.json +++ b/packages/kbn-some-dev-log/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-sort-package-json/BUILD.bazel b/packages/kbn-sort-package-json/BUILD.bazel deleted file mode 100644 index 9014d4cc2ada5..0000000000000 --- a/packages/kbn-sort-package-json/BUILD.bazel +++ /dev/null @@ -1,124 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-sort-package-json" -PKG_REQUIRE_NAME = "@kbn/sort-package-json" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//sort-package-json", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//sort-package-json", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-sort-package-json/kibana.jsonc b/packages/kbn-sort-package-json/kibana.jsonc index 72345c2ccd31c..cc7f2b8a1ecb0 100644 --- a/packages/kbn-sort-package-json/kibana.jsonc +++ b/packages/kbn-sort-package-json/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/sort-package-json", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-sort-package-json/package.json b/packages/kbn-sort-package-json/package.json index 316213bcac017..d0b12357f5c20 100644 --- a/packages/kbn-sort-package-json/package.json +++ b/packages/kbn-sort-package-json/package.json @@ -2,7 +2,5 @@ "name": "@kbn/sort-package-json", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-sort-package-json/tsconfig.json b/packages/kbn-sort-package-json/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-sort-package-json/tsconfig.json +++ b/packages/kbn-sort-package-json/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-spec-to-console/BUILD.bazel b/packages/kbn-spec-to-console/BUILD.bazel deleted file mode 100644 index 9d41b5762d470..0000000000000 --- a/packages/kbn-spec-to-console/BUILD.bazel +++ /dev/null @@ -1,56 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-spec-to-console" -PKG_REQUIRE_NAME = "@kbn/spec-to-console" - -SOURCE_FILES = glob( - [ - "bin/**/*", - "lib/**/*", - "index.js" - ], - exclude = [ - "**/*.test.*", - "**/__fixtures__/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//globby", -] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES + [ - ":srcs", - ], - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-spec-to-console/kibana.jsonc b/packages/kbn-spec-to-console/kibana.jsonc index cf71c222f6f16..8138406cbeaa5 100644 --- a/packages/kbn-spec-to-console/kibana.jsonc +++ b/packages/kbn-spec-to-console/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/spec-to-console", "devOnly": true, - "owner": "@elastic/platform-deployment-management", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/platform-deployment-management" } diff --git a/packages/kbn-std/BUILD.bazel b/packages/kbn-std/BUILD.bazel index b5b198ffd873d..5ddc74ab55de4 100644 --- a/packages/kbn-std/BUILD.bazel +++ b/packages/kbn-std/BUILD.bazel @@ -1,11 +1,6 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") -PKG_DIRNAME = "kbn-std" -PKG_REQUIRE_NAME = "@kbn/std" - -SOURCE_FILES = glob( +SRCS = glob( [ "**/*.ts", ], @@ -25,93 +20,17 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-utility-types", +BUNDLER_DEPS = [ "@npm//lodash", "@npm//query-string", "@npm//rxjs", "@npm//tslib", ] -TYPES_DEPS = [ - "//packages/kbn-utility-types:npm_module_types", - "@npm//query-string", - "@npm//rxjs", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + name = "kbn-std", + package_name = "@kbn/std", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, visibility = ["//visibility:public"], ) diff --git a/packages/kbn-std/kibana.jsonc b/packages/kbn-std/kibana.jsonc index 246c11ee7c3f1..062ba5970f539 100644 --- a/packages/kbn-std/kibana.jsonc +++ b/packages/kbn-std/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/std", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-std/package.json b/packages/kbn-std/package.json index b338657ccea3c..d8317ac361f53 100644 --- a/packages/kbn-std/package.json +++ b/packages/kbn-std/package.json @@ -1,9 +1,7 @@ { "name": "@kbn/std", - "main": "./target_node/index.js", "version": "1.0.0", "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-std/src/deep_freeze.ts b/packages/kbn-std/src/deep_freeze.ts index dbc31f06b36ba..49d3e5bfb17bb 100644 --- a/packages/kbn-std/src/deep_freeze.ts +++ b/packages/kbn-std/src/deep_freeze.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { RecursiveReadonly } from '@kbn/utility-types'; +import type { RecursiveReadonly } from '@kbn/utility-types'; /** @public */ export type Freezable = { [k: string]: any } | any[]; diff --git a/packages/kbn-std/tsconfig.json b/packages/kbn-std/tsconfig.json index 292157c18591a..a293593c7b035 100644 --- a/packages/kbn-std/tsconfig.json +++ b/packages/kbn-std/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,11 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-stdio-dev-helpers/BUILD.bazel b/packages/kbn-stdio-dev-helpers/BUILD.bazel deleted file mode 100644 index fee92d0b182d8..0000000000000 --- a/packages/kbn-stdio-dev-helpers/BUILD.bazel +++ /dev/null @@ -1,126 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-stdio-dev-helpers" -PKG_REQUIRE_NAME = "@kbn/stdio-dev-helpers" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//tslib", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//rxjs", - "@npm//tslib", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-stdio-dev-helpers/kibana.jsonc b/packages/kbn-stdio-dev-helpers/kibana.jsonc index 0001ba53d7b7e..4cb58f510906c 100644 --- a/packages/kbn-stdio-dev-helpers/kibana.jsonc +++ b/packages/kbn-stdio-dev-helpers/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/stdio-dev-helpers", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-stdio-dev-helpers/package.json b/packages/kbn-stdio-dev-helpers/package.json index 6d0237b0d0f68..64334acad3361 100644 --- a/packages/kbn-stdio-dev-helpers/package.json +++ b/packages/kbn-stdio-dev-helpers/package.json @@ -2,7 +2,5 @@ "name": "@kbn/stdio-dev-helpers", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-stdio-dev-helpers/tsconfig.json b/packages/kbn-stdio-dev-helpers/tsconfig.json index 57c1dd1c94e0f..9bd4f35cf62a7 100644 --- a/packages/kbn-stdio-dev-helpers/tsconfig.json +++ b/packages/kbn-stdio-dev-helpers/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-storybook/BUILD.bazel b/packages/kbn-storybook/BUILD.bazel deleted file mode 100644 index aed873551d328..0000000000000 --- a/packages/kbn-storybook/BUILD.bazel +++ /dev/null @@ -1,149 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-storybook" -PKG_REQUIRE_NAME = "@kbn/storybook" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.ejs", - ], - exclude = [ - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "preset/package.json", - "package.json", - "README.md", - "preset.js", -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-utils", - "//packages/kbn-ui-shared-deps-npm", - "//packages/kbn-ui-shared-deps-src", - "//packages/kbn-utils", - "@npm//@elastic/eui", - "@npm//@emotion/cache", - "@npm//@storybook/addons", - "@npm//@storybook/api", - "@npm//@storybook/components", - "@npm//@storybook/core", - "@npm//@storybook/core-common", - "@npm//@storybook/node-logger", - "@npm//@storybook/react", - "@npm//@storybook/theming", - "@npm//loader-utils", - "@npm//react", - "@npm//webpack", - "@npm//webpack-merge", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/kbn-ui-shared-deps-src:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-ambient-storybook-types:npm_module_types", - "@npm//@elastic/eui", - "@npm//@emotion/cache", - "@npm//@storybook/addons", - "@npm//@storybook/api", - "@npm//@storybook/components", - "@npm//@storybook/core", - "@npm//@storybook/core-common", - "@npm//@storybook/node-logger", - "@npm//@storybook/react", - "@npm//@storybook/theming", - "@npm//@types/loader-utils", - "@npm//@types/node", - "@npm//@types/react", - "@npm//@types/webpack", - "@npm//@types/webpack-merge", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-storybook/kibana.jsonc b/packages/kbn-storybook/kibana.jsonc index b5499440f46ad..4faf58c309267 100644 --- a/packages/kbn-storybook/kibana.jsonc +++ b/packages/kbn-storybook/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/storybook", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-storybook/package.json b/packages/kbn-storybook/package.json index 59f6a1a58e3a8..77fc16106c990 100644 --- a/packages/kbn-storybook/package.json +++ b/packages/kbn-storybook/package.json @@ -3,7 +3,5 @@ "author": "Operations", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-storybook/preset.js b/packages/kbn-storybook/preset.js index dae3529f878a1..5757609ec90cc 100644 --- a/packages/kbn-storybook/preset.js +++ b/packages/kbn-storybook/preset.js @@ -6,16 +6,16 @@ * Side Public License, v 1. */ -const webpackConfig = require('./target_node/src/webpack.config'); +const webpackConfig = require('./src/webpack.config'); module.exports = { managerEntries: (entry = []) => { - return [require.resolve('./target_node/src/lib/register'), ...entry]; + return [require.resolve('./src/lib/register'), ...entry]; }, webpackFinal: (config) => { return webpackConfig({ config }); }, config: (entry) => { - return [...entry, require.resolve('./target_node/src/lib/decorators')]; + return [...entry, require.resolve('./src/lib/decorators')]; }, }; diff --git a/packages/kbn-storybook/src/lib/constants.ts b/packages/kbn-storybook/src/lib/constants.ts index 69b05c94ea1b0..df339111c699b 100644 --- a/packages/kbn-storybook/src/lib/constants.ts +++ b/packages/kbn-storybook/src/lib/constants.ts @@ -7,7 +7,7 @@ */ import { resolve } from 'path'; -import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/repo-info'; export const REPO_ROOT = KIBANA_ROOT; export const ASSET_DIR = resolve(KIBANA_ROOT, 'built_assets/storybook'); diff --git a/packages/kbn-storybook/src/lib/run_storybook_cli.ts b/packages/kbn-storybook/src/lib/run_storybook_cli.ts index 0d6a9302c1970..ad074e6dbfc42 100644 --- a/packages/kbn-storybook/src/lib/run_storybook_cli.ts +++ b/packages/kbn-storybook/src/lib/run_storybook_cli.ts @@ -12,7 +12,7 @@ import buildStandalone from '@storybook/react/standalone'; import { Flags, run } from '@kbn/dev-cli-runner'; import UiSharedDepsNpm from '@kbn/ui-shared-deps-npm'; import * as UiSharedDepsSrc from '@kbn/ui-shared-deps-src'; -import { REPO_ROOT } from '@kbn/utils'; + // @ts-expect-error internal dep of storybook import interpret from 'interpret'; // eslint-disable-line import/no-extraneous-dependencies import * as constants from './constants'; @@ -49,6 +49,7 @@ export function runStorybookCli({ configDir, name }: { configDir: string; name: mode: flags.site ? 'static' : 'dev', port: 9001, staticDir, + debugWebpack: true, }; if (flags.site) { config.outputDir = join(constants.ASSET_DIR, name); @@ -57,9 +58,9 @@ export function runStorybookCli({ configDir, name }: { configDir: string; name: logger.setLevel(getLogLevelFromFlags(flags)); // force storybook to use our transpilation rather than ts-node or anything else - interpret.extensions['.ts'] = [join(REPO_ROOT, 'src/setup_node_env')]; - interpret.extensions['.tsx'] = [join(REPO_ROOT, 'src/setup_node_env')]; - interpret.extensions['.jsx'] = [join(REPO_ROOT, 'src/setup_node_env')]; + interpret.extensions['.ts'] = [require.resolve('@kbn/babel-register/install')]; + interpret.extensions['.tsx'] = [require.resolve('@kbn/babel-register/install')]; + interpret.extensions['.jsx'] = [require.resolve('@kbn/babel-register/install')]; await buildStandalone(config); diff --git a/packages/kbn-storybook/src/webpack.config.ts b/packages/kbn-storybook/src/webpack.config.ts index cca984fbe83b5..93c746e66af34 100644 --- a/packages/kbn-storybook/src/webpack.config.ts +++ b/packages/kbn-storybook/src/webpack.config.ts @@ -85,7 +85,7 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { { test: /\.peggy$/, use: { - loader: '@kbn/peggy-loader', + loader: require.resolve('@kbn/peggy-loader'), }, }, { @@ -98,7 +98,7 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { loader: 'postcss-loader', options: { postcssOptions: { - config: require.resolve('@kbn/optimizer/postcss.config.js'), + config: require.resolve('@kbn/optimizer/postcss.config'), }, }, }, @@ -151,8 +151,9 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { // move the plugins to the top of the preset array so they will run after the typescript preset options.presets = [ + require.resolve('@kbn/babel-preset/common_preset'), { - plugins: [...plugins, require.resolve('@kbn/babel-plugin-synthetic-packages')], + plugins: [...plugins, require.resolve('@kbn/babel-plugin-package-imports')], }, ...(options.presets as Preset[]).filter(isDesiredPreset).map((preset) => { const tsPreset = getTsPreset(preset); diff --git a/packages/kbn-storybook/tsconfig.json b/packages/kbn-storybook/tsconfig.json index 3621ceb664a10..765dd18aee082 100644 --- a/packages/kbn-storybook/tsconfig.json +++ b/packages/kbn-storybook/tsconfig.json @@ -1,11 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", - "skipLibCheck": true, - "target": "es2015", + "outDir": "target/types", "types": [ "node", "@kbn/ambient-storybook-types" @@ -14,5 +10,14 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/ui-shared-deps-npm", + "@kbn/ui-shared-deps-src", + "@kbn/repo-info", + "@kbn/dev-cli-runner", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-synthetic-package-map/BUILD.bazel b/packages/kbn-synthetic-package-map/BUILD.bazel deleted file mode 100644 index 6b1d32fcbbb1e..0000000000000 --- a/packages/kbn-synthetic-package-map/BUILD.bazel +++ /dev/null @@ -1,51 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-synthetic-package-map" -PKG_REQUIRE_NAME = "@kbn/synthetic-package-map" - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "index.js", - "index.d.ts", - "synthetic-packages.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-synthetic-package-map/kibana.jsonc b/packages/kbn-synthetic-package-map/kibana.jsonc deleted file mode 100644 index 153b6548ce841..0000000000000 --- a/packages/kbn-synthetic-package-map/kibana.jsonc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "shared-common", - "id": "@kbn/synthetic-package-map", - "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] -} diff --git a/packages/kbn-synthetic-package-map/tsconfig.json b/packages/kbn-synthetic-package-map/tsconfig.json deleted file mode 100644 index 75177b5488a9b..0000000000000 --- a/packages/kbn-synthetic-package-map/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "../../tsconfig.bazel.json", - "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", - "types": [ - "node" - ] - }, - "include": [ - "index.d.ts" - ] -} diff --git a/packages/kbn-telemetry-tools/BUILD.bazel b/packages/kbn-telemetry-tools/BUILD.bazel deleted file mode 100644 index 7b55705968e78..0000000000000 --- a/packages/kbn-telemetry-tools/BUILD.bazel +++ /dev/null @@ -1,123 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-telemetry-tools" -PKG_REQUIRE_NAME = "@kbn/telemetry-tools" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ] -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", - "GUIDELINE.md", -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-utils", - "//packages/kbn-eslint-plugin-imports", - "//packages/kbn-utility-types", - "//packages/kbn-utils", - "@npm//globby", - "@npm//listr", - "@npm//normalize-path", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-eslint-plugin-imports:npm_module_types", - "//packages/kbn-utility-types:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "@npm//globby", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/listr", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/normalize-path", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-telemetry-tools/kibana.jsonc b/packages/kbn-telemetry-tools/kibana.jsonc index c182ddd3e6960..f36e6d272b81b 100644 --- a/packages/kbn-telemetry-tools/kibana.jsonc +++ b/packages/kbn-telemetry-tools/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/telemetry-tools", "devOnly": true, - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-telemetry-tools/package.json b/packages/kbn-telemetry-tools/package.json index 9381f23de133f..e4e890b32ab23 100644 --- a/packages/kbn-telemetry-tools/package.json +++ b/packages/kbn-telemetry-tools/package.json @@ -3,7 +3,5 @@ "version": "1.0.0", "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node/index.js", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-telemetry-tools/src/tools/compiler_host.ts b/packages/kbn-telemetry-tools/src/tools/compiler_host.ts index a49bee64e5642..55dcfe61b8659 100644 --- a/packages/kbn-telemetry-tools/src/tools/compiler_host.ts +++ b/packages/kbn-telemetry-tools/src/tools/compiler_host.ts @@ -9,7 +9,7 @@ import Path from 'path'; import ts from 'typescript'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ImportResolver } from '@kbn/import-resolver'; function readTsConfigFile(path: string) { diff --git a/packages/kbn-telemetry-tools/tsconfig.json b/packages/kbn-telemetry-tools/tsconfig.json index 59c205335d6ab..1b30dc5c7516a 100644 --- a/packages/kbn-telemetry-tools/tsconfig.json +++ b/packages/kbn-telemetry-tools/tsconfig.json @@ -1,10 +1,8 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, "isolatedModules": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,15 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/repo-info", + "@kbn/import-resolver", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-test-jest-helpers/BUILD.bazel b/packages/kbn-test-jest-helpers/BUILD.bazel deleted file mode 100644 index 7562c7aded78f..0000000000000 --- a/packages/kbn-test-jest-helpers/BUILD.bazel +++ /dev/null @@ -1,182 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@npm//@babel/cli:index.bzl", "babel") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-test-jest-helpers" -PKG_REQUIRE_NAME = "@kbn/test-jest-helpers" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ] -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "jest.config.js", - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-utils", - "//packages/kbn-i18n-react", - "//packages/kbn-axe-config", - "//packages/kbn-std", - "//packages/kbn-utils", - "@npm//@elastic/elasticsearch", - "@npm//axios", - "@npm//@babel/traverse", - "@npm//chance", - "@npm//dedent", - "@npm//del", - "@npm//enzyme", - "@npm//execa", - "@npm//exit-hook", - "@npm//form-data", - "@npm//getopts", - "@npm//globby", - "@npm//he", - "@npm//history", - "@npm//jest", - "@npm//jest-axe", - "@npm//jest-cli", - "@npm//jest-snapshot", - "@npm//jest-styled-components", - "@npm//@jest/reporters", - "@npm//joi", - "@npm//mustache", - "@npm//normalize-path", - "@npm//prettier", - "@npm//react", - "@npm//react-dom", - "@npm//react-redux", - "@npm//react-router-dom", - "@npm//redux", - "@npm//rxjs", - "@npm//semver", - "@npm//strip-ansi", - "@npm//xmlbuilder", - "@npm//xml2js", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-axe-config:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//axios", - "@npm//axe-core", - "@npm//elastic-apm-node", - "@npm//del", - "@npm//exit-hook", - "@npm//form-data", - "@npm//getopts", - "@npm//jest", - "@npm//jest-cli", - "@npm//jest-snapshot", - "@npm//redux", - "@npm//rxjs", - "@npm//xmlbuilder", - "@npm//@types/chance", - "@npm//@types/dedent", - "@npm//@types/enzyme", - "@npm//@types/he", - "@npm//@types/history", - "@npm//@types/jest", - "@npm//@types/jest-axe", - "@npm//joi", - "@npm//@types/lodash", - "@npm//@types/mustache", - "@npm//@types/normalize-path", - "@npm//@types/node", - "@npm//@types/prettier", - "@npm//@types/react", - "@npm//@types/react-dom", - "@npm//@types/react-router-dom", - "@npm//@types/semver", - "@npm//@types/xml2js", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-test-jest-helpers/kibana.jsonc b/packages/kbn-test-jest-helpers/kibana.jsonc index 70750f8f4f28d..4780aa00d4aa9 100644 --- a/packages/kbn-test-jest-helpers/kibana.jsonc +++ b/packages/kbn-test-jest-helpers/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/test-jest-helpers", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-test-jest-helpers/package.json b/packages/kbn-test-jest-helpers/package.json index 646b0baa96a13..216350e757a84 100644 --- a/packages/kbn-test-jest-helpers/package.json +++ b/packages/kbn-test-jest-helpers/package.json @@ -2,7 +2,5 @@ "name": "@kbn/test-jest-helpers", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-test-jest-helpers/src/stub_web_worker.ts b/packages/kbn-test-jest-helpers/src/stub_web_worker.ts index 987f6ea7867f7..76302be07bcca 100644 --- a/packages/kbn-test-jest-helpers/src/stub_web_worker.ts +++ b/packages/kbn-test-jest-helpers/src/stub_web_worker.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -function stubWebWorker() { +export function stubWebWorker() { if (!window.Worker) { // @ts-ignore we aren't honoring the real Worker spec here window.Worker = function Worker() { @@ -18,8 +18,3 @@ function stubWebWorker() { }; } } - -stubWebWorker(); - -// Add an export to avoid TS complaining "stub_web_worker.ts" is not a module. -export { stubWebWorker }; diff --git a/packages/kbn-test-jest-helpers/tsconfig.json b/packages/kbn-test-jest-helpers/tsconfig.json index 2b02a63db1d05..5a79ec9d8b015 100644 --- a/packages/kbn-test-jest-helpers/tsconfig.json +++ b/packages/kbn-test-jest-helpers/tsconfig.json @@ -1,13 +1,18 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": ["jest", "node"] }, "include": [ "**/*.ts", "**/*.tsx", ], + "kbn_references": [ + "@kbn/i18n-react", + "@kbn/axe-config", + ], + "exclude": [ + "target/**/*", + ], } diff --git a/packages/kbn-test-subj-selector/BUILD.bazel b/packages/kbn-test-subj-selector/BUILD.bazel deleted file mode 100644 index 57afbf86c1bc9..0000000000000 --- a/packages/kbn-test-subj-selector/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-test-subj-selector" -PKG_REQUIRE_NAME = "@kbn/test-subj-selector" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-test-subj-selector/kibana.jsonc b/packages/kbn-test-subj-selector/kibana.jsonc index 708e1fd44ac39..53a90dc467c80 100644 --- a/packages/kbn-test-subj-selector/kibana.jsonc +++ b/packages/kbn-test-subj-selector/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/test-subj-selector", "owner": "@elastic/kibana-operations", - "devOnly": true, - "runtimeDeps": [], - "typeDeps": [], + "devOnly": true } diff --git a/packages/kbn-test-subj-selector/package.json b/packages/kbn-test-subj-selector/package.json index 1cb9f52b9e027..6175fe8710619 100644 --- a/packages/kbn-test-subj-selector/package.json +++ b/packages/kbn-test-subj-selector/package.json @@ -2,7 +2,5 @@ "name": "@kbn/test-subj-selector", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-test-subj-selector/tsconfig.json b/packages/kbn-test-subj-selector/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-test-subj-selector/tsconfig.json +++ b/packages/kbn-test-subj-selector/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-test/BUILD.bazel b/packages/kbn-test/BUILD.bazel deleted file mode 100644 index 11ff0fbadebba..0000000000000 --- a/packages/kbn-test/BUILD.bazel +++ /dev/null @@ -1,211 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@npm//@babel/cli:index.bzl", "babel") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-test" -PKG_REQUIRE_NAME = "@kbn/test" - -SOURCE_FILES = glob( - [ - "src/failed_tests_reporter/es_config", - "src/jest/jest_flags.json", - "**/*.html", - "**/*.js", - "**/*.ts", - ], - exclude = [ - "types/**/*", - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/*.snap", - "**/__fixture__/**", - "**/__fixtures__/**", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "jest-preset.js", - "jest_integration/jest-preset.js", - "jest_integration_node/jest-preset.js", - "jest_node/jest-preset.js", - "jest.config.js", - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-dev-utils", - "//packages/kbn-i18n-react", - "//packages/kbn-std", - "//packages/kbn-utils", - "//packages/kbn-bazel-packages", - "@npm//@elastic/elasticsearch", - "@npm//@babel/traverse", - "@npm//@jest/console", - "@npm//@jest/reporters", - "@npm//axios", - "@npm//chance", - "@npm//dedent", - "@npm//del", - "@npm//enzyme", - "@npm//execa", - "@npm//exit-hook", - "@npm//form-data", - "@npm//get-port", - "@npm//getopts", - "@npm//globby", - "@npm//he", - "@npm//history", - "@npm//jest", - "@npm//jest-cli", - "@npm//jest-snapshot", - "@npm//jest-styled-components", - "@npm//joi", - "@npm//js-yaml", - "@npm//minimatch", - "@npm//mustache", - "@npm//normalize-path", - "@npm//prettier", - "@npm//react-dom", - "@npm//react-redux", - "@npm//react-router-dom", - "@npm//redux", - "@npm//rxjs", - "@npm//semver", - "@npm//strip-ansi", - "@npm//supertest", - "@npm//xmlbuilder", - "@npm//xml2js", -] - -TYPES_DEPS = [ - "//packages/kbn-dev-utils:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-tooling-log:npm_module_types", - "//packages/kbn-bazel-packages:npm_module_types", - "//packages/kbn-get-repo-files:npm_module_types", - "//packages/kbn-ftr-screenshot-filename:npm_module_types", - "//packages/kbn-peggy:npm_module_types", - "@npm//@elastic/elasticsearch", - "@npm//@jest/console", - "@npm//@jest/reporters", - "@npm//axe-core", - "@npm//axios", - "@npm//elastic-apm-node", - "@npm//del", - "@npm//exit-hook", - "@npm//form-data", - "@npm//get-port", - "@npm//getopts", - "@npm//globby", - "@npm//jest", - "@npm//jest-cli", - "@npm//jest-snapshot", - "@npm//redux", - "@npm//rxjs", - "@npm//playwright", - "@npm//xmlbuilder", - "@npm//@jest/transform", - "@npm//@types/archiver", - "@npm//@types/chance", - "@npm//@types/dedent", - "@npm//@types/enzyme", - "@npm//@types/he", - "@npm//@types/history", - "@npm//@types/jest", - "@npm//@types/js-yaml", - "@npm//joi", - "@npm//@types/lodash", - "@npm//@types/minimatch", - "@npm//@types/mustache", - "@npm//@types/normalize-path", - "@npm//@types/node", - "@npm//@types/prettier", - "@npm//@types/react-dom", - "@npm//@types/react-router-dom", - "@npm//@types/semver", - "@npm//@types/supertest", - "@npm//@types/uuid", - "@npm//@types/xml2js", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), - additional_args = [ - "--copy-files", - "--quiet" - ] -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-test/jest-preset.js b/packages/kbn-test/jest-preset.js index e9031f0d022be..dbbbc7481e895 100644 --- a/packages/kbn-test/jest-preset.js +++ b/packages/kbn-test/jest-preset.js @@ -9,10 +9,7 @@ // For a detailed explanation regarding each configuration property, visit: // https://jestjs.io/docs/en/configuration.html -const pkgMap = require('@kbn/synthetic-package-map').readPackageMap(); - -/** @typedef {import("@jest/types").Config.InitialOptions} JestConfig */ -/** @type {JestConfig} */ +/** @type {import("@jest/types").Config.InitialOptions} */ module.exports = { // The directory where Jest should output its coverage files coverageDirectory: '/target/kibana-coverage/jest', @@ -26,32 +23,10 @@ module.exports = { : ['html', 'text'], // An array of file extensions your modules use - moduleFileExtensions: ['js', 'mjs', 'json', 'ts', 'tsx', 'node'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'mjs', 'json', 'node'], - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module moduleNameMapper: { - '@elastic/eui/lib/(.*)?': '/node_modules/@elastic/eui/test-env/$1', - '@elastic/eui$': '/node_modules/@elastic/eui/test-env', - 'elastic-apm-node': - '/node_modules/@kbn/test/target_node/src/jest/mocks/apm_agent_mock.js', - '\\.module.(css|scss)$': - '/node_modules/@kbn/test/target_node/src/jest/mocks/css_module_mock.js', - '\\.(css|less|scss)$': - '/node_modules/@kbn/test/target_node/src/jest/mocks/style_mock.js', - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - '/node_modules/@kbn/test/target_node/src/jest/mocks/file_mock.js', - '\\.ace\\.worker$': - '/node_modules/@kbn/test/target_node/src/jest/mocks/worker_module_mock.js', - '\\.editor\\.worker(\\.js)?$': - '/node_modules/@kbn/test/target_node/src/jest/mocks/worker_module_mock.js', - '^(!!)?file-loader!': - '/node_modules/@kbn/test/target_node/src/jest/mocks/file_mock.js', - ...Object.fromEntries( - Array.from(pkgMap.entries()).map(([pkgId, repoRelativeDir]) => [ - `^${pkgId}(/.*)?$`, - `/${repoRelativeDir}$1`, - ]) - ), + // do not use these, they're so slow. We have a custom resolver that can handle resolving different types of requests. }, // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader @@ -61,7 +36,7 @@ module.exports = { reporters: [ 'default', [ - '@kbn/test/target_node/src/jest/junit_reporter', + '/packages/kbn-test/src/jest/junit_reporter', { rootDirectory: '.', }, @@ -69,7 +44,7 @@ module.exports = { ...(process.env.TEST_GROUP_TYPE_UNIT ? [ [ - '@kbn/test/target_node/src/jest/ci_stats_jest_reporter', + '/packages/kbn-test/src/jest/ci_stats_jest_reporter.ts', { testGroupType: process.env.TEST_GROUP_TYPE_UNIT, }, @@ -80,20 +55,18 @@ module.exports = { // The paths to modules that run some code to configure or set up the testing environment before each test setupFiles: [ - '/node_modules/@kbn/test/target_node/src/jest/setup/babel_polyfill.js', - '/node_modules/@kbn/test/target_node/src/jest/setup/polyfills.jsdom.js', - '/node_modules/@kbn/test/target_node/src/jest/setup/enzyme.js', + '/src/setup_node_env/polyfill.ts', + '/packages/kbn-test/src/jest/setup/polyfills.jsdom.js', + '/packages/kbn-test/src/jest/setup/enzyme.js', ], // A list of paths to modules that run some code to configure or set up the testing framework before each test setupFilesAfterEnv: [ - '/node_modules/@kbn/test/target_node/src/jest/setup/setup_test.js', - '/node_modules/@kbn/test/target_node/src/jest/setup/mocks.moment_timezone.js', - '/node_modules/@kbn/test/target_node/src/jest/setup/mocks.eui.js', - '/node_modules/@kbn/test/target_node/src/jest/setup/react_testing_library.js', - process.env.CI - ? '/node_modules/@kbn/test/target_node/src/jest/setup/disable_console_logs.js' - : [], + '/packages/kbn-test/src/jest/setup/setup_test.js', + '/packages/kbn-test/src/jest/setup/mocks.moment_timezone.js', + '/packages/kbn-test/src/jest/setup/mocks.eui.js', + '/packages/kbn-test/src/jest/setup/react_testing_library.js', + process.env.CI ? '/packages/kbn-test/src/jest/setup/disable_console_logs.js' : [], ].flat(), snapshotFormat: { @@ -104,8 +77,8 @@ module.exports = { // A list of paths to snapshot serializer modules Jest should use for snapshot testing snapshotSerializers: [ '/src/plugins/kibana_react/public/util/test_helpers/react_mount_serializer.ts', - '/node_modules/enzyme-to-json/serializer', - '/node_modules/@kbn/test/target_node/src/jest/setup/emotion.js', + 'enzyme-to-json/serializer', + '/packages/kbn-test/src/jest/setup/emotion.js', ], // The test environment that will be used for testing @@ -123,9 +96,9 @@ module.exports = { // A map from regular expressions to paths to transformers transform: { - '^.+\\.(js|tsx?)$': '/node_modules/@kbn/test/target_node/src/jest/transforms/babel.js', - '^.+\\.(txt|html)?$': '/node_modules/@kbn/test/target_node/src/jest/transforms/raw.js', - '^.+\\.peggy?$': '/node_modules/@kbn/test/target_node/src/jest/transforms/peggy.js', + '^.+\\.(js|tsx?)$': '/packages/kbn-test/src/jest/transforms/babel.js', + '^.+\\.(txt|html)?$': '/packages/kbn-test/src/jest/transforms/raw.js', + '^.+\\.peggy?$': '/packages/kbn-test/src/jest/transforms/peggy.js', }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation @@ -146,9 +119,7 @@ module.exports = { '!**/index.{js,ts,tsx}', ], - // A custom resolver to preserve symlinks by default - resolver: - '/node_modules/@kbn/test/target_node/src/jest/setup/preserve_symlinks_resolver.js', - watchPathIgnorePatterns: ['.*/__tmp__/.*'], + + resolver: '/packages/kbn-test/src/jest/resolver.js', }; diff --git a/packages/kbn-test/jest_integration/jest-preset.js b/packages/kbn-test/jest_integration/jest-preset.js index 8b40dca6a5db3..6ccdb6cc98fc1 100644 --- a/packages/kbn-test/jest_integration/jest-preset.js +++ b/packages/kbn-test/jest_integration/jest-preset.js @@ -8,22 +8,21 @@ const preset = require('../jest-preset'); -/** @typedef {import("@jest/types").Config.InitialOptions} JestConfig */ -/** @type {JestConfig} */ +/** @type {import("@jest/types").Config.InitialOptions} */ module.exports = { ...preset, - testMatch: ['**/integration_tests**/*.test.{js,mjs,ts,tsx}'], + testMatch: ['**/integration_tests/**/*.test.{js,mjs,ts,tsx}'], testPathIgnorePatterns: preset.testPathIgnorePatterns.filter( (pattern) => !pattern.includes('integration_tests') ), setupFilesAfterEnv: [ ...preset.setupFilesAfterEnv, - '/node_modules/@kbn/test/target_node/src/jest/setup/after_env.integration.js', + '/packages/kbn-test/src/jest/setup/after_env.integration.js', ], reporters: [ 'default', [ - '@kbn/test/target_node/src/jest/junit_reporter', + '/packages/kbn-test/src/jest/junit_reporter', { rootDirectory: '.', reportName: 'Jest Integration Tests', @@ -32,7 +31,7 @@ module.exports = { ...(process.env.TEST_GROUP_TYPE_INTEGRATION ? [ [ - '@kbn/test/target_node/src/jest/ci_stats_jest_reporter', + '/packages/kbn-test/src/jest/ci_stats_jest_reporter.ts', { testGroupType: process.env.TEST_GROUP_TYPE_INTEGRATION, }, diff --git a/packages/kbn-test/jest_integration_node/jest-preset.js b/packages/kbn-test/jest_integration_node/jest-preset.js index 0e793093708f7..43373e41db5c1 100644 --- a/packages/kbn-test/jest_integration_node/jest-preset.js +++ b/packages/kbn-test/jest_integration_node/jest-preset.js @@ -12,8 +12,7 @@ const presetClone = { ...preset }; delete presetClone.testEnvironment; // simply redefining as `testEnvironment: 'node'` has some weird side-effects (https://github.com/elastic/kibana/pull/138877) -/** @typedef {import("@jest/types").Config.InitialOptions} JestConfig */ -/** @type {JestConfig} */ +/** @type {import("@jest/types").Config.InitialOptions} */ module.exports = { ...presetClone, testMatch: ['**/integration_tests**/*.test.{js,mjs,ts,tsx}'], @@ -21,20 +20,20 @@ module.exports = { (pattern) => !pattern.includes('integration_tests') ), setupFilesAfterEnv: [ - '/node_modules/@kbn/test/target_node/src/jest/setup/after_env.integration.js', - '/node_modules/@kbn/test/target_node/src/jest/setup/mocks.moment_timezone.js', + '/packages/kbn-test/src/jest/setup/after_env.integration.js', + '/packages/kbn-test/src/jest/setup/mocks.moment_timezone.js', ], reporters: [ 'default', [ - '@kbn/test/target_node/src/jest/junit_reporter', + '/packages/kbn-test/src/jest/junit_reporter', { rootDirectory: '.', reportName: 'Jest Integration Tests', }, ], [ - '@kbn/test/target_node/src/jest/ci_stats_jest_reporter', + '/packages/kbn-test/src/jest/ci_stats_jest_reporter.ts', { testGroupType: 'Jest Integration Tests', }, @@ -45,7 +44,7 @@ module.exports = { : ['html', 'text'], snapshotSerializers: [], - setupFiles: ['/node_modules/@kbn/test/target_node/src/jest/setup/babel_polyfill.js'], + setupFiles: ['/src/setup_node_env/polyfill.ts'], haste: { ...preset.haste, throwOnModuleCollision: true, diff --git a/packages/kbn-test/jest_node/jest-preset.js b/packages/kbn-test/jest_node/jest-preset.js index 94d973807fc9b..f259ca5d9d998 100644 --- a/packages/kbn-test/jest_node/jest-preset.js +++ b/packages/kbn-test/jest_node/jest-preset.js @@ -12,12 +12,11 @@ const presetClone = { ...preset }; delete presetClone.testEnvironment; // simply redefining as `testEnvironment: 'node'` has some weird side-effects (https://github.com/elastic/kibana/pull/138877#issuecomment-1222366247) -/** @typedef {import("@jest/types").Config.InitialOptions} JestConfig */ -/** @type {JestConfig} */ +/** @type {import("@jest/types").Config.InitialOptions} */ module.exports = { ...presetClone, snapshotSerializers: [], - setupFiles: ['/node_modules/@kbn/test/target_node/src/jest/setup/babel_polyfill.js'], + setupFiles: ['/src/setup_node_env/polyfill.ts'], haste: { ...preset.haste, throwOnModuleCollision: true, diff --git a/packages/kbn-test/kibana.jsonc b/packages/kbn-test/kibana.jsonc index c921f7ac39626..c38e4f38bf65d 100644 --- a/packages/kbn-test/kibana.jsonc +++ b/packages/kbn-test/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/test", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-test/package.json b/packages/kbn-test/package.json index dff56ec9b524c..79c74b2e3ae86 100644 --- a/packages/kbn-test/package.json +++ b/packages/kbn-test/package.json @@ -3,7 +3,5 @@ "author": "Operations", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "./target_node", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-test/src/es/es_test_config.ts b/packages/kbn-test/src/es/es_test_config.ts index 7abfe25545cd2..c31728b0fd7d8 100644 --- a/packages/kbn-test/src/es/es_test_config.ts +++ b/packages/kbn-test/src/es/es_test_config.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import Url from 'url'; import { systemIndicesSuperuser } from '../kbn'; diff --git a/packages/kbn-test/src/es/test_es_cluster.ts b/packages/kbn-test/src/es/test_es_cluster.ts index 70fa5f2e8d375..6f7310e4bd2e2 100644 --- a/packages/kbn-test/src/es/test_es_cluster.ts +++ b/packages/kbn-test/src/es/test_es_cluster.ts @@ -14,12 +14,10 @@ import globby from 'globby'; import createArchiver from 'archiver'; import Fs from 'fs'; import { pipeline } from 'stream/promises'; -import type { ChildProcess } from 'child_process'; -// @ts-expect-error in js import { Cluster } from '@kbn/es'; import { Client, HttpConnection } from '@elastic/elasticsearch'; import type { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { CI_PARALLEL_PROCESS_PREFIX } from '../ci_parallel_process_prefix'; import { esTestConfig } from './es_test_config'; @@ -37,23 +35,9 @@ interface TestEsClusterNodesOptions { dataArchive?: string; } -interface Node { - installSource: (opts: Record) => Promise<{ installPath: string }>; - installSnapshot: (opts: Record) => Promise<{ installPath: string }>; - extractDataDirectory: ( - installPath: string, - archivePath: string, - extractDirName?: string - ) => Promise<{ insallPath: string }>; - start: (installPath: string, opts: Record) => Promise; - stop: () => Promise; - kill: () => Promise; - _process?: ChildProcess; -} - export interface ICluster { ports: number[]; - nodes: Node[]; + nodes: Cluster[]; getStartTimeout: () => number; start: () => Promise; stop: () => Promise; @@ -207,7 +191,7 @@ export function createTestEsCluster< return new (class TestCluster { ports: number[] = []; - nodes: Node[] = []; + nodes: Cluster[] = []; constructor() { for (let i = 0; i < nodes.length; i++) { diff --git a/packages/kbn-test/src/functional_test_runner/fake_mocha_types.ts b/packages/kbn-test/src/functional_test_runner/fake_mocha_types.ts index 17e9663e33883..f5091b01735ff 100644 --- a/packages/kbn-test/src/functional_test_runner/fake_mocha_types.ts +++ b/packages/kbn-test/src/functional_test_runner/fake_mocha_types.ts @@ -14,7 +14,12 @@ import { EventEmitter } from 'events'; -export interface Suite { +export interface Suite extends Runnable { + _beforeAll: Runnable[]; + _beforeEach: Runnable[]; + _afterEach: Runnable[]; + _afterAll: Runnable[]; + currentTest?: Test; suites: Suite[]; tests: Test[]; @@ -26,7 +31,7 @@ export interface Suite { suiteTag: string; } -export interface Test { +export interface Test extends Runnable { fullTitle(): string; title: string; file?: string; @@ -35,6 +40,16 @@ export interface Test { pending?: boolean; } +export interface Runnable { + isFailed(): boolean; + isPending(): boolean; + duration?: number; + titlePath(): string[]; + file?: string; + title: string; + parent?: Suite; +} + export interface Runner extends EventEmitter { abort(): void; failures: any[]; diff --git a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts index 11f99abfa6fbf..5b06393cf7d50 100644 --- a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts +++ b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts @@ -9,7 +9,7 @@ import { writeFileSync, mkdirSync } from 'fs'; import Path, { dirname } from 'path'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Suite, Test } from './fake_mocha_types'; import { diff --git a/packages/kbn-test/src/functional_test_runner/integration_tests/basic.test.js b/packages/kbn-test/src/functional_test_runner/integration_tests/basic.test.js index dbc3094e29aea..d026a80a7984c 100644 --- a/packages/kbn-test/src/functional_test_runner/integration_tests/basic.test.js +++ b/packages/kbn-test/src/functional_test_runner/integration_tests/basic.test.js @@ -9,7 +9,7 @@ import { spawnSync } from 'child_process'; import { resolve } from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; const SCRIPT = resolve(REPO_ROOT, 'scripts/functional_test_runner.js'); const BASIC_CONFIG = require.resolve('./__fixtures__/simple_project/config.js'); diff --git a/packages/kbn-test/src/functional_test_runner/integration_tests/failure_hooks.test.js b/packages/kbn-test/src/functional_test_runner/integration_tests/failure_hooks.test.js index 47ae51ca62f13..7efd431e3ceb0 100644 --- a/packages/kbn-test/src/functional_test_runner/integration_tests/failure_hooks.test.js +++ b/packages/kbn-test/src/functional_test_runner/integration_tests/failure_hooks.test.js @@ -10,7 +10,7 @@ import { spawnSync } from 'child_process'; import { resolve } from 'path'; import stripAnsi from 'strip-ansi'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; const SCRIPT = resolve(REPO_ROOT, 'scripts/functional_test_runner.js'); const FAILURE_HOOKS_CONFIG = require.resolve('./__fixtures__/failure_hooks/config.js'); diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/config_loading.ts b/packages/kbn-test/src/functional_test_runner/lib/config/config_loading.ts index cfa2cabec4dfc..ad03d6d1c76ba 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/config_loading.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/config_loading.ts @@ -10,7 +10,7 @@ import Path from 'path'; import { ToolingLog } from '@kbn/tooling-log'; import { defaultsDeep } from 'lodash'; import { createFlagError, createFailError } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { FtrConfigProvider, GenericFtrProviderContext } from '../../public_types'; import { Config } from './config'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/ftr_configs_manifest.ts b/packages/kbn-test/src/functional_test_runner/lib/config/ftr_configs_manifest.ts index 0452c0b7de305..f45f4e7a5736d 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/ftr_configs_manifest.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/ftr_configs_manifest.ts @@ -9,7 +9,7 @@ import Path from 'path'; import Fs from 'fs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import JsYaml from 'js-yaml'; export const FTR_CONFIGS_MANIFEST_REL = '.buildkite/ftr_configs.yml'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/run_check_ftr_configs_cli.ts b/packages/kbn-test/src/functional_test_runner/lib/config/run_check_ftr_configs_cli.ts index 7f69ad6de5df6..bfc727537fe22 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/run_check_ftr_configs_cli.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/run_check_ftr_configs_cli.ts @@ -8,7 +8,7 @@ import execa from 'execa'; import { readFileSync } from 'fs'; import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { run } from '@kbn/dev-cli-runner'; import { createFailError } from '@kbn/dev-cli-errors'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/es_version.ts b/packages/kbn-test/src/functional_test_runner/lib/es_version.ts index ccdd9cc902c5b..c7cf398debde3 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/es_version.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/es_version.ts @@ -7,7 +7,7 @@ */ import semver from 'semver'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; export class EsVersion { static getDefault() { diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/decorate_mocha_ui.js b/packages/kbn-test/src/functional_test_runner/lib/mocha/decorate_mocha_ui.js index a0db7db6f0017..af73af1f50bb5 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/decorate_mocha_ui.js +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/decorate_mocha_ui.js @@ -7,7 +7,7 @@ */ import { relative } from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createAssignmentProxy } from './assignment_proxy'; import { wrapFunction } from './wrap_function'; import { wrapRunnableArgs } from './wrap_runnable_args'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/reporter/ci_stats_ftr_reporter.ts b/packages/kbn-test/src/functional_test_runner/lib/mocha/reporter/ci_stats_ftr_reporter.ts index 96900555db745..f8cfabfc0bc7a 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/reporter/ci_stats_ftr_reporter.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/reporter/ci_stats_ftr_reporter.ts @@ -8,7 +8,7 @@ import * as Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { CiStatsReporter, CiStatsReportTestsOptions, @@ -16,38 +16,21 @@ import { } from '@kbn/ci-stats-reporter'; import { Config } from '../../config'; -import { Runner } from '../../../fake_mocha_types'; +import { Runner, Runnable } from '../../../fake_mocha_types'; import { Lifecycle } from '../../lifecycle'; import { getSnapshotOfRunnableLogs } from '../../../../mocha'; -interface Suite { - _beforeAll: Runnable[]; - _beforeEach: Runnable[]; - _afterEach: Runnable[]; - _afterAll: Runnable[]; -} - -interface Runnable { - isFailed(): boolean; - isPending(): boolean; - duration?: number; - titlePath(): string[]; - file: string; - title: string; - parent: Suite; -} - function getHookType(hook: Runnable): CiStatsTestType { - if (hook.parent._afterAll.includes(hook)) { + if (hook.parent?._afterAll.includes(hook)) { return 'after all hook'; } - if (hook.parent._afterEach.includes(hook)) { + if (hook.parent?._afterEach.includes(hook)) { return 'after each hook'; } - if (hook.parent._beforeEach.includes(hook)) { + if (hook.parent?._beforeEach.includes(hook)) { return 'before each hook'; } - if (hook.parent._beforeAll.includes(hook)) { + if (hook.parent?._beforeAll.includes(hook)) { return 'before all hook'; } @@ -100,7 +83,7 @@ export function setupCiStatsFtrTestGroupReporter({ startTime: new Date(Date.now() - (runnable.duration ?? 0)).toJSON(), durationMs: runnable.duration ?? 0, seq: testRuns.length + 1, - file: Path.relative(REPO_ROOT, runnable.file), + file: Path.relative(REPO_ROOT, runnable.file ?? '.'), name: runnable.title, suites: runnable.titlePath().slice(0, -1), result: runnable.isFailed() ? 'fail' : runnable.isPending() ? 'skip' : 'pass', diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/setup_mocha.ts b/packages/kbn-test/src/functional_test_runner/lib/mocha/setup_mocha.ts index e2a29f8d15717..9bc399ea1215d 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/setup_mocha.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/setup_mocha.ts @@ -8,7 +8,7 @@ import { relative } from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; // @ts-expect-error we don't use @types/mocha so it doesn't conflict with @types/jest import Mocha from 'mocha'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/validate_ci_group_tags.js b/packages/kbn-test/src/functional_test_runner/lib/mocha/validate_ci_group_tags.js index a0298b635a135..826971a30b836 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/validate_ci_group_tags.js +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/validate_ci_group_tags.js @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; /** * Traverse the suites configured and ensure that each suite has no more than one ciGroup assigned diff --git a/packages/kbn-test/src/functional_test_runner/lib/providers/provider_collection.ts b/packages/kbn-test/src/functional_test_runner/lib/providers/provider_collection.ts index 8723a424f6e22..06815d7ff38aa 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/providers/provider_collection.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/providers/provider_collection.ts @@ -10,21 +10,19 @@ import { ToolingLog } from '@kbn/tooling-log'; import { loadTracer } from '../load_tracer'; import { createAsyncInstance, isAsyncInstance } from './async_instance'; -import { Providers } from './read_provider_spec'; +import { Providers, ProviderFn, isProviderConstructor } from './read_provider_spec'; import { createVerboseInstance } from './verbose_instance'; -import { GenericFtrService } from '../../public_types'; export class ProviderCollection { - static callProviderFn(providerFn: any, ctx: any) { - if (providerFn.prototype instanceof GenericFtrService) { - const Constructor = providerFn as any as new (ctx: any) => any; - return new Constructor(ctx); + static callProviderFn(providerFn: ProviderFn, ctx: any) { + if (isProviderConstructor(providerFn)) { + return new providerFn(ctx); } return providerFn(ctx); } - private readonly instances = new Map(); + private readonly instances = new Map(); constructor(private readonly log: ToolingLog, private readonly providers: Providers) {} @@ -67,7 +65,7 @@ export class ProviderCollection { } } - public invokeProviderFn(provider: (args: any) => any) { + public invokeProviderFn(provider: ProviderFn) { return ProviderCollection.callProviderFn(provider, { getService: this.getService, hasService: this.hasService, diff --git a/packages/kbn-test/src/functional_test_runner/lib/providers/read_provider_spec.ts b/packages/kbn-test/src/functional_test_runner/lib/providers/read_provider_spec.ts index 0e4c10b4a851e..573507eef404e 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/providers/read_provider_spec.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/providers/read_provider_spec.ts @@ -6,10 +6,20 @@ * Side Public License, v 1. */ +import { GenericFtrService } from '../../public_types'; + +export type ProviderConstructor = new (...args: any[]) => any; +export type ProviderFactory = (...args: any[]) => any; + +export function isProviderConstructor(x: unknown): x is ProviderConstructor { + return typeof x === 'function' && x.prototype instanceof GenericFtrService; +} + +export type ProviderFn = ProviderConstructor | ProviderFactory; export type Providers = ReturnType; export type Provider = Providers extends Array ? X : unknown; -export function readProviderSpec(type: string, providers: Record any>) { +export function readProviderSpec(type: string, providers: Record) { return Object.keys(providers).map((name) => { return { type, diff --git a/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.test.ts b/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.test.ts index 43f1508ab7938..2d417b5cdc807 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.test.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.test.ts @@ -12,11 +12,11 @@ import { join, resolve } from 'path'; import { ToolingLog } from '@kbn/tooling-log'; jest.mock('fs'); -jest.mock('@kbn/utils', () => { +jest.mock('@kbn/repo-info', () => { return { REPO_ROOT: '/dev/null/root' }; }); -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Lifecycle } from './lifecycle'; import { SuiteTracker } from './suite_tracker'; import { Suite } from '../fake_mocha_types'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.ts b/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.ts index 7832e89cb32c0..74e33321e1fab 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.ts @@ -9,7 +9,7 @@ import fs from 'fs'; import { dirname, relative, resolve } from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Lifecycle } from './lifecycle'; diff --git a/packages/kbn-test/src/functional_tests/lib/babel_register_for_test_plugins.js b/packages/kbn-test/src/functional_tests/lib/babel_register_for_test_plugins.js index 9888116e72272..823881ee4a31b 100644 --- a/packages/kbn-test/src/functional_tests/lib/babel_register_for_test_plugins.js +++ b/packages/kbn-test/src/functional_tests/lib/babel_register_for_test_plugins.js @@ -6,31 +6,20 @@ * Side Public License, v 1. */ -const Fs = require('fs'); const Path = require('path'); -const { REPO_ROOT: REPO_ROOT_FOLLOWING_SYMLINKS } = require('@kbn/utils'); -const BASE_REPO_ROOT = Path.resolve( - Fs.realpathSync(Path.resolve(REPO_ROOT_FOLLOWING_SYMLINKS, 'package.json')), - '..' -); +const { REPO_ROOT } = require('@kbn/repo-info'); -const transpileKbnPaths = [ - 'test', - 'x-pack/test', - 'examples', - 'x-pack/examples', - // TODO: should should probably remove this link back to the source - 'x-pack/plugins/task_manager/server/config.ts', - 'src/plugins/field_formats/common', -].map((path) => Path.resolve(BASE_REPO_ROOT, path)); - -// modifies all future calls to require() to automatically -// compile the required source with babel -require('@babel/register')({ - ignore: [/[\/\\](node_modules|target|dist)[\/\\]/], - only: transpileKbnPaths, - babelrc: false, - presets: [require.resolve('@kbn/babel-preset/node_preset')], - extensions: ['.js', '.ts', '.tsx'], +require('@kbn/babel-register').install({ + only: [ + 'test', + 'x-pack/test', + 'examples', + 'x-pack/examples', + // TODO: should should probably remove this link back to the source + 'x-pack/plugins/task_manager/server/config.ts', + 'src/plugins/field_formats/common', + 'packages', + 'x-pack/packages', + ].map((path) => Path.resolve(REPO_ROOT, path)), }); diff --git a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts index b367af4daf492..24f3eb9a527b2 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts @@ -9,7 +9,7 @@ import { resolve } from 'path'; import type { ToolingLog } from '@kbn/tooling-log'; import getPort from 'get-port'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import type { Config } from '../../functional_test_runner'; import { createTestEsCluster } from '../../es'; diff --git a/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts b/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts index 2ab4af2df2e2d..2f82d23d72874 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts @@ -11,7 +11,7 @@ import Os from 'os'; import Uuid from 'uuid'; import type { ProcRunner } from '@kbn/dev-proc-runner'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import type { Config } from '../../functional_test_runner'; import { DedicatedTaskRunner } from '../../functional_test_runner/lib'; diff --git a/packages/kbn-test/src/functional_tests/run_tests/flags.ts b/packages/kbn-test/src/functional_tests/run_tests/flags.ts index 7639ae341f071..5d7fffc2a965b 100644 --- a/packages/kbn-test/src/functional_tests/run_tests/flags.ts +++ b/packages/kbn-test/src/functional_tests/run_tests/flags.ts @@ -9,7 +9,7 @@ import Path from 'path'; import { v4 as uuidV4 } from 'uuid'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { FlagsReader, FlagOptions } from '@kbn/dev-cli-runner'; import { createFlagError } from '@kbn/dev-cli-errors'; diff --git a/packages/kbn-test/src/functional_tests/run_tests/run_tests.ts b/packages/kbn-test/src/functional_tests/run_tests/run_tests.ts index 3eb8348691a1b..e936264d8bf04 100644 --- a/packages/kbn-test/src/functional_tests/run_tests/run_tests.ts +++ b/packages/kbn-test/src/functional_tests/run_tests/run_tests.ts @@ -9,7 +9,7 @@ import Path from 'path'; import { setTimeout } from 'timers/promises'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; import { withProcRunner } from '@kbn/dev-proc-runner'; diff --git a/packages/kbn-test/src/functional_tests/start_servers/flags.test.ts b/packages/kbn-test/src/functional_tests/start_servers/flags.test.ts index a8498d9e4e49d..95c989b00cf1e 100644 --- a/packages/kbn-test/src/functional_tests/start_servers/flags.test.ts +++ b/packages/kbn-test/src/functional_tests/start_servers/flags.test.ts @@ -10,7 +10,7 @@ import Path from 'path'; import { getFlags, FlagsReader } from '@kbn/dev-cli-runner'; import { createAnyInstanceSerializer, createAbsolutePathSerializer } from '@kbn/jest-serializers'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { EsVersion } from '../../functional_test_runner'; import { parseFlags, FLAG_OPTIONS } from './flags'; diff --git a/packages/kbn-test/src/functional_tests/start_servers/flags.ts b/packages/kbn-test/src/functional_tests/start_servers/flags.ts index 99c7de9e53ea0..0f53ca6866fa8 100644 --- a/packages/kbn-test/src/functional_tests/start_servers/flags.ts +++ b/packages/kbn-test/src/functional_tests/start_servers/flags.ts @@ -11,7 +11,7 @@ import Path from 'path'; import { v4 as uuidV4 } from 'uuid'; import { FlagsReader, FlagOptions } from '@kbn/dev-cli-runner'; import { createFlagError } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { EsVersion } from '../../functional_test_runner'; diff --git a/packages/kbn-test/src/functional_tests/start_servers/start_servers.ts b/packages/kbn-test/src/functional_tests/start_servers/start_servers.ts index 3bb601fabe002..8c351db9b42f6 100644 --- a/packages/kbn-test/src/functional_tests/start_servers/start_servers.ts +++ b/packages/kbn-test/src/functional_tests/start_servers/start_servers.ts @@ -10,7 +10,7 @@ import Path from 'path'; import * as Rx from 'rxjs'; import dedent from 'dedent'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; import { withProcRunner } from '@kbn/dev-proc-runner'; import { getTimeReporter } from '@kbn/ci-stats-reporter'; diff --git a/packages/kbn-test/src/jest/integration_tests/__fixtures__/jest.config.js b/packages/kbn-test/src/jest/integration_tests/__fixtures__/jest.config.js deleted file mode 100644 index 0795e7f391669..0000000000000 --- a/packages/kbn-test/src/jest/integration_tests/__fixtures__/jest.config.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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. - */ - -const { resolve } = require('path'); -const { REPO_ROOT } = require('@kbn/utils'); - -module.exports = { - reporters: [ - 'default', - [ - `${REPO_ROOT}/node_modules/@kbn/test/target_node/src/jest/junit_reporter`, - { - reportName: 'JUnit Reporter Integration Test', - rootDirectory: resolve( - REPO_ROOT, - 'packages/kbn-test/src/jest/integration_tests/__fixtures__' - ), - }, - ], - ], -}; diff --git a/packages/kbn-test/src/jest/integration_tests/__fixtures__/test.js b/packages/kbn-test/src/jest/integration_tests/__fixtures__/test.js deleted file mode 100644 index 140b981482ff3..0000000000000 --- a/packages/kbn-test/src/jest/integration_tests/__fixtures__/test.js +++ /dev/null @@ -1,13 +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. - */ - -describe('JUnit Reporter', () => { - it('fails', () => { - throw new Error('failure'); - }); -}); diff --git a/packages/kbn-test/src/jest/integration_tests/junit_reporter.test.ts b/packages/kbn-test/src/jest/integration_tests/junit_reporter.test.ts deleted file mode 100644 index f2bf25067a9bd..0000000000000 --- a/packages/kbn-test/src/jest/integration_tests/junit_reporter.test.ts +++ /dev/null @@ -1,87 +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 { resolve } from 'path'; -import { promisify } from 'util'; -import { readFileSync } from 'fs'; - -import del from 'del'; -import execa from 'execa'; -import xml2js from 'xml2js'; -import { getUniqueJunitReportPath } from '../../report_path'; -import { REPO_ROOT } from '@kbn/utils'; - -const MINUTE = 1000 * 60; -const FIXTURE_DIR = resolve(__dirname, '__fixtures__'); -const TARGET_DIR = resolve(FIXTURE_DIR, 'target'); -const XML_PATH = getUniqueJunitReportPath(FIXTURE_DIR, 'JUnit Reporter Integration Test'); - -afterAll(async () => { - await del(TARGET_DIR); -}); - -const parseXml = promisify(xml2js.parseString); -it( - 'produces a valid junit report for failures', - async () => { - const result = await execa( - 'node', - [ - '--preserve-symlinks', - './node_modules/.bin/jest', - '--config', - 'packages/kbn-test/src/jest/integration_tests/__fixtures__/jest.config.js', - ], - { - cwd: REPO_ROOT, - env: { - CI: 'true', - }, - reject: false, - } - ); - - expect(result.exitCode).toBe(1); - await expect(parseXml(readFileSync(XML_PATH, 'utf8'))).resolves.toEqual({ - testsuites: { - $: { - failures: '1', - name: 'jest', - skipped: '0', - tests: '1', - time: expect.anything(), - timestamp: expect.anything(), - }, - testsuite: [ - { - $: { - failures: '1', - file: resolve(FIXTURE_DIR, './test.js'), - name: 'test.js', - skipped: '0', - tests: '1', - time: expect.anything(), - timestamp: expect.anything(), - }, - testcase: [ - { - $: { - classname: 'JUnit Reporter Integration Test.·', - name: 'JUnit Reporter fails', - time: expect.anything(), - }, - failure: [expect.stringMatching(/Error: failure\s+at /m)], - }, - ], - }, - ], - }, - }); - }, - 3 * MINUTE -); diff --git a/packages/kbn-optimizer/src/worker/run_worker_from_source.js b/packages/kbn-test/src/jest/junit_reporter/index.js similarity index 80% rename from packages/kbn-optimizer/src/worker/run_worker_from_source.js rename to packages/kbn-test/src/jest/junit_reporter/index.js index bebe984a447d6..5196e584cdd14 100644 --- a/packages/kbn-optimizer/src/worker/run_worker_from_source.js +++ b/packages/kbn-test/src/jest/junit_reporter/index.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('@kbn/optimizer').registerNodeAutoTranspilation(); -require('./run_worker'); +require('@kbn/babel-register').install(); +module.exports = require('./junit_reporter'); diff --git a/packages/kbn-test/src/jest/junit_reporter.ts b/packages/kbn-test/src/jest/junit_reporter/junit_reporter.ts similarity index 96% rename from packages/kbn-test/src/jest/junit_reporter.ts rename to packages/kbn-test/src/jest/junit_reporter/junit_reporter.ts index 6a1ce9d51ded9..edb109eaa7000 100644 --- a/packages/kbn-test/src/jest/junit_reporter.ts +++ b/packages/kbn-test/src/jest/junit_reporter/junit_reporter.ts @@ -11,12 +11,12 @@ import { writeFileSync, mkdirSync } from 'fs'; import xmlBuilder from 'xmlbuilder'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import type { Config } from '@jest/types'; import { AggregatedResult, Test, BaseReporter } from '@jest/reporters'; -import { escapeCdata } from '../mocha/xml'; -import { getUniqueJunitReportPath } from '../report_path'; +import { escapeCdata } from '../../mocha/xml'; +import { getUniqueJunitReportPath } from '../../report_path'; interface ReporterOptions { reportName?: string; diff --git a/packages/kbn-test/src/jest/resolver.js b/packages/kbn-test/src/jest/resolver.js new file mode 100644 index 0000000000000..9334cdbf74be5 --- /dev/null +++ b/packages/kbn-test/src/jest/resolver.js @@ -0,0 +1,101 @@ +/* + * 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. + */ + +// Inspired in a discussion found at https://github.com/facebook/jest/issues/5356 as Jest currently doesn't +// offer any other option to preserve symlinks. +// +// It would be available once https://github.com/facebook/jest/pull/9976 got merged. + +const Path = require('path'); +const resolve = require('resolve'); +const { REPO_ROOT } = require('@kbn/repo-info'); +const { readPackageMap } = require('@kbn/package-map'); + +const pkgMap = readPackageMap(); + +const APM_AGENT_MOCK = Path.resolve(__dirname, 'mocks/apm_agent_mock.ts'); +const CSS_MODULE_MOCK = Path.resolve(__dirname, 'mocks/css_module_mock.js'); +const STYLE_MOCK = Path.resolve(__dirname, 'mocks/style_mock.js'); +const FILE_MOCK = Path.resolve(__dirname, 'mocks/file_mock.js'); +const WORKER_MOCK = Path.resolve(__dirname, 'mocks/worker_module_mock.js'); + +const STATIC_FILE_EXT = + `jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga` + .split('|') + .map((e) => `.${e}`); + +/** + * @param {string} request + * @param {import('resolve').SyncOpts} options + * @returns + */ +module.exports = (request, options) => { + if (request === `@elastic/eui`) { + return module.exports(`@elastic/eui/test-env`, options); + } + + if (request.startsWith('@elastic/eui/lib/')) { + return module.exports(request.replace('@elastic/eui/lib/', '@elastic/eui/test-env/'), options); + } + + if (request === `elastic-apm-node`) { + return APM_AGENT_MOCK; + } + + const reqExt = Path.extname(request); + if (reqExt) { + const reqBasename = Path.basename(request, reqExt); + if ((reqExt === '.css' || reqExt === '.scss') && reqBasename.endsWith('.module')) { + return CSS_MODULE_MOCK; + } + + if (reqExt === '.css' || reqExt === '.less' || reqExt === '.scss') { + return STYLE_MOCK; + } + + if (STATIC_FILE_EXT.includes(reqExt)) { + return FILE_MOCK; + } + + if (reqExt === '.worker' && (reqBasename.endsWith('.ace') || reqBasename.endsWith('.editor'))) { + return WORKER_MOCK; + } + } + + if (request.startsWith('file-loader!') || request.startsWith('!!file-loader!')) { + return FILE_MOCK; + } + + if (request.startsWith('@kbn/')) { + const [, id, ...sub] = request.split('/'); + const pkgDir = pkgMap.get(`@kbn/${id}`); + if (!pkgDir) { + throw new Error( + `unable to resolve pkg import, pkg '@kbn/${id}' is not in the pkg map. Do you need to bootstrap?` + ); + } + + return resolve.sync(`./${pkgDir}${sub.length ? `/${sub.join('/')}` : ''}`, { + basedir: REPO_ROOT, + extensions: options.extensions, + }); + } + + try { + return resolve.sync(request, { + basedir: options.basedir, + extensions: options.extensions, + }); + } catch (error) { + if (error.code === 'MODULE_NOT_FOUND') { + return options.defaultResolver(request, options); + } + + throw error; + } +}; diff --git a/packages/kbn-test/src/jest/run.ts b/packages/kbn-test/src/jest/run.ts index 262d483dfd41b..c517e8d323dec 100644 --- a/packages/kbn-test/src/jest/run.ts +++ b/packages/kbn-test/src/jest/run.ts @@ -23,7 +23,7 @@ import { run } from 'jest'; import { ToolingLog } from '@kbn/tooling-log'; import { getTimeReporter } from '@kbn/ci-stats-reporter'; import { createFailError } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { map } from 'lodash'; import getopts from 'getopts'; import jestFlags from './jest_flags.json'; diff --git a/packages/kbn-test/src/jest/run_check_jest_configs_cli.ts b/packages/kbn-test/src/jest/run_check_jest_configs_cli.ts index 5adbe0afdbef0..b2628490d7497 100644 --- a/packages/kbn-test/src/jest/run_check_jest_configs_cli.ts +++ b/packages/kbn-test/src/jest/run_check_jest_configs_cli.ts @@ -9,7 +9,7 @@ import Path from 'path'; import { run } from '@kbn/dev-cli-runner'; import { createFailError } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getAllJestPaths, getTestsForConfigPaths } from './configs'; diff --git a/packages/kbn-test/src/jest/setup/babel_polyfill.js b/packages/kbn-test/src/jest/setup/babel_polyfill.js deleted file mode 100644 index 8d85e0043b8bf..0000000000000 --- a/packages/kbn-test/src/jest/setup/babel_polyfill.js +++ /dev/null @@ -1,12 +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. - */ - -// Note: In theory importing the polyfill should not be needed, as Babel should -// include the necessary polyfills when using `@babel/preset-env`, but for some -// reason it did not work. See https://github.com/elastic/kibana/issues/14506 -import '@kbn/optimizer/target_node/src/node/polyfill'; diff --git a/packages/kbn-test/src/jest/setup/preserve_symlinks_resolver.js b/packages/kbn-test/src/jest/setup/preserve_symlinks_resolver.js deleted file mode 100644 index 711bf2c9aa189..0000000000000 --- a/packages/kbn-test/src/jest/setup/preserve_symlinks_resolver.js +++ /dev/null @@ -1,30 +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. - */ - -// Inspired in a discussion found at https://github.com/facebook/jest/issues/5356 as Jest currently doesn't -// offer any other option to preserve symlinks. -// -// It would be available once https://github.com/facebook/jest/pull/9976 got merged. - -const resolve = require('resolve'); - -module.exports = (request, options) => { - try { - return resolve.sync(request, { - basedir: options.basedir, - extensions: options.extensions, - preserveSymlinks: true, - }); - } catch (error) { - if (error.code === 'MODULE_NOT_FOUND') { - return options.defaultResolver(request, options); - } - - throw error; - } -}; diff --git a/packages/kbn-test/src/jest/transforms/babel.js b/packages/kbn-test/src/jest/transforms/babel.js index f2fbbfe00b603..907a9a66297c6 100644 --- a/packages/kbn-test/src/jest/transforms/babel.js +++ b/packages/kbn-test/src/jest/transforms/babel.js @@ -18,6 +18,7 @@ module.exports = babelJest.default.createTransformer({ useBuiltIns: false, corejs: false, }, + 'kibana/ignoreAllPkgImports': true, }, ], ], diff --git a/packages/kbn-test/src/kbn/users.ts b/packages/kbn-test/src/kbn/users.ts index 9e35e9d7b6c01..b0db9e88ffc40 100644 --- a/packages/kbn-test/src/kbn/users.ts +++ b/packages/kbn-test/src/kbn/users.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -// @ts-expect-error no types import { SYSTEM_INDICES_SUPERUSER } from '@kbn/es'; const env = process.env; diff --git a/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts b/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts index 4b2b4da3f75c2..5259b50cfce85 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts @@ -15,7 +15,7 @@ import FormData from 'form-data'; import { isAxiosResponseError } from '@kbn/dev-utils'; import { createFailError } from '@kbn/dev-cli-errors'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { KbnClientRequester, uriencode, ReqOptions } from './kbn_client_requester'; import { KbnClientSavedObjects } from './kbn_client_saved_objects'; diff --git a/packages/kbn-test/src/mocha/junit_report_generation.js b/packages/kbn-test/src/mocha/junit_report_generation.js index 599d1f366194f..001fe79a38061 100644 --- a/packages/kbn-test/src/mocha/junit_report_generation.js +++ b/packages/kbn-test/src/mocha/junit_report_generation.js @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { dirname, relative } from 'path'; import { writeFileSync, mkdirSync } from 'fs'; import { inspect } from 'util'; diff --git a/packages/kbn-test/src/mocha/log_cache.js b/packages/kbn-test/src/mocha/log_cache.js index 669ad34463f47..e1c0030b53d17 100644 --- a/packages/kbn-test/src/mocha/log_cache.js +++ b/packages/kbn-test/src/mocha/log_cache.js @@ -12,7 +12,7 @@ const cachesRunnableLogs = new WeakMap(); /** * Add a chunk of log output to the cached * output for a suite - * @param {Mocha.Suite} suite + * @param {import('../functional_test_runner/fake_mocha_types').Suite} suite * @param {string} chunk */ export function recordLog(suite, chunk) { @@ -23,7 +23,7 @@ export function recordLog(suite, chunk) { /** * Recursively walk up from a runnable to collect * the cached log for its suite and all its parents - * @param {Mocha.Suite} suite + * @param {import('../functional_test_runner/fake_mocha_types').Suite} suite */ function getCurrentCachedSuiteLogs(suite) { const history = suite.parent ? getCurrentCachedSuiteLogs(suite.parent) : ''; @@ -35,6 +35,7 @@ function getCurrentCachedSuiteLogs(suite) { * Snapshot the logs from this runnable's suite at this point, * as the suite logs will get updated to include output from * subsequent runnables + * @param {import('../functional_test_runner/fake_mocha_types').Runnable} runnable * @param {Mocha.Runnable} runnable */ export function snapshotLogsForRunnable(runnable) { @@ -44,7 +45,7 @@ export function snapshotLogsForRunnable(runnable) { /** * Get the suite logs as they were when the logs for this runnable * were snapshotted - * @param {Mocha.Runnable} runnable + * @param {import('../functional_test_runner/fake_mocha_types').Runnable} runnable */ export function getSnapshotOfRunnableLogs(runnable) { return cachesRunnableLogs.get(runnable); diff --git a/packages/kbn-test/tsconfig.json b/packages/kbn-test/tsconfig.json index 282d23e8bcb12..b1f4e9f0a152a 100644 --- a/packages/kbn-test/tsconfig.json +++ b/packages/kbn-test/tsconfig.json @@ -1,18 +1,35 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": true, "types": ["jest", "node"] }, "include": [ "**/*.ts", "**/*.js", + "src/jest/jest_flags.json", ], "exclude": [ "types/**/*", - "**/__fixtures__/**/*" + "**/__fixtures__/**/*", + "target/**/*", + ], + "kbn_references": [ + "@kbn/dev-utils", + "@kbn/std", + "@kbn/tooling-log", + "@kbn/get-repo-files", + "@kbn/peggy", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/ci-stats-reporter", + "@kbn/repo-info", + "@kbn/es", + "@kbn/dev-proc-runner", + "@kbn/jest-serializers", + "@kbn/stdio-dev-helpers", + "@kbn/babel-register", + "@kbn/package-map", ] } diff --git a/packages/kbn-timelion-grammar/BUILD.bazel b/packages/kbn-timelion-grammar/BUILD.bazel deleted file mode 100644 index 7898fef88f1fc..0000000000000 --- a/packages/kbn-timelion-grammar/BUILD.bazel +++ /dev/null @@ -1,31 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-timelion-grammar" -PKG_REQUIRE_NAME = "@kbn/timelion-grammar" - -NPM_MODULE_EXTRA_FILES = [ - "index.js", - "chain.peggy", - "package.json", -] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-timelion-grammar/kibana.jsonc b/packages/kbn-timelion-grammar/kibana.jsonc index ec0f5079abb80..88b61e0c15872 100644 --- a/packages/kbn-timelion-grammar/kibana.jsonc +++ b/packages/kbn-timelion-grammar/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/timelion-grammar", - "owner": "@elastic/kibana-visualizations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-visualizations" } diff --git a/packages/kbn-timelion-grammar/tsconfig.json b/packages/kbn-timelion-grammar/tsconfig.json new file mode 100644 index 0000000000000..939903f56b523 --- /dev/null +++ b/packages/kbn-timelion-grammar/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": [ + "*.js", + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/packages/kbn-tinymath/BUILD.bazel b/packages/kbn-tinymath/BUILD.bazel deleted file mode 100644 index b9f1fb9daf849..0000000000000 --- a/packages/kbn-tinymath/BUILD.bazel +++ /dev/null @@ -1,52 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-tinymath" -PKG_REQUIRE_NAME = "@kbn/tinymath" - -SOURCE_FILES = glob( - [ - "src/**/*", - ] -) - -TYPE_FILES = [ - "index.d.ts", -] - -SRCS = SOURCE_FILES + TYPE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [ - "@npm//lodash", -] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES + [":srcs"], - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-tinymath/kibana.jsonc b/packages/kbn-tinymath/kibana.jsonc index 3a26322d2394b..dd790aee9fe9b 100644 --- a/packages/kbn-tinymath/kibana.jsonc +++ b/packages/kbn-tinymath/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/tinymath", - "owner": "@elastic/kibana-visualizations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-visualizations" } diff --git a/packages/kbn-tinymath/test/library.test.js b/packages/kbn-tinymath/test/library.test.js index 054d78fc60adb..fc5c94298d79c 100644 --- a/packages/kbn-tinymath/test/library.test.js +++ b/packages/kbn-tinymath/test/library.test.js @@ -11,7 +11,7 @@ Need tests for spacing, etc */ -import { evaluate, parse } from '@kbn/tinymath'; +import { evaluate, parse } from '../src'; function variableEqual(value) { return expect.objectContaining({ type: 'variable', value }); diff --git a/packages/kbn-tinymath/tsconfig.json b/packages/kbn-tinymath/tsconfig.json index 748eb53a69e3d..791a6d85a6853 100644 --- a/packages/kbn-tinymath/tsconfig.json +++ b/packages/kbn-tinymath/tsconfig.json @@ -1,4 +1,10 @@ { - "extends": "../../tsconfig.bazel.json", - "include": ["index.d.ts"] + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": ["index.d.ts"], + "exclude": [ + "target/**/*", + ] } diff --git a/packages/kbn-tooling-log/BUILD.bazel b/packages/kbn-tooling-log/BUILD.bazel deleted file mode 100644 index a61c6039312ae..0000000000000 --- a/packages/kbn-tooling-log/BUILD.bazel +++ /dev/null @@ -1,128 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-tooling-log" -PKG_REQUIRE_NAME = "@kbn/tooling-log" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//rxjs", - "@npm//tslib", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//rxjs", - "@npm//tslib", - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-some-dev-log:npm_module_types", - "//packages/kbn-jest-serializers:npm_module_types", # needed for windows development, only used in tests -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-tooling-log/kibana.jsonc b/packages/kbn-tooling-log/kibana.jsonc index 88eecfa75bf38..d855a7dc46c72 100644 --- a/packages/kbn-tooling-log/kibana.jsonc +++ b/packages/kbn-tooling-log/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/tooling-log", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-tooling-log/package.json b/packages/kbn-tooling-log/package.json index 45bdc79a120d8..eb1071293b982 100644 --- a/packages/kbn-tooling-log/package.json +++ b/packages/kbn-tooling-log/package.json @@ -2,7 +2,5 @@ "name": "@kbn/tooling-log", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-tooling-log/tsconfig.json b/packages/kbn-tooling-log/tsconfig.json index 57c1dd1c94e0f..7f4d0f5e1c7c8 100644 --- a/packages/kbn-tooling-log/tsconfig.json +++ b/packages/kbn-tooling-log/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/some-dev-log", + "@kbn/jest-serializers" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ts-project-linter-cli/README.md b/packages/kbn-ts-project-linter-cli/README.md new file mode 100644 index 0000000000000..d78e88f74e28d --- /dev/null +++ b/packages/kbn-ts-project-linter-cli/README.md @@ -0,0 +1,3 @@ +# @kbn/ts-project-linter-cli + +Empty package generated by @kbn/generate diff --git a/packages/kbn-ts-project-linter-cli/jest.config.js b/packages/kbn-ts-project-linter-cli/jest.config.js new file mode 100644 index 0000000000000..544d6f3afa2fb --- /dev/null +++ b/packages/kbn-ts-project-linter-cli/jest.config.js @@ -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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-ts-project-linter-cli'], +}; diff --git a/packages/kbn-ts-project-linter-cli/kibana.jsonc b/packages/kbn-ts-project-linter-cli/kibana.jsonc new file mode 100644 index 0000000000000..d92db6b071770 --- /dev/null +++ b/packages/kbn-ts-project-linter-cli/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/ts-project-linter-cli", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-ts-project-linter-cli/package.json b/packages/kbn-ts-project-linter-cli/package.json new file mode 100644 index 0000000000000..e82f4b23467b9 --- /dev/null +++ b/packages/kbn-ts-project-linter-cli/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/ts-project-linter-cli", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0", + "main": "./run_lint_ts_projects_cli" +} diff --git a/packages/kbn-ts-project-linter-cli/run_lint_ts_projects_cli.ts b/packages/kbn-ts-project-linter-cli/run_lint_ts_projects_cli.ts new file mode 100644 index 0000000000000..ea3c9dbd4cb06 --- /dev/null +++ b/packages/kbn-ts-project-linter-cli/run_lint_ts_projects_cli.ts @@ -0,0 +1,122 @@ +/* + * 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 Path from 'path'; + +import { run } from '@kbn/dev-cli-runner'; +import { createFailError } from '@kbn/dev-cli-errors'; +import { RepoPath } from '@kbn/repo-path'; +import { getRepoFiles } from '@kbn/get-repo-files'; +import { PROJECTS as ALL_PROJECTS, type Project } from '@kbn/ts-projects'; +import { lintProjects, ProjectFileMap } from '@kbn/ts-project-linter'; + +run( + async ({ log, flagsReader }) => { + const projectFilter = new Set( + flagsReader.arrayOfStrings('project')?.map((i) => Path.resolve(i)) + ); + const projects = projectFilter.size + ? ALL_PROJECTS.filter((p) => projectFilter.has(p.path)) + : ALL_PROJECTS; + + const projectFileMap = new ProjectFileMap(); + await projectFileMap.preload(ALL_PROJECTS); + + const { lintingErrorCount } = await lintProjects(log, projects, { + fix: flagsReader.boolean('fix'), + projectFileMap, + skipRefs: + flagsReader.boolean('refs-check') === false || + flagsReader.boolean('no-refs-check') === true, + }); + + let failed = lintingErrorCount > 0; + + const isInMultipleTsProjects = new Map>(); + const pathsToProject = new Map(); + for (const proj of ALL_PROJECTS) { + const paths = projectFileMap.getFiles(proj); + + for (const path of paths) { + if (!pathsToProject.has(path.repoRel)) { + pathsToProject.set(path.repoRel, proj); + continue; + } + + if (path.isTypeScriptAmbient()) { + continue; + } + + isInMultipleTsProjects.set( + path.repoRel, + new Set([...(isInMultipleTsProjects.get(path.repoRel) ?? []), proj]) + ); + } + } + + if (isInMultipleTsProjects.size) { + failed = true; + const details = Array.from(isInMultipleTsProjects) + .map( + ([repoRel, list]) => + ` - ${repoRel}:\n${Array.from(list) + .map((p) => ` - ${p.repoRel}`) + .join('\n')}` + ) + .join('\n'); + + log.error( + `The following files belong to multiple tsconfig.json files listed in packages/kbn-ts-projects/projects.ts\n${details}` + ); + } + + const isNotInTsProject: RepoPath[] = []; + for (const path of await getRepoFiles()) { + if (!path.isTypeScript() || path.isFixture()) { + continue; + } + + const proj = pathsToProject.get(path.repoRel); + if (proj === undefined) { + isNotInTsProject.push(path); + } + } + + if (isNotInTsProject.length) { + failed = true; + log.error( + `The following files do not belong to a tsconfig.json file, or that tsconfig.json file is not listed in packages/kbn-ts-projects/projects.ts\n${isNotInTsProject + .map((file) => ` - ${file.repoRel}`) + .join('\n')}` + ); + } + + if (failed) { + throw createFailError('see above errors'); + } else { + log.success('All TS files belong to a single ts project'); + } + }, + { + usage: `node scripts/ts_project_linter`, + flags: { + boolean: ['fix', 'refs-check', 'no-refs-check'], + string: ['project'], + alias: { f: 'fix', R: 'no-refs-check' }, + default: { 'refs-check': true }, + help: ` + --no-lint Disables linting rules, only validting that every file is a member of just one project + --project Focus linting on a specific project, disables project membership checks, can be specified multiple times + --fix Automatically fix some issues in tsconfig.json files + -R, --no-refs-check Disables the reference checking rules, making the linting much faster, but less accruate + `, + }, + description: + 'Check that all .ts and .tsx files in the repository are assigned to a tsconfig.json file', + } +); diff --git a/packages/kbn-ts-project-linter-cli/tsconfig.json b/packages/kbn-ts-project-linter-cli/tsconfig.json new file mode 100644 index 0000000000000..16064f5764818 --- /dev/null +++ b/packages/kbn-ts-project-linter-cli/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/repo-path", + "@kbn/get-repo-files", + "@kbn/ts-projects", + "@kbn/ts-project-linter", + ] +} diff --git a/packages/kbn-ts-project-linter/README.md b/packages/kbn-ts-project-linter/README.md new file mode 100644 index 0000000000000..68e886e6b66d8 --- /dev/null +++ b/packages/kbn-ts-project-linter/README.md @@ -0,0 +1,3 @@ +# @kbn/ts-project-linter + +Empty package generated by @kbn/generate diff --git a/packages/kbn-utils/src/package_json/index.test.ts b/packages/kbn-ts-project-linter/ast/ast.ts similarity index 57% rename from packages/kbn-utils/src/package_json/index.test.ts rename to packages/kbn-ts-project-linter/ast/ast.ts index 263e277dd3b4e..9881a9f96f002 100644 --- a/packages/kbn-utils/src/package_json/index.test.ts +++ b/packages/kbn-ts-project-linter/ast/ast.ts @@ -6,8 +6,12 @@ * Side Public License, v 1. */ -import { kibanaPackageJson } from '.'; +import { T, parseExpression } from './babel'; -it('parses package.json', () => { - expect(kibanaPackageJson.name).toEqual('kibana'); -}); +export function getAst(source: string) { + const ast = parseExpression(source); + if (!T.isObjectExpression(ast)) { + throw new Error('expected tsconfig.json file to be an object expression'); + } + return ast; +} diff --git a/packages/kbn-ts-project-linter/ast/babel.ts b/packages/kbn-ts-project-linter/ast/babel.ts new file mode 100644 index 0000000000000..911166a49f90a --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/babel.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 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 * as T from '@babel/types'; +import { parseExpression } from '@babel/parser'; +export { T, parseExpression }; diff --git a/packages/kbn-ts-project-linter/ast/compiler_options.test.ts b/packages/kbn-ts-project-linter/ast/compiler_options.test.ts new file mode 100644 index 0000000000000..7a421d966d724 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/compiler_options.test.ts @@ -0,0 +1,292 @@ +/* + * 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 dedent from 'dedent'; + +import { removeCompilerOption, setCompilerOption } from './compiler_options'; + +describe('removeCompilerOption()', () => { + it('handles strings with trailing comma', () => { + const updated = removeCompilerOption( + dedent` + { + "compilerOptions": { + "foo": "bar", + } + } + `, + 'foo' + ); + + expect(updated).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": { + } + }" + `); + }); + it('handles booleans with trailing comma', () => { + const updated = removeCompilerOption( + dedent` + { + "compilerOptions": { + "foo": true, + } + } + `, + 'foo' + ); + + expect(updated).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": { + } + }" + `); + }); + it('handles numbers with trailing comma', () => { + const updated = removeCompilerOption( + dedent` + { + "compilerOptions": { + "foo": 1, + } + } + `, + 'foo' + ); + + expect(updated).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": { + } + }" + `); + }); + it('handles inline properties', () => { + const updated = removeCompilerOption( + dedent` + { + "compilerOptions": {"foo": 1} + } + `, + 'foo' + ); + + expect(updated).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": {} + }" + `); + }); + it('handles inline properties with trailing commas', () => { + const updated = removeCompilerOption( + dedent` + { + "compilerOptions": {"foo": 1,} + } + `, + 'foo' + ); + + expect(updated).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": {} + }" + `); + }); +}); + +describe('setCompilerOptions()', () => { + it('updated existing compiler options', () => { + expect( + setCompilerOption( + dedent` + { + "compilerOptions": {"foo": 1} + } + `, + 'foo', + 2 + ) + ).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": {\\"foo\\": 2} + }" + `); + + expect( + setCompilerOption( + dedent` + { + "compilerOptions": {"foo": true} + } + `, + 'foo', + 2 + ) + ).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": {\\"foo\\": 2} + }" + `); + + expect( + setCompilerOption( + dedent` + { + "compilerOptions": {"foo": "bar"} + } + `, + 'foo', + 2 + ) + ).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": {\\"foo\\": 2} + }" + `); + + expect( + setCompilerOption( + dedent` + { + "compilerOptions": { + "foo": "bar" + } + } + `, + 'foo', + 2 + ) + ).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": { + \\"foo\\": 2 + } + }" + `); + + expect( + setCompilerOption( + dedent` + { + "compilerOptions": { + "foo": "bar", + } + } + `, + 'foo', + 2 + ) + ).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": { + \\"foo\\": 2, + } + }" + `); + }); + + it('expands single line compiler options', () => { + expect( + setCompilerOption( + dedent` + { + "compilerOptions": {"foo": 1} + } + `, + 'bar', + 2 + ) + ).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": { + \\"foo\\": 1, + \\"bar\\": 2 + } + }" + `); + }); + + it('adds to multi-line compiler options', () => { + expect( + setCompilerOption( + dedent` + { + "compilerOptions": { + "foo": 1 + } + } + `, + 'bar', + 2 + ) + ).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": { + \\"foo\\": 1, + \\"bar\\": 2 + } + }" + `); + + expect( + setCompilerOption( + dedent` + { + "compilerOptions": { + "foo": 1, + } + } + `, + 'bar', + 2 + ) + ).toMatchInlineSnapshot(` + "{ + \\"compilerOptions\\": { + \\"foo\\": 1, + \\"bar\\": 2, + } + }" + `); + + expect( + setCompilerOption( + removeCompilerOption( + dedent` + { + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "skipLibCheck": false + }, + "include": [ + "expect.d.ts" + ] + } + `, + 'skipLibCheck' + ), + + 'outDir', + 'foo/bar' + ) + ).toMatchInlineSnapshot(` + "{ + \\"extends\\": \\"../../tsconfig.base.json\\", + \\"compilerOptions\\": { + \\"outDir\\": \\"foo/bar\\" + }, + \\"include\\": [ + \\"expect.d.ts\\" + ] + }" + `); + }); +}); diff --git a/packages/kbn-ts-project-linter/ast/compiler_options.ts b/packages/kbn-ts-project-linter/ast/compiler_options.ts new file mode 100644 index 0000000000000..9b368d5ee4a57 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/compiler_options.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { Jsonc } from '@kbn/bazel-packages'; + +import { T } from './babel'; +import { getAst } from './ast'; +import { getEnds, getExpandedEnds } from './ends'; +import { getProp, getEndOfLastProp } from './props'; + +export function getCompilerOptions(source: string) { + const compilerOptions = getProp(getAst(source), 'compilerOptions'); + if (!compilerOptions) { + throw new Error('unable to find compilerOptions property'); + } + if (!T.isObjectExpression(compilerOptions.value)) { + throw new Error('expected compilerOptions property to be an object expression'); + } + + return compilerOptions.value; +} + +export function setCompilerOption(source: string, name: string, value: any) { + const compilerOptions = getCompilerOptions(source); + + const existing = getProp(compilerOptions, name); + if (existing) { + const [start, end] = getEnds(existing.value); + return source.slice(0, start) + JSON.stringify(value) + source.slice(end); + } + + if ( + !compilerOptions.properties.length || + compilerOptions.loc?.start.line === compilerOptions.loc?.end.line + ) { + // convert to multiline + const orig = (Jsonc.parse(source) as any).compilerOptions; + const [start, end] = getEnds(compilerOptions); + return ( + source.slice(0, start) + + JSON.stringify( + { + ...orig, + [name]: value, + }, + null, + 2 + ) + .split('\n') + .map((l, i) => (i === 0 ? l : ` ${l}`)) + .join('\n') + + source.slice(end) + ); + } + + const endOfLastProp = getEndOfLastProp(compilerOptions); + let left = source.slice(0, endOfLastProp); + while (left.at(-1) === ',') { + left = left.slice(0, -1); + } + const right = source.slice(endOfLastProp); + return left + `,\n ${JSON.stringify(name)}: ${JSON.stringify(value)}` + right; +} + +export function removeCompilerOption(source: string, name: string) { + const compilerOptions = getCompilerOptions(source); + + const culprit = getProp(compilerOptions, name); + if (!culprit) { + throw new Error(`unable to find compiler option "${name}"`); + } + + const [start, end] = getExpandedEnds(source, culprit); + return source.slice(0, start) + source.slice(end); +} diff --git a/packages/kbn-ts-project-linter/ast/ends.test.ts b/packages/kbn-ts-project-linter/ast/ends.test.ts new file mode 100644 index 0000000000000..eff2161363424 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/ends.test.ts @@ -0,0 +1,43 @@ +/* + * 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 { getAst } from './ast'; +import { getProp } from './props'; +import { getEnds, getExpandedEnds } from './ends'; + +const source = `{ + "foo": "bar", +}`; +const ast = getAst(source); +const foo = getProp(ast, 'foo')!; + +describe('getEnds()', () => { + it('returns the index of the first char of a node, and the index just past the last char', () => { + expect(getEnds(foo.value)).toMatchInlineSnapshot(` + Array [ + 11, + 16, + ] + `); + expect(source.slice(...getEnds(foo.value))).toMatchInlineSnapshot(`"\\"bar\\""`); + }); +}); + +describe('getExpandedEnds()', () => { + it('returns the index of the first char of whitespace preceding a node, and the index just past the last char and optionally trailing comma', () => { + expect(getExpandedEnds(source, foo.value)).toMatchInlineSnapshot(` + Array [ + 10, + 17, + ] + `); + expect(source.slice(...getExpandedEnds(source, foo.value))).toMatchInlineSnapshot( + `" \\"bar\\","` + ); + }); +}); diff --git a/packages/kbn-ts-project-linter/ast/ends.ts b/packages/kbn-ts-project-linter/ast/ends.ts new file mode 100644 index 0000000000000..4d0d23076fc74 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/ends.ts @@ -0,0 +1,30 @@ +/* + * 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 * as T from '@babel/types'; + +export function getEnds(node: T.Node): [number, number] { + const { start, end } = node; + if (start == null || end == null) { + throw new Error('missing start/end of node'); + } + return [start, end]; +} + +export function getExpandedEnds(source: string, node: T.Node): [number, number] { + let [start, end] = getEnds(node); + while (source[start - 1] === ' ' || source[start - 1] === '\n') { + start -= 1; + } + + while (source[end] === ',') { + end += 1; + } + + return [start, end]; +} diff --git a/packages/kbn-ts-project-linter/ast/exclude.test.ts b/packages/kbn-ts-project-linter/ast/exclude.test.ts new file mode 100644 index 0000000000000..9539eaed9298e --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/exclude.test.ts @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 dedent from 'dedent'; + +import { setExclude } from './exclude'; + +describe('setExclude()', () => { + it('overwrites previous formatting', () => { + expect( + setExclude( + dedent` + { + "exclude": [1, 2, + "foo" + ] + } + `, + ['1', 'bar'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"exclude\\": [ + \\"1\\", + \\"bar\\", + ] + }" + `); + }); + + it('adds the property at the end if it does not exist', () => { + expect( + setExclude( + dedent` + { + "foo": 1 + } + `, + ['1', 'bar'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"foo\\": 1, + \\"exclude\\": [ + \\"1\\", + \\"bar\\", + ] + }" + `); + expect( + setExclude( + dedent` + { + "foo": 1, + } + `, + ['1', 'bar'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"foo\\": 1, + \\"exclude\\": [ + \\"1\\", + \\"bar\\", + ], + }" + `); + }); +}); diff --git a/packages/kbn-ts-project-linter/ast/exclude.ts b/packages/kbn-ts-project-linter/ast/exclude.ts new file mode 100644 index 0000000000000..c66cd9a21af42 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/exclude.ts @@ -0,0 +1,28 @@ +/* + * 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 { getAst } from './ast'; +import { getProp } from './props'; +import { getEnds } from './ends'; +import { getEndOfLastProp } from './props'; + +export function setExclude(source: string, excludes: string[]) { + const ast = getAst(source); + const newExcludes = `"exclude": [\n${excludes + .map((e) => ` ${JSON.stringify(e)},`) + .join('\n')}\n ]`; + + const existing = getProp(ast, 'exclude'); + if (existing) { + const [start, end] = getEnds(existing); + return source.slice(0, start) + newExcludes + source.slice(end); + } + + const endOfLastProp = getEndOfLastProp(ast); + return source.slice(0, endOfLastProp) + `,\n ${newExcludes}` + source.slice(endOfLastProp); +} diff --git a/packages/kbn-optimizer/src/node/transforms/index.ts b/packages/kbn-ts-project-linter/ast/index.ts similarity index 63% rename from packages/kbn-optimizer/src/node/transforms/index.ts rename to packages/kbn-ts-project-linter/ast/index.ts index bda2dcfa19826..83fd16c681986 100644 --- a/packages/kbn-optimizer/src/node/transforms/index.ts +++ b/packages/kbn-ts-project-linter/ast/index.ts @@ -6,10 +6,6 @@ * Side Public License, v 1. */ -import { peggyTransform } from './peggy'; -import { babelTransform } from './babel'; - -export const TRANSFORMS = { - '.peggy': peggyTransform, - default: babelTransform, -}; +export { removeCompilerOption, setCompilerOption } from './compiler_options'; +export { setExclude } from './exclude'; +export { addReferences, removeReferences, replaceReferences } from './references'; diff --git a/packages/kbn-ts-project-linter/ast/props.ts b/packages/kbn-ts-project-linter/ast/props.ts new file mode 100644 index 0000000000000..00549a291b967 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/props.ts @@ -0,0 +1,24 @@ +/* + * 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 { T } from './babel'; +import { getEnds } from './ends'; + +export function getProp(obj: T.ObjectExpression, name: string) { + return obj.properties.find((p): p is T.ObjectProperty & { key: T.StringLiteral } => { + return T.isObjectProperty(p) && T.isStringLiteral(p.key) && p.key.value === name; + }); +} + +export function getEndOfLastProp(obj: T.ObjectExpression) { + if (obj.properties.length === 0) { + throw new Error('object has no properties'); + } + + return obj.properties.reduce((acc, prop) => Math.max(acc, getEnds(prop)[1]), 0); +} diff --git a/packages/kbn-ts-project-linter/ast/references.test.ts b/packages/kbn-ts-project-linter/ast/references.test.ts new file mode 100644 index 0000000000000..cd3a071bddac3 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/references.test.ts @@ -0,0 +1,215 @@ +/* + * 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 dedent from 'dedent'; + +import { addReferences, removeReferences, replaceReferences } from './references'; + +describe('addReferences()', () => { + it('replaces single line refs', () => { + expect( + addReferences( + dedent` + { + "kbn_references": [] + } + `, + ['foo', 'bar'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"kbn_references\\": [ + \\"foo\\", + \\"bar\\", + ] + }" + `); + expect( + addReferences( + dedent` + { + "kbn_references": [{"path": "x"}] + } + `, + ['foo', 'bar'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"kbn_references\\": [ + { \\"path\\": \\"x\\" }, + \\"foo\\", + \\"bar\\", + ] + }" + `); + }); + it('adds items to the end of existing expanded lists', () => { + expect( + addReferences( + dedent` + { + "kbn_references": [ + // this is a comment + {"path": "b" }, + "other", + "x", + ] + } + `, + ['foo', 'bar'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"kbn_references\\": [ + // this is a comment + {\\"path\\": \\"b\\" }, + \\"other\\", + \\"x\\", + \\"foo\\", + \\"bar\\", + ] + }" + `); + expect( + addReferences( + dedent` + { + "kbn_references": [ + // this is a comment + {"path": "b" }, + "other", + "x" + ] + } + `, + ['foo', 'bar'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"kbn_references\\": [ + // this is a comment + {\\"path\\": \\"b\\" }, + \\"other\\", + \\"x\\", + \\"foo\\", + \\"bar\\" + ] + }" + `); + }); +}); + +describe('removeReferences()', () => { + it('throws if the values are not found', () => { + expect(() => + removeReferences( + dedent` + { + "kbn_references": [] + } + `, + ['foo'] + ) + ).toThrowErrorMatchingInlineSnapshot(`"unable to find reference \\"foo\\""`); + }); + it('adds removes items from single-line and expanded lists', () => { + expect( + removeReferences( + dedent` + { + "kbn_references": ["foo", "bar", "baz"] + } + `, + ['foo', 'bar'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"kbn_references\\": [ \\"baz\\"] + }" + `); + expect( + removeReferences( + dedent` + { + "kbn_references": [ + // this is a comment + {"path": "b" }, + "other", + "x", + ] + } + `, + ['other', 'x'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"kbn_references\\": [ + // this is a comment + {\\"path\\": \\"b\\" }, + ] + }" + `); + expect( + removeReferences( + dedent` + { + "kbn_references": [ + // this is a comment + {"path": "b" }, + "other", + "x" + ] + } + `, + ['other'] + ) + ).toMatchInlineSnapshot(` + "{ + \\"kbn_references\\": [ + // this is a comment + {\\"path\\": \\"b\\" }, + \\"x\\" + ] + }" + `); + }); +}); + +describe('replaceReferences()', () => { + it('removes the old path refs and replaces them with the given pkgId', () => { + expect( + replaceReferences( + dedent` + { + "kbn_references": [ + "@kbn/core", + { + "path": "foo", + }, + "@kbn/other", + { "path": "bar" } + ] + } + `, + [ + ['foo', '@kbn/a'], + ['bar', '@kbn/b'], + ] + ) + ).toMatchInlineSnapshot(` + "{ + \\"kbn_references\\": [ + \\"@kbn/core\\", + \\"@kbn/a\\", + \\"@kbn/other\\", + \\"@kbn/b\\" + ] + }" + `); + }); +}); diff --git a/packages/kbn-ts-project-linter/ast/references.ts b/packages/kbn-ts-project-linter/ast/references.ts new file mode 100644 index 0000000000000..6b3563f0e9111 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/references.ts @@ -0,0 +1,110 @@ +/* + * 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 { T } from './babel'; +import { getAst } from './ast'; +import { getEnds, getExpandedEnds } from './ends'; +import { getProp, getEndOfLastProp } from './props'; +import { snip } from './snip'; + +const PROP = 'kbn_references'; + +export function addReferences(source: string, refsToAdd: string[]) { + const ast = getAst(source); + + const existing = getProp(ast, PROP); + const value = existing?.value; + if (value && !T.isArrayExpression(value)) { + throw new Error(`expected "${PROP}" to have an array value`); + } + + if (value && value.elements.length > 0 && value.loc?.start.line !== value.loc?.end.line) { + const lastEl = value.elements.at(-1); + if (!lastEl) { + throw new Error('missing last element...'); + } + + const [, endOfLastEl] = getEnds(lastEl); + return ( + source.slice(0, endOfLastEl) + + `,\n${refsToAdd.map((r) => ` ${JSON.stringify(r)}`).join(',\n')}` + + source.slice(endOfLastEl) + ); + } + + // replace/print JSON printed refs + const refs = [...(!value ? [] : JSON.parse(source.slice(...getEnds(value)))), ...refsToAdd]; + const refsSrc = `${JSON.stringify(PROP)}: [\n${refs + .map((l) => + typeof l === 'string' + ? ` ${JSON.stringify(l)},` + : ` { "path": ${JSON.stringify(l.path)} },` + ) + .join('\n')}\n ]`; + + if (!existing) { + const endOfLastProp = getEndOfLastProp(ast); + return source.slice(0, endOfLastProp) + `,\n ${refsSrc}` + source.slice(endOfLastProp); + } + + const [start, end] = getEnds(existing); + return source.slice(0, start) + refsSrc + source.slice(end); +} + +export function removeReferences(source: string, refs: string[]) { + const ast = getAst(source); + + const existing = getProp(ast, PROP); + const value = existing?.value; + if (!value || !T.isArrayExpression(value)) { + throw new Error(`expected "${PROP}" to have an array value`); + } + + return snip( + source, + refs.map((ref) => { + const el = value.elements.find((e) => T.isStringLiteral(e) && e.value === ref); + if (!el) { + throw new Error(`unable to find reference "${ref}"`); + } + + return getExpandedEnds(source, el); + }) + ); +} + +export function replaceReferences( + source: string, + replacements: Array<[path: string, pkgId: string]> +) { + const ast = getAst(source); + + const existing = getProp(ast, PROP); + const value = existing?.value; + if (!value || !T.isArrayExpression(value)) { + throw new Error(`expected "${PROP}" to have an array value`); + } + + return snip( + source, + replacements.map(([path, pkgId]) => { + const el = value.elements.find((e) => { + if (!T.isObjectExpression(e)) return; + const prop = getProp(e, 'path'); + if (!prop || !T.isStringLiteral(prop.value)) return; + return prop.value.value === path; + }); + + if (!el) { + throw new Error(`unable to find reference with path "${path}"`); + } + + return [...getEnds(el), JSON.stringify(pkgId)]; + }) + ); +} diff --git a/packages/kbn-ts-project-linter/ast/snip.test.ts b/packages/kbn-ts-project-linter/ast/snip.test.ts new file mode 100644 index 0000000000000..b3047d1360cd7 --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/snip.test.ts @@ -0,0 +1,54 @@ +/* + * 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 dedent from 'dedent'; +import { snip } from './snip'; + +describe('snip()', () => { + it('removes ranges from a string', () => { + expect(snip('abcd', [[0, 1]])).toBe('bcd'); + expect( + snip('abcd', [ + [0, 1], + [2, 3], + ]) + ).toBe('bd'); + }); + + it('handles weirdly ordered and overlapping ranges', () => { + expect( + snip( + dedent` + This is the sentence and I would like to remove specific words to make it say something else. + `, + [ + [29, 59], + [30, 41], + [78, 80], + [12, 25], + [87, 92], + ] + ) + ).toMatchInlineSnapshot(`"This is the I words to make it say mething."`); + }); + + it('throws if the snips are misordered', () => { + expect(() => snip('foo', [[2, 1]])).toThrowErrorMatchingInlineSnapshot( + `"snips can not be reversed, received [2,1]"` + ); + }); + + it("supports snips with replacements, as long as they don't overlap", () => { + expect( + snip('foo bar', [ + [2, 3, 'Oo0'], + [4, 5, 'BbB'], + ]) + ).toMatchInlineSnapshot(`"foOo0 BbBar"`); + }); +}); diff --git a/packages/kbn-ts-project-linter/ast/snip.ts b/packages/kbn-ts-project-linter/ast/snip.ts new file mode 100644 index 0000000000000..c9c9915475e0e --- /dev/null +++ b/packages/kbn-ts-project-linter/ast/snip.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +type Snip = [number, number] | [number, number, string]; +export function snip(source: string, snips: Snip[]) { + const queue = snips + .map((s): Snip => { + if (s[0] > s[1]) { + throw new Error(`snips can not be reversed, received [${s}]`); + } + return s; + }) + // sort snips by their starting position + .sort((a, b) => a[0] - b[0]) + // merge snips that overlap + .reduce((acc: Snip[], s) => { + const prev = acc.at(-1); + if (!prev || prev[1] < s[0]) { + return [...acc, s]; + } + + if (prev[2] || s[2]) { + throw new Error('snip() does not support replacement snips which overlap'); + } + + const merged: Snip = [Math.min(prev[0], s[0]), Math.max(prev[1], s[1])]; + return [...acc.slice(0, -1), merged]; + }, []); + + let offset = 0; + let snipped = source; + for (const [start, end, replacement = ''] of queue) { + snipped = snipped.slice(0, start + offset) + replacement + snipped.slice(end + offset); + const origLen = end - start; + offset += replacement.length - origLen; + } + + return snipped; +} diff --git a/packages/kbn-ts-project-linter/index.ts b/packages/kbn-ts-project-linter/index.ts new file mode 100644 index 0000000000000..7dd644fd6c4b2 --- /dev/null +++ b/packages/kbn-ts-project-linter/index.ts @@ -0,0 +1,10 @@ +/* + * 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. + */ + +export { lintProjects } from './lib/lint_projects'; +export { ProjectFileMap } from './lib/project_file_map'; diff --git a/packages/kbn-ts-project-linter/jest.config.js b/packages/kbn-ts-project-linter/jest.config.js new file mode 100644 index 0000000000000..fb273e1cafeaf --- /dev/null +++ b/packages/kbn-ts-project-linter/jest.config.js @@ -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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-ts-project-linter'], +}; diff --git a/packages/kbn-ts-project-linter/kibana.jsonc b/packages/kbn-ts-project-linter/kibana.jsonc new file mode 100644 index 0000000000000..ea1fe1715beeb --- /dev/null +++ b/packages/kbn-ts-project-linter/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/ts-project-linter", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-ts-project-linter/lib/import_locator.ts b/packages/kbn-ts-project-linter/lib/import_locator.ts new file mode 100644 index 0000000000000..20d6ab013fcb3 --- /dev/null +++ b/packages/kbn-ts-project-linter/lib/import_locator.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +// based on the code in https://github.com/nrwl/nx/blob/e12922b02908c90797e038324f2afa4bf69e2eab/packages/nx/src/project-graph/build-dependencies/typescript-import-locator.ts#L62 +// simplified to focuse on what we need, see license info in ./strip_source_code + +import Fsp from 'fs/promises'; +import Ts from 'typescript'; +import { RepoPath } from '@kbn/repo-path'; + +import { stripSourceCode } from './strip_source_code'; + +const EMPTY = new Set(); + +export class TypeScriptImportLocator { + private readonly scanner: Ts.Scanner; + + constructor() { + this.scanner = Ts.createScanner(Ts.ScriptTarget.Latest, false, Ts.LanguageVariant.JSX); + } + + async get(path: RepoPath): Promise> { + const content = await Fsp.readFile(path.abs, 'utf8'); + const strippedContent = stripSourceCode(this.scanner, content); + if (strippedContent === '') { + return EMPTY; + } + + const imports = new Set(); + const queue: Ts.Node[] = [ + Ts.createSourceFile(path.abs, strippedContent, Ts.ScriptTarget.Latest, true), + ]; + const addNodeToQueue = (n: Ts.Node) => { + queue.push(n); + }; + + while (queue.length) { + const node = queue.shift()!; + + if ( + (Ts.isImportDeclaration(node) || Ts.isExportDeclaration(node)) && + node.moduleSpecifier && + Ts.isStringLiteral(node.moduleSpecifier) + ) { + imports.add(node.moduleSpecifier.text); + continue; + } + + if ( + Ts.isCallExpression(node) && + node.expression.kind === Ts.SyntaxKind.ImportKeyword && + node.arguments.length === 1 && + Ts.isStringLiteral(node.arguments[0]) + ) { + imports.add(node.arguments[0].text); + continue; + } + + if ( + Ts.isCallExpression(node) && + node.expression.getText() === 'require' && + node.arguments.length === 1 && + Ts.isStringLiteral(node.arguments[0]) + ) { + imports.add(node.arguments[0].text); + continue; + } + + Ts.forEachChild(node, addNodeToQueue); + } + + return imports; + } +} diff --git a/packages/kbn-ts-project-linter/lib/lint_projects.ts b/packages/kbn-ts-project-linter/lib/lint_projects.ts new file mode 100644 index 0000000000000..590b886563097 --- /dev/null +++ b/packages/kbn-ts-project-linter/lib/lint_projects.ts @@ -0,0 +1,117 @@ +/* + * 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 Fs from 'fs'; +import Path from 'path'; + +import { ToolingLog } from '@kbn/tooling-log'; +import { Project } from '@kbn/ts-projects'; + +import { PROJECT_LINTER_RULES } from '../rules'; +import { ProjectFileMap } from './project_file_map'; +import { Rule, NamedViolation } from './rule'; + +export interface LintOptions { + fix: boolean; + projectFileMap: ProjectFileMap; + skipRefs?: boolean; +} + +export async function lintProjects(log: ToolingLog, projects: Project[], options: LintOptions) { + let errorCount = 0; + let fixedCount = 0; + const ruleCache = new Map(); + + if (options.skipRefs) { + log.warning('skipping [referenceUsedPkgs] rule'); + } + + for (const project of projects) { + log.debug('starting to lint project:', project.name); + const unfixedJsonc = Fs.readFileSync(project.path, 'utf8'); + const unfixedErrors: NamedViolation[] = []; + let fixedJsonc = unfixedJsonc; + + await log.indent(4, async () => { + let haveNewFixes = false; + + for (const rule of PROJECT_LINTER_RULES) { + if (options.skipRefs && rule.name === 'referenceUsedPkgs') { + continue; + } + + if (haveNewFixes) { + haveNewFixes = false; + log.debug('overriding config with fixed config'); + project.overrideConfig(fixedJsonc); + } + + log.debug('rule:', rule.name); + await log.indent(4, async () => { + const errors = await rule.check(project, ruleCache, options.projectFileMap); + for (const error of errors) { + if (!error.fix || !options.fix) { + unfixedErrors.push(error); + continue; + } + + let update; + try { + update = error.fix(fixedJsonc); + } catch (e) { + log.debug(`error fixing project:`, e); + } + + if (update !== undefined && update !== fixedJsonc) { + fixedJsonc = update; + haveNewFixes = true; + } else { + unfixedErrors.push(error); + } + } + }); + } + }); + + if (fixedJsonc !== unfixedJsonc) { + Fs.writeFileSync(project.path, fixedJsonc, 'utf8'); + project.reloadFromDisk(); + log.debug('fixed', project.path); + fixedCount += 1; + } + + if (unfixedErrors.length) { + let msg = `Lint errors in ${Path.relative(process.cwd(), project.path)}:\n`; + for (const error of unfixedErrors) { + msg += ` [${error.name}]: ${error.msg}\n`; + } + errorCount += 1; + log.error(msg); + } + } + + if (fixedCount) { + log.success(`Applied ${fixedCount} fixes to projects`); + } + + if (errorCount) { + if (options.fix) { + log.error(`Found ${errorCount} un-fixable errors when linting projects.`); + } else { + log.error( + `Found ${errorCount} errors when linting projects. Pass --fix to try auto-fixing them.` + ); + } + } else { + log.success('All TS projects linted successfully'); + } + + return { + lintingErrorCount: errorCount, + }; +} diff --git a/packages/kbn-ts-project-linter/lib/project_file_map.ts b/packages/kbn-ts-project-linter/lib/project_file_map.ts new file mode 100644 index 0000000000000..eac7e369b7fc0 --- /dev/null +++ b/packages/kbn-ts-project-linter/lib/project_file_map.ts @@ -0,0 +1,58 @@ +/* + * 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 Path from 'path'; + +import globby from 'globby'; + +import { asyncForEachWithLimit } from '@kbn/std'; +import { RepoPath } from '@kbn/repo-path'; +import { REPO_ROOT } from '@kbn/repo-info'; +import { Project } from '@kbn/ts-projects'; + +export class ProjectFileMap { + private readonly filesByProject = new Map(); + + async preload(projects: Project[]) { + await asyncForEachWithLimit(projects, 5, async (project) => { + const paths = await globby(project.config.include ?? [], { + ignore: project.config.exclude ?? [], + cwd: project.directory, + onlyFiles: true, + absolute: true, + }); + + this.filesByProject.set( + project, + paths.map((path) => new RepoPath(REPO_ROOT, Path.relative(REPO_ROOT, path))) + ); + }); + } + + getFiles(project: Project) { + const cached = this.filesByProject.get(project); + if (cached) { + return cached; + } + + const files = globby + .sync(project.config.include ?? [], { + ignore: project.config.exclude ?? [], + cwd: project.directory, + onlyFiles: true, + absolute: true, + }) + .map((abs) => { + return new RepoPath(REPO_ROOT, Path.relative(REPO_ROOT, abs)); + }); + + this.filesByProject.set(project, files); + + return files; + } +} diff --git a/packages/kbn-ts-project-linter/lib/rule.ts b/packages/kbn-ts-project-linter/lib/rule.ts new file mode 100644 index 0000000000000..6a1b92803af7f --- /dev/null +++ b/packages/kbn-ts-project-linter/lib/rule.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 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 { Project } from '@kbn/ts-projects'; + +import { ProjectFileMap } from './project_file_map'; +import { RuleContext } from './rule_context'; + +export interface NamedViolation extends Violation { + name: string; +} + +export interface Violation { + msg: string; + fix?(source: string): string; +} + +export type CheckFn = ( + this: RuleContext, + project: Project +) => void | Violation[] | Violation | string | Promise; + +export class Rule { + static create(name: string, options: { check: CheckFn }) { + return new Rule(name, options.check); + } + + private constructor(public readonly name: string, private readonly fn: CheckFn) {} + + async check(project: Project, ruleCache: Map, projectFileMap: ProjectFileMap) { + const failures: NamedViolation[] = []; + + const ctx = new RuleContext(failures, project, this, ruleCache, projectFileMap); + const extraFailures = (await this.fn.call(ctx, project)) ?? []; + + for (const failure of Array.isArray(extraFailures) ? extraFailures : [extraFailures]) { + if (typeof failure === 'string') { + failures.push({ + name: this.name, + msg: failure, + }); + } else { + failures.push({ + name: this.name, + ...failure, + }); + } + } + + return failures; + } +} diff --git a/packages/kbn-ts-project-linter/lib/rule_context.ts b/packages/kbn-ts-project-linter/lib/rule_context.ts new file mode 100644 index 0000000000000..cdf05278f5d7c --- /dev/null +++ b/packages/kbn-ts-project-linter/lib/rule_context.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 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 Path from 'path'; + +import { Project } from '@kbn/ts-projects'; + +import { ProjectFileMap } from './project_file_map'; +import { NamedViolation, Rule } from './rule'; + +export class RuleContext { + constructor( + private readonly failures: NamedViolation[], + private readonly project: Project, + private readonly rule: Rule, + private readonly ruleCache: Map, + private readonly projectFileMap: ProjectFileMap + ) {} + + getCache(init: () => T) { + const cached = this.ruleCache.get(this.rule) as T | undefined; + if (cached !== undefined) { + return cached; + } + + const value = init(); + this.ruleCache.set(this.rule, value); + return value; + } + + /** + * Report an error with an optional fix for that erro + */ + err(msg: string, fix?: (source: string) => string) { + this.failures.push({ + name: this.rule.name, + msg, + fix, + }); + } + + /** + * Resolve a path relative to the directory of the current project being linted + */ + resolve(rel: string) { + return Path.resolve(this.project.directory, rel); + } + + getAllFiles() { + return this.projectFileMap.getFiles(this.project); + } +} diff --git a/packages/kbn-ts-project-linter/lib/strip_source_code.ts b/packages/kbn-ts-project-linter/lib/strip_source_code.ts new file mode 100644 index 0000000000000..f12810970c49b --- /dev/null +++ b/packages/kbn-ts-project-linter/lib/strip_source_code.ts @@ -0,0 +1,137 @@ +/* eslint-disable @kbn/eslint/require-license-header */ +/* eslint-disable @typescript-eslint/no-shadow */ + +// pulled from https://github.com/nrwl/nx/blob/e12922b02908c90797e038324f2afa4bf69e2eab/packages/nx/src/utils/strip-source-code.ts#L4 + +/** + * @notice + * + * This project includes code from the NX project, which is MIT licensed: + * + * (The MIT License) + * + * Copyright (c) 2017-2022 Narwhal Technologies Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * 'Software'), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import { SyntaxKind } from 'typescript'; +import type { Scanner } from 'typescript'; + +export function stripSourceCode(scanner: Scanner, contents: string): string { + scanner.setText(contents); + let token = scanner.scan(); + const statements = []; + let start = null; + while (token !== SyntaxKind.EndOfFileToken) { + const potentialStart = scanner.getStartPos(); + switch (token) { + case SyntaxKind.MultiLineCommentTrivia: + case SyntaxKind.SingleLineCommentTrivia: { + const isMultiLineCommentTrivia = token === SyntaxKind.MultiLineCommentTrivia; + const start = potentialStart + 2; + token = scanner.scan(); + const end = scanner.getStartPos() - (isMultiLineCommentTrivia ? 2 : 0); + const comment = contents.substring(start, end).trim(); + if (comment === 'nx-ignore-next-line') { + // reading till the end of the line + while (token === SyntaxKind.WhitespaceTrivia || token === SyntaxKind.NewLineTrivia) { + token = scanner.scan(); + } + + // ignore next line + while (token !== SyntaxKind.NewLineTrivia && token !== SyntaxKind.EndOfFileToken) { + token = scanner.scan(); + } + } + break; + } + + case SyntaxKind.RequireKeyword: + case SyntaxKind.ImportKeyword: { + token = scanner.scan(); + while (token === SyntaxKind.WhitespaceTrivia || token === SyntaxKind.NewLineTrivia) { + token = scanner.scan(); + } + start = potentialStart; + break; + } + + case SyntaxKind.ExportKeyword: { + token = scanner.scan(); + while (token === SyntaxKind.WhitespaceTrivia || token === SyntaxKind.NewLineTrivia) { + token = scanner.scan(); + } + if ( + token === SyntaxKind.OpenBraceToken || + token === SyntaxKind.AsteriskToken || + token === SyntaxKind.TypeKeyword + ) { + start = potentialStart; + } + break; + } + + case SyntaxKind.TemplateHead: + case SyntaxKind.TemplateMiddle: { + while (true) { + token = scanner.scan(); + + if (token === SyntaxKind.SlashToken) { + token = scanner.reScanSlashToken(); + } + + if (token === SyntaxKind.EndOfFileToken) { + // either the template is unterminated, or there + // is some other edge case we haven't compensated for + break; + } + + if (token === SyntaxKind.CloseBraceToken) { + token = scanner.reScanTemplateToken(false); + break; + } + } + break; + } + + case SyntaxKind.StringLiteral: { + if (start !== null) { + token = scanner.scan(); + if (token === SyntaxKind.CloseParenToken) { + token = scanner.scan(); + } + const end = scanner.getStartPos(); + statements.push(contents.substring(start, end)); + start = null; + } else { + token = scanner.scan(); + } + break; + } + + default: { + token = scanner.scan(); + } + } + } + + return statements.join('\n'); +} diff --git a/packages/kbn-ts-project-linter/package.json b/packages/kbn-ts-project-linter/package.json new file mode 100644 index 0000000000000..aadde23f6811b --- /dev/null +++ b/packages/kbn-ts-project-linter/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/ts-project-linter", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-ts-project-linter/rules/forbidden_compiler_options.ts b/packages/kbn-ts-project-linter/rules/forbidden_compiler_options.ts new file mode 100644 index 0000000000000..f9d1cf8d4a221 --- /dev/null +++ b/packages/kbn-ts-project-linter/rules/forbidden_compiler_options.ts @@ -0,0 +1,39 @@ +/* + * 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 { Rule } from '../lib/rule'; +import { removeCompilerOption } from '../ast'; + +const NAMES = [ + 'declaration', + 'declarationMap', + 'emitDeclarationOnly', + 'skipLibCheck', + 'target', + 'paths', +]; + +export const forbiddenCompilerOptions = Rule.create('forbiddenCompilerOptions', { + check({ config, repoRel }) { + for (const optName of NAMES) { + if (repoRel === '.buildkite/tsconfig.json' && optName === 'paths') { + // allow "paths" in this specific config file + continue; + } + + const value = config.compilerOptions?.[optName]; + if (value === undefined) { + continue; + } + + this.err(`specifying the "${optName}" compiler option is forbidden`, (source) => { + return removeCompilerOption(source, optName); + }); + } + }, +}); diff --git a/packages/kbn-ts-project-linter/rules/index.ts b/packages/kbn-ts-project-linter/rules/index.ts new file mode 100644 index 0000000000000..4ed4b40e8ab98 --- /dev/null +++ b/packages/kbn-ts-project-linter/rules/index.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 { forbiddenCompilerOptions } from './forbidden_compiler_options'; +import { refPkgsIds } from './reference_pkg_ids'; +import { requiredCompilerOptions } from './required_compiler_options'; +import { validBaseConfig } from './valid_base_config'; +import { requiredExcludes } from './required_excludes'; +import { requiredFileSelectors } from './required_file_selectors'; +import { referenceUsedPkgs } from './reference_used_pkgs'; + +export const PROJECT_LINTER_RULES = [ + forbiddenCompilerOptions, + refPkgsIds, + requiredCompilerOptions, + validBaseConfig, + requiredExcludes, + requiredFileSelectors, + referenceUsedPkgs, +]; diff --git a/packages/kbn-ts-project-linter/rules/reference_pkg_ids.ts b/packages/kbn-ts-project-linter/rules/reference_pkg_ids.ts new file mode 100644 index 0000000000000..f8b3209f8d37f --- /dev/null +++ b/packages/kbn-ts-project-linter/rules/reference_pkg_ids.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 Path from 'path'; + +import { REPO_ROOT } from '@kbn/repo-info'; +import { readPackageMap } from '@kbn/package-map'; + +import { Rule } from '../lib/rule'; +import { replaceReferences } from '../ast'; + +export const refPkgsIds = Rule.create('refPkgIds', { + check(proj) { + const dirsToPkgIds = this.getCache(() => { + const pkgMap = readPackageMap(); + return new Map(Array.from(pkgMap).map(([k, v]) => [v, k])); + }); + + const getPkgId = (tsconfigPath: string) => + dirsToPkgIds.get(Path.relative(REPO_ROOT, Path.dirname(tsconfigPath))); + + const replaceWithPkgId: Array<[string, string]> = []; + + for (const ref of proj.config.kbn_references ?? []) { + if (typeof ref === 'string' || ref.force === true) { + continue; + } + + const refPath = Path.resolve(proj.directory, ref.path); + const pkgIdJson = getPkgId(refPath); + if (pkgIdJson) { + replaceWithPkgId.push([ref.path, pkgIdJson]); + } + } + + if (!replaceWithPkgId.length) { + return; + } + + const list = replaceWithPkgId + .map(([from, to]) => ` - {"path": "${from}"} => ${JSON.stringify(to)}`) + .join('\n'); + + return { + msg: `kbn_references must use pkgIds to refer to other packages (use --fix to autofix, or add "force": true to ignore):\n${list}`, + fix(source) { + return replaceReferences(source, replaceWithPkgId); + }, + }; + }, +}); diff --git a/packages/kbn-ts-project-linter/rules/reference_used_pkgs.ts b/packages/kbn-ts-project-linter/rules/reference_used_pkgs.ts new file mode 100644 index 0000000000000..5160701efdffe --- /dev/null +++ b/packages/kbn-ts-project-linter/rules/reference_used_pkgs.ts @@ -0,0 +1,65 @@ +/* + * 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 { asyncForEachWithLimit } from '@kbn/std'; + +import { Rule } from '../lib/rule'; +import { TypeScriptImportLocator } from '../lib/import_locator'; +import { addReferences, removeReferences } from '../ast'; + +export const referenceUsedPkgs = Rule.create('referenceUsedPkgs', { + async check(project) { + const importLocator = this.getCache(() => new TypeScriptImportLocator()); + const usedPkgIds = new Set(); + + await asyncForEachWithLimit(this.getAllFiles(), 20, async (path) => { + if (!path.isTypeScript() && !path.isJavaScript()) { + return; + } + + for (const req of await importLocator.get(path)) { + if (!req.startsWith('@kbn/')) { + continue; + } + + const [, id] = req.split('/'); + usedPkgIds.add(`@kbn/${id}`); + } + }); + + const refs = new Set( + (project.config.kbn_references ?? []).flatMap((r) => (typeof r === 'string' ? r : [])) + ); + const missing = new Set(); + const extra = new Set(refs); + for (const used of usedPkgIds) { + extra.delete(used); + if (!refs.has(used)) { + missing.add(used); + } + } + + if (missing.size) { + const ids = Array.from(missing); + const list = ids.map((id) => ` - ${id}`).join('\n'); + this.err( + `the following packages are referenced in the code of this package but not listed in kbn_references:\n${list}`, + (source) => addReferences(source, ids) + ); + } + + if (extra.size) { + const ids = Array.from(extra); + const list = ids.map((id) => ` - ${id}`).join('\n'); + this.err( + `the following packages are listed in kbn_references but there are no detectable references in the code:\n${list}`, + (source) => removeReferences(source, ids) + ); + } + }, +}); diff --git a/packages/kbn-ts-project-linter/rules/required_compiler_options.ts b/packages/kbn-ts-project-linter/rules/required_compiler_options.ts new file mode 100644 index 0000000000000..8c5f0f374656b --- /dev/null +++ b/packages/kbn-ts-project-linter/rules/required_compiler_options.ts @@ -0,0 +1,24 @@ +/* + * 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 { Rule } from '../lib/rule'; +import { setCompilerOption } from '../ast'; + +const REQUIRED: Array<[string, string]> = [['outDir', 'target/types']]; + +export const requiredCompilerOptions = Rule.create('requiredCompilerOptions', { + check({ config }) { + for (const [key, value] of REQUIRED) { + if (config.compilerOptions?.[key] !== value) { + this.err(`the value of the compiler option "${key}" must be set to "${value}"`, (source) => + setCompilerOption(source, key, value) + ); + } + } + }, +}); diff --git a/packages/kbn-ts-project-linter/rules/required_excludes.ts b/packages/kbn-ts-project-linter/rules/required_excludes.ts new file mode 100644 index 0000000000000..54f084c33f98e --- /dev/null +++ b/packages/kbn-ts-project-linter/rules/required_excludes.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { Rule } from '../lib/rule'; +import { setExclude } from '../ast'; + +const REQUIRED_EXCLUDES = ['target/**/*']; + +export const requiredExcludes = Rule.create('requiredExcludes', { + check(project) { + const existing = project.config.exclude; + if (!existing) { + return { + msg: `excludes must be defined and include "${REQUIRED_EXCLUDES.join('", "')}"`, + fix: (source) => setExclude(source, REQUIRED_EXCLUDES), + }; + } + + const missing = REQUIRED_EXCLUDES.filter((re) => !existing.includes(re)); + if (missing.length) { + return { + msg: `excludes must include "${REQUIRED_EXCLUDES.join('", "')}"`, + fix: (source) => + setExclude(source, [ + ...(missing.includes('target/**/*') + ? existing.filter((e) => { + const normalized = e.startsWith('./') ? e.slice(2) : e; + return normalized === 'target' || normalized.startsWith('target/'); + }) + : existing), + ...missing, + ]), + }; + } + }, +}); diff --git a/packages/kbn-securitysolution-list-hooks/src/use_delete_list/index.test.ts b/packages/kbn-ts-project-linter/rules/required_file_selectors.ts similarity index 50% rename from packages/kbn-securitysolution-list-hooks/src/use_delete_list/index.test.ts rename to packages/kbn-ts-project-linter/rules/required_file_selectors.ts index f1a6f9e8348ba..d04f06409f2e2 100644 --- a/packages/kbn-securitysolution-list-hooks/src/use_delete_list/index.test.ts +++ b/packages/kbn-ts-project-linter/rules/required_file_selectors.ts @@ -6,9 +6,14 @@ * Side Public License, v 1. */ -describe('useDeleteList', () => { - test('Tests should be ported', () => { - // TODO: Port all the tests from: x-pack/plugins/lists/public/lists/hooks/use_delete_list.test.ts here once mocks are figured out and kbn package mocks are figured out - expect(true).toBe(true); - }); +import { Rule } from '../lib/rule'; + +export const requiredFileSelectors = Rule.create('requiredFileSelectors', { + check(project) { + if (!project.config.include || project.config.files) { + return { + msg: 'every ts project must use the "include" key (and not the "files" key) to select the files for that project', + }; + } + }, }); diff --git a/packages/kbn-ts-project-linter/rules/valid_base_config.ts b/packages/kbn-ts-project-linter/rules/valid_base_config.ts new file mode 100644 index 0000000000000..410f313851d20 --- /dev/null +++ b/packages/kbn-ts-project-linter/rules/valid_base_config.ts @@ -0,0 +1,37 @@ +/* + * 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 Path from 'path'; + +import { REPO_ROOT } from '@kbn/repo-info'; +import { Project } from '@kbn/ts-projects'; + +import { Rule } from '../lib/rule'; + +function getBaseConfigRels(proj: Project): string[] { + const base = proj.getBase(); + if (!base) { + return []; + } + return [base.repoRel, ...getBaseConfigRels(base)]; +} + +export const validBaseConfig = Rule.create('validBaseConfig', { + check(proj) { + const baseConfigRels = getBaseConfigRels(proj); + + if (baseConfigRels[0] === 'tsconfig.json') { + return `This tsconfig extends the root tsconfig.json file and shouldn't. The root tsconfig.json file is not a valid base config, you probably want to point to the tsconfig.base.json file.`; + } + + const configRel = Path.relative(REPO_ROOT, proj.path); + if (configRel !== 'tsconfig.base.json' && !baseConfigRels.includes('tsconfig.base.json')) { + return `This tsconfig does not extend the tsconfig.base.json file either directly or indirectly. The TS config setup for the repo expects every tsconfig file to extend this base config file.`; + } + }, +}); diff --git a/packages/kbn-ts-project-linter/tsconfig.json b/packages/kbn-ts-project-linter/tsconfig.json new file mode 100644 index 0000000000000..14d04db83cb9d --- /dev/null +++ b/packages/kbn-ts-project-linter/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/bazel-packages", + "@kbn/tooling-log", + "@kbn/ts-projects", + "@kbn/std", + "@kbn/repo-path", + "@kbn/repo-info", + "@kbn/package-map", + ] +} diff --git a/packages/kbn-ts-projects/README.md b/packages/kbn-ts-projects/README.md new file mode 100644 index 0000000000000..5f89b7e6c1067 --- /dev/null +++ b/packages/kbn-ts-projects/README.md @@ -0,0 +1,3 @@ +# @kbn/ts-projects + +Empty package generated by @kbn/generate diff --git a/src/dev/typescript/index.ts b/packages/kbn-ts-projects/index.ts similarity index 81% rename from src/dev/typescript/index.ts rename to packages/kbn-ts-projects/index.ts index c390ecc60f018..cb565b3a73bfc 100644 --- a/src/dev/typescript/index.ts +++ b/packages/kbn-ts-projects/index.ts @@ -7,4 +7,5 @@ */ export { Project } from './project'; -export { runTypeCheckCli } from './run_type_check_cli'; +export { PROJECTS } from './projects'; +export type { TsConfig } from './ts_configfile'; diff --git a/packages/kbn-ts-projects/jest.config.js b/packages/kbn-ts-projects/jest.config.js new file mode 100644 index 0000000000000..23c8bd7613782 --- /dev/null +++ b/packages/kbn-ts-projects/jest.config.js @@ -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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-ts-projects'], +}; diff --git a/packages/kbn-ts-projects/kibana.jsonc b/packages/kbn-ts-projects/kibana.jsonc new file mode 100644 index 0000000000000..f73c7a91f73d4 --- /dev/null +++ b/packages/kbn-ts-projects/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/ts-projects", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-ts-projects/package.json b/packages/kbn-ts-projects/package.json new file mode 100644 index 0000000000000..32d2347fda8c8 --- /dev/null +++ b/packages/kbn-ts-projects/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/ts-projects", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-ts-projects/project.ts b/packages/kbn-ts-projects/project.ts new file mode 100644 index 0000000000000..7fb658443e75c --- /dev/null +++ b/packages/kbn-ts-projects/project.ts @@ -0,0 +1,158 @@ +/* + * 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 Path from 'path'; + +import { REPO_ROOT } from '@kbn/repo-info'; +import { PackageMap } from '@kbn/package-map'; + +import { readTsConfig, parseTsConfig, TsConfig } from './ts_configfile'; + +export interface ProjectOptions { + name?: string; + disableTypeCheck?: boolean; +} + +type KbnRef = string | { path: string; force?: boolean }; +function isValidKbnRefs(refs: unknown): refs is KbnRef[] { + return ( + Array.isArray(refs) && + refs.every( + (r) => + typeof r === 'string' || + (typeof r === 'object' && r !== null && 'path' in r && typeof r.path === 'string') + ) + ); +} + +export class Project { + /** + * The parsed config file from disk + */ + public config: TsConfig; + + /** absolute path to the tsconfig file defininig this project */ + public readonly path: string; + /** repo relative path to the tsconfig file defininig this project */ + public readonly repoRel: string; + /** name of this project */ + public readonly name: string; + /** The directory containing this ts project */ + public readonly dir: string; + /** The directory containing this ts project */ + public readonly directory: string; + + /** absolute path to the tsconfig file that will be generated for type checking this file */ + public readonly typeCheckConfigPath: string; + /** `true` if we want to explicitly exclude this entire project from type checking */ + public readonly disableTypeCheck: boolean; + + constructor(private readonly others: Map, path: string, opts?: ProjectOptions) { + if (!Path.isAbsolute(path)) { + throw new Error(`Unable to create ts Project from relative path [${path}]`); + } + + this.path = path; + this.config = readTsConfig(this.path); + this.repoRel = Path.relative(REPO_ROOT, path); + this.name = opts?.name || this.repoRel; + this.dir = this.directory = Path.dirname(path); + + this.typeCheckConfigPath = Path.resolve( + this.directory, + Path.basename(this.repoRel, '.json') + '.type_check.json' + ); + + this.disableTypeCheck = !!opts?.disableTypeCheck; + } + + /** + * updates the project so that the tsconfig file will be + * read from disk the next time that this.config is accessed + */ + public reloadFromDisk() { + this.config = readTsConfig(this.path); + } + + public overrideConfig(jsonc: string) { + try { + this.config = parseTsConfig(this.path, jsonc); + } catch (error) { + throw new Error(`unable to parse jsonc in order to override config: ${error.message}`); + } + } + + /** + * Gets the base config file for this tsconfig file. If the + * "extends" key is not defined this returns undefined + */ + public getBase(): Project | undefined { + if (!this.config.extends) { + return undefined; + } + + return this.getOther( + Path.resolve(this.directory, this.config.extends), + `extends: ${JSON.stringify(this.config.extends)}` + ); + } + + /** + * Get the kbnRefs for this project + */ + public getKbnRefs(pkgMap: PackageMap) { + if (!this.config.kbn_references) { + return []; + } + + if (!isValidKbnRefs(this.config.kbn_references)) { + throw new Error(`invalid kbn_references in ${this.name}`); + } + + return this.config.kbn_references.flatMap((ref) => { + if (typeof ref !== 'string') { + return ( + this.getOther( + Path.resolve(this.directory, ref.path), + `kbn_references: ${JSON.stringify(ref)}` + ) ?? [] + ); + } + + const pkgDir = pkgMap.get(ref); + if (!pkgDir) { + throw new Error(`invalid kbn_references in ${this.name}: ${ref} is not a known package`); + } + + return ( + this.getOther( + Path.resolve(pkgDir, 'tsconfig.json'), + `kbn_references: ${JSON.stringify(ref)}` + ) ?? [] + ); + }); + } + + private getOther(abs: string, from: string) { + const cached = this.others.get(abs); + if (cached) { + return cached; + } + + try { + const base = new Project(this.others, abs); + this.others.set(abs, base); + return base; + } catch (error) { + if (error.code === 'ENOENT') { + return undefined; + } + throw new Error(`Failed to load tsconfig file from ${from}: ${error.message}`); + } + } +} diff --git a/src/dev/typescript/projects.ts b/packages/kbn-ts-projects/projects.ts similarity index 95% rename from src/dev/typescript/projects.ts rename to packages/kbn-ts-projects/projects.ts index 7afb1e4649cb9..3b791c12103b8 100644 --- a/src/dev/typescript/projects.ts +++ b/packages/kbn-ts-projects/projects.ts @@ -8,7 +8,7 @@ import globby from 'globby'; import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { BAZEL_PACKAGE_DIRS } from '@kbn/bazel-packages'; import { Project, ProjectOptions } from './project'; @@ -19,9 +19,7 @@ import { Project, ProjectOptions } from './project'; export const PROJECT_CACHE = new Map(); const createProject = (rootRelativePath: string, options: ProjectOptions = {}) => - Project.load(Path.resolve(REPO_ROOT, rootRelativePath), options, { - cache: PROJECT_CACHE, - }); + new Project(PROJECT_CACHE, Path.resolve(REPO_ROOT, rootRelativePath), options); const findProjects = (patterns: string[]) => globby.sync(patterns, { cwd: REPO_ROOT }).map((path) => createProject(path)); @@ -31,7 +29,6 @@ export const PROJECTS = [ createProject('test/tsconfig.json', { name: 'kibana/test' }), createProject('x-pack/test/tsconfig.json', { name: 'x-pack/test' }), createProject('x-pack/performance/tsconfig.json', { name: 'x-pack/performance' }), - ...findProjects(['src/*/tsconfig.json']), createProject('.buildkite/tsconfig.json', { // this directory has additionally dependencies which scripts/type_check can't guarantee // are present or up-to-date, and users likely won't know how to manage either, so the @@ -91,6 +88,7 @@ export const PROJECTS = [ // Glob patterns to be all search at once ...findProjects([ + 'src/*/tsconfig.json', 'src/plugins/*/tsconfig.json', 'src/plugins/chart_expressions/*/tsconfig.json', 'src/plugins/vis_types/*/tsconfig.json', diff --git a/packages/kbn-ts-projects/ts_configfile.ts b/packages/kbn-ts-projects/ts_configfile.ts new file mode 100644 index 0000000000000..c4cf8f5fe7dcc --- /dev/null +++ b/packages/kbn-ts-projects/ts_configfile.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 Fs from 'fs'; + +import { parseConfigFileTextToJson } from 'typescript'; + +export interface TsConfig { + extends?: string; + compilerOptions?: { + types?: string[]; + [key: string]: unknown; + }; + include?: string[]; + exclude?: string[]; + kbn_references?: Array; + [key: string]: unknown; +} + +export function parseTsConfig(tsConfigPath: string, jsonc: string): TsConfig { + const { error, config } = parseConfigFileTextToJson(tsConfigPath, jsonc); + + if (error) { + throw new Error(`tsconfig parse error: [${error.file}] ${error.messageText}`); + } + + return config; +} + +export function readTsConfig(tsConfigPath: string): TsConfig { + try { + return parseTsConfig(tsConfigPath, Fs.readFileSync(tsConfigPath, 'utf8')); + } catch (error) { + if (error.code === 'ENOENT') { + const err = new Error( + `unable to read tsconfig file at ${tsConfigPath}. File does not exist.` + ); + Object.assign(err, { code: error.code }); + throw err; + } + + throw error; + } +} diff --git a/packages/kbn-ts-projects/tsconfig.json b/packages/kbn-ts-projects/tsconfig.json new file mode 100644 index 0000000000000..7394e3b03ea73 --- /dev/null +++ b/packages/kbn-ts-projects/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/repo-info", + "@kbn/bazel-packages", + "@kbn/package-map", + ] +} diff --git a/packages/kbn-ts-type-check-cli/README.md b/packages/kbn-ts-type-check-cli/README.md new file mode 100644 index 0000000000000..aed9220842476 --- /dev/null +++ b/packages/kbn-ts-type-check-cli/README.md @@ -0,0 +1,3 @@ +# @kbn/ts-type-check-cli + +Empty package generated by @kbn/generate diff --git a/packages/kbn-ts-type-check-cli/jest.config.js b/packages/kbn-ts-type-check-cli/jest.config.js new file mode 100644 index 0000000000000..a5a9aedfff02f --- /dev/null +++ b/packages/kbn-ts-type-check-cli/jest.config.js @@ -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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-ts-type-check-cli'], +}; diff --git a/packages/kbn-ts-type-check-cli/kibana.jsonc b/packages/kbn-ts-type-check-cli/kibana.jsonc new file mode 100644 index 0000000000000..dc98e123efb00 --- /dev/null +++ b/packages/kbn-ts-type-check-cli/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/ts-type-check-cli", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-ts-type-check-cli/package.json b/packages/kbn-ts-type-check-cli/package.json new file mode 100644 index 0000000000000..64b7904e87db0 --- /dev/null +++ b/packages/kbn-ts-type-check-cli/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/ts-type-check-cli", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0", + "main": "./run_type_check_cli" +} diff --git a/src/dev/typescript/root_refs_config.ts b/packages/kbn-ts-type-check-cli/root_refs_config.ts similarity index 83% rename from src/dev/typescript/root_refs_config.ts rename to packages/kbn-ts-type-check-cli/root_refs_config.ts index ebbc1574d85c5..43d64e5d972f4 100644 --- a/src/dev/typescript/root_refs_config.ts +++ b/packages/kbn-ts-type-check-cli/root_refs_config.ts @@ -10,13 +10,11 @@ import Path from 'path'; import Fsp from 'fs/promises'; import dedent from 'dedent'; +import normalize from 'normalize-path'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createFailError } from '@kbn/dev-cli-errors'; -import { BazelPackage } from '@kbn/bazel-packages'; -import normalize from 'normalize-path'; - -import { PROJECTS } from './projects'; +import { PROJECTS } from '@kbn/ts-projects'; export const ROOT_REFS_CONFIG_PATH = Path.resolve(REPO_ROOT, 'tsconfig.refs.json'); export const REF_CONFIG_PATHS = [ROOT_REFS_CONFIG_PATH]; @@ -46,18 +44,15 @@ ${refs.map((p) => ` { "path": ${JSON.stringify(p)} },`).join('\n')} `; } -export async function updateRootRefsConfig(log: ToolingLog, bazelPackages: BazelPackage[]) { +export async function updateRootRefsConfig(log: ToolingLog) { if (await isRootRefsConfigSelfManaged()) { throw createFailError( `tsconfig.refs.json starts with "// SELF MANAGED" but we removed this functinality because of some complexity it caused with TS performance upgrades and we were pretty sure that nobody was using it. Please reach out to operations to discuss options <3` ); } - const bazelPackageDirs = new Set( - bazelPackages.map((p) => Path.resolve(REPO_ROOT, p.normalizedRepoRelativeDir)) - ); const refs = PROJECTS.flatMap((p) => { - if (p.disableTypeCheck || bazelPackageDirs.has(p.directory)) { + if (p.disableTypeCheck) { return []; } diff --git a/packages/kbn-ts-type-check-cli/run_type_check_cli.ts b/packages/kbn-ts-type-check-cli/run_type_check_cli.ts new file mode 100644 index 0000000000000..20ea0845371b7 --- /dev/null +++ b/packages/kbn-ts-type-check-cli/run_type_check_cli.ts @@ -0,0 +1,177 @@ +/* + * 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 Path from 'path'; +import Fsp from 'fs/promises'; + +import { run } from '@kbn/dev-cli-runner'; +import { createFailError } from '@kbn/dev-cli-errors'; +import { REPO_ROOT } from '@kbn/repo-info'; +import { asyncForEachWithLimit, asyncMapWithLimit } from '@kbn/std'; +import { SomeDevLog } from '@kbn/some-dev-log'; +import { readPackageMap } from '@kbn/package-map'; +import { Project, PROJECTS } from '@kbn/ts-projects'; + +import { + updateRootRefsConfig, + cleanupRootRefsConfig, + ROOT_REFS_CONFIG_PATH, +} from './root_refs_config'; + +const rel = (from: string, to: string) => { + const path = Path.relative(from, to); + return path.startsWith('.') ? path : `./${path}`; +}; + +async function createTypeCheckConfigs(log: SomeDevLog, projects: Project[]) { + const pkgMap = readPackageMap(); + const writes: Array<[path: string, content: string]> = []; + + // write tsconfig.type_check.json files for each project that is not the root + const queue = new Set(projects); + for (const project of queue) { + const config = project.config; + const base = project.getBase(); + if (base) { + queue.add(base); + } + + const typeCheckConfig = { + ...config, + extends: base ? rel(project.directory, base.typeCheckConfigPath) : undefined, + compilerOptions: { + ...config.compilerOptions, + composite: true, + rootDir: '.', + paths: project.repoRel === 'tsconfig.base.json' ? config.compilerOptions?.paths : undefined, + }, + kbn_references: undefined, + references: project.getKbnRefs(pkgMap).map((refd) => { + queue.add(refd); + + return { + path: rel(project.directory, refd.typeCheckConfigPath), + }; + }), + }; + + writes.push([project.typeCheckConfigPath, JSON.stringify(typeCheckConfig, null, 2)]); + } + + return new Set( + await asyncMapWithLimit(writes, 50, async ([path, content]) => { + try { + const existing = await Fsp.readFile(path, 'utf8'); + if (existing === content) { + return path; + } + } catch (err) { + if (err.code !== 'ENOENT') { + throw err; + } + } + + log.verbose('updating', path); + await Fsp.writeFile(path, content, 'utf8'); + return path; + }) + ); +} + +run( + async ({ log, flagsReader, procRunner }) => { + if (flagsReader.boolean('clean-cache')) { + await asyncForEachWithLimit(PROJECTS, 10, async (proj) => { + await Fsp.rm(Path.resolve(proj.directory, 'target/types'), { + force: true, + recursive: true, + }); + }); + log.warning('Deleted all typescript caches'); + } + + // if the tsconfig.refs.json file is not self-managed then make sure it has + // a reference to every composite project in the repo + await updateRootRefsConfig(log); + + const projectFilter = flagsReader.path('project'); + + const projects = PROJECTS.filter( + (p) => !p.disableTypeCheck && (!projectFilter || p.path === projectFilter) + ); + + const created = await createTypeCheckConfigs(log, projects); + + let pluginBuildResult; + try { + log.info( + `Building TypeScript projects to check types (For visible, though excessive, progress info you can pass --verbose)` + ); + + const relative = Path.relative( + REPO_ROOT, + projects.length === 1 ? projects[0].typeCheckConfigPath : ROOT_REFS_CONFIG_PATH + ); + + await procRunner.run('tsc', { + cmd: Path.relative(REPO_ROOT, require.resolve('typescript/bin/tsc')), + args: [ + '-b', + relative, + '--pretty', + ...(flagsReader.boolean('verbose') ? ['--verbose'] : []), + ], + cwd: REPO_ROOT, + wait: true, + }); + + pluginBuildResult = { failed: false }; + } catch (error) { + pluginBuildResult = { failed: true }; + } + + // cleanup if requested + if (flagsReader.boolean('cleanup')) { + log.verbose('cleaning up'); + await cleanupRootRefsConfig(); + + await asyncForEachWithLimit(created, 40, async (path) => { + await Fsp.unlink(path); + }); + } + + if (pluginBuildResult.failed) { + throw createFailError('Unable to build TS project refs'); + } + }, + { + description: ` + Run the TypeScript compiler without emitting files so that it can check types during development. + + Examples: + # check types in all projects + node scripts/type_check + + # check types in a single project + node scripts/type_check --project packages/kbn-pm/tsconfig.json + `, + flags: { + string: ['project'], + boolean: ['clean-cache', 'cleanup'], + help: ` + --project [path] Path to a tsconfig.json file determines the project to check + --help Show this message + --clean-cache Delete any existing TypeScript caches before running type check + --cleanup Pass to avoid leaving temporary tsconfig files on disk. Leaving these + files in place makes subsequent executions faster because ts can + identify that none of the imports have changed (it uses creation/update + times) but cleaning them prevents leaving garbage around the repo. + `, + }, + } +); diff --git a/packages/kbn-ts-type-check-cli/tsconfig.json b/packages/kbn-ts-type-check-cli/tsconfig.json new file mode 100644 index 0000000000000..bc51e37a4c1ca --- /dev/null +++ b/packages/kbn-ts-type-check-cli/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/tooling-log", + "@kbn/repo-info", + "@kbn/dev-cli-errors", + "@kbn/ts-projects", + "@kbn/dev-cli-runner", + "@kbn/std", + "@kbn/some-dev-log", + "@kbn/package-map", + ] +} diff --git a/packages/kbn-type-summarizer-cli/BUILD.bazel b/packages/kbn-type-summarizer-cli/BUILD.bazel deleted file mode 100644 index 441fa393e5e44..0000000000000 --- a/packages/kbn-type-summarizer-cli/BUILD.bazel +++ /dev/null @@ -1,140 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "directory_file_path", "js_library", "nodejs_binary") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-type-summarizer-cli" -PKG_REQUIRE_NAME = "@kbn/type-summarizer-cli" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@babel/runtime", - "//packages/kbn-type-summarizer", - "//packages/kbn-type-summarizer-core", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "//packages/kbn-type-summarizer:npm_module_types", - "//packages/kbn-type-summarizer-core:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -directory_file_path( - name = "bazel-cli-path", - directory = ":target_node", - path = "index.js", -) - -nodejs_binary( - name = "bazel-cli", - data = [":" + PKG_DIRNAME], - entry_point = ":bazel-cli-path", - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-type-summarizer-cli/README.md b/packages/kbn-type-summarizer-cli/README.md deleted file mode 100644 index b35cfb615aaeb..0000000000000 --- a/packages/kbn-type-summarizer-cli/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# @kbn/type-summarizer-cli - -Exposes the` @kbn/type-summarizer` via a command line interface. Run `node scripts/type_summarizer` for information about running this command. - -## Example: - -```sh -node scripts/type_summarizer packages/kbn-type-summarizer-cli -``` diff --git a/packages/kbn-type-summarizer-cli/index.ts b/packages/kbn-type-summarizer-cli/index.ts deleted file mode 100644 index 7b7bd535485a7..0000000000000 --- a/packages/kbn-type-summarizer-cli/index.ts +++ /dev/null @@ -1,85 +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 Fsp from 'fs/promises'; - -import { Path } from '@kbn/type-summarizer-core'; -import { summarizePackage } from '@kbn/type-summarizer'; - -import { parseCliConfig } from './src/cli_config'; - -import { run } from './src/run'; - -const HELP = ` -Script called from bazel to create the summarized version of a package. When called by Bazel -config is passed as a JSON encoded object. To build config locally you can just pass a path to -a package directory. - -Usage: - - node scripts/type_summarizer -`; - -run( - async ({ argv, log }) => { - const { packageName, outputDir, inputPath, repoRelativePackageDir, tsconfigPath } = - parseCliConfig(argv); - - try { - await Fsp.rm(outputDir, { recursive: true }); - } catch (error) { - if (error && error.code !== 'ENOENT') { - throw error; - } - } - - await Fsp.mkdir(outputDir, { recursive: true }); - - // generate pkg json output - await Fsp.writeFile( - Path.join(outputDir, 'package.json'), - JSON.stringify( - { - name: `@types/${packageName.replaceAll('@', '').replaceAll('/', '__')}`, - description: 'Generated by @kbn/type-summarizer', - types: './index.d.ts', - private: true, - license: 'MIT', - version: '1.1.0', - }, - null, - 2 - ) - ); - - const sourceNode = await summarizePackage(log, { - dtsDir: Path.dirname(inputPath), - inputPath, - tsconfigPath, - repoRelativePackageDir, - }); - - const source = sourceNode.toStringWithSourceMap({ - file: 'index.d.ts', - sourceRoot: `../../../${Path.toNormal(repoRelativePackageDir)}`, - }); - - const code = `${source.code}${ - source.code.endsWith('\n') ? '' : '\n' - }//# sourceMappingURL=index.d.ts.map`; - - await Fsp.writeFile(Path.join(outputDir, 'index.d.ts'), code); - await Fsp.writeFile(Path.join(outputDir, 'index.d.ts.map'), JSON.stringify(source.map)); - - log.success('type summary created for', packageName); - }, - { - helpText: HELP, - defaultLogLevel: 'quiet', - } -); diff --git a/packages/kbn-type-summarizer-cli/kibana.jsonc b/packages/kbn-type-summarizer-cli/kibana.jsonc deleted file mode 100644 index 88434bc04812d..0000000000000 --- a/packages/kbn-type-summarizer-cli/kibana.jsonc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "shared-common", - "id": "@kbn/type-summarizer-cli", - "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] -} diff --git a/packages/kbn-type-summarizer-cli/package.json b/packages/kbn-type-summarizer-cli/package.json deleted file mode 100644 index 2b013abe15705..0000000000000 --- a/packages/kbn-type-summarizer-cli/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@kbn/type-summarizer-cli", - "private": true, - "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} diff --git a/packages/kbn-type-summarizer-cli/src/cli_config.ts b/packages/kbn-type-summarizer-cli/src/cli_config.ts deleted file mode 100644 index 50ca0e161536b..0000000000000 --- a/packages/kbn-type-summarizer-cli/src/cli_config.ts +++ /dev/null @@ -1,177 +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 Fs from 'fs'; - -import { CliError, Path } from '@kbn/type-summarizer-core'; -import { parseCliFlags } from './cli_flags'; - -const isString = (i: any): i is string => typeof i === 'string' && i.length > 0; - -interface CliConfig { - packageName: string; - outputDir: string; - tsconfigPath: string; - inputPath: string; - repoRelativePackageDir: string; - dump: boolean; -} - -function isKibanaRepo(dir: string) { - try { - const json = Fs.readFileSync(Path.join(dir, 'package.json'), 'utf8'); - const parsed = JSON.parse(json); - return parsed.name === 'kibana'; - } catch { - return false; - } -} - -export function findRepoRoot() { - const start = Path.resolve(__dirname); - let dir = start; - while (true) { - if (isKibanaRepo(dir)) { - return dir; - } - - // this is not the kibana directory, try moving up a directory - const parent = Path.join(dir, '..'); - if (parent === dir) { - throw new Error( - `unable to find Kibana's package.json file when traversing up from [${start}]` - ); - } - - dir = parent; - } -} - -function parseConfigFromFlags(argv: string[]): CliConfig { - const { rawFlags, unknownFlags } = parseCliFlags(argv, { - boolean: ['dump'], - }); - - if (unknownFlags.length) { - throw new CliError(`Unknown flags: ${unknownFlags.join(', ')}`, { - showHelp: true, - }); - } - - const repoRoot = findRepoRoot(); - - const [relativePackagePath, ...extraPositional] = rawFlags._; - if (typeof relativePackagePath !== 'string') { - throw new CliError(`missing path to package as first positional argument`, { showHelp: true }); - } - if (extraPositional.length) { - throw new CliError(`extra positional arguments`, { showHelp: true }); - } - - const packageDir = Path.resolve(relativePackagePath); - const packageName: string = JSON.parse( - Fs.readFileSync(Path.join(packageDir, 'package.json'), 'utf8') - ).name; - const repoRelativePackageDir = Path.relative(repoRoot, packageDir); - - const dump = !!rawFlags.dump; - - return { - packageName, - tsconfigPath: Path.join(repoRoot, repoRelativePackageDir, 'tsconfig.json'), - inputPath: Path.join(repoRoot, 'node_modules', packageName, 'target_types/index.d.ts'), - repoRelativePackageDir, - outputDir: Path.join(repoRoot, 'data/type-summarizer-output'), - dump, - }; -} - -function parseJsonFromCli(json: string) { - try { - return JSON.parse(json); - } catch (error) { - // TODO: This is to handle a bug in Bazel which escapes `"` in .bat arguments incorrectly, replacing them with `\` - if ( - error.message === 'Unexpected token \\ in JSON at position 1' && - process.platform === 'win32' - ) { - const unescapedJson = json.replaceAll('\\', '"'); - try { - return JSON.parse(unescapedJson); - } catch (e) { - throw new CliError( - `unable to parse first positional argument as JSON: "${e.message}"\n unescaped value: ${unescapedJson}\n raw value: ${json}` - ); - } - } - - throw new CliError( - `unable to parse first positional argument as JSON: "${error.message}"\n value: ${json}` - ); - } -} - -function parseConfigFromJson(json: string): CliConfig { - const config = parseJsonFromCli(json); - if (typeof config !== 'object' || config === null) { - throw new CliError('config JSON must be an object'); - } - - const packageName = config.packageName; - if (!isString(packageName)) { - throw new CliError('packageName config must be a non-empty string'); - } - - const outputDir = config.outputDir; - if (!isString(outputDir)) { - throw new CliError('outputDir config must be a non-empty string'); - } - if (Path.isAbsolute(outputDir)) { - throw new CliError(`outputDir [${outputDir}] must be a relative path`); - } - - const tsconfigPath = config.tsconfigPath; - if (!isString(tsconfigPath)) { - throw new CliError('tsconfigPath config must be a non-empty string'); - } - if (Path.isAbsolute(tsconfigPath)) { - throw new CliError(`tsconfigPath [${tsconfigPath}] must be a relative path`); - } - - const inputPath = config.inputPath; - if (!isString(inputPath)) { - throw new CliError('inputPath config must be a non-empty string'); - } - if (Path.isAbsolute(inputPath)) { - throw new CliError(`inputPath [${inputPath}] must be a relative path`); - } - - const buildFilePath = config.buildFilePath; - if (!isString(buildFilePath)) { - throw new CliError('buildFilePath config must be a non-empty string'); - } - if (Path.isAbsolute(buildFilePath)) { - throw new CliError(`buildFilePath [${buildFilePath}] must be a relative path`); - } - - return { - packageName, - outputDir: Path.resolve(outputDir), - tsconfigPath: Path.resolve(tsconfigPath), - inputPath: Path.resolve(inputPath), - repoRelativePackageDir: Path.dirname(buildFilePath), - dump: false, - }; -} - -export function parseCliConfig(argv: string[]): CliConfig { - if (typeof argv[0] === 'string' && argv[0].startsWith('{')) { - return parseConfigFromJson(argv[0]); - } - return parseConfigFromFlags(argv); -} diff --git a/packages/kbn-type-summarizer-cli/src/cli_flags.ts b/packages/kbn-type-summarizer-cli/src/cli_flags.ts deleted file mode 100644 index 0f616dca873be..0000000000000 --- a/packages/kbn-type-summarizer-cli/src/cli_flags.ts +++ /dev/null @@ -1,45 +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 getopts from 'getopts'; - -interface ParseCliFlagsOptions { - alias?: Record; - boolean?: string[]; - string?: string[]; - default?: Record; -} - -export function parseCliFlags(argv = process.argv.slice(2), options: ParseCliFlagsOptions = {}) { - const unknownFlags: string[] = []; - - const string = options.string ?? []; - const boolean = ['help', 'verbose', 'debug', 'quiet', 'silent', ...(options.boolean ?? [])]; - const alias = { - v: 'verbose', - d: 'debug', - h: 'help', - ...options.alias, - }; - - const rawFlags = getopts(argv, { - alias, - boolean, - string, - default: options.default, - unknown(name) { - unknownFlags.push(name); - return false; - }, - }); - - return { - rawFlags, - unknownFlags, - }; -} diff --git a/packages/kbn-type-summarizer-cli/src/run.ts b/packages/kbn-type-summarizer-cli/src/run.ts deleted file mode 100644 index dfba870b359b9..0000000000000 --- a/packages/kbn-type-summarizer-cli/src/run.ts +++ /dev/null @@ -1,52 +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 getopts from 'getopts'; - -import { CliLog, CliError, LogLevel, toError } from '@kbn/type-summarizer-core'; - -export interface RunContext { - argv: string[]; - log: CliLog; -} - -export interface RunOptions { - helpText: string; - defaultLogLevel?: LogLevel; -} - -export async function run(main: (ctx: RunContext) => Promise, options: RunOptions) { - const argv = process.argv.slice(2); - const rawFlags = getopts(argv); - - if (rawFlags.help) { - process.stdout.write(options.helpText); - process.exit(0); - } - - const log = new CliLog( - CliLog.pickLogLevelFromFlags(rawFlags, options.defaultLogLevel), - process.stdout - ); - - try { - await main({ argv, log }); - } catch (_) { - const error = toError(_); - if (error instanceof CliError) { - process.exitCode = error.exitCode; - log.error(error.message); - if (error.showHelp) { - process.stdout.write(options.helpText); - } - } else { - log.error('UNHANDLED ERROR', error.stack); - process.exitCode = 1; - } - } -} diff --git a/packages/kbn-type-summarizer-cli/tsconfig.json b/packages/kbn-type-summarizer-cli/tsconfig.json deleted file mode 100644 index 57c1dd1c94e0f..0000000000000 --- a/packages/kbn-type-summarizer-cli/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.bazel.json", - "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", - "types": [ - "jest", - "node" - ] - }, - "include": [ - "**/*.ts" - ] -} diff --git a/packages/kbn-type-summarizer-core/BUILD.bazel b/packages/kbn-type-summarizer-core/BUILD.bazel deleted file mode 100644 index b63a38b44d088..0000000000000 --- a/packages/kbn-type-summarizer-core/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-type-summarizer-core" -PKG_REQUIRE_NAME = "@kbn/type-summarizer-core" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//getopts", - "@npm//chalk", - "@npm//normalize-path", - "@npm//strip-ansi", - "@npm//tslib", - "@npm//typescript", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/normalize-path", - "@npm//chalk", - "@npm//getopts", - "@npm//tslib", - "@npm//strip-ansi", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-type-summarizer-core/README.md b/packages/kbn-type-summarizer-core/README.md deleted file mode 100644 index b9e10dadd8d6b..0000000000000 --- a/packages/kbn-type-summarizer-core/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @kbn/type-summarizer-core - -Contains the common code needed for both `@kbn/type-summarizer` and `@kbn/type-summarizer-cli` \ No newline at end of file diff --git a/packages/kbn-type-summarizer-core/index.ts b/packages/kbn-type-summarizer-core/index.ts deleted file mode 100644 index 2785bb096372d..0000000000000 --- a/packages/kbn-type-summarizer-core/index.ts +++ /dev/null @@ -1,27 +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. - */ - -export type { LogLevel } from './src/log'; -export type { LogWriter, Logger } from './src/log'; -export { CliLog, TestLog } from './src/log'; - -export { isSystemError, toError } from './src/error'; -export { tryReadFile } from './src/fs'; -export { parseJson } from './src/json'; -export type { CliErrorOptions } from './src/cli_error'; -export { CliError } from './src/cli_error'; -export { - describeNode, - describeSymbol, - getKindName, - hasIdentifierName, - isAliasSymbol, -} from './src/ts_helpers'; -import * as Path from './src/path'; -export { Path }; -export { SetMap } from './src/set_map'; diff --git a/packages/kbn-type-summarizer-core/kibana.jsonc b/packages/kbn-type-summarizer-core/kibana.jsonc deleted file mode 100644 index 322a6c152b2f7..0000000000000 --- a/packages/kbn-type-summarizer-core/kibana.jsonc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "shared-common", - "id": "@kbn/type-summarizer-core", - "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] -} diff --git a/packages/kbn-type-summarizer-core/package.json b/packages/kbn-type-summarizer-core/package.json deleted file mode 100644 index cae83a800eb3b..0000000000000 --- a/packages/kbn-type-summarizer-core/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@kbn/type-summarizer-core", - "private": true, - "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} diff --git a/packages/kbn-type-summarizer-core/src/cli_error.ts b/packages/kbn-type-summarizer-core/src/cli_error.ts deleted file mode 100644 index c15e5478ea34f..0000000000000 --- a/packages/kbn-type-summarizer-core/src/cli_error.ts +++ /dev/null @@ -1,30 +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. - */ - -/** - * Options for customizing CliError instances - */ -export interface CliErrorOptions { - exitCode?: number; - showHelp?: boolean; -} - -/** - * An error type with specicial behavior when it bubbles up all the way to the root of the CLI - */ -export class CliError extends Error { - public readonly exitCode: number; - public readonly showHelp: boolean; - - constructor(message: string, options: CliErrorOptions = {}) { - super(message); - - this.exitCode = options.exitCode ?? 1; - this.showHelp = options.showHelp ?? false; - } -} diff --git a/packages/kbn-type-summarizer-core/src/error.ts b/packages/kbn-type-summarizer-core/src/error.ts deleted file mode 100644 index 080fa8990ec46..0000000000000 --- a/packages/kbn-type-summarizer-core/src/error.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. - */ - -/** - * Convert an unknown thrown value to an Error instance if it isn't alread - */ -export function toError(thrown: unknown) { - if (thrown instanceof Error) { - return thrown; - } - - return new Error(`${thrown} thrown`); -} - -/** - * Is this error instance a Node.js system error which has an error code attached? - */ -export function isSystemError(error: Error): error is NodeJS.ErrnoException { - return typeof (error as any).code === 'string'; -} diff --git a/packages/kbn-type-summarizer-core/src/fs.ts b/packages/kbn-type-summarizer-core/src/fs.ts deleted file mode 100644 index eafe789c9d05a..0000000000000 --- a/packages/kbn-type-summarizer-core/src/fs.ts +++ /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 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 Fsp from 'fs/promises'; -import { toError, isSystemError } from './error'; - -/** - * Read a file, if the file doesn't exist return undefined. If any other - * error occurs they will be thrown. - */ -export async function tryReadFile( - path: string, - encoding: 'utf-8' | 'utf8' -): Promise; -/** - * Read a file, if the file doesn't exist return undefined. If any other - * error occurs they will be thrown. - */ -export async function tryReadFile(path: string, encoding?: BufferEncoding) { - try { - return await Fsp.readFile(path, encoding); - } catch (_) { - const error = toError(_); - if (isSystemError(error) && error.code === 'ENOENT') { - return undefined; - } - throw error; - } -} diff --git a/packages/kbn-type-summarizer-core/src/json.test.ts b/packages/kbn-type-summarizer-core/src/json.test.ts deleted file mode 100644 index 4bb86652221d9..0000000000000 --- a/packages/kbn-type-summarizer-core/src/json.test.ts +++ /dev/null @@ -1,23 +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 { parseJson } from './json'; - -it('parses JSON', () => { - expect(parseJson('{"foo": "bar"}')).toMatchInlineSnapshot(` - Object { - "foo": "bar", - } - `); -}); - -it('throws more helpful errors', () => { - expect(() => parseJson('{"foo": bar}')).toThrowErrorMatchingInlineSnapshot( - `"Failed to parse JSON: Unexpected token b in JSON at position 8"` - ); -}); diff --git a/packages/kbn-type-summarizer-core/src/json.ts b/packages/kbn-type-summarizer-core/src/json.ts deleted file mode 100644 index dbabff5cbadd8..0000000000000 --- a/packages/kbn-type-summarizer-core/src/json.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { toError } from './error'; - -/** - * Parse JSON, but thrown a more meaningful error message when parsing fails - */ -export function parseJson(json: string, from?: string) { - try { - return JSON.parse(json); - } catch (_) { - const error = toError(_); - throw new Error(`Failed to parse JSON${from ? ` from ${from}` : ''}: ${error.message}`); - } -} diff --git a/packages/kbn-type-summarizer-core/src/log/cli_log.ts b/packages/kbn-type-summarizer-core/src/log/cli_log.ts deleted file mode 100644 index 35195dc1d2133..0000000000000 --- a/packages/kbn-type-summarizer-core/src/log/cli_log.ts +++ /dev/null @@ -1,249 +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 Path from 'path'; -import Util from 'util'; - -import { bold, dim, blueBright, yellowBright, gray, bgRed } from 'chalk'; -import getopts from 'getopts'; -import ts from 'typescript'; -import stripAnsi from 'strip-ansi'; - -import { Logger } from './logger'; -import { describeNode, describeSymbol } from '../ts_helpers'; - -const LOG_LEVEL_RANKS = { - silent: 0, - quiet: 1, - info: 2, - debug: 3, - verbose: 4, -}; - -/** - * Level that the logger is running at, any message logged "above" this level will be dropped - */ -export type LogLevel = keyof typeof LOG_LEVEL_RANKS; - -const LOG_LEVELS = (Object.keys(LOG_LEVEL_RANKS) as LogLevel[]).sort( - (a, b) => LOG_LEVEL_RANKS[a] - LOG_LEVEL_RANKS[b] -); -const LOG_LEVELS_DESC = LOG_LEVELS.slice().reverse(); - -type LogLevelMap = { [k in LogLevel]: boolean }; - -const now = - typeof performance !== 'undefined' ? performance.now.bind(performance) : Date.now.bind(Date); - -const fmt = (prefix: string, msg: string, ...args: string[]) => { - const lines = Util.format(msg, ...args).split('\n'); - - let formatted = lines[0]; - if (lines.length > 1) { - const padding = ' '.repeat(stripAnsi(prefix).length + 1); - for (const line of lines.slice(1)) { - formatted += `\n${padding}${line}`; - } - } - - return `${prefix} ${formatted}\n`; -}; - -const fmtMs = (ms: number) => { - if (ms < 1) { - return dim(`${Math.floor(ms * 100)}µs`); - } - - if (ms <= 5) { - return dim(`${Math.round(ms)}ms`); - } - - if (ms <= 500) { - return `${Math.round(ms)}ms`; - } - - return bold.yellow(`${(ms / 1000).toFixed(2)}s`); -}; - -const fmtDesc = (desc: string | ts.Symbol | ts.Node) => { - if (typeof desc === 'string') { - return Path.isAbsolute(desc) ? Path.relative(process.cwd(), desc) : desc; - } - - return 'kind' in desc ? describeNode(desc) : describeSymbol(desc); -}; - -/** - * Interface of objects which receive log messages, often times points to stdout, but - * replaced with a log message collector in tests - */ -export interface LogWriter { - write(chunk: string): void; -} - -interface Step { - verboseSteps: Map; -} - -/** - * Logger which writes messages in a text format designed for CLIs - */ -export class CliLog implements Logger { - private indent = ''; - private readonly stepStack: Step[] = []; - - static parseLogLevel(level: LogLevel) { - if (!LOG_LEVELS.includes(level)) { - throw new Error('invalid log level'); - } - - const rank = LOG_LEVEL_RANKS[level]; - return Object.fromEntries( - LOG_LEVELS.map((l) => [l, LOG_LEVEL_RANKS[l] <= rank]) - ) as LogLevelMap; - } - - static pickLogLevelFromFlags( - flags: getopts.ParsedOptions, - defaultLogLevl: LogLevel = 'info' - ): LogLevel { - for (const level of LOG_LEVELS_DESC) { - if (Object.prototype.hasOwnProperty.call(flags, level) && flags[level] === true) { - return level; - } - } - - return defaultLogLevl; - } - - private readonly map: LogLevelMap; - constructor( - public readonly level: LogLevel, - private readonly writeTo: LogWriter, - private readonly writeTimes = true - ) { - this.map = CliLog.parseLogLevel(level); - } - - info(msg: string, ...args: any[]) { - if (this.map.info) { - this.writeTo.write(fmt(`${this.indent}${blueBright('info')}`, msg, ...args)); - } - } - - warn(msg: string, ...args: any[]) { - if (this.map.quiet) { - this.writeTo.write(fmt(`${this.indent}${yellowBright('warn')}`, msg, ...args)); - } - } - - error(msg: string, ...args: any[]) { - if (this.map.quiet) { - this.writeTo.write(fmt(`${this.indent}${bgRed.whiteBright('ERROR')}`, msg, ...args)); - } - } - - debug(msg: string, ...args: any[]) { - if (this.map.debug) { - this.writeTo.write(fmt(`${this.indent}${gray('debg')}`, msg, ...args)); - } - } - - verbose(msg: string, ...args: any[]) { - if (this.map.verbose) { - this.writeTo.write(fmt(`${this.indent}${dim('verb')}`, msg, ...args)); - } - } - - success(msg: string, ...args: any[]): void { - if (this.map.quiet) { - this.writeTo.write(fmt(`${this.indent}✅`, msg, ...args)); - } - } - - step(name: string, desc: ts.Symbol | ts.Node | string | null, block: () => T): T { - return this.stepImpl('debug', name, desc, block); - } - - verboseStep(name: string, desc: string | ts.Symbol | ts.Node | null, block: () => T): T { - if (!this.map.debug) { - return block(); - } - - if (!this.stepStack.length || this.map.verbose) { - return this.stepImpl('verbose', name, desc, block); - } - - const step = this.stepStack[0]; - const start = now(); - try { - return block(); - } finally { - const ms = now() - start; - const group = step.verboseSteps.get(name); - if (group) { - group.count += 1; - group.ms += ms; - } else { - step.verboseSteps.set(name, { - count: 1, - ms, - }); - } - } - } - - private stepImpl( - level: 'debug' | 'verbose', - name: string, - desc: string | ts.Symbol | ts.Node | null, - block: () => T - ): T { - if (!this.map[level]) { - return block(); - } - - if (desc !== null) { - this[level]('>', bold(name), dim(`-- ${fmtDesc(desc)}`)); - } else { - this[level]('>', bold(name)); - } - - const start = now(); - let success = true; - const prevIndent = this.indent; - this.indent = ' '.repeat(prevIndent.length + 4); - - const verboseSteps = new Map(); - this.stepStack.unshift({ verboseSteps }); - - try { - return block(); - } catch (error) { - success = false; - throw error; - } finally { - const ms = now() - start; - - this.stepStack.shift(); - if (verboseSteps.size) { - const summary = []; - for (const [step, { count, ms: m }] of verboseSteps) { - summary.push(`${step}x${count}${this.writeTimes ? `: ${fmtMs(m)}` : ''}`); - } - this[level](dim(`verbose steps:\n${summary.join('\n')}`)); - } - - if (this.writeTimes) { - this[level](success ? fmtMs(ms) : `‼️ ${fmtMs(ms)}`); - } - - this.indent = prevIndent; - } - } -} diff --git a/packages/kbn-type-summarizer-core/src/log/index.ts b/packages/kbn-type-summarizer-core/src/log/index.ts deleted file mode 100644 index fac2d627cc590..0000000000000 --- a/packages/kbn-type-summarizer-core/src/log/index.ts +++ /dev/null @@ -1,12 +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. - */ - -export type { Logger } from './logger'; -export type { LogWriter, LogLevel } from './cli_log'; -export { CliLog } from './cli_log'; -export { TestLog } from './test_log'; diff --git a/packages/kbn-type-summarizer-core/src/log/logger.ts b/packages/kbn-type-summarizer-core/src/log/logger.ts deleted file mode 100644 index 300b51c173c78..0000000000000 --- a/packages/kbn-type-summarizer-core/src/log/logger.ts +++ /dev/null @@ -1,71 +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 ts from 'typescript'; - -/** - * Logger interface used by @kbn/type-summarizer-* packages - */ -export interface Logger { - /** - * Write a message to the log with the level "info" - * @param msg any message - * @param args any serializeable values you would like to be appended to the log message - */ - info(msg: string, ...args: any[]): void; - /** - * Write a message to the log with the level "warn" - * @param msg any message - * @param args any serializeable values you would like to be appended to the log message - */ - warn(msg: string, ...args: any[]): void; - /** - * Write a message to the log with the level "error" - * @param msg any message - * @param args any serializeable values you would like to be appended to the log message - */ - error(msg: string, ...args: any[]): void; - /** - * Write a message to the log with the level "debug" - * @param msg any message - * @param args any serializeable values you would like to be appended to the log message - */ - debug(msg: string, ...args: any[]): void; - /** - * Write a message to the log with the level "verbose" - * @param msg any message - * @param args any serializeable values you would like to be appended to the log message - */ - verbose(msg: string, ...args: any[]): void; - /** - * Write a message to the log, only excluded in silent mode - * @param msg any message - * @param args any serializeable values you would like to be appended to the log message - */ - success(msg: string, ...args: any[]): void; - /** - * Write a message to the log indicating the beginning of a step, then run the passed - * block, any log output produced inside that step will be indented and at the end the - * duration of the step will be written. If the log level is below verbose then any - * "verbose steps" executed inside this step will be summaried by this step at the end - * as well. - * @param name a common name for steps of a specific type - * @param desc a specific name to describe the unique information about this step - * @param block the function body which defines this step - */ - step(name: string, desc: ts.Symbol | ts.Node | string | null, block: () => T): T; - /** - * Just like step(), except that unless the logging level is set to verbose the steps with - * the same name will be summaried at the end of the containing step, rather than logged - * directly. - * @param name a common name for steps of a specific type - * @param desc a specific name to describe the unique information about this step - * @param block the function body which defines this step - */ - verboseStep(name: string, desc: ts.Symbol | ts.Node | string | null, block: () => T): T; -} diff --git a/packages/kbn-type-summarizer-core/src/path.ts b/packages/kbn-type-summarizer-core/src/path.ts deleted file mode 100644 index 117a6f62e78cc..0000000000000 --- a/packages/kbn-type-summarizer-core/src/path.ts +++ /dev/null @@ -1,62 +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 Path from 'path'; - -import normalizePath from 'normalize-path'; -const cwd = normalizePath(process.cwd()); - -/** - * Convert a path to a relative path based on the current working directory. - * All paths returned are normalized - */ -export function cwdRelative(path: string) { - return relative(cwd, path); -} - -/** - * Convert a path to a relative path. All paths returned are normalized - */ -export function relative(from: string, to: string) { - return toNormal(Path.relative(from, to)); -} - -/** - * Join segments into a single path. All paths returned are normalized - */ -export function join(...segments: string[]) { - return Path.join(...segments); -} - -/** - * Get all but the last segment of a path, often times the directory containing the path. All paths returned are normalized - */ -export function dirname(path: string) { - return Path.dirname(path); -} - -/** - * Convert a relative path to an absolute path based on the current working directory. All paths returned are normalized. - */ -export function resolve(path: string) { - return Path.isAbsolute(path) ? toNormal(path) : join(cwd, path); -} - -/** - * Returns true if the path is absolute, otherwise false - */ -export function isAbsolute(path: string) { - return Path.isAbsolute(path); -} - -/** - * Normalizes the passed path, ensuring that all path separators are unix-style `/` - */ -export function toNormal(path: string) { - return normalizePath(path); -} diff --git a/packages/kbn-type-summarizer-core/src/set_map.ts b/packages/kbn-type-summarizer-core/src/set_map.ts deleted file mode 100644 index 7ee4a2dd116af..0000000000000 --- a/packages/kbn-type-summarizer-core/src/set_map.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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. - */ - -/** - * A class for collecting items (V) based on some key (K) - */ -export class SetMap { - private sets = new Map>(); - - /** - * Is there a group for the `key`? - */ - has(key: K) { - return this.sets.has(key); - } - - /** - * Add a value to the group with `key`, if the group doesn't exist - * yet it is created. - */ - add(key: K, value: V) { - const set = this.sets.get(key); - if (set) { - set.add(value); - } else { - this.sets.set(key, new Set([value])); - } - } - - /** - * Get the group for the `key`, if the group doesn't exist then - * `undefined` is returned. - */ - get(key: K): Set | undefined { - return this.sets.get(key); - } - - /** - * Returns an iterator for the [K, V] entries stored in the SetMap - */ - values() { - return this.sets.values(); - } -} diff --git a/packages/kbn-type-summarizer-core/src/ts_helpers.ts b/packages/kbn-type-summarizer-core/src/ts_helpers.ts deleted file mode 100644 index 1397b5acb622a..0000000000000 --- a/packages/kbn-type-summarizer-core/src/ts_helpers.ts +++ /dev/null @@ -1,94 +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 ts from 'typescript'; -import Path from 'path'; -import { SetMap } from './set_map'; - -/** - * Does this AST node have a name which is an identifier? - */ -export function hasIdentifierName(node: any): node is { name: ts.Identifier } { - return typeof node === 'object' && node !== null && node.name && ts.isIdentifier(node.name); -} - -/** - * Is this symbol pointing to another symbol? - */ -export function isAliasSymbol(symbol: ts.Symbol) { - // eslint-disable-next-line no-bitwise - return Boolean(symbol.flags & ts.SymbolFlags.Alias); -} - -/** - * Get a human readable string describing a symbol, requires that symbols have a declaration - * which will be passed to describeNode() - */ -export function describeSymbol(symbol: ts.Symbol, cwd?: string) { - if (!symbol.declarations) { - return 'undeclared symbol'; - } - - return `Symbol(${describeNode(symbol.declarations[0], cwd)})`; -} - -function describeNodeLocation(node: ts.Node, cwd = process.cwd()) { - const sourceFile = node.getSourceFile(); - const loc = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile, false)); - return `${Path.relative(cwd, sourceFile.fileName)}:${loc.line + 1}:${loc.character + 1}`; -} - -let syntaxMap: SetMap | undefined; -function getSyntaxMap() { - if (syntaxMap) { - return syntaxMap; - } - - syntaxMap = new SetMap(); - for (const [key, value] of Object.entries(ts.SyntaxKind)) { - if (typeof value === 'number') { - syntaxMap.add(value, key); - } - } - - return syntaxMap; -} - -/** - * Get a human readable name of the syntax "kind". TS nodes use enums for their "kind" field - * which makes it tricky to know what you're looking at, and the `ts.SyntaxKind` map is lossy - * because many enum members have the same numeric value. To get around this we convert the - * ts.SyntaxKind map into a `SetMap` which puts all the syntax kind names for a given number - * into a set and allows us to report all possible type names from `getKindName()` - */ -export function getKindName(node: ts.Node) { - const names = [...(getSyntaxMap().get(node.kind) ?? [])]; - - if (names.length === 1) { - return names[0]; - } else if (names.length > 1) { - const ors = names.slice(-1); - const last = names.at(-1); - return `${ors.join(', ')} or ${last}`; - } - - return 'unknown'; -} - -/** - * Turn a Node instance into a string which describes the type, name, filename, and position of the node - */ -export function describeNode(node: ts.Node, cwd?: string) { - const name = hasIdentifierName(node) - ? ` (${node.name.text})` - : ts.isIdentifier(node) - ? ` (${node.text})` - : ''; - - return `ts.${getKindName(node)}${name} @ ${describeNodeLocation(node, cwd)}`; -} diff --git a/packages/kbn-type-summarizer-core/tsconfig.json b/packages/kbn-type-summarizer-core/tsconfig.json deleted file mode 100644 index 57c1dd1c94e0f..0000000000000 --- a/packages/kbn-type-summarizer-core/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.bazel.json", - "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", - "types": [ - "jest", - "node" - ] - }, - "include": [ - "**/*.ts" - ] -} diff --git a/packages/kbn-type-summarizer/BUILD.bazel b/packages/kbn-type-summarizer/BUILD.bazel deleted file mode 100644 index b1f73bec487ea..0000000000000 --- a/packages/kbn-type-summarizer/BUILD.bazel +++ /dev/null @@ -1,135 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-type-summarizer" -PKG_REQUIRE_NAME = "@kbn/type-summarizer" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "src/tests/**/*", - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//is-path-inside", - "@npm//normalize-path", - "@npm//source-map", - "@npm//strip-ansi", - "@npm//tslib", - "//packages/kbn-type-summarizer-core", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/node", - "@npm//is-path-inside", - "@npm//@types/normalize-path", - "@npm//source-map", - "@npm//strip-ansi", - "@npm//tslib", - "//packages/kbn-type-summarizer-core:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-type-summarizer/README.mdx b/packages/kbn-type-summarizer/README.mdx deleted file mode 100644 index b9a2578eb6757..0000000000000 --- a/packages/kbn-type-summarizer/README.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -id: kibDevDocsOpsTypeSummarizer -slug: /kibana-dev-docs/ops/type-summarizer -title: "@kbn/type-summarizer" -description: A tool to summarize and produce a single .d.ts file from tsc output supporting sourcemaps -date: 2022-05-17 -tags: ['kibana', 'dev', 'contributor', 'operations', 'type', 'summarizer', 'typescript', 'bundler', 'sourcemap'] ---- - -Consumes the .d.ts files produced by `tsc` for a package and generates a single `.d.ts` file of the public types along with a source map that points back to the original source. - -## You mean like API Extractor? - -Yeah, except with source map support and without all the legacy features and other features we disable to generate our current type summaries. - -We first attempted to implement this in api-extractor but we hit a wall when dealing with the `Span` class. This class handles all the text output which ends up becoming source code, and I wasn't able to find a way to associate specific spans with source locations without getting 12 headaches. Instead I decided to try implementing this from scratch, reducing our reliance on the api-extractor project and putting us in control of how we generate type summaries. - -## Using the Type Summarizer - -The type-summarizer CLI from `@kbn/type-summarizer-cli` is automatically called by bazel via the `pkg_npm_types()` rule. If you want to run the CLI manually use `node scripts/type_summarizer ` and the type summary for your package will be written to `data/type_summarizer_output`. - -## How does it work? - -The type summarizer code is fairly well documented. The high level approach is to use two phases: - -### 1. Indexing -In this phase we traverse the symbol and AST graphs to determine the imports, local declarations, and ambient references needed to recreate the exported symbols of a package (along with all their references). This is done by the `AstIndexer` class and more information about the process is available there. - -### 2. Printing -After indexing is complete we use the created index to produce the necessary source code for the type summary file. This process is completed by the `printTypeSummary()` function in `src/lib/type_summary`, which uses the `SourceNode` class from the [source-map package](https://github.com/mozilla/source-map) to create the code and source maps of the type symmary file at the same time. - -The logic of this function is documented and should be relatively easy to follow once the structure of the `AstIndex` type is understood. \ No newline at end of file diff --git a/packages/kbn-type-summarizer/index.ts b/packages/kbn-type-summarizer/index.ts deleted file mode 100644 index a04a27ec1ece7..0000000000000 --- a/packages/kbn-type-summarizer/index.ts +++ /dev/null @@ -1,10 +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. - */ - -export type { SummarizePacakgeOptions } from './src/summarize_package'; -export { summarizePackage } from './src/summarize_package'; diff --git a/packages/kbn-type-summarizer/kibana.jsonc b/packages/kbn-type-summarizer/kibana.jsonc deleted file mode 100644 index e4eb9dc7c6034..0000000000000 --- a/packages/kbn-type-summarizer/kibana.jsonc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "shared-common", - "id": "@kbn/type-summarizer", - "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] -} diff --git a/packages/kbn-type-summarizer/package.json b/packages/kbn-type-summarizer/package.json deleted file mode 100644 index 4442ef893a931..0000000000000 --- a/packages/kbn-type-summarizer/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@kbn/type-summarizer", - "private": true, - "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} diff --git a/packages/kbn-type-summarizer/src/lib/ast_index.ts b/packages/kbn-type-summarizer/src/lib/ast_index.ts deleted file mode 100644 index 27269a91b3fb5..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ast_index.ts +++ /dev/null @@ -1,145 +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 ts from 'typescript'; - -import { DecSymbol, ExportableDec } from './ts_nodes'; -import { ExportDetails } from './export_details'; -import { ImportDetails } from './import_details'; - -/** - * The AstIndex is produced by AstIndexer to represent all of the declarations/imports/refs that - * need to be used to produce the type summary. - */ -export interface AstIndex { - imports: ImportedDecs[]; - locals: LocalDecs[]; - ambientRefs: AmbientRef[]; -} - -/** - * ImportedDecs represent the declarations of a "root symbol" which is found in - * node_modules AND in imported in the source code. These will result in `import` - * and `export` statements in the type summary, based on if they are used locally - * or just re-exported. - */ -export interface ImportedDecs { - type: 'imported decs'; - - /** - * The root symbol which is imported from node_modules and used locally or exported - * by the indexed sourceFile - */ - readonly rootSymbol: DecSymbol; - - /** - * The ImportDetails describing if this is a named import, what name we are importing, - * etc. - */ - readonly details: ImportDetails; - - /** - * The count of local references to this rootSymbol, if this count is 0 and we are - * working with a default or named import, then we can simply re-export this imported - * symbol. - */ - readonly localUsageCount: number; - - /** - * An imported symbol can be exported more than once, so we support an array of export - * details here and ensure that each of these exports are recreated in the type summary - */ - exports: ExportDetails[]; -} - -/** - * AmbientRef objects describe references to root symbols which were never imported - * but are in the node_modules directory. These symbols might be placed there via - * `lib` or `types` configs in the ts project, but it doesn't really matter to us, - * we just need to know that this name is "reserved" and none of our declarations - * can re-use or override this name with different meaning. - */ -export interface AmbientRef { - type: 'ambient ref'; - - /** - * The root symbol which is referenced - */ - readonly rootSymbol: DecSymbol; - - /** - * The name that this root symbol is referenced by, which should be reserved - * for this ambient type in the type summary file. - */ - readonly name: string; -} - -/** - * LocalDecs represent the different rootSymbols which will be declared locally in - * the type summary. They are either declarations copied from the .d.ts files, or - * namespaces which are synthesized to represent imported namespaces. - */ -export type LocalDecs = CopiedDecs | NamespaceDec; - -/** - * A NamespaceDec represents a synthetic namepace which needs to be created in the - * type summary to power a namespace import in the source types. - */ -export interface NamespaceDec { - type: 'namespace dec'; - - /** - * The root symbol that points to the source file we will synthesize with this namespace - */ - readonly rootSymbol: DecSymbol; - - /** - * The sourceFile node which we will synthesize with this namespace, extracted - * from rootSymbol.declarations[0] for ease of access and so we can validate - * the shape of the symbol once. - */ - readonly sourceFile: ts.SourceFile; - - /** - * The members that the eventual namespace will need to have, and the rootSymbols that - * each member will reference/export from the namespace - */ - readonly members: Map; - - /** - * If this namespace is exported then this will be set to ExportDetails. We don't - * know if it is exported until all references to this specific rootSymbol are - * traversed, so `exported` can't be read only and is only defined at the end of indexing. - */ - exported: ExportDetails | undefined; -} - -/** - * CopiedDecs objects represent declarations for a "root symbol" which need to be - * copied into the resulting "type sumary" from the .d.ts files. - */ -export interface CopiedDecs { - type: 'copied decs'; - - /** - * The root symbol which is declared by the `decs` - */ - readonly rootSymbol: DecSymbol; - - /** - * The AST nodes which declare this root symbol - */ - readonly decs: ExportableDec[]; - - /** - * If these declarations are exported then this will be set to ExportDetails. We don't - * know if these decs are exported until all references to this specific rootSymbol are - * traversed, so `exported` can't be read only and is only defined at the end of indexing. - */ - exported: ExportDetails | undefined; -} diff --git a/packages/kbn-type-summarizer/src/lib/ast_indexer.ts b/packages/kbn-type-summarizer/src/lib/ast_indexer.ts deleted file mode 100644 index ed27381454d7a..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ast_indexer.ts +++ /dev/null @@ -1,403 +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 ts from 'typescript'; - -import { Logger, isAliasSymbol, describeSymbol, SetMap } from '@kbn/type-summarizer-core'; - -import { - AstIndex, - AmbientRef, - CopiedDecs, - ImportedDecs, - LocalDecs, - NamespaceDec, -} from './ast_index'; - -import { - toExportableDec, - assertDecSymbol, - DecSymbol, - toDecSymbol, - getSymbolDeclarations, -} from './ts_nodes'; -import { CounterMap } from './counter_map'; -import { SourceFileMapper } from './source_file_mapper'; -import { SymbolResolver } from './symbol_resolver'; -import { AstTraverser } from './ast_traverser'; -import { ImportDetails, getImportDetails } from './import_details'; -import { ExportDetails, getExportDetails } from './export_details'; - -/** - * The `AstIndexer` is responsible for collecting all the relevant information about the exports of - * a sourceFile from it's AST representation. - * - * The #indexExports method is the primary/only interface to use the AstIndexer and where the - * most useful documentation can be found. - */ -export class AstIndexer { - constructor( - private readonly typeChecker: ts.TypeChecker, - private readonly sources: SourceFileMapper, - private readonly symbols: SymbolResolver, - private readonly traverse: AstTraverser, - private readonly log: Logger - ) {} - - private getCopiedDecs(rootSymbol: DecSymbol): CopiedDecs | null { - const decs = rootSymbol.declarations.flatMap((dec) => { - // filter out declarations which are of no interest, traversing back to a type parameter or a - // function parameter, for instance, means this a symbol which is not of interest for this - // project so we ignore them - if (ts.isTypeParameterDeclaration(dec) || ts.isParameter(dec)) { - return []; - } - - if (this.sources.isExternal(dec)) { - return []; - } - - return toExportableDec(dec); - }); - - if (decs.length) { - return { - type: 'copied decs', - decs, - rootSymbol, - exported: undefined, - }; - } - - return null; - } - - private resolveExternalRootSymbol( - externalRootSymbol: DecSymbol, - aliases: ts.Symbol[], - exports: ExportDetails[] | undefined, - localUsageCount: number - ): ImportedDecs[] | AmbientRef { - const imports = aliases.flatMap((alias) => { - // traverse from the use to the symbol, stopping at the first import statement that points into the node_modules directory - let cursor = toDecSymbol(alias); - while (isAliasSymbol(cursor)) { - const next = this.typeChecker.getImmediateAliasedSymbol(cursor); - if (!next) { - break; - } - - // if any of the declarations of the next node are external then we have reched the stepping point that - // takes us from our local code to the node_modules. We won't traverse any more after we collect the - // import details of the declarations of cursoor - const nextIsExternal = getSymbolDeclarations(next).some((d) => this.sources.isExternal(d)); - - if (nextIsExternal) { - return cursor.declarations.flatMap((d) => getImportDetails(d) ?? []); - } - - cursor = toDecSymbol(next); - } - - return []; - }); - - if (!imports.length) { - return { - type: 'ambient ref', - rootSymbol: externalRootSymbol, - name: aliases[0].getName(), - }; - } - - const mergedImports: ImportDetails[] = []; - for (const id of imports) { - const existing = mergedImports.find( - (d) => - d.req === id.req && - d.type === id.type && - (d.type === 'named' && id.type === 'named' ? d.sourceName === id.sourceName : true) - ); - - if (existing) { - existing.typesOnly = existing.typesOnly && id.typesOnly; - } else { - mergedImports.push(id); - } - } - - if (mergedImports.length === 0) { - return []; - } - - return mergedImports.map( - (id): ImportedDecs => ({ - type: 'imported decs', - rootSymbol: externalRootSymbol, - details: id, - exports: exports || [], - localUsageCount, - }) - ); - } - - private findReferencedSymbols(root: ts.Node): ts.Symbol[] { - return [...this.traverse.findReferencedIdentifiers(root)].map((id) => - this.symbols.getForIdentifier(id) - ); - } - - /** - * This method determines all the relevant metadata about the exports of - * a specific `sourceFile` AST node. It indexes all the local declarations, imported - * declarations, and ambient refs that should end up in the public type - * summary file. - * - * To do this we use "symbols" from the `TypeChecker` provided by TypeScript. - * - * > "symbols" in the `TypeChecker` are not related to `Symbol`s in JS. - * - * Symbols describe a specific sourceFile/Type/Value in the source code, and allow - * us to understand the types referenced by specific AST nodes. For instance, we - * can ask the `TypeChecker` for the symbol of an `Identifier` node in the AST (the - * node type representing most named "keywords"; `a` and `foo` in `a(foo)` are both - * `Identifiers`). Every identifier in the source code should map to a specific symbol - * in the type system, which would be returned by the `TypeChecker`. These symbols - * then list the "declarations" which define/declare them. This is often a `class {}` - * or `interface {}` declaration but there are many types of declarations that could - * have defined this symbol. Additionally, the symbol may have multiple declarations - * if function overloads or interface extensions are used. - * - * Symbols can be "alias" symbols, indicating that they are declared in the source code - * but actually point to another declaration, either by variable assignment or via - * imports. When a type/value is imported from another file, the references to that - * type/value use alias symbols, which are declared by the import itself but point - * elsewhere. Thankfully, the `TypeChecker` has an API to traverse up the alias chain - * to the "root symbol". While indexing exports we regularly use the `SymbolResolver` - * to convert a symbol to it's `rootSymbol`, so that we can compare two references and - * determine if they are pointing to the same underlying declarations/type/value. - * - * To determine the full index of exports for a source file we start by asking the - * TypeChecker for the list of exported symbols of some sourceFile, then we traverse - * from those symbols to their declarations. If the symbol has declarations that are - * in node_modules, then either an `ImportedDecs` or `AmbientRef` object is added to - * the index, depending on wether the symbol is ever found to be imported. - * - * `ImportedDecs` describe how to import the declarations for that exported - * symbol in the type summary file. - * `AmbientRef` objects describe names that are expected to be declared ambiently, - * and therefore should be considered reserved in the type summary file. - * - * If any declarations for an exported symbol are local to the source code then they will - * result in a `LocalDecs` object being added to the index. Before adding a `LocalDecs` - * object to the index the AST of each local declaration is traversed to find - * references to other symbols. These references cause additional `ImportedDecs`, - * `AmbientRef`, or `LocalDecs` objects to be added to the index before the exported - * `LocalDecs`, ensuring that referenced declarations come first in the resulting type - * summary file and that all code referenced by the decalarations is included in the type - * summary file. - * - * Once all referenced declarations are found and added to the index the exported - * `LocalDecs` object is added to the index and the process is repeated for the next exported - * symbol. - * - * To ensure that we don't end up with duplicate declarations all `LocalDecs`, `ImportedDecs` - * and `AmbientRef` objects track the "root symbol" that they represent. Any time we - * encounter a new symbol which might need to be added to the index it is first resolved - * to it's root symbol to ensure we haven't already handled it. - */ - indexExports(sourceFile: ts.SourceFile): AstIndex { - return this.log.step('indexExports()', sourceFile.fileName, () => { - const sourceFileSymbol = this.typeChecker.getSymbolAtLocation(sourceFile); - if (!sourceFileSymbol) { - throw new Error(`symbol for source file not found: ${sourceFile.fileName}`); - } - - /** - * all alias symbols which point to a root symbol, which allows - * us to find all the import statements which point to an external - * rootSymbol - */ - const symbolAliases = new SetMap(); - /** - * counts the number of times a rootSymbol is used, this allows us - * to determine if an external rootSymbol needs to be imported for - * local usage, or just exported directly - */ - const rootSymbolLocalUses = new CounterMap(); - /** - * Map of the LocalDecs we have already created, allowing us to make - * sure that we only have a single LocalDecs instance for each rootSymbol - */ - const localDecsBySymbol = new Map(); - /** - * Set of all symbols we've indexed already, allowing us to freely call - * indexSymbol() with each referenced symbol and avoid duplicating work - */ - const indexedSymbols = new Set(); - /** - * Set of DecSymbols which are identified to have some external declarations - * that need to be imported in the final TypeSummary. These will be turned - * into ImportedDecs at the end once we have all the aliases indexed and - * can use the aliases to determine the import statements used to get these - * external symbols into the code. - */ - const externalSymbols = new Set(); - /** - * When we find a rootSymbol which is external, but there aren't any imports - * which pull in that symbol, then we track it here as a ref to an "ambient" - * type, like `Promise<>` from the TS lib. These refs don't end up in the type - * summary, but they do populate the list of UsedNames to ensure that we don't - * clobber those names with local declarations - */ - const ambientRefsByRootSymbol = new SetMap(); - /** - * These are the symbols which are exported from the `sourceFile` being indexed - * grouped by their rootSymbol. This allows us to get the export details for - * external symbols when we are creating ImportedDecs. - */ - const exportSymbolsByRootSymbols = new SetMap(); - /** - * The ordered array of LocalDecs, in the order which these decs should appear - * in the resulting type summary file. - */ - const localDecs: LocalDecs[] = []; - - /** - * This function is called to update the above state with the relevant details - * for a symbol we find as relevant to the exports of `sourceFile`. Calls itself - * with all the internal symbols referenced by the declarations of `symbol`. - */ - const indexSymbol = (symbol: ts.Symbol) => { - return this.log.verboseStep('indexSymbol()', symbol, () => { - if (indexedSymbols.has(symbol)) { - return; - } - indexedSymbols.add(symbol); - - const rootSymbol = this.symbols.toRootSymbol(symbol); - symbolAliases.add(rootSymbol, symbol); - - const existingLocalDec = localDecsBySymbol.get(rootSymbol); - if (!existingLocalDec) { - const [firstDec] = rootSymbol.declarations; - // when using a namespace import for a local module, the symbol resolves to the entire - // sourceFile imported, so we will index the sourceFile's exports and then track the - // namespace we need to synthesize in the output and maybe export - if ( - rootSymbol.declarations.length === 1 && - ts.isSourceFile(firstDec) && - !this.sources.isExternal(firstDec) - ) { - const exports = this.typeChecker.getExportsOfModule(rootSymbol); - const ns: NamespaceDec = { - type: 'namespace dec', - rootSymbol, - exported: undefined, - members: new Map( - exports.map((s) => [s.name, this.symbols.toRootSymbol(s)]) - ), - sourceFile: firstDec, - }; - localDecsBySymbol.set(rootSymbol, ns); - - for (const s of exports) { - indexSymbol(s); - } - localDecs.push(ns); - return; - } - - const locals = this.getCopiedDecs(rootSymbol); - localDecsBySymbol.set(rootSymbol, locals); - - if (locals) { - for (const dec of locals.decs) { - for (const refSymbol of this.findReferencedSymbols(dec)) { - const refRoot = this.symbols.toRootSymbol(refSymbol); - rootSymbolLocalUses.incr(refRoot); - indexSymbol(refSymbol); - } - } - - localDecs.push(locals); - } - } - - if (rootSymbol.declarations.some((d) => this.sources.isExternal(d))) { - externalSymbols.add(rootSymbol); - } - }); - }; - - // iterate through the direct exports of `sourceFile` and index them - for (const exportSymbol of this.typeChecker.getExportsOfModule(sourceFileSymbol)) { - // convert `symbol` to a DecSymbol - assertDecSymbol(exportSymbol); - - // mutate the state to know about this symbol - indexSymbol(exportSymbol); - - // resolve to the rootSymbol that is being exported - const rootSymbol = this.symbols.toRootSymbol(exportSymbol); - - // list this as an exported symbol for when we're trying to define export info for imports - exportSymbolsByRootSymbols.add(rootSymbol, exportSymbol); - - // ensure that if LocalDecs are created for this symbol they have the necessary ExportDetails - const local = localDecsBySymbol.get(rootSymbol); - if (local) { - local.exported = getExportDetails(this.typeChecker, exportSymbol); - } - } - - // convert the externalSymbols to ImportDecs and AmbientRefs based on whether they are imported or not - const importedDecs = [...externalSymbols].flatMap((rootSymbol) => { - const aliases = symbolAliases.get(rootSymbol); - if (!aliases) { - throw new Error(`external symbol has no aliases somehow ${describeSymbol(rootSymbol)}`); - } - - const exportSymbols = exportSymbolsByRootSymbols.get(rootSymbol); - - const resolved = - this.resolveExternalRootSymbol( - rootSymbol, - [...aliases], - exportSymbols - ? [...exportSymbols].map((s) => getExportDetails(this.typeChecker, s)) - : undefined, - rootSymbolLocalUses.get(rootSymbol) - ) ?? []; - - if (Array.isArray(resolved)) { - return resolved; - } - - ambientRefsByRootSymbol.add(resolved.rootSymbol, resolved); - return []; - }); - - return { - imports: importedDecs, - locals: localDecs, - ambientRefs: [...ambientRefsByRootSymbol.values()].flatMap((group) => { - const names = new Set(); - return [...group].filter((g) => { - if (names.has(g.name)) { - return false; - } - - names.add(g.name); - return true; - }); - }), - }; - }); - } -} diff --git a/packages/kbn-type-summarizer/src/lib/ast_traverser.ts b/packages/kbn-type-summarizer/src/lib/ast_traverser.ts deleted file mode 100644 index 64cb98db7eda0..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ast_traverser.ts +++ /dev/null @@ -1,162 +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 ts from 'typescript'; - -import { hasIdentifierName, describeNode, Logger } from '@kbn/type-summarizer-core'; -import { isExportableDec } from './ts_nodes'; -import { SymbolResolver } from './symbol_resolver'; -import { SourceFileMapper } from './source_file_mapper'; - -/** - * This object is responsible for exposing utilities for traversing the AST nodes - * to find relevant identifiers within. - */ -export class AstTraverser { - constructor( - private readonly symbols: SymbolResolver, - private readonly sources: SourceFileMapper, - private readonly log: Logger - ) {} - - private doesIdentifierResolveToLocalDeclaration(id: ts.Identifier) { - const rootSymbol = this.symbols.toRootSymbol(this.symbols.getForIdentifier(id)); - for (const dec of rootSymbol.declarations) { - if (!this.sources.isExternal(dec)) { - return true; - } - } - - return false; - } - - /** - * Traverses through the children of `root` deeply to find all identifiers which are - * references. Ignores idenfiers which are names of structres (like names of properties, - * arguments, function declarations, etc) as well as a few other identifiers which we - * are pretty sure never could point to a reference outside of this node. - * - * The goal here is to find all identifiers which we can then convert into symbols to - * find all the types/values that are referenced by the passed `root` AST node. - */ - findReferencedIdentifiers(root: ts.Node): Set { - return this.log.verboseStep('traverse.findReferencedIdentifiers()', root, () => { - const queue = new Set([root]); - const identifiers = new Set(); - - for (const node of queue) { - // ImportTypeNode's are inline `import('...').Type` nodes which TS often injects for inferred return types - // often time these return types are for identifiers from node_modules which we will maintain, since the - // node modules will be available for the summary. If the imported symbol resolves to local code though - // we need to grab the referenced identifier and replace the whole ImportTypeNode with a local reference - // after the declarations for that symbol are included in the summary - if (ts.isImportTypeNode(node)) { - // iterate the type arguments of ImportTypeNode - if (node.typeArguments) { - for (const arg of node.typeArguments) { - queue.add(arg); - } - } - - if (node.qualifier) { - // if the qualifier resolves to a local declaration then count it as an identifier, later - // on we replace the parent node of identifiers inside or `ImportTypeNode`s - if (ts.isIdentifier(node.qualifier)) { - if (this.doesIdentifierResolveToLocalDeclaration(node.qualifier)) { - identifiers.add(node.qualifier); - } - continue; - } - - if (ts.isQualifiedName(node.qualifier) && ts.isIdentifier(node.qualifier.left)) { - if (this.doesIdentifierResolveToLocalDeclaration(node.qualifier.left)) { - identifiers.add(node.qualifier.left); - } - continue; - } - } - - throw new Error( - `unable to find relevant identifier in ImportTypeNode.qualifier ${describeNode(node)}` - ); - } - - const ignores: ts.Node[] = []; - - // ignore parameter/property names, names aren't ever references to other declarations AFAIK - if (hasIdentifierName(node)) { - ignores.push(node.name); - } - - // ignore the source name of destructured params ie. X in `function foo({ X: Foo }: Type)` - if (ts.isBindingElement(node) && node.propertyName) { - ignores.push(node.propertyName); - } - - // ignore parameter names in type predicates ie. X in `(foo: any): X is Bar` - if (ts.isTypePredicateNode(node)) { - ignores.push(node.parameterName); - } - - // ignore identifiers in "QualifiedName" nodes, which are found in TypeReferences like - // `semver.SemVer`, we don't need to treat `SemVer` as a ref because we're capturing `semver` - if (ts.isQualifiedName(node) && ts.isIdentifier(node.right)) { - ignores.push(node.right); - } - - node.forEachChild((child) => { - if (ignores.includes(child)) { - return; - } - - if (ts.isIdentifier(child)) { - identifiers.add(child); - } else { - queue.add(child); - } - }); - } - - return identifiers; - }); - } - - /** - * Returns "structural" identifiers for a `root` node, which includes the name of the `root` and - * the name of any "members", like the names of properties in an interface or class, the name of - * options in an enum, all so we can identify their posistions later on and make sure they reference - * their source location in the source maps. - */ - findStructuralIdentifiers(root: ts.Node): Set { - return this.log.verboseStep('traverse.findStructuralIdentifiers()', root, () => { - const queue = new Set([root]); - const identifiers = new Set(); - - for (const node of queue) { - if (isExportableDec(node)) { - identifiers.add(node.name); - } - - if ( - ts.isClassDeclaration(node) || - ts.isInterfaceDeclaration(node) || - ts.isTypeLiteralNode(node) || - ts.isEnumDeclaration(node) - ) { - for (const member of node.members) { - if (hasIdentifierName(member)) { - identifiers.add(member.name); - } - } - } - } - - return identifiers; - }); - } -} diff --git a/packages/kbn-type-summarizer/src/lib/counter_map.ts b/packages/kbn-type-summarizer/src/lib/counter_map.ts deleted file mode 100644 index afb5c95723a1d..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/counter_map.ts +++ /dev/null @@ -1,23 +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. - */ - -/** - * A simple Map wrapper which counts the number of times a value `K` is - * passed to `incr()`. - */ -export class CounterMap { - private counters = new Map(); - - incr(key: K, by: number = 1) { - this.counters.set(key, (this.counters.get(key) ?? 0) + by); - } - - get(key: K): number { - return this.counters.get(key) ?? 0; - } -} diff --git a/packages/kbn-type-summarizer/src/lib/dts_snipper.ts b/packages/kbn-type-summarizer/src/lib/dts_snipper.ts deleted file mode 100644 index 02f25095fcdf1..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/dts_snipper.ts +++ /dev/null @@ -1,257 +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 ts from 'typescript'; - -import { describeNode, Logger } from '@kbn/type-summarizer-core'; -import { DecSymbol } from './ts_nodes'; -import { AstTraverser } from './ast_traverser'; -import { SymbolResolver } from './symbol_resolver'; - -const COMMENT_TRIM = /^(\s+)(\/\*|\*|\/\/)/; - -/** - * A Snippet which represents an arbitrary bit of source code. The `value` - * of these snippets will be included verbatim in the type summary output - */ -export interface SourceSnippet { - type: 'source'; - value: string; -} - -/** - * A Snippet which represents an existing `export` modifier, or the location where - * one should exist if it needs to exist. When printing the `Snippet`s to - * the type summary file we will determine if the structure bring printed - * should be inline-exported, and if so replace this snippet with the - * relevant export/export-type keyword(s). If the structure shouldn't be - * exported inline then we will simply ignore this snippet. - */ -export interface ExportSnippet { - type: 'export'; - noExportRequiresDeclare: boolean; -} - -/** - * A Snippet which represents an identifier in the source. These snippets will - * be replaced with `SourceNode` objects in the type summary output so that - * the `.map` file can be generated which maps the identifiers to their original - * source location. - */ -export interface IdentifierSnippet { - type: 'indentifier'; - rootSymbol: DecSymbol; - identifier: ts.Identifier; - text: string; - structural: boolean; -} - -export type Snippet = SourceSnippet | ExportSnippet | IdentifierSnippet; - -/** - * The DtsSnipper is responsible for taking the source text of an AST node - * and converting it into an array of `Snippet` objects, which allow us to - * reuse the code structure from `.d.ts` produced by TS but replace specific - * snippets of that text with different values or `SourceNode`s from the - * `source-map` library which allows is how we produce source-maps for our - * type summary. - */ -export class DtsSnipper { - constructor( - private readonly traverse: AstTraverser, - private readonly symbols: SymbolResolver, - private readonly log: Logger - ) {} - - private getVariableDeclarationList(node: ts.VariableDeclaration) { - const list = node.parent; - if (!ts.isVariableDeclarationList(list)) { - throw new Error( - `expected parent of variable declaration to be a VariableDeclarationList ${describeNode( - list - )}` - ); - } - return list; - } - - private getSourceWithLeadingComments(node: ts.Node) { - // variable declarations regularly have leading comments but they're two-parents up, so we have to handle them separately - if (!ts.isVariableDeclaration(node)) { - return node.getFullText(); - } - - const list = this.getVariableDeclarationList(node); - if (list.declarations.length > 1) { - return node.getFullText(); - } - - const statement = list.parent; - if (!ts.isVariableStatement(statement)) { - throw new Error('expected parent of VariableDeclarationList to be a VariableStatement'); - } - - return statement.getFullText(); - } - - private getLeadingComments(node: ts.Node): Snippet[] { - const fullText = this.getSourceWithLeadingComments(node); - const ranges = ts.getLeadingCommentRanges(fullText, 0); - if (!ranges) { - return []; - } - - return ranges.flatMap((range) => { - const comment = fullText - .slice(range.pos, range.end) - .split('\n') - .map((line) => { - const match = line.match(COMMENT_TRIM); - if (!match) { - return line; - } - - const [, spaces, type] = match; - return line.slice(type === '*' ? spaces.length - 1 : spaces.length); - }) - .map((line) => `${line}`) - .join('\n'); - - if (comment.startsWith('/// { - const snippets: Snippet[] = this.getLeadingComments(root); - - const getIdStart = (id: ts.Identifier) => - ts.isImportTypeNode(id.parent) - ? id.parent.getStart() - : ts.isQualifiedName(id.parent) && ts.isImportTypeNode(id.parent.parent) - ? id.parent.parent.getStart() - : id.getStart(); - const getIdEnd = (id: ts.Identifier) => - ts.isImportTypeNode(id.parent) - ? id.parent.getEnd() - : ts.isQualifiedName(id.parent) && ts.isImportTypeNode(id.parent.parent) - ? id.parent.parent.getEnd() - : id.getEnd(); - - const structural = this.traverse.findStructuralIdentifiers(root); - const identifiers = Array.from( - new Set([...structural, ...this.traverse.findReferencedIdentifiers(root)]) - ).sort((a, b) => getIdStart(a) - getIdStart(b)); - - const source = root.getText(); - const sourceStart = root.getStart(); - const sourceEnd = sourceStart + source.length; - let cursor = sourceStart; - - // if there is text from the source between our current position and some other position - // then copy it into the result and update our current position to that position - const maybeSlurpTo = (until: number) => { - if (cursor < until) { - snippets.push({ - type: 'source', - value: source.slice(cursor - sourceStart, until - sourceStart), - }); - cursor = until; - } - }; - - // Either replace the existing export with a placeholder, or inject an export placeholder before - // the root nodes own text so we know where to put the export if needed - const exportMod = root.modifiers?.find((m) => m.kind === ts.SyntaxKind.ExportKeyword); - // when TS prints a function declaration to the .d.ts file with an `export` keyword, it doesn't need to be - // `declare`d, so it sometimes skips it. If we end up striping the `export` keyword we need to put `declare` - // in it's place so that the `.d.ts` syntax is valid - const noExportRequiresDeclare = - (ts.isFunctionDeclaration(root) || ts.isClassDeclaration(root)) && - !root.modifiers?.some((m) => m.kind === ts.SyntaxKind.DeclareKeyword); - - if (exportMod) { - const modStart = exportMod.getStart(); - const modEnd = exportMod.getEnd(); - maybeSlurpTo(modStart); - - snippets.push({ - type: 'export', - noExportRequiresDeclare, - }); - - // export is always followed by a space, so skip the space too - cursor = modEnd + 1; - } else { - const rootStart = root.getStart(); - maybeSlurpTo(rootStart); - - snippets.push({ - type: 'export', - noExportRequiresDeclare, - }); - cursor = rootStart; - } - - // inject a `const`, `let`, or `var` before variable declarations - if (ts.isVariableDeclaration(root) && ts.isVariableDeclarationList(root.parent)) { - // eslint-disable-next-line no-bitwise - if (root.parent.flags & ts.NodeFlags.Const) { - snippets.push({ - type: 'source', - value: 'declare const ', - }); - // eslint-disable-next-line no-bitwise - } else if (root.parent.flags & ts.NodeFlags.Let) { - snippets.push({ - type: 'source', - value: 'declare let ', - }); - } else { - snippets.push({ - type: 'source', - value: 'declare var ', - }); - } - } - - for (const identifier of identifiers) { - const start = getIdStart(identifier); - const end = getIdEnd(identifier); - maybeSlurpTo(start); - - snippets.push({ - type: 'indentifier', - identifier, - text: identifier.getText(), - rootSymbol: this.symbols.toRootSymbol( - this.symbols.getForIdentifier(identifier), - identifier - ), - structural: structural.has(identifier), - }); - - cursor = end; - } - - maybeSlurpTo(sourceEnd); - - return snippets; - }); - } -} diff --git a/packages/kbn-type-summarizer/src/lib/export_details.ts b/packages/kbn-type-summarizer/src/lib/export_details.ts deleted file mode 100644 index 6a805e5707fdd..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/export_details.ts +++ /dev/null @@ -1,83 +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 * as ts from 'typescript'; - -import { describeNode, isAliasSymbol } from '@kbn/type-summarizer-core'; -import { isExportableDec, getSymbolDeclarations } from './ts_nodes'; - -export type ExportDetails = NamedExportDetails | DefaultExportDetails; - -export interface DefaultExportDetails { - type: 'default'; -} - -export interface NamedExportDetails { - type: 'named'; - typeOnly: boolean; - name: string; -} - -/** - * Determine the export name of an export symbol - */ -function getExportName(node: ts.Node): string { - if (ts.isExportSpecifier(node) || isExportableDec(node)) { - return node.name.text; - } - - throw new Error(`unsure how to get export name from ${describeNode(node)}`); -} - -/** - * Determine if an export symbol was type-only exported. This would be true if the top-level export - * statement is type only, or if there are other export statements up the alias chain where the - * parent symbol was type-only exported. - */ -function isTypeOnlyExported(typeChecker: ts.TypeChecker, exportSymbol: ts.Symbol) { - if (getSymbolDeclarations(exportSymbol).some((e) => ts.isTypeOnlyImportOrExportDeclaration(e))) { - return true; - } - - if (isAliasSymbol(exportSymbol)) { - const next = typeChecker.getImmediateAliasedSymbol(exportSymbol); - if (next && isTypeOnlyExported(typeChecker, next)) { - return true; - } - } - return false; -} - -/** - * Given an exported symbol, determine details about the export from the symbols declarations - * including if it was a type-only export, a default export, or a named export and the name - * it was exported with - */ -export function getExportDetails( - typeChecker: ts.TypeChecker, - exportSymbol: ts.Symbol -): ExportDetails { - if (!exportSymbol.declarations?.length) { - throw new Error('unable to get export details for symbols without any declarations'); - } - - if ( - exportSymbol.declarations.length === 1 && - ts.isExportAssignment(exportSymbol.declarations[0]) - ) { - return { - type: 'default', - }; - } - - return { - type: 'named', - typeOnly: isTypeOnlyExported(typeChecker, exportSymbol), - name: getExportName(exportSymbol.declarations[0]), - }; -} diff --git a/packages/kbn-type-summarizer/src/lib/import_details.ts b/packages/kbn-type-summarizer/src/lib/import_details.ts deleted file mode 100644 index ca68c79fe6a58..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/import_details.ts +++ /dev/null @@ -1,135 +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 * as ts from 'typescript'; - -import { describeNode } from '@kbn/type-summarizer-core'; - -interface BaseImportDetails { - typesOnly: boolean; - req: string; - node: T; -} - -/** - * Indicates that the import was using `import * as X from 'y'` syntax - */ -export interface NamespaceImportDetails - extends BaseImportDetails { - type: 'namespace'; -} - -/** - * Indicates that the import was using `import X from 'y'` syntax - */ -export interface DefaultImportDetails extends BaseImportDetails { - type: 'default'; -} - -/** - * Indicates that the import was using `import { X } from 'y'` syntax, along - * with the name of the imported value from the source module. - */ -export interface NamedImportDetails - extends BaseImportDetails { - type: 'named'; - sourceName: string; -} - -/** - * The different types of ImportDetails that can be returned from `getImportDetails()` - */ -export type ImportDetails = NamespaceImportDetails | DefaultImportDetails | NamedImportDetails; - -/** - * Type guard for nodes which have a module specifier - */ -function hasModuleSpecifier( - node: T -): node is T & { moduleSpecifier: ts.StringLiteral } { - return !!(node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)); -} - -/** - * Determine the module request from a node which might have one, otherwise throw - */ -function getReq(node: ts.ImportDeclaration | ts.ExportDeclaration) { - if (hasModuleSpecifier(node)) { - return node.moduleSpecifier.text; - } - - throw new Error( - `syntax error, module specifier should be a string literal ${describeNode(node)}` - ); -} - -/** - * Given any node, determine if it represents a node that is related to an import statement - * and determine the details about that import, including type, req, source name (for named imports) - * and if the import is type-only. - * - * This also works to get the "import" details from `export ... from '...'` statements. - */ -export function getImportDetails(node: ts.Node): ImportDetails | undefined { - // import { bar } from './bar' - if (ts.isImportSpecifier(node)) { - return { - type: 'named', - typesOnly: ts.isTypeOnlyImportOrExportDeclaration(node), - sourceName: node.propertyName?.text ?? node.name.text, - req: getReq(node.parent.parent.parent), - node, - }; - } - - // `export { bar } from './bar'` or `export { x }` - if (ts.isExportSpecifier(node)) { - // if there isn't a related module specifier then this export isn't a type of "import" - if (!node.parent.parent.moduleSpecifier) { - return; - } - - return { - type: 'named', - typesOnly: ts.isTypeOnlyImportOrExportDeclaration(node), - sourceName: node.propertyName?.text ?? node.name.text, - req: getReq(node.parent.parent), - node, - }; - } - - // import Foo from 'foo' - if (ts.isImportClause(node)) { - return { - type: 'default', - typesOnly: ts.isTypeOnlyImportOrExportDeclaration(node), - req: getReq(node.parent), - node, - }; - } - - // import * as Foo from 'foo' - if (ts.isNamespaceImport(node)) { - return { - type: 'namespace', - typesOnly: ts.isTypeOnlyImportOrExportDeclaration(node), - req: getReq(node.parent.parent), - node, - }; - } - - // export * as Foo from 'foo' - if (ts.isNamespaceExport(node)) { - return { - type: 'namespace', - typesOnly: ts.isTypeOnlyImportOrExportDeclaration(node), - req: getReq(node.parent), - node, - }; - } -} diff --git a/packages/kbn-type-summarizer/src/lib/source_file_mapper.ts b/packages/kbn-type-summarizer/src/lib/source_file_mapper.ts deleted file mode 100644 index 0622d31fed5b0..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/source_file_mapper.ts +++ /dev/null @@ -1,36 +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 * as ts from 'typescript'; -import { Path } from '@kbn/type-summarizer-core'; -import isPathInside from 'is-path-inside'; - -/** - * Wrapper class around helpers for determining information - * about source files. - */ -export class SourceFileMapper { - constructor(private readonly dtsDir: string) {} - - getAbsolute(node: ts.Node) { - return node.getSourceFile().fileName; - } - - isNodeModule(path: string) { - return ( - isPathInside(path, this.dtsDir) ? Path.relative(this.dtsDir, path) : Path.toNormal(path) - ) - .split('/') - .includes('node_modules'); - } - - isExternal(node: ts.Node) { - const path = this.getAbsolute(node); - return this.isNodeModule(path); - } -} diff --git a/packages/kbn-type-summarizer/src/lib/source_mapper.ts b/packages/kbn-type-summarizer/src/lib/source_mapper.ts deleted file mode 100644 index 86f336a44f19a..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/source_mapper.ts +++ /dev/null @@ -1,149 +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 * as ts from 'typescript'; -import { SourceNode, SourceMapConsumer, BasicSourceMapConsumer } from 'source-map'; - -import { Logger, tryReadFile, parseJson, Path, describeNode } from '@kbn/type-summarizer-core'; - -import { SourceFileMapper } from './source_file_mapper'; - -type SourceMapConsumerEntry = [ts.SourceFile, BasicSourceMapConsumer | undefined]; - -/** - * Wrapper class for utilities that deal with reading the source maps produced by - * tsc along with the .d.ts, as well as creating the SourceNode instances we use to - * create our type summary along with source maps. - */ -export class SourceMapper { - static async forSourceFiles( - log: Logger, - sources: SourceFileMapper, - repoRelativePackageDir: string, - program: ts.Program - ) { - const entries = await Promise.all( - program - .getSourceFiles() - .filter((f) => !sources.isNodeModule(f.fileName)) - .sort((a, b) => a.fileName.localeCompare(b.fileName)) - .map(async (sourceFile): Promise => { - if (sources.isNodeModule(sourceFile.fileName)) { - return; - } - - const text = sourceFile.getText(); - const match = text.match(/^\/\/#\s*sourceMappingURL=(.*)/im); - if (!match) { - return [sourceFile, undefined]; - } - - const relSourceFile = Path.cwdRelative(sourceFile.fileName); - const sourceMapPath = Path.join(Path.dirname(sourceFile.fileName), match[1]); - const relSourceMapPath = Path.cwdRelative(sourceMapPath); - const sourceJson = await tryReadFile(sourceMapPath, 'utf8'); - if (!sourceJson) { - throw new Error( - `unable to find source map for [${relSourceFile}] expected at [${match[1]}]` - ); - } - - const json = parseJson(sourceJson, `source map at [${relSourceMapPath}]`); - return [sourceFile, await new SourceMapConsumer(json)]; - }) - ); - - const consumers = new Map(entries.filter((e): e is SourceMapConsumerEntry => !!e)); - log.debug( - 'loaded sourcemaps for', - Array.from(consumers.keys()).map((s) => Path.relative(process.cwd(), s.fileName)) - ); - - return new SourceMapper(consumers, repoRelativePackageDir); - } - - private readonly sourceFixDir: string; - constructor( - private readonly consumers: Map, - repoRelativePackageDir: string - ) { - this.sourceFixDir = Path.join('/', repoRelativePackageDir); - } - - /** - * We ensure that `sourceRoot` is not defined in the tsconfig files, and we assume that the `source` value - * for each file in the source map will be a relative path out of the bazel-out dir and to the `repoRelativePackageDir` - * or some path outside of the package in rare situations. Our goal is to convert each of these source paths - * to new path that is relative to the `repoRelativePackageDir` path. To do this we resolve the `repoRelativePackageDir` - * as if it was at the root of the filesystem, then do the same for the `source`, so both paths should be - * absolute, but only include the path segments from the root of the repo. We then get the relative path from - * the absolute version of the `repoRelativePackageDir` to the absolute version of the `source`, which should give - * us the path to the source, relative to the `repoRelativePackageDir`. - */ - private fixSourcePath(source: string) { - return Path.relative(this.sourceFixDir, Path.join('/', source)); - } - - private findOriginalPosition(node: ts.Node) { - const dtsSource = node.getSourceFile(); - - if (!this.consumers.has(dtsSource)) { - throw new Error(`sourceFile for [${dtsSource.fileName}] didn't have sourcemaps loaded`); - } - - const consumer = this.consumers.get(dtsSource); - if (!consumer) { - return; - } - - const posInDts = dtsSource.getLineAndCharacterOfPosition(node.getStart()); - const pos = consumer.originalPositionFor({ - /* ts line column numbers are 0 based, source map column numbers are also 0 based */ - column: posInDts.character, - /* ts line numbers are 0 based, source map line numbers are 1 based */ - line: posInDts.line + 1, - }); - - return { - ...pos, - source: pos.source ? this.fixSourcePath(pos.source) : null, - }; - } - - getOriginalSourcePath(sourceFile: ts.SourceFile) { - const consumer = this.consumers.get(sourceFile); - if (!consumer) { - throw new Error(`no source map defined for ${describeNode(sourceFile)}`); - } - - if (consumer.sources.length !== 1) { - throw new Error( - `tsc sourcemap produced ${ - consumer.sources.length - } source entries, expected 1: ${describeNode(sourceFile)}` - ); - } - - return this.fixSourcePath(consumer.sources[0]); - } - - getSourceNode(generatedNode: ts.Node, code: string) { - const pos = this.findOriginalPosition(generatedNode); - - if (pos && pos.line && pos.column && pos.source) { - return new SourceNode(pos.line, pos.column, pos.source, code, pos.name ?? undefined); - } - } - - close() { - for (const consumer of this.consumers.values()) { - consumer?.destroy(); - } - this.consumers.clear(); - } -} diff --git a/packages/kbn-type-summarizer/src/lib/symbol_resolver.ts b/packages/kbn-type-summarizer/src/lib/symbol_resolver.ts deleted file mode 100644 index 299cc8d38943c..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/symbol_resolver.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 ts from 'typescript'; - -import { Logger, isAliasSymbol, CliError, describeNode } from '@kbn/type-summarizer-core'; -import { DecSymbol, isDecSymbol } from './ts_nodes'; -import { getImportDetails } from './import_details'; - -/** - * Wrapper class around utilities for resolving symbols and producing meaningful errors when those - * symbols can't be resolved properly. - */ -export class SymbolResolver { - constructor(private readonly typeChecker: ts.TypeChecker, private readonly log: Logger) {} - - getForIdentifier(id: ts.Identifier) { - return this.log.verboseStep('symbols.getForIdentifier()', id, () => { - const symbol = this.typeChecker.getSymbolAtLocation(id); - if (!symbol) { - throw new Error(`unable to find symbol for ${describeNode(id)}`); - } - - return symbol; - }); - } - - toRootSymbol(alias: ts.Symbol, source?: ts.Node): DecSymbol { - return this.log.verboseStep('symbols.toRootSymbol()', alias, () => { - const root = isAliasSymbol(alias) ? this.typeChecker.getAliasedSymbol(alias) : alias; - - if (!isDecSymbol(root)) { - const importDetails = [...(alias.declarations ?? []), ...(source ? [source] : [])].flatMap( - (d) => getImportDetails(d) ?? [] - ); - - if (importDetails.length) { - throw new CliError( - `unable to find declarations for symbol imported from "${ - importDetails[0].req - }". If this is an external module, make sure is it listed in the type dependencies for this package. If it's internal then make sure that TypeScript understands the types of the imported value. Imported: ${describeNode( - importDetails[0].node - )}` - ); - } - - throw new Error('expected symbol to have declarations'); - } - - return root; - }); - } -} diff --git a/packages/kbn-type-summarizer/src/lib/ts_nodes/dec_symbol.ts b/packages/kbn-type-summarizer/src/lib/ts_nodes/dec_symbol.ts deleted file mode 100644 index c4443ed25de9c..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ts_nodes/dec_symbol.ts +++ /dev/null @@ -1,33 +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 ts from 'typescript'; - -export type DecSymbol = ts.Symbol & { - declarations: NonNullable; -}; - -export function isDecSymbol(symbol: ts.Symbol): symbol is DecSymbol { - return !!symbol.declarations && symbol.declarations.length > 0; -} - -export function assertDecSymbol(symbol: ts.Symbol): asserts symbol is DecSymbol { - if (!isDecSymbol(symbol)) { - throw new Error(`Expected symbol to have declarations.`); - } -} - -export function toDecSymbol(symbol: ts.Symbol): DecSymbol { - assertDecSymbol(symbol); - return symbol; -} - -export function getSymbolDeclarations(symbol: ts.Symbol) { - assertDecSymbol(symbol); - return symbol.declarations; -} diff --git a/packages/kbn-type-summarizer/src/lib/ts_nodes/export_from.ts b/packages/kbn-type-summarizer/src/lib/ts_nodes/export_from.ts deleted file mode 100644 index bbedffd232753..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ts_nodes/export_from.ts +++ /dev/null @@ -1,17 +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 ts from 'typescript'; - -export type ExportFromDeclaration = ts.ExportDeclaration & { - moduleSpecifier: NonNullable; -}; - -export function isExportFromDeclaration(node: ts.Node): node is ExportFromDeclaration { - return ts.isExportDeclaration(node) && !!node.moduleSpecifier; -} diff --git a/packages/kbn-type-summarizer/src/lib/ts_nodes/exportable_node.ts b/packages/kbn-type-summarizer/src/lib/ts_nodes/exportable_node.ts deleted file mode 100644 index c9657523104bf..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ts_nodes/exportable_node.ts +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 ts from 'typescript'; - -import { describeNode, hasIdentifierName } from '@kbn/type-summarizer-core'; - -export type ExportableDec = ( - | ts.ClassDeclaration - | ts.FunctionDeclaration - | ts.TypeAliasDeclaration - | ts.VariableDeclaration - | ts.InterfaceDeclaration - | ts.EnumDeclaration - | ts.ModuleDeclaration -) & { name: ts.Identifier }; - -export function isExportableDec(node: ts.Node): node is ExportableDec { - return ( - (node.kind === ts.SyntaxKind.ClassDeclaration || - node.kind === ts.SyntaxKind.FunctionDeclaration || - node.kind === ts.SyntaxKind.TypeAliasDeclaration || - node.kind === ts.SyntaxKind.VariableDeclaration || - node.kind === ts.SyntaxKind.InterfaceDeclaration || - node.kind === ts.SyntaxKind.EnumDeclaration || - node.kind === ts.SyntaxKind.ModuleDeclaration) && - hasIdentifierName(node) - ); -} - -export function assertExportableDec(node: ts.Node): asserts node is ExportableDec { - if (!isExportableDec(node)) { - throw new Error(`not a valid ExportableDec ${describeNode(node)}`); - } -} - -export function toExportableDec(node: ts.Node): ExportableDec { - assertExportableDec(node); - return node; -} - -export function isTypeDeclaration(dec: ExportableDec) { - return ( - ts.isInterfaceDeclaration(dec) || - ts.isTypeAliasDeclaration(dec) || - ts.isEnumDeclaration(dec) || - ts.isModuleDeclaration(dec) - ); -} diff --git a/packages/kbn-type-summarizer/src/lib/ts_nodes/imports.ts b/packages/kbn-type-summarizer/src/lib/ts_nodes/imports.ts deleted file mode 100644 index fefde651a0aef..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ts_nodes/imports.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 ts from 'typescript'; - -import { describeNode } from '@kbn/type-summarizer-core'; - -export interface ImportDescriptor { - declaration: ts.ImportDeclaration | ts.ExportDeclaration; - moduleSpecifier: string; -} - -export function getImportDescriptor( - specifier: ts.ImportSpecifier | ts.ExportSpecifier -): ImportDescriptor | undefined { - const declaration = ts.isImportSpecifier(specifier) - ? // import specifiers are always within NamedImports nodes - // which are always with ImportClause nodes - // which are always within ImportDeclaration nodes - specifier.parent.parent.parent - : // export specifiers are always within NamedExports nodes - // which are always within ExportDeclaration nodes - specifier.parent.parent; - - if (declaration.moduleSpecifier && ts.isStringLiteral(declaration.moduleSpecifier)) { - return { - declaration, - moduleSpecifier: declaration.moduleSpecifier.text, - }; - } - - if (ts.isImportDeclaration(declaration) && !ts.isStringLiteral(declaration.moduleSpecifier)) { - throw new Error( - `SyntaxError: ImportDeclaration.moduleSpecifier must be a string literal ${describeNode( - declaration - )}` - ); - } - - return undefined; -} diff --git a/packages/kbn-type-summarizer/src/lib/ts_nodes/index.ts b/packages/kbn-type-summarizer/src/lib/ts_nodes/index.ts deleted file mode 100644 index 148c8d5a870ed..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ts_nodes/index.ts +++ /dev/null @@ -1,13 +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. - */ - -export * from './dec_symbol'; -export * from './export_from'; -export * from './exportable_node'; -export * from './imports'; -export * from './syntax_kind'; diff --git a/packages/kbn-type-summarizer/src/lib/ts_nodes/syntax_kind.ts b/packages/kbn-type-summarizer/src/lib/ts_nodes/syntax_kind.ts deleted file mode 100644 index 7d4a4a80761cf..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ts_nodes/syntax_kind.ts +++ /dev/null @@ -1,20 +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 ts from 'typescript'; - -export function assertKind( - node: ts.Node, - test: (n: ts.Node) => n is T -): asserts node is T { - if (!test(node)) { - throw new Error( - `expected node to match [${test.name}], actual kind: ${ts.SyntaxKind[node.kind]}` - ); - } -} diff --git a/packages/kbn-type-summarizer/src/lib/ts_project.ts b/packages/kbn-type-summarizer/src/lib/ts_project.ts deleted file mode 100644 index 9d3a43ba11130..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/ts_project.ts +++ /dev/null @@ -1,23 +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 * as ts from 'typescript'; - -/** - * Parse a tsconfig file and list of input files into a TypeScript Program object. - */ -export function createTsProject(tsConfig: ts.ParsedCommandLine, rootNames: string[]) { - return ts.createProgram({ - rootNames, - options: { - ...tsConfig.options, - skipLibCheck: false, - }, - projectReferences: tsConfig.projectReferences, - }); -} diff --git a/packages/kbn-type-summarizer/src/lib/tsconfig_file.ts b/packages/kbn-type-summarizer/src/lib/tsconfig_file.ts deleted file mode 100644 index d8ecd1b559a5e..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/tsconfig_file.ts +++ /dev/null @@ -1,31 +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 * as ts from 'typescript'; - -import { CliError, Path } from '@kbn/type-summarizer-core'; - -/** - * Read TS's special variable of JSON from a file into a plain object - */ -function readTsConfigFile(path: string) { - const json = ts.readConfigFile(path, ts.sys.readFile); - - if (json.error) { - throw new CliError(`Unable to load tsconfig file: ${json.error.messageText}`); - } - - return json.config; -} - -/** - * Read a tsconfig.json file from dist and parse it using utilities from the typscript package. - */ -export function loadTsConfigFile(path: string) { - return ts.parseJsonConfigFileContent(readTsConfigFile(path) ?? {}, ts.sys, Path.dirname(path)); -} diff --git a/packages/kbn-type-summarizer/src/lib/type_summary/print_imports.ts b/packages/kbn-type-summarizer/src/lib/type_summary/print_imports.ts deleted file mode 100644 index 542b4bc3c3e2a..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/type_summary/print_imports.ts +++ /dev/null @@ -1,104 +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 { Logger } from '@kbn/type-summarizer-core'; -import { SourceNode } from 'source-map'; - -import { ImportedDecs } from '../ast_index'; - -import { TypeSummaryNamer } from './type_summary_namer'; -import { exportSomeName } from './export_some_name'; - -/** - * Convert an import request into a usable keyword, for when we don't have much information about a good name for an import - */ -const reqToKeyword = (req: string) => - req.split(/[A-Z\W]/).reduce((acc, chunk) => { - if (!chunk) { - return acc; - } - if (acc) { - return acc + chunk[0].toUpperCase() + chunk.slice(1).toLowerCase(); - } - return chunk.toLowerCase(); - }, ''); - -/** - * Reads the imports from the `index` and adds the necessary `SourceNode`s to the `source` for each. - */ -export function printImports( - imports: ImportedDecs[], - names: TypeSummaryNamer, - log: Logger, - source: SourceNode -) { - log.step('printImports()', `${imports.length} imports`, () => { - for (const i of imports) { - const name = names.get( - i.rootSymbol, - // if we don't use it locally, don't try to re-use its name - i.localUsageCount ? i.details.node.name?.getText() ?? reqToKeyword(i.details.req) : '_' - ); - - if (i.details.type === 'default') { - source.add(`import ${name} from '${i.details.req}'\n`); - for (const exported of i.exports) { - if (exported.type === 'default') { - source.add(`export default ${name}\n`); - } else { - source.add(exportSomeName(exported, name)); - } - } - } else if (i.details.type === 'namespace') { - source.add(`import * as ${name} from '${i.details.req}'\n`); - for (const exported of i.exports) { - if (exported.type === 'default') { - source.add(`export default ${name}\n`); - } else { - source.add(exportSomeName(exported, name)); - } - } - } else { - const { details, exports, localUsageCount } = i; - - let imported = false; - const ensureImported = () => { - if (!imported) { - imported = true; - source.add( - `import { ${ - details.sourceName !== name ? `${details.sourceName} as ${name}` : name - } } from '${details.req}'\n` - ); - } - }; - - if (localUsageCount) { - ensureImported(); - } - - for (const exported of exports) { - if (exported.type === 'default') { - ensureImported(); - source.add(`export default ${name}\n`); - } else { - source.add( - `export ${exported.typeOnly ? `type ` : ''}{ ${ - exported.name !== details.sourceName - ? `${details.sourceName} as ${exported.name}` - : details.sourceName - } } from '${details.req}'\n` - ); - } - } - } - } - - source.add('\n'); - }); -} diff --git a/packages/kbn-type-summarizer/src/lib/type_summary/print_locals.ts b/packages/kbn-type-summarizer/src/lib/type_summary/print_locals.ts deleted file mode 100644 index 332b34b6d731e..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/type_summary/print_locals.ts +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { Logger } from '@kbn/type-summarizer-core'; -import { SourceNode } from 'source-map'; - -import { isTypeDeclaration } from '../ts_nodes'; -import { LocalDecs } from '../ast_index'; -import { SourceMapper } from '../source_mapper'; -import { DtsSnipper } from '../dts_snipper'; - -import { TypeSummaryNamer } from './type_summary_namer'; -import { exportSomeName } from './export_some_name'; - -/** - * Reads `locals` and adds necessary `SourceNode`s to `source` to reproduce the declarations - * of each local. - * - * Local printing is primarily done using the `DtsSnipper` which reads the original definition - * of the given declaration from the .d.ts files produced by tsc, then breaks them up into - * "snippets" (more details in the DtsSnipper class). These snippets are then itterated to either - * produce SourceNodes or text for the resulting definition. - * - * The exception is NamespaceDec locals, which must synthesize an imported namespace either - * for local usage or for exporting. When a namespace import is used a structure similar to - * the following will be added to the type summary: - * - * declare namespace NamespaceName { - * export { - * foo, - * bar, - * baz, - * } - * } - * export { NamespaceName } - */ -export function printLocals( - locals: LocalDecs[], - names: TypeSummaryNamer, - sourceMaps: SourceMapper, - snipper: DtsSnipper, - log: Logger, - source: SourceNode -) { - const localDecCount = locals.reduce( - (acc, l) => acc + (l.type === 'namespace dec' ? 1 : l.decs.length), - 0 - ); - - log.step('printLocals()', `${localDecCount} decs`, () => { - for (const local of locals) { - if (local.type === 'namespace dec') { - const name = names.get( - local.rootSymbol, - local.exported?.type === 'named' ? local.exported.name : 'ns' - ); - - // synthesize the namespace that represents the namespace import - source.add([ - `declare namespace `, - new SourceNode(1, 0, sourceMaps.getOriginalSourcePath(local.sourceFile), name), - ` {\n`, - ]); - source.add(` export {\n`); - // members - for (const [memberName, symbol] of local.members) { - const refName = names.get(symbol, memberName); - source.add( - ` ${memberName === refName ? memberName : `${refName} as ${memberName}`},\n` - ); - } - source.add(` }\n`); - source.add(`}\n`); - - if (local.exported?.type === 'named') { - source.add(exportSomeName(local.exported, name)); - } - - if (local.exported?.type === 'default') { - source.add(`export default ${name}`); - } - - continue; - } - - const decName = names.get( - local.rootSymbol, - local.exported?.type === 'named' ? local.exported.name : local.decs[0].name.getText() - ); - const exportLocally = - local.exported?.type === 'named' && - (local.decs.every(isTypeDeclaration) || !local.exported.typeOnly) && - decName === local.exported.name; - - for (const dec of local.decs) { - for (const s of snipper.toSnippets(dec)) { - if (s.type === 'source') { - source.add(s.value); - continue; - } - - if (s.type === 'export') { - // only print the export if we are exporting locally, otherwise drop this snipped - if (exportLocally) { - if (local.exported?.type === 'default') { - source.add(`export default `); - } else { - source.add(`export `); - } - } else { - if (s.noExportRequiresDeclare) { - source.add(`declare `); - } - } - continue; - } - - const name = names.get(s.rootSymbol, s.text); - source.add(s.structural ? sourceMaps.getSourceNode(s.identifier, name) ?? name : name); - } - - source.add('\n'); - } - - if (!exportLocally) { - if (local.exported?.type === 'named') { - source.add(exportSomeName(local.exported, decName)); - } - if (local.exported?.type === 'default') { - source.add(`export default ${decName}\n`); - } - } - - source.add('\n'); - } - }); -} diff --git a/packages/kbn-type-summarizer/src/lib/type_summary/print_type_summary.ts b/packages/kbn-type-summarizer/src/lib/type_summary/print_type_summary.ts deleted file mode 100644 index 0ac9430dcc86d..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/type_summary/print_type_summary.ts +++ /dev/null @@ -1,42 +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 { SourceNode } from 'source-map'; - -import { Logger } from '@kbn/type-summarizer-core'; -import { AstIndex } from '../ast_index'; -import { DtsSnipper } from '../dts_snipper'; -import { SourceMapper } from '../source_mapper'; -import { TypeSummaryNamer } from './type_summary_namer'; - -import { printImports } from './print_imports'; -import { printLocals } from './print_locals'; - -/** - * Produces a `SourceNode` which includes the code and source maps for the type summary. To deal - * with naming conflicts a `TypeSummaryNamer` instance is created which will allow the printing - * functions to resolve a `rootSymbol` to a specific name. If a name is not already defines for - * this `rootSymbol` then one is generated for it (generated names are optionally influenced by - * a `hint`). - * - * The result of this function is a `SourceNode` which has functions necessary to produce the - * resulting source code (a .d.ts file) and source map which maps the structurs in the .d.ts file - * to their original source locations in the repository. - */ -export function printTypeSummary( - sourceMaps: SourceMapper, - snipper: DtsSnipper, - log: Logger, - index: AstIndex -) { - const names = new TypeSummaryNamer(index); - const source = new SourceNode(); - printImports(index.imports, names, log, source); - printLocals(index.locals, names, sourceMaps, snipper, log, source); - return source; -} diff --git a/packages/kbn-type-summarizer/src/lib/type_summary/type_summary_namer.ts b/packages/kbn-type-summarizer/src/lib/type_summary/type_summary_namer.ts deleted file mode 100644 index 8862f9fc3f438..0000000000000 --- a/packages/kbn-type-summarizer/src/lib/type_summary/type_summary_namer.ts +++ /dev/null @@ -1,67 +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 ts from 'typescript'; - -import { AstIndex } from '../ast_index'; - -const INVALID_NAMES = ['default', 'import', 'export']; - -/** - * Class which is reponsible for managing the list of used names and assigning - * new names to "root symbols". - */ -export class TypeSummaryNamer { - public readonly rootDecsSymbols = new Set(); - private readonly usedNames = new Set(); - private readonly namesBySymbol = new Map(); - - constructor(index: AstIndex) { - for (const ref of index.ambientRefs) { - this.usedNames.add(ref.name); - this.namesBySymbol.set(ref.rootSymbol, ref.name); - } - - for (const l of index.locals) { - this.rootDecsSymbols.add(l.rootSymbol); - if (l.exported?.type === 'named') { - // assign export name to this root symbol, if possible - if (this.usedNames.has(l.exported.name)) { - throw new Error(`multiple exports using the name ${l.exported.name}`); - } - - this.usedNames.add(l.exported.name); - this.namesBySymbol.set(l.rootSymbol, l.exported.name); - } - } - for (const i of index.imports) { - this.rootDecsSymbols.add(i.rootSymbol); - } - } - - get(rootSymbol: ts.Symbol, nameFromSource: string) { - if (!this.rootDecsSymbols.has(rootSymbol)) { - return nameFromSource; - } - - const existing = this.namesBySymbol.get(rootSymbol); - if (existing !== undefined) { - return existing; - } - - let counter = 0; - let name = nameFromSource; - while (this.usedNames.has(name) || INVALID_NAMES.includes(name)) { - name = `${nameFromSource}_${++counter}`; - } - - this.usedNames.add(name); - this.namesBySymbol.set(rootSymbol, name); - return name; - } -} diff --git a/packages/kbn-type-summarizer/src/summarize_package.ts b/packages/kbn-type-summarizer/src/summarize_package.ts deleted file mode 100644 index 7ca85a273b436..0000000000000 --- a/packages/kbn-type-summarizer/src/summarize_package.ts +++ /dev/null @@ -1,90 +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 { Logger } from '@kbn/type-summarizer-core'; - -import { createTsProject } from './lib/ts_project'; -import { loadTsConfigFile } from './lib/tsconfig_file'; -import { SourceMapper } from './lib/source_mapper'; -import { AstIndexer } from './lib/ast_indexer'; -import { SourceFileMapper } from './lib/source_file_mapper'; -import { SymbolResolver } from './lib/symbol_resolver'; -import { AstTraverser } from './lib/ast_traverser'; -import { printTypeSummary } from './lib/type_summary'; -import { DtsSnipper } from './lib/dts_snipper'; - -/** - * Options used to customize the summarizePackage function - */ -export interface SummarizePacakgeOptions { - /** - * Absolute path to the directory containing the .d.ts files produced by `tsc`. Maps to the - * `declarationDir` compiler option. - */ - dtsDir: string; - /** - * Absolute path to the tsconfig.json file for the project we are summarizing - */ - tsconfigPath: string; - /** - * Array of absolute paths to the .d.ts files which will be summarized. Each file in this - * array will cause an output .d.ts summary file to be created containing all the AST nodes - * which are exported or referenced by those exports. - */ - inputPath: string; - /** - * Repo-relative path to the package source, for example `packages/kbn-type-summarizer-core` for - * this package. This is used to provide the correct `sourceRoot` path in the resulting source - * map files. - */ - repoRelativePackageDir: string; -} - -/** - * Produce summary .d.ts files for a package - */ -export async function summarizePackage(log: Logger, options: SummarizePacakgeOptions) { - const tsConfig = log.step('load config', options.tsconfigPath, () => - loadTsConfigFile(options.tsconfigPath) - ); - - if (tsConfig.options.sourceRoot) { - throw new Error(`${options.tsconfigPath} must not define "compilerOptions.sourceRoot"`); - } - - const program = log.step('create project', options.inputPath, () => - createTsProject(tsConfig, [options.inputPath]) - ); - - const typeChecker = log.step('create type checker', null, () => program.getTypeChecker()); - - const sources = new SourceFileMapper(options.dtsDir); - const symbols = new SymbolResolver(typeChecker, log); - const traverse = new AstTraverser(symbols, sources, log); - const indexer = new AstIndexer(typeChecker, sources, symbols, traverse, log); - - const sourceFile = program.getSourceFile(options.inputPath); - if (!sourceFile) { - throw new Error(`input file wasn't included in the program`); - } - - const index = indexer.indexExports(sourceFile); - const sourceMaps = await SourceMapper.forSourceFiles( - log, - sources, - options.repoRelativePackageDir, - program - ); - - const snipper = new DtsSnipper(traverse, symbols, log); - const summary = printTypeSummary(sourceMaps, snipper, log, index); - - sourceMaps.close(); - - return summary; -} diff --git a/packages/kbn-type-summarizer/src/tests/integration_helpers.ts b/packages/kbn-type-summarizer/src/tests/integration_helpers.ts deleted file mode 100644 index ebf88faa7db4c..0000000000000 --- a/packages/kbn-type-summarizer/src/tests/integration_helpers.ts +++ /dev/null @@ -1,252 +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 Path from 'path'; -import Fsp from 'fs/promises'; - -import * as ts from 'typescript'; -import stripAnsi from 'strip-ansi'; -import normalizePath from 'normalize-path'; -import { TestLog } from '@kbn/type-summarizer-core'; - -import { loadTsConfigFile } from '../lib/tsconfig_file'; -import { createTsProject } from '../lib/ts_project'; -import { summarizePackage } from '../summarize_package'; -import { SourceFileMapper } from '../lib/source_file_mapper'; -import { AstIndexer } from '../lib/ast_indexer'; -import { SymbolResolver } from '../lib/symbol_resolver'; -import { AstTraverser } from '../lib/ast_traverser'; -import { DtsSnipper } from '../lib/dts_snipper'; -import { SourceMapReader } from './source_map_reader'; - -type DiagFilter = (msg: string) => boolean; - -interface InitOptions { - ignoreDiags?: DiagFilter; -} - -export const TMP_DIR = Path.resolve(__dirname, '../../__tmp__'); - -const DIAGNOSTIC_HOST = { - getCanonicalFileName: (p: string) => p, - getCurrentDirectory: () => process.cwd(), - getNewLine: () => '\n', -}; - -function dedent(string: string) { - const lines = string.split('\n'); - while (lines.length && lines[0].trim() === '') { - lines.shift(); - } - if (lines.length === 0) { - return ''; - } - const indent = lines[0].split('').findIndex((c) => c !== ' '); - return lines.map((l) => l.slice(indent)).join('\n'); -} - -function ensureDts(path: string) { - if (path.endsWith('.d.ts')) { - throw new Error('path should end with .ts, not .d.ts'); - } - return `${path.slice(0, -3)}.d.ts`; -} - -export class TestProject { - /* directory where mockFiles pretend to be from */ - private readonly sourceDir = Path.resolve(TMP_DIR, 'src'); - /* directory where we will write .d.ts versions of mockFiles */ - private readonly dtsOutputDir = Path.resolve(TMP_DIR, 'dist_dts'); - /* path where the tsconfig.json file will be written */ - private readonly tsconfigPath = Path.resolve(this.sourceDir, 'tsconfig.json'); - - /* .d.ts file which we will read to discover the types we need to summarize */ - private readonly inputPath = ensureDts(Path.resolve(this.dtsOutputDir, 'index.ts')); - - private readonly log = new TestLog(); - - constructor( - /* file contents which will be fed into TypeScript for this test */ - private readonly _mockFiles: Record - ) {} - - private *mockFiles() { - for (const [key, value] of Object.entries(this._mockFiles)) { - yield [key, value] as [FileName, string]; - } - } - - private *fileRels() { - for (const key of Object.keys(this._mockFiles)) { - yield key as FileName; - } - } - - /** - * Initialize the TMP_DIR and write files to the sourceDir - */ - private async setupTempDir() { - // write mock files to the filesystem - await Promise.all( - Array.from(this.mockFiles()).map(async ([rel, content]) => { - const path = Path.resolve(this.sourceDir, rel); - await Fsp.mkdir(Path.dirname(path), { recursive: true }); - await Fsp.writeFile(path, dedent(content)); - }) - ); - - // write tsconfig.json to the filesystem - await Fsp.writeFile( - this.tsconfigPath, - JSON.stringify({ - include: [`**/*.ts`, `**/*.tsx`], - compilerOptions: { - moduleResolution: 'node', - target: 'es2021', - module: 'CommonJS', - strict: true, - esModuleInterop: true, - allowSyntheticDefaultImports: true, - declaration: true, - emitDeclarationOnly: true, - declarationDir: '../dist_dts', - declarationMap: true, - types: ['node'], - // prevent loading all @types packages - typeRoots: [], - }, - }) - ); - } - - /** - * convert the source files in the sourceDir to .d.ts files in the dtrOutputDir - */ - private async buildDtsOutput(ignoreDiags?: DiagFilter) { - const program = createTsProject( - loadTsConfigFile(this.tsconfigPath), - Array.from(this.fileRels()) - .map((n) => Path.resolve(this.sourceDir, n)) - .filter((p) => p.endsWith('.ts') || p.endsWith('.tsx')) - ); - - this.printDiagnostics( - [ - [`dts/config`, program.getConfigFileParsingDiagnostics()], - [`dts/global`, program.getGlobalDiagnostics()], - [`dts/options`, program.getOptionsDiagnostics()], - [`dts/semantic`, program.getSemanticDiagnostics()], - [`dts/syntactic`, program.getSyntacticDiagnostics()], - [`dts/declaration`, program.getDeclarationDiagnostics()], - ], - ignoreDiags - ); - - const result = program.emit(undefined, undefined, undefined, true); - - this.printDiagnostics([['dts/results', result.diagnostics]], ignoreDiags); - - // copy .d.ts files from source to dist - for (const [rel, content] of this.mockFiles()) { - if (rel.endsWith('.d.ts')) { - const path = Path.resolve(this.dtsOutputDir, rel); - await Fsp.mkdir(Path.dirname(path), { recursive: true }); - await Fsp.writeFile(path, dedent(content as string)); - } - } - } - - /** - * Print diagnostics from TS so we know when something is wrong in the tests - */ - private printDiagnostics( - types: Array<[type: string, diagnostics: readonly ts.Diagnostic[]]>, - ignoreDiags?: DiagFilter - ) { - const messages = []; - for (const [type, diagnostics] of types) { - const errors = diagnostics.filter((d) => d.category === ts.DiagnosticCategory.Error); - if (!errors.length) { - continue; - } - - const message = ts.formatDiagnosticsWithColorAndContext(errors, DIAGNOSTIC_HOST); - if (ignoreDiags && ignoreDiags(message)) { - continue; - } - messages.push( - ` type(${type}):\n${message - .split('\n') - .map((l) => ` ${l}`) - .join('\n')}` - ); - } - - if (messages.length) { - throw new Error(`TS produced error diagnostics:\n${messages}`); - } - } - - async runTypeSummarizer() { - await this.setupTempDir(); - await this.buildDtsOutput(); - - // summarize the .d.ts files into the output dir - const sourceNode = await summarizePackage(this.log, { - dtsDir: normalizePath(this.dtsOutputDir), - inputPath: normalizePath(this.inputPath), - repoRelativePackageDir: 'src', - tsconfigPath: normalizePath(this.tsconfigPath), - }); - - const { map, code } = sourceNode.toStringWithSourceMap(); - - // return the results - return { - code, - map: await SourceMapReader.snapshot(map, code, this.sourceDir), - logs: stripAnsi(this.log.messages.splice(0).join('')), - }; - } - - async initAstIndexer(options?: InitOptions) { - await this.setupTempDir(); - await this.buildDtsOutput(options?.ignoreDiags); - - const tsConfig = loadTsConfigFile(this.tsconfigPath); - const program = createTsProject(tsConfig, [this.inputPath]); - const typeChecker = program.getTypeChecker(); - const sources = new SourceFileMapper(this.dtsOutputDir); - const symbols = new SymbolResolver(typeChecker, this.log); - const traverse = new AstTraverser(symbols, sources, this.log); - const indexer = new AstIndexer(typeChecker, sources, symbols, traverse, this.log); - const snipper = new DtsSnipper(traverse, symbols, this.log); - - const sourceFiles = Object.fromEntries( - Array.from(this.fileRels()).map((rel) => [ - rel, - program.getSourceFile(Path.resolve(this.dtsOutputDir, this.getDtsRel(rel)))!, - ]) - ) as Record; - - return { program, typeChecker, indexer, sourceFiles, snipper }; - } - - private getDtsRel(rel: string) { - if (!rel.endsWith('.d.ts') && rel.endsWith('.ts')) { - return `${rel.slice(0, -3)}.d.ts`; - } - - return rel; - } - - async cleanup() { - // wipe out the tmp dir - await Fsp.rm(TMP_DIR, { recursive: true, force: true }); - } -} diff --git a/packages/kbn-type-summarizer/src/tests/integration_tests/ast_indexer.test.ts b/packages/kbn-type-summarizer/src/tests/integration_tests/ast_indexer.test.ts deleted file mode 100644 index c453dd2e90c08..0000000000000 --- a/packages/kbn-type-summarizer/src/tests/integration_tests/ast_indexer.test.ts +++ /dev/null @@ -1,543 +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 ts from 'typescript'; -import { createRecursiveSerializer } from '@kbn/jest-serializers'; -import { describeNode, describeSymbol } from '@kbn/type-summarizer-core'; -import { TestProject, TMP_DIR } from '../integration_helpers'; - -const isObj = (v: any): v is Record => typeof v === 'object' && v !== null; - -expect.addSnapshotSerializer( - createRecursiveSerializer( - (v) => isObj(v) && typeof v.kind === 'number' && ts.SyntaxKind[v.kind] !== undefined, - (v: ts.Node, printRaw) => printRaw(describeNode(v, TMP_DIR)) - ) -); -expect.addSnapshotSerializer( - createRecursiveSerializer( - (v) => isObj(v) && Array.isArray(v.declarations), - (v: ts.Symbol, printRaw) => printRaw(describeSymbol(v, TMP_DIR)) - ) -); - -describe('indexExports()', () => { - describe('simple', () => { - const project = new TestProject({ - 'index.ts': ` - import { Foo } from './foo'; - export { Foo } - export { Bar } from './bar'; - import { Bar } from './bar'; - import { libFn } from 'lib'; - export { libFn } from 'lib'; - import * as A from './a' - export { A } - export type B = Foo | Bar | typeof libFn; - `, - 'foo.ts': ` - export class Foo {} - `, - 'bar.ts': ` - import { Foo } from './foo' - export class Bar extends Foo {} - `, - 'a.ts': ` - export const a = 'a'; - `, - 'node_modules/lib/index.ts': ` - export function libFn() { - } - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('produces valid index', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer(); - const index = indexer.indexExports(sourceFiles['index.ts']); - expect(index).toMatchInlineSnapshot(` - Object { - "ambientRefs": Array [], - "imports": Array [ - Object { - "details": Object { - "node": ts.ExportSpecifier (libFn) @ dist_dts/index.d.ts:6:10, - "req": "lib", - "sourceName": "libFn", - "type": "named", - "typesOnly": false, - }, - "exports": Array [ - Object { - "name": "libFn", - "type": "named", - "typeOnly": false, - }, - ], - "localUsageCount": 1, - "rootSymbol": Symbol(ts.FunctionDeclaration (libFn) @ dist_dts/node_modules/lib/index.d.ts:1:1), - "type": "imported decs", - }, - ], - "locals": Array [ - Object { - "decs": Array [ - ts.ClassDeclaration (Foo) @ dist_dts/foo.d.ts:1:1, - ], - "exported": Object { - "name": "Foo", - "type": "named", - "typeOnly": false, - }, - "rootSymbol": Symbol(ts.ClassDeclaration (Foo) @ dist_dts/foo.d.ts:1:1), - "type": "copied decs", - }, - Object { - "decs": Array [ - ts.ClassDeclaration (Bar) @ dist_dts/bar.d.ts:2:1, - ], - "exported": Object { - "name": "Bar", - "type": "named", - "typeOnly": false, - }, - "rootSymbol": Symbol(ts.ClassDeclaration (Bar) @ dist_dts/bar.d.ts:2:1), - "type": "copied decs", - }, - Object { - "decs": Array [ - ts.VariableDeclaration (a) @ dist_dts/a.d.ts:1:22, - ], - "exported": undefined, - "rootSymbol": Symbol(ts.VariableDeclaration (a) @ dist_dts/a.d.ts:1:22), - "type": "copied decs", - }, - Object { - "exported": Object { - "name": "A", - "type": "named", - "typeOnly": false, - }, - "members": Map { - "a" => Symbol(ts.VariableDeclaration (a) @ dist_dts/a.d.ts:1:22), - }, - "rootSymbol": Symbol(ts.SourceFile @ dist_dts/a.d.ts:1:1), - "sourceFile": ts.SourceFile @ dist_dts/a.d.ts:1:1, - "type": "namespace dec", - }, - Object { - "decs": Array [ - ts.TypeAliasDeclaration (B) @ dist_dts/index.d.ts:9:1, - ], - "exported": Object { - "name": "B", - "type": "named", - "typeOnly": false, - }, - "rootSymbol": Symbol(ts.TypeAliasDeclaration (B) @ dist_dts/index.d.ts:9:1), - "type": "copied decs", - }, - ], - } - `); - }); - }); - - describe('export references', () => { - const project = new TestProject({ - 'index.ts': ` - import type {Class} from './foo' - export function name(i: Class) { - return 'string' - } - `, - 'foo.ts': ` - export class Class {} - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('includes referenced declarations in locals', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer(); - const index = indexer.indexExports(sourceFiles['index.ts']); - expect(index).toMatchInlineSnapshot(` - Object { - "ambientRefs": Array [], - "imports": Array [], - "locals": Array [ - Object { - "decs": Array [ - ts.ClassDeclaration (Class) @ dist_dts/foo.d.ts:1:1, - ], - "exported": undefined, - "rootSymbol": Symbol(ts.ClassDeclaration (Class) @ dist_dts/foo.d.ts:1:1), - "type": "copied decs", - }, - Object { - "decs": Array [ - ts.FunctionDeclaration (name) @ dist_dts/index.d.ts:2:1, - ], - "exported": Object { - "name": "name", - "type": "named", - "typeOnly": false, - }, - "rootSymbol": Symbol(ts.FunctionDeclaration (name) @ dist_dts/index.d.ts:2:1), - "type": "copied decs", - }, - ], - } - `); - }); - }); - - describe('ambient types', () => { - const project = new TestProject({ - 'index.ts': ` - import './globals' - import './fakemodule' - import { FakeImport } from 'foo' - export async function x(a: SomeGlobal, b: FakeImport): Promise { - return 'foo' - } - `, - 'globals.d.ts': ` - interface SomeGlobal { - foo: true - } - `, - 'fakemodule.d.ts': ` - declare module "foo" { - export interface FakeImport { - bar: true - } - } - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('includes declarations for local ambient types, "ambientRefs" for globals', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer(); - const index = indexer.indexExports(sourceFiles['index.ts']); - expect(index).toMatchInlineSnapshot(` - Object { - "ambientRefs": Array [ - Object { - "name": "Promise", - "rootSymbol": Symbol(ts.InterfaceDeclaration (Promise) @ ../../../node_modules/typescript/lib/lib.es5.d.ts:1495:1), - "type": "ambient ref", - }, - ], - "imports": Array [], - "locals": Array [ - Object { - "decs": Array [ - ts.InterfaceDeclaration (SomeGlobal) @ dist_dts/globals.d.ts:1:1, - ], - "exported": undefined, - "rootSymbol": Symbol(ts.InterfaceDeclaration (SomeGlobal) @ dist_dts/globals.d.ts:1:1), - "type": "copied decs", - }, - Object { - "decs": Array [ - ts.InterfaceDeclaration (FakeImport) @ dist_dts/fakemodule.d.ts:2:3, - ], - "exported": undefined, - "rootSymbol": Symbol(ts.InterfaceDeclaration (FakeImport) @ dist_dts/fakemodule.d.ts:2:3), - "type": "copied decs", - }, - Object { - "decs": Array [ - ts.FunctionDeclaration (x) @ dist_dts/index.d.ts:4:1, - ], - "exported": Object { - "name": "x", - "type": "named", - "typeOnly": false, - }, - "rootSymbol": Symbol(ts.FunctionDeclaration (x) @ dist_dts/index.d.ts:4:1), - "type": "copied decs", - }, - ], - } - `); - }); - }); - - describe('type only exports', () => { - const project = new TestProject({ - 'index.ts': ` - export * from './foo' - `, - 'foo.ts': ` - class Class {} - export type { Class } - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('exports by value one value is exported twice and either is by value', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer(); - const index = indexer.indexExports(sourceFiles['index.ts']); - expect(index).toMatchInlineSnapshot(` - Object { - "ambientRefs": Array [], - "imports": Array [], - "locals": Array [ - Object { - "decs": Array [ - ts.ClassDeclaration (Class) @ dist_dts/foo.d.ts:1:1, - ], - "exported": Object { - "name": "Class", - "type": "named", - "typeOnly": true, - }, - "rootSymbol": Symbol(ts.ClassDeclaration (Class) @ dist_dts/foo.d.ts:1:1), - "type": "copied decs", - }, - ], - } - `); - }); - }); - - describe('export by type combining', () => { - const project = new TestProject({ - 'index.ts': ` - export * from './foo' - export * from './bar' - `, - 'foo.ts': ` - export { Class } from './class' - `, - 'bar.ts': ` - export type { Class } from './class' - `, - 'class.ts': ` - export class Class {} - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('exports by value one value is exported twice and either is by value', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer(); - const index = indexer.indexExports(sourceFiles['index.ts']); - expect(index).toMatchInlineSnapshot(` - Object { - "ambientRefs": Array [], - "imports": Array [], - "locals": Array [ - Object { - "decs": Array [ - ts.ClassDeclaration (Class) @ dist_dts/class.d.ts:1:1, - ], - "exported": Object { - "name": "Class", - "type": "named", - "typeOnly": false, - }, - "rootSymbol": Symbol(ts.ClassDeclaration (Class) @ dist_dts/class.d.ts:1:1), - "type": "copied decs", - }, - ], - } - `); - }); - }); - - describe('ignores importTypes from node_modules but resolves local import types', () => { - const project = new TestProject({ - 'index.ts': ` - export function name(n: import('./foo').A): import('bar').Bar { - return 'B' - } - `, - 'foo.ts': ` - export class A {} - `, - 'node_modules/bar/index.ts': ` - export type Bar = string | symbol; - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('exports by value one value is exported twice and either is by value', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer(); - const index = indexer.indexExports(sourceFiles['index.ts']); - expect(index).toMatchInlineSnapshot(` - Object { - "ambientRefs": Array [], - "imports": Array [], - "locals": Array [ - Object { - "decs": Array [ - ts.ClassDeclaration (A) @ dist_dts/foo.d.ts:1:1, - ], - "exported": undefined, - "rootSymbol": Symbol(ts.ClassDeclaration (A) @ dist_dts/foo.d.ts:1:1), - "type": "copied decs", - }, - Object { - "decs": Array [ - ts.FunctionDeclaration (name) @ dist_dts/index.d.ts:1:1, - ], - "exported": Object { - "name": "name", - "type": "named", - "typeOnly": false, - }, - "rootSymbol": Symbol(ts.FunctionDeclaration (name) @ dist_dts/index.d.ts:1:1), - "type": "copied decs", - }, - ], - } - `); - }); - }); - - describe('finds references in importType.typeArguments', () => { - const project = new TestProject({ - 'index.ts': ` - export function name(n: import('./foo').A>) { - return 'B' - } - `, - 'foo.ts': ` - export class A { - n(x: X) { - return x - } - } - export class B {} - `, - 'node_modules/bar/index.ts': ` - export type Bar = Readonly - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('exports by value one value is exported twice and either is by value', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer(); - const index = indexer.indexExports(sourceFiles['index.ts']); - expect(index).toMatchInlineSnapshot(` - Object { - "ambientRefs": Array [], - "imports": Array [], - "locals": Array [ - Object { - "decs": Array [ - ts.ClassDeclaration (A) @ dist_dts/foo.d.ts:1:1, - ], - "exported": undefined, - "rootSymbol": Symbol(ts.ClassDeclaration (A) @ dist_dts/foo.d.ts:1:1), - "type": "copied decs", - }, - Object { - "decs": Array [ - ts.ClassDeclaration (B) @ dist_dts/foo.d.ts:4:1, - ], - "exported": undefined, - "rootSymbol": Symbol(ts.ClassDeclaration (B) @ dist_dts/foo.d.ts:4:1), - "type": "copied decs", - }, - Object { - "decs": Array [ - ts.FunctionDeclaration (name) @ dist_dts/index.d.ts:1:1, - ], - "exported": Object { - "name": "name", - "type": "named", - "typeOnly": false, - }, - "rootSymbol": Symbol(ts.FunctionDeclaration (name) @ dist_dts/index.d.ts:1:1), - "type": "copied decs", - }, - ], - } - `); - }); - }); - - describe('missing node modules', () => { - const project = new TestProject({ - 'index.ts': ` - export * from './foo' - `, - 'foo.ts': ` - import { BaseClass } from 'missing_node_module' - export class Class extends BaseClass { - foo: true - } - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('throws a helpful error when node_modules are missing', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer({ - ignoreDiags: (msg) => msg.includes(`Cannot find module 'missing_node_module'`), - }); - - expect(() => - indexer.indexExports(sourceFiles['index.ts']) - ).toThrowErrorMatchingInlineSnapshot( - `"unable to find declarations for symbol imported from \\"missing_node_module\\". If this is an external module, make sure is it listed in the type dependencies for this package. If it's internal then make sure that TypeScript understands the types of the imported value. Imported: ts.ImportSpecifier (BaseClass) @ packages/kbn-type-summarizer/__tmp__/dist_dts/foo.d.ts:1:10"` - ); - }); - }); - - describe('undeclared symbols', () => { - const project = new TestProject({ - 'index.ts': ` - // @ts-expect-error - export { a } from './foo' - `, - 'foo.js': ` - export function a() {} - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('throws a helpful error when exported symbols are not found', async () => { - const { indexer, sourceFiles } = await project.initAstIndexer(); - - expect(() => - indexer.indexExports(sourceFiles['index.ts']) - ).toThrowErrorMatchingInlineSnapshot( - `"unable to find declarations for symbol imported from \\"./foo\\". If this is an external module, make sure is it listed in the type dependencies for this package. If it's internal then make sure that TypeScript understands the types of the imported value. Imported: ts.ExportSpecifier (a) @ packages/kbn-type-summarizer/__tmp__/dist_dts/index.d.ts:1:10"` - ); - }); - }); -}); diff --git a/packages/kbn-type-summarizer/src/tests/integration_tests/dts_snipper.ts b/packages/kbn-type-summarizer/src/tests/integration_tests/dts_snipper.ts deleted file mode 100644 index 02c8b386cf15a..0000000000000 --- a/packages/kbn-type-summarizer/src/tests/integration_tests/dts_snipper.ts +++ /dev/null @@ -1,138 +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 { TestProject } from '../integration_helpers'; - -describe('toSnippets()', () => { - const project = new TestProject({ - 'index.ts': ` - // tsc drops single-line comments - interface Bar { - name: string - } - - /** - * Class Foo - */ - export class Foo { - /** - * Creates a bar - */ - bar(name: string): Bar { - return { name } - } - } - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('produces source, export, and id snippets', async () => { - const { indexer, snipper, sourceFiles } = await project.initAstIndexer(); - - const index = indexer.indexExports(sourceFiles['index.ts']); - const foo = index.locals.find((l) => !!l.exported); - const bar = index.locals.find((l) => !l.exported); - - expect(snipper.toSnippets(foo!.rootSymbol.declarations[0])).toMatchInlineSnapshot(` - Array [ - Object { - "type": "source", - "value": "/** - * Class Foo - */ - ", - }, - Object { - "noExportRequiresDeclare": false, - "type": "export", - }, - Object { - "type": "source", - "value": "declare class ", - }, - Object { - "identifier": ts.Identifier (Foo) @ dist_dts/index.d.ts:7:22, - "rootSymbol": Symbol(ts.ClassDeclaration (Foo) @ dist_dts/index.d.ts:7:1), - "structural": true, - "text": "Foo", - "type": "indentifier", - }, - Object { - "type": "source", - "value": " { - /** - * Creates a bar - */ - ", - }, - Object { - "identifier": ts.Identifier (bar) @ dist_dts/index.d.ts:11:5, - "rootSymbol": Symbol(ts.MethodDeclaration (bar) @ dist_dts/index.d.ts:11:5), - "structural": true, - "text": "bar", - "type": "indentifier", - }, - Object { - "type": "source", - "value": "(name: string): ", - }, - Object { - "identifier": ts.Identifier (Bar) @ dist_dts/index.d.ts:11:24, - "rootSymbol": Symbol(ts.InterfaceDeclaration (Bar) @ dist_dts/index.d.ts:1:1), - "structural": false, - "text": "Bar", - "type": "indentifier", - }, - Object { - "type": "source", - "value": "; - }", - }, - ] - `); - expect(snipper.toSnippets(bar!.rootSymbol.declarations[0])).toMatchInlineSnapshot(` - Array [ - Object { - "noExportRequiresDeclare": false, - "type": "export", - }, - Object { - "type": "source", - "value": "interface ", - }, - Object { - "identifier": ts.Identifier (Bar) @ dist_dts/index.d.ts:1:11, - "rootSymbol": Symbol(ts.InterfaceDeclaration (Bar) @ dist_dts/index.d.ts:1:1), - "structural": true, - "text": "Bar", - "type": "indentifier", - }, - Object { - "type": "source", - "value": " { - ", - }, - Object { - "identifier": ts.Identifier (name) @ dist_dts/index.d.ts:2:5, - "rootSymbol": Symbol(ts.PropertySignature (name) @ dist_dts/index.d.ts:2:5), - "structural": true, - "text": "name", - "type": "indentifier", - }, - Object { - "type": "source", - "value": ": string; - }", - }, - ] - `); - }); -}); diff --git a/packages/kbn-type-summarizer/src/tests/integration_tests/summarize_package.test.ts b/packages/kbn-type-summarizer/src/tests/integration_tests/summarize_package.test.ts deleted file mode 100644 index 7fd3f7ea83b86..0000000000000 --- a/packages/kbn-type-summarizer/src/tests/integration_tests/summarize_package.test.ts +++ /dev/null @@ -1,171 +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 { TestProject } from '../integration_helpers'; - -describe('summarizePackage()', () => { - describe('basic example', () => { - const project = new TestProject({ - 'index.ts': ` - export * from './foo' - export * from './bar' - export * from './baz' - import * as Helpers from './helpers' - export { Helpers } - `, - 'foo.ts': ` - export function foo(name: string) { - return \`hello $\{name}\` - } - `, - 'bar.ts': ` - interface Result { - type: 'success' - } - export class Bar { - doWork(): Result { - return { - type: 'success' - } - } - } - `, - 'baz.ts': ` - import { Bar } from './bar' - import { foo } from './foo' - - export class Baz extends Bar { - hello() { - return foo('baz') - } - } - `, - 'helpers.ts': ` - interface Result { - value: K - } - type A = 'a' - export const a = (): A => 'a' - export const b = (): Result => ({ value: a() }) - `, - }); - - afterEach(async () => { - await project.cleanup(); - }); - - it('produces expected type summary', async () => { - const { code, map, logs } = await project.runTypeSummarizer(); - - expect(code).toMatchInlineSnapshot(` - " - declare type A = 'a'; - - declare const a: () => A - - interface Result { - value: K; - } - - declare const b: () => Result - - declare namespace Helpers { - export { - a, - b, - } - } - export {Helpers} - export declare function foo(name: string): string; - - interface Result_1 { - type: 'success'; - } - - export declare class Bar { - doWork(): Result_1; - } - - export declare class Baz extends Bar { - hello(): string; - } - - " - `); - - expect(map.snapshot).toMatchInlineSnapshot(` - "from A @ 2:13 - to A @ helpers.ts:4:5 - - from a @ 4:14 - to a @ helpers.ts:5:13 - - from Result @ 6:10 - to Result @ helpers.ts:1:10 - - from value @ 7:4 - to value @ helpers.ts:2:2 - - from b @ 10:14 - to b @ helpers.ts:6:13 - - from Helpers @ 12:18 - to interface @ helpers.ts:1:0 - - from foo @ 19:24 - to foo @ foo.ts:1:16 - - from Result_1 @ 21:10 - to Result @ bar.ts:1:10 - - from type @ 22:4 - to type @ bar.ts:2:2 - - from Bar @ 25:21 - to Bar @ bar.ts:4:13 - - from doWork @ 26:4 - to doWork @ bar.ts:5:2 - - from Baz @ 29:21 - to Baz @ baz.ts:4:13 - - from hello @ 30:4 - to hello @ baz.ts:5:2" - `); - - expect(logs).toMatchInlineSnapshot(` - "debg > load config -- packages/kbn-type-summarizer/__tmp__/src/tsconfig.json - debg > create project -- packages/kbn-type-summarizer/__tmp__/dist_dts/index.d.ts - debg > create type checker - debg > indexExports() -- packages/kbn-type-summarizer/__tmp__/dist_dts/index.d.ts - debg verbose steps: - symbols.toRootSymbol()x23 - traverse.findReferencedIdentifiers()x8 - symbols.getForIdentifier()x6 - indexSymbol()x12 - debg loaded sourcemaps for [ - 'packages/kbn-type-summarizer/__tmp__/dist_dts/bar.d.ts', - 'packages/kbn-type-summarizer/__tmp__/dist_dts/baz.d.ts', - 'packages/kbn-type-summarizer/__tmp__/dist_dts/foo.d.ts', - 'packages/kbn-type-summarizer/__tmp__/dist_dts/helpers.d.ts', - 'packages/kbn-type-summarizer/__tmp__/dist_dts/index.d.ts' - ] - debg > printImports() -- 0 imports - debg > printLocals() -- 9 decs - debg verbose steps: - traverse.findStructuralIdentifiers()x8 - traverse.findReferencedIdentifiers()x8 - symbols.getForIdentifier()x18 - symbols.toRootSymbol()x18 - snipper.toSnippets()x8 - " - `); - }); - }); -}); diff --git a/packages/kbn-type-summarizer/src/tests/source_map_reader.ts b/packages/kbn-type-summarizer/src/tests/source_map_reader.ts deleted file mode 100644 index bad4fe492ad46..0000000000000 --- a/packages/kbn-type-summarizer/src/tests/source_map_reader.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 Fs from 'fs'; -import Path from 'path'; - -import { SourceMapConsumer, SourceMapGenerator } from 'source-map'; - -const ID_RE = /[a-z0-9_]+/i; - -export class SourceMapReader { - static async snapshot(generator: SourceMapGenerator, code: string, sourceDir: string) { - const genLines = ['', ...code.split('\n')]; - const readSource = (p: string) => { - const source = Fs.readFileSync(Path.resolve(sourceDir, p), 'utf8'); - return ['', ...source.split('\n')]; - }; - const getId = (line: string, col: number) => { - return line.slice(col).match(ID_RE)?.[0] ?? line; - }; - - const mappings: string[][] = []; - - await SourceMapConsumer.with(generator.toJSON(), undefined, (map) => { - map.eachMapping((mapping) => { - if ( - (mapping.originalColumn as number | boolean | null) === false || - mapping.originalColumn === null - ) { - // these mappings are just to end the previous mapping, we can drop them - return; - } - - const generatedId = getId(genLines[mapping.generatedLine], mapping.generatedColumn); - const originalId = mapping.source - ? getId(readSource(mapping.source)[mapping.originalLine], mapping.originalColumn) - : null; - - mappings.push([ - `from ${generatedId} @ ${mapping.generatedLine}:${mapping.generatedColumn}`, - `to ${originalId} @ ${mapping.source}:${mapping.originalLine}:${mapping.originalColumn}`, - ]); - }); - }); - - return new SourceMapReader( - mappings.map((g) => g.join('\n')).join('\n\n'), - JSON.stringify(generator, null, 2) - ); - } - - constructor(public readonly snapshot: string, public readonly raw: string) {} -} diff --git a/packages/kbn-type-summarizer/tsconfig.json b/packages/kbn-type-summarizer/tsconfig.json deleted file mode 100644 index 57c1dd1c94e0f..0000000000000 --- a/packages/kbn-type-summarizer/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.bazel.json", - "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", - "types": [ - "jest", - "node" - ] - }, - "include": [ - "**/*.ts" - ] -} diff --git a/packages/kbn-typed-react-router-config/BUILD.bazel b/packages/kbn-typed-react-router-config/BUILD.bazel deleted file mode 100644 index 841e2b287d7af..0000000000000 --- a/packages/kbn-typed-react-router-config/BUILD.bazel +++ /dev/null @@ -1,134 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-typed-react-router-config" -PKG_REQUIRE_NAME = "@kbn/typed-react-router-config" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ] -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-io-ts-utils", - "@npm//fp-ts", - "@npm//history", - "@npm//io-ts", - "@npm//lodash", - "@npm//query-string", - "@npm//react", - "@npm//react-router-config", - "@npm//react-router-dom", - "@npm//tslib", - "@npm//utility-types", -] - -TYPES_DEPS = [ - "//packages/kbn-io-ts-utils:npm_module_types", - "@npm//fp-ts", - "@npm//io-ts", - "@npm//query-string", - "@npm//utility-types", - "@npm//@types/history", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/react", - "@npm//@types/react-router-config", - "@npm//@types/react-router-dom", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-typed-react-router-config/kibana.jsonc b/packages/kbn-typed-react-router-config/kibana.jsonc index 51882f6266c34..f508346f8c26e 100644 --- a/packages/kbn-typed-react-router-config/kibana.jsonc +++ b/packages/kbn-typed-react-router-config/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/typed-react-router-config", - "owner": "@elastic/apm-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/apm-ui" } diff --git a/packages/kbn-typed-react-router-config/package.json b/packages/kbn-typed-react-router-config/package.json index d200aeef52311..44337045ad85f 100644 --- a/packages/kbn-typed-react-router-config/package.json +++ b/packages/kbn-typed-react-router-config/package.json @@ -1,9 +1,6 @@ { "name": "@kbn/typed-react-router-config", - "main": "target_node/index.js", - "browser": "target_web/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" -} + "private": true +} \ No newline at end of file diff --git a/packages/kbn-typed-react-router-config/tsconfig.json b/packages/kbn-typed-react-router-config/tsconfig.json index 4c1b75ae89f88..767ba55fb8e30 100644 --- a/packages/kbn-typed-react-router-config/tsconfig.json +++ b/packages/kbn-typed-react-router-config/tsconfig.json @@ -1,10 +1,8 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, "isolatedModules": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", "jest" @@ -13,5 +11,11 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/io-ts-utils" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-ui-framework/BUILD.bazel b/packages/kbn-ui-framework/BUILD.bazel deleted file mode 100644 index 2e801955a8524..0000000000000 --- a/packages/kbn-ui-framework/BUILD.bazel +++ /dev/null @@ -1,46 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "pkg_npm") - -PKG_DIRNAME = "kbn-ui-framework" -PKG_REQUIRE_NAME = "@kbn/ui-framework" - -SOURCE_FILES = glob([ - "dist/**/*", -]) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md", -] - -RUNTIME_DEPS = [] - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES + [ - ":srcs", - ], - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-ui-framework/kibana.jsonc b/packages/kbn-ui-framework/kibana.jsonc index eaef655970e37..50a13c97e4fe3 100644 --- a/packages/kbn-ui-framework/kibana.jsonc +++ b/packages/kbn-ui-framework/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ui-framework", - "owner": "@elastic/kibana-design", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-design" } diff --git a/packages/kbn-ui-shared-deps-npm/BUILD.bazel b/packages/kbn-ui-shared-deps-npm/BUILD.bazel index 3bb1873156be4..2b49f1e5a92f1 100644 --- a/packages/kbn-ui-shared-deps-npm/BUILD.bazel +++ b/packages/kbn-ui-shared-deps-npm/BUILD.bazel @@ -1,16 +1,13 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("@npm//webpack-cli:index.bzl", webpack = "webpack_cli") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") +load("@npm//webpack-cli:index.bzl", "webpack_cli") -PKG_DIRNAME = "kbn-ui-shared-deps-npm" -PKG_REQUIRE_NAME = "@kbn/ui-shared-deps-npm" - -SOURCE_FILES = glob( +SRCS = glob( [ - "**/*.js", + "index.js", + "src/**/*", ], exclude = [ + "**/test_helpers.ts", "**/*.config.js", "**/*.mock.*", "**/*.test.*", @@ -25,18 +22,18 @@ SOURCE_FILES = glob( ], ) -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - +# deps needed when importing this module from another location RUNTIME_DEPS = [ + "@npm//loader-utils", + "@npm//val-loader", + "//packages/kbn-repo-info", + # deps in the dll need to be included in the sandbox for consumers + # of this DLL (ui-shared-deps-src) because webpack won't actually + # use the DLL version of a package until it has resolved to the same + # relative path as the module which is already included in the DLL manifest + "@npm//core-js", + "@npm//whatwg-fetch", + "@npm//symbol-observable", "@npm//@babel/runtime", "@npm//@elastic/charts", "@npm//@elastic/eui", @@ -45,101 +42,34 @@ RUNTIME_DEPS = [ "@npm//@emotion/react", "@npm//@tanstack/react-query", "@npm//@tanstack/react-query-devtools", - "@npm//babel-loader", - "@npm//core-js", - "@npm//css-loader", + "@npm//classnames", "@npm//fflate", + "@npm//history", "@npm//jquery", - "@npm//loader-utils", - "@npm//mini-css-extract-plugin", + "@npm//lodash", "@npm//moment-timezone", - "@npm//moment", - "@npm//raw-loader", "@npm//react-ace", + "@npm//react-beautiful-dnd", "@npm//react-dom", - "@npm//react-intl", - "@npm//react-is", "@npm//react-router-dom", "@npm//react-router", "@npm//react", "@npm//rxjs", "@npm//styled-components", - "@npm//symbol-observable", "@npm//tslib", - "@npm//url-loader", - "@npm//val-loader", - "@npm//whatwg-fetch", -] - -WEBPACK_DEPS = [ - "@npm//clean-webpack-plugin", -] - -TYPES_DEPS = [ - "@npm//@elastic/charts", - "@npm//@elastic/eui", - "@npm//@elastic/numeral", - "@npm//@emotion/cache", - "@npm//@emotion/react", - "@npm//babel-loader", - "@npm//core-js", - "@npm//css-loader", - "@npm//fflate", - "@npm//jquery", - "@npm//loader-utils", - "@npm//mini-css-extract-plugin", - "@npm//moment", - "@npm//moment-timezone", - "@npm//raw-loader", - "@npm//react", - "@npm//react-dom", - "@npm//react-intl", - "@npm//react-is", - "@npm//react-router", - "@npm//react-router-dom", - "@npm//rxjs", - "@npm//styled-components", - "@npm//symbol-observable", - "@npm//url-loader", - "@npm//val-loader", - "@npm//whatwg-fetch", - "@npm//@types/node", ] -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - allow_js = True, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -webpack( +webpack_cli( name = "shared_built_assets", - data = RUNTIME_DEPS + WEBPACK_DEPS + [ - "//:package.json", - ":srcs", - ":tsconfig", + data = RUNTIME_DEPS + SRCS + [ + "//:.browserslistrc", ":webpack.config.js", + + "@npm//webpack", + "@npm//clean-webpack-plugin", + "@npm//mini-css-extract-plugin", + "@npm//moment", + "@npm//css-loader", ], output_dir = True, args = [ @@ -147,41 +77,23 @@ webpack( "$(location webpack.config.js)", "--output-path", "$(@D)", - "--no-stats" + "--stats=errors-only" ], -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":shared_built_assets"], - package_name = PKG_REQUIRE_NAME, visibility = ["//visibility:public"], + env = select({ + "//:dist": { + "NODE_ENV": "production", + }, + "//conditions:default": { + "NODE_ENV": "development", + }, + }) ) - +# js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":shared_built_assets", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + name = "kbn-ui-shared-deps-npm", + package_name = "@kbn/ui-shared-deps-npm", + srcs = SRCS + ["package.json"], + deps = RUNTIME_DEPS + [":shared_built_assets"], visibility = ["//visibility:public"], ) diff --git a/packages/kbn-ui-shared-deps-npm/index.d.ts b/packages/kbn-ui-shared-deps-npm/index.d.ts deleted file mode 100644 index 0541240af8e0a..0000000000000 --- a/packages/kbn-ui-shared-deps-npm/index.d.ts +++ /dev/null @@ -1,19 +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. - */ - -// NOTE, this types for this package are actually based on the index.js -// file, but this file is here so that when loading the source you don't -// have to set `allowJs` for your project - -export type ThemeVersion = 'v8'; -export const distDir: string; -export const dllManifestPath: string; -export const dllFilename: string; -export const publicPathLoader: string; -export function lightCssDistFilename(themeVersion: ThemeVersion): string; -export function darkCssDistFilename(themeVersion: ThemeVersion): string; diff --git a/packages/kbn-ui-shared-deps-npm/index.js b/packages/kbn-ui-shared-deps-npm/index.js index ba82a46359d1b..71127860ce5cd 100644 --- a/packages/kbn-ui-shared-deps-npm/index.js +++ b/packages/kbn-ui-shared-deps-npm/index.js @@ -10,54 +10,61 @@ * @typedef {'v8'} ThemeVersion */ +const Fs = require('fs'); const Path = require('path'); +const { REPO_ROOT } = require('@kbn/repo-info'); + +const localDist = Path.resolve(__dirname, './shared_built_assets'); +const bazelDist = Path.resolve(REPO_ROOT, 'bazel-bin', Path.relative(REPO_ROOT, localDist)); // extracted const vars -const distDir = Path.resolve(__dirname, '../shared_built_assets'); +const distDir = Fs.existsSync(localDist) ? localDist : bazelDist; const dllManifestPath = Path.resolve(distDir, 'kbn-ui-shared-deps-npm-manifest.json'); const dllFilename = 'kbn-ui-shared-deps-npm.dll.js'; const publicPathLoader = require.resolve('./src/public_path_loader'); -/** - * Absolute path to the distributable directory - */ -exports.distDir = distDir; +module.exports = { + /** + * Absolute path to the distributable directory + */ + distDir, -/** - * Path to dll manifest of modules included in this bundle - */ -exports.dllManifestPath = dllManifestPath; + /** + * Path to dll manifest of modules included in this bundle + */ + dllManifestPath, -/** - * Filename of the main bundle file in the distributable directory - */ -exports.dllFilename = dllFilename; + /** + * Filename of the main bundle file in the distributable directory + */ + dllFilename, -/** - * Filename of the light-theme css file in the distributable directory - * @param {ThemeVersion} themeVersion - */ -exports.lightCssDistFilename = (themeVersion) => { - if (themeVersion !== 'v8') { - throw new Error(`unsupported theme version [${themeVersion}]`); - } + /** + * Webpack loader for configuring the public path lookup from `window.__kbnPublicPath__`. + */ + publicPathLoader, - return 'kbn-ui-shared-deps-npm.v8.light.css'; -}; + /** + * Filename of the light-theme css file in the distributable directory + * @param {ThemeVersion} themeVersion + */ + lightCssDistFilename(themeVersion) { + if (themeVersion !== 'v8') { + throw new Error(`unsupported theme version [${themeVersion}]`); + } -/** - * Filename of the dark-theme css file in the distributable directory - * @param {ThemeVersion} themeVersion - */ -exports.darkCssDistFilename = (themeVersion) => { - if (themeVersion !== 'v8') { - throw new Error(`unsupported theme version [${themeVersion}]`); - } + return 'kbn-ui-shared-deps-npm.v8.light.css'; + }, - return 'kbn-ui-shared-deps-npm.v8.dark.css'; -}; + /** + * Filename of the dark-theme css file in the distributable directory + * @param {ThemeVersion} themeVersion + */ + darkCssDistFilename(themeVersion) { + if (themeVersion !== 'v8') { + throw new Error(`unsupported theme version [${themeVersion}]`); + } -/** - * Webpack loader for configuring the public path lookup from `window.__kbnPublicPath__`. - */ -exports.publicPathLoader = publicPathLoader; + return 'kbn-ui-shared-deps-npm.v8.dark.css'; + }, +}; diff --git a/packages/kbn-ui-shared-deps-npm/kibana.jsonc b/packages/kbn-ui-shared-deps-npm/kibana.jsonc index b7d47a5ccff4b..91ab8cdfc2b13 100644 --- a/packages/kbn-ui-shared-deps-npm/kibana.jsonc +++ b/packages/kbn-ui-shared-deps-npm/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ui-shared-deps-npm", - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-ui-shared-deps-npm/package.json b/packages/kbn-ui-shared-deps-npm/package.json index aaefa7f714ceb..81f231b467eca 100644 --- a/packages/kbn-ui-shared-deps-npm/package.json +++ b/packages/kbn-ui-shared-deps-npm/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ui-shared-deps-npm", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-ui-shared-deps-npm/src/public_path_loader.js b/packages/kbn-ui-shared-deps-npm/src/public_path_loader.js index 4f52032b316ac..77057cd426869 100644 --- a/packages/kbn-ui-shared-deps-npm/src/public_path_loader.js +++ b/packages/kbn-ui-shared-deps-npm/src/public_path_loader.js @@ -6,16 +6,19 @@ * Side Public License, v 1. */ -const Qs = require('querystring'); // eslint-disable-next-line import/no-extraneous-dependencies const { stringifyRequest } = require('loader-utils'); const VAL_LOADER = require.resolve('val-loader'); const MODULE_CREATOR = require.resolve('./public_path_module_creator'); +/** + * @this {any} this + * @param {string} source + */ module.exports = function (source) { const options = this.query; - const valOpts = Qs.stringify({ key: options.key }); + const valOpts = new URLSearchParams({ key: options.key }).toString(); const req = `${VAL_LOADER}?${valOpts}!${MODULE_CREATOR}`; return `require(${stringifyRequest(this, req)});${source}`; }; diff --git a/packages/kbn-ui-shared-deps-npm/src/public_path_module_creator.js b/packages/kbn-ui-shared-deps-npm/src/public_path_module_creator.js index 854d0176b7ae6..60dbde3cefaf6 100644 --- a/packages/kbn-ui-shared-deps-npm/src/public_path_module_creator.js +++ b/packages/kbn-ui-shared-deps-npm/src/public_path_module_creator.js @@ -6,6 +6,9 @@ * Side Public License, v 1. */ +/** + * @param {{ key: string }} param0 + */ module.exports = function ({ key }) { return { code: `__webpack_public_path__ = window.__kbnPublicPath__['${key}']`, diff --git a/packages/kbn-ui-shared-deps-npm/tsconfig.json b/packages/kbn-ui-shared-deps-npm/tsconfig.json index e142364eaa188..3feba9269f394 100644 --- a/packages/kbn-ui-shared-deps-npm/tsconfig.json +++ b/packages/kbn-ui-shared-deps-npm/tsconfig.json @@ -1,9 +1,8 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", + "checkJs": true, "types": [ "node", ] @@ -14,5 +13,9 @@ ], "exclude": [ "**/*.config.js", + "target/**/*", + ], + "kbn_references": [ + "@kbn/repo-info" ] } diff --git a/packages/kbn-ui-shared-deps-npm/webpack.config.js b/packages/kbn-ui-shared-deps-npm/webpack.config.js index 791af0ebe1885..680751927ad6f 100644 --- a/packages/kbn-ui-shared-deps-npm/webpack.config.js +++ b/packages/kbn-ui-shared-deps-npm/webpack.config.js @@ -29,7 +29,7 @@ module.exports = (_, argv) => { externals: { module: 'module', }, - mode: 'production', + mode: process.env.NODE_ENV || 'development', entry: { 'kbn-ui-shared-deps-npm': [ // polyfill code @@ -81,6 +81,7 @@ module.exports = (_, argv) => { '@elastic/eui/dist/eui_theme_light.json', '@elastic/eui/dist/eui_theme_dark.json', '@elastic/numeral', + '@emotion/cache', '@emotion/react', '@tanstack/react-query', '@tanstack/react-query-devtools', diff --git a/packages/kbn-ui-shared-deps-src/BUILD.bazel b/packages/kbn-ui-shared-deps-src/BUILD.bazel index 4dc31e5a51a6d..0b350c51331ff 100644 --- a/packages/kbn-ui-shared-deps-src/BUILD.bazel +++ b/packages/kbn-ui-shared-deps-src/BUILD.bazel @@ -1,106 +1,38 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("@npm//webpack-cli:index.bzl", webpack = "webpack_cli") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") +load("@npm//webpack-cli:index.bzl", "webpack_cli") -PKG_DIRNAME = "kbn-ui-shared-deps-src" -PKG_REQUIRE_NAME = "@kbn/ui-shared-deps-src" +SRCS = glob([ + "index.js", + "webpack.config.js", + "src/**/*", +]) -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.js", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-safer-lodash-set", - "//packages/kbn-analytics", - "//packages/kbn-babel-preset", - "//packages/kbn-datemath", - "//packages/kbn-es-query", - "//packages/kbn-flot-charts", - "//packages/kbn-i18n", - "//packages/kbn-i18n-react", - "//packages/kbn-monaco", - "//packages/kbn-std", - "//packages/kbn-ui-shared-deps-npm", - "//packages/kbn-ui-theme", - "//packages/kbn-peggy-loader", - "//packages/kbn-rison", -] - -TYPES_DEPS = [ - "//packages/kbn-safer-lodash-set:npm_module_types", - "//packages/kbn-analytics:npm_module_types", - "//packages/kbn-datemath:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-monaco:npm_module_types", - "//packages/kbn-std:npm_module_types", - "//packages/kbn-ui-shared-deps-npm:npm_module_types", - "//packages/kbn-ui-theme:npm_module_types", - "@npm//webpack", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - allow_js = True, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -webpack( +webpack_cli( name = "shared_built_assets", - data = RUNTIME_DEPS + [ - "//:package.json", - ":srcs", - ":tsconfig", - ":webpack.config.js", + data = SRCS + [ + "//:.browserslistrc", + "@npm//webpack", + "@npm//mini-css-extract-plugin", + "@npm//moment", + "@npm//babel-loader", + "@npm//css-loader", + "@npm//url-loader", + "//packages/kbn-ui-shared-deps-npm", + "//packages/kbn-babel-register", + "//packages/kbn-babel-preset", + # packages included in the shared deps src bundle + "//packages/kbn-flot-charts", + "//packages/kbn-ui-theme", + "//packages/kbn-i18n", + "//packages/kbn-i18n-react", + "//packages/kbn-monaco", + "//packages/kbn-datemath", + "//packages/kbn-analytics", + "//packages/kbn-es-query", + "//packages/kbn-std", + "//packages/kbn-safer-lodash-set", + "//packages/kbn-peggy", + "//packages/kbn-peggy-loader", + "//packages/kbn-rison", ], output_dir = True, args = [ @@ -110,39 +42,13 @@ webpack( "$(@D)", "--stats=errors-only" ], -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":shared_built_assets"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":shared_built_assets", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], + env = select({ + "//:dist": { + "NODE_ENV": "production", + }, + "//conditions:default": { + "NODE_ENV": "development", + }, + }), visibility = ["//visibility:public"], ) diff --git a/packages/kbn-ui-shared-deps-src/kibana.jsonc b/packages/kbn-ui-shared-deps-src/kibana.jsonc index 49da1e45e9d27..39b71b0bd00e1 100644 --- a/packages/kbn-ui-shared-deps-src/kibana.jsonc +++ b/packages/kbn-ui-shared-deps-src/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ui-shared-deps-src", - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-ui-shared-deps-src/package.json b/packages/kbn-ui-shared-deps-src/package.json index 3290d7e60032f..fee5d645dd527 100644 --- a/packages/kbn-ui-shared-deps-src/package.json +++ b/packages/kbn-ui-shared-deps-src/package.json @@ -2,7 +2,5 @@ "name": "@kbn/ui-shared-deps-src", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-ui-shared-deps-src/src/definitions.js b/packages/kbn-ui-shared-deps-src/src/definitions.js index d975a39e76a3b..83a24b7c88d28 100644 --- a/packages/kbn-ui-shared-deps-src/src/definitions.js +++ b/packages/kbn-ui-shared-deps-src/src/definitions.js @@ -7,12 +7,18 @@ */ const Path = require('path'); +const Fs = require('fs'); + +const { REPO_ROOT } = require('@kbn/repo-info'); + +const localDist = Path.resolve(__dirname, '../shared_built_assets'); +const bazelDist = Path.resolve(REPO_ROOT, 'bazel-bin', Path.relative(REPO_ROOT, localDist)); // extracted const vars /** * Absolute path to the distributable directory */ -const distDir = Path.resolve(__dirname, '../../shared_built_assets'); +const distDir = Fs.existsSync(localDist) ? localDist : bazelDist; /** * Filename of the main bundle file in the distributable directory diff --git a/packages/kbn-ui-shared-deps-src/tsconfig.json b/packages/kbn-ui-shared-deps-src/tsconfig.json index e142364eaa188..54d86b5eeab76 100644 --- a/packages/kbn-ui-shared-deps-src/tsconfig.json +++ b/packages/kbn-ui-shared-deps-src/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", ] @@ -14,5 +12,20 @@ ], "exclude": [ "**/*.config.js", + "target/**/*", + ], + "kbn_references": [ + "@kbn/ui-theme", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/monaco", + "@kbn/datemath", + "@kbn/flot-charts", + "@kbn/analytics", + "@kbn/es-query", + "@kbn/rison", + "@kbn/std", + "@kbn/safer-lodash-set", + "@kbn/repo-info" ] } diff --git a/packages/kbn-ui-shared-deps-src/webpack.config.js b/packages/kbn-ui-shared-deps-src/webpack.config.js index bebe6eb424f06..e88d10872156f 100644 --- a/packages/kbn-ui-shared-deps-src/webpack.config.js +++ b/packages/kbn-ui-shared-deps-src/webpack.config.js @@ -6,6 +6,9 @@ * Side Public License, v 1. */ +// setup ts/pkg support in this webpack process +require('@kbn/babel-register').install(); + const Path = require('path'); const webpack = require('webpack'); @@ -26,7 +29,7 @@ module.exports = { externals: { module: 'module', }, - mode: 'production', + mode: process.env.NODE_ENV || 'development', entry: { 'kbn-ui-shared-deps-src': './src/entry.js', }, @@ -58,7 +61,7 @@ module.exports = { }, { test: /\.peggy$/, - use: ['@kbn/peggy-loader'], + use: [require.resolve('@kbn/peggy-loader')], }, { test: /\.css$/, @@ -71,11 +74,21 @@ module.exports = { limit: 8192, }, }, + { + test: /\.(js|tsx?)$/, + exclude: /[\/\\]node_modules[\/\\](?!@kbn)([^\/\\]+)[\/\\]/, + loader: 'babel-loader', + options: { + babelrc: false, + envName: process.env.NODE_ENV || 'development', + presets: [require.resolve('@kbn/babel-preset/webpack_preset')], + }, + }, ], }, resolve: { - extensions: ['.js', '.ts'], + extensions: ['.js', '.ts', '.tsx'], symlinks: false, alias: { '@elastic/eui$': '@elastic/eui/optimize/es', diff --git a/packages/kbn-ui-theme/BUILD.bazel b/packages/kbn-ui-theme/BUILD.bazel index 4e17de1eb6ab7..1bbc558641ab6 100644 --- a/packages/kbn-ui-theme/BUILD.bazel +++ b/packages/kbn-ui-theme/BUILD.bazel @@ -1,6 +1,6 @@ load("@npm//@bazel/typescript:index.bzl", "ts_config") load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") +load("//src/dev/bazel:index.bzl", "pkg_npm", "ts_project") PKG_DIRNAME = "kbn-ui-theme" PKG_REQUIRE_NAME = "@kbn/ui-theme" @@ -45,25 +45,11 @@ TYPES_DEPS = [ "@npm//tslib", ] -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - ts_config( name = "tsconfig", src = "tsconfig.json", deps = [ "//:tsconfig.base.json", - "//:tsconfig.bazel.json", ], ) @@ -80,8 +66,8 @@ ts_project( js_library( name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], + srcs = NPM_MODULE_EXTRA_FILES + SRCS, + deps = RUNTIME_DEPS, package_name = PKG_REQUIRE_NAME, visibility = ["//visibility:public"], ) @@ -89,24 +75,11 @@ js_library( js_library( name = "npm_module_types", srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], + deps = RUNTIME_DEPS + [":tsc_types"], package_name = PKG_REQUIRE_NAME, visibility = ["//visibility:public"], ) -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - pkg_npm( name = "build_types", deps = [":npm_module_types"], diff --git a/packages/kbn-ui-theme/kibana.jsonc b/packages/kbn-ui-theme/kibana.jsonc index 3f90299e80360..db8230d520c0a 100644 --- a/packages/kbn-ui-theme/kibana.jsonc +++ b/packages/kbn-ui-theme/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ui-theme", - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-ui-theme/package.json b/packages/kbn-ui-theme/package.json index 1577f211eae88..42718ab36b063 100644 --- a/packages/kbn-ui-theme/package.json +++ b/packages/kbn-ui-theme/package.json @@ -2,8 +2,5 @@ "name": "@kbn/ui-theme", "version": "1.0.0", "private": true, - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-ui-theme/tsconfig.json b/packages/kbn-ui-theme/tsconfig.json index 7eae44ef23245..74b96e65f9ecf 100644 --- a/packages/kbn-ui-theme/tsconfig.json +++ b/packages/kbn-ui-theme/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": ["node"] }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-user-profile-components/BUILD.bazel b/packages/kbn-user-profile-components/BUILD.bazel deleted file mode 100644 index d8d88de063f0e..0000000000000 --- a/packages/kbn-user-profile-components/BUILD.bazel +++ /dev/null @@ -1,121 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-user-profile-components" -PKG_REQUIRE_NAME = "@kbn/user-profile-components" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "//packages/kbn-i18n", - "//packages/kbn-i18n-react", - "@npm//@elastic/eui", -] - -TYPES_DEPS = [ - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-i18n-react:npm_module_types", - "@npm//@elastic/eui", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/enzyme", - "@npm//tslib", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-user-profile-components/kibana.jsonc b/packages/kbn-user-profile-components/kibana.jsonc index d4c7f266fe60b..ecd571c98781f 100644 --- a/packages/kbn-user-profile-components/kibana.jsonc +++ b/packages/kbn-user-profile-components/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/user-profile-components", - "owner": "@elastic/kibana-security", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-security" } diff --git a/packages/kbn-user-profile-components/package.json b/packages/kbn-user-profile-components/package.json index 86d4c48e2e163..a4f8db277f5a2 100644 --- a/packages/kbn-user-profile-components/package.json +++ b/packages/kbn-user-profile-components/package.json @@ -2,8 +2,5 @@ "name": "@kbn/user-profile-components", "version": "1.0.0", "private": true, - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "types": "./target_types/index.d.ts", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/kbn-user-profile-components/tsconfig.json b/packages/kbn-user-profile-components/tsconfig.json index b9cc115dd1264..6f64745691be8 100644 --- a/packages/kbn-user-profile-components/tsconfig.json +++ b/packages/kbn-user-profile-components/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -12,5 +10,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/i18n-react" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-utility-types-jest/BUILD.bazel b/packages/kbn-utility-types-jest/BUILD.bazel deleted file mode 100644 index eaf186c40a3fa..0000000000000 --- a/packages/kbn-utility-types-jest/BUILD.bazel +++ /dev/null @@ -1,104 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-utility-types-jest" -PKG_REQUIRE_NAME = "@kbn/utility-types-jest" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [] - -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-utility-types-jest/kibana.jsonc b/packages/kbn-utility-types-jest/kibana.jsonc index 83eaa2ce42aa2..1eea6e6c96a67 100644 --- a/packages/kbn-utility-types-jest/kibana.jsonc +++ b/packages/kbn-utility-types-jest/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/utility-types-jest", - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-utility-types-jest/package.json b/packages/kbn-utility-types-jest/package.json index e057306d4bbdb..03c8699b5cd85 100644 --- a/packages/kbn-utility-types-jest/package.json +++ b/packages/kbn-utility-types-jest/package.json @@ -2,7 +2,5 @@ "name": "@kbn/utility-types-jest", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "target_node/index.js", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/kbn-utility-types-jest/tsconfig.json b/packages/kbn-utility-types-jest/tsconfig.json index 292157c18591a..b72f7b0a15c5c 100644 --- a/packages/kbn-utility-types-jest/tsconfig.json +++ b/packages/kbn-utility-types-jest/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,8 @@ }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-utility-types/BUILD.bazel b/packages/kbn-utility-types/BUILD.bazel deleted file mode 100644 index 87a665c2a6b44..0000000000000 --- a/packages/kbn-utility-types/BUILD.bazel +++ /dev/null @@ -1,108 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-utility-types" -PKG_REQUIRE_NAME = "@kbn/utility-types" - -SOURCE_FILES = glob( - [ - "src/serializable/**", - "src/dot.ts", - "index.ts" - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -RUNTIME_DEPS = [ - "@npm//utility-types", -] - -TYPES_DEPS = [ - "@npm//utility-types", - "@npm//@types/node" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-utility-types/kibana.jsonc b/packages/kbn-utility-types/kibana.jsonc index c041668a7689b..4a6528d2ac652 100644 --- a/packages/kbn-utility-types/kibana.jsonc +++ b/packages/kbn-utility-types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/utility-types", - "owner": "@elastic/kibana-core", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-core" } diff --git a/packages/kbn-utility-types/package.json b/packages/kbn-utility-types/package.json index fa0eb82dde2ef..65983150712fb 100644 --- a/packages/kbn-utility-types/package.json +++ b/packages/kbn-utility-types/package.json @@ -3,9 +3,7 @@ "version": "1.0.0", "private": true, "license": "SSPL-1.0 OR Elastic License 2.0", - "main": "target_node/index.js", "scripts": { "test": "../../node_modules/.bin/tsd src/tsd_tests" - }, - "types": "./target_types/index.d.ts" + } } \ No newline at end of file diff --git a/packages/kbn-utility-types/tsconfig.json b/packages/kbn-utility-types/tsconfig.json index 57347ee107af5..7617ed166fe28 100644 --- a/packages/kbn-utility-types/tsconfig.json +++ b/packages/kbn-utility-types/tsconfig.json @@ -1,14 +1,15 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node" ] }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-utils/BUILD.bazel b/packages/kbn-utils/BUILD.bazel deleted file mode 100644 index b66307a04b533..0000000000000 --- a/packages/kbn-utils/BUILD.bazel +++ /dev/null @@ -1,112 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-utils" -PKG_REQUIRE_NAME = "@kbn/utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", - "README.md" -] - -RUNTIME_DEPS = [ - "//packages/kbn-config-schema", - "@npm//load-json-file", - "@npm//tslib", -] - -TYPES_DEPS = [ - "//packages/kbn-config-schema:npm_module_types", - "@npm//load-json-file", - "@npm//tslib", - "@npm//@types/jest", - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [ - ":npm_module", - ], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-utils/index.ts b/packages/kbn-utils/index.ts index 374b9a0b62279..d23c71fad55bc 100644 --- a/packages/kbn-utils/index.ts +++ b/packages/kbn-utils/index.ts @@ -6,7 +6,5 @@ * Side Public License, v 1. */ -export * from './src/package_json'; export * from './src/path'; -export * from './src/repo_root'; export * from './src/streams'; diff --git a/packages/kbn-utils/kibana.jsonc b/packages/kbn-utils/kibana.jsonc index 1e6935937f6e5..2c4efc0a67651 100644 --- a/packages/kbn-utils/kibana.jsonc +++ b/packages/kbn-utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/utils", - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-utils/package.json b/packages/kbn-utils/package.json index 40a60b179667f..3eff9aad75160 100644 --- a/packages/kbn-utils/package.json +++ b/packages/kbn-utils/package.json @@ -1,8 +1,6 @@ { "name": "@kbn/utils", - "main": "./target_node/index.js", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true, - "types": "./target_types/index.d.ts" + "private": true } \ No newline at end of file diff --git a/packages/kbn-utils/src/path/index.test.ts b/packages/kbn-utils/src/path/index.test.ts index 5c774d9897372..608f3cb2cfeb2 100644 --- a/packages/kbn-utils/src/path/index.test.ts +++ b/packages/kbn-utils/src/path/index.test.ts @@ -8,7 +8,7 @@ import { accessSync, constants } from 'fs'; import { getConfigPath, getDataPath, getLogsPath, getConfigDirectory } from '.'; -import { REPO_ROOT } from '../repo_root'; +import { REPO_ROOT } from '@kbn/repo-info'; expect.addSnapshotSerializer( ((rootPath: string = REPO_ROOT, replacement = '') => { diff --git a/packages/kbn-utils/src/path/index.ts b/packages/kbn-utils/src/path/index.ts index c839522441c7c..63ca454dd04fd 100644 --- a/packages/kbn-utils/src/path/index.ts +++ b/packages/kbn-utils/src/path/index.ts @@ -9,7 +9,7 @@ import { join } from 'path'; import { accessSync, constants } from 'fs'; import { TypeOf, schema } from '@kbn/config-schema'; -import { REPO_ROOT } from '../repo_root'; +import { REPO_ROOT } from '@kbn/repo-info'; const isString = (v: any): v is string => typeof v === 'string'; diff --git a/packages/kbn-utils/tsconfig.json b/packages/kbn-utils/tsconfig.json index 57c1dd1c94e0f..6baa222ef8c37 100644 --- a/packages/kbn-utils/tsconfig.json +++ b/packages/kbn-utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/kbn-web-worker-stub/README.md b/packages/kbn-web-worker-stub/README.md new file mode 100644 index 0000000000000..3a57fb6a97dbb --- /dev/null +++ b/packages/kbn-web-worker-stub/README.md @@ -0,0 +1,3 @@ +# @kbn/web-worker-stub + +Empty package generated by @kbn/generate diff --git a/packages/kbn-web-worker-stub/index.ts b/packages/kbn-web-worker-stub/index.ts new file mode 100644 index 0000000000000..18484468326c5 --- /dev/null +++ b/packages/kbn-web-worker-stub/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. + */ + +if (!window.Worker) { + // @ts-expect-error we aren't honoring the real Worker spec here + window.Worker = function Worker() { + this.postMessage = jest.fn(); + + // @ts-expect-error TypeScript doesn't think this exists on the Worker interface + // https://developer.mozilla.org/en-US/docs/Web/API/Worker/terminate + this.terminate = jest.fn(); + }; +} + +export {}; diff --git a/packages/kbn-web-worker-stub/jest.config.js b/packages/kbn-web-worker-stub/jest.config.js new file mode 100644 index 0000000000000..b643fe9f988fd --- /dev/null +++ b/packages/kbn-web-worker-stub/jest.config.js @@ -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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-web-worker-stub'], +}; diff --git a/packages/kbn-web-worker-stub/kibana.jsonc b/packages/kbn-web-worker-stub/kibana.jsonc new file mode 100644 index 0000000000000..39cf9a07982e5 --- /dev/null +++ b/packages/kbn-web-worker-stub/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "test-helper", + "id": "@kbn/web-worker-stub", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-web-worker-stub/package.json b/packages/kbn-web-worker-stub/package.json new file mode 100644 index 0000000000000..07f40f946f86e --- /dev/null +++ b/packages/kbn-web-worker-stub/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/web-worker-stub", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-web-worker-stub/tsconfig.json b/packages/kbn-web-worker-stub/tsconfig.json new file mode 100644 index 0000000000000..b72f7b0a15c5c --- /dev/null +++ b/packages/kbn-web-worker-stub/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/packages/kbn-yarn-lock-validator/BUILD.bazel b/packages/kbn-yarn-lock-validator/BUILD.bazel deleted file mode 100644 index 3fb3f48203758..0000000000000 --- a/packages/kbn-yarn-lock-validator/BUILD.bazel +++ /dev/null @@ -1,127 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-yarn-lock-validator" -PKG_REQUIRE_NAME = "@kbn/yarn-lock-validator" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/dedent", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//tslib", - "//packages/kbn-utils:npm_module_types", - "//packages/kbn-bazel-packages:npm_module_types", - "//packages/kbn-some-dev-log:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/kbn-yarn-lock-validator/kibana.jsonc b/packages/kbn-yarn-lock-validator/kibana.jsonc index 9ff3e33975597..e4941edaef2f6 100644 --- a/packages/kbn-yarn-lock-validator/kibana.jsonc +++ b/packages/kbn-yarn-lock-validator/kibana.jsonc @@ -2,7 +2,5 @@ "type": "shared-common", "id": "@kbn/yarn-lock-validator", "devOnly": true, - "owner": "@elastic/kibana-operations", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-operations" } diff --git a/packages/kbn-yarn-lock-validator/package.json b/packages/kbn-yarn-lock-validator/package.json index 01f9de41f960e..87ccae8d9caf1 100644 --- a/packages/kbn-yarn-lock-validator/package.json +++ b/packages/kbn-yarn-lock-validator/package.json @@ -2,7 +2,5 @@ "name": "@kbn/yarn-lock-validator", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/kbn-yarn-lock-validator/src/find_production_dependencies.ts b/packages/kbn-yarn-lock-validator/src/find_production_dependencies.ts index 59166bef39e7d..c17f16ba02434 100644 --- a/packages/kbn-yarn-lock-validator/src/find_production_dependencies.ts +++ b/packages/kbn-yarn-lock-validator/src/find_production_dependencies.ts @@ -7,7 +7,7 @@ */ import { SomeDevLog } from '@kbn/some-dev-log'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { YarnLock } from './yarn_lock'; diff --git a/packages/kbn-yarn-lock-validator/src/validate_yarn_lock.ts b/packages/kbn-yarn-lock-validator/src/validate_yarn_lock.ts index 668f2911556c9..859a39855f462 100644 --- a/packages/kbn-yarn-lock-validator/src/validate_yarn_lock.ts +++ b/packages/kbn-yarn-lock-validator/src/validate_yarn_lock.ts @@ -11,7 +11,7 @@ import Fsp from 'fs/promises'; import dedent from 'dedent'; -import { REPO_ROOT, kibanaPackageJson } from '@kbn/utils'; +import { REPO_ROOT, kibanaPackageJson } from '@kbn/repo-info'; import { SomeDevLog } from '@kbn/some-dev-log'; import { discoverBazelPackages } from '@kbn/bazel-packages'; diff --git a/packages/kbn-yarn-lock-validator/src/yarn_lock.ts b/packages/kbn-yarn-lock-validator/src/yarn_lock.ts index 383dcbe09ceee..63c164311b232 100644 --- a/packages/kbn-yarn-lock-validator/src/yarn_lock.ts +++ b/packages/kbn-yarn-lock-validator/src/yarn_lock.ts @@ -9,7 +9,7 @@ import Fsp from 'fs/promises'; import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; // @ts-expect-error published types are worthless import * as YarnLockFile from '@yarnpkg/lockfile'; diff --git a/packages/kbn-yarn-lock-validator/tsconfig.json b/packages/kbn-yarn-lock-validator/tsconfig.json index 57c1dd1c94e0f..1de53ab58d696 100644 --- a/packages/kbn-yarn-lock-validator/tsconfig.json +++ b/packages/kbn-yarn-lock-validator/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../tsconfig.bazel.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node" @@ -11,5 +9,13 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/bazel-packages", + "@kbn/some-dev-log", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/avatar/solution/BUILD.bazel b/packages/shared-ux/avatar/solution/BUILD.bazel deleted file mode 100644 index d8d9b159db6e7..0000000000000 --- a/packages/shared-ux/avatar/solution/BUILD.bazel +++ /dev/null @@ -1,153 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "solution" -PKG_REQUIRE_NAME = "@kbn/shared-ux-avatar-solution" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - "**/*.mdx", - "**/*.svg", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//classnames", - "@npm//enzyme", - "@npm//react", - "@npm//url-loader", - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/kbn-shared-ux-utility", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@types/classnames", - "@npm//@types/enzyme", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-shared-ux-utility:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/avatar/solution/kibana.jsonc b/packages/shared-ux/avatar/solution/kibana.jsonc index e44bc8bd68b43..6bb90e43260f7 100644 --- a/packages/shared-ux/avatar/solution/kibana.jsonc +++ b/packages/shared-ux/avatar/solution/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-avatar-solution", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/avatar/solution/package.json b/packages/shared-ux/avatar/solution/package.json index ab91c7c422572..e72f904282796 100644 --- a/packages/shared-ux/avatar/solution/package.json +++ b/packages/shared-ux/avatar/solution/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-avatar-solution", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/avatar/solution/tsconfig.json b/packages/shared-ux/avatar/solution/tsconfig.json index 5cb7bca42f195..eecf3ed8f5afc 100644 --- a/packages/shared-ux/avatar/solution/tsconfig.json +++ b/packages/shared-ux/avatar/solution/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,10 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/avatar/user_profile/impl/BUILD.bazel b/packages/shared-ux/avatar/user_profile/impl/BUILD.bazel deleted file mode 100644 index 53beaf2faea93..0000000000000 --- a/packages/shared-ux/avatar/user_profile/impl/BUILD.bazel +++ /dev/null @@ -1,134 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "avatar-user-profile" -PKG_REQUIRE_NAME = "@kbn/shared-ux-avatar-user-profile-components" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.test.*", - "**/*.stories.*", - ], -) - -SRCS = SOURCE_FILES - -# filegroup( -# name = "srcs", -# srcs = SRCS, -# ) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//@elastic/eui", - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/kbn-shared-ux-utility", - "//packages/kbn-ambient-ui-types", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@elastic/eui", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-shared-ux-utility:npm_module_types", - "//packages/kbn-ambient-ui-types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/avatar/user_profile/impl/kibana.jsonc b/packages/shared-ux/avatar/user_profile/impl/kibana.jsonc index a9ee7697b2d18..0cebb8c02e969 100644 --- a/packages/shared-ux/avatar/user_profile/impl/kibana.jsonc +++ b/packages/shared-ux/avatar/user_profile/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-avatar-user-profile-components", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/avatar/user_profile/impl/package.json b/packages/shared-ux/avatar/user_profile/impl/package.json index 7169836ff1879..6af2682d533bf 100644 --- a/packages/shared-ux/avatar/user_profile/impl/package.json +++ b/packages/shared-ux/avatar/user_profile/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-avatar-user-profile-components", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/avatar/user_profile/impl/tsconfig.json b/packages/shared-ux/avatar/user_profile/impl/tsconfig.json index d68e5f7ddeffa..833908e045033 100644 --- a/packages/shared-ux/avatar/user_profile/impl/tsconfig.json +++ b/packages/shared-ux/avatar/user_profile/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -16,5 +14,12 @@ "*.md*", "**/*.ts", "**/*.md*", + ], + "kbn_references": [ + "@kbn/i18n-react", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/button/exit_full_screen/impl/BUILD.bazel b/packages/shared-ux/button/exit_full_screen/impl/BUILD.bazel deleted file mode 100644 index b16786012c828..0000000000000 --- a/packages/shared-ux/button/exit_full_screen/impl/BUILD.bazel +++ /dev/null @@ -1,160 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "kbn-shared-ux-button-exit-full-screen" -PKG_REQUIRE_NAME = "@kbn/shared-ux-button-exit-full-screen" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - "**/*.mdx", - "**/*.svg", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//classnames", - "@npm//enzyme", - "@npm//react-use", - "@npm//react", - "@npm//url-loader", - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/kbn-shared-ux-utility", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//@types/classnames", - "@npm//@types/enzyme", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "@npm//react-use", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-shared-ux-utility:npm_module_types", - "//packages/shared-ux/button/exit_full_screen/types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/button/exit_full_screen/impl/kibana.jsonc b/packages/shared-ux/button/exit_full_screen/impl/kibana.jsonc index 7cee5d9ff3702..c74b644894aeb 100644 --- a/packages/shared-ux/button/exit_full_screen/impl/kibana.jsonc +++ b/packages/shared-ux/button/exit_full_screen/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-button-exit-full-screen", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/button/exit_full_screen/impl/package.json b/packages/shared-ux/button/exit_full_screen/impl/package.json index bc56bbeebf40e..d79fe2a74ec07 100644 --- a/packages/shared-ux/button/exit_full_screen/impl/package.json +++ b/packages/shared-ux/button/exit_full_screen/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-button-exit-full-screen", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/button/exit_full_screen/impl/tsconfig.json b/packages/shared-ux/button/exit_full_screen/impl/tsconfig.json index 10624c45bc7cb..7dfac85744189 100644 --- a/packages/shared-ux/button/exit_full_screen/impl/tsconfig.json +++ b/packages/shared-ux/button/exit_full_screen/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/shared-ux-button-exit-full-screen-types", + "@kbn/shared-ux-button-exit-full-screen-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/button/exit_full_screen/mocks/BUILD.bazel b/packages/shared-ux/button/exit_full_screen/mocks/BUILD.bazel deleted file mode 100644 index 995904da1deeb..0000000000000 --- a/packages/shared-ux/button/exit_full_screen/mocks/BUILD.bazel +++ /dev/null @@ -1,136 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-button-exit-full-screen-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@storybook/addon-actions", - "@npm//react", - "//packages/shared-ux/storybook/mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@storybook/addon-actions", - "//packages/shared-ux/button/exit_full_screen/types:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/button/exit_full_screen/mocks/kibana.jsonc b/packages/shared-ux/button/exit_full_screen/mocks/kibana.jsonc index d1599c1a48bc1..27c601e53c53f 100644 --- a/packages/shared-ux/button/exit_full_screen/mocks/kibana.jsonc +++ b/packages/shared-ux/button/exit_full_screen/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-button-exit-full-screen-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/button/exit_full_screen/mocks/package.json b/packages/shared-ux/button/exit_full_screen/mocks/package.json index ff766d8e9de14..bcda1669c6f1d 100644 --- a/packages/shared-ux/button/exit_full_screen/mocks/package.json +++ b/packages/shared-ux/button/exit_full_screen/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-button-exit-full-screen-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/button/exit_full_screen/mocks/tsconfig.json b/packages/shared-ux/button/exit_full_screen/mocks/tsconfig.json index a00de7fc73226..fbc11adc95523 100644 --- a/packages/shared-ux/button/exit_full_screen/mocks/tsconfig.json +++ b/packages/shared-ux/button/exit_full_screen/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/shared-ux-button-exit-full-screen-types", + "@kbn/shared-ux-storybook-mock" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/button/exit_full_screen/types/BUILD.bazel b/packages/shared-ux/button/exit_full_screen/types/BUILD.bazel deleted file mode 100644 index 2620c51593806..0000000000000 --- a/packages/shared-ux/button/exit_full_screen/types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-button-exit-full-screen-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/button/exit_full_screen/types/kibana.jsonc b/packages/shared-ux/button/exit_full_screen/types/kibana.jsonc index 29b91b8142082..932f0031e9b5d 100644 --- a/packages/shared-ux/button/exit_full_screen/types/kibana.jsonc +++ b/packages/shared-ux/button/exit_full_screen/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-button-exit-full-screen-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/button/exit_full_screen/types/package.json b/packages/shared-ux/button/exit_full_screen/types/package.json index 3e97374b53eae..d5ff454e0a2c6 100644 --- a/packages/shared-ux/button/exit_full_screen/types/package.json +++ b/packages/shared-ux/button/exit_full_screen/types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/shared-ux-button-exit-full-screen-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/shared-ux/button/exit_full_screen/types/tsconfig.json b/packages/shared-ux/button/exit_full_screen/types/tsconfig.json index b863eab85b68e..362cc9e727b9f 100644 --- a/packages/shared-ux/button/exit_full_screen/types/tsconfig.json +++ b/packages/shared-ux/button/exit_full_screen/types/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/button_toolbar/BUILD.bazel b/packages/shared-ux/button_toolbar/BUILD.bazel deleted file mode 100644 index e0fcde158bdf8..0000000000000 --- a/packages/shared-ux/button_toolbar/BUILD.bazel +++ /dev/null @@ -1,145 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "button_toolbar" -PKG_REQUIRE_NAME = "@kbn/shared-ux-button-toolbar" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//react", - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/button_toolbar/kibana.jsonc b/packages/shared-ux/button_toolbar/kibana.jsonc index 4a019c6775702..2d2b0c9ce82c3 100644 --- a/packages/shared-ux/button_toolbar/kibana.jsonc +++ b/packages/shared-ux/button_toolbar/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-button-toolbar", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/button_toolbar/package.json b/packages/shared-ux/button_toolbar/package.json index d74cca7bf9bec..9e9aa4ee50f04 100644 --- a/packages/shared-ux/button_toolbar/package.json +++ b/packages/shared-ux/button_toolbar/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-button-toolbar", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/button_toolbar/tsconfig.json b/packages/shared-ux/button_toolbar/tsconfig.json index 158e1387bb883..49ed962217ce3 100644 --- a/packages/shared-ux/button_toolbar/tsconfig.json +++ b/packages/shared-ux/button_toolbar/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../tsconfig.bazel.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/card/no_data/impl/BUILD.bazel b/packages/shared-ux/card/no_data/impl/BUILD.bazel deleted file mode 100644 index 38d138d551c83..0000000000000 --- a/packages/shared-ux/card/no_data/impl/BUILD.bazel +++ /dev/null @@ -1,150 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-card-no-data" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - "**/*.svg", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//enzyme", - "@npm//react", - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/shared-ux/link/redirect_app/impl", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@types/enzyme", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/shared-ux/link/redirect_app/impl:npm_module_types", - "//packages/shared-ux/card/no_data/types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/card/no_data/impl/kibana.jsonc b/packages/shared-ux/card/no_data/impl/kibana.jsonc index 111ee94f8608d..172a06aec0650 100644 --- a/packages/shared-ux/card/no_data/impl/kibana.jsonc +++ b/packages/shared-ux/card/no_data/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-card-no-data", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/card/no_data/impl/package.json b/packages/shared-ux/card/no_data/impl/package.json index 42a1bc7007e0b..51b0955fbc2da 100644 --- a/packages/shared-ux/card/no_data/impl/package.json +++ b/packages/shared-ux/card/no_data/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-card-no-data", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/card/no_data/impl/tsconfig.json b/packages/shared-ux/card/no_data/impl/tsconfig.json index 5735aa5eceaa8..cd9e401f45b02 100644 --- a/packages/shared-ux/card/no_data/impl/tsconfig.json +++ b/packages/shared-ux/card/no_data/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -15,5 +13,14 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/shared-ux-link-redirect-app", + "@kbn/shared-ux-card-no-data-types", + "@kbn/shared-ux-card-no-data-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/card/no_data/mocks/BUILD.bazel b/packages/shared-ux/card/no_data/mocks/BUILD.bazel deleted file mode 100644 index 6f08805292436..0000000000000 --- a/packages/shared-ux/card/no_data/mocks/BUILD.bazel +++ /dev/null @@ -1,142 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-card-no-data-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@storybook/addon-actions", - "@npm//deepmerge", - "@npm//lodash", - "@npm//react", - "//packages/shared-ux/link/redirect_app/mocks", - "//packages/shared-ux/storybook/mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@storybook/addon-actions", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/react", - "@npm//deepmerge", - "//packages/shared-ux/card/no_data/types:npm_module_types", - "//packages/shared-ux/link/redirect_app/mocks:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/card/no_data/mocks/kibana.jsonc b/packages/shared-ux/card/no_data/mocks/kibana.jsonc index 0fb2ac6bc8cd5..74acf79369075 100644 --- a/packages/shared-ux/card/no_data/mocks/kibana.jsonc +++ b/packages/shared-ux/card/no_data/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-card-no-data-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/card/no_data/mocks/package.json b/packages/shared-ux/card/no_data/mocks/package.json index 06737fb83c6c1..644c718838dd1 100644 --- a/packages/shared-ux/card/no_data/mocks/package.json +++ b/packages/shared-ux/card/no_data/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-card-no-data-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/card/no_data/mocks/tsconfig.json b/packages/shared-ux/card/no_data/mocks/tsconfig.json index 8ed0253743ff7..605636c685b22 100644 --- a/packages/shared-ux/card/no_data/mocks/tsconfig.json +++ b/packages/shared-ux/card/no_data/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", "react", @@ -12,5 +10,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/shared-ux-card-no-data-types", + "@kbn/shared-ux-link-redirect-app-mocks", + "@kbn/shared-ux-storybook-mock" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/card/no_data/types/BUILD.bazel b/packages/shared-ux/card/no_data/types/BUILD.bazel deleted file mode 100644 index 1e7469ed02b40..0000000000000 --- a/packages/shared-ux/card/no_data/types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-card-no-data-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/card/no_data/types/kibana.jsonc b/packages/shared-ux/card/no_data/types/kibana.jsonc index b92d11dee07c0..6b7c283766469 100644 --- a/packages/shared-ux/card/no_data/types/kibana.jsonc +++ b/packages/shared-ux/card/no_data/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-card-no-data-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/card/no_data/types/tsconfig.json b/packages/shared-ux/card/no_data/types/tsconfig.json index b863eab85b68e..73edcc63080a5 100644 --- a/packages/shared-ux/card/no_data/types/tsconfig.json +++ b/packages/shared-ux/card/no_data/types/tsconfig.json @@ -1,12 +1,16 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/shared-ux-link-redirect-app-types", ] } diff --git a/packages/shared-ux/file/context/BUILD.bazel b/packages/shared-ux/file/context/BUILD.bazel deleted file mode 100644 index 0ddce6bf0ca2f..0000000000000 --- a/packages/shared-ux/file/context/BUILD.bazel +++ /dev/null @@ -1,136 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "context" -PKG_REQUIRE_NAME = "@kbn/shared-ux-file-context" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/react", - "//packages/shared-ux/file/types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/file/context/kibana.jsonc b/packages/shared-ux/file/context/kibana.jsonc index 55921ceec3052..8d511e381a8df 100644 --- a/packages/shared-ux/file/context/kibana.jsonc +++ b/packages/shared-ux/file/context/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-file-context", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/file/context/package.json b/packages/shared-ux/file/context/package.json index 025c4b8101377..ec54922394b4f 100644 --- a/packages/shared-ux/file/context/package.json +++ b/packages/shared-ux/file/context/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-file-context", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/shared-ux/file/context/tsconfig.json b/packages/shared-ux/file/context/tsconfig.json index dc13d1aced527..3f5374f1300ff 100644 --- a/packages/shared-ux/file/context/tsconfig.json +++ b/packages/shared-ux/file/context/tsconfig.json @@ -1,13 +1,17 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ ] }, "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/shared-ux-file-types" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/file/file_picker/impl/BUILD.bazel b/packages/shared-ux/file/file_picker/impl/BUILD.bazel deleted file mode 100644 index f8bb2f8804cae..0000000000000 --- a/packages/shared-ux/file/file_picker/impl/BUILD.bazel +++ /dev/null @@ -1,158 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-file-picker" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//@elastic/numeral", - "@npm//react", - "@npm//@emotion/react", - "@npm//@emotion/css", - "@npm//rxjs", - "//packages/kbn-i18n", - "//packages/shared-ux/file/util", - "//packages/shared-ux/file/context", - "//packages/shared-ux/file/file_upload/impl", - "//packages/shared-ux/file/image/impl", - "//packages/kbn-shared-ux-utility", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@elastic/numeral", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-ambient-ui-types", - "//packages/shared-ux/file/util:npm_module_types", - "//packages/shared-ux/file/context:npm_module_types", - "//packages/shared-ux/file/file_upload/impl:npm_module_types", - "//packages/shared-ux/file/image/impl:npm_module_types", - "//packages/shared-ux/file/types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/file/file_picker/impl/kibana.jsonc b/packages/shared-ux/file/file_picker/impl/kibana.jsonc index 9188feb7ebc11..ab54fb4f21612 100644 --- a/packages/shared-ux/file/file_picker/impl/kibana.jsonc +++ b/packages/shared-ux/file/file_picker/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-file-picker", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/file/file_picker/impl/package.json b/packages/shared-ux/file/file_picker/impl/package.json index 80f28c0ccf7fa..20a932ab2ef2c 100644 --- a/packages/shared-ux/file/file_picker/impl/package.json +++ b/packages/shared-ux/file/file_picker/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-file-picker", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/shared-ux/file/file_picker/impl/tsconfig.json b/packages/shared-ux/file/file_picker/impl/tsconfig.json index 0b9ca147ee59f..f9e92a6065f39 100644 --- a/packages/shared-ux/file/file_picker/impl/tsconfig.json +++ b/packages/shared-ux/file/file_picker/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", "jest", @@ -14,5 +12,19 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/shared-ux-file-util", + "@kbn/shared-ux-file-context", + "@kbn/shared-ux-file-upload", + "@kbn/shared-ux-file-image", + "@kbn/shared-ux-file-types", + "@kbn/shared-ux-file-mocks", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-file-image-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/file/file_upload/impl/BUILD.bazel b/packages/shared-ux/file/file_upload/impl/BUILD.bazel deleted file mode 100644 index 6a16aeb63dbfe..0000000000000 --- a/packages/shared-ux/file/file_upload/impl/BUILD.bazel +++ /dev/null @@ -1,155 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-file-upload" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//react", - "@npm//lodash", - "@npm//@emotion/react", - "@npm//@emotion/css", - "@npm//rxjs", - "//packages/kbn-i18n", - "//packages/kbn-ui-theme", - "//packages/shared-ux/file/util", - "//packages/shared-ux/file/context", - "//packages/kbn-shared-ux-utility", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "@npm//@types/lodash", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-ui-theme:npm_module_types", - "//packages/kbn-ambient-ui-types", - "//packages/shared-ux/file/context:npm_module_types", - "//packages/shared-ux/file/util:npm_module_types", - "//packages/shared-ux/file/types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/file/file_upload/impl/kibana.jsonc b/packages/shared-ux/file/file_upload/impl/kibana.jsonc index 11ad99c84ef5b..a091e6e1ec046 100644 --- a/packages/shared-ux/file/file_upload/impl/kibana.jsonc +++ b/packages/shared-ux/file/file_upload/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-file-upload", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/file/file_upload/impl/package.json b/packages/shared-ux/file/file_upload/impl/package.json index 060044a0775a2..008b307710ff4 100644 --- a/packages/shared-ux/file/file_upload/impl/package.json +++ b/packages/shared-ux/file/file_upload/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-file-upload", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/shared-ux/file/file_upload/impl/tsconfig.json b/packages/shared-ux/file/file_upload/impl/tsconfig.json index 0b9ca147ee59f..81d7704f03f7b 100644 --- a/packages/shared-ux/file/file_upload/impl/tsconfig.json +++ b/packages/shared-ux/file/file_upload/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", "jest", @@ -14,5 +12,18 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/ui-theme", + "@kbn/shared-ux-file-context", + "@kbn/shared-ux-file-util", + "@kbn/shared-ux-file-types", + "@kbn/utility-types-jest", + "@kbn/shared-ux-file-mocks", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/file/image/impl/BUILD.bazel b/packages/shared-ux/file/image/impl/BUILD.bazel deleted file mode 100644 index dde834269eddd..0000000000000 --- a/packages/shared-ux/file/image/impl/BUILD.bazel +++ /dev/null @@ -1,148 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-file-image" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//react", - "@npm//classnames", - "@npm//@emotion/react", - "@npm//@emotion/css", - "//packages/shared-ux/file/util", - "//packages/kbn-shared-ux-utility", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "@npm//@types/classnames", - "//packages/kbn-ambient-ui-types", - "//packages/shared-ux/file/util:npm_module_types", - "//packages/shared-ux/file/types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/file/image/impl/kibana.jsonc b/packages/shared-ux/file/image/impl/kibana.jsonc index 93a4709c14bca..1f10c9524e6c3 100644 --- a/packages/shared-ux/file/image/impl/kibana.jsonc +++ b/packages/shared-ux/file/image/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-file-image", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/file/image/impl/package.json b/packages/shared-ux/file/image/impl/package.json index 9b45e313c4194..1438cca9f92be 100644 --- a/packages/shared-ux/file/image/impl/package.json +++ b/packages/shared-ux/file/image/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-file-image", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/shared-ux/file/image/impl/tsconfig.json b/packages/shared-ux/file/image/impl/tsconfig.json index dad7279f0e301..5404f62040f0d 100644 --- a/packages/shared-ux/file/image/impl/tsconfig.json +++ b/packages/shared-ux/file/image/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", "jest", @@ -13,5 +11,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/shared-ux-file-util", + "@kbn/shared-ux-file-types", + "@kbn/shared-ux-file-image-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/file/image/mocks/BUILD.bazel b/packages/shared-ux/file/image/mocks/BUILD.bazel deleted file mode 100644 index 0c25ef25839ae..0000000000000 --- a/packages/shared-ux/file/image/mocks/BUILD.bazel +++ /dev/null @@ -1,127 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-file-image-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ ] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/file/image/mocks/kibana.jsonc b/packages/shared-ux/file/image/mocks/kibana.jsonc index bb4d6a6acca4e..79ddeb6e8d7ad 100644 --- a/packages/shared-ux/file/image/mocks/kibana.jsonc +++ b/packages/shared-ux/file/image/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-file-image-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/file/image/mocks/package.json b/packages/shared-ux/file/image/mocks/package.json index 02f631e8257ea..a4bf95cdbcd03 100644 --- a/packages/shared-ux/file/image/mocks/package.json +++ b/packages/shared-ux/file/image/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-file-image-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/file/image/mocks/tsconfig.json b/packages/shared-ux/file/image/mocks/tsconfig.json index 88aabf570de07..db7f0738c6cfe 100644 --- a/packages/shared-ux/file/image/mocks/tsconfig.json +++ b/packages/shared-ux/file/image/mocks/tsconfig.json @@ -1,14 +1,15 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", ] }, "include": [ "**/*.ts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/file/mocks/BUILD.bazel b/packages/shared-ux/file/mocks/BUILD.bazel deleted file mode 100644 index e0df2b7fb962c..0000000000000 --- a/packages/shared-ux/file/mocks/BUILD.bazel +++ /dev/null @@ -1,134 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-file-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//jest", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/node", - "//packages/kbn-utility-types-jest:npm_module_types", - "//packages/shared-ux/file/types:npm_module_types", - -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/file/mocks/kibana.jsonc b/packages/shared-ux/file/mocks/kibana.jsonc index 79247cea31833..587fc49d1a21d 100644 --- a/packages/shared-ux/file/mocks/kibana.jsonc +++ b/packages/shared-ux/file/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-file-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/file/mocks/package.json b/packages/shared-ux/file/mocks/package.json index 6be31776d191a..5491796cdb7f6 100644 --- a/packages/shared-ux/file/mocks/package.json +++ b/packages/shared-ux/file/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-file-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/shared-ux/file/mocks/tsconfig.json b/packages/shared-ux/file/mocks/tsconfig.json index 6711daf2036c6..677b4a7a9e2ae 100644 --- a/packages/shared-ux/file/mocks/tsconfig.json +++ b/packages/shared-ux/file/mocks/tsconfig.json @@ -1,12 +1,17 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ ] }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/utility-types-jest", + "@kbn/shared-ux-file-types" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/file/types/BUILD.bazel b/packages/shared-ux/file/types/BUILD.bazel deleted file mode 100644 index 5ebe604a3fe96..0000000000000 --- a/packages/shared-ux/file/types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-file-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/file/types/kibana.jsonc b/packages/shared-ux/file/types/kibana.jsonc index f40bdacc6802e..becf0ea53cc4c 100644 --- a/packages/shared-ux/file/types/kibana.jsonc +++ b/packages/shared-ux/file/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-file-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/file/types/tsconfig.json b/packages/shared-ux/file/types/tsconfig.json index 7b2ef816db91f..1e6c78a051db3 100644 --- a/packages/shared-ux/file/types/tsconfig.json +++ b/packages/shared-ux/file/types/tsconfig.json @@ -1,14 +1,15 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node" ], }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/file/util/BUILD.bazel b/packages/shared-ux/file/util/BUILD.bazel deleted file mode 100644 index 1fdb6e0500edd..0000000000000 --- a/packages/shared-ux/file/util/BUILD.bazel +++ /dev/null @@ -1,142 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "util" -PKG_REQUIRE_NAME = "@kbn/shared-ux-file-util" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//jest", - "@npm//blurhash", - "@npm//rxjs", - "@npm//react-use", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//blurhash", - "@npm//rxjs", - "@npm//react-use", - "//packages/shared-ux/file/types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/file/util/kibana.jsonc b/packages/shared-ux/file/util/kibana.jsonc index ef30839a63640..5e63db9a0f1fb 100644 --- a/packages/shared-ux/file/util/kibana.jsonc +++ b/packages/shared-ux/file/util/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-file-util", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/file/util/package.json b/packages/shared-ux/file/util/package.json index 91b5fbb765173..028f79ac52fa3 100644 --- a/packages/shared-ux/file/util/package.json +++ b/packages/shared-ux/file/util/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-file-util", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/shared-ux/file/util/tsconfig.json b/packages/shared-ux/file/util/tsconfig.json index 47ad657279cbb..dd3e7075a6a89 100644 --- a/packages/shared-ux/file/util/tsconfig.json +++ b/packages/shared-ux/file/util/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,11 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/shared-ux-file-types" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/link/redirect_app/impl/BUILD.bazel b/packages/shared-ux/link/redirect_app/impl/BUILD.bazel deleted file mode 100644 index 03946518a9d4b..0000000000000 --- a/packages/shared-ux/link/redirect_app/impl/BUILD.bazel +++ /dev/null @@ -1,151 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-link-redirect-app" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//react-use", - "@npm//react", - "@npm//rxjs", - "//packages/kbn-shared-ux-utility", - "@npm//@emotion/react", - "@npm//@emotion/css", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "@npm//rxjs", - "@npm//react-use", - "//packages/kbn-ambient-ui-types", - "//packages/shared-ux/link/redirect_app/types", - "//packages/kbn-shared-ux-utility:npm_module_types", - "@npm//@emotion/css", - "@npm//@emotion/react", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/link/redirect_app/impl/kibana.jsonc b/packages/shared-ux/link/redirect_app/impl/kibana.jsonc index 0e18f1baa7d05..4ba057259182f 100644 --- a/packages/shared-ux/link/redirect_app/impl/kibana.jsonc +++ b/packages/shared-ux/link/redirect_app/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-link-redirect-app", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/link/redirect_app/impl/package.json b/packages/shared-ux/link/redirect_app/impl/package.json index 5dae14bdd878e..2e35d70c5b33c 100644 --- a/packages/shared-ux/link/redirect_app/impl/package.json +++ b/packages/shared-ux/link/redirect_app/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-link-redirect-app", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/link/redirect_app/impl/tsconfig.json b/packages/shared-ux/link/redirect_app/impl/tsconfig.json index 361cf19dfaa4f..0b564979c2b9e 100644 --- a/packages/shared-ux/link/redirect_app/impl/tsconfig.json +++ b/packages/shared-ux/link/redirect_app/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -15,5 +13,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/shared-ux-utility", + "@kbn/shared-ux-link-redirect-app-types", + "@kbn/shared-ux-link-redirect-app-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/link/redirect_app/mocks/BUILD.bazel b/packages/shared-ux/link/redirect_app/mocks/BUILD.bazel deleted file mode 100644 index 122d9927de5e7..0000000000000 --- a/packages/shared-ux/link/redirect_app/mocks/BUILD.bazel +++ /dev/null @@ -1,138 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-link-redirect-app-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//@storybook/addon-actions", - "@npm//rxjs", - "//packages/shared-ux/storybook/mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@storybook/addon-actions", - "@npm//rxjs", - "//packages/shared-ux/link/redirect_app/types:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/link/redirect_app/mocks/kibana.jsonc b/packages/shared-ux/link/redirect_app/mocks/kibana.jsonc index 4157e73efb5cb..3282ed29cba75 100644 --- a/packages/shared-ux/link/redirect_app/mocks/kibana.jsonc +++ b/packages/shared-ux/link/redirect_app/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-link-redirect-app-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/link/redirect_app/mocks/package.json b/packages/shared-ux/link/redirect_app/mocks/package.json index 539bfd8f88c0a..1f7ac27d7e116 100644 --- a/packages/shared-ux/link/redirect_app/mocks/package.json +++ b/packages/shared-ux/link/redirect_app/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-link-redirect-app-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/link/redirect_app/mocks/tsconfig.json b/packages/shared-ux/link/redirect_app/mocks/tsconfig.json index a00de7fc73226..e1d633ba8896a 100644 --- a/packages/shared-ux/link/redirect_app/mocks/tsconfig.json +++ b/packages/shared-ux/link/redirect_app/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/shared-ux-link-redirect-app-types", + "@kbn/shared-ux-storybook-mock" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/link/redirect_app/types/BUILD.bazel b/packages/shared-ux/link/redirect_app/types/BUILD.bazel deleted file mode 100644 index cabeec3208b4d..0000000000000 --- a/packages/shared-ux/link/redirect_app/types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-link-redirect-app-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/link/redirect_app/types/kibana.jsonc b/packages/shared-ux/link/redirect_app/types/kibana.jsonc index c337cfd460355..7c3f5a0d6d8fc 100644 --- a/packages/shared-ux/link/redirect_app/types/kibana.jsonc +++ b/packages/shared-ux/link/redirect_app/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-link-redirect-app-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/link/redirect_app/types/tsconfig.json b/packages/shared-ux/link/redirect_app/types/tsconfig.json index f566d00dd2704..fc981ba49dd7e 100644 --- a/packages/shared-ux/link/redirect_app/types/tsconfig.json +++ b/packages/shared-ux/link/redirect_app/types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "rxjs", "@types/react", @@ -11,5 +9,8 @@ }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/markdown/impl/BUILD.bazel b/packages/shared-ux/markdown/impl/BUILD.bazel deleted file mode 100644 index bb19abe42c476..0000000000000 --- a/packages/shared-ux/markdown/impl/BUILD.bazel +++ /dev/null @@ -1,145 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-markdown" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//enzyme", - "@npm//@elastic/eui", - "//packages/kbn-ambient-ui-types", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@elastic/eui", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-shared-ux-utility:npm_module_types", - "//packages/shared-ux/markdown/mocks", - # "//packages/kbn-shared-ux-markdown-mocks:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/markdown/impl/kibana.jsonc b/packages/shared-ux/markdown/impl/kibana.jsonc index 8e5c57b8efdd6..6286957024922 100644 --- a/packages/shared-ux/markdown/impl/kibana.jsonc +++ b/packages/shared-ux/markdown/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-markdown", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/markdown/impl/package.json b/packages/shared-ux/markdown/impl/package.json index 55541e9fb54bf..6cc6e10812688 100644 --- a/packages/shared-ux/markdown/impl/package.json +++ b/packages/shared-ux/markdown/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-markdown", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/markdown/impl/tsconfig.json b/packages/shared-ux/markdown/impl/tsconfig.json index 60680c404dcdc..a17b7a69317e1 100644 --- a/packages/shared-ux/markdown/impl/tsconfig.json +++ b/packages/shared-ux/markdown/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,11 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/shared-ux-markdown-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/markdown/mocks/BUILD.bazel b/packages/shared-ux/markdown/mocks/BUILD.bazel deleted file mode 100644 index c6ad9fd3c8e74..0000000000000 --- a/packages/shared-ux/markdown/mocks/BUILD.bazel +++ /dev/null @@ -1,140 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-markdown-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//@storybook/addon-actions", - "//packages/shared-ux/storybook/mock", - "//packages/shared-ux/markdown/impl", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/react", - "@npm//@storybook/addon-actions", - "@npm//@types/jest", - "@npm//@types/node", - # "//packages/shared-ux/markdown/impl:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", - "//packages/shared-ux/markdown/types:npm_module_types", - -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/markdown/mocks/kibana.jsonc b/packages/shared-ux/markdown/mocks/kibana.jsonc index 12aea510169c8..7f362da42b0d0 100644 --- a/packages/shared-ux/markdown/mocks/kibana.jsonc +++ b/packages/shared-ux/markdown/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-markdown-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/markdown/mocks/package.json b/packages/shared-ux/markdown/mocks/package.json index 68a15def6151f..75b77bb673749 100644 --- a/packages/shared-ux/markdown/mocks/package.json +++ b/packages/shared-ux/markdown/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-markdown-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/markdown/mocks/tsconfig.json b/packages/shared-ux/markdown/mocks/tsconfig.json index c8559330de310..2fe699abba9f1 100644 --- a/packages/shared-ux/markdown/mocks/tsconfig.json +++ b/packages/shared-ux/markdown/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "node", "react" @@ -11,5 +9,12 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/shared-ux-storybook-mock", + "@kbn/shared-ux-markdown-types" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/markdown/types/BUILD.bazel b/packages/shared-ux/markdown/types/BUILD.bazel deleted file mode 100644 index 36528f243b5c5..0000000000000 --- a/packages/shared-ux/markdown/types/BUILD.bazel +++ /dev/null @@ -1,67 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-markdown-types" - -SOURCE_FILES = glob( - [ - "*.d.ts", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "build_types", - srcs = [":npm_module_types"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) \ No newline at end of file diff --git a/packages/shared-ux/markdown/types/kibana.jsonc b/packages/shared-ux/markdown/types/kibana.jsonc index fdc2a59e089a1..7c4c3348bc082 100644 --- a/packages/shared-ux/markdown/types/kibana.jsonc +++ b/packages/shared-ux/markdown/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-markdown-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [], + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/markdown/types/package.json b/packages/shared-ux/markdown/types/package.json index a3b0f4553f0d5..af94eddb92a23 100644 --- a/packages/shared-ux/markdown/types/package.json +++ b/packages/shared-ux/markdown/types/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-markdown-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/markdown/types/tsconfig.json b/packages/shared-ux/markdown/types/tsconfig.json index 3cffae3f70336..078865843e593 100644 --- a/packages/shared-ux/markdown/types/tsconfig.json +++ b/packages/shared-ux/markdown/types/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "rxjs", "@types/react", @@ -11,5 +9,8 @@ }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/analytics_no_data/impl/BUILD.bazel b/packages/shared-ux/page/analytics_no_data/impl/BUILD.bazel deleted file mode 100644 index eba6e6ed2ed19..0000000000000 --- a/packages/shared-ux/page/analytics_no_data/impl/BUILD.bazel +++ /dev/null @@ -1,144 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-analytics-no-data" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//@testing-library", - "//packages/kbn-i18n", - "//packages/shared-ux/page/kibana_no_data/impl", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/kbn-i18n:npm_module_types", - "//packages/shared-ux/page/kibana_no_data/impl:npm_module_types", - "//packages/shared-ux/page/analytics_no_data/types:npm_module_types", - "//packages/kbn-ambient-ui-types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/analytics_no_data/impl/kibana.jsonc b/packages/shared-ux/page/analytics_no_data/impl/kibana.jsonc index 1ef76a4f761fe..a971be9527c92 100644 --- a/packages/shared-ux/page/analytics_no_data/impl/kibana.jsonc +++ b/packages/shared-ux/page/analytics_no_data/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-analytics-no-data", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/analytics_no_data/impl/package.json b/packages/shared-ux/page/analytics_no_data/impl/package.json index af1f2d6860a6f..21bffd125779d 100644 --- a/packages/shared-ux/page/analytics_no_data/impl/package.json +++ b/packages/shared-ux/page/analytics_no_data/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-analytics-no-data", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/page/analytics_no_data/impl/tsconfig.json b/packages/shared-ux/page/analytics_no_data/impl/tsconfig.json index 7c5977f8a0840..6a78f24dff0f7 100644 --- a/packages/shared-ux/page/analytics_no_data/impl/tsconfig.json +++ b/packages/shared-ux/page/analytics_no_data/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,15 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/shared-ux-page-kibana-no-data", + "@kbn/shared-ux-page-analytics-no-data-types", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-page-analytics-no-data-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/analytics_no_data/mocks/BUILD.bazel b/packages/shared-ux/page/analytics_no_data/mocks/BUILD.bazel deleted file mode 100644 index d5f264c1a3a8c..0000000000000 --- a/packages/shared-ux/page/analytics_no_data/mocks/BUILD.bazel +++ /dev/null @@ -1,136 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-analytics-no-data-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "//packages/shared-ux/page/kibana_no_data/mocks", - "//packages/shared-ux/storybook/mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/shared-ux/page/analytics_no_data/types:npm_module_types", - "//packages/shared-ux/page/kibana_no_data/mocks:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/analytics_no_data/mocks/kibana.jsonc b/packages/shared-ux/page/analytics_no_data/mocks/kibana.jsonc index 45fc9923f1825..ced2ab2b9a374 100644 --- a/packages/shared-ux/page/analytics_no_data/mocks/kibana.jsonc +++ b/packages/shared-ux/page/analytics_no_data/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-analytics-no-data-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/analytics_no_data/mocks/package.json b/packages/shared-ux/page/analytics_no_data/mocks/package.json index cc2fb0317a86b..03ce055b2d1c7 100644 --- a/packages/shared-ux/page/analytics_no_data/mocks/package.json +++ b/packages/shared-ux/page/analytics_no_data/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-analytics-no-data-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/page/analytics_no_data/mocks/tsconfig.json b/packages/shared-ux/page/analytics_no_data/mocks/tsconfig.json index 4703a8ebf5e35..7b0f91bbb706c 100644 --- a/packages/shared-ux/page/analytics_no_data/mocks/tsconfig.json +++ b/packages/shared-ux/page/analytics_no_data/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/shared-ux-page-analytics-no-data-types", + "@kbn/shared-ux-page-kibana-no-data-mocks", + "@kbn/shared-ux-storybook-mock" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/analytics_no_data/types/BUILD.bazel b/packages/shared-ux/page/analytics_no_data/types/BUILD.bazel deleted file mode 100644 index ad51a3b2e4bbe..0000000000000 --- a/packages/shared-ux/page/analytics_no_data/types/BUILD.bazel +++ /dev/null @@ -1,60 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-analytics-no-data-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) - diff --git a/packages/shared-ux/page/analytics_no_data/types/kibana.jsonc b/packages/shared-ux/page/analytics_no_data/types/kibana.jsonc index 622d986a5eec3..cc8fc3c873022 100644 --- a/packages/shared-ux/page/analytics_no_data/types/kibana.jsonc +++ b/packages/shared-ux/page/analytics_no_data/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-analytics-no-data-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/analytics_no_data/types/package.json b/packages/shared-ux/page/analytics_no_data/types/package.json index fc410b230bb50..24b27948c8037 100644 --- a/packages/shared-ux/page/analytics_no_data/types/package.json +++ b/packages/shared-ux/page/analytics_no_data/types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/shared-ux-page-analytics-no-data-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/page/analytics_no_data/types/tsconfig.json b/packages/shared-ux/page/analytics_no_data/types/tsconfig.json index b863eab85b68e..e34fff5c01f9b 100644 --- a/packages/shared-ux/page/analytics_no_data/types/tsconfig.json +++ b/packages/shared-ux/page/analytics_no_data/types/tsconfig.json @@ -1,12 +1,16 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/shared-ux-page-kibana-no-data-types", ] } diff --git a/packages/shared-ux/page/kibana_no_data/impl/BUILD.bazel b/packages/shared-ux/page/kibana_no_data/impl/BUILD.bazel deleted file mode 100644 index 31e3910483812..0000000000000 --- a/packages/shared-ux/page/kibana_no_data/impl/BUILD.bazel +++ /dev/null @@ -1,152 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-kibana-no-data" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//react", - "//packages/kbn-i18n", - "//packages/shared-ux/prompt/no_data_views/impl", - "//packages/shared-ux/page/no_data_config/impl", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n:npm_module_types", - "//packages/shared-ux/prompt/no_data_views/impl:npm_module_types", - "//packages/shared-ux/page/no_data_config/impl:npm_module_types", - "//packages/shared-ux/page/no_data_config/types", - "//packages/shared-ux/page/kibana_no_data/types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/kibana_no_data/impl/kibana.jsonc b/packages/shared-ux/page/kibana_no_data/impl/kibana.jsonc index 311fb97cadc1a..07de27d7e9aa3 100644 --- a/packages/shared-ux/page/kibana_no_data/impl/kibana.jsonc +++ b/packages/shared-ux/page/kibana_no_data/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-kibana-no-data", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/kibana_no_data/impl/package.json b/packages/shared-ux/page/kibana_no_data/impl/package.json index d929610c0b7a6..fe9622adf9114 100644 --- a/packages/shared-ux/page/kibana_no_data/impl/package.json +++ b/packages/shared-ux/page/kibana_no_data/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-kibana-no-data", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/page/kibana_no_data/impl/tsconfig.json b/packages/shared-ux/page/kibana_no_data/impl/tsconfig.json index 1f377c27d0e2d..8de16912b9e35 100644 --- a/packages/shared-ux/page/kibana_no_data/impl/tsconfig.json +++ b/packages/shared-ux/page/kibana_no_data/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -15,5 +13,16 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/shared-ux-prompt-no-data-views", + "@kbn/shared-ux-page-no-data-config", + "@kbn/shared-ux-page-kibana-no-data-types", + "@kbn/shared-ux-page-kibana-no-data-mocks", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-card-no-data", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/kibana_no_data/mocks/BUILD.bazel b/packages/shared-ux/page/kibana_no_data/mocks/BUILD.bazel deleted file mode 100644 index 4bc5c5b663b7a..0000000000000 --- a/packages/shared-ux/page/kibana_no_data/mocks/BUILD.bazel +++ /dev/null @@ -1,139 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-kibana-no-data-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "//packages/shared-ux/card/no_data/mocks", - "//packages/shared-ux/prompt/no_data_views/mocks", - "//packages/shared-ux/storybook/mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/shared-ux/card/no_data/mocks:npm_module_types", - "//packages/shared-ux/page/kibana_no_data/types:npm_module_types", - "//packages/shared-ux/page/no_data/types", - "//packages/shared-ux/prompt/no_data_views/mocks:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/kibana_no_data/mocks/kibana.jsonc b/packages/shared-ux/page/kibana_no_data/mocks/kibana.jsonc index f505fe3e4b9fa..4d9403bec3999 100644 --- a/packages/shared-ux/page/kibana_no_data/mocks/kibana.jsonc +++ b/packages/shared-ux/page/kibana_no_data/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-kibana-no-data-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/kibana_no_data/mocks/package.json b/packages/shared-ux/page/kibana_no_data/mocks/package.json index b5aba9769ed95..1df39cec2aea0 100644 --- a/packages/shared-ux/page/kibana_no_data/mocks/package.json +++ b/packages/shared-ux/page/kibana_no_data/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-kibana-no-data-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/page/kibana_no_data/mocks/tsconfig.json b/packages/shared-ux/page/kibana_no_data/mocks/tsconfig.json index a00de7fc73226..012849eca8ae5 100644 --- a/packages/shared-ux/page/kibana_no_data/mocks/tsconfig.json +++ b/packages/shared-ux/page/kibana_no_data/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,15 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/shared-ux-card-no-data-mocks", + "@kbn/shared-ux-page-kibana-no-data-types", + "@kbn/shared-ux-prompt-no-data-views-mocks", + "@kbn/shared-ux-storybook-mock", + "@kbn/shared-ux-page-no-data-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/kibana_no_data/types/BUILD.bazel b/packages/shared-ux/page/kibana_no_data/types/BUILD.bazel deleted file mode 100644 index bac8d3711a04e..0000000000000 --- a/packages/shared-ux/page/kibana_no_data/types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-kibana-no-data-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/kibana_no_data/types/kibana.jsonc b/packages/shared-ux/page/kibana_no_data/types/kibana.jsonc index 5fd40e9bde6a2..6bfd4e44a05d9 100644 --- a/packages/shared-ux/page/kibana_no_data/types/kibana.jsonc +++ b/packages/shared-ux/page/kibana_no_data/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-kibana-no-data-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/kibana_no_data/types/package.json b/packages/shared-ux/page/kibana_no_data/types/package.json index e02f5ce674b71..2990f4e6d8656 100644 --- a/packages/shared-ux/page/kibana_no_data/types/package.json +++ b/packages/shared-ux/page/kibana_no_data/types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/shared-ux-page-kibana-no-data-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/shared-ux/page/kibana_no_data/types/tsconfig.json b/packages/shared-ux/page/kibana_no_data/types/tsconfig.json index b863eab85b68e..f51e9bf3496fd 100644 --- a/packages/shared-ux/page/kibana_no_data/types/tsconfig.json +++ b/packages/shared-ux/page/kibana_no_data/types/tsconfig.json @@ -1,12 +1,18 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/shared-ux-page-no-data-types", + "@kbn/shared-ux-prompt-no-data-views-types", + "@kbn/shared-ux-card-no-data-types", ] } diff --git a/packages/shared-ux/page/kibana_template/impl/BUILD.bazel b/packages/shared-ux/page/kibana_template/impl/BUILD.bazel deleted file mode 100644 index e58fb156edc58..0000000000000 --- a/packages/shared-ux/page/kibana_template/impl/BUILD.bazel +++ /dev/null @@ -1,140 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-kibana-template" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "//packages/shared-ux/page/no_data_config/impl", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/shared-ux/page/no_data_config/impl:npm_module_types", - "//packages/shared-ux/page/kibana_template/types", - "//packages/kbn-ambient-ui-types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/kibana_template/impl/kibana.jsonc b/packages/shared-ux/page/kibana_template/impl/kibana.jsonc index cfcef7ec0a150..5b670f59b7d18 100644 --- a/packages/shared-ux/page/kibana_template/impl/kibana.jsonc +++ b/packages/shared-ux/page/kibana_template/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-kibana-template", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/kibana_template/impl/package.json b/packages/shared-ux/page/kibana_template/impl/package.json index 111538a3dd75b..ef3e0dee17b36 100644 --- a/packages/shared-ux/page/kibana_template/impl/package.json +++ b/packages/shared-ux/page/kibana_template/impl/package.json @@ -2,7 +2,5 @@ "name": "@kbn/shared-ux-page-kibana-template", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/page/kibana_template/impl/tsconfig.json b/packages/shared-ux/page/kibana_template/impl/tsconfig.json index cf7982b9ab1e6..d4b2c3e87f593 100644 --- a/packages/shared-ux/page/kibana_template/impl/tsconfig.json +++ b/packages/shared-ux/page/kibana_template/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,15 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/shared-ux-page-no-data-config", + "@kbn/shared-ux-page-kibana-template-mocks", + "@kbn/shared-ux-page-solution-nav", + "@kbn/shared-ux-page-no-data-types", + "@kbn/shared-ux-page-kibana-template-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/kibana_template/mocks/BUILD.bazel b/packages/shared-ux/page/kibana_template/mocks/BUILD.bazel deleted file mode 100644 index c2ec3013e01a8..0000000000000 --- a/packages/shared-ux/page/kibana_template/mocks/BUILD.bazel +++ /dev/null @@ -1,138 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-kibana-template-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//lodash", - "@npm//react", - "//packages/shared-ux/page/no_data_config/mocks", - "//packages/shared-ux/storybook/mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@types/node", - "@npm//@types/react", - "//packages/shared-ux/page/kibana_template/types", - "//packages/shared-ux/page/no_data_config/mocks:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/kibana_template/mocks/kibana.jsonc b/packages/shared-ux/page/kibana_template/mocks/kibana.jsonc index bb870c6ef0f41..29b752ee4a424 100644 --- a/packages/shared-ux/page/kibana_template/mocks/kibana.jsonc +++ b/packages/shared-ux/page/kibana_template/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-kibana-template-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/kibana_template/mocks/package.json b/packages/shared-ux/page/kibana_template/mocks/package.json index 4541001003f30..c4b77ca7800cb 100644 --- a/packages/shared-ux/page/kibana_template/mocks/package.json +++ b/packages/shared-ux/page/kibana_template/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-kibana-template-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/page/kibana_template/mocks/tsconfig.json b/packages/shared-ux/page/kibana_template/mocks/tsconfig.json index 4c2618f5b3a19..6a11b6ecad992 100644 --- a/packages/shared-ux/page/kibana_template/mocks/tsconfig.json +++ b/packages/shared-ux/page/kibana_template/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,14 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/shared-ux-page-no-data-config-mocks", + "@kbn/shared-ux-storybook-mock", + "@kbn/shared-ux-card-no-data-mocks", + "@kbn/shared-ux-page-kibana-template-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/kibana_template/types/BUILD.bazel b/packages/shared-ux/page/kibana_template/types/BUILD.bazel deleted file mode 100644 index 45cbd0fd4cc42..0000000000000 --- a/packages/shared-ux/page/kibana_template/types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-kibana-template-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/kibana_template/types/kibana.jsonc b/packages/shared-ux/page/kibana_template/types/kibana.jsonc index 91518cf552986..eda1aee86b12b 100644 --- a/packages/shared-ux/page/kibana_template/types/kibana.jsonc +++ b/packages/shared-ux/page/kibana_template/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-kibana-template-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/kibana_template/types/package.json b/packages/shared-ux/page/kibana_template/types/package.json index 4562e9a1becdd..b25f452e89127 100644 --- a/packages/shared-ux/page/kibana_template/types/package.json +++ b/packages/shared-ux/page/kibana_template/types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/shared-ux-page-kibana-template-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/page/kibana_template/types/tsconfig.json b/packages/shared-ux/page/kibana_template/types/tsconfig.json index b863eab85b68e..8559d1570106c 100644 --- a/packages/shared-ux/page/kibana_template/types/tsconfig.json +++ b/packages/shared-ux/page/kibana_template/types/tsconfig.json @@ -1,12 +1,17 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/shared-ux-page-solution-nav", + "@kbn/shared-ux-page-no-data-config-types", ] } diff --git a/packages/shared-ux/page/no_data/impl/BUILD.bazel b/packages/shared-ux/page/no_data/impl/BUILD.bazel deleted file mode 100644 index 040968fa52553..0000000000000 --- a/packages/shared-ux/page/no_data/impl/BUILD.bazel +++ /dev/null @@ -1,148 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-no-data" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//classnames", - "@npm//react", - "//packages/shared-ux/avatar/solution", - "//packages/shared-ux/card/no_data/impl", - "//packages/shared-ux/prompt/no_data_views/impl", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@types/classnames", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types", - "//packages/shared-ux/avatar/solution:npm_module_types", - "//packages/shared-ux/card/no_data/impl:npm_module_types", - "//packages/shared-ux/page/no_data/types:npm_module_types", - "//packages/shared-ux/prompt/no_data_views/impl:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/no_data/impl/kibana.jsonc b/packages/shared-ux/page/no_data/impl/kibana.jsonc index e651af8c1de04..26e30ef8c15f2 100644 --- a/packages/shared-ux/page/no_data/impl/kibana.jsonc +++ b/packages/shared-ux/page/no_data/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-no-data", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/no_data/impl/package.json b/packages/shared-ux/page/no_data/impl/package.json index 61a823cc5e7ab..7af98cdf3fa46 100644 --- a/packages/shared-ux/page/no_data/impl/package.json +++ b/packages/shared-ux/page/no_data/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-no-data", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/page/no_data/impl/tsconfig.json b/packages/shared-ux/page/no_data/impl/tsconfig.json index ce5320536e563..99daacfdb7087 100644 --- a/packages/shared-ux/page/no_data/impl/tsconfig.json +++ b/packages/shared-ux/page/no_data/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,17 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/shared-ux-avatar-solution", + "@kbn/shared-ux-card-no-data", + "@kbn/shared-ux-page-no-data-types", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-page-no-data-mocks", + "@kbn/i18n", + "@kbn/i18n-react", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/no_data/mocks/BUILD.bazel b/packages/shared-ux/page/no_data/mocks/BUILD.bazel deleted file mode 100644 index 52b1806936a2d..0000000000000 --- a/packages/shared-ux/page/no_data/mocks/BUILD.bazel +++ /dev/null @@ -1,137 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-no-data-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//@storybook/addon-actions", - "//packages/shared-ux/card/no_data/mocks", - "//packages/shared-ux/storybook/mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/shared-ux/page/no_data/types:npm_module_types", - "//packages/shared-ux/card/no_data/mocks:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/no_data/mocks/kibana.jsonc b/packages/shared-ux/page/no_data/mocks/kibana.jsonc index 0062ac6548d65..cbcf8d5376a61 100644 --- a/packages/shared-ux/page/no_data/mocks/kibana.jsonc +++ b/packages/shared-ux/page/no_data/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-no-data-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/no_data/mocks/package.json b/packages/shared-ux/page/no_data/mocks/package.json index f3b8c22a03da0..341a66ccbf3a8 100644 --- a/packages/shared-ux/page/no_data/mocks/package.json +++ b/packages/shared-ux/page/no_data/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-no-data-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/page/no_data/mocks/tsconfig.json b/packages/shared-ux/page/no_data/mocks/tsconfig.json index 4703a8ebf5e35..a7ff059474ecd 100644 --- a/packages/shared-ux/page/no_data/mocks/tsconfig.json +++ b/packages/shared-ux/page/no_data/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/shared-ux-page-no-data-types", + "@kbn/shared-ux-card-no-data-mocks", + "@kbn/shared-ux-storybook-mock" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/no_data/types/BUILD.bazel b/packages/shared-ux/page/no_data/types/BUILD.bazel deleted file mode 100644 index 618a82a8f6a98..0000000000000 --- a/packages/shared-ux/page/no_data/types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-no-data-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/no_data/types/kibana.jsonc b/packages/shared-ux/page/no_data/types/kibana.jsonc index 504a436c62f48..2e79352fbd5fd 100644 --- a/packages/shared-ux/page/no_data/types/kibana.jsonc +++ b/packages/shared-ux/page/no_data/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-no-data-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/no_data/types/package.json b/packages/shared-ux/page/no_data/types/package.json index 8e9dce1b11f45..c5c6423cdeda2 100644 --- a/packages/shared-ux/page/no_data/types/package.json +++ b/packages/shared-ux/page/no_data/types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/shared-ux-page-no-data-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/shared-ux/page/no_data/types/tsconfig.json b/packages/shared-ux/page/no_data/types/tsconfig.json index b863eab85b68e..cb496086a1a06 100644 --- a/packages/shared-ux/page/no_data/types/tsconfig.json +++ b/packages/shared-ux/page/no_data/types/tsconfig.json @@ -1,12 +1,16 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/shared-ux-card-no-data-types", ] } diff --git a/packages/shared-ux/page/no_data_config/impl/BUILD.bazel b/packages/shared-ux/page/no_data_config/impl/BUILD.bazel deleted file mode 100644 index 2aee71ee7367a..0000000000000 --- a/packages/shared-ux/page/no_data_config/impl/BUILD.bazel +++ /dev/null @@ -1,142 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-no-data-config" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//classnames", - "@npm//@elastic/eui", - "//packages/shared-ux/page/solution_nav", - "//packages/shared-ux/page/no_data/impl", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//classnames", - "@npm//@elastic/eui", - "//packages/shared-ux/page/solution_nav:npm_module_types", - "//packages/shared-ux/page/no_data/impl:npm_module_types", - "//packages/shared-ux/page/no_data_config/types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/no_data_config/impl/kibana.jsonc b/packages/shared-ux/page/no_data_config/impl/kibana.jsonc index bc2c3be18cb38..eac1472b64938 100644 --- a/packages/shared-ux/page/no_data_config/impl/kibana.jsonc +++ b/packages/shared-ux/page/no_data_config/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-no-data-config", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/no_data_config/impl/package.json b/packages/shared-ux/page/no_data_config/impl/package.json index a30692bf98701..5ade0b28dd2b7 100644 --- a/packages/shared-ux/page/no_data_config/impl/package.json +++ b/packages/shared-ux/page/no_data_config/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-no-data-config", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/page/no_data_config/impl/tsconfig.json b/packages/shared-ux/page/no_data_config/impl/tsconfig.json index 7c5977f8a0840..f30535d1df3e0 100644 --- a/packages/shared-ux/page/no_data_config/impl/tsconfig.json +++ b/packages/shared-ux/page/no_data_config/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,15 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/shared-ux-page-solution-nav", + "@kbn/shared-ux-page-no-data", + "@kbn/shared-ux-page-no-data-config-types", + "@kbn/shared-ux-page-no-data-config-mocks", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/no_data_config/mocks/BUILD.bazel b/packages/shared-ux/page/no_data_config/mocks/BUILD.bazel deleted file mode 100644 index 3906ada90b43e..0000000000000 --- a/packages/shared-ux/page/no_data_config/mocks/BUILD.bazel +++ /dev/null @@ -1,135 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-no-data-config-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "//packages/shared-ux/page/no_data/mocks", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/shared-ux/page/no_data_config/types", - "//packages/shared-ux/page/no_data/mocks:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/no_data_config/mocks/kibana.jsonc b/packages/shared-ux/page/no_data_config/mocks/kibana.jsonc index b1da5fdb4c0c3..0faf3792e6104 100644 --- a/packages/shared-ux/page/no_data_config/mocks/kibana.jsonc +++ b/packages/shared-ux/page/no_data_config/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-no-data-config-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/no_data_config/mocks/package.json b/packages/shared-ux/page/no_data_config/mocks/package.json index 4277f81e3dcfe..df7b57c3a878b 100644 --- a/packages/shared-ux/page/no_data_config/mocks/package.json +++ b/packages/shared-ux/page/no_data_config/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-no-data-config-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/page/no_data_config/mocks/tsconfig.json b/packages/shared-ux/page/no_data_config/mocks/tsconfig.json index 4703a8ebf5e35..8512e6c9fe15c 100644 --- a/packages/shared-ux/page/no_data_config/mocks/tsconfig.json +++ b/packages/shared-ux/page/no_data_config/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,13 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/shared-ux-page-no-data-mocks", + "@kbn/shared-ux-storybook-mock", + "@kbn/shared-ux-page-no-data-config-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/page/no_data_config/types/BUILD.bazel b/packages/shared-ux/page/no_data_config/types/BUILD.bazel deleted file mode 100644 index 6fa1669fcc176..0000000000000 --- a/packages/shared-ux/page/no_data_config/types/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-no-data-config-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/no_data_config/types/kibana.jsonc b/packages/shared-ux/page/no_data_config/types/kibana.jsonc index 968460e151429..2a3266cdadbbd 100644 --- a/packages/shared-ux/page/no_data_config/types/kibana.jsonc +++ b/packages/shared-ux/page/no_data_config/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-no-data-config-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/no_data_config/types/package.json b/packages/shared-ux/page/no_data_config/types/package.json index 1af47fb4c5028..bee372ead1ad3 100644 --- a/packages/shared-ux/page/no_data_config/types/package.json +++ b/packages/shared-ux/page/no_data_config/types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/shared-ux-page-no-data-config-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/shared-ux/page/no_data_config/types/tsconfig.json b/packages/shared-ux/page/no_data_config/types/tsconfig.json index b863eab85b68e..0a4ee6d632cc4 100644 --- a/packages/shared-ux/page/no_data_config/types/tsconfig.json +++ b/packages/shared-ux/page/no_data_config/types/tsconfig.json @@ -1,12 +1,16 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/shared-ux-page-no-data-types", ] } diff --git a/packages/shared-ux/page/solution_nav/BUILD.bazel b/packages/shared-ux/page/solution_nav/BUILD.bazel deleted file mode 100644 index 9dc4115016d65..0000000000000 --- a/packages/shared-ux/page/solution_nav/BUILD.bazel +++ /dev/null @@ -1,152 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "solution_nav" -PKG_REQUIRE_NAME = "@kbn/shared-ux-page-solution-nav" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.scss", - "**/*.mdx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//classnames", - "@npm//enzyme", - "@npm//react",\ - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/shared-ux/avatar/solution", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@types/classnames", - "@npm//@types/enzyme", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/shared-ux/avatar/solution:npm_module_types", - "//packages/shared-ux/page/kibana_template/types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/page/solution_nav/kibana.jsonc b/packages/shared-ux/page/solution_nav/kibana.jsonc index 0b89ad3a44b0c..8a565ba934727 100644 --- a/packages/shared-ux/page/solution_nav/kibana.jsonc +++ b/packages/shared-ux/page/solution_nav/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-page-solution-nav", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/page/solution_nav/package.json b/packages/shared-ux/page/solution_nav/package.json index 3f07febd136ff..8b4b8f3165a68 100644 --- a/packages/shared-ux/page/solution_nav/package.json +++ b/packages/shared-ux/page/solution_nav/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-page-solution-nav", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/page/solution_nav/tsconfig.json b/packages/shared-ux/page/solution_nav/tsconfig.json index 5cb7bca42f195..dde4935440f75 100644 --- a/packages/shared-ux/page/solution_nav/tsconfig.json +++ b/packages/shared-ux/page/solution_nav/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -14,5 +12,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/shared-ux-avatar-solution", ] } diff --git a/packages/shared-ux/prompt/no_data_views/impl/BUILD.bazel b/packages/shared-ux/prompt/no_data_views/impl/BUILD.bazel deleted file mode 100644 index 8d0d5f0733756..0000000000000 --- a/packages/shared-ux/prompt/no_data_views/impl/BUILD.bazel +++ /dev/null @@ -1,156 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "impl" -PKG_REQUIRE_NAME = "@kbn/shared-ux-prompt-no-data-views" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx", - "**/*.svg", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/eui", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//enzyme", - "@npm//react", - "//packages/kbn-i18n-react", - "//packages/kbn-i18n", - "//packages/kbn-shared-ux-utility", - "//packages/kbn-test-jest-helpers", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@elastic/eui", - "@npm//@emotion/css", - "@npm//@emotion/react", - "@npm//@types/enzyme", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n-react:npm_module_types", - "//packages/kbn-i18n:npm_module_types", - "//packages/kbn-shared-ux-utility:npm_module_types", - "//packages/kbn-test-jest-helpers:npm_module_types", - "//packages/shared-ux/prompt/no_data_views/types:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/prompt/no_data_views/impl/kibana.jsonc b/packages/shared-ux/prompt/no_data_views/impl/kibana.jsonc index 416e58e250d10..c5fb048c68098 100644 --- a/packages/shared-ux/prompt/no_data_views/impl/kibana.jsonc +++ b/packages/shared-ux/prompt/no_data_views/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-prompt-no-data-views", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/prompt/no_data_views/impl/package.json b/packages/shared-ux/prompt/no_data_views/impl/package.json index 2be74fd5f5670..b28e9c767bb9d 100644 --- a/packages/shared-ux/prompt/no_data_views/impl/package.json +++ b/packages/shared-ux/prompt/no_data_views/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-prompt-no-data-views", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/prompt/no_data_views/impl/tsconfig.json b/packages/shared-ux/prompt/no_data_views/impl/tsconfig.json index 5893035fdd770..5da3eb228470f 100644 --- a/packages/shared-ux/prompt/no_data_views/impl/tsconfig.json +++ b/packages/shared-ux/prompt/no_data_views/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -15,5 +13,16 @@ "include": [ "**/*.ts", "**/*.tsx" + ], + "kbn_references": [ + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/shared-ux-utility", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-prompt-no-data-views-types", + "@kbn/shared-ux-prompt-no-data-views-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/prompt/no_data_views/mocks/BUILD.bazel b/packages/shared-ux/prompt/no_data_views/mocks/BUILD.bazel deleted file mode 100644 index c30e7a9c03cf9..0000000000000 --- a/packages/shared-ux/prompt/no_data_views/mocks/BUILD.bazel +++ /dev/null @@ -1,136 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-prompt-no-data-views-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@storybook/addon-actions", - "@npm//react", - "//packages/shared-ux/storybook/mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@storybook/addon-actions", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", - "//packages/shared-ux/prompt/no_data_views/types:npm_module_types", - "//packages/shared-ux/storybook/mock:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/prompt/no_data_views/mocks/kibana.jsonc b/packages/shared-ux/prompt/no_data_views/mocks/kibana.jsonc index 07cf434cde4a3..29c18ad857afc 100644 --- a/packages/shared-ux/prompt/no_data_views/mocks/kibana.jsonc +++ b/packages/shared-ux/prompt/no_data_views/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-prompt-no-data-views-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/prompt/no_data_views/mocks/package.json b/packages/shared-ux/prompt/no_data_views/mocks/package.json index 4485a0918cda7..454408d9cee1a 100644 --- a/packages/shared-ux/prompt/no_data_views/mocks/package.json +++ b/packages/shared-ux/prompt/no_data_views/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-prompt-no-data-views-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/prompt/no_data_views/mocks/tsconfig.json b/packages/shared-ux/prompt/no_data_views/mocks/tsconfig.json index a00de7fc73226..8445aacb692ba 100644 --- a/packages/shared-ux/prompt/no_data_views/mocks/tsconfig.json +++ b/packages/shared-ux/prompt/no_data_views/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,12 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/shared-ux-prompt-no-data-views-types", + "@kbn/shared-ux-storybook-mock" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/prompt/no_data_views/types/BUILD.bazel b/packages/shared-ux/prompt/no_data_views/types/BUILD.bazel deleted file mode 100644 index bfaf94b0b7210..0000000000000 --- a/packages/shared-ux/prompt/no_data_views/types/BUILD.bazel +++ /dev/null @@ -1,60 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-prompt-no-data-views-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) - diff --git a/packages/shared-ux/prompt/no_data_views/types/kibana.jsonc b/packages/shared-ux/prompt/no_data_views/types/kibana.jsonc index 54785567d8b03..6aa07c20b34e9 100644 --- a/packages/shared-ux/prompt/no_data_views/types/kibana.jsonc +++ b/packages/shared-ux/prompt/no_data_views/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-prompt-no-data-views-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/prompt/no_data_views/types/package.json b/packages/shared-ux/prompt/no_data_views/types/package.json index dce78ded678b2..79b0186dbc63c 100644 --- a/packages/shared-ux/prompt/no_data_views/types/package.json +++ b/packages/shared-ux/prompt/no_data_views/types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/shared-ux-prompt-no-data-views-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/shared-ux/prompt/no_data_views/types/tsconfig.json b/packages/shared-ux/prompt/no_data_views/types/tsconfig.json index b863eab85b68e..362cc9e727b9f 100644 --- a/packages/shared-ux/prompt/no_data_views/types/tsconfig.json +++ b/packages/shared-ux/prompt/no_data_views/types/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../../../../tsconfig.bazel.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/prompt/not_found/BUILD.bazel b/packages/shared-ux/prompt/not_found/BUILD.bazel deleted file mode 100644 index 019224c4d0377..0000000000000 --- a/packages/shared-ux/prompt/not_found/BUILD.bazel +++ /dev/null @@ -1,142 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "errors" -PKG_REQUIRE_NAME = "@kbn/shared-ux-prompt-error" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.png", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//@elastic/eui", - "//packages/kbn-i18n" -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@elastic/eui", - "//packages/kbn-ambient-ui-types", - "//packages/kbn-i18n:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ] -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "build_types", - srcs = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/prompt/not_found/kibana.jsonc b/packages/shared-ux/prompt/not_found/kibana.jsonc index dfcbc505ab652..70ecc1dbf1eb9 100644 --- a/packages/shared-ux/prompt/not_found/kibana.jsonc +++ b/packages/shared-ux/prompt/not_found/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-prompt-not-found", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/prompt/not_found/package.json b/packages/shared-ux/prompt/not_found/package.json index e28ff82ce6c29..d79914ea73061 100644 --- a/packages/shared-ux/prompt/not_found/package.json +++ b/packages/shared-ux/prompt/not_found/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-prompt-not-found", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "types": "./target_types/index.d.ts", "license": "SSPL-1.0 OR Elastic License 2.0" } diff --git a/packages/shared-ux/prompt/not_found/tsconfig.json b/packages/shared-ux/prompt/not_found/tsconfig.json index 044531bb66de4..6b098efdfa673 100644 --- a/packages/shared-ux/prompt/not_found/tsconfig.json +++ b/packages/shared-ux/prompt/not_found/tsconfig.json @@ -1,10 +1,14 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": ["jest", "node", "react", "@kbn/ambient-ui-types"] }, - "include": ["**/*.ts", "**/*.tsx"] + "include": ["**/*.ts", "**/*.tsx"], + "kbn_references": [ + "@kbn/i18n" + ], + "exclude": [ + "target/**/*", + ] } diff --git a/packages/shared-ux/router/impl/BUILD.bazel b/packages/shared-ux/router/impl/BUILD.bazel deleted file mode 100644 index a008a5d15df59..0000000000000 --- a/packages/shared-ux/router/impl/BUILD.bazel +++ /dev/null @@ -1,138 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "shared-ux-router" -PKG_REQUIRE_NAME = "@kbn/shared-ux-router" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - "**/*.mdx" - ], - exclude = [ - "**/*.test.*", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "@npm//react-router-dom", - "@npm//react-use", - "@npm//rxjs", - "//packages/kbn-shared-ux-utility", - "//packages/kbn-test-jest-helpers", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@types/react-router-dom", - "@npm//react-use", - "@npm//rxjs", - "//packages/kbn-shared-ux-utility:npm_module_types", - "//packages/shared-ux/router/types:npm_module_types", - "//packages/kbn-ambient-ui-types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/router/impl/kibana.jsonc b/packages/shared-ux/router/impl/kibana.jsonc index e1e6e614e9d6f..5ecf4e1e558df 100644 --- a/packages/shared-ux/router/impl/kibana.jsonc +++ b/packages/shared-ux/router/impl/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-router", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/router/impl/package.json b/packages/shared-ux/router/impl/package.json index 6c80fa334caa4..78239954823bd 100644 --- a/packages/shared-ux/router/impl/package.json +++ b/packages/shared-ux/router/impl/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-router", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/router/impl/tsconfig.json b/packages/shared-ux/router/impl/tsconfig.json index 475b363297f65..13e290e2dea0b 100644 --- a/packages/shared-ux/router/impl/tsconfig.json +++ b/packages/shared-ux/router/impl/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,10 @@ }, "include": [ "**/*", + ], + "kbn_references": [ + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/router/mocks/BUILD.bazel b/packages/shared-ux/router/mocks/BUILD.bazel deleted file mode 100644 index 6a7e263075e8a..0000000000000 --- a/packages/shared-ux/router/mocks/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mocks" -PKG_REQUIRE_NAME = "@kbn/shared-ux-router-mocks" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__", - "**/integration_tests", - "**/mocks", - "**/scripts", - "**/storybook", - "**/test_fixtures", - "**/test_helpers", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react" -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - root_dir = ".", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/router/mocks/kibana.jsonc b/packages/shared-ux/router/mocks/kibana.jsonc index 858c88c76e201..73750134ebdf2 100644 --- a/packages/shared-ux/router/mocks/kibana.jsonc +++ b/packages/shared-ux/router/mocks/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-router-mocks", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/router/mocks/package.json b/packages/shared-ux/router/mocks/package.json index a4dcbf97cb778..7ee5c2cc07993 100644 --- a/packages/shared-ux/router/mocks/package.json +++ b/packages/shared-ux/router/mocks/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-router-mocks", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/shared-ux/router/mocks/tsconfig.json b/packages/shared-ux/router/mocks/tsconfig.json index 37f8e83d0d7a6..e71c7853b63f8 100644 --- a/packages/shared-ux/router/mocks/tsconfig.json +++ b/packages/shared-ux/router/mocks/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -13,5 +11,8 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/router/types/BUILD.bazel b/packages/shared-ux/router/types/BUILD.bazel deleted file mode 100644 index b33071f126efe..0000000000000 --- a/packages/shared-ux/router/types/BUILD.bazel +++ /dev/null @@ -1,60 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "types" -PKG_REQUIRE_NAME = "@kbn/shared-ux-router-types" - -SRCS = glob( - [ - "*.d.ts", - ] -) - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -js_library( - name = PKG_DIRNAME, - srcs = SRCS + NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS, - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -alias( - name = "npm_module_types", - actual = ":" + PKG_DIRNAME, - visibility = ["//visibility:public"], -) - diff --git a/packages/shared-ux/router/types/kibana.jsonc b/packages/shared-ux/router/types/kibana.jsonc index 2a8021f3a203d..11df98571de3c 100644 --- a/packages/shared-ux/router/types/kibana.jsonc +++ b/packages/shared-ux/router/types/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-router-types", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/router/types/package.json b/packages/shared-ux/router/types/package.json index 323e9848a50a7..506ca06280ac8 100644 --- a/packages/shared-ux/router/types/package.json +++ b/packages/shared-ux/router/types/package.json @@ -2,6 +2,5 @@ "name": "@kbn/shared-ux-router-types", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", "license": "SSPL-1.0 OR Elastic License 2.0" -} +} \ No newline at end of file diff --git a/packages/shared-ux/router/types/tsconfig.json b/packages/shared-ux/router/types/tsconfig.json index 9b572c50a398e..cf858a91253d4 100644 --- a/packages/shared-ux/router/types/tsconfig.json +++ b/packages/shared-ux/router/types/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [] }, "include": [ "*.d.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/storybook/config/BUILD.bazel b/packages/shared-ux/storybook/config/BUILD.bazel deleted file mode 100644 index 9451199caf5c9..0000000000000 --- a/packages/shared-ux/storybook/config/BUILD.bazel +++ /dev/null @@ -1,139 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "config" -PKG_REQUIRE_NAME = "@kbn/shared-ux-storybook-config" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "//packages/kbn-storybook", - "@npm//@storybook/react", - "@npm//@storybook/addon-actions", - "@npm//jest-mock", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "//packages/kbn-storybook:npm_module_types", - "//packages/kbn-ambient-ui-types:npm_module_types", - "//packages/kbn-ambient-storybook-types:npm_module_types", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//jest-mock", - "@npm//@storybook/react", - "@npm//@storybook/addon-actions", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/storybook/config/kibana.jsonc b/packages/shared-ux/storybook/config/kibana.jsonc index 943577a87ff96..46f41bb01eb8e 100644 --- a/packages/shared-ux/storybook/config/kibana.jsonc +++ b/packages/shared-ux/storybook/config/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-storybook-config", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/storybook/config/package.json b/packages/shared-ux/storybook/config/package.json index bcf7b626d7a26..641267908edf0 100644 --- a/packages/shared-ux/storybook/config/package.json +++ b/packages/shared-ux/storybook/config/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-storybook-config", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/storybook/config/tsconfig.json b/packages/shared-ux/storybook/config/tsconfig.json index 8beb0a5da38ab..7b41c512d4ef0 100644 --- a/packages/shared-ux/storybook/config/tsconfig.json +++ b/packages/shared-ux/storybook/config/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,11 @@ }, "include": [ "**/*.ts" + ], + "kbn_references": [ + "@kbn/storybook", + ], + "exclude": [ + "target/**/*", ] } diff --git a/packages/shared-ux/storybook/mock/BUILD.bazel b/packages/shared-ux/storybook/mock/BUILD.bazel deleted file mode 100644 index 2b59617938208..0000000000000 --- a/packages/shared-ux/storybook/mock/BUILD.bazel +++ /dev/null @@ -1,133 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "mock" -PKG_REQUIRE_NAME = "@kbn/shared-ux-storybook-mock" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@storybook/react", - "@npm//react", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@storybook/react", - "@npm//@types/jest", - "@npm//@types/node", - "@npm//@types/react", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/packages/shared-ux/storybook/mock/kibana.jsonc b/packages/shared-ux/storybook/mock/kibana.jsonc index 50fc306e62ef3..143be36c8f400 100644 --- a/packages/shared-ux/storybook/mock/kibana.jsonc +++ b/packages/shared-ux/storybook/mock/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/shared-ux-storybook-mock", - "owner": "@elastic/kibana-global-experience", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/kibana-global-experience" } diff --git a/packages/shared-ux/storybook/mock/package.json b/packages/shared-ux/storybook/mock/package.json index 83429ee8a3249..935d67052cc08 100644 --- a/packages/shared-ux/storybook/mock/package.json +++ b/packages/shared-ux/storybook/mock/package.json @@ -2,8 +2,5 @@ "name": "@kbn/shared-ux-storybook-mock", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" + "license": "SSPL-1.0 OR Elastic License 2.0" } \ No newline at end of file diff --git a/packages/shared-ux/storybook/mock/tsconfig.json b/packages/shared-ux/storybook/mock/tsconfig.json index 3cdea36de9eac..0f16c2b9311d8 100644 --- a/packages/shared-ux/storybook/mock/tsconfig.json +++ b/packages/shared-ux/storybook/mock/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "types": [ "jest", "node", @@ -12,5 +10,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/scripts/build_kibana_platform_plugins.js b/scripts/build_kibana_platform_plugins.js index 1c1b17feae179..59bf23ffb243e 100644 --- a/scripts/build_kibana_platform_plugins.js +++ b/scripts/build_kibana_platform_plugins.js @@ -6,12 +6,13 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/ensure_node_preserve_symlinks'); -require('source-map-support/register'); +require('../src/setup_node_env'); var Path = require('path'); -var REPO_ROOT = require('@kbn/utils').REPO_ROOT; require('@kbn/optimizer').runKbnOptimizerCli({ - defaultLimitsPath: Path.resolve(REPO_ROOT, 'packages/kbn-optimizer/limits.yml'), + defaultLimitsPath: Path.resolve( + require('@kbn/repo-info').REPO_ROOT, + 'packages/kbn-optimizer/limits.yml' + ), }); diff --git a/scripts/build_plugin_list_docs.js b/scripts/build_plugin_list_docs.js index 1e05f60fd8b4a..5f89f1f0e2c04 100644 --- a/scripts/build_plugin_list_docs.js +++ b/scripts/build_plugin_list_docs.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/dev-utils').runPluginListCli(); diff --git a/scripts/check_ts_projects.js b/scripts/check_ts_projects.js deleted file mode 100644 index e2179b7c507b5..0000000000000 --- a/scripts/check_ts_projects.js +++ /dev/null @@ -1,10 +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. - */ - -require('../src/setup_node_env'); -require('../src/dev/typescript/run_check_ts_projects_cli').runCheckTsProjectsCli(); diff --git a/scripts/classify_source.js b/scripts/classify_source.js index c73f339a1786a..461ebcaf3dca1 100644 --- a/scripts/classify_source.js +++ b/scripts/classify_source.js @@ -6,6 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/ensure_node_preserve_symlinks'); -require('source-map-support/register'); +require('../src/setup_node_env'); require('@kbn/repo-source-classifier-cli'); diff --git a/scripts/es.js b/scripts/es.js index 8538b5661ea4c..1fcd221c97904 100644 --- a/scripts/es.js +++ b/scripts/es.js @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); var resolve = require('path').resolve; var pkg = require('../package.json'); diff --git a/scripts/find_babel_runtime_helpers_in_use.js b/scripts/find_babel_runtime_helpers_in_use.js index a229c8e11a2ca..769caeab3db64 100644 --- a/scripts/find_babel_runtime_helpers_in_use.js +++ b/scripts/find_babel_runtime_helpers_in_use.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/optimizer').runFindBabelHelpersInEntryBundlesCli(); diff --git a/scripts/find_node_libs_browser_polyfills_in_use.js b/scripts/find_node_libs_browser_polyfills_in_use.js index 4e53e5e551075..8c96555d2b98b 100644 --- a/scripts/find_node_libs_browser_polyfills_in_use.js +++ b/scripts/find_node_libs_browser_polyfills_in_use.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/optimizer').runFindNodeLibsBrowserPolyfillsInEntryBundlesCli(); diff --git a/scripts/find_target_node_imports_in_bundles.js b/scripts/find_target_node_imports_in_bundles.js deleted file mode 100644 index eae3b94efeaba..0000000000000 --- a/scripts/find_target_node_imports_in_bundles.js +++ /dev/null @@ -1,10 +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. - */ - -require('../src/setup_node_env/no_transpilation'); -require('@kbn/optimizer').runFindTargetNodeImportsCli(); diff --git a/scripts/generate.js b/scripts/generate.js index 29774e8088d65..327689c41a321 100644 --- a/scripts/generate.js +++ b/scripts/generate.js @@ -6,6 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/ensure_node_preserve_symlinks'); -require('source-map-support/register'); +require('../src/setup_node_env'); require('@kbn/generate').runGenerateCli(); diff --git a/scripts/generate_plugin.js b/scripts/generate_plugin.js index 4e589343cea7b..c77a0aaaddbb6 100644 --- a/scripts/generate_plugin.js +++ b/scripts/generate_plugin.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/plugin-generator').runCli(); diff --git a/scripts/jest.js b/scripts/jest.js index 0ff6a0dcf5373..edf1eb0a71ed4 100755 --- a/scripts/jest.js +++ b/scripts/jest.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/ensure_node_preserve_symlinks'); +require('../src/setup_node_env'); require('@kbn/test').runJest(); diff --git a/scripts/jest_integration.js b/scripts/jest_integration.js index 9b4157eddaaf8..0c2ebeaed154c 100755 --- a/scripts/jest_integration.js +++ b/scripts/jest_integration.js @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/ensure_node_preserve_symlinks'); +require('../src/setup_node_env'); process.argv.push('--runInBand'); - require('@kbn/test').runJest('jest.integration.config.js'); diff --git a/scripts/kbn.js b/scripts/kbn.js index 4ae35a0689e93..64bf0beca9988 100644 --- a/scripts/kbn.js +++ b/scripts/kbn.js @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/ensure_node_preserve_symlinks'); require('../src/setup_node_env/root'); require('../src/setup_node_env/node_version_validator'); import('../kbn_pm/src/cli.mjs').catch(function (error) { diff --git a/scripts/plugin_helpers.js b/scripts/plugin_helpers.js index 02c8bb17fc078..0f5b93f493213 100644 --- a/scripts/plugin_helpers.js +++ b/scripts/plugin_helpers.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/plugin-helpers').runCli(); diff --git a/scripts/precommit_hook.js b/scripts/precommit_hook.js index 1a4176bf142a0..a040fcd2765ea 100644 --- a/scripts/precommit_hook.js +++ b/scripts/precommit_hook.js @@ -6,6 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/ensure_node_preserve_symlinks'); -require('@kbn/optimizer').registerNodeAutoTranspilation(); +require('../src/setup_node_env'); require('../src/dev/run_precommit_hook'); diff --git a/scripts/read_jest_help.mjs b/scripts/read_jest_help.mjs index 0a3ce69c02c93..e8c16540b0d7a 100644 --- a/scripts/read_jest_help.mjs +++ b/scripts/read_jest_help.mjs @@ -11,7 +11,7 @@ import Path from 'path'; import { createFailError } from '@kbn/dev-cli-errors'; import { run } from '@kbn/dev-cli-runner'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; const FLAGS_FILE = 'packages/kbn-test/src/jest/jest_flags.json'; diff --git a/scripts/register_git_hook.js b/scripts/register_git_hook.js index e3db1af6f34d7..67de489c973b2 100644 --- a/scripts/register_git_hook.js +++ b/scripts/register_git_hook.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); -require('@kbn/dev-utils/target_node/src/precommit_hook/cli'); +require('../src/setup_node_env'); +require('@kbn/dev-utils/src/precommit_hook/cli'); diff --git a/scripts/ship_ci_stats.js b/scripts/ship_ci_stats.js index 5aed9fc446240..a45ab8472956c 100644 --- a/scripts/ship_ci_stats.js +++ b/scripts/ship_ci_stats.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/dev-utils').shipCiStatsCli(); diff --git a/scripts/telemetry_check.js b/scripts/telemetry_check.js index e4fcefc60b8de..2079489e2345f 100644 --- a/scripts/telemetry_check.js +++ b/scripts/telemetry_check.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/telemetry-tools').runTelemetryCheck(); diff --git a/scripts/telemetry_extract.js b/scripts/telemetry_extract.js index c662755767b20..5d907fa5cd5a8 100644 --- a/scripts/telemetry_extract.js +++ b/scripts/telemetry_extract.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/telemetry-tools').runTelemetryExtract(); diff --git a/scripts/test_hardening.js b/scripts/test_hardening.js index a719d77c517ee..cc058d742751d 100644 --- a/scripts/test_hardening.js +++ b/scripts/test_hardening.js @@ -6,8 +6,6 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/ensure_node_preserve_symlinks'); - var execFileSync = require('child_process').execFileSync; var path = require('path'); var syncGlob = require('glob').sync; diff --git a/packages/kbn-type-summarizer/src/lib/type_summary/index.ts b/scripts/ts_project_linter.js similarity index 82% rename from packages/kbn-type-summarizer/src/lib/type_summary/index.ts rename to scripts/ts_project_linter.js index b12e1d0c22090..75cbbf7de7c10 100644 --- a/packages/kbn-type-summarizer/src/lib/type_summary/index.ts +++ b/scripts/ts_project_linter.js @@ -6,4 +6,5 @@ * Side Public License, v 1. */ -export { printTypeSummary } from './print_type_summary'; +require('../src/setup_node_env'); +require('@kbn/ts-project-linter-cli'); diff --git a/scripts/type_check.js b/scripts/type_check.js index db3f7adc2691c..a9969acc70ac8 100644 --- a/scripts/type_check.js +++ b/scripts/type_check.js @@ -7,4 +7,4 @@ */ require('../src/setup_node_env'); -require('../src/dev/typescript').runTypeCheckCli(); +require('@kbn/ts-type-check-cli'); diff --git a/scripts/type_summarizer.js b/scripts/type_summarizer.js deleted file mode 100644 index 8cad17c6443cd..0000000000000 --- a/scripts/type_summarizer.js +++ /dev/null @@ -1,11 +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. - */ - -require('../src/setup_node_env/no_transpilation'); -require('source-map-support/register'); -require('@kbn/type-summarizer-cli'); diff --git a/scripts/update_vscode_config.js b/scripts/update_vscode_config.js index 2b23d8004f793..8a450655ec291 100644 --- a/scripts/update_vscode_config.js +++ b/scripts/update_vscode_config.js @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -require('../src/setup_node_env/no_transpilation'); +require('../src/setup_node_env'); require('@kbn/managed-vscode-config-cli'); diff --git a/src/cli/cli.js b/src/cli/cli.js index d3bff4f492a80..f6bce6a8aefa2 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -7,7 +7,7 @@ */ import _ from 'lodash'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import Command from './command'; import serveCommand from './serve/serve'; diff --git a/src/cli/dev.js b/src/cli/dev.js index 42263986f98f3..fb61b53b6f210 100644 --- a/src/cli/dev.js +++ b/src/cli/dev.js @@ -6,7 +6,7 @@ * Side Public License, v 1. */ +require('@kbn/babel-register').install(); require('./apm')(process.env.ELASTIC_APM_SERVICE_NAME || 'kibana-proxy'); require('../setup_node_env'); -require('../setup_node_env/root'); require('./cli'); diff --git a/src/cli/serve/integration_tests/invalid_config.test.ts b/src/cli/serve/integration_tests/invalid_config.test.ts index ca051f37a816e..32414fe7f89f5 100644 --- a/src/cli/serve/integration_tests/invalid_config.test.ts +++ b/src/cli/serve/integration_tests/invalid_config.test.ts @@ -8,7 +8,7 @@ import { spawnSync } from 'child_process'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; const INVALID_CONFIG_PATH = require.resolve('./__fixtures__/invalid_config.yml'); diff --git a/src/cli/serve/serve.js b/src/cli/serve/serve.js index d5c1f844c4d1c..61e482e5d6d07 100644 --- a/src/cli/serve/serve.js +++ b/src/cli/serve/serve.js @@ -12,7 +12,8 @@ import { statSync } from 'fs'; import { resolve } from 'path'; import url from 'url'; -import { getConfigPath, fromRoot, isKibanaDistributable } from '@kbn/utils'; +import { getConfigPath } from '@kbn/utils'; +import { fromRoot, isKibanaDistributable } from '@kbn/repo-info'; import { readKeystore } from '../keystore/read_keystore'; function canRequire(path) { diff --git a/src/cli/tsconfig.json b/src/cli/tsconfig.json index b3a8ab5220b94..5ee6fa3616614 100644 --- a/src/cli/tsconfig.json +++ b/src/cli/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true + "outDir": "target/types", }, "include": [ "keystore/**/*", @@ -11,7 +9,17 @@ "*.js", ], "kbn_references": [ - { "path": "../core/tsconfig.json" }, + "@kbn/core", { "path": "../setup_node_env/tsconfig.json" }, + "@kbn/utils", + "@kbn/repo-info", + "@kbn/safer-lodash-set", + "@kbn/config", + "@kbn/dev-utils", + "@kbn/apm-config-loader", + "@kbn/babel-register", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/cli_encryption_keys/cli_encryption_keys.js b/src/cli_encryption_keys/cli_encryption_keys.js index acee81aabb706..d1e9363e50f33 100644 --- a/src/cli_encryption_keys/cli_encryption_keys.js +++ b/src/cli_encryption_keys/cli_encryption_keys.js @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import Command from '../cli/command'; import { EncryptionConfig } from './encryption_config'; diff --git a/src/cli_encryption_keys/tsconfig.json b/src/cli_encryption_keys/tsconfig.json index 6b6661d24f9c6..40ea4d7d7cbcd 100644 --- a/src/cli_encryption_keys/tsconfig.json +++ b/src/cli_encryption_keys/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "*.js", @@ -11,5 +9,10 @@ "kbn_references": [ { "path": "../cli/tsconfig.json" }, { "path": "../cli_keystore/tsconfig.json" }, + "@kbn/repo-info", + "@kbn/utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/cli_health_gateway/cli_health_gateway.ts b/src/cli_health_gateway/cli_health_gateway.ts index 018a47aed2a39..22e1ffa969c64 100644 --- a/src/cli_health_gateway/cli_health_gateway.ts +++ b/src/cli_health_gateway/cli_health_gateway.ts @@ -7,7 +7,7 @@ */ import { Command } from 'commander'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { bootstrap } from '@kbn/health-gateway-server'; const program = new Command('bin/kibana-health-gateway'); diff --git a/src/cli_health_gateway/tsconfig.json b/src/cli_health_gateway/tsconfig.json index c8ad5deb6f6d5..8422077737c56 100644 --- a/src/cli_health_gateway/tsconfig.json +++ b/src/cli_health_gateway/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "*.js", @@ -11,5 +9,10 @@ ], "kbn_references": [ { "path": "../cli/tsconfig.json" }, + "@kbn/repo-info", + "@kbn/health-gateway-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/cli_keystore/add.js b/src/cli_keystore/add.js index 96778665ac912..2d5e8485df6e1 100644 --- a/src/cli_keystore/add.js +++ b/src/cli_keystore/add.js @@ -9,7 +9,7 @@ import { Logger } from '../cli/logger'; import { confirm, question } from './utils'; // import from path since add.test.js mocks 'fs' required for @kbn/utils -import { createPromiseFromStreams, createConcatStream } from '@kbn/utils/target_node/src/streams'; +import { createPromiseFromStreams, createConcatStream } from '@kbn/utils/src/streams'; /** * @param {Keystore} keystore diff --git a/src/cli_keystore/cli_keystore.js b/src/cli_keystore/cli_keystore.js index 0db5d0f33337d..fdf0260fb7dae 100644 --- a/src/cli_keystore/cli_keystore.js +++ b/src/cli_keystore/cli_keystore.js @@ -7,7 +7,7 @@ */ import _ from 'lodash'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import Command from '../cli/command'; import { getKeystore } from '../cli/keystore/get_keystore'; diff --git a/src/cli_keystore/tsconfig.json b/src/cli_keystore/tsconfig.json index 8cd8e6f3f232c..a52277bb8a4e8 100644 --- a/src/cli_keystore/tsconfig.json +++ b/src/cli_keystore/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "keystore/**/*", @@ -14,5 +12,10 @@ { "path": "../setup_node_env/tsconfig.json" }, { "path": "../cli/tsconfig.json" }, { "path": "../cli_plugin/tsconfig.json" }, + "@kbn/utils", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/cli_plugin/cli.js b/src/cli_plugin/cli.js index 5ef142192c509..b1d0550cf8be8 100644 --- a/src/cli_plugin/cli.js +++ b/src/cli_plugin/cli.js @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import Command from '../cli/command'; import { listCommand } from './list'; import { installCommand } from './install'; diff --git a/src/cli_plugin/install/index.js b/src/cli_plugin/install/index.js index cdf0218de3c9b..76ab7966ee99a 100644 --- a/src/cli_plugin/install/index.js +++ b/src/cli_plugin/install/index.js @@ -6,7 +6,8 @@ * Side Public License, v 1. */ -import { getConfigPath, kibanaPackageJson as pkg } from '@kbn/utils'; +import { getConfigPath } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import { install } from './install'; import { Logger } from '../../cli/logger'; import { parse, parseMilliseconds } from './settings'; diff --git a/src/cli_plugin/install/settings.js b/src/cli_plugin/install/settings.js index e1536d66e0529..b3c3741fb2fa9 100644 --- a/src/cli_plugin/install/settings.js +++ b/src/cli_plugin/install/settings.js @@ -8,7 +8,7 @@ import { resolve } from 'path'; import expiry from 'expiry-js'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; function generateUrls({ version, plugin }) { return [ diff --git a/src/cli_plugin/install/settings.test.js b/src/cli_plugin/install/settings.test.js index b0accc83971e3..7c59d3e066980 100644 --- a/src/cli_plugin/install/settings.test.js +++ b/src/cli_plugin/install/settings.test.js @@ -7,7 +7,7 @@ */ import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; import { parseMilliseconds, parse } from './settings'; diff --git a/src/cli_plugin/list/index.js b/src/cli_plugin/list/index.js index 131582598c3ed..5b66208452a23 100644 --- a/src/cli_plugin/list/index.js +++ b/src/cli_plugin/list/index.js @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; import { list } from './list'; import { Logger } from '../../cli/logger'; import { logWarnings } from '../lib/log_warnings'; diff --git a/src/cli_plugin/remove/settings.js b/src/cli_plugin/remove/settings.js index 2381770ee0a65..482d26881fd64 100644 --- a/src/cli_plugin/remove/settings.js +++ b/src/cli_plugin/remove/settings.js @@ -7,7 +7,7 @@ */ import { resolve } from 'path'; -import { fromRoot } from '@kbn/utils'; +import { fromRoot } from '@kbn/repo-info'; export function parse(command, options) { const settings = { diff --git a/src/cli_plugin/tsconfig.json b/src/cli_plugin/tsconfig.json index 611a8c05d8a43..9f9749b89a9b0 100644 --- a/src/cli_plugin/tsconfig.json +++ b/src/cli_plugin/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "install/**/*", @@ -14,5 +12,11 @@ ], "kbn_references": [ { "path": "../cli/tsconfig.json" }, + "@kbn/utils", + "@kbn/repo-info", + "@kbn/jest-serializers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/cli_setup/cli_setup.ts b/src/cli_setup/cli_setup.ts index b13e94551db5b..4a283df2e849c 100644 --- a/src/cli_setup/cli_setup.ts +++ b/src/cli_setup/cli_setup.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import chalk from 'chalk'; import ora from 'ora'; import { Command } from 'commander'; diff --git a/src/cli_setup/tsconfig.json b/src/cli_setup/tsconfig.json index c59d1c32ee822..268df5caa5959 100644 --- a/src/cli_setup/tsconfig.json +++ b/src/cli_setup/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "*.js", @@ -11,6 +9,14 @@ ], "kbn_references": [ { "path": "../cli/tsconfig.json" }, - { "path": "../plugins/interactive_setup/tsconfig.json" }, + "@kbn/interactive-setup-plugin", + "@kbn/repo-info", + "@kbn/utils", + "@kbn/core", + "@kbn/core-elasticsearch-client-server-internal", + "@kbn/core-elasticsearch-server-internal", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/cli_setup/utils.ts b/src/cli_setup/utils.ts index 33efb2ff802b8..36c08de4d422a 100644 --- a/src/cli_setup/utils.ts +++ b/src/cli_setup/utils.ts @@ -10,7 +10,7 @@ import { getConfigPath, getDataPath } from '@kbn/utils'; import inquirer from 'inquirer'; import { duration } from 'moment'; import { merge } from 'lodash'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { Logger } from '@kbn/core/server'; import { AgentManager, ClusterClient } from '@kbn/core-elasticsearch-client-server-internal'; diff --git a/src/cli_verification_code/cli_verification_code.js b/src/cli_verification_code/cli_verification_code.js index 7ed83e8211c3c..45c55d0111a57 100644 --- a/src/cli_verification_code/cli_verification_code.js +++ b/src/cli_verification_code/cli_verification_code.js @@ -6,7 +6,8 @@ * Side Public License, v 1. */ -import { kibanaPackageJson, getDataPath } from '@kbn/utils'; +import { getDataPath } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import path from 'path'; import fs from 'fs'; import chalk from 'chalk'; diff --git a/src/cli_verification_code/tsconfig.json b/src/cli_verification_code/tsconfig.json index ba74b96a36b68..15d1c74d0ec60 100644 --- a/src/cli_verification_code/tsconfig.json +++ b/src/cli_verification_code/tsconfig.json @@ -1,14 +1,17 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "*.js", ], "kbn_references": [ { "path": "../cli/tsconfig.json" }, + "@kbn/utils", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/core/server/integration_tests/capabilities/capabilities_service.test.ts b/src/core/server/integration_tests/capabilities/capabilities_service.test.ts index b1db93d6bdf94..23a8905bcb565 100644 --- a/src/core/server/integration_tests/capabilities/capabilities_service.test.ts +++ b/src/core/server/integration_tests/capabilities/capabilities_service.test.ts @@ -7,7 +7,7 @@ */ import supertest from 'supertest'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Env } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; diff --git a/src/core/server/integration_tests/http/cookie_session_storage.test.ts b/src/core/server/integration_tests/http/cookie_session_storage.test.ts index 1041ed66872dd..2142a0aacf9a4 100644 --- a/src/core/server/integration_tests/http/cookie_session_storage.test.ts +++ b/src/core/server/integration_tests/http/cookie_session_storage.test.ts @@ -10,7 +10,7 @@ import { parse as parseCookie } from 'tough-cookie'; import supertest from 'supertest'; import { BehaviorSubject } from 'rxjs'; import { duration as momentDuration } from 'moment'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ByteSizeValue } from '@kbn/config-schema'; import { Env } from '@kbn/config'; import { getEnvOptions, configServiceMock } from '@kbn/config-mocks'; diff --git a/src/core/server/integration_tests/saved_objects/migrations/7.7.2_xpack_100k.test.ts b/src/core/server/integration_tests/saved_objects/migrations/7.7.2_xpack_100k.test.ts index 93f6af33c57d2..a90291d1614a4 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/7.7.2_xpack_100k.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/7.7.2_xpack_100k.test.ts @@ -8,7 +8,7 @@ import path from 'path'; import { unlink } from 'fs/promises'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Env } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; diff --git a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_transform_failures.test.ts b/src/core/server/integration_tests/saved_objects/migrations/7_13_0_transform_failures.test.ts index 85f116e600d01..3419739408d19 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_transform_failures.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/7_13_0_transform_failures.test.ts @@ -10,7 +10,7 @@ import Path from 'path'; import Fs from 'fs'; import Util from 'util'; import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getEnvOptions } from '@kbn/config-mocks'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { Root } from '@kbn/core-root-server-internal'; diff --git a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_unknown_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/7_13_0_unknown_types.test.ts index 3bef046666a46..2e19a1bf401cc 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_unknown_types.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/7_13_0_unknown_types.test.ts @@ -10,7 +10,7 @@ import Path from 'path'; import fs from 'fs/promises'; import type { IndicesIndexSettings } from '@elastic/elasticsearch/lib/api/types'; import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getEnvOptions } from '@kbn/config-mocks'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { Root } from '@kbn/core-root-server-internal'; diff --git a/src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes.test.ts index 818eeac9daef2..e3e3b1dfe3631 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes.test.ts @@ -17,7 +17,7 @@ import { import { Root } from '@kbn/core-root-server-internal'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getEnvOptions } from '@kbn/config-mocks'; import { LogRecord } from '@kbn/logging'; import { retryAsync } from '@kbn/core-saved-objects-migration-server-mocks'; diff --git a/src/core/server/integration_tests/saved_objects/migrations/check_target_mappings.test.ts b/src/core/server/integration_tests/saved_objects/migrations/check_target_mappings.test.ts index b0385efbc71a9..5dd147de85b51 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/check_target_mappings.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/check_target_mappings.test.ts @@ -11,7 +11,7 @@ import fs from 'fs/promises'; import { SemVer } from 'semver'; import JSON5 from 'json5'; import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getEnvOptions } from '@kbn/config-mocks'; import { Root } from '@kbn/core-root-server-internal'; import { LogRecord } from '@kbn/logging'; diff --git a/src/core/server/integration_tests/saved_objects/migrations/migration_from_older_v1.test.ts b/src/core/server/integration_tests/saved_objects/migrations/migration_from_older_v1.test.ts index cfaae4fb3870c..eae0fdc658a76 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/migration_from_older_v1.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/migration_from_older_v1.test.ts @@ -10,7 +10,7 @@ import Path from 'path'; import Fs from 'fs'; import Util from 'util'; import Semver from 'semver'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { Env } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; diff --git a/src/core/server/integration_tests/saved_objects/migrations/multiple_es_nodes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/multiple_es_nodes.test.ts index c6615b2218e9b..12035a0e5eade 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/multiple_es_nodes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/multiple_es_nodes.test.ts @@ -9,7 +9,7 @@ import Path from 'path'; import del from 'del'; import { kibanaServerTestUser } from '@kbn/test'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import { createTestServers, createRoot as createkbnTestServerRoot, diff --git a/src/core/server/integration_tests/saved_objects/migrations/multiple_kibana_nodes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/multiple_kibana_nodes.test.ts index 80559226c763d..a947854e9249b 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/multiple_kibana_nodes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/multiple_kibana_nodes.test.ts @@ -9,7 +9,7 @@ import Path from 'path'; import del from 'del'; import { esTestConfig, kibanaServerTestUser } from '@kbn/test'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import type { SavedObjectsType } from '@kbn/core-saved-objects-server'; import { createTestServers, diff --git a/src/core/server/integration_tests/saved_objects/migrations/outdated_docs.test.ts b/src/core/server/integration_tests/saved_objects/migrations/outdated_docs.test.ts index 7da6a16514b26..ca5e21abe8dcc 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/outdated_docs.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/outdated_docs.test.ts @@ -9,7 +9,7 @@ import Path from 'path'; import Fs from 'fs'; import Util from 'util'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import { createRootWithCorePlugins, createTestServers, diff --git a/src/core/server/integration_tests/saved_objects/migrations/rewriting_id.test.ts b/src/core/server/integration_tests/saved_objects/migrations/rewriting_id.test.ts index 1fed5980b66fa..66fd7bd5a6db0 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/rewriting_id.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/rewriting_id.test.ts @@ -9,7 +9,7 @@ import Path from 'path'; import Fs from 'fs'; import Util from 'util'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import { createRootWithCorePlugins, createTestServers, diff --git a/src/core/server/integration_tests/saved_objects/migrations/test_utils.ts b/src/core/server/integration_tests/saved_objects/migrations/test_utils.ts index 8f2373c3ed400..5e519890e5adc 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/test_utils.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/test_utils.ts @@ -8,7 +8,7 @@ import { Env } from '@kbn/config'; import { getDocLinksMeta, getDocLinks } from '@kbn/doc-links'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getEnvOptions } from '@kbn/config-mocks'; export const getDocVersion = () => { diff --git a/src/core/server/integration_tests/saved_objects/migrations/wait_for_migration_completion.test.ts b/src/core/server/integration_tests/saved_objects/migrations/wait_for_migration_completion.test.ts index 5593afb43e027..7d2a2bf8145cf 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/wait_for_migration_completion.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/wait_for_migration_completion.test.ts @@ -9,7 +9,7 @@ import Path from 'path'; import fs from 'fs/promises'; import JSON5 from 'json5'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import { retryAsync } from '@kbn/core-saved-objects-migration-server-mocks'; import { createRootWithCorePlugins, diff --git a/src/core/server/integration_tests/saved_objects/service/lib/repository_with_proxy_utils.ts b/src/core/server/integration_tests/saved_objects/service/lib/repository_with_proxy_utils.ts index 251c7608b6299..499d0d01d9de1 100644 --- a/src/core/server/integration_tests/saved_objects/service/lib/repository_with_proxy_utils.ts +++ b/src/core/server/integration_tests/saved_objects/service/lib/repository_with_proxy_utils.ts @@ -7,7 +7,7 @@ */ import Hapi from '@hapi/hapi'; import { IncomingMessage } from 'http'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; // proxy setup const defaultProxyOptions = (hostname: string, port: string) => ({ diff --git a/src/core/server/integration_tests/saved_objects/validation/validator.test.ts b/src/core/server/integration_tests/saved_objects/validation/validator.test.ts index 125f3141d1931..eb3462d5b63e6 100644 --- a/src/core/server/integration_tests/saved_objects/validation/validator.test.ts +++ b/src/core/server/integration_tests/saved_objects/validation/validator.test.ts @@ -11,7 +11,7 @@ import Fs from 'fs'; import Util from 'util'; import { Env } from '@kbn/config'; import { schema } from '@kbn/config-schema'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import type { ISavedObjectsRepository } from '@kbn/core-saved-objects-api-server'; import type { SavedObjectsType } from '@kbn/core-saved-objects-server'; import { getEnvOptions } from '@kbn/config-mocks'; diff --git a/src/core/server/integration_tests/ui_settings/index.test.ts b/src/core/server/integration_tests/ui_settings/index.test.ts index 6ca80d3a3ba11..fc61f2cd5a33f 100644 --- a/src/core/server/integration_tests/ui_settings/index.test.ts +++ b/src/core/server/integration_tests/ui_settings/index.test.ts @@ -7,7 +7,7 @@ */ import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getEnvOptions } from '@kbn/config-mocks'; import { startServers, stopServers } from './lib'; import { docExistsSuite } from './doc_exists'; diff --git a/src/core/tsconfig.json b/src/core/tsconfig.json index 9c042577cfe21..5ce6fba92e138 100644 --- a/src/core/tsconfig.json +++ b/src/core/tsconfig.json @@ -1,10 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, + "outDir": "target/types", "isolatedModules": true, }, "include": [ @@ -14,5 +11,143 @@ "test_helpers/**/*", "utils/**/*", "index.ts" - ] + ], + "kbn_references": [ + "@kbn/core-base-common", + "@kbn/config", + "@kbn/core-application-common", + "@kbn/core-application-browser", + "@kbn/core-application-browser-internal", + "@kbn/core-saved-objects-common", + "@kbn/core-apps-browser-internal", + "@kbn/core-root-browser-internal", + "@kbn/core-theme-browser-mocks", + "@kbn/core-base-browser-mocks", + "@kbn/core-plugins-browser-mocks", + "@kbn/core-lifecycle-browser-mocks", + "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-doc-links-browser-mocks", + "@kbn/core-analytics-browser-mocks", + "@kbn/core-chrome-browser-mocks", + "@kbn/core-execution-context-browser-mocks", + "@kbn/core-fatal-errors-browser-mocks", + "@kbn/core-http-browser-mocks", + "@kbn/core-i18n-browser-mocks", + "@kbn/core-notifications-browser-mocks", + "@kbn/core-overlays-browser-mocks", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/core-saved-objects-browser-mocks", + "@kbn/core-application-browser-mocks", + "@kbn/core-deprecations-browser-mocks", + "@kbn/core-logging-browser-mocks", + "@kbn/core-saved-objects-api-server", + "@kbn/core-http-server-internal", + "@kbn/core-saved-objects-server", + "@kbn/config-schema", + "@kbn/std", + "@kbn/core-logging-server-mocks", + "@kbn/core-node-server-mocks", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/core-saved-objects-base-server-mocks", + "@kbn/core-saved-objects-server-mocks", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/core-deprecations-server-mocks", + "@kbn/core-ui-settings-server-mocks", + "@kbn/core-lifecycle-server-mocks", + "@kbn/core-plugins-server", + "@kbn/config-mocks", + "@kbn/core-http-server-mocks", + "@kbn/core-http-resources-server-mocks", + "@kbn/core-saved-objects-migration-server-mocks", + "@kbn/core-metrics-server-mocks", + "@kbn/core-rendering-server-mocks", + "@kbn/core-status-server-mocks", + "@kbn/core-http-context-server-mocks", + "@kbn/core-capabilities-server-mocks", + "@kbn/core-usage-data-server-mocks", + "@kbn/core-i18n-server-mocks", + "@kbn/core-execution-context-server-mocks", + "@kbn/core-doc-links-server-mocks", + "@kbn/core-analytics-server-mocks", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/core-logging-server", + "@kbn/core-logging-server-internal", + "@kbn/core-execution-context-server", + "@kbn/core-http-server", + "@kbn/core-elasticsearch-server-internal", + "@kbn/core-capabilities-server", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-http-resources-server", + "@kbn/core-plugins-server-internal", + "@kbn/core-root-server-internal", + "@kbn/core-elasticsearch-server", + "@kbn/core-http-router-server-internal", + "@kbn/logging", + "@kbn/core-saved-objects-utils-server", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-api-server-internal", + "@kbn/core-saved-objects-import-export-server-internal", + "@kbn/core-metrics-server", + "@kbn/core-metrics-collectors-server-internal", + "@kbn/core-status-common", + "@kbn/repo-info", + "@kbn/core-capabilities-server-internal", + "@kbn/core-test-helpers-kbn-server", + "@kbn/core-apps-server-internal", + "@kbn/core-execution-context-browser-internal", + "@kbn/test", + "@kbn/core-base-server-internal", + "@kbn/logging-mocks", + "@kbn/core-lifecycle-server-internal", + "@kbn/core-ui-settings-server-internal", + "@kbn/core-usage-data-base-server-internal", + "@kbn/core-saved-objects-server-internal", + "@kbn/core-test-helpers-test-utils", + "@kbn/utils", + "@kbn/core-saved-objects-import-export-server-mocks", + "@kbn/core-http-context-server-internal", + "@kbn/core-test-helpers-so-type-serializer", + "@kbn/core-saved-objects-migration-server-internal", + "@kbn/doc-links", + "@kbn/core-status-server-internal", + "@kbn/core-usage-data-server", + "@kbn/core-execution-context-common", + "@kbn/core-capabilities-common", + "@kbn/core-base-common-internal", + "@kbn/core-http-common", + "@kbn/ecs", + "@kbn/core-node-server", + "@kbn/core-saved-objects-browser", + "@kbn/core-ui-settings-common", + "@kbn/core-ui-settings-server", + "@kbn/core-i18n-server", + "@kbn/core-deprecations-server", + "@kbn/core-deprecations-common", + "@kbn/core-status-server", + "@kbn/core-doc-links-server", + "@kbn/analytics-client", + "@kbn/core-analytics-server", + "@kbn/core-lifecycle-server", + "@kbn/core-doc-links-browser", + "@kbn/core-http-browser", + "@kbn/core-i18n-browser", + "@kbn/core-fatal-errors-browser", + "@kbn/core-ui-settings-browser", + "@kbn/core-notifications-browser", + "@kbn/core-chrome-browser", + "@kbn/core-plugins-browser", + "@kbn/core-base-browser-internal", + "@kbn/core-analytics-browser", + "@kbn/core-saved-objects-api-browser", + "@kbn/core-overlays-browser", + "@kbn/core-notifications-browser-internal", + "@kbn/core-theme-browser", + "@kbn/core-deprecations-browser", + "@kbn/core-mount-utils-browser", + "@kbn/core-execution-context-browser", + "@kbn/core-lifecycle-browser", + ], + "exclude": [ + "target/**/*", + ], } diff --git a/src/dev/bazel/index.bzl b/src/dev/bazel/index.bzl index cca81dfcbcd5a..d5469af808bc0 100644 --- a/src/dev/bazel/index.bzl +++ b/src/dev/bazel/index.bzl @@ -10,12 +10,8 @@ Please do not import from any other files when looking to use a custom rule """ -load("//src/dev/bazel:jsts_transpiler.bzl", _jsts_transpiler = "jsts_transpiler") load("//src/dev/bazel:pkg_npm.bzl", _pkg_npm = "pkg_npm") -load("//src/dev/bazel:pkg_npm_types.bzl", _pkg_npm_types = "pkg_npm_types") load("//src/dev/bazel:ts_project.bzl", _ts_project = "ts_project") -jsts_transpiler = _jsts_transpiler pkg_npm = _pkg_npm -pkg_npm_types = _pkg_npm_types ts_project = _ts_project diff --git a/src/dev/bazel/jsts_transpiler.bzl b/src/dev/bazel/jsts_transpiler.bzl deleted file mode 100644 index 1ce12118ac55f..0000000000000 --- a/src/dev/bazel/jsts_transpiler.bzl +++ /dev/null @@ -1,49 +0,0 @@ -"Simple wrapper over @babel/cli so we can quickly re-use the same configurations over packages" - -load("@npm//@babel/cli:index.bzl", _babel = "babel") - -def jsts_transpiler(name, srcs, build_pkg_name, web = False, additional_args = ["--quiet"], **kwargs): - """A macro around the autogenerated babel rule. - - Args: - name: target name - srcs: list of sources - build_pkg_name: package name into the build folder - web: setup the correct presets to consume the outputs in the browser, defaults to "False" and optimizes for node - additional_args: Any additional extra arguments, defaults to --quiet - **kwargs: the rest - """ - - inline_presets = [ - "--presets", - ] - - if web: - inline_presets += [ - "@kbn/babel-preset/webpack_preset", - ] - else: - inline_presets += [ - "@kbn/babel-preset/node_preset", - ] - - args = [ - "./%s" % (build_pkg_name), - "--out-dir", - "$(@D)", - "--no-babelrc", - "--extensions", - ".ts,.tsx,.js", - ] + inline_presets + additional_args - - data = srcs + [ - "//packages/kbn-babel-preset", - ] - - _babel( - name = name, - data = data, - output_dir = True, - args = args, - **kwargs - ) diff --git a/src/dev/bazel/pkg_npm_types.bzl b/src/dev/bazel/pkg_npm_types.bzl deleted file mode 100644 index 8b8de4a68912a..0000000000000 --- a/src/dev/bazel/pkg_npm_types.bzl +++ /dev/null @@ -1,159 +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. -# - -load("@npm//@bazel/typescript/internal:ts_config.bzl", "TsConfigInfo") -load("@build_bazel_rules_nodejs//:providers.bzl", "run_node", "LinkablePackageInfo", "DeclarationInfo", "declaration_info") -load("@build_bazel_rules_nodejs//internal/linker:link_node_modules.bzl", "module_mappings_aspect") - - -#### TODO -# Implement a way to produce source maps for api extractor -# summarised types as referenced at (https://github.com/microsoft/rushstack/issues/1886#issuecomment-933997910) - -def _collect_inputs_deps_and_transitive_types_deps(ctx): - """Returns an array with all transitively referenced files on deps in the pos 0 and all types deps in pos 1""" - deps_files_depsets = [] - transitive_types_deps = [] - - for dep in ctx.attr.deps: - # Collect whatever is in the "data" - deps_files_depsets.append(dep.data_runfiles.files) - - # Only collect DefaultInfo files (not transitive) - deps_files_depsets.append(dep.files) - - # Collect transitive type deps to propagate in the provider - if DeclarationInfo in dep: - transitive_types_deps.append(dep) - deps_files_depsets.append(dep[DeclarationInfo].transitive_declarations) - - deps_files = depset(transitive = deps_files_depsets).to_list() - return [deps_files, transitive_types_deps] - -def _get_type_package_name(actualName): - return "@types/" + actualName.replace("@", "").replace("/", "__") - -def _calculate_entrypoint_path(ctx): - return _join(ctx.bin_dir.path, ctx.label.package, _get_types_outdir_name(ctx), ctx.attr.entrypoint_name) - -def _get_types_outdir_name(ctx): - base_out_folder = _join(ctx.bin_dir.path, ctx.label.package) - type_dep_path = ctx.files.deps[0].path - type_dep_path_without_base_out = type_dep_path.replace(base_out_folder + "/", "", 1) - types_outdir_name = type_dep_path_without_base_out.split("/")[0] - return types_outdir_name - -def _join(*elements): - segments = [f for f in elements if f] - if len(segments): - return "/".join(segments) - return "." - -def _tsconfig_inputs(ctx): - """Returns all transitively referenced tsconfig files from "tsconfig" """ - all_inputs = [] - if TsConfigInfo in ctx.attr.tsconfig: - all_inputs.extend(ctx.attr.tsconfig[TsConfigInfo].deps) - else: - all_inputs.append(ctx.file.tsconfig) - return all_inputs - -def _pkg_npm_types_impl(ctx): - # collect input deps and transitive type deps - inputs_deps_and_transitive_types_deps = _collect_inputs_deps_and_transitive_types_deps(ctx) - transitive_types_deps = inputs_deps_and_transitive_types_deps[1] - - # input declarations - deps_inputs = inputs_deps_and_transitive_types_deps[0] - tsconfig_inputs = _tsconfig_inputs(ctx) - inputs = ctx.files.srcs[:] - inputs.extend(tsconfig_inputs) - inputs.extend(deps_inputs) - - # output dir declaration - package_path = ctx.label.package - package_dir = ctx.actions.declare_directory(ctx.label.name) - outputs = [package_dir] - - # layout api extractor arguments - extractor_args = ctx.actions.args() - - extractor_args.add(struct( - packageName = ctx.attr.package_name, - outputDir = package_dir.path, - buildFilePath = ctx.build_file_path, - tsconfigPath = tsconfig_inputs[0].path, - inputPath = _calculate_entrypoint_path(ctx), - ).to_json()) - - run_node( - ctx, - inputs = inputs, - arguments = [extractor_args], - outputs = outputs, - mnemonic = "AssembleNpmTypesPackage", - progress_message = "Assembling npm types package %s" % package_dir.short_path, - executable = "_packager", - env = { - "FORCE_COLOR": "1" - } - ) - - # this is a tree artifact, so correctly build the return - package_dir_depset = depset([package_dir]) - - return [ - DefaultInfo( - files = package_dir_depset, - runfiles = ctx.runfiles([package_dir]), - ), - declaration_info( - declarations = depset([package_dir]), - # this includes all the dependencies and transitive dependnecies of the ts_project, but the - # actual dependencies of the type summarizer output are just a subset of these. We don't currently - # know any way to pass the list of dependecies from the type summarizer back to bazel, so we use - # this larger-than-necessary list for accuracy, but we will likely need to figure this out once - # we have a much larger dependency graph. - deps = transitive_types_deps, - ), - LinkablePackageInfo( - package_name = _get_type_package_name(ctx.attr.package_name), - package_path = "", - path = package_dir.path, - files = package_dir_depset, - ) - ] - -pkg_npm_types = rule( - implementation = _pkg_npm_types_impl, - attrs = { - "deps": attr.label_list( - doc = """Other targets which are the base types to summarise from""", - allow_files = True, - aspects = [module_mappings_aspect], - ), - "entrypoint_name": attr.string( - doc = """Entrypoint name of the types files group to summarise""", - default = "index.d.ts", - ), - "package_name": attr.string( - mandatory = True - ), - "srcs": attr.label_list( - doc = """Files inside this directory which are inputs for the types to summarise.""", - allow_files = True, - ), - "tsconfig": attr.label(mandatory = True, allow_single_file = [".json"]), - "_packager": attr.label( - doc = "Target that executes the npm types package assembler binary", - executable = True, - cfg = "target", - default = Label("//packages/kbn-type-summarizer-cli:bazel-cli"), - ), - }, -) diff --git a/src/dev/build/lib/build.test.ts b/src/dev/build/lib/build.test.ts index e8d5331439916..69a615948016d 100644 --- a/src/dev/build/lib/build.test.ts +++ b/src/dev/build/lib/build.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; import { Config } from './config'; diff --git a/src/dev/build/lib/config.test.ts b/src/dev/build/lib/config.test.ts index eb4fad08b1984..f46b5588a1921 100644 --- a/src/dev/build/lib/config.test.ts +++ b/src/dev/build/lib/config.test.ts @@ -8,7 +8,7 @@ import { resolve } from 'path'; -import { REPO_ROOT, kibanaPackageJson } from '@kbn/utils'; +import { REPO_ROOT, kibanaPackageJson } from '@kbn/repo-info'; import { createAbsolutePathSerializer } from '@kbn/jest-serializers'; import { Config } from './config'; diff --git a/src/dev/build/lib/config.ts b/src/dev/build/lib/config.ts index a9e7f43937403..037150f8756cd 100644 --- a/src/dev/build/lib/config.ts +++ b/src/dev/build/lib/config.ts @@ -8,7 +8,10 @@ import { dirname, resolve, relative } from 'path'; import os from 'os'; + import loadJsonFile from 'load-json-file'; +import { discoverBazelPackages, type BazelPackage } from '@kbn/bazel-packages'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getVersionInfo, VersionInfo } from './version_info'; import { PlatformName, PlatformArchitecture, ALL_PLATFORMS } from './platform'; @@ -207,4 +210,19 @@ export class Config { resolveFromTarget(...subPaths: string[]) { return resolve(this.repoRoot, 'target', ...subPaths); } + + private _prodPackages: BazelPackage[] | undefined; + async getProductionPackages() { + if (!this._prodPackages) { + this._prodPackages = (await discoverBazelPackages(REPO_ROOT)).filter( + (pkg) => !pkg.isDevOnly() + ); + } + + return this._prodPackages; + } + + async getPkgIdsInNodeModules() { + return (await this.getProductionPackages()).map((p) => p.manifest.id); + } } diff --git a/src/dev/build/lib/fs_records.ts b/src/dev/build/lib/fs_records.ts new file mode 100644 index 0000000000000..f2e2ff9c7929e --- /dev/null +++ b/src/dev/build/lib/fs_records.ts @@ -0,0 +1,71 @@ +/* + * 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 Path from 'path'; + +export class SomePath { + static fromAbs(path: string) { + return new SomePath(Path.dirname(path), Path.basename(path)); + } + + constructor( + /** The directory of the item at this path */ + public readonly dir: string, + /** The name of the item at this path */ + public readonly name: string + ) {} + + private _abs: string | null = null; + /** The absolute path of the file */ + public get abs() { + if (this._abs === null) { + this._abs = Path.resolve(this.dir, this.name); + } + + return this._abs; + } + + private _ext: string | null = null; + /** The extension of the filename, starts with a . like the Path.extname API */ + public get ext() { + if (this._ext === null) { + this._ext = Path.extname(this.name); + } + + return this._ext; + } + + /** return a file path with the file name changed to `name` */ + withName(name: string) { + return new SomePath(this.dir, name); + } + + /** return a file path with the file extension changed to `extension` */ + withExt(extension: string) { + return new SomePath(this.dir, Path.basename(this.name, this.ext) + extension); + } + + child(childName: string) { + return new SomePath(this.abs, childName); + } +} + +export interface DirRecord { + type: 'dir'; + source: SomePath; + dest: SomePath; +} + +export interface FileRecord { + type: 'file'; + source: SomePath; + dest: SomePath; + content?: string; +} + +export type Record = FileRecord | DirRecord; diff --git a/src/dev/build/lib/integration_tests/version_info.test.ts b/src/dev/build/lib/integration_tests/version_info.test.ts index 9385de6e00a4f..1dc76261864ef 100644 --- a/src/dev/build/lib/integration_tests/version_info.test.ts +++ b/src/dev/build/lib/integration_tests/version_info.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import { getVersionInfo } from '../version_info'; diff --git a/src/dev/build/lib/scan_copy.ts b/src/dev/build/lib/scan_copy.ts index 1c5e29f420588..28ab1649ad2f2 100644 --- a/src/dev/build/lib/scan_copy.ts +++ b/src/dev/build/lib/scan_copy.ts @@ -8,10 +8,10 @@ import Fs from 'fs'; import Fsp from 'fs/promises'; -import Path from 'path'; import * as Rx from 'rxjs'; import { assertAbsolute, mkdirp } from './fs'; +import { type DirRecord, type FileRecord, type Record, SomePath } from './fs_records'; const fsReadDir$ = Rx.bindNodeCallback( (path: string, cb: (err: Error | null, ents: Fs.Dirent[]) => void) => { @@ -46,68 +46,6 @@ interface Options { map?: (record: Readonly) => Promise; } -export class SomePath { - static fromAbs(path: string) { - return new SomePath(Path.dirname(path), Path.basename(path)); - } - - constructor( - /** The directory of the item at this path */ - public readonly dir: string, - /** The name of the item at this path */ - public readonly name: string - ) {} - - private _abs: string | null = null; - /** The absolute path of the file */ - public get abs() { - if (this._abs === null) { - this._abs = Path.resolve(this.dir, this.name); - } - - return this._abs; - } - - private _ext: string | null = null; - /** The extension of the filename, starts with a . like the Path.extname API */ - public get ext() { - if (this._ext === null) { - this._ext = Path.extname(this.name); - } - - return this._ext; - } - - /** return a file path with the file name changed to `name` */ - withName(name: string) { - return new SomePath(this.dir, name); - } - - /** return a file path with the file extension changed to `extension` */ - withExt(extension: string) { - return new SomePath(this.dir, Path.basename(this.name, this.ext) + extension); - } - - child(childName: string) { - return new SomePath(this.abs, childName); - } -} - -interface DirRecord { - type: 'dir'; - source: SomePath; - dest: SomePath; -} - -interface FileRecord { - type: 'file'; - source: SomePath; - dest: SomePath; - content?: string; -} - -type Record = FileRecord | DirRecord; - /** * Copy all of the files from one directory to another, optionally filtered with a * function or modifying mtime/atime for each file. diff --git a/src/dev/build/lib/version_info.ts b/src/dev/build/lib/version_info.ts index 9ad20b4a6935b..f0e4a77e55bb8 100644 --- a/src/dev/build/lib/version_info.ts +++ b/src/dev/build/lib/version_info.ts @@ -9,7 +9,7 @@ import execa from 'execa'; import fs from 'fs'; import { join } from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getBuildNumber } from './get_build_number'; interface Options { diff --git a/src/dev/build/tasks/assert_path_length.ts b/src/dev/build/tasks/assert_path_length.ts index 0dd7db50dd577..10be4503bf795 100644 --- a/src/dev/build/tasks/assert_path_length.ts +++ b/src/dev/build/tasks/assert_path_length.ts @@ -16,7 +16,18 @@ export const AssertPathLength: Task = { description: 'Checking Windows for paths > 200 characters', async run(config, log, build) { - const buildRoot = build.resolvePath(); + const win = config.getTargetPlatforms().find((p) => p.isWindows()); + + const buildRoot = process.env.CI + ? build.resolvePath() + : win + ? build.resolvePathForPlatform(win) + : undefined; + + if (!buildRoot) { + return; + } + await scan$(buildRoot) .pipe( map((path) => relative(buildRoot, path)), diff --git a/src/dev/build/tasks/build_kibana_example_plugins.ts b/src/dev/build/tasks/build_kibana_example_plugins.ts index 6fc53e10390c2..0f00acbb58bae 100644 --- a/src/dev/build/tasks/build_kibana_example_plugins.ts +++ b/src/dev/build/tasks/build_kibana_example_plugins.ts @@ -8,7 +8,7 @@ import Path from 'path'; import Fs from 'fs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { exec, Task } from '../lib'; export const BuildKibanaExamplePlugins: Task = { diff --git a/src/dev/build/tasks/build_kibana_platform_plugins.ts b/src/dev/build/tasks/build_kibana_platform_plugins.ts index 9beb296b7c38c..44fb14800a058 100644 --- a/src/dev/build/tasks/build_kibana_platform_plugins.ts +++ b/src/dev/build/tasks/build_kibana_platform_plugins.ts @@ -8,7 +8,7 @@ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { lastValueFrom } from 'rxjs'; import { CiStatsMetric } from '@kbn/ci-stats-reporter'; import { diff --git a/src/dev/build/tasks/build_packages_task.ts b/src/dev/build/tasks/build_packages_task.ts index 2cb0bb585b56a..ba1965cf36c36 100644 --- a/src/dev/build/tasks/build_packages_task.ts +++ b/src/dev/build/tasks/build_packages_task.ts @@ -7,91 +7,148 @@ */ import Path from 'path'; +import * as Fsp from 'fs/promises'; -import { REPO_ROOT } from '@kbn/utils'; -import { discoverBazelPackages } from '@kbn/bazel-packages'; import { runBazel } from '@kbn/bazel-runner'; import * as Peggy from '@kbn/peggy'; +import { asyncForEach } from '@kbn/std'; +import { withFastAsyncTransform, TransformConfig } from '@kbn/babel-transform'; import { Task, scanCopy, write, deleteAll } from '../lib'; +import type { Record } from '../lib/fs_records'; + +const distPerms = (rec: Record) => (rec.type === 'file' ? 0o644 : 0o755); export const BuildBazelPackages: Task = { description: 'Building distributable versions of Bazel packages', async run(config, log, build) { - const packages = (await discoverBazelPackages(REPO_ROOT)).filter((pkg) => !pkg.isDevOnly()); - - log.info(`Preparing Bazel projects production build non-devOnly packages`); - await runBazel(['build', '//packages:build']); - - for (const pkg of packages) { - log.info(`Copying build of`, pkg.manifest.id, 'into build'); - - const pkgDirInBuild = build.resolvePath(pkg.normalizedRepoRelativeDir); - const peggyConfigOutputPaths = new Set(); - const pkgBuildDir = config.resolveFromRepo( - 'bazel-bin', - pkg.normalizedRepoRelativeDir, - 'npm_module' - ); - - // copy the built npm_module target dir into the build, package.json is updated to copy - // the sources we actually end up using into the node_modules directory when we run - // yarn install - await scanCopy({ - source: pkgBuildDir, - destination: pkgDirInBuild, - permissions: (rec) => (rec.type === 'file' ? 0o644 : 0o755), - filter: (rec) => !(rec.type === 'dir' && rec.source.name === 'target_web'), - async map(rec) { - const extname = Path.extname(rec.source.name); - if (extname !== '.peggy') { - return undefined; - } - - const result = await Peggy.getJsSource({ - path: rec.source.abs, - format: 'commonjs', - optimize: 'speed', - }); + const packages = await config.getProductionPackages(); + const pkgIdsInNodeModules = await config.getPkgIdsInNodeModules(); - if (result.config) { - // if there was a config file for this peggy grammar, capture its output path and - // delete it after the copy is complete - peggyConfigOutputPaths.add( - Path.resolve(pkgDirInBuild, Path.relative(pkgBuildDir, result.config.path)) - ); - } - - return { - ...rec, - dest: rec.dest.withName(rec.dest.name + '.js'), - content: result.source, - }; - }, - }); + log.info(`Building Bazel artifacts which are necessary for the build`); + await runBazel([ + 'build', + '//packages/kbn-ui-shared-deps-npm:shared_built_assets', + '//packages/kbn-ui-shared-deps-src:shared_built_assets', + '//packages/kbn-monaco:target_workers', + '--show_result=1', + '--define=dist=true', + ]); + + const transformConfig: TransformConfig = { + disableSourceMaps: true, + ignoredPkgIds: pkgIdsInNodeModules, + }; + + await withFastAsyncTransform(transformConfig, async (transform) => { + await asyncForEach(packages, async (pkg) => { + const pkgDistPath = build.resolvePath(pkg.normalizedRepoRelativeDir); + const peggyConfigOutputPaths = new Set(); + const pkgSrcPath = config.resolveFromRepo(pkg.normalizedRepoRelativeDir); + + // copy the built npm_module target dir into the build, package.json is updated to copy + // the sources we actually end up using into the node_modules directory when we run + // yarn install + await scanCopy({ + source: pkgSrcPath, + destination: pkgDistPath, + permissions: distPerms, + filter: (rec) => !rec.source.name.endsWith('.d.ts'), + async map(rec) { + switch (Path.extname(rec.source.name)) { + case '.peggy': { + const result = await Peggy.getJsSource({ + path: rec.source.abs, + format: 'commonjs', + optimize: 'speed', + }); + + if (result.config) { + // if there was a config file for this peggy grammar, capture its output path and + // delete it after the copy is complete + peggyConfigOutputPaths.add( + Path.resolve(pkgDistPath, Path.relative(pkgSrcPath, result.config.path)) + ); + } + + return { + ...rec, + dest: rec.dest.withName(rec.dest.name + '.js'), + content: result.source, + }; + } - // cleanup any peggy config files - if (peggyConfigOutputPaths.size) { - await deleteAll(Array.from(peggyConfigOutputPaths), log); - } - - await write( - Path.resolve(pkgDirInBuild, 'kibana.jsonc'), - JSON.stringify(pkg.manifest, null, 2) - ); - await write( - Path.resolve(pkgDirInBuild, 'package.json'), - JSON.stringify( - { - ...pkg.pkg, - name: pkg.manifest.id, - version: config.getBuildVersion(), - private: undefined, + case '.ts': + case '.tsx': + case '.js': + case '.mjs': + case '.jsx': { + const source = await Fsp.readFile(rec.source.abs, 'utf8'); + const result = await transform(rec.source.abs, source); + return { + ...rec, + dest: rec.dest.withExt('.js'), + content: result.code, + }; + } + } }, - null, - 2 - ) - ); - } + }); + + if ( + pkg.manifest.id === '@kbn/ui-shared-deps-src' || + pkg.manifest.id === '@kbn/ui-shared-deps-npm' + ) { + await scanCopy({ + source: config.resolveFromRepo( + 'bazel-bin', + pkg.normalizedRepoRelativeDir, + 'shared_built_assets' + ), + destination: build.resolvePath(pkg.normalizedRepoRelativeDir, 'shared_built_assets'), + permissions: distPerms, + filter: (rec) => rec.source.ext !== '.map', + }); + } + + if (pkg.manifest.id === '@kbn/monaco') { + await scanCopy({ + source: config.resolveFromRepo( + 'bazel-bin', + pkg.normalizedRepoRelativeDir, + 'target_workers' + ), + destination: build.resolvePath(pkg.normalizedRepoRelativeDir, 'target_workers'), + permissions: distPerms, + filter: (rec) => rec.source.ext !== '.map', + }); + } + + // cleanup any peggy config files + if (peggyConfigOutputPaths.size) { + await deleteAll(Array.from(peggyConfigOutputPaths), log); + } + + await write( + Path.resolve(pkgDistPath, 'kibana.jsonc'), + JSON.stringify(pkg.manifest, null, 2) + ); + await write( + Path.resolve(pkgDistPath, 'package.json'), + JSON.stringify( + { + ...pkg.pkg, + name: pkg.manifest.id, + version: config.getBuildVersion(), + private: undefined, + }, + null, + 2 + ) + ); + + log.info(`Copied`, pkg.manifest.id, 'into build'); + }); + }); }, }; diff --git a/src/dev/build/tasks/clean_tasks.ts b/src/dev/build/tasks/clean_tasks.ts index bc4e5bca05675..18313dc3edbcf 100644 --- a/src/dev/build/tasks/clean_tasks.ts +++ b/src/dev/build/tasks/clean_tasks.ts @@ -8,7 +8,7 @@ import minimatch from 'minimatch'; import { discoverBazelPackages } from '@kbn/bazel-packages'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { deleteAll, deleteEmptyFolders, scanDelete, Task, GlobalTask } from '../lib'; export const Clean: GlobalTask = { diff --git a/src/dev/build/tasks/copy_source_task.ts b/src/dev/build/tasks/copy_source_task.ts index 536b59e663a3d..c092dc8341633 100644 --- a/src/dev/build/tasks/copy_source_task.ts +++ b/src/dev/build/tasks/copy_source_task.ts @@ -52,6 +52,9 @@ export const CopySource: Task = { const piscina = new Piscina({ filename: resolve(__dirname, 'copy_source_worker.js'), + workerData: { + ignoredPkgIds: await config.getPkgIdsInNodeModules(), + }, }); const globbyOptions = { cwd: config.resolveFromRepo('.') }; @@ -74,5 +77,7 @@ export const CopySource: Task = { await Promise.all(tasks); await piscina.destroy(); + + log.success('copied and transpiled', tasks.length, 'files'); }, }; diff --git a/src/dev/build/tasks/copy_source_worker.js b/src/dev/build/tasks/copy_source_worker.js index 5f18cf6f46eab..a272a15b653ec 100644 --- a/src/dev/build/tasks/copy_source_worker.js +++ b/src/dev/build/tasks/copy_source_worker.js @@ -10,26 +10,18 @@ const { writeFileSync, readFileSync, copyFileSync, mkdirSync } = require('fs'); const { resolve, extname, dirname } = require('path'); const { optimize } = require('svgo'); -const { transformFileSync } = require('@babel/core'); +const { transformCode } = require('@kbn/babel-transform'); -const presets = require('@kbn/babel-preset/node_preset'); +const { ignoredPkgIds } = require('piscina').workerData; -const { REPO_ROOT } = require('@kbn/utils'); +const { REPO_ROOT } = require('@kbn/repo-info'); const BUILD_ROOT = resolve(REPO_ROOT, 'build', 'kibana'); -const babelOptions = { - presets: [[presets, { 'kibana/rootDir': REPO_ROOT }]], - cwd: REPO_ROOT, - babelrc: false, - sourceMaps: false, - ast: false, -}; - const svgOptions = { removeComments: false, }; -module.exports = ({ source }) => { +module.exports = async ({ source }) => { const absoluteSource = resolve(REPO_ROOT, source); const absoluteDest = resolve(BUILD_ROOT, source); @@ -40,12 +32,17 @@ module.exports = ({ source }) => { case '.js': case '.ts': case '.tsx': - const output = transformFileSync(absoluteSource, babelOptions); + const output = transformCode(absoluteSource, undefined, { + disableSourceMaps: true, + ignoredPkgIds, + }); + if (output.code) { const dest = absoluteDest.substring(0, absoluteDest.lastIndexOf('.')) + '.js'; writeFileSync(dest, output.code); } break; + case '.svg': const input = readFileSync(absoluteSource, 'utf-8'); const result = optimize(input, { @@ -58,7 +55,9 @@ module.exports = ({ source }) => { writeFileSync(absoluteDest, output); } break; + default: copyFileSync(absoluteSource, absoluteDest); + break; } }; diff --git a/src/dev/build/tasks/generate_packages_optimized_assets.ts b/src/dev/build/tasks/generate_packages_optimized_assets.ts index 0f2e22a3c1444..566c15786f7ab 100644 --- a/src/dev/build/tasks/generate_packages_optimized_assets.ts +++ b/src/dev/build/tasks/generate_packages_optimized_assets.ts @@ -43,7 +43,7 @@ async function optimizeAssets(log: ToolingLog, assetDir: string) { await asyncPipeline( vfs.src(['**/*.css'], { cwd: assetDir }), // eslint-disable-next-line @typescript-eslint/no-var-requires - gulpPostCSS(require('@kbn/optimizer/postcss.config.js').plugins), + gulpPostCSS(require('@kbn/optimizer/postcss.config').plugins), vfs.dest(assetDir) ); diff --git a/src/dev/build/tasks/nodejs/extract_node_builds_task.test.ts b/src/dev/build/tasks/nodejs/extract_node_builds_task.test.ts index bb417cef3d990..4092390f08360 100644 --- a/src/dev/build/tasks/nodejs/extract_node_builds_task.test.ts +++ b/src/dev/build/tasks/nodejs/extract_node_builds_task.test.ts @@ -9,7 +9,7 @@ import { readFileSync } from 'fs'; import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log'; import { createAbsolutePathSerializer, createRecursiveSerializer } from '@kbn/jest-serializers'; diff --git a/src/dev/build/tasks/nodejs/verify_existing_node_builds_task.test.ts b/src/dev/build/tasks/nodejs/verify_existing_node_builds_task.test.ts index 5f495bf3b168f..9a9f8520b8ab4 100644 --- a/src/dev/build/tasks/nodejs/verify_existing_node_builds_task.test.ts +++ b/src/dev/build/tasks/nodejs/verify_existing_node_builds_task.test.ts @@ -9,7 +9,7 @@ import Path from 'path'; import Fs from 'fs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log'; import { createAnyInstanceSerializer, createRecursiveSerializer } from '@kbn/jest-serializers'; diff --git a/src/dev/build/tasks/os_packages/docker_generator/bundle_dockerfiles.ts b/src/dev/build/tasks/os_packages/docker_generator/bundle_dockerfiles.ts index 7f092f399c8ed..7df5b21bd562a 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/bundle_dockerfiles.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/bundle_dockerfiles.ts @@ -11,7 +11,7 @@ import { readFileSync } from 'fs'; import { copyFile } from 'fs/promises'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import Mustache from 'mustache'; import { compressTar, copyAll, mkdirp, write, Config } from '../../../lib'; diff --git a/src/dev/build/tasks/os_packages/docker_generator/run.ts b/src/dev/build/tasks/os_packages/docker_generator/run.ts index 89944999392ef..fa19a11bb5939 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/run.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/run.ts @@ -11,7 +11,7 @@ import { resolve, basename } from 'path'; import { promisify } from 'util'; import { ToolingLog } from '@kbn/tooling-log'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { write, copyAll, mkdirp, exec, Config, Build } from '../../../lib'; import * as dockerTemplates from './templates'; diff --git a/src/dev/chromium_version.ts b/src/dev/chromium_version.ts index 7bbdfcd59d768..f2cbab5e7a516 100644 --- a/src/dev/chromium_version.ts +++ b/src/dev/chromium_version.ts @@ -8,7 +8,7 @@ import { run } from '@kbn/dev-cli-runner'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import chalk from 'chalk'; import cheerio from 'cheerio'; import fs from 'fs'; diff --git a/src/dev/code_coverage/ingest_coverage/__tests__/enumerate_patterns.test.js b/src/dev/code_coverage/ingest_coverage/__tests__/enumerate_patterns.test.js index 14f7cefc78cae..f6de641e49dde 100644 --- a/src/dev/code_coverage/ingest_coverage/__tests__/enumerate_patterns.test.js +++ b/src/dev/code_coverage/ingest_coverage/__tests__/enumerate_patterns.test.js @@ -8,7 +8,7 @@ import { enumeratePatterns } from '../team_assignment/enumerate_patterns'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; const log = new ToolingLog({ level: 'info', diff --git a/src/dev/code_coverage/ingest_coverage/team_assignment/index.js b/src/dev/code_coverage/ingest_coverage/team_assignment/index.js index f47cf6e9d535c..8db4dd5ddb676 100644 --- a/src/dev/code_coverage/ingest_coverage/team_assignment/index.js +++ b/src/dev/code_coverage/ingest_coverage/team_assignment/index.js @@ -8,7 +8,7 @@ import { run } from '@kbn/dev-cli-runner'; import { createFlagError } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { parse } from './parse_owners'; import { flush } from './flush'; import { enumeratePatterns } from './enumerate_patterns'; diff --git a/src/dev/eslint/lint_files.ts b/src/dev/eslint/lint_files.ts index 46c11e283ff4c..2e62cbd451add 100644 --- a/src/dev/eslint/lint_files.ts +++ b/src/dev/eslint/lint_files.ts @@ -8,7 +8,7 @@ import { CLIEngine } from 'eslint'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { createFailError } from '@kbn/dev-cli-errors'; import { ToolingLog } from '@kbn/tooling-log'; import { File } from '../file'; diff --git a/src/dev/eslint/run_eslint_with_types.ts b/src/dev/eslint/run_eslint_with_types.ts index e6eac71b15d0b..f3ec09540c360 100644 --- a/src/dev/eslint/run_eslint_with_types.ts +++ b/src/dev/eslint/run_eslint_with_types.ts @@ -16,10 +16,9 @@ import { mergeMap, reduce } from 'rxjs/operators'; import { supportsColor } from 'chalk'; import { run } from '@kbn/dev-cli-runner'; import { createFailError } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; -import { PROJECTS } from '../typescript/projects'; -import { Project } from '../typescript/project'; +import { PROJECTS, Project } from '@kbn/ts-projects'; export function runEslintWithTypes() { run( @@ -42,7 +41,7 @@ export function runEslintWithTypes() { return false; } - if (projectFilter && project.tsConfigPath !== projectFilter) { + if (projectFilter && project.path !== projectFilter) { log.verbose(`[${project.name}] skipping because it doesn't match --project`); return false; } @@ -79,8 +78,10 @@ export function runEslintWithTypes() { process.execPath, [ Path.relative(project.directory, eslintPath), - ...project.getIncludePatterns().map((p) => (p.endsWith('*') ? `${p}.{ts,tsx}` : p)), - ...project.getExcludePatterns().flatMap((p) => ['--ignore-pattern', p]), + ...(project.config.include ?? []).map((p) => + p.endsWith('*') ? `${p}.{ts,tsx}` : p + ), + ...(project.config.exclude ?? []).flatMap((p) => ['--ignore-pattern', p]), ...['--ignore-pattern', '**/*.json'], ...['--ext', '.ts,.tsx'], '--no-error-on-unmatched-pattern', @@ -145,13 +146,7 @@ export function runEslintWithTypes() { } projects failed, run the following commands locally to try auto-fixing them: ${failures - .map( - (p) => - `node scripts/eslint_with_types --fix --project ${Path.relative( - REPO_ROOT, - p.tsConfigPath - )}` - ) + .map((p) => `node scripts/eslint_with_types --fix --project ${p.repoRel}`) .join('\n ')} ` ); diff --git a/src/dev/license_checker/run_check_licenses_cli.ts b/src/dev/license_checker/run_check_licenses_cli.ts index 8ff73d85a7487..7c6cd9248f05f 100644 --- a/src/dev/license_checker/run_check_licenses_cli.ts +++ b/src/dev/license_checker/run_check_licenses_cli.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { run } from '@kbn/dev-cli-runner'; import { getInstalledPackages } from '../npm'; diff --git a/src/dev/notice/cli.js b/src/dev/notice/cli.js index 8aece9f51d9e6..77b3151d0501b 100644 --- a/src/dev/notice/cli.js +++ b/src/dev/notice/cli.js @@ -11,7 +11,7 @@ import { resolve } from 'path'; import getopts from 'getopts'; import dedent from 'dedent'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog, pickLevelFromFlags } from '@kbn/tooling-log'; import { generateNoticeFromSource } from './generate_notice_from_source'; diff --git a/src/dev/npm/integration_tests/installed_packages.test.ts b/src/dev/npm/integration_tests/installed_packages.test.ts index 716065fe39b50..079560eb47908 100644 --- a/src/dev/npm/integration_tests/installed_packages.test.ts +++ b/src/dev/npm/integration_tests/installed_packages.test.ts @@ -10,7 +10,7 @@ import { resolve, sep } from 'path'; import { uniq } from 'lodash'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { getInstalledPackages, InstalledPackage } from '../installed_packages'; const FIXTURE1_ROOT = resolve(__dirname, '__fixtures__/fixture1'); diff --git a/src/dev/performance/run_performance_cli.ts b/src/dev/performance/run_performance_cli.ts index 142b024df0d4e..daec946f8962b 100644 --- a/src/dev/performance/run_performance_cli.ts +++ b/src/dev/performance/run_performance_cli.ts @@ -8,7 +8,7 @@ import { createFlagError } from '@kbn/dev-cli-errors'; import { run } from '@kbn/dev-cli-runner'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import fs from 'fs'; import path from 'path'; diff --git a/src/dev/performance/run_scalability_cli.ts b/src/dev/performance/run_scalability_cli.ts index 5f925772dcc23..86f8c70a11ab9 100644 --- a/src/dev/performance/run_scalability_cli.ts +++ b/src/dev/performance/run_scalability_cli.ts @@ -8,7 +8,7 @@ import { createFlagError } from '@kbn/dev-cli-errors'; import { run } from '@kbn/dev-cli-runner'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import fs from 'fs'; import path from 'path'; import { Journey } from './run_performance_cli'; diff --git a/src/dev/plugin_discovery/find_plugins.ts b/src/dev/plugin_discovery/find_plugins.ts index 698a9816a5312..93cddbb165c98 100644 --- a/src/dev/plugin_discovery/find_plugins.ts +++ b/src/dev/plugin_discovery/find_plugins.ts @@ -10,7 +10,7 @@ import Path from 'path'; import { getPluginSearchPaths } from '@kbn/plugin-discovery'; import { KibanaPlatformPlugin, simpleKibanaPlatformPluginDiscovery } from '@kbn/plugin-discovery'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; export interface SearchOptions { oss: boolean; diff --git a/src/dev/precommit_hook/casing_check_config.js b/src/dev/precommit_hook/casing_check_config.js index 2cfa9b0299c3f..8b8f49e59d5d7 100644 --- a/src/dev/precommit_hook/casing_check_config.js +++ b/src/dev/precommit_hook/casing_check_config.js @@ -26,6 +26,7 @@ export const IGNORE_FILE_GLOBS = [ '**/{Dockerfile,docker-compose.yml}', 'x-pack/plugins/canvas/tasks/**/*', 'x-pack/plugins/canvas/canvas_plugin_src/**/*', + 'x-pack/plugins/canvas/server/templates/assets/*.{png,jpg,svg}', 'x-pack/plugins/cases/docs/**/*', 'x-pack/plugins/monitoring/public/lib/jquery_flot/**/*', '**/.*', diff --git a/src/dev/precommit_hook/get_files_for_commit.js b/src/dev/precommit_hook/get_files_for_commit.js index 2afb5dba2510a..e540542c34c25 100644 --- a/src/dev/precommit_hook/get_files_for_commit.js +++ b/src/dev/precommit_hook/get_files_for_commit.js @@ -8,7 +8,7 @@ import SimpleGit from 'simple-git'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { File } from '../file'; /** diff --git a/src/dev/run_build_docs_cli.ts b/src/dev/run_build_docs_cli.ts index c121dc69de3dd..54871a8a0e8b5 100644 --- a/src/dev/run_build_docs_cli.ts +++ b/src/dev/run_build_docs_cli.ts @@ -11,7 +11,7 @@ import Path from 'path'; import dedent from 'dedent'; import { run } from '@kbn/dev-cli-runner'; import { createFailError } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; const DEFAULT_DOC_REPO_PATH = Path.resolve(REPO_ROOT, '..', 'docs'); diff --git a/src/dev/run_check_file_casing.ts b/src/dev/run_check_file_casing.ts index 3dff1c1731098..451425e588883 100644 --- a/src/dev/run_check_file_casing.ts +++ b/src/dev/run_check_file_casing.ts @@ -8,7 +8,7 @@ import globby from 'globby'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { run } from '@kbn/dev-cli-runner'; import { File } from './file'; import { checkFileCasing } from './precommit_hook/check_file_casing'; diff --git a/src/dev/run_find_plugins_with_circular_deps.ts b/src/dev/run_find_plugins_with_circular_deps.ts index 67a67a2f1729b..27968d15c68de 100644 --- a/src/dev/run_find_plugins_with_circular_deps.ts +++ b/src/dev/run_find_plugins_with_circular_deps.ts @@ -11,7 +11,7 @@ import { parseDependencyTree, parseCircular, prettyCircular } from 'dpdm'; import { relative } from 'path'; import { getPluginSearchPaths } from '@kbn/plugin-discovery'; import { run } from '@kbn/dev-cli-runner'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; interface Options { debug?: boolean; diff --git a/src/dev/run_precommit_hook.js b/src/dev/run_precommit_hook.js index 5774ffb9d9b3e..7b8b8d25da121 100644 --- a/src/dev/run_precommit_hook.js +++ b/src/dev/run_precommit_hook.js @@ -10,7 +10,7 @@ import SimpleGit from 'simple-git'; import { run } from '@kbn/dev-cli-runner'; import { createFlagError, combineErrors } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import * as Eslint from './eslint'; import * as Stylelint from './stylelint'; import { getFilesForCommit, checkFileCasing } from './precommit_hook'; diff --git a/src/dev/storybook/commands/clean.ts b/src/dev/storybook/commands/clean.ts index 2688ef4bcdb74..55861ff22bdb9 100644 --- a/src/dev/storybook/commands/clean.ts +++ b/src/dev/storybook/commands/clean.ts @@ -7,7 +7,7 @@ */ import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { join } from 'path'; import del from 'del'; diff --git a/src/dev/tsconfig.json b/src/dev/tsconfig.json index 5976c86154dad..136db54b123bf 100644 --- a/src/dev/tsconfig.json +++ b/src/dev/tsconfig.json @@ -1,20 +1,39 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "**/*.js", "**/*.ts", ], "exclude": [ - "target/types/**/*" + "target/**/*", ], "kbn_references": [ - { "path": "../core/tsconfig.json" }, + "@kbn/core", { "path": "../../tsconfig.json" }, - { "path": "../../x-pack/plugins/screenshotting/tsconfig.json" }, + "@kbn/screenshotting-plugin", + "@kbn/test", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/repo-info", + "@kbn/tooling-log", + "@kbn/plugin-discovery", + "@kbn/ci-stats-reporter", + "@kbn/jest-serializers", + "@kbn/i18n", + "@kbn/storybook", + "@kbn/bazel-packages", + "@kbn/std", + "@kbn/dev-utils", + "@kbn/utils", + "@kbn/optimizer", + "@kbn/bazel-runner", + "@kbn/peggy", + "@kbn/babel-transform", + "@kbn/import-resolver", + "@kbn/find-used-node-modules", + "@kbn/ts-projects", ] } diff --git a/src/dev/typescript/project.ts b/src/dev/typescript/project.ts deleted file mode 100644 index c148cccfa7351..0000000000000 --- a/src/dev/typescript/project.ts +++ /dev/null @@ -1,181 +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 Path from 'path'; - -import { IMinimatch, Minimatch } from 'minimatch'; -import { REPO_ROOT } from '@kbn/utils'; - -import { parseTsConfig } from './ts_configfile'; - -function makeMatchers(directory: string, patterns: string[]) { - return patterns.map( - (pattern) => - new Minimatch(Path.resolve(directory, pattern), { - dot: true, - }) - ); -} - -function testMatchers(matchers: IMinimatch[], path: string) { - return matchers.some((matcher) => matcher.match(path)); -} - -export interface ProjectOptions { - name?: string; - disableTypeCheck?: boolean; -} - -interface LoadOptions { - history?: string[]; - cache?: Map; - skipConfigValidation?: boolean; -} - -export class Project { - static load( - tsConfigPath: string, - projectOptions?: ProjectOptions, - loadOptions: LoadOptions = {} - ): Project { - const cache = loadOptions.cache ?? new Map(); - const cached = cache.get(tsConfigPath); - if (cached) { - return cached; - } - - const config = parseTsConfig(tsConfigPath); - - if (!loadOptions?.skipConfigValidation) { - if (config.files) { - throw new Error(`${tsConfigPath} must not use "files" key`); - } - - if (!config.include) { - throw new Error(`${tsConfigPath} must have an "include" key`); - } - } - - const directory = Path.dirname(tsConfigPath); - const disableTypeCheck = projectOptions?.disableTypeCheck || false; - const name = - projectOptions?.name || Path.relative(REPO_ROOT, directory) || Path.basename(directory); - const includePatterns = config.include; - const include = includePatterns ? makeMatchers(directory, includePatterns) : undefined; - const excludePatterns = config.exclude; - const exclude = excludePatterns ? makeMatchers(directory, excludePatterns) : undefined; - - let baseProject; - if (config.extends) { - const baseConfigPath = Path.resolve(directory, config.extends); - - // prevent circular deps - if (loadOptions.history?.includes(baseConfigPath)) { - throw new Error( - `circular "extends" are not supported in tsconfig files: ${loadOptions.history} => ${baseConfigPath}` - ); - } - - baseProject = Project.load( - baseConfigPath, - {}, - { - skipConfigValidation: true, - history: [...(loadOptions.history ?? []), tsConfigPath], - cache, - } - ); - } - - const project = new Project( - tsConfigPath, - directory, - name, - config, - disableTypeCheck, - baseProject, - include, - includePatterns, - exclude, - excludePatterns - ); - cache.set(tsConfigPath, project); - return project; - } - - public readonly typeCheckConfigPath: string; - - constructor( - public readonly tsConfigPath: string, - public readonly directory: string, - public readonly name: string, - public readonly config: any, - public readonly disableTypeCheck: boolean, - - public readonly baseProject?: Project, - private readonly include?: IMinimatch[], - private readonly includePatterns?: string[], - private readonly exclude?: IMinimatch[], - private readonly excludePatterns?: string[] - ) { - this.typeCheckConfigPath = Path.resolve(this.directory, 'tsconfig.type_check.json'); - } - - public getIncludePatterns(): string[] { - return this.includePatterns - ? this.includePatterns - : this.baseProject?.getIncludePatterns() ?? []; - } - public getExcludePatterns(): string[] { - return this.excludePatterns - ? this.excludePatterns - : this.baseProject?.getExcludePatterns() ?? []; - } - - private getInclude(): IMinimatch[] { - return this.include ? this.include : this.baseProject?.getInclude() ?? []; - } - - private getExclude(): IMinimatch[] { - return this.exclude ? this.exclude : this.baseProject?.getExclude() ?? []; - } - - public isAbsolutePathSelected(path: string) { - return testMatchers(this.getExclude(), path) ? false : testMatchers(this.getInclude(), path); - } - - public getOutDir(): string | undefined { - if (this.config.compilerOptions?.outDir) { - return Path.resolve(this.directory, this.config.compilerOptions.outDir); - } - if (this.baseProject) { - return this.baseProject.getOutDir(); - } - return undefined; - } - - public getRefdPaths(): string[] { - if (this.config.references) { - return (this.config.references as Array<{ path: string }>).map(({ path }) => - Path.resolve(this.directory, path) - ); - } - - return this.baseProject ? this.baseProject.getRefdPaths() : []; - } - - public getConfigPaths(): string[] { - return this.baseProject - ? [this.tsConfigPath, ...this.baseProject.getConfigPaths()] - : [this.tsConfigPath]; - } - - public getProjectsDeep(): Project[] { - return this.baseProject ? [this, ...this.baseProject.getProjectsDeep()] : [this]; - } -} diff --git a/src/dev/typescript/run_check_ts_projects_cli.ts b/src/dev/typescript/run_check_ts_projects_cli.ts deleted file mode 100644 index c4998e6791957..0000000000000 --- a/src/dev/typescript/run_check_ts_projects_cli.ts +++ /dev/null @@ -1,155 +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 Path from 'path'; - -import { run } from '@kbn/dev-cli-runner'; -import { asyncMapWithLimit } from '@kbn/std'; -import { createFailError } from '@kbn/dev-cli-errors'; -import { getRepoFiles } from '@kbn/get-repo-files'; -import { REPO_ROOT } from '@kbn/utils'; -import globby from 'globby'; - -import { File } from '../file'; -import { PROJECTS } from './projects'; -import type { Project } from './project'; - -class Stats { - counts = { - files: new Map(), - ignored: new Map(), - gitMatched: new Map(), - }; - - incr(proj: Project, metric: 'files' | 'ignored' | 'gitMatched', delta = 1) { - const cur = this.counts[metric].get(proj); - this.counts[metric].set(proj, (cur ?? 0) + delta); - } -} - -export async function runCheckTsProjectsCli() { - run( - async ({ log }) => { - const stats = new Stats(); - let failed = false; - - const everyProjectDeep = new Set(PROJECTS.flatMap((p) => p.getProjectsDeep())); - for (const proj of everyProjectDeep) { - const [, ...baseConfigRels] = proj.getConfigPaths().map((p) => Path.relative(REPO_ROOT, p)); - const configRel = Path.relative(REPO_ROOT, proj.tsConfigPath); - - if (baseConfigRels[0] === 'tsconfig.json') { - failed = true; - log.error( - `[${configRel}]: This tsconfig extends the root tsconfig.json file and shouldn't. The root tsconfig.json file is not a valid base config, you probably want to point to the tsconfig.base.json file.` - ); - } - if (configRel !== 'tsconfig.base.json' && !baseConfigRels.includes('tsconfig.base.json')) { - failed = true; - log.error( - `[${configRel}]: This tsconfig does not extend the tsconfig.base.json file either directly or indirectly. The TS config setup for the repo expects every tsconfig file to extend this base config file.` - ); - } - } - - const pathsAndProjects = await asyncMapWithLimit(PROJECTS, 5, async (proj) => { - const paths = await globby(proj.getIncludePatterns(), { - ignore: proj.getExcludePatterns(), - cwd: proj.directory, - onlyFiles: true, - absolute: true, - }); - stats.incr(proj, 'files', paths.length); - return { - proj, - paths, - }; - }); - - const isInMultipleTsProjects = new Map>(); - const pathsToProject = new Map(); - for (const { proj, paths } of pathsAndProjects) { - for (const path of paths) { - if (!pathsToProject.has(path)) { - pathsToProject.set(path, proj); - continue; - } - - if (path.endsWith('.d.ts')) { - stats.incr(proj, 'ignored'); - continue; - } - - isInMultipleTsProjects.set( - path, - new Set([...(isInMultipleTsProjects.get(path) ?? []), proj]) - ); - } - } - - if (isInMultipleTsProjects.size) { - failed = true; - const details = Array.from(isInMultipleTsProjects) - .map( - ([path, projects]) => - ` - ${Path.relative(process.cwd(), path)}:\n${Array.from(projects) - .map((p) => ` - ${Path.relative(process.cwd(), p.tsConfigPath)}`) - .join('\n')}` - ) - .join('\n'); - - log.error( - `The following files belong to multiple tsconfig.json files listed in src/dev/typescript/projects.ts\n${details}` - ); - } - - const isNotInTsProject: File[] = []; - for (const { abs } of await getRepoFiles()) { - const file = new File(abs); - if (!file.isTypescript() || file.isFixture()) { - continue; - } - - const proj = pathsToProject.get(file.getAbsolutePath()); - if (proj === undefined) { - isNotInTsProject.push(file); - } else { - stats.incr(proj, 'gitMatched'); - } - } - - if (isNotInTsProject.length) { - failed = true; - log.error( - `The following files do not belong to a tsconfig.json file, or that tsconfig.json file is not listed in src/dev/typescript/projects.ts\n${isNotInTsProject - .map((file) => ` - ${file.getRelativePath()}`) - .join('\n')}` - ); - } - - for (const [metric, counts] of Object.entries(stats.counts)) { - log.verbose('metric:', metric); - for (const [proj, count] of Array.from(counts).sort((a, b) => - a[0].name.localeCompare(b[0].name) - )) { - log.verbose(' ', proj.name, count); - } - } - - if (failed) { - throw createFailError('see above errors'); - } else { - log.success('All ts files belong to a single ts project'); - } - }, - { - description: - 'Check that all .ts and .tsx files in the repository are assigned to a tsconfig.json file', - } - ); -} diff --git a/src/dev/typescript/run_type_check_cli.ts b/src/dev/typescript/run_type_check_cli.ts deleted file mode 100644 index ad1907f0f120a..0000000000000 --- a/src/dev/typescript/run_type_check_cli.ts +++ /dev/null @@ -1,259 +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 Path from 'path'; -import Fs from 'fs'; -import Fsp from 'fs/promises'; - -import { run } from '@kbn/dev-cli-runner'; -import { createFailError } from '@kbn/dev-cli-errors'; -import { REPO_ROOT } from '@kbn/utils'; -import { Jsonc } from '@kbn/bazel-packages'; -import { runBazel } from '@kbn/bazel-runner'; -import { asyncForEachWithLimit } from '@kbn/std'; -import { BazelPackage, discoverBazelPackages } from '@kbn/bazel-packages'; - -import { PROJECTS } from './projects'; -import { Project } from './project'; -import { - updateRootRefsConfig, - cleanupRootRefsConfig, - ROOT_REFS_CONFIG_PATH, -} from './root_refs_config'; - -function rel(from: string, to: string) { - const relative = Path.relative(from, to); - return relative.startsWith('.') ? relative : `./${relative}`; -} - -function isValidRefs(refs: unknown): refs is Array<{ path: string }> { - return ( - Array.isArray(refs) && - refs.every( - (r) => typeof r === 'object' && r !== null && 'path' in r && typeof r.path === 'string' - ) - ); -} - -function parseTsconfig(path: string) { - const jsonc = Fs.readFileSync(path, 'utf8'); - const parsed = Jsonc.parse(jsonc) as Record; - if (typeof parsed !== 'object' || parsed === null) { - throw createFailError(`expected JSON at ${path} to parse into an object`); - } - - return parsed; -} - -function toTypeCheckConfigPath(path: string) { - return path.endsWith('tsconfig.base.json') - ? path.replace(/\/tsconfig\.base\.json$/, '/tsconfig.base.type_check.json') - : path.replace(/\/tsconfig\.json$/, '/tsconfig.type_check.json'); -} - -function createTypeCheckConfigs(projects: Project[], bazelPackages: BazelPackage[]) { - const created = new Set(); - const bazelPackageIds = new Set(bazelPackages.map((p) => p.manifest.id)); - - // write root tsconfig.type_check.json - const baseTypeCheckConfigPath = Path.resolve(REPO_ROOT, 'tsconfig.base.type_check.json'); - const baseConfigPath = Path.resolve(REPO_ROOT, 'tsconfig.base.json'); - const baseStat = Fs.statSync(baseConfigPath); - const basePaths = parseTsconfig(baseConfigPath).compilerOptions.paths; - if (typeof basePaths !== 'object' || basePaths === null) { - throw createFailError(`expected root compilerOptions.paths to be an object`); - } - Fs.writeFileSync( - baseTypeCheckConfigPath, - JSON.stringify( - { - extends: './tsconfig.base.json', - compilerOptions: { - paths: Object.fromEntries( - Object.entries(basePaths).flatMap(([key, value]) => { - if (key.endsWith('/*') && bazelPackageIds.has(key.slice(0, -2))) { - return []; - } - - if (bazelPackageIds.has(key)) { - return []; - } - - return [[key, value]]; - }) - ), - }, - }, - null, - 2 - ) - ); - Fs.utimesSync(baseTypeCheckConfigPath, baseStat.atime, baseStat.mtime); - created.add(baseTypeCheckConfigPath); - - // write tsconfig.type_check.json files for each project that is not the root - const queue = new Set(projects.map((p) => p.tsConfigPath)); - for (const path of queue) { - const tsconfigStat = Fs.statSync(path); - const parsed = parseTsconfig(path); - - const dir = Path.dirname(path); - const typeCheckConfigPath = Path.resolve(dir, 'tsconfig.type_check.json'); - const refs = parsed.kbn_references ?? []; - if (!isValidRefs(refs)) { - throw new Error(`expected valid TS refs in ${path}`); - } - - const typeCheckConfig = { - ...parsed, - extends: parsed.extends - ? toTypeCheckConfigPath(parsed.extends) - : rel(dir, baseTypeCheckConfigPath), - compilerOptions: { - ...parsed.compilerOptions, - composite: true, - rootDir: '.', - paths: undefined, - }, - kbn_references: undefined, - references: refs.map((ref) => ({ - path: toTypeCheckConfigPath(ref.path), - })), - }; - - Fs.writeFileSync(typeCheckConfigPath, JSON.stringify(typeCheckConfig, null, 2)); - Fs.utimesSync(typeCheckConfigPath, tsconfigStat.atime, tsconfigStat.mtime); - - created.add(typeCheckConfigPath); - - // add all the referenced config files to the queue if they're not already in it - for (const ref of refs) { - queue.add(Path.resolve(dir, ref.path)); - } - } - - return created; -} - -export async function runTypeCheckCli() { - run( - async ({ log, flagsReader, procRunner }) => { - if (flagsReader.boolean('clean-cache')) { - await asyncForEachWithLimit(PROJECTS, 10, async (proj) => { - await Fsp.rm(Path.resolve(proj.directory, 'target/types'), { - force: true, - recursive: true, - }); - }); - log.warning('Deleted all typescript caches'); - } - - await runBazel(['build', '//packages:build_types', '--show_result=1'], { - cwd: REPO_ROOT, - logPrefix: '\x1b[94m[bazel]\x1b[39m', - onErrorExit(code: any, output: any) { - throw createFailError( - `The bazel command that was running exited with code [${code}] and output: ${output}` - ); - }, - }); - - const bazelPackages = await discoverBazelPackages(REPO_ROOT); - - // if the tsconfig.refs.json file is not self-managed then make sure it has - // a reference to every composite project in the repo - await updateRootRefsConfig(log, bazelPackages); - - const projectFilter = flagsReader.path('project'); - - const projects = PROJECTS.filter((p) => { - return !p.disableTypeCheck && (!projectFilter || p.tsConfigPath === projectFilter); - }); - - const created = createTypeCheckConfigs(projects, bazelPackages); - - let pluginBuildResult; - try { - log.info(`Building TypeScript projects to check types...`); - - const relative = Path.relative( - REPO_ROOT, - projects.length === 1 ? projects[0].typeCheckConfigPath : ROOT_REFS_CONFIG_PATH - ); - - await procRunner.run('tsc', { - cmd: Path.relative(REPO_ROOT, require.resolve('typescript/bin/tsc')), - args: [ - '-b', - relative, - '--pretty', - ...(flagsReader.boolean('verbose') ? ['--verbose'] : []), - ], - cwd: REPO_ROOT, - wait: true, - }); - - pluginBuildResult = { failed: false }; - } catch (error) { - pluginBuildResult = { failed: true }; - } - - // cleanup - if (flagsReader.boolean('cleanup')) { - await cleanupRootRefsConfig(); - - await asyncForEachWithLimit(created, 40, async (path) => { - await Fsp.unlink(path); - }); - - await asyncForEachWithLimit(bazelPackages, 40, async (pkg) => { - const targetTypesPaths = Path.resolve( - REPO_ROOT, - 'bazel-bin', - pkg.normalizedRepoRelativeDir, - 'target_type' - ); - - await Fsp.rm(targetTypesPaths, { - force: true, - recursive: true, - }); - }); - } - - if (pluginBuildResult.failed) { - throw createFailError('Unable to build TS project refs'); - } - }, - { - description: ` - Run the TypeScript compiler without emitting files so that it can check types during development. - - Examples: - # check types in all projects - node scripts/type_check - - # check types in a single project - node scripts/type_check --project packages/kbn-pm/tsconfig.json - `, - flags: { - string: ['project'], - boolean: ['clean-cache', 'cleanup'], - default: { - cleanup: true, - }, - help: ` - --project [path] Path to a tsconfig.json file determines the project to check - --help Show this message - --clean-cache Delete any existing TypeScript caches before running type check - --no-cleanup Pass to avoid deleting the temporary tsconfig files written to disk - `, - }, - } - ); -} diff --git a/src/dev/typescript/ts_configfile.ts b/src/dev/typescript/ts_configfile.ts deleted file mode 100644 index 7998edcf80bcf..0000000000000 --- a/src/dev/typescript/ts_configfile.ts +++ /dev/null @@ -1,71 +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 Fs from 'fs'; -import Path from 'path'; - -import { parseConfigFileTextToJson } from 'typescript'; - -// yes, this is just `any`, but I'm hoping that TypeScript will give us some help here eventually -type TsConfigFile = ReturnType['config']; - -export function parseTsConfig(tsConfigPath: string): TsConfigFile { - const { error, config } = parseConfigFileTextToJson( - tsConfigPath, - Fs.readFileSync(tsConfigPath, 'utf8') - ); - - if (error) { - throw error; - } - - return config; -} - -export function getOutputsDeep(tsConfigPaths: string[]) { - const tsConfigs = new Map(); - - const read = (path: string) => { - const cached = tsConfigs.get(path); - if (cached) { - return cached; - } - - const config = parseTsConfig(path); - tsConfigs.set(path, config); - return config; - }; - - const outputDirs: string[] = []; - const seen = new Set(); - - const traverse = (path: string) => { - const config = read(path); - if (seen.has(config)) { - return; - } - seen.add(config); - - const dirname = Path.dirname(path); - const relativeOutDir: string | undefined = config.compilerOptions?.outDir; - if (relativeOutDir) { - outputDirs.push(Path.resolve(dirname, relativeOutDir)); - } - - const refs: undefined | Array<{ path: string }> = config.references; - for (const ref of refs ?? []) { - traverse(Path.resolve(dirname, ref.path)); - } - }; - - for (const path of tsConfigPaths) { - traverse(path); - } - - return outputDirs; -} diff --git a/src/fixtures/tsconfig.json b/src/fixtures/tsconfig.json index bd36efa965333..ceb00717fa6c4 100644 --- a/src/fixtures/tsconfig.json +++ b/src/fixtures/tsconfig.json @@ -1,15 +1,15 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "telemetry_collectors/**/*", ], "kbn_references": [ - { "path": "../core/tsconfig.json" }, - { "path": "../plugins/usage_collection/tsconfig.json" }, + "@kbn/usage-collection-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/advanced_settings/tsconfig.json b/src/plugins/advanced_settings/tsconfig.json index 921db12b89863..17a6f098a6185 100644 --- a/src/plugins/advanced_settings/tsconfig.json +++ b/src/plugins/advanced_settings/tsconfig.json @@ -1,20 +1,27 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", "server/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../management/tsconfig.json" }, - { "path": "../home/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../es_ui_shared/tsconfig.json" }, + "@kbn/core", + "@kbn/management-plugin", + "@kbn/home-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-react-plugin", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/analytics", + "@kbn/kibana-utils-plugin", + "@kbn/i18n-react", + "@kbn/expect", + "@kbn/monaco", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/bfetch/tsconfig.json b/src/plugins/bfetch/tsconfig.json index 829b781e8bd2c..dfc8dcab1c1ac 100644 --- a/src/plugins/bfetch/tsconfig.json +++ b/src/plugins/bfetch/tsconfig.json @@ -1,13 +1,18 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*", "index.ts"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/i18n", + "@kbn/config-schema", + "@kbn/std", + "@kbn/core-http-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/chart_expressions/expression_gauge/tsconfig.json b/src/plugins/chart_expressions/expression_gauge/tsconfig.json index 3ab82197cb9f8..0a778f80f7ca9 100644 --- a/src/plugins/chart_expressions/expression_gauge/tsconfig.json +++ b/src/plugins/chart_expressions/expression_gauge/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,12 +11,23 @@ ], "kbn_references": [ { "path": "../tsconfig.json" }, - { "path": "../../../core/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../presentation_util/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/field-formats-plugin", + "@kbn/charts-plugin", + "@kbn/visualizations-plugin", + "@kbn/coloring", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/analytics", + "@kbn/chart-icons", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/chart_expressions/expression_heatmap/tsconfig.json b/src/plugins/chart_expressions/expression_heatmap/tsconfig.json index 3ab82197cb9f8..051ed48547ec1 100644 --- a/src/plugins/chart_expressions/expression_heatmap/tsconfig.json +++ b/src/plugins/chart_expressions/expression_heatmap/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,12 +11,23 @@ ], "kbn_references": [ { "path": "../tsconfig.json" }, - { "path": "../../../core/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../presentation_util/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/field-formats-plugin", + "@kbn/charts-plugin", + "@kbn/visualizations-plugin", + "@kbn/i18n", + "@kbn/coloring", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/test-jest-helpers", + "@kbn/chart-icons", + "@kbn/kibana-react-plugin", + "@kbn/analytics", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/chart_expressions/expression_legacy_metric/tsconfig.json b/src/plugins/chart_expressions/expression_legacy_metric/tsconfig.json index 900bc4c8da266..e90c86b49baab 100644 --- a/src/plugins/chart_expressions/expression_legacy_metric/tsconfig.json +++ b/src/plugins/chart_expressions/expression_legacy_metric/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,12 +11,22 @@ ], "kbn_references": [ { "path": "../tsconfig.json" }, - { "path": "../../../core/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../presentation_util/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/presentation-util-plugin", + "@kbn/field-formats-plugin", + "@kbn/charts-plugin", + "@kbn/usage-collection-plugin", + "@kbn/visualizations-plugin", + "@kbn/i18n", + "@kbn/coloring", + "@kbn/utility-types", + "@kbn/kibana-utils-plugin", + "@kbn/analytics", + "@kbn/kibana-react-plugin", + "@kbn/ui-theme", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/chart_expressions/expression_metric/tsconfig.json b/src/plugins/chart_expressions/expression_metric/tsconfig.json index 3ab82197cb9f8..91f2f6ad1e8a2 100644 --- a/src/plugins/chart_expressions/expression_metric/tsconfig.json +++ b/src/plugins/chart_expressions/expression_metric/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,12 +11,22 @@ ], "kbn_references": [ { "path": "../tsconfig.json" }, - { "path": "../../../core/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../presentation_util/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/field-formats-plugin", + "@kbn/charts-plugin", + "@kbn/visualizations-plugin", + "@kbn/inspector-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/coloring", + "@kbn/kibana-utils-plugin", + "@kbn/ui-theme", + "@kbn/kibana-react-plugin", + "@kbn/analytics", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/chart_expressions/expression_partition_vis/tsconfig.json b/src/plugins/chart_expressions/expression_partition_vis/tsconfig.json index c899eae805aff..6bfe52529a6c1 100644 --- a/src/plugins/chart_expressions/expression_partition_vis/tsconfig.json +++ b/src/plugins/chart_expressions/expression_partition_vis/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,13 +11,25 @@ ], "kbn_references": [ { "path": "../tsconfig.json" }, - { "path": "../../../core/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../presentation_util/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" } + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/presentation-util-plugin", + "@kbn/data-plugin", + "@kbn/field-formats-plugin", + "@kbn/charts-plugin", + "@kbn/visualizations-plugin", + "@kbn/i18n", + "@kbn/coloring", + "@kbn/embeddable-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + "@kbn/analytics", + "@kbn/chart-icons", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/chart_expressions/expression_tagcloud/tsconfig.json b/src/plugins/chart_expressions/expression_tagcloud/tsconfig.json index 70951dc9e2c08..4fcbf1d0b9677 100644 --- a/src/plugins/chart_expressions/expression_tagcloud/tsconfig.json +++ b/src/plugins/chart_expressions/expression_tagcloud/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,13 +11,22 @@ ], "kbn_references": [ { "path": "../tsconfig.json" }, - { "path": "../../../core/tsconfig.json" }, - { "path": "../../presentation_util/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../kibana_utils/tsconfig.json" }, + "@kbn/core", + "@kbn/presentation-util-plugin", + "@kbn/expressions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/visualizations-plugin", + "@kbn/charts-plugin", + "@kbn/field-formats-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/utility-types", + "@kbn/coloring", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + "@kbn/analytics", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/chart_expressions/expression_xy/tsconfig.json b/src/plugins/chart_expressions/expression_xy/tsconfig.json index 62d9861684ccf..0e0820e82426d 100644 --- a/src/plugins/chart_expressions/expression_xy/tsconfig.json +++ b/src/plugins/chart_expressions/expression_xy/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,15 +11,27 @@ ], "kbn_references": [ { "path": "../tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../../core/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../data/tsconfig.json"}, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../ui_actions/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json"}, - { "path": "../../kibana_utils/tsconfig.json" }, - { "path": "../../event_annotation/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, + "@kbn/charts-plugin", + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/data-plugin", + "@kbn/usage-collection-plugin", + "@kbn/field-formats-plugin", + "@kbn/event-annotation-plugin", + "@kbn/visualizations-plugin", + "@kbn/coloring", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/embeddable-plugin", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/datemath", + "@kbn/chart-icons", + "@kbn/ui-theme", + "@kbn/analytics", + "@kbn/kibana-react-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/chart_expressions/tsconfig.json b/src/plugins/chart_expressions/tsconfig.json index 6890928b48d6c..7d29316e48f10 100644 --- a/src/plugins/chart_expressions/tsconfig.json +++ b/src/plugins/chart_expressions/tsconfig.json @@ -1,16 +1,16 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ "common/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, + "@kbn/core-execution-context-common", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/charts/tsconfig.json b/src/plugins/charts/tsconfig.json index 881263657efbc..42bbe987f45fa 100644 --- a/src/plugins/charts/tsconfig.json +++ b/src/plugins/charts/tsconfig.json @@ -1,14 +1,22 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" } + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/embeddable-plugin", + "@kbn/coloring", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/i18n-react", + "@kbn/ui-theme", + "@kbn/shared-ux-utility", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts b/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts index ddcb02a0ad45d..a8cb740003624 100644 --- a/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts +++ b/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts @@ -10,11 +10,7 @@ jest.mock('./mode/worker', () => { return { workerModule: { id: 'sense_editor/mode/worker', src: '' } }; }); -// @ts-ignore -window.Worker = function () { - this.postMessage = () => {}; - (this as unknown as { terminate: () => void }).terminate = () => {}; -}; +import '@kbn/web-worker-stub'; // @ts-ignore window.URL = { diff --git a/src/plugins/console/tsconfig.json b/src/plugins/console/tsconfig.json index cc44f6119f2de..77949a21f62cb 100644 --- a/src/plugins/console/tsconfig.json +++ b/src/plugins/console/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", // there is still a decent amount of JS in this plugin and we are taking // advantage of the fact that TS doesn't know the types of that code and // gives us `any`. Once that code is converted to .ts we can remove this @@ -12,13 +10,28 @@ }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../dev_tools/tsconfig.json" }, - { "path": "../es_ui_shared/tsconfig.json" }, - { "path": "../home/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../share/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" } + "@kbn/core", + "@kbn/dev-tools-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/share-plugin", + "@kbn/usage-collection-plugin", + "@kbn/i18n", + "@kbn/analytics", + "@kbn/utility-types", + "@kbn/i18n-react", + "@kbn/shared-ux-utility", + "@kbn/core-http-browser", + "@kbn/ace", + "@kbn/test-jest-helpers", + "@kbn/config-schema", + "@kbn/core-http-server", + "@kbn/core-http-router-server-internal", + "@kbn/web-worker-stub", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/controls/storybook/manager.ts b/src/plugins/controls/storybook/manager.ts index cc6ebbcfdaa75..9b981f8b58236 100644 --- a/src/plugins/controls/storybook/manager.ts +++ b/src/plugins/controls/storybook/manager.ts @@ -10,8 +10,7 @@ import { addons } from '@storybook/addons'; import { create } from '@storybook/theming'; import { PANEL_ID } from '@storybook/addon-actions'; -// @ts-expect-error There's probably a better way to do this. -import { registerThemeSwitcherAddon } from '@kbn/storybook/target_node/src/lib/register_theme_switcher_addon'; +import { registerThemeSwitcherAddon } from '@kbn/storybook/src/lib/register_theme_switcher_addon'; addons.setConfig({ theme: create({ diff --git a/src/plugins/controls/tsconfig.json b/src/plugins/controls/tsconfig.json index 75fa7069996ac..6aedcaf236950 100644 --- a/src/plugins/controls/tsconfig.json +++ b/src/plugins/controls/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "extraPublicDirs": ["common"], "include": [ @@ -16,13 +14,26 @@ "./jest_setup.ts" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../saved_objects/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/embeddable-plugin", + "@kbn/presentation-util-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-plugin", + "@kbn/unified-search-plugin", + "@kbn/es-query", + "@kbn/data-views-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/core-mount-utils-browser-internal", + "@kbn/datemath", + "@kbn/test-jest-helpers", + "@kbn/config-schema", + "@kbn/storybook", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/custom_integrations/tsconfig.json b/src/plugins/custom_integrations/tsconfig.json index 0fee0d2156ce9..8cee7c6515e62 100644 --- a/src/plugins/custom_integrations/tsconfig.json +++ b/src/plugins/custom_integrations/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../../typings/**/*", @@ -13,7 +11,16 @@ "storybook/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/ui-theme", + "@kbn/logging-mocks", + "@kbn/config-schema", + "@kbn/storybook", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/dashboard/tsconfig.json b/src/plugins/dashboard/tsconfig.json index 390fc6f6a0a5e..4e44429125dd4 100644 --- a/src/plugins/dashboard/tsconfig.json +++ b/src/plugins/dashboard/tsconfig.json @@ -1,32 +1,59 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["*.ts", ".storybook/**/*.ts", "common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../inspector/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../share/tsconfig.json" }, - { "path": "../controls/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../url_forwarding/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" }, - { "path": "../home/tsconfig.json" }, - { "path": "../navigation/tsconfig.json" }, - { "path": "../saved_objects_tagging_oss/tsconfig.json" }, - { "path": "../saved_objects/tsconfig.json" }, - { "path": "../screenshot_mode/tsconfig.json" }, - { "path": "../ui_actions/tsconfig.json" }, - { "path": "../charts/tsconfig.json" }, - { "path": "../visualizations/tsconfig.json" }, - { "path": "../../../x-pack/plugins/spaces/tsconfig.json" } + "@kbn/core", + "@kbn/inspector-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-views-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/share-plugin", + "@kbn/controls-plugin", + "@kbn/presentation-util-plugin", + "@kbn/url-forwarding-plugin", + "@kbn/usage-collection-plugin", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/home-plugin", + "@kbn/navigation-plugin", + "@kbn/saved-objects-tagging-oss-plugin", + "@kbn/saved-objects-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/ui-actions-plugin", + "@kbn/visualizations-plugin", + "@kbn/spaces-plugin", + "@kbn/config-schema", + "@kbn/utility-types", + "@kbn/es-query", + "@kbn/i18n", + "@kbn/data-view-editor-plugin", + "@kbn/unified-search-plugin", + "@kbn/shared-ux-page-analytics-no-data", + "@kbn/content-management-table-list", + "@kbn/i18n-react", + "@kbn/expressions-plugin", + "@kbn/field-formats-plugin", + "@kbn/test-jest-helpers", + "@kbn/core-application-browser", + "@kbn/ebt-tools", + "@kbn/shared-ux-button-exit-full-screen", + "@kbn/core-analytics-browser-mocks", + "@kbn/core-application-browser-mocks", + "@kbn/analytics", + "@kbn/safer-lodash-set", + "@kbn/core-notifications-browser-mocks", + "@kbn/core-overlays-browser-mocks", + "@kbn/core-theme-browser-mocks", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/core-saved-objects-common", + "@kbn/task-manager-plugin", + "@kbn/core-execution-context-common", + "@kbn/shared-ux-utility", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/data/tsconfig.json b/src/plugins/data/tsconfig.json index 415ec0795359b..48bb37d77ed95 100644 --- a/src/plugins/data/tsconfig.json +++ b/src/plugins/data/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -16,18 +14,40 @@ "../../../typings/index.d.ts" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../bfetch/tsconfig.json" }, - { "path": "../ui_actions/tsconfig.json" }, - { "path": "../share/tsconfig.json" }, - { "path": "../inspector/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../field_formats/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../screenshot_mode/tsconfig.json" }, - { "path": "../../../x-pack/plugins/task_manager/tsconfig.json" }, - { "path": "../../../x-pack/plugins/security/tsconfig.json" } + "@kbn/core", + "@kbn/bfetch-plugin", + "@kbn/ui-actions-plugin", + "@kbn/share-plugin", + "@kbn/inspector-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/field-formats-plugin", + "@kbn/data-views-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/task-manager-plugin", + "@kbn/security-plugin", + "@kbn/expressions-plugin", + "@kbn/field-types", + "@kbn/es-query", + "@kbn/expect", + "@kbn/datemath", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/utility-types-jest", + "@kbn/safer-lodash-set", + "@kbn/management-plugin", + "@kbn/test-jest-helpers", + "@kbn/core-notifications-browser-mocks", + "@kbn/std", + "@kbn/i18n-react", + "@kbn/analytics", + "@kbn/core-http-browser", + "@kbn/crypto-browser", + "@kbn/config", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/data_view_editor/tsconfig.json b/src/plugins/data_view_editor/tsconfig.json index 6a0f779db2f9c..3f1744281db90 100644 --- a/src/plugins/data_view_editor/tsconfig.json +++ b/src/plugins/data_view_editor/tsconfig.json @@ -1,19 +1,24 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../es_ui_shared/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/i18n-react", + "@kbn/usage-collection-plugin", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/ui-theme", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/data_view_field_editor/tsconfig.json b/src/plugins/data_view_field_editor/tsconfig.json index c4f3c835bff02..264c9fdb59035 100644 --- a/src/plugins/data_view_field_editor/tsconfig.json +++ b/src/plugins/data_view_field_editor/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../../typings/**/*", @@ -13,12 +11,23 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../es_ui_shared/tsconfig.json" }, - { "path": "../field_formats/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/field-formats-plugin", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/usage-collection-plugin", + "@kbn/monaco", + "@kbn/analytics", + "@kbn/i18n-react", + "@kbn/field-types", + "@kbn/utility-types", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/data_view_management/tsconfig.json b/src/plugins/data_view_management/tsconfig.json index 9d2b60cc69543..5fc549c32a463 100644 --- a/src/plugins/data_view_management/tsconfig.json +++ b/src/plugins/data_view_management/tsconfig.json @@ -1,26 +1,39 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", "server/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../management/tsconfig.json" }, - { "path": "../url_forwarding/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../es_ui_shared/tsconfig.json" }, - { "path": "../data_view_field_editor/tsconfig.json" }, - { "path": "../data_view_editor/tsconfig.json" }, - { "path": "../unified_search/tsconfig.json" }, - { "path": "../saved_objects_management/tsconfig.json" }, - { "path": "../../../x-pack/plugins/spaces/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/management-plugin", + "@kbn/url-forwarding-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/data-view-field-editor-plugin", + "@kbn/data-view-editor-plugin", + "@kbn/unified-search-plugin", + "@kbn/saved-objects-management-plugin", + "@kbn/spaces-plugin", + "@kbn/i18n", + "@kbn/field-formats-plugin", + "@kbn/data-views-plugin", + "@kbn/i18n-react", + "@kbn/monaco", + "@kbn/field-types", + "@kbn/es-query", + "@kbn/std", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-prompt-no-data-views", + "@kbn/shared-ux-link-redirect-app", + "@kbn/utility-types-jest", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/data_views/tsconfig.json b/src/plugins/data_views/tsconfig.json index 5ac2028373852..614b1beda1115 100644 --- a/src/plugins/data_views/tsconfig.json +++ b/src/plugins/data_views/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -15,11 +13,21 @@ "server/**/*.json" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../field_formats/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" } + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/field-formats-plugin", + "@kbn/expressions-plugin", + "@kbn/core-notifications-browser", + "@kbn/es-query", + "@kbn/field-types", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/core-test-helpers-http-setup-browser", + "@kbn/config-schema", + "@kbn/utility-types-jest", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/dev_tools/tsconfig.json b/src/plugins/dev_tools/tsconfig.json index d7addc6650756..314749c7c7f53 100644 --- a/src/plugins/dev_tools/tsconfig.json +++ b/src/plugins/dev_tools/tsconfig.json @@ -1,14 +1,19 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../url_forwarding/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" } + "@kbn/core", + "@kbn/url-forwarding-plugin", + "@kbn/management-plugin", + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/ui-theme", + "@kbn/kibana-react-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/discover/public/application/context/context_app.scss b/src/plugins/discover/public/application/context/context_app.scss index fa29b0513055c..13593a7ed32dd 100644 --- a/src/plugins/discover/public/application/context/context_app.scss +++ b/src/plugins/discover/public/application/context/context_app.scss @@ -1,4 +1,4 @@ -@import 'src/core/public/mixins'; +@import '../../../../../core/public/mixins'; .dscDocsPage { @include kibanaFullBodyHeight(54px); // action bar height diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.scss b/src/plugins/discover/public/application/main/components/layout/discover_layout.scss index a65c22b57b2ab..b2d9ab190e075 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.scss +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.scss @@ -1,4 +1,4 @@ -@import 'src/core/public/mixins'; +@import '../../../../../../../core/public/mixins'; discover-app { flex-grow: 1; diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx index 5b58cda5e0b96..eb39b2f45ab94 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx @@ -167,7 +167,7 @@ describe('Discover component', () => { expect( container.querySelector('[data-test-subj="unifiedHistogramChartOptionsToggle"]') ).toBeNull(); - }); + }, 10000); test('selected data view with time field displays chart toggle', async () => { const container = document.createElement('div'); @@ -206,16 +206,16 @@ describe('Discover component', () => { test('should be opened if discover:sidebarClosed was not set', async () => { const component = await mountComponent(dataViewWithTimefieldMock, undefined); expect(component.find(DiscoverSidebar).length).toBe(1); - }); + }, 10000); test('should be opened if discover:sidebarClosed is false', async () => { const component = await mountComponent(dataViewWithTimefieldMock, false); expect(component.find(DiscoverSidebar).length).toBe(1); - }); + }, 10000); test('should be closed if discover:sidebarClosed is true', async () => { const component = await mountComponent(dataViewWithTimefieldMock, true); expect(component.find(DiscoverSidebar).length).toBe(0); - }); + }, 10000); }); }); diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json index 4239fdfe2ea8d..c8974adadb359 100644 --- a/src/plugins/discover/tsconfig.json +++ b/src/plugins/discover/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", // there is still a decent amount of JS in this plugin and we are taking // advantage of the fact that TS doesn't know the types of that code and // gives us `any`. Once that code is converted to .ts we can remove this @@ -12,32 +10,55 @@ }, "include": ["common/**/*", "public/**/*", "server/**/*", "../../../typings/**/*", ".storybook/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../charts/tsconfig.json" }, - { "path": "../saved_search/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" }, - { "path": "../inspector/tsconfig.json" }, - { "path": "../url_forwarding/tsconfig.json" }, - { "path": "../saved_objects/tsconfig.json" }, - { "path": "../saved_objects_finder/tsconfig.json" }, - { "path": "../navigation/tsconfig.json" }, - { "path": "../ui_actions/tsconfig.json" }, - { "path": "../home/tsconfig.json" }, - { "path": "../share/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../data_view_field_editor/tsconfig.json"}, - { "path": "../field_formats/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../unified_search/tsconfig.json" }, - { "path": "../unified_field_list/tsconfig.json" }, - { "path": "../../../x-pack/plugins/spaces/tsconfig.json" }, - { "path": "../data_view_editor/tsconfig.json" }, - { "path": "../../../x-pack/plugins/triggers_actions_ui/tsconfig.json" }, - { "path": "../saved_objects_tagging_oss/tsconfig.json" }, - { "path": "../unified_histogram/tsconfig.json" } + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/saved-search-plugin", + "@kbn/data-plugin", + "@kbn/expressions-plugin", + "@kbn/embeddable-plugin", + "@kbn/inspector-plugin", + "@kbn/url-forwarding-plugin", + "@kbn/saved-objects-plugin", + "@kbn/saved-objects-finder-plugin", + "@kbn/navigation-plugin", + "@kbn/ui-actions-plugin", + "@kbn/home-plugin", + "@kbn/share-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-view-field-editor-plugin", + "@kbn/field-formats-plugin", + "@kbn/data-views-plugin", + "@kbn/unified-search-plugin", + "@kbn/unified-field-list-plugin", + "@kbn/spaces-plugin", + "@kbn/data-view-editor-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/saved-objects-tagging-oss-plugin", + "@kbn/unified-histogram-plugin", + "@kbn/analytics", + "@kbn/saved-objects-management-plugin", + "@kbn/lens-plugin", + "@kbn/es-query", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/std", + "@kbn/core-ui-settings-browser", + "@kbn/i18n-react", + "@kbn/datemath", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-page-analytics-no-data", + "@kbn/alerting-plugin", + "@kbn/ui-theme", + "@kbn/react-field", + "@kbn/monaco", + "@kbn/core-notifications-browser", + "@kbn/rison", + "@kbn/config-schema", + "@kbn/storybook", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/embeddable/tsconfig.json b/src/plugins/embeddable/tsconfig.json index 6943f5fdc5471..645b3ae3dfe08 100644 --- a/src/plugins/embeddable/tsconfig.json +++ b/src/plugins/embeddable/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ ".storybook/**/*", @@ -12,11 +10,25 @@ "server/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../inspector/tsconfig.json" }, - { "path": "../saved_objects/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../ui_actions/tsconfig.json" }, + "@kbn/core", + "@kbn/inspector-plugin", + "@kbn/saved-objects-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/ui-actions-plugin", + "@kbn/i18n-react", + "@kbn/storybook", + "@kbn/utility-types", + "@kbn/es-query", + "@kbn/core-theme-browser", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/std", + "@kbn/expressions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/analytics", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/shared_imports.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/shared_imports.ts index 113d33dba7100..744f837ea1bb0 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/shared_imports.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/shared_imports.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -// eslint-disable-next-line import/no-extraneous-dependencies export type { TestBed } from '@kbn/test-jest-helpers'; -// eslint-disable-next-line import/no-extraneous-dependencies +// eslint-disable-next-line @kbn/imports/no_boundary_crossing export { registerTestBed, getRandomString } from '@kbn/test-jest-helpers'; diff --git a/src/plugins/es_ui_shared/tsconfig.json b/src/plugins/es_ui_shared/tsconfig.json index 5cb4f3ddfffa7..b88684db55567 100644 --- a/src/plugins/es_ui_shared/tsconfig.json +++ b/src/plugins/es_ui_shared/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "__packages_do_not_import__/**/*", @@ -15,7 +13,18 @@ ".storybook/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" } + "@kbn/core", + "@kbn/data-views-plugin", + "@kbn/i18n", + "@kbn/shared-ux-page-kibana-template", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/share-plugin", + "@kbn/kibana-react-plugin", + "@kbn/safer-lodash-set", + "@kbn/storybook", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/event_annotation/tsconfig.json b/src/plugins/event_annotation/tsconfig.json index 21d8b73900569..0ee8e0ee8f19f 100644 --- a/src/plugins/event_annotation/tsconfig.json +++ b/src/plugins/event_annotation/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,14 +9,18 @@ "server/**/*" ], "kbn_references": [ - { - "path": "../../core/tsconfig.json" - }, - { - "path": "../expressions/tsconfig.json" - }, - { - "path": "../data/tsconfig.json" - }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/data-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/data-views-plugin", + "@kbn/inspector-plugin", + "@kbn/core-ui-settings-browser", + "@kbn/datemath", + "@kbn/ui-theme", + ], + "exclude": [ + "target/**/*", ] } \ No newline at end of file diff --git a/src/plugins/expression_error/tsconfig.json b/src/plugins/expression_error/tsconfig.json index 419685fe65a31..1cda452adcb70 100644 --- a/src/plugins/expression_error/tsconfig.json +++ b/src/plugins/expression_error/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -12,8 +10,14 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, + "@kbn/core", + "@kbn/presentation-util-plugin", + "@kbn/expressions-plugin", + "@kbn/i18n", + "@kbn/kibana-react-plugin", + "@kbn/i18n-react", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/expression_image/tsconfig.json b/src/plugins/expression_image/tsconfig.json index f77c026619110..8aa60e9f6e428 100644 --- a/src/plugins/expression_image/tsconfig.json +++ b/src/plugins/expression_image/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,8 +11,14 @@ "__fixtures__/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, + "@kbn/core", + "@kbn/presentation-util-plugin", + "@kbn/expressions-plugin", + "@kbn/expect", + "@kbn/i18n", + "@kbn/kibana-react-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/expression_metric/tsconfig.json b/src/plugins/expression_metric/tsconfig.json index f77c026619110..de672f871a83e 100644 --- a/src/plugins/expression_metric/tsconfig.json +++ b/src/plugins/expression_metric/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,8 +11,13 @@ "__fixtures__/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, + "@kbn/core", + "@kbn/presentation-util-plugin", + "@kbn/expressions-plugin", + "@kbn/i18n", + "@kbn/kibana-react-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/expression_repeat_image/tsconfig.json b/src/plugins/expression_repeat_image/tsconfig.json index 419685fe65a31..c167e9b9e684d 100644 --- a/src/plugins/expression_repeat_image/tsconfig.json +++ b/src/plugins/expression_repeat_image/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -12,8 +10,14 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, + "@kbn/core", + "@kbn/presentation-util-plugin", + "@kbn/expressions-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/expression_reveal_image/tsconfig.json b/src/plugins/expression_reveal_image/tsconfig.json index 419685fe65a31..c167e9b9e684d 100644 --- a/src/plugins/expression_reveal_image/tsconfig.json +++ b/src/plugins/expression_reveal_image/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -12,8 +10,14 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, + "@kbn/core", + "@kbn/presentation-util-plugin", + "@kbn/expressions-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/expression_shape/tsconfig.json b/src/plugins/expression_shape/tsconfig.json index f77c026619110..2c3979e83314a 100644 --- a/src/plugins/expression_shape/tsconfig.json +++ b/src/plugins/expression_shape/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,8 +11,14 @@ "__fixtures__/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, + "@kbn/core", + "@kbn/presentation-util-plugin", + "@kbn/expressions-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/expressions/tsconfig.json b/src/plugins/expressions/tsconfig.json index 890274c1b3911..1f1128ae6ab19 100644 --- a/src/plugins/expressions/tsconfig.json +++ b/src/plugins/expressions/tsconfig.json @@ -1,16 +1,23 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*", "./index.ts"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../inspector/tsconfig.json" }, - { "path": "../field_formats/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/inspector-plugin", + "@kbn/field-formats-plugin", + "@kbn/logging", + "@kbn/utility-types", + "@kbn/interpreter", + "@kbn/i18n", + "@kbn/std", + "@kbn/core-execution-context-common", + "@kbn/tinymath", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/field_formats/tsconfig.json b/src/plugins/field_formats/tsconfig.json index 4838076f81cd3..754b3b993cb06 100644 --- a/src/plugins/field_formats/tsconfig.json +++ b/src/plugins/field_formats/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -13,5 +11,14 @@ "common/**/*.json", "public/**/*.json" ], - "kbn_references": [{ "path": "../../core/tsconfig.json" }] + "kbn_references": [ + "@kbn/core", + "@kbn/field-types", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", + ] } diff --git a/src/plugins/files/tsconfig.json b/src/plugins/files/tsconfig.json index 7b677de51dab0..02b5acc39ff80 100644 --- a/src/plugins/files/tsconfig.json +++ b/src/plugins/files/tsconfig.json @@ -1,14 +1,34 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*", ".storybook/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../../../x-pack/plugins/security/tsconfig.json" }, + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/security-plugin", + "@kbn/config-schema", + "@kbn/shared-ux-file-types", + "@kbn/kibana-utils-plugin", + "@kbn/shared-ux-file-mocks", + "@kbn/utility-types-jest", + "@kbn/core-application-common", + "@kbn/features-plugin", + "@kbn/i18n", + "@kbn/core-analytics-server", + "@kbn/utility-types", + "@kbn/es-query", + "@kbn/core-test-helpers-kbn-server", + "@kbn/ebt-tools", + "@kbn/core-http-router-server-internal", + "@kbn/core-elasticsearch-server", + "@kbn/std", + "@kbn/core-saved-objects-api-server", + "@kbn/core-logging-server-mocks", + "@kbn/ecs", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/files_management/tsconfig.json b/src/plugins/files_management/tsconfig.json index f46c7f9262535..a8852fcb70395 100644 --- a/src/plugins/files_management/tsconfig.json +++ b/src/plugins/files_management/tsconfig.json @@ -1,14 +1,20 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*", ".storybook/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../files/tsconfig.json" }, - { "path": "../management/tsconfig.json" } + "@kbn/core", + "@kbn/files-plugin", + "@kbn/management-plugin", + "@kbn/i18n", + "@kbn/content-management-table-list", + "@kbn/kibana-react-plugin", + "@kbn/i18n-react", + "@kbn/shared-ux-file-image", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/guided_onboarding/tsconfig.json b/src/plugins/guided_onboarding/tsconfig.json index 4833767f0d6ec..42026215e18fd 100644 --- a/src/plugins/guided_onboarding/tsconfig.json +++ b/src/plugins/guided_onboarding/tsconfig.json @@ -1,19 +1,25 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { - "path": "../../core/tsconfig.json" - }, - { - "path": "../kibana_react/tsconfig.json" - }, - { "path": "../../../x-pack/plugins/cloud/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/cloud-plugin", + "@kbn/guided-onboarding", + "@kbn/i18n-react", + "@kbn/core-application-browser-mocks", + "@kbn/core-notifications-browser-mocks", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/core-http-browser", + "@kbn/core-http-browser-mocks", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/home/tsconfig.json b/src/plugins/home/tsconfig.json index b7c8c94e30b8b..693c8189c504f 100644 --- a/src/plugins/home/tsconfig.json +++ b/src/plugins/home/tsconfig.json @@ -1,21 +1,38 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": ["common/**/*", "public/**/*", "server/**/*", "config.ts", ".storybook/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../custom_integrations/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../share/tsconfig.json" }, - { "path": "../url_forwarding/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../guided_onboarding/tsconfig.json" }, - { "path": "../../../x-pack/plugins/cloud/tsconfig.json" }, + "@kbn/core", + "@kbn/data-views-plugin", + "@kbn/custom-integrations-plugin", + "@kbn/kibana-react-plugin", + "@kbn/share-plugin", + "@kbn/url-forwarding-plugin", + "@kbn/usage-collection-plugin", + "@kbn/guided-onboarding-plugin", + "@kbn/cloud-plugin", + "@kbn/i18n", + "@kbn/home-sample-data-tab", + "@kbn/analytics", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-page-kibana-template", + "@kbn/utility-types", + "@kbn/guided-onboarding", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/ui-theme", + "@kbn/config-schema", + "@kbn/utility-types-jest", + "@kbn/es-query", + "@kbn/ebt-tools", + "@kbn/core-analytics-server", + "@kbn/storybook", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/image_embeddable/public/imports.ts b/src/plugins/image_embeddable/public/imports.ts index 1761cc5d05a38..5f3c04044acba 100644 --- a/src/plugins/image_embeddable/public/imports.ts +++ b/src/plugins/image_embeddable/public/imports.ts @@ -16,7 +16,7 @@ export type { ScopedFilesClient, } from '@kbn/files-plugin/public'; -export type { FileImageMetadata } from '@kbn/shared-ux-file-types/'; +export type { FileImageMetadata } from '@kbn/shared-ux-file-types'; export type { IContainer, diff --git a/src/plugins/image_embeddable/tsconfig.json b/src/plugins/image_embeddable/tsconfig.json index c3cec07779c30..4d1ba66af6c02 100644 --- a/src/plugins/image_embeddable/tsconfig.json +++ b/src/plugins/image_embeddable/tsconfig.json @@ -1,17 +1,26 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true + "outDir": "target/types", }, "include": ["public/**/*", "common/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../files/tsconfig.json" } + "@kbn/core", + "@kbn/embeddable-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/files-plugin", + "@kbn/shared-ux-file-context", + "@kbn/shared-ux-file-upload", + "@kbn/shared-ux-file-picker", + "@kbn/shared-ux-file-types", + "@kbn/i18n-react", + "@kbn/shared-ux-file-mocks", + "@kbn/i18n", + "@kbn/core-http-browser", + "@kbn/shared-ux-file-image", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/input_control_vis/tsconfig.json b/src/plugins/input_control_vis/tsconfig.json index 0fd1cae17a21d..1e3e1f4f00593 100644 --- a/src/plugins/input_control_vis/tsconfig.json +++ b/src/plugins/input_control_vis/tsconfig.json @@ -1,21 +1,28 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", "server/**/*", ], "kbn_references": [ - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../data/tsconfig.json"}, - { "path": "../data_views/tsconfig.json"}, - { "path": "../expressions/tsconfig.json" }, - { "path": "../visualizations/tsconfig.json" }, - { "path": "../vis_default_editor/tsconfig.json" }, - { "path": "../unified_search/tsconfig.json" } + "@kbn/kibana-react-plugin", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/expressions-plugin", + "@kbn/visualizations-plugin", + "@kbn/unified-search-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/core", + "@kbn/es-query", + "@kbn/expect", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/inspector/tsconfig.json b/src/plugins/inspector/tsconfig.json index 5ccf9c81aee71..11b753d7ae298 100644 --- a/src/plugins/inspector/tsconfig.json +++ b/src/plugins/inspector/tsconfig.json @@ -1,14 +1,19 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "index.ts"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../share/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/share-plugin", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/monaco", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/interactive_setup/tsconfig.json b/src/plugins/interactive_setup/tsconfig.json index d3b0e79241850..f0dcc93a49c11 100644 --- a/src/plugins/interactive_setup/tsconfig.json +++ b/src/plugins/interactive_setup/tsconfig.json @@ -1,10 +1,26 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], - "kbn_references": [{ "path": "../../core/tsconfig.json" }] + "kbn_references": [ + "@kbn/core", + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/ui-theme", + "@kbn/core-http-browser", + "@kbn/core-status-common-internal", + "@kbn/safer-lodash-set", + "@kbn/test-jest-helpers", + "@kbn/config-schema", + "@kbn/utility-types", + "@kbn/std", + "@kbn/utils", + "@kbn/core-logging-server-mocks", + "@kbn/core-preboot-server", + ], + "exclude": [ + "target/**/*", + ] } diff --git a/src/plugins/kibana_overview/tsconfig.json b/src/plugins/kibana_overview/tsconfig.json index 98d5602cbd1a0..5630613c4bf17 100644 --- a/src/plugins/kibana_overview/tsconfig.json +++ b/src/plugins/kibana_overview/tsconfig.json @@ -1,22 +1,32 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", "common/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../../plugins/navigation/tsconfig.json" }, - { "path": "../../plugins/data/tsconfig.json" }, - { "path": "../../plugins/home/tsconfig.json" }, - { "path": "../../plugins/newsfeed/tsconfig.json" }, - { "path": "../../plugins/usage_collection/tsconfig.json" }, - { "path": "../../plugins/kibana_react/tsconfig.json" }, - { "path": "../../plugins/data_view_editor/tsconfig.json" } + "@kbn/core", + "@kbn/navigation-plugin", + "@kbn/home-plugin", + "@kbn/newsfeed-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-view-editor-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/data-views-plugin", + "@kbn/share-plugin", + "@kbn/analytics", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-page-kibana-template", + "@kbn/shared-ux-page-analytics-no-data", + "@kbn/shared-ux-avatar-solution", + "@kbn/shared-ux-link-redirect-app", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/kibana_react/tsconfig.json b/src/plugins/kibana_react/tsconfig.json index 3469a30024b54..f36d691c67ac6 100644 --- a/src/plugins/kibana_react/tsconfig.json +++ b/src/plugins/kibana_react/tsconfig.json @@ -1,10 +1,20 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [".storybook/**/*", "common/**/*", "public/**/*", "../../../typings/**/*"], - "kbn_references": [{ "path": "../kibana_utils/tsconfig.json" }] + "kbn_references": [ + "@kbn/kibana-utils-plugin", + "@kbn/storybook", + "@kbn/ui-theme", + "@kbn/core", + "@kbn/monaco", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/i18n-react", + ], + "exclude": [ + "target/**/*", + ] } diff --git a/src/plugins/kibana_usage_collection/tsconfig.json b/src/plugins/kibana_usage_collection/tsconfig.json index 2ad8ff44a3128..1fc711d49fdaf 100644 --- a/src/plugins/kibana_usage_collection/tsconfig.json +++ b/src/plugins/kibana_usage_collection/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,8 +11,14 @@ "../../../typings/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../../plugins/usage_collection/tsconfig.json" }, - { "path": "../../plugins/telemetry/tsconfig.json" }, + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/analytics-client", + "@kbn/i18n", + "@kbn/logging", + "@kbn/core-test-helpers-kbn-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/kibana_utils/tsconfig.json b/src/plugins/kibana_utils/tsconfig.json index 1b5d5491ff28a..fed20365ae6d3 100644 --- a/src/plugins/kibana_utils/tsconfig.json +++ b/src/plugins/kibana_utils/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -13,5 +11,17 @@ "index.ts", "../../../typings/**/*" ], - "kbn_references": [{ "path": "../../core/tsconfig.json" }] + "kbn_references": [ + "@kbn/core", + "@kbn/expect", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/utility-types-jest", + "@kbn/test-jest-helpers", + "@kbn/rison", + "@kbn/crypto-browser", + ], + "exclude": [ + "target/**/*", + ] } diff --git a/src/plugins/management/tsconfig.json b/src/plugins/management/tsconfig.json index 27031a7f93243..1270aef15b63f 100644 --- a/src/plugins/management/tsconfig.json +++ b/src/plugins/management/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,9 +10,17 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../home/tsconfig.json"}, - { "path": "../kibana_react/tsconfig.json"}, - { "path": "../kibana_utils/tsconfig.json"} + "@kbn/core", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/utility-types", + "@kbn/share-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/shared-ux-page-kibana-template", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/maps_ems/tsconfig.json b/src/plugins/maps_ems/tsconfig.json index 0060910ae4e0a..65a655abedffd 100644 --- a/src/plugins/maps_ems/tsconfig.json +++ b/src/plugins/maps_ems/tsconfig.json @@ -1,13 +1,16 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*", "./config.ts"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../../../x-pack/plugins/licensing/tsconfig.json" } + "@kbn/core", + "@kbn/licensing-plugin", + "@kbn/i18n", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/navigation/tsconfig.json b/src/plugins/navigation/tsconfig.json index 5586a0d795ebd..b23ee2de840eb 100644 --- a/src/plugins/navigation/tsconfig.json +++ b/src/plugins/navigation/tsconfig.json @@ -1,15 +1,18 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/unified-search-plugin", + "@kbn/es-query", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/newsfeed/tsconfig.json b/src/plugins/newsfeed/tsconfig.json index 051ecbe4f202c..b10a878fb295b 100644 --- a/src/plugins/newsfeed/tsconfig.json +++ b/src/plugins/newsfeed/tsconfig.json @@ -1,14 +1,19 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*", "server/**/*", "common/*", "../../../typings/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json"}, - { "path": "../screenshot_mode/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/presentation_util/tsconfig.json b/src/plugins/presentation_util/tsconfig.json index 8d0b5927980b4..c0c69200676bd 100644 --- a/src/plugins/presentation_util/tsconfig.json +++ b/src/plugins/presentation_util/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -14,10 +12,23 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../saved_objects/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../data/tsconfig.json" } + "@kbn/core", + "@kbn/saved-objects-plugin", + "@kbn/embeddable-plugin", + "@kbn/kibana-react-plugin", + "@kbn/i18n", + "@kbn/expressions-plugin", + "@kbn/data-views-plugin", + "@kbn/i18n-react", + "@kbn/monaco", + "@kbn/es-query", + "@kbn/field-formats-plugin", + "@kbn/interpreter", + "@kbn/react-field", + "@kbn/config-schema", + "@kbn/storybook", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/saved_objects/tsconfig.json b/src/plugins/saved_objects/tsconfig.json index fbc175869da2e..d35fe2e1cc183 100644 --- a/src/plugins/saved_objects/tsconfig.json +++ b/src/plugins/saved_objects/tsconfig.json @@ -1,15 +1,22 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/i18n", + "@kbn/data-views-plugin", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/utility-types", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/saved_objects_finder/tsconfig.json b/src/plugins/saved_objects_finder/tsconfig.json index 197d86c7b1435..6d3b7ebaa6900 100644 --- a/src/plugins/saved_objects_finder/tsconfig.json +++ b/src/plugins/saved_objects_finder/tsconfig.json @@ -1,13 +1,18 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../saved_objects_management/tsconfig.json" } + "@kbn/core", + "@kbn/saved-objects-management-plugin", + "@kbn/test-jest-helpers", + "@kbn/saved-objects-tagging-oss-plugin", + "@kbn/i18n", + "@kbn/saved-objects-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/saved_objects_management/tsconfig.json b/src/plugins/saved_objects_management/tsconfig.json index c6c8e80f82341..cad061f1a27e0 100644 --- a/src/plugins/saved_objects_management/tsconfig.json +++ b/src/plugins/saved_objects_management/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,12 +9,23 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../home/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../management/tsconfig.json" }, - { "path": "../saved_objects_tagging_oss/tsconfig.json" }, - { "path": "../../../x-pack/plugins/spaces/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/management-plugin", + "@kbn/saved-objects-tagging-oss-plugin", + "@kbn/spaces-plugin", + "@kbn/i18n", + "@kbn/data-views-plugin", + "@kbn/utility-types", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/core-saved-objects-api-server", + "@kbn/monaco", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/saved_objects_tagging_oss/tsconfig.json b/src/plugins/saved_objects_tagging_oss/tsconfig.json index 1126b3175a76e..6b98cba4cbd12 100644 --- a/src/plugins/saved_objects_tagging_oss/tsconfig.json +++ b/src/plugins/saved_objects_tagging_oss/tsconfig.json @@ -1,16 +1,17 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", "public/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../saved_objects/tsconfig.json" }, + "@kbn/core", + "@kbn/saved-objects-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/saved_search/tsconfig.json b/src/plugins/saved_search/tsconfig.json index 785abeea70a3e..286b11f97c36e 100644 --- a/src/plugins/saved_search/tsconfig.json +++ b/src/plugins/saved_search/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,10 +10,14 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../../../x-pack/plugins/spaces/tsconfig.json" }, - { "path": "../saved_objects_tagging_oss/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/spaces-plugin", + "@kbn/saved-objects-tagging-oss-plugin", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/screenshot_mode/tsconfig.json b/src/plugins/screenshot_mode/tsconfig.json index 5762571bd5bbd..24dfeef9ca2e5 100644 --- a/src/plugins/screenshot_mode/tsconfig.json +++ b/src/plugins/screenshot_mode/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,6 +9,10 @@ "server/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, + "@kbn/core", + "@kbn/utility-types-jest", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/share/tsconfig.json b/src/plugins/share/tsconfig.json index 80ef97d5006cc..f0d79515d0dcf 100644 --- a/src/plugins/share/tsconfig.json +++ b/src/plugins/share/tsconfig.json @@ -1,14 +1,19 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/telemetry/tsconfig.json b/src/plugins/telemetry/tsconfig.json index 7fc00b85008c4..adb252c1665e2 100644 --- a/src/plugins/telemetry/tsconfig.json +++ b/src/plugins/telemetry/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -15,13 +13,27 @@ "schema/oss_root.json", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../../plugins/home/tsconfig.json" }, - { "path": "../../plugins/kibana_react/tsconfig.json" }, - { "path": "../../plugins/kibana_utils/tsconfig.json" }, - { "path": "../../plugins/screenshot_mode/tsconfig.json" }, - { "path": "../../plugins/telemetry_collection_manager/tsconfig.json" }, - { "path": "../../plugins/usage_collection/tsconfig.json" }, - { "path": "../../../x-pack/plugins/security/tsconfig.json" } + "@kbn/core", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/telemetry-collection-manager-plugin", + "@kbn/usage-collection-plugin", + "@kbn/security-plugin", + "@kbn/analytics-shippers-elastic-v3-browser", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-utility", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/analytics-shippers-elastic-v3-server", + "@kbn/config-schema", + "@kbn/utils", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-utils-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/telemetry_collection_manager/tsconfig.json b/src/plugins/telemetry_collection_manager/tsconfig.json index cd505b02a02f5..f201a8875c8dc 100644 --- a/src/plugins/telemetry_collection_manager/tsconfig.json +++ b/src/plugins/telemetry_collection_manager/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -11,7 +9,10 @@ "common/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../../plugins/usage_collection/tsconfig.json" } + "@kbn/core", + "@kbn/usage-collection-plugin" + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/telemetry_management_section/tsconfig.json b/src/plugins/telemetry_management_section/tsconfig.json index 6ced5687dd321..ebdad6eb86612 100644 --- a/src/plugins/telemetry_management_section/tsconfig.json +++ b/src/plugins/telemetry_management_section/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -11,16 +9,15 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../telemetry/tsconfig.json" }, - { "path": "../ui_actions/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../home/tsconfig.json" }, - { "path": "../bfetch/tsconfig.json"}, - { "path": "../data/tsconfig.json"}, - { "path": "../advanced_settings/tsconfig.json" }, - { "path": "../management/tsconfig.json"} + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/telemetry-plugin", + "@kbn/advanced-settings-plugin", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/ui_actions/tsconfig.json b/src/plugins/ui_actions/tsconfig.json index 2bd694005d435..f1a83bc52b582 100644 --- a/src/plugins/ui_actions/tsconfig.json +++ b/src/plugins/ui_actions/tsconfig.json @@ -1,16 +1,21 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-views-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/ui-theme", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/ui_actions_enhanced/tsconfig.json b/src/plugins/ui_actions_enhanced/tsconfig.json index c0d3e64038dc4..ccb424b83a1b0 100644 --- a/src/plugins/ui_actions_enhanced/tsconfig.json +++ b/src/plugins/ui_actions_enhanced/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", @@ -12,12 +10,24 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../ui_actions/tsconfig.json" }, - { "path": "../../../x-pack/plugins/licensing/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/ui-actions-plugin", + "@kbn/licensing-plugin", + "@kbn/es-query", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/i18n-react", + "@kbn/handlebars", + "@kbn/rison", + "@kbn/datemath", + "@kbn/monaco", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/unified_field_list/tsconfig.json b/src/plugins/unified_field_list/tsconfig.json index 82d06d8618461..23726803a1096 100644 --- a/src/plugins/unified_field_list/tsconfig.json +++ b/src/plugins/unified_field_list/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../typings/**/*", @@ -12,12 +10,26 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../charts/tsconfig.json" }, - { "path": "../ui_actions/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/data-views-plugin", + "@kbn/data-plugin", + "@kbn/charts-plugin", + "@kbn/ui-actions-plugin", + "@kbn/datemath", + "@kbn/es-types", + "@kbn/es-query", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/field-formats-plugin", + "@kbn/i18n-react", + "@kbn/analytics", + "@kbn/config-schema", + "@kbn/core-lifecycle-browser", + "@kbn/react-field", + "@kbn/field-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/unified_histogram/tsconfig.json b/src/plugins/unified_histogram/tsconfig.json index 9c6213783980c..a6bd54ed5e6ea 100644 --- a/src/plugins/unified_histogram/tsconfig.json +++ b/src/plugins/unified_histogram/tsconfig.json @@ -1,17 +1,30 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../../typings/**/*", "common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../charts/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../saved_search/tsconfig.json" }, - { "path": "../../../x-pack/plugins/lens/tsconfig.json" } + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/lens-plugin", + "@kbn/field-formats-plugin", + "@kbn/inspector-plugin", + "@kbn/expressions-plugin", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/embeddable-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/core-ui-settings-browser", + "@kbn/datemath", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/shared-ux-utility", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/unified_search/tsconfig.json b/src/plugins/unified_search/tsconfig.json index 7477e97c779c9..0a4ab525d04b7 100644 --- a/src/plugins/unified_search/tsconfig.json +++ b/src/plugins/unified_search/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", @@ -13,14 +11,35 @@ "config.ts", ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../data_view_editor/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" }, - { "path": "../usage_collection/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../field_formats/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/data-view-editor-plugin", + "@kbn/embeddable-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/field-formats-plugin", + "@kbn/es-query", + "@kbn/i18n-react", + "@kbn/screenshot-mode-plugin", + "@kbn/ui-actions-plugin", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/shared-ux-utility", + "@kbn/utility-types", + "@kbn/analytics", + "@kbn/datemath", + "@kbn/monaco", + "@kbn/language-documentation-popover", + "@kbn/field-types", + "@kbn/config", + "@kbn/config-schema", + "@kbn/utility-types-jest", + "@kbn/react-field", + "@kbn/ui-theme", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/url_forwarding/tsconfig.json b/src/plugins/url_forwarding/tsconfig.json index 9a108878e86fb..f4db29b839cf8 100644 --- a/src/plugins/url_forwarding/tsconfig.json +++ b/src/plugins/url_forwarding/tsconfig.json @@ -1,12 +1,13 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*"], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, + "@kbn/core", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/usage_collection/tsconfig.json b/src/plugins/usage_collection/tsconfig.json index 531dde7fd609e..0e663d6c9cb8f 100644 --- a/src/plugins/usage_collection/tsconfig.json +++ b/src/plugins/usage_collection/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -13,7 +11,17 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../../plugins/kibana_utils/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/analytics", + "@kbn/config-schema", + "@kbn/std", + "@kbn/analytics-client", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/core-http-server-mocks", + ], + "exclude": [ + "target/**/*", ] } \ No newline at end of file diff --git a/src/plugins/vis_default_editor/tsconfig.json b/src/plugins/vis_default_editor/tsconfig.json index 6495253035f69..65d0603523fe1 100644 --- a/src/plugins/vis_default_editor/tsconfig.json +++ b/src/plugins/vis_default_editor/tsconfig.json @@ -1,22 +1,34 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../visualizations/tsconfig.json" }, - { "path": "../discover/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../field_formats/tsconfig.json" }, - { "path": "../unified_search/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/visualizations-plugin", + "@kbn/discover-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/field-formats-plugin", + "@kbn/unified-search-plugin", + "@kbn/data-views-plugin", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/i18n-react", + "@kbn/usage-collection-plugin", + "@kbn/test-jest-helpers", + "@kbn/datemath", + "@kbn/charts-plugin", + "@kbn/coloring", + "@kbn/monaco", + "@kbn/es-ui-shared-plugin", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_type_markdown/tsconfig.json b/src/plugins/vis_type_markdown/tsconfig.json index 3bd790ef80469..73c6d160696ac 100644 --- a/src/plugins/vis_type_markdown/tsconfig.json +++ b/src/plugins/vis_type_markdown/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", @@ -11,10 +9,16 @@ "*.ts" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../visualizations/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../vis_default_editor/tsconfig.json" }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/visualizations-plugin", + "@kbn/kibana-react-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_types/gauge/tsconfig.json b/src/plugins/vis_types/gauge/tsconfig.json index c94152b4d70df..a681a709f68d5 100644 --- a/src/plugins/vis_types/gauge/tsconfig.json +++ b/src/plugins/vis_types/gauge/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,15 +10,22 @@ "*.ts" ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../chart_expressions/expression_gauge/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../chart_expressions/expression_partition_vis/tsconfig.json" } - ] + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/expressions-plugin", + "@kbn/expression-gauge-plugin", + "@kbn/visualizations-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/data-views-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/coloring", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", + ] } \ No newline at end of file diff --git a/src/plugins/vis_types/heatmap/tsconfig.json b/src/plugins/vis_types/heatmap/tsconfig.json index f35697fe36997..970c265198071 100644 --- a/src/plugins/vis_types/heatmap/tsconfig.json +++ b/src/plugins/vis_types/heatmap/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,13 +10,22 @@ "*.ts" ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" } - ] + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/expressions-plugin", + "@kbn/visualizations-plugin", + "@kbn/usage-collection-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/field-formats-plugin", + "@kbn/data-views-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", + ] } \ No newline at end of file diff --git a/src/plugins/vis_types/metric/tsconfig.json b/src/plugins/vis_types/metric/tsconfig.json index f86fa052e0884..4b6f5c5df812e 100644 --- a/src/plugins/vis_types/metric/tsconfig.json +++ b/src/plugins/vis_types/metric/tsconfig.json @@ -1,17 +1,24 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*", "server/**/*", "*.ts"], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/visualizations-plugin", + "@kbn/charts-plugin", + "@kbn/expressions-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/i18n", + "@kbn/data-views-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/coloring", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_types/pie/tsconfig.json b/src/plugins/vis_types/pie/tsconfig.json index 6c4dc9eae2541..663d05228ea2c 100644 --- a/src/plugins/vis_types/pie/tsconfig.json +++ b/src/plugins/vis_types/pie/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,14 +10,24 @@ "*.ts" ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../usage_collection/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../chart_expressions/expression_partition_vis/tsconfig.json" } - ] + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/expressions-plugin", + "@kbn/visualizations-plugin", + "@kbn/usage-collection-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/field-formats-plugin", + "@kbn/expression-partition-vis-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/data-views-plugin", + "@kbn/i18n", + "@kbn/coloring", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", + ] } \ No newline at end of file diff --git a/src/plugins/vis_types/table/tsconfig.json b/src/plugins/vis_types/table/tsconfig.json index 7af02367b7996..f6e296e0e9ecf 100644 --- a/src/plugins/vis_types/table/tsconfig.json +++ b/src/plugins/vis_types/table/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,15 +10,24 @@ "*.ts" ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../share/tsconfig.json" }, - { "path": "../../data_views/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../kibana_utils/tsconfig.json" }, - { "path": "../../kibana_react/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/visualizations-plugin", + "@kbn/share-plugin", + "@kbn/data-views-plugin", + "@kbn/expressions-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/field-formats-plugin", + "@kbn/usage-collection-plugin", + "@kbn/analytics", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/ui-theme", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_types/tagcloud/tsconfig.json b/src/plugins/vis_types/tagcloud/tsconfig.json index 0159681d2e198..45cefb2106423 100644 --- a/src/plugins/vis_types/tagcloud/tsconfig.json +++ b/src/plugins/vis_types/tagcloud/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", @@ -11,12 +9,18 @@ "*.ts" ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../kibana_react/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/expressions-plugin", + "@kbn/visualizations-plugin", + "@kbn/charts-plugin", + "@kbn/kibana-react-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/i18n", + "@kbn/coloring", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_types/timelion/tsconfig.json b/src/plugins/vis_types/timelion/tsconfig.json index 5a660d5d4d780..7121a7d7078be 100644 --- a/src/plugins/vis_types/timelion/tsconfig.json +++ b/src/plugins/vis_types/timelion/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -13,14 +11,28 @@ "*.ts" ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../field_formats/tsconfig.json" }, - { "path": "../../data_views/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../kibana_utils/tsconfig.json" }, - { "path": "../../kibana_react/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" }, + "@kbn/core", + "@kbn/visualizations-plugin", + "@kbn/data-plugin", + "@kbn/field-formats-plugin", + "@kbn/data-views-plugin", + "@kbn/expressions-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/charts-plugin", + "@kbn/usage-collection-plugin", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/analytics", + "@kbn/i18n-react", + "@kbn/monaco", + "@kbn/config-schema", + "@kbn/expect", + "@kbn/std", + "@kbn/timelion-grammar", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_types/timeseries/tsconfig.json b/src/plugins/vis_types/timeseries/tsconfig.json index 1a001beb98517..e87ecc1e3f98f 100644 --- a/src/plugins/vis_types/timeseries/tsconfig.json +++ b/src/plugins/vis_types/timeseries/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "allowJs": true }, "include": [ @@ -14,15 +12,41 @@ "*.ts" ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../data_views/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../dashboard/tsconfig.json" }, - { "path": "../../kibana_utils/tsconfig.json" }, - { "path": "../../kibana_react/tsconfig.json" }, - { "path": "../../unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/expressions-plugin", + "@kbn/visualizations-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/unified-search-plugin", + "@kbn/i18n", + "@kbn/field-formats-plugin", + "@kbn/datemath", + "@kbn/es-query", + "@kbn/inspector-plugin", + "@kbn/usage-collection-plugin", + "@kbn/core-http-browser", + "@kbn/core-theme-browser", + "@kbn/core-doc-links-browser", + "@kbn/analytics", + "@kbn/i18n-react", + "@kbn/coloring", + "@kbn/test-jest-helpers", + "@kbn/safer-lodash-set", + "@kbn/embeddable-plugin", + "@kbn/handlebars", + "@kbn/rison", + "@kbn/utility-types", + "@kbn/shared-ux-link-redirect-app", + "@kbn/ui-theme", + "@kbn/config-schema", + "@kbn/home-plugin", + "@kbn/std", + "@kbn/tinymath", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_types/vega/tsconfig.json b/src/plugins/vis_types/vega/tsconfig.json index b942db9888aa9..72358ce021c2b 100644 --- a/src/plugins/vis_types/vega/tsconfig.json +++ b/src/plugins/vis_types/vega/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "strictNullChecks": false }, "include": [ @@ -16,17 +14,32 @@ "public/test_utils/vega_graph.json", ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../data_views/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../maps_ems/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../inspector/tsconfig.json" }, - { "path": "../../home/tsconfig.json" }, - { "path": "../../kibana_utils/tsconfig.json" }, - { "path": "../../kibana_react/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" }, - { "path": "../../es_ui_shared/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/visualizations-plugin", + "@kbn/maps-ems-plugin", + "@kbn/expressions-plugin", + "@kbn/inspector-plugin", + "@kbn/home-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/usage-collection-plugin", + "@kbn/es-query", + "@kbn/analytics", + "@kbn/core-execution-context-common", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/monaco", + "@kbn/utility-types", + "@kbn/ui-theme", + "@kbn/std", + "@kbn/datemath", + "@kbn/mapbox-gl", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_types/vislib/tsconfig.json b/src/plugins/vis_types/vislib/tsconfig.json index c63a51db242b9..3616b2c7cd8ee 100644 --- a/src/plugins/vis_types/vislib/tsconfig.json +++ b/src/plugins/vis_types/vislib/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -14,14 +12,32 @@ "public/fixtures/dispatch_heatmap_data_point.json", ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../data/tsconfig.json" }, - { "path": "../../expressions/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../kibana_utils/tsconfig.json" }, - { "path": "../../vis_types/gauge/tsconfig.json" }, - { "path": "../../vis_types/xy/tsconfig.json" }, - { "path": "../../vis_types/heatmap/tsconfig.json" }, + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/expressions-plugin", + "@kbn/visualizations-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/vis-type-gauge-plugin", + "@kbn/vis-type-xy-plugin", + "@kbn/vis-type-heatmap-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/field-formats-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-react-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/core-execution-context-common", + "@kbn/analytics", + "@kbn/test-jest-helpers", + "@kbn/safer-lodash-set", + "@kbn/datemath", + "@kbn/i18n-react", + "@kbn/std", + "@kbn/ui-theme", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/vis_types/xy/tsconfig.json b/src/plugins/vis_types/xy/tsconfig.json index f478d2de1b956..14ed87764e518 100644 --- a/src/plugins/vis_types/xy/tsconfig.json +++ b/src/plugins/vis_types/xy/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,10 +10,21 @@ "*.ts" ], "kbn_references": [ - { "path": "../../../core/tsconfig.json" }, - { "path": "../../charts/tsconfig.json" }, - { "path": "../../visualizations/tsconfig.json" }, - { "path": "../../kibana_utils/tsconfig.json" }, - { "path": "../../vis_default_editor/tsconfig.json" }, + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/visualizations-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/vis-default-editor-plugin", + "@kbn/data-views-plugin", + "@kbn/expressions-plugin", + "@kbn/i18n", + "@kbn/data-plugin", + "@kbn/coloring", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/plugins/visualizations/tsconfig.json b/src/plugins/visualizations/tsconfig.json index 7f00434c6181e..9b73af16bb4bb 100644 --- a/src/plugins/visualizations/tsconfig.json +++ b/src/plugins/visualizations/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,26 +10,48 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../core/tsconfig.json" }, - { "path": "../charts/tsconfig.json" }, - { "path": "../data/tsconfig.json" }, - { "path": "../data_views/tsconfig.json" }, - { "path": "../expressions/tsconfig.json" }, - { "path": "../ui_actions/tsconfig.json" }, - { "path": "../embeddable/tsconfig.json" }, - { "path": "../inspector/tsconfig.json" }, - { "path": "../saved_objects/tsconfig.json" }, - { "path": "../saved_objects_tagging_oss/tsconfig.json" }, - { "path": "../kibana_utils/tsconfig.json" }, - { "path": "../kibana_react/tsconfig.json" }, - { "path": "../saved_search/tsconfig.json" }, - { "path": "../url_forwarding/tsconfig.json" }, - { "path": "../navigation/tsconfig.json" }, - { "path": "../home/tsconfig.json" }, - { "path": "../share/tsconfig.json" }, - { "path": "../data_view_editor/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, - { "path": "../screenshot_mode/tsconfig.json" }, - { "path": "../../../x-pack/plugins/spaces/tsconfig.json" } + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/expressions-plugin", + "@kbn/ui-actions-plugin", + "@kbn/embeddable-plugin", + "@kbn/inspector-plugin", + "@kbn/saved-objects-plugin", + "@kbn/saved-objects-tagging-oss-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/saved-search-plugin", + "@kbn/url-forwarding-plugin", + "@kbn/navigation-plugin", + "@kbn/home-plugin", + "@kbn/share-plugin", + "@kbn/data-view-editor-plugin", + "@kbn/presentation-util-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/spaces-plugin", + "@kbn/es-query", + "@kbn/utility-types", + "@kbn/field-formats-plugin", + "@kbn/rison", + "@kbn/i18n", + "@kbn/coloring", + "@kbn/unified-search-plugin", + "@kbn/shared-ux-link-redirect-app", + "@kbn/i18n-react", + "@kbn/safer-lodash-set", + "@kbn/shared-ux-page-analytics-no-data", + "@kbn/content-management-table-list", + "@kbn/test-jest-helpers", + "@kbn/analytics", + "@kbn/content-management-content-editor", + "@kbn/core-saved-objects-api-browser", + "@kbn/core-overlays-browser", + "@kbn/config-schema", + "@kbn/usage-collection-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/src/setup_node_env/dist.js b/src/setup_node_env/dist.js index 3628a27a7793f..5beed583cf830 100644 --- a/src/setup_node_env/dist.js +++ b/src/setup_node_env/dist.js @@ -6,5 +6,6 @@ * Side Public License, v 1. */ -require('./no_transpilation_dist'); +// the dist env setup does not include babel/register, just the polyfill +require('./setup_env'); require('./polyfill'); diff --git a/src/setup_node_env/ensure_node_preserve_symlinks.js b/src/setup_node_env/ensure_node_preserve_symlinks.js deleted file mode 100644 index 5ec286801bdc4..0000000000000 --- a/src/setup_node_env/ensure_node_preserve_symlinks.js +++ /dev/null @@ -1,119 +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. - */ - -(function () { - var cp = require('child_process'); - - var calculateInspectPortOnExecArgv = function (processExecArgv) { - var execArgv = [].concat(processExecArgv); - - if (execArgv.length === 0) { - return execArgv; - } - - var inspectFlagIndex = execArgv.reverse().findIndex(function (flag) { - return flag.startsWith('--inspect'); - }); - - if (inspectFlagIndex !== -1) { - var inspectFlag; - var inspectPortCounter = 9230; - var argv = execArgv[inspectFlagIndex]; - - if (argv.includes('=')) { - // --inspect=port - var argvSplit = argv.split('='); - var flag = argvSplit[0]; - var port = argvSplit[1]; - inspectFlag = flag; - inspectPortCounter = Number.parseInt(port, 10) + 1; - } else { - // --inspect - inspectFlag = argv; - - // is number? - if (String(execArgv[inspectFlagIndex + 1]).match(/^[0-9]+$/)) { - // --inspect port - inspectPortCounter = Number.parseInt(execArgv[inspectFlagIndex + 1], 10) + 1; - execArgv.slice(inspectFlagIndex + 1, 1); - } - } - - execArgv[inspectFlagIndex] = inspectFlag + '=' + inspectPortCounter; - } - - return execArgv; - }; - - var preserveSymlinksOption = '--preserve-symlinks'; - var preserveSymlinksMainOption = '--preserve-symlinks-main'; - var nodeOptions = (process && process.env && process.env.NODE_OPTIONS) || []; - var nodeExecArgv = calculateInspectPortOnExecArgv((process && process.execArgv) || []); - - var isPreserveSymlinksPresent = - nodeOptions.includes(preserveSymlinksOption) || nodeExecArgv.includes(preserveSymlinksOption); - var isPreserveSymlinksMainPresent = - nodeOptions.includes(preserveSymlinksMainOption) || - nodeExecArgv.includes(preserveSymlinksMainOption); - - if (isPreserveSymlinksPresent && isPreserveSymlinksMainPresent) { - return; - } - - var nodeArgv = (process && process.argv) || []; - var isFirstArgNode = nodeArgv.length > 0 && nodeArgv[0].includes('node') ? nodeArgv[0] : null; - if (!isFirstArgNode) { - return; - } - - var missingNodeArgs = []; - if (!isPreserveSymlinksMainPresent) { - missingNodeArgs.push(preserveSymlinksMainOption); - } - - if (!isPreserveSymlinksPresent) { - missingNodeArgs.push(preserveSymlinksOption); - } - - var nodeArgs = nodeExecArgv.concat(missingNodeArgs); - var restArgs = nodeArgv.length >= 2 ? nodeArgv.slice(1, nodeArgv.length) : []; - - var getExitCodeFromSpawnResult = function (spawnResult) { - if (spawnResult.status !== null) { - return spawnResult.status; - } - - if (spawnResult.signal !== null) { - console.log( - 'ensure_node_preserve_symlinks wrapper: process exitted with signal', - spawnResult.signal - ); - return 1; - } - - if (spawnResult.error) { - console.log( - 'ensure_node_preserve_symlinks wrapper: process exitted with error', - spawnResult.error - ); - return 1; - } - - return 0; - }; - - // Since we are using `stdio: inherit`, the child process will receive - // the `SIGINT` and `SIGTERM` from the terminal. - // However, we want the parent process not to exit until the child does. - // Adding the following handlers achieves that. - process.on('SIGINT', function () {}); - process.on('SIGTERM', function () {}); - - var spawnResult = cp.spawnSync(nodeArgv[0], nodeArgs.concat(restArgs), { stdio: 'inherit' }); - process.exit(getExitCodeFromSpawnResult(spawnResult)); -})(); diff --git a/src/setup_node_env/index.js b/src/setup_node_env/index.js index 9ce60766997cc..ca843aff501ee 100644 --- a/src/setup_node_env/index.js +++ b/src/setup_node_env/index.js @@ -6,6 +6,7 @@ * Side Public License, v 1. */ -require('./no_transpilation'); -// eslint-disable-next-line import/no-extraneous-dependencies -require('@kbn/optimizer').registerNodeAutoTranspilation(); +// development env setup includes babel/register after the env is initialized +require('./setup_env'); +require('@kbn/babel-register').install(); +require('./polyfill'); diff --git a/src/setup_node_env/no_transpilation.js b/src/setup_node_env/no_transpilation.js deleted file mode 100644 index b9497734b40bc..0000000000000 --- a/src/setup_node_env/no_transpilation.js +++ /dev/null @@ -1,10 +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. - */ - -require('./ensure_node_preserve_symlinks'); -require('./no_transpilation_dist'); diff --git a/packages/kbn-es/src/cli_commands/index.js b/src/setup_node_env/polyfill.ts similarity index 60% rename from packages/kbn-es/src/cli_commands/index.js rename to src/setup_node_env/polyfill.ts index 1d2489031181c..0c69256698a15 100644 --- a/packages/kbn-es/src/cli_commands/index.js +++ b/src/setup_node_env/polyfill.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -exports.snapshot = require('./snapshot'); -exports.source = require('./source'); -exports.archive = require('./archive'); -exports.build_snapshots = require('./build_snapshots'); +// require these polyfills after setting up the require hook so that @babel/preset-env +// will spot the import in the polyfill file and replace it with the necessary polyfills +// for the current node.js version +import 'core-js/stable'; diff --git a/src/setup_node_env/no_transpilation_dist.js b/src/setup_node_env/setup_env.js similarity index 93% rename from src/setup_node_env/no_transpilation_dist.js rename to src/setup_node_env/setup_env.js index c52eba70f4ad3..08897eb5a78c5 100644 --- a/src/setup_node_env/no_transpilation_dist.js +++ b/src/setup_node_env/setup_env.js @@ -12,5 +12,5 @@ require('./harden'); // The following require statements MUST be executed before any others - END require('symbol-observable'); -require('source-map-support/register'); +require('source-map-support').install(); require('./node_version_validator'); diff --git a/src/setup_node_env/tsconfig.json b/src/setup_node_env/tsconfig.json index c7c05f89d04a6..ed753806b9f4f 100644 --- a/src/setup_node_env/tsconfig.json +++ b/src/setup_node_env/tsconfig.json @@ -1,16 +1,19 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "harden/**/*", "root/**/*", "*.js", + "*.ts", ], "kbn_references": [ { "path": "../../tsconfig.json" }, + "@kbn/babel-register", + ], + "exclude": [ + "target/**/*", ] } diff --git a/test/analytics/fixtures/plugins/analytics_ftr_helpers/tsconfig.json b/test/analytics/fixtures/plugins/analytics_ftr_helpers/tsconfig.json index 7231438f0b0e0..f39686d7e098f 100644 --- a/test/analytics/fixtures/plugins/analytics_ftr_helpers/tsconfig.json +++ b/test/analytics/fixtures/plugins/analytics_ftr_helpers/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", + "outDir": "target/types", }, "include": [ "index.ts", @@ -10,8 +10,13 @@ "server/**/*.ts", "../../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/analytics-client", + "@kbn/std", + "@kbn/config-schema", ] } diff --git a/test/analytics/fixtures/plugins/analytics_plugin_a/tsconfig.json b/test/analytics/fixtures/plugins/analytics_plugin_a/tsconfig.json index 483252cfa6fd9..6a3e9e40e3890 100644 --- a/test/analytics/fixtures/plugins/analytics_plugin_a/tsconfig.json +++ b/test/analytics/fixtures/plugins/analytics_plugin_a/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", + "outDir": "target/types", }, "include": [ "index.ts", @@ -9,8 +9,11 @@ "server/**/*.ts", "../../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/config-schema", ] } diff --git a/test/examples/config.js b/test/examples/config.js index 836f21f260e0b..75ac7c44a54f4 100644 --- a/test/examples/config.js +++ b/test/examples/config.js @@ -9,7 +9,7 @@ import { resolve } from 'path'; import { services } from '../plugin_functional/services'; import fs from 'fs'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; export default async function ({ readConfigFile }) { const functionalConfig = await readConfigFile(require.resolve('../functional/config.base.js')); diff --git a/test/functional/apps/management/_files.ts b/test/functional/apps/management/_files.ts index b117e376a39a6..deebdb18f374b 100644 --- a/test/functional/apps/management/_files.ts +++ b/test/functional/apps/management/_files.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import expect from '@kbn/expect/expect'; +import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { diff --git a/test/functional/services/remote/webdriver.ts b/test/functional/services/remote/webdriver.ts index 21eae36a67b7c..af2e1056e6867 100644 --- a/test/functional/services/remote/webdriver.ts +++ b/test/functional/services/remote/webdriver.ts @@ -26,7 +26,7 @@ import { Executor } from 'selenium-webdriver/lib/http'; import { getLogger } from 'selenium-webdriver/lib/logging'; import { installDriver } from 'ms-chromium-edge-driver'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { pollForLogEntry$ } from './poll_for_log_entry'; import { createStdoutSocket } from './create_stdout_stream'; import { preventParallelCalls } from './prevent_parallel_calls'; diff --git a/test/health_gateway/plugins/status/tsconfig.json b/test/health_gateway/plugins/status/tsconfig.json index 481e1091600fd..ca820cb2858d4 100644 --- a/test/health_gateway/plugins/status/tsconfig.json +++ b/test/health_gateway/plugins/status/tsconfig.json @@ -1,13 +1,16 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "server/**/*.ts", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/config-schema" ] } diff --git a/test/health_gateway/services/health_gateway.ts b/test/health_gateway/services/health_gateway.ts index dc3480c4552a8..a84b995e38e9c 100644 --- a/test/health_gateway/services/health_gateway.ts +++ b/test/health_gateway/services/health_gateway.ts @@ -11,7 +11,7 @@ import { format } from 'url'; import getPort from 'get-port'; import supertest from 'supertest'; import { ProcRunner } from '@kbn/dev-proc-runner'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { FtrService } from '../../functional/ftr_provider_context'; interface HealthGatewayOptions { diff --git a/test/interactive_setup_api_integration/fixtures/test_endpoints/tsconfig.json b/test/interactive_setup_api_integration/fixtures/test_endpoints/tsconfig.json index 99f621e423747..5e64dd7d0c932 100644 --- a/test/interactive_setup_api_integration/fixtures/test_endpoints/tsconfig.json +++ b/test/interactive_setup_api_integration/fixtures/test_endpoints/tsconfig.json @@ -1,16 +1,15 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true + "outDir": "target/types", }, "include": [ "server/**/*.ts", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, + "@kbn/core", ], } diff --git a/test/interactive_setup_functional/tests/enrollment_token.ts b/test/interactive_setup_functional/tests/enrollment_token.ts index 5af4ed0fc3f2e..fb86a9a6f6913 100644 --- a/test/interactive_setup_functional/tests/enrollment_token.ts +++ b/test/interactive_setup_functional/tests/enrollment_token.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import type { FtrProviderContext } from '../../functional/ftr_provider_context'; import { getElasticsearchCaCertificate } from '../../interactive_setup_api_integration/fixtures/tls_tools'; diff --git a/test/interpreter_functional/plugins/kbn_tp_run_pipeline/tsconfig.json b/test/interpreter_functional/plugins/kbn_tp_run_pipeline/tsconfig.json index c50067e5cb872..db591faecfd18 100644 --- a/test/interpreter_functional/plugins/kbn_tp_run_pipeline/tsconfig.json +++ b/test/interpreter_functional/plugins/kbn_tp_run_pipeline/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,12 +10,15 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../../../src/plugins/inspector/tsconfig.json" }, - { "path": "../../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../../src/plugins/kibana_utils/tsconfig.json" }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/inspector-plugin", + "@kbn/data-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/config-schema", ] } diff --git a/test/node_roles_functional/plugins/core_plugin_initializer_context/tsconfig.json b/test/node_roles_functional/plugins/core_plugin_initializer_context/tsconfig.json index 97fa33bb4d1ed..bf146797a42ee 100644 --- a/test/node_roles_functional/plugins/core_plugin_initializer_context/tsconfig.json +++ b/test/node_roles_functional/plugins/core_plugin_initializer_context/tsconfig.json @@ -1,15 +1,17 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/app_link_test/tsconfig.json b/test/plugin_functional/plugins/app_link_test/tsconfig.json index 5e38e7f98cbb6..b44abdbe6224d 100644 --- a/test/plugin_functional/plugins/app_link_test/tsconfig.json +++ b/test/plugin_functional/plugins/app_link_test/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,8 +9,11 @@ "public/**/*.tsx", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/plugins/kibana_react/tsconfig.json" } + "@kbn/kibana-react-plugin", + "@kbn/core", ] } diff --git a/test/plugin_functional/plugins/core_app_status/tsconfig.json b/test/plugin_functional/plugins/core_app_status/tsconfig.json index c81a6cc88fae2..ef3b1a3322e43 100644 --- a/test/plugin_functional/plugins/core_app_status/tsconfig.json +++ b/test/plugin_functional/plugins/core_app_status/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "index.ts", @@ -11,8 +9,10 @@ "public/**/*.tsx", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, + "@kbn/core", ], } diff --git a/test/plugin_functional/plugins/core_history_block/tsconfig.json b/test/plugin_functional/plugins/core_history_block/tsconfig.json index 4804462c5637d..f7ddd34a35c2e 100644 --- a/test/plugin_functional/plugins/core_history_block/tsconfig.json +++ b/test/plugin_functional/plugins/core_history_block/tsconfig.json @@ -1,12 +1,14 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": ["index.ts", "public/**/*.ts", "public/**/*.tsx", "../../../../typings/**/*"], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/kibana_react/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin" ] } diff --git a/test/plugin_functional/plugins/core_http/tsconfig.json b/test/plugin_functional/plugins/core_http/tsconfig.json index 151126379c603..1031bd9b38024 100644 --- a/test/plugin_functional/plugins/core_http/tsconfig.json +++ b/test/plugin_functional/plugins/core_http/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,8 +10,10 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/core_plugin_a/tsconfig.json b/test/plugin_functional/plugins/core_plugin_a/tsconfig.json index 151126379c603..1031bd9b38024 100644 --- a/test/plugin_functional/plugins/core_plugin_a/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_a/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,8 +10,10 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/core_plugin_appleave/tsconfig.json b/test/plugin_functional/plugins/core_plugin_appleave/tsconfig.json index b69ff0d55b060..c4001804608cc 100644 --- a/test/plugin_functional/plugins/core_plugin_appleave/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_appleave/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,8 +9,10 @@ "public/**/*.tsx", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/core_plugin_b/tsconfig.json b/test/plugin_functional/plugins/core_plugin_b/tsconfig.json index 582a563fa87d6..0a3cc148df189 100644 --- a/test/plugin_functional/plugins/core_plugin_b/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_b/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,9 +10,12 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../core_plugin_a/tsconfig.json" }, + "@kbn/core", + "@kbn/core-plugin-a-plugin", + "@kbn/config-schema", ] } diff --git a/test/plugin_functional/plugins/core_plugin_chromeless/tsconfig.json b/test/plugin_functional/plugins/core_plugin_chromeless/tsconfig.json index a45b03ddb0183..3a0bc171cada7 100644 --- a/test/plugin_functional/plugins/core_plugin_chromeless/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_chromeless/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,8 +9,10 @@ "public/**/*.tsx", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, + "@kbn/core", ] } diff --git a/test/plugin_functional/plugins/core_plugin_deep_links/tsconfig.json b/test/plugin_functional/plugins/core_plugin_deep_links/tsconfig.json index b69ff0d55b060..c4001804608cc 100644 --- a/test/plugin_functional/plugins/core_plugin_deep_links/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_deep_links/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,8 +9,10 @@ "public/**/*.tsx", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/core_plugin_deprecations/tsconfig.json b/test/plugin_functional/plugins/core_plugin_deprecations/tsconfig.json index 151126379c603..a51c8d185a06a 100644 --- a/test/plugin_functional/plugins/core_plugin_deprecations/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_deprecations/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,8 +10,12 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/config-schema", + "@kbn/config", ] } diff --git a/test/plugin_functional/plugins/core_plugin_execution_context/tsconfig.json b/test/plugin_functional/plugins/core_plugin_execution_context/tsconfig.json index 7e4d103b3c8b9..7b61be54e3c9e 100644 --- a/test/plugin_functional/plugins/core_plugin_execution_context/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_execution_context/tsconfig.json @@ -1,14 +1,16 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", "server/**/*.ts", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/core_plugin_helpmenu/tsconfig.json b/test/plugin_functional/plugins/core_plugin_helpmenu/tsconfig.json index da607f805aca3..b8e50d76d9628 100644 --- a/test/plugin_functional/plugins/core_plugin_helpmenu/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_helpmenu/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,8 +9,10 @@ "public/**/*.tsx", "../../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/core_plugin_route_timeouts/tsconfig.json b/test/plugin_functional/plugins/core_plugin_route_timeouts/tsconfig.json index 4e34148ffcc4f..b158efd9c6fb8 100644 --- a/test/plugin_functional/plugins/core_plugin_route_timeouts/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_route_timeouts/tsconfig.json @@ -1,14 +1,17 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "server/**/*.ts", "../../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/config-schema", ] } diff --git a/test/plugin_functional/plugins/core_plugin_static_assets/tsconfig.json b/test/plugin_functional/plugins/core_plugin_static_assets/tsconfig.json index da607f805aca3..b8e50d76d9628 100644 --- a/test/plugin_functional/plugins/core_plugin_static_assets/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_static_assets/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,8 +9,10 @@ "public/**/*.tsx", "../../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/core_provider_plugin/tsconfig.json b/test/plugin_functional/plugins/core_provider_plugin/tsconfig.json index 1010dbde5e134..452f8602deec3 100644 --- a/test/plugin_functional/plugins/core_provider_plugin/tsconfig.json +++ b/test/plugin_functional/plugins/core_provider_plugin/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "index.ts", @@ -11,8 +9,10 @@ "public/**/*.ts", "../../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, + "@kbn/core", ], } diff --git a/test/plugin_functional/plugins/data_search/tsconfig.json b/test/plugin_functional/plugins/data_search/tsconfig.json index fd0c6aee86728..fb37a658fe59a 100644 --- a/test/plugin_functional/plugins/data_search/tsconfig.json +++ b/test/plugin_functional/plugins/data_search/tsconfig.json @@ -1,15 +1,18 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "server/**/*.ts", "../../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/data/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/config-schema", ] } diff --git a/test/plugin_functional/plugins/elasticsearch_client_plugin/tsconfig.json b/test/plugin_functional/plugins/elasticsearch_client_plugin/tsconfig.json index 4e34148ffcc4f..b7a209b858dd3 100644 --- a/test/plugin_functional/plugins/elasticsearch_client_plugin/tsconfig.json +++ b/test/plugin_functional/plugins/elasticsearch_client_plugin/tsconfig.json @@ -1,14 +1,16 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "server/**/*.ts", "../../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/index_patterns/tsconfig.json b/test/plugin_functional/plugins/index_patterns/tsconfig.json index 9eb1323172491..da94640700c7d 100644 --- a/test/plugin_functional/plugins/index_patterns/tsconfig.json +++ b/test/plugin_functional/plugins/index_patterns/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,9 +9,12 @@ "server/**/*.tsx", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/data/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/config-schema", ] } diff --git a/test/plugin_functional/plugins/kbn_sample_panel_action/tsconfig.json b/test/plugin_functional/plugins/kbn_sample_panel_action/tsconfig.json index 5ee68ce60a9a8..a3fe79437f30d 100644 --- a/test/plugin_functional/plugins/kbn_sample_panel_action/tsconfig.json +++ b/test/plugin_functional/plugins/kbn_sample_panel_action/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,11 +9,13 @@ "public/**/*.tsx", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../../src/plugins/kibana_react/tsconfig.json" }, + "@kbn/core", + "@kbn/ui-actions-plugin", + "@kbn/embeddable-plugin", + "@kbn/kibana-react-plugin", ] } diff --git a/test/plugin_functional/plugins/kbn_top_nav/tsconfig.json b/test/plugin_functional/plugins/kbn_top_nav/tsconfig.json index 2d0007320313b..e4faa6b886967 100644 --- a/test/plugin_functional/plugins/kbn_top_nav/tsconfig.json +++ b/test/plugin_functional/plugins/kbn_top_nav/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,9 +10,11 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/navigation/tsconfig.json" }, + "@kbn/core", + "@kbn/navigation-plugin", ] } diff --git a/test/plugin_functional/plugins/kbn_tp_custom_visualizations/tsconfig.json b/test/plugin_functional/plugins/kbn_tp_custom_visualizations/tsconfig.json index 954a4daa1eef0..0b75f43b4b7f7 100644 --- a/test/plugin_functional/plugins/kbn_tp_custom_visualizations/tsconfig.json +++ b/test/plugin_functional/plugins/kbn_tp_custom_visualizations/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,11 +9,13 @@ "public/**/*.tsx", "../../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../../src/plugins/visualizations/tsconfig.json" }, - { "path": "../../../../src/plugins/expressions/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/visualizations-plugin", + "@kbn/expressions-plugin", ] } diff --git a/test/plugin_functional/plugins/management_test_plugin/tsconfig.json b/test/plugin_functional/plugins/management_test_plugin/tsconfig.json index ee1ece5036cff..91f33da6a5de4 100644 --- a/test/plugin_functional/plugins/management_test_plugin/tsconfig.json +++ b/test/plugin_functional/plugins/management_test_plugin/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -9,9 +9,11 @@ "public/**/*.tsx", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/management/tsconfig.json" }, + "@kbn/core", + "@kbn/management-plugin", ] } diff --git a/test/plugin_functional/plugins/rendering_plugin/tsconfig.json b/test/plugin_functional/plugins/rendering_plugin/tsconfig.json index 151126379c603..192e9f0fb4f5a 100644 --- a/test/plugin_functional/plugins/rendering_plugin/tsconfig.json +++ b/test/plugin_functional/plugins/rendering_plugin/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,8 +10,11 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/config-schema", ] } diff --git a/test/plugin_functional/plugins/saved_object_export_transforms/tsconfig.json b/test/plugin_functional/plugins/saved_object_export_transforms/tsconfig.json index 97fa33bb4d1ed..bf146797a42ee 100644 --- a/test/plugin_functional/plugins/saved_object_export_transforms/tsconfig.json +++ b/test/plugin_functional/plugins/saved_object_export_transforms/tsconfig.json @@ -1,15 +1,17 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/saved_object_import_warnings/tsconfig.json b/test/plugin_functional/plugins/saved_object_import_warnings/tsconfig.json index 151126379c603..1031bd9b38024 100644 --- a/test/plugin_functional/plugins/saved_object_import_warnings/tsconfig.json +++ b/test/plugin_functional/plugins/saved_object_import_warnings/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,8 +10,10 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/saved_objects_hidden_type/tsconfig.json b/test/plugin_functional/plugins/saved_objects_hidden_type/tsconfig.json index 97fa33bb4d1ed..bf146797a42ee 100644 --- a/test/plugin_functional/plugins/saved_objects_hidden_type/tsconfig.json +++ b/test/plugin_functional/plugins/saved_objects_hidden_type/tsconfig.json @@ -1,15 +1,17 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/plugin_functional/plugins/session_notifications/tsconfig.json b/test/plugin_functional/plugins/session_notifications/tsconfig.json index 32b53be5109fb..a7881eb76bf92 100644 --- a/test/plugin_functional/plugins/session_notifications/tsconfig.json +++ b/test/plugin_functional/plugins/session_notifications/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,10 +10,12 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../../src/plugins/data/tsconfig.json" }, + "@kbn/core", + "@kbn/navigation-plugin", + "@kbn/data-plugin", ] } diff --git a/test/plugin_functional/plugins/telemetry/tsconfig.json b/test/plugin_functional/plugins/telemetry/tsconfig.json index bde8ed4c57ae0..e4d237e88538b 100644 --- a/test/plugin_functional/plugins/telemetry/tsconfig.json +++ b/test/plugin_functional/plugins/telemetry/tsconfig.json @@ -1,12 +1,14 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": ["public/**/*.ts", "types.ts", "../../../../typings/**/*"], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/telemetry/tsconfig.json" }, + "@kbn/core", + "@kbn/telemetry-plugin", ] } diff --git a/test/plugin_functional/plugins/ui_settings_plugin/tsconfig.json b/test/plugin_functional/plugins/ui_settings_plugin/tsconfig.json index 1282ecf76b30e..7a9ab454d85a5 100644 --- a/test/plugin_functional/plugins/ui_settings_plugin/tsconfig.json +++ b/test/plugin_functional/plugins/ui_settings_plugin/tsconfig.json @@ -1,14 +1,17 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", + "outDir": "target/types", }, "include": [ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/config-schema", ] } diff --git a/test/plugin_functional/plugins/usage_collection/tsconfig.json b/test/plugin_functional/plugins/usage_collection/tsconfig.json index 56abcf79f17d0..96ee2dd5a3127 100644 --- a/test/plugin_functional/plugins/usage_collection/tsconfig.json +++ b/test/plugin_functional/plugins/usage_collection/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,9 +10,11 @@ "server/**/*.ts", "../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/usage_collection/tsconfig.json" }, + "@kbn/core", + "@kbn/usage-collection-plugin", ] } diff --git a/test/server_integration/__fixtures__/plugins/status_plugin_a/tsconfig.json b/test/server_integration/__fixtures__/plugins/status_plugin_a/tsconfig.json index e0bcff939a451..8789ef4f3583d 100644 --- a/test/server_integration/__fixtures__/plugins/status_plugin_a/tsconfig.json +++ b/test/server_integration/__fixtures__/plugins/status_plugin_a/tsconfig.json @@ -1,15 +1,18 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", + "outDir": "target/types", }, "include": [ "index.ts", "server/**/*.ts", "../../../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/config-schema", ] } diff --git a/test/server_integration/__fixtures__/plugins/status_plugin_b/tsconfig.json b/test/server_integration/__fixtures__/plugins/status_plugin_b/tsconfig.json index 0d45d9195da6d..4b333551c1495 100644 --- a/test/server_integration/__fixtures__/plugins/status_plugin_b/tsconfig.json +++ b/test/server_integration/__fixtures__/plugins/status_plugin_b/tsconfig.json @@ -1,15 +1,17 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", "server/**/*.ts", "../../../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/test/tsconfig.json b/test/tsconfig.json index 904735349c3ad..2d4e7e38b9428 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,10 +1,7 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, + "outDir": "target/types", "types": [ "node", "@emotion/react/types/css-prop", @@ -29,44 +26,50 @@ "*/plugins/**/*", ], "kbn_references": [ - { "path": "../src/core/tsconfig.json" }, + "@kbn/core", { "path": "../src/setup_node_env/tsconfig.json" }, - { "path": "../src/plugins/telemetry_management_section/tsconfig.json" }, - { "path": "../src/plugins/advanced_settings/tsconfig.json" }, - { "path": "../src/plugins/management/tsconfig.json" }, - { "path": "../src/plugins/bfetch/tsconfig.json" }, - { "path": "../src/plugins/charts/tsconfig.json" }, - { "path": "../src/plugins/console/tsconfig.json" }, - { "path": "../src/plugins/dashboard/tsconfig.json" }, - { "path": "../src/plugins/discover/tsconfig.json" }, - { "path": "../src/plugins/embeddable/tsconfig.json" }, - { "path": "../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../src/plugins/expressions/tsconfig.json" }, - { "path": "../src/plugins/home/tsconfig.json" }, - { "path": "../src/plugins/inspector/tsconfig.json" }, - { "path": "../src/plugins/kibana_overview/tsconfig.json" }, - { "path": "../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../src/plugins/kibana_usage_collection/tsconfig.json" }, - { "path": "../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../src/plugins/navigation/tsconfig.json" }, - { "path": "../src/plugins/unified_search/tsconfig.json" }, - { "path": "../src/plugins/newsfeed/tsconfig.json" }, - { "path": "../src/plugins/saved_objects/tsconfig.json" }, - { "path": "../src/plugins/saved_objects_management/tsconfig.json" }, - { "path": "../src/plugins/saved_objects_tagging_oss/tsconfig.json" }, - { "path": "../src/plugins/telemetry_collection_manager/tsconfig.json" }, - { "path": "../src/plugins/telemetry/tsconfig.json" }, - { "path": "../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../src/plugins/url_forwarding/tsconfig.json" }, - { "path": "../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../src/plugins/data_view_management/tsconfig.json" }, - { "path": "../src/plugins/visualizations/tsconfig.json" }, - { "path": "analytics/fixtures/plugins/analytics_ftr_helpers/tsconfig.json"}, - { "path": "analytics/fixtures/plugins/analytics_plugin_a/tsconfig.json"}, + "@kbn/bfetch-plugin", + "@kbn/dashboard-plugin", + "@kbn/expressions-plugin", + "@kbn/saved-objects-management-plugin", + "@kbn/telemetry-plugin", + "@kbn/usage-collection-plugin", + "@kbn/visualizations-plugin", + "@kbn/analytics-ftr-helpers-plugin", + "@kbn/analytics-plugin-a-plugin", { "path": "interactive_setup_api_integration/fixtures/test_endpoints/tsconfig.json" }, - { "path": "plugin_functional/plugins/core_app_status/tsconfig.json" }, - { "path": "plugin_functional/plugins/core_provider_plugin/tsconfig.json" }, - { "path": "server_integration/__fixtures__/plugins/status_plugin_a/tsconfig.json" }, - { "path": "server_integration/__fixtures__/plugins/status_plugin_b/tsconfig.json" }, + "@kbn/core-app-status-plugin", + "@kbn/core-provider-plugin", + "@kbn/test", + "@kbn/repo-info", + "@kbn/utils", + "@kbn/expect", + "@kbn/data-plugin", + "@kbn/ftr-common-functional-services", + "@kbn/tooling-log", + "@kbn/std", + "@kbn/test-subj-selector", + "@kbn/rison", + "@kbn/controls-plugin", + "@kbn/field-formats-plugin", + "@kbn/axe-config", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/data-view-field-editor-plugin", + "@kbn/data-views-plugin", + "@kbn/guided-onboarding-plugin", + "@kbn/guided-onboarding", + "@kbn/config-schema", + "@kbn/analytics", + "@kbn/field-types", + "@kbn/ftr-screenshot-filename", + "@kbn/es-archiver", + "@kbn/core-application-browser", + "@kbn/screenshot-mode-plugin", + "@kbn/dev-utils", + "@kbn/analytics-client", + "@kbn/safer-lodash-set", + "@kbn/utility-types", + "@kbn/dev-proc-runner", ] } diff --git a/tsconfig.base.json b/tsconfig.base.json index 24261b27d66ec..a27504bd796d8 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -3,11 +3,43 @@ "baseUrl": ".", "rootDir": ".", "paths": { - "@kbn/core": ["src/core"], - "@kbn/core/*": ["src/core/*"], // START AUTOMATED PACKAGE LISTING + "@kbn/ace": ["packages/kbn-ace"], + "@kbn/ace/*": ["packages/kbn-ace/*"], + "@kbn/actions-plugin": ["x-pack/plugins/actions"], + "@kbn/actions-plugin/*": ["x-pack/plugins/actions/*"], + "@kbn/advanced-settings-plugin": ["src/plugins/advanced_settings"], + "@kbn/advanced-settings-plugin/*": ["src/plugins/advanced_settings/*"], + "@kbn/aiops-components": ["x-pack/packages/ml/aiops_components"], + "@kbn/aiops-components/*": ["x-pack/packages/ml/aiops_components/*"], + "@kbn/aiops-plugin": ["x-pack/plugins/aiops"], + "@kbn/aiops-plugin/*": ["x-pack/plugins/aiops/*"], + "@kbn/aiops-utils": ["x-pack/packages/ml/aiops_utils"], + "@kbn/aiops-utils/*": ["x-pack/packages/ml/aiops_utils/*"], + "@kbn/alerting-example-plugin": ["x-pack/examples/alerting_example"], + "@kbn/alerting-example-plugin/*": ["x-pack/examples/alerting_example/*"], + "@kbn/alerting-fixture-plugin": ["x-pack/test/functional_with_es_ssl/fixtures/plugins/alerts"], + "@kbn/alerting-fixture-plugin/*": ["x-pack/test/functional_with_es_ssl/fixtures/plugins/alerts/*"], + "@kbn/alerting-plugin": ["x-pack/plugins/alerting"], + "@kbn/alerting-plugin/*": ["x-pack/plugins/alerting/*"], + "@kbn/alerts": ["packages/kbn-alerts"], + "@kbn/alerts/*": ["packages/kbn-alerts/*"], + "@kbn/ambient-common-types": ["packages/kbn-ambient-common-types"], + "@kbn/ambient-common-types/*": ["packages/kbn-ambient-common-types/*"], + "@kbn/ambient-ftr-types": ["packages/kbn-ambient-ftr-types"], + "@kbn/ambient-ftr-types/*": ["packages/kbn-ambient-ftr-types/*"], + "@kbn/ambient-storybook-types": ["packages/kbn-ambient-storybook-types"], + "@kbn/ambient-storybook-types/*": ["packages/kbn-ambient-storybook-types/*"], + "@kbn/ambient-ui-types": ["packages/kbn-ambient-ui-types"], + "@kbn/ambient-ui-types/*": ["packages/kbn-ambient-ui-types/*"], + "@kbn/analytics": ["packages/kbn-analytics"], + "@kbn/analytics/*": ["packages/kbn-analytics/*"], "@kbn/analytics-client": ["packages/analytics/client"], "@kbn/analytics-client/*": ["packages/analytics/client/*"], + "@kbn/analytics-ftr-helpers-plugin": ["test/analytics/fixtures/plugins/analytics_ftr_helpers"], + "@kbn/analytics-ftr-helpers-plugin/*": ["test/analytics/fixtures/plugins/analytics_ftr_helpers/*"], + "@kbn/analytics-plugin-a-plugin": ["test/analytics/fixtures/plugins/analytics_plugin_a"], + "@kbn/analytics-plugin-a-plugin/*": ["test/analytics/fixtures/plugins/analytics_plugin_a/*"], "@kbn/analytics-shippers-elastic-v3-browser": ["packages/analytics/shippers/elastic_v3/browser"], "@kbn/analytics-shippers-elastic-v3-browser/*": ["packages/analytics/shippers/elastic_v3/browser/*"], "@kbn/analytics-shippers-elastic-v3-common": ["packages/analytics/shippers/elastic_v3/common"], @@ -18,10 +50,96 @@ "@kbn/analytics-shippers-fullstory/*": ["packages/analytics/shippers/fullstory/*"], "@kbn/analytics-shippers-gainsight": ["packages/analytics/shippers/gainsight"], "@kbn/analytics-shippers-gainsight/*": ["packages/analytics/shippers/gainsight/*"], + "@kbn/apm-config-loader": ["packages/kbn-apm-config-loader"], + "@kbn/apm-config-loader/*": ["packages/kbn-apm-config-loader/*"], + "@kbn/apm-plugin": ["x-pack/plugins/apm"], + "@kbn/apm-plugin/*": ["x-pack/plugins/apm/*"], + "@kbn/apm-synthtrace": ["packages/kbn-apm-synthtrace"], + "@kbn/apm-synthtrace/*": ["packages/kbn-apm-synthtrace/*"], + "@kbn/apm-utils": ["packages/kbn-apm-utils"], + "@kbn/apm-utils/*": ["packages/kbn-apm-utils/*"], + "@kbn/app-link-test-plugin": ["test/plugin_functional/plugins/app_link_test"], + "@kbn/app-link-test-plugin/*": ["test/plugin_functional/plugins/app_link_test/*"], + "@kbn/application-usage-test-plugin": ["x-pack/test/usage_collection/plugins/application_usage_test"], + "@kbn/application-usage-test-plugin/*": ["x-pack/test/usage_collection/plugins/application_usage_test/*"], + "@kbn/axe-config": ["packages/kbn-axe-config"], + "@kbn/axe-config/*": ["packages/kbn-axe-config/*"], + "@kbn/babel-plugin-package-imports": ["packages/kbn-babel-plugin-package-imports"], + "@kbn/babel-plugin-package-imports/*": ["packages/kbn-babel-plugin-package-imports/*"], + "@kbn/babel-preset": ["packages/kbn-babel-preset"], + "@kbn/babel-preset/*": ["packages/kbn-babel-preset/*"], + "@kbn/babel-register": ["packages/kbn-babel-register"], + "@kbn/babel-register/*": ["packages/kbn-babel-register/*"], + "@kbn/babel-transform": ["packages/kbn-babel-transform"], + "@kbn/babel-transform/*": ["packages/kbn-babel-transform/*"], + "@kbn/banners-plugin": ["x-pack/plugins/banners"], + "@kbn/banners-plugin/*": ["x-pack/plugins/banners/*"], + "@kbn/bazel-packages": ["packages/kbn-bazel-packages"], + "@kbn/bazel-packages/*": ["packages/kbn-bazel-packages/*"], + "@kbn/bazel-runner": ["packages/kbn-bazel-runner"], + "@kbn/bazel-runner/*": ["packages/kbn-bazel-runner/*"], + "@kbn/bfetch-explorer-plugin": ["examples/bfetch_explorer"], + "@kbn/bfetch-explorer-plugin/*": ["examples/bfetch_explorer/*"], + "@kbn/bfetch-plugin": ["src/plugins/bfetch"], + "@kbn/bfetch-plugin/*": ["src/plugins/bfetch/*"], + "@kbn/canvas-plugin": ["x-pack/plugins/canvas"], + "@kbn/canvas-plugin/*": ["x-pack/plugins/canvas/*"], + "@kbn/cases-components": ["packages/kbn-cases-components"], + "@kbn/cases-components/*": ["packages/kbn-cases-components/*"], + "@kbn/cases-fixture-plugin": ["x-pack/test/functional_with_es_ssl/fixtures/plugins/cases"], + "@kbn/cases-fixture-plugin/*": ["x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/*"], + "@kbn/cases-plugin": ["x-pack/plugins/cases"], + "@kbn/cases-plugin/*": ["x-pack/plugins/cases/*"], + "@kbn/chart-icons": ["packages/kbn-chart-icons"], + "@kbn/chart-icons/*": ["packages/kbn-chart-icons/*"], + "@kbn/charts-plugin": ["src/plugins/charts"], + "@kbn/charts-plugin/*": ["src/plugins/charts/*"], + "@kbn/ci-stats-core": ["packages/kbn-ci-stats-core"], + "@kbn/ci-stats-core/*": ["packages/kbn-ci-stats-core/*"], + "@kbn/ci-stats-performance-metrics": ["packages/kbn-ci-stats-performance-metrics"], + "@kbn/ci-stats-performance-metrics/*": ["packages/kbn-ci-stats-performance-metrics/*"], + "@kbn/ci-stats-reporter": ["packages/kbn-ci-stats-reporter"], + "@kbn/ci-stats-reporter/*": ["packages/kbn-ci-stats-reporter/*"], + "@kbn/cli-dev-mode": ["packages/kbn-cli-dev-mode"], + "@kbn/cli-dev-mode/*": ["packages/kbn-cli-dev-mode/*"], + "@kbn/cloud-chat-plugin": ["x-pack/plugins/cloud_integrations/cloud_chat"], + "@kbn/cloud-chat-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_chat/*"], + "@kbn/cloud-data-migration-plugin": ["x-pack/plugins/cloud_integrations/cloud_data_migration"], + "@kbn/cloud-data-migration-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_data_migration/*"], + "@kbn/cloud-defend-plugin": ["x-pack/plugins/cloud_defend"], + "@kbn/cloud-defend-plugin/*": ["x-pack/plugins/cloud_defend/*"], + "@kbn/cloud-experiments-plugin": ["x-pack/plugins/cloud_integrations/cloud_experiments"], + "@kbn/cloud-experiments-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_experiments/*"], + "@kbn/cloud-full-story-plugin": ["x-pack/plugins/cloud_integrations/cloud_full_story"], + "@kbn/cloud-full-story-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_full_story/*"], + "@kbn/cloud-gainsight-plugin": ["x-pack/plugins/cloud_integrations/cloud_gain_sight"], + "@kbn/cloud-gainsight-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_gain_sight/*"], + "@kbn/cloud-links-plugin": ["x-pack/plugins/cloud_integrations/cloud_links"], + "@kbn/cloud-links-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_links/*"], + "@kbn/cloud-plugin": ["x-pack/plugins/cloud"], + "@kbn/cloud-plugin/*": ["x-pack/plugins/cloud/*"], + "@kbn/cloud-security-posture-plugin": ["x-pack/plugins/cloud_security_posture"], + "@kbn/cloud-security-posture-plugin/*": ["x-pack/plugins/cloud_security_posture/*"], + "@kbn/coloring": ["packages/kbn-coloring"], + "@kbn/coloring/*": ["packages/kbn-coloring/*"], + "@kbn/config": ["packages/kbn-config"], + "@kbn/config/*": ["packages/kbn-config/*"], + "@kbn/config-mocks": ["packages/kbn-config-mocks"], + "@kbn/config-mocks/*": ["packages/kbn-config-mocks/*"], + "@kbn/config-schema": ["packages/kbn-config-schema"], + "@kbn/config-schema/*": ["packages/kbn-config-schema/*"], + "@kbn/console-plugin": ["src/plugins/console"], + "@kbn/console-plugin/*": ["src/plugins/console/*"], "@kbn/content-management-content-editor": ["packages/content-management/content_editor"], "@kbn/content-management-content-editor/*": ["packages/content-management/content_editor/*"], "@kbn/content-management-table-list": ["packages/content-management/table_list"], "@kbn/content-management-table-list/*": ["packages/content-management/table_list/*"], + "@kbn/controls-example-plugin": ["examples/controls_example"], + "@kbn/controls-example-plugin/*": ["examples/controls_example/*"], + "@kbn/controls-plugin": ["src/plugins/controls"], + "@kbn/controls-plugin/*": ["src/plugins/controls/*"], + "@kbn/core": ["src/core"], + "@kbn/core/*": ["src/core/*"], "@kbn/core-analytics-browser": ["packages/core/analytics/core-analytics-browser"], "@kbn/core-analytics-browser/*": ["packages/core/analytics/core-analytics-browser/*"], "@kbn/core-analytics-browser-internal": ["packages/core/analytics/core-analytics-browser-internal"], @@ -34,6 +152,8 @@ "@kbn/core-analytics-server-internal/*": ["packages/core/analytics/core-analytics-server-internal/*"], "@kbn/core-analytics-server-mocks": ["packages/core/analytics/core-analytics-server-mocks"], "@kbn/core-analytics-server-mocks/*": ["packages/core/analytics/core-analytics-server-mocks/*"], + "@kbn/core-app-status-plugin": ["test/plugin_functional/plugins/core_app_status"], + "@kbn/core-app-status-plugin/*": ["test/plugin_functional/plugins/core_app_status/*"], "@kbn/core-application-browser": ["packages/core/application/core-application-browser"], "@kbn/core-application-browser/*": ["packages/core/application/core-application-browser/*"], "@kbn/core-application-browser-internal": ["packages/core/application/core-application-browser-internal"], @@ -140,6 +260,8 @@ "@kbn/core-fatal-errors-browser-internal/*": ["packages/core/fatal-errors/core-fatal-errors-browser-internal/*"], "@kbn/core-fatal-errors-browser-mocks": ["packages/core/fatal-errors/core-fatal-errors-browser-mocks"], "@kbn/core-fatal-errors-browser-mocks/*": ["packages/core/fatal-errors/core-fatal-errors-browser-mocks/*"], + "@kbn/core-history-block-plugin": ["test/plugin_functional/plugins/core_history_block"], + "@kbn/core-history-block-plugin/*": ["test/plugin_functional/plugins/core_history_block/*"], "@kbn/core-http-browser": ["packages/core/http/core-http-browser"], "@kbn/core-http-browser/*": ["packages/core/http/core-http-browser/*"], "@kbn/core-http-browser-internal": ["packages/core/http/core-http-browser-internal"], @@ -152,6 +274,8 @@ "@kbn/core-http-context-server-internal/*": ["packages/core/http/core-http-context-server-internal/*"], "@kbn/core-http-context-server-mocks": ["packages/core/http/core-http-context-server-mocks"], "@kbn/core-http-context-server-mocks/*": ["packages/core/http/core-http-context-server-mocks/*"], + "@kbn/core-http-plugin": ["test/plugin_functional/plugins/core_http"], + "@kbn/core-http-plugin/*": ["test/plugin_functional/plugins/core_http/*"], "@kbn/core-http-request-handler-context-server": ["packages/core/http/core-http-request-handler-context-server"], "@kbn/core-http-request-handler-context-server/*": ["packages/core/http/core-http-request-handler-context-server/*"], "@kbn/core-http-request-handler-context-server-internal": ["packages/core/http/core-http-request-handler-context-server-internal"], @@ -250,6 +374,26 @@ "@kbn/core-overlays-browser-internal/*": ["packages/core/overlays/core-overlays-browser-internal/*"], "@kbn/core-overlays-browser-mocks": ["packages/core/overlays/core-overlays-browser-mocks"], "@kbn/core-overlays-browser-mocks/*": ["packages/core/overlays/core-overlays-browser-mocks/*"], + "@kbn/core-plugin-a-plugin": ["test/plugin_functional/plugins/core_plugin_a"], + "@kbn/core-plugin-a-plugin/*": ["test/plugin_functional/plugins/core_plugin_a/*"], + "@kbn/core-plugin-appleave-plugin": ["test/plugin_functional/plugins/core_plugin_appleave"], + "@kbn/core-plugin-appleave-plugin/*": ["test/plugin_functional/plugins/core_plugin_appleave/*"], + "@kbn/core-plugin-b-plugin": ["test/plugin_functional/plugins/core_plugin_b"], + "@kbn/core-plugin-b-plugin/*": ["test/plugin_functional/plugins/core_plugin_b/*"], + "@kbn/core-plugin-chromeless-plugin": ["test/plugin_functional/plugins/core_plugin_chromeless"], + "@kbn/core-plugin-chromeless-plugin/*": ["test/plugin_functional/plugins/core_plugin_chromeless/*"], + "@kbn/core-plugin-deep-links-plugin": ["test/plugin_functional/plugins/core_plugin_deep_links"], + "@kbn/core-plugin-deep-links-plugin/*": ["test/plugin_functional/plugins/core_plugin_deep_links/*"], + "@kbn/core-plugin-deprecations-plugin": ["test/plugin_functional/plugins/core_plugin_deprecations"], + "@kbn/core-plugin-deprecations-plugin/*": ["test/plugin_functional/plugins/core_plugin_deprecations/*"], + "@kbn/core-plugin-execution-context-plugin": ["test/plugin_functional/plugins/core_plugin_execution_context"], + "@kbn/core-plugin-execution-context-plugin/*": ["test/plugin_functional/plugins/core_plugin_execution_context/*"], + "@kbn/core-plugin-helpmenu-plugin": ["test/plugin_functional/plugins/core_plugin_helpmenu"], + "@kbn/core-plugin-helpmenu-plugin/*": ["test/plugin_functional/plugins/core_plugin_helpmenu/*"], + "@kbn/core-plugin-route-timeouts-plugin": ["test/plugin_functional/plugins/core_plugin_route_timeouts"], + "@kbn/core-plugin-route-timeouts-plugin/*": ["test/plugin_functional/plugins/core_plugin_route_timeouts/*"], + "@kbn/core-plugin-static-assets-plugin": ["test/plugin_functional/plugins/core_plugin_static_assets"], + "@kbn/core-plugin-static-assets-plugin/*": ["test/plugin_functional/plugins/core_plugin_static_assets/*"], "@kbn/core-plugins-base-server-internal": ["packages/core/plugins/core-plugins-base-server-internal"], "@kbn/core-plugins-base-server-internal/*": ["packages/core/plugins/core-plugins-base-server-internal/*"], "@kbn/core-plugins-browser": ["packages/core/plugins/core-plugins-browser"], @@ -270,6 +414,8 @@ "@kbn/core-preboot-server-internal/*": ["packages/core/preboot/core-preboot-server-internal/*"], "@kbn/core-preboot-server-mocks": ["packages/core/preboot/core-preboot-server-mocks"], "@kbn/core-preboot-server-mocks/*": ["packages/core/preboot/core-preboot-server-mocks/*"], + "@kbn/core-provider-plugin": ["test/plugin_functional/plugins/core_provider_plugin"], + "@kbn/core-provider-plugin/*": ["test/plugin_functional/plugins/core_provider_plugin/*"], "@kbn/core-rendering-browser-internal": ["packages/core/rendering/core-rendering-browser-internal"], "@kbn/core-rendering-browser-internal/*": ["packages/core/rendering/core-rendering-browser-internal/*"], "@kbn/core-rendering-browser-mocks": ["packages/core/rendering/core-rendering-browser-mocks"], @@ -366,66 +512,42 @@ "@kbn/core-usage-data-server-internal/*": ["packages/core/usage-data/core-usage-data-server-internal/*"], "@kbn/core-usage-data-server-mocks": ["packages/core/usage-data/core-usage-data-server-mocks"], "@kbn/core-usage-data-server-mocks/*": ["packages/core/usage-data/core-usage-data-server-mocks/*"], - "@kbn/home-sample-data-card": ["packages/home/sample_data_card"], - "@kbn/home-sample-data-card/*": ["packages/home/sample_data_card/*"], - "@kbn/home-sample-data-tab": ["packages/home/sample_data_tab"], - "@kbn/home-sample-data-tab/*": ["packages/home/sample_data_tab/*"], - "@kbn/home-sample-data-types": ["packages/home/sample_data_types"], - "@kbn/home-sample-data-types/*": ["packages/home/sample_data_types/*"], - "@kbn/ace": ["packages/kbn-ace"], - "@kbn/ace/*": ["packages/kbn-ace/*"], - "@kbn/alerts": ["packages/kbn-alerts"], - "@kbn/alerts/*": ["packages/kbn-alerts/*"], - "@kbn/ambient-common-types": ["packages/kbn-ambient-common-types"], - "@kbn/ambient-common-types/*": ["packages/kbn-ambient-common-types/*"], - "@kbn/ambient-ftr-types": ["packages/kbn-ambient-ftr-types"], - "@kbn/ambient-ftr-types/*": ["packages/kbn-ambient-ftr-types/*"], - "@kbn/ambient-storybook-types": ["packages/kbn-ambient-storybook-types"], - "@kbn/ambient-storybook-types/*": ["packages/kbn-ambient-storybook-types/*"], - "@kbn/ambient-ui-types": ["packages/kbn-ambient-ui-types"], - "@kbn/ambient-ui-types/*": ["packages/kbn-ambient-ui-types/*"], - "@kbn/analytics": ["packages/kbn-analytics"], - "@kbn/analytics/*": ["packages/kbn-analytics/*"], - "@kbn/apm-config-loader": ["packages/kbn-apm-config-loader"], - "@kbn/apm-config-loader/*": ["packages/kbn-apm-config-loader/*"], - "@kbn/apm-synthtrace": ["packages/kbn-apm-synthtrace"], - "@kbn/apm-synthtrace/*": ["packages/kbn-apm-synthtrace/*"], - "@kbn/apm-utils": ["packages/kbn-apm-utils"], - "@kbn/apm-utils/*": ["packages/kbn-apm-utils/*"], - "@kbn/axe-config": ["packages/kbn-axe-config"], - "@kbn/axe-config/*": ["packages/kbn-axe-config/*"], - "@kbn/babel-plugin-synthetic-packages": ["packages/kbn-babel-plugin-synthetic-packages"], - "@kbn/babel-plugin-synthetic-packages/*": ["packages/kbn-babel-plugin-synthetic-packages/*"], - "@kbn/babel-preset": ["packages/kbn-babel-preset"], - "@kbn/babel-preset/*": ["packages/kbn-babel-preset/*"], - "@kbn/bazel-packages": ["packages/kbn-bazel-packages"], - "@kbn/bazel-packages/*": ["packages/kbn-bazel-packages/*"], - "@kbn/bazel-runner": ["packages/kbn-bazel-runner"], - "@kbn/bazel-runner/*": ["packages/kbn-bazel-runner/*"], - "@kbn/cases-components": ["packages/kbn-cases-components"], - "@kbn/cases-components/*": ["packages/kbn-cases-components/*"], - "@kbn/chart-icons": ["packages/kbn-chart-icons"], - "@kbn/chart-icons/*": ["packages/kbn-chart-icons/*"], - "@kbn/ci-stats-core": ["packages/kbn-ci-stats-core"], - "@kbn/ci-stats-core/*": ["packages/kbn-ci-stats-core/*"], - "@kbn/ci-stats-performance-metrics": ["packages/kbn-ci-stats-performance-metrics"], - "@kbn/ci-stats-performance-metrics/*": ["packages/kbn-ci-stats-performance-metrics/*"], - "@kbn/ci-stats-reporter": ["packages/kbn-ci-stats-reporter"], - "@kbn/ci-stats-reporter/*": ["packages/kbn-ci-stats-reporter/*"], - "@kbn/cli-dev-mode": ["packages/kbn-cli-dev-mode"], - "@kbn/cli-dev-mode/*": ["packages/kbn-cli-dev-mode/*"], - "@kbn/coloring": ["packages/kbn-coloring"], - "@kbn/coloring/*": ["packages/kbn-coloring/*"], - "@kbn/config": ["packages/kbn-config"], - "@kbn/config/*": ["packages/kbn-config/*"], - "@kbn/config-mocks": ["packages/kbn-config-mocks"], - "@kbn/config-mocks/*": ["packages/kbn-config-mocks/*"], - "@kbn/config-schema": ["packages/kbn-config-schema"], - "@kbn/config-schema/*": ["packages/kbn-config-schema/*"], + "@kbn/coverage-fixtures-plugin": ["test/common/fixtures/plugins/coverage"], + "@kbn/coverage-fixtures-plugin/*": ["test/common/fixtures/plugins/coverage/*"], + "@kbn/cross-cluster-replication-plugin": ["x-pack/plugins/cross_cluster_replication"], + "@kbn/cross-cluster-replication-plugin/*": ["x-pack/plugins/cross_cluster_replication/*"], "@kbn/crypto": ["packages/kbn-crypto"], "@kbn/crypto/*": ["packages/kbn-crypto/*"], "@kbn/crypto-browser": ["packages/kbn-crypto-browser"], "@kbn/crypto-browser/*": ["packages/kbn-crypto-browser/*"], + "@kbn/custom-branding-plugin": ["x-pack/plugins/custom_branding"], + "@kbn/custom-branding-plugin/*": ["x-pack/plugins/custom_branding/*"], + "@kbn/custom-integrations-plugin": ["src/plugins/custom_integrations"], + "@kbn/custom-integrations-plugin/*": ["src/plugins/custom_integrations/*"], + "@kbn/cypress-config": ["packages/kbn-cypress-config"], + "@kbn/cypress-config/*": ["packages/kbn-cypress-config/*"], + "@kbn/dashboard-embeddable-examples-plugin": ["examples/dashboard_embeddable_examples"], + "@kbn/dashboard-embeddable-examples-plugin/*": ["examples/dashboard_embeddable_examples/*"], + "@kbn/dashboard-enhanced-plugin": ["x-pack/plugins/dashboard_enhanced"], + "@kbn/dashboard-enhanced-plugin/*": ["x-pack/plugins/dashboard_enhanced/*"], + "@kbn/dashboard-plugin": ["src/plugins/dashboard"], + "@kbn/dashboard-plugin/*": ["src/plugins/dashboard/*"], + "@kbn/data-plugin": ["src/plugins/data"], + "@kbn/data-plugin/*": ["src/plugins/data/*"], + "@kbn/data-search-plugin": ["test/plugin_functional/plugins/data_search"], + "@kbn/data-search-plugin/*": ["test/plugin_functional/plugins/data_search/*"], + "@kbn/data-view-editor-plugin": ["src/plugins/data_view_editor"], + "@kbn/data-view-editor-plugin/*": ["src/plugins/data_view_editor/*"], + "@kbn/data-view-field-editor-example-plugin": ["examples/data_view_field_editor_example"], + "@kbn/data-view-field-editor-example-plugin/*": ["examples/data_view_field_editor_example/*"], + "@kbn/data-view-field-editor-plugin": ["src/plugins/data_view_field_editor"], + "@kbn/data-view-field-editor-plugin/*": ["src/plugins/data_view_field_editor/*"], + "@kbn/data-view-management-plugin": ["src/plugins/data_view_management"], + "@kbn/data-view-management-plugin/*": ["src/plugins/data_view_management/*"], + "@kbn/data-views-plugin": ["src/plugins/data_views"], + "@kbn/data-views-plugin/*": ["src/plugins/data_views/*"], + "@kbn/data-visualizer-plugin": ["x-pack/plugins/data_visualizer"], + "@kbn/data-visualizer-plugin/*": ["x-pack/plugins/data_visualizer/*"], "@kbn/datemath": ["packages/kbn-datemath"], "@kbn/datemath/*": ["packages/kbn-datemath/*"], "@kbn/dev-cli-errors": ["packages/kbn-dev-cli-errors"], @@ -434,8 +556,16 @@ "@kbn/dev-cli-runner/*": ["packages/kbn-dev-cli-runner/*"], "@kbn/dev-proc-runner": ["packages/kbn-dev-proc-runner"], "@kbn/dev-proc-runner/*": ["packages/kbn-dev-proc-runner/*"], + "@kbn/dev-tools-plugin": ["src/plugins/dev_tools"], + "@kbn/dev-tools-plugin/*": ["src/plugins/dev_tools/*"], "@kbn/dev-utils": ["packages/kbn-dev-utils"], "@kbn/dev-utils/*": ["packages/kbn-dev-utils/*"], + "@kbn/developer-examples-plugin": ["examples/developer_examples"], + "@kbn/developer-examples-plugin/*": ["examples/developer_examples/*"], + "@kbn/discover-enhanced-plugin": ["x-pack/plugins/discover_enhanced"], + "@kbn/discover-enhanced-plugin/*": ["x-pack/plugins/discover_enhanced/*"], + "@kbn/discover-plugin": ["src/plugins/discover"], + "@kbn/discover-plugin/*": ["src/plugins/discover/*"], "@kbn/doc-links": ["packages/kbn-doc-links"], "@kbn/doc-links/*": ["packages/kbn-doc-links/*"], "@kbn/docs-utils": ["packages/kbn-docs-utils"], @@ -444,6 +574,24 @@ "@kbn/ebt-tools/*": ["packages/kbn-ebt-tools/*"], "@kbn/ecs": ["packages/kbn-ecs"], "@kbn/ecs/*": ["packages/kbn-ecs/*"], + "@kbn/elasticsearch-client-plugin": ["test/plugin_functional/plugins/elasticsearch_client_plugin"], + "@kbn/elasticsearch-client-plugin/*": ["test/plugin_functional/plugins/elasticsearch_client_plugin/*"], + "@kbn/elasticsearch-client-xpack-plugin": ["x-pack/test/plugin_api_integration/plugins/elasticsearch_client"], + "@kbn/elasticsearch-client-xpack-plugin/*": ["x-pack/test/plugin_api_integration/plugins/elasticsearch_client/*"], + "@kbn/embeddable-enhanced-plugin": ["x-pack/plugins/embeddable_enhanced"], + "@kbn/embeddable-enhanced-plugin/*": ["x-pack/plugins/embeddable_enhanced/*"], + "@kbn/embeddable-examples-plugin": ["examples/embeddable_examples"], + "@kbn/embeddable-examples-plugin/*": ["examples/embeddable_examples/*"], + "@kbn/embeddable-explorer-plugin": ["examples/embeddable_explorer"], + "@kbn/embeddable-explorer-plugin/*": ["examples/embeddable_explorer/*"], + "@kbn/embeddable-plugin": ["src/plugins/embeddable"], + "@kbn/embeddable-plugin/*": ["src/plugins/embeddable/*"], + "@kbn/embedded-lens-example-plugin": ["x-pack/examples/embedded_lens_example"], + "@kbn/embedded-lens-example-plugin/*": ["x-pack/examples/embedded_lens_example/*"], + "@kbn/encrypted-saved-objects-plugin": ["x-pack/plugins/encrypted_saved_objects"], + "@kbn/encrypted-saved-objects-plugin/*": ["x-pack/plugins/encrypted_saved_objects/*"], + "@kbn/enterprise-search-plugin": ["x-pack/plugins/enterprise_search"], + "@kbn/enterprise-search-plugin/*": ["x-pack/plugins/enterprise_search/*"], "@kbn/es": ["packages/kbn-es"], "@kbn/es/*": ["packages/kbn-es/*"], "@kbn/es-archiver": ["packages/kbn-es-archiver"], @@ -454,6 +602,8 @@ "@kbn/es-query/*": ["packages/kbn-es-query/*"], "@kbn/es-types": ["packages/kbn-es-types"], "@kbn/es-types/*": ["packages/kbn-es-types/*"], + "@kbn/es-ui-shared-plugin": ["src/plugins/es_ui_shared"], + "@kbn/es-ui-shared-plugin/*": ["src/plugins/es_ui_shared/*"], "@kbn/eslint-config": ["packages/kbn-eslint-config"], "@kbn/eslint-config/*": ["packages/kbn-eslint-config/*"], "@kbn/eslint-plugin-disable": ["packages/kbn-eslint-plugin-disable"], @@ -462,14 +612,70 @@ "@kbn/eslint-plugin-eslint/*": ["packages/kbn-eslint-plugin-eslint/*"], "@kbn/eslint-plugin-imports": ["packages/kbn-eslint-plugin-imports"], "@kbn/eslint-plugin-imports/*": ["packages/kbn-eslint-plugin-imports/*"], + "@kbn/event-annotation-plugin": ["src/plugins/event_annotation"], + "@kbn/event-annotation-plugin/*": ["src/plugins/event_annotation/*"], + "@kbn/event-log-fixture-plugin": ["x-pack/test/plugin_api_integration/plugins/event_log"], + "@kbn/event-log-fixture-plugin/*": ["x-pack/test/plugin_api_integration/plugins/event_log/*"], + "@kbn/event-log-plugin": ["x-pack/plugins/event_log"], + "@kbn/event-log-plugin/*": ["x-pack/plugins/event_log/*"], "@kbn/expect": ["packages/kbn-expect"], "@kbn/expect/*": ["packages/kbn-expect/*"], + "@kbn/exploratory-view-example-plugin": ["x-pack/examples/exploratory_view_example"], + "@kbn/exploratory-view-example-plugin/*": ["x-pack/examples/exploratory_view_example/*"], + "@kbn/expression-error-plugin": ["src/plugins/expression_error"], + "@kbn/expression-error-plugin/*": ["src/plugins/expression_error/*"], + "@kbn/expression-gauge-plugin": ["src/plugins/chart_expressions/expression_gauge"], + "@kbn/expression-gauge-plugin/*": ["src/plugins/chart_expressions/expression_gauge/*"], + "@kbn/expression-heatmap-plugin": ["src/plugins/chart_expressions/expression_heatmap"], + "@kbn/expression-heatmap-plugin/*": ["src/plugins/chart_expressions/expression_heatmap/*"], + "@kbn/expression-image-plugin": ["src/plugins/expression_image"], + "@kbn/expression-image-plugin/*": ["src/plugins/expression_image/*"], + "@kbn/expression-legacy-metric-vis-plugin": ["src/plugins/chart_expressions/expression_legacy_metric"], + "@kbn/expression-legacy-metric-vis-plugin/*": ["src/plugins/chart_expressions/expression_legacy_metric/*"], + "@kbn/expression-metric-plugin": ["src/plugins/expression_metric"], + "@kbn/expression-metric-plugin/*": ["src/plugins/expression_metric/*"], + "@kbn/expression-metric-vis-plugin": ["src/plugins/chart_expressions/expression_metric"], + "@kbn/expression-metric-vis-plugin/*": ["src/plugins/chart_expressions/expression_metric/*"], + "@kbn/expression-partition-vis-plugin": ["src/plugins/chart_expressions/expression_partition_vis"], + "@kbn/expression-partition-vis-plugin/*": ["src/plugins/chart_expressions/expression_partition_vis/*"], + "@kbn/expression-repeat-image-plugin": ["src/plugins/expression_repeat_image"], + "@kbn/expression-repeat-image-plugin/*": ["src/plugins/expression_repeat_image/*"], + "@kbn/expression-reveal-image-plugin": ["src/plugins/expression_reveal_image"], + "@kbn/expression-reveal-image-plugin/*": ["src/plugins/expression_reveal_image/*"], + "@kbn/expression-shape-plugin": ["src/plugins/expression_shape"], + "@kbn/expression-shape-plugin/*": ["src/plugins/expression_shape/*"], + "@kbn/expression-tagcloud-plugin": ["src/plugins/chart_expressions/expression_tagcloud"], + "@kbn/expression-tagcloud-plugin/*": ["src/plugins/chart_expressions/expression_tagcloud/*"], + "@kbn/expression-xy-plugin": ["src/plugins/chart_expressions/expression_xy"], + "@kbn/expression-xy-plugin/*": ["src/plugins/chart_expressions/expression_xy/*"], + "@kbn/expressions-explorer-plugin": ["examples/expressions_explorer"], + "@kbn/expressions-explorer-plugin/*": ["examples/expressions_explorer/*"], + "@kbn/expressions-plugin": ["src/plugins/expressions"], + "@kbn/expressions-plugin/*": ["src/plugins/expressions/*"], "@kbn/failed-test-reporter-cli": ["packages/kbn-failed-test-reporter-cli"], "@kbn/failed-test-reporter-cli/*": ["packages/kbn-failed-test-reporter-cli/*"], + "@kbn/feature-usage-test-plugin": ["x-pack/test/plugin_api_integration/plugins/feature_usage_test"], + "@kbn/feature-usage-test-plugin/*": ["x-pack/test/plugin_api_integration/plugins/feature_usage_test/*"], + "@kbn/features-plugin": ["x-pack/plugins/features"], + "@kbn/features-plugin/*": ["x-pack/plugins/features/*"], + "@kbn/field-formats-example-plugin": ["examples/field_formats_example"], + "@kbn/field-formats-example-plugin/*": ["examples/field_formats_example/*"], + "@kbn/field-formats-plugin": ["src/plugins/field_formats"], + "@kbn/field-formats-plugin/*": ["src/plugins/field_formats/*"], "@kbn/field-types": ["packages/kbn-field-types"], "@kbn/field-types/*": ["packages/kbn-field-types/*"], + "@kbn/file-upload-plugin": ["x-pack/plugins/file_upload"], + "@kbn/file-upload-plugin/*": ["x-pack/plugins/file_upload/*"], + "@kbn/files-example-plugin": ["examples/files_example"], + "@kbn/files-example-plugin/*": ["examples/files_example/*"], + "@kbn/files-management-plugin": ["src/plugins/files_management"], + "@kbn/files-management-plugin/*": ["src/plugins/files_management/*"], + "@kbn/files-plugin": ["src/plugins/files"], + "@kbn/files-plugin/*": ["src/plugins/files/*"], "@kbn/find-used-node-modules": ["packages/kbn-find-used-node-modules"], "@kbn/find-used-node-modules/*": ["packages/kbn-find-used-node-modules/*"], + "@kbn/fleet-plugin": ["x-pack/plugins/fleet"], + "@kbn/fleet-plugin/*": ["x-pack/plugins/fleet/*"], "@kbn/flot-charts": ["packages/kbn-flot-charts"], "@kbn/flot-charts/*": ["packages/kbn-flot-charts/*"], "@kbn/ftr-common-functional-services": ["packages/kbn-ftr-common-functional-services"], @@ -480,20 +686,64 @@ "@kbn/generate/*": ["packages/kbn-generate/*"], "@kbn/get-repo-files": ["packages/kbn-get-repo-files"], "@kbn/get-repo-files/*": ["packages/kbn-get-repo-files/*"], + "@kbn/global-search-bar-plugin": ["x-pack/plugins/global_search_bar"], + "@kbn/global-search-bar-plugin/*": ["x-pack/plugins/global_search_bar/*"], + "@kbn/global-search-plugin": ["x-pack/plugins/global_search"], + "@kbn/global-search-plugin/*": ["x-pack/plugins/global_search/*"], + "@kbn/global-search-providers-plugin": ["x-pack/plugins/global_search_providers"], + "@kbn/global-search-providers-plugin/*": ["x-pack/plugins/global_search_providers/*"], + "@kbn/global-search-test-plugin": ["x-pack/test/plugin_functional/plugins/global_search_test"], + "@kbn/global-search-test-plugin/*": ["x-pack/test/plugin_functional/plugins/global_search_test/*"], + "@kbn/graph-plugin": ["x-pack/plugins/graph"], + "@kbn/graph-plugin/*": ["x-pack/plugins/graph/*"], + "@kbn/grokdebugger-plugin": ["x-pack/plugins/grokdebugger"], + "@kbn/grokdebugger-plugin/*": ["x-pack/plugins/grokdebugger/*"], "@kbn/guided-onboarding": ["packages/kbn-guided-onboarding"], "@kbn/guided-onboarding/*": ["packages/kbn-guided-onboarding/*"], + "@kbn/guided-onboarding-example-plugin": ["examples/guided_onboarding_example"], + "@kbn/guided-onboarding-example-plugin/*": ["examples/guided_onboarding_example/*"], + "@kbn/guided-onboarding-plugin": ["src/plugins/guided_onboarding"], + "@kbn/guided-onboarding-plugin/*": ["src/plugins/guided_onboarding/*"], "@kbn/handlebars": ["packages/kbn-handlebars"], "@kbn/handlebars/*": ["packages/kbn-handlebars/*"], "@kbn/hapi-mocks": ["packages/kbn-hapi-mocks"], "@kbn/hapi-mocks/*": ["packages/kbn-hapi-mocks/*"], "@kbn/health-gateway-server": ["packages/kbn-health-gateway-server"], "@kbn/health-gateway-server/*": ["packages/kbn-health-gateway-server/*"], + "@kbn/hello-world-plugin": ["examples/hello_world"], + "@kbn/hello-world-plugin/*": ["examples/hello_world/*"], + "@kbn/home-plugin": ["src/plugins/home"], + "@kbn/home-plugin/*": ["src/plugins/home/*"], + "@kbn/home-sample-data-card": ["packages/home/sample_data_card"], + "@kbn/home-sample-data-card/*": ["packages/home/sample_data_card/*"], + "@kbn/home-sample-data-tab": ["packages/home/sample_data_tab"], + "@kbn/home-sample-data-tab/*": ["packages/home/sample_data_tab/*"], + "@kbn/home-sample-data-types": ["packages/home/sample_data_types"], + "@kbn/home-sample-data-types/*": ["packages/home/sample_data_types/*"], "@kbn/i18n": ["packages/kbn-i18n"], "@kbn/i18n/*": ["packages/kbn-i18n/*"], "@kbn/i18n-react": ["packages/kbn-i18n-react"], "@kbn/i18n-react/*": ["packages/kbn-i18n-react/*"], + "@kbn/image-embeddable-plugin": ["src/plugins/image_embeddable"], + "@kbn/image-embeddable-plugin/*": ["src/plugins/image_embeddable/*"], "@kbn/import-resolver": ["packages/kbn-import-resolver"], "@kbn/import-resolver/*": ["packages/kbn-import-resolver/*"], + "@kbn/index-lifecycle-management-plugin": ["x-pack/plugins/index_lifecycle_management"], + "@kbn/index-lifecycle-management-plugin/*": ["x-pack/plugins/index_lifecycle_management/*"], + "@kbn/index-management-plugin": ["x-pack/plugins/index_management"], + "@kbn/index-management-plugin/*": ["x-pack/plugins/index_management/*"], + "@kbn/index-patterns-test-plugin": ["test/plugin_functional/plugins/index_patterns"], + "@kbn/index-patterns-test-plugin/*": ["test/plugin_functional/plugins/index_patterns/*"], + "@kbn/infra-plugin": ["x-pack/plugins/infra"], + "@kbn/infra-plugin/*": ["x-pack/plugins/infra/*"], + "@kbn/ingest-pipelines-plugin": ["x-pack/plugins/ingest_pipelines"], + "@kbn/ingest-pipelines-plugin/*": ["x-pack/plugins/ingest_pipelines/*"], + "@kbn/input-control-vis-plugin": ["src/plugins/input_control_vis"], + "@kbn/input-control-vis-plugin/*": ["src/plugins/input_control_vis/*"], + "@kbn/inspector-plugin": ["src/plugins/inspector"], + "@kbn/inspector-plugin/*": ["src/plugins/inspector/*"], + "@kbn/interactive-setup-plugin": ["src/plugins/interactive_setup"], + "@kbn/interactive-setup-plugin/*": ["src/plugins/interactive_setup/*"], "@kbn/interpreter": ["packages/kbn-interpreter"], "@kbn/interpreter/*": ["packages/kbn-interpreter/*"], "@kbn/io-ts-utils": ["packages/kbn-io-ts-utils"], @@ -502,28 +752,106 @@ "@kbn/jest-serializers/*": ["packages/kbn-jest-serializers/*"], "@kbn/journeys": ["packages/kbn-journeys"], "@kbn/journeys/*": ["packages/kbn-journeys/*"], + "@kbn/kbn-health-gateway-status-plugin": ["test/health_gateway/plugins/status"], + "@kbn/kbn-health-gateway-status-plugin/*": ["test/health_gateway/plugins/status/*"], + "@kbn/kbn-sample-panel-action-plugin": ["test/plugin_functional/plugins/kbn_sample_panel_action"], + "@kbn/kbn-sample-panel-action-plugin/*": ["test/plugin_functional/plugins/kbn_sample_panel_action/*"], + "@kbn/kbn-top-nav-plugin": ["test/plugin_functional/plugins/kbn_top_nav"], + "@kbn/kbn-top-nav-plugin/*": ["test/plugin_functional/plugins/kbn_top_nav/*"], + "@kbn/kbn-tp-custom-visualizations-plugin": ["test/plugin_functional/plugins/kbn_tp_custom_visualizations"], + "@kbn/kbn-tp-custom-visualizations-plugin/*": ["test/plugin_functional/plugins/kbn_tp_custom_visualizations/*"], + "@kbn/kbn-tp-run-pipeline-plugin": ["test/interpreter_functional/plugins/kbn_tp_run_pipeline"], + "@kbn/kbn-tp-run-pipeline-plugin/*": ["test/interpreter_functional/plugins/kbn_tp_run_pipeline/*"], "@kbn/kibana-manifest-schema": ["packages/kbn-kibana-manifest-schema"], "@kbn/kibana-manifest-schema/*": ["packages/kbn-kibana-manifest-schema/*"], + "@kbn/kibana-overview-plugin": ["src/plugins/kibana_overview"], + "@kbn/kibana-overview-plugin/*": ["src/plugins/kibana_overview/*"], + "@kbn/kibana-react-plugin": ["src/plugins/kibana_react"], + "@kbn/kibana-react-plugin/*": ["src/plugins/kibana_react/*"], + "@kbn/kibana-usage-collection-plugin": ["src/plugins/kibana_usage_collection"], + "@kbn/kibana-usage-collection-plugin/*": ["src/plugins/kibana_usage_collection/*"], + "@kbn/kibana-utils-plugin": ["src/plugins/kibana_utils"], + "@kbn/kibana-utils-plugin/*": ["src/plugins/kibana_utils/*"], + "@kbn/kubernetes-security-plugin": ["x-pack/plugins/kubernetes_security"], + "@kbn/kubernetes-security-plugin/*": ["x-pack/plugins/kubernetes_security/*"], "@kbn/language-documentation-popover": ["packages/kbn-language-documentation-popover"], "@kbn/language-documentation-popover/*": ["packages/kbn-language-documentation-popover/*"], + "@kbn/lens-plugin": ["x-pack/plugins/lens"], + "@kbn/lens-plugin/*": ["x-pack/plugins/lens/*"], + "@kbn/license-api-guard-plugin": ["x-pack/plugins/license_api_guard"], + "@kbn/license-api-guard-plugin/*": ["x-pack/plugins/license_api_guard/*"], + "@kbn/license-management-plugin": ["x-pack/plugins/license_management"], + "@kbn/license-management-plugin/*": ["x-pack/plugins/license_management/*"], + "@kbn/licensing-plugin": ["x-pack/plugins/licensing"], + "@kbn/licensing-plugin/*": ["x-pack/plugins/licensing/*"], + "@kbn/lists-plugin": ["x-pack/plugins/lists"], + "@kbn/lists-plugin/*": ["x-pack/plugins/lists/*"], + "@kbn/locator-examples-plugin": ["examples/locator_examples"], + "@kbn/locator-examples-plugin/*": ["examples/locator_examples/*"], + "@kbn/locator-explorer-plugin": ["examples/locator_explorer"], + "@kbn/locator-explorer-plugin/*": ["examples/locator_explorer/*"], "@kbn/logging": ["packages/kbn-logging"], "@kbn/logging/*": ["packages/kbn-logging/*"], "@kbn/logging-mocks": ["packages/kbn-logging-mocks"], "@kbn/logging-mocks/*": ["packages/kbn-logging-mocks/*"], + "@kbn/logstash-plugin": ["x-pack/plugins/logstash"], + "@kbn/logstash-plugin/*": ["x-pack/plugins/logstash/*"], "@kbn/managed-vscode-config": ["packages/kbn-managed-vscode-config"], "@kbn/managed-vscode-config/*": ["packages/kbn-managed-vscode-config/*"], "@kbn/managed-vscode-config-cli": ["packages/kbn-managed-vscode-config-cli"], "@kbn/managed-vscode-config-cli/*": ["packages/kbn-managed-vscode-config-cli/*"], + "@kbn/management-plugin": ["src/plugins/management"], + "@kbn/management-plugin/*": ["src/plugins/management/*"], + "@kbn/management-test-plugin": ["test/plugin_functional/plugins/management_test_plugin"], + "@kbn/management-test-plugin/*": ["test/plugin_functional/plugins/management_test_plugin/*"], "@kbn/mapbox-gl": ["packages/kbn-mapbox-gl"], "@kbn/mapbox-gl/*": ["packages/kbn-mapbox-gl/*"], + "@kbn/maps-custom-raster-source-plugin": ["x-pack/examples/third_party_maps_source_example"], + "@kbn/maps-custom-raster-source-plugin/*": ["x-pack/examples/third_party_maps_source_example/*"], + "@kbn/maps-ems-plugin": ["src/plugins/maps_ems"], + "@kbn/maps-ems-plugin/*": ["src/plugins/maps_ems/*"], + "@kbn/maps-plugin": ["x-pack/plugins/maps"], + "@kbn/maps-plugin/*": ["x-pack/plugins/maps/*"], + "@kbn/ml-agg-utils": ["x-pack/packages/ml/agg_utils"], + "@kbn/ml-agg-utils/*": ["x-pack/packages/ml/agg_utils/*"], + "@kbn/ml-is-populated-object": ["x-pack/packages/ml/is_populated_object"], + "@kbn/ml-is-populated-object/*": ["x-pack/packages/ml/is_populated_object/*"], + "@kbn/ml-plugin": ["x-pack/plugins/ml"], + "@kbn/ml-plugin/*": ["x-pack/plugins/ml/*"], + "@kbn/ml-string-hash": ["x-pack/packages/ml/string_hash"], + "@kbn/ml-string-hash/*": ["x-pack/packages/ml/string_hash/*"], "@kbn/monaco": ["packages/kbn-monaco"], "@kbn/monaco/*": ["packages/kbn-monaco/*"], + "@kbn/monitoring-collection-plugin": ["x-pack/plugins/monitoring_collection"], + "@kbn/monitoring-collection-plugin/*": ["x-pack/plugins/monitoring_collection/*"], + "@kbn/monitoring-plugin": ["x-pack/plugins/monitoring"], + "@kbn/monitoring-plugin/*": ["x-pack/plugins/monitoring/*"], + "@kbn/navigation-plugin": ["src/plugins/navigation"], + "@kbn/navigation-plugin/*": ["src/plugins/navigation/*"], + "@kbn/newsfeed-fixtures-plugin": ["test/common/fixtures/plugins/newsfeed"], + "@kbn/newsfeed-fixtures-plugin/*": ["test/common/fixtures/plugins/newsfeed/*"], + "@kbn/newsfeed-plugin": ["src/plugins/newsfeed"], + "@kbn/newsfeed-plugin/*": ["src/plugins/newsfeed/*"], + "@kbn/notifications-plugin": ["x-pack/plugins/notifications"], + "@kbn/notifications-plugin/*": ["x-pack/plugins/notifications/*"], + "@kbn/observability-plugin": ["x-pack/plugins/observability"], + "@kbn/observability-plugin/*": ["x-pack/plugins/observability/*"], + "@kbn/open-telemetry-instrumented-plugin": ["test/common/fixtures/plugins/otel_metrics"], + "@kbn/open-telemetry-instrumented-plugin/*": ["test/common/fixtures/plugins/otel_metrics/*"], "@kbn/optimizer": ["packages/kbn-optimizer"], "@kbn/optimizer/*": ["packages/kbn-optimizer/*"], "@kbn/optimizer-webpack-helpers": ["packages/kbn-optimizer-webpack-helpers"], "@kbn/optimizer-webpack-helpers/*": ["packages/kbn-optimizer-webpack-helpers/*"], "@kbn/osquery-io-ts-types": ["packages/kbn-osquery-io-ts-types"], "@kbn/osquery-io-ts-types/*": ["packages/kbn-osquery-io-ts-types/*"], + "@kbn/osquery-plugin": ["x-pack/plugins/osquery"], + "@kbn/osquery-plugin/*": ["x-pack/plugins/osquery/*"], + "@kbn/package-map": ["packages/kbn-package-map"], + "@kbn/package-map/*": ["packages/kbn-package-map/*"], + "@kbn/paertial-results-example-plugin": ["examples/partial_results_example"], + "@kbn/paertial-results-example-plugin/*": ["examples/partial_results_example/*"], + "@kbn/painless-lab-plugin": ["x-pack/plugins/painless_lab"], + "@kbn/painless-lab-plugin/*": ["x-pack/plugins/painless_lab/*"], "@kbn/peggy": ["packages/kbn-peggy"], "@kbn/peggy/*": ["packages/kbn-peggy/*"], "@kbn/peggy-loader": ["packages/kbn-peggy-loader"], @@ -536,18 +864,86 @@ "@kbn/plugin-generator/*": ["packages/kbn-plugin-generator/*"], "@kbn/plugin-helpers": ["packages/kbn-plugin-helpers"], "@kbn/plugin-helpers/*": ["packages/kbn-plugin-helpers/*"], + "@kbn/preboot-example-plugin": ["examples/preboot_example"], + "@kbn/preboot-example-plugin/*": ["examples/preboot_example/*"], + "@kbn/presentation-util-plugin": ["src/plugins/presentation_util"], + "@kbn/presentation-util-plugin/*": ["src/plugins/presentation_util/*"], + "@kbn/profiling-plugin": ["x-pack/plugins/profiling"], + "@kbn/profiling-plugin/*": ["x-pack/plugins/profiling/*"], "@kbn/react-field": ["packages/kbn-react-field"], "@kbn/react-field/*": ["packages/kbn-react-field/*"], + "@kbn/remote-clusters-plugin": ["x-pack/plugins/remote_clusters"], + "@kbn/remote-clusters-plugin/*": ["x-pack/plugins/remote_clusters/*"], + "@kbn/rendering-plugin": ["test/plugin_functional/plugins/rendering_plugin"], + "@kbn/rendering-plugin/*": ["test/plugin_functional/plugins/rendering_plugin/*"], + "@kbn/repo-info": ["packages/kbn-repo-info"], + "@kbn/repo-info/*": ["packages/kbn-repo-info/*"], + "@kbn/repo-path": ["packages/kbn-repo-path"], + "@kbn/repo-path/*": ["packages/kbn-repo-path/*"], "@kbn/repo-source-classifier": ["packages/kbn-repo-source-classifier"], "@kbn/repo-source-classifier/*": ["packages/kbn-repo-source-classifier/*"], "@kbn/repo-source-classifier-cli": ["packages/kbn-repo-source-classifier-cli"], "@kbn/repo-source-classifier-cli/*": ["packages/kbn-repo-source-classifier-cli/*"], + "@kbn/reporting-example-plugin": ["x-pack/examples/reporting_example"], + "@kbn/reporting-example-plugin/*": ["x-pack/examples/reporting_example/*"], + "@kbn/reporting-plugin": ["x-pack/plugins/reporting"], + "@kbn/reporting-plugin/*": ["x-pack/plugins/reporting/*"], + "@kbn/resolver-test-plugin": ["x-pack/test/plugin_functional/plugins/resolver_test"], + "@kbn/resolver-test-plugin/*": ["x-pack/test/plugin_functional/plugins/resolver_test/*"], + "@kbn/response-stream-plugin": ["examples/response_stream"], + "@kbn/response-stream-plugin/*": ["examples/response_stream/*"], "@kbn/rison": ["packages/kbn-rison"], "@kbn/rison/*": ["packages/kbn-rison/*"], + "@kbn/rollup-plugin": ["x-pack/plugins/rollup"], + "@kbn/rollup-plugin/*": ["x-pack/plugins/rollup/*"], + "@kbn/routing-example-plugin": ["examples/routing_example"], + "@kbn/routing-example-plugin/*": ["examples/routing_example/*"], "@kbn/rule-data-utils": ["packages/kbn-rule-data-utils"], "@kbn/rule-data-utils/*": ["packages/kbn-rule-data-utils/*"], + "@kbn/rule-registry-plugin": ["x-pack/plugins/rule_registry"], + "@kbn/rule-registry-plugin/*": ["x-pack/plugins/rule_registry/*"], + "@kbn/runtime-fields-plugin": ["x-pack/plugins/runtime_fields"], + "@kbn/runtime-fields-plugin/*": ["x-pack/plugins/runtime_fields/*"], "@kbn/safer-lodash-set": ["packages/kbn-safer-lodash-set"], "@kbn/safer-lodash-set/*": ["packages/kbn-safer-lodash-set/*"], + "@kbn/sample-task-plugin": ["x-pack/test/plugin_api_integration/plugins/sample_task_plugin"], + "@kbn/sample-task-plugin/*": ["x-pack/test/plugin_api_integration/plugins/sample_task_plugin/*"], + "@kbn/saved-object-export-transforms-plugin": ["test/plugin_functional/plugins/saved_object_export_transforms"], + "@kbn/saved-object-export-transforms-plugin/*": ["test/plugin_functional/plugins/saved_object_export_transforms/*"], + "@kbn/saved-object-import-warnings-plugin": ["test/plugin_functional/plugins/saved_object_import_warnings"], + "@kbn/saved-object-import-warnings-plugin/*": ["test/plugin_functional/plugins/saved_object_import_warnings/*"], + "@kbn/saved-objects-finder-plugin": ["src/plugins/saved_objects_finder"], + "@kbn/saved-objects-finder-plugin/*": ["src/plugins/saved_objects_finder/*"], + "@kbn/saved-objects-hidden-type-plugin": ["test/plugin_functional/plugins/saved_objects_hidden_type"], + "@kbn/saved-objects-hidden-type-plugin/*": ["test/plugin_functional/plugins/saved_objects_hidden_type/*"], + "@kbn/saved-objects-management-plugin": ["src/plugins/saved_objects_management"], + "@kbn/saved-objects-management-plugin/*": ["src/plugins/saved_objects_management/*"], + "@kbn/saved-objects-plugin": ["src/plugins/saved_objects"], + "@kbn/saved-objects-plugin/*": ["src/plugins/saved_objects/*"], + "@kbn/saved-objects-tagging-oss-plugin": ["src/plugins/saved_objects_tagging_oss"], + "@kbn/saved-objects-tagging-oss-plugin/*": ["src/plugins/saved_objects_tagging_oss/*"], + "@kbn/saved-objects-tagging-plugin": ["x-pack/plugins/saved_objects_tagging"], + "@kbn/saved-objects-tagging-plugin/*": ["x-pack/plugins/saved_objects_tagging/*"], + "@kbn/saved-search-plugin": ["src/plugins/saved_search"], + "@kbn/saved-search-plugin/*": ["src/plugins/saved_search/*"], + "@kbn/screenshot-mode-example-plugin": ["examples/screenshot_mode_example"], + "@kbn/screenshot-mode-example-plugin/*": ["examples/screenshot_mode_example/*"], + "@kbn/screenshot-mode-plugin": ["src/plugins/screenshot_mode"], + "@kbn/screenshot-mode-plugin/*": ["src/plugins/screenshot_mode/*"], + "@kbn/screenshotting-example-plugin": ["x-pack/examples/screenshotting_example"], + "@kbn/screenshotting-example-plugin/*": ["x-pack/examples/screenshotting_example/*"], + "@kbn/screenshotting-plugin": ["x-pack/plugins/screenshotting"], + "@kbn/screenshotting-plugin/*": ["x-pack/plugins/screenshotting/*"], + "@kbn/search-examples-plugin": ["examples/search_examples"], + "@kbn/search-examples-plugin/*": ["examples/search_examples/*"], + "@kbn/searchprofiler-plugin": ["x-pack/plugins/searchprofiler"], + "@kbn/searchprofiler-plugin/*": ["x-pack/plugins/searchprofiler/*"], + "@kbn/security-plugin": ["x-pack/plugins/security"], + "@kbn/security-plugin/*": ["x-pack/plugins/security/*"], + "@kbn/security-solution-plugin": ["x-pack/plugins/security_solution"], + "@kbn/security-solution-plugin/*": ["x-pack/plugins/security_solution/*"], + "@kbn/security-test-endpoints-plugin": ["x-pack/test/security_functional/fixtures/common/test_endpoints"], + "@kbn/security-test-endpoints-plugin/*": ["x-pack/test/security_functional/fixtures/common/test_endpoints/*"], "@kbn/securitysolution-autocomplete": ["packages/kbn-securitysolution-autocomplete"], "@kbn/securitysolution-autocomplete/*": ["packages/kbn-securitysolution-autocomplete/*"], "@kbn/securitysolution-es-utils": ["packages/kbn-securitysolution-es-utils"], @@ -582,76 +978,28 @@ "@kbn/server-http-tools/*": ["packages/kbn-server-http-tools/*"], "@kbn/server-route-repository": ["packages/kbn-server-route-repository"], "@kbn/server-route-repository/*": ["packages/kbn-server-route-repository/*"], + "@kbn/session-notifications-plugin": ["test/plugin_functional/plugins/session_notifications"], + "@kbn/session-notifications-plugin/*": ["test/plugin_functional/plugins/session_notifications/*"], + "@kbn/session-view-plugin": ["x-pack/plugins/session_view"], + "@kbn/session-view-plugin/*": ["x-pack/plugins/session_view/*"], + "@kbn/share-examples-plugin": ["examples/share_examples"], + "@kbn/share-examples-plugin/*": ["examples/share_examples/*"], + "@kbn/share-plugin": ["src/plugins/share"], + "@kbn/share-plugin/*": ["src/plugins/share/*"], "@kbn/shared-svg": ["packages/kbn-shared-svg"], "@kbn/shared-svg/*": ["packages/kbn-shared-svg/*"], - "@kbn/shared-ux-utility": ["packages/kbn-shared-ux-utility"], - "@kbn/shared-ux-utility/*": ["packages/kbn-shared-ux-utility/*"], - "@kbn/some-dev-log": ["packages/kbn-some-dev-log"], - "@kbn/some-dev-log/*": ["packages/kbn-some-dev-log/*"], - "@kbn/sort-package-json": ["packages/kbn-sort-package-json"], - "@kbn/sort-package-json/*": ["packages/kbn-sort-package-json/*"], - "@kbn/spec-to-console": ["packages/kbn-spec-to-console"], - "@kbn/spec-to-console/*": ["packages/kbn-spec-to-console/*"], - "@kbn/std": ["packages/kbn-std"], - "@kbn/std/*": ["packages/kbn-std/*"], - "@kbn/stdio-dev-helpers": ["packages/kbn-stdio-dev-helpers"], - "@kbn/stdio-dev-helpers/*": ["packages/kbn-stdio-dev-helpers/*"], - "@kbn/storybook": ["packages/kbn-storybook"], - "@kbn/storybook/*": ["packages/kbn-storybook/*"], - "@kbn/synthetic-package-map": ["packages/kbn-synthetic-package-map"], - "@kbn/synthetic-package-map/*": ["packages/kbn-synthetic-package-map/*"], - "@kbn/telemetry-tools": ["packages/kbn-telemetry-tools"], - "@kbn/telemetry-tools/*": ["packages/kbn-telemetry-tools/*"], - "@kbn/test": ["packages/kbn-test"], - "@kbn/test/*": ["packages/kbn-test/*"], - "@kbn/test-jest-helpers": ["packages/kbn-test-jest-helpers"], - "@kbn/test-jest-helpers/*": ["packages/kbn-test-jest-helpers/*"], - "@kbn/test-subj-selector": ["packages/kbn-test-subj-selector"], - "@kbn/test-subj-selector/*": ["packages/kbn-test-subj-selector/*"], - "@kbn/timelion-grammar": ["packages/kbn-timelion-grammar"], - "@kbn/timelion-grammar/*": ["packages/kbn-timelion-grammar/*"], - "@kbn/tinymath": ["packages/kbn-tinymath"], - "@kbn/tinymath/*": ["packages/kbn-tinymath/*"], - "@kbn/tooling-log": ["packages/kbn-tooling-log"], - "@kbn/tooling-log/*": ["packages/kbn-tooling-log/*"], - "@kbn/type-summarizer": ["packages/kbn-type-summarizer"], - "@kbn/type-summarizer/*": ["packages/kbn-type-summarizer/*"], - "@kbn/type-summarizer-cli": ["packages/kbn-type-summarizer-cli"], - "@kbn/type-summarizer-cli/*": ["packages/kbn-type-summarizer-cli/*"], - "@kbn/type-summarizer-core": ["packages/kbn-type-summarizer-core"], - "@kbn/type-summarizer-core/*": ["packages/kbn-type-summarizer-core/*"], - "@kbn/typed-react-router-config": ["packages/kbn-typed-react-router-config"], - "@kbn/typed-react-router-config/*": ["packages/kbn-typed-react-router-config/*"], - "@kbn/ui-framework": ["packages/kbn-ui-framework"], - "@kbn/ui-framework/*": ["packages/kbn-ui-framework/*"], - "@kbn/ui-shared-deps-npm": ["packages/kbn-ui-shared-deps-npm"], - "@kbn/ui-shared-deps-npm/*": ["packages/kbn-ui-shared-deps-npm/*"], - "@kbn/ui-shared-deps-src": ["packages/kbn-ui-shared-deps-src"], - "@kbn/ui-shared-deps-src/*": ["packages/kbn-ui-shared-deps-src/*"], - "@kbn/ui-theme": ["packages/kbn-ui-theme"], - "@kbn/ui-theme/*": ["packages/kbn-ui-theme/*"], - "@kbn/user-profile-components": ["packages/kbn-user-profile-components"], - "@kbn/user-profile-components/*": ["packages/kbn-user-profile-components/*"], - "@kbn/utility-types": ["packages/kbn-utility-types"], - "@kbn/utility-types/*": ["packages/kbn-utility-types/*"], - "@kbn/utility-types-jest": ["packages/kbn-utility-types-jest"], - "@kbn/utility-types-jest/*": ["packages/kbn-utility-types-jest/*"], - "@kbn/utils": ["packages/kbn-utils"], - "@kbn/utils/*": ["packages/kbn-utils/*"], - "@kbn/yarn-lock-validator": ["packages/kbn-yarn-lock-validator"], - "@kbn/yarn-lock-validator/*": ["packages/kbn-yarn-lock-validator/*"], "@kbn/shared-ux-avatar-solution": ["packages/shared-ux/avatar/solution"], "@kbn/shared-ux-avatar-solution/*": ["packages/shared-ux/avatar/solution/*"], "@kbn/shared-ux-avatar-user-profile-components": ["packages/shared-ux/avatar/user_profile/impl"], "@kbn/shared-ux-avatar-user-profile-components/*": ["packages/shared-ux/avatar/user_profile/impl/*"], - "@kbn/shared-ux-button-toolbar": ["packages/shared-ux/button_toolbar"], - "@kbn/shared-ux-button-toolbar/*": ["packages/shared-ux/button_toolbar/*"], "@kbn/shared-ux-button-exit-full-screen": ["packages/shared-ux/button/exit_full_screen/impl"], "@kbn/shared-ux-button-exit-full-screen/*": ["packages/shared-ux/button/exit_full_screen/impl/*"], "@kbn/shared-ux-button-exit-full-screen-mocks": ["packages/shared-ux/button/exit_full_screen/mocks"], "@kbn/shared-ux-button-exit-full-screen-mocks/*": ["packages/shared-ux/button/exit_full_screen/mocks/*"], "@kbn/shared-ux-button-exit-full-screen-types": ["packages/shared-ux/button/exit_full_screen/types"], "@kbn/shared-ux-button-exit-full-screen-types/*": ["packages/shared-ux/button/exit_full_screen/types/*"], + "@kbn/shared-ux-button-toolbar": ["packages/shared-ux/button_toolbar"], + "@kbn/shared-ux-button-toolbar/*": ["packages/shared-ux/button_toolbar/*"], "@kbn/shared-ux-card-no-data": ["packages/shared-ux/card/no_data/impl"], "@kbn/shared-ux-card-no-data/*": ["packages/shared-ux/card/no_data/impl/*"], "@kbn/shared-ux-card-no-data-mocks": ["packages/shared-ux/card/no_data/mocks"], @@ -660,18 +1008,18 @@ "@kbn/shared-ux-card-no-data-types/*": ["packages/shared-ux/card/no_data/types/*"], "@kbn/shared-ux-file-context": ["packages/shared-ux/file/context"], "@kbn/shared-ux-file-context/*": ["packages/shared-ux/file/context/*"], - "@kbn/shared-ux-file-picker": ["packages/shared-ux/file/file_picker/impl"], - "@kbn/shared-ux-file-picker/*": ["packages/shared-ux/file/file_picker/impl/*"], - "@kbn/shared-ux-file-upload": ["packages/shared-ux/file/file_upload/impl"], - "@kbn/shared-ux-file-upload/*": ["packages/shared-ux/file/file_upload/impl/*"], "@kbn/shared-ux-file-image": ["packages/shared-ux/file/image/impl"], "@kbn/shared-ux-file-image/*": ["packages/shared-ux/file/image/impl/*"], "@kbn/shared-ux-file-image-mocks": ["packages/shared-ux/file/image/mocks"], "@kbn/shared-ux-file-image-mocks/*": ["packages/shared-ux/file/image/mocks/*"], "@kbn/shared-ux-file-mocks": ["packages/shared-ux/file/mocks"], "@kbn/shared-ux-file-mocks/*": ["packages/shared-ux/file/mocks/*"], + "@kbn/shared-ux-file-picker": ["packages/shared-ux/file/file_picker/impl"], + "@kbn/shared-ux-file-picker/*": ["packages/shared-ux/file/file_picker/impl/*"], "@kbn/shared-ux-file-types": ["packages/shared-ux/file/types"], "@kbn/shared-ux-file-types/*": ["packages/shared-ux/file/types/*"], + "@kbn/shared-ux-file-upload": ["packages/shared-ux/file/file_upload/impl"], + "@kbn/shared-ux-file-upload/*": ["packages/shared-ux/file/file_upload/impl/*"], "@kbn/shared-ux-file-util": ["packages/shared-ux/file/util"], "@kbn/shared-ux-file-util/*": ["packages/shared-ux/file/util/*"], "@kbn/shared-ux-link-redirect-app": ["packages/shared-ux/link/redirect_app/impl"], @@ -704,14 +1052,14 @@ "@kbn/shared-ux-page-kibana-template-mocks/*": ["packages/shared-ux/page/kibana_template/mocks/*"], "@kbn/shared-ux-page-kibana-template-types": ["packages/shared-ux/page/kibana_template/types"], "@kbn/shared-ux-page-kibana-template-types/*": ["packages/shared-ux/page/kibana_template/types/*"], + "@kbn/shared-ux-page-no-data": ["packages/shared-ux/page/no_data/impl"], + "@kbn/shared-ux-page-no-data/*": ["packages/shared-ux/page/no_data/impl/*"], "@kbn/shared-ux-page-no-data-config": ["packages/shared-ux/page/no_data_config/impl"], "@kbn/shared-ux-page-no-data-config/*": ["packages/shared-ux/page/no_data_config/impl/*"], "@kbn/shared-ux-page-no-data-config-mocks": ["packages/shared-ux/page/no_data_config/mocks"], "@kbn/shared-ux-page-no-data-config-mocks/*": ["packages/shared-ux/page/no_data_config/mocks/*"], "@kbn/shared-ux-page-no-data-config-types": ["packages/shared-ux/page/no_data_config/types"], "@kbn/shared-ux-page-no-data-config-types/*": ["packages/shared-ux/page/no_data_config/types/*"], - "@kbn/shared-ux-page-no-data": ["packages/shared-ux/page/no_data/impl"], - "@kbn/shared-ux-page-no-data/*": ["packages/shared-ux/page/no_data/impl/*"], "@kbn/shared-ux-page-no-data-mocks": ["packages/shared-ux/page/no_data/mocks"], "@kbn/shared-ux-page-no-data-mocks/*": ["packages/shared-ux/page/no_data/mocks/*"], "@kbn/shared-ux-page-no-data-types": ["packages/shared-ux/page/no_data/types"], @@ -736,206 +1084,152 @@ "@kbn/shared-ux-storybook-config/*": ["packages/shared-ux/storybook/config/*"], "@kbn/shared-ux-storybook-mock": ["packages/shared-ux/storybook/mock"], "@kbn/shared-ux-storybook-mock/*": ["packages/shared-ux/storybook/mock/*"], - "@kbn/ml-agg-utils": ["x-pack/packages/ml/agg_utils"], - "@kbn/ml-agg-utils/*": ["x-pack/packages/ml/agg_utils/*"], - "@kbn/aiops-components": ["x-pack/packages/ml/aiops_components"], - "@kbn/aiops-components/*": ["x-pack/packages/ml/aiops_components/*"], - "@kbn/aiops-utils": ["x-pack/packages/ml/aiops_utils"], - "@kbn/aiops-utils/*": ["x-pack/packages/ml/aiops_utils/*"], - "@kbn/ml-is-populated-object": ["x-pack/packages/ml/is_populated_object"], - "@kbn/ml-is-populated-object/*": ["x-pack/packages/ml/is_populated_object/*"], - "@kbn/ml-string-hash": ["x-pack/packages/ml/string_hash"], - "@kbn/ml-string-hash/*": ["x-pack/packages/ml/string_hash/*"], - "@kbn/bfetch-explorer-plugin": ["examples/bfetch_explorer"], - "@kbn/bfetch-explorer-plugin/*": ["examples/bfetch_explorer/*"], - "@kbn/controls-example-plugin": ["examples/controls_example"], - "@kbn/controls-example-plugin/*": ["examples/controls_example/*"], - "@kbn/dashboard-embeddable-examples-plugin": ["examples/dashboard_embeddable_examples"], - "@kbn/dashboard-embeddable-examples-plugin/*": ["examples/dashboard_embeddable_examples/*"], - "@kbn/data-view-field-editor-example-plugin": ["examples/data_view_field_editor_example"], - "@kbn/data-view-field-editor-example-plugin/*": ["examples/data_view_field_editor_example/*"], - "@kbn/developer-examples-plugin": ["examples/developer_examples"], - "@kbn/developer-examples-plugin/*": ["examples/developer_examples/*"], - "@kbn/embeddable-examples-plugin": ["examples/embeddable_examples"], - "@kbn/embeddable-examples-plugin/*": ["examples/embeddable_examples/*"], - "@kbn/embeddable-explorer-plugin": ["examples/embeddable_explorer"], - "@kbn/embeddable-explorer-plugin/*": ["examples/embeddable_explorer/*"], - "@kbn/expressions-explorer-plugin": ["examples/expressions_explorer"], - "@kbn/expressions-explorer-plugin/*": ["examples/expressions_explorer/*"], - "@kbn/field-formats-example-plugin": ["examples/field_formats_example"], - "@kbn/field-formats-example-plugin/*": ["examples/field_formats_example/*"], - "@kbn/files-example-plugin": ["examples/files_example"], - "@kbn/files-example-plugin/*": ["examples/files_example/*"], - "@kbn/guided-onboarding-example-plugin": ["examples/guided_onboarding_example"], - "@kbn/guided-onboarding-example-plugin/*": ["examples/guided_onboarding_example/*"], - "@kbn/hello-world-plugin": ["examples/hello_world"], - "@kbn/hello-world-plugin/*": ["examples/hello_world/*"], - "@kbn/locator-examples-plugin": ["examples/locator_examples"], - "@kbn/locator-examples-plugin/*": ["examples/locator_examples/*"], - "@kbn/locator-explorer-plugin": ["examples/locator_explorer"], - "@kbn/locator-explorer-plugin/*": ["examples/locator_explorer/*"], - "@kbn/paertial-results-example-plugin": ["examples/partial_results_example"], - "@kbn/paertial-results-example-plugin/*": ["examples/partial_results_example/*"], - "@kbn/preboot-example-plugin": ["examples/preboot_example"], - "@kbn/preboot-example-plugin/*": ["examples/preboot_example/*"], - "@kbn/response-stream-plugin": ["examples/response_stream"], - "@kbn/response-stream-plugin/*": ["examples/response_stream/*"], - "@kbn/routing-example-plugin": ["examples/routing_example"], - "@kbn/routing-example-plugin/*": ["examples/routing_example/*"], - "@kbn/screenshot-mode-example-plugin": ["examples/screenshot_mode_example"], - "@kbn/screenshot-mode-example-plugin/*": ["examples/screenshot_mode_example/*"], - "@kbn/search-examples-plugin": ["examples/search_examples"], - "@kbn/search-examples-plugin/*": ["examples/search_examples/*"], - "@kbn/share-examples-plugin": ["examples/share_examples"], - "@kbn/share-examples-plugin/*": ["examples/share_examples/*"], + "@kbn/shared-ux-utility": ["packages/kbn-shared-ux-utility"], + "@kbn/shared-ux-utility/*": ["packages/kbn-shared-ux-utility/*"], + "@kbn/snapshot-restore-plugin": ["x-pack/plugins/snapshot_restore"], + "@kbn/snapshot-restore-plugin/*": ["x-pack/plugins/snapshot_restore/*"], + "@kbn/some-dev-log": ["packages/kbn-some-dev-log"], + "@kbn/some-dev-log/*": ["packages/kbn-some-dev-log/*"], + "@kbn/sort-package-json": ["packages/kbn-sort-package-json"], + "@kbn/sort-package-json/*": ["packages/kbn-sort-package-json/*"], + "@kbn/spaces-plugin": ["x-pack/plugins/spaces"], + "@kbn/spaces-plugin/*": ["x-pack/plugins/spaces/*"], + "@kbn/spec-to-console": ["packages/kbn-spec-to-console"], + "@kbn/spec-to-console/*": ["packages/kbn-spec-to-console/*"], + "@kbn/stack-alerts-plugin": ["x-pack/plugins/stack_alerts"], + "@kbn/stack-alerts-plugin/*": ["x-pack/plugins/stack_alerts/*"], + "@kbn/stack-connectors-plugin": ["x-pack/plugins/stack_connectors"], + "@kbn/stack-connectors-plugin/*": ["x-pack/plugins/stack_connectors/*"], + "@kbn/stack-management-usage-test-plugin": ["x-pack/test/usage_collection/plugins/stack_management_usage_test"], + "@kbn/stack-management-usage-test-plugin/*": ["x-pack/test/usage_collection/plugins/stack_management_usage_test/*"], "@kbn/state-containers-examples-plugin": ["examples/state_containers_examples"], "@kbn/state-containers-examples-plugin/*": ["examples/state_containers_examples/*"], + "@kbn/status-plugin-a-plugin": ["test/server_integration/__fixtures__/plugins/status_plugin_a"], + "@kbn/status-plugin-a-plugin/*": ["test/server_integration/__fixtures__/plugins/status_plugin_a/*"], + "@kbn/status-plugin-b-plugin": ["test/server_integration/__fixtures__/plugins/status_plugin_b"], + "@kbn/status-plugin-b-plugin/*": ["test/server_integration/__fixtures__/plugins/status_plugin_b/*"], + "@kbn/std": ["packages/kbn-std"], + "@kbn/std/*": ["packages/kbn-std/*"], + "@kbn/stdio-dev-helpers": ["packages/kbn-stdio-dev-helpers"], + "@kbn/stdio-dev-helpers/*": ["packages/kbn-stdio-dev-helpers/*"], + "@kbn/storybook": ["packages/kbn-storybook"], + "@kbn/storybook/*": ["packages/kbn-storybook/*"], + "@kbn/synthetics-plugin": ["x-pack/plugins/synthetics"], + "@kbn/synthetics-plugin/*": ["x-pack/plugins/synthetics/*"], + "@kbn/task-manager-performance-plugin": ["x-pack/test/plugin_api_perf/plugins/task_manager_performance"], + "@kbn/task-manager-performance-plugin/*": ["x-pack/test/plugin_api_perf/plugins/task_manager_performance/*"], + "@kbn/task-manager-plugin": ["x-pack/plugins/task_manager"], + "@kbn/task-manager-plugin/*": ["x-pack/plugins/task_manager/*"], + "@kbn/telemetry-collection-manager-plugin": ["src/plugins/telemetry_collection_manager"], + "@kbn/telemetry-collection-manager-plugin/*": ["src/plugins/telemetry_collection_manager/*"], + "@kbn/telemetry-collection-xpack-plugin": ["x-pack/plugins/telemetry_collection_xpack"], + "@kbn/telemetry-collection-xpack-plugin/*": ["x-pack/plugins/telemetry_collection_xpack/*"], + "@kbn/telemetry-management-section-plugin": ["src/plugins/telemetry_management_section"], + "@kbn/telemetry-management-section-plugin/*": ["src/plugins/telemetry_management_section/*"], + "@kbn/telemetry-plugin": ["src/plugins/telemetry"], + "@kbn/telemetry-plugin/*": ["src/plugins/telemetry/*"], + "@kbn/telemetry-test-plugin": ["test/plugin_functional/plugins/telemetry"], + "@kbn/telemetry-test-plugin/*": ["test/plugin_functional/plugins/telemetry/*"], + "@kbn/telemetry-tools": ["packages/kbn-telemetry-tools"], + "@kbn/telemetry-tools/*": ["packages/kbn-telemetry-tools/*"], + "@kbn/test": ["packages/kbn-test"], + "@kbn/test/*": ["packages/kbn-test/*"], + "@kbn/test-feature-usage-plugin": ["x-pack/test/licensing_plugin/plugins/test_feature_usage"], + "@kbn/test-feature-usage-plugin/*": ["x-pack/test/licensing_plugin/plugins/test_feature_usage/*"], + "@kbn/test-jest-helpers": ["packages/kbn-test-jest-helpers"], + "@kbn/test-jest-helpers/*": ["packages/kbn-test-jest-helpers/*"], + "@kbn/test-subj-selector": ["packages/kbn-test-subj-selector"], + "@kbn/test-subj-selector/*": ["packages/kbn-test-subj-selector/*"], + "@kbn/testing-embedded-lens-plugin": ["x-pack/examples/testing_embedded_lens"], + "@kbn/testing-embedded-lens-plugin/*": ["x-pack/examples/testing_embedded_lens/*"], + "@kbn/third-party-lens-navigation-prompt-plugin": ["x-pack/examples/third_party_lens_navigation_prompt"], + "@kbn/third-party-lens-navigation-prompt-plugin/*": ["x-pack/examples/third_party_lens_navigation_prompt/*"], + "@kbn/third-party-vis-lens-example-plugin": ["x-pack/examples/third_party_vis_lens_example"], + "@kbn/third-party-vis-lens-example-plugin/*": ["x-pack/examples/third_party_vis_lens_example/*"], + "@kbn/threat-intelligence-plugin": ["x-pack/plugins/threat_intelligence"], + "@kbn/threat-intelligence-plugin/*": ["x-pack/plugins/threat_intelligence/*"], + "@kbn/timelines-plugin": ["x-pack/plugins/timelines"], + "@kbn/timelines-plugin/*": ["x-pack/plugins/timelines/*"], + "@kbn/timelion-grammar": ["packages/kbn-timelion-grammar"], + "@kbn/timelion-grammar/*": ["packages/kbn-timelion-grammar/*"], + "@kbn/tinymath": ["packages/kbn-tinymath"], + "@kbn/tinymath/*": ["packages/kbn-tinymath/*"], + "@kbn/tooling-log": ["packages/kbn-tooling-log"], + "@kbn/tooling-log/*": ["packages/kbn-tooling-log/*"], + "@kbn/transform-plugin": ["x-pack/plugins/transform"], + "@kbn/transform-plugin/*": ["x-pack/plugins/transform/*"], + "@kbn/translations-plugin": ["x-pack/plugins/translations"], + "@kbn/translations-plugin/*": ["x-pack/plugins/translations/*"], + "@kbn/triggers-actions-ui-example-plugin": ["x-pack/examples/triggers_actions_ui_example"], + "@kbn/triggers-actions-ui-example-plugin/*": ["x-pack/examples/triggers_actions_ui_example/*"], + "@kbn/triggers-actions-ui-plugin": ["x-pack/plugins/triggers_actions_ui"], + "@kbn/triggers-actions-ui-plugin/*": ["x-pack/plugins/triggers_actions_ui/*"], + "@kbn/ts-project-linter": ["packages/kbn-ts-project-linter"], + "@kbn/ts-project-linter/*": ["packages/kbn-ts-project-linter/*"], + "@kbn/ts-project-linter-cli": ["packages/kbn-ts-project-linter-cli"], + "@kbn/ts-project-linter-cli/*": ["packages/kbn-ts-project-linter-cli/*"], + "@kbn/ts-projects": ["packages/kbn-ts-projects"], + "@kbn/ts-projects/*": ["packages/kbn-ts-projects/*"], + "@kbn/ts-type-check-cli": ["packages/kbn-ts-type-check-cli"], + "@kbn/ts-type-check-cli/*": ["packages/kbn-ts-type-check-cli/*"], + "@kbn/typed-react-router-config": ["packages/kbn-typed-react-router-config"], + "@kbn/typed-react-router-config/*": ["packages/kbn-typed-react-router-config/*"], + "@kbn/ui-actions-enhanced-examples-plugin": ["x-pack/examples/ui_actions_enhanced_examples"], + "@kbn/ui-actions-enhanced-examples-plugin/*": ["x-pack/examples/ui_actions_enhanced_examples/*"], + "@kbn/ui-actions-enhanced-plugin": ["src/plugins/ui_actions_enhanced"], + "@kbn/ui-actions-enhanced-plugin/*": ["src/plugins/ui_actions_enhanced/*"], "@kbn/ui-actions-examples-plugin": ["examples/ui_action_examples"], "@kbn/ui-actions-examples-plugin/*": ["examples/ui_action_examples/*"], "@kbn/ui-actions-explorer-plugin": ["examples/ui_actions_explorer"], "@kbn/ui-actions-explorer-plugin/*": ["examples/ui_actions_explorer/*"], + "@kbn/ui-actions-plugin": ["src/plugins/ui_actions"], + "@kbn/ui-actions-plugin/*": ["src/plugins/ui_actions/*"], + "@kbn/ui-framework": ["packages/kbn-ui-framework"], + "@kbn/ui-framework/*": ["packages/kbn-ui-framework/*"], + "@kbn/ui-settings-plugin": ["test/plugin_functional/plugins/ui_settings_plugin"], + "@kbn/ui-settings-plugin/*": ["test/plugin_functional/plugins/ui_settings_plugin/*"], + "@kbn/ui-shared-deps-npm": ["packages/kbn-ui-shared-deps-npm"], + "@kbn/ui-shared-deps-npm/*": ["packages/kbn-ui-shared-deps-npm/*"], + "@kbn/ui-shared-deps-src": ["packages/kbn-ui-shared-deps-src"], + "@kbn/ui-shared-deps-src/*": ["packages/kbn-ui-shared-deps-src/*"], + "@kbn/ui-theme": ["packages/kbn-ui-theme"], + "@kbn/ui-theme/*": ["packages/kbn-ui-theme/*"], + "@kbn/unified-field-list-plugin": ["src/plugins/unified_field_list"], + "@kbn/unified-field-list-plugin/*": ["src/plugins/unified_field_list/*"], + "@kbn/unified-histogram-plugin": ["src/plugins/unified_histogram"], + "@kbn/unified-histogram-plugin/*": ["src/plugins/unified_histogram/*"], + "@kbn/unified-search-plugin": ["src/plugins/unified_search"], + "@kbn/unified-search-plugin/*": ["src/plugins/unified_search/*"], + "@kbn/upgrade-assistant-plugin": ["x-pack/plugins/upgrade_assistant"], + "@kbn/upgrade-assistant-plugin/*": ["x-pack/plugins/upgrade_assistant/*"], + "@kbn/url-drilldown-plugin": ["x-pack/plugins/drilldowns/url_drilldown"], + "@kbn/url-drilldown-plugin/*": ["x-pack/plugins/drilldowns/url_drilldown/*"], + "@kbn/url-forwarding-plugin": ["src/plugins/url_forwarding"], + "@kbn/url-forwarding-plugin/*": ["src/plugins/url_forwarding/*"], + "@kbn/usage-collection-plugin": ["src/plugins/usage_collection"], + "@kbn/usage-collection-plugin/*": ["src/plugins/usage_collection/*"], + "@kbn/usage-collection-test-plugin": ["test/plugin_functional/plugins/usage_collection"], + "@kbn/usage-collection-test-plugin/*": ["test/plugin_functional/plugins/usage_collection/*"], + "@kbn/user-profile-components": ["packages/kbn-user-profile-components"], + "@kbn/user-profile-components/*": ["packages/kbn-user-profile-components/*"], "@kbn/user-profile-examples-plugin": ["examples/user_profile_examples"], "@kbn/user-profile-examples-plugin/*": ["examples/user_profile_examples/*"], - "@kbn/advanced-settings-plugin": ["src/plugins/advanced_settings"], - "@kbn/advanced-settings-plugin/*": ["src/plugins/advanced_settings/*"], - "@kbn/bfetch-plugin": ["src/plugins/bfetch"], - "@kbn/bfetch-plugin/*": ["src/plugins/bfetch/*"], - "@kbn/expression-gauge-plugin": ["src/plugins/chart_expressions/expression_gauge"], - "@kbn/expression-gauge-plugin/*": ["src/plugins/chart_expressions/expression_gauge/*"], - "@kbn/expression-heatmap-plugin": ["src/plugins/chart_expressions/expression_heatmap"], - "@kbn/expression-heatmap-plugin/*": ["src/plugins/chart_expressions/expression_heatmap/*"], - "@kbn/expression-legacy-metric-vis-plugin": ["src/plugins/chart_expressions/expression_legacy_metric"], - "@kbn/expression-legacy-metric-vis-plugin/*": ["src/plugins/chart_expressions/expression_legacy_metric/*"], - "@kbn/expression-metric-vis-plugin": ["src/plugins/chart_expressions/expression_metric"], - "@kbn/expression-metric-vis-plugin/*": ["src/plugins/chart_expressions/expression_metric/*"], - "@kbn/expression-partition-vis-plugin": ["src/plugins/chart_expressions/expression_partition_vis"], - "@kbn/expression-partition-vis-plugin/*": ["src/plugins/chart_expressions/expression_partition_vis/*"], - "@kbn/expression-tagcloud-plugin": ["src/plugins/chart_expressions/expression_tagcloud"], - "@kbn/expression-tagcloud-plugin/*": ["src/plugins/chart_expressions/expression_tagcloud/*"], - "@kbn/expression-xy-plugin": ["src/plugins/chart_expressions/expression_xy"], - "@kbn/expression-xy-plugin/*": ["src/plugins/chart_expressions/expression_xy/*"], - "@kbn/charts-plugin": ["src/plugins/charts"], - "@kbn/charts-plugin/*": ["src/plugins/charts/*"], - "@kbn/console-plugin": ["src/plugins/console"], - "@kbn/console-plugin/*": ["src/plugins/console/*"], - "@kbn/controls-plugin": ["src/plugins/controls"], - "@kbn/controls-plugin/*": ["src/plugins/controls/*"], - "@kbn/custom-integrations-plugin": ["src/plugins/custom_integrations"], - "@kbn/custom-integrations-plugin/*": ["src/plugins/custom_integrations/*"], - "@kbn/dashboard-plugin": ["src/plugins/dashboard"], - "@kbn/dashboard-plugin/*": ["src/plugins/dashboard/*"], - "@kbn/data-view-editor-plugin": ["src/plugins/data_view_editor"], - "@kbn/data-view-editor-plugin/*": ["src/plugins/data_view_editor/*"], - "@kbn/data-view-field-editor-plugin": ["src/plugins/data_view_field_editor"], - "@kbn/data-view-field-editor-plugin/*": ["src/plugins/data_view_field_editor/*"], - "@kbn/data-view-management-plugin": ["src/plugins/data_view_management"], - "@kbn/data-view-management-plugin/*": ["src/plugins/data_view_management/*"], - "@kbn/data-views-plugin": ["src/plugins/data_views"], - "@kbn/data-views-plugin/*": ["src/plugins/data_views/*"], - "@kbn/data-plugin": ["src/plugins/data"], - "@kbn/data-plugin/*": ["src/plugins/data/*"], - "@kbn/dev-tools-plugin": ["src/plugins/dev_tools"], - "@kbn/dev-tools-plugin/*": ["src/plugins/dev_tools/*"], - "@kbn/discover-plugin": ["src/plugins/discover"], - "@kbn/discover-plugin/*": ["src/plugins/discover/*"], - "@kbn/embeddable-plugin": ["src/plugins/embeddable"], - "@kbn/embeddable-plugin/*": ["src/plugins/embeddable/*"], - "@kbn/es-ui-shared-plugin": ["src/plugins/es_ui_shared"], - "@kbn/es-ui-shared-plugin/*": ["src/plugins/es_ui_shared/*"], - "@kbn/event-annotation-plugin": ["src/plugins/event_annotation"], - "@kbn/event-annotation-plugin/*": ["src/plugins/event_annotation/*"], - "@kbn/expression-error-plugin": ["src/plugins/expression_error"], - "@kbn/expression-error-plugin/*": ["src/plugins/expression_error/*"], - "@kbn/expression-image-plugin": ["src/plugins/expression_image"], - "@kbn/expression-image-plugin/*": ["src/plugins/expression_image/*"], - "@kbn/expression-metric-plugin": ["src/plugins/expression_metric"], - "@kbn/expression-metric-plugin/*": ["src/plugins/expression_metric/*"], - "@kbn/expression-repeat-image-plugin": ["src/plugins/expression_repeat_image"], - "@kbn/expression-repeat-image-plugin/*": ["src/plugins/expression_repeat_image/*"], - "@kbn/expression-reveal-image-plugin": ["src/plugins/expression_reveal_image"], - "@kbn/expression-reveal-image-plugin/*": ["src/plugins/expression_reveal_image/*"], - "@kbn/expression-shape-plugin": ["src/plugins/expression_shape"], - "@kbn/expression-shape-plugin/*": ["src/plugins/expression_shape/*"], - "@kbn/expressions-plugin": ["src/plugins/expressions"], - "@kbn/expressions-plugin/*": ["src/plugins/expressions/*"], - "@kbn/field-formats-plugin": ["src/plugins/field_formats"], - "@kbn/field-formats-plugin/*": ["src/plugins/field_formats/*"], - "@kbn/files-management-plugin": ["src/plugins/files_management"], - "@kbn/files-management-plugin/*": ["src/plugins/files_management/*"], - "@kbn/files-plugin": ["src/plugins/files"], - "@kbn/files-plugin/*": ["src/plugins/files/*"], - "@kbn/guided-onboarding-plugin": ["src/plugins/guided_onboarding"], - "@kbn/guided-onboarding-plugin/*": ["src/plugins/guided_onboarding/*"], - "@kbn/home-plugin": ["src/plugins/home"], - "@kbn/home-plugin/*": ["src/plugins/home/*"], - "@kbn/image-embeddable-plugin": ["src/plugins/image_embeddable"], - "@kbn/image-embeddable-plugin/*": ["src/plugins/image_embeddable/*"], - "@kbn/input-control-vis-plugin": ["src/plugins/input_control_vis"], - "@kbn/input-control-vis-plugin/*": ["src/plugins/input_control_vis/*"], - "@kbn/inspector-plugin": ["src/plugins/inspector"], - "@kbn/inspector-plugin/*": ["src/plugins/inspector/*"], - "@kbn/interactive-setup-plugin": ["src/plugins/interactive_setup"], - "@kbn/interactive-setup-plugin/*": ["src/plugins/interactive_setup/*"], - "@kbn/kibana-overview-plugin": ["src/plugins/kibana_overview"], - "@kbn/kibana-overview-plugin/*": ["src/plugins/kibana_overview/*"], - "@kbn/kibana-react-plugin": ["src/plugins/kibana_react"], - "@kbn/kibana-react-plugin/*": ["src/plugins/kibana_react/*"], - "@kbn/kibana-usage-collection-plugin": ["src/plugins/kibana_usage_collection"], - "@kbn/kibana-usage-collection-plugin/*": ["src/plugins/kibana_usage_collection/*"], - "@kbn/kibana-utils-plugin": ["src/plugins/kibana_utils"], - "@kbn/kibana-utils-plugin/*": ["src/plugins/kibana_utils/*"], - "@kbn/management-plugin": ["src/plugins/management"], - "@kbn/management-plugin/*": ["src/plugins/management/*"], - "@kbn/maps-ems-plugin": ["src/plugins/maps_ems"], - "@kbn/maps-ems-plugin/*": ["src/plugins/maps_ems/*"], - "@kbn/navigation-plugin": ["src/plugins/navigation"], - "@kbn/navigation-plugin/*": ["src/plugins/navigation/*"], - "@kbn/newsfeed-plugin": ["src/plugins/newsfeed"], - "@kbn/newsfeed-plugin/*": ["src/plugins/newsfeed/*"], - "@kbn/presentation-util-plugin": ["src/plugins/presentation_util"], - "@kbn/presentation-util-plugin/*": ["src/plugins/presentation_util/*"], - "@kbn/saved-objects-finder-plugin": ["src/plugins/saved_objects_finder"], - "@kbn/saved-objects-finder-plugin/*": ["src/plugins/saved_objects_finder/*"], - "@kbn/saved-objects-management-plugin": ["src/plugins/saved_objects_management"], - "@kbn/saved-objects-management-plugin/*": ["src/plugins/saved_objects_management/*"], - "@kbn/saved-objects-tagging-oss-plugin": ["src/plugins/saved_objects_tagging_oss"], - "@kbn/saved-objects-tagging-oss-plugin/*": ["src/plugins/saved_objects_tagging_oss/*"], - "@kbn/saved-objects-plugin": ["src/plugins/saved_objects"], - "@kbn/saved-objects-plugin/*": ["src/plugins/saved_objects/*"], - "@kbn/saved-search-plugin": ["src/plugins/saved_search"], - "@kbn/saved-search-plugin/*": ["src/plugins/saved_search/*"], - "@kbn/screenshot-mode-plugin": ["src/plugins/screenshot_mode"], - "@kbn/screenshot-mode-plugin/*": ["src/plugins/screenshot_mode/*"], - "@kbn/share-plugin": ["src/plugins/share"], - "@kbn/share-plugin/*": ["src/plugins/share/*"], - "@kbn/telemetry-collection-manager-plugin": ["src/plugins/telemetry_collection_manager"], - "@kbn/telemetry-collection-manager-plugin/*": ["src/plugins/telemetry_collection_manager/*"], - "@kbn/telemetry-management-section-plugin": ["src/plugins/telemetry_management_section"], - "@kbn/telemetry-management-section-plugin/*": ["src/plugins/telemetry_management_section/*"], - "@kbn/telemetry-plugin": ["src/plugins/telemetry"], - "@kbn/telemetry-plugin/*": ["src/plugins/telemetry/*"], - "@kbn/ui-actions-enhanced-plugin": ["src/plugins/ui_actions_enhanced"], - "@kbn/ui-actions-enhanced-plugin/*": ["src/plugins/ui_actions_enhanced/*"], - "@kbn/ui-actions-plugin": ["src/plugins/ui_actions"], - "@kbn/ui-actions-plugin/*": ["src/plugins/ui_actions/*"], - "@kbn/unified-field-list-plugin": ["src/plugins/unified_field_list"], - "@kbn/unified-field-list-plugin/*": ["src/plugins/unified_field_list/*"], - "@kbn/unified-histogram-plugin": ["src/plugins/unified_histogram"], - "@kbn/unified-histogram-plugin/*": ["src/plugins/unified_histogram/*"], - "@kbn/unified-search-plugin": ["src/plugins/unified_search"], - "@kbn/unified-search-plugin/*": ["src/plugins/unified_search/*"], - "@kbn/url-forwarding-plugin": ["src/plugins/url_forwarding"], - "@kbn/url-forwarding-plugin/*": ["src/plugins/url_forwarding/*"], - "@kbn/usage-collection-plugin": ["src/plugins/usage_collection"], - "@kbn/usage-collection-plugin/*": ["src/plugins/usage_collection/*"], + "@kbn/utility-types": ["packages/kbn-utility-types"], + "@kbn/utility-types/*": ["packages/kbn-utility-types/*"], + "@kbn/utility-types-jest": ["packages/kbn-utility-types-jest"], + "@kbn/utility-types-jest/*": ["packages/kbn-utility-types-jest/*"], + "@kbn/utils": ["packages/kbn-utils"], + "@kbn/utils/*": ["packages/kbn-utils/*"], + "@kbn/ux-plugin": ["x-pack/plugins/ux"], + "@kbn/ux-plugin/*": ["x-pack/plugins/ux/*"], "@kbn/vis-default-editor-plugin": ["src/plugins/vis_default_editor"], "@kbn/vis-default-editor-plugin/*": ["src/plugins/vis_default_editor/*"], - "@kbn/vis-type-markdown-plugin": ["src/plugins/vis_type_markdown"], - "@kbn/vis-type-markdown-plugin/*": ["src/plugins/vis_type_markdown/*"], "@kbn/vis-type-gauge-plugin": ["src/plugins/vis_types/gauge"], "@kbn/vis-type-gauge-plugin/*": ["src/plugins/vis_types/gauge/*"], "@kbn/vis-type-heatmap-plugin": ["src/plugins/vis_types/heatmap"], "@kbn/vis-type-heatmap-plugin/*": ["src/plugins/vis_types/heatmap/*"], + "@kbn/vis-type-markdown-plugin": ["src/plugins/vis_type_markdown"], + "@kbn/vis-type-markdown-plugin/*": ["src/plugins/vis_type_markdown/*"], "@kbn/vis-type-metric-plugin": ["src/plugins/vis_types/metric"], "@kbn/vis-type-metric-plugin/*": ["src/plugins/vis_types/metric/*"], "@kbn/vis-type-pie-plugin": ["src/plugins/vis_types/pie"], @@ -956,292 +1250,12 @@ "@kbn/vis-type-xy-plugin/*": ["src/plugins/vis_types/xy/*"], "@kbn/visualizations-plugin": ["src/plugins/visualizations"], "@kbn/visualizations-plugin/*": ["src/plugins/visualizations/*"], - "@kbn/analytics-ftr-helpers-plugin": ["test/analytics/fixtures/plugins/analytics_ftr_helpers"], - "@kbn/analytics-ftr-helpers-plugin/*": ["test/analytics/fixtures/plugins/analytics_ftr_helpers/*"], - "@kbn/analytics-plugin-a-plugin": ["test/analytics/fixtures/plugins/analytics_plugin_a"], - "@kbn/analytics-plugin-a-plugin/*": ["test/analytics/fixtures/plugins/analytics_plugin_a/*"], - "@kbn/coverage-fixtures-plugin": ["test/common/fixtures/plugins/coverage"], - "@kbn/coverage-fixtures-plugin/*": ["test/common/fixtures/plugins/coverage/*"], - "@kbn/newsfeed-fixtures-plugin": ["test/common/fixtures/plugins/newsfeed"], - "@kbn/newsfeed-fixtures-plugin/*": ["test/common/fixtures/plugins/newsfeed/*"], - "@kbn/open-telemetry-instrumented-plugin": ["test/common/fixtures/plugins/otel_metrics"], - "@kbn/open-telemetry-instrumented-plugin/*": ["test/common/fixtures/plugins/otel_metrics/*"], - "@kbn/kbn-health-gateway-status-plugin": ["test/health_gateway/plugins/status"], - "@kbn/kbn-health-gateway-status-plugin/*": ["test/health_gateway/plugins/status/*"], - "@kbn/kbn-tp-run-pipeline-plugin": ["test/interpreter_functional/plugins/kbn_tp_run_pipeline"], - "@kbn/kbn-tp-run-pipeline-plugin/*": ["test/interpreter_functional/plugins/kbn_tp_run_pipeline/*"], - "@kbn/app-link-test-plugin": ["test/plugin_functional/plugins/app_link_test"], - "@kbn/app-link-test-plugin/*": ["test/plugin_functional/plugins/app_link_test/*"], - "@kbn/core-app-status-plugin": ["test/plugin_functional/plugins/core_app_status"], - "@kbn/core-app-status-plugin/*": ["test/plugin_functional/plugins/core_app_status/*"], - "@kbn/core-history-block-plugin": ["test/plugin_functional/plugins/core_history_block"], - "@kbn/core-history-block-plugin/*": ["test/plugin_functional/plugins/core_history_block/*"], - "@kbn/core-http-plugin": ["test/plugin_functional/plugins/core_http"], - "@kbn/core-http-plugin/*": ["test/plugin_functional/plugins/core_http/*"], - "@kbn/core-plugin-a-plugin": ["test/plugin_functional/plugins/core_plugin_a"], - "@kbn/core-plugin-a-plugin/*": ["test/plugin_functional/plugins/core_plugin_a/*"], - "@kbn/core-plugin-appleave-plugin": ["test/plugin_functional/plugins/core_plugin_appleave"], - "@kbn/core-plugin-appleave-plugin/*": ["test/plugin_functional/plugins/core_plugin_appleave/*"], - "@kbn/core-plugin-b-plugin": ["test/plugin_functional/plugins/core_plugin_b"], - "@kbn/core-plugin-b-plugin/*": ["test/plugin_functional/plugins/core_plugin_b/*"], - "@kbn/core-plugin-chromeless-plugin": ["test/plugin_functional/plugins/core_plugin_chromeless"], - "@kbn/core-plugin-chromeless-plugin/*": ["test/plugin_functional/plugins/core_plugin_chromeless/*"], - "@kbn/core-plugin-deep-links-plugin": ["test/plugin_functional/plugins/core_plugin_deep_links"], - "@kbn/core-plugin-deep-links-plugin/*": ["test/plugin_functional/plugins/core_plugin_deep_links/*"], - "@kbn/core-plugin-deprecations-plugin": ["test/plugin_functional/plugins/core_plugin_deprecations"], - "@kbn/core-plugin-deprecations-plugin/*": ["test/plugin_functional/plugins/core_plugin_deprecations/*"], - "@kbn/core-plugin-execution-context-plugin": ["test/plugin_functional/plugins/core_plugin_execution_context"], - "@kbn/core-plugin-execution-context-plugin/*": ["test/plugin_functional/plugins/core_plugin_execution_context/*"], - "@kbn/core-plugin-helpmenu-plugin": ["test/plugin_functional/plugins/core_plugin_helpmenu"], - "@kbn/core-plugin-helpmenu-plugin/*": ["test/plugin_functional/plugins/core_plugin_helpmenu/*"], - "@kbn/core-plugin-route-timeouts-plugin": ["test/plugin_functional/plugins/core_plugin_route_timeouts"], - "@kbn/core-plugin-route-timeouts-plugin/*": ["test/plugin_functional/plugins/core_plugin_route_timeouts/*"], - "@kbn/core-plugin-static-assets-plugin": ["test/plugin_functional/plugins/core_plugin_static_assets"], - "@kbn/core-plugin-static-assets-plugin/*": ["test/plugin_functional/plugins/core_plugin_static_assets/*"], - "@kbn/core-provider-plugin": ["test/plugin_functional/plugins/core_provider_plugin"], - "@kbn/core-provider-plugin/*": ["test/plugin_functional/plugins/core_provider_plugin/*"], - "@kbn/data-search-plugin": ["test/plugin_functional/plugins/data_search"], - "@kbn/data-search-plugin/*": ["test/plugin_functional/plugins/data_search/*"], - "@kbn/elasticsearch-client-plugin": ["test/plugin_functional/plugins/elasticsearch_client_plugin"], - "@kbn/elasticsearch-client-plugin/*": ["test/plugin_functional/plugins/elasticsearch_client_plugin/*"], - "@kbn/index-patterns-test-plugin": ["test/plugin_functional/plugins/index_patterns"], - "@kbn/index-patterns-test-plugin/*": ["test/plugin_functional/plugins/index_patterns/*"], - "@kbn/kbn-sample-panel-action-plugin": ["test/plugin_functional/plugins/kbn_sample_panel_action"], - "@kbn/kbn-sample-panel-action-plugin/*": ["test/plugin_functional/plugins/kbn_sample_panel_action/*"], - "@kbn/kbn-top-nav-plugin": ["test/plugin_functional/plugins/kbn_top_nav"], - "@kbn/kbn-top-nav-plugin/*": ["test/plugin_functional/plugins/kbn_top_nav/*"], - "@kbn/kbn-tp-custom-visualizations-plugin": ["test/plugin_functional/plugins/kbn_tp_custom_visualizations"], - "@kbn/kbn-tp-custom-visualizations-plugin/*": ["test/plugin_functional/plugins/kbn_tp_custom_visualizations/*"], - "@kbn/management-test-plugin": ["test/plugin_functional/plugins/management_test_plugin"], - "@kbn/management-test-plugin/*": ["test/plugin_functional/plugins/management_test_plugin/*"], - "@kbn/rendering-plugin": ["test/plugin_functional/plugins/rendering_plugin"], - "@kbn/rendering-plugin/*": ["test/plugin_functional/plugins/rendering_plugin/*"], - "@kbn/saved-object-export-transforms-plugin": ["test/plugin_functional/plugins/saved_object_export_transforms"], - "@kbn/saved-object-export-transforms-plugin/*": ["test/plugin_functional/plugins/saved_object_export_transforms/*"], - "@kbn/saved-object-import-warnings-plugin": ["test/plugin_functional/plugins/saved_object_import_warnings"], - "@kbn/saved-object-import-warnings-plugin/*": ["test/plugin_functional/plugins/saved_object_import_warnings/*"], - "@kbn/saved-objects-hidden-type-plugin": ["test/plugin_functional/plugins/saved_objects_hidden_type"], - "@kbn/saved-objects-hidden-type-plugin/*": ["test/plugin_functional/plugins/saved_objects_hidden_type/*"], - "@kbn/session-notifications-plugin": ["test/plugin_functional/plugins/session_notifications"], - "@kbn/session-notifications-plugin/*": ["test/plugin_functional/plugins/session_notifications/*"], - "@kbn/telemetry-test-plugin": ["test/plugin_functional/plugins/telemetry"], - "@kbn/telemetry-test-plugin/*": ["test/plugin_functional/plugins/telemetry/*"], - "@kbn/ui-settings-plugin": ["test/plugin_functional/plugins/ui_settings_plugin"], - "@kbn/ui-settings-plugin/*": ["test/plugin_functional/plugins/ui_settings_plugin/*"], - "@kbn/usage-collection-test-plugin": ["test/plugin_functional/plugins/usage_collection"], - "@kbn/usage-collection-test-plugin/*": ["test/plugin_functional/plugins/usage_collection/*"], - "@kbn/status-plugin-a-plugin": ["test/server_integration/__fixtures__/plugins/status_plugin_a"], - "@kbn/status-plugin-a-plugin/*": ["test/server_integration/__fixtures__/plugins/status_plugin_a/*"], - "@kbn/status-plugin-b-plugin": ["test/server_integration/__fixtures__/plugins/status_plugin_b"], - "@kbn/status-plugin-b-plugin/*": ["test/server_integration/__fixtures__/plugins/status_plugin_b/*"], - "@kbn/alerting-example-plugin": ["x-pack/examples/alerting_example"], - "@kbn/alerting-example-plugin/*": ["x-pack/examples/alerting_example/*"], - "@kbn/embedded-lens-example-plugin": ["x-pack/examples/embedded_lens_example"], - "@kbn/embedded-lens-example-plugin/*": ["x-pack/examples/embedded_lens_example/*"], - "@kbn/exploratory-view-example-plugin": ["x-pack/examples/exploratory_view_example"], - "@kbn/exploratory-view-example-plugin/*": ["x-pack/examples/exploratory_view_example/*"], - "@kbn/reporting-example-plugin": ["x-pack/examples/reporting_example"], - "@kbn/reporting-example-plugin/*": ["x-pack/examples/reporting_example/*"], - "@kbn/screenshotting-example-plugin": ["x-pack/examples/screenshotting_example"], - "@kbn/screenshotting-example-plugin/*": ["x-pack/examples/screenshotting_example/*"], - "@kbn/testing-embedded-lens-plugin": ["x-pack/examples/testing_embedded_lens"], - "@kbn/testing-embedded-lens-plugin/*": ["x-pack/examples/testing_embedded_lens/*"], - "@kbn/third-party-lens-navigation-prompt-plugin": ["x-pack/examples/third_party_lens_navigation_prompt"], - "@kbn/third-party-lens-navigation-prompt-plugin/*": ["x-pack/examples/third_party_lens_navigation_prompt/*"], - "@kbn/maps-custom-raster-source-plugin": ["x-pack/examples/third_party_maps_source_example"], - "@kbn/maps-custom-raster-source-plugin/*": ["x-pack/examples/third_party_maps_source_example/*"], - "@kbn/third-party-vis-lens-example-plugin": ["x-pack/examples/third_party_vis_lens_example"], - "@kbn/third-party-vis-lens-example-plugin/*": ["x-pack/examples/third_party_vis_lens_example/*"], - "@kbn/triggers-actions-ui-example-plugin": ["x-pack/examples/triggers_actions_ui_example"], - "@kbn/triggers-actions-ui-example-plugin/*": ["x-pack/examples/triggers_actions_ui_example/*"], - "@kbn/ui-actions-enhanced-examples-plugin": ["x-pack/examples/ui_actions_enhanced_examples"], - "@kbn/ui-actions-enhanced-examples-plugin/*": ["x-pack/examples/ui_actions_enhanced_examples/*"], - "@kbn/actions-plugin": ["x-pack/plugins/actions"], - "@kbn/actions-plugin/*": ["x-pack/plugins/actions/*"], - "@kbn/aiops-plugin": ["x-pack/plugins/aiops"], - "@kbn/aiops-plugin/*": ["x-pack/plugins/aiops/*"], - "@kbn/alerting-plugin": ["x-pack/plugins/alerting"], - "@kbn/alerting-plugin/*": ["x-pack/plugins/alerting/*"], - "@kbn/apm-plugin": ["x-pack/plugins/apm"], - "@kbn/apm-plugin/*": ["x-pack/plugins/apm/*"], - "@kbn/banners-plugin": ["x-pack/plugins/banners"], - "@kbn/banners-plugin/*": ["x-pack/plugins/banners/*"], - "@kbn/canvas-plugin": ["x-pack/plugins/canvas"], - "@kbn/canvas-plugin/*": ["x-pack/plugins/canvas/*"], - "@kbn/cases-plugin": ["x-pack/plugins/cases"], - "@kbn/cases-plugin/*": ["x-pack/plugins/cases/*"], - "@kbn/cloud-defend-plugin": ["x-pack/plugins/cloud_defend"], - "@kbn/cloud-defend-plugin/*": ["x-pack/plugins/cloud_defend/*"], - "@kbn/cloud-chat-plugin": ["x-pack/plugins/cloud_integrations/cloud_chat"], - "@kbn/cloud-chat-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_chat/*"], - "@kbn/cloud-data-migration-plugin": ["x-pack/plugins/cloud_integrations/cloud_data_migration"], - "@kbn/cloud-data-migration-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_data_migration/*"], - "@kbn/cloud-experiments-plugin": ["x-pack/plugins/cloud_integrations/cloud_experiments"], - "@kbn/cloud-experiments-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_experiments/*"], - "@kbn/cloud-full-story-plugin": ["x-pack/plugins/cloud_integrations/cloud_full_story"], - "@kbn/cloud-full-story-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_full_story/*"], - "@kbn/cloud-gainsight-plugin": ["x-pack/plugins/cloud_integrations/cloud_gain_sight"], - "@kbn/cloud-gainsight-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_gain_sight/*"], - "@kbn/cloud-links-plugin": ["x-pack/plugins/cloud_integrations/cloud_links"], - "@kbn/cloud-links-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_links/*"], - "@kbn/cloud-security-posture-plugin": ["x-pack/plugins/cloud_security_posture"], - "@kbn/cloud-security-posture-plugin/*": ["x-pack/plugins/cloud_security_posture/*"], - "@kbn/cloud-plugin": ["x-pack/plugins/cloud"], - "@kbn/cloud-plugin/*": ["x-pack/plugins/cloud/*"], - "@kbn/cross-cluster-replication-plugin": ["x-pack/plugins/cross_cluster_replication"], - "@kbn/cross-cluster-replication-plugin/*": ["x-pack/plugins/cross_cluster_replication/*"], - "@kbn/custom-branding-plugin": ["x-pack/plugins/custom_branding"], - "@kbn/custom-branding-plugin/*": ["x-pack/plugins/custom_branding/*"], - "@kbn/dashboard-enhanced-plugin": ["x-pack/plugins/dashboard_enhanced"], - "@kbn/dashboard-enhanced-plugin/*": ["x-pack/plugins/dashboard_enhanced/*"], - "@kbn/data-visualizer-plugin": ["x-pack/plugins/data_visualizer"], - "@kbn/data-visualizer-plugin/*": ["x-pack/plugins/data_visualizer/*"], - "@kbn/discover-enhanced-plugin": ["x-pack/plugins/discover_enhanced"], - "@kbn/discover-enhanced-plugin/*": ["x-pack/plugins/discover_enhanced/*"], - "@kbn/url-drilldown-plugin": ["x-pack/plugins/drilldowns/url_drilldown"], - "@kbn/url-drilldown-plugin/*": ["x-pack/plugins/drilldowns/url_drilldown/*"], - "@kbn/embeddable-enhanced-plugin": ["x-pack/plugins/embeddable_enhanced"], - "@kbn/embeddable-enhanced-plugin/*": ["x-pack/plugins/embeddable_enhanced/*"], - "@kbn/encrypted-saved-objects-plugin": ["x-pack/plugins/encrypted_saved_objects"], - "@kbn/encrypted-saved-objects-plugin/*": ["x-pack/plugins/encrypted_saved_objects/*"], - "@kbn/enterprise-search-plugin": ["x-pack/plugins/enterprise_search"], - "@kbn/enterprise-search-plugin/*": ["x-pack/plugins/enterprise_search/*"], - "@kbn/event-log-plugin": ["x-pack/plugins/event_log"], - "@kbn/event-log-plugin/*": ["x-pack/plugins/event_log/*"], - "@kbn/features-plugin": ["x-pack/plugins/features"], - "@kbn/features-plugin/*": ["x-pack/plugins/features/*"], - "@kbn/file-upload-plugin": ["x-pack/plugins/file_upload"], - "@kbn/file-upload-plugin/*": ["x-pack/plugins/file_upload/*"], - "@kbn/fleet-plugin": ["x-pack/plugins/fleet"], - "@kbn/fleet-plugin/*": ["x-pack/plugins/fleet/*"], - "@kbn/global-search-bar-plugin": ["x-pack/plugins/global_search_bar"], - "@kbn/global-search-bar-plugin/*": ["x-pack/plugins/global_search_bar/*"], - "@kbn/global-search-providers-plugin": ["x-pack/plugins/global_search_providers"], - "@kbn/global-search-providers-plugin/*": ["x-pack/plugins/global_search_providers/*"], - "@kbn/global-search-plugin": ["x-pack/plugins/global_search"], - "@kbn/global-search-plugin/*": ["x-pack/plugins/global_search/*"], - "@kbn/graph-plugin": ["x-pack/plugins/graph"], - "@kbn/graph-plugin/*": ["x-pack/plugins/graph/*"], - "@kbn/grokdebugger-plugin": ["x-pack/plugins/grokdebugger"], - "@kbn/grokdebugger-plugin/*": ["x-pack/plugins/grokdebugger/*"], - "@kbn/index-lifecycle-management-plugin": ["x-pack/plugins/index_lifecycle_management"], - "@kbn/index-lifecycle-management-plugin/*": ["x-pack/plugins/index_lifecycle_management/*"], - "@kbn/index-management-plugin": ["x-pack/plugins/index_management"], - "@kbn/index-management-plugin/*": ["x-pack/plugins/index_management/*"], - "@kbn/infra-plugin": ["x-pack/plugins/infra"], - "@kbn/infra-plugin/*": ["x-pack/plugins/infra/*"], - "@kbn/ingest-pipelines-plugin": ["x-pack/plugins/ingest_pipelines"], - "@kbn/ingest-pipelines-plugin/*": ["x-pack/plugins/ingest_pipelines/*"], - "@kbn/kubernetes-security-plugin": ["x-pack/plugins/kubernetes_security"], - "@kbn/kubernetes-security-plugin/*": ["x-pack/plugins/kubernetes_security/*"], - "@kbn/lens-plugin": ["x-pack/plugins/lens"], - "@kbn/lens-plugin/*": ["x-pack/plugins/lens/*"], - "@kbn/license-api-guard-plugin": ["x-pack/plugins/license_api_guard"], - "@kbn/license-api-guard-plugin/*": ["x-pack/plugins/license_api_guard/*"], - "@kbn/license-management-plugin": ["x-pack/plugins/license_management"], - "@kbn/license-management-plugin/*": ["x-pack/plugins/license_management/*"], - "@kbn/licensing-plugin": ["x-pack/plugins/licensing"], - "@kbn/licensing-plugin/*": ["x-pack/plugins/licensing/*"], - "@kbn/lists-plugin": ["x-pack/plugins/lists"], - "@kbn/lists-plugin/*": ["x-pack/plugins/lists/*"], - "@kbn/logstash-plugin": ["x-pack/plugins/logstash"], - "@kbn/logstash-plugin/*": ["x-pack/plugins/logstash/*"], - "@kbn/maps-plugin": ["x-pack/plugins/maps"], - "@kbn/maps-plugin/*": ["x-pack/plugins/maps/*"], - "@kbn/ml-plugin": ["x-pack/plugins/ml"], - "@kbn/ml-plugin/*": ["x-pack/plugins/ml/*"], - "@kbn/monitoring-collection-plugin": ["x-pack/plugins/monitoring_collection"], - "@kbn/monitoring-collection-plugin/*": ["x-pack/plugins/monitoring_collection/*"], - "@kbn/monitoring-plugin": ["x-pack/plugins/monitoring"], - "@kbn/monitoring-plugin/*": ["x-pack/plugins/monitoring/*"], - "@kbn/notifications-plugin": ["x-pack/plugins/notifications"], - "@kbn/notifications-plugin/*": ["x-pack/plugins/notifications/*"], - "@kbn/observability-plugin": ["x-pack/plugins/observability"], - "@kbn/observability-plugin/*": ["x-pack/plugins/observability/*"], - "@kbn/osquery-plugin": ["x-pack/plugins/osquery"], - "@kbn/osquery-plugin/*": ["x-pack/plugins/osquery/*"], - "@kbn/painless-lab-plugin": ["x-pack/plugins/painless_lab"], - "@kbn/painless-lab-plugin/*": ["x-pack/plugins/painless_lab/*"], - "@kbn/profiling-plugin": ["x-pack/plugins/profiling"], - "@kbn/profiling-plugin/*": ["x-pack/plugins/profiling/*"], - "@kbn/remote-clusters-plugin": ["x-pack/plugins/remote_clusters"], - "@kbn/remote-clusters-plugin/*": ["x-pack/plugins/remote_clusters/*"], - "@kbn/reporting-plugin": ["x-pack/plugins/reporting"], - "@kbn/reporting-plugin/*": ["x-pack/plugins/reporting/*"], - "@kbn/rollup-plugin": ["x-pack/plugins/rollup"], - "@kbn/rollup-plugin/*": ["x-pack/plugins/rollup/*"], - "@kbn/rule-registry-plugin": ["x-pack/plugins/rule_registry"], - "@kbn/rule-registry-plugin/*": ["x-pack/plugins/rule_registry/*"], - "@kbn/runtime-fields-plugin": ["x-pack/plugins/runtime_fields"], - "@kbn/runtime-fields-plugin/*": ["x-pack/plugins/runtime_fields/*"], - "@kbn/saved-objects-tagging-plugin": ["x-pack/plugins/saved_objects_tagging"], - "@kbn/saved-objects-tagging-plugin/*": ["x-pack/plugins/saved_objects_tagging/*"], - "@kbn/screenshotting-plugin": ["x-pack/plugins/screenshotting"], - "@kbn/screenshotting-plugin/*": ["x-pack/plugins/screenshotting/*"], - "@kbn/searchprofiler-plugin": ["x-pack/plugins/searchprofiler"], - "@kbn/searchprofiler-plugin/*": ["x-pack/plugins/searchprofiler/*"], - "@kbn/security-solution-plugin": ["x-pack/plugins/security_solution"], - "@kbn/security-solution-plugin/*": ["x-pack/plugins/security_solution/*"], - "@kbn/security-plugin": ["x-pack/plugins/security"], - "@kbn/security-plugin/*": ["x-pack/plugins/security/*"], - "@kbn/session-view-plugin": ["x-pack/plugins/session_view"], - "@kbn/session-view-plugin/*": ["x-pack/plugins/session_view/*"], - "@kbn/snapshot-restore-plugin": ["x-pack/plugins/snapshot_restore"], - "@kbn/snapshot-restore-plugin/*": ["x-pack/plugins/snapshot_restore/*"], - "@kbn/spaces-plugin": ["x-pack/plugins/spaces"], - "@kbn/spaces-plugin/*": ["x-pack/plugins/spaces/*"], - "@kbn/stack-alerts-plugin": ["x-pack/plugins/stack_alerts"], - "@kbn/stack-alerts-plugin/*": ["x-pack/plugins/stack_alerts/*"], - "@kbn/stack-connectors-plugin": ["x-pack/plugins/stack_connectors"], - "@kbn/stack-connectors-plugin/*": ["x-pack/plugins/stack_connectors/*"], - "@kbn/synthetics-plugin": ["x-pack/plugins/synthetics"], - "@kbn/synthetics-plugin/*": ["x-pack/plugins/synthetics/*"], - "@kbn/task-manager-plugin": ["x-pack/plugins/task_manager"], - "@kbn/task-manager-plugin/*": ["x-pack/plugins/task_manager/*"], - "@kbn/telemetry-collection-xpack-plugin": ["x-pack/plugins/telemetry_collection_xpack"], - "@kbn/telemetry-collection-xpack-plugin/*": ["x-pack/plugins/telemetry_collection_xpack/*"], - "@kbn/threat-intelligence-plugin": ["x-pack/plugins/threat_intelligence"], - "@kbn/threat-intelligence-plugin/*": ["x-pack/plugins/threat_intelligence/*"], - "@kbn/timelines-plugin": ["x-pack/plugins/timelines"], - "@kbn/timelines-plugin/*": ["x-pack/plugins/timelines/*"], - "@kbn/transform-plugin": ["x-pack/plugins/transform"], - "@kbn/transform-plugin/*": ["x-pack/plugins/transform/*"], - "@kbn/translations-plugin": ["x-pack/plugins/translations"], - "@kbn/translations-plugin/*": ["x-pack/plugins/translations/*"], - "@kbn/triggers-actions-ui-plugin": ["x-pack/plugins/triggers_actions_ui"], - "@kbn/triggers-actions-ui-plugin/*": ["x-pack/plugins/triggers_actions_ui/*"], - "@kbn/upgrade-assistant-plugin": ["x-pack/plugins/upgrade_assistant"], - "@kbn/upgrade-assistant-plugin/*": ["x-pack/plugins/upgrade_assistant/*"], - "@kbn/ux-plugin": ["x-pack/plugins/ux"], - "@kbn/ux-plugin/*": ["x-pack/plugins/ux/*"], "@kbn/watcher-plugin": ["x-pack/plugins/watcher"], "@kbn/watcher-plugin/*": ["x-pack/plugins/watcher/*"], - "@kbn/alerting-fixture-plugin": ["x-pack/test/functional_with_es_ssl/fixtures/plugins/alerts"], - "@kbn/alerting-fixture-plugin/*": ["x-pack/test/functional_with_es_ssl/fixtures/plugins/alerts/*"], - "@kbn/cases-fixture-plugin": ["x-pack/test/functional_with_es_ssl/fixtures/plugins/cases"], - "@kbn/cases-fixture-plugin/*": ["x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/*"], - "@kbn/test-feature-usage-plugin": ["x-pack/test/licensing_plugin/plugins/test_feature_usage"], - "@kbn/test-feature-usage-plugin/*": ["x-pack/test/licensing_plugin/plugins/test_feature_usage/*"], - "@kbn/elasticsearch-client-xpack-plugin": ["x-pack/test/plugin_api_integration/plugins/elasticsearch_client"], - "@kbn/elasticsearch-client-xpack-plugin/*": ["x-pack/test/plugin_api_integration/plugins/elasticsearch_client/*"], - "@kbn/event-log-fixture-plugin": ["x-pack/test/plugin_api_integration/plugins/event_log"], - "@kbn/event-log-fixture-plugin/*": ["x-pack/test/plugin_api_integration/plugins/event_log/*"], - "@kbn/feature-usage-test-plugin": ["x-pack/test/plugin_api_integration/plugins/feature_usage_test"], - "@kbn/feature-usage-test-plugin/*": ["x-pack/test/plugin_api_integration/plugins/feature_usage_test/*"], - "@kbn/sample-task-plugin": ["x-pack/test/plugin_api_integration/plugins/sample_task_plugin"], - "@kbn/sample-task-plugin/*": ["x-pack/test/plugin_api_integration/plugins/sample_task_plugin/*"], - "@kbn/task-manager-performance-plugin": ["x-pack/test/plugin_api_perf/plugins/task_manager_performance"], - "@kbn/task-manager-performance-plugin/*": ["x-pack/test/plugin_api_perf/plugins/task_manager_performance/*"], - "@kbn/global-search-test-plugin": ["x-pack/test/plugin_functional/plugins/global_search_test"], - "@kbn/global-search-test-plugin/*": ["x-pack/test/plugin_functional/plugins/global_search_test/*"], - "@kbn/resolver-test-plugin": ["x-pack/test/plugin_functional/plugins/resolver_test"], - "@kbn/resolver-test-plugin/*": ["x-pack/test/plugin_functional/plugins/resolver_test/*"], - "@kbn/security-test-endpoints-plugin": ["x-pack/test/security_functional/fixtures/common/test_endpoints"], - "@kbn/security-test-endpoints-plugin/*": ["x-pack/test/security_functional/fixtures/common/test_endpoints/*"], - "@kbn/application-usage-test-plugin": ["x-pack/test/usage_collection/plugins/application_usage_test"], - "@kbn/application-usage-test-plugin/*": ["x-pack/test/usage_collection/plugins/application_usage_test/*"], - "@kbn/stack-management-usage-test-plugin": ["x-pack/test/usage_collection/plugins/stack_management_usage_test"], - "@kbn/stack-management-usage-test-plugin/*": ["x-pack/test/usage_collection/plugins/stack_management_usage_test/*"], + "@kbn/web-worker-stub": ["packages/kbn-web-worker-stub"], + "@kbn/web-worker-stub/*": ["packages/kbn-web-worker-stub/*"], + "@kbn/yarn-lock-validator": ["packages/kbn-yarn-lock-validator"], + "@kbn/yarn-lock-validator/*": ["packages/kbn-yarn-lock-validator/*"], // END AUTOMATED PACKAGE LISTING // Allows for importing from `kibana` package for the exported types. "@emotion/core": ["typings/@emotion"], @@ -1297,8 +1311,6 @@ "moduleResolution": "node", // "resolveJsonModule" allows for importing, extracting types from and generating .json files. "resolveJsonModule": true, - // Do not resolve symlinks to their real path; treat a symlinked file like a real one. - "preserveSymlinks": true, // Disallow inconsistently-cased references to the same file. "forceConsistentCasingInFileNames": false, // Forbid unused local variables as the rule was deprecated by ts-lint diff --git a/tsconfig.bazel.json b/tsconfig.bazel.json deleted file mode 100644 index 892c727ef588e..0000000000000 --- a/tsconfig.bazel.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "incremental": false, - "composite": false - } -} diff --git a/tsconfig.json b/tsconfig.json index 0e1d602ee945a..91afa752c068d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,16 @@ { "extends": "./tsconfig.base.json", "compilerOptions": { - "outDir": "target/root_types" + "outDir": "target/types" }, "include": [ "kibana.d.ts", "package.json", ], "kbn_references": [ - { "path": "./src/core/tsconfig.json" }, + "@kbn/core", + ], + "exclude": [ + "target/**/*", ] -} \ No newline at end of file +} diff --git a/x-pack/examples/alerting_example/tsconfig.json b/x-pack/examples/alerting_example/tsconfig.json index 024d7304ffad0..4e9b080673049 100644 --- a/x-pack/examples/alerting_example/tsconfig.json +++ b/x-pack/examples/alerting_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,15 +11,19 @@ "common/**/*.ts", "../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/charts/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../plugins/alerting/tsconfig.json" }, - { "path": "../../plugins/triggers_actions_ui/tsconfig.json" }, - { "path": "../../plugins/features/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/alerting-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/features-plugin", + "@kbn/developer-examples-plugin", + "@kbn/i18n", + "@kbn/core-application-common", ] } diff --git a/x-pack/examples/embedded_lens_example/tsconfig.json b/x-pack/examples/embedded_lens_example/tsconfig.json index d5689e03aeb6d..ea5b99db315de 100644 --- a/x-pack/examples/embedded_lens_example/tsconfig.json +++ b/x-pack/examples/embedded_lens_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,12 +10,16 @@ "server/**/*.ts", "../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../plugins/lens/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/lens-plugin", + "@kbn/developer-examples-plugin", + "@kbn/data-views-plugin", + "@kbn/ui-actions-plugin", ] } diff --git a/x-pack/examples/exploratory_view_example/tsconfig.json b/x-pack/examples/exploratory_view_example/tsconfig.json index 795beb43c563f..aa3363da4fe98 100644 --- a/x-pack/examples/exploratory_view_example/tsconfig.json +++ b/x-pack/examples/exploratory_view_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,12 +10,15 @@ "server/**/*.ts", "../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../plugins/observability/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/observability-plugin", + "@kbn/developer-examples-plugin", + "@kbn/data-views-plugin", + "@kbn/kibana-react-plugin", ] } diff --git a/x-pack/examples/reporting_example/tsconfig.json b/x-pack/examples/reporting_example/tsconfig.json index 4d20a411bd068..c8f6db0e76906 100644 --- a/x-pack/examples/reporting_example/tsconfig.json +++ b/x-pack/examples/reporting_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,13 +11,18 @@ "common/**/*.ts", "../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../src/plugins/screenshot_mode/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, - { "path": "../../plugins/reporting/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/navigation-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/developer-examples-plugin", + "@kbn/reporting-plugin", + "@kbn/share-plugin", + "@kbn/i18n-react", + "@kbn/utility-types", ] } diff --git a/x-pack/examples/screenshotting_example/tsconfig.json b/x-pack/examples/screenshotting_example/tsconfig.json index cf117533adc8c..3c1351f817c11 100644 --- a/x-pack/examples/screenshotting_example/tsconfig.json +++ b/x-pack/examples/screenshotting_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -11,13 +11,13 @@ "common/**/*.ts", "../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../src/plugins/screenshot_mode/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, - { "path": "../../plugins/screenshotting/tsconfig.json" } + "@kbn/core", + "@kbn/developer-examples-plugin", + "@kbn/screenshotting-plugin", + "@kbn/config-schema", ] } diff --git a/x-pack/examples/testing_embedded_lens/tsconfig.json b/x-pack/examples/testing_embedded_lens/tsconfig.json index d5689e03aeb6d..b5e78a46c3009 100644 --- a/x-pack/examples/testing_embedded_lens/tsconfig.json +++ b/x-pack/examples/testing_embedded_lens/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,12 +10,17 @@ "server/**/*.ts", "../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../plugins/lens/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/lens-plugin", + "@kbn/developer-examples-plugin", + "@kbn/data-views-plugin", + "@kbn/ui-actions-plugin", + "@kbn/kibana-react-plugin", ] } diff --git a/x-pack/examples/third_party_lens_navigation_prompt/tsconfig.json b/x-pack/examples/third_party_lens_navigation_prompt/tsconfig.json index 2fe95c9cd4833..249de6790d8f5 100644 --- a/x-pack/examples/third_party_lens_navigation_prompt/tsconfig.json +++ b/x-pack/examples/third_party_lens_navigation_prompt/tsconfig.json @@ -1,22 +1,21 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", "public/**/*", "../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../../src/plugins/field_formats/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../plugins/lens/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/data-views-plugin", + "@kbn/lens-plugin", + "@kbn/developer-examples-plugin", + "@kbn/data-plugin", ] } diff --git a/x-pack/examples/third_party_maps_source_example/tsconfig.json b/x-pack/examples/third_party_maps_source_example/tsconfig.json index 988c6c54a2d29..4957d44a7f46a 100644 --- a/x-pack/examples/third_party_maps_source_example/tsconfig.json +++ b/x-pack/examples/third_party_maps_source_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", + "outDir": "target/types", }, "include": [ "public/**/*.ts", @@ -10,8 +10,12 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../plugins/maps/tsconfig.json"}, - { "path": "../../../examples/developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/maps-plugin", + "@kbn/developer-examples-plugin", + "@kbn/data-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/examples/third_party_vis_lens_example/tsconfig.json b/x-pack/examples/third_party_vis_lens_example/tsconfig.json index bb145ebd30065..ef98a7a9f4479 100644 --- a/x-pack/examples/third_party_vis_lens_example/tsconfig.json +++ b/x-pack/examples/third_party_vis_lens_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,15 +10,17 @@ "common/**/*", "../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../../src/plugins/field_formats/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../plugins/lens/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/expressions-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-views-plugin", + "@kbn/field-formats-plugin", + "@kbn/lens-plugin", + "@kbn/developer-examples-plugin", + "@kbn/interpreter", ] } diff --git a/x-pack/examples/triggers_actions_ui_example/tsconfig.json b/x-pack/examples/triggers_actions_ui_example/tsconfig.json index d28a560f8ba88..0e78735f7a134 100644 --- a/x-pack/examples/triggers_actions_ui_example/tsconfig.json +++ b/x-pack/examples/triggers_actions_ui_example/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,12 +10,17 @@ "server/**/*.ts", "../../../typings/**/*", ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../plugins/alerting/tsconfig.json" }, - { "path": "../../plugins/triggers_actions_ui/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/alerting-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/developer-examples-plugin", + "@kbn/rule-data-utils", + "@kbn/data-plugin", + "@kbn/i18n-react", ] } diff --git a/x-pack/examples/ui_actions_enhanced_examples/tsconfig.json b/x-pack/examples/ui_actions_enhanced_examples/tsconfig.json index 8b87cc628e771..2ab960659555e 100644 --- a/x-pack/examples/ui_actions_enhanced_examples/tsconfig.json +++ b/x-pack/examples/ui_actions_enhanced_examples/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "index.ts", @@ -10,17 +10,24 @@ "server/**/*.ts", "../../../typings/**/*" ], - "exclude": [], + "exclude": [ + "target/**/*", + ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/discover/tsconfig.json" }, - { "path": "../../../src/plugins/dashboard/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions_enhanced/tsconfig.json" }, - { "path": "../../../examples/developer_examples/tsconfig.json" }, - { "path": "../../plugins/dashboard_enhanced/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/share-plugin", + "@kbn/discover-plugin", + "@kbn/dashboard-plugin", + "@kbn/embeddable-plugin", + "@kbn/ui-actions-enhanced-plugin", + "@kbn/developer-examples-plugin", + "@kbn/dashboard-enhanced-plugin", + "@kbn/data-plugin", + "@kbn/ui-actions-plugin", + "@kbn/i18n", + "@kbn/unified-search-plugin", + "@kbn/utility-types", ] } diff --git a/x-pack/packages/ml/agg_utils/BUILD.bazel b/x-pack/packages/ml/agg_utils/BUILD.bazel deleted file mode 100644 index ef8d59c000f01..0000000000000 --- a/x-pack/packages/ml/agg_utils/BUILD.bazel +++ /dev/null @@ -1,134 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "agg_utils" -PKG_REQUIRE_NAME = "@kbn/ml-agg-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//@elastic/elasticsearch", - "@npm//lodash", - "//packages/kbn-field-types", - "//x-pack/packages/ml/is_populated_object", - "//x-pack/packages/ml/string_hash", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/lodash", - "@npm//@elastic/elasticsearch", - "@npm//tslib", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/kbn-field-types:npm_module_types", - "//x-pack/packages/ml/is_populated_object:npm_module_types", - "//x-pack/packages/ml/string_hash:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/x-pack/packages/ml/agg_utils/kibana.jsonc b/x-pack/packages/ml/agg_utils/kibana.jsonc index 4bcfcbd8721a6..3c29356a24ada 100644 --- a/x-pack/packages/ml/agg_utils/kibana.jsonc +++ b/x-pack/packages/ml/agg_utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ml-agg-utils", - "owner": "@elastic/ml-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/ml-ui" } diff --git a/x-pack/packages/ml/agg_utils/package.json b/x-pack/packages/ml/agg_utils/package.json index 671b3c479e480..509fcaf1f6eaa 100644 --- a/x-pack/packages/ml/agg_utils/package.json +++ b/x-pack/packages/ml/agg_utils/package.json @@ -5,7 +5,5 @@ "homepage": "https://docs.elastic.dev/kibana-dev-docs/api/kbn-ml-agg-utils", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/ml/agg_utils/src/validate_number.test.ts b/x-pack/packages/ml/agg_utils/src/validate_number.test.ts index e40bc604f417f..e124908f278ba 100644 --- a/x-pack/packages/ml/agg_utils/src/validate_number.test.ts +++ b/x-pack/packages/ml/agg_utils/src/validate_number.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { numberValidator } from '@kbn/ml-agg-utils'; +import { numberValidator } from './validate_number'; describe('numberValidator', () => { it('should only allow integers above zero', () => { diff --git a/x-pack/packages/ml/agg_utils/tsconfig.json b/x-pack/packages/ml/agg_utils/tsconfig.json index 424a7c9d59623..a7620df0a88d0 100644 --- a/x-pack/packages/ml/agg_utils/tsconfig.json +++ b/x-pack/packages/ml/agg_utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": false, "types": [ "jest", @@ -12,5 +10,14 @@ }, "include": [ "**/*.ts", + ], + "kbn_references": [ + "@kbn/core-elasticsearch-server", + "@kbn/field-types", + "@kbn/ml-is-populated-object", + "@kbn/ml-string-hash" + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/packages/ml/aiops_components/BUILD.bazel b/x-pack/packages/ml/aiops_components/BUILD.bazel deleted file mode 100644 index b47a6a8b1acd4..0000000000000 --- a/x-pack/packages/ml/aiops_components/BUILD.bazel +++ /dev/null @@ -1,157 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "aiops_components" -PKG_REQUIRE_NAME = "@kbn/aiops-components" - -SOURCE_FILES = glob( - [ - "**/*.scss", - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//d3-brush", - "@npm//d3-scale", - "@npm//d3-selection", - "@npm//d3-transition", - "@npm//react", - "@npm//@elastic/charts", - "@npm//@elastic/eui", - "@npm//@emotion/react", - "@npm//@emotion/css", - "//packages/kbn-i18n-react", - "//x-pack/packages/ml/aiops_utils", -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/d3-brush", - "@npm//@types/d3-scale", - "@npm//@types/d3-selection", - "@npm//@types/d3-transition", - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "@npm//@elastic/charts", - "@npm//@elastic/eui", - "@npm//@emotion/react", - "@npm//@emotion/css", - "//packages/kbn-i18n-react:npm_module_types", - "//x-pack/packages/ml/aiops_utils:npm_module_types", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, - additional_args = [ - "--copy-files", - "--quiet" - ], -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/x-pack/packages/ml/aiops_components/kibana.jsonc b/x-pack/packages/ml/aiops_components/kibana.jsonc index 3fc4f228e2b0f..6df0d201312a1 100644 --- a/x-pack/packages/ml/aiops_components/kibana.jsonc +++ b/x-pack/packages/ml/aiops_components/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/aiops-components", - "owner": "@elastic/ml-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/ml-ui" } diff --git a/x-pack/packages/ml/aiops_components/package.json b/x-pack/packages/ml/aiops_components/package.json index e3fd69c7c8e11..8c9a4a0b76ea5 100644 --- a/x-pack/packages/ml/aiops_components/package.json +++ b/x-pack/packages/ml/aiops_components/package.json @@ -5,8 +5,5 @@ "homepage": "https://docs.elastic.dev/kibana-dev-docs/api/kbn-aiops-components", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/ml/aiops_components/tsconfig.json b/x-pack/packages/ml/aiops_components/tsconfig.json index cdb1c5d8d0007..2298884c973cb 100644 --- a/x-pack/packages/ml/aiops_components/tsconfig.json +++ b/x-pack/packages/ml/aiops_components/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": false, "types": [ "@types/d3-brush", @@ -19,5 +17,13 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/i18n-react", + "@kbn/aiops-utils", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/packages/ml/aiops_utils/BUILD.bazel b/x-pack/packages/ml/aiops_utils/BUILD.bazel deleted file mode 100644 index b5a8daddebd9a..0000000000000 --- a/x-pack/packages/ml/aiops_utils/BUILD.bazel +++ /dev/null @@ -1,135 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "aiops_utils" -PKG_REQUIRE_NAME = "@kbn/aiops-utils" - -SOURCE_FILES = glob( - [ - "**/*.ts", - "**/*.tsx", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ - "@npm//react", - "//packages/kbn-logging" -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", - "@npm//@types/react", - "//packages/core/elasticsearch/core-elasticsearch-server:npm_module_types", - "//packages/kbn-logging:npm_module_types" -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -jsts_transpiler( - name = "target_web", - srcs = SRCS, - build_pkg_name = package_name(), - web = True, -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":target_web", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/x-pack/packages/ml/aiops_utils/kibana.jsonc b/x-pack/packages/ml/aiops_utils/kibana.jsonc index 46d16f2cdc334..09202d630140a 100644 --- a/x-pack/packages/ml/aiops_utils/kibana.jsonc +++ b/x-pack/packages/ml/aiops_utils/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/aiops-utils", - "owner": "@elastic/ml-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/ml-ui" } diff --git a/x-pack/packages/ml/aiops_utils/package.json b/x-pack/packages/ml/aiops_utils/package.json index d1b7bba50061b..dc2960e5f360a 100644 --- a/x-pack/packages/ml/aiops_utils/package.json +++ b/x-pack/packages/ml/aiops_utils/package.json @@ -5,8 +5,5 @@ "homepage": "https://docs.elastic.dev/kibana-dev-docs/api/kbn-aiops-utils", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "browser": "./target_web/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/ml/aiops_utils/tsconfig.json b/x-pack/packages/ml/aiops_utils/tsconfig.json index 4eb9855fa759d..727c591601218 100644 --- a/x-pack/packages/ml/aiops_utils/tsconfig.json +++ b/x-pack/packages/ml/aiops_utils/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": false, "types": [ "jest", @@ -14,5 +12,12 @@ "include": [ "**/*.ts", "**/*.tsx", + ], + "kbn_references": [ + "@kbn/logging", + "@kbn/core-http-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/packages/ml/is_populated_object/BUILD.bazel b/x-pack/packages/ml/is_populated_object/BUILD.bazel deleted file mode 100644 index 00c2677acc693..0000000000000 --- a/x-pack/packages/ml/is_populated_object/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "is_populated_object" -PKG_REQUIRE_NAME = "@kbn/ml-is-populated-object" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/x-pack/packages/ml/is_populated_object/kibana.jsonc b/x-pack/packages/ml/is_populated_object/kibana.jsonc index 44240b60c4198..1ef21fe110b12 100644 --- a/x-pack/packages/ml/is_populated_object/kibana.jsonc +++ b/x-pack/packages/ml/is_populated_object/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ml-is-populated-object", - "owner": "@elastic/ml-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/ml-ui" } diff --git a/x-pack/packages/ml/is_populated_object/package.json b/x-pack/packages/ml/is_populated_object/package.json index f5bdff98a7207..67178caec3de6 100644 --- a/x-pack/packages/ml/is_populated_object/package.json +++ b/x-pack/packages/ml/is_populated_object/package.json @@ -5,7 +5,5 @@ "homepage": "https://docs.elastic.dev/kibana-dev-docs/api/kbn-ml-is-populated-object", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/ml/is_populated_object/tsconfig.json b/x-pack/packages/ml/is_populated_object/tsconfig.json index af8fdef592c43..0036df9dd1a20 100644 --- a/x-pack/packages/ml/is_populated_object/tsconfig.json +++ b/x-pack/packages/ml/is_populated_object/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": false, "types": [ "jest", @@ -12,5 +10,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/packages/ml/string_hash/BUILD.bazel b/x-pack/packages/ml/string_hash/BUILD.bazel deleted file mode 100644 index b3684de8b3d0c..0000000000000 --- a/x-pack/packages/ml/string_hash/BUILD.bazel +++ /dev/null @@ -1,122 +0,0 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_config") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") - -PKG_DIRNAME = "string_hash" -PKG_REQUIRE_NAME = "@kbn/ml-string-hash" - -SOURCE_FILES = glob( - [ - "**/*.ts", - ], - exclude = [ - "**/*.config.js", - "**/*.mock.*", - "**/*.test.*", - "**/*.stories.*", - "**/__snapshots__/**", - "**/integration_tests/**", - "**/mocks/**", - "**/scripts/**", - "**/storybook/**", - "**/test_fixtures/**", - "**/test_helpers/**", - ], -) - -SRCS = SOURCE_FILES - -filegroup( - name = "srcs", - srcs = SRCS, -) - -NPM_MODULE_EXTRA_FILES = [ - "package.json", -] - -# In this array place runtime dependencies, including other packages and NPM packages -# which must be available for this code to run. -# -# To reference other packages use: -# "//repo/relative/path/to/package" -# eg. "//packages/kbn-utils" -# -# To reference a NPM package use: -# "@npm//name-of-package" -# eg. "@npm//lodash" -RUNTIME_DEPS = [ -] - -# In this array place dependencies necessary to build the types, which will include the -# :npm_module_types target of other packages and packages from NPM, including @types/* -# packages. -# -# To reference the types for another package use: -# "//repo/relative/path/to/package:npm_module_types" -# eg. "//packages/kbn-utils:npm_module_types" -# -# References to NPM packages work the same as RUNTIME_DEPS -TYPES_DEPS = [ - "@npm//@types/node", - "@npm//@types/jest", -] - -jsts_transpiler( - name = "target_node", - srcs = SRCS, - build_pkg_name = package_name(), -) - -ts_config( - name = "tsconfig", - src = "tsconfig.json", - deps = [ - "//:tsconfig.base.json", - "//:tsconfig.bazel.json", - ], -) - -ts_project( - name = "tsc_types", - args = ['--pretty'], - srcs = SRCS, - deps = TYPES_DEPS, - declaration = True, - emit_declaration_only = True, - out_dir = "target_types", - tsconfig = ":tsconfig", -) - -js_library( - name = PKG_DIRNAME, - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -js_library( - name = "npm_module_types", - srcs = NPM_MODULE_EXTRA_FILES, - deps = RUNTIME_DEPS + [":target_node", ":tsc_types"], - package_name = PKG_REQUIRE_NAME, - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "npm_module", - deps = [":" + PKG_DIRNAME], -) - -filegroup( - name = "build", - srcs = [":npm_module"], - visibility = ["//visibility:public"], -) - -pkg_npm( - name = "build_types", - deps = [":npm_module_types"], - visibility = ["//visibility:public"], -) diff --git a/x-pack/packages/ml/string_hash/kibana.jsonc b/x-pack/packages/ml/string_hash/kibana.jsonc index 0986bb25375c5..1573e9a970487 100644 --- a/x-pack/packages/ml/string_hash/kibana.jsonc +++ b/x-pack/packages/ml/string_hash/kibana.jsonc @@ -1,7 +1,5 @@ { "type": "shared-common", "id": "@kbn/ml-string-hash", - "owner": "@elastic/ml-ui", - "runtimeDeps": [], - "typeDeps": [] + "owner": "@elastic/ml-ui" } diff --git a/x-pack/packages/ml/string_hash/package.json b/x-pack/packages/ml/string_hash/package.json index 29bb620205745..272cb258ed1c5 100644 --- a/x-pack/packages/ml/string_hash/package.json +++ b/x-pack/packages/ml/string_hash/package.json @@ -5,7 +5,5 @@ "homepage": "https://docs.elastic.dev/kibana-dev-docs/api/kbn-ml-string-hash", "private": true, "version": "1.0.0", - "main": "./target_node/index.js", - "license": "SSPL-1.0 OR Elastic License 2.0", - "types": "./target_types/index.d.ts" -} + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/ml/string_hash/tsconfig.json b/x-pack/packages/ml/string_hash/tsconfig.json index af8fdef592c43..0036df9dd1a20 100644 --- a/x-pack/packages/ml/string_hash/tsconfig.json +++ b/x-pack/packages/ml/string_hash/tsconfig.json @@ -1,9 +1,7 @@ { - "extends": "../../../../tsconfig.bazel.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "target_types", + "outDir": "target/types", "stripInternal": false, "types": [ "jest", @@ -12,5 +10,8 @@ }, "include": [ "**/*.ts" + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/performance/tsconfig.json b/x-pack/performance/tsconfig.json index 923a42ffe52f3..636c4e1f5ed1f 100644 --- a/x-pack/performance/tsconfig.json +++ b/x-pack/performance/tsconfig.json @@ -1,11 +1,16 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, + "outDir": "target/types", "types": ["node", "jest"] }, "include": ["**/*.ts"], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/journeys", + "@kbn/test-subj-selector", + "@kbn/tooling-log", + ] } diff --git a/x-pack/plugins/actions/tsconfig.json b/x-pack/plugins/actions/tsconfig.json index 3928d87b2a871..aa450d51fbb3b 100644 --- a/x-pack/plugins/actions/tsconfig.json +++ b/x-pack/plugins/actions/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "server/**/*", @@ -13,16 +11,29 @@ "common/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../task_manager/tsconfig.json" }, - { "path": "../event_log/tsconfig.json" }, - { "path": "../encrypted_saved_objects/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../monitoring_collection/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" } + "@kbn/core", + "@kbn/spaces-plugin", + "@kbn/security-plugin", + "@kbn/licensing-plugin", + "@kbn/task-manager-plugin", + "@kbn/event-log-plugin", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/features-plugin", + "@kbn/monitoring-collection-plugin", + "@kbn/usage-collection-plugin", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/config-schema", + "@kbn/config", + "@kbn/core-saved-objects-server", + "@kbn/es-query", + "@kbn/apm-utils", + "@kbn/std", + "@kbn/logging", + "@kbn/logging-mocks", + "@kbn/core-elasticsearch-client-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/aiops/tsconfig.json b/x-pack/plugins/aiops/tsconfig.json index 0f8ba148324bd..30fc6a4d3b187 100644 --- a/x-pack/plugins/aiops/tsconfig.json +++ b/x-pack/plugins/aiops/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../../typings/**/*", @@ -14,17 +12,38 @@ "types/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/custom_integrations/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../../../src/plugins/charts/tsconfig.json" }, - { "path": "../../../src/plugins/discover/tsconfig.json" }, - { "path": "../lens/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-plugin", + "@kbn/unified-search-plugin", + "@kbn/charts-plugin", + "@kbn/discover-plugin", + "@kbn/lens-plugin", + "@kbn/datemath", + "@kbn/field-formats-plugin", + "@kbn/ml-agg-utils", + "@kbn/config-schema", + "@kbn/ml-is-populated-object", + "@kbn/es-query", + "@kbn/share-plugin", + "@kbn/data-views-plugin", + "@kbn/saved-search-plugin", + "@kbn/i18n", + "@kbn/ml-string-hash", + "@kbn/ui-theme", + "@kbn/i18n-react", + "@kbn/rison", + "@kbn/core-http-browser", + "@kbn/aiops-components", + "@kbn/aiops-utils", + "@kbn/licensing-plugin", + "@kbn/field-types", + "@kbn/logging", + "@kbn/core-elasticsearch-server", + "@kbn/es-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/alerting/tsconfig.json b/x-pack/plugins/alerting/tsconfig.json index 105ed878b0975..9ea5bf8dcb94a 100644 --- a/x-pack/plugins/alerting/tsconfig.json +++ b/x-pack/plugins/alerting/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "server/**/*", @@ -13,17 +11,33 @@ "common/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../actions/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../task_manager/tsconfig.json" }, - { "path": "../event_log/tsconfig.json" }, - { "path": "../encrypted_saved_objects/tsconfig.json" }, - { "path": "../monitoring_collection/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" } + "@kbn/core", + "@kbn/actions-plugin", + "@kbn/spaces-plugin", + "@kbn/security-plugin", + "@kbn/licensing-plugin", + "@kbn/task-manager-plugin", + "@kbn/event-log-plugin", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/monitoring-collection-plugin", + "@kbn/features-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/utility-types", + "@kbn/config-schema", + "@kbn/data-plugin", + "@kbn/i18n", + "@kbn/core-saved-objects-server", + "@kbn/es-query", + "@kbn/logging", + "@kbn/std", + "@kbn/rule-data-utils", + "@kbn/logging-mocks", + "@kbn/core-logging-server-mocks", + "@kbn/core-saved-objects-common", + "@kbn/securitysolution-rules", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/apm/ftr_e2e/cypress.config.ts b/x-pack/plugins/apm/ftr_e2e/cypress.config.ts index bcccae43adc7e..81a2939b9c9a4 100644 --- a/x-pack/plugins/apm/ftr_e2e/cypress.config.ts +++ b/x-pack/plugins/apm/ftr_e2e/cypress.config.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; import { setupNodeEvents } from './setup_cypress_node_events'; -module.exports = defineConfig({ +export default defineCypressConfig({ projectId: 'omwh6f', fileServerFolder: './cypress', fixturesFolder: './cypress/fixtures', diff --git a/x-pack/plugins/apm/ftr_e2e/tsconfig.json b/x-pack/plugins/apm/ftr_e2e/tsconfig.json index 6a8ba7e1495ae..e61ef90e5335b 100644 --- a/x-pack/plugins/apm/ftr_e2e/tsconfig.json +++ b/x-pack/plugins/apm/ftr_e2e/tsconfig.json @@ -8,7 +8,6 @@ "target/**/*" ], "compilerOptions": { - "target": "es2015", "outDir": "target/types", "types": [ "cypress", @@ -19,6 +18,10 @@ "kbn_references": [ { "path": "../../../test/tsconfig.json" }, { "path": "../../../../test/tsconfig.json" }, - { "path": "../tsconfig.json" }, + "@kbn/test", + "@kbn/apm-synthtrace", + "@kbn/dev-utils", + "@kbn/axe-config", + "@kbn/cypress-config", ] } diff --git a/x-pack/plugins/apm/scripts/aggregate_latency_metrics.js b/x-pack/plugins/apm/scripts/aggregate_latency_metrics.js index c8f1eb764155f..c6bf895a0120c 100644 --- a/x-pack/plugins/apm/scripts/aggregate_latency_metrics.js +++ b/x-pack/plugins/apm/scripts/aggregate_latency_metrics.js @@ -5,8 +5,7 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies -require('@kbn/optimizer').registerNodeAutoTranspilation(); +require('@kbn/babel-register').install(); const { aggregateLatencyMetrics } = require('./aggregate_latency_metrics'); diff --git a/x-pack/plugins/apm/scripts/create_apm_users.js b/x-pack/plugins/apm/scripts/create_apm_users.js index 8cef6ebb6c7ae..a13c986e93222 100644 --- a/x-pack/plugins/apm/scripts/create_apm_users.js +++ b/x-pack/plugins/apm/scripts/create_apm_users.js @@ -13,8 +13,5 @@ * Usage: node create-apm-users.js ******************************/ -// compile typescript on the fly -// eslint-disable-next-line import/no-extraneous-dependencies -require('@kbn/optimizer').registerNodeAutoTranspilation(); - +require('@kbn/babel-register').install(); require('./create_apm_users/create_apm_users_cli'); diff --git a/x-pack/plugins/apm/scripts/create_functional_tests_archive.js b/x-pack/plugins/apm/scripts/create_functional_tests_archive.js index b1b766990ad67..254a24cde649a 100644 --- a/x-pack/plugins/apm/scripts/create_functional_tests_archive.js +++ b/x-pack/plugins/apm/scripts/create_functional_tests_archive.js @@ -6,7 +6,5 @@ */ // compile typescript on the fly -// eslint-disable-next-line import/no-extraneous-dependencies -require('@kbn/optimizer').registerNodeAutoTranspilation(); - +require('@kbn/babel-register').install(); require('./create_functional_tests_archive'); diff --git a/x-pack/plugins/apm/scripts/infer_route_return_types.js b/x-pack/plugins/apm/scripts/infer_route_return_types.js index 8bf3bdbcdf3d3..d60df693fac5a 100644 --- a/x-pack/plugins/apm/scripts/infer_route_return_types.js +++ b/x-pack/plugins/apm/scripts/infer_route_return_types.js @@ -6,7 +6,5 @@ */ // compile typescript on the fly -// eslint-disable-next-line import/no-extraneous-dependencies -require('@kbn/optimizer').registerNodeAutoTranspilation(); - +require('@kbn/babel-register').install(); require('./infer_route_return_types'); diff --git a/x-pack/plugins/apm/scripts/test/jest.js b/x-pack/plugins/apm/scripts/test/jest.js index c4c5d24d839b3..30e983204252d 100644 --- a/x-pack/plugins/apm/scripts/test/jest.js +++ b/x-pack/plugins/apm/scripts/test/jest.js @@ -5,10 +5,8 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies -require('@kbn/optimizer').registerNodeAutoTranspilation(); +require('@kbn/babel-register').install(); -// eslint-disable-next-line import/no-extraneous-dependencies const { run } = require('jest'); process.env.NODE_ENV = process.env.NODE_ENV || 'test'; diff --git a/x-pack/plugins/apm/scripts/upload_telemetry_data.js b/x-pack/plugins/apm/scripts/upload_telemetry_data.js index e82e197097dd8..c3ba54e112952 100644 --- a/x-pack/plugins/apm/scripts/upload_telemetry_data.js +++ b/x-pack/plugins/apm/scripts/upload_telemetry_data.js @@ -6,7 +6,5 @@ */ // compile typescript on the fly -// eslint-disable-next-line import/no-extraneous-dependencies -require('@kbn/optimizer').registerNodeAutoTranspilation(); - +require('@kbn/babel-register').install(); require('./upload_telemetry_data'); diff --git a/x-pack/plugins/apm/server/deprecations/deprecations.test.ts b/x-pack/plugins/apm/server/deprecations/deprecations.test.ts index 1843affb9bfc3..8496672e40f07 100644 --- a/x-pack/plugins/apm/server/deprecations/deprecations.test.ts +++ b/x-pack/plugins/apm/server/deprecations/deprecations.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { GetDeprecationsContext } from '@kbn/core/server'; import { CloudSetup } from '@kbn/cloud-plugin/server'; diff --git a/x-pack/plugins/apm/tsconfig.json b/x-pack/plugins/apm/tsconfig.json index 17ee8b7bcaddd..4bfe869c8373b 100644 --- a/x-pack/plugins/apm/tsconfig.json +++ b/x-pack/plugins/apm/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../../typings/**/*", @@ -18,28 +16,69 @@ "server/**/*.json", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/inspector/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../actions/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../infra/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../maps/tsconfig.json" }, - { "path": "../ml/tsconfig.json" }, - { "path": "../observability/tsconfig.json" }, - { "path": "../reporting/tsconfig.json" }, - { "path": "../rule_registry/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../task_manager/tsconfig.json" }, - { "path": "../triggers_actions_ui/tsconfig.json" }, - { "path": "../fleet/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/home-plugin", + "@kbn/inspector-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/usage-collection-plugin", + "@kbn/actions-plugin", + "@kbn/alerting-plugin", + "@kbn/cloud-plugin", + "@kbn/features-plugin", + "@kbn/infra-plugin", + "@kbn/licensing-plugin", + "@kbn/maps-plugin", + "@kbn/ml-plugin", + "@kbn/observability-plugin", + "@kbn/rule-registry-plugin", + "@kbn/security-plugin", + "@kbn/task-manager-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/fleet-plugin", + "@kbn/io-ts-utils", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/ui-theme", + "@kbn/apm-synthtrace", + "@kbn/lens-plugin", + "@kbn/unified-search-plugin", + "@kbn/share-plugin", + "@kbn/spaces-plugin", + "@kbn/data-views-plugin", + "@kbn/charts-plugin", + "@kbn/field-formats-plugin", + "@kbn/typed-react-router-config", + "@kbn/advanced-settings-plugin", + "@kbn/core-http-browser", + "@kbn/server-route-repository", + "@kbn/datemath", + "@kbn/utility-types", + "@kbn/i18n-react", + "@kbn/rule-data-utils", + "@kbn/core-lifecycle-browser", + "@kbn/shared-ux-page-kibana-template", + "@kbn/es-ui-shared-plugin", + "@kbn/es-types", + "@kbn/unified-field-list-plugin", + "@kbn/analytics", + "@kbn/rison", + "@kbn/safer-lodash-set", + "@kbn/config-schema", + "@kbn/repo-info", + "@kbn/apm-utils", + "@kbn/logging", + "@kbn/std", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/field-types", + "@kbn/core-http-server-mocks", + "@kbn/babel-register", + "@kbn/core-saved-objects-migration-server-internal", + "@kbn/core-elasticsearch-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/banners/tsconfig.json b/x-pack/plugins/banners/tsconfig.json index 77b896508fac8..e79f9107075f5 100644 --- a/x-pack/plugins/banners/tsconfig.json +++ b/x-pack/plugins/banners/tsconfig.json @@ -1,15 +1,18 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*", "server/**/*", "common/**/*", "../../../typings/**/*"], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/screenshot_mode/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/licensing-plugin", + "@kbn/config-schema", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/canvas/scripts/shareable_runtime.js b/x-pack/plugins/canvas/scripts/shareable_runtime.js index c143637a95f07..a0b8421f8da01 100644 --- a/x-pack/plugins/canvas/scripts/shareable_runtime.js +++ b/x-pack/plugins/canvas/scripts/shareable_runtime.js @@ -5,6 +5,8 @@ * 2.0. */ +require('@kbn/babel-register').install(); + const fs = require('fs'); const path = require('path'); const { pipeline } = require('stream'); @@ -53,7 +55,6 @@ run( execa.sync( process.execPath, [ - '--preserve-symlinks', require.resolve('webpack-dev-server/bin/webpack-dev-server'), '--config', webpackConfig, @@ -87,7 +88,6 @@ run( execa.sync( process.execPath, [ - '--preserve-symlinks', require.resolve('webpack/bin/webpack'), '--config', webpackConfig, diff --git a/x-pack/plugins/canvas/server/templates/assets/048ed81e-84ae-4a48-9c30-641cf72b0376.jpg b/x-pack/plugins/canvas/server/templates/assets/048ed81e-84ae-4a48-9c30-641cf72b0376.jpg new file mode 100644 index 0000000000000..38988f948e8ea Binary files /dev/null and b/x-pack/plugins/canvas/server/templates/assets/048ed81e-84ae-4a48-9c30-641cf72b0376.jpg differ diff --git a/x-pack/plugins/canvas/server/templates/assets/0791ed56-9a2e-4d0d-8d2d-a2f8c3c268ee.jpg b/x-pack/plugins/canvas/server/templates/assets/0791ed56-9a2e-4d0d-8d2d-a2f8c3c268ee.jpg new file mode 100644 index 0000000000000..9f685e52a0fba Binary files /dev/null and b/x-pack/plugins/canvas/server/templates/assets/0791ed56-9a2e-4d0d-8d2d-a2f8c3c268ee.jpg differ diff --git a/x-pack/plugins/canvas/server/templates/assets/0c6f377f-771e-432e-8e2e-15c3e9142ad6.png b/x-pack/plugins/canvas/server/templates/assets/0c6f377f-771e-432e-8e2e-15c3e9142ad6.png new file mode 100644 index 0000000000000..94db73c2dd315 Binary files /dev/null and b/x-pack/plugins/canvas/server/templates/assets/0c6f377f-771e-432e-8e2e-15c3e9142ad6.png differ diff --git a/x-pack/plugins/canvas/server/templates/assets/23edd689-2d34-4bb8-a3eb-05420dd87b85.svg b/x-pack/plugins/canvas/server/templates/assets/23edd689-2d34-4bb8-a3eb-05420dd87b85.svg new file mode 100644 index 0000000000000..47ed57f5e8e35 --- /dev/null +++ b/x-pack/plugins/canvas/server/templates/assets/23edd689-2d34-4bb8-a3eb-05420dd87b85.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/x-pack/plugins/canvas/server/templates/assets/6fb8f925-0e1e-4108-8442-3dbf88d145e5.jpg b/x-pack/plugins/canvas/server/templates/assets/6fb8f925-0e1e-4108-8442-3dbf88d145e5.jpg new file mode 100644 index 0000000000000..8561e64e84161 Binary files /dev/null and b/x-pack/plugins/canvas/server/templates/assets/6fb8f925-0e1e-4108-8442-3dbf88d145e5.jpg differ diff --git a/x-pack/plugins/canvas/server/templates/assets/7f2d5d96-3c85-49a0-94f3-e9b05de23cb6.jpg b/x-pack/plugins/canvas/server/templates/assets/7f2d5d96-3c85-49a0-94f3-e9b05de23cb6.jpg new file mode 100644 index 0000000000000..4e48001806956 Binary files /dev/null and b/x-pack/plugins/canvas/server/templates/assets/7f2d5d96-3c85-49a0-94f3-e9b05de23cb6.jpg differ diff --git a/x-pack/plugins/canvas/server/templates/assets/9c2e5ab5-2dbe-43a8-bc84-e67f191fbcd8.png b/x-pack/plugins/canvas/server/templates/assets/9c2e5ab5-2dbe-43a8-bc84-e67f191fbcd8.png new file mode 100644 index 0000000000000..6ec2a4e79d066 Binary files /dev/null and b/x-pack/plugins/canvas/server/templates/assets/9c2e5ab5-2dbe-43a8-bc84-e67f191fbcd8.png differ diff --git a/x-pack/plugins/canvas/server/templates/assets/a30a06eb-2276-44b1-a62d-856e2116138c.jpg b/x-pack/plugins/canvas/server/templates/assets/a30a06eb-2276-44b1-a62d-856e2116138c.jpg new file mode 100644 index 0000000000000..7c9c8c9506c3b Binary files /dev/null and b/x-pack/plugins/canvas/server/templates/assets/a30a06eb-2276-44b1-a62d-856e2116138c.jpg differ diff --git a/x-pack/plugins/canvas/server/templates/assets/aa91a324-8012-477e-a7e4-7c3cd7a6332f.svg b/x-pack/plugins/canvas/server/templates/assets/aa91a324-8012-477e-a7e4-7c3cd7a6332f.svg new file mode 100644 index 0000000000000..485d5fdd47a3e --- /dev/null +++ b/x-pack/plugins/canvas/server/templates/assets/aa91a324-8012-477e-a7e4-7c3cd7a6332f.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/x-pack/plugins/canvas/server/templates/assets/b22b6fa7-618c-4a59-82a1-ca921454da48.svg b/x-pack/plugins/canvas/server/templates/assets/b22b6fa7-618c-4a59-82a1-ca921454da48.svg new file mode 100644 index 0000000000000..d407ddf51282f --- /dev/null +++ b/x-pack/plugins/canvas/server/templates/assets/b22b6fa7-618c-4a59-82a1-ca921454da48.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/x-pack/plugins/canvas/server/templates/assets/d38c5025-eafc-4a35-a5fd-fb7b5bdc9efa.jpg b/x-pack/plugins/canvas/server/templates/assets/d38c5025-eafc-4a35-a5fd-fb7b5bdc9efa.jpg new file mode 100644 index 0000000000000..65467920e89b1 Binary files /dev/null and b/x-pack/plugins/canvas/server/templates/assets/d38c5025-eafc-4a35-a5fd-fb7b5bdc9efa.jpg differ diff --git a/x-pack/plugins/canvas/server/templates/pitch_presentation.ts b/x-pack/plugins/canvas/server/templates/pitch_presentation.ts index 82ad535852c97..fa949f5dce5a9 100644 --- a/x-pack/plugins/canvas/server/templates/pitch_presentation.ts +++ b/x-pack/plugins/canvas/server/templates/pitch_presentation.ts @@ -5,8 +5,27 @@ * 2.0. */ +import Fs from 'fs'; +import Path from 'path'; + import { CanvasTemplate } from '../../types'; +const ext = (name: string) => Path.extname(name); +const base64 = (name: string) => Fs.readFileSync(Path.resolve(__dirname, 'assets', name), 'base64'); +const contentType = (name: string) => { + switch (ext(name)) { + case '.jpg': + return 'image/jpeg'; + case '.png': + return 'image/png'; + case '.svg': + return 'image/svg+xml'; + default: + throw new Error(`unknown content-type for extension [${ext(name)}]`); + } +}; +const embed = (name: string) => `data:${contentType(name)};base64,${base64(name)}`; + export const pitch: CanvasTemplate = { id: 'workpad-template-061d7868-2b4e-4dc8-8bf7-3772b52926e5', name: 'Pitch', @@ -1576,78 +1595,67 @@ export const pitch: CanvasTemplate = { id: 'asset-a30a06eb-2276-44b1-a62d-856e2116138c', '@created': '2019-03-29T14:02:51.349Z', type: 'dataurl', - value: - 'data:image/jpeg;base64,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', + value: embed('a30a06eb-2276-44b1-a62d-856e2116138c.jpg'), }, 'asset-23edd689-2d34-4bb8-a3eb-05420dd87b85': { id: 'asset-23edd689-2d34-4bb8-a3eb-05420dd87b85', '@created': '2019-03-29T14:43:08.655Z', type: 'dataurl', - value: - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1NSIgaGVpZ2h0PSI1MiIgdmlld0JveD0iMCAwIDU1IDUyIj4KICA8cGF0aCBmaWxsPSIjRkZGIiBkPSJNMTM0LjEwODc1OSwxMzYuMTg0NDQgQzEzNS42NDE4MiwxMzYuNzEyOTg4IDEzNy4yODczOTMsMTM3IDEzOSwxMzcgQzE0MS40ODY3NywxMzcgMTQzLjgzMjIwMiwxMzYuMzk0ODYgMTQ1Ljg5NzA3MiwxMzUuMzIzODA0IEMxNDMuMTQ5MDQsMTMyLjgyNjA5OSAxNDEuMTc2ODUyLDEyOS40ODk4NzMgMTQwLjM4NDcxMSwxMjUuNzE5MzMgQzEzNi45OTA2ODIsMTI4LjEwNDc0OSAxMzQuNjMwMzI1LDEzMS44NjE0OTIgMTM0LjEwODc1OSwxMzYuMTg0NDQgWiBNMTMxLjI3MzA1NSwxMzQuODU5MzEgQzEzMi4yMDk5NDksMTI5LjUzNDg2NCAxMzUuNDg3MDg5LDEyNS4wMTY5MjUgMTQwLjAwNDQ3NywxMjIuNDA1NDkgQzE0MC4wMDE0OTgsMTIyLjI3MDY4NyAxNDAsMTIyLjEzNTUxOCAxNDAsMTIyIEMxNDAsMTE2LjcxODg0MiAxNDIuMjc0MzcyLDExMS45Njg4OTMgMTQ1Ljg5NzA3MiwxMDguNjc2MTk2IEMxNDMuODMyMjAyLDEwNy42MDUxNCAxNDEuNDg2NzcsMTA3IDEzOSwxMDcgQzEzMC43MTU3MjksMTA3IDEyNCwxMTMuNzE1NzI5IDEyNCwxMjIgQzEyNCwxMjcuNDU3OTEzIDEyNi45MTQ5OTQsMTMyLjIzNDk5MiAxMzEuMjczMDU1LDEzNC44NTkzMSBaIE0xNTMuODkxMjQxLDEyMy44MTU1NiBDMTUyLjM1ODE4LDEyMy4yODcwMTIgMTUwLjcxMjYwNywxMjMgMTQ5LDEyMyBDMTQ2LjkyNzM5NywxMjMgMTQ0Ljk1Mjk3MywxMjMuNDIwMzU2IDE0My4xNTczMzIsMTI0LjE4MDQ2MyBDMTQzLjcwODYzMywxMjcuOTY2MTU0IDE0NS42NzM4OTgsMTMxLjI5MzI5OCAxNDguNSwxMzMuNjA4NzY2IEMxNTEuNDE2NTU5LDEzMS4yMTkxODUgMTUzLjQxNjI5MiwxMjcuNzUyMTMgMTUzLjg5MTI0MSwxMjMuODE1NTYgWiBNMTUzLjk0MzM1MiwxMjAuNjg3Mjg4IEMxNTMuNTg0MSwxMTYuNTQzNTk1IDE1MS41NDAxMzEsMTEyLjg4MjA1OSAxNDguNSwxMTAuMzkxMjM0IEMxNDUuMzgwNDU5LDExMi45NDcxMjIgMTQzLjMwOTgsMTE2LjczNTY3OSAxNDMuMDMxOTU2LDEyMS4wMTI5NzMgQzE0NC44OTk1OTIsMTIwLjM1Njg0MSAxNDYuOTA4MTI0LDEyMCAxNDksMTIwIEMxNTAuNzE0MzE3LDEyMCAxNTIuMzcyNjU5LDEyMC4yMzk2NTQgMTUzLjk0MzM1MiwxMjAuNjg3Mjg4IFogTTEzMS4wMDA0NTQsMTM4LjEyOTE4NiBDMTI1LjA3MzMzNCwxMzUuMTgzODY4IDEyMSwxMjkuMDY3NjIzIDEyMSwxMjIgQzEyMSwxMTIuMDU4ODc1IDEyOS4wNTg4NzUsMTA0IDEzOSwxMDQgQzE0Mi40ODcxMzQsMTA0IDE0NS43NDI2NjUsMTA0Ljk5MTYwOSAxNDguNSwxMDYuNzA4MjM0IEMxNTEuMjU3MzM1LDEwNC45OTE2MDkgMTU0LjUxMjg2NiwxMDQgMTU4LDEwNCBDMTY3Ljk0MTEyNSwxMDQgMTc2LDExMi4wNTg4NzUgMTc2LDEyMiBDMTc2LDEyOC42NjQzODkgMTcyLjM3ODIwNCwxMzQuNDgyODYzIDE2Ni45OTU1MjMsMTM3LjU5NDUxIEMxNjYuOTk4NTAyLDEzNy43MjkzMTMgMTY3LDEzNy44NjQ0ODIgMTY3LDEzOCBDMTY3LDE0Ny45NDExMjUgMTU4Ljk0MTEyNSwxNTYgMTQ5LDE1NiBDMTM5LjEwMTk3MiwxNTYgMTMxLjA2OTkxLDE0OC4wMTA4NDkgMTMxLjAwMDQ1NCwxMzguMTI5MTg2IFogTTEzNC4wNTY2NDgsMTM5LjMxMjcxMiBDMTM0LjcyMTU4NiwxNDYuOTgyMjQyIDE0MS4xNTgwMzIsMTUzIDE0OSwxNTMgQzE1Ni45NTI2MzksMTUzIDE2My40NTk4MDQsMTQ2LjgxMTE5MiAxNjMuOTY4MDQ0LDEzOC45ODcwMjcgQzE2Mi4xMDA0MDgsMTM5LjY0MzE1OSAxNjAuMDkxODc2LDE0MCAxNTgsMTQwIEMxNTQuNTEyODY2LDE0MCAxNTEuMjU3MzM1LDEzOS4wMDgzOTEgMTQ4LjUsMTM3LjI5MTc2NiBDMTQ1Ljc0MjY2NSwxMzkuMDA4MzkxIDE0Mi40ODcxMzQsMTQwIDEzOSwxNDAgQzEzNy4yODU2ODMsMTQwIDEzNS42MjczNDEsMTM5Ljc2MDM0NiAxMzQuMDU2NjQ4LDEzOS4zMTI3MTIgWiBNMTU2Ljk5OTU0NiwxMjEuODcwODE0IEMxNjEuODU3MzQsMTI0LjI4NDc2IDE2NS40Njk5MDEsMTI4LjgyODY5MyAxNjYuNjE1Mjg5LDEzNC4yODA2NyBDMTcwLjQ3NjU4NiwxMzEuNTY2ODQyIDE3MywxMjcuMDc4MTA5IDE3MywxMjIgQzE3MywxMTMuNzE1NzI5IDE2Ni4yODQyNzEsMTA3IDE1OCwxMDcgQzE1NS41MTMyMywxMDcgMTUzLjE2Nzc5OCwxMDcuNjA1MTQgMTUxLjEwMjkyOCwxMDguNjc2MTk2IEMxNTQuNjk2MDY0LDExMS45NDIwMjIgMTU2Ljk2Mjc5LDExNi42NDE0MTQgMTU2Ljk5OTU0NiwxMjEuODcwODE0IFogTTE1Ni43MjY5NDUsMTI1LjE0MDY5IEMxNTYuMDIxNzU3LDEyOS4xNDgzMzUgMTUzLjk5MDcyOCwxMzIuNjk5MDYzIDE1MS4xMDI5MjgsMTM1LjMyMzgwNCBDMTUzLjE2Nzc5OCwxMzYuMzk0ODYgMTU1LjUxMzIzLDEzNyAxNTgsMTM3IEMxNjAuMDcyNjAzLDEzNyAxNjIuMDQ3MDI3LDEzNi41Nzk2NDQgMTYzLjg0MjY2OCwxMzUuODE5NTM3IEMxNjMuMTgyMzYyLDEzMS4yODUzMjMgMTYwLjQ5MzY2MiwxMjcuNDA4OTE1IDE1Ni43MjY5NDUsMTI1LjE0MDY5IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjEgLTEwNCkiLz4KPC9zdmc+Cg==', + value: embed('23edd689-2d34-4bb8-a3eb-05420dd87b85.svg'), }, 'asset-048ed81e-84ae-4a48-9c30-641cf72b0376': { id: 'asset-048ed81e-84ae-4a48-9c30-641cf72b0376', '@created': '2019-03-29T14:51:06.870Z', type: 'dataurl', - value: - 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAWICFADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD41oIzRRQAm33o+7S0UAJu9qWigjNABQRmk2+9LQAm33paKKACiiigAooooAXJwQD1pKKKACiiigAooooAKKKKACiiigApNvvS0UAAGKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKU47DFJRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFKFJUsBwOtACUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRS8bSCOexpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBNtKBilDEKVycHqM9aSgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiintG6xq5UhXztOODigBlFFFABRRRQAUUUUAFFOwnl53/N/dxTaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACilJzSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUm33pQMUAFFFFABRRTt/7sptXk5zjmgBtFFFABRRSbvagBaKAc0UABOKTd7UtFABRRRQBYa4Q2X2ZIgMtuZz1PtVeiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACgcEH0oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAcm0Nl13D0zim0UUAFFFFABRRRQAUvAGAKSigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopQPlJ9KSgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAkgk8qVZNivtOdrDIP1qOp7K2a6kdFdF2Rs5LNgYAJ/pUFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQADoDRRS0AJRT5HaR2dzlmOSaZQAUUUUAFSNNK0QiaRii9FJ4H0qOigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqW2WN5lSVwiE8t6UICKinyIUkZT2OM0ygAooooAKKKKACiiigAooooAKKKCM0AFFJt96UDFABS5OCATg9R60lFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUm33pQMUAFFFFABRRRQAUUUUAFFFFABRRT3jZVVipAYZU460AMooooAKKKKACiiigAooooAKKKKACiigcACgAoopVGe4H1oASiiigAooooAKKKKACiiigAooooAKKKKACiiigBzBc/KSR79abRRQAUUUUAFFFFABRRRQAUUUUABGaTb70tFABRRRQAUUUUAFFFFABRRRQAU95HdUVjkIMD6UyjsR60AFFL/Bt465zSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU6RCjbW60ANooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAVmLHLEknuTmkoooAKKKKACilBwpGAc+tJQAUUUUAFFFT3dtJbMiyFcsoYbTng0AQUUUUAFLg4zg4FJUiTSrEYhI4jJBKhiAcevrQBHRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAE4pN3tS0UAFFFFABRRRQAE4pN3tS0UAFFFFABRRR2J9KACiiigAooooAKKKKACiiigAopybM/OWA/2Rk02gAooooAKKKKACiiigBWUrjPcZpKKKACjuT60UUAFFFFABRRRQAUUUdifSgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACip7QwAyfaFkK+W20oej/w59s1BQAUUUUAFFFFABRRRQAU9pHZVVmJC52jsM0yigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiilII6igBKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAfH5fzeYGPynbj1plFFACrt3Dfnb3xSUUUAH+FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUALU919m8uDyPM3eX++3/wB/J6e2MVXooAKKKKACiiigAopVG5gozknAwKVlKsVIIIPQjmgBtFFFABRRRQAUUUUAFFFFABRRRQAUUoGVJyBj1pKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClALMFUEk0lKrFTuUkH2oACCGKkYI60lFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQOoHrRQAUUU+OR487WIyMHB7UAMooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAe6FNuSDkZ4NMoooAKKKOe5zQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFWLSzuLqK4lgiLrbx+ZLj+Fc4z+tV6ACiiigAooooAKKWkoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClY5JOMUlFABRRRQAUEZo57jFFACbfeloooAKtf2fef2Z/aRtpfsfneR5235fM27tufXbz9Kq1ZN7dfYPsH2ib7J5vneSXOzfjbux0zjjPpQBWooooAKKKKACiiigAop8jKzZVdowOM0ygAopQcUlABRRRQApBBII6UlFFABRRRQAUqqWbaoyTSUUAFFFFABRRRQAUUUUAFFTwNALaZXVjMSvlsDwBk5z9eKhptWASiinRrudVyBkgZNIBtFWtVtY7PUri1iuY7qOKQosyfdcDuKq0AFFFFAE7SQmzjjWIiYOWaTPUcYGPbn86goopt3AKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVa1L7D9oH9n+d5Plpnzeu7aN34Zzj2oAq0UUUAFFFFABRRRQAUUUUAFL+I6UlFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRTkVnbaoJPoBk00m3ZANooopAFKGI5BIPrmkooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKdHs+bfu6cY9abRQAUUUUAFFFFABRRRQAUUUUAFFFFABS0ldL4a1fw9p/h7WbTUdB+36neLGlldtLgWgBJdtvdjwAe3NXTipO0nZCbsc1Tgy7NpXJ7HPSkJzSVLVnYYUUUUgCiiigAooooAKKKKACilBI6GkoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFQ7XVuuDmhjlifU5pKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFJzSUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAKMdxkUlFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFOVS2cAnAycCm0APSR0DBXZQwwQDgEehplFFABRRRQAUUUUAO3v5fl7jt9BTaKKACiiigAooqYW7/ZBc5XaZPLxnnOM0AQ0UUUAFFFFAARmk2+9LRQAAYooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACnAjaRtGSRg+lNpQcKRgHNACUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUrABiFOQD1pKACrFn9m2T/aPMz5Z8nZ/fyMZ9sZqvRTTswFpKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUVpaJLpsX2z+0bWW4L2rpbFH2+XMcbXPqBzx71b1rwrq+keHtH169t/KsNZWV7F9wJlWNtrHHbk10LDuUOaLFfWxhUUUVzjCiiigAooooAKKKKACiiigAooooAKKKKAClAzScdhS0AJRXQ6l4P1rTvCOl+Kru28rStVllis5iwPmNH97jt1rnq1q0ZUrKQBRRRWQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAEohY2zT5GxXCdeckE9PwqKiigAooooAK1PDOuX/h7VRqemNGlysckas8YcAOpUkA98E4PasuinFuLug0aswp8TtG+9Dg4IplFIAooooAKKKKACiiigAooooAKKWkoAKKKKACiiigAooooAKKKKACiiigAooooAUAbSScYpW8vjYzHjnPrTaKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApckkkmkooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKVThs0lFACsSzFmJJPrSUU9vlDKrhlPcDGaAGUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJt96WiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqQOBCU2Andnd3A9KjoAKKKKACiiigAooooAKTb70tFACbfeloooAKKKKACiiigBaSiigAqSERliJWYLjsO/ao6KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACij8R+NFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRTomCyKzLuAIJGeo9KvabJppmu31CGcqbeT7OsBAxL/AAbs/wAPXNNK4GfVrSraK71K3tZ7qO0jllVGnkHyxgnBY+wqrRRF2dwJLmNYriSJZFlCOVDr0YA9R9ajoopdQCiiigAooooAKKKKACiiigAooooAKKKKAFAypOQMUlFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVYub27uLeC3nuZZIbcFYI2clYwTkhQemTzVeijUAooooAKKKKACiiigAoopVOM8A5GOaAEooooAKKKKACiiigAooooAtXGo309jb2E15PJa227yIXkJSLccttHQZPJxVWiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopyMVbIx0I5ptABRRRQAUUUUAFFFFABRRRQAUUUUATPcytbR2xYmJGLKvuepqGiigAooooAKKKKACiiigAooooAKKKOOxzQAUUUUAFFFFABRRTlR2UsFO1SAzY4GaAG0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFKpxn3GKSgAooooAKKCcUm72oAWigHNFACbvalBzRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAoGaSiigApNvvS0UAAGKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACpYoJZIJZkQmOLbvPpk4FRU4MQpUE4PUZ4NADaKKKACiinwuY5FcAEqwYAjgketADKKlupjcXMs7KiGRy5VFwoJOcAdhUVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFBGaACik2+9LQAUUUUAFFFFABRRRQAUUUDkgetABR2I9aUghipGCKTnsM0AFFFFABRRRQAUUUUAFFLgBQR1PWkoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKfGm/d8wGBnnvTKACiiigAooooAKKKKACiiigAooooAKKKKACiiigB6Rsys4U7VxuOOBmmVJHNKkUkSuRHJjevY46VHQAUUUUAFFFFABRRRQAUUUrDDEUAJRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUjwyrAs5jYRsSFYjgkdaAI6KKKACiinxxtJu24+UZOSBxQAyiiigAooooAKKKKACniWQQmIOdhO4r2zTKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAO5HpRRRQAUUVPbWsk8M8yFAsChm3MATk4AA70AQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUABGaTb70tFABRRRQAUUUUAFFFFABRTkbbn5VORjkZptABRRRQAUUUUAO2/uy+5euMZ5ptFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSbfeloIzQAAYopNvvSgYoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACigjNJt96AFooooAKKKKACiignFABRSbvaloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACijjsKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKVhtOMg/SkoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKUY2kk89h60lFABRRRQAUUUUAFFFFABRg9hmilDEKVB4PWgCwbYCwF158eTJsEX8eMZ3fTtVaiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACipJQg27C2Cozn1xzUdABRRRQAUUUoJCkA9aAEooooAKKKKACiiigAopdp2hiOD0pKACiiigAooooAKKVcBssMj0pKACiiigAooooAKKKKACiiigApSMKDkHNJRQAUUUUAFFFFABRRRQAUUUUAFFFFABUkksjxpGzsY0zsUnhc9cVHRQAUUUUAFFSNHthR96ksSNoPK49ajoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClCkqWA4HWkooAKKKKACiiigAo7EetFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVLHIqwSxmMMXxhu64oAiooooAKOe4xRRz3OaACiiigAooooAUHClcDnv3FJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRS0AJRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFJu9qWk3e1ACg5opN3tS0AFFFFABRRRQAUUUUAFFFFABSbfelooAAMUUUUAFFFFABRRQTigApVO1geuDnHamE5pdvvQBLcSmad5WVVLnJCjAFR0UUAFFFFABRRT4U8yVU3Bdxxk9BQAyipruEQXMkSyLKqOVEi/dbB6ioaACgjNFFACbfeloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACnKpKb+MA4NNooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBTjsMUlFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAEiCPyZCzEOMbAO/rUdFFABRRRQAUUUUAFFFFABRTnYu25sEnvjFNoAKKKKAHRo0jhEUszHAA6k0hBDFWGCKdDI8UiyRsVdTlWHUGkZizFmOSTk/WgBtFFFABUqyBcEINwBGTUVFABRRRQAUUUUAFFSQrGyyF2wQuUGPvH0qOgAooooAKKKKACiiigAooooAKKKKACiiigBQCTgCk7kelFFABRRRQAU9I3cMyqSEGWIHAHqaZUsM8kUU0SsQkwCuB3AOR+tAEVFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUVLbwSTvsiUu+M7QOfeoqACiiigAooooAKKKKACiiigAooooAe8boqsykBxlTjgimVJJLJIqK7swQYUE8KPao6ACiiigAooooAKKKKACiiigAooooAKKKKACinBSVZh0Uc0iqWzjsM0AJRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFKrFTlSQfUHmkooAKKKKACiiigAooooAKKKKACiiigBVUscAUlFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSsSzFmOSaSigAoooJxQAUUm72paACiiigAooooAKKKKACiiigAoo7k+tFABRRRQAUUUUAT+dB9g8oQ5lEu/zd3bGMY+vNQUUUAFFFBOKACk3e1G72paAAHNFFFABRRRQAUUUUAFFFFABRRRQAUUU5TtOcA/WgBtFFFABRRRQAUUUUAFFFFABRRRQA5QCGJOMD86bRRQAUUUvG0gjnsaAEooooAKKKKACiiigAooooAKKmS4kW2e3yDG7BiMc5Hv2qGm1YAooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFBOKKKAE3e1LRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQTik3e1AC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAU943TbvUruUMM9we9MpzO743uW2gKM9h6UACrnPIGBnnvTaKKACjuR6UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFKzFiSeSTk0lABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU+JN7Y3KvHVjgUAMooooAKKKKACiiigAooooAKKKKACiinsmI1fcDuzx3FADKKKKACiiigAooooAKKKKACiiigApzFDjYD0Gc+tNooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAXjBJNJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJu9qUHNFFABRRQTigAopN3tRu9qAFooooAKKKKACk2+9LRQAAYooooAKKKKACiiigAooooAKKKKACiiigBNvvSgYoooAKKKKACiiigAooooAKKKKACiiigApdp2hiOD0pKKACiiigAooooAKKKKACiiigAooooAUnNJRRQAUUm72pQc0AHYj1ooooAKKKKACiiigAooooAKKKKACik3e1KDmgAooooAKKKKACignFJu9qADb70oGKKKACiiigAooooAKKKKACinEYUHI57Z5ptABRQOoHrRQAUUUUAFKBlScgY9aSigAooooAKKKKACiiigBas31tFbrbtHdxXHnQiRggOYmJIKNnuMfrVWigAooooAKKKKACiiigAooooAKVgvGGzxz7UlFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRUsELS7tuPlG45YDj8aioAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiirmpabfaa0SX1rPbPLGsqLLGULIwyrAHqCOQauNOUk5JaICnRRRUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFLxtII57GkooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqSaMxMAe6hh9DUdKST1OaadlYBKKKKQBRRSbfegBaKAMUUAFFFFABRRRQAUUUm33oAWigDFFADk2Z+csB/sjJptFFABRRRQAUUUUAFFFFAE63BFo1v5aYLh92PmyBjGfSoKKKACiiigAooooAKKTb70oGKAClY5YmkooAKKKKACiiigAooooAKKKKACiiigAooooAKfFIY92FU7lx8wzj3plBOKACik3e1LQAUUUUAFFFFABRRRQAUUUE4oAKKTd7UoOaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKe7BlUBQCByfWmUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVJJJvVF2KuxcZA5PPU0AR0U4tlQMDjv3NNoAKKKKACiiigAooo7EetABRRRQAUUm72pQc0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFOjALruOBkZPoKWZY1mcQszRhiFJGCR60AMop8TKrEsm7g45xzTKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopeNoAHPc+tJQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUjtGYI1VSJATuJ7jtQBHRx2FFFABRRRQAUUUUAFFFTXcUcMgWOdZgVBLKMAEjkfhQA2CMzSrGpALHqelR0UUAFFFFABRRRQAUUUUAFFFFABRRRQAd61vEviHWPEl+l9rd9JeXEcEdujv/DHGu1FGOgAFZNFNSavYNOoUUUUgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAop7xuiqWVgGGVyMZFNYliSTQAlFFFABRRRQAUUUUAFHYn0oooAKKKKACiiigAqRZcQPFt+8wOajooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHAZUnIGO2eabRRQAUUuTjBOcUlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACbvalBzTSMUlAD6Td7UtFAADmiiigAooooAKKKKACiijuR6UAFFFFABRRRQAoJ24JyB0pKCM0m33oAN3tRu9qUnFJu9qAFopN3tRu9qAFoJxSbvaloATd7UtFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFBOKACik3e1KDmgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKfE+xt20NwRg9KZRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJu9qUHNFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFOVgI2UqCSRhu4oAbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRT4nMbq64ypBGfagBlFPk++xJBJOSQaZQAUUUUAFFFFABRRTgxCkA9fagBtFFFABRRRQAUUUUASLEWjZwyfKQMFgCc+g71HRRQAUUUUAFFFFABRRRQAUUUUAKpAYFhkA9KTuT60UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRTwU2Yw271zx+VADKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACnKrNnarNgZOBnFNpaAEooooAKKKKACiiigAooooAKKKKACiiigBVO1s4B+tDHLE+tJRQAUUUUAOZnbG9i2BgZ7Cm0UUAFFFFABRRRQAUUUUAFFFFABRRTyhEavkYYkD14oAZRRRQAUUUUAFFFFABRRRQAUUUUAPdNqqdynPYHJFMoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBNvvR92looATd7UoOafCjSyrGoJZjhQB1NIylWKsMEEg/WjoA2iiigAoooJxQAUUm72paAAnFJu9qWigAooooAKKKKAClIIJBGCKbu9qUHNABRRRQAUUUUAFSRwySRu6IzKmNxA4GeBmo6kjlkjR0R2CyDDgHhh70AR0UUUAFSQSmLfhI33Lt+dA2Ppnofeo6KACiiigAooooAKKKKACiiigAopN3tSg5oAKKKXsRgc0AJRRRQAUUVLBC0xYLj5Rk5YDj8aAIqKKKACk2+9LRQAAYooooAKKKKACiiigAooooAKKKKACiiigAooooAKcrYUjapz3I5FNooAKKKKACinKuVJ3KMdicE02gAooooAKCcUUUAJu9qPvUtFACbfeloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAE2+9KBiiigAooooAKKKKAHIcNmun8cP4TfSvD/8AwjSXy3Y08DV/tJBU3O4/c/2duK5aitoV5Qg4LZia1uFFFFYjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACij5f4qKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKViWJJNACUUUUAFFFFABRRRQAUUUUAFFFFABRSsQcYGOMUlABRRRQAUUpBHUUlABRRRQAUUUUAFFFFABRRRQAUUUUAFKCR0NLGEL/Pnbg5xTaACiiigAooooAOxPpR3I9KKKACiiigAp8cbSNtQZNMooAKKKKACiiigAooooAKKKKACiiigBfl/h9KSiigAooooAKKKKACiilAzQAlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSqcZ4ByMc0AJRRRQAUUUUAFFFFACbfeloooAKKKKAFpu33qeOZVhkjMKMXIw5zuXHpzUG33oANvvSgYopNvvQAtFAGKKAJIZXhkDoxVgcgjqKazFmLMSSTkk9SabRRd2sAUUUUABGaTb70tFACbfejb70tBGaACik2+9G33oAWiiigAooooAKKKKACgjNFFACbfelAxRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFKRigBKKKKACiiigAooooAKKKKACiiigAooooATb70oGKKKACiiigAooooAKcilmCqCSTgAdSabT4pHikWSM4ZWDA+45FACOrIxVgVYHBBGCKbUlxLJPPJPM5eSRizsepJ61HQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRS4+UH1oASiiigAooooAKKKKACnxOYpVkUAlTnBHFMooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiinKQM5BPHHOOaAG0UUUAFFFFABRRRQAUUqYLAMdo9afOIhKwhLFM8FupoAjooooAKKt2djJc2V5drJGqWqqXDNgtuOAAO9VKACiiigAooooAKOxPpRRQAUUUUAFHPYZopRkHINACUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAKylSVYEEetJRRQAUUUUAFFFFABRRRQAUUUpJJJJyTQAlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUfiPwoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBNvvSgYopN3tQAtJt96UHNJt96ADb70tAGKKACiiigAooooAKKTb70bfegBaCcUUUAJu9qWiigAJxSbvapBG3l78cZweR/LrTKAAHNFFFABRRRQAUUUUAFFFFABRRRQAUUUEZoAKKTb70oGKACiiigAooooAKTd7UtFACbvaloooAKKCM0m33oAWiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAH7m8soOhOTTKKKA1CiiigAooooAKKKKACinIpdgqjJJAA9TTp4pIJXhmUpIjFWU9QR1FAEdFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVo+IP7K/tJhozXTWQRNhuMb920b+nbdux7VnUU09LAFK2MnaCB6E5pKKQBRRRQAUUUUAFFKAT0FJQAUUUUAFFFFABRRRQAUdiPWiigAooooAKKKKACiiigAooooAKKKKACiiigC9p01lFBeLdWzTSyQhbdg2BG+4HcfXgEfjVKkopuTaSElYKKKKQwooooAKKKKACiiigByKXYKoySQAPU1JeW01pcyW9wmyWNirqeoIqIEqwZTginSO8js7szMxySTkk0aWAZRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR3J9aKACiiigAooooAKKKKACiiigA/EfjRRRQAUUU5wgc7N23tmgBtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAATik3e1LSbfegA3e1KDmk2+9LQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUvG0nPPYU3b70bfegBeO4zRRRQAUUUUAFFFFABRVzRoLWfUIo724+zW+fnl27to9cd6rSqqyMqtuUMQDjqM9adtLgMooopAFFFFABRRRQAUUUUAFFFFABRRRQAUm33paKAADFFFFABRRRQAUUUUAFFFFABRWsvh7U38Ly+JUhDabFdLavLuGRIylgMdeQDWTQAUUUUAFFFFABRSsMY9xmkoAKOR0JFFFABRRRQAUUUUAFFFA6getABRRRQAUUUUAFFFFAC0ruzuzuxZmOSSckmm0UAFFFFABRRRQAU5FLuqKMsxwBTaKAHMpVircEHFNoooAKKKKACiiigAooooAKKKKAJVELWjdfODDHPGOc1FRSgDaSTjFACUUUUAFFFFABRRRQAUUUUAFFFFABRTo1DNhm2jGc4ptABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFKgBPzEgewyaSigAooooAKKKKACnxRtI21ASfQUylVirBlJBB6jrQNWT1EooooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFPVgI2UoCTjBPagBlFFFABRRRQAUUUUAFFFFABRRRQAUUUUASCPMRk8xBg42k/MfoKjoooAKKKKACiiigAooooAKKKKACiiigAop8jhlUCNE2jGVHJ+tMoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopVUs21QSfakoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo7k+tFFABRRRQAUUUUAFFFFABRQOABRQAUUUUAFKRjHIPHakpxKbQF3Z7k0ANooooAKKKKACiiigAop8jl9ucfKMDHpTKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACk2+9LQTigAAxRSbvalBzQAUUynJ3oAWk3e1OZicZPQYpu33oAUHNFJt96WgAooooAKKKKACiiigAooooAKKCcUm72oAWik3e1G72oAWigHNJu9qAFooBzQTigAopN3tS0AFFFFABRRRQAUUUUAFFFLtIUMRwelACUUUUAFFFFABRRRQAUUUUAJu9qUHNFBOKACik3e1LQBIJZBEYvMfyydxXccZ9cetR0oICbcc5yDSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUpGMcg8Z4oASiiigAopxbMaptHBJz3NNoAKKfEnmSBNwXPc9KZQAUUUrHcxOAM9h0oASiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo57DNFS+T/on2jzE+/s2Z+bpnOPSgCKiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiigcEH0oAKKKKACilA+Un0pKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKUgdmz+FJQAUUUUAFFFFABUkMgj3ZhjkyMfODx9MGo6KACiiigB8MrxMWRiDjGR6HrTKKKACiiigAooooAKKKKACiiigAooooAKPwH4UUUAFFFFABRS8YJJpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAp6iMxsWZg+RtAAx755plH8JPpQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSqpZgqjJNJRQA50ZDh1Kn3ptFFABRRRQAUUUUABOKTd7UbfeloATd7UbvalooAAc0E4oooATd7UbvaloIzQAUUm33pQMUAFFFFABRRRQAUUUUAFJu9qWigABzRRRQAEZpNvvS0UAFFFFABRRRQAUUUUAFFFFABRRRQAEZpNvvS0UAAGKXJxgkkDoKSigAooooAKKKKACiiigAooooAKKKKACiiigAop8IjLESMyjHBHrTKACiiigAo47CiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiinBv3ZXHfOc0ANooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopV29yfwFJQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFOfYTlSefWm0AFFFHcj0oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopVOGzSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUoJCkA9aAEooooAKKXgDAFJQAUUUUAFFFFABRRRQAUUUUAFFFPEZMfmDG3OM5H8utADKKKKACiiigAooooAKKKKACiprSWGKQtNG0g2kKA2MNjg/h6VDQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUfiPxooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopNvvS0AFFFFABRRRQAUUUUABGaTb70tFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAm72pQc0UUAFFFFABRRRQAUUUUABGaTb70tFAABiiiigAooooAKKKKACiiigAooooAKKKKACp7G2N3dLAsscRYH5pGwowCeT+FQUUAFFFFABRRR2I9aACgjNFFACbfeloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKUqQoYggHpnvQAlFKuA2WGR6UlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUhMXkfx+Zu/So6ltkjklCyy+Und9ucfhQBFRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRUk8MkEhjlRkcdVYYI/Co6ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKVhjHuM0lABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACbfelAxRRQAUUUUAFFFBGaACik2+9LQAUUUUAFFFFABRRRQAUUUUAFFFFABSbfelooAAMUE4oooATd7UtFFABRRRQAm72pQc0UUAFJt96WigBNvvS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUhikEIlKNsJ2hscZ9M1HUnnSm2FsZGMIbeEzxuxjP8qAI6KKKACiiigAooooAXjByTnsMUlFFABRRRQAUEZoqVTF9nYFG8zeCrA9ueKAIdvvS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABU97a3FlcvbXUJhmTG5CMEZGf61BUlxNLcSmWeR5JG6s5yT+NAEdFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU5DtYHAOCDg9DSMdzFsAZOcDpQAlFFFADnYHGFxxzz1NNoooAKKKKACiiigAooooAKKKKACl3EqFJ4HSkooAKKKKACiiigAooooAKKKKACiiigA57HFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU5GKMGU4IOQabRQBPfXdxe3cl1dStLPKdzu3UmoKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKVmJxk9BigBKKKKACiiigAooooAKKKKACiiigApSpH3lI9M8UlOd3fAZiQowoPYUANooooAKKKfEUG7fnpxg96AGUUUUAFFFFABRRSg4oASiiigAooooAKKKKAFZSuMjGRkUlFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSodrBvQ5oASipbmZ7id5pNu5zk7RgflUVABRRRQAUUUUAFFFFACbvajd7UtFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFKCR0NJRQAUUUUAFFFFAEiCLyZC5bzBjYB096joooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoop3y+XkyZb+7igBtFFKDhSPWgBKKKKAHvFIiK7IQr52nscdcUypHmkeKOJnJSPOwdhnk1HQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUqjLAZA571LeQpBcyRJMsyq2A6jAYetAENFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACgDaSTzkAD1pKKKACiiigAooooAKKKKACiiigAopQcUlABRRRQAUUUUAFFFFABRSgZoIxQAlFFFABRRSgZUnPI6D1oASiiigAopaAM0AJRRRQAUUpOaSgAopaKAEopaKAEooooAKKKKACilpKACilpKACiilAzQAlLg+hpKesjqjIrsFb7ygnB+o70AMooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooACM0m33pe5HpRQAEZpNvvS0UAAGKKKKACiiigAooIzSbfegBaKKKACiiigAoopNvvQAtFAGKKAAnFJu9qWigAooooAKKKKACiiigAooIzSbfegBaKKKACiiigAooooAKKKKACinxGMbvMBPHGDjmmUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSkYoASiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACnRo77tgztG4/Sm0UAFFFFABRRRQAUUUUAA4YH0pzsXdnOMk54FNooAKKKKACiiigAop/mfuRHtHBzuHWmUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFL2IwOaSigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKd95ielADaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoopQM0AJRTtvvRt96AG0U7b70bfegBtFPVM55pfK/wBr9KAI6KkELlQaVYHNAEVFWPIejyHoAr0VZFuecDFSCH5QEB4HOR3oApUVf+zEdM/jR9mf/IoAoUVoLaMenFL9jPbj8KBN2M6nbfer/wBi9qkWxx2/SgXMZm33o2kdeK1PsftWwbfQx4WSNLO6bW2uy7zmQeULfbgKF/vZ5J6UBzrqcnto21sfYvr+FKbHHagOYxtvvSrGzdK2BZIe/wClP+xr34/CjToHMY3le/6Unkv6VtfZE9f0pVtYx15oDmMXym7c0eU3bmtv7Mn+RS/Z09aBOdjD8pu/FPjiG1g6sT2I7Vs/Z09aVYEFVzAp3MPy39KPLf0rd8lPSjyUo5gc7GJ5D0eQ9bfkxjoMUeUlHML2hieS9HkvW2IIx0XFHkr6VPtPIPaGKtu5pPIetxYlH8I/AUGJT2o9p5B7QxFt3NO+zHs2fwrY8laUwIKPaB7Qxfsz+v6UfZn9a2mjQsTil2AdOKnmD2hjNbk9Bim/Zj35rb2A9eaAkffA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KKKRjigBaKKa/agB1Iwz3plFADtnvRs96bRQBHRSbfeloACcUm72paKACiiigAooooAKKKKACiiigAooooAKKKKAClwcZIIB6H1pKXcdoUngdKAEp29vLKZ4JyabRQAUUm33o2+9AGvo+vXWl6Xqdhbw27x6jCIZmljDFVBDZX+6cjrWTRRTbbVgCiiikAUUUUAFFFFABRSbfelAxQAUUox3OKSgAoopWxuJUYHpQAlFFFABRRRQAUUUE4oAKKTd7UtAB3J9aKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACtjwboFx4n8SWehWlza21xdyeXHJcyeXEpwTlmPQcVj0cjocVUGk7tXAkuImhnkhcjdGxU4ORkHHB71HRRUgFFFFABRRRQAUoYhWUHhutJRQAUUUUAFFFFABT5IpIwhdCoddy57j1/SmU5mLY3ktgYGT0HpQA2iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAp8aqyuWcKVGVGPvH0plFABRRRQAUUoGacqZ70AMoqVYGNPEDlgPWgCCkq5HZyNnPy/hUsdh1/wAKNOpPMZ4GacsZbp2rTjsOv+FTLaoO/wClJyXQTnYx/Jf0qTyHraS1QtnPT2pwiQdqXML2hjraZ7VL9jPfn8K0wcUu4DrxRzE8zKQsMqD6+1SR2Y54qwz47UnmkdBipcm9xcsyNbVB3/SpVjVWziojO5pjy9Pl/WkUoNlny09KU+X2XNU/O/2f1phkx2/Wgfsy9vA68U3zf9n9apecT1B/GhmJ6mgapxRcMh7cUjzYx2qnRSsUopFrzf8AZ/WjzgegzVWiiwyy0me360xZM54/WoaQnFFgJVOc0McVFu9qN3tQlYCVjik3+1RE5pKYE2/2o3+1RA4pd3tQA5jmhjntTAcUE5oAUHNLTKKAHA5paZRQA+imUU0rgPoplFPlAdu9qN3tTaKfKA7d7UfeptFNKwD8EYyMZGaQnFNopgFFFFABRTtvvRt96CeYbRTtvvRt96aVw5htKDinUU+UOYQDFLRT/u++aORhzEZFLUjDPehRjNX7KRLdyOin7PelYZ70eykRzLqR0U/Z706q9gw54karnNDLipKKaw8nsT7WI3Z701RnPNTbPejyz25q/YSD2sSPZ70bPepPLb0pfLbt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', + value: embed('048ed81e-84ae-4a48-9c30-641cf72b0376.jpg'), }, 'asset-aa91a324-8012-477e-a7e4-7c3cd7a6332f': { id: 'asset-aa91a324-8012-477e-a7e4-7c3cd7a6332f', '@created': '2019-03-29T15:13:45.105Z', type: 'dataurl', - value: - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1NSIgaGVpZ2h0PSI1MiIgdmlld0JveD0iMCAwIDU1IDUyIj4KICA8cGF0aCBmaWxsPSIjNDVCREIwIiBkPSJNMTM0LjEwODc1OSwxOTYuMTg0NDQgQzEzNS42NDE4MiwxOTYuNzEyOTg4IDEzNy4yODczOTMsMTk3IDEzOSwxOTcgQzE0MS40ODY3NywxOTcgMTQzLjgzMjIwMiwxOTYuMzk0ODYgMTQ1Ljg5NzA3MiwxOTUuMzIzODA0IEMxNDMuMTQ5MDQsMTkyLjgyNjA5OSAxNDEuMTc2ODUyLDE4OS40ODk4NzMgMTQwLjM4NDcxMSwxODUuNzE5MzMgQzEzNi45OTA2ODIsMTg4LjEwNDc0OSAxMzQuNjMwMzI1LDE5MS44NjE0OTIgMTM0LjEwODc1OSwxOTYuMTg0NDQgWiBNMTMxLjI3MzA1NSwxOTQuODU5MzEgQzEzMi4yMDk5NDksMTg5LjUzNDg2NCAxMzUuNDg3MDg5LDE4NS4wMTY5MjUgMTQwLjAwNDQ3NywxODIuNDA1NDkgQzE0MC4wMDE0OTgsMTgyLjI3MDY4NyAxNDAsMTgyLjEzNTUxOCAxNDAsMTgyIEMxNDAsMTc2LjcxODg0MiAxNDIuMjc0MzcyLDE3MS45Njg4OTMgMTQ1Ljg5NzA3MiwxNjguNjc2MTk2IEMxNDMuODMyMjAyLDE2Ny42MDUxNCAxNDEuNDg2NzcsMTY3IDEzOSwxNjcgQzEzMC43MTU3MjksMTY3IDEyNCwxNzMuNzE1NzI5IDEyNCwxODIgQzEyNCwxODcuNDU3OTEzIDEyNi45MTQ5OTQsMTkyLjIzNDk5MiAxMzEuMjczMDU1LDE5NC44NTkzMSBaIE0xNTMuODkxMjQxLDE4My44MTU1NiBDMTUyLjM1ODE4LDE4My4yODcwMTIgMTUwLjcxMjYwNywxODMgMTQ5LDE4MyBDMTQ2LjkyNzM5NywxODMgMTQ0Ljk1Mjk3MywxODMuNDIwMzU2IDE0My4xNTczMzIsMTg0LjE4MDQ2MyBDMTQzLjcwODYzMywxODcuOTY2MTU0IDE0NS42NzM4OTgsMTkxLjI5MzI5OCAxNDguNSwxOTMuNjA4NzY2IEMxNTEuNDE2NTU5LDE5MS4yMTkxODUgMTUzLjQxNjI5MiwxODcuNzUyMTMgMTUzLjg5MTI0MSwxODMuODE1NTYgWiBNMTUzLjk0MzM1MiwxODAuNjg3Mjg4IEMxNTMuNTg0MSwxNzYuNTQzNTk1IDE1MS41NDAxMzEsMTcyLjg4MjA1OSAxNDguNSwxNzAuMzkxMjM0IEMxNDUuMzgwNDU5LDE3Mi45NDcxMjIgMTQzLjMwOTgsMTc2LjczNTY3OSAxNDMuMDMxOTU2LDE4MS4wMTI5NzMgQzE0NC44OTk1OTIsMTgwLjM1Njg0MSAxNDYuOTA4MTI0LDE4MCAxNDksMTgwIEMxNTAuNzE0MzE3LDE4MCAxNTIuMzcyNjU5LDE4MC4yMzk2NTQgMTUzLjk0MzM1MiwxODAuNjg3Mjg4IFogTTEzMS4wMDA0NTQsMTk4LjEyOTE4NiBDMTI1LjA3MzMzNCwxOTUuMTgzODY4IDEyMSwxODkuMDY3NjIzIDEyMSwxODIgQzEyMSwxNzIuMDU4ODc1IDEyOS4wNTg4NzUsMTY0IDEzOSwxNjQgQzE0Mi40ODcxMzQsMTY0IDE0NS43NDI2NjUsMTY0Ljk5MTYwOSAxNDguNSwxNjYuNzA4MjM0IEMxNTEuMjU3MzM1LDE2NC45OTE2MDkgMTU0LjUxMjg2NiwxNjQgMTU4LDE2NCBDMTY3Ljk0MTEyNSwxNjQgMTc2LDE3Mi4wNTg4NzUgMTc2LDE4MiBDMTc2LDE4OC42NjQzODkgMTcyLjM3ODIwNCwxOTQuNDgyODYzIDE2Ni45OTU1MjMsMTk3LjU5NDUxIEMxNjYuOTk4NTAyLDE5Ny43MjkzMTMgMTY3LDE5Ny44NjQ0ODIgMTY3LDE5OCBDMTY3LDIwNy45NDExMjUgMTU4Ljk0MTEyNSwyMTYgMTQ5LDIxNiBDMTM5LjEwMTk3MiwyMTYgMTMxLjA2OTkxLDIwOC4wMTA4NDkgMTMxLjAwMDQ1NCwxOTguMTI5MTg2IFogTTEzNC4wNTY2NDgsMTk5LjMxMjcxMiBDMTM0LjcyMTU4NiwyMDYuOTgyMjQyIDE0MS4xNTgwMzIsMjEzIDE0OSwyMTMgQzE1Ni45NTI2MzksMjEzIDE2My40NTk4MDQsMjA2LjgxMTE5MiAxNjMuOTY4MDQ0LDE5OC45ODcwMjcgQzE2Mi4xMDA0MDgsMTk5LjY0MzE1OSAxNjAuMDkxODc2LDIwMCAxNTgsMjAwIEMxNTQuNTEyODY2LDIwMCAxNTEuMjU3MzM1LDE5OS4wMDgzOTEgMTQ4LjUsMTk3LjI5MTc2NiBDMTQ1Ljc0MjY2NSwxOTkuMDA4MzkxIDE0Mi40ODcxMzQsMjAwIDEzOSwyMDAgQzEzNy4yODU2ODMsMjAwIDEzNS42MjczNDEsMTk5Ljc2MDM0NiAxMzQuMDU2NjQ4LDE5OS4zMTI3MTIgWiBNMTU2Ljk5OTU0NiwxODEuODcwODE0IEMxNjEuODU3MzQsMTg0LjI4NDc2IDE2NS40Njk5MDEsMTg4LjgyODY5MyAxNjYuNjE1Mjg5LDE5NC4yODA2NyBDMTcwLjQ3NjU4NiwxOTEuNTY2ODQyIDE3MywxODcuMDc4MTA5IDE3MywxODIgQzE3MywxNzMuNzE1NzI5IDE2Ni4yODQyNzEsMTY3IDE1OCwxNjcgQzE1NS41MTMyMywxNjcgMTUzLjE2Nzc5OCwxNjcuNjA1MTQgMTUxLjEwMjkyOCwxNjguNjc2MTk2IEMxNTQuNjk2MDY0LDE3MS45NDIwMjIgMTU2Ljk2Mjc5LDE3Ni42NDE0MTQgMTU2Ljk5OTU0NiwxODEuODcwODE0IFogTTE1Ni43MjY5NDUsMTg1LjE0MDY5IEMxNTYuMDIxNzU3LDE4OS4xNDgzMzUgMTUzLjk5MDcyOCwxOTIuNjk5MDYzIDE1MS4xMDI5MjgsMTk1LjMyMzgwNCBDMTUzLjE2Nzc5OCwxOTYuMzk0ODYgMTU1LjUxMzIzLDE5NyAxNTgsMTk3IEMxNjAuMDcyNjAzLDE5NyAxNjIuMDQ3MDI3LDE5Ni41Nzk2NDQgMTYzLjg0MjY2OCwxOTUuODE5NTM3IEMxNjMuMTgyMzYyLDE5MS4yODUzMjMgMTYwLjQ5MzY2MiwxODcuNDA4OTE1IDE1Ni43MjY5NDUsMTg1LjE0MDY5IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjEgLTE2NCkiLz4KPC9zdmc+Cg==', + value: embed('aa91a324-8012-477e-a7e4-7c3cd7a6332f.svg'), }, 'asset-0c6f377f-771e-432e-8e2e-15c3e9142ad6': { id: 'asset-0c6f377f-771e-432e-8e2e-15c3e9142ad6', '@created': '2019-03-29T15:23:05.562Z', type: 'dataurl', - value: - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAAAXNSR0IArs4c6QAAQABJREFUeAHsvQ2QbdlV33dud7/3ZkaagbFkiAsqUQIOShHkVIoojgmmjIpgpZKCil0YBaoMCY4YfSDAigUB46evCBGMhLFMJlAxtiEEHFLBcSFhGWyTYBzHxkHYGGIwxEAUJI00MxrNzHuvu29+v/9a69z7noRLFho07/Xd3efsvdf3Wnvvtc/H7dub5VAOEbiDIrB98Oo9y2OPPms5O3/Wcu3s2cvJ9lnL+fbZy2Z51rJdqDfWz8Lle5aj5fL2fHtls2wug7+ybLeXwV2hfRn85eVoI8zfa5vN0fXl/Pw6sGvQXIeGGtjm7NqyHF1HzuPQPbQcbR862h69Z9luHlo251UfHVMfPbT8zvse2rz46uN3ULgPrlzwCGwuuP8H92+zCGy/7Wt+x/LE9eeQoP9VEvRz2ByoN89ZFvpHm3+F/jPM+JbtEdOb5obTdsM2ISwYYPS3TbcHDXafDkLQCil6cWvZijsPTljIgpQKODtUyW4Z5+eIOfoADP8PxvwyRv0KJL+Mzb/CRvfLy92Xf2XztW96b0QcTocI3AYRuGk93Ab2Hky8ABHYbq8eLW9496eSfJ+3nB09j6v6fxO3P4WE+xy2gvuyIZCBrUnGbg/Lhqb53P5mbwPZnNfmEVLz+S2lJNwCnK6bB8XzbrMJaO+k4t4o0JUNh80Di2JTuJETGW4gaRX7Tmaoy4/N0aNgfwU5vwTpP2QjesdyvHnH8vW/8xc3m6vuSodyiMDTJgK1Qp425hwMuWgR2H7rH3/28sS155Ftn4fvn0GmZsPYfPpyenb3uXcQ/prl2R025On9hG/azeZB7abhHUdqmSz7s/tmRpAFCP/RETczJv3Spd5hzZ2KHZHq4BBmSfvouG42JMgdBhXozdydeBfSG9pIHRnrBiJtOUndm5GbDsfWOxx1Hy9PQPKPMOwdEP0s8XjHcveVd2xe+affE2MOp0MEPgYRqJXwMVB8UHnxIrD9wR88Xv7J3/o9JMR/n8z4WaTi30eK/OT9hFoJm2nZyZhkmQv8zsHcjFQ+TfRI9OZWE/Qk9dyJuPHIYKJv3Jqsf9OwI8NcLS+lkvdOxsqWpA4tgJJZiT4b3PYsMB5TNU7r2BC4M1nlxRHl1sYihbjgEVobIIZoe2mhrpb1ls3O2Fg2trfLr50fLX/7aHP0kzxO+9+X3/05P7P5oi86C8HhdIjAUxyBWi1PsZKD+IsZge2fefl9yyPL7yWxfRaZ/7NIdr+XnPgMXjh3giQuJs8k1UrIXoyTFsnH3BXA4LsLy/6dRdrAc/cAVUiQUWk95EWfjURmD057eqQyaaeWt9sF2NHu8wXXp9mQIsNdAO157UGrNhCTvDBkRTd97dH3FOGSoJtDnk02L/tuIEZBgtos3KB4lNVxKFTYaUY+VcnZfAD430H1Ty7HbCrPWP7O5qu+w8dih3KIwEc9As7BQzlE4KMSATaMK8v7z38/SfOFy3L2uWTMz9guPBAiZ5o2k/BIppl0wmisbSgmoQ+1eJPjbBgaaZL0LiRJ0+RL0pVsNqVVpsS3liTy3d2AYhC4p7dtHD7pLeqhih7OteFVL0A3hVEMbVGS+JP7oTMA0njHgMztmS/TRzZEPgbb00AnIkpD2zc2NF82vIhWn+rHrpIUcRHjfdXZz2LLj7MDvXW5/+gn2FD45NihHCLwW49Az+LfuqCDhIsZge23vPxTlhvnf5Ak+0KS5B8g1d5TKb0TWRKbbX5o5+7CUOVqG7gJ3L550HYnyIBs96ecpDEfi8+L8eaXLgX+fqA13STrxvYmtGof8C11J2NlId+9ICasm4bkDU8Te9kY9CH2r6up9QCPd/oV69kodInDPSU8bizcWagoMMDlpwpqo+k7CwHhTSMdDeTORb15rIVtMVjhlMCloW1VuMdp/w0G4K3E9q2bq9/5T0N7OB0i8BFEwKl1KIcIfNgR4GO0dy8fuPY5JKEXkpheyBOa3+2G4VW5T2uOqM1Yk/QqhXY/z+zFmwgh9tcEOkkvV+kzJUuOmc/HWSmDql54o1N9yuSnkmQsKB1DC0HuaLpvlcSP7tlWlKGUJOU0heAbekMrjBKbqYXVHRD6Y8j5cnSmvRpqTHgxn3iM/REUWyNTqlIqeR3RV9tN7HIDjU3ogGaN1/4GvBdX5Um33uWg35jUy3iVqBDJ2oVoMP8Ef99K463LfVf+Fh8jfgKCQzlE4MOKgDPqUA4R+OdGYPvnr961vPOh/3A5P/sics5/RJJ6RrIqych0VJOoNhETVCVQ4CZYsSSweuyzU5NkDnNfFQcRaV5Rt1wlJ+XtzdJATMzKzOaDxlW+nHKRG8mRRxh766YxFow9Y6sJtV5Kl0/SmfyTkEnWN9kJPFsCyiLfzSMMZuS2Ob7TpU7CLoo6C7LI5kYgTe60lEofpaIUG2l2pBnZ4+XAQ6UMfzmFuythyhEcW6w5LDMItn2stl0+gAd/9ejs7AeXK5/8I5urV58UdSiHCPxmEXAKHsohAh8UgbzPeGT7+aTqP8JLjP+YZHqvyaxyj2ezkhWnSUxkn8lOtXVIUwk1GOhyNayU+gRREmySeBKk7CbP4istu3P0eWp92WjUT0miDmnbWGBIS6f4dbMIx95pEnPrXrcQ5fWVfnSqt/1VfN67aC2bXl3hl62JgQRucJYNj67c9GzmLgt68EnqI1+6cz885c5XxnsHc+6Lc3FtW5ptw9BFLid9XDcdeOXc3yOUkzuiMCgJXW5c+tWHNp1zF4Ws9+Pf/3p0dPQDy++660cP702M16HcGoGaqbdCD/0LGYHtgw9eWt71js8jm/wREs8XkOw+bv3YaCdZA5MklCtnkpb9iZYdEmSS+SRG+JIzh0/a4JLe9phhhV8RJtl5Oa7w9aO1JLnabBRCkT7KPXWyDGJ3yoZlctyzNPL1Bztmg4lPqyda0QW6Srr18t7HaaTp0hu50knfOgLzToLEnP1AePGYpDduJpL7ziJqOPmILm3g8lH0UyluZnAlpmscJDCox96twejmpD+AapuSAJH0s1GBS1FnxyJ3VAR86zt2wZJQH7GJ6W82x9TK3z6Cvh/mtu4Hjj/t6O2bF/93N0rg4XzRI9Az66KH4WL7v339A8/j6f1XHJ2ffyk54/4kbxMNv0nAM0umTyJKAiJsScAmYpOUcBNaCsQUN6Bcdds2IUGbT1HRz4bRyW1o5EG4xDR2MgIX5eaiin0+2vPH4MG7QbWM3QaiuDiw8paOkVy1NuYhWmXvVY5YcXU3wc6gaarBiVJF9rVYqT/ddKDtO4uxG17vWOTL3Yv220lc4Q+OjVc5FH3SD+OVPu1snPJpiJsJtBkLcb6HwX5x+XhwYpZe3tGscvQUmbl70sRsRmfZrM55pKXorYqQl80Q/7fbzfvOTs+/d7M5/+4r3/4X+aPGQ7nIEegpeZFDcDF9377l6jOXh979xeSMryAt/LuVXpJNTDvJgUmYncTIHEkok8j2/6DPJDTFK9dsLiYbgT6q2ttwzFjn4MzPliRO6ty12JfLK/JuR7RJUXnAU4dmTym0UERfJeabccq6aSOprCk4JfbSqg0CXn2lxFfaI43k2e3CJ2HTtOfjptpcsJOr+NIHqO0qHSZlqPUvm4w+dZKPkEJnM4x+ThNPmxgSC9Rli74tNzytqDZNC3GPP+qDfuudj2D66wYSnEIdI+882lrGK3Za+VjN/dJNCvz52VkecSnreLv5P7bb0+++tL3vf9z8uT/3mLBDuVgRcOYdygWKwPYNr/h3lus3/hg550WkkmdOUk7CIw5J0MlxuyvaJEqzVZe52q/MaSqrRLajAKCMoe8NoLuVCMGvV83SJrGic482d0IkriTOff3QVkIeBV2jMI9tUJ4r+xg4WsEhI0l1B1pbJY+Erh2dkK3juxDA2jP9XPWPh+HR5UrqeTwV3k7I2h7dbCxuqLkhUY+COXK7UHck9YkzcZEWVEsxf5fGoDlhz9y5iRPs1quNiaN6ta391seJD2SgxNfdZODSSk7texA7GRfGwD3LTWTLBpKaQck+dn4qzWOgvp+95rue8V3f938q+1AuRgSYQYdyp0dg+5aXPHN57+aP4ucf4wr998zVr37X4yobJt1KkJPEU5MZQp9kZBYxH0HnzDHHeDIpWrxypRS/dbqht5VkFzkmOPrSKmPa6EqCNVEhMuzgQ2udq2ofk8lDMtQO7Y4M2mVQkp42FFnRhB6A9AP3TqioAuoTeO908GVk5K5KrHcNsidzat9c5SsFemXTNOGXKW2fBnqVL9CaastjrZiorsB8e+EYKLPiGP/kUmb7Q1dmTlGUmJadERrclncj3iEqJapXc8oe71iUEO/RVT0A2TQk7kjmMRZ4ZYlz+NVNfe4dizB/oTt3zOhvNtufYaC+657LH/cXDnclxPQOL8yWQ7lTI7B93dd80rJ98uWkkReTBD9eP31xXInFxV4JhQaYSgaVtEwthUtyNnFKQfKYpBaAYHlh9WQVUPrCgAKIjOrWhkWiWe9iOinLt3UDUp4dyvB5B1LpN1atib2oOI++5lvhNmLfnq+DbHi6ezT2z7Fj9MUr8HkPIQ7MEeeJRfhJnqb/sVdYcrywYx4dedWuDOxMTVu85pJw85FjPSsgtb/g47e+idJGm9GVZsbypo1OGsdIOnVZe1ZfdLpZSINsNuNIzAYCoQbJ4GFF/4iNYe46svG5gThG2HCGTxoo3gsH4aLUZ03r4ZPjowev3HP0HZs3/cVfF3Iod14EMofuPLcutke+FGdx/3FW84tYz5eMRq4cqWfTmDqR8g6ChGHuEE4n+UScCcGUlBrc/rsPgMVjEkmSCmuS7yRUH4Hkk1wtN9LdVVI6oXXXvCN9tAlTpomMZvIa/ZJHnSQFPAIjTGP9DXHg6lQezKNyEn/8NPHFLnhuoQ1dBSQCoyZ+zvW7ohUsOqedEmV5mElz16QNRkQw3mhQaAAoE6vz4QJFAV99LvMhTfTXDx/o5Oq3upU1xXbsEWYsq6ilOiU/PNAZW4t618dhxta7D2F5ZOUGoVjoEeQLdtvZKIxh7k4Klj+oVF5siIgbm+Oj7z+6fPSnDy/djfSdVWZ+3VleXVBvtq99+X/Ain8la/zzkgDMGDPCnWSma4hc5LVh7C/4TjAdQxObmc8Ulho5lYyFVHJWR2RJRdtElISEjLoSbj2KQF42AWi9+lbmlLUZWxvXdz/SRZ+bHfLD2tkv7TimhBjjOQXKgEqR7cKvddPhQOGmHwltg9kzcltWkiO4JH8ZSq5X4bRukaNNwjjSlJa7EjOxhiuj/SUioYspYYJFkHzUWmEJXWywV7YFpoLImjGii01zt3HTeEeO/BRltY7EUpgbCMp9iZ6LBrvGwV9wjqEbSN2hcF8mnPchW24tz8DlQgBbYiZCHTbuxt5+fHT0rZe+4y/8NVUcyu0fAablodzOEdj+jasny99+6D9lVb+SBPEZ8cWk61Xh3ui6UfhIJMkoq5p2FvgknR25iWZKEj4dRa2PmJLEyRjCOHJNHgL66jApduKPvhCWnshbE6+IKtHZPMpU3PDWJia/QDLRnn3h3usnf0IoKFf92ipb+9pmCrhJzgoPdaFCQtDqE1atN4RcbWOHybkzpBpo+nacuzR0ZjNRZyLUQq0UOmWaA7NPbNZNfTZP6dHlZhibOEU3f2To1X89jDJqmBNZCIrsjqRtA9LdCdeqB4BRioScYJBIndS5ILDvxsE/JvGTWNqZx1bejTixCEU2q+ZRf+27+sOGqQ73Tcfj5ORnj46Pv/X4vk/+H/hr91PtPpTbMwJOrUO5DSOQ/9r3+odexMq9ysr/VK8OTR6VLlmvjKyDm2fU1Emg+pkMlCxROUYYZb3S3WsneSQhgScB5K7ChOKLXjJG5INPrUhpSHrrBtK8STZwZKORH5pKdJgTU8qeymBac3NZaSGY9s0U1UtCNKFpkGX0p1nAbFTCseNDlfIZS5P9IJPIvZLslw2p4fFVjypLQqB8Cd1IKiG72eWqXV282I5O40O37JCcfts58QUafDZO2knu0MS23pxzB4DKPBJTjHYg11wuB9Rlu7i4W+NmJxcCgYdYhhTHTf58BUyExXuEIos7kfyTLNpnbFq1ebKnzLsQ4i6dRrQpmXuxGZ97H88G4gcleKy1HJ2c/OLRpc3V5a5P+n42EoN3KLdZBG6eQbeZ8RfRXBbkZnnNS/4wV/ivpv1vGIM1AXlFbLaojLELD+vaBZuUYjIziYDNown68rt6K+nsNqGdgOSmpEhh8s7EsW0Z2ApHrglQHTcVCNzUNDEaaZgMq2gh/XSKfzQlERVTsPJko/hQdyRQ3EyvUnQkE4+lEnFgozhjIE/4biWxTxEnbWy0DW98aVwSrHcfCgafKCdzBlJ+xV909k7fouNLNlN99Fc97a/t/ey6xkvb+Q1SfU0fbdGDGQ0r+50fpVi2W0v5jhyMOpdfP1TsXYV3H7qVtpx02Ej8wME5A+Hmkw2IDcVPZMUw6bPBsqGyAeuFdyBHxye5iOAuhDkC5cnmHx+dHP2p5XUP/k/4IPOh3CYR+FDz6DYx/eKZuX3dS7+AFfkaVhgvyWud5YrfJJEMwyKnnURneEgqydTiZ6RlE07yEZSPsppU3HwogbY4E0hRKb7uIKSJWPMQYhSnoCQ59MymFOFBgNNWbWhaeXZpQjgpr20KnfQmx7XQl8kScPk4IgO0o4zQVDsJcVhM7IMvqpKpHuChlR05laDTiVpVhrdAiXU1xVTcIiNyiQEyQh8DiSE61n78rCQuT4ww/opqH4z5bAKKvGkDKWN28YvsYndDNa7hjh/lYliU3bw1FhBmB1YDKPBaUy/PqbFNO9wgnGuJiePCIczNst5/VOzOTr1DYY4AF6+/uucGUpck6mcD8c5jc5INNI/6sN/u5uSSmwv///3omzavecsPa8qhPP0j4JQ6lKd5BLavf9kLl9Pz13Ct95ku9Cx2F7OF3FOPPhhKr/ZMiBYXPT8mIuktSUrAUpSzB3GZ57EEidZEEOlmgC4jI49I5DWxSEfyy15ioqCdK15xmgOv2qzrm3FpKV8YJz9Jlcc0gEdnNkQZKNrnxqWl6WuPviDDDW/yX66MhYF3s4rMcNQp+ro/fqhi3lOEH6I87qOWPpteLFD/4DqeQrQF++dOwnjHp/zFtwhNddMyFk0v0PHJL7K0V1Q0BJxYpStiimOdjcLEbVv/h6v4o1t58GQM0rCPHmWlr0D4u1321VgLSgEdu9QzRf2UjY8HgeuSYrwrccMRdnZarzI2ZzVauTPJRqI6Z4gFe7DFTSSPsVTKe5yjS+B9ROg7HXHHR38P275p86f+7FvDdjg9bSOwzpunrYUX2LDt61/6b5Mo3swC/ewsahNBJ5Mkhko3SS6VBMVXYq00nXVeEeyRDl0nBxezG0IlS8joTyIXV48fgKm3S64oTWAmJv+YjLbYSuLQunmIE2iSadakEPtecXZCUtbuL+Gh75KP/UIbW+CPqNUGEhj28z/Ax3uEQkzxrDX5/iZr4Pu2h4jTbBixQz9HUgSgTT7a8k+8h7d04Y0bpmhO+ePHU/zuzaHEIac3NaiaPZ6E3rhEnXrEyksxfvE/7WBuwhe1vnE130GuGMqn0NYBfy4sehx1xRBa2wgp7d8sRlAVDr/Ginx02vGVTzv9zADFjeUGG0jiBe6ITcS2NuZxVk8CLwcY/eWYR1duIjR5oX5EnzaPtfhulIqDj7jcSDbL/wb8qzff8OafjqLD6WkXAYfwUJ5mEdi+/hWfuGxv/Ne87vgyViqrq0vlhuqYDSzJCNWcczDgs6Cpi62SaZJBTlCTyLd+Xfj0zQzKBW7FOfJrM2lYSJANit+kRuuU8NYGEiTAJOIQqKcSaW0iw6OeklU1xCaf2F2pXfZcRUeeuOYZI1a4OgqvxCRHcHEGeXPHIfdcfc+GGTJPGmGhjnbkuUEkzCZNUNmUjJ3JlASY+IkIkQQ0OWqTi6C2oXAKiYwIiyqIix0rIaoht51oVgCAt35JLMa7iy2xtZ0jS5uxT5IZP1pQ6RW1G5AxWje5wUhDW79jVH11SeYEeuU+0ve5G8FRv7zRl+nZNPKCXfFY0/Gw4lpDqcSSDcTdizsOVfuHlm4o20vtOfMRgMGLudh+fn589D3E8r/afMO3/4ZSDuXpE4GaLU8fey60JdsfvHp5+b/f89Xb89Nv5BnzvSahJKVJFNaTpEAlCUkyUXPRQ5OF2yPL8g7WhZ+kLDEg4ZWOWKurgBKUZN2yuIZcE2SZIZ88yPPKkWQSFXummZQtygld7hZ8Pl7KGxsb6qoZuwNEJlmlkrqbQW04eaFbyiO3YgADsPUxERh9GtuLUCM6Jmlig4m17QtN6x362Uz3aTIObqrQerXvXZ7FlCd7IiyOH+0pAAiSoHJqBBJ02cDbLm5tljOVzRJdNNI6SqL1FZy2NEewhQSmfpMuJTqxY38zNZb1hYpuKmUX2bzoOUurWeriN2M1puS9luNs6Y0jMaAtcXho5w8MjY2kPNHK3WrrcgOZ+SpBPoWVTYQxcR6deAcCBpsAYwAw4cYQGUfHm/fTft3yr/2ON2++6Op1TTmUj30EasZ97O248BZsX/vAF7LuvpVl9ilZkUTEpOD9xyS1deGL64WZ2lFMIoe4k24CatJjEbqeXbQuxMiC3mSUx1diXay8BAWaK8SkRcBJVtYs4t2mEKqyTTmmM/V38RFMPgpKPw8s0FkZBkG2JYYmzWGiTmIGlUc4wk1u+mJShHUYfOw0X4OSBKntipVmvwgz2enz2AAodxOzAUQurM0bMdMZWeE1WNK5GZj40al3MlgSezAmO7q58tco8SECSj1jpk/RJUxeCwNTm2m7MuDe8CIKu+eOwb6U+lcbhokWkGMenaVD57LR69etviliNpH4JqBKZGqDsoxX7OFEs/q2ka1M6nMfdU2fu5DcnWFQfSmjOOWW1cryvYdj4c1GCo+tjthDcgLmvJ0NJPOU+OgXW8kvLSfHr9y86s3/S3Meqo9hBHpEP4YWXHDV29e87DNYZW9myX2uoUiyZsXU316x0m4paxICbjvJuslczLVJABiYj6hc2Ix0Bls4jaRCE5mL3xxMXZPBczHnyt/kQZJBQtJm6fDqtq9kSxxnS/GGrxOS7fpkFnJIGG5gtTG1gcWYc+4+ok+/4EvCHPupY0XbB94SWUlOdAq06gheO0ySzVYJcXSD62YSsT6a/KCNKG0NfyVp5aUQqylF24rhV76xssbbHf+QwJgxbB3qVZsPq3w0ZFkvGhJ3sNoAqu4wiiYbBbQFC9tunN10AGXcjbl0bnjRE0zDgGgv8j1SqOSekA5MC+vLFoE4RhMD6nwqi+uP9StOeJzl/0nJxhJBvmRXvoc60eEmwS2Hm+7mknchAmjzSHDqPF51I9E+am215J3TZvlxblu+evN1b/rZAA+nj0kEakQ+JqovttLtt33N3eePPXGVpfS1JGM/yJjfRMWEYRJwkfYIzUDNBpEk7YKaOw7boS9Kz7VcqzbRzaMq13SS+mwukQEBMsKjWjLWmlR6A2F5x5zAXefQSV9GYjMt/wnSJDwxBZWiKNdNQogqJ3FFtzRlRzjxJxA3gKQ0cCYTdOwXrYpNicfwNE2LlF5MPBidqdVX0uz6QjhFWcLdxOQK0lpPoBHfZXSvkG6U7dWZ5KfP+pBqT8ZOHlbCqMe1qY15SrOEU2cGEXnyTyz1YPRJtK+m9CuHEp/UVO19kQWUBFulE2ltcZ552HeMjFFgdOdRFqiNz63YSJThFIsYTnlklajiJxsDf0xIwwnFpusdiZseG0nutpxPbiK6rSPSWfR32fBd8su3LZePr26+9k1PFOJw/u2MgMNyKL/NEdi+9mWfy6J7kNX1qVkULLYsEFcYC2Nd5C5KRyhJuYycK8b0XFA9ghEB/fqIJjiQLG558vceLkwXs8zUkkQAdRY5vbpepS+u9btUb06SkSBzkSBIWZEMoylWisigzqd3fDka3V6Zi4TCvpuBdiNg6GX26nN99q784aGuzbNEyJ5Eqz9SpS6a8MuHwPCnFUCdtMES41Va3ZKxNw4xCOnaG3pONhS6jhFe7csbYcqWVP+0zZqj3kkEVaKySYJXR2hrLPxEmT9+WDoqwbulWRyranGGxxLZ1JX0S1YQnqQpspYVYEAlRxe6Re049XaKPDt9F0OtrPlYrzGYl+rnN2qnOPcO1U9jeUcnL339YMCjQ5Bjl68FY17yjiOPrPiDwrLRDye4WXDkjw2du7G/77qFI0PhbDC/BN1/sfkv3/zjgg7lty8CPZ1++xReZE3bNzxw/3K6+W9YpP954mDysbiSKLN4va3PKnLl+Us/dw97oxVa8Z04ZpMRnoXW8pKwaqlFZkR4atXK9goyyZZ2EgVoix9RnY+K2o/OXsT16At6Ewn8mhKhJEJJTDwmMVXlcZTJzqQSSMmSTjZpLDfJB6OM8rsoKvGShkwsXtLKA7fhKv2lU7op8yK3kj9w7YU49CHDAn7jN7jYYEKUVCLpUTV3VtImEaIgsYUm8U5dyU7h60YO/YxvrqyVqQR1KSN8QGYD6Q0pkVrvvCAErrmxC3tMquFHjmVsSZuTOE95LzMdJeBo3QWKL08il27+ADLg9qltiTA3j/346IdxovZvfPgYVtr52xDj5Ts1jDX+fldW1dCtxRjZYfzcHDy8EzHewP2bkA0v1vM4r/EJgDY4T33k1fNpvMC+/365755Xbl7yze9b1RwaT2kEMoRPqYaD8ERg+1q+fuTG0c+x3mrzEGryZs0kaYFgWRStC9cF6lFrCjgJlbaHJUnLxdZHyKHJhgCNMkMj7foTVkWtxY2g1zHC3QhMCtTqVblFU6yFBV9LVlD+cjmNEpq/wYAmn7iitsiDRGSWvErqbaO+UrI56Ev1WmE6FaMginbdPNQDPPFTvlYCS+K3zeEGlDsgu6Nfz9QlTjj9cPemFD9jl8L5NaGFwnPzKgsa+aM/pHTan4yTNBpoMQlWFEKvWtF6PJtH5oJzgqOSq1TSKaeWaj1Cw9oIAEYdG4ow9OMnogsfIppxFtmxEUb9QnZEFWn4C6LgEhchUFWcgWlPl7IKXHQ1j/g8dipfjK081v7kn0/BcM4dikX9OhH5jp+KA8RE6xwNoFOq3EX5NRD8BrZZ/rPlscd/bvvGl/9hRR7KUx+BGsGnXs+F1ZB/6nR2/S18U+sXmASSPBMNQp+FWAtgQBMoF0aSi4sckimzKXjRty7eIJEnDzIHFxmCwSdRzOKUfkYeWPCAir7sApxSy17iokpyaR2xy6tAk1szmDilFrfKpZWP24rRBpOFyTf+SxxVUjWeClzJp12ODhFw+MWbbIW27p3OQIE3i7SS2VWnNphEbQsVQTv+h8hk1rRsqpZ0Pc2GECCAkRGa6XNVjcYkVTmhUZMlmwR1IJF1ayz0CZ7ER8dp31QKn7/sn7hobOxof2zbHB/1FxJj5vhEqmLd1PSv7auvtQEuThnwzZyo2AQRuc5jJ1o2a/V78EksX6hHbyp9Y35gR/0dCPppZJ/WPspRx9O7kGPfewCvT2ARwxPuMsTnwOrUYcI846CZ5dP+/DZ+xPeHN5ePX8q7kcM/szLQT1GZKfgUib/YYvmE1Zduz67/HIuCzYMJ70Jm+TrxKymyylx4rlV/elEJc0G46GvhwzA4FmPJkRUCE40CxauDupYW/Skm+OEHFl2paedSt/iSNORO4im7FBF56sjWRKV96o4nnNummBE6SWigM7WseyWs2tQlLM0XHuEtP1f/7eMq00QSkmJKjKBf7xRMLhxTtL8otduYczRaNeIqlrlPKoDMIpVjxY+xDZ08g2slSIaUTxW5dcgT95QMr7SUbHr2tU+hrTz04qffNFS2quI888M7qvjXdmQDDxUAyMMhzga1AO9qLLkjkwwbYpe2UkKWtrbtSmzFriaDEOWU6CxWhQVWd068z0BXHkMFCj2xKNt5VBranYb5ypPUeV8Czk1HK6jdgJzj1mkDNk6JFfKtczFg7Cj6VGtm+wXL9dN/tP3mV3xpEIfTUxKBmQJPifCLKnT7za/6uOXaB77zfHv2oqQKVtN+ws2VlAtkzQhEiolf7wpomzDdDDqASTy9QKRz8U5yiHxhLMzQS2dytsPoZjF1ZyexBOdltE14lJfHBdUNb05Jtk4TBCrT5GDTRJBaHS5a7Edv/nAQBFS7x23Q2TdptqSSg59r0X6Q652BNnXSC0wLjAlwc3P0K1UzgOlDd6o26SgPAu2Nj9hX72s6XoGbELXOq+N6zm8fBg6KcmyriDJxjszWHXtygour5rK3+eVRNvh6HIM0Hu9MAty/e4sCfe646JJ64Y4U8YEFLJ3JuewSl7LHn37QnjiaOXeJdH0cFtc6rqGHRrXrF0IG2Cf51ZnS8kz62ufHdCOf2r+/gS53HZyMlWxeaPi/RCTLR6vR711PfaSXrdd5S5DyToT3IYmNMB+HeVDm7iRzvMdEeNaIcUWRcdY1FQmn//3L5p4HNl/3xkekPZSPXgRqVD568i68pO1rXv7Z2+uP/QxT90Uu/vXlK5HJolkjZGIQ2AAmfRJMJz66a6mkKj/EymRhyC1rkgErUHr7k+CSPEdII01aK4iGyb42tlEVCSWo5QUDnYxJ6NQ+w5bPH22TC3DkqUPLol9cbI6UwLS3GMqWSaTyz0aRhU9Su9m2wvv1IGNgfFUfeky6oVefhdp4ilN2spZ+xDpoQi+cwwQqJqeKq/gcw4G80VcZsPhMdnkpneQHDQksLo8dkOWxEeKS1BqurMgzs+4X6MbvyCnLQutlffFpKPLQaZ9T+hkLUW4ilODSmpNI3wsZq4YlFDsbMl+hqcdZtWEPd6SqM+NbOtQVPSddKzd2Qpehci6IKyl+rbv0btaZj8aLH0vNhUpJ+Z6tsbHHNnPOcVE/PtQdSc2xws0FABSQ5SID+/DuRcv5B35m+y1f89lRdDh91CLQw/pRk3dhBfmfAc9/4l1XSXBfz/sOVgGhdQXxbz5dPV43b1wVLm4nfy8aF7TlpsVuopsVt4dLKsz6cVFC4sJquiwoR3P4qP2YpfjSUBrzCabwIU0h3GGsNPImASrIMrUmS2eyVK9WI9W8w0oNvz5xJDHN1aILXREmSROsfnkYg7Y9fqjKUoZWExK7ys4GIVq+tQRbPfWm1fpAJaEAEx4dkqsbeWV2x0O4VGOb3ZYWWLpKIeE5hriREiHdLuU9tsCitHQhmJ9OoMa3S/mNvavtGtJ4qvQGBF/eGdlfEZIX4UhNrFt+qhhbQqTJewtlcTiGeRdVCHBto+QW/aTdIUsnND0/QubfzEAQH0zs/lrPe46+E3Gsc/fhmKPnTL4uwpWbuxDsysd5u84nsbyrSJ/Yc3d37qeznF/OJ4p2OEdSsrYCWEOpbbkjgRLd7lpvWH7fs69u/sDhPyFW0H5r55l7vzUpF5x7+4aXfOpybfN9rP/nmy7MA7PwKkFUmINLkqgFxFIIbW7jexGEvtuTmJMokJtEFPmVAAKBtnQCU2nLtCWphiSps7gmASchB1iGqlMdSUA0kzvKZPNmEuPILlqFywKPm4O0URhwLXj6yptEPvTWuWtSJe1cJbo5pUd/NokJoAzKbns0u+xUQAOHNgKb3op+vviPOvKlo1UfZKhaGfXJJhmIJMfEy766J75QlBnq5XcdqzWWQyAlZd++jn/iGMMiOvIQFVXhiYmeYFf3yBAgWJuU1Ru6sPrYtygHq22rVtkgn6O6fn2uGj2sQCqDn3Vs1RG9BeOcH9J7aEjlMALLhhDhmQeqn0eEvlAPFfMjm4TzZDYSHnvZjb4yYg2Vj62cAv49iBcr1tkg2Dy823MDyeZhjY2zRvJYt+dO5rd4LegxjJOaSp8Lob/LbvQlm69/0y9G/eH0EUegtvGPmP3AuH3NS75subH5B/zNxPOzIJikWX+EptbhhDizl8lbCy6LyZVLWSkyuZ34VZJoXSR0Z/MIO3RJzp1cpNhxtQEu8E5aSbjIyCduXNAa5q+rWHjrSJtT8Cx2HYgKMkNSSBJUy3dthr+0Z5GPLHFR4Bm88mFLaZu7V3QmJuGDU/eeR9Ku/MoNYOexfCZmr6oLx5m+m0cemSlLn/dK2QfApCbOQzn81EeROzb4XFDOUakc6ansC4RU+0zk+3EovCRhhM440rYrvTI4xrSMU5Jg0YdWElkgMpGHN2qdNSVL+xXFpXnZ0X6I3+no4DgnpLWoOErl5wfi0lxnSeqOq/xKnGQDPaEOjH5kxiRopWk9O11Km7KLU0H89Bb6Y481/PRzl9R3K861goGknbtvaFQ81jrewrd8eGstxCK2GBMPNiE22ucv59f/wfYNL/+yle7Q+IgiMLH/iJgvMtP2z7z8yvnD53+W2fgVxiFXlmkwYZN0WE1OXn4SZJOvCabmPBOfRpKFTWh6gts2mSpvrsZzCy69ekYmXZ9XrzDxHLEjenhU06OLtJKHDZGp6nAiAxrJkmho1ZWtddmkzLxsTw0fvBGLHRbAurm2gaQdO0GqL39oJhQ64+EVZK4SQwlMf9c2DRODpf2rzt650cOUjREYX/uN3L27mRgHX+jVYHyqK8gr6bpqV7bGAdWZ0S8HsPgCODHSpowlEYxceWT3ZLUXO/rGN+NHUjMhzh3FKhdZ9Qd8EsJLwlSU+LxfiRItlVeBURpT6Y3aNIxtjaMYirZCn0eP+gaeXmyUUJDzoOTSGB8CKz00iyD8tvfkxBb61ILju2/O+fVFeuYiCL/epF6sy159v2RRddYRSceLq/p+LOzyE7zY71+q5xsXHds+Ml/AnXN3UrEFl6Chhx1vHa823ZiACS1VSj4wQYvZ+d3LvcvLNl/1Hdcadaj+BSLglDyUf8EI8NHAf3l77fSHWAyf6creBZHF4CUbScGU6FKrBe0iyQorKAnUkis+icCFthdwBAoQ5cLKCqNjm8rFYBnytFf6bkDZFqx2rMksELhabhacQugrf98WLYukiKVnUqKdDU76ukStPqiSVVztZdQIzyJWfitJpQyvCtVfmmN3bIWhNhfktbPKCeW+7bZLQOHoRDe0omaDkST8AEMevj3GjB39xsc+ZDiG2qzqjGPGD7uBj79BhiEmFHEIvOI1hjhjctMnYhh5BgQa+5VsbxKQOMQ6/ZBU0criOI+twmIEDUep7ZQueqwbD085AMwxlK9h6UkP1BI9OhvZVCT5PDaSPnxF45jMXWw2KvAhyYYBbb7huaTmW3n9xl5p3HAYYDfvtNUYxmjOxum8OjphHPPICrU+yuKvzzUr3y7sRQgbSuJo25hCthaXoePkBYWypcmGVzoyjtGpL5u/xyb1hzZf9+3/bOU/ND6sCGSdfViUB6JEYPvql76Az5f/fWYd/142ky8TlyUN3tnNAmfyO5mzpF2sJo58+oRwZwWIhU4WSwT1xKZdqaBQc07iKxLwJiQLcrJA0trpBFMJSRooIRt7TMzNjFo0qdsyCziL0YWpFrgGHwnKZS0WB2IqCcir/F3ZeZCFKhNl+NTfWgFOC5qQIQt5ubKULnaVXmUkAa0wGEwK9nm+n28Ibl5l5ZEHfZpJNCq1F4hw+SYG7aeg2KdZ6q/Tzg7iox/tUsmln9IyaqyIjUke+6rvpbQwBVOSzKqZeaC9/FhilnExAXrEioq1Iz+b2YgSL5P+xC7E5D8lqqPVRbCSTLTCckI2dWyiuT8fJkah04QExqptXJUTIUHK1c5u+789/OhtZGuXOpVDqXj05Acup2JnbL07oBedaWNjPbKqDUfickG5cI9N3hl2EeQ/uqo1Vor1SfPiOnxlR7R/5vbs9O9vX/9VLxj+Q/3hRaCH9MMjvuhU21c/8Cqm348yYZ+dGe+qcCZT8iLWK6pMaO9ALLUIWM4S0LMG4+y+ZXFLnwmdKR7OuoICsS4SeLLIlCG9K0F9VvY5ajEJc2HQ93P4qx1CLFKCg8YNJTwmO9ss3lwZamMESFv08rDsih5cXni64YiIDvnl60OwzyLkibASuW6c4imzoCs2paMQOcNZvlRPPAehDJyOZkZHx8V+NkrsqHiABThHaMEl3kMTmxm3ZED1jc8yto1Nm3ckMYIT/hoTf2azyBgxF46S0Cqple6WpS5Ly53HhlmM+LAbb3hNpr78RsDuj/CgRMSMdTZOfTeJr/50zEpl+YrCqJamgxFP257MT9tOBcRlc4cu1nbtx3BFurGrKza3jvijW8BrbtKmL39spxO51jDm7z1oRz40U0IDVFPU4SayviORCFh8985IImTlo+XZeNTRElWuMPoB5bmYQIsyamyqvzybHedHt294KWv8UD7cCEw0P1z6C0m3feOfuHf7xGPfsz3a/id+EiXJ3ytEihM5iymdmrwm5iwgJqlXfH7KyjKLTlj60NXfdIADkM/gZ2PZSyISym5y6NHy6rwWgDUFuDoDt+1CIrGzRAYNCX0XTGyrBVgbFvQuSOEcJqyBm4Rz5QdcF0SnVmr7VMmfvqIFe8pBnNCH1NVufeUhxN4jG0g6FnDFjuhWV8sPXN/pJ1Hyj4eySYmIPXO3Ag0/uXNRlm11KadjKn3aLdvoxNT4R28CbLJUX1/9p428BEB7Z4zUI52BURBBiFblmbS0Qlwppl0vuaXUwjqUoWh5qAVLX43Ir7uxGp88u89mDw2Mo18t2mffuKetbje4ps9HsIOPBuYbEeIP+7JRwF5sjph+xHql0ipdodNIZUyhranqjS3y+f7Dx1jAYq/ke/08tjL5M8HkqQ2iBGqDYS+TmbW+96CfT2NlDWCNf6zpp7Twbx5jFVP5lUdc2uxYOQfb3MTX9YtOTquPebQFLOPo/D8+/p+X43u+bPOqb3n/uHmoP3QEiPCh/PMisH3tKz5te/Yk//3s+LmzwGsiylWTMCuPCejVWeYq7Uzu4J2YXLV5FQkyvC7sYk/fZiDyOZGTuIB1QrDOQgTea6E2iyRWVlwKEvwlYSQpK9DkwY9WWjzbDyQKC2hTu4oMKlYs/1aX9cdig9oSu7QnMgOKj/Gnr/xCO3IloW0casNTvBuKMoWngqYatWG0pQ0jFLWomzSJO0khiEDXzRu7TCLxzSyEgsRPuCqsKRPLdIy1ujgSN+nsN63W+Ogx/BpjAS9cTRaTchJSJ6vaJIx7leBtljOJo4ktSZf41leraGNt8M4VYxNP8rFbJZUvtXmM5JKfuM280B/A2fjb3FDpEzZHauw3PqrEF+2aCw75pZV01BhHAJINYtChZWMwHhlZifw1aRvDvkPIBY106nG6gsvfgtA+kw4dwREU341YnHrHbB5pMwTerRzxx4rZKIz1Jd+HUPdjspqq9G0Y31jF2Q0IFXFAPvRxrvmn7i7rPBJXcfh5vg34Czev+vZfGJpD/cERqBH6YPgBQgS2r3vp799ub/wU183PdarNlcwknSQbI5VJy2fUbVtqtQFvniRYJrMT3mOKi7MntAtPXN6fNH8WN+BJ3sp1oidpIMaF61KJItvgsnkgaxL93KYLd/1IHjugSRJTioj0NUL4nlwXtTa3zKiDxiRnHDKBxHtEQcu1D9O6eaRPDLRRlIX2FNOQ8XPhr3GOscprOl6oildunm8PXBDy87JcHscj6vVDfk4WaCaW2p1xpM4VsX0NIOkptkQ6HhK0gMSpNo/4IU8Rhs5olL/lY+IaCyRUUJckLmTDW496ahnOhUNtHhFMrOyZ40nKIwN7MkbUUmmLDeMa/5QPbe482uZySN/kKFtM2lClH4g89OJvhNHDyLDsZrcUkaMs871RXsfIXjY0YLg1j/uMhfDcfTs8yK1loz3YQeDKtlpF6vTFu37negBArsFcS7bxMfS6qnP2y7LCa5P+yAxGXMm3F7eC1z8V7K/NjsFzl+vXf8ocELGH04eMQM3cD4m62MDt617yJfwx1NuZ2/cz07KwKhkz2ZxwTmzmXiapWBbcmmhdIDCeByYqS6xp6cuYWczk7qQbEREIr7DM4pafZFCAJBHV8ePctwTDyY/bFqiSjZ9Cqc0BWhaYS0lforwXYCaAeoXGz/IjySdAT3Cqc89WobFC1jkEtdxcgYpCdi/f0FUSrMXt1aT4JMP2MTbCl4REUtGjSYzRpw6L9lhz0qW4JZAr3WwEwH1kNklD0hDr6y1weZVVlqIztrTV0k+Rzx/oc5WLoqDjM7DIqVhptz7E/xZh23jLnjnEPKqPYgtpzyeRhkeB6tMmSIy/uvgx9YejHI+84DJ35FNR08s7xbZGW4PPnIYn5PGDtlf+Ti6OJGrxylK2xaQcXn2kKUw8Jf4g317OvWm4glYZ8sjPT8w1KA2TMTHDlrzXkE67OPRPfdp/5CMxYcYnFbDgpQMXuG3oKfPYOHajLBtfGFHYtme8oNVOOBVxP423Jxco5FA+KALJHx8EveCA7Wte+o3b0+V7SciXTRaZ6szcSn5eEfbyyAI7ZR77dSW8NM20I3jOPsrck2SxJKvB17foleyVQ8lsdR7f3K+F5GZVAk3gmfhNV8mpcPXOpYUBSgJuQ+YZuFfIJnbXjbrqEUYsyGqJdnVlcyy5oZ1FaIfi2YVc+rFv9AxCZAjKnzpDNQkIQN79SDY+r5Jd88iExv+rnStw6DJR7cujxjJgvXvSBO3IZkM9JsTetjuJZfTp//iTWiUq9VeHaRRz1Z7lkR/SaJPEcY0tsTrw5ow90mmvho+vYZcVwrzwBZB7OYz3v/hZ5kVwejqlPdJROZ7WKRFdsneLWQ2OSw1c/Gy7w9e8wQJIYm9h2jpxScIGLsxZn4Rtn8d68UVhHTPRluwFc+FCRzBeBeFXk6R4J9mGaIPj5ruMPKbKhuPGUjTegVjKI78K3guEOB14JkT6WClY3ZEtE4CeJzBGZ7ZezJCkfFCytMarYXbhrfm6vcxG9r3ciXyjZIdycwR6RG8GXtTe9sEHL52/8/96kNnz5S7SJDFnWiZoTTBnniAnGCuJUDExnXkspIBo9pSshThJcz+oIXDZIMLF5Sg0UxaTCsRRR0961bcZTpQFb3/oFeJ6K3ZJY5c5bpXrwgBcKm3ZNz1AxOKr59YyNkYYPHovlT6O/Og3NqPPNv76o92Jk9r0I0GSFOK2V1lGMPlROwBUvwRu8u/o1F1JZGJlgsv3eLUp8R/d1rd+dUk2KuhieAxC6RQNsFCZLMaNAtZZmcLXsVjHU15wCQ9tiZC3jkmwDR4e4yNZziWzmvF6oCFwPGpcIxhcWTdxrXBCBWvFo+UVWWwhK8Pl+BK/bDo1Lq0oVfybOAgZ41YiASVlvUi5KY7g5ed3Va2fwDJ3aedf32qHcP4WJDjhHGf5dl7ke9GSCwTpSp8muJEe59NT0BPHY/3gBfrii/RL1MZWe9x4/FsRmmhJPx37kqhWGu3gbHwB81hMw23ZcZ7Rxq7w6AY/PpaUB3/+/NG/9G+9ePPiF98I/eGUGB7CQAT8Cvbtkw/zx4GbF+R211nIxEqVxcDk6mSaiWfUwGchh84rHB/JiK3J6UIxI1opqOTaqeI0dpHNlXmmcR4PwLRXVn1OY3VYN947GRUUB/LGFvG2wanH9wP1QtHFMXBIsJcvf8RO5cCjncq02bzqi6P6pr04XVfMzWCFXTFKXhNFiSha28pSr3T+tbLtYuAsfYgqGdI2rtEfOfLRUEZ00ZSXvrGOssSdpiVw6/SqH/n0tU28AQu77VgQ4tV3etNuy6BnXP1XqikVhyRm5FWSNtKNVYd+0FVN/GuYfhVIP+XVPw3SF5NcldX/zAn1Sl+PveSTLqEOAzKE2fa0+uu8FKi9yEZ1vfiPNKHgKApyDlhTDGdiPfNCOoBGivwOTpnKapvhc4MIVBn6xWHJXa93EiZraw9u2vPPpaCxG9qg5CG9J7GX7dk4fFkOrS/Wj9k8tHVzcok5Db02ujnkjw57HrpWLeCySWqZcdAmj55IsQ2y3NlMzMTrjyypaWRc4t+PLZfv5Y8OD18Nn/B6uuglf1l+/dGfZIK9ILHI4nCyMYGZS05oDxftrLdA6NejFGe+k46a73HIIpVd1nxwlY4M0OTRlZ+0CS+wLFAmZhEL4KCAl8WyooDM1bimWLRJjlqs8uyoXdBePWXBuKCwL3TAoo86m0GSup0IhEY6krysAk1gKuTXZLTaalu51rKaAOVtFySMPfJCwxkQNH4qLQtciMCOrdTYkufyxZJFXL61Zx0UNTakZNDLZaY9xToea5CgxPewcnLDjjvaZPwp8Yu+pfRV3ZCSjV9uFMYkljNP7MfP9k9ejyTt0T8ypWnchCgbI3gl+ZvaAENrpYjdqDom9Boe1TGQE/4aEct5xi8N5BDP+OXGVPqTyKMMQRaVqE+6iUejgg6R46x2SROI9ANQBDgTfdg0o+WtMhlv50UtLeiYAj62UqYq5wW7rBV/5xJ07FZuJme5c6GNredzF8McdVy1Xz7jkXG3Hf+6ylxg/LM+a7yiGLgs6sOScQVUGRU/betLUaqPPyR+/0+aM2C58CVxv8hR8GO6y3L9x0i2n+Q6qplIzcSd59ACTRlOo0wzZ7yT0p4g28Bc2H5b6JGXaL2685l46VcZNu1TQR/+9PZOGqLM0HXdbXnUFfWuv6YTLWpkZ1EIAJGEPCgVSivOUxjDGQvzSCTChbHK9duFHMV0EwOq6C1+vSlRJk9F+lFUliZ2Jhmg46if7Ue+OmMtxMpJfOCDee40THwWba+WPPaLRr8zKgETezNBAlrUKy30Zd/O1sFFhrZwzFW5uCn5NJEOZeydAcjmilcbkhjBRKV4E6SUumONWPsWaRMH/Cy7MzuaDmp83fgV6IlLHCpGzrux2/lVgnE4pAVfY7dydiMyjQE2jOjVMIMWazv2ZbN/a1/hlFAmauTEV7rxx3FLbFqPVN3PI58k64pVBQP6Sfx+xUkSP8J4GT6ftFLNGZuFcvLuo69E1OentHLNwdw6Jo7597duQH6clyp3994d+rjLuxL9ju87+6Y/Y6f9UEafXjo2c0ERrti4x28UXQv8IPrXeYb2gs2fvNgf8zVuF7ZsX/+K5y1nN97OhPiEmvyZRsTDO49ecLliZoY6JzN1Ollk/UqfpdYT1slYdy0u1kkcUinfZ7D+Mx+L/Uo6tbgBlA5v1Zm40e/a3iuzHmZx+xjJaygnfe6OXOxRBlMn5fJLISKQ62pz8a8Q9XtoUwPNFNkEpdJRE5xUtrWTRSqxTBoln3FyIbt5RJ5AC1yQ5JGXhMqSluI5yQFZ005c2tEkRTgr7gbDtlfhKragKXGzrz7q9i3dBk2stTntmFZxj23o29erTyMxd5T0JvlmTO1jcb7sMAjGoHmiY9rU9tdi32JlsrIpLUf8R1bkJz5NO/TWI0o/QNdcal5lj++tx6Tq/VK8ucmOKFYipcai2sqgb6ZWAb+xP7x0ek6FtnXFB+efiR+EkUkMEBP9bhat2wQdv9Xhp6jkoZbTG143DZ9uzotzbXA96YEmHefxoe3aQPIuBF+3XrT5+CqPtlgTzlFj4AajTdl50qy1Ehurb2xqDmFD2+m9WmySV3diAR3srW9WEC5i+y6gn7e5+p3vKGkX71wRvnh+8zceL/crnf8mk6M2D+YDE4ITEztXZTZpH53QYDLyWxMpjUwxsmovKjArHjrJIy9s8FlXCqWZsksa0kIhEQsjG5A1V1yIobQgaKKDOndGrvE8nwoRvADgS7HCNOVKmySFnBps5ekjZeykGb3CgoZSGSayckxhjSxU8MNvje6wmOBtcJLDElZ6gvMyk8XdFsRG6bRxv7iY64pcqLLZ/DhqsWsXeI51o8POPM5Y7WztjGEs8StdSGBJuvIVlDNlEq/tLsbDOOVxV2wjrVAbDh1K4pEv+sp3bYKo4mx7DmXKF71UrW8ekZQ1JVdSi0mwElrXEqUotx6T+pfkxijTQLmRC/0AAEAASURBVNmOv4mUX7jCr9rotQFt4kwdcNc6lVjrS4+jEta4KLdYAsu7jvalYouuyIcrMote+zMvsDNzsGkSIMRHpjh+JunXfI15nCDiNzpsIi9faQIme9AN7trYgHKhMRdG2sVvfA1v8Y1EXYzp2pn4lfxchOk7x9iS9aLNMVSf7JQAbcG7T6D3N7dXySUXtFROuWDO54+Dzk//Ol8zfb+TKZPbGOTqmEmUGQbCQiLxitmJt24BwYNjQtUiF+eRqV50M9kCRQwEQ5uJCH4XfCenukpnbLLLMYt4xNWjFo0pXZn40llgDI/ECM9CSLIS6jWzSUVC8douDW1qbVdmpMrjIY3wcHbKD48yaHgWLV4xBaKrJsQJUP4tZY0D8Epc2qJts8nJ1nypWpfjEDjOAXdMbIQkz7CKrkwrmvEzHyLIpjA2Q6tOJTT8JlvxPTrajkRG4k5YwUnjlXTHYvj1Y+bU6gcMpat9jNzyuxzQloqBg5f5hnhEFRotiXMAbBzA5/9f1N9ehCDw0a/vVRRkC/kDol1+V/wyVlxhJ8GudsjTvNir3EAEIXvnW8AlG7g4YyG+OBTD9s+huGyc8pPAq88dBW0/uutdneswRdro0V/4vQPgN18P32OmyDjt3UyuK2rGZlPRD1UrDNvXMYlPFWvxzkF/mhKe8jU4eSmDndyQDT6CN/dvl9O/flH/4LBHqoJ0Ec7bV3/l53PV8jZS3L01aZyRTpUqs8DyqRg3FCZJkiNJktaQdTJ2qjG5hTJ7cxUPQx7IuNhEZOahyUmqMA/Jxas39AHVwlONCVheBJQ9tRAjKmYgi9orz8gMcS+WyC9bXXTZpsBHnD3aJo68JLcdk8BKEwX4zDNkOQVEvu2l7sR8tJa7geiRph9RlAKNxiinlQbKVzaKjs8YLrYwYgtuX121oe2E1YJtXmkTm/IHL8yiyEWXLouXVTna5SiBMwnlatMrTlmaxkccJrN8OikREkGJT9V0jMpVZJFdK+ntWe9jEgmMZXiREf1l45p0xXPEvxatfYlzdnvkoGvsLlE6VY7ph7KOjH/GBRSqnGuOh618aCL2GkfM0J24pE3VDAywJXFDZj6YIR1xkq/GSUAHldbKJ428HJa5i9LnmisFn7HPnXGDJt521ZMNxfbgUaJuUF2IiYRAhPNb44+P9UeG9svvfGmoBL12lKnNq930864lQhSk1Na0t5EJ04/4Qp01BnH+ygvyxAYZzBxo1JLY37s9PX/b9tUv+3wAF6q4li9M2b72gS9kyP8KU+7ujDuLwR9/a8FVcqv2LiHMJHS6SOwVlgu5Np6+Ki5kTcxpT2TtM+mii3YWCZMzi8wJ3UvIK8rKrtqkUfBYtwGZvEHVQvf5fZLA6KH2WXTENW/WH3C3uYhB3uof/P7Phi23NbkKM0kRGE0qPnlYIJpowISbhOcHwiREbaTs7oYq8cxii7/g9SWwUFffBZ9NYmREpqqiNJThb3ziAk4/MwYa6wC6pGnGXh+kCyWeSQCdfPMMXhuC9GTLBCwjfkUWbeeFucu+JF2UL6xUti/2h2BqCfbtXXUid48+fkvruEtPbJOYEvMee2TGf2rnj7pyFwq9419+F69zp8axxnpnGfiokD8Sqm/cZg1gR+Zn66l3gDXWssgVvHLSLljmiT5Y9MOjy7xfyqetgBm/2IztbsS5mHEt9SY8idtQ2AZlI5uGzQQ+SJt8MutGbaoRimzNyObqnBo7vEPs+ObuJiKRifDEInwy7mxT1YwfmI5Lr/PgXC80kJs5QpP6bk5/ZXv1ZV8oyUUpF2YD2b7mK7+Yx/N/mVlz2cFNMp1RzuxkElA7qZxattIzk9SMzqSWxcl57geUnISSUYrPyUZpeuuZYGlLBUNohlE9tte+AizAlNNN1Ywsk7wLJcmmpJVcnNKHLP5ikAsKgZUeagHrkwkTtP5ZxlZh0V2V/1cifZNaSNlwJCEGWpcNLvLpm6jFUWTLhlHdnN1W1ivw8S1Xf+2nfLETW6PWqI4OGxxWZhZ+g41QgW4aEpQ/tvTVf7zUEQBSFPJ5xVqbL21ZtGeMp2us6yqzwBP72KfwLvHThJX4GSPGvH1LModu3SCl8WjePHqKLCDELptLaMrmsnYU1WhnR4RcWnVre+R13170a4NHChQJi5TgHcvgCl9N5yo2SC8thz7V17DX3IEgyvKuSTqLyXmSceu7KVbw2E98YpIxQLjj7sbB4SfzlBF9QbXdTObIQq611ucuwoGl49+R+JFev/jTR5Rz8RBK7WrbNDOPMHucZh4Jt6g3tLSdTpbR2y5BE2j7qk76+BFeBPqD3suszb+8vfrSL5b6IhSH7o4v3nmQSf4Sn4/3OUwVkxClJpsN0wzFyRq4HYqTkN+iFgCHtBJZQGSyOYEkdaLbuEmKiFB38oOpZ2Z922tPwJmtcqsD3TVBTWa0XXTi1MVuWIc9fpjQ+SNGSZLVpJuETsudBTr/7iseJlmY+GQE5YKgHj9dIMZmkwxV0DmnjikQsSh97BLYvv2KSxyQCVx88bcqceFVaWEGHz5hc4ws766IiQls/aROmIT3hgjtTpNXudpROuuRA1g+zbP+g69YJRG+SKxfjrl60J+wJFtEcPkk3vEBn7AiI8lXe2HIhgG5V9jhlxWbp9SYClMHogx8DkeZ0q4L8xGRP1XE0g5Py9MUkdpizSn6ddpf62qIjbelX34fXpX2IDiFvo1eLwjQl+KaSYwaQDW+pBacQ0SxZDOz2RuEdhomj9noJG3yYpK8dTlm2qT8oXPz9z2Il1Dh1E9t9j2I3yrkx4WdW9DMBxbyqAs5eQTq+O2XjI12oaF+qRI8z3ODQ100jknsBzs8+ifv9uzshPXwl7ZXyTkXoMzMvGNd9Z0HE+sHyIMn9Sy8BxrPs1icVHrvBHAGJDnQFB4QUymfWu3FJZWzZ+pMRiYSfa/WlFaTHYiCkRO5nHP1H1A0RhcTLjy5Cg5D8axXl7EPqdinPesyYhK7rcxjHHW6trOIwGhiwbSJtiuMzSKbTmxCfXwW6RGG8lm5AQuD24My8YrAAgWuTfViM906KbOLfDno78cucVKvC7hpZAlr2zjJOHyaA31+ujZJxB748kjE8SA2wrJ5YLvbgFGAssZA2as+hULfsh3/ib12aUt0erVsvDgyju1/2VWdMll9/Awe4MhAVMWw68iFTrurlL4ypkFwO6cY2Br/nm+OV+TilWMlifKcI+u4At6f8yESpjjk1MfKizcq4BWlXFv+QWIA0tKujan1SBJbIFntL3JjK59wedbHRUq1r40c+V8eEpqQwfmISZjDUTemzHA6xwxk/j86VI6pnqs6f2B4xnfRuVk4h/Lo0ndyGucY1FjGV+RmPogSL84f1xXKYiOwlSZzQiOhmVgnDjDrAz/xjbbyslEp11xxtOFClZzzTeSeO7w4bndsyScjttu3MbnudkI50o5xFhCTIiChmUxdO3MzJ2qCZaJIKH0WDBC7CpKXtk2XQMnmDKw6EkpFCZLayT4TUp4RFCJPMLgY5PPuIH/MRxMeRUS3fNkQmNwrrXZjc+hqcueKyYXvYoB55UkHYZHolXvb6QIce7t2YWQBKVdY95M06Lt+QJWo8OQUOfLpgQULoi0dGbB7fIqAVZCELbRjJa+w+QLG2GgwMh6itJERgF59yo2M5rOKrtDph5uviQGEPvdGGv+kbQWrfeK1SbMyP2oehUyguHiIT+Kxa668VxlQRKG0UVx9E19io01tn4r221rkUTD1YSGHSa/e67QJkrXt+pSxi+3C1btDC7GrzPE7sLGt7cwHMQxqBkEKJTm/4Fa2Y0A18VUNQI5mCF5biE2PV40bhPY5eAFNzeEdA0fA+aND/urHCyzFWbzDoNJudR/lDwfr603WfzzFRrH1u7LciDhqJ4LePr4Zs8RfIQhLX3kRSqUCDaBv03YtUYkDAW78abML5g5JukYbvqwz8Gx9T6D/D26uvuUnJLkTS4/ynefa9upXPn97evpXWSB5YZ6FwqD2PGG8ezI4EQRWtxYUnUwEJ33DaxbDJX3IB1GTTnjEOIHER1HTOyGbT8F5rgx1JIRYhvTKFnlzVcSjFugjFxnR0fUMXBYArNopZdaaySW9kpkJrTb+yC+LSOciwD/6i/TW31IbpDyv0PyJ3/oIb+yw1jZpc6o6fgNb6eAZW/UxolsOHIlBW1k6BFqgUW4Wqm27EqogyUWAZC1fGkpddZaeyAh0d4offaWauJhQLPFFf+gLoi6Jytzh8zUh0hvpbM7S73jE7F8URJ+wtm9kSqd963jQzd0CWqWNHSGCrGlTBQYNf+/haOcJ4yRFcGCa3ik049n2FaYo0BG5QZXfNJHJOfNVYVDUxKItBpw+jxPiLVRpGoeUqenENn3DFvDxy79VUZYXNjY1U7r2I+EUhiJJQtOqRoVseYxJEs8dSIzADjaZ+W+IxjEHtBqYMcC3XHQpD33a413HzueiVVypVhM846s+AElYOEW+8Yo/YGxCKxVbIbmHHHQH/52IMbrjyvb1DzyPxPo2Ety9JjkXWQadc8bXfta/EwP3c2VDw8lhxZFv6QSVhCgXuFkMSZwmeEChN4Je7VDS70mWK8BoFoHunoSpvayKUdpHQxUC5FV2y/LBSz4+imA1RDd1k0KuM9AjI49WxClPYmX1UbqAKZgJPznCQHgVpSlrkWYKbSxYF1h81hd+svDkzAIqhn05NyXBWYCQrYvRtou4LzF3mwX6pPeILproMLYVYPylL3oXk6If/RPrsmrvnNgk0sUMSrE560f7cpPtDTcO8VklkKYaOwGk75U0LcyusTL+QhxTaPflAt4VGSxU2UigjQ/ozqO5yJ+YQye+7UotOzZpX+KkLG2hHwPs2xZv2zjYiF6AynIeidOn1Jx8RMgMoFH2CA8f9ZBFoH0AypUAubV2BDtbwAEumHPWuCjAun7kTXyKtNriIhNSC7iKC238yxcyYrubiHeoWS/aod0ctVmop/mk6UOfvSty5FxHYyN/8l72R5e+w5s1iQPGCV2hDSakyESXdPrF16lYWxixe7dnp2/jncjzArjDTq6/O6rku61Ol7czcvc7hPvJahx1ga2TG6JcHWUSMaWdfJaZtE4Yf51o4vgdmZki0vnLBArehRMZAMXZjixqSs49uZyIQpIE2YDO/SQRV8cuguhQd3HIis087uAIFNwk3vEFbXpRi6btHZujN4maVuwVon473onY1F6sAZyvJMnOi7zU0LhD8Z1WqeWj5NmzjfZpEqR6lTkLSbhH4NRqjve8gHcB57hFhmITP2vMip+Jrb6j0vhECbr0V7qWYdOvnXBjjV7dFNd23URXnBmn0MCauDVvuxqdtdmjqTd5DUBD1IXHDR2Y7aQkdJaJ0O3bJod9dBij+C8lTlaMRCurZe/JkU/fo5dARI9xcffw04HKVemUxKnkRJz4tRhY9ZSuJELxkmTeNiH+lv3FOz5LZzvQQhWd9sQmcNHHaOfOA3nYnGmm6uDq4sfHYtLmcZRqHeQ4wnqAdj9+NdpFn42DpWNyV2XNC/UXdzYJ70zUpU/UbSpzUB21IRw7wcBlHBE0NKGfPkA3k9CtBIhoOVx50nT9Kks66Rf+2JB/TPXaB/jevTur4OGdU/INmec3fowJ9QnOJKdGrjKsnTxWAjnWsXfGCZ+JkwlWdOuEA9bsoYtgJmQpoNqX6URLv2sVScCvm0L0WiuQTSPJonEmD3/q01TUGR0WLovbj6O6yBWVOwa6NDmdsSZsMXEVTtu5q8Fhh2/6SVTpgFG/vwjMoxzlIlGdoTPpZIMLGQKpJwhqJh9o+2y+IeAkm0aWJy1feB/KiJyuvROMueAttieBKiewqiqusbJslDjugLdWbhZ/mNCjHSaVyITGn9YbOunlMyFI00c6GkKJfNvG2MNPnNnX0TTKtzBL1nz6n9I+VOdDnBMr7FSuaE8a0vzKyXzAEGeCCjJm2OJ+Lql+uSXHvDaraFpYEcX32N39tMcPDccWPz4Rn6UBl5gqxjjmAiQKE+eMo8lSELwTe1kt2QDDJ0Qq6KLHnn0O+vU4jq7D4FrzJ3f02JO153xtP/VfHuOqTm3UYLp5lGUdHCzg4qOahO31K3DyimyZmgQd3dJH7bKTxPmrDZ4iy6Yl+QIYzdgicw7k8JMLrNL9CQzxj22v3lnf4lsrJ5G4vU/5fx7Xb/wIz6g/yfGrReDQ1wRwkVWbWrwTRe8ldpKTLJ1MfuqjKEXVxKpJCN0Umy2jJnBNHmGZUFSRkcWgLhnR0SK0pUA1gX1ElTWQq1onXqYrdS8cHzPJocHa6yIn0+dlMGDXRQS6wDlKejQ0Pfj4p9yRDUre2NSTvZNQloM2GR9oJnFErle5wqOQSv4+ElO148cktySZ2CzPrsgS+gxCSQssJFgQPyYpIpMgTvzozBqN81EfOzlR4qH0edcBQHoRjmeR1NgGNFpBaGcSlsL4JbChh18nJ5HXXRdaoqg3auVTCocc49fJNXLFaZOyQNMKfToV0Oprq3baczyRkwsGeRUr3BOdXLErL4DdY5PE3sQmWeuTZOZTEOnboiFN6PBRthzOuLKxYsa82jcZooqzc7EQ+eyek7FlKV2MG7S26o64ujASqxGODYcXUx3/skEcB3OtPoGFpMw7wXC0zvpuLGxhfgeG/lz32CcQeYTFo6yh320i5Z3w+Kdd7a+WWWLPjIWALLTSP7lB/siWjpiPnvKK+YtfWQPK8xu/z578EXOV4u6E0kNye7vifxJcrr3/h5jRn+6czKR18tkxIQCoRSAEWHCgXZ+2icIMvhNx5hHTLpMmk6InrJNsJrCs/ObWPBPKXtPl0xlOKOmNsoto9MoTRuElRPuOM0HbXtqSeM4CkwXZ0uU5L408796TW/RFl9XtSsWfUYWI1hvPugsWXfl47xB6W+Bq58jmkVnSm5j+JbFRSW+8mm9iLHmu0qA1drYjAvj0B+YzbOXZR3JKLUL8djPPeMTp4EwIkQ31Sm9rbIdKfGJNvANecd2HJjqMd2Iuk3x5DlJy6efDDuJVpA8clTXjIcCAVzvGiNhnTE2a8sgLbeYINikulmiXeCDjjTEt/0taklgoiHNqqWNsCOKnTAEpS6Kue75lXIDla1KE8auOotLnLokHeqIKbPNLL1Nms+3I7zsmX+bPRcDoVUDPkeiin01D1ZEZIZn66qj3C1GhoqiTrr4fy3VD/PLfBh1XNwjmAPj6wQ/6qvNwQ9ExTYm/jgOHdyP1UXPjUDT5LjH07WKBXaByip02tbXtZq1ZfIwpmWFKbHs6CNOuRFY26dBVf7RKP7I3n748/sgPJWcBut1LReQ29+L8nT/9IFPoBVlHTpieyDe9fNv3EZrM0oHRDQsD7rhnM7GhLOqa9EWcOQBcdM6ZtYH2XAOTCYYsvyZENvUVSRRl0pW4ugPwcVjIXCCQVLYJLH2McFL6V+Hz/UEoEVJ2B+tk7YUlU2gzxcFqrS5DI65LLSRo1MdRGHko0GlnFoT2ewxr7KEbszkRvEHJusZ/T5fwmmx6siv7JEm8yMofkSkzKpHcRPXpGnmBac8Um91Xd2ymtvg3Ef4oI3d69G2Hhmb+b4mblDSOW+RgaZIS4wc47IibK+TdfNBGeUEqP3V6FYO2W0uGl2bHzVYXbZXWSmKKsUgcsUdQdMZOOk0vbT4ErN3tbz0S1Neii1hFcwhKnJCZmCQ2hROVYnyQGxXU62YIh3YkLq0rRKGtOTOxr8lkDHsMUZ7HTLDHjuaPvChFjz54+Ohq76o9NpfmigEOZX5oCrH3iYF6atzgTxt7fOdBvNw4jJN6vQCIjSqWLk5qADR8XDj/Dpn2alfbVGMLWYwB69xQnqzQ1JglokKgo920uUuknbvIDAar9nx5wfmv/vSDRXx7nxOD29mF7Wu/8k8yXF8+A5WXpjg0C0rfHOwMPgNoO1Ok204kS493TR4mVvpODul6wovkeqjlKagmW87SzOGkjVTkKh45PctaEbCmlW5NSOriJzqp3TDMTzM1pZ0/Osszb/p6EwrlOaWd3NEOV2AIKBJU1tV7bAKmnsgWzzF+2k1cwFs856OpyKtFt/MvX0vRvoS4ZWm4tOOb7ZJvBEtX0g4v8GN3dFSstVMNERsTlINJxkMlgcmwky/YktgJr27OsWOC4FhY4ju1AhXuxEis6RPDjFloQwBaPtv65V2TbY6R50DFYGCSNq/2rIsMVHsAASUyqKGPdPu24dGcxK7lV+ygdb62Hu8alejhNwrkkSa3pTXOgFOUrNiKp+2sAScBcvQreuzHCMAYnCZ4x6jWlHdRfSfFlXgi3BNpbIvdymz7IqR9QYqqS7C7HEjp+aXJiY0gdkCXrzZpeP640E1CmcAmfsXbj64QETg0/i+p2hyswftpLMfTmqLYyHK8lOd6UTYdz5mdY/PEOpjWrC3aDXH4HB/vTBSMnJJkrEtfLlCCHBiE+rs9//LtNzzwjXDd1kW3b9uyffVLvoRHIN9bEw9XHEwni2Vv4cVJJ4PPWRlk6X3RljXTPDWHmBjyenIy9ERJX34HXhRH1s7oa3iSJrBMLmkkDo5WJmwEr3JE16wV74YhyraPB/ihna8gibIiVoLFWjtqSQvRn0oi1RZmLIojNoXJJQKd9JJwNiYmFW1cn5N7V+QzMn79b3DaZzvysjhgiG8COYzF+BpZwLLYKub1x3vayJGEABdG1SZXIpQe+cqL2JwKtqc/jySGJjy3nKTVFm1KJlYOJY8gur1P45xJjDW8S3ygLV0i1TIbVOiJoSTE0TwieVgcv4av/BCkTWUZHRKiJwnJR0KqUgYliWgSaGxGBrUsGV0axlBLMl+Li7PjylkdlIShmuHnxPAwNs7r0Hr3ahIXXcpTO59RpIb9Mo+tElNR8hjvyCtKwaov65RDq+0ZunyTgOTwBw+Nd+75qhLmYD2eYqv0USd2nJ8C6zv2vJOStcfO9XLiJ720mTrvTmxfImaOff57IbV3OTrKY7HESN8C0xDojYcweGuulX2Cym7XKvL1R/n6rCDx+qdscfpEO3VI6CvKc6+ho+3Rl25e/99+H+DbsujPbVm2r3ngcxiYv8Zo8AVmDKID5dA4iNQpDK7Fc65EoBmHs6Do1AQZKH2bDrwy/BioE8NJ7aS4qbSOwKAGvUuGjdMm4Wp1QnVysFt6yjZFuEj9d7ji6lk8Nfw+otAWj07v1XOTMQEgSFxNyEiiRz/2gstEVaZucZqY2EZXGy4SA9hY/E6p09Pl7MnT5cb10+XJx0+XD1zjePzG8uS1s+UxruQe75fTJhF1XcLuZ7A47+I/wl2x5rh0slkuU7ugT1ioJ1f4V6Q+mnDBuX47mc8fu61x0r4MoncmBsXgaGeZmJexAWqvKL2nbbEKLY0osdMC0FmbLbGMbhkUAM3EAsiEKIk1MZSuDbBpUbxj44YbXvGAqbSnYMSGjXeSdJK8/24Vvkhr2YGHK2KjamBCMm7ILg2BVHiYMM4Hy3qmEfoA7OB0guK5ZEkQk3sezNzO3PBeqe8OQhThxJd5kZfcbrTOtzUuKt/pkLzC0TxDl+HJSZIqJl3K/vry3cYRfyTq1/v4CCp/x4F39dfozk3WgBuI/+XQ+yFIXNeOcP5bIS67WhxeN3P/7W3enTjnmItBXD4xEsuG+Zmx14bMSYPWMJsIdzz9qiAvtxwT53vev6h4Dn10GsnSfDRTModoBSxEn427vgnkhBfX+Xgz/9XwwZ8QcruVuHG7GZ3PU58vP8Xkuz+2MyhJtEmWDA4ljtkE5yR12c4icqCzCGYS2w+TZ6iAp2+PCTKL0toSfmsXlgtIvdBlMTih1Nd3O7NAxYOQnQnLNHcC2lZ+w6cKArFa5bZhLXc8gK94gESVE5sGtggPW6hb/vju4lcGiyp2sAjP2CCuP3FjufbE2fLwI08sjz78xPLwo9eX9z5+bXnn49eX99w4Xd7Nf317iO8behj6a8i4ga++2elQ4B5pmRifoPOYAPlM+hLtE2B30T4Gfxd/mPUM4nFFGJvMM7DhHjcd2vdcubTczWK+7+4ryyc+8+7ld338FWJ3nIV/DE0O4kUzfx9wTBL2eXIGRW+RGX+MgWNh15iZrDNQ0grzxKGgjkUtZpKRMB3y6FhWv/zM+Bg+Y2+ch1/9eTSi7FKXGjqTldw1zowfck1Uyg21m6kwaLOpyg9P3IGiTIEyPPoj1xwKoS2RcNviGBvnwFpCIxEobbKIVo+0yXgFFJ24Do11s8RG5zN+ezOaO+WJfdYQQq2hKSZticDwrH5iT+wAJWXk+K0CFuijp+86Io+2/yve77w6964Eg86Zj2GEzWEYv7wQsU1FPI0t7f0NhLl2jn1H1HkSoQHSqXrGgva8/4wnmqYr2J0LMeyuO0L7+uIWbrvsSK1Ai/43vADGF555lCZe4fX7Poz49zav+85fGNrbpR53bxd7l+0b/8S9yxOP/l3C/9zVaBbRLAZagD12ZXoOoBOzNgBdn/SccSwGJzItJ4alHrO0RBBuDGsCksBJYe0Z3vXWXgginFSWJBP12w4dGug7R52s1sqScr+5s1BZTFgXilTK4MiKcSW17JKARGiVlckfO6B1w3jyxvLII08u733X48tvvOeJ5d3ve2J53wduLI+xWZgDrsH67qPT5SG2iYe5y3nvjevL+/m/C140+Q7C9WtovI67hE7Sef7VVMIF3ARjsXJTP/N9AXTXsfWGxlHcZGxq4jFj5yMAlvVy//HJ8okudNqXifM9JIBnAruXq0Y3mXvYWO4DfzfHPTyWuBv8XRxXoL370gk83PXQPrm0Wa5A453REXyXTi5lI/JTVRkPlG/9d6gMkJ8CO2NRn5HITrm6NZRe8Z65wWK/SbPgIOD368NPverVQePvb+ZUOwfsVPigxcOXZ/k47JyovQC7nEsIcEy9SzMWOYTTzp0b9sPO1fRJrqhte1fnhYBX1dLnD+9AuH8mGTY/yMjPHCHitblgkAaUiT1vuu/8Qo5zK/NVGhXqz9TibFuQU/MbGI7ljjRyy6fwQaas0QdV96GxjbzIUC6xrsdBxJc451t1lZdNpcYptjkHgeer3A3ofjEegjiOiY+muim4mfgIy5gYu4qTFxmxrta1cgzZ+GdAx3boLLm4FO9EEUQznrQfmjM+WStrLiLUVPEq9qgx5orZbn5+ue/jn7951be8Xz23S9l9vfntYvG1x76HYXmuA1NDT/CdeCZWRi+D5JA4Kl0yKR2tGVCpGEnv1pOOnXG0LTVNkAMsnyEHkCQMr5PDCVA0TSzMJkAXhI11gQkUlkkkKlOt6GSiZIpKEqGVpJKQxJU4WqWxPu7IAsg7EsD6pO/Umq9IKX25arI0Fqbqsw9cX975q48sv/7OR5dfe/fjy7vYQB69frY86aMClJi87+WK3Wu8J5F3hjGXMexJNhU3lhskSBOmfj3n+NLynMtXlmei8DIBeSaJu/5Xof+b6jwJzfc2yvCK8UxGdDyJ7090AvUuxgtPHyPcQN91DD+F9hy/zkzi0D/KXc+7niz+G+CCp3YQ2OoSbz/m6QbmBwsu03ZDu8xhnbsdEkbaJA3vhtxg9DU86Per7dNHZl6+Ol6aK47agCI97ckrGScDbYH+BL1uGFSScyqk7EkgyM444FPu1kR7ABdjsVV/fV3zgyzFTRH+uKlA67xWvm3H9QR/fERobV40DtLWge9uppfrMeJdd19aTi5fWi4xoJeAHXMsbL4bNliF5q5I4W2L/2fdhDfzx7HL5DI26O6wlJ/paKAeEDR9oatHGSBa5aHwIAJIO7ychCubuZOmAeY3f4/l4ABXnLujZuZj9izcmJPboWK3b5k7g9yRMLciNDIRkrkIvVdD8iobZbljQUBioRBlQZ53imninX3b4wftxGYU0yUMKYpWhMXNy9Csm8rQCESWKzTzZNk8d/PYw98Dyx+S73Yp7c7tYS6Prl7F2vrmmj0En8HbOUArC8HJVcOXxe4Adrl1EJ0M2RyYaLmygN/F7vDnasoJZ1t+ZWYG00RwYJ6Y2DXn5QSeScpMFxd2oLa1QxEg5jbYCZuPFobQRYwd6oCuJqoCusiuDe2zizwv8hSOAVJ6OCUtqrzx2BPZOH7hFx9efvWhx5f3XuNxFf8v4bqJnJ8bLKATYvCJfPu0ifY9/GOeh07Ol/+Xx7K/dnZjeZQsf80rdHD3cfX/OZefsXza5tLyfq7OXahanESjMm809NFduXHGNm4Tk8JhnYuaopXB0dAFfTMZH8NTffBk9fo4QdHoFd+kwmO07XINn0+NNfSnbkjUjwE/Rb6HdztuOtfZJLMpAvPC1eu9WAC+LNFuRyWiyDFQaABF/xwHN0iTwmUMdqO5ZHJHVx7VQSWdj++Eg+ao8dBO+fTzMvHj4dxyQt8xEs5g5y7JPKnK0ZdHRcjynZFJL3MRnhpb9EnLYayoWocbSsXb5/a+N/ZuTBGXuHu5wgZz1yVg3r3d7aNDNpm7T5a7AGZzuevycsSdHsO7HHnlDuM5NhsbVFdRaXyrsc/aaaskSB/arDNsm7qYiQnx0PuyWknEmnHJBgkm/6ZW+cLcUJxK+s98y0UV89ENJHK8K2FAHc+sBeDKroMzG6zx8UkmjYyjfhGkuvvQR1AJpLbib3zVWfqWXERqs4PD+Gq3uidnaJ9e6FWKtOGFjnm3+hm/UYUv9bFyuAJDrvJg9qLFeBxtLn0dj7Le2BKf9lVF6mlvJsF99UtfwIe1f5Rh5BmHA4XRDla3/ZQPY8x4OKX2Cp1MwlzKOUiyMsD8SO8EcjDDC+3AHNgoaX4lRq6TrXV0nike6bUnvyXfjnpyNUW9X8KL7vwL2hIMuYmdBZsifdkwm0lMAib5uoFI1bqldo2f86jq//unDy3/8B+/j43jieWR6zeWJ5jQXimrwSt6r4ad/x+Hvn/97Hh5BOZfOz5dfv7k+vLPTq/z3sNF675wvtxDbP/oXR8f2t/oTeWSiYWSP9yi1qZsaGkjTOEAk3PQsTdUeT+ST8FBIpGbqM+sTUvKccF7i5JHNeh2LIyB0awUXcnB5KN8r9ajALo8KopUIk+2L4kagi+Y9f8zd2axmmVXfd93vrdu3Zq6urrdtrEdG4jxEPBEBgwGQRBKHshDpMTKAxERwSQkoPASiaBqIPBiRZYRQSFRiJTwQqIoLwRBiEG2IRh3x7jd3bTttnuseby37jzm9/uvvb8qoby5hzr3ft/ZZ+8177XXHs4+5ys51N+OpDoh6yIzHKL6LjSdLe0BvEX5LnK5/Gb+Hsim98mjHw7+AcgHGMrfjHGt3sGFmth5aIKUcW24soOBFfJWLTMfSAdOzCbgU4IvO4ManRTZpJ1NiecyHxYyjR52/C72zaJY2UDKdBDkG9i0iWZ0YGAnb20ZS52xSC/yOGuhk3Apjf6kLdGBLC6SdslwgWXB5fm2wAxmfhFJAZhx1uKSmmd7Js/QRjTsWxtOTFbbMWGxciW3dzCm0Qb7eHhOZ2raGYHZti9skU7DjoG8acoOmTWPDsSyLG1Bq5ayykcEr/sfaAiIAxc7E93VZcB61Tt5c3Ops8xUFAQ5hbXu0nEodlctxX5JBAYjXiiXtV2HCKAoVz8mcOPasgKLTvov4pJV9Wt6mjVV7PuDUz//7/53R7uvT0Od+1rIvONqe+dxKvlsHK83NoVOJaXiqQQ9xv/UE1+Wq6HX/Txxil7R5eABKZgCD4LkPMLTxKBlOjJY5fccMA5KmPV8cdLoOzGzKY9cA8RrG03OlSmJzFQCnovQxoXvwcXpDV5DP5B21rfbV5+40p548ma7RcdhINulG9hGX2+C52FEFFEaO4e3Hc23d/JDjReZaXxlZrf9GZ/nD3YCH0mg+cOzK+3bZxbbM7vb4S2uDdggFteHR+79KCY8DFjDmNouAYK87GBJXVmM7DKQGDjC17IJSfLMzvo+Z8mNtldNzVLy/ZK+tPxEDs4YKaNXr230sa10GFUHBt0J9t5jcFToEpByzzBsdzNAUQeXSrKa5Q8J6lGe4ZrOMp0EjHJ/h/I9EPdR1mU7l9l2oGRnbbnjUZf1TPsnrrZxVmRnZOfuMwPOpOzohMl/sSsdFUxf4sRtnuhoHdSHIuR1VuTIO5sauCZ25trOw2W+Bc4rfTak3eQ1bCsdB+l2aJltAX+MTuLYPEuVdCTHj9mxzLZjy3Nt8fhCm2cDxPwiXRjLYlPsskuHMu3dMQ5ojbZZiiSz8tKwLFcHfQcIDew6kZkc6Uwos14CQweSH1/DYNJNR5J7VuCpQ2CLlhU1HjacwQBSdEeWsypnIZlt0ElqyCxb2bFb0fa48vaLa6/G7M+sap+UWleCyDNKAKkYnIbvhlJAkUlkjugkTGwjbDiBKq9Kdx++Tg///qnzv/5iYd6/30O3+1bCo0/+5AJ3cj9LhX5AE6eCqID03kpPpg6Ygwo1eqQiLfDfCrNwAkSa/MnRKzHXOtFwiAmACR2myoq/NKUqAzxHhwhvcuUDjYkzCZYoJDjllnl9zxEceUBO9Iy+DGpxrcIrkUcDMa8rMSIbgWvj+lp77DOX23MvrmW0vE9o2qDhudxD6E+HcQCeQSoP5RE9/srBQnvX9Fy7Sfkftc32B9Ob7Vqm367tH7a3zy6088w+Hmdr7ws7OwlcjtoMUKD4n8aaYMGFmpmnTqYPDACmvOAY9jHPAOZNbEOigYz4DC315kI78alRYacZ+mB2JtISxk/CqtfYzI4na+F2TD3oSxMwJSALKGhYp3ZuDqYtk7950ihIgaCtTGSlQyNrwt/6JOinA5MVZeEdHsVHeh7uJtP2+g9hLHWhTF4b2LzPFF0QwvQ+dFO14O1D2OU67xflPhhIO9A66DSluwsPl0d8XkKL2yHtkXL5UTsJY8eihku0kSVg51hCy6666IGMygLtecqduWhDOx71WkBm7eS9pCX4LhGIT3Kv5QRLYCdZCjvBstjy8Tk6l/m2tDTf5paokdl5OhUIeMgbO2qO0ptvaJmHaLFD/J20etu+AaRzqw4kv/MBoLMNOw97vWzp1SbIafuzbdVPNyuz/PhH1nQmdiAoMmPHgSLpMOgcs2SsXBEFWWIjaKo/cIhAkT7hUd9JwQuIikNm9Pq3jatflFLZpAW4B1tZ1UHdya9Zi/aQnjnh89jUQ0vfNfXPfmVH3Pv1GNV7v8rX2q39X8WcH4hNqbQKvjgKdZNgVFXAd1Wo3l5bFFHJChFHX9LnaA2poORbTamou7qn8sy/OyawgesH2cZHhesS9cXZspTDx9YVZy7cwCGLZwNDkHQaeN97GMDGO4pKnwruEo7swey6gWpjsZFLEY7Q0/On2sa1jfb4Zy61F15ez1KKMAYdt9zuExlcSjGgiA/hjMCVyyUSG+IyeSvQ2i2BwKolk/fOLLSHl2fbxk3H0jQO7YkeU4w0bZh7dDYUKFjJRh5ttrZeqiplQ2X1U+aaBVioDtU4hZF2UJBbkiJGXMwWOslz9lBB2yARuCouPiCoox1X9MNREoSoH22gTXNvQblI2znUskjNBEoqGXFQ3gWCD3g6EHnyFEc6Lr8pnrqpQwIJyzn6oEGuaAC3B4yDdICyFk6PmapD1lllBdwluxmC+jyd9Sy7z+JtmHeKZ3PQCHlprvvFpGw5rIcOjtD1N3hALhsafO4o8iOW946UT9ntNWNpYJ01mQd6dWriR2xhSGCfbIQA13tmW/jJBrIf7uwm+M6sOZiojmWeaZE7444TmFeYnSww+l+kk6kb/rUzbp5yZwPukMsmCAM7tLWlW79jFPjCNp1Cgr/yRCg7D3irq/VKZ2IdqySYObyyTqVp55Fnr6CN2HRoBGzv30HDZbg8p4PWIk9Jj7+6D8I1eaEtb502vnDX32RWscX6dGZfZfFXhbCcj8lcBn9cSDNEI0s6jgApg4Oh4Hxg6urur5L8R3zu2+O+7kC4af4PseiPljdQHQ5TdSQOKzhp75IZGJJhGW4/0r3SLU+TsdcRJCcS/pPWuSaHjZDGFOeRR7wrifArUJ0FJ/QijiOhNEmgu5MNOpzTzCkvpwnF4E7YKq+ychRJHN2IYoSBiXykno5Nfp1XEKB/sL3dnvjchfbSC+vAAomNMgKFhssmLqcYdwwwdioZpSkXymdLKuNMHwR8aM8lDt2X+yXgLNNJPEggm2OZYjz/sQB/R7J2THYENnADjFheO1LUzDmgP2YQjswNbMJmyUgYM/qRS2mFZumvjXlSl28MEJoVKAwQ2lR+BvJJ3VvPgBJXKg85bdjWkYEHT0mA0CbaOQ+XcvbKAOUzAm7ndWmrOhVwUcyg799+ZktkKCN51ol2UDSXxExkpkGA856KODUzFYpiDANpU7pk6mqWOj5im7T6aLiZ/CZMCGbEr+xITwYU4OuVvNXFwDXNyKho0aFh72nioaDcEld0npvQ3gbrksW8GXZk+RsvUwwcrD+f2laHWZbwsGj8y4ahL2mLHNjMrbCHyKjdlcv7Pf7MgHMe25x1yz6M8NzcZvs3gln/qKfK0VFLVNtSD20gKTpN71MoOIDK6jjGpq2u1vcs8vBfOJx34bVNZ8ApAxa3cqcTokybullgjoFT7UxjA4O70PBxd6K5zdu0O9JcfssSHDMTOxyI8FES0orTjyS1P/LI1HN5EWDwc0aRstRRoSpvbcgAW3jt5pF8YLhM51G5wFY9+6ZtlcJnf/To5/7xH3E/5Dc6yH13um87kKNf/ol3EPU+We+SwW40ygQjjD+pQNM4r3VqZVjefTU1WBVYjS47p4QXuHuG1WkjMW+MJqQdPJzII6NtEzqAeCJ1fB2Bgji1AWpcDxaBNz8joi4kMkpCHrbwNP7QRgblSClahDayR55cyAkk9E2DpepsoKQvffVWe/Grd/I2XxukDdaApGq79IaYjpuHNG6u48QKwFGWgScFUn6Ym+lnaFjXiUKOrLnN2GYISMYQ19JHYw4yOMYq5fWG7LCPfGVsXcS2QgjLR3k8cuJ63GMIrjjCYIPMHuQnbkfSlumoKC8rCNtpqZciiEHQOCIwxpbgio8o6Uj0jdxrAl5LO9pMEASZGGBmgpc2zMiXa5G9Vozopv2tQ3DiG8Lw8SY44hcgpwRsr0GuwAIQ/CSUP/UgSOzq1/kDh7PLhiEjlAE+fgiu/Ilt4iICH2dA0LBu0+kQ7JHJGFg+RXmUQgToKIdr8NbhrG8boIubh2Dppdx0Ot4vkI+iKjqd4gwd0F177MUGoYFcxGgFCc+k4a+KzsYzCONinhkIVCOzcVFdowVyyMh2k+6Va+2n/nUGCgezzhUg95HQOVvKIb4Lr21gcx+KdNWJ9EM+OpRdrX9nPCzD0TlY7m6/eTsUHHvB+zvcv1lkCe44S2/H2TCwdIydacfm6+l1Bk8qpezlp8XLWkrMMJuPh7ZLXZvuHy3tYb0pTw0MwVB/Ee456pJ8e090jVMftk8enf+Jz0yd/7fP3gN63yTvyw7k6A/Oz7ZPX/5NTH48laOtMZkNNi09tjcniYysrZCMRs22BVhq2oPL3ORNDfVM4CvAFUg1W/LMJ8vAI37wdGIdALoGnBDslZ8GDYb+ECHzVfx1vHIycIpEBUmd0SbqvQYbcSh2mEFfkCKoEOWcXNcSVlWb8qxfvdP+/PHrOBz4vcEpu6NsVk1quYTGYwwxf3L/RRhEcElCfVwSWEbeEwSXBcRfptHZiXgP5c4qSyrkuQySpRvLup3i5OTznyMBesgL3Lg2ECivcho0YgIvRUSE4CsTQSF1IJwUKRDXbbAuy1lu/dr5+DfCrTSy2w3YqgtgxVdnMuRnXXEZ3DANV6lYiA0SaOEnkMwpEA+S1XlxDi1pGCGxl4WRF1g7SkPUAUqVrYXH+ET5BFT1Q4eogA7ykTvkopsS20lpEyU+zHIihUCUXwrb/6SjosoIX+3gPRIzMHv4BZpOQDHrZrDFyGhk5nC2Iv/YC3z3PltF8Vlo2olOMxqJ39uRhB34JPyzk9RO8rPj0v4+m2Ime4kcyHMNgHYB1o+0XaoKPDZPJyhd8aHpw6OSzcyIazZOhb7yTrHdXL/TAprVagLUqpN58mt2HYvFPvvMUiwz347Kzy6zzB2fb+I5o43do/YSr+i5MsX9QmTdo0M5wazkEd6M8Mgyb0dYWWznTvDc0+mlNs0mAnrEugkfG0So8Fd+SKfeTSqY9ZKkMpOOnBYIzLV1qp94XZD36BNMu5/D41O7u795dP7835g6f979FvfVcV92IIefvnweK31IO2tYDZ2WHCtTETG+jkraIK0XUzv+WQWpE4prrd4E2b0CaT/d2TpdgINnsKNoeOWYeqZJSlaeEg7+wOVsnpnKKJwHsF7XlLRnImeCCpcGZtdfexgFQRoWKHvBRyfzpEu5Mmaq7FUiEGy8sf3ktXb7+l5GV9tcG50MTNuGT5S1E6kRvU6aVV7oFB/l2TQPHMfBBqFZhlrZNopILv+ssmxza42tvC5fsD2Y/iWNX4m6xSK9KicR2qSh5hZXg4GHQUx+jqizdMR1R4icXmW5CULKYTCq+ImdoOGzHeK6pOUSSm5CgqNv2KlZlhfumQfT1HMvdwkkDRhC6gpEyk3rPf7571fdj0Iy+BvkIK5Jo4cqpuOUDmWlP2lnES59wDQrWZTFHPoM8nlfw5CdAY6yoXt06PRgyr80S65YAAIG4NDhy07XDjQdp3AalNI8FAc/RdXI0dtrike9q3F8jkLl15bKxRvPgMemkrICSaiTnqIeGdqgqLD8c1AC3Kh3bZeZWtdTuV1GS53YcUHjiLXTzHBRRvmtTDSlE8FeHS91AH3tLR9lVCSXWL2243EAI387aCY1lYaBy4v6c1aeKJOpS6Tp/MBzMOTmgHRgpl3CIt8Z4zwbALytxGbFdvH6Tnv2+mZ77M52e5yNJJ+9tcFmA2YnTK0egeG7Txxr3/LAsfaWc8vt2MlFtrIttiM6EwU1BthB2zaiM9elp5b0T71gjr6oRBlnYcYxSRcs5uGQZhJefmh6/+J5Mn/WkvvpUJ376jj6pZ/8MEOEP9SvNXQ8CAl1u/zCHBWh0JrWcxSw8mwUXHsk0MZZU3WpsCohieMIZwUGJBUFbT1Wh6WSJwewgQMhouTL5mPlFlQcYcgJPK22nGUACCZ+v9aRxqi8pIefXoUwAyYRS/mCM+AVsMshOMPH6yxd/dmnL7T123v1Kg4a7c7RPp3CUVsjOOzTRn2WYQtruZS1Z4yDhpaSmqo+xI3hj+wt5B1VPnD3W3Pr7QtTO1nDZxLf/vrBsfb3T620C7yy8lNX1/Jwmjt0HFhqSYO9Z5dH3NmlzPLQQAaGlMekfFFPduouIQiUoGg2NBLYxFNv7KhsNvw0OGiJVwsQQhfPwMrMcvAGrwQP8hKk4Rmde8cBSQKVFEoWWU7qREnQK32Bdak/KJ9fHH4bLPgPTgiTruCOvqIAY4dlIvcKBlC/HvaZhkl8FkURtdMeuFIxLU0CvQ/ScY0qUDMQl75FS9uJbxvQh8Dz2rRI4Hh/xs6ojtRW6NpJyBzw6og4ex9BulaAvC2T7+jADOpyE04GdtxaMwMurqmm1F86A7C1gXSCT6amtK5ioyGv9pKTPCO8sncYactSRbrnei2Yx0SOyIpfUuDDmvK3oygwzvoe0V0qyrPI/Z4llq6WWco6dXKurZycZ2PAfnvxxY32f25utE8fbbXLh2yARyaJzDPlOcE9wXcyM/nQ6ePtfW8+1c68Ybm1U0vMSGhYkVtuGrUObTJ8UrPFjQaIdHG27skTrAxIkU/9y1bgiQMp/PAjU7/wHz4z6N8PZzS/f478LO3e1u9hrNMxIKJZHXFoE1RSbkRj3Fg1DZV0HMUaAp48DV7LXRLQAbuTB0BCAa3gpFP3ayusbiiKYy7X4WUQstCcqtge2ZIv/WrMIvBRLvBDQ8ciM9/kxZFCy5xqKMLZCAvHbNI4a7CkY5Zf5ngNzd21zfbnn7/UVhk5eRPWIJH1Y2Dc4unDbnt8XDLxeYRsSQwLl05wXHk6XMKR30An4tZOt/c+x1T+Ap0Ts/t2hkazwAj0nccW20n2/T97Zycjb+1k/678jvaim9J1GeGWkaEB0tBnXWqTBHRZRlf1KZxhv+gPXAKXekIv7ZcvA04FZEadrGskpBbDgqdchODCo+octuTVrEOZy34SVabJjIB80cFKsAwc6dr2WktN0RJ5gBAQeOxnpfAxiHo4y7Dc+tG0g55yufYQW5GupasUpx4sz6wJXNGiJy1T3c1QB++XcApSfAC+8S/0yDIoZ+HsOMpOhZ92BJ4BfJbRdMQqKoin/NYW9P0Wn6zwoe503dSyozUuAg4FbSseKJEx9xdBtPOVjnj6c3hBJ3Ka18tFFF3ZnGlmea+gO295gCCNwBVs2JLrQMVZlHrKw/ez+eDnErOLM8dm2gMrc+3c6bl2hk7hFOllHo6kSHFzL2WbJazbtJlbvEj0+tpeu3xzp924ttX2yXsAnDfPs/1447Bdgfomy30O+DSB+xAv8W64Z2h7F69stalbO+0kQvnw5RQ34W0XOSI73OqfM7YbZQCMOsmAkXpRrkld9nLpWC91ny6ZOvL3nf9bH/yNR3//8ftma+/9tYS1s/prGPctWcvG6GVozTsOjG1FWCFm4UA1IhzuSm48rlfIBM1Kgp7u1iszDUXYavUFyaVOnkMGlntwrllNpZPnVwlDMY3EKQw4kSzCFaxOErC0KonTmdkSOHQa/rts5sBHEY1mOJZj6ruOp3DoQWTaYoT0zJ9cajcubrUD1m9dxshSBhjONIIHVVM7nb4PESqfy0pGiRGMt1kbuM3a/2Ia5GFbNFCkwRy2DfCfZ6rxNd7M+/2nj+Vm4022b4o/DZ8RSKRlPRg8bNzKrlm9ZwIJ//nyG9rQP+KegAEtAZV8l4PEsdxZpvrXMhfw5Hq4HGOA1GBZquIsSbNUKbYpTqFX8ORDVzvbiaTTtK64FqVGwSa6bMhup5DRO7R8riKHujmkpY61aVUPdDVpRuzaFX0kpVwoL671kF1koKY2ZONBmZ14VO52cHYV70CWaQziSF8PGCilHyKIJL2ukzbPkiayhx5l3jyvGQO8gItMUHLHHcXBtQM2PWwYmuoL+dDjnACtqyIrw+zcM8mgg7ySC+4SsLLF5T86kGd5sqxLLhAjswPdUOzeAigANg5AtuzxZfk65LOWJD86Gh0q/OGn/hEXeu64+ksP8I62RxbaygMLbXaFPWhsI/btAJkF0MMc0k78bK3utTu3edP0rX3eOs1MnWXZTe5Frm1NtUsbWzzjstUe4ib6dy4vtunNqfZ7bCu7goz7eTYKnZDJgdmX93faxQu77TG2z3/PuZX27vecbdPnjrdD+FbdlZ+VobRG6aHQ8T4VwzDpREpTIaK1sLDo1yhLWvvRMN5yuH70a6Q+aun9cOjz98XB73v8A2z6czGuxuK4N81FGdx8rWkFcOSpUtKxb75xvrJ2yu/9msBYicB4nUP4eHvPkzSfBCaKzA3J8OkwHTkdhC3EUShAuUkd2QrHICOjauTmdXwZh7YJUSs/jiPvBLoqq3JcF2KbOOyTn73Qrryw0fY2fWmia7gw4VwvHMRMEMlrNwhG2zRpg3aN2KULNfJdbzdp213h6zTX3mi8zY6e59h6tQ7/epVHaw/ypPqHHzjevr653W7Ay/Vjt0q6rg56Pr5mHeoJINoBpkYy+Nkoqk5Sb+AGR5GFo3wEzwgElSilSQ2EZKZDNeIA68l4pZ3UIM/fkHY2YeMe9ehSottyxwwJ1KxRh5aBVMPB3/J0LsqJ/spi4AEcWnJDDvPE9wscyxTdDiUzB9IGbIUirAUuoaDDSk1wXSF2EdUk5UVHvaxfWTJLgJa8lC2MhRZBKuKQGjMy01wlz5SzpoD6Tdq+sYJUlx/IbGjonUx6zFd7AABAAElEQVTBliyiONYuudSkyxmZkB6bVedUnZ+6u3qTThd5bXf854h9yUv7iHT6V3HLEiI+ZxWo09BFWQUV146GvgSTQjd+JCx2VD/yYgVg55Dtm8/NtXe/d6WdeOuJNnPmGFtvmEEQyMPAXWC+hoWn52dWFtrSGW6In1toZ07N8yAkmzN4aaeOsQszZ/Du8rrNb+DswP8s9l+iji8zIljH6xwkePi6mGPdV25zM/6FVSYEt/fbORxzgYcq2d4WOQPsl0YRl3NUHgVmkU6c8dzzh26xIXl1DqQu9p7zH/ng1x799ONPdPDX9XRfdCBHv/jTb2wHe/8Tx+AxAwylrTS2Ro/huaZiU6aVU5EA5dydaVg/jV68blec0eSkWUk+xXdzq1q5lrfQkYE0tOwArGDxxUhlB06wTtszH6+kXXQ4gV8Pc1lGc7TF1H+dgTXkGmvVTzy3LXsNWI7wljaEN2+ttcf/18vtKp3HtDuGaITZUAOQ/O0kfPJ4h4bgO5x8p5OzgHqAEHKkD7SHOlEGp+jjyyceOqhXUKzD+yqzjls2JlBcUz7N9t4PrSxn3/2zrBO7xhxo6GS2qCjQ0x6Rm2t19Slzkzks4GOdZl05l2bwgc5fPJKNDBWYldl6BpyO2kBTI2h4SELbcWir6owMvlocPPjFrpxr/V6bC4+sEEpK+xFAyvfI49pgeK9O0q4wLb1iVvVfdZ60xKBog68lrpr1lC4sYyGD8qi/QdO0n9hNIP7tzMQPveET0E1w1k+UG5zcH0Eo4XKQV4LVKfcygNVuqYXIVjxAUkwOyzqW13ziv8hmx5AArizy8aNu4MpK+Z2U2cHnEFfyfPlxBqgM8TLZWSZsBtS5iGxmSUuimV1JTFqc1Nk8LrGJynd7SUw8hDzH/Yv3vXulLb7pBDe1ERp57dhT7947Al97ZUlbCbj3MU2HMuvS1oOL7czpee5toAfOvo3C0RkSO+C6m+4MgxCXH18CwCUsZdHH5pBhyTPXDtyuMLtZvb7dzq7vtgUbJduBeWIytgAkeKOuomeMCCPtBdHhB72KoYysKdY2Wk7OgpN52L7//Hd/8D8/+pnHXvdXv98fS1gHWz5tfiLG0Wn4q2cCNJi1S4QxX4Py5xEHsaGaNksnSWUIKwSHlaQDmRG6lBms0igopo5tGMPJCiZVF/R4E447AlTY2Cg6i1S6lS95MXRe+XnuRzrB8B8OMBoVkovH6EcxEY9DWQdinbWJFtld22pPfPZyu3ZhmxGQJkFf8PZxVinXE8XOOMoOmcHIwo86aig+On8aAjL6Y0/irXNPYZNR+XFKT6LbGTont0nKY59GdJ37Ilc2dto3sVd+5rZSEgeQi7aYAG6GcmZ5hzLL3cKo5LEFfMyLzMjuVk9/IMhlHANhqoRyD+8n5Anj2FD8YRsQaWnSMLD4MsfMOiDsrC/54CuDgS0MoT/4imPmZClMSHrXBOzISakGhVYatLKok3mczRN2Euwsz5AZWyDTONTHw5wafMAHHcb9KZKpa+WFbQ5htQWLRDKJTX3B4RixJ5ACA0jxBG/CkoR/SJigX0ShgdyS956emxEGL5nH31EobxOgk3dpS0NrIu2NMQmKxcTOtBy+8KLUsEtk0t7wAC/3duQrY3hqLxuHkjhB9SFDbWF7suOKXsBaJ0JlNkjZXV8iDeFoSL629S9+3Om8kQ5g6RFuZNMpaBRVDfNRb/YILFPFH7HFoQ+EeC9IGbmee/h4O8us5NiptXbi6+vta1dZ0kqbmmpbzLZ9cPKdM/Ptq9Pz7esH25B25+JB3tqgnWYpd0Z+gHJfYtpy+OJR+2usDDzITyZM06nNnF7OCxwrtiELjKtNxNBD2uicC78woPIFQj3UWptblrqaorc88in1Hzbr9Tyw5ut7HD36sb+Ls/8rG5uGypEIwFV5g60mjhHHDAwFXPgXR+hwqaSejv8IO3ArA7xqKCP4y7MqlwoS3Mrrbmh+HD6iUVgCxD9DelwrNumMdCZ5Shd/mdCPbtAeo6lcA+/I9u5T6qWb9FQlAZYG8IU/frk988zNNkvLM7j4uxneSLT7sDF6duaR15hz3gVfkzrqVS9vqhsMDCwucXUzxUnl8SAPhThdV+p1KuMF3r1hZ6R9jIlv259t3/7Q8faFW5t5KaPO7ezDBmWA0W7q61dujHKtXJYnMJu0EHCKOkzAyeWPzHEzWrTgcSqJ7sKNfAkZCGs5RjjjB8SHSBFdiUxwGFxIehW54RcrkKE8iuYHsMgS/4hcBLaBw9l8YfyI4GtV4iMQ8U8ZLMrAQaGgqd5dtGQkrgaKYvyznqugSCDg0+Gb5iJ0QrtkNy8yUuoR2alo7Rd/JS+yc22dxCaSVT+JR5r6ji5kuSwV1viFtLN5AF9xBuG9qGxPFbXQQ1+fqZF08U4F2GDBC2iXJ0goTD+l4W2O6dASRAEUNrSUkbSHbVra6azNSGwoPlIvC9MOeKL8W996vB1/I7uhlIdeKk/YhwhfKm2H4UiHH1JLG1NB77pvcS/PYExn4mtNFulETpziRZGU7TCq4h46xXSkwPj2BbfzXqNb3aBt2Kb0oVMIusxIy2r2S/vfpHx767Cd4kduZraYras4W+Dd5l2rFNq+DqzBxbjqedrtnrzRyVo68QVgAPnLj374g089+tnHny7M1+c7ur8+rLHdL3/sNNb8ZBwnDtCdhFGDhtMpPPRLL2P5fs4pDls4ARyGt04EkKYOI50QqMqpBobq5oMzHLKMYXMnP07bz5zMSlVzNm7qLB4GZ2kXy2BGXqFDN3QoDTi0BQwhzylMg9E5iia0pC1Kp3v9pdvt2edWyeLpWdZXHVdLwsGVoz6XqOp1JQQ0GBjQDnFk08pmEDEQi5RnADjfO3LwJuJ6YBXzkC1wNA5esOi6vCNly17gRrrT9bNsfUzHgOL+cp9q2Zisr9xvoFHVTdgaUU52wwFXgZgEnV/ZukyQ+iA7dYFsBhDtGi1jC1LoUDfPDXCWVbkPoiUQkpOdVwYe5FEugawRVStLK2vVlXYRyk7Lpawc5qWcQJoM8hFGF1In7S5hofUBZxUGOT3Gox4yTSmw4VyMyRJOmurkA4JiyF/75De/uVbnDC66cUp/cIDRVWJL7BB9zcsfiNggV5QpoOUys1x9DNAe0a0UK3gzuR6+rK7azsBZf0HiS5uNv65XdFJg/ECZcIppdvNZKjzZ3ZbKYRpW0NU53WDg7CRyUlo4FAnIYX1JIFzNxB5pCyFUOiFpbDLuSwSIirJjEtb6UZJ0Fi73KhCdgXkJxApkdlUutue5EJ7xePO7TrZvecNiWyHoy9dXAK0zW34bur0jL4hBXxDX3C4fO8HTjhY62s2HOZ/lt3Se40b9HXZ3rb203nZfuN2O1pi9cL8kxij1FCSGSZ0rnwfntH/OVlUGANDspd02gCE/Vv+VxNAgvj5fmOj1Ow53jj6OER5Oc7LisWc5VXemeBQQE+uVrFmysKx/xInRLdYxOHQSn03wKk5CIo4pH73LmuTfCnPEFwfj0gPMugyCQB7iQb43wEDBI41PxwVidCY2aHmY572Lkg86Ekgu2MpBUBmNd9JApKnskYHXNbB09dSXbrRNp9M0ur3d+kizXKwouk7r7inzdTo5WWKjjZoIp9YV8KpMCdOYkPEmEcAdXD7jcZxGvkJAcNNnmfOoXeZnbp+/sdse4OdhEwDAcaTqD02d4gMqSxTqCO/oyRn7y8/AZWjJoWwIcndkjAwUJGiBnhFvtyekAqfJDYLay4YafciTj7/B4RjQ0bIdi7Rib84JUtKizE41AV7+nY907BjoB0lEdJDqeZM8oEa2dQYKI1HrkWKysiPLMglw2DHqf9nOypn/yO3W6tSF19iCCy0eWwwZJepAYJ+tpdK2gzcIpdbIt4NTtwgNYWEU17P8rV/1DE/LHPFiYO+lyT8ztG4zB1OKLLz3g7SD/H3Hl0to0tBJYms7E5hY/9GPgnTQXIcG38rot3ghlWtlxG9AlL+d3ujEPKf+AHbWY7+tfvFl+KmLIvjRX7S3tLWZfuTh+8QyOzFN2eo6Ny+wHeKnnVufSmVZ1tWyZMUFD/7x0Ec7YoeVH9722KZOLGWGoh/5526wqbNL7aF3nWBXF7+NwqxDA/i+L36Lrb33iJvvPA2vbM70b7LZZJt2s8+NePXyXoi6uOPxSX5T5ypvcNhc329rV/l5hBcZAN7ksV13MVLukcFt6kS/uHuMdGKC2cg3iW9ewyP2nmoPt/WDj5v1eh36xutyHP3Cj38fnvwJDWFgiCNqxtQ8BtKKucRxusGt5Cq3aAIQ+fMyM50s+JaZxPBpahU8KxNeOmrnU3kBpmKEr0aelmM9dxmUp3CqMiM3NDLi6eiRyShGYeCjV0ma6I0jFg3JQidOXzzEsbOJcyibDDhe/vKV9jQPDO4YjOlEiOMpqjftGkxwXOBtNhDIrMNmOJa2snQlr4xSIQhpG28OHDGNmkxfvneWm+WjcawRPexMztJgHiFXnOf4adzL/d6F9rFRv4239X7o+BJtc7bdZKnNjpF/o1TxgIajWgOpDxCqvzc/lYAsxTHecUGq/hPYNKP65ASccpounG5TcpRBmgnIoaddWZuGRxEERkwQNe+ApbCnOcMbErke+cKrAtTANRZhY2mY4zXw0jVP0QPvgMU6Rx/LwouibG0GSFkzChc8jEqvLCEhnLTlpzkyuBAm7OkkYehOt1ruEk4g8Yf+kTR0S05FGoGm4BOoQTK4l8nhieLyV9dhY0t98rs6nHACC10BEt76ssUqgP4vnpdKYFP1MkZSRg4f6HOHX9rKaMvKLU/+Cr5gvch1vwwXGUJbspYBkXTeFgDAm97AK0B9zQgE1dEKiO3hGx6pExC9prNxYJMlpdCTIB/QwpfkDO+/WqRF3bmxx0862xlyGwWc09wU32aX4iXuCfoyR+GX0CuvuqcjHJskrCN3Qc7RVn01kPehdvkxrKPtgzxF7018O7d6jVHpFdmwjfqGMPgZ3Hk5PjLkys6kyhBsauo7zn/PBz/z6Kcfe47C1/x4XTqQo3/z00t06b+Dtc7EIbVLKlC3xKDUmM6Imcivmp30wFyL45HvXp4Mv1IDk6s4bbIrGlTdCAONVF14kTaaVysKkfDW+wq0nA9ekQPGQ4YCyDd5kT6CRURlpYFE0KRFTKV3R1c3P+YXDdOhjdPtrG62Lzx2if3qe7yTihuBOOQic2oo4KCMVOkm3CkVVMgYqNx15UjITHVyZuI7r5Tb/jDAlBlk5KWz2wAWKRDXUdVVGskeje04jWOFxuiPFIm7ye6sPJQIjoErr4hgQPVNdDDf9tBSHqq6wAwpI0kjLP9dkFSLzSMzEVgnI+XKaUD2IlYPmsHLwG7Q1arK69ZhZwYeuY8DjHiW+x8KyC1cUQtoqGapi8G5MhjwFEEYeYucLbPJK3qO0KtzAk6e/BeOvoI7oJ/2Kpcxz0z4cnI2hhiB8x4JySBDchApWtBNZ85ZPOsjb50lrQ55El+9U+MUS9uP9PhSy2xE4Oxs27fiSlh5OZEGiISdH1kWRPfcY7EcvOgGzL02MS98pANeR4WWwVRnSrLySQ+ZhLNzkp+eH5NIA5gc8jFw5hoI5dGZPTpQOiMuKSKLF3oKoFr4cvFRIDlxUM6YpfHsYDvzMK8W6YOGu/qX7GHnfQ+DOAOgI6YTU2zVNe0ThqFmhYUmX6TnTy60OWY3N1mK2qYTUSNnoY/wS4YvM2O7TSU7W7QdHKcmbCPRCzIJ8FxvQmplm91ayO+AbttntuxESE/zi4/OjI11pax4keCufl52ewujHqpedcWV8DrgVPuu83/nu//9o7/7Jzb31/QY1feaMm2rW+fZNvn2NHzMoqPUyAHDxioxVWQqBzeYcKnBsOBIGwzK6EVJhFwDNypDv7S3dvSTQ17QoE5Dy1qRd5EWUUZ1hGXn53Q7y04iQGsyOrBGOTK956xBe1bRQtiMSN2GIi2BPUxDR5oAJquEogjhGBO2iy+stis8/e0rRtwt5VRae+D2iGlgwnHJk2f8UOoo7p/6TfUbfLqer/7WcWeYpvsakmWEepBtaG88nGsPs75r3nWwrkD9DnDePEyzQXEbvU47S8Sc17DA2kn4htQ7zFRu0Wlsbx20N7NL66xLDMqnY/ezJk3wj3zIxbU1puZ2D2kjAOV9TQJjkxlnKfCUjz6R158An8EFiDb7BFbg59DTa1FdrlR3xM/yjfjhpfysa0vHoO2n+DtCzji46hQi2bXUW0agoBUfgUb8EcRsxSXfnWwe2tzRmB1RdUZVD6ZDnbMCplPChs7B/JOuvx2SwAu+5pVH9FAf/sKBrxJJAP4FVFb0kIYdZDpOsuNSwpCYZiqh/plNdD3KIkrNIQ9sZn+vvTMogF74Sre4Z8lLXZzpK4d+J2/tA2pkcZZhR5/fayFLepYp39DBWYwKxD9I6suQjD7pnKqUPGRQEeVTNu1oopdXnrc4DttXvrrRNi5txselHSTx+ci7evnKzkqFDxmyzRbxEaBkq3pFXmWWODfoTz7EkhVPmSuDZPZAmGPE9q6peWbstrGptkZjvUMq9xZBAyw+a3e+Tdt5niHc7Q1mLKwe7LjVd40HGC9utIOrW9zY90Y+nQr1n0ah6F1HUiUHjM2yKPWvTnzqsEwd29t5rP58z3xNT6/5DOTo5//pezDzf0Jz/CEWS+VUWt01jvmeOOcShzPqYDidKE7BpThp4DhuORfw+S/8dByhJX7RM9BLVPhJJyAv+eCwkcOGZ56NniNB3orsPHUm4dIBSDfXsi4+FOWIa9IylVEcD09cJeXoBW+oHNIJ+54hcMgo6ekvXW5Xbm2zrRDns+HSi8zh8Ant8AhceAczMw9HOgZTz3JxhJ7ODQHkcIyO4wwdx4OE30XSOmNuwnPOPQPgncHQDwBNUCKQD/+ODWO+FFJKo0a/U3Qs59gKPEdjW+MdKNdch1cO7Jd7CRCQlkdspC1Na6gYhlxtju6zdAZp8CkqmbVXtogGny9kdWRqx2ZvYZzJzVTOBhp1knbq2MLBG1g52+hEzdJV5DA/JckjK7KMSpNEhUo7CIKs18oOLbG8fxMYAyg50tZmLt0k8MVm1Aa6GqDTGSJD9EVeX0CIUHVPgHJ109ekqehJk9RUsjXfejXI2vFk0BAe5MM8+ZQLP+zhPRjZlNycQxoYaMhDPTILBMm6IKuYhae0yIdm+ZN6c6Bk7AG8nUDdY+o8O7pMI3enI5r6OEBIWjyulaeYchaWkx1iLcdFmuRhmuCPGCD9rR38gyD94Fk2fvDjZwJqJ3sIZY6f2VHc5vUjkRwGLGXZe+W+FaKEHig55K+u2OwWb3u4vq3/kke+cCcYiHz9iOUtOw4rGqFO4Lf6enl+DWIcJBxSH9x9yYOH2tgHFX3tis9xzfFAlctlcRg5QCqVG2Yk4QXLHJWlPmUA5ctqiPXvcdi+8/xH3v8/eMDwamW8Nt+pt9eGVXGhqj9BpWG1fqB/KjiG6cbolZxGbTmgunQCYfcuGwMZZWDSMbWwvZIttjyHJxuKtZGzGfUR3vyaCfQ8ndpsW8U9RyrNkoD5xQG9sJFQsu7iCD9GQaHnNX+u3Ro8ymm9llC05Rt8RjVrN/hpWXZx+HsHdh7en97FalLXsfhO0BTe3zwfN1LtPCSn88ahDd7IeIJZhrONNx/NZV3WIOOoSVLOPtyqmLVc0j4kmOAKoT2WzngDFmu/9eZe78XkwUR4aH3Xfa9BZ5NZiCY4x5KAdHzb6gLXOlhpzZlrdU5gjwaU0/i8ntGOlOX+lDiagbPHwLetwjIB2HJHjyPYGXR9uCt4ICoboIGXrnK47GW+QXC8PsN6yGwAermpC1KVV6egDMpdNMCTKJ9qtywv0Zv4HICdgB3mnHT8wMMb/KbTaVDu8pSduM8kTNPpTlOeqZK6G1AMQtDQp5QhNIH3rWjKaN2GFmdlMgRbt3ZoubULjg4iD+XOch9149WkM6f+pKHTZjYBoDpFLmnCX1w/qTt9lXTJQ4ISOx15pzMCR0vbWUZO8bsMyqycoQOe9lWHUEk+MqincnMMHUtf8hDMGZD3smumBydsGD+QatLA0C6+fmm3PfX51bZ3nYdsBSiSpRy85CP/KX7zY8qb6f6GO89rHPILnkfMXlwLyz1IDDjFACh+6EOHzETEUxbz3HnlMvI3s0tRuyNCW+VG+m3aoD+6VjTqodE98jcYjl2kbJNOzo7DVbOtbWYhPL1+4+XNtks756lFCJWM2iG1h43RwgsLTMV/s3RLWpG0axIY2ZhK2/qEWa/loR+8Zge/MPjDrNX+yxgIrhohBtdAMRR51r2NiNJM09N6wdDASmp5DEqecKNFFzELgc1F6IeOefIqCqM+Uj4CgTRtCOEhvvwozHpm6JElXz/SEr7nC2d1Bj8wwCYPjh2nZLYxy0P4uEfwvMqr32mskZcRzoWv3WhPv3iLp2MJ3hhllw8+1Y7ja8Wp5HHEO2Ry9OMhr2zhxbvtqU/zYkYfEvTIEgM4hgUDQBoVZ2cdwe9yV0dEPkxvEAVd8/UBqyWCnNN3wdzWCzcoTfFW39l2ksVo1b20sdd4jVDqTC1rFFliClv2ogD7CS8Nl0M8q48wBrLYF6GEN8gIq+1GEBLH12LII2T4Dg4mMRjlJ2ItASABUAKklUdu0VG6wEcu6XOd2U14kqt5gRVeUxcv+BiYe3C1XFp2RtENu+vX+mHkNcqkXNlDCf2El7dBUj3KjuXT8pJx6T3OsRCkLCp50UPS0DfPWaOdgzKL49l8j3QM/UIUfShLUJSHljDqA0HL/U5n3PMlJC+bnPAGT2mWXUoX9S95gKFcOh62m+q0uDATwdL53AMT2v069UNGJFEHUplJKX/Hty484sMmcO8b6wTyi9tthfQxXlVSz4UYXEFD4CPuO3gfhFcqlNx0DkekD+7stZkTtJS8cRHt5AH/w7VdXhm0xT1IcJSDxjLeJfcAul+gXfiri872lcvfi3fze5azlN86gJQP3S5ROb6YVEK2411WE/w4gFhka/4smwDy87vQCBK6JmYUaQUiu+siTGwhPY+iS+Jtj37PB77ILOSZZL8GX6n/14BPO/qt89Ro+3jNIjSFB982Nk1jhh8r2j9rUTtRUWkQgnsMm5H0xqGIoRUbkhKY9AjuSQsLPYN6aHdmsvAhqXi7pI0OHsJ1PmJMyovTRIY0dmCTzUl68Y4Q8Us98p2cNGi/KmpTJnPlFbkcJLwZkVy9ssEOELbWUuxAVd/zXorBxjtljnacPg/bZbdVeDE7Nx8c37B7kidove/hTEY66l+/2UAjRjifF9GGSmIQ027q7EbSaghMz4FjeNN2kFve2pLVW0ZX0ivZ3Cu/yTIC9xh5NYSNkBEXckgv92miq3qC475ZArC28mWD8s+Nd669r5EOkFGgAwifWtcyoMVsMgQ8h69K0TDuTprUN4UJKiIAp3oGRkTJJ4EeatL03/Xn6gygT4Zp1/CjGPgG2tBTDup6BKxsGx700QGVjWGxu3QMJNaVumtPOzo78/Fcm7AV7NWvZhfawxmFjyA4E3EkHncBVr4JKOTllSxeg+ebDOQgD18xQ3bgpBN64vKJvTkl6ANUXMs26QzAy6tnUi8AYkcolK+Qlq7OPJFHnvBIx2QV4hu+CNOlsgEjDe0yR4Ydpltw0ynpC50eIKWbzPjIJx2xtrDSBATIGbZ2qZvpyq+fcg1tlxDjS/jsxZv77bN/fLM9/3nu6N3xNjY+Aqzkp3w/1gm2i/CixOiirc8utrm3nqTHWQDCA14hzLvgrm23W/i097syUIOIdbKBnqeZ0b+dhRT6IMVrq0Dcts1wYftwhr+Hn+8Cy3t+2w2eG9mljewz09zjfoiq+cNWt1hlWL3KPRE2yujv+nF8ecQgDahR0FMd8iNVMiRPOEXNwbX+AdTH+fEpXgb22hxI9xodT1/9Kab0b7eCVFPF3cZmxdc6LLmkM6XnZIxNA+gG1XwxWIxEWQxMnrYlL4dn6Xmpw5pJReXMlw5vrqPEVJKOl2Oc+6UnAkYdcq7r0DUtn3w89bSBSFllBoK8bNhBNt9sGo6hAuG4SA5pYCnNMxw4iQ1j69qd9jJO5eskdlHA3T7ScpbgLqgsv8jXNN9KLzk//hbIHRqNgdKXvu1mGl13RHR+6RizHeXlD4ENTgY3vdrtvMtgZ10eeub7kFV2e3EdecQlbWNxZrTBSGxD/WkcLn+dJkpmVC0/4AwIIricY/0kGFoWHQgMnEcdanVt53JO0l5DkypLyrR2TgCGrrOMPG+CHv6lXoCRT+KKWVzXDAT70yAHXWWLTyiH8nH2ns8Isgl6wEtX2e2IZqGbGhTXP/iCmjoxnUEIMOV3lJEGu+qMVJ41AK46MujB0wDOf+TS3tkBBgkJm58On2vhVA03Sb0ombrYOeUHkpSfvJoNSZePthKn53tfIZ0beUWreISOtgHHAuG1jz+X67xQ3XwDs8udwkbBwCELdQVYOns7/NzeIApnRhI6WExdIJiOF+z8kBWs7PyzYgDfsM6AgPJiAvZde9u4yisggENUxwcREL2Bj6tzX4ylVpZTP/fF9fbp377cLj2x2nZd1mIpVppTRvwl6uM0G3Uf5DUjZ3gWhPdpoUR2Ran0DEF//6XV9vzz2+0am0NsJ2VppVHm6XabzuG9s0t5LsQ8l5hvUw+2PwdPdkL7COi753wv3U1e3MjjhBn0cpmO1rdJbPHU+vUrO23zMu++3tpJ3cLMf+jkO7qiXo4MrE1pL05Z6UAerzNIPiLGHlz8qQC/Bl+2hVf9OPrX//whLPbfULK6+bIOfKtC4iy2Qo1CWTkxxRomUOSTjsH8soHGIataA+QX2X7lRpNJ03YEkpa+B8ysDK/jGOEhUQ6jFP95AaKXytdlSpTg2koNNGfxPXpOZJ90PNDqHLsenUfwwgb6ygpcdA9DptR77eWnLrenL95hpFMjGsdQjoDcsrnM+usiCviErK5tvrMC10Zv0IqfnuWOCDR9mtzfBTFme0wCMvqre0ZZFujs0MsT7Gqs0NC2syrd2Y7I9Y4F/NuZLeVhKvhCnMvM4ngHKs+MzLdj3Eg3/xK/taCMiBJeBrXUGRlVvwQ70uqfgFfWlqtSBcaglVkR17KPB3gWR1zhaKTK75EAi29UJ+EosDqnwAca6tRLeGoHaJQfVSCfholVoQgV/JA9HYA4AcV9ipeAqTdghywiZkQOCWn76W07Mkd+BZU+pyzLKK+w/Km77IUzLx0c7Gwfju6VLfnGY+FyXbySQV7xrTIlneMGApTCj9LQlks6Sa6z1OZZmFS+/KVT9hx81DEP/YmLocWPruQ7a1MXMaVkA3O2pn00lx/bpDTz1fPUonQEC9jUhxTwc9N5DxfIoqk7EEXTOsfHxqt57OjVLWEh0FyjyxrB+cWXNtvNC4R1llV9EnwORP3EuJDlOuRW7VBghnDErsf1F9fbM0+tta9f283WXd+ZhpJpa/E14G1bPhfijfSLtDvfmaV+y3ytMCs8Rftz2Tj3AynTj1CA2Ty+xlSqljrxLzLVRV89tjTXZnlrcOKXQiqXJ5VXQi/4xFbmqLcw2q4gqnxq6q+e/8Hv+o+PfupzLhK8qkcGnq8qB4nv7f0Seq6UIcoquIKWiU3QOgYoOcpJYi9ABEgY1Ij1nwYVWCqlYocw3QHFCV1MqlOLp3XN70faiRXRuZazdoBeQSLUEpMkcHRxrS8+vZ2RttmZjwd4yAqAggFfksB44EJJK2cd0hfenLKDdDe5qfbk124z4rd78UmPaJ9vA7KjGX/jQ47KnzM0vjqz1z5H5+GzG+/Ym2OmoFMpn7K7O0R+XntzmAAAHG5PbjmxUjrvVRZ/rUa6yif3Rc42dAO+HYu/cMhzvJiXUnhDjd9MOGxX6fxO7S60ZRqIy2e7DNvVKfbiXPbgTL25RDPsLw9lKo04m5auwiUpcvF3xpGlNbGBI65GNgEzGqJRyUfUOYbC4S8ZMuXhW3fjh7Lpf7ZD4aTlkohwiqBX3f1VOwOh9kba3vtqEzKrijFYggR2UC5xQwMj5lUpMSh56O2MzpvDQR/4wLlmr+Tie9b+EIKwXwQegl6wQDR4u2ykXgjFYSZ1Aq76ycPaVjc7Bu9lZWkIMANnFCYdIaVRlOMrhkr5ZQBhxyV7jjz1T71af9OuxYlDYHXGYV46W/nCr+5j0DrMp9x2MsXuvyw7iqcMsJW1OqUNSjcodE7QsGPITBmaoRc55FP0tI12tj4GDfn5p9DiK9eFW3Qk12+35aX1dmKZJdkT/ALhEgMxZiILPNTnzMq63+bZkNVVZgRr/Iwz77FCBOjLhARn69vZux2XXfIdXp74voWl9jXa6SYvqXN340k+C9Tjt9AG3Sa/wIDqEAP5MwjrdGD+RMI8vGaYKdkBqJJL8Rvch7n58hq/RYI8J3nPr6MGywZ703askUcsrtUzZ6Sz3klbgq1W2Ff/SyR/lM+rerzqHcjR+X/yPlT6kdK1FE593KuWRtIArj3HEGUgrTExmpUHoiUZRerjEpKktnaB37MeKQ0cR0cuep6seRu3IIMPMD1oVAFllGcpAlSdpRpzOXBgoOvZysuSDF6V9pcGAT2LLZWReR4ASDfC91M1TnGVEwzOhodLONFX1nfyG+QDASjKVY6ZATTdwZMtt+Trynso8TzCrELj29hlhQi4NKNvysRydmKmwWXcBykpXfIwkNN4mP/byexqJnB1Ve+lZCmKFqsM++jq8oqdSLlyzVzgkCdv/Q0R13fn+SHqFXgpjyOr6MF1ggNXtOy85sKb8N6DUocECI0EjkY0ZrocUeZWwsqzXInVMUdPZB3c4EamHzE8cj2+lIF0OlTOGVNKD74BoTwzHi6sD1wjBEYQyQgddbSJr/+QCTXBK1yAUF7pp+FrLWgqPHS0cbhRXr7HVXjKFUR9dfDS/tjMdfd0EpzT1UI392bCEzreR2LpKDvLyNOlXa7Kzz5DzT9tT1a4uzSnlnW/IEav5oOtlT3skSm+4jUE9ZXMMrotqAFsFWkYzNdv0aSNhZe8QZz4vLpyre8hqvU8jc2s5/BTYG3AtXaTjvDKWz6jIUCPLEpX+uhNHmaL4zJ4wZf9pW9pBgykDCmz+JGzJ3cQXrnDk+Sru8HP7EyRwXGwqM2VR5n1E2OGg6wSQYuaxxcwWnMLHZbZPPIdvOLkCkM2lwYXwNlxMEV7nLUD4Ub5DB3HCvZ/Ez/KplLeB7FSvJ+hiex49/en6UT22x2Wsk7xW+3tGMM5bOkSazFVLJnfc6QImyEUlDRXzK182PRHjs7/2K9Onf/1/3sPxiueRI1X+Tg8+ATBLvdKqe1eGfBE29hD5zGdiiOdGqLcs94SAyojzhKDQWMYUovpsANX6gN/aEZZRmmSALYMXbTzK4JxeGkIALr8wHEEZ9bAVa7ib4WRLy9wbTP85yN+biYKG1xz6hhimR9d4VGdjILaEDgxgn+KDsR1Uyn6ugRH2zZkZ9GHBPlbPI7ufRBN41JVvUiRNXDy3Iqr3PkNdMozv4CwAc/GoD4uVRkYZWEAl5M30g2cvub9Ovvbb4LpkpVwfntz9hg0bGA7XHNbEZmQv9vJVXKX0bz34s+CzjMDeYBXm+RmL8YSNo0cOtrQOvVP2TlVlSGIXdgBsqR6ya8gC7wofKTje6JK6rJjKIUG9YINDdrGpnSUwB9gM+XMNWXWlzf3yzZQYtQuxdCkrCQrGgqWa/Jl6yg+N23FEBa6erR5ypwOxMjDkc7DhGXIVcts5d+gha58rclaOjPYk4OACbzSjV7Wm1B+e3Amoc3tDJQh/hh5/LI75tyP8EIPkWrQEQqoFuKBygCmhAntBHRoZI6hTNpBQhwOHnSe0OXaTkOQ6iw6nO2c0YIvidRuJSe41IW0Ix5kpKjs6ubuJl8ImhvW5Bm4rStaBp/6S/xwlmY9IoCayiOza2ilrWpv/qQpjHJa97Fftw2xPO1tjw4tN7oByu9/SCny8KX8CK88aX+kbVtjliUHO4qn+O30DdLeO/TPZWYu2206EHctbtMeNljTdUPMDX4rxPuGx47zDBbLVYkpwPpqH5XdZUazemOrbfG8CozRiMOG2m3l61eUKxqqWIruxjerVPkzywWSunnVt/Uatl61g1e1/xAjmg/LIOuaqq4DydUPCvulo+ikdVXJEbiTHzjxdFYr6K5xNZowomvYENXoOYA3mWtLe2DX8gNWOC8Hitf9sILv/qzpyCzQ9PoZkUOp00/jEAy8SNLZ1DtvOgMFNekJJxgN04wdXpX+9O3NtsKvqNmYDOjaxobvRz328SE7AXnFLJByhPsA6wTagte1UV5LXe7Mko5jqGpQdBQxSNlKHXL/BDxFspM4BzWf3/C5j3VGbryJIXXmq06WCQzzRMMEDfKz7o1YBvVdZkE3sYe/Ny2tU8g6r7zQcaruCDTyqv89hx3L3V1P1uPdgFkBgAYMTHD5Vm87Hp9Atpz2HdtYLpyRITvStJl8KEijVo9QIQMad2calhcP4Wjv0NNele/INPZHD+3lckmCF/T0DwO5+WqlDOn0uMgLF9FbnzPoVEC0MxMQu5CXNsG1uznlF3+DT7S1fUjUw6Chr5hGHvOlk6CIPMSp4g2/BODQDnTNIICPLcSFt7QS7qwbZxTkZcMAeqRDnPByoa3soN3dRSVzO0c3FFgYOcynfHSk2is2t94Fosx6jv1E4D9162ABipCbwNmWMjhJPnQoseOJ/YBOe9Gu0Bx+4063BWy0RN4ptuKe4eP5BIOD0zyod5r7QPqu2ugj3qMbs53UD/mgll93gTJwQwYv1SVnddA2nB0n2M6eneL9cLSitCOghNTf/UmEdToRROD+o8QZ/DDzWOehxA3uzcyz5X3Rbe/2HXSCrr7s0clsbfBmbHZg+pR6Yp32gl7FCvnTvqRnHmf/yv8qT0GV1QNZP3z0cx/7obp6db5101fvmDr6BXX1U4durNOWI6B6svHj8qIBOJBiJAMKWJ1GHEgsr6VjWiMPHK/TgEwIpoqFLJ/Ap0Ccji/IqBDp4IwdpaaZ0udQhqS6nKFHOvqAUI208zJfuFxSIq50+Ay9Q7TLYOC8dn29vbC9SSDH0WUEjg06nQeNVFLy2MR73f3kyMu2q9OeAdL1yMw+0EX0LjblZXe//UjHJ2J32FrokoUdUkZXFCjHCZ4bOUvEXwFSHeXj7h5vCj7ADXTfj+Vho9ZUjkp9O+ltZkfXicB7PDS1QgO2Q3J0lfgigqN94AxW7gayzryZKe/MdigzeDhKS31aJ4LBxEZpfgIPpFIXwKub8pETfdPAuIrGRqbUgeFSO2pXgic0bXS99oF2dGxwMQD0IMG1uqdxhwzwlAeny6nPyNdvWbnkZ134n4DZ+RuAlMegZF0Kp1x2Nm6vjl8gk3rkD3wP09JLAIOJOquDnXH8lZP2seLT+dh5q1wkskxC1aGnW0aemX4DV3moPegU/2HbzNRkFHshUZclmhEQVTkyWGDngwDyFixn5fOj9PpVSgANoarHRF/o10xLOaWpvqWjYukP0Z1c5fSjbHYmyroFxO1pPBDdnZSsM5vwhvYWQdp3VhG/2YWID+Nzs+joA99v4P7Cw9zzcDA02qJnB0Tp+KGfwYKym5/ru2nIoxPCWRcUOpBx1n2VFMpHfyvJwK/UNxlUud3d5a7xR1Ge/9hiucpOxNlIBkXUnbuy9nhOZZWtvRv8dPWULyeNYbQMB2npjEP5rCpzhNBfx2FdpD6mDn9+5L0aZ6zx6hw+NIgjvT+1AItUmKr2ijEglC0qbzTGiX1iHRAFM4CkgO4gDQQy1gQGo7jKNLQfc8yEftyXxmputQlTonGGTpp+4Kz0Kot8wQAOGeBSFdHzrJQkPUHUSqsQImDhyD7U1ME0MihNrRdHqohYcgJgLbCmfInthj5PkYeRbHzgV2C1AXGNMI563DZbswtHr8K48wNnhN0akP7ojforx1jiUj0bu8Eoz5BAT/mdkdT2XoCVnz+DrPwWiVROzaVkfTn7mONj3mSUCJq2lf4melyFvlsT/dXE4/AzkOYDnPp4A9dAEHzOVe/yhjO2tYPJLxYqAx+DQQ4YUFT1YQa8LDeXU2SsXTV3R9PKFVDOQsYTgJWideIoWr3MFzbPi1CYDs+ho/hpiBX8h8zyG+4isdSNsigTGRWMheHKjzwsh0nhKQsyJMCTwBeTD63oEr7gaw/opQOyQBzKnHHUa9stBw4bVRelWfqIHUDvx0jX95p51nfzWnnSnjOzg4CU9X/LEZVr/yhQjm7f+LrUIyh0qFe3+KaNoKPtQFljT/xPuQCK/Q6z99cWAFX0yO2bIk5O9wXrn7LQFZdrt7EfYtTUvLJg39yrgN8tf48DPpmNE3i9ee3PECxgG0f8/uia92/kZQDfpVIvMKr3dzweJHAfp1y/Vp5Iaz2ZUmZSut3kfhCMa+MBecIB4rLVFfS3fTnrdxu7AxDlju7Q3saHfE+W8IYtO7rSlxk77XyXFysu8P64OXo3f6Zhl+e/fGvvDg833uJeyD6/wZPBqZXiRyNrB/RLHDKLtD6R/BR5AR/0Cu7h0QeOfvbHXrVfLkStV/5A+Kmj/f1HvZ+gIlEGRT2i+GBpHuU5+okaqmsNE2/GEOaZfQ+tjLSC3nlIXvhxxIBlVw0ZPtBJMJS25cBKOx/SaZxkDhknckM3nVjXQcQBk2AT4YpxKlRaXdYMhcJJh6Ux4ASEuIgTTY06CsL9jwu83sBGbaVME7wdFWWpAwcUTPkcpbrDymBGToIdCZzlsJ0FyKnzHrAuf/lK6Sqrxo2lkFsZKj+zD/KynGMZJJXSRllO2YOxZdjJpmEYUMAEa5Li1CjJpQEaNo1qi7VcO4EzjHYtC7/Bk8CVYEXjiq20E2WmBZGeAS8DDNJmRhYDOjQdQFSQqjJt4LMF2sNA68wspgFcdBuz1wYJZRp0UwZs2bHzRt68SworJ7AoG3/SyBKONENcO5KObpZpkGJosTDOEryXZSdgnv6j7NIRrzoXcNQnNMED3vq3jv23fwGCpHQIqL0O6PVDC00jhzGP24yxlffFptBDxOjOtXWljWvzA5aIQOCknrW/dORUfhKmuYIMxo/MkcJMZ4sKp6wll2l3WsnPzlN5ldrl31iQPJc5nXk5AFLozHoDpS2UAQxpkmebcpkpN5etT8s4q7/G9IFWX1S4oGwA+0r1ZV47skj9LvBBlGyOsU0YtOf5WobeGW5UH9A4LhCgl3juYwmfsnNRHchODtP1uqCehX2qw1T7altfnN9tj8/wnjr0wt3bDVqcM3Jvz6ujOvnM1HVm5VlWRnbbRx4kRDn6DlapbAs8oc6jKC/yivhn9nbbNeLAJs+erPMW4PWrvNZ0n8Uxe0Ho3SNiBBvtJ0KphsJ5xB+Z+duasfXR7PSj+OQoLZhX6BtPexUOfqYWfd8byihQvllO4oWaVEMk5QWOQw4fzqZNWonm0MDq6ObTIGb4JeF8ROt4oVUAggyzhasgcUhcHDgb1SgvvsWjZJM0CEUqYtZF0QykDa/TiRwdICLVF3ilbzwUeKjyxznlHcEWw3T1ur9aY+VT7o3VRWh7D8P37CQwku+fL2gbTmpjgSC24v4F83lvRvruKpeynKVIr3S0cdqAyxGVZJYOx3MG+SQMSNV4yBSVoW4FJxoqRPyUTYDDp2vJB1gEcKou33UK1vhFNm8mnIC3D7hJMzY1YVtQBvOUj//aZgp30uqihRxV1598kNuIAoAN2YZINSb4q3eeeMdsymZ5AqSkhYekI32aEvSqPhEhfGQnfKzARZ6ihoaBXptZPuo18qNL/IRsy9I4Cyr0BfcwYEcG5VQpdfLEx3yX7bKEB24td4glRTpO+EcPruwQlTVsIeIWZvrWgHqyIHzQ3aBu/elKMoydGOXq7w5EwlcWSipB4bhWvGQz8HCG7BJXZi4Qys4/4KQrjmcHRG6xLfvUgEJeyhrPJl2HPE0pSyon+GNd385B3l2ddIBFwzqmwGZAvUkiMyXl5eO1HyYd6dwWA0hw9j4CeOoputfCSN8nvm0XxpIV8lbQ7cKub5CrHXLpcqycaKCnJAmyyhcRZdWD7Fj84bWbdBgb/A76qI/bLKHt8Bn3tUrWo3aLFrxG52Dn57uwvGm/RcfhTfsdzps8gW5ntr1w2D7LvOb399bbk5tbbZX8W5f59XV/yVCbxi/wyxJECZOOrMoW8XMVOZUj2lvX/BZWIyabeKWPxJ9XkiiP0VP1a7/FVPPBNAaI62xJq6RHKaVN6uA6O6vG9ThrrBxaSPfkL0iVnhAYhIAfGAWLM4R5N3b46ugcksxXOXdGgdAZo+HiyzfA4ck5ZeDclaMT8qR8fkhO9JWeAmWUSfPjOoVx64yThOafyl7bab/Pj0f5AN63LizimOwXp+g2T9A+ecgr3fFU13QlYdkiAxOXnuSVURRpnfursxSAd4opvQ/3+aqLCizIrSzKVKfgWuZ1RqeKRzrw0HIEXXahgYLnctk2jcfOyWWycaPwNssCvsrB5TMfOvSVDge8ldeb8T7JtMqSW2YwEodmRu7KxqWN2kavCbwe8kVYeNqfGtCCmmLlJ19DkLJ9V8AWFRvwUf7MCoBLusNrKwk5KpWPlSPdpD11OM82VOFTZ8LCqOgXH9PBFX8QBswZnkxIVr0IB2BxIi1MgZiZ8JfZiQglgYnyG66dERWjroudWwDAJaF+kTs4nQsMtUNu5FMuhNc10yxkBw3Rp7c9ZfDaWBWbma/sdhbCBl5ZuCY/QigzCqVDojzco0fBw7ZoAAa5pKXpJ89ogKFc0s/ghGvDXvTBSMWzZiVApWPnFHiXr3bwqxNY8Jiwyq9qfNk+soOR3neLzkO/tXOsLs56CRj3Lg7y/io7aeOEapVi1gs2i00oqwKuyxba58UZXtOO0zqTLJuAQQd/GjpuivCQnDNQCZ/htSfWV2xHvvcGrVqh5sA7tTDfvrTFr4/u77QXDl1qO2rLjMq8h3P8FHdt8tyNiGU/aWo7mWivCK+ekuRwNmexX4pD8t3nP/K3f+3RP/zDLp1Q3/jhfddX+Lj0UervnaMiSvihlgaMMuiFghpUAL2Gc0bzvbeNTQBOsNEwGCQOKmzSEBJZehrJSMKRyjbZy2LwpMvww8STwCBOIfpdtMyQdDe+MnPBF66TM4XSxMEyFE9eUIITekB76NiJjkQtg7Gigcinmkq1EvKZgWwyZHLQ49t3d9DnDmffMLtMJ3Adp9KpT0HHH6/xeY1jGSVWo5OyT6ifYVZhILfcEc8sDc1RukHanSKOVe1wEiQ4x17wijNGPhpFKZ+GaIdhR3EL7/e18r5dyDwbqbMj+o46ovQUv39w0J6gcXxp7qC9f3qhHWeq5CtOHO1pIThqFKslOY5eLbGxWqRdnSkpVwUXNIO39e9IlPZEGfqQFpwk+FAA3sYcV6LAWU1mGhQlD7oBg04CE7k2bmkMXGll6UJQgESxXJ6+k01Kupn83BqtX7gyYA3kmQ0hkKGHsjTidETkZ/kKahEDGlKReEbbjEqjP7nqrW4ePvFtvQmbXU+cvUzdIY+ySMTr2CX+QDl0lcpZzgG+o3xHbPdx5qau8jCIhhZEAOcCDHnzV7KB1Q047VYhjnT0AGsjdbdD8v5bRt2ha2XUDDH1i3xaLTMaaBkoFXlSv8ouLYg5M44unJU4z4SJCyF109+6wvFf24QDk1WoLaLwMrCH2EQyvgzzuE+/cjip33K07wCMtuPzIL5h+hg8V+DkzXjeFqdSsYEEsv2cMv3NapdmfBHTHLJEa9B8kF/vvEAnsqPNaQ/6y21m3+vg+fr2eGe3kS9c3KCOV+QDTX/Xx+3uO8gyxUaADbY6nuQJ9O/g1z1fYsnqDs+N/ClDryu+CfviVPveM4vt+JvgSrvCzKFRNYzI2E/5sJg1kXoJTCxtdSB0fOXondMzVz4K9n/h84od5RmvEDlmHzwycOe/4qBnJKmj6qVVlfd8o7AGSIHZwBSQlujpcRIMA9zbo2objRYc4DViAmDIVlAIb40Kvk1CR9bpgwRyklSsIw8bTsEXSb8NWB2ay05TLLMTaQhw4DuclUdgeyKVqpBpRVVWeg2a0qFcXflMuVzD/Y/f+dq1dpMbfW+cmeOnjrmhBn2Dg6+L9qah2xXnbcygL9EgfcOnwUq91EjHXqcGLtMoTgFneTZiyidwNFiigvBq5Pq/ehvc/TgL8f6Ks4ubOPZlPi9M7eV11NeQ4Sa4G5zt4BzVuaokDde9/Zh2OWkHmOuc73Dz1BH0LNsT5Wk9uJziyEu7J1jFZsjnGXuV7bQZAQx62skgO81WzAS4HvCiETiomOAdWPykk0nAlb71mBvHwkIT8DK7LLSCCBzyqNFk2bNmMMIWTgUQG3/AoaQuXWz9Uzg+Qo/8+BB51WGDAHx0JpnAGlhwkEE5bOzOGrxWNuGlG6XISTQzv8ugInnLLFT1g6FfIi5oHpEIerqisUSa2jQn+fAZz4S43CVxXdMln9gAEGEVwzpM59FlULbcX6FcOuouzJiF2TEok8ixH2msLIv4imgRSbrYUDhnRvJTNPPkEZuHvqjyCQk2behXBux6gC/2h+cC77taXmI5l87D35pfZEfgHK8d2bGjhk5iBWc3q/im61mWkKyzykcLaBYP0tAbspevaB9xeV3PbL0p2+eolMs3RfjmAm/m2+lpDOtZ+V0u9pcLtan0pBV/szlj8AWWDlfw8S9vbzNwRC8Euom8F7gn8jB2eMu549zMoYVDE5PUAa+wQVrIUeQ1hcB4tj7yF/jo8t7z35tZiGZ/RQ71ewWPSx9FuXdEQ7XkkxG42nHkW0/+C0f0swZNWNxbYF0WvE9t6tgemibmEY7DhorN6iBPp43jkufDdzEmMmhQMcqxKVQuKwGciGtZl1XAzk6Eoo0AWdLplHSbNPCUVkhQyDiaMkkhcnVeOfW8VGEKXT9K4/ZGoze/DcbiGXi4X5qlLPl4j6ECPQ8LUqCOE71J65jnGBkprw8x+cChH++X+BS5D+np5NmZRdpV4G3WcQ36+d0C1mq/xBLYYzM77fMzu+1JIF6GTjoOnNqH8mqUH85yR4aRNtX9EpntqJ6lMTy2t8XzJFVH2iVPNnPm0dLYWvkz0NX26O+EhsFlyiq4AAC8I1BHhJYrh52VtnC0vssHluSVLAYeddZ+ZMZGwspr2Jb2zDX4fLSHLV281B1w/paDfP2Taih3P9NHrKKSk7OyIIMzGmlkqchy8gOra5iGCiCTcmWWr/cdwkNx9WlxlddyDs/aXf08J/gIh2x1T0Ff84CA/1zEduaoJ+eyJWfsXnKZB4/IJa7SeZALgdhGXvLgzxlC7NttIHttrN4G/aJfM1PrJoJMvisRWbQdl8oZneUrLXjJU3sEGzsamJMHuDKLH9mBcEeg9XuHTmQLOH140NthDemAzwMnZ9obzvLjA+C6jfcYN9plZmcrri/mm4cPtyKgWAOpCvmIgXzCeYS3FcehbHYILhH7S56gT3C15S2k2AJZP3XQu6dO5F9ntsIdjYofXOcPh3QmsosB1/m1wtPI9975hXQ+sQe2fX5np/33l2+1m1fX+M0Yhnjglo9SMyGt5CVX1RTfJWpytZmAio+F3kG35yzkFTsk/woeRz8TZVRSy3ajR2G4aHyNWfll2PSaVVt3y8SL8wIfgoWs0T3i1OanmxetaE34WaWhISvlEKvjkm9I6KLFoXJBZVmSUYzwyJQRpGeurZSMTDLjcIQikB/pdhjodkDyyO2VXXJTsYLWlwlBCp6RhkHHF4X6eoSxhHV53/mAL2irXzurkX+aat6H5S4rlwPiVMC5zHEGp84yFk5zkO2+3lSvjkRq28Db4HTmTWDcq/6V2T06jb32OKkpbQAAQABJREFUp9M7PFm73S4wdFtlR8gu5wM6GDth66MCN2lHSFzrkupRaVLk2YgNRQl42PQOS3PeQMxWU3S3LLtxSI+gmGAlnoZGJndhVRAi4BugKIN44DE/FO4G9S5ByqTukW2rHW90GMpJLfFHsOKTQUTugFYtiictO3DLTVenQDm+LG1phYJiIocy1f0c+OInBhpvklon2sFDfllejW7lA3nwkvLsTCJ4OErO6BfY4InEkSDCOaj4enwad7ZObF7RCVibjzMGbWcnphwyjp2BspO1YxLfEbCSxb7qA04k5SyStnXINTZMSC+doKUwHZ2F9jHEaisPWcImPKTkDDWDBGDSQSCPS6rO9PRX7e/HgK1+uQeXa7WiDiBmufw8lD1+RJlpfeYUm0Z28LlrvIdqW1j4S1tdV3kNuzOFR84ttkdYAnJbrzu0YIVutBXs5+cEtHzH2/DdMJOncgLsMqD3GgEITOqJNBjtHftz7aRdUWxagvqSxRvxACnhB9DRVt54vzxTz7B0lfBT6p4OZJtt71t0IPv0yO9fXm5vZQXCzjkdF7SeWNton3r2Rtu/s52YooVqIGuNeVX24cShbP2goGw9cgP9M6P4lTjHDV8JQkeP/vgPIvp79IZ0HhhyHCoxOVRKPYBT8wrYpK1EW8KAFYbrEVR0mKxDU27l6URpKMCYLnrCSFSIEI+jpSwCyNx8HImT9wY8RE8rlD0XcdAhB0VVJfITuH+kr2vEeeTf8yF5lIDLNdHO4CF95c9SAdlpOJGBRiJReLkUME+Q8N6HI+Lbh3vsITcg+Hp1nBwwRzMZSdNoTO86mlQK6Ns0bIRubXyITuQOMuzAWDhfvphdUqRri6+vHWntJRz6ybnd9gRP0z7rK0zAMagN1WND4DxiNmRJGrraRPtX3XpWEvLJM2VgOYZOb+ehRJfS3BGj3gYZLefh2U7aP++nGDQQMflVVlN+81IGnA3YjzOZ8Ad6jHgNjvJ2djECkHyEy8/fqoSdQYgjMxEkaXGsP2SBRckFj7gHzA3A6YiE8w98+Qivz0rOw7IMOiRDfjpI8oQlK34lXC6wl+asJSt16B0lxcoeMGSwK6qOFp5EyDy/QeHwRcsEF07fMGBpj8iiLlynUyFHwbODzTR6qXPVV3WO7rBSF5dhHP3bAfi8STpx5eNjeeoqqeJnm5Gndi7ZHeVzwCCDDukqJ3/6jajKXW0iYpHLn3xB82PnVwONml2YFttZX7aoc+W9F3/E6TKj+1vMnu20fBeYgzFXFS5d3Wlfe26r3Vrb49kK6DErmafO04XCxF+I9AY8v+eUQZU+qjGtUW2TGSw0FdlOIvECutI3fRKgN3tzHLkBia6+5mcTCwFCh6kmvSOHjPdsNiIjmdBRfu0hmL+ZvskzIP4UwruPLZV/SxQ8ZzN/cPFWu35tnQvW5chTrLQ9ZBAsR+6RRHoFjgyBAcBcP6j3nqPzP/E3B8o3ek49f6NExOflbv9CrSKw14MoeQnw5vX0pPfE8MKNawODnYQBwNFDgmsaE8YgX6eQhw1CxInhTIdQpwVMWlXyoSddR3Bcp5PqmAZer63mdBoS5NpjIjOXSplrGx2jPxuDUBX8ZCwFzg5p5FmFZQsaT3DVB7k4gZumAA7pMaQDdYUOx2C/GbjpdpZ1W0naoBcY8vr0+DYNxN1R7oW/g0OOw6UpOxAFewDXt+O4yX0T9+Kr5wF09pBFvMuM2J7izb1P0a28wIh5DZoGyWk6ELfuEgYgq151VOeAzOjtoXmrnu/CdEhOHQZBziLzN7Gk5mBdjZWhghm26HUiyZphGDjTPaIvzROZq1LF7DDk7XKDsaCqTgxaEUhw+XBtPYuVACUheCVwylOGAIyRrfUh/XItUsJrfz/kO+p1RBs2XHsWQ3sJMAKn/GoJjGxISF8rGlC1iHKJU/6GjNZL5yFJ8Q1Y0ccyrv0TNzJB03MGODBwllO8rXd4yAc59bUaEaszHQNo4YXt84oXrkMj1kI+4MvOyEBa/uLZBWgqddF+EIlM6ZyEI9vRf+EgLSDmqYs664+myxYGSQYvZLjUxOMYKVdHf69GPOk6eIn+0uJj3uispHeAXwhz4MBJW4B3jp9p9gfT/nyOmTN+7W5BmMVkdhR7zO6c/Ro7bC6+cDK/VOkZApBCT36ygMQqA6rEHcqGD9hhjdiT+AVfsiLfIjX2lgNmIfh5xQv4UMYve+SeJUmuyaFd28nYQfkuOztDSzyUTXvRf7RN7xVy/taFBX5nxLuX6ImvzpL5FZaD/4T35E1t8q5s4EXXzzOw1sh8ajmz80QHirtcYVVfYXvwis1CtMU3fByd/9h7EfYHdLTIZwVwVMC00XKtwr3S45CU6yzpPKz0Du+1rqFNgsM5dMjX8RNRU1SVVVaCljgS0fFBtBEFX1icR2NHPtKBhlQam6INOSzzw/XdowsSGGDtyEJY00W4Cah8qslLXJ5ed3mUSvnN68opZ37ngaCox5+cnY1jGvzfNDuXmUeCF3DHXLsBz18o9CVw8tbp7XBsaLv5YAXKT/hULp6/SofhcpXvz7IBCnsRB/4Ks40LzHA27ThAiJwRzSChvKUbWf+fw/q0Afi599De4vkhiQ7eMK+09WFauzpyNAUXyh3VKkOqpfuHwUPq6h79uRY/z7UAo/apb/CciVAY+H02HmRELm3g/OOUQxsZqsTLQ2w0QhucgxRhR+PLmWs7g9gGGhKRv7gOHbL2D9XoIAM/HOkg4INAFJZd9RbhvBbf/8jlt/Yh3wGCcP5niQQKGTyR4bUdg3ixOLAdLTK5ml8eKSy24N/60Q6hp1wE1AqMyQqtbICgTKouf1lX2lq9Kxep1Qv+BikEylKOAc32qM20DyUV6LFl7pOQY6eSGRU4lnMZv1Zv09aFNaEdbQPhIT5XwmcgxNngPY3fi2dJ1R75yBneEoPWm/YcMLX2p/Nb7Yvcu7vCbGQGGHcrZkcVprBebUIemrP8iTbEdTou8JVLlWsgQMIjPlK2VAaDvTJ7b9LDeyFvRlD/rEXNru1vIAPkspqgX4inTa5Ns7LgbAlfBTKaHfAk4j5LWIAwC9lv5+bn6US4d4N+8hLK+zSfYhZy099QVwGJe1BvMQOQaFXG5mQdiW+hfzm85qDsB4zZufgGv8pbvkEimP5noqxKdSElaV4uo2xXoiseBYdiA6+DBNehgQdlMYBG08IcgolSV16YV38xmEy781vd1UuL2Wkql5cQSGPkWloTgwOms3RoC/IRNqM7G5EYXB85bUwQw3mkmyBKfvSUav8ImzxMTjqH10TD8GEHxrlFX03NVNcGj/7uYPL3A1xT9bUg/ha5Izg7IIPpKrucbjFqcmZhVHZqbQP3R2vewNTa7YO3wHUbrk/EPovjfpmOw+WxBJhIF2VBVyPSXVflS4CDr43YBlJl3TGjwPji/g0w/g6CgwSDnvCOHj0is3RVnHJNZBDwRvWYEfa4FRkQm8ZWgVL4dDDIFjtBZbhGfA6S46z95WgHFG/gWlr3rvuHFrx1/AmMhLG1I0OrJHx6ovygvoX3/oNF1nNmGVy4VBFw+AZXGZnxGkiVyTyXwPTkwHGdQznRTxmFyYe8KhNPPyAwqReIkNQwqau8dgVcO8UMrCgzAGbJqgsRXyUvfi018fVdyzGAMnm/w4CU4J3rjgyIPhKvIMugnsCOLNKTl+SEMN88Z3led08qmsCk3VjBBHAhxqH9bBPxE+wvnGnzJoMIZMgWX2Azy5In8moza1DePh/19t359jAjpSfmdtpvL220313gxaRTO+253a12aW8nS7qrBG232t5g4HQR6V5mhn6Z+tymN8AstBt2bkUrLnKoI0JFV326Pgqazhowl4zfxr2QZesRG1RnS0eAXKvcX3TXmrs1ETln70FeI38X3r4SP29dkBflu4wO6UdC5zt5PN130kVX2q/t8xlmH3/MbwU5C9E7tJfiVYWS1C7ASYsK6dkACOMRPTwJ8MrMQtz5+Q0dR7/442882j38ewpZuijcPUdXpka5XOhInFIx4mCFgIASvUQ1L5l6iU2dA4MUg37yMrQE9FOHjlwj5JGnE+Ccnfgoz9lIhPMpS+HgnCoBDR0qwwwTaeDKYQVxgbOkXFh5Czvw5AVCLpPu5YHrDqmMaQCU4UR5yynR4YxbRUD0PTu+JdV1aF8Q55KWL4A7hr5uO8zIjTx5OLNIwOS63uUETfIcFb1Ag/XVIk73r9NQ3E3lMpiiqL9wrOCWaaVnZM8RgMDZeaB0XlWRXVggu4hUNhUYRaBjcHuAzvQm61T+DrQPip3ixYsuR80wHffp5bGd1mcS3H4aVGjb8BL8yPIVLvYQjjsVVTuPhlI1pewRKR2sb2TV3upuMNafwgd8X7znDVIPNTOVwEfesJmjbvORgmot2OhLOvdUDIrIUJYBpvvv8BeRLbM607GFmLTsQou2slXwVBk+HuEFnAT4TzZ5+qkfVAm2HYcChK+0KYg8kLSzMCujaxORBBtAZ8pBhVXHydlCBfwAZSSuvoVdecrTU+nYFSo+orgUWGqwNqAp2+jArB99wdF14IUkMwMS4BQ/5VXZkaVIUohsDiBSx9D2kEZSFKuovp4gHPkkKFCdrIPwpMxA/k38iNMDLJneYq3qIrsJX5jfT/3z80yZPRVtZAsPfAxa6nECn3vjHvfqrA3sqq6yVy6VrdhhHZCH42gHcclRSH4ffbo9yMd2a6foIG4feW4yYPMmu0t3vljkOnUiv5fYrPIkmP52iD/Mdoa50sN0FqfR9/+RdqYxmmXnXb+1vbV29Tbds7RnZ8YeG8dZ7RBndYRkk43kg5MQBQTK9iVBgISFFGAskFD4gARRCCCC+IKEIpAgH6IoEUpQgoHYsWPP4HjG4/FMz/T09FZdXdtbe/H7/Z9zqtvxeDbfqvd97z3nOc9+nrPcc8895AFcO473MgJ5aGbErg4+7a6l2ECS8//Baqz3XxkP5xdHx52vxDB7nk2Xx0pSTxig61QcitR09hPE7n8w8cv/5hJJb/v4uhuQw73DX4JNFhCp8sYcTPeeZTxII6AEJIxTaJm6IW4BS5GsAjhiNAxcXqUG/C8lJA+YBBSBmb8vqzYk0tVjPQQyORVeA3Cp45jPRfXaPAkwSZyTL0waO3gOjtA3yykNJ3jAoZfhEJFJMGHFAG57WF4pt1tB3L5xLojAEjSPS768B+I7vZmYHc4usYSP3HXk4r1QBGKW9xEE7WH5fnMfmPIJ1aqszqvSoBC1nJqagW49AFXPg5xnaH1+Yma4zCB6l4cQNyDh+0J8sY1BNo1FmCieSAnvyib/mitTRspPQsnPCAg7GRBqHldZLOlqnInhHh/JYkTk2wkfoPG43+ZJXRmE0ZEBOje/vVZk9SEx9JEpEcypvsRq5JOTODt82kzYQBgIXRVTxQxm2hReDSbiRCeWc/UMl5wrS8F5Hn46Wa6dE6+OCLTBAcHQz0iF/DR0zPfEd4SncttABXe5QfjSBQ6wZWjAgzby0MaOEvzPaALebFx9j0V4h173fQNlFdJtwaGuSTJV+AnnxTGMvVz1ZyOrenHABC51on9Hg8rhPBWJxUqVK7yFKw0c+Bx9WDawVdqr4NIunIVuYDgXMCMWEtJOQSt2gq+s3iLfBtqyxY/n8oFlWpoNEaosvVDeIBnlNdm67TPqQqYsYuDXzT8jX+Mjxie9bMyKRZC4seg7tqeZvgWSyOS7bXLvBL4mHG3wZzn1v4w3naYXNmeHDZz6svJGVuWCLeGVWqH6qBpXJaPyF6hrF7gXcw3fd/PE2Bs+10F11eaGwjf58qVtiTvgk9/cjAeGtWTwMTNcmB4N75vhzgr8L2Ddb+Bm+p/tuJOWEsvB0fDM5tbwv1+6PvzIfbycakFe1bF2jlRVV0nLAQ19rmIiGGRE0cXknq2HR8Tu4WMF/Pa+v64G5OhX/j6vTrz183FQBMgRJkuxsmrwiXAaU9a5VlSHW55hN8A8z1Vdow/LJF0l9PMGFRwU0UlFjyLEVAoiQHZ8oSAdUaVsfXsqL3TOy11EoodzpPHQGE3Z1tDi3MApIDhKYByw8NoDrACj+8FJdFF0j4m3okEhJgK/T2jXfZOS4+wCr4Olx+8KqjE4HX04DbIE/F041BhHvYxDOgweodgZWaHhcTngDFOq9nzc+NQhvzf4njgc5aE+dfkYw/MzVGBfPOXzJOywM6xyF9EpMu+5GPDoH+WVud7sM0AYrPNedfLyilF0YQCaUTfQd0TS90tSPN8FfR90nkWVj7HEcpQoQkWNE5eOrDjq0cbDipHtWEgDI6nkNYf32lT16b8jJcnawFpe1Bn+g4d/7FW/QQSM0ykGCF2pH/oi/zGanYEpdF0BsiAqeJTsqKQBktp8Q16qBy6W4lmoBAPyvJehXnyKuvumvmCjVfeEQIpulEN/CQ8AViOYxIxilDGNBzAG6NAlkopLPOrsWC6FUqfQDJ9cppEGh/rMP2XEIX9yra4UqSRghBgwZQJr6NkhKH9PAwB+edQn4CB/Kj0BCTzakR+uzSsYVVFl1A+4zFOw1FV+ARA203z82gmTn7o/6K8SqqNGs+ksFixVJT/1Tp6VR9zkedi4LqPbaW6OyOcUdcdYM6O+yScJCD+lS2UwMR0YZOMCfTf/40r9+e/DvNKxbnT5tMv99PheZMSxIQPUR+uiOwBfpAMnauXwTz3kiP7gjRi0y/n20Q47SLByEmOsweDU0Wh4dDQz3DczMzx34K688sDNeUYhn7h2a/jLvDdonlEKziDW6DUdW3sW4V8q4G/xr2IocIp5m4WfJ4b/04mP/XMXZb6t4+tqQHh11t9ALydjjUY+Q1IZjzEwj8w2oVSCsipEDs5NAxQ4y9R1CglDWoGbodk5wBXfMscywlBQcI9qAITnHwN6kp5lPEynkCfTAl5LOTWBHn8Hnig5QAIa/DSf6FrZxk45RV1EFtGIT+gSjEIxsSk5YlQgfDjS3qdcGphOMSw9xzK+l9jW2QcBrW82KMtAvPvIpX3Mg7Ivlje/F2konVt1qHzgNJNVHnpWAA/XnV8giN81scQQmqBDso2EI5ZTYLbH9QrTZ+u0onvIPobebFWTTJPlYUPw3AKfuHyWxCPBzMoO3UlGGcq2jQw2NK7w+p79UR5OdATglhIGM7mbYIhuVdUv1BZqzKGu1E50QIZ6yEW+yCPDXIolKGSVnjojXV9TZnmSOyt0zknT9N57sZfntEHwk54AgDxW5NI9+TTCBixxSa0HS4lmxMKv5dOjhj+hHEW4WklfymycZTmXE+GUWVn9y8iQvByCBVZ+gSI5dcVMEXNUcDKdC/IN3Pa87WwUFngUt7ZWX9LjIwmLJJCKCGirTaZAyERtwRlfB1Lek2Yp0WArp/1SElzSUiLxyoOkqgwnBEkFL80qtZkpmXPLyUdsIh3rkDIUCPxqa66QQV9SBzLXG78a4RIfJa7HBA4ewC5OD8tUg27ApX6mjnsOPUCcAnZLeEeNu2lgTUduWUdf1mh38/WPS4VDRpRkYfJCBVhPii4dKLIjuonQV35HJTZWDx+Mhis8nZ4/8va5zxFM4IzkDb869E8KopeeDek2N9A/v8cWJtT/1ZMLw7fNzA7vmZ8bXtjdq5VxyOXarM/d2hw+9/L68O1nFlMHMpugANDMbEiQipiDNOWqpJahHxnPiN0T2+t/HahfC+zb+Pr6GpDD4WfUvGxFUf7CXJwpFmkcIUCOO34KRnUgDEZRmlIrp81Zoi4Nzl+Co8poipKgjgB0OXUYgJeGp+ZHdTzT+LWs8J52frjslTn5XotRWJG3wKObBG8rJ5pqqBrHTS7JWCNj0A4bVAA0vkIAFxO9ywetlZGPonO8B/ne2ZnhS9u8JpNG4oQBGqdZZjmv0ybyYE/cXT/38OQRV+7xswku53mj02CjB86vW6FIl50aEuDHlHG0cYLe0jK4fTbE/YB8U9qhS4aBM+jyXBN6miLwDMOFUjKjGnqlyGeFdTpBe1gt3HNqk/TnaNhepbe1NLHAMuJptkPBeuBzikgZauqAU1VkGofB3cpn0JDPBFrsSzuUEYRQBpqyP/JHXaQKS9keKHUJ1c0/2EqfZKbBqYBnKunQ8cz/VOKcgj38lP6KnkEXZOR3WpyFbxujYEMPNhIGJ+0iePD6y2GaaJVRRTDVmwCtvkoef+u8dyhEIF+GcH3IpQs+xFmTcspXOJVd15HvnMsn8NJXCd1XvfRIEFbHCgV9WG+BtwVOFKiraFtHZQn28o3CDajWF2UhJUdIKbCfkCUzAMIpg4nwyk+CPTSVxfJpIMTFx8ZK2eTbEYOjLv+4TLrw5mu7HPBRaXyTZHp1WJtthFUQ5NnF11fxLrl225EpKoF1R5/0cNSVKUC1TZpbjewTiOxgzJkX+UsGAeQebZRs0tWnZYKPeIwR96I/69OufkYd9aiRFL8IrG74IlUmLFPM+Ftyim0YrvH0+SdW0c2Jg+FBNlY9yyjk8o5zBorGCAUR/+el1eF9D54c5njS/hBZu871Hy78L3qeh2yjG/sU3dSNg8OfBe3bbkCsA2/rOHryF96PDn/ZwsWOfN9m3pov4yqsG/k2oIVQYC+I4iMk1xFTPAWSX9MsG/xJp6y1wPMYJKdBn5IhTBqG7PkZ3lmJjDY6gn+hw2/SCke+I4ckNTJ0vLYs18rjdtz2dkzulbXKVZngla/Gm4GrahtJkhcvvxPs+z9JryPnIJtiee2zlzeGP17f4KbaaDjPE6kL0FqGv4v0Zq5wI9wX12zw8aa6yxQNaPYC3EgxvW3TcEenIEpvji5qfysDyRojjsvM1Vq5bhLw7QX7giijimMEcTLWyS6nJ8hbIlJ5k9HpL28WngT2LNMBJ4Ezz/nfh6h8H15cGm4QoNze4QyN0yWCg3sUqSOaJs7QJOfym8prBmk2Ggky4ItuSbeBoSQuVHZOvjZSIBtoYc3jo8ypmOLTj9QuNFpsAwzK+gqw5kmjN1ixFulZYglebZ1y4lQf2tgifKRT/h0k4dGc+Aj+pssJo6UNuAaVXsY0ZRAm/PErz8JAvnkjeoqfiEAaBWPAsMvrnyMbORJf8IBTYGWUVm+YpRWaQRTI0DaxfE0dISNZ3lfJSCyomi5DzfaGRk9flxkOf3udaQzEy0wLT/LQoLWdwUVeHBH4q/8FB3nq17RaAFB0w5M0LBc5S+d3plejWX4kLfOmkaE3NOo0y2RBsohvut+VL0Hzw2Mi2VDRtH5f0dcNuHBDXtyD6sszPHRIQ+ILqkxT/cWRP9X4KoV0ndblBL2rSLccYjRO7+cqdcxRpH+mm+1X/si3bD/iu7kgjXRp+vGFU1d4LmSeaSwfdHx1h30kAAlP4L3Jut5vPjE/nDvDvRBmLRLDOl5opy6FIshbeqeqDjNSqXpxz8e//wO//fHf/+Qrnae38vt1jEAOfqa6QY2cTlH6kuMaVZgl16R7+FOylCh1H6Qnolggomx+Yzj1AN4yonB+hKtDQ6Qn1rL6nKUhJkeMqNkMCxxdsTKCIWuUMs0vCTJmLTDPLxlJmokmgcNGsZZAdQqACCcAhhfM0yRAl4qdckmlIuKYypLwaG8QnOVAQRD8D87PUnHpZbjMj9B7apKQDq9jhrGSdiWWQdT+ted0PpjX1bFkl8aCsm6JYvpLrDmXPRuGFzl3ea8rP57jDkgeTkTGMxScJ70qBbAo1KmnHjbcEVZVZKwITleg6MT2TL05uUWlfNeZpeHnfvRdwz2feHH4f1+4NbyL1SNPsXQyAYjKbViWPxuP7LLKeQ7weHq7EnFhYOGn35uwH2dFTMABOjoljSRMqA1L25ZRWP/0A/WcYAZAcAHgSNe0PFjmtWjI97dpIHidmsoUB3qwJ6kuYb78MPDVOFjQ8mzHdLsTgrIMnOKM4vLLNXD8symklDjgFbOGnr1i8fR7adXwCAIscHm6GlADlaMEOzDRqrLHx0Rg71n5SOMvUzFc20Dnpi4GyFQR8ou/5BY/dIF32bH3BFOefAMgUOFPe3uI1wTzKMhZ+YL+qJ2UxwCuv8irNvfwupcWZRQR/PLJNeUDbBqw0pG/1Dd+M3BqtLLIgzR9KgslOFfW3jhJa5YGwU0/3WX3HJaNfuUdw6gPSfoQpLs+nGajxblZd+gdhrsIxKfZvncDRVxlfH4X9/Okocz6kx/Ldvum4SDF6zq4mX4wPbzI81yvWtelaQGOUqFyqR9zylJK66GOlSl6Sw3gDQ8w9WfcNH9kaY69vKZ45xxMgs8QcINthv7o4srw+AO8zNrVm9Tb2DL0wBm7SleaJPopJoq+SRLmCx93FPJJL9/q8bYaEB6FX8KsPwlp6JUCihsulc4L/lVJlCXzpE/oKBHC/II59rIISrYoPY7hvNBhxKdBxMohGY6i7rcOj1lIrxtVIrIc0PKUQq2EnsAxkXsHlPW/0dOIIvcyrTTXoWsBPFkHzTW/hRNccQoBqgLYMIWy8grEf/AXKNesgjFLfBazFuGFhs6HT84PS/B1k16nU0538VKQW5zTFMRRl/m+i0blflZs3M0qK/3bpbovsUpnCaazxTUjlXPAvMqzHzegdZ4m5Dqh/xL5pyC3AV/eiHdIfxNd+AyHAUgNugbBV4LaS1dE7WTP1gBhYK7KEsuam63dz7AOfpN32L7/4RPD08+sDadpNFzCu0Ej6IZ1qYP8HqUnbSl1yIHc4laf2WpEu/hPWkYNgBiEPJdupgEsp9I0BMedfKaiwHsCPrKlLDittE4B1nLQsq0LD2xYRKWkqcDooHGWtNxzkA5w8mlDbL5lyp5ajGuM6a9mFE9BAEQZHUn3s0mOO0BC/xDOoOd0YKbuOFdOsJRfWg5ydiYMgNINdb5saFzVVvP4ycrNWKdEu0w21tULljcOWQG3vHuoq/SgOac9os7osaUHy5VO4NkC6DBp8KTeywdMpyD5WWEX3k0SRnh1aQdHgLKxb0rMKClJfPEfXNGvqMFNcWUGBQ0z/KI8OzPW6eha3JLmk4aWX6+kZiHtop10Je/dPUIv/aHTI/iJFkBKeaZsV9d2h+d5adMTD50aHnj3yWF/gyfEr20Nn/7SxvDFze3hKh0uF7GcCnVZLR8UC6gjX+xi5wtmvN8iU+cJQA9x79HnrrzHE72hC/nyOSkXsBxSL46n1S0Es6YFQTpcjGZIXuS+4eRujfQfZEXWM5tsPi+uaGIY/uDm+vChy2vDo8vUMnSrlv0Pg/ot+uhix1+lAB/y7yfnKnqY+Eli+t+dePJfs1fKWzveVgNCP/QnkIN4JcPFqBzJu7WkXNGK5TVXgqX2oGzgDAQpB+RtIVr5CKjDVLkmal2rPGtjKHlbT+NBRx1w6ID2gqxgVmprrnjKsVCw5zgraBpa6XthRSiu84yCEsi79JQv51x6qkWMUKGpjM2cjYlqgJos8TYLNR5bmRSWpEannOjTolBh7sYZ7qNh8EEnp6pushTTl0rJi0FnERwPML3lKqs1dYoufeL8+cndzN+yLiN7WvmyHBneBOclpqzkyG1QXPFR20cgI/nrBlJWjyi9h9/OA6dKhjflo8dG2eiC8zIflRRcMv/H463ht3/rueE93L+5Tnfceyv3UlmetgEB2PIZKopPub3mnH+CAEEFHAngBozKTECw3DQtmoE1ejIPmga8BEeutbdBKb3MGCggBCHtaiDRxs1G/vJxysaGx48jIvMNRq569bepgtI0GtAXHhbCw3HvXTnEzV89LR2AyAUGSpqufa3whR9Jkx6+SFP/9ti9tkTee4K25Cn6IJkraMMzenTqD3OFbxtEddkxggDIgg9G5WhpchD9NDpFTa44NCb40zOvjOg2ekbR6l79yo/ZeUcJTKiP1NE78iyTOtbQWiB8cpKb1/DsdFNW/IFAfLKpt0V+cBUvpCObdU36XY/iruYEieAZ1WY0BtHIHj9SCSBVnjU6Upex3bsXecj1FM9NgKt8iYcGT2KNS24JxAj8XWeJ2OTf2MSHXx2ufvoqnawp7uNxH5IGwZgTO0FHr5JdihnqOIUP6p9k/XLUcz8NyJcos4pufd+H9oOjYd6OFR27yzRgNoNKrfzFvedFZ4HEM9Sfh8HzIItSLqzPDO+bmx0ep8Rz7FvnMnmnsq8yrfWHF1eHRy+cGI5OEsopF3PKC4d+HXXEWPJJouceCtBOMcjSwdT+T5D675P3Fr6OOxNvoczwj7/7m38d+AsJ5hqPj4fKiBC6hMLwK5f2SiKI+c3YGXqnADkpx48SigsFpbw4hDFZ1LGa56meSU++OINDmu2QdHhohTUicA7zOu4CllfL6LEGSYtVtQ4laKacUcvjmAAyyU8KQz9wZpc+ii/Fabzq3cjlYTEbHsfNEz56ajJ8GQwt/9mXV4en2Yn3HnrxJ3BEg0b1ACt4OH97lZHFCwc7jDBcsVVvA1ynoVFPPriUbUqAs/JXauE5fn4DGGHrqz/XYY+JYAkX/koz2zwAxGWClYFZdsVrE+7H/YcO1/aHz6yO8/TvO6gk99J7egkeK/DoCVbqIui0gEEhjQfYDMr29sWr5r0XIGhMqEYkDkyCqjn86wvBx7npllXnCfApDU5VLkmubSzkIVfwbpnoG14sZwiQZngJnHYr3N1fUkY3oYy8h4Bl+AgLxqR7I9qj8y9iA5fwlVZywhJ8CKePpQjX8KkzA5uZff0KCMvlY7qy8yte+UCc0me6xAVf6PgWRgDhIyG2Q1myI239sKaSDc5cW09QTPTIuUXDDnnaRrsXe+LjCB+UVRjycs9Jcpyr09hd+YCbcnibMoICxHGnbj1PmhKrXw6lCdvyyUd8maIU1v9kN55MQLB+T8hNF68x9bu1yQOl8McuUsM624bc3NjloTymibkH+cKVTZ7s3uMNn0wRs/qJyjJcYoXTKvmO0t1CqOowqMOQBOUFThChZFSXpENDWKeE3eV3F3vY39Qf1Kv6fuxoNlu+24nTJztKlI5sLH0H1jp/jk7iSRqvM9yLWaBC+6LRcyx+eScvaXuA2YcDcN+C1ph7qN90anE4eY5GhOvoyxgH4qgYPpLW80IwZJteOY8/Td7z8T/41FtuQKTzlg73UDk83P+sykphuVR5f/6IBLKucblocFbTOA3FPLdsQC2vZyZYmN6UK5xl9T1/taKW8OAytI/xc2nloAKEbmAAElc+Veg2u+CRJF9BIdrbmZyKxcbM8o2mKFLbDXJlKH7qCJI2wJZXISRveU4ih62BBYCd2GaYu8G2BDhuXgzEe5p9NuQ3/u+Xh1956drwLVOsBWcpn1MdWwZucLhKylHF80xqvcwDggm45OvIefZByUHvChefAPfchuD2/CiQ5DWG47SlA2GqbCwSGSnMfw8KGTma4KHq0LUm8yb54xOzrGPfY9uVYfiBqYXhR2cWh//GQ1Db0PYp4Wl+KziDr9BSztFH0YVJ5Kuet7oJFZmX91bRIkwI38ahl+hfNnhOXTiFox6mDeIEExtP46oy+Vc+xzWowwcwwQ+MQV6I+GdkpIRp8kO++JInPvjyz2mK7GVl+TBNGXgwX3gph32vwZNGiF/vZWjPkOEnDyjqu8oReUjDb3QdR0CoihP5KB4OmbI0OtmY2KS70k4/E6cdgJgvbgdy6SBArE6GfZkKNiZTBjmc3jOgyZc0YnPlJr1PKUWR4ucDhQRHiqZqBjfndbTywCmLh/qrxs68slG3nZHE6p1RJb+RCZl7p8x8efbQZh6xR51Gr9ElMKqq7KccjMDtYKEjJw0mcdhd9SUvlPWeoooaEahPcx9hHvk9v7TN/TtgF0wngOu3yqke5b10Vzq2kY+yG4go00kDfosOqbMDvpztCg9oXeH6ETZf9PgEm524SSLYRBt9i9tNU0/iu3fTebybhxNdvHIvPNhp1BlcVKFOp2YZ4TMaeYZO5A89eHb40e/iNUzccDd+yqo+XaNrWZc5/UbKyO95Tv0W2kM/nXzfxJO//rm6fnPfb2MK6+hnm1fDE0pMr+cOYghpxVIxchlW+dWo2JCk5MRJ0YU1JoYuDJyn8qUASaVctBY5y2nFYrppIEBRnNUhDT1MZUtZZZIfRgJViosDqE3LC2ewkYaQ8tPOdYxKJQ34nFvGk2Z8L7IiS1Tgqsw/fxavTuI+WzIf0XCM7uduBFNYCQxWYZ6Gdcg+yX5Yj3FTevbiNXoY5Qxz6HiThsU3/W1A3/2tbjI8zzYe6stADKwV3RLK57V86iz+Zcgvz8iRaZX8GpPgWRg+5WHKDF9eN3mEFwdKaPIZsoTjmjSpPsf2DPUOiInhWfbaGnHT797d6eGLjKRyHwR6WspKwn/w+0PRxCVHMsFnGqS0WgTAlr03awCKXKEpnDzzz0+eOeHchwttVH1y29+qroVZPoVVF81Fwov41Usd/KJHr+VVORO05Ilr/2xo9EIDi4E28/wxpcgrX96sGsL51adhvDbIOR0lz2UndVNBzeXXwgZn0wkoKVQy5NkJLp1DV5/KWDkASZ6/VAH5UC7S1KZ2Nt1LHwQNH/IfXCWbN9tTnu+MeBON7SBU+VoU4ShLmysq5SXLRVjUv0gvLopWv67pt8qXJ7dSjy+CSR3TwS688mYdBDfdn8DU81wteJvGX/wa5LGbfCgrf+pc3pSPRzJYETiTLUJs4CY5d7qJqoQNq7OiXoQ/YJTiCkVlm5c/qLu1iUcaUKBsdNS78B6IwCElJY4mw7f6tne1AKxPlF/g+ZDHkOkKHawtFHGWxuHzR7s8MFyLXCgMTpGJxbpYtcuGaIvkdRsyc+FV3t2+yJVZ75maG+7hhv3Vle3h1srWcPKepeJN54aeHPETfNG1JLSRjHvu0YXhhE6JN9N/Melv8ksab/o4+rc/58PPPxX3QdF6p4bw0FnDC2lm1VeywmQPwHFqkwEyzU8OvRAMufI8n9tyFnwlayBb2BpGhmrRQ1uQR2uEo8aXtbUo1G+W85oC2zYUaWDk3bJygOGlHccMar7ICN4Ylj6tRgBWhxXEhipnHT5yWK54rGglX7zD+ZW1YeXlW8yW2YOUTjDopfE7vfQdp+aHsziGrbu9920m533rnoMXXwB1SeejAbHqGYAclVjhfWYg93/Clc6jbeTSQzo6p6Ha8zK9sqQ3LC7+xGNv3hFMn8bq5zq0D0fZUAhX1wW7CT/uEqzrX+X3Jp8HZxgTQEY9y0m4scHTubU9f+mpgyvBkDR/swqMgk47pH8Cuy61jM49l3ttIrwElEc7J8iSAT5rjjQ8Iqk0WlmTxeZoxYBh790eqpryzzQ/hbO0RVFyosHgy2iHFJ7QyX0BhbMHrzz2EOVL/+y8+uuzBgZS1v0VLs6tzOETfv3LSCI+K0X44if3J8CrvHXjvGhM5+63vgcOMQpLmQRe4bkWS/REvrpMY3lHmmKmoxX9KCHXfNIwRQ6wk+A0jA2J/IkndJA5jRJ+4a+yWc786JBz/0prlVeNmrJoc2nBO+VqRZ3Tmeqt0iawuXoNrIK0IyMy9KWd05tWX+KQH8sCJ075TihGx9rLBmWWzwKfJThdJH2Zex3uV3Waj88vubuuD9qal0AuHjBm9IR9a3SmTupjB7a0XATDGymWSXzizJ0hbDDv5unyc2z4eA46D7BEPww2mcTnoT6k5QjI9/1Yy73xbgPbG1rcKM9u+Ype9587z8ovGxDvNyE5GOpwcUP03XHDg+EtlzFL8UwyVPTJiZ8yxrfib+pH6d/8cWngRSRHpyFbR1Midoyy4q3mIIiMK0nuf8ig1xylKJVfjlLKT0YVb+WEtYw+5JFAI0IUVjEefD3PfB3KQ8f0HoZa8qPRG2NBjbOTmpUjgQ+Tlms8JjKBGLgc4KrDa5WcqnWMU1w2SjZEBvQ6Gi9CiYdP5sB5Ycz69fGwvc7LZHnXMbWSaGIzAbyNXood5Ub6t/BOgAtxe3oglNsF9yqmdSdPd9lV9BNs+T7nTV7xc51gqrMqP9fqIP6dXK+Lx7rHwzn5KansckFF9Df4YMZGIg0MqTYmNlCVJ6/A5lMNjatIMh2FuGsY6DO8v4B3VaEtVsO0RssmYx+nlwqkokkDjXZOEJVfr8mUU7lKHld9+tzK5aF83kvx1++cgcfgrPTZtiO+gMXQs3RsMISTD8shVPCLIVhbUEoQa1DT2MegnVgtDishhf1k3j9pYkAGyocX8hKsm0+mk9Rco6a7xAEP8Bs/bQFQXTkKNc3GyMUM4jXdZ3X8jWykp9FTb/Djm1pdUaVc/ith5FMfUSP3oihrXp6ZkOdca0NHSlzz8Zyv2CbARpbwXenyHuzi4awaEnTdGkZ5Fm90DJ40DCAwrWws/eZz4AaN1bXKqLNcy7N2JJ00wMNK7A4v4swqQXTgM0vqRR2ELsjyvg+ulMkjja94KGdj40jELpS+anC2N5/OGde+Z8T939Iogbv8QIkrZlTNDzvhveurpgGlBhx0qxFrVggf4kJP0LIR9t7M++B8lnuFBA54K3upG8tH7cia3Y3h2T29vM/plu4VTx0h0nHEf72F6rMsK9dYocX9nRzi4IRiwVdpZYPjDntBmtjg9LSj00NifM9849/40RuDFQRK/2h69hA9PiI0fMAtp+WECJSKAVATqa7NtyC/Car8elpfXVhTkoohVK64S6mWNodOAvjMKD5UeEYT4gLCVJSRfI0ZjODyJEYXCgOIPKuwzBO+iHGOVSJXVWbm6fDEEA2ugNaZpymK11EEGHnyE2WUHkQr0MF4bxhv0HAYPZnGSuFMY8GYkR4aNkRL86PhO3i15TmG3N4kU6LtucksxR3TOPdeziyw85TxxpsyKpsBfo9grvzCFay5lV9VzSpRwUMmLJfyyqxeFKHJ1wrm5yu/CieCIiocRuxQpYIfDi8ydTUm7RzGQmIqMoEEHflQmfdm0iEgP36irjjSc+e3LCa/ngtjDxPOuU6iabmuIKX0WlDZrX0VfOkxUzntedpQKJPOaFDQJ2zEbBj8i57I1gTyZQBxVCZO6U2ix2wlwqW2MED2gKbdneIwQIQn8XAdmsKbR/k8ECg6O1cNPoEbfI4k5EnelXUSvmlzwQcu+E2gRvh0upJGHrzXaASk0uPfV3d1XXidkRy+kUAI/moExcM5Mtgg1CjPBqnqDcnQ9MNXZLVRUGJsi/5gr/QiPDSiH/XGtSU6tIGydEIKcNohfqbdUhfhAwQ+1JfRgbYiXTrq3XsLeeCPsyy6ID3PN4HLDqL8ahOn42xQrAs2jsplF3pGPwC2fEe/LJ3ZoIjPQz48iz8IgGzqUr06dBa/+qlDO+s1aoU/6EIWM3tOMfJ49i8oUg8DFWBwwJXAHK6S3KRD+Ojk3HAvU1naFGLBEQ2i5CrPKIMibg+0jdJdUuyLuNL46b04B14anvTXq6vbw5rvCjGPvwjGlUc6KmG8dI5Ykrx9KIBlTDua+OjtjDc+69p5Q8ijf/WLswj4VwOIMsIDylVY/xIkm5LUrCwlDcWG1zAJfxqnnWfU0MoULKXMs0AqWikzwQbDRnB/A1KsS8cKaV5wew0yDRZ/gH4KABMa5vNJtICQoacUyrm8CIRcuQnFpThSAsMewyKDZSpgidcAB6R8yDyOUTJqbk4b2r0x4wicbMTDS3lHQHgDAHylBkrzcqndlc1him2dncdnhD0csAxxk9rgflW+gtMK5+qoG7s7rCZhPbXrxUmTVlUJUVIBlAPE/WOPOY1cIJUMZjyOFSP/dZ2GlSvdsWQxvbQhSI0+Il3OyRQgFXuZCrOB4zvF9Y1sxcCjLPT2VELxpMNbMR0RaFtEzPSC+qtAWjY+nlainLrWddLLBZ/UgtJfcLinURoHEq3M8cvYxWBkHry1PEVySiHTlpz3nrP5/Tw8kZfqTWDyflOcQdp8XOxgw1CBUlZu4/NKObSJwUNb6B4GUu1jGQOZ/l8jCUtU4DR/EsAEdArt71dHI40NhMEErHpDA+JUfq7rHoBTkMWntPWpbIIZCL4iTJlT/dhQTdK4xuXBN5fGpvhOGuWlJ9/qxhpVvg5F7SYO0CaPAgZs/Vrd6Tn+OkpwFORoKvolx9FFrrU/5/pa6QH9k+LHaxtObStNy1Q58knLOT7kIRho4aXKqmz5d6v0aaYwhM30mvUNQKkqvzD5kFr2EkdIhqa1QV/S73odkk5oqdxgEht/2puklCdH5cuPafq1R0ZMNnIk2oh86zR7NaAX8Xjo49aL6BPhvdm/C4M+D7bBUnwfftQNfdDVPpHPtji15QjKNy++8hIvweZByOIVyykjfGR2BFzpZEdlxU+IAhPy/JiKzD9irE/em/gKujcBx9Nqux+GoWWZkqJmMIgoukZQYSpchj389tp0jxo6oWgX26tQNdAUm3w5ibaBjVCon7KZJuA6lZ14J57CndCW8/qiOPyEB+GtoNLnyH0O8KPvNAxZJUO6fOtSABfDIsagNdVjWR2x4QBQ3JEDvsvxoOGUGq4iWPALIx9RivioRlZ2APY260Uw82yamN1T6bKYFSP7C71Dlhg+89za8EV+nTudYLXFOk8V+bpLHyKcQ0ct7Ee6Edc+dGTvbAStEQ64QIOywN5WPog0jzy+Nzp5cd7b/ErRo2ya0+BU4ixSIF/5MwJsAqoDcimKbihuoCg8lZ7pDPRxkQnnFyb2hgsnZocHWU2WG5fAayFxJsjjA5bysLHxoh42rKBlALG36NvlrFSCWC7BAOI+Ua4PpWFED/qIwU4JPfyND3lJXvUWpQ3dBAYrOEGUa4Od8mSawTTLaMPGq42d/NmLd/SWB8cCVEG0fLZkEy7Fo6DylZpSKxnNUxiLeyvMxkm+JWCevNBk8sGuLUiq/gRtcIpWHQhrYwxoRiyephENXySD14fmEDW6cz7YkU1UjeOlNxu8VfUiA9dVr8FuHjSsR9K20ZUfg396/PasyVev6lC4jIrkg4+6TVn4UZ40ApSXx9iQ3Goc7FCVXJEZaHv/Mp6GBRrqxIYo/gCd2Bm6wsmFn2mEk0fHIZbTdo78hJETG2HhbGx5ES5nICTHhlTe7B9V425Zrv14Qnn1HHfgOr1/eDPg68GZjgSP0KGkjYJC3+CM6/7rdJPLfG9Q99/FDMN56qSvqFb31rla8QbO5q9uYjoGBesz8+yHMcEGRH50DX1+n+Vku8TVGyyjHzM9rtz+6WBlU87lTXmgITf6jIc58hcIvkg+OVzf/bDJb+ZQ6jd37B99VKVUAyE5HaaUkwCIMnONQN0RZUzH8/A3jQBCWawfgeVCbIFPGRK4jBosZxk+FlPUXsbrHEWi6SSlgqt2OxVR8StGkdiy99GK5XuDYlAJfm4I1yEF8VW6eFLRLd8gPBECtmOgNBhJxOUdoqIPzaLx9rbsTbJscNY3jUGJvNJhQPASXvp0aXN4+tIGL8Whpo94mhuCV7lf4prwR6dnGXk4/6kYTl+NGJFMZ1+sUziiN9TOcHPuDI2Ha8kdrbgs0Aqv3N596E4fhnWkdqgipf2KgxpVD7fV8zEKIUxgwale0gIqbzvsPfveA99j8jneCDfGsd+9OJ/el8+nyLyVyR5fetXSBY0+FPpcG0zMt0KVTchJeuXJad510YmqY/4NLqkXzQfVr8zaYHjYq3crF3cyztQEyT7gWv4EjdhEVMhpbwD6IoyWFJrPEZW1+KtOQ29Y4AgKBhrhPRe8euHKVVN4Wo3z6FEZC9bGBdZKHzqKPMuDiRx+J9nuJ3m5z0Oi6TWy4peWTfnkIzed+ZXljiEuIFvAJJjKCS5mg6iulbU32E4FKYKNtkiCM9/Fm/pKQ8RvBXLlKLzy6SEnWdQBigR48AuRaSGkU/YEfSFRGpfkKZuNN78AyE8aDrHrCwghnB0804+nDCk3FV2DMQD6GGWpA+lgATwDo9K7fVgnoQ2/meITv0IDk0ZYPfGJ3vi1wVMp0Z2JEmg+AnkOndg0fptPKaOX6rDHLOWfo37a6dnlpsb7R1mjSFGWNoM/C1QsQll36BWp6L1Xs0VFccbBPrh1w01Q+wvVhNnihsjVKxvpnMYRSQtPoikmwQu+dp7syFE27uA0Tm96Gsvib3gcPfkke/VN/HBx08AVTsbQUnrlXjTG4vhhmnyVHQVz2hSilQ3aaUIBMTvmw5FiRJtWywsPTk+LjrCUDZ4UMidOYANVyZpCV8GBk2c6GHoZ0ywkJXlIeqjCU1V9f/th2aIvaJUMrQ7gnJS4OlyEKUePoUiPO8PfDg8s2UMbMaoIDj3B0jU5PRys7wxfeH5zeInRhjfzfNXml7mX4BOnC3jsEg77Th4ieng0N5xnh857ucF7Au58wvU0vfzTNCa+BnMEWkc4WT0Fnty2TiVt/IeoXN95FC8FYR7XVio/qS0yGitVIc7VZNdJS8yc7GZ6Z64YOxye3t4dLiDveXqrTrvZ+6ugQG8W30iPkl/PU8HhV+0l+ENZ7XeHN1/LSFneDV7mJ7gEt0GINHSeHm58r6Q0KNgY9Z2EbQT0rX5jPT15cWpHihj8CWWkSEscFSA9k6vwSHn5tHshfgNu8GFjV0L5CmI1Vv/kNR+xTKYutAlsGFTSyEEzIzBUL/7ScMkpHzYWkAysD/vZe1c34QnZ/HVb8yz15SJ6QAT1LZzTW72eyLW6T8+fkuISQfQHbO7jyJ9pkQK7AR8bgS+Ts9IPVWmpIWCpO2pNuHyiZxJMA5/gCfw9XfktTEYF7pJdQb0Hoh7Elw9pIcevfKnbjBjVNzgCAw1XW+VGO/n6iLicystoJLiavVJO/WrB4ln8qiLlLMq5wVhrdF7KViWnUcaypf3SQ8+xvkRD4gcoFvUXXmw23AXinVPz1NsaDcrqXtOF9lIe1WTDsumHqawtX/hDnqM+R8Fy5ujeTqWjkOs3WE6/yftDpCPCnIApeEVoYh3JkitgpUVmPpz/sDE/SW/wVeXeAGgYLv8VkPteo9sHjFQPr5ISSBqTYQOHDrPHjAMn802AiAGMSk0PlOyOw8rb4TrBKJ8LGQ5cz+DXjoAmFI8Q6Rh4De1q3EhWobkWhosw4LkHZsDxc5OyEpJmeoJXYG8LL06TOv7egHbbhFdl6DqQHtt5722zBTsbt02xiDsiann54pkJ731cu7Q1PMN2Cqvso2MFWMNxX+bhwvQ68AbFO0+j8QRvLbMRcVsEb6Lbo5mlMiyxKqtWqFSlzE1SmDItPTqIWUlt1DN1Q7oy+JGRnHPWj2ooKy+MkpFqFPiU6KD5VVe+RdGNpw2mTqc9w+D7CsP1bzmxyNJIeljiQGwDlS/3cUuWTLFxbsD1nSS+OdH5axvCaQMC504xaGZ/vUkqjOWcV85NU2UCv7DBzXXKkGa6tqgpFSqbPXmOchsrKlIJwp+g6ZliYYNo5YGLmqzV1ZEBWXzqRy3MIFBwkV95VuuS8/gXkgaw7nimexhkDcLpbWNDGxlx2YexwXMaylJ2bYoa6ZwcECxsrLzZ7CF3ZjjCLNxFS0mDAVzqqoJg8Vv3MAoufGUEVuVBXbLCiA1P5BI/+PrICoAKZKFrQMO+Pp8EVN39K53Ju/jFqeN3HIZX5a8GBRnBUw27YEKVDi0vffVtwywe9SN8+ZJ0xFN5TueqrZJVnao/fsnvPuGvjY96F0caf20rLB8PNZt0cHW9mqWvRCYKBrTxYZnIRmI19uYXT2bEUpQFHL8vrUzwHvRvGi1Ed7EfcNuUsZ54ZMaAAq4Q83UKbhLpSMSNIAkpdDQdkXCNP+jXq7e2syIrEaoUHjxVl5GVq6rvxUe8Cn7iI8hf8hwuVcxP0df9ikyvC0EmTvzjZXYZwBRUzhgMgtGGGjk+NKS5zW2Y5E0uX3cyn0TLJxExyK8q0hGZQVp+2jkKEcY03aMOtOi1IHqCvyAr1sjzkj+DZh3ypuORhtrsydV9CoOHkEEUHHdOcwULXuuwUjJWhDQunAaz+DoPGLdSoWRFIO+Qm2ZulV56SBIAAEAASURBVDCi8Zhg18/cI2FkAcI4nXkvvzLmYSN34YULir1nYpQddH0P+iqjEm+iua+OjYWBI71eKzg0JKkjea9jgYZFx3eJ4wzXWssKWJWVSqRy2tFl0KkMDOVIagH73QHX4f3tDhg/0Bfaxzx7Rt7UU/MG+FusCPsk7zKw8j4xO5/3kbiLr0Fpn9FbggK85/3Q/lLOlSo2II5K5pDPrev70+xuy+2Lf21sfM2vq3CUbUS68LlRSZ4yZs6c8h3W5aHqbsQUlmYXRtslkPCbUQswphnIEtRRVTyZa/+qA6h+5A/KwOdBN2TuI4zmCGCBCEcFJRChFG1hcoJdOxdGVddg1kCMFYA1DZGiJ23r/Lh6c7TkyDDLPLUYafHx4IEzy/kBBtDjIKSt5RtUBOB61sDxs5VHfFivlSsdlGeqCxvn8iH1ZgXQwspgsFZ/6kw7qAPF0oHx+OMGxhLmpSMDLjfwtMxxPeS8+KsRPezlyGIO9cWVPu0nK6xMCT7rAXZsML3hcSrMEVaUjd5SX1paVnOpXz4qWj+o+oF1wGM98VOjMy3GNeSkYUzOPRV1Qnp1Jm0koAW+6BH5tFGaYvVKHYdEYwUbBE+lu6nn41Oz6JEmDSD16upFX+hmgRppcMqxB8M+E+JLbs1XU678yvNYwNof3SSOrNzcYiSrX0gL2vGPkA+e0jPXjSf90Y/pnvj8CA3Xjwf4Db6amb421NG/+DvzGP4He9DojiqpMitcIHjyZUJNqyF//MNROih6jGKjm0pNWRnu9yEUxHKxlEQwTAnW0gHogvbnL7JRI04ieB0hTlGNTDkyNKcNQkE1/NBxFHXkPQ/o1CjEyiSszkSevGl9+QLWT9EhLbi5boSztFjehYdoKqBGpKE4YCdN5+1nnb5y6S4wGcGxf5U93U2Gni+t8VpL731Qxoebfvju5eGnz57K5oRr8LRGhLFxcWXPLDTtnfSbz4YQh7r55yf3PuDA7RLq5qNyUJGUU75VSjOE+iydFt/KVYeQmIISVhArqp80TjRSOr1B1F/1nODBr05vo+d+XDrpSzxx+ykakQUC9yOEf3vVrmtXTXv0qJRDPh0pGRz8JNiDS94ngWGruzRILAWkkSBwke4rczMNBrzpTl14f2BOHqFhw7EAnLDiSYNKmSkq7QQ4pWGe+tZLhY+/2BiAJ0ES23DKUWm+bglSObyhbzASzuqeZ1yQIw26URq8ljXo+5ClXSltrrzKncaANH9hN3UjaZz7RL0NrKRjW2SsoFT4ggs50pggb5FqdoRGVqVRVnrRkfVQn+Ta4Kg+5pjuVNc20jbajgbjN/i8jbP6SmPOdWyjfYCzAc/y28AYmp2uEz24wesnN9yhU42nNkRR5FuXkgYfud9BWhoF/Cv+A5xlq9GykdKvwO1fU7z1U1yWi4I6TTjx3lbApCWMPOu7Aio/ZdPgEIxt+BwFCxfekSEjE3+B9Y6aU18ZyXOV+0U0HFl2Db7gD1/o3z+Z1Vrgjrh6BTSUmbNMS/NjQukMZ2Ox5TC3w7byzCJoU3m3Hrtvl9NS2spU741Y190Dy+W8Hr5S2jI2Qr5xcZvOun60zlT4HvdNu75KSVWmf8ury9OFye2EZOg/nPDFbNkPGvs7/Nf6VV+vf6xufC/42CCyArlBVmUlqFJSRmRCm0ZZANsqK6N5yZdCOBNQDssZVIyBy95p/SUn59QM0aWXUL5nOQ7T9ShzKVdkC18FejGB1wosjEaFH38qh2TpgcO/gkl1DC9xpghUfJYcfGOs8JG8lKIsNEgMpOwEH7/y6PJLugQTrrRiad0ee14dcj3j9JWVRXwqDYv7VPq1a9vc+9jNy2zsNdw/NzO844Gl4Xt3Z4ffuHozO4tusjvnkmtb+V+A/w1+JW6ASW+TS9/wp7A2neJXJ3JotTJIOuTtsY3LYzt6XhKXTqpcpaUBKYvG1jXi0HZOQRiYKExFtEcci8C/zrzO7zINjKO2pxmYr5L2EEHrbjaFu0wVWaVhWaS8owYd0WBvcMo0RWxMoj5k0AdGcVFt6OGGSdemBoQ0gmFEAIOOGEmHJ3tqwmgr70HFLwNWAbgEEFPpTW8wMGv75BE0Upy0+Id4wZXRa5QJd+CNHajMZCUYVqMsCkJR8FW9yDNF2DFvpCQ9YcKoynkulY1kOSg6aMQE8MiItpUfhIKTonsA3RkinHtkpalrPHgfzN2CZROu4h/pRASP/iJd0CKjkTq+Cx11pg/YcTigIRPsEBgbuIwdvNbPgXHPBPnzgcaSswkgjobfQJ5D9+Q8HRgV5ShOG5MJttIhZ97IF5cYSnbx17nyiY2rfOdc3fA/lSePzdEvDLLCFD+4URo+8U77MBmHLMBMfMtToevb2QauikTsYE70TZp+VCM8LigfPL2oZZKspRCYTDjgKL70ScvbCG8SJ5aw2znqxTXXWsGbtvLZDzWdA51rPu9tHdI658l05FUL+qNTmarXbZzsYGazSBqR0SKdNYUCLgc8yVqdo6H4HDyZCD5tIj71RR1ZmFjb+h4ufifwX+PrjRuQiYkPawwFi9laADetHKExFxvJQAmV6R95Kc/lpNIjKbhqyIxaEhHUsc6qgoFUGx4Kw4eSle43ggpbf4gqrliHMsJbVGuKCMXmXEfw0h/OHfHUQSUWVx8lNfzJayBxXgwo35FZGu3oQXvCCgbOgCmP3YAtzMy01T4PDO7zAOHWTZbwUnbG0Qc68cZ52OXehxsqvrwyzhYgMmnP+rHT88PC+fnh4b3Z4ftOLg//dZVGBAJnKCQnLqec53eXgKHQOrs9YjeIU7xUPmWDHeUmt3QDf/aqlPvIZZ3gq7l5rlMLFLy5u+XFLk4wVA5pnBgQrMhQCm2v93VC4EzbAdctwtCIDR9Ptt7VK7xj4VlovpcdRe/jHSJXWNv+Ko2IFeAcjeNZHnqZ4Ul7t9BexrkNGPb6GLikwvlaUvdeU6ZUQnQpT7ELZ5MMB9iZvq4pZ8/MQ79K4CfC+eIkuU7AjwE4R9/qp5k5uslyYWBVbw8U6SErt+XE4Z96R+n9lb36p2UNyNpEzDa4+6yw88gLpTSQKLQD+Hk3EKNS4Up7BnEB8o6UUClwU4ObtEhJwqTvc8ffLDPpBkmiJj0YyjWSVyw3/CoAHmqzPeXBb2AvgUjexC4ecCqbDQXeEziD2BR6t4w6tFw2dsQ2BsUsrVbfFiDtyIl64yDLiOTJDCOJ376czYBoRoIjqTXOI0H6aZg4zahCONNt3PBhbNOAkm68kX/xCqaNFDMzCf6qW9P4dRlsfN40Prkpri2Qyc4OxS2QRpQT8IBJ3JT3Tx6kkY+gfGxcQ1t4cHhod1eCphy4hes+FABSBLUh8fUHX+BaGPkcE1NYT8XUrCsGoQ2cddvpYXE4DZx7m6TtIY+O6q4Jbrp6sLU7rN4YDyfOcSsDvPp+8Q2wFCTKT+KCfMFnnB966sMD9PL9EU6/vgYE2h9JQwHCEOZHARsP2pl00kiQaGmAXyuR3UQP0zvjCotChAXNbZggNEHYdtyRZrJ8qMgcGhvg0BQO/OFBZehwKk0CacQr/PWGJg2Uigt7MlK4c5ILM0rpIQeRTJeBr0IWuWQI4b8ONbAd9AQNBmPN4YgtpPd5aNBVV+ON7WGbjdoO2TpaNg2GiUrOw6MHWoBh9+bucGm8j1NQ52DqNI5wL43HsDA7zBIcPnTP8vDfb67k5VBnCa4nrawg842E2+h5rOs2vToKCGfwZSWP40U+Uvm14thQRCPQNw1rWkWi+6M85p/TmCKjDcvRY1bXwvlxKiC9DwIC3GTfHm+ghzqNgP3+dXYTVcYdGhErodM215Dx0tTe8EHWlT16OKKiTA4v0296ns0YXyIoLCL/KZzeZcmzMD/Px+Ugi8g7w13EETBOWYKGaTxCDPmqP097gyvLZcEx7cMxMENuNTrw4QohVEtPnfPs/6E90AT4phixaJ+MbqlZNcUnFdP4Qmf6S+xvQwY+/0wrvapLyoHbgCG8+Ozl+XvIPSy5yTXZUWL71R6e+mWH3BPT4tvoNHkykdFqrnyko9EHuR0WjvDOJf8pb0DMgNXJcQ/K+JWGAx4hEd71x15/Q1cc8I0goKYs6F0dVrw1Oa3b+o+4+Y+O5In0BCFJiiINJyftkEcDtnQimI2M+BVBnpBFkpYN7tABD3RSnzse7OZUoYA2Whbxa58GK3rAJ/XGoKWRK7tISHqFSz4mqYdpIEOTEsCqN34gCix8JO5YRhKxLY0Fij0gUz85AE7d+ozG7ScAKAs8OfGHCfxLv0idb2m+ajqzCFy7A69TetYc6XFvPW9GdATvNKumc+RMFKk6D33hne6yU+TUlottrB+O1ld4HuQCo5sp51jlU27Aq08pQ7cRlxxqqQ6lTCMnzcM0IH+7573W7+uOQI7+yc89erh39Fg0AbMJynIgPStQpNIYpUgJpCdEnkyHUZUG43GSOJhAJUTguVBhCkgRtZ3fSiOVMiUscOCSfD/ijJQzaGiqXplxqVyDVkJlRc89kugv8iiAytRolhe/tcQ04FO88eZ55LeC8OfhdUjxRPgRDcEh844HrMXeowdg43FrbXtY581n6+v7wwkc/iTPf0z5/mLKISYH9BihbLBy4pplYcf3NtuALJ9gVjl6nBy+6cLy8MjzI3a23R/WcY8FWFQM8ThJOYZZHS8VQ6zypX1wbKuQPRe0REnDum2qxEsOz9R16aGdKywZ1TmktwdfXjutkGkr8rVpTUvoF2Jj2E0lsJEIer6cs71Fw7qDnnlcKkxrSxcD/O705vBepuw+wNbv33w4y5sUJ4Yvs0mkL7/6Eg2QT91PwoA7ovrK3kVwhyfOpeUojcdMMk/vFJgriqb2oMMvMWmY5OmrzMN7rpDIro3r5rzz4m2eXz1R8Zw6cxTh3mLqR9VPUxn5STkHjmmASBP/iGd00qiCx5ifhkgYF0kYbFHKNDBxJwKdgUN/zatjKe85RZGp/DYB2wTwx6k8dwTFhpQRWE6qMqSO0C0FjkOYMACcdre4hzJbLwzAHtx/y3l83mvtIZAFLCd+UVvH+NjToXxQOg0LnHXCjoCv2PXFa+YbO5XX6dpeZ0SpT6VeTcwVDFRszMKvtNBJplBIkq700VxEFMZGPZtjygOjrHRI44iAU5wCpVvK+ZcOlMnKGdr8oMs2+0Z5UShbkbNx6nhCH0HTIIkP/MptoyUd/3sDlk6ZI0bsp07yoGbgii/928Y2DZGI8OXER3jJSBOiSMQeVmzzzt5Va9SBEfV9kg6UnEkxo0zKjjn3Hevej/J+j1awrHa007hgXWv2dZGJeepdX1t1vz1i0SQvypJ/i+Vm+vE5SZalnOlFm3PSHFHaCKGux2wDJv7hv/sSAK95vG4Dwtjow5o1TgThqBMCiuEh3QR6ASCo+OrMIKOrxRFlyHQrjI0DTpBfruNM4qF8HM5fMSms6fwV8ZZPYocTUsEzDNOxGg+WSukggld7yC2JjNuHjApL0eQ3HpIsdXCnGJkZ4pGREZV0LGqvjemnvBTKqSrWXu/SGGyvbw9bNBgrPEl+5dbOcJnpqTHdiW+jQZhb4vlX9uxXrjSq4Nml3NXrO7zCltlLeNVRXKo7t+wtXXQKH3efXhg+eGZ5ePbVFZ6toDFiqke7GMBdKjsHjOvH+QluhUqDAn71Y3xxcaWHJY1DiuAcvJXIc2nZg0ol9hpe5NFGVh4cijvULge1cCycsrm/QMKIymKvzHnzPG8BTXuwWzABSWqG+ChnPux8YnqH97MfDB88mB++lS2v/8LRPG9gtAHhaXzuiF8H9iqc7yLArutOuA6/IuHofiPv8TF+Q8c8Pv2+xxGRSx3YYc2zD8hpGW/UevPd2yXqKcs8GYG5qCEr3eBRvP2+jPcODILu6Or0mpXHXqA3pKWIylIuDRo8+g6HGRolXwg5a8MDzRlaH5/VGPHrQ26mOSqcdim3+OQHWF16hiA+cqSEXrVLLWTAe+BvknRXhGFBGiVg+Ci7H9Pc8cEqNpFpLfDBg2pLPSTf6OB5fk2HsPZOnQTvkdOB/BmQ0yGhSKldH/BchPwDe+ArKDlyb8myZqhwPt4nsjFIEKXupIHCvw3Ihz3YCytLPmkKT9aP0ITHhBqDsOf4OifhyyBZDVDBoGryOEe3dgR0FKc0OQu8QV0bW0f49gsZ8G0Cec6DnzR0bz1PB4Bz8wPDeQ7w8qr0VhY+oTu5oLzgAocNiFSVz+lKGzA5kOI+aTYi68QDH7Ddw+7LWOwUC2vGlGvtkOBhdBv+buL/c0zv6mcVM8CEPlX5Hnq0k6Tc7shtp0h/9b7PCh3SbTqyI96nnjoDPEyTS3nlszKoL4mRLpBkTbOOq5Vc7xz6VPqvmfVax+s2IKD6SKehc2S5YiMQpsyUBx2RQxZ6gPfaLBmmaBjzJ1uZdFwmo/SMBMyLIEJV2ZyA+yvSya4RSf1axCOqq6Lwg0fqKfLaHKPz2fmzcQMxII1+XaK4ctBqnTFH5wl8OcehUpaewxEt/MF4Z9hhg8QNRhpbGGzl1t5wiZHHSzQgL/Nimms0MqeZb/gAN7Rm7TUSbcSdm/h4zI4NDe9j9j0fijJPADuXkQq86ZB8puanhx+7/+zw+9fXeEXnAS+ZOaRnzsoM9Kh/skwu9xzG1GZvcpa+cDCEdpjsqEDsNjg6ok6WhiSG6QqsCuaVjUUqPOwaNG1oxOmflVBdigs35EI7iI/XhHIjcBEeDNI6uFvO+ypce6yuwokvUKR2A4YOeC+z3cl/4fN/iOKPsmz5GwjXTxzNDd9xtJApvTV4Vzc+nKg8PuVu42TF1bT63gG8ZIUKlzKnb+4CY0VyKmIf4NAG1mk2h/3acgeceWqBc1HpRbusgvOBx5vgN56RxRcNnpFAWkAm5JhXRZLuuctv08ngHNL4CanYOJUfRgx6hyy7UZfTKMiYpE7VVy0P1vdK50nnXBMJ59JROwvma5usOrN0cDAiIk8baB8bTjtXozQqNgxuZ+P2HtVBgY2UQ0T04PJneCQx/oFw+oZ4a2RnY1mdFRuT6TQ0NpzF0xT1oRpWAhgNHiQifJbrcjpNA3bofRBHFeB1BHZ06JNC/KKbNCg0hrDByiGuheNcv/YeljY2xmf6xl8yJCEeg/YeHQ4DqwFUJJbLVBLlxKMJpNG3NtfQWUghDuBT3ykvnDbjW5DcYzHPUacyhXsy1ItXiVnwZwcgjTL6iz5lAN4y2omsRX+bctsIswaHq/iSPqtNzy9PD+fOsfXPqy5/oQ6Knl9pK5L3QXbotSzCq76gPuQv/i8fkRH+wXUIr/Jpp+0z6+Phvbd4R8hdi8CazgGC7PYM4jyOUMI0hJEw8gV/o0O99T7IW29A3FDr6NrO9xlgVXTUqoe2A7VhgXahVBrBP+AVNAcgCbYyo+LNI7jXCKWVj2O1MpbDEAEVJ+dW9LSW/Oo45qVRyFkL6pajgpgXPqRTSOilwHQyQKcjJAICF96BK9XeoWTyKJ8jSCjOtUmR0JEHa60PecJ6lxvljiA21/eGa9y0usLo41kaj+e3tofrzHlvIYOB7C7e1mcvNTdQ7WlGFnBSIXfoKdyg4THQeXPbXsTyAiEH5+u9BGk/8Y6Tw/e/eGL4D9dvspqJrU1S4e114rgA+DS6qzPUnhXGP33ZpbT9feZulucSVyVRWzpsGht1YM9bB+PPI0NZPVjiJDl01xapVBjTuVivyWUwVvoOalEB5ZSTy3tvcb2ldAKCSxsiOHSpvBYgXX95nlr6Ik3EJ5HiLOn3Mcp6YI/3S7Nc+C5seJKpnAqaLC41MMoX/wYo/eSQbSF4jjL68CZvWIeUuMMlOJ1mkn+nHZwbzl5RNGL6o/dErIzKol7kM78Oe8Bg4yCdNCCc6p553oXfyIGb+XAXxXN/wqWWbjXRGzztq24NJLtOCfHrCigf/trVF/nYsAnnVEpeziVd/NXOhsFnTE8clClreeuaIcdyMhRbklE65pqTCmv4lrCxL7pB3uyxhU70H9SiaeLn+rp8WsdqZJl4SD5p5KVxkh7/+mruPQHvEmobMZ/nccrR5bF2bBxH2xDxbCw+ym29TOEiLvpyitCb7BMMMWfpxc9ok3APQ8Bm6hU6uVEPwSMar9iEchlhI/kBZWzo7VQ4UtPnvX9AdYheEEPh46tprGwQwBU7QUNBNLEdi5ppgB5pZhmIA5IvIPUzCXANNHi1PRaggyh5baKPZWk9sCZOcO17O8R5IE+IZuOi/h9ha6LH7l8eLu5vD5eYBicbKOuwTBcN98Dy1bW8sDb72kneXEf6nsfWkgKvnUeZkPSlvZ3hFe6/Pq5Tc82/hKOHyClslCM2KFqIoyjr6sgKPHHg+7KR7i/9qnNsX3V87RHI9d3vRuELvYROFc5ClFSQ63nVg+c69MvxLKMyU0Y4mOkOHsUHGFbJyvCb0xgA9o+ntxDIym8kMM8KVrGfC2l5odY4vJQPvjk3TRgZwFmCuDkQaVayNAgpBahlgCl7F5yYauSCfJ5LAM858oYgK6r2GXVsszHiGkvlHHlcZivlZ5iuetbVVNtjpmEYp4LTDdvsoSwT0OadG2c6Mg0i6CYZmextMsxkHvSG90+gZM+f9dLD8iJVDoZkXX6dApicnxn+2sN3Db+zssHN9F1ehHOYbUx8oZHB2L2A3PvK3rqOpJ4dBezqKBziyLvLwWcQML/e3Q0R9GhwKR1qKu9fVCBVflE47TJBC5xKhe61jem6QwKY+iTRsvbaZgiMte8UIYSyvs/EwKik4UceRc4h//aYrTq+AvQmvD1nGjqwdz6CyIgbRMSK6hVjBs2fB70QMg0fNKZw8fSMwWMFkEefC3HjvzzhbrgEv8tQyU4AdJRg738W5D4vIK30OilX6/+BI2D5gKYdEKelpiBuZZ+iMyBPNsZ+TgFnR8HVYvqT9wbslRutHHyKB1aSV42gHQBwkSk/VhqnfCyb1UzAmmdmbg4DrW3d5kbZssoMhHvougctdepCiuyRBCJOCY6OqhyJglfcnlOGjRES2JwKcjdXbYQrxkLuveToN88d8OuriVMWHN6rywgP3g/oJDiSIxn8dCsI1q5y8lp76g8IENt7XtMwBmLKAKdi9IuMzAQFttdlNGVCvi1runFF5NYjtKZq+SZRh6is5KWB9JosxAtddWaZWoIbNJWnL2KmaUdQ4JWE9pVmnvlAT/xXvREJn74U2iXOvipXnOJGI+DQZsDln86myMjbdrSEzD5389DcaPjQhROsRNwffuvSrey67LoPVy+GgZTQPozkweWoCreiHuIL0a7X1QnLqkrgYDc6shPiaqwrPFd2RONFq1a8xMkaID86mitIwRT1eeah/LkH5e/R4cLE9fF3c/p7fL7q+NoNyHD0ERHpvOm5+AuHCcg9DcWXus0D1K92RH/mN6ZjGMvhOOLMB3iNJCwJVdI80/iLI2kYy4GrQDiPoJhLmjorJ9osvMqD8JIgKZjED56ktHwupBDYBOmGP2XkodPXuTE8ewUMh444WF01pqG4xbLbFX6f501gn2cE8oWtrWFljxvGGCRz3TBkcHAPq0VYH1FRpu194TzhnxHKPo3QjjfS6GJZOeX2BMaem2eUFuMC6S9lrHAP3n9y+LGLp4dfu3yZBw55qp0SriIpjXiDmEoMLNgyDWPQUC2K33XjUF9Xz/Ad2awa6kh5rc++S0Tdm+q1EML33qBhPvs1BWsPEIW/29HgtUOl2kTXeTANHufpbGSdOvQTMIK/bGqlC7qGU805SrHX61B/Gw7G1Z+EGe3edFiFIF7FbQBOEOjzMBl07K1vYg8DbX8i34evYuNWJpJDI/PvpCl7/AE5cxMXgPK/8slMf+hDHAki0ScwJFlW22r//JPmfSPjhzfvhXHk5HSSD+TZOxfWJ+1t1PKApNcU0Kr+OeqyAbShm6HBQo1Wj/h7eo1cO1rRZb2PkhECad4GmMbnOM10jPdbAEkP2UDkPZ4lytXCADs68crwo/yODuwhpDGVbxw0UzU6BZhs4HIfQn4wYw/w+o29Y+ufAVWaepyNSqYBKa6v17V2q86K05P6msExDQVwBk8bTBsJz4O74fOcNo90MeAnKNepR/3UdNOctkqnBV/M8lzkTcNKnjqTjjs75BM86BLfTQcMPDa0dfO85JCS980KO/nwpYx2NGYN0nDoPYlZlG+gpxvJ54DRxhQvf5sczrOq8hw2epANFO9dnhv+eGM8/OG1m8MNOqX6gjHKl0Y52vcScnzwY6j4wKFp/ugbyiNJYR1x6ZcubZ5h4YZO4ojKKUltFlx82WDjSoXEa8rpeSHFhVk5KKf9AkAu9nMa6y02IEcTHwrmRAU5h5rci5zzamWlwmEg6nmSSzSXOfIt6hmCCtIDue5ifjUsogBKYT2CThrQqpTgTINSKJOe4CpwahV0bEj408b4TLvJJn2wqJGGXpSeFsvAw79BOkcIJgfvJNgw6rDh2Geaacx01fqt8XCDz8Ub28MXmLL6Ao3Ayyzb3ebl9qrIYKNTudeNK4hOUFvOs0OuDcjULCEifgaXyDrBe0F8q1h/97lcLaM7tztRFTqHa+UTKNQPcv70u+4ePr2yNvyvva00Tq6MsgeeteDIqNPY27bHUtUOrKR5WMntOYrXmR9ZcdRjw4+6YtdoBnBlUJsGPCtpPRVdNmvaEWWBk2DDYinP4h/wokuOaQhcdeXT8/ZWnPaYYUNIbeLT1k4N2YvTZzgrhHw7ByHb8uZf9SjhmETvqQRELiEJCDL5ZDVTXmyRvYwtHf24FfZz2OUKU367PG/i4eqh6FXcBkXSVBX/oeN3b6CkGwiRe+hf+lWdhr8Ujq7II98/AIO3RnU1R1/OUT6mRo3PpWFgZSJlKMu/PuSfNgh/dvnVr0NKjpgWGDsKsqaetW0y0HumnK1vwUUySIKThJASB4kGO/m1Yct0FWUsZJ4Uwy0FLGNvN/owH+e04bMBCVzgwQOM1wlknOv/8+T5+tiMJIXjo037S7T0mkhgOh/9FrZgo/yuKBDmyKMwVA15xb86dGpOfcxR6aUxR102JPrwpDtD6yDSK9w1CuzXErLay5ONaunV+iG9So89yY8uoJtXB4DTwO4UdMXBZORc3PqqfzZee0yr2ZhoP0dq1yDy1NZ4+E83VpjmprOGAU+B/5D7hweHe/DBfVH5ZVpMnqXviHKD4a9TpE4T2pnOu1vA6vtCmjMlTsxRsXepaMbAR+7iORBxoOQsb9d5NbE6Id2D0oKA02vp+kMqH5PiozxJQOprHq85Ajl68heXadfe63BLfFFW6Mm8JEkSOYJJIgc/QvfGQ7DKweTCeSGneryM5rqKfkXjYVKDFdRTlUgJ/vxFM5FYQK4JqvqJoc2G7LjxMAJz2HDFS8wPUUqFucJcBcAJ3ujQZO9zuFwi01UEHxqPTRqNNT6v8kDgM+w1402qi9wkX2PUYQ9JF3P5p3syLRKkXGY6j7G9+eUNb1+BLOvhpSnH6Ql7PE4xuPpDVmfBMc2GizEyDhoLgM/DUcjZu+aGv/XIueGzn7/ICiV6LtJSLj5CW7ntbY+ATQMBbZ0lH3DYGPjwoVNJcXSd0v4nniNMUapnNnTc6B7F9L+yht8eWkV9KlqV1LmFTW7udSAXvX6n0nhSBih5aQ0K+okjp5IjM5VeXzBY+HF6yAbMm9DFv5glZn8djQMTHkjSBnFmknwv2xh6BoH7bLyB9Z3t4vD9KPbO3WrlBjrIsmN5okz0J+OJJNq0PsrXj0CSEXj0Y6NR4YVpxqTCHnTUs0E28omHNGuLMLWVPPAJBpVX9QqsBArdBDaLCD/qz0u/ZCVTP+BTXvWV0TkZNiLStSF2iixTUOEJyuRLo2hahsLgMOAJkuXrRo9ck8CvPMf+gDpCUT/qRnktrkDRQ8oEIeXIZQ5FPdUftsYfDWCOZjqo8pnvqKEf1QiCgoRFaPz02TPDfUuzGUE6RVcjF2yNzI4ynGZ1+xhtv8/83FPUx0/v1b5rCfTgt2FQJ6ftXHA/rRiHAPXE8tY75/qtb45eYDGHo5B6e48Rp/zWXr73c4pzykJXTejT9mH1Sv1VObtU6bQBs076GryuMZvR97kSKIthGEpI1uc9DBPWE8upH//Vh/dCfHjQGOPId5ky8usI3em8aeZOJxiuLi1N5x7sAkHRUU4QxI5gg56wOpe+4Km4OfW7bGMaGcrmJ+fD8F7bhIknf3VNyDuP12xAGM//JaIV94bA5gFBiclMaIlZd5IIeZXTvnVoTnvFCZCA0Si/nKfxEYiKYdAIatL9DRh0S4CGixwNVTddKUhmvVkPFKKRTwwexSg8LAWnyLiu6S8TC6/WSnVuvAcGynniWIfG0DYePtG55bJcGo4rV8bDpdWt4c+4MfUUQ89X2CV3h6knuZa8TjZCMG9mG/Ccz3RuUmf34Z4s0+S39AV+y9CA6LEO3x1az6KLeUYpechNufiEZ+XAYRJk0NN3PnZu+CH2/f/P168PqyzrPaUDKic4rQyuPtLRl8B9wASsDqfz2/M2kKYyUhuteAZqNlpRiugpjhudGTCqUWmhQ7WZIuvhpYKeLJpS/sAJh84Y7jkPNLqNpaCtDpzScNRR+kgFpKdm58JeZA7gq0ShkKreFzmAU754DEDq3ocq5UH+a3UVeoe0jamjupO8/c2Hsp6ge3aSEms0br81uTVccssZytVBAcqXPN33YgLSzXOKxSOUBW0yUJ4Lx0Upi54dfRSs4OpATfCrrhxBUVbdq9vkwZt+WvKbJh/WO2DAbUDEmMEhZ0pbfFa++KRio6kO/OgT2hBuyEPL8ARYPmGFcxJTTh+Ob6b+0oiZnjxK2hiBL73Uxot4SPAb8coWXZbEC7LKkiDmXF87RG5LaC+LZhqVFEf/sHbMn+ne5/nU2sZwhrpmB8BtWpTN1yFTTXIfwaBNElNGTg9PDI8z9/cZtzOnDih5pAWvY893sH3Od508MSzaoqBeeZMP/YkwlHpqA6XMNgIblP6Pt1aGV3bG1REAOrqlnFSVQ53o1+Lx3yPWVB9cG1wja3IKxjgW/eAtS9w/8r6lMULa2t5paP1muzCBn0YJfOZ7H8qx+wLLd40bvubWZ2TsnM7N4ddsf+TU8Q1mRO7jHTwneGzADnWY5cs4mcUQ4gZnHUriuREAUHXXsyxjtiX3d76dk9/16s7jtRuQYf+DwWlpsKmuEA5i0kgPOVq56nGCMnwU5Th2uFCdpHEOJD8KUA4jfNBbDsvUeuyqKJrfBiH1TjwChmIpMhyhdMGCW5yhR44NAA4WeiosQMAJSl5GKKZZ1qP/cuoLcBgS8HAfN8ppKMY0HquMNq6vbA+fv7I1/On61vA8DccaoxP3GPJQ6fZo+01aN6ezNtiPBBUP+zCdBRAxvjZRlKcCiVzq4xDHmcLwOq4vvknvUQUBS60j3tCjzDlSUQmnuEfyC4/fNTy3wUhod5tA6by6/V11onZKbm/W5SEs0rUEe7bFGeXbEYi91/S6ElxUBfrRYYUWFWfdvlyaVKbgt3ccTE0DTVppQ6iw4XfgqixWvcNOVU588IGYmcenhBVAndgnSzlkc5pNnuTPFVShQJls0Ec+VYhzK6+wIOFcGAP0BEuE1YfY7mZ6a1Ms2M7plfvoka5yE9P7IimrkrQPeWIwLfoUH3hFnV6r+V7zkY6f8r8KIElrslrGEB59VQbyyqcNuLK0vFZxcyOaMhLQX4/rjP5+rL+Qr7JhBBrqDJza3MC0TPhyetAtNqTVebI+2LhJW717qFlxO2IJXJPPC0O+zzuZbmDP0mimA9WpOpGtFBcZulMndZ/JcwGUASBOPZzC9BCXddzprgRgDYgd5UYbyueneB4IEcqOTOMZwGMH0pRIc+lTxqaYDmasP96T8Ch+me7h/EXGE/9y5UrRMrOxZOdFXLk/wJkNikJxuzIjWR/DUTcHdDjgIHu35X4WsP7bEXHxgbVmiS17luHFTSntFF6jKXAVXj/soIZnhFrETidBEN0Dm8Uu8KQu6h5ea2zVFzyJjyK8KI7ViKxIvOmKDjqgi/O8OI5pqzmW/o/he49n0a5wn/Y77j0zzC/QslCcohxIiRy59LfZIQZLPjogLY05eNLYeM25ZXjy/jv5eXMNCAb5oFSLNowieBwZZ1CYVEcMFb/ojMBUPyCfU/PDoGUoqwDRQgNNpUqzLi2o8Z8iqFVhPOq+CMJDulZGCSc/QMoPlSWFbHA0TyJ1YQkClaXmBZK+ju5joiimypNHfoKg+Ij6uzQeWzfHWZr7Eu/n+Mz1zeGzBOvLLLWzd6N86eGpCdA54rABsXLYm9AJnJ92esldc2fxxjyhLAspQG+T3qQVG+DgdKVG1APuLIsFhysoUD2yyh/nAaAsS2XecWFx+Ec7F4aPfeaF4TkalbuBM3gcuERUeVUY9ORJXRr4nBLyWQ1vbDt62tG5SbevbA9Ru1pI1QBq8XzHNjm//aW+ZKc3JHUOTQ59xRFipYFHvXKhLU0rzMJ4TYJ5EpS+58ruJYc3LeXQwGUjUn5RcBZVQW4QeXyoMFECa6VWmNAh5QUeXd/kUf+8GrjReJj7MTFisZiAaQXWTHn4TB75GN+0QdhM8AM1OL1O4LUXAa8JtaFvT9LgCS6u425VmFIlj4XJig6UQHh9x5AjbptNIWxctU+UZJkIDkyUZoZ2ZfsX1jGfgJ4BboGPtnchQbCUsjj3XgG0yLDzYC9eJvRFec3oJXzoA2WjNJrApiFKPSOdMk6B2gmxvMvjoyfg5D12Mp+RJdnYaBheYUubl5nn1zXzgCE85bwHWeUxTYH4inicaj/ZdAStNEnnC+g6KGOa1lA3nsd+AcBvGi55FkZ8OYTjWpmlF8ppVfEe66ew/JW+y2ankOk9bMHz8AFxBzx/yhPkf3S0SQw4oF6xUSidlFM8aah8NkbPsRN3Rt+hqfaxC8I42wCJLCyRG7cw2qZhzr1C+eXP7Wq04RloXqCzs8TIYxOy6zMHNBxTTFGxWSI4XuFZspt0bu/mqfNzNC7rdHDffY5JQB5a7p0EfRSUCBkNRPzSFVIrv5lRGrILp0K0U2nF+E2b8NXHV41Ajn7zN6eOnv69D0hGxafyM0yKSCCOrqmwE94NjuGbkiXYD08FDEMmllOUA9Z1voWjZshvGRV2ETTQlE2agnvwk2BKegSmUBoX86UjFpQdgakI2aIdI2k34TPHr/+xxNZ9iQ4YZYRHy2AgCRjUzdtk5LFydWt47lUaj9X14U82WWFFOe9VBA6S4tXY9oLzhDblXVkiz7lJG068z8BT5aBPz4bSHpaFaGpv5qRT5XRmKlxIlMxW6JIHcL3JIKVR8RrFfvfDp4e/x1Lij335Ck7jMm2eTEWW2mpCUPlRxTYKVCQu1IXTPb4zZJdKMMbxSy4Qg1MY1aRnFhdeoBvKiSy/lcK3yq0A4SmM8aPODX3wwXVGdY0PUYSI38fI66RGMc3m0hO0OAFW+3AlOTLkMBWf6+4j8Q34S6fF8oGVn+JZOBt37xutwpdyZAkvvjPZfDBE+LIyS1GdOa0QeiBURFczuTV7n9P3/SRmsElN8p1a65tV2oGwgvvUupnSFF+smkCsTbgGtxI3N4RKuMbcdAgQSHhpuprHRRD8R27n6UXtFA0vC0hvdw2CrkhScnvC3gvSQmW3ou9reTMKAibBlV91Y89duPT0+ZWL0jz0uI5Noa2tHO248636xsrIBTSfyENieQIrEmWQsoANZ4gji/jdCtOGK8iTwA2NIKEsYJxbkiJ8KkH8XJnPR8NmsQyn+rW51qWyjnB8gFHmwk8S547ujVnhRBoWDSV/c3H8W7jA7LRqO5SdSX3uZRwMV1hG70OZzjaoq/Mzs8Nd2GqEvn3OY8U6Qf5p7P/OmUX4LH9zFmEKJzYW+F50oyqMJn44AtmQdewwoiHaoyO8yNyUz86AZljjHscm2wmMaCCWuEcKA8Pzaz57tjvcImYtkXQfDcYmnU5XhN17iskwfrsspWPlr3oO2nYYw2CChK4vncrlvdUJ1Aficx+wbZj46EdvKwUMX9WADE/97jcix6KOoyndE6ecDxoYMDYMwjK0XGiUmADnTYUOkNqo3O4I1ROF0/LQ4EoNQGkBJctfdB/TSlenSQtOV0ko9y2KgNKVjofO4W+Ylq58cNHKc0KQwIjcZDvY5iaWGx1yj8MlenF6u2Qcfu9tHeTl9F98ZWP4JC+pf4rluddp0X3Tmo4cxwPQQODb8kKDkj5jEVzKQn6ZjkqMw9j+TkJjkpFIyVn0lC/1i8s+HSNKLFl4/UEM9+1PgBWxdBRtr4LA97zzzPDLPBH/8RdfHq7Th/WhOyWJ7jiToPdAbNT8iN6lvBred4Mv4Z2OqvzUHR03cqPXSzRzmi5bjlPKcvEDjEM2h8qOO3oR2V1iFr1DX13k5mQBp4yVyiMhNLYLIlLAz2nm6JNUdjEtNkfs0CahGjjlUAnl9KJSP1bJCiqmKyM+Qxl5iT4wHslMZjACtVZ6ke5WCB3DZXQbTtUkMGQXb8gVeNNlm7oEjoiCf2hLYU3QT/gmPrRVOKAxzHn4fJCVNiuZgHM1VB4iBcIep5p1NGljVcSZCsWJvGXm6MlyLu01ONuQ2bCQnHrjswziUuY0duS7Qs+gBQvh0YZTzF0vpnvuSNlatsYINws78BvfM7GL3WxgjByuBHLk4yIEl48aqH1QznNldwVRLdJgxGtQhZDlXJFkR8392M7SqXqA4LiPLm18pK1F9abwIl7o6OdZlSVuYHR/fSKw/LrUeGzdINuDEsFhXHB0ZUr+YqNmE/GIxFzx8avPVJg08Aun34DXzEY3GuN6A2meYlr0c6SrxHmC/Rx+v5IpLnyQmKKPpv5DwBGaoDYeru4qjhhtiJor30mjSynrEnh8zkj4Mb/rrEa4RqdxV3zQduPQA+ahL/P82JbT6OCWyXkcY0Qjpj+4ueqDi3PDmRM8wqcTKqRH4rg0oXpchy2OxjMM5bzzSrFD6od5wtuwYKNF2wYw/Unwta+vbkAGNkqFCbtD5WCcy4O88GNaTjS1UnNdN148b1iLYMEnKWwHpwLHgM1BCleVS2WXCIrIlI1ViXMRq/jQ5rLzlaombAsMmeLSANKQf0vpuM7h+k4OluOO6bFv8fzGFrvj7rHo2ie+0zOIXPTi2BX3hWtbw2dvbgxfpsHxvRbi0FYqMhUco6i4OAnlrETqAUBScSAdB9Z5kXxeDDWXp5zlEz0oj0aNXCWZ2vHGtsFXp7Bhi25rCCh29CEUh8Wh7v5Obgvj6pEfeOL8cIVeyL+9/GoeMjxJ5bRHaEHb2/70felN/VP5ybTiCOcIapbhcTRGmg3MLvTGVKR96LimXOoZTciMcvAXe3GZkY1pfBA7R+4raId2XXJ7If1IlHNTLOcnDKeEFbhusiuwWSmDTXsvKfPs+p9HiMCfuPmTt7K+uNURCKh8RSPsp5jXwZtob4nixczb7FiJqrEJTh2BTM2XikWuDaWF68cbnQQC9DcCdJYet6/fdc57jkILVNYlKrwv17JRWKZHOUfgNgj4WeRd93Ms7zZ9nvx5/NP7BC7EMN0HE5Van/XGsQ1bngWyE6Re41fooAWFMAVzWdUHDmGifvVkpwwHsUFJEIG+8HFj0y3nXwogZ5/5hb6ybtvQ4He+izt7O5FoD3iNtG16sD5/s0/eBp9t0oTxfMzKxT06Pbbj29zw3YIWj0Nlum0XVvKsEjrLS620MTI65aO9rHe18uyI1zov8A4dbjfDn/qwodKUjuoLB+JGZBpQ8OunFa0dubXpPX5z/4Es9WowV169SBw2qHqTU3DkpM44pZf6Rc4KVH2OyxEZtQ2IgJX/gCw+ic/knk/lQoRXGCCXVMwPz+CKvmNCmUAWymlt0x1V+CqIqywqqEBfPm4nQdo2PPJ/mudALizPD0sn3AOLlNhOXFLyUmye8J0Tz/135Am/kR1lNbqChi9jwNSU01iv34BQ9INIlwBoz9dzCaWyUVqRTbOVTgYEe8WUV11OvnLeGRSH4umZHb4HeMukAHkpCUgSqkKDrgAartxDaDjUgUX8lURu/FAgxoL3GIeb3oeMOPaYJxwz3Fu9sTW8ysjiItfbOLG9mEUqcHprOPJNWvdXgL/IVgAuAXadubjtAXhoNlt6l+t6lKtVRXOMYoqjE485WpFTnM9buVuF1vkrV42AB9rWa3tu9hRtQA7Y3sEt4aXWzA3aqtC2CAlYwMUBreg0NH/zL94zPMpKjH928dXhIr0T52qlk/sO/Mq+GFLZ+JULRxw2DofMvVrBXG6pnOlB4dWu3z+k4npj2x7dLjcynfqgCGakumInbe9Nbg9AqGDaGFpGGw/kSkb7yUXsKzSJfKywNXIJSktx2IioT1EkNHBSNk2VAoeorX3aRDyZOkTfVsgiKg2OwNVvpSg/uBv/5qcIIPGjVj7biKAD/XHS0RWO5sObbq64CFXf8e423D78eZaAf57gf5pphCU2xzvLiqATzF3Oc+5nkYo9bwOAvX0gUL/LQ3oaP/5Ssh7Q2ZEvq94BUz3KqH7ceFC2jlwGqgEA2NJPYLj83c4C14qFT6QuAIbF4B+dQCaB0XzxiFi6FDCoZG8pkqJzfCf50JmCZ5K5LvC8f4QyPmeh/1lvXBp92mWk+jifTOYQ7PSNTN3i/8FBGf1Ienq3I139b5cO0ybPW22zFHeDDtwtppdvsgLyBvXw6trWsMpDvKvcS9hAHz5QtwNeX33w/P4m28C0+gAu7S6dDDClo6Ac8mlfTJ1WfdJnOCdNm9poqLOsdIMfcaSxsTBXruTLCAq68a3oU725Mkqf5LxhtoS+rIzxsZbTpxvJJYWCGspzkMinv8YNfzF17CUt66tWdEn9icUFvZGGzZhUNlXHPkBrDVilU7yIPz10H0tEut3+P19n9mPZdd3nfatuzUN3VVePbJLdHCRLFCmbnmUjlgEjeQjyFDgxYOQpQN7zH/DBjwkCOEYCGAgM5CGIYwNOAAc27MTxIMuSRYsyLXFsNtkke66ueR7zfb91TpFygJyqe+85e6+9pr322vM+kVQplLw4Mo08RD2gj97kgT+/81Nf4bEUZeONxVWt/Tqfs+v/6YGA/Oe0z0IqUTDbCifz6+rCMJzUhF2orEW5GJ/K6ZkzWrbSK+BO5tFSsRcclRG2ICJYgIGPfhXUe/B1DrhvyVYlU3xaU6fHUYSkEhoeF3Lqiio2AG5RaTxZ3msf8ua/t9a32idULEcURh3mHAXfCWZ319r9tqWktDqkVBzE8c9QAZUH8BqjwvqD3eXeVonhGl5aP8S6qWkcz+xbCPsjKRxKywUdkdvoczhiGycpDjsfGVrzADr+T91ZCkyGUIz0MoMMi+U5rVPr/n/hC4ttgUrkP9662755xEmcwDiOnsKgAODz3gJTR2WYl2VIuvva90Ec+MkO4swTNaEDpfWHgPZa3LiY1o3h/DlEZuVpIXNToJpJPhMfonx7Vf4aphx+Ks/LJOqZwBQiYasgms5QwrmxQu8MLWEUozwbXK01CiH8xRYDgeNXGACSY8gT5wguKVY69OINuJTWd7m7EXSRSsNNXhdJc5V8mKNQXuRImaXpcZZM8r76GXoPVB5T6HyCXqabvIb2NkOOEgHOE5yeK6E8KsTzug53aY0zhm4jwd3v+hHtrBIpKOVBGxEHPxGPH3l2CKhvuYaGcMomGL/mZE+7YLFP0/pN+pLbgNL7qa9PJq/V9QmNHSeOhbao10m5iRYkN1Yu8pShaCsKiVWScrAdLyo24+dEJs9Jnl4+zi2n3er8lIVCNwkee2MX2MMwQkU7ysqhwZDhF2BP+HjKNNPQ6I/hI86f26SBt8Ic5f0nm+0BIwm+BsENeSvYns7cJdzZgY689urP8py73neAGZmIgX21pnjq8azB4jPxXmp3j+Epn/R3NpaykRUHZVyBgTvISpfWVJaMMkL9G3LzLDd9/lhKEgaPxorfSsayGaQEaP/lN+0JccwPRyjZAz10IQJgxotTWR7T4FxmHvS56fMspsBngEd+/QUosOIVDxEVLs/qyAyPIMVJlW2jKnNTFhGH5sTXwPZD1w9VIKev/aslnMdTNQZMCq4yOgdrRMBFxudGgiFKGFoJaYAyX2FUwjqjJdZCHUtUg6XFwhO4QmVW2up3nFlayRTzgfvKZsIxco0wSiAcq8gniha1YfJFi+UUhR8y17HFMtz7D3bau4+22vfpAj4izg18kRBY6g1o6YD45cHK0KWz7vK0pRPDIc4dpWagOtHZq14z3GezhlShLYyTqe43OAd/E7RG3fOR46dlENw6jUyeQrfyqXTkCbtpdZD5J1aaGqMy2uORSa4U+BR2H9AZcDpuD+976Zn59mu8zfC33n7ES6hWc/y7x1Y4bl4OWR3LBDzDtwZV5qk03HfGpXz13G1/5sln/8If6fMM/bzvmwpQLcReAvv5L2Wr1H1oz4uhXlXJgd28B2f40k7kDlKB58nx20pRKQMCtCbxWbg4Ol6Bl1+f/Lab7oo59xa4iSs9CGz6Mr2CJZZhXmcly/UZVrNQYZyjsnCZ5CQvYHG4yNa0jk9cOn/37hxbCdBC9gj/TVTom/W0DIdv7DhVGYYy6XTQp1T2dXQ6z+SXZddnV3x50GiKF3hy8GZaKgoNDLSzH0N9AJTWMr0Z8ytyo2Bh1IdZZ+7EL4iL8DgT0mpH9lj9NV7dpMFCChs5Og3hbcHakBCZ5SQbXRnvz7E+NLiCQp3Hg3CDrOqld9L2kuWrGiPQhLE0UKhEvYcI62S1F+0P2QnrP+ovMOID1LPFfLfKBT4XmVR58epcG7CAZIR9D6a3Ml7bOWIl0m77lPOf7rIi6c7WdltmXGyNns06H18d61xN9evhS/2EQWT0N89l28obwuRlePNZPcOMe1nkKQi6dLF5FOJv/J/JTYNcyhJdV4s4+jVGXIkTpzrmNyUInZfsql4uC9Yy6tshJ+nh7mBDYvZ7mjxzOG15f689NZyiB0JvkCPc1a/uovLdng0ZBLxNJHXmvZ9qiCNbH6YMxCQuMNwZljG80+vWEYPXfnM5IHz9UAWCVl6RqPsSolwJgBj+zi57A6pHMoZHeYYFJqpX4ighhLlXWEI6GNP4pACCBgmCGE0Yzledq9A+XVqUPiWJoVwwKK8RVGPMlQD6xlYenEvlJkAOO3x4b7v9gH0cb1p5UEubyX564ftVTfKrkVu/b5PhHr3scehmlJcc9a30ZCHBGlhF1o5YcYrHnsoUcszRDciJsVYGMGzrxfek22UWn2oTh7tTKcL1SkocyykGz0x2CuQpa7yjMVB4OkCMAj4r81Ucpoh9ON58zGqx8+fG27/+0Svtx29PtP9670n7DuPEW/SEPFfJSrLjODjNTSUr6YhJ3vGIDF5wEM6KT429HHLyXUxmQoxP6MIjhaogDOsubQSPlYIDbtELU9lfBagjSQI0Ix9dQMHZXqOQpSALIUyvP2225Optzp3TTk47DzXPPITLWy8xebtERfEUSy0vodMlnKRDTzPk0RwnIPuODjdlZe8M9O1t2WvYWUdm9J5hJBy9DrcoK6eE+bXnwZ+mSMclvEYt8FgNBSb1wY83jH2LYcgQV4aOkNg0VlA68GqlE4bKUimoQuzHnrYTsZ5xJV17kU6aAxnatjNsV3iEh2XszMkTDgAyFL2qjIEJLLjYAt3LgWVCE/A0WGSgeJCF6NZKxryjxs5cX6cJD5YENLap3DksEnmqEkpqbI9n520EgO0TnFJOnSbaijcVm6CQzSQ6t+rpkInjwY7lw30hhsAAQNJ0Qn9IA22cDbhP8fs8BxQOx8/HdraoWFYt89t77R6LY+5T0d+nF/OEXssDluqv0pD01bFpIpln4IqqRK+dm3cdNfPWYHVXNzpk1RMFpVwYoYPxhQ2zAABAAElEQVSOAJYaEySdZcZ0xovDclT3QnhVefrsPvRIL7kiyLluzOP6ugc3EjovNo/8L01PtxlYeRP93RybbOfpHZ9fqHeAQAR68qfukAWYZCv0c3XxFmFllVcttxgnZeAI9z+GTcYcnbwC0J8kPV+9D63n4/ZKWn+xEA0FhNzHUSVMZvhAuDfOJAwhCQKuo5Bt7v21Fg0jiSwWswoAHAJ1YB0+nqFTwnQZJRpAyQKUCbsdH8JV5UYkANJI15/WRioP3wbIsSOP7m+3Nx9ut+/RIlnFKZsuw1XQN6VLcfcZr5eTPUL2GFZyKeQ68wJOrtkN1jVoXNb0B9TkmWwKVXHAr2bW4VMmV1ZYebhZbcIKBMO2wov08glsVpNJH0OYgocTuqV2vR0TPsTwle0EgxnQyvTMrOSBaSO/eSPPpQ4LaYKJl8bW2n74/fmbi+3Vy/Ptr+5utN+7/6S9frxHxchy0A5O2zRdWqFJCX7+LOBdzvAkxuRSaHufQkWQ5ll0y6F5X1dvA/VrmK/0PLugr06DlTR15zfUw5uYxV9xBvUFrFpq4sUHySeFw+NiFsA/C9Z5Ul7GqV7gc4WW8mWGms7h9GbQ4RwFDnXiYHGkOkL+dMLuu9miBSvBDONATzrGxRHKIQYvT3GcVBbpMfBrrwADAC4/KhMuvIAngZ/+WBFlKIdJoA6YH8xLIRMuHgu4tE0YHrWVNJAEhO+uPIlLnsRtJVNzJLgv0tsjtacwwNFkPgQ92buw8SGxOHVpAmt5zxEjxvHsPFh4twWEStKjIKTXRfi18MsjPzVuX0KkxQwvkSsg3PsgIP/qNvqCcPV0lJUo4tRfKjb4qMqUMkGDKLrrir08yKNlXYdsI86eoI2n3TWGpOlhDJDTHokrHsfIH0+AeBobeGGRA3uswEnvRP02v6sMfT2iQvmU4e2Plrfabd6fcZ8GmO+e0Q7JIi6/lAm8lP34IeJ89TPcEGV+B5Bnwswv4uOPugKhZUcB/BIbW65KXATB4k131XN9p0QUPLHifHpyqi3Q6HFo+hxhC7xsSpo/NTFNY3WsvXRzvk0ucCCSWSJd5EQYlI/Oci8eLb+iCA5+ArvK2V/lBzhs5wtojZNUI4P/TwVyag+kT9iJYGZHESpF5fDs5qAYmjyiPkCFCX6Y7Sez09LAMsrZFz4zJmrJL8zx2xec0JFHITDSEhN4rKxqdunx8eoENEOkn668QwSsDPGU211eE7vMXo63Hm5y9Ag7ym3Rw2DUAbwYQ9oeAbrxZUxryLWO8jb5uIPUPJCHDF3xa5vDwl3DO6XPyG2B+ozb5JmTrB4kpzEfUxAoaRDt6QNfyGLkHvynDPIHeAoEksRJWVE4kWmtl9YPgKmU0aubBrUUC5bJI5ASgu8IPazzoqoJWtZff+Zc+zLDWt+9v9H+1waV6SGtMo5AkWfneNRF5JAJEakYpOiwEuazId1FfOWV9tDxlSg15qUT8t4401Z6brp7q1zzrHs0X7Qbw9JawgFyb6GNHkjOW0AyV+Q0opvmlohbJI0T10s8X6FQzeM0fAfFnC1S7Jb51TT43b0OsjhOJ24lbIUtwdiWhKGhvB5eaTtFVWTIinCHlDNpzH24RDwdoZVJSqqVEXjLWSIZeRLHR7Q0Mv+lbNhnhpNCV5rov+tBWKkdI7tHdchrny56DnOWCqnzHRIFE/651XHaEPBS5Q755BH8DrsYaIVkXo64YsJ8S22lLsAap+5cGiDmN7K5WCQOkTAramWqpdnqw/ueXic/jBliGTd/a1hOe+VBffHTV9xlU9BWIuIyBwWgKNMr4ya8WHa6S/o6wjRyQZYKRkLgsIykR0S6UXqX8uZmyQMqiNMtdb8TvbgIwLybYL7lMjI+ReXyY5fG28mzS+zzYOksvZRPaHy+TYXyPhP4d7d5PQO4fB+LtH1tApbEH4QVKEND8B9bRRpwoKpcHvOu7Ir/2ZVEPJZezCuvVEzovcoLsSRMHL9mR+ChMad9Q9sTj81Gh9nN1oWpSYb2ZttzHHN0igH36aWv7xRXKnjgq+FdUpwxJyCQ8dXRc5dvAMTvhB+VPXhZbvrrc81CgypSMyWZz4EDbW5Tq1l5qDwUaiz6Sksgk3s6M0ueMQin4NXlFE2HVeUa3mnO3da5B9jCZfaIV4V5Z0gMOqWmQuSj6jn5xGjhIRPmDFudMmG+z+Ta8uPd9s793fa3bLZZddkcmS8uzdj0cuNwgMMUmzhpN5etEeH7NOx1+Ka6iAKkN/JAOYKwxFVqWKzMpcJRBjPICsaeh/s/HG/dxIh32XviRh97GPxEdzXWwE51eijndUA4LnFswuMecngPilSIvjfd7nosk3BZ6nnwPREWctnqL9hDLkCA22HlmfCzOJSv31hsX9udb+8/3m7f5Fyv7/Iim4/oaa1TmTjE6VSh/Pu6UooEf/AQRSs/aIiLYfZxFhD+ukjiI13HRjmVpBMG/Oat8OJ1GbGO0ro3NAnVGK0onJ+Y436JmaRFYJzMvsrQzxIyzPA8y2ceh5HXxGLsvqckJPQ4IoRoWqbKZAuVPJB3P46nV6sbB8m9lUsqAu0ZZ5vhHG2RuDhVe5xUTpBMurP5OUQFHV/Q736lq/93AllHa5mo59JbzjhTFX66NHGWPsP3sO9hg7sqGvD5l2fHrnkGoXaWhpiiatNWZABZ3cZoCI3eDUaO4cg4vSyXjgYbvPHLvXkh7hz+Z28LGwuNjj8bcRlWA67OZ6u8CwxxVvq+WteVYVACyu9kBb9WaFVxyZbX0IYQvKeMc4sn59EniwTf8qIsYjKeMOUTwPkhy4xy+fHR3vkxDSUVqj6t1Eoq702pfUFDLMDIhpW4jSvLZFFiAy741IMNhUnmvb4En68+s9DGJi8zTXPcPqYieevxVnuX4bBPGP5yXmWViobRTbyE+a/uLTvavLwV3/ZS5CuOO+L0+SJlaNZP3QcDibkqny175C189eVKm1qG9hXmODI6Qt76YrS8x4Sh1y88e74Nmb+LbXQ614btheaxazCEJ3DJgD4xVGG8t6losav8wqIAFADziEUs9kDOrrMK5PS112i23n2pRvzL0FIbBT3P0DOPP6uNSlCdVwxTD0a8THhpoHmGMQuMhVaD8crOYtJxFxgFSXiMCeV3z6ZHhYkWOsJakv0PjOnAjxNgw0b2euy5rZ/K4wOGrm5tbrct1mgPbaFLn4S2uHOHMGaQBrJFJj3hd5uYzHHIM39mpNBWMhYRnWnIGixd4w3jyXBXI7mkboKwWT47cH+LV99eZ/z1UhwdsDp7+aFlNcAhuozXkzUVwWPP7fkcsCtLEk6aUe5TicCiDPCgKcAd+GK06EM2LBhybby8hHcLY1bX8HZEKqUDlvnpLJ9enG6/TMvrl+DrDsNk32eO5APO1HoIbXfR7iCtG8NcWSXWjiI4vatLfYYe32pAOPnQFvhJ/lQ+Et+Fe1Ccszl+nMB2mfAscnjy6gX0tUAJPo/MdtEXCfMwSN8j4kqdmI+TOP53Mjuf5Fi5MlqQpCv9tAaRI3CEWWlUK5dfEakgRcEGspcCfHE+BiNEnFPwmI6SGRnJAeKcg7EFG+mBEVXfq5C59AjARx0cp2S8eUEQeEkHv5hI0sV2krFlayMYZ1rtOqIero/3WVw0uKzcUkGJT/sznHhlQG08d7qAaHoXCJuejVyrF+BJkd5AehXYjjIXnyCAj+AwQ3Mhjyn4Mq37TrgzxEQEcC99+PEKXPRb/MBiEqaiATZzQiAyK7SR0LUR5bBbMPAV3nWgFZ9w8DvPZx6HNF9xkOIyLPQZObD1hA5dEKOu5dX0fozqX/glo+ajulNPTJ22g322mVo+ATYvnW9a4FDCf3j1Qvsn7ADfZgLbLQDvMmF/h5GO+yw1fuBy4709ygw6kDRptUEvHvkgG7/JFSJrI595YQxwhpFH5dN8NF+rHJtKDBnN4fYjjoJfYejNfTH2EH2XjPu+fvVLV9vFS/PBhUD129FMOYRWsQQ9hXMIXNSkzw++N3vLjFIvUYDxXADqtyw0YHnJumLw2mtxBmcVSDv6+EXeqTuF6KYwWRkGz0WHpIZpMNwFf31FOZVG6gguGF8hGi5JI/cyaXKu4EIBARRDhzdKFLTAAhhlorCOA2K4j/URYk1Ka+CECbEDNglu0FL45NPN9v0nW+2RexEoHB45YL+pp50bku3Scl3jc5++wjYsWKF4mbF+vPqCpBg5QJFgwywEiefLORG1pGF79tUSDs1D1Rxr3SGj9mnxaCLiAAgC0AFOecZp8VydpQsNA7YMdwjdg2eB8wpMmjk6teEcO53prUgnw3XhEXQUGp2JpTEVU1cYutJJAVQe0ljBWkiYkHRIw0Lm0fEvMfn4FT77tPm3KMBraH4dfa56D94VKuAN4LYoGXvQ2IJ3dU/DHrx1745jNWf5zUZLePeVph5iN8v9NPFTwC8yT+FGOk8gnePZitNdvGM4LOHHMzkFEv4RiLFwZIJu36BwxVN6qeSZLWNh/LN17PyXLT/jNY1M6vLrQwozfNga1wZ1DLac9SajVOBQSH7XKiSSkMakqVS4qYJtvomXyiq9QWCid/ASZQMrN6BNBaMMwGtHGe7KM2mE9SOf/HppakabVzpER1s78YyNjOrcNDwkzKEg05vOG3H4BdaE17N4tDx0gM/X8TuapbPqHX4qTJGQJ+mpnfGFzdhqQv/hU/zGqUOR85+5E+7jbEIZGC7LWmC5lx+y2EATpBeuCF1RS/nMnI0mTF7o9GPfgtsjIl9j3+qGP21MedJrVBYbSYR7me8631HtRpj4HO9MQ75Do9J3Zchk8pSKSz2JBBp4xaThyx7+Gif8+hHTOJXIErbz7PRcO56daUfAbiLMMnzr3H/A4aseMfLIHoocY6u+7jdcyo+64zf4CYx+urDcSwV81ZsKO4FN40D+kGOTeZo98sXXRQxZIPLcGMNwNy62EXofHsUkHvMMsmXvoS5Fwi2z/pZjMCg8+SxE0tDIqIiqyMysNJYJJV+n2tHDF7l718fPKpA28nIwxFoEJLGFDQIhrfGSmRZmDTkT1lC3gOg+/c+9DIV7UgnLoxAWXH8SEoSV1jFDkgLaPZsAKCcLXWGBnnAixGm83os7HAWqdmO7s5UVV1u8JfABy3XfpwfiBJnNQFu7/mdVB7/y6LEjVh7LfB5i2VvwZh5qIMYL78WdCfxOeAo/X8LYJc4Guj5eaAzDIZgLILjI5zHZsc0nPQpxqkPHdJHZKk1djLIU8do8Z948xKjhK7wBoyHoDA8wRM9ZsgI4OwolnHVMglaVgBK+SMdYVJyCTh0PIHvisdVlj8aeilaSSgWn7diuwz06AyejPfp8hJ7RgKX45o27jD3m5MCCDQ33yDgEABg4cHa2iOEhThM4XEDRlCfouCPbZc3HwDmXlIlv9aAaYBwU4VnHpEYyV0SmO78zAr86nlFXCVF58gRuBCKtHYM4CGBFZzorUwt/siKegnTGcVUlUjynkiH8VCdMnBVrJpkVynylB6QQ2psA5cB8gK4OlAj/pCc/Fm6fM1wFM6YLbyLnY94YaHvG19paPJWhnLFlDD6EEZj/0EBXtSqp7K1WaMGngDhk5ZKjXh8+64itGHLxLM00dkxDsLA+G2U5UpXqjlBwVlkzbVWY/kaqwAeXZdjKk0udncFBN++MTwQ8YhFJGf0SR95rJNKTdr5VknddPmX4DPzO5chTuJRn7UT9wm/yWVph2p5IpVdkfZW9K/MZ1ZGeXwhKM/ZCDZphLZ/5nFirmSek0x4QJuksQ9EVGEzre9qtAPp5RqfOnCdxflEaTtRbqTyDydycnG6/8MxM2wHdQ7oz7zEp/y5DxR/Ry3d3vhtAKUbRt+UNlYTHMz3KqjybR+AIL6UJYmSR8oOR2WC1X2x5vQCWZ9h1PjvHFlfKtmpN4xp504DX+AirFo44QRwRgSU4ea+sBFrBhi5Pyb+EE0Zc/K64zffTQ+dBfrgCwTm8Eo0RkwtgDVtE9QwjYFeItLyMgYPsm7C/jjMyPgUqhtenk02YM65H3BnAWS1IJprcZlIoAlhGINoyVBWjNcWwNLo80vNgiMj9Hrus/15+xLAVK64+thsKtVEckO8VyOY34DPODx7nJtbYRLUMPg9HUymhJ91YnNihlMzkjvA4hMR3snAP1xisjAvLD0jmaGWfxysuYKCbsPmEc3NWGDe1WJ0ZSgo0NPEoI3i8eRz2JOl5M3JaLZuMc9raHrKpKkebMPQ0gRH6HFpdvpDf4bfWpqt7+ICmTtpNfXbL050PIMBcfS7YgmUKpOBZW3/EcFacOA5ZHZ+yRt/CFefJ85B7deT8RE7Scu4AWqeePEq4jRYLL2AgRTbkiXtWMfCRe/JdeZLVOoXYDPDMBgYXcXntL4Qy71DZHHyOjVtgKzHapEKRWIZTxO9SZxgRD9yYOQUr0zzbAlc/VmqpiCnJ5TdIQ6K+MhC/ezWESYmCRx1Meiw6F64aFpIW4SEIPQTmKc4uMFSAXukJdTbiwb/q08lPNESsfKmZyjsLcbU0i+fkJ2nNw6BQ/LS4SQqIeWlanY4AqcTVPfdnLUapyBth8ho7hk9b3dWr0dHCEDosOBIU8sgtl16mk/eUiTxD3dadTgs+kj/AiOPU8Vjy1wpVOuXD4JNw2bchoiOMs5RAdFfh4Rt25DeVUhLDP3lnVmYIEpqZjJe+pFSXFQt6UpZUIuokETIrEdPKEL1v8PtGRMv9CKvNBJVvw6NR0tk46itFgkkbUti5shKAQelXHIp26HkboH7+RthLNDSuzc+3f3RxgZ5749ULDntt87Kn/faECmgNG9umJ5Fl6aIjkTpWPr2grEMqV+waWua1PfzsZSI+qzzh45nLDAI79yH/hMuseWVR8BEu+VJObQ0gGTRGnIbz5GWwjVjpqQxjhKxvqXNvlHVFa7/L57MeCEBfEcBai6EsEIvAi9AQrKfPuu2aDQgtAImqeOHL6UheEXS4oikGuOMC1udeYu8DRIxohDetDzFKwb33V4zc+4ij9ZgSJ83Xlzme5N5O+5BxSecRxAcIQy0YMFJz9mDGNkWwgeN+QCleB5MZKF4NKAn6e1ngXh6q9lUeMX52pbCAz1a3dq4iXMLrBkInenX3u+DYYEwicx5aHsZfO1mJ5NkMcTJ3HENA9aRkGS4F7Ygdy+PnbU7DO8NYR3ukoyVnN19DcJ+I7MWZoaPSsxVHJ7uswpt6K0OET4cEDKNFf+IkR1rTOhOMzVPNIwRx8Gha5bFQefUb5OSxz6vMi4HchoDgJnPitB+v1UEYbuGwQKSQCIsawEwcBYUWnj25kEslATHEGbJKRgGdV64bHQMB2Fu9qtRwI3VgRd8Wu5v7bN1FJeKHsPKNWoOQXAdQeExPEPGpWELM7I7iyjaNA6e8a02ZRIzOOh2jjEovn50MQKaSgM94S/MbfkITeqmMwBHdkPmK5Co9aViZ1KWSu2dukabyhujYUYANlSsdCopHd7KexpCh8k5AWteBLFqOv4vcln5GEYSRCS7aAtFP0plJ1nSCc4nP++Q98Kl8SOvktrpOUQbAXxlJ2U6+yKVhJY9PogpJ9KcU4V2HF8NQdunyzF+ymIZgSh9R5r+T3bFRHsXdl3Wh0iglLExJVFqkUSaHxqI17Dr2Fzi/gDEvEDkJSFSNBEUh3HLgMT7wNMY8nMu+QQe/rIYqpYBXGBUk65Rf5+apVQYjNPzI7xfZ8/PlBTzDldG2yq7xT2j0fsJRSr6Y7gGNw2XmKDcJz2ovlKPPUn51q840DXXm8lpV7IvZnJ/5aSbOf5Kz8OSHoMinmrhNWU9q0wULgcaETfNQKHgkYfRrNHHmSqUgNAwAp8zBEka+IqhXiqc3rBF/XsI9oTABgRrGMgMUgytEhQNSSWK4cmS8qQqkWkHC+QlX3PAEkmoFFawZGwPAqs7wEybjhsdwTZeEySaEJI2bBXc4poR5j22OJ7n1ySZHlOykFR/jBsYjRWTRkRB7H6782UF+h5ZceWXlIf3+MgN87nVQ3FescV69lD6GP3WUGFrn3J+j5+GEsLu/3fG8C61VWhvHGMuIzV+hldUWriUJy5in9XCJYZNHGJAnn3o42z5HNrABOrwc4ewPwXEiDnosUrSgZAK5MIYDeUp3HxlsjTp0YDtYPj3uJHxSOUXn4B5aGBjj1cnIjyuWkqfyZSEjsc44Dk465ImtnwwXhCJg5L/r48fgS+fMeqXQE0792hNyHFKTTCs1Q1HyDyQ86MjkW3riikp00l7aKp8Mv3V4FeLMOfpAgrSsgVMu1/07uWhF4mWDaMx9OBqBMmnxwEkh+QdNBONe7YAkeYSdaWOEhHYUR5T8ECgNy0MNMZiK9JZw7SmOEDh4EH9KviSjBx2B6UhjnP88SyOPfoFGo01aAHVGfe8omoKJ9EIKSclCMpGlrErXx4giw0XDMiORVChWaqT3cD4bMw7LpEfS0yJN/x4PUanjIe8aydxPh191WXXLKy0ocMOnDZvMW8EDcGZPlRt0aUbKs6D5KpuAgYQEntu0gGXeRRHYqjZij0VbTO8EGaIb8Een9mIVU9To0XxRVtMdk+eqNHkFM+khEKDsZqYVipWCrAlYDR4fvMABjMcdidLydKwTgZDpFU94oQlJHjrBD0Dyy+PeCQ7vltONbcoipxWYl+r9BfZtvLRAasrGATbo6stNyusTht49nuUhZ4EtU8ls0Ejep1ylHEPPY1+WsOeXLp5rP3fzYnv5OqvF8B2KhGQ0VvxWHBj0kgfuc/yQERqxmdbBJ1VlUuT8+3MkGQYr5ImPuk9Pnxe111kFAsEbyRALQnepKJc25uI+ivdBPfJTrRCZ5V5DICfCvIXFQP9l2MDAd78EWOtpgDEcYGMAPaACc2/LLVfSY/RpqdLioevn8REnLG/dY832MrvM77DjfF1+Oxy+LMnhK5Un35w+xMFrg7bKktV144RVieImPIakUGG60mgYchA9lJX1IZ0u1AnOmVDHpmcoSUu0VOZJ5THWDkv5fo779HhcAWUFk1f4Wglg7J71wwFbOWzPHdEDhpQc7HIzY+YZiB7y4pidFY+fpxeCgZphGr5zKRYo9aeu8AMdT9oIDlSHwa9r/UdtmUPblri2kncjIKdryXWGVi3HVFLis9CIi6AU0NKRjKAZflzxZt7VOyfKd2RcHiO30vBSXyGPfOLXmO1pqMzaEyFyHgkrQ6cSsyKRX0np8Ik3T9IqhwmwRGfaWZyRitBBgNM0OmQLT3pRpIuzAyTxXVqga25Fh61tIUsSk75v1KS1ivxZGmurS52IBFC/lL2/D8+GyhOB8no25CpOxMiSXhx27NyE8koa+bRyzTAK6Yy3BVuVRCcPcDoudeRHXmCAUH5Ib/lzfwqKKj472MAJ07EK5vBij+Nwl0YUDa9HKzvtydZhu88GyodkuEf72OHwsMc58uIKefAUizsu817tyWkwQDu+QF14yZO/qsY4/8jvhBKnLJafyB2jA9SaAF5TSSgGj/JfvTHwIMqIThjEfJNWOyqcZpc0U7ETn4aN6tAOgOl7F5krhQ8rXtRR6VUEdLT74IWA5C05hZd70qR3V+qVNcIoO+AxTdli2E9FhBikFW/RQAk8k6fIbb57L68wUHDYnG0THfA+Mvp6iA3yQk6cR5mhxz2Lr33GoVhO0x1jTsOejgdN8pOPjQ/QtCngz7OUd55d59qefiQmClM0R/igEvmHJ+9q1VsCeDRMlUHb++jXvIJnv9RVYPgFafIwXBpFWAQf3AAyl+pvp6/9y8Xjk8G8Cgn6ICEiuCRSBenMkFFpHCHhvnikDBtgk5A23R5h5CGhRiSWeJjCgfeT4sVsAQliGh1fcJIZuTcNGaUxJlM0TiZyD2mlb7A64gMOSfyUs2B8j7DJdYjMV+KMmYSGVibduN+gVeA8Q943DKCGGx6VA9wanQW0/iAtNgtslKLCxa6yzTDuSedlsBnrAXwLWIgrjzy+ZA6nPEPkCpm8zyT4LOmU25wyA3NhNGPMbSw6cU06G8qb9EB2Kdg6fJ0pq2ypUDCk7PlAJ+EXhfCbQqHhmGf8B7fhOuSULnppcZRE4czpZkAbwJ737lc5XR562tHQTjwY0F5Fde2RnBZSCjzJHTbJG+loocUuLIBWYvyJxx3+OiwrlwwDOWfhhY517vRNwAXLVJZ9eiAJAI/8E2da/kvXJI1zV3yYc0gqDlQAqaag1r15kyPOeayGQcmbcfPKVchAF576oZA4A3BDJfIme1CX9udfdKZ9KJ96jrzmoyxbcZkU2awUCUzPgXDxR77gUfwQqXgcVCq8DsdZnkglefi5eQJlJCxlQDXJhL/mH/epSLg1j8ze6oHa6GCRCC3fx08O2r0n9QIiX45GeyY9chs/D5nDvMfLiqyEeQVFnPMEW7XnlgftCpn/8swEb7ibblcWxtvkLD1HFn7o1HQ4kb9zlnGyGiG6iVzIEXkROWUHHaG98Cz/+ROcsKjW1j4w5oWqJ1UaOZHbAMpW5ObWoVpJxR610fCAruEJdCowYTWUBj/RE0lIE5vGbswzh4Plyo9DQmbPCeVPnWZ1lrLAnHQtEzbGTOi9dlhvDw149GFPPjYlWohlSkD+pKuQyms4eJRTj2Xlfcgxw3IxcMKE+NHV6q3Q1sxpFfaqq+fL1gP8wSnD2iPk9bkJzl4wYeyMcOQMHoJ44mOjRk1rq+oeiuBSP9mnordUV8DkCCtlJawqebnr9JMkBYcg89YZg9f+00oqELzWzWgu3S4SgIyURYQbb1NO5dSM8BlC3qWXkDA06rP3VLV5g56JfAZfwsUVfuhyoboqiUlWaUOJJPxFKfLhxYNchDyZNqDyOGBSanOVM25YdXWLFVhWCtKw8vAvjZ0kRYE8e0zJOhPndgfDU3iWteKtNj056ogREefHOCCCz9/6L32Ex54/IjSKeQz8MgXO9zg4GTzFkJC7RtdsbbCj9YLWaeZpuTT3Muxhq5FexqVpDglfoQUDNZLlaGs3SY1O+W5r+Kdbe3ToLCx8kUbnLHfyaWHNy5+iakL51YGViPKNGVAAs8Qvxq8OIg7ZTjxsiavSIB+ZJLwVQuBEEdzJPDUUvfS86OhdZWVwjrJXL+EL3WFT4opeLXWgcFdz3vtMIUqPRPz5gJmbvmXk/EfsJXKqOmQy3sqWgi2N5AZ0Xc7ZL+ONMDADhOTAbR4DA/1UFElncnRHZafjzEQ1E6rBRxovexRpUcozSlIvFr60+tB/rKUIFLx5K1vSMY86NYFe5UaYqhTFIW3wM7RofI4d4SYNLHk3DP3kzDTtRVy5LNI+8JF2PLh8i595NypFca4s77SHHGlj+bjLkT67NCIOqR0y3EeaKXSJNQXNed6nDLvtEyoSRdA5O/i7C9bH3P/V2lF7i+M+Xp6Zal+6PNGuXZtu4/RMpCq8ZUHaGZYLa3wZJN8RW7lEHMjKAxI6qa5e0nMh2lrDIzpibLFfypUoTGflAc9WSKN6VfLirHJ2EQ/4SzPAShsZkwcyAq7KDPIvktVz8h38cewq04Qhr6OVde2lbDLDuPICH8lXdQe2yKkXBV4R7dX2lVxwaTPwLP+WL2Fs+CjHAD/R6840sU3i5V0amozDeE7Wi39U30Vah+Ky+oty4L221JdFAZUyCULMXPKqUO0lPT5Cwi/PyRuB0hnoMERIcPMXebB3MyP8EseJDTdJURUIwxs3FFKXpBCwA5Z8x0AgdRZm4a4xRS1DOL46A5fVkNQIwJe4oAKXRB0fZYin0hnPP2lNVZZIgLdGyYf4ufwJNxobQ1dHTJzvre+2u3c32+vs97jL8dgqMZkO4CEOSl5M70FpflYwsh3S6y/792xrTFEQmszrLsFhSC7CouhouXgwXLyUhIAIacXj5N80/e+LfBaJd3d5nCb43O/wEQa2zFzNTWsGHZ+XJQMZk4v0QJ6iy+rLg9xnsYEgG0yanzBs5WSyTmxkn1/SZzksjkd9yp/pCyOG4w1BDk3p5AAQDFJ8+Q9To1ol+M0iy1XSkM7lv5qz2WMaRRyy88835Yo2tgtwhmkcZhCI//QwQGSF4JUNfdJ1eAmHbAVRQxul2dFJsPGf8WiSiDsG6j040wsik1IZmAcQSW9D+6SS6ifD5c+ekXnuleEGdGqlE70onLqRQATSqVsrGgwx6REZRx4bNE+LIcGTDuRj6F8HlsKv/UoLPfhqUtFUrwir6GkZr8wlGfCkAGGe5ddEhsof+aSTjfzCdDpUpoSJS568oJm0MkdaK4IMl+VZZ8SSbIam7t5jtzRH+DzkBOote+nI7yt1ta1JlnW4is7/PcqIq/Vo6aWcfIlKxEUlT2hkTRB+DH4Po4zpYDO+Fe8tFqvc2z5qz68eth995rDNXeDt65y/JG86Y5dFp3WPHH3ZsScUZcI2BIMv8kA6c4LAOsSSnoqg4DqhF+xlBeuVyoNwr+y69t505Kew/qpnVeEnvZ+sroKeiXSyJHGITANPk1J+SGNOnZA++08ATu8WXdLmI0aaAYwIhuSgSkOlJa/duJTPsRnSmn/aVcKAjXygOnPU4gU4nShwaB02CM1Th+b0UU68c8tlvhNvYws5NJ9x9OLLxcanyE2JYg/qLVZmYuA+u+SfZ5iKjyS9/Bl2ak8LhIGWWcPAk2ezgLDgNyb4uzAhBic3ePob606Ybjcz1iijJAQWIQpRKQJFI40kzOh0hXgKTdmWmDgNyy13HWM+G6OcVjxRRhirmj09GeKiGXEBmEkzEiqoBTS+ABAL3YDW1TErFlbpkv8d47hvH+/mNZP9m7nsRtOm01bLzcOc4/+6B52gfIIpvHrn1Ru71QfZVjIoXDFdSc4kM7WIykkIQnu4zZJxVzjYbAHP7NvjbF1ZEKcBcC/II+ZoThnGGsxh7Co4Rl36aLxPYoGJ9HO0rDYwJPeobLmUl5frjE5OBNchBeKASfSsKGIVVXAAq8GbJ6K0kJiPqTwUTANE8FTStnQN07hgnzqX+QBl5J8fKzwNwTE0N2fm6DCGzYxXFTYszF8zI5UEabWVWqECHyS1cOtATOOuavOS22jUrr0t6qhOPkCqTWmYMU5oKkQ2BXqvTQGcVi28uSfE4h6nolydDZWHA0cclfqAIunzrEL89yNvhrOEJ3KIIgWP/JYX4pVRW0g4aUIDfUnOq09XrZCOb+BVYF/A4gCgQ2jSi9tKNDhlppQmMtCrwPwLbAou6MFLLg2/C5cd+Qk8ulRB9nrx+5z3NGi33mUDLWedPXZhCU6V0ce8FneGhNqHL8FSD15qQNu0ArFxJR7fXfMqyL4xRt4TJilfXOSSd9+o6IKQSX6V46NVXodAxMtsSl1cooLivSi0IMoxxeupTxggfVWKlgfsD7n6k6/DS+dTdI45l4sGQkykaxmY1/YyyJbgyqZBcDrxn96xEX5AVgcA2tio/KxERLlkyzT8HTFBHZsMQuIwWscsSA2fPoMuNPnVgRjPj1/mob2Q5DM8yb9RZROVXrTqxwiLQXwmuo/fAdbn+M8uZXQAnOUiMH1+i4e8yYgA9+aPaa1ArFimmCeZYhjRUyxyRT6lkLS65Bd47TaSqx/ufPaq4SnkBoZg/IZfRHRCpZcPMotScEQJ2KqFXCoq6/j0prhSgaCOG0nLl0atEix7XvlJuBS6jDaQTzIbWNPqfM54kGAC/SGSf8uKzic1nPBhnmdBw6UMEh4axsMLaTOcwWNUALAG5dDOw/X99rd7tLSYFI+gxEWd4C6HqiyqbyRv1HMFllfxY+s9SENTdryqLkYb3NltDOsot5xyWAKLCauwlIhWGExq4eAuE2OFof7SQhQaRVoIH3Kgoz2n0Xma9WYYcb1ueBtRm+G4hAW8+G16GR7suI6x7rNIYGaUwwowXjcUnjCEZQUiCxpyalocSfJLfi200LbV54oqletwkfB9y+IIPDFyAuPYqAgsWKVheLdSguekI7SGPIJCEOZI0AdpdBAeypehH/MJfMTE0NWL+ZTVRWRK5NSuIOPEuTZ2drKyquASRhzFMzng/Iv5p21YYC1AhAlHcJ5NQVaErgamjaXnp/cEJmPy2hkPQMaBRffAOcSYnookBRav/AOnLaeMZFiOtOjafQvyE1xEpieG07UM6Bgz14IhOjFu70ncqSChlaEWOMiwG7+BDT347cqBZHs+I6AiWBGBx/xMnikEl7TNoy02s935eLPd/mS7PaHiSA8OvBPEe0Cn6xZM4hE8VgKlO1fKwYPP/E0jsTIf0UOfRpZ78PseS09VpkMpDknGlrsCQzIqExpF7Bt6+85Ou0Elcv26k75dJSKcZZcf/kPDB9OlAicup0d8jh9hk4A4e1VhiPjkn1E4zTSWxYO+Sn8iB2mcEOFWTt09avuMNmBpFBAypIGms7RHnzki4MzoWAi4Lf/p7WhL5KELRvwDRMDoL0OM8QnEkN9VKchKxWfxCvHaas6pUxzl4te89N4r+NFv8BukLHzEpx3G1jrdS16bcs7R0xomqUBmOMGi+LVsYJvitABEBlGJmWdwiD465teryJU9V5oKy32AkYXU9py0gyBPKvEFQHluiCsVCIZ3UwZ6Kjqb5IVBMAEvceYhw4OGKqv17I/kuM7CCeLeCoDsw2BkSByVltLIvQHA9QUIWNQGXQI1BuMRXjXICw9Fl6ax7zR3Q86HrD9co5DLn5WHhmIyr8iO8A55+K4NW1MWHFdf2TV38rAcAsASk26uWIvkEq9h1BI4Azrs/hSDoet5NPY8FvlMZlyTt4cxR/MhlO8MOWKFVs49HPcuq17mr+AP4Um8EUxnMzHeJubHc6LsKQUS82PnKsv3mEifI6cG7HR11lN/hu2XnPAix8UfFZ45QsnR2GNHPMdozSgAdYK25rPj19Ygf/ZAHPLJTnecu/lTLf3Ks4xRuzQHudLFdoJYRZNnmYTmt88+HbdK0zIsJB4RIqyOb5B0pW/pOvar/pzjz7NJDaJIZCiEx6iatA43Zse2wog/QnGHU4ltiQF6kblAglOjkLfoWB2AP8efxKacODSQtBoPv1CsTxIhBdHylooQe8wwCWnMnX4oSV4NMXUqC/hwmC1piZOGzjfCQEd7S36FBvj5Fd4rzgXH75XKx1aROhIPYcKqW5eAbmMLtz7caO/d2WwrVByYUIamlI/Oad6Pra1XQnjj1hecjdq1T7AnNFAh84lE8Ol8iKcofIVeyG02v8qJm9ZsSMnPPvzP0Bihg4I48EXYLi9s+vThAe0fGk/kxxCnhpdG0cQjVhavpNUu3V4WdKAspPdSPcUnjCVL+IUO4ATbMvde/ReYjNUkeIcPwGoQBR14Sa7xqG8RwkcqXPHZECHOykO9Vt4DGsjkrA9ndpmVMRY4LnXgJVTdlH3lMM5oq2CCUx318kUOaML3UYcLypIps9BmgHXoVqEzRJZfbQoYyp89eyfR8zpkKiYrD4clrZAtm32D2YokDYPYCnqOHmSg7M5CAiXoIIN6Eoe8KFLPr5wlWg695TeVgfoCHriU6cHITeNTgcDIDculBaKSdQnFBMG+kBhXlQLESWCLSgJRVhgIO+KNkSAZd2X4KkePksxO/45HwxQqv4jGryn676wYIKwfTkvJxPm5se4xQzybVCC76YKSJraiwZnFuGBxSh2EpUcUhySe26RDr9iAnH2VgoAHh9CVgzx7L6sac8WEhoE6S96P1q6B17cPKssaE95/zbT9n42zYYixogMYuMvKl1XGpeeRPZUmVVhOVrX0Y122zC93LWwn0jfR3R4F1APm7LoeMpx0gNxZiWVB0Dsro4VBfuFDT5HxYxi20KhbdReN0HNwQtskaVFGlpJV2fr0nttw4sC5zt2Kn1uP748jRMc+9/mTYQSsTwMkmOyRMDqBtUwmog83KBqfFWDmDXTlzRYV3AY+hmzhkmVVHRzq0ueyKR24+ZPCQmHT8ZgXoIwtyoAqEa9yZ0gk94YRBGA/ERqc4Ip9CQPptI5BGpsUhY5PCjhsmZLv8GY6uZIuaXPKs0pRdgStioZ7+UMAZTFh2RY3JvQfO8hqRKJHmQwlCHx9HLTUgR6EmKgVQ3YO7DvvrLYPOSh0hfdfjJIvs5yFJJQVhLitGBjtxPcpHzhJL4TmYMNJsBE2w8RfESg7Bh4yBzaGfVxBziX08c7wuH2RMOdMxC9OG18OhaVMgVe7tMf1ycP9Ns5GuYVFaM3Sw1bhxLkE1pZ2nK968DLjJNrpUR6jWYUkmVDc5VLTlR/khZV4OBGnrWczzbIEKB97wmKqoUzvkRycmY8iPquloKn9SCTOV6jwBSyNKSmLzl6E4WZr9faAY9gsPciUieJLmxIuuBiBMHF4Nq9sFygMlySybYD4iN7la45eMZFEAbYMyoWPWRFGWK2+In9pkNlAmGa4e8ZFJPyFLsA5ITpzy6RWLX4Bm/IiZomGcFKFllDx2zwpqHT7sGK748sI7SaIkRc/B2nx3eC7KhC6Ks9GW5Uy8RLtM16BxJOaUl7UiJeOjJ9qLHnXQwKDYaXQGKTShRSJabEa5ckzzFfFUULEuYrKaGtYDj0yI7230GkoOlHfJGaeAwGa+pO/eg8yhoIRiNca3R3hZo5FIQZEOg0Xd0F6lNLhKM3wLUFCVXBa5UBG2eFLxo2tPwvnPEq1B+LRArvMNXxApfHnYwftdl5KpSWN5syth6xkeca+uDSjQzhCh8e8Mc2XRl1kMn1kjXXicLUN1BbLlOu4auRE/kymh7ZygwN+lCMv0uHBCfaeL43TywLmW/U8lkF5a4iKCMIzX4ECU/kiqxOJOj11lcUBpgW/BdGFLxI8Blfpx9a1+NENpByeMgc9GiJGBrz3HgApT+ZQHQdiuEZROvY7BQdktRRVuQgl33RQrnpxXDsGA48Ou/Eg+0EhKME1XOaDwdYk/vJJr1cOou8KzNg3iaQLqiCQpvajo6gWqnxWvGgziR6BxcqF4u2dBIEM+JEiDsrKUjuL/aQiAlYZuFcPKtV8tcU4Su9SOPUYRyCWrnxo6yaT7Me8VfP191ba/TV6HIRP4ETHrTZgzuXjbhn1JOj04MlDXQwvfI2d2IL1JGSHh4TJcTHg1HZ02myQokJhhSIFyvetXCb1X9A0c0h2/mQs6Txh2h6Je+l8J8YMFZcnwpJFadg8XD7kTCjmApF9jB2w2VAIfaL5WI7IX/iIjkmnXXre2QkNQW3SK69NTe0EYwhdDSMAkUf11krJQBJHPPmTfIGC5VxbVb0oJXpxqEzdVT6hm6CSsE00+TEA3tQ/yXQ31n0JF5kJgAwNdct9UsojsDXU28GBoE6YsKFDUvjzxsoosnNfPtGkyqtNkud8NOm86gFm5bfKF/lHhM/aI6pr07zbZ5bhK/PWlXbhU1wqk4zo5VAFYYIfJfDeMD+gk3G/w1fNQfMMjH+BEJ5CHfsQt/rpE+MsTA7ks+IY8o7baZZ38v6joOaHXyD8S5D3pJYQEbCLkCpPybgXTiZlPvQNFZT4CKSuuNLzAKFj6zmTRZiQ4oa0tjDUOegqXOKOWfInT0ZhCTG2fVpiWzpeaZOI8hQ4C20+AGfpG4Uhk4UowRaacuhWPVfTYQhboGlZBr/8SsSru+n4kYe/f0UTxE9RkOao/ed1WvDisNUfDPfbuyPMusAYJLSmtsw6+1uc0vkTTIQ3JsDw+mmdnTqxx5CEtnqRlVjz8Oxx6r6jY5tJ90PmQcShg/Zod/d0lFNETeRJKkoSR79yjhAW0jz7q3JIn7FV4K1UjXem1HtbkDpcdaHiqzCj7wx3EEf4GBOR0snYsz0T0yOGFUEKh6fNVSYwOY9SbITqfCHsvpIRVjL1hdKKEirRqBDJe22U9Ak3kI8OPy1w7MV7bUC5c0kL2gQFTyoCkxEs5nJSQZ10Fq5Uir2jEn+HL3bgMxVV9qvgQTLhG/suPnQMtmyzMxpYiTr0lIqCSsG8097VUfSugwImuibMK3ZGoUxlzuo6K9MRVqTlbZMCy7npuaueh5PkI20d2NffW21vfLKWvHGT6iSya89WFtUWrT1IoumXwaobL90e73BgZSBlCfyGj9Fb8KNdOKeWRhf24BDXNPl6CayW89s0ACaQ5RmOhXYYVzHJ0VToyQrw6kttmW+zOmtt3Yld36KpU3R1Fg020ocoaZWub1iOMO9n7+CQijTxXd6UEyQvrGCpjJxziw/TDqAlF9oJLJYdJsw8IH+0C+PMEH48Ty2VB0LH52vr5DPQwQlw2bTx5rcy0tJ3k3L8h/lBmBW6lYuXvYBacMQ9RT62RnrZtwGUfOZeTsIDMNkwim8oGn0ayFmBQbYa9dCirPVzOeZTOAXGXrXvUpmAN3uCGXo2M8IbcntvQwWGohsNgSVnKS9hRGa4glSCFZhybLDPKtl4GzmxfWWHeYSQD0HSu+4VMTKYse6gOhte0JkpiFcqAn9NaHWsFhCe/8BURcI9iKJI6BY7BSoeGZCpVEYG59n0Qlrwi1homMA0/hhtXATkgdsYg3HQM9hW2R7Gtc5cSJwfYen5d+CkOEsvvCiGIJ7QmDGIXbk1MIWVey559a6XPYF82VKwkGpwXjqEMNHx77DONIxfouA5Vv8ER/Pn4wftnYFLnEyh4wM3huG7QT7hhTSHzN+MsTFLOXW+BBd9KoZ5xjbPo/N1agqPiN7GKrPBSEE6ncpNxuVt5cqOZLhS8GIEleFx2JSaFFgNAn6S94jim9I8Kj60I4ulAwPkb9TWI0uI7e0I3zt+HQhYAONbddit47bC5AJHxXDVCIaubBSpOJY4aGI9oNA8dqOarV4LvLjDN/z54h/tNfTECkqdWyqieClgQlC9lQ2p275noRjJ79CGBrAWWGlmLseSZ6hwfNKCFZ/5BFwmbHVCcbLmG2m1C56TQIaQO4sYTC9uFJQemITFLT513j1rbzrBHBNCRXrMfMUhk89DhiE8GDNvmiRJmAJ/7BkcOa+KtN97uNH+4p3H7f4mS2axi3PQ9HQDX0/gSaxQSlrVIweWAwuRlYsNKXXv6kSHs7LwAf4n5+khsDl1fBZnRF5ltzP4d5fxHTRQtHlXWzl0tQ2O2/Dnu1kWkQlUqWycK/FUYXvfQ4j2jnCTSf354O1egEalZRkBDZdMypMCk6+0pKMnFpe48Sl6xOZUnRB6xVrOi8VjMxENXabFHFzIhB0LXXmVu6pYiO+yIKpVD/bOe3tQX0LHHrt8tpV/TG8oeQUDJAEH/AIUXISlguchjZ0wyRcsVCVS8RJ0OHqE/BaJMuo3LOu930OyPItX51/D7QouUtKmfPiLfpE5K6/Iq0l9CXbhMTPCZUgtmiGB8kAyw9QWMHSjfMk0eeI+YpNnDkmDKmlIxrOGLb/CG86VePIlTBJhOAS0OfMqSjkcXhjyQvClYrzSV+utS6CgytXhU/GQyXO+iSjn6433FSvtMC8XSV+ZJR6Jx7i9V2FRWimmCJFpti7rweS55CvKowLZocLbslUIkcocoKI8y6+KjPeO0rDzdLVnmC124txXQI7hrKh+ghcMhMp38WMB6pgnGzr+ogT5LmMoWDYK4vF8MZLv/tgA3xvDw/b6yB7z3eLgH/hOPIbcTtr7tGw89HHp8rn4YfU1YEgoTgpSM+zyXaLV9CFOeoeC6dvHtqlwXPGioZVO+wpYDUW5nQGDQHwyF375RcTSsb/woqQ6RA3Algb32GhVFMaKgsKclhxpU2GSRkpOhEvOIazYj3RSGTDk49JYbVbDd6hLHSK4rT2HGTKMRSWbfCexhq/NDjzvxYIGv+7ct26Stji4Ta7Ygq4hAOOQzwwlSTargsthhDgi8CUR0WBPWCoo5QW3soZuaICHEpX8AV/FQR8YC6+NlDSAhDEdstTKn0pjb6uvQJQzhgb5iB18bpR0uIYgXql6RE+S0Uz21BCOIxjj+P4RNohmE2FkgTb5oZObInyFJd+/8/bj9i32OLk8/HLX43Apbd6tgtypFMTPR2ehbbpSzHrdLPBe+0q5IV0WS0DbYUGHFj3hYAx7myBs4hynPh9ssVkVx0/GeAS/ldE+OB+B+3XmQy44R0K5GR8wdEWcLXQXbljepKcud6kgV9ZZBcZQ1sg4ryGgAtFmiIwzVJexi05nI+whscWvvmtolV9zD5XCfMJ1+uabh4emIWAmizMVddFN79A03VW+EFzwpp3plqo3C5BlM4EAl/KI5JZ7Xztgx9tw/VR8G+C25PVIeoz4CnjSLtNAkB/DSSMN7SR2wH2i4CEHtsqzdoQutB1ZEJuyVkMcnMjpSrLsdSHceRDza4Le2rTlCBwpA9plJU9j0gZhHIS9PeDVN/9n+PtndZky2PGijpMfgTVZ3dhYh5Oi0X2nHKrIXOK3LO4vsQDn+IIVmkmNTo2jRglIdlqqk6MYI7+JJ0imQkRFmxH+w2DBSkVBwEgaW2p5VoA4144RtRhS4NKTSacTAr0HZzJRdDLIx/OgdjAm50Ay3kug77/OXgf4sDb13dLqxkwHa1aXeA6V4VYuZqLsia/UJJSVZfFZTzwTa3zfcjj7NR3p8TV58yA+t90aHrW/GexTsdlc+rzDAaiT61NM8AHvLLmkmMh7yj6PDIXIN3qxpfEs7/j+K3oAB5TgDQrW5hbHPlORjGs9Ekymk179Rw54BL95pTQ6E3+dz3Ber8Irb432kh3xpFBZeEkqXLX+hUVzOBlP7HV+w81S9rAE1MEqnzgG2cpMuIW5y+JsIOTZ4a1afSWx4k38GbrRScuCdqP9QC/5TaDDQpFGmghshe6chSYkvyl8ogNH/IDGTqGp/RfYRJVMAKAB/qge3UZfHZ2MxRuG7Gd7U9Qr/7Y9hE3FZIGM0iDOf/QNrc8qVsOAR0+1/JTJaCoLj6x3nmC0m6QzDNJtjBMHxs8zDY1jrXF5bFLBVDKwiNfe4DXM/+W9B+1dzqu4hsN2gcYEXm2BCmEWbrR1L204xc18Q3kWcHmh/xg9oVHinfOgokDvvtdifIaKhzkX+XAvT94jjtMcnWfu4tJE26Mnwk7WLBd1c6wVg87vEXb7HezxF9nnlPJi3kexODnzFDqjbriEJ49N2WZJ79gElSZ2C3GBS6eki24RWYMZUFkOaDCNRD+W4aKnLWkPOuU4V+0kAQBg33En4uBj3qdiIUob9t9SaxIdsktt09iIDZnfhmFb6DHZi60K75X08JqGh0HygUxO34MO/WqT8tDBFrHIj7bDr5mii4t6lFF88KB/Su+gMk1yjjKFT4f17SWlshQ5aVwC76kCTp77Rk72d8KvDROjpUXa2C+4CdcmwYJ6sGvg5TBMw7/4/PPWvMrIhzj4I0rEwPDvpiJ5BlPKC5HKLaKqWAPGY6ez0ZELtC3aUg1LlXLTQ8AJapSF1eTEiUkO+h8MzBjDkynE6QqsZAInkc8V5koIrPGkNZ0Gk6srFEmngsMgPwogG6ELFwiqrLt4bMumoK5TtycgWtF5fPvZBcAkBjoJfj+4azJTJ4QRqvwOfzkMedNlaTfAnTEnH+ImC+TZe9KpJ4cHPCdnmdz9kFp4FYC0uoH5TH1mAuFg2IL5j5/stFdo6WEZvK6QwyK0NvBK2Jb6NQ5IG24yMcmkxyrNVtf67wPj7tPoBQ8nvylFnQ6ip+gbGeSU+RYNLJTF7cWvtxqS/zKYFolxzMPEeMFx7M4yCxVqVL94oOjKVrcw/dyDLWZ1EJ5UPtgTLxWMX/MwVKVZAUTXxOXdJdRCSaEeA1d6K+M1rOBjK0B26PMrvOLrXCyUIupxB15gdWEhiuORiRK+b8hkjgO+rGBq41kVRtPVxKgokA8dpecGbNYAmcaeAnE79Jw8T2qDOa0VjuN+wMq7x8wDvM+9LzP7p2PT7eevM7VIhajuhjhLD8izNWsr1QrESWSUSI7xKmME+eOPVtt/vrvC0OVxu4igvup3lnhOO2Jyu4aMeKLV8QAAQABJREFUkCpDVFYM3uu0nVwuXWtGOB/CzfssJjDTFZ/WBKQlF8fa8+XR/mQcvNGzgMdDlwWTxNVcnrKMKcSW32dObmn0sH0N052Gtq9+NvMO6FVNOpejwfFv6dth3mZuHnugkOoIEwoNy5AALvpwIYwjDTYo9ijPm1SYgk5boYArZ1xRgx1QCelZajUc+QMNpROrc1blRAmXcFfoTjNRUEOCyqaedL5lT+iISjMO0iRWMFwZarY8cy8J8eYyWltTTc7JwoB2Ix+G1QUQyg154tSxw/+ul+FRZQLccY1ybaRkD1YyhCjCLFqaLqxFNuPVnf7L/R/OCenyzW9R6p8cynIpvPMymadzXDrCSg8GtT2A4y9CS2H4ECcWQdMr7HRq5Wx0OgrIH7/Ic3yKRBUs9JWR++O2NGSp3QXcDQLAHkCYdadoCfHPjwXASiKSJcyCZbyRJZCRsqUDTTDPySTgpJ1LAuAxBEjgSI8hVgjaViTDcvX3pCHIiXuV5+Fwm/RAPGnXFSVTfBwftmvm8QuDswokYtOjc2UIY85mrPqRf/BI82woraPY/yhbeBJOnF2Ecvlk2DifKTLRXtcDMvKxK66gYeWj4wnTfTqklZYnBL/HkNTh+l4bvTQTXaQWtTBCS/kWmNycQofb5P06Qq/TOltnufLMqdu3SOLka8eRdVy9TIpwjSi6A5fxCMp5NVFn0hHvibtxvECkdSc8NGvpq7fggJe00JBPNLU+HWP1/QbKY8EiyjQW6hMnQS0l8OuYdVYVpeDgPGjt2uJJZWOLl9ZUSIoD3P3GQG0gJYiSJFl5in2ZZ9DxSmuSZE7KCxsnYITskEg9CFMtzE5OdK4V1FAG+W3DCNjYMrIKH2eQwiINCi3ObWiFB2rjtpHPN1au8LuGM3uADh/QALjD0NRjKopl7HEbfj24c5NW+ix4//Fgor04wQkCpHcCe5wW+ZCeR9GtfFYFrjCzXUBHtP3mh0/af3u4mqFV32h5nrgLNHasPFzd5wZVKxHVYwPGikKbssehErRXl+n2TtIhLp2RQ1LGD7Er6ce2zVcqDvPHPMiyVaBGGdY6xpanaImO4ZzFDNroGHbat6lAFuHpZ8hTrdG8BSWOrvJVp2fFuM8wp0vOxyYtCyTX2WjiwPop52Me82I34H/ng+W8gnqa4bQXWAZ8mfJ6HV4uclTHPHniaw0wSjwTeM0bkIa38Ic+McH0Ggi1DLmaK2VQ4kQeZ4krt8TZ84hj5N5xOlgAd8BgjPQ8avP2alLphJCMyy8P/CeN6XhQ74b7fg4ytEJQSnwLAnKnwGeJ7FGpDoD9ggdtrWzR4aoMMSLvkHt3mk+g0yE6kmc8e9yF6ESRYVXKePQrX8kzsKErFT2wgdLlDQoiRacf7uxNqw+ZiV1aBoUwrRcyGN13LpJZkY8wMy5wA+ZAWPatEKFpAohEraRWMKhIDX5kOQBd4mihDEKCRoGYn7NfsUk4Xf+OofTvzESjTNalqQBSx4lIz0gUILPewqg8ugppC+NUeCuPWRQzh1G5+GcbE5N+0hJuD8EduZMEuJ56B+cgvmRGIIO65CwyCTi7VbkFEhhZUakTDChfoXROE7+NflbIYF7gVxmiw0qa7jt6JIDa6wAB3j7Ybw84fv7pqzPZYevKnvADn/ZA7K5epFmxRg9kB/hHnBmhbDIywZyBzkPMcQbQroJSfEVXwJXKKid7VuQ7u8BRgV1ePZd4ahiHgu/cB/hcPHPsW7AcTJeoBRbDHNDL0plrBifuT5GIQxTo1TSO3MUQwXq2iTBESaAOTIsdpUKQR9Ll8p4JVQufHJczIFDz0pZlEj1bNPmJ/v3qK2r5EUje0xCSljoina3IVGA82Hu1ktURKlalATVxTqCqhwMq68e8t+HjPV5OxqkBn1JBPNg/aCsUxDUaLZvAuMTa1rEcZegI+g5hegz/czjef3462X52YbrNztCoQeYhx3yMUXlUGQMQW7Ri8USAMeS+zXzHf7i93L655klUNopclut7ZXw9AENXfOYQco7WvrvJkyXAOezhUSS+bpjp+FQ8ttXpv5ICRwSsLynzSA5X71mGVYoVhnZGlqYBkDcvopv0iFwhCI5JOJlD2U+Aj5NRXVyHwP1vVhhawXydiuSUIS2HxNJAQIc6S52vE/OuFBKnQ7T9suqzxgs0ss+G+BX0+qdPNtoTmuvHWyft21vb8F8nOiwx1HdpfKJdpxX+JSqW52cm26VJ+MYXqlttRV06JOn7bqxEzFrtG9bRuTZHCPlY+c4yZIdGkc3gDP2QFm3yUfZOTdxmKFRGkMW0WXEoUm2SxKZPA0QdBR5+hFfP4CtfKG/ox3TA2/DUN4U3EDh34bP2p0z5xUYdys7QlXmlLOjSxm/SKjO8SsbjgWzsnSDf6DjLHoDJKldwgD00JWZZreFueIY7OQyXCpFLPqAhTnRDivIFwgFjvqmh6LLDZXoiqUDa4EImTSIchbi0QCKYtMT6gWVrprTe8mRi0/PrrYRVDDgK2sBIU/F8KxLRlchfnkuTpoU9IzsnYqxxoZ9bRSIaYzxkCMH5DycJJygFLntlzo7NgWagwhYttSG/+kG7gOSiaqH+KkOJAojLFQHqNnJEHmSRrwSX43a4YwGDu0wFcpX9KeK+vb/L0SOlCNHAQvi2sClmGZJIwAXAXV7Be3t5uz19erGdYiCn+5VWR6a8bhQ6B74jrGELva/Cr5OazkNIJj0iiQjf4QwN5VN/MpwPho3jS4tLyaOX4seemo7FMI9wdoNdxpHBaQ9nlKU+VaEQz5+00tsggRWWTieVCgzpKI4ZsvAoC7WVikXeKLwWHnlJdx3eEgd7GY6wsHf8Jl1KqeZGGpNRcCMHFmolELmg0A+T6TjUqUC59xEcCU5CAxi2pACWTioPozf4cwLbodBHDD19nNeN8lIyXuj1kHzbROQ9fn3no5tOy+7Bh7258gjRslAiBQp9HMPzS6fj7ZdHp9pXWV01NoV+XenEZPn4DFZCfknPgijPea8LunuL03L/7Xv32t/x4iAzQ/0s8XnqkNOZ2ex3AdvmHQtUJKyegqaHdKpvcx6pY1viO6SxcY/nBwwzjdNbfZoGyE2PwIFfRKXu6pw8TXl5joppQKhL50E8F+2IoauojZ7JLAujZswPYIWv4Rz1R+MNOn862GnPQ/cmejo+QiPJa+CVT1vFng7RrXY1JB8dZqm8hx/yQ56jC+BnWZG4gM37wqVxWstmu633TWxjC8fo+8T/hrA/WaehiJd9mqHfL1LxvnJ+ql3Dac4wnxPdgdX2ZlrQVfCwYRd46BClCF7oWWYy5Id8/h1RgWWTIroom+qAUzjgl3Dtx9a+uqwL3RPu8Ff0mbJknqAjPpkL5gmQDLWbY+qF/1zVIOM2GUEgBMTjNXSuyoYkladTjPYA3ExsLzq9GsLIuTSWRp0YsZFgHunX+BdNjmBJbQI3ykFjxEv/EJrch5r0vUxDlGGBqdjSpQijYmQIcmmV7TGEtsQK/tML0XAKCggKDbAoXo3JgARE7jM3UUQyQ+r9ZUSvZBSr9rji1GTUOBL3hdkasQ5HA4hoYqyCTcE/92YQt15Rbnhx/JTxYgoRo8k5Kn0G9rycxHS3pwbkZ8BqEYpLliRawRyDr//LEABK1Tkqk2TkSzr+hVMqCUXA9tPLOQdvV8Ym2guUhmu8nW0Gw1zG4XzIe0hcR+8V58evOM0aQ6WSoSEIuHJljUL11pPt9g8YLx/gbBgzqXkQuaAgTtKis+V1yktAXPr7hHy5CK/KZuvRbndvBKAv/tFXpIBfWzudRMnD6BM4ZbNgVyvQ1jOcoctUEMabRRjgCc6kFjSUbpRB3aSCA4eO3feRZyyfnoj57NBH9Sxhz+4/PFiUSgHcE13zICDT+wZnFJ5n+RBPeifJDfkxJ4SBL5jgzlsRcW8cPFhogEulgo0l34kJLPapNQnppPY2zsQjQB5T2b3LycjvsKT6DutW7+OkdkKHVOqRisNJZxXiXId/mBsQ5Cm/WodDRTMINcXvU9jDj7Ga4Gc4jv/aOVqBthp1AlYe5K/j/Kij9M+Nsjo5+q3H2+3f0fP4mAZIhhPg1d6HLyS7TiPuHLjnCfPdMg4XTWcvDXjo6ZXNqphTXlZ20P6S43JuU905lGFP6Cp6+ZUjGjrH2DC0fA1rWrhnDkMd8acucQZ7j3fb3gq6JMzJ8Hkc1k3ovw/tI5zksePH0FIOmwmPSPfbE4ftX1DvPXOErhhyMq/tUemEtRk/GELSmW/lvNRfd4+etZlZKtir5ybbe5yuDcn4Oh2UQ3BOZVi2bIh4kvYO8Hdx+N/e42yvdRphlMkfmZ5qX2He8Aa6XmRV1yT8g4XhZDlQvtK5ZdOhtvgjcIPa2PBjQ0bivZ8x3MuetD0bxdBnWAZjvw4bcZtK0F/+7BWo3r4Siq8ER7xM15BKhS5icPFPJA7e8kM6ZbTn4Tt4XKlHncq+HHBH71CQBxVkYZQ/yq9xzqFmzgI8AnmquFfiTIstRS7y1HKd8BAXlbj0dsBjz9l8rOlLV3z+opv4RdJUuZZ9medi+oPhXnogMCESL+NSi6PaDI8QFjWbxkqFP52JfwTwTUT+69f7/gqzalV4EPcZFBjhQBFTtrUj4zqFDm8yFGcTvigQCiJfhyjCjHRJ4xQ47aY7t6D5F2m+UbTy62+dq7AiKR7g1kzTIsCs1P7JV8xeBDgEyhzzJmPtMpNm9jiuDMfbsxSSS+TqNQx1Fgdv1/INXrizu2M5wMhJmgve0HsuHY4duqJhflAIyJ0fbG63zZXtNj+/0E50xhwdkvc+QH+aFtVFlu2NEuau3y2q+EV2CpP9yRtbVFq0rHplrw40lau65MZjzuhK41QxZ7DqE9hUHp3csccwDA4cn/sU0gvVeHSgMOEYuc6thqYwJFvToY7DAfkoQ2vHjLP5p+5T0QGg89Lgq+tOALSreAMJb1VRKQvpQo94Cq3IK2fAHQdsC54hm5QNCwQ5B0+psGGgL7TiV+euDLKR8ZjW6z2Gom7zetC3mXe6Q2/jk/QwWGIKybwQizTeH1oxwlPmMoCx/+F+CucdzmNDroZaxAFdxkleZEjlGq70Agxdwi7mcFp0SBFBnqhYzo9nn4W6gB14d3Cp7seBfWN1t/2bW/d5H7Yv94paYj9XKPzXGB46j5YuUKAX+XWYdhwGnfM5BI9DRBbwA+ZkXmfV3x+P7jS2GDLUxbwFOrHBswX3d+D/MmF5QRg6NG/NexmCZHqB6vZg86Ct3dnK3GJ6CsSO7Y22L/P6gG8wb+KJCLZ8a3GKOFwJNNJus9rij8jeXzkdcwwcKOB0ZoTZxrH34SctfByuTs7xAPxeNGHr3bdunluYaf/s1esJu83p2isMi27CpwtHHHkT8wh5c0LG2hMcoazr6Fzr8T48vHOw235/faQ9Twa8QmXy0hwVOZX5Fed30JWmnbKB4Dag5NHwThXRh8pPw8rA+AISCZOyo3Wae1zoN38gBSw2bO8sfq5zzuKKnwMmK/Pg2Wc/lskgiu3LgzKBF332S3a1aSfO874cweUN2W249Q48FZeSOWycDC0nT0jRljfnfSRmLcR/elIVwjcXvGTURxsVXqAIJUNmIPHI1NcNhNSljroLyAvDkZMjD+EkDYgkBEAcD4F1rwKMV1G6aW79IGg5MsIB4DsRxZRFiQuY4AhjPJMBAqG2/AYtcVFCpEiqKMFHrzh3UeMQzKxdDMwVIG7gc028cxu78Oa7x/dUis4ceJPbinH5rn8W4dAF1oyQDw2Sp/CdoSFwzuHAnh6fbF/lc5NDDq+wa3weY/S4dbvLEy6B1KnhlL63sZ95imCTJrzk3taVlmEYn4TBl9ZgC/GDPd6g+GCzffnZ82mxxkps5aGXCVrzV9hQOLmJXHiKLVTl3hWXIOsdLAwamXqtir7wK29pUmq2OMvxAwQ895V1yUvPVMqks/NN6EdcLp+1QAcgygO/lQL3toy0D3dR22q1AnI+IxPmpUkqC7jX9wNnJZBKhvyOTkiuOtICQv6sAEKu2Aa45SHj6Mhf3Hew6Ex8BlqQ+D6rLFJwkdEW3gg2MWRoY53K730qiu9zNMxbzF3cZ7L7IXNI69oEzDkxbKFWHAVzcrzUgp2Aewp9XEUPl/g8jeu6DP6nGHu3olhkhdI0FeIUtuBRIDCmJFpPnA+3qazHOVXZXghkUvHqsFy8YM95in27f/Rgo/3GrYftkY7MtOqetFZWT1Por7KS5iqe3IM57eV60rNLqi2cWTFGHu2Smf+TYaQ/pOehXT9Pb8PjTDJkC2E3GloROjdDWyT5EpGhZxm0ohynMWR5f/ON5XZA7+Mq5767CdQ9IowVtS9w8vMSQ2NHOViRfSIKxCW/lh9XSn2H0xamkOJXHfJimufEzSbqBfusog5VWScdUqR3Fz3xrP24cc+x+5d+5Ep7YXG6PXi81R7TO7zPkT/vcm7cHcrYffeW0BBwrkfrsFFLttQl+uhv0N5loucHlMfpDeYQccBfnZhsPwVTL/qaBD6MCmI7ViAkBUd8nLYfRonDt3hZQTs/46q1mB74LXdnRZpA27u9TDpo9ZhGDOE1LxJUsevYL49WnPE3wGjvZro2rd9BXSmjViJTVNouJvBwB31TGoLAC6OfzVBaeAaH+kCPOcYFe6qhLBLS6BMe4OC3zCZfZFzS0I6fVgpw+icuL0HBQDAwCUmS3PXPPkTvo6PT8Dmgg1tRMliZgxFwr5BVTPjtU2vQhCZGGNOqQbXNv07N4BoCIzqS86xh8alWpywIXOGBIVFPIh0SFYYocIREclGtB1eujKAYFkiSr1WrHwJbXVbpog4+Ksneh4e/uQt9j56LPQV1L7bQUqiOqEqcwgndHBtvP0Xl8dMLs22Rcf153gutU5+gInG82M1RyrJLi9h3dxwoU8TsMlfJlAVCaYEk3tzUqQCDJS7Dz5ucbfTF7YM2An53fuddIcTblV2glTsL309YEWOleIRDOVsSCDFbhOqvMhkB1A8fnzOEoFxCkJnZlgJ4VpYw5JR0CI3Z8q3xA2s6Cpby1VwIeocXjTMKwrHGLhgft8eTCgxdpnurPVgYJChPOiD1b88KcrVxzVh0AlwNN4kXWJ5jrRRQC57pEiM+8i6VT8efepE3dV/hrPahctjg9OK3eCPlt7aetNt7+6yKcpiQM8TAJFfKqMO0OXmEkyAaHNU7fQod36CX+RS9zed478pVKocL6N4CPOccBr8Z9iCBfKf8wWc2usIPpVvrtKYoeYwTDlujkybJaonz4M7z37+33n79o8dt/ZDDB9HjPgpSXj8vUoVdZd7jJla9SO9jBvws5EplpVM/wkak84A5jt8b2W1/PrqnRbUbTGRfII3Fbxwv5eiA1kZIwly2bs9tyOSz2rC3WBXFoH34wVb79oPtLBm+fDKRU3VRFi3PEyavh+0Gw1P3Tau+4MleSCoQ9CEu2zzfGN1lEcug/crhGGWDSoEYL5fKq/vytjZg9NzKSjyO0pbtKA7/hM2SI74DHGd/nYr5Grp6GdhfwFY3Wenmi9ju+N4f5g0/4Cige5xQ7WKYQwzW/EWaOFU6WGkwmu/3HJoE5hsMDzy7Pt5enZpqX2OY7AIVeEwa3euIAYVP7RSuZJuvNHzMEOTuG2i29NU1KbxJRZAzrixn2obDPxoCeDLnZs1gK5Y0dhfj2MFt+Qy8NkLeZzGGoOjcXvN4bA89kj6nEWi3YhHecsAlH97ZMBF/zq+DlsNjMBy5LNuOsmivBAAmbQiRxmkD08dPi8s4nsWlQuJbCNOeEq5+LHPS59fGgd5TPTKEzCKx09PxAADuyo1EFi7upQ3hMCGRjgzIogwLAIInVGWCo/+TmYTraAxFCaCvS2Z4DpMqqwMNgHAyivR1lIpJip5DNIcYmLrK3g/g5IP8jSJscYV/ZeEzJD4TURiT6pYewsQAnFwStleUyx0XcSRfHJtsr8xPt2evTLc5jG6S8dVMLNMq1XGEb1qBHvvwAAfmDnMrijhvBYSmGadI3EYF8pJ4QjUmexR/vbzefsld6UwGnlKoB7b2YcbJ1yVavQ6d3XdpMHz5hkV3t+v8HMpIC1D9RSjkkAfurZyiQ4VKiwp6Dl2gbyduKTfVslLHtrRIc0oNYxZb8FSGjubEZV/8Z0csMqeS0XnTsk4nVDU4fUO72WEKEqayyq/OQfltBQFjZsGFUWXUMGrlUqux4ANebJnRbAYYMHjVHn1bmjbgvS1vW7zi8EVbD1gt9L3Hm+17m7vtPcbE2fzcDpQdAGHlPRUperOF7nlormJaxK3epMX73NREew5lXMFJLrBayuOxnaAGJIU5lRTOLPMXGhu6dFivhnh6HtG7FQgFUpvwyhAOekpv2V+Tkm9TLEf9Q44l+Y3bj9vq0UF6FQ67qieLwjTyf+Fo2F6gAvEVyK62mkKP6XGgX1c12VVaY8jrd8f221+eshQces/TY3kaz4XfTpmwpam9O7xrj8a5H1pRJRN8agu0GfMCqB1Wf33j9mpbxsYs95usJZ6YJp7y7C75Ia/S/LH1ifYGw2T7yDdMXoCTe+3PJfQpQcj3J1Rmz++PtZ9HZ4hRNqjOIK9DcpWQuigtGW/+IBebDu31js4xD+TchbaAjelQp7DD6XMMRV2eb1+izP8i+b62Qa/EyoQ5xDf5fMrw22p6J9ASLUT8zb4J6G5D8x1WPb5Lb/T/bG61n2BE4WfPzbTrlC/nGl3E4ntzzAcveyFYZHhNj1i7JC422TlOn5Go0hBtg1a+a4gdgl4dPsu8cidUPN4RliNY1DM4nfPQhmysaIMu3XX4yh7QMWXAcoJHASXP9oyCP98hJE516fYJK2lHXfr9MbAVvyhvuaxle+b4VS5tPpeMcsXfe8Nz6oVeOapCWdWxNLjl3+Y0i9ZJm+QBEgZ2ATJDgkhOMJQkhJn0TjpEaX2FaQqYRAHVcuLkDA9ToFFInsO/MOL+fDxBYQ4EYU4YlcN3Klf9B0ms+WXH17RKw3ed6yTqUp11b72mvjQmV2wxVkdtDW5aaTnVs0sB10nhUMEleiAv0Ox76twUR1NPt6lzvG6HwnRiZuO4PWHUozesfDZcvcOKKpfmpqAEiwb42aW8aZ0QJ69leg6hjGLYTMB/tNKWXlhkyIDSwnCLTk8nPU0lco2W8ZsMGW3D96beYwS3ECOGnjWBzoEreWUTk4ogDpd8isNHfo8lUWnpnssY/GR1lQxbIVBAMlFoJWLdA37h++W+jkjovGpi3MoLXTlUZT4mo8XDrTTRUVVKOAboutNZXEBX3puWoBgodMsWCMMu0lsQNBdh3GtLk6Sx57WJrm7REn2P1VLf5eyk7+/scO4YfELTlraVi0ODDrNYIbp8wtV5lzEUe5TPM0/xnMOR5O9lepW+lMdDDDGiOCztWdHrILuSp68sq9ejHpwbKt7Mx7QSFBGe/XCbPBY+FSA4zQffXf06E8T//uPl9pAJ7ykIKVvfe1YfN5n3uA7uOXDMkM49H7ZIHTpMmwAdPKHF8j9w1N/gqBzzcwFlfoHhLjopNUzLs3w4lGVl6XyK51U5ITGCeTnc6BlYExxfMkal+e1b6+0t3qkDeM68WsU5LVA+zGMXSQw4pOLlPYaxGPvxBAUrJMuRe16k1Lky5KBSR+e/PbLTppncfpXhosx3IGdgYKFvLacMmLk6QhXGdUyFekxPPHmQSpserntWaI2PMMw20EXxcXL8CrivXTnXfpye5hrDXLfZlPsDejDvMNx1a2OnrVNeDtG5JGy0xYGqFQI+wc4+pJL8M9L++Np0+zqVyAs0EFExlR5fAYYuZpFNjuRBHDNR4ksFQZ70fBOEfNgBcDoAG0I2rnwsH6SefDZeSbnQdT7gMdxegxV2TZ6Td8joSjRiYkuWdxuFWGmVHfLGii0ZDQPO1IUK+B2V0Zbk2Z3v0pHv+Al58JJ5w+Ab0OhcIO3VK7wGAFmQx1Fz43UXJu2wJCzpqDvIHY7AE1IkMCdtAUUpwigjSlB6w/gSqXGVQyGQLfSWQi8Lt3GkzjI0gn3qOQhDxoOjoIwLRDGae56lw3CARyIc47APeJXtDo6W8hO9HJIBGkzxjHKlgaRmjK24GfixYatRuH9Efs502MnQK+cCzsXex/PnJ9vFi1NtkiGskfnJdkprtWeH3MTR0vZjTPsWraGPMcbU0mIWH799wcJEePIqc6o4n63A2L1OK/LPPl5pX2UFzPA6622oRAY4SZfszXA20bMMmU2wxNc3KW6hqz3krCWcyEM+pesNnnSP+U2lwa+6IUn0yWPlE8SFC49mEQ7piMLm0AhlH3h0R8I6U6f0ZVp5xYWlRW1OHTOMouG5Br/WxTOhinNyTkMjj/HiqGJ40JTH+oiq6DvBbnc/LSuZJRxsEksLy2Ezohm+OG3fZE/Ad9ZxEOS7ul6HWU1MaI8qt1ewbxhMLZHJz9D+/gIVxtOT4+0Gq3uuYN7nbNn5ylX4ib2amv8cs0Kgf16RSwfAR2fm8SS5MC7zNJW7SoFfh7WOoUu9BQ80LCi0ab1Kw0SE21p0nuFt5mN+7b377SGr9egM8G5y4mjEeNKAl5sGX+LI9HMwZU/ECsbzqcami0+mGRiqO27/nbVi3+CkW99pD4vtWYauOMSOVVqcRkT++VIwNItePPyQY0/g08rLyl+urDxy9tUCuzzouby7vMO+Fl5wBj1l20A2J+YnqWwd7hyhwr146bS9dG/YPiVPRrB9x/HtiRykG4ogpHEgSRLL4PotptzndwbtiwhJZz56VC9xUNEd9hA7lKWy2cyLqTfg6lUBzN5skSvwbz6N6qKY06jKBF4pFyMMMS9dmciZcj9Jus1th7m22nvMK37v0VYqk2VkOdt9Dip1pH6eMAT4B7tr7Vt7w/bljYn2s9PT7VUm3cc9RJSMM2+qAVa2kYoDGWMD+CF7SPoZ857g8Kho3mq4seU0KguuIggHoGTCtuSHHmYmzjHNcfJmCluZwm4zT6JdUZnrQ20kqT+HtNKAxLfJn/z4K157KxkFMV9Ik6N/rHhoAarvDD9ZqOwEkN/FuwlhnLKcRp38Y1um94pfNN57gqpMV5r4EfHScaIBdzpRAWrBwm8iUyCoCHOJuAQxXOReqTQCCy/8ZlhIOOP4BEyBSFNX/VpAs3RO5ZitIUfY59JEOQpA6/NwY7ttc4bUMs72MW/1O9DxEGf3ODV/dx96EgK/+hrHqTj+Lb/y4LvRhUkLugtXYeeoPF6Zmm4/MT/Tnrk402bZ+DVCa8eZwQEbmUTgYW7UQvnsUXl8nxbPiuNYMB1ewRPVSZ/LSs22BClJroDyzPP/Zeu8niw/rvvek+7cuZN2Z2fzIi0AIS0FgAkiRZGUJZblsiyHclkPLulvsF2u8pMs+cXvftCDXWVZLpUsuSxVWZbtMklRABOYQZAAA7DA5jg5z9wJ9/rz+fbvDujw273zSx1Onz6pT5/un7CC10M67jtbO+X9ny6V5y5Mld602zKSjHfjM4dM2hIGuunneNkagt7bh3D2US4WHNdKgy3rTj/ZNgugfN9noz7uE3lCmlgzSct7YM2cA82hx8MQ+Qa0Mo16LEjIhZMSEDik91I88IYuBg+kCzFTAhJEASAhAkZlJK18pTLw1IlE8oX5BIr0eZXSUpdF7tPXt+jfr65ulNeJnrrLvesBjqi3hjBSnOn4o9vlPNA/PT5dnkegPAspn0dpnAgjInAccSIMHYbWEYZnMpO3WsRcN4dKy5EOgPAOkQh+sp23TaSxzmnYMPtXGk/UHfdH0APNa3hGtNFWk/KMdejlDgr331y9X27uu00HQlyfnv3vP/FClRcR+adRhHW+DqFP36k8AioJ9rvd8u39fTY03M9WOA4qdVHlA2ZQmMoin6/lmes0XKciJYkfR+muSWkx6hhhpnPUABBH1BQyh1CGBOlG2sOIdh+YEqZqG/gZVDE93yrPLbfKX+MmggQy2nAbk+wpJ7qa/kUugTPW1CCc/6S7Vf7JPpGER45ZbC7thTakUxGjW06yEofyZnYvUAPxLsTDqfI+rlqDNuAx1/krTGMA6Nqjj4fp62E3E0fZzp6cKD+Pu+u5SyfKZzDCbjMy+dad9fIm8ya3UOC7GqHyABDFI0GbN1DgX6f8t/AivLzVKn8H/n+UMobYKTL0Kh7s3LRTGWL+Sjs2xTcZsXptO2yUD00krYRfuAXJwYEvJUDe8T8jPflIfOi2mmSObIw+SRkZWchP8mHNr8xKFFdDN9LPQK6mbjrI0Uy8AdJ+4LJj8j9KRthi0NkuXmkIRmYHLmEXQ/JkBVXZWKOweGIejsBkAzjAKer9qCftBnCfmyzvzcBF7v0D0geC31sBAMXp2CSijIgDsKvwHBxpJGVV3DWAABiF55fn1mUan1tneggk4Os+hCC2URw372yWn2BdXGd9RN1RV4Xg1wVrJ2hF+U+IITEmKQmHs3PSBnbwpUeNXrE+IVW4y6xnCdE1YuOXT8yUp89OlpPzE6XFSmI++0WILURK+uQRRt1XWDabKJDrWD3uVppWJFEtt+KM5yTXSsiROq21ppe2xhAaixDKl64tlyefmC1jVy7gHsJiMJyF0JnR0YXAuI9k26AdfsNkf1dmREIBdyQVba5bVXAr/viFYIEzQMvZCn/gGyxki4CD0LQykXyNUGzglA7El24YBKqhqTKTk66OfnS8h1ZUPBOkleCEBYmOIe6tZBKrqdFDURQiSRRUK51ygMfvVsgcfoDLXYe/uboXxfETlMYagkhQNBB0Eca65jyDtX0RAJ6jzz7cbif2/wxCZBwy9rvZjmocGSVQAxdgFjxScZgZ/EUIiT7wbBRalB4Vub2ER6xNwBsoXZ+6dY5dn8g7+w8EinOFn1vTOzrWdeZCVifF3cZjG7q9Rrv+08oGEWGs5qGuEazBMdIZTVRdDxg4lH8GeFx57nYlkwiQNtaorsieM9fgm+80le9TkQv4hIP/mdSeZRjnqGWwYt21IlBn+gcPFO4rRiSu/9DlyL3fHhlFkUD02dbkY0/OlKuEE68zj0c2RnK4svBodYhkm0RAexhUcR6FM7OLC822Wzd/VViZ+0uNlM0/FZERoz/kUwZ/vIUSoV/myK9Xwy3JeWXCKM7Mi0TRUiLPdA+KX3ky26pokNhpvI4y4axrULFQiMzqE2Y8zBxOH+PgkHpGCEQZgV/dpPIUrreT8O9zj8yUBUZZb91dK996uMWiTdyerP6P8UE5zhUYcLDDcPzLwPgWG0l+utspn8O1dVoepK+EJQd8QvKKfw0N202bhDHt4qVGhzcKcygmtBcFZBHWZR+Yh37VKLE8V5s792Gfj0HPka/yt1nkWetXy4srLeIYbSgJaNL3KotsNsm70CfprM5Fx8rSYfHK2boogXe85b95hVujUNL3PmlM1zzzHNnNC2VZFYScf/bo91quiWrR96YOQjKEMhG5jjNauY0hoY00bUYQJEvWhrJ5CpKFkDQKL7EWiAVQ6Oq7NAWgPbKmxAb4lrw5Wz7I6GGF7kLk1+5gkd5bK3dYsZsQXhkYghuFiRx41n/UZd0NMoxkEOfKSd1c+S460MZ6JJmjjsvMd7w0Pllexhf66NkphuydMs7cx3AHv4zxj3YeZRq2atEhGCbkVoFrCcbL6k/qOFYUaQNDTVth+5o8InJATMIqkTmv0uX8HSb3XnzzXvmlc1P4nWdLn3qPHm6WDSxxp1zMq8LcBfdaiAcIJ4e6vAie68S5FVulRCfeeYcSSZdZtwQo/vkf/FguTFN9vTxCXoQQzR9rzbaSnHJUIO4m65YVun0sQ+WiQtFf7mdYDVHI2hGQnZENzxRmYA1C1uLkjgJr1AnKg+qX8Xu/gzD43upWeZ3R3HUsQYVJRm2kdR5/EjjPsEjvkiPE1gSjDOaomASfwSXlluHMOdMcarHPGybK6BLcGm1km22HcNg+3XWiwQWIKg/7NBPUwKNyE07pXLxxwx/yowjGYHz3UpNhd7DeNw91p+H2AVcLKJBFlPxDcHQf+nxI+hUQtALSj6iT6mg3CgI8OF/RtcxAdMTaDYQzhoQjijbt8I3wGJYpfW9BA7cxmFbZ6Tn7rFGm8Ls2xXkO991yvsS8zpkkyg/M6xrROJIuxY2jPa3TuA955g65Fy+fKFdu7pQ37q6HB+0TI4h0vcX1A45UwHOMxqc3RrJBpLh2ZOZo0El0Nyd1PrHSDngF2bb4q7u7pfuwlOfo2/P03WkCUU5R/yz0MoWfvw2Nx4UpXVCOXG/fSBi2T4GZ0FOvPewPXtAUkCmkwIqh0fNTIkRyDY93CQ4AiyhJlckQGnQMF9zFCyxSPDNVXmH/uTfvbZQ3iIJ7G3lyn3k0uo46wBVtEVMbVPJf99fLO6ut8qubE+XjzIMaOaeVLhHVUQmwgheGMdwDFLDzH9oBIGheMAf8VUGv/KDMjHFMPdKU/SOf6F4cR1l3phgzgmsLcGThSDJRWEltofWQxnllEeAIrClfSS/Nhh/hB/NJ81kHQuLMmcDgKgtHUdTAP3mDtBgZoVBpWx6S/mtV+WuLlAFhCEH/v4+RYZYo4TFJzwiUv0EJZKiN9hH/bJjE6Pv8ITHwS/aek5nLQXZUnw9zb7GDsmMpNk/D4EpJOjGTsKYnMTAhpLDsZEji5l+/u1F+6s61vNPSkuAcINu4vfgeKKOpJJFMPNdH7ujDTFoEWh72cxvL9AwE/MrEVPnoiU65PDdR5pjz6MxNEnmC4wHro481AEemzMBij0jsCOVD5mBWEHxLsfKtl5+wBAAh4x91+lRLy/d1V1Q6TrOczlIRjFGea30WETbfJ5TyJZRI5+wmjDVcHuLWuk+Eit8wWYZNdeGskH4TIbWHhTgx3XS0HW5dwmbfULbw6qKJImiEpMCkCTINeI31REIJMqONjCxkBhLuOjqxIxD46NA0CyEn3I42qCbWvu1SMVl2tsPQt2LlUQ+cTEhbJOCshqbN0tC7q/jysQa/imV+gzDNTchZa9BRq61i5qlcZsX/i0yuXEFYXCbE07mMaRTYqJMIDpqtqsFx1mTwuOIZppTuuLef8q1xcCG52v7gyZcwbwS1ZfBCi79unIeyAG4n5kEpu+L2y0NGwC74u4aiuIvUuUN73L9pg/MmkmObhI6SbK/wKw4HobQUH1hcDKjuNdijbstCel7OMY/hp2L93O0U7x3ROJKzXw7YF8oII0c38zxsj9FvwCmfnGTyfJYiJsG1n7Y1akduc85DCGyLv/Y0ljp0rEB1FKlLLwqWulozrXLl8ky5dp9FhFiq4t9RVIJMFObA10Lwj43vxe1jPt6KvaY+R/UgVpVP2/0XtwpPdIe9RgjtV9hTTVPHiMmTwDgHfBchricxAp5xQhyY5uBFI6IITau0DE0ZJFLd0w0tikhwHZcZ5dlfCuABDUjDh+uEBK8BHyHORnT5zZVR2mgQzNyZ6fK5U1PlF588xW7Y2+WNO6vly7e3ss5kjygt6UP6cXT1Fvu6vEdf/3DloPz6Vrtc0BPByM263IwzCo92myVCXtiAhe6oNB+U8IyzAl6DLiNjHunqHbYPwJcjjwkU1DRRmKMarACRkFyzmlac8svXW5H+0iMVcK8hpiLnAXkGvK8BZJ2WXZUGiORZohKhBXlT2olilpcpw/w0iHItHKKzTq6CD+kwdZLGfjadL1OWcElpcuMIJp4J+J/DdCTObUriAWfzphARYmGpzAY4nJJ8RWoyVwhyyXPTppyaXxCPi7UM8UAHmN92iLRcEPq3z3Yfd1f2sxiM9uSIlaiQSF0SM0LDfBXiwKalpIXk6EOWcvShD/qiE6zM7l0hLvwjjDi0TqbowBZhliJXLnJRGp8TS3l5hsIJwLTbut3aYAEhrvCwbRXySlAC2GABvHyAUJGNSJJGSc8/YPaZRLALUbqra5dJ4zFGWdeu7ZT3HuwUjE4YbqTcom0qvy0U7SZD8C6CcdD21M87hYUuvByUKyPnXbrFUQXEAzHFAqGv4lsWfPFuX5NX4aeCDGyOLhA6bu1ePylqz+LGYisQQx/dAjxrCcCHVrlKz9VEGX1YJHVk8g+APO/RgK/C4K9tbpQfYBS4Bcwu6tyJTRf3TQDukwQDXsE1dQXh8jiRUmdxJYwDn/MmiYiiLENIHfVIbka3ifzUI1F7QzlR2tyKjh6jtcp5leakkShc+lhm1ao0pJIWxLjYol/fJVLnOnMOV9le/DZwrtDf6/STaw/EfLbWoGxRqwVOrRmoauEJg5OZlijje3USP+AEieK6giYlb3ndXXp1PzmnMA6wBDCFVrNhIiXZJG2rFqPsC5R7Htq8xXP3RXOrE8N9ddM6OrJd0u4+sCpA7Af70w9ZjZxQHXJI39IFh3So0jp9ZoLdFUbKA3YCBctV+DjKQcgZXioDGaWnUnWdlS0Syigh0uN0ST9m5EE7xhD8jkYPMYpGcTdSQpSmCzY3gfsWMP4Q9dJmIe30FkEAwHSREcpzrMH5EMrqIvMaM1mom94EXEZx4ME+ThQk/aDsqe2ldOCSpine5gcu56UcXR9uM4JHdqhIxpjb6FN2e7pTnpnC9Ulo8EcvbJZv3GQy/d5qeZ++3tU9BOwtCtLQe7W3m6itv3kwWX4BA2vEeSl4Im0Fd2F/DS5gkJch+vBRLHlhMQ3P41IVZmEFP5LtYKfdSTaHHEN59O1D0vYJRIiColyVU2gb2rBPM+9EmrSf8g0fFmLLVS5FcfCgGkL0JaSvsvCdB094AP4Ch+2gXMo2oEU+SP3AeXyIeO/NzpkkyGrhqmmiI3q4sGoGXogDXroh4cA9JYByYp0sgiQd94GYHCmHtBZOnvRi8yKWQgrkgWcPTnXvq3ovHF6FoW0MTUwyro0y6sHkW/gl76zvYOko7aiLBBrDMrJTa+Z3AtRGOLSWaTxUNi7UksGEr8P18x3mN2juc0xWX8ZNNX8WdxWKQ5fQCi6jPSJ9RKpuGoXjOEPiDpFRY1jAw0xoUxP/2FOJlbG3WH+wnTE38CMEsmhK5Fo5B8WQ1hYJU+1Anx/jhfeHwGXcjAsRl3Df+JXFeeCamuWzoBsHZRuCPkvvGpnjp0U38Olt0tZ9hPgBlukYlps4yeaQEgDI8TrKg7pCUEiqzDuAM60frW7dTxKx4BtpBGrqSEIlI5HJFBxOtErA9rdlR+rQIqWfYZa6yIaxHBMZJlmAN3PaavtjH2V3B1y9tbtXvoCL6i0sPXcXrpOnuBCxRC/xe4YJ8I8QCPgiI79pJnx1vQir8zwO6+0/IIwlLZmBjuBXbNsjdUKcmgMn7QVvgYN8dEllYt4ZRaSx4lYYXa43EbaLzFfcYxT0DnNaP8I1eQeFscg7Bbz0ZLSR9VeBSdm8c8JQA+XQd/YtuKf56WVAS900E55gzob2zSKMo9RILX25NkPXVpvGtKNkaii6W8W44DUMTp/YV861zDMMHEJ5rbDQT3/2NKORF3ttFAjuW+HgXQf6FDfu8BvXCKQxihUeSxXg2rpHhBa45C3+lCFdJ0T7PX5+oqyyoFA+knZ0R/E/+Ncosb8OeG43kIR6xDvCkX+OfNqk0UBjnBwLPmqDtHFtSU/2XXKIo9prXfK4DmYZGnyPRZXf2Nsp0yzmUZm84KJOlMnzGBCnaMMECg40UgyVQ7iZIwEYIAVJNotrLq1HuKsxy60yxDmPZfhlFTcXOwSMsVfZCKOSMVzXTz6OwpqfLq8w8f4635t/9e5quYtr+tD+hznkzev9vfLHKKT7m+3yORTJHFvUuGjZrXRqP4kHaqavNKoiCxujjCbzn390THY85t55Rw0gJ/4n8Xa0WW82pDtP8OU/8BnNRKnmo0k5K1+jTOhXcajr2SNC30ZDR/at4cCOzsRVZJnJeBFFJg/wz1X2GQ6Dt8gKFEV4zK6iHcp/R9CpHMj0GKWR9FnShYh4Lk2QahTrUxnmlKiYifIwu82vLWgApYC896npBLI5S1hgJhoqTbPxuTALlaUoCIlnIiMKx7wpy5qA3jwCZXqIy85fY1uKe5wlUK1kkxgNkklLKjVEt85PyMyWY0n6Z1EglNOG4E5h0Z5Gw8/hNz/jPjlEWY1zdi+rBYbv797dLNeZwF1HgJh3kna499AEk42nCO07p4sLwpudn4JB+DYEfumbWNF7wCpbZlEQ1+kkGNoOpuogWLSIBgWNQsdDAg++yKMSVFlv0d4tBJpW4rkLbRa24Z64zQLCFUYhuDnWsdo2IVq35dhiM0DnJNy4LuWBXOuD7hkx6KwDf1RqP9vJmmYqrkMXc8lUPFeBiGszHjLy8VrBE6bkWaKlIFLDKl3PYTmOSFQuWlSOaFRQLgLLKIbrfPcCDG7w7Douvlfpu1e3NssNXIzO4bjYze94X2JE9wzzGR/H+rqCn/oszJQtwcF51rdYDXgIbQGT5cf/DAwhwbRP2Plxbds5cWvDwAGw2T7paAylrIXe5bxENM5DoqJugbt3iGz6ETC6cn0F+BzZaKdrXerGACEZaViGdyoAcVD70Mly8vDLWxLwKnQoXap/tfymEPwnoCU7wzkD3ZDO1+1Ddwc8m9E/SGfsh4q8dA2D7T1KUIAsMYHycQ6mC+M8warwczgL/HTBGbS++NcgU7lJc86BtHG3KMjsK4Uu1VRritGEMB04uhakJv0wNH7pQqe8f307vKsx0aN/XccRyxWBsokRt47BEoHBc92vLRnZzqCxfh9dBKgYXf/vinUjwDDaqV8lgzuK5FG49D8gk0okmU0FJTQoUfIsYMx9Dz6cYp3PpRVGJoTVv4D76Fl49xGUygQKRcPCHaSlCeWKZXiQvR6evWnuazuocxXco0hG3eTS9R+E6LdQvM88MVceY+7zCsEzrxFW/+3l3fIQo8fCpQmjtf6C1WYrTMr92nKvXCI/kxc2uRpnMZyAhXaosKNMQssWIYyVruQpQ5ud/+gw8T8BDMMYsPJ8hDoA257aDiURMtD+E088pJj0tWnsewGge2o/mYn6bat97lyXbizp1wjKfDuneW93gfSKK+gzc9De8ShlS9XkozVUodyqs8xUmjbyQJACDwOLrmRG7AUKpOmIvBVygW5+eQeMaQwnW2Yh6SSfezSEkCHYIL+PB9cCxa9m4pT6uNcstKDkr8+HYJoDhqB3WCy06pDUymj4ICrCYfI+rbUuLUXLrQI8IhAiRWHAfM8giZ/ARTWP5TDL+g5HFKMwzQGTaD9gFe5rt9fLjc0dwiNZhQsIk8zKJqpFIY9AvkGvTdzeZE8iNrhDmcwyDF5i8vcGLg4VqJ0aHATpNqHpGO6FRPgidGhbTSgx+cbeklu5Avb7jDdXYRz3v1CIugL+KTpKdF1d3Cvv00Vb4GkRht1DqO8hCMdnKEOc2X7Suto3khO4e+BMUER9LHRw5chD5aJgib8UYZUzYARGGwOxZeQRRcG1llYsENNSGPnNk9Yw+pBZzCtN3tnpla9sM1+FNXmVNQ/wmqkz+nuBUKCfx0X1EpOFT2P5niaWfwJXhe6e9B1SJVvEkKMqDGqg7XGtMaJQuWmRaRHHVUfZtlurOYfto8FiXStM19geW168S1jRD9h1910E4PssmrvPWqJ1NK0WE82OMKMVpQXOqCFCPqGsPLNkBeAI/QEoTX2ytYyrwSKTB8h6TWeZS4E+i4DxS4IT5HV+RLcXJWhk0mbpGOXMvW4rpYBb929zz1uH1sxDUS/twHagFkah4OAMteyRq829AlredKdcjPZEfvnJ2rEZjB9GcVSNUsbc0VJF2IvTQ6+hHfusxbdx2X8io8YZBOcprPwDaEphJ9FJtx6uu1piLo6lHaGlI31qHAayOPpx9I38gw/saUdu5qdcMcKlOxnUEQ34olwxKY7kVe9TFrjMqNQ6fc7DXUp4l1HSewQrfJE49vlVlAijhhdxdblQ8TRfdnRTyrCVApiLKFRpwHIGnUuTByQiem3fIQrxkK98jrAsYHRmHJyNMwcxXj7yzLnyzIXZ8inCf79ye7l8lX25NlC4BsO5OPUrfSJAj7rl72/OQssYPfglaT54AObwKnAIvPjgnlzAAp3pCuTWuQgNI/fSm3SCniUDCuVkAk/KE4nDUUjmIrnvZ6duqQz8klTXi2hLfVQknnUx+09kuL4nxpcygLq99nk2Y5QGATCLDIWZLDlsHxfH97W0+o7KxG0aIHy8Exb7KUe/t6+SNRI2kMkwcEAaVvuXAkycGwkrMJiYnwiywTwnTd6RNEUPbpqUJrfRItjGCkTu06iK4KQhvVzmfjS7KJB7RE9U9xUaFUITNuc7rMPdOiODId0wpbDwc+RxkUnwj0xPledPT5WzjDgmsRrGcUXpijtk36Srt9bKX7CVtl+VkwBmUDbufjpGQaMwcIveksFF9p7KDAZfZeTBjAX7U/E9dqw83Q0i0n41bQ8JzV/uJKSKiHStxC0++FFMUCcGovhI5mzLA2Ldb+Hm+cQRmysCo0zfZrXwKVwMF5eZaIUw/JDRCly5CqOfYx5khiXh9oI4ccI4Q1f7j0O0JuyRe7svE+VyNM+jcBBIsapJaxlZZElbne6plitP3YoEIXbolu2c4+5CWIGmCIZhBJI2+HWs+VdZ8Pcq0UK3WFW8Q9sdlD/KfNMLrJ5/kXU0z2Fpxb89sIwRaCpOcSLjS0dBDQhyRGlYp4pJpWCaKC3bZJ8Ls8yIJSe99nXb2AjSrQHTVUYaP8Ql9V2CLu5SzhqKVdeZ5We+jA5z11pp0T5IV1GAQsI0qTdMY03Vsrb/xkDMQdJolUmP4ramsXr7XJfpCUYWJ4FNxWFYr3s2JVnTRi11XT9Rd7ywTmQ6FrguIMrGRXXI/l4tzj3wrjw0otC5kSgjYNKQMhgkgpORyRTWzxhuRcOuxzFyXOshzF1W7oNhhL+NheZQpAPX5Mg4eINPJnAVnSOIZJNvk/jZZPs6vAludzbZ1RcerB/RAlbqVWjp5nBE4fUoeHH06YfQ5EmVi7h1PsSf3+5JPwJDdtQVIt5XzEmHcoN0CX9z5Jo/4RVodh9evMXnMO+iTL69y1qfjdFyZWW8/BJ09RQRYm0MkiGNGcq3JHEdekj/ILhVMClY/qs8S2JWv0PiBHLs431osbhynLUkGpgffWqsPEpwzZOMRv6a7Wfeh5Z2DHWmXTeZG/3Tgw08I4fl0/1OtuyPgFUIJBgI/EibwO8ck9F0dEMEuVF1hu12GHmPnyBUhIjC5BU46dpM/DRcFfgShn2YKQWeZ07FnQtDmzbIo9JxRj2kdfSdMnwFUbmVewaLwJ6teCjWOqvs5QyyxFeUOWkEVqVoJ0QRy4MY10BliZTtfe3fPIMknURnRE4FtpQjEyXpBRFvl1hp8940NsCGSiWmDxBCxn8EQ+1BSCvlcS9AvAuhAIC5IsSEF8ve9PUZL0S4taL5V9eZPMcCsjqVR4Sw16SxLDMZ2thC4J6H6KFVNjc8Kq4o//AUiwLPM0nObwJicMPCIQSa3yC/dWuj/Pn7y+Vdvjo3R6ZZvhviFhISrMRvwRI9jY4C0edtJIlWn8x/GjZ/XiWHJlsmnc9BKfHkKjXnILC2wE1aRRkysO33CNzekEfcqvBUS3u05YtLm+WzMPHpky5Boz6Umru3+tGcE6yaXWYbjNUR8KJLCDeME8Su0s0kdsoiE1WFDiRAfmxzFGGr+ET2caMyow9ilSqEgSPPaS8MYJeaxwgu3Upeq4jMI751DR5wvwLUP6KP/hejje/sbzM/0y8dijhJuldQGi8hmF4ikuoSgmzaRWxET+l28NCnqrBN3DpMT5FRBlESlHEUGiBN+phOFV/8d1Ql4Wd3Wq12FPsGvwWE4o+xKL/GFvnv4npYoq1VaIPF0JaWL30pjuzj1MgrCcvKOeR9cR4Iuc5zzsKgghtjQtjHinuz+JwmcE2pKYORKgi6dVIAAEAASURBVLQ048iD9Ar8zBukfsomjX1vfunJCVHnALbRxgmFBUKW+MT4MdWI9McOu9aj+81oJ7do52ng1B2mUKZ7smurbgbRO4ZVPoIiccW50I5aBpks55D+2mdUhvcQXEKxgY0W4EI888gEljF9BD710WsQ7WGpLz5EaCO4NeLiF4deM8oAHi1q2xkPA7UpqDTexJD5UXPUQfnU0wJ/hxhezi04wm6hZMWHLSILP9taYRLPGWXSHp/Z1kz2UtcWcFyFwN+nnC8xyv3QTqt8BL5+GSXot1jGaIufBXdkRAWRQcKXIA87GKg0gOjx9L9y74iR8x5bwh+wr1YLL8UosuIMUVu/jhfgCpFbf8Wnhr+2ul1uIzvktQd4A/4cpjnYGCqfBvYJAj6yFkrAlYvAW3/Uxnvpp37jg/Broq467HDB16KqAQWYBnMErjCuvCE+Kl05kW6/Svf1V+uIu1lipj3yZqUHcE6b5d1QMoqzzpUoc8UBP+RT1RCWS0VRBrxv6pa4pWsPeTTKSoCakQyITRtDhNTNf1xYzIEo7M1H0v/jUGgfP+elZeUBsGfk4TMeKQYUhlEmzdmCJKNgQARYuY2OEiGjZXMfAcu1qQM8jdEds4Tm99vnHqLAdwpqCU+4gncbyf0T+Ep/+ezJWE/qsPlp4r/PTRKay1Qjbqw+LhNXkW9jbXz+5lL51sY6cx0QNWWuQYwLwOEW2G6+6AhAop+iakNKJUAnON1XSF+21tZTrLK1vW8OV+sMEVkRjiTajea3nWJFawRiII8/cVEVDNccg2fDEOQ3d7bL/8Lq+a3ps7XDyO3eOGcZ8l7C8lpiW20jl9wTaRuBKS1EvAKfaM1ktv1iOC31ShwSr9a8T7TeFdpGYMV1JUwV7eBG+MRv7RMJVEvVfLYzPlrSXmWS8Q20yte7O+W7WIX2xTwW6Id7LTaqw4+MVXWJSKpTCLAJNubTXx0lRUEUE6aOwhMO8CujSUdO/gqT9QqUcNETZgAulBl9Mo71pgvELwjexB31Lq7Eb6M03iaCZlE64hdlTrYBHckkulaEk6dpD+Rn4c2RFpLCw7Y3MJErT5A2TqbqMtXiTt9xH+YjvXQpljqY/m75jm5Mn6rA0jeWR0GGKWeOCFztRquLCiOYGFEiWFn8HNg1JiZpvDsoxM2FQJBG2f2KfIyEKU0cCL/fLvdTzQeULbSOyEYdeTinxLVuqx7fJD80co73R4wkFSg9KlP5Ol/miEThOjXPUkZcLV3o6oDAB+dKemt8roD5gEXg03BwV+jaXhVFoIh7R5ef7hJx7yp4R4e7GDs9hLhjckd9YoHxCPCLSQ0xw6VRJARPdIk8Cn/wXDiDedskUaOV7JNBHhdj2vhRtIQ7FHwdXnjjYKf83G6rfJqJ7g8R0fToSSbKdW858iBNQsyhrZ71UId7oMUK5y4RUjxzRHegawtcjU4xEnN3YJTS5Ufnyj/C3fTUnbXyl8iNd9gNeFc5Ak/9DwLQ91ePyif67Np9ElqgPeJAgS/vx+1KH7iIUr5rI4Mm59hjmyAeHkoooVPbHFkI3vyYWbX8eUoZMcItk39GoWWEATp1cfHYi1zbL9X1XOnPsqNMVEDN1u4GQNFM6MPUZDbNMQyV27Lbg89TNv2Rumpa8R5QLeT46DMCYb235ZknIw0TqHF+5khB3vNqoGyaGzkh6c0f7DWA2ULTxj9KR4JdM5MeIgYZQUBqpSRf8S8N4r0TvgtYBK52TbFma+COUqMOGdA97WNRguxn2Q7k5HwnAskohxHC9Ybwuffxm6rle2tb5dWfPih/vrCczd9c2XvPMgSb8t3+YQrGcGdJ3MgFo5+9ggzr02UAsfN1N8YyMCzDavI9QjjGElFd7yHY92AIF4r5lboVXVwQWYakwsm74IyKrMvus9YwDe8rFbm1Qr/84dJq+fg95gncG4u2tRgFnGAU8jgTim8yxnFLk9sIjnU+/9klLJbBk9zF/1oOVYnI+LMVyFqUAIKgAAZeCQEg5hO0AJJnEnzC+HheJ/PSRVEqCgMDeBR0f9BdL19g3P8AQWYE1ctjKAzcaC8Y048Ped7VtEgaQx3rXAXVYeFJ+IIXxQENuD9PXE+OkDL6qX1gJ7hjsGdhMo99QZPLMgrjB9u75U3mNN5g8vsObrMVNJDUoXJ3fOC1cxOiNOxAP8Wg4c5/lRbtS10vTQUQHslDo9KAeT2kRdMo5BRklms/Oh8hfCZUaPpBszmUh98sn6Cd0qtrIPZJO0E7XefTATrXgezRWAWhgsYFpHFJQjttl4rnHUKG9843jFH+wKUjb+xRv6iCc1BGqjTmwPDf2v2+V2EEdP7QZYn6cQ6EbPQ3SgGl28UFe+BXMHk/Bt2qtEdxY40wkezk+xaj30NGtwcomQPo6/5Clw9WKfLrSvlDCnb0ke2BgNPW2IYEq9AmwMiRwBZGHFvgTaVrNKT04Ps6MuO5pfJsGAJ2HYs8obIxlUalCxrllDq6AWtktp0GLtQbabQaktsM776HIfcjFN8FvAqf2OBzDCiS5wndHZ5SWVgmxZFfN5DDwSwG9BH3cUXSH16LE79RcoAibU2zOHGGESUT+J99er5cxsX1ZTY//SK7QC9iSG3A4/+tT/QmIdC/Nj5TZqB/YZPOUhe07vyHQSh+gbKD4mjhusoCZRPAn8qvfBwtecwLfMgPmh6atDOlM+/jCeDeIAuyHtch1gbt8yy/KAd87mH+fOI2ZdFOcCt263opUiljVfLAkNEa1/ZDDH7OqUr4UonlcnBresyG7iiZMgIxgc/ryKJmqCBYPolTQAMWr+PCoiVaYz/rDkhFNtRKA4xpJBHSCaidFRjqXy7rkXfUj6bcgxgWmajeQUhoPyFrwKWWC9eWRHmWU0tFYHJ9BGO1GXH07UjDHWCSPlE+WmJDCJ9r11fKX2Lhr2OJkBvlwJAeAvdaEj6g/AMsHj8j6ojCb0I7EtGfr7/eTQ1VIH6fOqtXIfRzKJZlGPQ25RhB48I/I2/M59YpPArhk4Wz2Gw62wfNofCXSRUK1w52yx/dXin/ggiRKYbkWkjT+LTPUibryJh0PSoPYbVVFMMOH+5uzdbyMv8hT2rW4/dMVZQbBnFEAvxaL0xReBmcCE0WHOmyIq/Wk88URoAed6Q+XBf6/f7hZnl1f5NP+bbK54amy9MEG3yI/bZPw1ygORFAKnT3KBuTgClI4SUtaPVKC3FL8D44YaTmViZafoo+6UIaks6kbkNYd4H3dZTF1za2CLFlMR9GxTZ9JpHb/c4JCG8ELYxXsShN+dA0Ci4tXukt1GdNvKxpso6Eu7CT8AKrz2yHo0YjoPalP5HJfyeNzWt6lYPb5JzEujTayhGHYdm2LeslvKYcv1roOg8tS+J/ygbl8QlQrqQ5cEG567gWpDfdOwZwaGcBBXuggSPqk/6lEcNjpXe2QgwdWpcWv/Mu+sx1OSqwEoxA/Vm/gdVrpFzmwzjbED9udYBruIXf9IgRy4hbm2BwqbtX16ErXMdbWOLfQnmswg+OiMagc9sbnrEM8DsuroI//nDQ3CgY95oy+hEQEpySF+BOfNg2XX1d5mP8jru++3FwmW9h8C6ZwMEh6R2lMFimNnFeK0iUE+XEdAAG+Val5FylyuwG9HGPfN9gZPJJMn9mY6w8Mgf8RsggyA/BceiCvNYV/774o44IUpI54tYNtLPM3Ei3VY5YtDuKEXeJudR/gKJ9/NZ4+SIhv9/HrSU+HvBznvQE5WRRq2TCzwlscasR2GYOsD2F5ICP0+lpKyDYPtrjbeChz7P2DFwOUa5KM6NdYDqWp8pJ/YWkDV+Rn/+BW/6pruC0iIdQDAancsCo0ywghhYjzyGHYJY8XklDconX0pllUgB18SwM7X094jkSxuGhffA/LK2SoSLVhgyOqjTqncAe35smNTTPvOcXn5lDRwXC4J7siSUGqam48iHMVhs58PcFQSBtmI7f8jObdEqQB2zQWRoRd1AuERCUn8f8dRJ4i2gbLZeRmRkEJOxpZ4E4xuOlhxD6MYK5RbpfYOsSYVsHkRvUt4xUXZVYuXex2BoId93IWdjzFOkmtfTED010/YBhvoyQWfxV2DCOHWCxotahhBWG7QqPWSxSfeFUjEWqEa4ioQA6wfbYF7aDogO/4mFwOJH7BRbbvfxeu/zd5+bhNibQcWGdx2d6cnOUSWH2iYLx7vF7Dn92l0Vv8fuKoNrjYYRE/VCs4b7SBG8TcaMirHticU+DJLaIVq0SFE9GMlxLnM7ByDiLbAQ4xKrofzo2j6uQSX2G9rP4y9MWNQ0lHCKU4hZAMXT5CEOUtv1s5cLGz4CHGAFKKu7rfCbveG6kiwrO1d2GAL/BJpNfwud8h/bqeLBpwqYAsl5dXwqkMGCqIAFkn5XBXKqsM29G/6twKCFlSGsKZXE+eGbE3sBVIk1p4SscHXUocLSMI7qpR8byC3wz0ICjMB5BMxgi0IUL+/zgkm2cgSaePxwrZ2i0ARiu+9iEv9xyZB0Ls4PAc4flLu80fjap121OaltVFrRN5uesAZPIK8/kn+B5i/Y5Ys5+TgJB+bKvC9SkK8leflKJZEEgRFd7ij7HoNA9BmLYCsQQZsLXGa2cIFz9Dquz32MN0l1o+RYKRGPAUXUXNeYnfycJI36AKbVNO6WdCWjdflA1ie8Ic+DymR9ycwSmYM92+5Tlqnix5jyXu96azl2JbYejvcgXrl30q+AaYSRjyLORXDEl7WbbysnDXvS99ZIocucAmrlNn/wZ+6n9YHu0fGZ7ko9JMUImkGYYg8e9zewj6woNcQ4XNLhL4eDQp122STkgOlLX4Bhu8RYK+ReePF0usCBx5upieYudok8zme+ILhFPCmHkn/Sv68wPRGX+gzbrQu9HidM3kQ/CYK/UukKgQmLfAJNHKABYJXyVZFjTF7yOixJ5ZdPdocB+jwfJl76Xwfifdsp/MFlG/mSPEaahSR7ryoiMYIwE8FB//WgUZUhI4tU6SVvnomp9gbHf6478zidf/G1KeSxUZzogqtoYoMzIEeHenKsSqFrbdwkbAxK7VcF8fABYlI4IyHvPAJTDBnNtepHjMwDN1u2E2N5hz5o3CKNztbdDTFPwGqKDGBv32qAkcsU6usQEles1Rk/NMArBLUDRw/jHy+J6uf3uYnmH/bQcVZyFIdxb6TyW4yMwwEknSEmrm0YGdpTjpOEqzL0n7BwT9Gni3SFZJ1xj+QmVmOW3Qxs2YCMnRp2AlxnGtbTESUrwL2VRZiY8Gzz4VMs87A1c8s0Wd4uMFD5G2OscE+oy+x5RH+9ByPdgai3hKdrxFPBPuPcPxEuVWO2OMGA2iYV7f8g/5jwGxMVz8oXbgcU1HtKp+Ez/8kolUCGtTDrKBKHhyx/jK0HPMSo6IxMhb/06Xh1RUD71KZ3EYUavKdSu9QHl8M42BC7eyR9ygoEJrg3Zwr32PkrjC/iX/yN99Ucbm8yxsP8TwCsgqI6/JCSvzKDyCJB57qWpKJTnCgT/Wffgn0qBVvKME2fx5zvLS7rAWct29bSjSBXRDkI0fUZ1ozC8LspZFMc8wQEdztYqPAPlIrROED/GN8JfRHn8HDG47leVL2dShm6suAWo2jkFRxTSlIsJBUfl7qXwCuE0KTReZiljhrPfN2HDi2xf4uLSGZ53oE8/sdvG52qk4SiWdkYi+t0bIeZeaYessDeaLjvfkseRiv3uCDP9T3ta0JFRYEu4b5bpH9FsH/l9knGEjQrL+t3hIVFYwCwO68gVRVe1Fg9JAx7Ej2mlAed2xLk0Ig/Ls1WRN/fUZb9Yln1olJo9y22CZHwunkmWPhPvEp197aHyqgf5m2fCv0A//ghFch0a6xwQXs1o291w0DgUpMEh6vknkXmEjoVZvuAW2nbuULyFX7jWvT/HYsQnkTcX4YtHMLScc21xr8J27sPt/kdxW+m6cifnUQwsB0F6FMwvCPWo8Msk0rDP806mgVHighUJXKfNwje4BgfyYOQ1xQxoP6ihnChHShPXFiFdebaC0K1wAGvzqCqLQf0mNP3g3u7whj+R8XmdP9dHfvdTL/8mBT6V9ybxwnblYpBv8Lbe19cNQCTVWoi28trDvHnWnAflCZS/Js2AgW20mrdPuNw+YYPXiJR6ixXozi1IcOApRZpe9ItErYgcZHYhi8J8jo6bRYkMMe8xTGjp+vXF8o3v3ymff5eQXZSJi8acfNtSUFKWBDQN81zED63/2dBcAx95Ref4OVkXcVWkuQeXnwyV1mSMnIFGJtpW2UCUqKssMkM2h6HiZqESbtNpomEYIWX5tiXtti4v/A/Vc8u3QlBC23wfmxh4I7HQauU2IZnXmLhm9I8QYUEeczL57CkT1mZ3/kCXgLyURVaWRzu1NpSF9o9fcwzRSYjUlPdk1jJMOp+Rj9QoJtwI2yYE5+BoH6WxjyBye5MooTCYLWsO8iWaxolP4HDi8IhwVEcW+ltVZnbkiEwIjD9kEvzP2Lb9j/n96fp6eXV7s9zDetRAUZBVQGSrwfxNrSc1AqR9J1MoRMJEvB7Qh/TuKM+jCh5zQTkSCXljiJifp+LbcsahAa19re09hI7pFIQTwK7imEKxSB8aBo4qnTx2PiwMSkmnEfIvEUzw8X1WUhMZNOvcAjjQitfoSHmkG0eJ5wuJ0JLGyxzPphHQjnhP+IyGzYMBo/38VK2RgvnIFLB5nvIempygf3SzdYi66qDkOwgxw0QVXJkcpmEKCOe1DvDZHzBa1ZUFIIElgk5FQnlBguUzujzLvMFp8s2BP5WYweLTpDHEXR4QR9KfVr8fc1PTKJDEPa8i9NqkdxSne03cRulEQFberyPw+lw8OmJ2fkWWVrYP5nQs0l2FxbJ8P+B576PheFaFbJrkU+BQKdX0EHj6+g79+SYj6ZvMcbRxC7gY06AYRwuRAwoYMw8O4I42t16MB1+5jsaRti5BdEKZZOeEU4xIplG8fs/DyekoEBrgyvNx3BQHjPbW7+yWPdZyjSNPDCiwzgDZ1C/OrGAw8vA2h5XSjgFc8mqInmeVrz2b5oN0JkcU8Sf/ec9NqgN7ICYsYb1cD/qA1FF6gUn4bDtHOMs8ueYvhdc7K+GKyjn91P5aTmbuouVq7mTwUgSncRRsxXZeiEXIhYiGWQl9cnzU9z4liQ1P2VZIh3GrL1BgQgimSVJekNYtMNYRLokd4bkNVVzL9FoVVmYjEVOp13BCLZz3mWA9c3+zzMwslTk6e2lhrXz+B/fKd9nKeRXBpIW3hzXmcFlXk0xxgnJnyT+HcHhyBILA1zvFQpCHSLtlYr71ga8gMbXUJqnXvH5Qh4EwTOG3i4fC5OehqBUIY4t27TI/IENkcSJ1uOW8eK0DfYmbORjbQavylLRRHKSxpR7OzXyRCetnHo6UKwjcCSp/lPmc2d2xskbdWyBiBWFwAavSUYfdMLBMnD9QQNNkhHfFkdpuYEH5AaQDyqTJ1O+hC0rpXg+VT+iSvrAoF15JuFqqwnk8/GcFe9aHkD+T9NThfITME7FPmX4UJ51Gf6hUdBW+wT5IXzncLT+GqVfojyh/qF5ckpq6gS14sBQhCQ/k7B/TVPqyPmAwHz8JcCBMxKJ0Zv7QL/cqohH6xlK1aBMBRhuz7bn3ZJDqdGVmiw7owT5XAOr/TzAIeTVqjrc4odw5lMBzhy3mhZirggFd2Oecgjh38lL3ixa8qNBN5f5ROzxTcBLWT3tIyGEklu4z4cvmi76hIbpPXcyoU9Q26aaSfiyrhWZqM5xxM0LXM424VbhMQruqsOUZbhTDe23HYKNJI+OwGDDYoB/cWEYK8T+abmaOvaK4PkE468Iq7irmnhaZfN8k3Q50M0U/6sKaps8sc7U6lwKcPWhfSNe2RbdTh0b4lcRhEODI3rnBRDuCK/tZXIOOjFLdvmcKge0ooQNA2aSSa0drrvLXINNLIc6gtIy6pUkPDQ9axJkMHFAt6fjxmt7D9ct+bD13fT4ov8LvszudMjfHGBDcOZmdbURMD6I1pmhI86PskCEwgC9QC6zwhi522paFm+TLVu3CilJ35KFH4P7drbKAAuErxMzDEqJPuRP2H21Hu0qUQCa2alWBwzsJ2P4gfWiaZ/K4HZ+0Cnrgc0Cj8Sk8lQ/MBz8GR2DXTNQhn2g4Kg8yfYLnQnmBPY3S04ORBgZP0p+H7qzIbmGV8Djl+eACPLPWZXnkX376pc+i0V4JE5qRXyJmvKBzuUvrMh/BXb3lpQgWAQA8KDPaS6rPI/5wmY4RCP6rOIIAy8k9iOCBaOEKyQmBLW6Xt26t87lYI0B47nvqSoiZebhPm7gOU/BOi8NFTFvkH4LY99hG40vvLJXvLG4E8Q75jZQR4Zazg991nTxGimhQy6SnUQhOGPre4aYqzo7Wx7oDw7jdhdaaPmgtT/NoZenOslUJtaTTt3mngDYCRSJ2aK5wFG6KTmdGkXKdYSdw+Nrme6p9xcJF5mIUipeZZyFMnfUXfKAIrfDQUinzJLWe5b3CLeGvKDaVRAgcQukj4BOqST6tf+v28HOz/ovLi3TWjcwkgd3JH36W4YjGtF6HOQEM/q+EzNkyVVIgSDpP2qRn1DHCM1d3+73pNRTJ20QB/Ye9zfLvdzfK59mk7gaUa1gqbFsFHy2vbaeyXFCuRwOzbwfGTXDVvBjQTZ7RT9KDz2yUwqke0haPQIDppCeFlg4bad79pbL4jXzmNhLvNMEC7mNlCdKBODC6yj4GzfQnmwBCLx9HcXzygIWSpLrAiKOD4ugwIhzTCuVf1lVQvq5DSMfcCTSwTN1BRjS5LsTNJB3dON+gYnCLdl1mHcpxzyw3lWRMnbM0PM5zt/Xw12YUobXbxk8ftwlWsULBUNbsxGvjoccucxuOZBUcWviOKqXvRCxydi8zGUuh43tXwrdpzzQjnHncMzMI9GmMA0dUwjvFiEtXqnOCfpDKb+MYcOC3Qngd3Cm4J3mnLLQzxa/iSZ7K3BNVIiKDg/AG71Qa0rqfdhXPGog2wdz2H7fpZ/tRPrIPY0hQo+fQOemOrwUm+X1G8Az5NV4eQJ8zLN5yS/xxlQg4NqkybCALpfcoE57Jq/KZ8MsvCUyQ8Knf0GnloKNulYd4fbjAGqmbW7hnGYHgQpulLgXyWJsf85rOMZo3MrNpvBA4uojgpj7bmLZ5pv21ncAgAL6nHuESXpVIFtqi4L0f5M0UQIOn4FIcKqP5f1y/6StCK4LzioQ85w9MAE7ol9xzKxx2BPrsNbZzH1oyjYQ1QFyQaCKOnCyn3qaQzINA7MivevAuAIteHlqvCJU4PAblVgRUYMRZZWrRxg295b4/2wy1Xf+h5o1kskNFDuUY3ZQz6WVQD5WHERsy5QJK53UW5LH/QlkjEgMQkkprT0s3cxOcWyx22wAhprnP9gQHRDcJ6dNMEsq4SgwRqnKQaNZJtwTRhajp91PMDjoMnkAITjIXMcu6kHPgb43O20Xw3EXNG6opTlX5rhqWso8ooxZPO6jjGKkiw7umE8XLMEL2G2yf8CShsn8LYmPpBRvXQeggV2H2gHC+ZQjzFJYhUzkgQsKufZhtK4AlCIDJATOEaY0KS3209oUK2pGB0S0ydcKdgcH0whZFx3uF7Ajw+nyPvtEK9pBODBCovnWYnTKVQxtYxtexgt46ZMsYfm8yd4OuApuUST1VoFAeWFdppa8tL70AvFi3wjeCkLLHhTsGjBfNAVUEbvGYMORm7G4dGeKbC1icjIaAUBrVFZHFWaYxPUnEhy4zhdUko44ObZIiZUwnuMWN0YCuQXBO4lFGGo/zez7b3iCAcDF2WA2t8LU8j0z0gzfXHOy7/iLKg3Jou2Gvttu/AljbAW3K5NTnim4nmp1ToFS60BGZIxt+MjLVyP8dFIZzHwr7cYS8fWIUkMJBcvOoFiTvgKMNnHvShwqeQmr9QMIzIx+HmEQVHmF3ux8+0Bc4FYhjWAMdogFP4BmYZK3Ptl4C6G6SvVjOg6fH6YObmO53mJB3S5aepi2KQ/7pCjDHFO2ZBr/jvNujnQYVBPc8FxN+x95+UuC5IHeJkWob5TTNkC64oH2VZjHqMK4M/3Uh8QG8aISkI73Ik1xLP9IbrJzSqcN7uwhZ4TZIX4O37rFI8jOHE+UXuxPl9BwOOlxR0o5HAl/IkDBf+rKOzOtZvlHeOGIwTFdMqZDHwI1f9twFT+/y/ZH3treRCYRQQzfnCfftLZDSYKzs68UMkwA2dGN/ZLRMmW7EaVv4n/42neSa7fzBT8KRkd4ZUZBfr4No9jlOZq4tTfoWXtqCQqZY5I8FQkP0OeCHDqrcpzXC4WH7vc6ZIiyY/lIWDI5QT0XwEqQ2xMfGJOnmIKN5EnLbPKqWHTe+8KCOKI8KYx75KpWIgCQIjDTaLuRlEOUVb2loigkQVmYrJTwUCEM9PwCVmmxsXn1QRtXOyU4WXnJULV4jYvzCmojHMOM9flqYX/eBAl1G9NB91SbvaRhlDWTeZpLACfRdeulTTBe22Pn0e1TsimGZTU5eJ1rrAe4sZecoimZdoUN5rhpWNJ2k9Muu/IWAlmjrnrXRjmy8h+AdWFMHjfUgHCFuyhMqf2lNkG/7CZsE9v+M1X4eN8THLkyX6wtY82wZ4hYZD1F6dyhrfoOfqWF0lYEmsqMDceCIhLE/1+AWWESX7rUhRw38ExTbJ8NnIhJ86x6xjZknsK+Aq4v0V8CFDsh/xIRkvnRGfX53xTWD7k78ExjydVx/P4ZprqFtNnBiqIidLA/DWV7TZxTLwQvh4irNzqPa9+LDZxCOf0halXzFDC/yToHHuxA41zzrw6zC39yEqcwDJngn61dasj0dJK1ukawl4X6wgl03S2iG/vf9pZE2biq2uKDsx1Ec4/TvrK4hfC1+o0TrNVVitRvlZFSgYFUDiRaoMcG18weOSLnMtTD5TGPIJPlwFRCaxi3U5STdS+LIbUb4n40WkVWZ98hIB4Xh3Ic40Dk/5AZaKgp+kRcYehoME0yyiwXD1bOmgDJFigsMFTg9DJIR9503PeUZ6aVS2tVAoV2wFSMaRiVt3I7dkbK1PVK2WSy1z7zALkbfY+DnPnVf4zsEztWpIMbsM2CW7+zlRDcyPzQOzA/Y+fgetGyUm3A5InGUpatZ16ij+G3a41dEVSSTGFH+nGczEF+lMQ6Muu78VLAyw40qNSbFu7QlrSkANXgVJBoTwxhhegSGUTzv8EWq+9T9NmtgfqM7WZ52m5E58ET7FahCFkaiEfZhUEbZii9p9gBjSilglKmmjp3cxQNy/RYbtK6wHxzBIBp7S9R9jTYPbdOum/TzxHY5h4tQPOs77GOcVHiRUaQNzORTngIuhhRw6HvSRQkNRsnB/xkRNW0hZfg88zooDAMAzE8zwvvuwoxYyGEajTZHV+kZGlZHPjZXWhZn4crIbwpK2Z6DWwv1NZtxsKShv2TiCGZRRiKwnXOKMLOFmZk3tiWKQmwCoGl8QfPoVg+vavmmD7ZzEbBIWxtWAeS95VC+k31u4d6FIPdhQJuW8lJBFWpkDVwWF5jNJ1xUqWiAd9NhYxCKIBv26GdEHS7u0NkKXiO7lqjLCb5J0s1wHsKiXEYAbmHZOCz/RKvD/jcQFqUFNtjcNSLG8bsyV8FDeDgED/GCEI0QP0k6z2+HDp4nvYv+tJSEGQdYOn4ipiHPZXCJOhiNGqEeOykNy1MeUFqfMOPd8gesnL/AYr1fZVuW95b3y9s9vhFP/jvAdBpr8HAF5tQKliAGflLqcD5JrKto/cUypw4Flv0kY/s8/njxKKyBIeAEpzzKkUgqcKVVaULvtcDu0sZvM777Lls83BohzJhyZVhdgbppqjVk/YP2NgVySh9ar3Wm1blIfu+BWPQHWqiGO6+bszcNrJ6zroNnvrU8KUh8HjLqCzUhAVSWbJ3H5DYCVUHJvYpEoSMOnEtDnkJHzC1Q04eYFP/5w/HyOH16SmWDVWLklH5veX/MyVOER1b5R+iAS8ECDoMHXAMT96LzVJSrmJCurddr6xQHbscjT+KaDjx+GEoFYn8lDBdh4AeIsHfqhzIR7CovTlRGwTYUuu1rMLDGA20QvKuVEs5JQvPn6w0wSaxUuhEZBG74wzNYAEvBOslDcc6XKNRFs66PXQyDTLiToM/zE+Bwkv1rDJ0/OGB0gxI5xSj5iSMWlzIaeQej7Cau4l3aZy32W5eR/BwjClfuX8QAt70b4N6Iuy5GjBY0mLA7rTTGjAaPH41zbsp1QFOs8ZJ3DWZwlwW6L3ky90NVGjmEilAjLdNCylWt34ZZtl4LDSg/T7xFmP83adsSETCf5fknaf8J1le5Mn8Ey8fIOtFrHvvDf9HMWlrAEb6imn28AWsoonvMG93iU7pLRE0a1u3IZRdEr6OgN4ja6hHlNnZ3t0yfmSwzHfrKTkWACFfK5pz2U7ZXygCKCZ1EqUFcnsWVddMM4OBHWnlNRacdGbLQqMgr+tX3JjQLz52TiseD/st+W2qqyHRxR37KVyckstJ7H1qfVoxlVX5eGvmdT334PNbKb4eCUwnvOY4bIzV5DLTOoCAKOx722DGm87/XJI+SEd76uAEEoC3H5ng2D2kEbgiLZJ9Qzjt3t8sNIrA2wZp+PQ+JQqYbjIQGgsetosFXYHPCWwVh87VwFAytymEpP5/9pE4jRLSK/e62lqaCYhzhsA3rKxydFFTLPo+oWeP9Bj0hSQuKC2aciD+EeITFbzNMkFai978ts/0uwDKf8HgvvG49IRk7+V4xIKdSKPlz77WFkCp44coSZeE1yrmLZfM0326fpKPfRqlYv2HJfhLVOSv0Y+kiCFR8h1DQDvNBMp1CSivP0mVG8VOtvto3IcJUVdPEtQNAjkDME8IDNiFTWeqGWaAt30Np/Bew9ie4Ar7LeOshbOtqa92MAyEQy8+y/z+HxJtJvoqMYzyl/U16MUMz8zOtbZaIPfur7xV0spm8VGF28rauSjezFqqRS3wrG6GnAJpEwBmi6qg0OCGZI6hM6PP8MiHUv9LrlI8jDC/TX+cQehMoCt1GWv0TbHQpo7pITGE/GjeGVUEp4Ei3ALIuMIWGgVWjAdSlyxsRWZUFjOqksSNUV7Mrx6XpKDvmMWxjJvXRxioNJ8x1SVlvhLwMjRAmWQSusfoGMoQfoYe4KyhPDNmHKgtDfHW3ZM6EkVR894S++3lilYXCKbiFX+TTlOczcKlgMY1lGFziZwXGGf267Y7RYCdZa3GG+p8h6ONxRhsE1jMvKK6hRaqXF2xrVRa2GzzCf859SGu6paQ922Pr5XFv7Fv1gQEM0rV7ojkK1q0sgUjHjtJMazn+BrLoA5ryuW84yJtKvIR4/GjYVTwMeyj+aUYns+BXWTWYGxEkupZ2MwpSrtAGF+aNgLMDeO3qEl86fLDJFze3ygqjNo0QOzw8xB9HER0MkYzqGFkx2GGxMKtlwJ/Kkg6nrxrYhE+BQ52RDxbVFGQLxWFc4NCZFXhvo0w+CJf3WRQeuPHI3wo21xV3IUbey0u2LSM04eA69/SzN9aZh56sKvWFNv6tg0K/6xJAfJGVkLmnMU1CbwNdoOC6Oaei5jZWnhYLeUK8yQCSbaAI/3+OAMBLqCKtpwSYrIsV5aiiCmWJrU4QJbvw8JNwcmlOilY0H5mueZ95EYTZNlhgUW2Iy6GuiHLSz5+CQwWyhOSdYTWw60LWIPI7xqnSoWch/Ff6bVabMnFNuMw0hLOloEYxuAJ1HUG0iNBxjYjEAR2RA2EADPO4je5hWWyhSDIJZ/t4nq0dKFsllg4GRhFkx//sIc6ShZMkpbb/AcPt399YLb840innmMNZwF7eQZBv0no/baorzVW+iVbDuhAnjhDsfFf96m4TVwlGoEbxlf4mnSuhY0lRsUwrGu0xXU9mUmncooy7WFLf57urV7EuF8GZDGIwgQxoWVVZNmt3LJ9fiJtiPAbXCiHhsOUKf9sfuqFWfc+2n9zAbn4UeCxhBXBTh21LChWd6tD8AdVqAs8IVq6L/rRyVRq6UjPaIJ1rPKwXT1z41K9COiJ5hPRXmM96oeciQAwLFIMupHbjG5fP/eCVLiLnFBToiXqjTldTW5gRfnEdYNUKo+91WyoGpT8FT1b9QpeyRVybnFsKQ8rIHBHX/A/tK6DqpDfOEh5WvFAYDXZ0Y9tlfMFyK3vnQFKP7yiDhKlzCAVhZFS2WDfqDgGp+8RFhKaLW8PUFJQIHLPSHuvQiNENlrkwRplHKAxHt0YcuXGhc2/sts6Ii9Ew85gTBBQo+B+h7z6E7/8uC1p/zEaXrmW6Db/dxx9mpFmHsm2zUVk9+miX+tZRM3ua0Bz2cjoIAN2AUdqUh9yXq8t316cIdjCUWSUSOpIIoHyVUwJZwLGLOPNt+ryrSipuMsqOfBOjwStBNfD1/8QourF1VH7jiB15CWueZM2HrqZBxCHNJQd9SYdKv35g7l0WHH4ZxfGAdg2Dg9MYdXMYHkcoDKk7ATbIjRXce2O828PIu8NGlfPndvJRuyzgQybJa5k39SwfiASOuCIlCCvXWOA6IxDKFIocnAbPMnows0LJUqBJcTnYFUKe0mjIKIQ08pU0bY3u4CsDWbQb12YUIt16gNfUxn1wNzbEHMhIbykF8V5EpkobwH2uzSgQyek1F3S+hKwWTEoaL9NEQFD/II0CzKymzdOGQcJElHMMHMADOas+cbugQJC7wppG2HCLlKZkwhoX7jsFS3Vb6RZwwlOPpGkcNkqgPtdKEnQX+G2QZgdCMrZ9CgHjBOU6wkR/qkjVPTHLegAF5uchpL83zHfTUSJ/RfifYYSnsWIVcBsolQdHe/h0mRSkU9ukj/+WejpAcAk78j7PNkm/iYBTnANJiGOHeQInZMUXZM/ZtgsjyiY4BqPUEcT5N53HPSOm99BtG4QZT5PfBY/rtG0J5XaKuRfIKpFNliWDuN2KSrLmV2Ea9VQFtKW71CuRMKQDgihBSUhc21sLwHAVIfg+Ycc3KP0OE+EulrQjFChuMR9wSWud5gnU9jmHYPO4OY4v6n3a6yV1HycijTgBHkvyb0oMLXLPc/EiniytusS8UqyYnp/5SW/UXVaKk9634sJwaq1c8ZQFntCD1yqVZwlU+BiuqqcYmbhgT4vaj4q5jsN2yGyZ88EHDQkHj9KnoGuJC6zMKf1r1R/hztEu0g2FwU8dpFMK0F/yv+mc7/B91iOYhvqQhRG8GkDqZ0fQLgzUanU+z/4zRNMon2F8TrY5W9Q7ikCZac06OnBEauPQF+CN+nAJyy8KiXzFmrULfeDUH6bBqMDxqO5gMpgW+so9mkFXz6j1spWHE/UqD0c/uogSjQRsCr4ePHWELKAE2ZlynSuCPkHi8wdtwoChKbbbfxtPww/Z32xTxUoa19qcZ4J9F/h0T61jpLgrhD0tvnTLCqHyJKMX+5MKdnCJ6YJyQv0ks/4JcuHaUYzuMki0mWgHU+C07i9WaaUaqLqBBJR1HeDOkc0+I5C34fdlpMmnmGB/5bBTTvPNkDZBBCoNf36gyUixRRTHT1AcP0SZubu3Cki6c22POFTO4KSKQeNH1VZp0RTfXDes+/46H6vD2zLFd0Fafl0UvNbCKy5r51XYbLtyPQQLrlzZ38dIjOKhreI5FgcwSRs0tT4TZ+A8MsBOoR800kEj4FE2/ebO3CFNiYX/MdK0rKDFFERbmqyiKXj0eeimP8bHJsbGlvtM9sRaFBhTSXWeuBHxPotGpOaqDISQhxJe0kvKHKYFmripeGXVgFnTiFRb5lPPNjSl1WsbloVuEjlvqiaGcKhTQrI9Xgcei5TwrY+fQsjQWs+uJlZouM2C0E6AbNN0yduGEQzddR6kC7JPYvWcHNVVxbYjdP5pdge1TffZk2oPbn6duYZPokAuw6xXsby07FzsdQiyqysHguGawBY6gUgVFEd1FzHxilDfQrgTgcsX+UASuK2IdCRCBAsMAzvgOmGzB+BS6YGhtNX2159PPCp+FfXC7yJHD5Who6MLtGWaLCpZBYpuq6Swi0xPWrEhS1qi/aLeyqc5m7S6GZaB4/2hfTaI5DsQpHY+IyHMpDePo5iAxp9aKtRA2xQ0vohvVWJOIs9ciX+Jk/IqPVkveai3QhIK4b6iJ1WEKehFn1kuL6M8KMtcRmcp/l0fUTNiFNBvhsXWTS2xbqGDTZhVYWy73QDTw3JUJLq1LtKvVxhtvIQP/xzp2whqBaOuKSeOJe9Y/wqwdAWWMHNN7m3lyEDLNO0DymEEuFXoC6e6CHKDGMYV7NBCDZ7gmnJjQICnjGxQPM5PmFk6lWYBobqXEPI2MTznugMU2SgRV/LBYJM+50ich/Gzy8ErgEJeEIeii2LBpbx17Fmwf0g/BN2b3lHIcX/Ie7QhisNGRJEIjCM4aQkaYMg55GiAHQ56jLRZzxpXsyuupQkn9B2RGJknPrKZJoUq3Kf4nSHa6aX9qXJtg7mHFT51zI7Ka+YFxwp1t4lxgayj/TV40oWdGkK6ZWMYAY7tr186pF95r9tphXDZSQTxDFuLpN/sZ4Sje0CppBKWLkDkFTANUWnrAMnMU/KgzKnf+TDZ6y578X0euJbBwUeB4+n+BBsrstiUMnfp49vMd1xj+6TbjKqW+W2hsDTq5H8jGhPxRJnW4k9je58RvME18tE6/Xl3Ya+cv7DHzr8oEOhKPhEmu6UfTWV30JnIBnfVFU4PDSXdjcraGAzgwEyIJvBNe+QTSUrNYC7/Kx+BwXT2pfjQMNGI914tEtkKvqQVuqP2v0VIM0ImPZifu1wfHi6PDv3ev9s5/Oe/xedVhtwnMIflaZVYRqiALGbyoC0pUGL3XyoHcI8QIu9DmM17OyxDJCHyv/mDIU88EDglH+m14myjVmh8nzwTpSZXiPizXidwBz5Uq1Y7J+qAa6GeJdc5zA+jN5zkc/X5AlaNfvBxkKufeE2rCkGgL9wtJ3aAY4nRiJvf+blR/f036LwWAvUVrFO/CHiLNvh+ivrcsnod63wJRXVKywOyOGKC3UlorWW/ETwL7LO0nzlu+oeOsQM4bLbRYcGXOOSBGKZpgb9JRUowbJtFANfuVyWRuL+SK+f9Qt02z24hRNZok+WfhhD40nJGRtYlfsyLicC1DAf+rJ8XKxD0fdp4k/IeIGyNLMvqYt6LZx4HHt1yPGrgTYH1WoAp9wM4ufLRzxzCnu4GJ76T+CUF1EqyRrnY6eLANNaUDLrZLO8DnClePUyjEFGhO4I4ST8b4RN46Uef7zh5TlGWlXkOLhUkupjOEkX34SM+dsWk5inqVBG1EHy+d42FriCRlIlrFEBcRcDo6nyVS/S3YEFbCp5BP1JUmLKPkI/C0/KHty3P9ROWM6BT93vC6K2TtVwfsdI/CxAp1vTOq6hsggvqydqMKA/hc+6FMnGt5Yt3wGAQiqjqMzqWB9w1XsVhO3qM7PtM/IsOh0RZNS1ylTsd0hqAwTFMWmlI44w3/OcMTw7ZYJ75fBS+GsYNNQzd99iR2tXWLu4LT+oWMx9CNkKObPJsiJZz/YIi83ZskfMy80nPsGvE/Y1OeXNtr3x9Y7ssU5dQ6i4+C95X3bYd3toGri34hfga6Ib28I8q0m+6v0IRVL3FPKpzlIb+dpjj6VCG31PxmUEAflhLIW/6cZUxdNOlLcoIH8tr/hKRCOy6tL8MUm9AS5/k+RPMdRiBt44C8bPW+VgZ8Gkc2L8qD3ev2EFGIO8jQ1zHo/zLqJcythDsE9ZB2bdZr/bYIq44tixqMSnS0x9MOfJeOpOb4BEYYpRDP76vLGE7uLab6BdD6POc+mqYPkkhPkcn0oGiR/o2f5R9LqFt5nE1BCgg9GyZ8o90SifTm8CA0IkcqlaUSXhOTBm6I5QDE9+E4J/3MeVLAmKzXkhEXAbQmjFAqOZNZ8OqgEuyKJ6mJdGCFpW0JIbUhC7lkosyLYGDlh8xLO7yy1oGANbGtAZ9mTZc4RJQgogqPHxvERmec60F83ivXV7ujxOSR6QUoYtaQptswfE2Xx98h1Dc+7TYmHT/LR104+qag2CdQJVY/U7ICXyrK6TdZHSgb/oyBHGe8M3FRtNPoiyM2NpEiTzkx67PMJYwQpTAmZEKaeYgnEUo3ZECASof4AmYdabY4aZ11GQHOb9iPLuwySRNBzRnCJT3dd0CHWpnJk/d0XUJn8f7hEWabx7zw63GVYIR4NIG97uYpobW+gGoLUqV2HNALOIRaKCjSrR2/+BIvzU3NZ2J60+4a8/X9oXQ6Kj63LLgGFOTUWbwsLyoCvJ6rdvJ1mZkFTiqi6KW9UFdeUUO6UGF4fYieJWiRGQ6hbmCzGAHJ21DtFSpO6SDFe1i0pcJ0X4Bs/kxqKVujAn+ESS6omybQj4fZqKeuJUQQjbVd/nIFuUrwOM2oO4YBTCfW17oXtLfbosdCYpdQCQR6RHgdnisexJYj8ootItg8yNQupqk6ViG5Ld/083Wr1A3aIfl8ePOv7hQEIUWdxVV2FZXlruWShqpGel3lIcKxLlEe0q3k8K3j2HkRpyRfOworULOZ5GFlTS22fojuOBBQ1v7jMqHUFzpReAbIbJoSKOJa7LRdhShLmjo2RGFneqolMfAyQ9hjXQDDl6o9CeHy1N8duHymany3NJk+Sbrt94ggMbRvd0XlzKKagb8GuLi5qd+VMp1JJQQGpOS6vyRo0FWyUegoxQoYwb32xRzPyPgRJpR0B8M+gjl3GHEgmOhbCEb/Nqkgl7XGKhMW+zHQ2B+n/r8Bsj5PSPIwDmVGzKs9a7czTY31L2HLHD0v45s0DBxOxiNmgOulS/C5Khoj+fuSKAL7y6jsPObbPo/K47BTwiGOvhnF9DK2gc2WGKg5fKSbjQ/suYhbcJEGGbgABqqhir5a/KkN01Go/CGNOYShcyZkF4ghzAGDKCBFFNgRvfSEfXY3lh9EnSThoi8m9wh5Tiw8q7z5vnk9Z6f12CRAviBfOoNIDasSnKJTBTXw0blnbc2lAIktRAgj4TBRphOipLgZJ4oICaetrBC7j7cSSQRe8zHYrdEGVXlIQAqCBfZiIAaRhZ0SqUZSTxBt/zqUbs8y3eep85A7DC6i6QuUNmTq62yRIidn1795giKA4qO+4k6FrDaJIKzxPtnxTHWnPB3GIl0YYQ3xvbxh3YS6/5OiwWFiAa3du/S/m2E8hrC7DTXGhCGOIpkP/YzR4eeDtFAPBCbkRmS/gCXIkRloeulyxyDzwdH8CSuj4+KB1f72o86DBQKdrgodeX0SayJnxIE4KjCo9YFFnkvOdaRjkQvBu3aQY9xFnZyeFThn6vcW74IibsmVCllepheGJPABxz1usJPPWS2PMu3nEHbhcD64vjg5YA+TKhC0ZpTuVp6PeumqmsFDBaYIr9uqwRMJJXGMi0G34g13IriiVL5fxIh9AIjjisqDkZsRt61EYh4VKI8pB8/WOWkuKSre8oFdIP5DWW3zRKuCHLpijzc5d5voHgc+i1z0vmGICS+t81cFUKd6TLmJ2DaLr3tWgvgzcplwaMz45KCzpzApmmV8UmTEYlCjZ8jkigORh2j/Kxbo8svU9rGKBPS0eggWlecbgwn9/2IlGF68pF1RcgjQBUoQy7wgIj6hpPaJgSjOE+/IuzT3fBQHjKK7wOHcyfDWPvCm0/aMinf47swI46CcKl6OJmezwVEIjlq4x7k6HKzfPk67hauffbyI1Pl2VPj5ZMr++XLCxvlW+vbNOWQvkNZIsR0OTtpP8MI6IB2GTVlEIx97igUlosscSt5d0deZdLe0cccnx1o07YxaOAIIzAjENqtkqUYFkai7Lje5uNappee/Ccdxq1Mc42OuosxucB8i14NlYjbIJ0gmfUpkaaAYZOzSkKDUY/FFNfuXWYEqPMyzp8Kr0pE5Qiqy+3V3XKZsN/JeShaOqKvnOuJSRWykqAampE4U069VwEoDx1ZJYwZuFR4ZA4NyHt6PkKn1CtpGLzCZcUX8OnVyAiDZ45MLGcwJyavhs6Bx5Er6Mu78Ha/XKe4qkCwDG9IIf6zMo9cycAgI0+a60gBKh64uAYCIjCnwcJf81me/1OhpdTblJ984TYeQsQLfOT+Gsh0YlmCcMsQ11IElrTE0rRuKuFby8CtBd6YBxgjhps9iVgINHEaYiG1i2dkLvqqDJ8YLRdPjpZ/uI7LaaFf/juqgh0FYnlsMkSdJGpCt9kq8x/QdjkzijKREPFtbmNRPMbk+uNsXfGAXvf71W3gUBAZ/kkUAhPshv9VxtYadlPGDm2YZ2SyDqN1IbxNxaK8SPl0edriOgXcyYAJvJQpCqERDrAoynLNnbgDH8ij4MfnKlStMS0ah8VnsfwWUSRuGknWJm96gfxkkBBSg9c892RNEKJEmAl9nsTt4HPSD1xIlMYTyxTOXHnHtWxY39ld6Vee5MzjSj9YTODW+kwrKVuut7Yrrc5oSJwoYBqiB1ZDWA1tNXDA+Q0NW9lLC98waRneMlSZhnh66IO2bCfEn2Se4wU+vPkkpbgxodtzCFu+MEk76JaEojJAQUAJS9MPpFEIq3QTskofegwx5IlCFGqeORdxiHDUH22EloEcls+fWOFpDUD7aJiwNt1gPScpUVL2iV3i6mXb4B95R+vSyU+tybrKX4UEHnRh6SaCgA7YwTjNxeLXt42HppYNPTjprzu47s9EnYSiHe0i6HgHibAHlwKdfAoM8g0jGcS5QAJZPawG/tSVkT6xSUZvSbwcPZWIMEcW8A5es410TMqFmxBuCGS3F+K5Pn1HKrZT/jqmMcuijh7avM1k9YvMM1yaJbDh7lh5DZlwo7sLvAhiOofisqWKRlSbZ4fAskJQisJZUCxHkdIh7R5t20GJHRztlDnWUE2j0Vs81/DMfIqShrTZi6tZXe/ov5cJJPpBxQCCVSIkI7WyIrXkzu2O9PlnhwvSOtdIK8Ex7m3oexnaOUn6STsYOeJiVefhXGtkFJmyQ5yvEaH2kC+lnmfDy3G2jOkb4EBlrt+pRgptE2+SNvmFQHjyuQr4XIvH+ZBhYZV+qFfecjSu3lFe9nhvRvlmwI+WpXHTp2D3rMs/6V0cgEejOFQsoXc62jVAwhEIeE3RNwCjKhAwdT2VA0yYg0rt6EoRFWjQkAKsOGZa3vOO+ygTkFVHCqSj9ERgpYg0NwBaXobc9Jz5bJAWo3sG3eQDLctMXJ1jFGAORbGE63sZUm3rC5WLnRBMCovPKOl5ImmeNO4cAlQY9iBcG2GEWY9htkP+IVwGMxfa5W93KOP2RvnLo12UCIRJ2ctsueHE6xzbdSuUtqEEidzvGbh24yds0zADAZ6id1dApjuTUkwin/wsroLb/alUXL4DZDqVORBg4zuJRHV4L0p9V9+L2TpsdpEWnE1dvOGcN6m/NlR88obyVCK+zd43CBqZyUWFWkMqrBO0x/mdWJeUZV+IZyWV9UZwK3mae4pKl2q6ik7+c1iX1zKFh70v7IPEQEBiFUwtM6+5ruef/Rshw/MooqbMXAuTwHlwSkQYl7ZTptXaRxZlQnWWkaA/Uxsc68IylYT940/e0vJTeFuYEXjnmed4DlP1EXBymp/Kw21E6qI96IK2+L0GeAYlgIWPALNOK2nhIkpbUxoPYBwZModcST3OPQBp2m8IqQir38amkdIqQuAoo2UFBdc48BO55JwBMFscpdY5DAUgskDlkjUGCnYSqAiyPYklWB95jthXzEFDFt7K6F5Td1ZXM4qK0ofm7TI3uXSPK4WaaazRyB1pKLRkgxTeSkeVILQTDJLB1JrIGgX9pu70OWX72WSVXh8lYuG2UKOgGmy1nVq+Dqek51qWf2k7f0P/4IDOC66MSFOaq5Blg1Nzk+Vv4Np6fLFbvnJ/rXyD725kE0sbAl6kD7lyYdANAABAAElEQVTF+YUhRha7wCK/6lYaHJOMOtwfzxDtRSa7D1DGp5hnmOa5dejqtL/dJkVlvcS1cAms7cyFhfmIe6MYDYNWtrim6xDC2QAOJ/kNFc9iPPP6jvSbyIltsNJRyHM4nWUkoPOWht8bei89Gh16i1XrT62z6SLfYQ/OSVdhsPoKS3Y70Hps4DxWEuCAIpIqeIXhwlZJR8VqybipAlxgqTKAdtDuYXhDY0JZW2mhyltFhHNxKpGaib/Sg0yZ2kau+9x+kN5vqH2BOpWH6Unkv4TamkfkDg6YVR+8VlcwQ77wEO+DSCuwvBTJO8/mNV3KAS2Dd7R+n8UaC2xXroZGxsfibAUL5oKwBnVDcLqYLI3s/Pzbz/zEs2yjYCiebx06C7vLih2EwMdhSAI0QCgdd2acOO+psnarX77Q30ksenyfdIZzGBLrKv7MOUYdZxmJiP8lZiXfHNklYocPKsEyrvFAzGQoqhtrCfHlZK5fKVSgKCRUdi2su1mY8yEduS/BgzPdMyopUiHA8J2LT+61hsSP/nvf18M21kOUuCZCvqujBvMAL/m1ek5Q4iXU1wo1uKkjr8RCcFIxVe8l5HROsCQuuafepCFDlFXuQJwPPayTUywzbuIOA6A6suFN+gisA7ft92wTrD8EmzykSzkKFo8BPdSybbNMPY6y8AtvznO4lYj/tpiTso5jZUGbVR7m9Dss4sa4tkv0yjMsAHwCenAthyNF5xS0Sp3TyBYhNJfiwR19hGEhozgnIbOqGDIfwr3zCbpaFPx0bUPSFXeZA6loi2Eg3Rn14vzI8doQFEIVttRHGQfMxaUc66Ju5yf89KyuDY0YcVqtTpmaPBDeCKMOXVkqFyO8en6LRSUkIjxAgYLXcNrBDrEaaYkKUznkWiEJplQEcrwDCRSPeREJjEI0e7hlUdMQI5oYkwj1rAkBEMuQbiWb6l4hMe6zEBhf26s8z5ibdH14IQqSclWimQ/huZVJ73GJ0yf5OJGEDF64BTjfk4p6hukro7aeeQSDbbJfLt4bK19mk9UFeNJQWekrQRPSCDSgIJar5EfXbdkm+WKSMvwEwxrutiVcWvLxMGs75rDyZ+wn0jky6JPOtLsoblLwA47QllgRuCpg5VNvlZUqpiGQmXkN28dzDZd9+NPDYBU/TneC9rShZ9sf3FCfbrQ9+j8lU9YqdOEq9tkztI3NFt0OyZfBt3gHN0GSNELeTAsImveUI+1orETA81j6Ncy3B/84ioq7EDyELi2XfzZPWZN5EfsXwsx8lTRn5aChR5lJY9/YLGBJWLBEPNy7wZOqQLi7nn2CLBw4svqytiHAphBqpGtFQ1MoiQE00kxJBTBs72uZFEDDbIRpjzvENLa6OVGPcGpJ7RBy6K6tGarx2GKNarCRse6s28aamcMztgrEjNuIJjzbZYJUaoXJzEw7893vtAWGyGpgEO8kUywnNjNrPTZV/jGEenDtqPwV3X1mjDh1rJKHzJHM4M/Qb+5XwGSSbTZcNHrnIUS3jMB/BLeIW75LfO6Gu0tnuW/VGu+MAYed0asIHRqopezGi/Mg3SnuQ4hK68/22MAQqpf1FjaQ0/0P5mioqtC/eRKKqn5We1TFKuv7NhOLvD8L3I8xUXwNCWEVEpAWkeUpoGuTwF3zLMNSCqjgADsXiCge1DwC5rsPiNketbQGZur3OhYMF9W6sef5l/72yhem4ucl/7ywHA9xIa5O0B+T4NM5ocwnkc4QaSdJq7zEt6wv3zKAP22nDqPmLjK/8SjK+jJDf/clO0MkjkEEdFlWScuTupvijuJaoctg0zldSKbCpRLRH59bkariYF5Eq17S9nmO5ixObIfttK90PXgPcFSgUFdBMEqE9rTOxS2D2YwINABkflHt8xGjuxx5SMcI/oT7CiN+VuVTjy9QHm7Sl66MbUYY1u9PYelIxCCEYX3ouEWGcac6V3JAnj7bZ1BwBM3YyVbmauTbEYSF25n32OWgD8JHSO92QsI/BANm4twm4V7piQNGHFKHbbNPhwwVps/4OImpfIKCAn7mE+x625N6eY6kivUapc+tQi0BM1JDEF7TJIKITPUZASHzM+Vzs5PlEUYk3+JzDa+7QaFzLvxz/ZVwyIcdeA9TDNQRvg2N6CW036SrCfC4i5Lc4NPILjzdZ17kCb6bfgrFLO4NHV4H5m3SODdSeVECoJD8bJ3lVZnmXKa1uaO0oE/Q8ZnT4HoLuCwDtZsvTfJZHwwb2s4/R4kGPEnL6m93LtY4cTJdN9YFNmEcmcYDI5NKmNKUf7jNjef8LI1+U3koLFUO0H2VxWCEBij8pVk7IOt1krHSW22fdA8sjGpsV9ywvHZeUQJVkesZqtXRH9TltcQYA3Osdd1b7RH8BMM3+nw8yE618mPA85JbEKaWszHGdSdahsosKMzTpAsT5ZqUvLe8VCZBUqxM4wWv8jxExY0LkxQMWuAmkSAcgVR3lZY8eSyDfNWlBSzcSxyz9IgjguP4Z54xrYCVRUfyo6LSRwr5uVhFrS4BQzbdF2jy0mT5Teq9dWu5/Bht4/YX2i+WS4msuYARKN/JWxUZPFdu0zHPM8o4yb2L7VoQbgtCdhsPV4fPkJaP5uJ/pzZgFG+TgGH4cBaW6X/mXTqD/FEkdFgPB68Tkq63rT582gE8yoaQH+0wD+TA36qYdOe0k8fV4vpXGcHRwWcRqPdAQlUu5DKj/eoZXHqSAYUjR17RagmORwp2YQ+Z5pn3yVrT825QjoVSJP1haZYn83iO7OCtpZGfcqQP607rKUOQZCKVtbLXCUe3yPf5Dpakh9Zal76z1fa5kklLEp4BzwQ+gLHHUB7PIDBPU5eTmc6VZOsaFIRD9DYjjDqqgLY0MqybQhyeJ3IF2KkafUE/kzeCnfpUinHT8T4jApjdEUZUtoQauqR3eEYL4S3K4aryCK953ktUEv0FLXqvxSfTV0UNHCoDkaLEtY8pNooO+hxCqOezxCgUP2ZkHKtokSYc2QBWGNtvnDtCMdRPRWT78POVUSK7juDr/Q2MnSnLBg7qP9iEF0Co83T9JeYdaVf7RKv0WZthJJaKzzUubguPZElvOj/WQ8hi6gI/z4HPCbn+GisARqay3UkdPdEWLVpgrsMkzrRXzIgvF0iG7oAlijttoExxEzwoH8hPWsW/QSnC8cJj0Amjtc6DVvnrxdXy0IWCwC+v+nNfOuWHz6QVR6V6NOymbBHDaMH9traQNX0MQkcwfphrGgWoG2ueOZIl3IO7Kh81tjgGdF2dnoXZ+ZNE+nGvUaZhI+W6Db+C1OCUNTpQJZHJcpTpDjn9YJg7KWuQyica13pSDmljlCh5Fggi2uJjeuMoR+e5FNjHhwCQVvTkD/BqPDuKc22MiHPeTEMllAgdSkfKxB6847zIIFI17bItFGV6DStHmLrCUwb2g16lWrZ1UBfvVTaO1Cg29+S+wSWt5/hXr31/9/d+6aV/RpsMc05HSmzHh0DmBZU1DXEo68Iin0cINunj2iKjz0RBRgGDNJaTYmUgLgGsz7zH4sPt8u17a5k4n6dcjSDzbSJUjZ8O0JQlgUmXliGji+OLTJ6foZGGrfpNhDwkr73uriQymf5nOy6Lm3hmIIluiz4WyCSLeB6DB76zvYsvlXkEiMEoDwWo23irAGYI63Wk4d5J7tjrUNWIJzdWdFhrdfoyHcoLl24T+ibPVQYhGOrsAvge+W2Cnacy9MY6JBD3BDLyy8ngvCOdh+lDPnSyBEJRPNBSr3h0tGMqPztq8IGC2BgWP9PrQeubPMCXtHmcgiujUiplybKccm2KPOGBeE+dTbak9bn34CljAdpiuqp4BlAqCmrtlR5qexXKzkWoOE4x2lPgGwXnIWO5qFOcGmasGhH6wZyHOwLY7lPgyUWAL7AI0K3V/Ta94dmzCJsOwsiV5BNY1E4+W7RtiasKVImt7CdlKCxEpAA1pDXfz7AraJOfCg7XyIDSr/k4Z/6AG5kzu7bah3a2yJD5RJS44bFthmS4VvDAzApmmRD4dCWZRZpUobgRYgwupJ/3I+wrZXpXte8ziujxfZcokSZfXJhWggKSzh2ZHJLGxu3vuKsDAhTXyN4m1yoewYI/urxbYRuNPbYY0T2/tYDQ5FshY0SHHSBArWN3mZk/reAoD/oPZavrIhYpws2O1pXSc8W9ChJcFL4TjpREclITcB8rE+qNjLB+cSPjk9zrCLbQvpjwQZMoL8W59MgZfCncJsHJI4Tn+2naBdrrB8o0KjL/A9+KURVzlDPPMyrn7KJR35rOUbg7/GqwSmRzzJv6rRO/y7LB5NIG7xT+MViFp4ErFN2UTe+nDbpMo4ToTA0fk25Rfj7loADjgUbwNPiyPGWjPKKC8Wx+ikw7R8HnuamJMsuaEEd6GdlRQpWx1Af+SVqJBnTl2j/CSkNUApaJRjIV9ak8SGi9gDJIL6al18qPPIefpLtK25ylTfMoa8S/tA+QlQdoB9mBZmP4X//h71oU5Ngch/3/TdqfxH6XZ/d93/+Zh3qGmqt6YHeTbHESKEomTRiWEyCRnSy8sBMEWmQRIMg+QIIgWUYBvDeCbAKvvDNkL4zEsmgDFmUppsDQhmFSpmSQbLKpnruquqqeeazK+/W5v3+xSTYHIPd5fv9773c433PO93zPOd/xfr2nv1a5Q1KDWe+hzIRhKITFLFboLBnAxRxIBrpK3vLaE6NEDViphjhk/As572swIfsoz4bcKZN88VccUmj8kkEYY8qwSignJcjbu5qQX8Wk5YFnQDUoxRbnvHwv0m6yeukK66PjrxRuut5E4E+1hPB/ngH5u08ftpy2kzPbmX87xfbW1RvbhHT+ad0P8lxeTVF9u8XjP131v1rXlUHhWVDi0j2u6/8wvCslfdIkGl70DM/L9V4IsbbZrStRPPFQb+Np7qUhLsZDOHpHi6RdBFcYRqHpSWmuSBM/bb68V3l3+zmp9MdaVPBxJstO8isJtzIvhquVKzAijoQGy/APjkB711iORlLKyuGJr8bUm4Slb7DgFNb7ciMoxVdOIu06SclwLuvqEd2GqSzP3Mqa8DEpbh4JRI033R+M5gxCRqj6Vr5vZbwdz30+9ssZji93N1zlI1DXkpNrGQ/j4GToaoZj+zV6NiTgkAG4z/Gora+nURzlhw8VcTQmDIdkDXIrnooQd6Q7aNPDsPJF4+3/0bOo4aqbGYNwZRjwae0BgNLPiAiHY8p28wDpCmIe+cGrHlNmaH2WcrYQ5JN6EM8f4mf54hW8i96RP8/rWVfVfe9cvYRL5V/6uEIzQFbYzHkpDyfnaj00U4APMywfZXE4Sk8/kia+tlP+0reebpc77F52FtSVjNHVhq6upLCnYMhaBsg3Tjhun9QTYVAotj5XeHapk6LbuXd28frhUF3oqBL0uMJoNB7CFa+xZg09GRdZ/WD5ntWFsKz+ucxkWg/+x7NX37h59q/G/8s5EP/p+x+dfbPvhjypnJftSdlIAR4E6Eb5fZpYT8Ex/XohJt/J3P3m0x60e/wPi3MMyrULN/exrLebJP1We0IexVQG8ocvSpo8n/fMWzZGiIJJJkZCfGk4LL4+bLmz5bE6l08i4hn3nVypo943xFQliqcP1Oe96uu9NhZ+ISN+kYwYQhS19N2rduWc7NKhQ4CMX+slsJAJo6NksvbLu95z+S+md8iAvHpUKNGrwG8w16Xv2dFOllvv1OXqdUuEQwL6m5vCEy8XLnxdNtdnBiREvhbT/tqquzRxpnQVpIXgZb8p/EEbkOIPwTUBU8rjX3lmsUDv2kGK4BXLslUHh2BE+MDm8dzXWEL+Tq2c1wGa8q0qwnnpKFRtFtHgg+PYduiYyJI0nhw4J9gv81CSm4QcjhRR9wyKJXzJXJ4S5W3MMUXRmrx/691Xz772zRd99rKjlutx8BwIi6EpCu52uL3az7i6U3o/DK874fFewk/hGQPVYH0+l0e91S5j3Sd1cavkELwVZQ9KiyI7kTV61+hL4F9UzoxBAjxWlRaXVvlSSbg7QaynxugI0YAqXw18WJorfRzI1xVtnHu0XlJw4o/s6oys4RslPeMafgPdfXVUnKu3+H3ALSp+EMSlDD8tAjyJA146hkcpvfWkYSWq4TEjWTp8wQsrqgxfWDVzHHkNc/CPdnb0Npioo94Zhbdb0ICmr6YIP1fj/UJUoM/IjTmTq3nGzo4yJHC1+rRJz7lUhG2oBpvuRROUt9pJgeoIT1ZnhVeZG7pK2MzPSa/RzaDvHpD+qzq82id8u+/AvcrnqW/pqmdUsdzBcB1zDNU+pVvFvWhCfGnArQ3hl82AO1cLbht6rcGnaZ7n6dt5/iLlLso+i+1pCHZsGS93+jN+c67DaXwsTinXYubLj44Tq+HCudmwWmXfDvaz9442ZLOp4b+bjxuafdCBkk2sX+5YBYsLtLELz7gIYZ2B0UMaHx9V950JdXb11bNPmlvQ8C7kFE688/RD96hYRsOl7VcJ21PT85R19TZZSilLZaQDXSqrYo97Th25vfPahbP/0U9nTDJuf6/h5982QV6Zx7yjUYTqXxk5GI6LB8huc/tJbjQ3Fnk5V20UTln+s3sPiMjZz99+5ez1jDfH8VHDeE8M3QxzMnC61BMmdCEFfw1D0QmnVrL9Yfj3NA67/LVKUi9IPTAaMyKFm2g3q0T+wPl2K7F+tsVE1+4QSgKmrKO88bRyDoNChg+sdu95vbXqXDBHxUZB+tr76qiCP8sTyDmipdc25niQ92R1OjMFMXlPzx1hHJfqmy0A78LZ10Js1x8ZkAuf/vfl+l8caMVRUuoFcn49aguUeE+rFAmcly/NeW/Fc5HLs6RLXnocFwNpsEEMW0Jo8srBY5SL7LqstYjNHfD0JKe8zndHWqe8elTzYPpVBJi+Eb7xbQIUmE0im8wDu5Qmi66lrB+baPze87PrdemvvnX17FZDWf+rDmT7Hx42mVaZvJStCgqqzUJtkxoJDAqv5v3otuJKT8lX1yg5no9zlvRKbiWAhIKh8A1sgvNKwnC1GnOe1Xga4u5HZWbNZzjyloxvhLuutnOzRhn2nfIdVCe8Jco+jmcE+HG9F8coEGxdap/rfL80jBLvBAd8HvUEceXOowXav+gCzPOBl/DUWvBWb4sxyhxyXccekCE2CFLLV62WotIqnxfDy3q94SobAMlP/7fSzDlGKlf9kh8xhZCu4WEe7LU4+3ZDVJ9vXPHdBNA3VxpxP7sbHYYSGQWbxWv7h4EozKa7dcmj2fJcu6cr/lDcpTVBfXjAPbOmcC38WGnkeRgcDTD4c5zwPvz1MKbFEi48Uc48vykqkI70G3pIBhiFJWEEknOyr9GSQ2w85EDDDb66SX6fP2g3ffLpcD8NeQY4XjzPKdITUm7NZvLFyw6hPN2OpslZiJFTSvhP/iiyKEp+uRitHgqf8x7rs+i0BN55bdTb09oVPjge5E6O3a02Pl5tAv5a52zduF2aDka0fOuSI6hLSL9tzjSv+VJj+JeuPTj7tEnvC3124NPmZT7tpAf8WB0DfOJhBAgd7Z4MHR4c9wJb/4qRpzL0Rg4FGg71IGZ44v/Pf0mbi2/f/PDsNxtBsNAFbMbDUnp7JSjTj3PMwCdb61EH1Mooxwn5TtDvPHy0b7G/03DW7XTPe8odvtUXXHtGx54nvRyvDHQTOknAhs8pYXMp7uZE7jX8ftCRKovPdqPTEXoF2pfhbvJvDhCJhmvfi2cff/z07NZbzQd3KjR9G4VL7wm/x5BoRuf5ApjpwoLIiRMnSjq5nBFJXggcuYVbSq14Dkt4JHMB30UPk4JPo6nppXCtHcX3zcXocsoWQvRBxuq/P3JJd7p6+C0gVPIacwWuIUW4SsU8xO+CCIgxrNBZ8IWfp/OiZSPylG95h4R8wURlj7pMvmVuHcf1hOMATZHkGRXPmhvL5zkzBnKy4C5NYoWXacvpanTGcp3twnt8mXCgicBpsHCxYoVHv/nAJOo4brsVHa1O+YmW+P2PH984+49f3ksYg15l3OrQOT2i+21Y0gCdyeP+g+61qQ3FfBhelKQhN3Mhjs54nrI55yWmW93AY3TE+M3w970TPRdxjQZIGlSVfLBH2eJQimaeR0zYe6+FUSQJZ3948+oMXtbDW8LLG3+71WK+uPhBSmbDfuWjqM69IcpLCUCjKtHYX94fb8Pa9+O7Gp9hEQQyEEb9V56YhYUHUdnVA+HXoPzuZhDNyzC81NnzlBDc982EQ0xmrDUs/+DnfLI360m9VY/j3QzIO5VmfsxJu/tmeB7xjX7rBVSnV+pxWGGHzh1VHVHGc/VCKA283VAV4+Ff5W6IM/zmqXVfb3vtqHiNpUoRt95B9MzxCe7RcyyNxhnsKaWUlTqy9NeEvTq1A308rlLxeV+IDH7iMRib+O79+P58pqbG3T7Whqca0q18vvvLyWHAumzyNlxhDP34voYjaQA7JmX1ii2ksBTd+DrTwst14oCaxhvnI2lbellkh7k3tHmcWCxtPMOfcOa8XMtJalQqGrPAdW0u1ZXZgY7ReLUTai/ZWBkKz+paX738qJ32DZQ1lv9p32b3jZ9PDcMxjsnUrpOA85i1/Qu1eQ4KXn4mZSXdqIYw2ZY3eA0v0R0m8S8F88ad62c/9+Ov9+XC5kS+9cnZd1plFVrTkaAd32eP89WNY1BsLtRW/CxoodIZxI8bzvqdhw/OLt6+teFfcUVURyt8z3DfLu6U6cGzOFp9Rcbqg47Fc41JPWkZW/EVP9WX9kDelVr02jnx0SbogViYoWt+6t6Ts3eaBEZfzB2940tpJ3/hRlcEZrDwZrzMUYPvnJ14PMeECirzHKY5MwxJZfEzAoI8MAO9vAzMy5BlsvpTWHCGLNmEoUu7+PS3jucfMiBJxm/l/syqzeAEXAmUBOEfQjHsUGRFrQICd7oj8tB+R8FrtBpnwZjpAUL9CVYoDrmEtAb3MIYxFCa3EaE8RsJuzRsR6GwjCnXeXBxQljS8fUM53kZeEceQVYyYpT2MBW+Qp4QG5WpAW4dvgrTx5RcpqU9bY96Wj7P/WV3wX2/j0jfq6l4rj7Q8el8jfCU39nY/gqRxa7BvNqx1tcp5lnDqQl/QCyjto4ZcfOo1gucRGV6Ie+plx448qELmMYQzeOLGpGA4CJCgLX3vekJHNYPXhUdoivfGd61S421cSlHbvX+/CrybYjM3YHPjB45JKdvGW3vCMTUD7ibgi4QLvLchL+E9DIfCwqo4/7R99JRN6PDjP83hmKSpCb0upwkcQ1a3a7ypnjUU5T3kMZfWmcnqLDQHCX7yWI6pp/a5VlZ9Lq/dPBMabpdqX8GLVybHKT27ya2q276HAFyntMJq3flkBqK8+qPuK4es9pssFcforHRI6OJDzURBWYkV79XzxpmDrGPoaBxaY3ExhPd3jDUHIr5VzYOJHk7P6ioluqHcwp61HJdyrNLjVYbAEtvoff44edb7CMB+mB0/oqC6OGQH3uTXnJuhS8vCH1RGEhp/a/hZLR6jtmORgvbEeHgHQXs2Oc7ZVBfaVUEbxiSX5LBtCON160qKVyfJUiR/mmFznIi5pWsdhng1Rw2fX+ZpX2pe5FMrFmPa1Wv3myepHnaWSwq/3skmOGnLeI+mCVJw1/2bjoBH4eKhWdnqaQt2um9hTrgxNp5jSerKOXe1ydvXzv6lL989+zAj8Pe/336y6sfUJ7pUZU169Z9pW1tRPmW+Y3Fo7kp7Ee7fyzjduPxk+0G0jc27JWPnOmt4733IRcLRs6a3fITuVnDDaItYXk26fcb2UQeUmhd9GA0bbi0t2tTYUS7j0vBh7SXRWj18ryGsn2xI/1oyOezIpotAajHV2/QYPpw/46UrHDaiUGXaUR/HamqUv8jSlG5tWfqAazf4TBDJR1UZLzLq5DPY/V9dTdcEhyPl6jTsH2FArn3h9y48/4O+QNm5xQElDJi3BqI8pr1S9z7UvEaERlTUiHIvLaH3T/ndgtMbGBEo/zB2K+xFFf4wQdDl5BWx2sqyjtvX996oUbzfh1isvNHQpsR6nDIKgJ3in9ayLb/dl8oYmIyHsX0YyLVRWMzrHwVpuZ+hn/VowOoMI/hdzdt6K8H8t6/cPPt/9k0Avtr9vCgfJLqT4TAZbZmasWOb9+6X906/N6r+h1PSh+Bto1DK+AoPosu5TBr4zfJScVtJFA5brQHHyl4PocqbUYF79G4svvRTCmo5OAf9h/Dgny4rT/JyjGUafR/a0kHHptyuB/J2uL0X3vdrJI6XABf9VmjwtBhIK0ceNbGKpxvnDOce47bKOgwOFXSIP4oiev9rjEHwggYcNoHPaDjCgbip+0fVqbkOIZSZcWTdd7TgR2g0LHWsZHm71v1jzXG83t1RJL5fb4z51dLcTYHYH+LLc44Nt2TVnMGl9kpQZvgRqQl6mAyhVEGFHMd/FAnP/i7d3krLKCRnI3XVVV4IaUPdyNLFZHQeckZmXf94OMWCPdo3Tzl5AFtZL2z4MxEaEzfHVPizJsNftCrKJjTpXhLADIvFQM9bWvrYr/R1uiajJl+lpGysRFRPLqWExowMvvgss132b7Vk924fPzKHs8Mm44m7vQJbjcPQ9s5cPa29WaE13AuTZ8/hg5YQWA/8/sOcoYZ0n3fWjl41Ob6WVXnWBsibHQv0vDmc6x3HcOUGLFsy3HlRHEznil18624eS2VW3vRIsFdH8dPqNbwZJ/BN3VWnQlYPJK16i82HbkG4+pTvdF1owYTeJ/m6/datzqqrtfb7T37wYCdaXE5+bCDVnjgad8rHED9h5CNWG6BTXqlt6xk8iSffefTk7O2OPYHDcC79D194zxklF4YBHbx6L7k2r6nfdnNK9ko9tnhSOvK2WqsceopBJFoRPLDqwuZib0dvvDO3GsZ6mBG5TX7SexdaDTgYmhkdXN0AfS7fOxuQRQwI2Zqxne4rPR76V/S+38GpLjNDQC6LquD4AS66+k1Hl2+nLJNBhdeezAPaT5Jz+Pjszk/8XqG7Dg3X44W/83c+efF/+t/8dq7VL2HQehCVPADFj5cKhI0fBPod3qeI4xqx4ruOtcfl1cD6B7mxa/GlDFE9EEJwg9AV3rxhzMCI0lbEWw1f/F6mUXurLYxRGFjUrPd7efyfj3uOBsBpPY8N6QSbl7ALY/tZ0UMps6iYZUhj3koZHzX8pR4uv3rp7K+3+uoLzbT/bkq30FXwVjJlyh2LrufjDCyCadOSj0jx5C+uN5ACyZw5L8uwgN6Wut+KhtKZnHfaKY6ExPHDLs9qtDue45W5EDxpxWVOHLEvGj7oKZEc/jCKL1Mk6PYMRwNu1xJuyxN5RDxW8Xohm0MKzoPq72HlbcdIuA/mcIZ3v5WDd0ru3t8ZFXXTC1zUp3BLYTVICt/cxI0MGR4ZCmSY5INbOUs9tBvOC8caMiNyJ6PxZquB3k07OtPr9eixUojgvV4a35JIx2Q4ghSIiimuuk75Gd/VoI45jONuwlov4Xycd+WWx+GCZIEEjT5eWHhbzguwYS8X2dtVUgaloorD90KDO/kvDFc2Tlwlz/AUxiMv0ZR3f1PAuTc5HcaW9WIYj3RdCk8cpVaPtXSPgq1hc56O47/LE/x96yZ83J2bxph8sR7uT9VlfqdhpLt34nnnR/lWSW708YNwdIXG0VgYBrRZWFBUlTLlUYFHOIVVm8mrOPKV/0WfZn0Wrg8+fHH24XtPzj768GlGIxxStpfaIfdpy2qzLPGkPK0aQvXzDM7FjzrdoSOFbCqcAmx/w8tgqYPLeokxd5LQsAvjMWUtNnSPP3gtvPdTPDnjrkxBVvkbesmIbFincl5/5/bZv5wR/m5a+b/66F7fH884d/ihoWOOkhV8r6RLLhohqNHruXMuHI5o4txJvY/rHX/UvA9Dg0fkwjXFuqdYVJhQw3yXMyBO/03SVl+GD51JdTQOyPeLCIbuMz0QbCu31IsUPvtQaZMVgN9rNOaj+0/P3k4vXhSpPUqpWgItz4GVh3KSTbxJfqWkL7QZQ53qeF9jxOdoNbS6suht2fG28bbp+pTfcQ5Y9EfRRmiSDUP+nCFgd0TUywu/zVaUfddnBsRbG6t+K+X6SxU9xN2GLabBy/sseO8EMuDnjUYUAdzxB3s5EFxJk4Se8vAZHMS4VIwPrzizxvI3hCvHH2PIyHwtBt7sd0+lFmc+woN/DIHzZux5MLFqKMpJqsnCBIuiINtWeG3ys3c4Tjn2OBiVoUwoPUrIWwt79kbd4r/ZkSXfyIDcqJHClsg/yJNOJ7YMNW/PSqIgWDprzP5GtK2B9w7uowC+UoU5QM7GS72S5z2PiBTBtYZmpgwmXKUpRgN0ByEqgns1BRx+CdyR8xAQ+GDp6ilYW6pYLp49g/cswbDywzyC5YxfSJDMi/jWh6E0H9QylyMtWInR4BNsvFiDwbhdUhzXZ+dVKXzp0huMRT9Lc813yIX++/Vo9LAMxzBacDTMRk/LY77oVo33lntG44t6HfHkbnX0Zlr21dIYgtGAbqfUfAs8Eqa7DT3t5FzSG8Modvcs0co+5kAKi25GhNLWU1nvoWS1ruJKG7LzfmWubLI8g6AiKqvqngGi1C83kewiuzPlyT98No7PC8G4lN420KkzjEj5Pm+3tlE7S20Z0pcNVbnreRiTN4GtTnioetEtaIL2hqeMnT+sNHtjWhCVgT47+2oHhv5sPbGvtmP5VgeEXuvwUEbDKbmfMBDtbZmhCB/4ccSOdlqcestRm9IFzCm9cK2MTyn88Pkkw0tZkwET1PYWXf9c35l59srZ4zYgvv8vHp794DtP6lHlQFUPT5ps/zR5cubWjlLBwybUr96JMt+4CA9OnVODh0vF+nyBBQl2589RlIdSiy5852mH1u7b2T6dE4sxpvzowG49nB3wWPrL7S5/93N3zv4ntWHfBfn/Pni0tkP+bBblx79RnTm/Sh3q7W0VVHd7vBx14/DF+4wj3hFUMtVFX0CHdKt7vHm904eho+dgruhBNNwJDj2xlVkJAD4CMccUoHJr83PIgA8XC2U4QdL5+3Gy9EEHZRr2m2IP/pgSzp7WQ5QaUAH40MMc+dLulcyr9/jikEcjOlbyreeRwZNG79Toz3TkQtRjkGoX9OWnCR95YjRs/hS3DsGli58NXyn5jxmQ4PxTFiy6DsQgqCZDYMgXjpmEgnQeY7/Si/U7hHTd+YZ8hExZ94BZ8Fy3E3HF+msCMdzk7BJyeNEU/sMa+mtN3r1aBd3L/O5gr8pW/IFQSr+yVRVjYg/F5RgA/KxrgrejCaKezw+27r+qsGKKIO68l6y16XZNR7f88dWXZ//Khetn//hCXxyLo89iutwUqHXkhg7MERgyo9Ee9kxRb4I9Wlc5lUl4r6johOkZbVQjMc5vtZWNQzr4VmnNGwo24azqwgI9JtVa0hdcZes54asKR98J/eOhPBxI673NdviWud4Fnl1f46mOauTfT5NZ7aEEy3DVzeq79Mr0v8hD6VYAPgs6GO6uprDNgEWTq9HxSj8fAIIjb9lu30Acz+G78NKDYYLWqh9H4d8qza3Ga25EjGHKLxTmpHPzHa/X0NGAV05Qvd5wjJNuKWU4+ZhSSPQczBTmZDJPnszs63x6Ct5Lh08EjPHQ4mdM8J4i9Q41sIM35XBq+FqMXk0o55RwbkoYT9W3PBq3oPFPeMpshIcTo/VJvNa70Nt4lkxZRtr/Hep3DHFmPCqDAdH7MCSKc1ZTWSk1Xgb/g+qQ2vpSw5FfbYLmF5o4fjujcbl5iEv2aBjGq8dz8KYM6MQk9IRHVn1tISIKwrMjeshLFu3lOtLEE8NZk4XqJXRTQGJL1zDVjcYRv/SFO2dvfvD47Lv/9KOzH/RJVopLj7YzUHdasFMlLmScnrYk1UebjnIoq/iJ/n6MhmFIPHIM/YRMXeT8RWwJpBGu/sJG/Sxff6q7RLqoE43VOQCGDq81ef/FeiK/nKH7Vkbk91q15tLz1UsyP3C9/C+T1+fJqUvPAwRzb0+NdKjLNS7w/U+/KKvr3HgYpjX38YO6lGAbfvYNE/pKuw3CFKthH77FNjRmkJxaQW8YCiyYWq29SkPWorPAR9ppw1gv6olczZjN4ItTvrsCyuMvPQBXz5PL9sI4E22wwkmvWmufPo6d8NrcnY/olHf7Ryp0G0RPADeEnTOnx7yfdDRV8ZIkw/9UcefXHzMgNb7fMo5IGucZROHWrJd6wwHLFYJhPtwj1vzD3jD5VPlb2qsScKTrsI6ehEkd3KLUlQ+8aFAm/SjHRyH+IMYZ1ngQA3jgP96E6jev8M9QUfmjpnsQedVb5VAUZuEvw8bLrF6WXvm9FsvYlKaMdhRviCnmGJc/qkF5VWat+POtvvqbDYz93WYTtuyxnDcTPN4bTHRzjX+adDRb4lvqhosMb1HivHvKmmrlu8L1aWXWFCZceHipRsMLmgJUrko/8WxLZytLPwErB2A3vKvQBcBbJDKjjiGscfFoGRy9s4+DYGc8r9/QCEOL1vN88s44dWdAd4rqCaYqVc5gj68HHDt39b84/hqT8jDbhOHTcJbvXFlV1CE7hRuSeq3WfzsrfieiNmHb+1vhZh5JmCEwPRON0lDHjYyHHeSW5g5vyjxe7agNOjt52Rf2UkTndH1iiXaK1DlUxv/JsH0MjhXRAmZoQqzgDZUgt+KKOxTO4FCmeCWNlo7n/e9p8iPchPoatfj+azvi7eNgOF7W6/gkD/1pwzwPUmZWVu3DRaVKqk7Go95hvCNDeomMjPmPx/0+F0/+9YvXz34smr/46rWtKrrckSSXm39Yj8jktUqAPPwxvl+oFVTADxuTZGHIFWfMe/Ufr1fHaIN4eVZ3PbqAPGB2NxavnH436/185d1bZ7d++8Oz7/yzvvRdD+thSvty8yPXqg/dzMvV28VrDaSGw4uMyrPmGdXVJfol2af8Lhrqa27EeVwpgPGYKE0BDvfqDo8ZwXDkqAZ6bXDCB+1wRu+W7LaU82Yn2v5859z9oEnxe+9/uo2Gjm/pyMdDN5SWvN/KwX3iXBh0B2HOSuEcyc0FqvtFVq7nMaq8lXe3Q9Rs+j/kPnk4CYalup39uHo6FgUFL8fxqF+yBNPafeTaDtDTeumWHdtnpm0yIN+rB/K4nuuVjtjW65rTUyY6TH0UcmqzR50edTgs4kcEaYP+FUEMFIgGIyHrWdX+to9LRrSVZyvllLW08SpdYohVAwDtWJlW8gsv/5weyPUrv9VxlwN6eLwVTma6DameHZh4eK2BJVDxZMYGc7hrIQNZNb1KLze2JR5rbEBByf/F046lt7KE8qLkTAozBrpeH0f0WxmQGz3fC6ZeNybqZl6Nvud5DTYLUULHEsagx4hV+koypnkoBquUihxTTiis0kYfwemBN8ANfNBc2t+sF/IPP21Sro2FxtJVsOEEa+/tC8F/Y/hwZTjWC5nRSDCW7thzAmU/sH0fPQ6q3tQDEUrh9JtnIB2rGi3VW3gTZ1PfpYo3DKyydlW2MXzXhKOUL/Ag4eF5VBMNr9Wge/fyauO8r6XYvl+67Y5exv4EAtwVOKaUt8JXt2CX3sXAOxmXcnf+lklxvTino1pPDysizDhr5IR3XfUKsOPaB3huJpS3Q+aNGO1rbYYm7yQzbxT3aoJr0pwRs9IH/oC2NH+rGRnuK/v0aviU56D8aOLZpRSNeq/sqlgj2DHmGkD/t1ej+lNfFJr7lJGeTLQecxblT6G61MVhwHsOxx1SWNnYdMyrRZs0lF9DPsKLmGI799zwlMw8aSLa6tMH4XL0OA6Hh3F3rM3j0jEcVvJwhsigBSW/3Fc1f6lhmbcd/NnXDC/5uqYGrm4qO8QJVPd+eg0xHk0XjI2NRk5gcarPUI8s3UvRQy94VlulPOA/TibfIM7j9nx6n5ypz6UtHAM73PDNX3r77PqbV86++RvvnT2ymkxvtwaqx3XpQa2xYuxkd9r2kwwM3Dke+whJJV2FZ0bd5xa296uyY/5JWag4WIVRdKNJ+52sQrJrxgPu2gzcSmMo6/brn5z9jc89P/t2K8DudTjqvfIzzBfSwOv9B/NYkRhuZLf8nyTXdJ6FNWmCUhwK+Sjp/G9OTzJyrV7xDzqCaToGLvHDsJUhbC3aPNureXIfRJceJt3wcXDtJytx/wxHtqw9mXEidJLZv3hGpsJz31jPiNzmkAho7mb0lWaZ5Skv/Yk/NatBCKEg9wuXGRKqDo+VUJwRgE20py8x2ajEIITLFlooaj+6sJgA7/wuuo+XHqS7F2/+2Qakb9y+/8n/+X/7zRr+Fw881M7xW5cyRC5GkEKnYMQpcVpDAYpAQinWqqQ7CaLGGW0T1vJh2wJk6jE6R8TWVhfPw0f6R4W/3RDH6zHxXoqbEibg8wikK/u9oBlvV7g12Odj9VY+bXw2wcBaw0jwoRS6DYPALx8Z1d4cl66Mp41B3q3x/msvrtcL6ZS64FuVZdINjTsCYZVwCBrDcuqLDT+75PVUrLiSHouq8wmNuQCCbO7kcmVtbLy0KjeSdh29AoaAkOXJoK+L4UTzZGUhcF4JGY+GBBz3Won4uTF1OBfmO+nvhnunVxRy8G/nHQXIP/WozMPzBx9d6jGvrp6XXfjHQWnOErLc9xhqwVN09b+8Bw81QQJ5rQZ/I36+Wpm+GW+d/KsJ5bFyrZ5I784we6t05kIMTfkO+SVeQsNbl43Tl37r2NFsvDhv1GTgGm93XW6GY/IQ6fOwyoYlHAnjvguLt/ZdrCetp2FY5GRg1u0nfxosWUkQqqKIQVTpCnMpY8obz+LPpeQD5QzFhgSj2blr2ufTJpOf5Iw9aq7gXvEfx3Vf0dOzsFCEV6r3aans5vEqcKvOUsI/m3f8P+1sqcuN6W3o7Vbll45utSmyrCv/Qtay4N4LsCrJEFC4jgZGg+dOKRXuWx9lOmgykVebOl9OL4/2rVUmBKvLVSoFXnihk4NFKzuelnnht3/yjbMv9/7P/8G3zh50aKOvDtqMdrHPs9osh8VP7j8/e9RvBqSe2TWNrf/H8t/4yKyE64YBg3UudweyCh+RtSEPpzayCoZX+J3XTzRrnVeqx7feeuXsX2mT8HeePT37zb4H8rjeBkdMOzBXJ3uo9dY8TvVDr5F1bckmQfL1J69KXlvwjfWnul2lm+NX3ucNNdb6chCbu0zWtHcyxBWiATjFdJT5lsksnCuQ68Up+YRzC17l349pTud4h4PSCTHDEk7BkUa9mVGfIRdbHoZveqBnx8EXfao7OiQcVm9HOIcKeTstI7ncKNPgF1Y6qMnFaSNaoTwcCvjmhX/vP3jf2/kV1n/8Cu4/if6/PS+1h2kipYFUYzrYipguAlYajN87pp2D62EESnNCDhVrjJAUD7MezBnIbyjJVXRkgdUkU2HPo+rdxuW+3bI2JVOiUHMh8jsJ7FfLoC/wrL8srmWtnngFjJWhJOFgr7D+UJhe+PmeNBZeAT+hG21/9ot5gr/y6ZO+h25yLRYE5VUT6+L741SUGbXKdobMK02u+0qaeEJoSGwrr8JZOmqZ584bQG6kL51wgrDVE8E8V1ryfJrC5lFMMQQTJYzZ+XV4xejPSBLJlBBjaHjJJkz9Oe6gCWr43WvsVui5ccdKhpPhBetlCoYw2s3ug1vWsBtSLEeT41ZWxdEy8d4QcXiGKcTylmg0XWEU4tbdDIBd+fZ2OOr+ThnvBs8Jym9n2HzZbUt1ky1n8bT9Zgai4jMc1UREoStSEkGywiBUTiTt+JDKOwxEOrQl2MdzgS4VBuvusCduZGGT7pUVm4avslTYdppTZCpGXZBtFSQeYR76byhm95Agf9nQEb2hq+IYz8cfWo7ZMVEpyw/i00fBvJdHej+4TyrLR4XM390LBsP6y31y95daPv5WPZ3rrb65djdvW4kUctZa75xB8F32CybKIa3dGMLqPslmLCHmOuE5oxIgjhR+IE3dGzr6tL0THjdRbYiKUe19wo93m3CXr/J2BMjR/qdwyjjvNPl+5cu3z77yy2+e/e5vvL8el3mU9QDD61nj+Y8/jhcdo2Jl1bWU+wveB7RzEK5lhC/Ufm2ciy3Vc0acnul9NK4+ENMrHbSr99NwMm2xdlHlzsCn0S610ut6w2w/3vc1fumjm82H9O3xhjXNQ1mh6LpRGefnYxk+DMzkY8uvz3m4lOd/zGHY23Tl7AM77PGpOpgjU3okxc11lugQ0Wv3tcfRmlgxIpbk6Gl4lmar7pJn1TnFU7jvvn8U34bLhlWbkyiBXsSp9lbnmgEdaphvhh4PT7hznJa8EJtRx8Cyc4704o4T1Uut3MLx3DCW7OMQWNUXpyrNtqXs6Yh/Uuo/dv0pA1KWX+uDQ397jAEdzril9f2JaxM60iixeEqHNzQBODIe7yeszpWi1xGXkN65fbWz+VvQWUN7aQfmKFLsMTREx/tI/Vda5fT7KaIPMBsqB61Lf78XH295JwWjJ2Di77zx69qv61YD3Pj/4B8VP085UJ8JQYymnHkljhC/nJPxbt3VX35+9ewfXAq3YIFhyOZYXeQAxdKVXg/vQvkZwxWhUoI9A2BcZQjzbhLivAVnzKAVbtqqC082HzMA1YSwYC7My+lCf+QcPCzslH2xDMCWCQbMkdbGdj+Ob6+X505K4HN5gI8b9rNhSNUyHEEasJe8qi6N5JUE0IQ3U2NJqcMOH9cQn3cP45WNV3B+1mo1fPHPx6DQ5RiSO5Xru/OMxZ209Ruld+T6nX4+B3ojubpZObF4XflrKccdtx5BOeGb2yBTY0cEWza9bnfCfdnBfpQqXRq8LQ2NdtSQV7ImH4OhwcITfngV6UtjDH7DVdFFZmUGz1BIhKYBDoU54119nUPwzqgHuLAuk5LktyFCxsM+CbrufsMc93r4fnj+oLIf9XMCwf3eDVfpxfxUg6F/ve+3/PzVVlW1HPfq60kTq6q+eerkKYV8yTCWXoVVUlDBF4mSH2Xx2z+xVDa+F7TVScOz8PVCGIfyjwell9acDwM4I9lR6RNE5YIvvbIJ5/UOS6/CbBD8tF+VvDSftiLsQkbok3aAv/kzHTrTyoff+Sfvnz3MeFJUoVxByU49k1i8036fdZbWrWThqYqKfkN+1zOhVeGW+FoFs1rqnUzRC+N7aDAQjnfn3DrJe0pVbEmkmrHNwbjYkPeVdsTfeePl2V9v0v+7rQD7B9H6UfWx+Y1SfxKT1ossn+Es83d0DnmT5k9eQsxTOOJojtMpzYHT2FG+epiVfz6/YFk7eFZqLXk0mCO0NBZrOK4w52Q+rV1xuoQb6vxOS5+fdlzGlfhj2f+Ro9Rke9QeNMtw6MPK8OA/vgZ6BlU7YGkmqxzlcievl2qbF30ugOyH47JWL3hCtjhJFhjJJ7/posuXLv1a6P2x608ZkEr4tfU7T41DA1zjigN/xCxYVgijQgARFMZHF7PyC5vgYxzk+n12jZNwLG+a41aTXj/79itnX//ug+13YLWPZZ/BW6Z6GB2h4Nj2r9Ttfi8Bmz2rVP94QQ+riu+X7w1+co3zecwxNDQmhorKx/iSz7CMSYUNDmZpfotDLTGqcoPztIp7rZ3pv5iA/6M+f/usDPKaLLex6k48cgAkhWk1B/Xr4BNDThhLEB05sT0hAeUfmmBHl4MQDRcxDgze2knhBE66Q1/hebiX1nAFKTze3Y8GUBbMjBZUejwaQCMpDedlUKt8QyQ2ZZqv+UL4fpjRc+giYUKvf5YAg+04eTqj/8Nx3zvp5b2Ourang/cyhRROGoxm53iMqwn/9YspmsLQznD4Nocd5Fua2/2dBFTYHeHxLh2149bpkqt51T7wpFwVYF+J3gS6KLl9mAlRvW8YSuWGM37pku8E0aKPxkAypI2XJtK5h+I2VwBE2oxXTU4XUamVubkSSpNcWx8PGT84dD+XZQ7HmCRt5Tuuw/HplkW+aEzqwQcZjoavHgT/gxTD+5X3fvL0cYb7YTy0J+fdel8/Ue/237jwytmbtzIc/Xjt4G7/RHmNamyiORnR+9jkd4LCSUCh+RLjZavB4de7GF7mUoRzpFzIcbDiaYtbSmfVDc/yBa1O8CpTOVtO6r2y9y2Q4OD7hZu0f0bBEfcMyCst7rXhLk/f72LDvB3ze3b3qxfOfrKhx9/9je/PiF5o+O5Fk+dPfJPEstT4ZuHI095Da/Jm+/PFFsjQMespZsgSD5WxdoFEtaStztChDeHxXT0d8ad7eKuji3BMPq70oau33rp59i9/9OzsDzod+LeTe0camSf0z3yGnsiz5JK/sGHwylLZQVmawA3vK5tcM5dF7eNuKEjb5S4sLh2OWbK/qhyU2lj1v3O6NAzy0s01eSqNJe7Paqu2INCbTjT4oIUHTxrGulkdXTLZi16//sm/UZ3KmSyOD4UmY4TC0OFJucUr+iyY5XGne8SNx9Gp/agMTqe26ySPWHzgmBHBp8lk+JX0v5L9hy8k/fHrX/o3/7uL/82vPGw8vr15JxZpPSGFYKziGVyqAaxxVygEEHZQVrrijzmQypajKDmLKC1EEVuOYOpu3n2tg9W/rR9xXDxGVvQ42ruVWQH5qCw/kWfx21XGVl4po+SsubK+kSC+VS9lZ+8XZseyQ+GUbcLXvgOs1+uAK1JKMsYSTgZjzBR6gm2VxZO8gL/SsQxfeHjp7HcupkQzxVdbofVG2g4d/m2PQ/dz/A1JWNoLLl4dQ2QREZ7mPxQh0rirMhlMXVrtxhDN4c33As/ybMJ3d8KoFJWM6WrekJW0riq8cEZp5SYJT8t3tXfda6ff6lW8XnmUWq9TmiY2tzO3svFI3qORKO+sE4aPRnMc9oifea8rlOltYrHvj6sHHqX6tgv9Vox3qKgeh9/rpTN0ZTisT47XeJtQbdzeybnq8Ur3gehZL26fZJ0A91wj32YmyJTY0JuGMu+4d18NXM9XvowE3LapsHI2Rt0QyRRw/EbfpYaJ1jRqXGR6cyoKB7e85lqMmfFyF6YdFFXEHwlzzoy0POiXNqE2GfyiPR5Pmyy+n8f9L1LQ367m/zCZ0QPxnfq4tkUDP1ct/BvtsPhcQ24+qXv1dr0LQ1NWkgUWKhdt0uua0gjHgnaWlvO71n7ihaPViRNjQCwY2oP+EqdDNxIQny/SjsGmTHiWFFQn90yZHnsrgl8ac0TzPKPlYsPFNmMSgEspf6frXmQwLmf+WiJ74UXjbCnoT829XKstvFbv5JU+F/vX+jxCtuX3/+v3zz7sWyM+5PY4eJT21AkmxDfVhN3q+pN48Pxin7cSdrkj5DPun+BHdZD4dh31O4HteUdtJFNRU1TvpzRL2Ys823ldITfutCn4zScZkevb9Pe1zLdjh2wM5vjF7v20YfvRyL42Cfbat3qvzFdydq2QgrvWsYpawQqTnmiIO5XfHSyXfoVwoxaM1uAXh/6jrECUTlsCEjnvtQDgQR/4eu212veManA5PWKDc94+bV4+8DzwHWrx+rzsMgw2XSvddG7tyTDiMVoEHuyAPeRnR7cXMjljech6p9Tf/eT6b4L3w9efMiAX/vbffvnJ/+V/9+uB+1srkGcgB2aE+DHZFgEaY0jNE9aWkvx5wWrk4NtBK9bJCkbcAescnrdjkrO8BSpCSgpV2T5FmexOIHz976sZrXcTyK+lDuWVRpZEeOvlv19judZYkuq6Ea5QMd+QOQIYb4upYvt7ompDPMewj7gjnEct3r9nMdpXy366Nfh/UNlXG1sRt15H5etlGMYyVHW9pbye7d241L32Gl0ZDffKZjxKFj2wKCSeoRVecCZMW4ddFJyV82ljvS+ChYkbbooeRtHKsup7aWB+lOCuEaQcioEb1d/AxnpBdszr7bxZT+FbGQFDWYac7KI3cchgGi810+S/Sf6HaZp16ctn6bNnfLeK2y5vPAAAQABJREFUBD5G6vVscJhjSKBuhOBb9Xi+0LyVQxQNYb0WDk5bttnqVks8jetbngtZ4/rujiRxUXQ7PhydDQd573FDO5bUsl9DUB1rkMHpFI0ZAoisd1tZ89KCS04Jl3S81qOhhGkyfFzCldClkZZ2v+SPTAQKow8CwfOetwgOGIyIk3KfNVH8tJ6Hb2v/Xgj9fpx03hTafibZfTP+/3zOx4/lId+9ndnuGJBL17UBwAM5pXnINV1lNZ1x6dmtypgzAT0CBa8M1toA/gwpweWvzB2jE54XU84bhjCfIRqdVdTKrbdkrmEGujsZ02OzEZO2327wHo0sqJmD3sqyP8FnbvGikxYX3uqnC9cb0oq/r/+CU6Eunv3T/893z76X9/+yMPj6/g6njuP0tOVJuPuicS473qvGjEY4JBc+q8vgJ2DBDt/KP+pwKJYrSmIKA4PutadkeEO9iipsJ/xWlxcyhLdfvX721ddutMs8pdwKse/UizCEW+PaSIITeX2JcHvGBj26JnElqXhKHx6OjJ/xQA0Z6Rpl+ByNpMnqy+39spAAHsFZey38kxYCyRbHSnn+w+r0jDYezXrBaPogp+0HDWO90xI+qxLXI6djK3BlQyz5P+STnOBNvBCGZSfENhcSvEaZF3YMXVdGbYEogEXkt9EQneVH+k6r6Nmw6RzKl5/8+oX/6D+qlD9+/SkDIjrSfq2/f+tcKI8KQ1gx+2HLUfgMCqEY4qgrSQgPzgSnpzW6iBB43mgRtXSEfyWMQENShJVS04uwqgFHvpGH8maC/9V6IX/Y5MS5DqlaVkmq/Pfz9t6ooVKA+Ur7lKR1Mi7KbeoArsFWorwUojdzEYhaT0SNS9FtXydreOKXGqv+jTYW3ico5bFyw+GDDEAqLCHwO7yMS9Fj/NPSPkrMXMT5pD5ceDuG6tZlrhbVCmFTasw4eNuL1SJhHu6El0DCun8nHouV53w4a0schzfBynAY50wJod0R8g6ndOjbjbjzlfYXfL3D3uDiF5rRyijhCiPeBHxCDI5SdMMnXPGJYYFzoduAZc37/YZIbmeM6DZDfM7gequy3i793Yzg3aTUyQw3mrvYRsAq107mqguJ80TX0iqRPiVD+9ZGhqG15yxi6YpIOOwxSJCijVIM25QrxYc3+Nht8DZhqD2Q2QI3DMgh0iMRci6fCiwJEViPhTLVutaYy4fhSyORjKd7yeghja2M4RvsspkvUr9/88KNs3dqgG/kyb9Wb2HH9TBiKYSLrygz2an3tJ5C9btyArCeQvWw87KmDarDkyc1I3gwaD2PKZ3RhCK8CYcMAKOwtOH0iT0t9bqKmdL/NHne/Mf14hif/lXcyp9TSHl36eEwJOfteUttG8Y6N8hoXXvOYDZmlT6uMgU2xPXmL37+7G/kOf+jf/j1s9/54GGr+BrWSWHrhVim7GNfJW7or3H4ej82jqpmArRJ4YzKpxlXq8sI59jQ64yVuom/6mc6pEj38Q8uhrDwIMfPcOWVurzvdtr2Lz66FtkXzv5BvLxf233YYhK9csPRqnzKVwWjYSKwPsGcLHOixx4eaAf7XAag0j9qrf8NH1n0EwwGB1MlLy1HrgNdIu/QF9o2x3CbjRPqTbwHS4n0yEe1xW/fe3r2xXb13yVX8Y/U+6wsWRutSiytdj/Hanq2+qzsMBgZgTscruY94HgxQsWN1h7oQhuwXep5/IT/dE10WVXYtMHFi1d+bYn+xJ8faUBSVL9GqYyXlTojAZEhrpADCsaFyalQyTVMyKeS1/hO6VR4eQcQ9gDTWC7BBMRzxFwwJtr7YZXbiZ43bxVLc29n3+z+s82F/ESDw/+DLnZ5WV2M1Qt5v2r6duW8m+J8GCyrQAOe8obnkVY5G8YiJL3oFQznXp0JRdGHwIzQlvaV3vfGv5w3/eWU6n9tmj7BUB7rfb39FdvYGTw70xXJyhsWomAnXL2/rPFsnL508jMIW/cdElY/UdWETC444gjWrAdVOTlmq2DGAup4tp5TL4c3JNCVMJV+w1gnKOZmKFGDhHcCeitY9mF8O4EyYSc/gSJafvAx7HecjXPAnUKPBoc12txoT4ijUl6r1/Uo98YnZsNsq75Mnm+1VVyiLKzK3WZGXo/KGj7hTf4zDOfLa88VvTXnMwSqIl3wqY9/taTVeDxvkxKhICky34cI+SlGQ1Fboog3GgGepazNi2maK1DhpZ8y1NC0KvSH53on0a2x4sbwCc78idJ531AYEJSwttE/8wdXMkrk91m9gjc6T+lvXbtx9totezjC22xyclkxwTjopfxcalvT2PBEeK930f2lgxeblLdJEp8oRJfnfQ+7srJSn/W6tjky4GjAm0smxRmnFPB23SM/5lvJtIMI8/JDp4193SElHAk9bhEB/GZA8DkcoAsHq7WwFv9NypcODf5f6OypubO1z0/6JsirP/Pm2b8e/T/zz947+/bv3t+XFc05XAvuzZYmm1a4wuAFe8edpPz15rQn8r1fj+qZjM5Rgl9hW0FZxvF0+BWBJ4uFTP/D72I7+C83BH2rTzW8cfvZ2c93+vZ3n1w7+/UU9LNo17viBPpaaCw4aJNdXQfNxLYyzGEod9cqBCIn2ehdWn+10z9qR747kiOQ7HFULUixv0I/5pw2rZxvdAzZF14lHGlbPNTQqGEsn+om5+uVRxOO10hLW70Ybu0K7ETK/NCxUZRkdvEeIdflfe2qdjidEb22GXCaHECqRznnpfTrqVYXM8zBKOgvb0DOrr/y6xef9lWbo0WV+bzyQB4WIXXCapjBvsoTV/g8lhi2b54jUpoqDLjVRiE7ATICdhHW0h/j2ECYBM9zLzjSplSpp+9lKb+awvpyn2vdQYelITIqbl2/Wvq/qDperbdwIUWg95FDUJpwqgVs1UbvGoN8YyYEwpnCHJ4jS5+iYQnM7W7ymEf+c5X739bL4bXxMG+bByn7VmR1V1cb4qk8J4EyXJppaPo7Gs8No94J3JY+oREPp6OhBKg4+ElfbYb/xKy7xozig8/Qhfl6Bz1HTP/SFuWTyt4SRylcqxdgEcD94GQi0g3NSXT/qOEIw2b+yeMyPPZH8BYUbm0gDIYdtIzCnTT7nRSSqruRwXi9hvZhcdbZm+twNpnFRByAOylkusiQlRJiJQyrs2QkpbTJU+yJr/YGlD28M8KsR97XPkpVI7Jxb0o9Odr8B6wJd0DHJoo375ICjSndi/CsVHlUPCW4qsBxcl1+Xp1Aikqe+DFl6p2MFn0hzbDFJBQbOGZJqwvGj7TkEbQKiZdoyCRvn9cI91NvBr4nMT9wD8zB7uooukMueOFfNQNviIFmmUHx3j873dezOLU18qGetJFj6AMZ4bmCQvxkrQdPHhdaK6qt/WlFy8O5Ql3xcY5Ej8svHe9f2eXFKwjPcODZgFSEJ7Dj2coeTuEQHlZsvfJjr539dGfLfenzH5/d6xyth31OmrLylcPL9YpW+Dl91d0l8tgmvIt6OrzlFOQx9h+K0T9ZSZ44Elr+VmWNgEDBIT5PduOB+rrYvKjhrMvBo4jfbm7pl59dPftG+3S+FQ2od+Q7HqmgjTiAO742R1dZeh/K8tseDFWFzt45eMuKR6dw+3ukleMAPNAL1cu3h0x5S18iy98NNTme/3AmrdRsFV8G7uO+V3/1ah/rSrYu5hRc6tBKdagE3SZl7zmAcN5KLLwX76Ir8CL8VieMBytXGPxXdb06rmeLdaLLNQMT9DlYeWDNATWt8acvLedPXf+3//I3nv5f/7W/8b+MW+9O6qUYw7pV8LB2g6V7LX6WaoUXuPvBWM9QOongCFmYcBEJxZOPHp997/uPO1KZ4or1AT6UYs8FWH/9OOHwpUCOnk+afr+eyoPecar/pzLrLaSULLf1NT5CRkBMoEuz8pb2YBBatia6dIagXPNwu2Nv1XXg0TtFfquy/5tLfTekrjrGwXFjlz1T0oZxbBSybI+fUHI6YDSBON4VZ/US0l2EHI2UgZ9wE9oqUA+FgmPAiCOva0YFN4s/YKBzkJb24Ia4cUUJa+RHCjRR7GVIEYL9UY3jCW27yhyWwYY1oMEozb41XdmW8/pIz1afZTBeDRavxflVkt8rnw9mvV2j/fF+n89SOCfrWoqUHnda7OXTpLk7z5gAr+g8NZjuPyUwhR2ahqcoY3IXOibXKWe1tTF6d4YIxvhjuAbapd9PRBmn/I9Ep/Be8JcMrEFWB4wHhJQFovfo33AFEos75PwEE+4RdpQjz8F3entHeRASacJnvaPgbVipdFP4FJzyT0YmsVDcaKmi0vHBVm747ej6YtTZzo/CgHgk/7mh4ElOwUrHAAF2TqN05AyteHRKO4OgRPJUnCziGVqwHCMiGm8pLnBLGkHipauFnfgEtzlpwilzwOQrrY9Q3bidsq5H0qKwQBWW8fW7mmJUl1ahHfdgoi845H3lK7Rn3wSpuzeae4u3KcvReKobjWF5whMOhCb+vmzOxpEqDNI1CjTv9JvJK3eKM8gfAM+7Jz2FyX3ybOiq6MoKv6Uq5YrxfuTrVlgyXfYNa+NdaQ1fm1tc/tIoa6s0uyuJDuFEir+ewXZ+2PYJhfvb6Zm3cqKciHyz3rdv38yQxLshIBdETrw5huYLwpPguWYIMLN2ehiFI0yWJYomZRvNsLjioEj1nRJ0S8Z/68d+9b/4v4P3J69q48+6Lv5qhfwCphwN6oTYCe6Eq6wKR8CUgLQL8X5U7LCMAEpySWMMwdubfAWuEQSAsCBdQ0pEkjubrj6Zp5yM5PlePPvD9mO82WTUT/bJxw/rkWD2LGmQGAETXd/s2xw+fcrDt5yXwrQRDp5TwsGmCLRbihmv1g4LIyBQ1ZuATTETKssvrfD6ybrEv5mhwHApdEtZfruunfVEyFTUEV55xTM+hqxMPKO4ZlEF5S2EoLQH3XA5+HH0YkCHs5VTwYVneVqLPZbCb1f5ly4CdjLsKXzeSPAYq2e8zNIxSD63+7gcVkE5AfndlvU+YOaKd8kXup76l9Ivj/INWxn2+qnof6cDLi3TxQH7HKwg+25LrdcYC7tdeo1onwLmZAbvUPbh2gsDoG4JDQW8pmQ4KTiGbbahEb0dKSNumwN5Uo1t8NTgOm9cD6BG95mimDSHNQMT3uAtjjIcRf2p3BOlp7Z3pNMTwknxK7WGP8cojXC+r4bM8Oj06lZnBAywdfXDrbwUorkD8h4rwzlcymYSVvYIih4Px+WZUqecx/PS7Z4nHojqFF6F9Gcf/8L0YAChuc+4GKrCPyHxZOWUPjRL2h+rphyHgcbqiz5hWAYoejbs5JUDxxjg1+LxIriMUe/rqblDRvzoqNR6MnoMwmYQaysMSLnmDO77H51m3Pq7s1dSglc/TpnXA6CktCO8JAfoHNI5lYZifIdlPK8ovZDziXXzN3Fx5anjYmtLSjuv20IKB9NF5vDE4oCrrXy704FVv9Bo2x+2Yu6fv3DYSPm0zZzSpG8HI0LGAYv3bYA4XeAobTJcHiVWcu/+ord27al0bNR0hLJLJxx0H/m9Hs07EkUbCs/JXXfP8ATf88elf5CSutdg0KX3HuWUtNoRH9VHVniLCOgb5Vfe6js+HLoJpgcsJairrUyET79xpvoyvzjcC/tswjxgh3wnk6Ptwq8O2I/4syb3I8IJwq9kkf4PExK4VMA48cOJIdv7YfmwYahOiBFDGRFginJXYVHXr1zguRPIKhZwqTTOar7wYMU8Ssk+hjW6CHscxn/QmPtPNxfyB6m271y065uC5vUn+z3bqPVe1XWloRU7T+8X/nqxB9tU0qHQMUm5uqEEzhwEQ4Ol8LZcmPdJQKQhLj+TAv3vGsayauNq3oEJY/DmVZRmR3/3zvM4JtYTEg1qUKOw9BN65Be6uZDCVmHK6t+EPxiK9L4lsvW6HFWyvIW58Ovg+PGyxnvCE06HEVEO2hrzDf7zynpQxi3JLZt9GTYOWj22/RHlUzc8qdcKv54XxIjXmW/fwqWzn4nvN6oz3XT8vVYMhfL9vDkG6preXvwyfDUNauKUN8ZbbuI8UPEjjFKYo7klnhR+9nee4lYA9XhsBI3vhrQOlNIAJ54kLotfGcHVOEq0fxRR4ZTT8hU6PhGxHjxvGCx8TNbm8oU/XuE1/qdITopHeUXW8I60y8fjhn/Kdnd1l1JUL5ub2dBWOJdmDR1up4KP+sQWWERDvw3/pBAYWCuu1gsqZmv58zw3f1P6GczSaQf4B+o89srTK8CKHVcS7mtP4Y6uHXFRvWh3K1felLNevvIPZ67n6BA/49DzvPziNaop92Cst6ICwQuPcbO7hS9ICmRBB23unsBD91ZF2ZBYQu0Cb/CQgdjQZDDJ6do5PBhl5xIpL5la3Stjban3CvvM2KkvONXuGXv1vl5d5XsZ3zkePc/gJm+fu3P57BeetDEweO8n+9VmMttJEsGyT4oO2gbAwTxoImMBjm8cIHWOPbAepfsLzuZLyn8+mgGN3I7S5uxEu+XADIjRAHpleiv86I4KPrEw3RWNekIP4tM32sfw+p0nHWSZO2fvjZWLSo4/Kz/UzuU4ZkRqsq0e+6/XtfaB/tPPPK+e8rFnJHk18RResmxBUQrgeeW6wvJX9vAj/vyZBuTs3Rv/+MJ3HzV//GnD2hhXpfqXwLBY81RhR7D6d1xSIKtfD/YquJMuuZZqgoeQwlVCVWeJmi4t5LdsD1N60VO9HFN5/4cNYiQ6YbPjDr7Uaqyf7PsfHycMjlKGBfbrIlL8X2uS/XpzFtsDUsSLaShMhp8GCC3w4AILEXoOhfecmth9B6QV1Yr35PjC2VeSrddL/zwFuL0mlYcWjRpUGwc1RobQBH2x6UfLkXEAPf1JuEy045YwAMA4cMPSwovQm5J8hxue0hmjlXaGBBGglPj4J1z8IrrjyoFbpwuMNpPmjJ27/RqvNsT0TqV8PeOEMw6E1JO61R3Pf9DOW1/J+2J1+eWMp8/kMh6Mysch7ERidHyvXt/tuOYLeXCP9MkKmPgbuAxE9+prm9PglYBuYjBYCN34PiPR875lPiDwp+BqaMkIOrUNdGOE3d9gzIgUT+DmeYaX+KBuLH1nSJExwM05lG+KtjTHRHDJlY1h0qSYeet7D6y0897H696rI0erKGFZyHVKgGGbIQinIxL8HjNYU/Q86eguNFTlL/fqu3jlVg2OQ3dcyRo1V9a+DPMRyi7tYTyjJbhoxKa6J8eqqR4XFjoU7GRBGxWf8TtaiSIrGT+isQxHLyPv3JAyvMcT+QhBcLTz/h4wC5qsjp/hpBy4F47t50tHZ2BBR19ytjxtQFw8mC1EYMTnYJRX7W6YsGeXEj0eTlNwRrCE8OkHITh6DPjmSvROktGtCgUETAnjFVgM9D5C1nzIX+1jXJb2/mZ5nRAAoDZt7g3Z38rtouSPVljsCgqr4Lu2SlJ9M6A0SM9J6uo1bMZjegSv7dncYY6lsUrTSj2HkuL+lsTHH6MLPl9g970FLKSEc6JOvt+E+nt9aOr1p+3bV2d+6hBVJyFdb807PpE5NFVHxIRzOPTLox2Zd4OzdkFPf5JDbFTgRYZDPW0hRvqnan104fbVf4zeH3WB/SOvC//7/4c57H9YeQEMaPf9gewhuasR3pkCP7sklB62hAqd/eRZRUpb/LkCxFwTXI7r5j0QIpk2xBF2iqt+doGp6p4F8Bv1At6pW/5WnrkG5SexzowlgQ6r+95Ow+wYidL/IGF43LszhYiKbqaSCEdsqsIYgECcyhIGHtoEwUE+wzJfqszrVTQBksdy3OMo8843ahb0sxkEBZwuAmmPxVYHreyM1opQtl+VFo9UiDIZMbTjmiGd2n8/5u4wAJ6llnZCBN/ThbfnP7GguSnDRJ3ekYk7ugn+b9bL0Nu41RlfPtNpueH3Xz49+8bLJxnehqQq65c7tuKv1Jt4NZrtLH+tumpt2SbNP6jrDx6jZLz3fAMnfvGs9SLs9dhO68rsf/ilFFVW/xkU3efazGSkInZ5Rwf+T+TK6ZkxImYMCYVwyFL3vFZGYOkPEMXVs+Lt9q5uc7yOy4quGuxniggu6iW8JrelUsYME4hD6oifoamxHcM8JdQGQA2GMoarAtVPZZNxRm1p1vAroneNm3KmYMUNH8U3Vo8FjNZWyKRErPS6YBLVr/OjbIY0qcogJ4gzHiujtDOWDFB5fCukajvkhHI9yYb72nV0KX8IGIaisOCECOHjUbAIGqRKqKdD5ni26w0tbZHo1HMgaMUfrD5gbPhL7uB9YpltH7Byoq8eICWJrs1fVeYWQYAQjoM5uD3POAQPXkeNHryPp0srrLSyuR9X8EqPHvNpR7pyF/9aJxz/hI3MybLWhAcz6lUiA0rXOE9uXxstTnUFLXYv9dqzMs6LQrEFLtr4fuFjOFr7hjJeOYHC8K59V5bJO1eOvqCXGBaGj/ztWJT0hSX8nGt65fudcPy03f2cJsOmhG11Ptk82vxnPYzo1bvFihKWNBrjvXhhm4sbH72gwZ/K7zZhKdXk+8KFf/hXfuVXHJ7wIy9+4Z95hd6vRPy/iUGryzi6ypGjMA1nE1inV5UjeF6PhjJsCihUvjXg3pauSnOpMGvCDy8E8ws7YiaAursqphHTKtRyVp96PTv7xpXOvmqT2V9tRcV7nfz5sDDlmmR3/MblPOo/zCu+eRrBt4nplZ6HeAWoYN6B98PDTYALs3YbnMAsVjqpKHu5Yffjtcj/tgq1u3YCAsMI9NnMu1etUfJhmCU9cApnmwsNE80rGIEJdGWdC2qcLIOcDNVRppAJvAoojo6jDRgiw2dWf8mn8qUYvD0RGKJeaHj5xzz67K2hvqcxydDetfJrIE7Ffacj6/+wo6/fj2+Gt6r7Cf1bbXz7xeabrECDBi+LYfARpMOgX+qb64YRtWu50g1resm4chkB3ncG5FKWXQrfM5/STIANNXCUSlV8VGq1J49hBjVlBi7AE/7qY0Mt8UKZ5kemnAzlkJXihwSe4BdrQwl28fwPxd07RIPLE7tYYyQD0g1WMCzhVoUH07uX5vCkk8JwLoPY4TRyWWP/IUXQuzEee4ifCdvxrOGb70BPtGkGxxxL4eOfBl5mqTXwlPq8ezQEm1GZMs/IjK7SKKeqHCwKZUoQb8VBwQUkWYbLKQ1DoY3uXCmw4VSeKD3yrf0KR8wB6ILVW9IGA4PHE8AHHy6VX3wpilMBXb2P38bt9XAYPfm5+8H2iYg5ojieclxeOPZTqp4qGdjkf/dzOQBUGb6cd5QVTPJQGfhKPvHFtTZdcU/bX2KYFM2XW5H1Vps5X+9grvczTkZTzS3SMz4RYZQgrTDY2r92aU4wzGpLluarVvggX4HDaPRzTMnjFswcCYYHR+u50ZATj9D/ONm7HrCb5vNKNVp7snBoIyDh61DZr/fN9p95+Ozsjo2ctBHmlA97h9WIHRKrjxlyaVZPjP3BL/jP8ONvDXTVRF5O+E8XR/8+OHXp5Z85fBVkVP8518WL/9kmIzHAhbquo7KHWfQLjPOnNBDbxKXEEXQEHxk31CIAshgY48RotLpukbfeiv0S29xWPGK2sql0dj5Lb9zQV9u+3oZCE+s/kYLbiqVxIFbGbMeIa0DfyTt+mkg8qPqdyW8PO/0Ee4JKvhrKn7KzyghLDmFJloNj/YWuJAM2hViaNwLgOxvHLm17Io5Ta6ldv8MgBTRw6DSHsQ9mKTMc9SiquiDGq96HAzzKAIOjAfYAyS69Fw2AJ8SgMhRWhpSwyg9ScfJgtufl2d/+eI0O+8uPXpad88dxMOhrmN3QZ19qa4KxxLyjrRSpHN9kt5rqF5r3sBDAaja7zvHv4cq5tNNkH+Q9oecQprrBUaE20bL1/cb2F+9v5Wng2kAJ5m2Gh7zzrNDEa6/eL9l5WJpjkpC8HPI05UUBFWlsnSJGqL8zYjW4WvpJ2QaLsvdbSwnOEspSHj2fvFB7I3RPVhsp630eVvoJQ5ICj2Upc/X5mdGubHK2uOja8Jo8LkblZByXJ3hb1aShJz/nFX9498FUh2ihSDRuPO6uZ7KJ7Lx0Cnvx9UIccYHOYxVS4dG9fO79ZgzRMBgnWvEN3fjMeGuDZV3NVPwMbEkOqx7dyQE58ztkrEf0MkSSMYijF+96H87BF6m+8F32Qih5n60dXt1nSHeuVp4DtBj7pSu3/8rt2pCuGDiM/up85ffeP47G8JTmRI98KzfhniItL2fhWedLjYcVoOd7s02GX0zOHfCpp83RJP+qDVxAUIoebzv8c6Hej/J7LW1ytrZcOcoq7Hn83fYAdPRbOy2cE3eStN5ojPZjlfZehnKfsC6EjmB8jADsWyMh8f2M3D2nCmu0lXWuZ83TrsQV40/4qmN1fyQtIB71On1R+OKXBqNDICVjmHRzcIJO6Wvv/1mxf+aFJ3/mdeHf+fe+VuTvVnNHIWEDcG+7JmwEMgwIF6SMb05QquA1VA3FhYmlgytwJS7dQeSlvKzrNQbDViOMpSzNwYBDKfMmeNx2eKtcBuK7zYU4aPFzGZBX8syx0X9plWNC/L2U2/cyIve6f9jdklWVS9ApJhXpm8kEQN6tnhI3OPF17SMhim4n/Rr/t0T49VTkzfakOHwQBw6vgV4wNHSIB8Vg3Te49mFQzqeqPugs33GVIJgTGBiVDv2GU+QBUwM3ZqqJZUb6e+BIWEv6WR7wjjpSFkqlx49zgwXHxmQzppYeP+yHZsNxNgVaTWaHLAPwlXodP/dciemp8jBk9xPinVFW2JXK/iBzYXIezpqCWtg8UgTAn0Pxsq+E+aSpndVwNUdw1D0a5A1nRsNQDOehY0HAmzuocD2Y3o96VbPSN5fSODbjseEdH3a6mVdGqYqvMW5VUWWNC8npFEffsp7yyRiGXhh3DQeY9Zi8zuMntyKjYwYq3CiypQ3mFKVGFm7oBFs5sSmGl4dQCBewQwst0QBOvXgoOk9S/n0pUTo4idIOahNLB86GlbSrnjfMVLm+RdLw1PZqzOiUl9HoeROjlEcgR3MPa0vgFj4DoLj+UcocnhlnIcGYYmd0DpTKHdyhDIHz65w/Ciks2QR3ijz+QH5lVf8zIqvkEz5w0wtLYc1wV2efdnpujegwgopI2ZONKcmetQeezuZVkkGvW4CgcOVzqOC/GI8Q6OcWfXNUgv+csRPWH8Omd+60R6W5n7cbDn89PeDzylu2DZVS6XFAvSz7tIHTrTlTjIzQlRejtFHvcWD46KFwpFyf4eQJXqd60NsxwnHI0jH57lvtkxTh8nansQwP/yAaf5ABebkVesWOp8k9XatccoC38tE7QouTzEV+OX8udSN8w3vyoQfI9NTalLq4cPF3v/Srv/q1I8eP/nuU9qPjFhrB68IMiROTghzDVOrJg4F815jjfrz0cCB8CNYpDWEVn2BNQAIcjWfXWifuvoovhTSL70mjU5nHaqCjkfmrZ/D1hq8sIPhiY/Q7MRPsipKf8iUoX2/p78e9f9iz73o8ypjAzbECsFKBYbPKAvdUevdAlUAaE/M1hQkFpr1eY99qksIYD0bjOBNLz+QQnSnBgMwjL40VTbrF66Upt4YJqt6W1RbKc+2p9Dyaw8s46MebpQkhn8qkGk2IWRGysfKEAE4uOO83AZWrvJUdiD1rbla36XURNfs73s0Y+l6IZbsdzn32115e3Xc8fPTp1TxG/SaDoSbkDRXaLPgDqzkqyEQgQ/Ss4lXjs8Ia2V55UHIiLloMV2rMJV/7Dr3RAK+KCXhcJtCubpTzPMhg6/lbyrlxX8MgeZChIFEMiYoOoPvU+PCJT7zdKV+NCqzusfSzS/C5gkqgKz95MFTkjk8Ik+f0z1CL9KLIb+zrKq0iDXF5Kw8lGrgCSV//VlDhkkfbGq8E8jWRzIjAfScfCB/+6A1Bv/Kk23Ya7nodlC/c4sEUfgZmB+7pTfW8CfcVBiEPsIDXSZ6CD7MxI35zDNBx0NPjiQejTW49oGQskZ8yjglLftSLrOWFT7hvJZ/66HV041nPyyPQ+6mHtZ4R3tgYUth6fcnG8uIT0P0GH7/PK4+MVEYpp/fGL/ngAPfT79h5fxibgSl+pEYoT5sM3uy0gLduXTn7QrJ6tUbxuXrcVnLSKa+UwKKRHb1SXtsBrJSazPash8Jw0FPaqn/DaXfxjFDyrgF0zaEq7Y4t6Z0OpTdmfPZ8DFs9TJZfZOgMjzu9h3P1KGA+SLaDTRGBB4PpRX0e8PfspZDzXhp5XN0Hb3umIBYRkpkXYURmSAqgj5b7CPtzh6+kOyhblh/9p4mtX1FBhENFzlqW9NzLPbw1KmiBY6b0qgqCa5Tq/hS/W7AWLgHYCdHN1jjbMOiqbtcbieyYf4Q1xL0KNDluSEtDzebMA/761ednX2736lstF+L1r4kHV8XqsTjg7Fv1Ph6EhW8y+ILh49SmypmqXyWGxwS0gsqnXBPtUXCi+VDy+gL+v5Ow8cB928Nk2HawBsIw093mDfQWCBSLT0Dgcbfx41Wkyut98eOMMnk2eWLQqFRN3rXnojUDP2KDL/5teFH64MMUzgwI2OfX4bULq7UUbm0Hg0Vw9aaMydqhfrk6MReyT8+W9hfq1X2+d/z5Yjvuze/4BKtGJP8rlejbLPdLcY7xvLPwAZdS5WHB37eVh1IvLxwBUn7KhyHdpjiNuTplWKQ12a7NrWFWzwzHJQKQMkX3/vMkDRmdaJ0y69nY9hoXb6T/k1tMpaiwhYHhyXqWtguOsWHX4AR390WIlNj94LMMMxrGolvF0yqKwZ4yX9KjjqYYlKv8ytpwzwFptG0oB62UUnTbxzMD5Ru40oOl3fU8zx7fhq0IyiDY2kzKl6Gcx9+7fJ5HJJ50lAfDe+70WeVj6JQCn5GinKuDKXAcrpwtCT7BmFGoREXt8hBalbAy1sM48RIjjrIPeRsO6C9ckVt62309I7hxBCqH03A+NLn85VD/eiKrHHn7zVGIJ3uWRnj3IyAYExwJgyu/ePV2Ysfj6uoFGUjmGZHrGY9XOpfsbrJ1u1xy3iibExV2BE9lvRGsH+vQNqMRjyc7zVkEkNN0tOejrrROw9UW2BhSL3Zt8pxPoBtlYITc1zsPx9VjvGAwtC3t52Gy4IwuTjP6LE6xGvVex+obGhtv0Ne12x6VxBnGBxq4NwSVwG3ysTDyieeHcZ/TEy94EtrgIVe9Xrjw/78BObtz8x+FxcN1e8MovoMMqwk+hCcAw1RwXA7hEXUKWwXKR1AlKb/XHdPQA6G62ZK6a7rn5dGzoH4vBeSohHRHhF2te6XLR1HqQu5e/m+0usqS2Z9N6d3MVeMpfzYcVjnOt7IvxFEoD4P5IDweh/YqMXgvCyeIB9MJw6EkCYQVXxuSKgEzqTupSl/rrzlAQ0GMh+OhbyY4OIM9x/HVYVIaw1hWah07W2vIlGcwJvx4VR5lW7Pf7bg0kn4CCJoLvmAfOfp74vWhVg+lJe78PUyWD0hpCZ1yQTsG3o5eyMf1mPQYDNH5VocVWZ+Pj0TR90Pw77tPnp49MMA/fDPMwbbRyZwSZcRj8/0RSgocY7dzK5SZEvCD7lZelR6e8HrepObLjIoVMp/UuIVRmtsUKX0Kxm/5GwqyZ2AT2qVZfdXI5JlcVgD6MAn8DR11C4VaYMrehroaoPDtQVBW/OV9Lc+yHjSMdfF9x2lAnBJXH+c/8I/GEBDh6qaGO/5APPwUrO7gumHZsHIGlTSWdYtL0fge97zmKFnvjIeuHIa3JPspv6DzepSv1/EAtcPNu/Ti0FSbWQ9mvZikQg9Fr8x7aVxkcIYME9E7nFfQAQxs/+DMsDJy4XV4ecETLi9szvkYPeR4w03K6TdHU7IDWvFwCxfx61F1p9CGs/yVKU1w0Xk+zDN8TzD1cCb13ss3/sAXPuF11FcvAUBDhc37f2JZdHl8q0TojVudqtAwls2xbMsreZZvtNLSFJy5Th/A+kIGxJ4pDppWbnjcvOaxMlKbTvYqkxEg6HotdAKZgD9M0YMuYwcMBZoO3XjwkBxWPFELVjoqPj+pfLrP5eDHB4X5bDKRtJgDzUpYHSBc+a7BLnwMK0WwD552j3YLCciaq1QQjCfxHTzsvHzx4Rfv3PlHS/Dn/Dkg/DkJLvwf/10LAP6eMlTCuWdGUBX8GeJgoEoqaU/EzFKqJVdhe4xIArmfhhJB19thecO474nwqYXCKVt5DvVIbm3SowwPJT3PuMb6u31H4JWQ+VK7pLcnBth+lty9gmEBsSqLsXk/RWhS3UYd/3jZ4DEUyvWvZlL44RUchuOkEMPFqhl7Hm5UnjmQu3no2s7GksPv3MMnUATIyjGc2c7sKs0wFiEhVBhIWCaAlem/Z3jxDOgYcHBhnOh9q6SC6x8hnTH1Vm0eoQfH1INlhRXRpapTzIPlPXpWXwf9Fhg8D+Ybufs/1+dVr0fjzX7vNLn+OKXr86vmQWyu0rMw/HU/Bu9fYeoFPeiEhU/pKmvvaIqJzztoUA9jOKTH98nO9Drvczq03Yc2SK1LTSFwYoOhsW9yL7gUGDp4+2QRaYE/vFfxpVf+FB45iYHjcwbsgn0HjSFvGWr0jF9TimEZIBTIrzy8O4xHdyAx0X3FV353vbqVNjy0DfV2uoA07FPcjg8RUVngUCRrvPEsYYB1wzo9N1SBX9oA2VXuNizKZwgw3NajTC5mIM7vCJG+9+36DtShlEuXoG3DpLLwVJvSGKRRWozfab3ilE0wlatwfOhHuJcnB66AcK9ihAdnPRhlR+eI3z1cK8/v/Nrw4cqQuPDlOVrb4KTAd4RKaSBisUFQln11AW4/NI72wT54opxCj6Li0eR9lXYEjY89kqEryc2jPmiFzCfJgg8oXb99+ewLr146+7GGmBP5OUe3e/AZZpdavpnQf6V9Z28xCpUWGiFZj2PPOVDhra1rU5xFx+nbcDvcS0PmXdOLpfMqhIKnLxDtpncy/MVXyAv0jo3amDZbe9UG8EIGDct7z+t9KyTIWt5xggPQZC44kHZXcvVIbGZUCledhsqE9ST33+v49sfe/rzr4NCfl6K41O9/uCpC1JTOkWErPvaIkAjo+Vzgxg15VXwxi4vIQ0BV8kHQ0RDqXTQh+op5kBLqPRgPVskIPCwzRZASrpKPoSXtrfRRbljlGxmH32/z4FfqhThKXBdShVLOKuB6YsAo/Ism3X2fmsLUPYz1VURDJ4XBVFp+rLKu9DK8x3DEpwQLtyJLnK/t8Ui2aRC+JXAiL9rMh8gAv8hYL+RKZdxpueyunqeoKkAZrn0kauLZi+L8MgDzYsJ1Qhhs6QkxheKfDYc+8rTj2MNjQyeVqkbQBtbxx3t09UesqmE0N5zV3R4RZbylD1cdOIvHKjjf7daYJlbh47vOviP94UxsoENo8NJ62/TYuyG7LVLoWZf8RRuVCOeMRgW/tGZSo+MNu7SOBNjE5phf0IY0wE4Qzuc9pryOAouIAECVFd6UGJ5W2ECSxTWcsNvR5Ckp8yaGZNaZCoXzRoUIdT+mVx7eB0zowTq81osSrnyMjNdqd8OUpZvsMyrglgovgZTJ0OrxVcneG/aaJ1/+0aCcnKdD+ZdD+d3QhLYBG9DeC1sbLCv81mDwsN8mzwv+rFyFk5elSyFrXH6ChWG0IvojjjHwM98igmG3f2B8pNjtRcnRO87HOvGr8KMHE1z0gA/no5ijDuWtPCVqG1CvxP6VRboTfktT/Q9e9KrayYWUeEFZyuQSOa/jvKjgSq9sBZCN5emlMDqFY/a0Ovy4c7EYdiy1SvByk/h3Xu8TuC3EcJbb2mntxqnSr+ZQcZw4rVYq3q13gj10h3aXyE7/HNQV0YX/hp+gqu3auDt2F3JMwCO6Og6ftcTSQ9s1kaD4utQ/KOeT9tqk+sDjOSAclNNv2Utv8pxzfwAsbYDH68UdPD+vmwCtvW0Fq3qTDa7VVwef/ocL+Av+YPlffF3+3N+vIT6Q8BDGCouLkXHkRT0EIm5CH8pDPKR3VVljCZeybiumnvc+5inGMCtpfB9dl1BF4zidQhniZ2K6f4TCsClPmJIS784z+f0+jali/+qLa+uOwuE4KqDuZrjdbV7iYQOZf9C3RT4s3b1+JscZBbQQ5ln43oYvGVxcET0YJpNmRyCX4m0SG66MhZV1vndM0EoyQ2GPBX7gkgMRG9neybQEaj0OacuniqWRD320h/J76qrHUiKCdC4IfCA9Dyn0ZhgAicHCN0pzA3mErQvnzqHxmN5tR7lDPQk6HhkWNFSnR2Z/h+vtyjj/zgfjWp9pQ1M+0dAX7Nf7sBjhZjT6BsuX8ts+n4fmIEXdd706eOOHunJq7laGwLEiDu/oUFKrWY0CvuWZYaW8rNpKZyy+fJyRLdslayVlfNB6tLqAFj7ZMSkrga6S8qb4T42Hwkugijniyr+Y6nGb4EqPnQdML/IXYNgGv078mbynPY4v8plj0HsuOiNqXB8t5Fy6hXsOWOQFb0+TWe1oR56ALI/4cHTUC9qG3XCMD+gfbqWB2PDpEehTWWKWa3E9kTXP6FvC4gtThnmTA7eelcHAGkYWRzkXOZkb0ApRJ3gPjpsrnAbjNHy79lz24XOiYdoTfO06xbrjSIIz+gofXvA3AoFf6khvZzgoBFOUGWC07HdeH2iA5+nq4egNhdcpLZws4vDhqo/aiPdhQ1dPc2CQAIcrrd670hD6rXoiO0E7ggzbGpK9WRs32vCgimNc303ObWAmX9wH+Tmy50vsIYIeeuRBbZ6DWk02fN0QfT/zJueHk87ZKb3jjI66pIvSMb376Y1swj1E14bitR7O8FYP6wkeNMwBEIZmCcqLpd7P+dzbnhcRK5UvOafM84a1orF57/tv33rr70v/F12q+i+8Lvydv5Nefvn/ngAoUZcazf3r5mEXouF8XtEjYH8KKs6ZUBsXDcb5UNiET56IuPvqjZiLAQdaYPHwI7OGRwAp2s5Z2t+DmauEGGdi3ZEm//zqs8YsL5/9xLOWBpcH83AJbwnCVxIAX4n7fi3xw6qXd/28MkdC6Vn5EKgxN1yTgqzkrVQygUyJG9uHizR3EzDCyfPnYV4r760a0s6SAaN/x6R2ijTc7zfZDuK5YRm/Ksdd+cO1uwtGwnibzhryJpWih2txM8TdrT7TM9NtZiit/BiK5TgufIOz3kc9ixQ+oQbJHY4E1FLBl9Ggd+GIE8LP0Frc8KDkDAxjy2Dd68iDLQwIgt6J1VdOS/6g5Vkf5d5/FL8eBmEf6FLf/dPT3hlIwWCJ9UbH7xr3J+ZBDDHFC6itp6rR9rwhII2nH16NAQ1Wx/be44b/3SkMPDzk9IAzFlD+peVkVGCTxYfiHB/7c65w1pqiTflTaqG5e2HqWbpQGpzNJ1DAbFW0ErA11F7x+qjRASDE++kMruFkeI5J47hfvtE0OspFeRZ/McupJ2BY51haC6loc1MW5Hs/6IXUEXbek5CAwVbmjJKiy4tHsu7ZDb0nmge0sg8j0l28Wzwb/RYN6EkK/AxIPOnfJscZnr2V/sSPc76AtTkLqKrD6D3vMc1oBJJhQ7/hMsNqKxyhK+uAvEd/AuE6eOrhoHP4DvWwGk/lOy77J5DwIEPy4FFtsfjH3dWFE4Fv9V16w930i6W8MwwxnJN6I2eE/PmWjpMonMSg3Tj3ioFeu+td2CFH2lZwQuhop/Gof9LOGIQSvF6/Yll5Dlew9TTk/UyOS7FPKxQ3Y9L7jGL5cH3P+IDXpWFI12sfk0qT4zS5KPwzuZFG2fjsXl4Bq1Nxq8JP/pML//6//6Tov/BiSv9SVw3/73ZO1f+aME3gykUwMQW+azwQjQH92bvHeBh+B2OKXZzwrQoiuCOy4JJYUnen1Vgf+d5laTGU88dDZppmMTXNwq3PfpxGMjRl+IYiul738r1WW32t+ZAfz4C8n2L9A4pfef3bMtPgqizfq6b4rqdZjl5KE2KVqhxKO3W2Z6pAXsNLobhQ3UhHDljeCsaTBJAe4T2oWHl5Feg07up4eXtYnoTvlZS3zXgPKx9z8KtkEJxwrVJ7wc8plp51MXFgfO1pRjNPhkfOI8EncAgqDHi/lwo/BnLAhlXpS8MofBy/GAE8F1a24cdQfdQc0UfxzdHOJIjBvJwxefyyOgmu8VrlFbwyP4xqOufYC+Kb31Zz5UniQYZcGQoYjeV69qBDKBuqvJy3R+nbVf9pk+dXWg1DVjZpnjPhE7W5gDKXl4EOkPkCY+O8WILvcg/OCtLTYMzLP0UcjeNZaSanwCW0W+cvigVyBWKT3PH52K1b2PKqb/En/KVblIr11IUX/SgZXFkj1gMJp0mt5iJX9yWvxzZ8M2LqRQ9GivGp8l2eQUfj4Cnfc97hygXuHKfqaUrjh9Lj62qIF199HLTEE3VNyZf3M0MQr9amFQ1mv82zHJpkPSHYqL9zxT8pCld0b27jxN/1nEo4vOGgHuSM5+hZY5ZnxBa2OxRPeNVmzp0FeKzc6tST4VBBkwO87sdRwAf0Hel77B9j12SbEsdrSlsZ2tOV4dqS2OY/3uw7JWAn0J2C0MZZx5rEH1/yfEZOKtOhMo8Zc8n6c7f604u3mvNZAfdMavd8rbR6FttXVTnaoRWPaFT25HxQGi4vHqYWsnyu3vIP+jIivId7fD/O2grq6DrqvKa5fOe0TM6DwnEFH3PGGwkLW0MfcZVU/Opq75PoIyxeGOLWfKrc9UDAL/DvFvKXuojNX+56/fp/Hk8/ruQhewil58kHLAdnRMQKl+dZxlOcsBHjYU3zSIcCE4u+if1KO0MhRV3LhtyaYx2Uw4DwWjRWXU2KzPDRNtuVkGImk//80pOzRwnCT724ug1/PJtjGIaH3XxIFf1xnvK324j4cemtEliF9xwmRyOqzHVL50cIr83107sgHhv2KlAvRJmESF6Gg3I2hPO4Y0F4LfAXawmgYbDzSfDAdZ14gNYIJuQTkqNWa4y4cUoT/Io6/pZ2Hk7vU14a0p6V1L+y4OHqg/HrnbBovI9KOhx6vhHfeVHSKsk8yP0SfyvcfxBVcL9f/EcaQzx2QJqS369R+SyoXe0TAgXCKXiM/pP4csQQ0pJgEhS7w8EUke80+120CTB6JxvVm41SLhOclM/5hPDGgIujZKas8MjKLAYl+VD+1r4jJCTGh+AdxqTia+ybGM8QSYs2Cvn4HkjlReeUT/hvrLk77+OzYbQI2Pxb2Uu83+S7khjfEQhePDk/gRoO6Mce14FTcLK6lG8Bf0SfeMoWq+LjFDuySru2hL7CScGKk1lvCpx+2gYs0LRhqHDUk1u8iP3CgGJS7nDqT9mXvmXmF3MeFK26GC0XJSXxhuscR4LXR9TiSxBfqwO/5IduEK1VnV/gjdcCqr7PLvVAYMDot3TVGbm3rHgGJUO0Hh98hkrp5EEf+VOe5+4L8+45IzJng2yF27N6uNJdisf3+pQuXusRcxocR4+NP373aisPrcjqiJMYczcwJs7f6fnzDUFZpWi5+092OsMX6okYdcBLbdbKLD16dHPsTHYfcac2jXTp+4c+5PidM1O7wFpEqkmOIJk016JtiPMxqjmU0TQjim+EoXhpyjb4J8Bex1dQxYzIysZr9PrD4B+/Ulz69ONX73z5P1/yv8QfIP5Sl8MVE6j/15BUiUOt8vs3YTuHEsHnVpeHoFJHBOH6oXwHsdh0IjAibIB65/WGsRIcCljk9EIPR97g9W90F2YpqXDvrD9v5FYMsbT2Ny41gFLcV9ofosL1MlSIyW/KU14nyH4QAEM394Nrg5wJX2hqPIfRmb9VGEwPI4JgytHmOyu/VIxTeClyeBv/NEfxShPmBGzj4ZUHn7WVcISzkpRVivJqVwc/FDUcpAkWeGLw0r9jHLRez2g+vLwtFX7ZAtp4Pg/nYBhQK0t5hOaQtY56KaZ22tLEDk8sD7PNF/7/8XZnMZtu2UHf36+qvvpqHs/cfbpPd9vtIbbbgBkSYyQiwXUuc5UbEkDKDTcZFIemW8ICJJAYJBKwRYAQGiIughSBZIeI4EBkjA1u2nabdrvHc06fqapOjd9XY/6/td+32iiK1N0+x0/V+z3Ps4e111577bXWXnt4LEl28OSvdNaYY66NnuyAdcou6h/BpzsRP7XoXZxh+cwfVSAX4cx99Cyc427O7ep5lKOwPtm66t/fKouB+aJHOEWMhymGpTwrSD7zISO4qkNEfGwilCt19ozEg4Vpiqq4lETvaLZHAeBDwiQ4kXDKCOXKJ2Sqh4ZBjPhuyAYhDRIw3DYw1F5n65+cu5FBL6UrxK5wQzGHGIJDSDpOpTaazhz4scx3R6wUjcfGNVT58B7QlbEUQmVvBelEqHtx05glHQVZ/cOy6P42qqQgBYwgDv/BUb22wBUxfKwe434LN66iSQNXZSgXzuWDUP+VMTuU0QUN4/vBdTRrdN4hP1ZBUdIpyV0d/Moz7Un5F0zxTrw0k7/gqZ86Vmh4kQdziu9T/PUBKIC7Ray2nWvuYJVf26l/9BmFVgK7/Z2DJZlVi3csH9fuwdbKjtEB93wGrGBnYfku+Zu5Y1/NymE4wPkuvIP3TA38A61WfDaPgnr5bseZGPBysE/Up6QB26kOQZ73Fbboyn1mNO/oeAanfjH9fOiEbMm36MZbMqf9htPpeOkjp5IpeE09A8ioe3pXZi/UGN6afUVoJVRa7S5btJtQCM17tC5u+/uHe3/lr/z/Hp44wH7TH7X5lq9w+vuYZTpCuSBBoGnVGd7CcovwNIy0MC7MLt65ep6hZ4RZCiYonkuLcS9e7bjiOiAwfirNIVLVe0eaLSMWZuRBcRBqJ3QiZRXvSPK3avjPHr9XeO/ywKUklIImJdSddPlWLpt7peWvPzSuAGZXjaSMoaxRg5oiu++mG77OZFdpKSLLhncHG8LAfIzvYZgjoBQUzIozpXY0Vlr4RsyxmBTW5Tkq1PCTvHeIKHUxH8Ug3nlg/KJl762w8s3qK5IxXMo16SZ/z1Pvyli5V3q7zyk/7j8SFT2sDTtd4YbVRhlfanRmoyBFYf352TqF7kgBUw6UzayWA6f6zlcNi7MiLahTb1UwOJ8BevUn+Pct0x3rW8eoRqUZhVDcQkcNqklMPssK0UfV5J95j17K9KS18AWNQjB62XWARcfyoAKY6FR8yPfoXrjF/uV3+Tu0khZcWY1QekfzoWgF4cA5KRUy8WlsUfoSUxbcUPIlcAaiDqpi3jRUcFSDQqjyCFd6ZkNpoh3ocwkmbOW3UkSeBO7sjq+cKQugYM5Kpcod4S1dbTfwlRmOYIAFMoWmwfQxRha6jnKiPMCqDafu2kMOuBP08sEnHOeqnCG6VPBWjy79eOpPWQZ/6M76Dh4lQeFIu63lCouHyrXAATKwuytzi9eEUcpwGYZffSGMRt5o/2kDeMO5/3tW4FW2+daRLylVgvRR+28eZISYPNdV3m0lnC/9hW0ft+KoWvyI2cDC4xaBcHJdjXgW3LzWqNzxPzbymQy/mqvru5zWUL0J++frRS+0jSDSD02H1uixrdvIHLwA7cpAdwaWf0PJnikTrOjivbgfL7r7Z5/Y5eZqDvrNIpRgrdMlqji6udCpfqs+s1JrS5tZlo2PNVXJ4VZxQ7PJZk9OYfXpb9l9JV+5vo3rxSc/s/fq3vXQSNEuBDSBRiC8h1mmoSMShg70dIasWNobtnOHvOcoGwmGQcciCcapLIBn849fv7f8gohH0NPQ0s6Qzn2gcaZEqOJpasLNFwopFjbAa7mpqAs8qLH4JHW0mmiIGFtuvpECea60Z1MS98pvLiNbDi1HKRCaLG0lznP5QbBixlyHzUbKokgOskYoCfLnQUwLiFpzvRCr/KBHNe5BzwtmabSiX/AWLZelr3yZp6HXY0msrSIEShMnDD2KQxt9fI4+UVebACcN8a8t4LHqRAHZ0/FizH+muEIFtmMAAEAASURBVNsxpV3zH2w2GD0ohev8SuW4HjUoYuX4bjRhtV/9b0UzSxu1tw5m8QLRiagYinK9Ez2t6HLo4pnq8ajyZoTXyONkO38dZGc49KRzsnSGY+fDuYZ6eDOcNW6whnpV7FETncJmyW+aGU+x7vVUZHKviC50FCJN9Ox5+za4i5t04T2CN57R7eYb0QvSglUm+dDaBsZ5Kc/44QHoeQje4ywZRjj9IVxnJZc+MJa2vD1PIaUpnXYiUMeVJt0k6a5OFaRfDJLouxUKo4QmujqBVb4xDJQZ7bX3b8at5glekCg6ilB94ab+fvOsOPAC7KeS4PZU0YOJeHSfvjqILx5Vp6VUtn2+PK45OkQ6ZStTTsolICMvwmfCrMiDw9CxZ3f/oaDd0IS8KE1/e+dKrS3gBf9JLJygrO7K6meUySixymvaYQRs5RupZTTcP2zxR4pjnTbbuW4dj36pDzQ97BiZ0xfrlVlROOJc32O5eNjG4Mo6k1vvWvugvpS3wqGhZmd5HZpv78qV1bYBfUSPPlU9bSmgUN6lwODeT//zoMea31AHczFc8FWr0KIl8VP5Ls08E+fx32FtaHTCWOadsVpqvsSJGSQExN/oMdm7D6MNTO0Q3II059CvF2UyuuaplxW/d+30J67+DFjf6jXFf6uJ9/7YX+eV/jusuGqntpN1MdP2GbpVdDF54CEunVr4da1svfRgYmo2wGC0iHqi4dmzubEw0qzSiMgaB6PPip2AaLuit+CcUdMopBZyLlRrGgLDKsasKYiEoTNkKmw60sxPxGSEmcYk+N4k7MLjVm+OPaEAHPEhvzkPzCu9ars0Amber+NiprO9cCftrF8Cd/HMmgdZxVNBCzalOO4CXDVXwPqvY+jsQi0cWP+QqRBlBmh9sIoAaaI5zJSlvsOk5VNrSoASpXwG2CokBbPSqR/Z5Fvm3HfKtOb9ORul6tx8uVxZ79Y4X61znK6e86XB4GAYNKtIzRX49onUWdDIMF+3Yc8pesWuvzPyC+ZDByu2odAuYLvK/Xzn/ETzIKzEGWXgheDMCCU4832L8ESPmf/IQj3efgSFIA2EngQnYoRXiMlfBFxXgmClpGzKM7k9womCl2XSBgfC5kjgU94RSA5k9CwuHhkruopPu2hUP4TQPBCJqFxZO2H9tBMLZ1VXth/SLKUAbu8UoTYkVJU17+EkvffBoUwVNSMU9QKkOqjLUyWgLn4zh1Rdel5KVDkEL1D99bAtZ6zUGnLKnvCihoYr/YyqtnkI/VF0g9PCYejmHR26wB/lMP0hgLv66hAKHhh69KQeVNaj/raFg16YC84Dm5kor7DqJ12vMFz9rCDvNdd4QuBQEINqaJ4CeXB0v9FH3oNocjd338VGb2/fbBTClVUYuvoGPS/HxfakPd+cCIF9qwluxxXxMpBVJtTfiMPBuZRycYrvD3cO36WWrxc05cLWpf3mKXy0r+ehz7wvBaKPhuXEzb24Ek2YGqotufIweftMB4FebZERw4JsnHm2VdQAUF39EN2Gx3d4BIOMWIVoa0os0kzSybSeN3v/Cxlf8m/5Wu34LScPkYNjPzWlY4R+M5SXf1eRHqcRES9C+NVHVjwCh+9TipVJ1BCpu8uGqqvPnE7zR6RaZHigVAgCDh5CJGB2hWIkiuN2lsJ8/jWCW65KiN6OWXzjYoaG5TfHQQuaJ2FbE0uvZzO/0xPX1NoXEsNJVyHmNFYjTrsM7nNwWvWyRBUezsyJdyfPTKKHN7cSYWouZFkaaFG6wpVfdbowLAwojiXI1clQdb7MGPRFocoqTB7YWM0FvsY7ndlE6Dj+eRin512jUipD+9LBU1mobQ7ldj8f4zIkd/aPb8ebNHy+sGdTGEp6oxo57ZhD1GosgEcxlf5U3Gf04Vj9mfcpnpJobrIQDb1o4r5GS+v9Xu1xP038sISPaLLyHGvxxOxFuRbVw2NGGBVGgVAoNh2Owg3s490EO6sygb8mU+ON6s3afdRxJTOiCPRYv4jWDx3Qf+jtLn2Wp/kN/Lp+VSKaTcdHqu01PIuCpVOLYwR3+Qgbgm5+xeDKwSM6/Wa+H6WwawgMnDAw4ay9ZhIc6JDz2+GaPp9GM/lbJQsfUgG8sKpOCy/hC38xS+msZHDQZngGXNfgMvXYgoJDeE9sOM5cUvgNnNJNccpCIy+THF8teFMHMAbONkz64kcpBXlCw2NGIfJPJ54AKC1lkVCD6SgMSA+8gqQfl9aIxuoRruorvIvL6pjjaeoPfss4qOypQ/inNHw+4H4j36Mm0Zcln4GZfHn11v3NzTvlUW5Inmo0cvFKRmFu1lONlt7JgPD5WSU/29h6lu72fFjZ34geJ1vx+eE8Jq/k3j1X/JVG8vrHmXKYZ4FjNal/MBzXHJywaZfgXEppWYQCvsUn2kYzoRc89Rv93FHv6PJKJxZf7ENcvsCJlpTSIi4aLx4g01xD9WQCmH6LBwqfNq3PJbuHF/Bv5WiSlOhPTeZv44/6fVvX3o//D59tuPxzOk14DTEW0/ai9sNsq0EwWaFz7frPEm+ohExdk2db6cJYL+faUHi5j73sypi10NL3f6zqIUhZB+gqgYY133E3hgKZNWwuhK/yVo3n28dcKyxrDUqIenfx+b+ToOTHv5kZc1/F+q9IBJpvHPfiuVqPoFTGDgaLndA/bAgNtuxGJMo+5yypaIVBKJ4RtgCDpB49EwSgYyTPyhAS2wSXokJHERKuBvedAfFos1tAsJh2xT+0Aozg2V5Dt9IrTz1MlI/1GUgjkY81Onm+38tJrpf7XDDcdvSwtPddw/TiKENzSlx2TjM24qGc4Qu2DuQfmlLGfvM9A/UolfZXJxToZtPSnIX18EaWYPMSj/oSFw8axbFXee6qMcKVfyz4RhKjEaas4igkikV1Q2UJ9GhXx3N0yqJxWOklU3CJCMSMFenRcQm14gf70kqqk/n5J1/wPLPc5JF6Op7E3tzhtL1PBQ2V9RX/Cte+q6zCd0IO7GljcYyK2ghx4LUdncyQG930r2Lmj8Kln/fwKX4E+y4PGBNWuvLNx5zUQZ+LZivbqod0MxqDu7T1lyYNuofapO+BMpt8q63RDiLDs0OIaCWvMiemPx7AhGc/80fqP4pi0m37lbj6yPjqwcoFOP0/4CMouQTRb1V2+EE5S+FUBsEYfrvzusZt5eyzlIfno1zit+Klc8HhVbiXYjEf+a59IMHcyyV6Mrfq/Xjrxrv14+DdiuetWFSmPWVkDENVC7wdN++fbpVWXzV8ocUfP9RXFp9NkdxomGIDrlVc9pTod+MhmLotogx/BNTJ17dqD/KBIW4TtbZHLpdyTPTDm7H2XWdPtdWhkbcR2tChRCE/S3rh2bJtLr1t9oGAU/e2ozbwRvFEam3gGlzCMxr/3MFf+sxnJ/Db+APUt311fPhPYTLMvBAIGbXe1mpHoHmPAKP1Qt47rTrW244ZJh86fJPpTjRMezE3luOB8CiXjN+xIQQyqL/3CF4aLiEOnd6G6bih5BO/++7w3aSQuQ2jgq2c0ULDiITBrfA6jPzmVgnEJc7rQz2zBglO+RwUWHELjir370zhlAUcsw965kIrU+kOjX7gV1hAp5OuPSJLqMAfXYoKcjQojwsN0cqr+aS5Sjfpg+XfEsSLmVgqR5V1v5VYM6Ef3Bn5YCf4ttpjKOe1QuzbQBNpDMM/stcenJ6fTfGdK/5qezig5tTirzahbimvT24aPd3pflRbzPxmaQZuqU2gKxuNjeCUYS+JbxyoB4W7Rlc9j2BX9RR6luHRjbRG9LMyZRdnBDLfCEkgprUnPAAJivjIZGhAZxRQY491WxmuWcIZPuPyVF9CT3nV4XGHKs7IZYRfcSN4ih+4hE3x8C2cS2SeCc7eEV+ZhKHWUyvlo9MqX0jPKY2Z5I6eI1C7zy5r4Z6rZ6n6yVfbTkVW+KQvHJzpU8qBDxxWlukrnrOLBm/9SYZZqEJhxYvqK2x6FWBThkTVS3j1baJuBO7UDa3RRHi8NPE0ZTyifGlqqvL0hwKPn3Z0HrRKom5LeZeuOs47vg/Z6boJyyoceoTcZFjppUFftJiesNAd2gBOmUnuHxpywRQ8OLqLHBy7U5Daens3+oDz9VstlmnEy9i7k7Fxrzro5eWYdQ2Pc58aA0l+s/hz1UUz8VjYSDvHkRQmjXPi+HksVSe3rj7T6CSXqnP27kQv/YICOZ9C2Rl1sPdj+a+vGobH9JVdPaJ/75x76onmcky/DuaLnRLw0StnNyd9ztjiieDMvFdt7RBE9Zg/Mk3OaBkMNNp9SmH4qTqsdtneJUf3/b1ve/QxWf35tq+re38vJG4P0rAOybX2HVv0r0r4ucJ36iMtogyTFmZyT9R01CJ3TAqc9eYvPXd2cy6LYNnZhcX1LBEEHjfKArtIFaDE92hy1rjRxxKiNX7MqhFNatuXEWuVM3jl1B8IYlaMvQ+H0dE+iHu4HR6TsjRVZizpQuThqqHA7EWxasnkPUby2VprtF13NZ7SSrfOxYp5+ueCww6PXSmJttV3yyeM8liEWw3tefIVvoVcmvDo3+DU36FPTDvD4aFMef2r2O1TeAZHe0Uzcz4XS/9KbqsrTaLbZXuuUp9vs8xzhEeX1Sh27X8jaXospUKhkFt262JECkh5lIMf3FhclPiceFxa7q+pX3RDD8PzoS05lyJg0jvWHbObKB8KFLwTYo65qXmnDpbzPmoytD7VLzoRiOUrsv/uPWgDZeIx9CyMW0v6Eezi+/+EsiC44JPQ2Tb7Krdsyh+BLslAL7DnnbEj3xKsAiEwSIzBESPUKRvhNMIaoaqcLjBHOJR04blwMhoUtOZkwF1lz31FjHAkIEc5qNsW5uABHNjVbewNqIQf/KdvJhmHBt7rC+OyAwMN+q16RFTP+Nk/dIMHzOa5spXZ76lCIHGDE8bzM8JYwm21Y8Fyr/wziigdHGfVT88YUYIt7aLaPK9NiCvtJFC+EuIxNFHn2GlcgYumMnap367eKYk5vDMD5VYrrQjsbzyyjnKNjLm3r/WFwqMWbjxIwQDLSLJXzGKRlxPO50KOErGI5AqF0X1XnxtNyJ/MU3Lhysn5aN03tsvo0ca3cl5oP4lj4Skd8mL6Jdz6dya+uBmtubS9R9EhgZGI+oz7vrSMT/X5ofNnNi+0R+XYqXgqg6pkQ6e51wYLLxTSFpi7mPCYcMo8mivHNXnEd60+vLm9f/bC35uAb/PPtNe3mWez91/+1dsV/Bn4EEaDJAYYFNd9B3jhmZgL32G6qVwE0PrqIMEkwqzSIFg7mp85s/lgR5uYuFr1Dm6EIJzW1XtxSCkE6Vwnytxxb3Mm1vgvezekHB97HcdopWLmggLpKv+tkLOrekYiIXKUmCQQld1nRqZx2T1zvEF5CFEytv89c93Uj5Jq/gmcFRTSwKuCdlgT+pTDWOLFDQ7dByc0XNWY24xAgrmUyWK8QK64/kp6n1IsDRZ035U/OExXARm94dK/6omGxhfmeDD6syMw1ndW0PuVWP65fibqMa/jXnw4ytcHlaQDWn44KjGcwQrUKAp0oWDVkzJ28rEFDr0OvuhREzRpPv6ozYNWL8yEegRCbsphJtcTUkvRSVxZdQDK42G71kcoAKhOCf4lvrYjshTSHP0+FjhlGUJda2PfyoOPEAQI7a8TwW46LeRChLA19N/NCRiNjGDFn+hSvnVVQIBGERHIigC3Z+Wg38jIyhgXWkUpzSa5KTalNmm2NDJBSsluUVq4oG8B0j317RPc81N+AAF1GxwEQKs7xWjUIJF3/9Em4Tr7RmZEUeDUOyDitntmBkj1HDijNIqTbpRxtOlx3o2AlDu/VR95oTSKoIehQW04FXOnQEaoAQKt3V1iz+i/+Mo7WPLiA3HKnX5Umb5pv9dkNxebEe3kL8yGVN9Tv5+b6k4jz88fa07vxPSQDMtGAMF5JyXATfrQvXrxapofsXz2cpPkXFdH9Svty0Gk3Z0bB4fD0DjRqQr7GT+W9jJczb2eKh1Dl/K4Eq84lZcSYfjay2Gl1iWuvIES2nFwkCfN2jdWVQn9/vksxPMZpp94/uLmwuWzm+Mt4Z19OkOQALiDta020miLWd5r5FZ58xP+9ApyOAxPTdjeZ/Y+9VfnrMOnSb7Fh10v+BaT/6ZkTzY/OdZZiLgGv2n46uT+FOFtB3kaRDDUINuOI90wV4TSSMNI8teSH3vxwuZ0jSgBcMojmKa8KcMkdcIQI/aOd1yW03JD3WuYbSRiRZZ0OsIa0RB9wds2AhVi+e/N3n0nHGM9SDuMkiidMpVq0hyGWo2rxYeYFMkv6tsg6nEvC2c6evGscyOiC1kijkXYEZuFsQqHALy6TRlBL922u0wDj7ALvnIWultB0puUygRDjfz4UaE4OExUjAJ+F4Zc9+gAv965r5y+Swmc6S9FaHOhbyBwyxGwRiG3UiDXUrDoZMLQPMjQMMR0ltVydcTyc11Rqn7pg+mAd5PA2qR+WWj0Yx02kT6HLHpvknO+c1As8lAWuyW0j8QlEOrHpSyyMnxJTeXXKqLKL34Uh/jKwUvcXI8ppJ4FD9zSjZBM+JYsOkkrj2w9K8e7TjjhPavo/CodCRNUoyDKHyGXQK7O04bg7mAoNxh73GYJqDmaPbgaU5uMETWIKUt2f0R6LkF36fjxZ9NkNJvRA4GdD39wpETgCg+KMZ5bCwvCTRnqp8xwAmfmBIKtbrPRbOISvrlwZt5gCg9M4UZw4zpTBw03OJZ3KrC4aRYDwBUe4K5Eg8coUPSKh+A1fLjrdN79/BNWH6Y4l1JBV3RY9UH7idvitni+fBV7LLxmJLlth6kjxWExRYqBMfKgxRK/8fD+5uspEEvL7Xl6sY9sfSjZkj7Z3G704Vvpvk1Djhxk7T6ijKKZvVz6tw3KQe0zEOY5N7M3ZIzn/Oz3b3dadfMP9nphE0ccHaSgGLDc24n9BqR6ifAUSz/fXud40u8W3fQK9e21PDNa6Zls+1ijj5eerXfmJrO5UjkrrcTRKbxQfsYxeI6Zx8jpCbQ9BmY4ffNXMNpSUt3C7Scn6XfwR32/o2vvk3/150Pol55mjvDhsogxldjFFKpOU52qJF23WXaaX3uG2TW+JGNdqHW/ojaXG4V8oPOxBJlfQAAIe0fYkw2JNcqU2zthgvBjBfRuvsJy3Nnsl1Bc7hMuFAQv1wjIyB5A1oxvWPiwEoZnZQjfiX1lKp2ANIFt6fBMntdYJjzZ02tepoeukybwYxr5zBuM4ts24kJ4kk2dVo3q+BIXOczQs5qh1YpAoyXAxM+/Moyi2MJFn7AIj0UVTDRHxBcsvWuliAYR0lcIL5k0T+HipBnB1BDmLzj7LtUIPm1rTsco5Asdl++sMXNLl1u2eKa04jA0Ba1UoxqbL+HimeX/oDjzT9pjqlNb2tD1gFBKDzCUZmkvAY4n6nxzhliWYPp4FAvrUGfBWnz/Nn+tDYgTvPLV5kPDlP+TGmo6eEuEjR5YouPCCYx8TmYVNvCCOe3TXaeiFKZjlm8oVvhY14SwNASqX8nmh6rhOd9hFyYdgRb8EawJsQkLOdl3U1rTB7Qd107l4p85k4swDuYIysICWZmFhPda/VXZcIyx4EGhTdk+mqVCyp57zwlRaY91pzT8wPG5hKnHFs7TkZbw8B/3HyHuIpDHCq8Va6xVZrDEq680CA+2LGg41xqpqZ95i8f9uFn9pLdJkqtP1mq+vBTlncn2wiYCLMYCkBJ2rfIqKFyXwiqqZ265UfrcouE2pxdUl3uNcm9Fq/MR9OVctT5M97BwE9jXU5xfev3B5uhWvKCdmEPqEN/ot/r1+qZQaExjW0RSXHmfe+bkuGB95fDlRgbPW71Y3Wy6Pbc1QJ1W/UzvDMywnD5iflT+UqeY7BtxACuZUd27k4lLMIvbbD5y6WBztm+3H6sM8NE5IoZF//CHdxm34SPXep1PH5R+S7a5F9x9m77naPlLe3/2b/58j9/RtfD8jrKqy/GfRNOFWQ/ToL0Og3SvQmMxRbgd0uu9PNMYNXiVmSF7BJ2NMFtcEOZ467E/+mJH88Vk4zcHr/SOJUmWLJiTnvui/MPNw2lZEcul4XAzm3pZ1uUeEQaWLkqRUAZGJWJn92nVsDFuDK7JY3gZ5PDBXtpI403+Hg1blTuutiJPt7KCIFCWyXKurJXF8JbNv67V/PIru1D/0W1S93cIW7yQ4JWwB/Vf+cWMwsJqRWEstLFc8EEjLwIRTXxtcaJXAauMAgyz304ZfCymv1A3MboyclARRSno5STdCxRIr46iN090vc2Zd8vnTB4ju1ksEH5GW1BTpvvd3pfS2LRixQe8BuOhv4lBuEqrLKMLcyE1RWH9EsajVAp71KF3VmWh104JswwplAdGF/ENWJQY9JVtdGNEEvhYsrbuJ/0onGDOyq7SzVEWxckPkRHkhROAg8v22U2ZBOeThKlGWVZ+D1tajSWusZI60hLcT68RgioaDKMXePYMYc2s+BlleFYWPiDYwYl/nj5TDEYRRh+lnFG3evoJoyQpEYoLfPmnbquOWG3YTT0ghzeL9zN/MsQfpReelFjxqjcXYup3MqL5Fv56F7jafyDjc/w4obJRJNEXsH6Tpv7ZxotojX8L3KafTBTGCFMQdlfPJav1Bs+h8Yx6ige3YMhRjvAzef7QyC9yWL57smDW/q/vNRJJ29+KNjYKIvPrjQ4PG+W6oHOagkHC6uzk7IOQsnLL5lmbgLmxz7ah9flWRd1N8dij8XxfNfxEC1Eu1Z8OKosCOV9eULmsLk5/ybjtXZtzAavrfgW2ajhFYr6lUzOmjKWsuOKdin357EH74zJXRxGTRlXYXBXF7m60hGHNjWyV7YxYlbWl7ZpT2bUngkUytDq295Pz8h3+oWC/8+vKk7+1eevJn44WlzRezbd4oScMNtqxCszQXKUjmARz25Y6aRBz8ixeGCDeG669+GJzIa+d3vz6zdsjpGYUUHpifzpfcBGCMI0ccxmFnO2HYe7EQY+a/D0dYW83mRGpBx/LeXHdlBw8/cdxJs79P4hx7mnMUpjkq33rAKyCNdJ4UBgrG9o1X8NUB6wlKOudNWnlLovpKEGuLhSJDnU8S2MvC7uc/avBI8kchBZsNFoKJEBdyzp1H8pMWk+Bm3J79D+8yjcVB4z8D75eIC1Td4K9r7pKqgNQmntZRi/244AawKU9qAMkr5tUz5dbJ/BJzbcbCbxbzSwuuBbc0602uYKmAT8q3bgHQQwhpRjFsdZOlX63A91KLAsR1P50dV2fJ64DJ2j1AXz/xGQTj2XlPqaRixsSVsbjgIZqdaqtWa7BPlEmbc/dkPmmV4a5jrEEwbi0EojjNyZ8w2tIgxwNwXSqGd43Q2qU8mgs0NJU39mL0vtYdxkww6cEdVnHAsdvpI9mBK9Haa0SQoiZc8EclTmn6OI3jSfI80J1BOsSAKK34cUbz1n9t3gb51V25Q0eKfGBFbhRaioGl6kXGnfVd2akoxzlRdPhlXCaY0wSNngM3FEk0YPFOu6+2m6EVLQdQYRopR841XcUbgItAKvOKsNCK79jXR4n9IZJyYDSzZEnOkvXN0cXSii/tIiIebbXKMZopR5CZ3Sxja7bybUWDIglOMNv+gWy1EaUx+MMj90cyBt3H2x+PufVv8sM4ooi4F9qePzyqYPNLx8dtmu8jYG3HjQZnpAO0Nkmxm+kfCiOCy3g2D9qVFK+kzXIlfAx+f7dL19qFNwRSBkxZ1oZpR2ej0E/UvmMV580uNXwmRF1UJ4XGuUfFm/jrrSMVXYFpsTqF8vjzD79/XjpDgrfj+YvdXjlmeYL5+wy9Q3XWbbbIwrB15JnoMBCOyNrBBmPjnjtIL6L2xIY+Vrwc2Pv5Jm/tWK+s79Y7ju+TKbHan99SbQtmJCb4bN7P4yhorBWmAouSbMYdzrbqtFUekGRsRxlO3nh9Ob7Xzg7FrM+QvA6+gLERZYEfIAj/SgRz4pQlgkrcxUEos/Jrk2G5SxsOqQCPM97mZIE5jUIyltZ2UeVxZVlXoQlC6aC7WpeMGIO0iNOwATiWclrtVeCTZ1rKKuz+Ei5unajE4CmI5ZPYwew3zcvqAmdKDX1Xlnmj9R80hM4E0fJJVTnDWp1ooSGnS4LCuvLPEedIBih0dOxjdVXZ0vBr0rGOPPLB7msoJphe2ltLjRa4QtmkXHz3az+t0uj7tanXwpZq0We0qcCdh5YGBC7aOHAyrspH/ta4EWxcmUZpR1rjD8uNJu9sqzMhzzM9UBxPEwYgA9HuKMb98T91vaPwIskj3qfX/mNNmbOpDwsX5SYifdhoN4NL+GATgiNjN3GZw415ZRXhWYOIQ2HpwnwEdTdH9uEmLBg8cKH4tC2Ew9J+cGlRKojYa3TWtHHtTWjyqKmkd27xuWVS2XcVDp6MEZAgNPrKC6wlbv9zfN2/oICnbyAlZ9ba0+c0UlCda/4OUMMbtF0wggX8F1ba3ZGMCURPuUYdUXr5aKrjMEHfvIGs7JmRGDUwBKYDll9o4nVVrN4oLj5LG7F4GP1mraLJ6JaebRDhfqPjt5bqSTdokER0X0UGppL2DXt1Duc4QcXAvRh9bYB9V4rrL54537GXTwRfDvIr8e/r9ZhqWXf+Xk94t4pLbcDfXY2v9FFnxyIi81/UHEqbSRxEA4fbkTghF5u3qPKOtVo5KDNsNzbH+w0B4bXbKitraVhUFEOL5RnJtgryokS+EafYtBRNKqkDynnaohcSZHYnDhKwZAIvfGrqlP22/OryNdC5xqjSVptgRYzF4R/y4Tu2iZaYKN+f+07nTzfFjf47p6/o3v1+8tZLunzER9DlDAcWLNOXEW8zZ9tEbDvGjlSvNRTwYiJd3bXxCTcXnjx7OaZ9oaAEUnmnzT07vqE6mJCTIW5B7rGRqvgWYZHeJoPwHpzaQxv4YJXFcv1w71VV5kkRjIUU009/2LRmJBvdMGw4gvcwIzAtJwXpFl619OZTuOdLwcWXJJRiMqb7Fs0dI71KK+4al3A0CZYq2YA9BR94EpQjbCSY+AFvXBwMSQlpt7zp2cdddxNJvMLZkyei0EvlulsAM+0xlwnUbaVU+aNCE6wzsTEH2y+44WGBkYnt/Mn3YjdfTzqLBdEBanj6dKZdD9bmtlo2LPhPoVlVORjVEfcaUOj5FEdiHKHs/ktcx+hOYwf38+kund7RPh+j2fh+kbJbDYcgVhG6bvGRVU6At6zcKOYKSpBazIdgWavRngoU12fVK+ZfPZcujmQEIw6IH4cN9ikrYzKHKFUnFEB3lSUkfZ8DEs5PXNx+ZLiWPwEnrDBIZjmIYoidPekC+cR1sEk/GZCWMPBv7RrQrh8tQNBPirasKK6jWICjyKweakbZSKt58GB8oqu856fnmDtLXyEl7YfoakiBLP6Du9J1fv8ygPkjAoot8rEsDMHIw2DpvxzJHuV46JbBxoGX2Fbge7FPMgKBKKyhkk9lzCYhOIsOZ6d5eWH6/ztAeN6Q0D4dl+GavehMfzrv81tPeik5pnjiv6+e/61+/dnM/GC2EfSKvvN9jYdVl+nMPSNis3XD8uTtYMX9ztWB0pc5wf5v/W59ELF52ppdPqRMwebW9fbc5WWOFVnMgInmPUrMsNekFq3xSgUELdVEV2Mh+cKsxDFGJP84gI2ZxuVNzda/XYzJIZ9Smv+xAjI2VdDq9I9deMa6Q6joEdtsm3DJ/da8zjFRZf+QX4+layPbdsKCePJB8eOP/4rg9hv4c80y28h/2bvv/8fX20lzWfGx0lbAgZDN9rOY+/DgNtw7xM8icRVT620JfQIvp4xSaTZnLp8evMhx7xHQA0kXAfmd0fYcf0EhLAHd1Yp9EC4g+o75RrrRPjNtcVje0P7cChtlPdtEG4o5WICADCe95k7UU7pdFS7rSkThz1SHgd1bBPXvg4Iz4Lr6+HagxVIPS7BX55FAdgt2qy6S1vI/JSpVPnKKEd39V60FCc9BuctXViCOMz2mzrc2pviA1xOEzU/gpk3mx+MtS83LLeDHtM7loTytGLKyMLyZ99AMFJ5KffSqZBLXIxbi5I5ShKx0MKwf+ZfFp0obBPmDp+TjuvqdjnBdrKyvtjjN+nphN4mLdEEjxtJzHfmE1AE/aPOzTKvsfZyENQhX2/VaSmUtWJLvoRwYXtgVUkuGTuMZ6WWAvuNhVb2pRyUWFpCLnIWPO9D9V6QXTgX2UywSmB0k0JyDMt8QTH8uLuMHh7DZfJQdElpAp6SIKSHGSqPkB8eDn6J10hCweFWXNujEWbxQSBGEWwV4AhMQl54d+XPqCIBSqCvEQpY63lGB2rlvd/sE4mmlBfBPhPr+f/hOQphp1SgC0z4Dc9VNwpnCDRzLOWnPCgT9dFo4BqpwQUVq+/gU9gYkoXNxP3wacC1k1+Py6U3hFvljUBUz34FT7lTfi/kRPGzj2WIXX649HM0zeMUJeX7INpwjx4Wrk+rEeHL8nee1d06wFfqC1YeWlByp+HDnc7GYgT43WqN7plGFvuNRBygiATmQT56+dS4tq/dPFoLeaqDOjte5Nl2pFs4om/pVz6TYF7xeX7Zyj8VuV6oL3FfCdHHLiSTbDq8mKyy1yTKjhdgTs4o7zmuyP5ZZjy8U9uNiyqErO7DK7wjeAePGrUdb4WZfmCp9Iz+VH/aLR6t3WsCR1J9Zu8n/varxfyWrq1E/S3BqPPv/4XHR0f/GR/rMCu20GgYMNDDSN29WSE0PtHiZvivaEwhYVc0W3ndJiB2jCjf9+GLmy+/c2fzekxi6MndErTpGCeysuoOE455KQt5fSyJzc3vSNmcrpybhUX1YaadFY/ZdRQ4M9jCLGEXzQeZdpYOtJRAlK+G08iwUwZjkKUOKktiOg+mKq8jUAI2neleQtryYvWfmgnvKelTmho1GOrzzStYaBHO6DbPveoE63TfyT3wuH6G7oRZ/1a9FMCRZCShRqXpUlc+2pdi8I8m/s+E0+3cE460X3mn0FEA7cJJbjxqR+2TzUd6fqeOcjP/u7mi66V+bLd6KO/Xlpb+Pmp0wgrTgYQp/d0t4ny6usIoPDiGC1ocEPD9TGjPHo8RlnAofaOOSpl4VjaBZmGFSXWuAX0EFYRnOk7dHhGqCQOjlWks9EOf7nsPSgNBefq37rVpI5GYtE4YfqUbYk97lA1s9OOOqQ47qzfyrbIHdCPbhNVMsLMWg8HIeFCbQ/J4fDDzFwO7OPM1wYcfw4uS0S67ttXJV8evbPGEdDiog5Z8yg/RTPsaUZijoyyHOQtwHPzkUcnqMN9SQfXoMuesBVedx6VRexoBToXUVzm1zXzISrnSkmw7mpV2j0nuG+p4PCE4i0kIMNqt5IqC68SzltFTVOAW/pVZWUTGpK/OFLn4ccPBk7DrHc6UySyU8T6//sy98JQ1l+ISoi3J7fmBEVe89HqC88shb2d5le1g1fp+PH07PH8xXv7DT85tLlbH6yHy5XeONt+XFL9f/ZDhdNb/u5V9p6wvRc/nLjYSvri/+aWv3d58oOOWbtduzzZ5fvJC/SBjZb8lvQ5epBxeqW/YDvAV/o/gOy+PsXUmfnB0ENSr8cgII44LJtG73+/u09e2H5wt/krzMcfaB3V05yiX7dHwid3oUx2kwFNoGK2SwzMHBfkxRnJfDU9J3DwJXplTAMqT2/ovlOu3fL0nCmTvx//SZx9/6o//TJr4D8HIKJtm1CmGUlVoGDgCzRA7Qk5U0R7cxoqpEVReRxU2vFUQDjv7/PnmQi5u3vzKO71ZToujI4n0wUCcMk5cnDeNBg1DyJu9GwHUFP0DmbCRWzN2Tb71joFnI1zgIvd0Ntjs9oAQxjqXxo+9ZU0wgjrqrICsn/IujDyngGKKWYGlk5eegI+9u+tYCwc3VsN6VfOihjDiPaxL3WE2bo1KBmd3gbfosEKkVNd1XlbfTFdu+PgM73fF4M80OXenTn/apr6YjSKmNLC249hZakZtpxKwF1IwLxb3jeaG7iRob+XCOlH8HHmNPpXMTXayChiyG50tF1jnC4XjqULPxxhOMJ45lnCYM4BqcwfdIcwsNqi6VqZYJPGwreyNM2exzrLyUxz36ijbIf2TOpaP7WjMqbmRS4KGFXA86zFRUVQtUfgojnCe1UoJA4rmuMnH4q0Aq8hq0FX7GYk+pEzwVp1t8grvedxXFcGtMEVzHyVE15xLaVWl37gSU3R7NkFGUrymM59ofxMcph8QrPAlWLdNnFE8OK15Nvj0v3yDS8925ZsknhGz7iI/pol+o0gJ2/AcYRz1xjNQvHPMHre8DR6j5ccs6rmmXyTcESDeKp9wlxEb1MB8Sg80LWtDu/4UP8gXIGw2COLPnmvbEWDRUeSTRsD4X2UHj8LxI0Ny5muisf7PFbUzOr17fkwZUzKTXf1Uu7jyWnnmeSbPe5+PQ8W/96PT14p7rQax61teS2ytbGLI3Io/zEtaqfilGuFip4Z+9P4SzjYBMmDebbk4frzSmVcnLxzffP7r94a3z+XmupHieu75ptrxa3zpm+tXo8nDCPpcbq4f6Ey5e4W9lbvslb4T4qggC26MPPRtSpexO5/Mre4nMubU0AKgO5HifHieO1u5Z05tTrTia/amxLcnUtx7ncyLxuhGgfqiIheh+cOdYY5veUR27aOXrPm/4z+z96mf+rbPvYp8/5/rPVEgoNa1/nzM8ocG2RpRa01js1BwICYRNsyGwdQeFWv4bUf3PJnk2VqUKD1atsb87o9e2vzKmzc3X7vr1KpKDAZhPCuqAl6uQAYtsHzhGsNqIBYNi3BVNgbrn6NPdpf0g0thlMeaeC+fBP0hAKWOZ6cx4AtVk2axv7fyxYwQ0CEztQhDcwIm0NHEkSo6jfmRAToVVYL333wB4tqlWypvrOhCLSAY2kEMQeeKUbqPSktIP65DrHdiVU9Dj/zDpbEs0ZfTfuR4a0MKvxeeJ5rleyFV+7iJ7EdV6nqCJhlcVWyiymKqnIvlMZfy1Zj63rGjmSu5XRi6GYKf69nSRcrB6b1GCFxgVqA807D9xeCciYosNPMic8BkbfwgYYoN3LXDCAXlVg4rLPmS5RUtm9jEB2ONh4f2fKwBPGf5zai2eMplli+Xj1IY10zlDNz4YAR0QO0TgT6YBM/w2NBzCUpCVrtxhxxLGXGDjSIS1r+HwaI0mCQzt5bCIWx9a0L5aEtxUFSPKoOLY4ydeENriSO81GeEc3SahRrD972Ef+gFswf1A6+fBQXzUkV6Lb6yUg7HWqfqy4qj4MA3epOnsmeOaJizDOFmpDJVTRnNjvvKrBo1woI9o5KUrc2DBPW4h8J/BD2iwjE+ftIBpJTtGt1UFlzQB291cZWt71Yg9FIeY1xqcGmloSw8dx+iVYcRgCpXpYfatfGUN2Hl7X0qXz4Ck+Jc7p21HNwUCjnj7KuvZhhxB403IJDmKwhoLj2GzuczRLlYb0afW4HlcjoTfc7kVr2XYXMqn9SF3FgXntnffOm1e/Mt9XNnG8VHg4+/fGpzyknSlX+UEDfCupgCNbdyKWVz42ZzLOFiAv17nJod/Ae1+93id64uysRciT55MZ73fXQkR6JnU0JncouVZH4n+mZ7ICJLAehcRR+ShVa6RRsjYCcZWAlHLiLXRKAiWhaAp/uk758X9V5c750C+dRf/+lHf/KP/tuo+YNT+6lRDTvV0GWqS79hCJivl6nQuAamcikWjevfEGnl3qXdv3Rq84kPXd289quv1Wd0yMVY9ZGx5keFBIewNxkGkrkIKsM1B6IVRn0MQYuDCJcL/PhCV4kJiwhNgNl1zY9PoC6UYZclWV6KhU3nPo0aE2JmQoXg5S3Zj6GMWhwfD8DCNQg4Ya6Fw15CH04Lk7CAUzj4zYsYz4NFzFD5k16aQi39M9JAg5mei1sGu6QyGuCeNYfUWVfV/4VGFUcJTitC72R9+XTthcttjIq5D24lBEfCgIWeCfQQ/0CbsF6sg7+VMnQm1mFlE4L8t1ebK7EI4Y3CCXcKx7r2S8qqfMN6LkDzKOfrMHaSU9RcV6xxCkeRXI0F5UaI5tWH3HuURtJJ+aPnzKwEA+nP+ibYTXCzrMyj7CXoRuwUN6um4nCbEoeeAWZ02BXcQKjDZrPckmjoygXl4EYNNKMHI5Rgay/unUiVMOw5fJarq7smTdCa6J/J+PgR/VwDLyGOFxgYyud6HCVSRfHmjB7Kszv/azp99ZR+WLayKQQw8IX0M2E8NCuIkkMHMCxzrgwXd5Y2MyczWXte/BaNgxnKUz6eHeULObTRn6rzVKxy13PUrK8RjkND/AeYdLmKdp6FPToj4E8SyDNarH17C25wTpQumgco5VD2QTIYHkaZR79RICUJhxopxSLh4o1Zjl6Y0RocjK7WPUrBBe5Z+ubAxhABIn64kRvL52i5ENFm8fQ6ONX+L0e0vxm+F6OWHeqOcD/byGK+t0Ha1ycuNUq9ePXk5laj1BvNkVxIQD9zIcURr53pw3fjVqteRqyW3Z7PzXW2qt4flyblcXzzkcq52kKQW+F3N1ypymoyxtuNKmLF40ulOV/81QxOk+zHK/9DHd9uifDafV69g2nU7ANY5nvQicFSS0faGD2DYM2Xau/w19jKwqiu3kP13+796b/x0yvgt/73PVMgUIk9/nxo/61BC+4YpOrNo4bX6t7m3i3mUqnlepnEK7XWlmn9mTB57Qt55cPnN9/z+tnNr167k5BOCCBKdx2t/jCwCSQdn0tmOmp5CS8MTViYzFvCWBFCISdvPAoGORLNCemaKXQtswvXIJgwl4BS0LVtFYIBGLoMASgdC1MoQchoIzhmIr08mI4gs4prLN/CnrBMRwLI/81rhvhghsuq17BLkNWxusQ4eMVcRQWWTLrg9psWETiEaRjeEJkb67uenNycDh+f6WT1n0qaPkmTmBi81HEJlxsis9wI/dN1mBBPYOSnbSTxXHi+lPvri9XbibzqTNHq1Oe4SeoIJ0t+NgKoHyXim+kUx0wUFo6SNztagrL1/JR2PauEDjbzSuFNySSHqaXNk9wEx7MMT9R5Lf2deYfaWNvzQ1Mcj1ubn54bIUaIPL4dnU6jU202hxfVNglWQs7BdCa7+9jcEsanyp+QWt8fqc2CiD9mclIfpHVChhut3GIrO5x8DIviSDjsbc+0MblPBtlnsmpYa7Diq3PkAjYZvHiBEh9+IJSVR0DK5rWbRQVcvHiI0JimDpXHrQISr20wqrkh+09ilcBMzMDDVmg9rq3oprz9cD3WrO4eq6m06gLPSRvdZCe4RhDJgJ/qVDM5O3wKvfIWbmPjeBZkmj4dyJhg9cfo2wKMvdw4M4IMDDxmzkRaimIx8NQFnhHz31MkM2dTnuGX+DIIIzvwOJoYKRGq91MY9+ESCCOSzx8ebV6PX809WEo757eFo7Ebt/NXUx7Xa4zvPdbEeG37klFHnxU4dsbImIxIGVzK/Rz/vPbqg835lMDFy61YTAM/6JhpI879RiAPfBwt4X7hxYMMooyIZt3vNor36dnvfnRqc7l2v0F5FHa7Z6NXStyxQ1Y03s+15yw+Xzb8YJhdrE/bhHil758rA2H0kQd3286rrRg+KRIjj+PmQ9AmYuOtdckjE77ZyboBop3es9GHst5TBbI5/uLf3Xv46p8Mye9S5fl1W5WrIkpMYs0wtooRgFNJ4epcpybQdLzYQmjXus8kZm/7af9PfOzy5ss37mY1RLSIFBuPn3Ks2IioZLkwMB6Nvr0sN5Qyfc0LsVc4FSPHusY1opH6eR43Q/kXzPIGD9oECN9pr/MziuHyAY1yiY17YmUnbIqTkkAyMjF6GeEkjUYeCIPkDo0pQynrLP+nwaXdYhJuJzKJue90JFbMKLyYsWz+kzVT70WHVp9kYX04JfAj/Xylca18a4LPKqg60I2+2nYrF8nJhKRvGziJ9GTuk2t1jgcx8pUEygeOzCkd23w9xWJFy4M6wc0quB8tDhrVfKj3OUcrnKYtuztv68xWcbwVPW7WaSgenTjwld2op2dyMApPw6mnlW0j6BK0LHtt8ZClmj+ZMCFkjyewdSb+4UcJkNBIiZe+eHNeAzTp8chcRJ13rH5cX32ONcdixDtuIpQlfBIczs/yFUQikmU5I5PgPexbJcfO1cKUUYJv3F/QNWFb/sf1b8tqjztFOprtNXI6cZYQrmxaURnVdR3UGE5JETwP76LiS1oDQXoNvxEeGE5Y17R8NDFSmO+mTEcKP/1GsnBPt89XPUfwA1t5kX5GfBTq9LfCGo43aqlPmCuqk4wxgo7hapXP+NQJ68qzd8Rox0jpkbmILruKZhRc28+KqPJos9m7kXClwIxOxh2lnjqitmUpl055M+8pHH1UrkpoY0aTdpq+V9wwMtJEE6hPvl7nHTuU1qo4o48gVYcmyTvb6osP+rRBIQ7zjAqNonNF9XP5eNztRsyWqcP7eOX0ne7ytXQ9PjmZNe8Tt5eeO1n7xPsX4tU+HnUULV579d7m+RdObU5mgJxogQ+cDjJgDjNe7l6r/XO3cm1drNc/rLyfe/do82I8aCvC5x7fm9bkxmVo3QiXpsZn5dXrMfQNBlrL/3/XmfObK1fqIZHrYYtcHgaDq3W/OZH9XFtDv/AeYHgi/seXRvb4g0yQpoaY+qJLnPvrx06+/Hcn4D36ozXfs2vvU596+OTH//in6iF/J/ynErP2m8m0u/R6kqV4lR+m80yLYqQV3DPGX2EE/rHyDMNGoOc/eHHz8a++u/mFN27MSHqESZAW4XTmiug319Cv/BESQxLwmHWCSzCnVuKp4kbRFWFkw7406rhf7zteHGHnfaEes5aO0JhJ9dJj1FUNYTV6dZ6zbdKGLLWTVmClZeL1VU+JB4kpfPKOwJ16rki47Y7omKTzZ0gVPjq7DuPdWvQmo2M+WLFmt0l7d1Xn/rLAft+Tg81zudVulu5szP9OPtRTrai5lK/VksKbTTp22sPsqgX3MPfMzEWUn0J9LkV1s1IvVd7bwTMBeKuwS+W93P2VFJFjGyiCca/kg2LAmhth7b1Tp3K6KSVqLHImIUjBaDUjDQR2ZyVaRTctEV8cLy8Fw2p7kLA6kTCjEB7WqbgmDR0JcELuyER7/57sV5fu5qOMosSZG8CCXE89jSVr9deJfNZcYUYpRjTcXAQ7fnnQKEXDcQ0dnGjStHpbVrwXHR9Er7X4oXyVj48oF/2WwH7QV+/2UyjwxKdWdc3S4hG84ViZ0zoYtryjnELQeWOj2GrgyD44j0sKEcLb6KPDzMYI2IsZB/4Y5z0bBY1ELnHltmRz5rfGpUfYcLkhshF6VWPBIrU9HKEw9TMKGMFdOHot2mmN2jU6PuGuTVuvhSAQVGZwoh3Pwp5lp/HXXPiUlC2ZRixlz/2tvMCtq/IkmVg0CkZQRknMKKMwdEdDIzLKZpRU6R5Ulu+dj24TFd2/1ubBWUFV4HzRr7wMxqspDJPn1+srlIlvdjit4gdPNEkdXW5Uwwe+lZ7iP3OpM6xym5qkvvjcwebam4ebu/HHfvS81K51hgLDxpLheykPIxEbYuF4so9NOU3h/379ZlVibDYBf/9o8xvH+rRuuByEw3P1mScZQ1+vEY6qBw/F7eh6rT5wJS/AhTYsMiLwDB7acy4gRT0GXbSPvuPijKazci06I+GMPmsLdJ6RYQ/6crLkU2Q0Kr9X13uqQAap/Rc+s3nw6o+H/ffhl1WjGC5tTwFoxd4SI8XqZX6Yo9+kpzQisKRTeVlYHpM2eBihYdsPfuji5ovXb2c1L4u77MEqbfBNNdUeA7qci3gTiYhTyqQN1Fwz4tnhMkVwLzVSqLMZVVAUhtxBGlz5UuPRUMmqiTHMB8B++uyEL8Gjc9lV6oKHeo2fGawtGuLg5J+6LTfWhK7wyR88cMGJyRzUCB5XmGXKPprl05gYcKVRTzBUEz0psz5VW+/97mp0l7WSEHi3Sbh3M43PtVrkbK6Ms7mvjidUtMVhwuEwuhO+FhaMay5BZSftMxViYvB6HdAIyPzOkxQHtXGuvxdzxZj7eZhwvBes62H1asP3d8PnLolVOi5za8hm0ULxp4JJmdyvXBQnQCluO1wSMyllzrE4p8a6nxV4ENzZYBUOR3XcUSi1Pcsfjw0dqgvCzRCfMR2g5imHhk/MqxgWlOZhz09YzcqRv3bjhjAKqX+PsOZjp9metLP5REsr77fM7NHtFktQPq3RVF4svkYDCZNxkcXLhL65FiPewYMwLo/4442KapYRePjdHgZARkDnV8NThKcRSyQJbz2nPNM3Fs74qdcp3+BTQiMrrjT8OGwQXPM3o7hSOvjdMRzSLFdIuDS6NCE9jFOm6RuVfUyd4V79j59Ur9olAEhXcG1SlgQwV+qkHULEmzNSVFnYSeRP2INZZdVjlulSItIQjLXxdAzx+jwk9InyMCgJU6MN7iLhDCgjeKvo0GncmsXfje++TKkkBAyeuGLheSre/Oixg83r8eLlyuSu/kb0PpdL9/sK/0bGgFHJR/dPbp5NSZxMieDh+5VzeKM6l8fO7qspj7Mz/5Fh1AbEw2bfKS2jECM1iy18sOr/eONOJR7bfOLkweaN/It3glMThpeRRsqrOn04zKzcYpT5Vrv5VF8yfKHP6565eGpzcPmMqi7+MULMukODMQZSHJYvz8q3OvxjsjCYluw+lXPIjvh7j391s//hz8zre/gHXd/TKw33+Ml/+0f/VM35v8YZiwGiQGwz5WA6vDTKpLqOZNxJO+H9G1+pOmMyFGc5lmYUS2lqys0zr1ze/L53723+yRfe1GUSnmnfhM7o4GG4NSrQ91i7zuLnT58r2ITvsp5CcWDW9h4gp+TSQo+gl23eR0M0QgkepmKROngxeTXp6gpzefeN8oEQ/iWf/M72J4hRgkJYD6vOA3rKh4CHahmM3QSYOgpfdCg2ANxhp4+dTCGsVV8rJ+Uh/yoTacs1wv3HHp+ajnatih6rZznI0SIBtOhbOAPzVDOAhPTJRiWHt47GteRE3jlosTJPJ3Av1yU/Wqe93Rj8DUxffj7c+wmRh8UbkrPCb9Umrxb/pVrlnQTijIyyrsyPGGFYBUOUCCf7dB7Gs3X3pwujoHVyfEB58GPzH8cOdcLiK2O/UcgIpXDgvkJs9Eauip5rT8NGCCMKdCTo1HlO7CV85H2YqVBvwEMPWn3D4jZiHOEdXHLO0NLBebMoonwwM1k6cpcQrJjj0QQcBz1OW+Eio6M6PSuQ0qtAjZMwpgSrXUxKuU1NtZ05lgTYjI57NSoaPqy+6qFuFIcHdSVYl7AtOgHmH4IeY5JXnv0Q5ilOPMyfn8vKkt69FIkR03HzIKM3KIfyoXb4Pe1v4a7I4+adppFSoBkL+hO34fjziyNIjHRCd4Q6vAaTjImBVb24oaNENAazlKPsSxgt5kuRyh3hVy8uTtdfR5foj9E9QnMxzibO6ZwUfpY/+gXuBBdleW7e6dj24i/Hj9+331bB8OeRNPqgZO7WhvaD3IgvyYdXQvZieT/XSGPS1oH3299hM+uNV9swmMGAvsn5zYUmya9+oEXpudIf5iZ7GFO+e+P+TLQbdRy0T+lmS3//0eevb34hK+QPnDo3MmK/uvt420eCebH6o5NGrTu00MQovDrkM/sGpq38S+0zOXWxMx0OGvGm2BDY/NasuMrisZjkxKzQQujoOaP+YDQaGheI0V/hU0y0C/yfOvETn0K19/TS7u/99Wf+2j/Y+/H/4rMJgB+KG4f5pzIaYffeXfXqQv3dPguogdd8h5d+Ki+NDjMZ5k+W4YnN9378uc1X3767+dz1JtRjfr7cJbS1QcTE4DHKTOgGBbNgimJicnDQWEdd5a93OMGq0UV/NfR0BJFd5iTuVA/hXDoaezDahnkbQanDxBhl4OHhAABAAElEQVRjFYW7YxGMEE7ERNNPs8SJs0Wc4AVQp/KbITsmmzC9qMJ6wQ9wtQLtYOC0azxLzwgADii10qDzwppCpYg+0TKZH4oL1dRc8pVM8bM9326JkxGVM31YdKdaKniQddXQIUuosVzCqbnl6sRd0ZHY26Wf3998B4v7UZOjmP5mUuh69X2ncrnO1e311MTX+r01aj38oxW6aiOrqxxx4mBKGxWNNFCMv/p4AsrIhNuLyIkCixbRgNInf/nqCXlKhq/ad0WUGcUTOjVLAmFo1m3cWdVjlnbXubmxjuWjrqhGM/hqCbCD6v6wg/cQkWsCj0zZiFvy2GuOWLEvYHbKy1v4LM2OdtJHplEShB9+xAsUUcUrZiZnp/6V4VOkiylDRYLqSqk8THgadU9bFjqjkOqr3vLSC6udm0saXMRVDsYqEXSX7ggf2q3LoZ0Pmp+p9rMDHYAT3CzVM5CV2y/8Pe8qPf2isBP1tbF6VSCFoh9R/pQfzWoFoH1ZBx38B1c4WC0Ezl5MQvh654oRbeWcnjov0U2ZM6rQDtouFGYEQhZSJJKG5yNtQ1F3oRFquO8mzrXDkdHH7aPNLz0+yoDpg1EPjsZ1y835ffunNr98/87meppwqBQNXtYvHp/cfDn30j87frj5REPOmmv4/k6KocFK/MLoKCy34dlnWxn1jA871feKv32T37IVWa1gRPfDjlL5lVdvb75Uv7ycUKeMf60+5sNSt6K+erNnrsySvvpf/OrT0kfV3WjFHq0PnTrdHi20RL+IUNyeTZspEsaOaz5jW/2WwYCmlV5HeJKhJiOlTTbN4pEnjz97/Cf+5j/Y/Nn/efK+l3/eFwUS8k+e/Df/+SebXPvfdOplEoY2Bk0A6OrTA4bk6JPwqML406TGKJCIgPiIgCCiXMuVRTimlM8fbH739z67+cq/PNzcHoaStBIxWUXM2u8S8snj9bWMT5/vBYD+6CSuEV/hxmXFDWN9NutAp5rJ2MxbaYxisPAjgqx38axp5pIyRkR3t4Fw9n6UbzpVeeZAx/JhI+UHCgbF9NI1o5zqPKMzoYIXevMi3jBaludilmt1BFgtoZqAh3Mh8tuUhK4nIqojPV5qREGZvFuYzYKY+ygpo4519RkBjM8+/y+ldzr/7+WG0QTiYd8rP+h+ss1KZduc3z/YXLxZp2r4/Ha1eTslcrs8X+p+OsVi8lAnuVMFdGp7PuzKPawsGK4Tg5s4L43pdHRw8rFWPRm+1KFJTrhF8XLwGZuIT1D1TDmGTgKJ9ZngatmV/T4ji5TRs4ntE62eMXJ42B80IgjsUDbZTEjgrXTVWNY+LHTUh4WMHGCirUcQ1jEHbnxCcELWXDdldFiHPtkKLHwqDQaeDpur7zAtSrhTOsOt5Zu+MGAJ1PChYEa+167+qW/vY+hkDVsYQZHC1QKR4Y+KqbiVHiMGgNrUtbj80Ht2pUMnpVq1h1/A15X2fbe5i7VuNKzey5VVivJTrjMaTWDXFceN97Ay5gTk4uEQ6jNisOP/eJbwfiMjLsT70WPmU0JGbRVu1KVP7kY12Fdf2fUJcfhh+i2qZ8ggvW4J55W38hg4CGPzaHeGDeXhuxp0oOXg5gOu51b83N2jzRfrG7Pgoiw3Gmo9n6J42yqogE//qh76+O9+cqqR7d7ms9XR0vYPZjRZzqsuD+6GQ4piP0VrVZY5j9O5r042Orn5ZntCrjU6sWeksGPF3bl2uPmXb9zbfC7PyHP1FUeT2IPyVj9LfPVQ7nVnXBnFalPzgxdTJo4Sul2YY04ul/dMP0rz+NataB5m8Ve0qI2068THjLNEunpWndqjzYgsuJ4x1LTX3rFPksmFvOfX+6JAYLn3537qHz7+r//Iv0qa/8i8RxjdZMzviDZhU8nCqyimGQ7HcBFyLA13RCiKRTcWkoy78Bri6ksXNr/nw1c3P/2F16fDHm8ZysOE9mj10pkYdnDg+PL1vLkqo5GEa0K24ZibEFYiRaKYOZ6l513WNWLRyZdg2/nwNS67BkT/1JYoZP0yxmYY350vd476DuBqUnhU6rax3RdWIaP8+TNYDi2KHCH61bjbJsU5Fp1AjUCYhVAgqCgzsJxLdboyL1ajd4o/W5ijXe7rqNXL5j6rU3Rwp+RSQE8a/x9vzM+dZcnshReasYDOVG+QShDXARsuX0gCO0/oZrW/Vv639Igk//qugX0gdY7iHlWGTYRqy/1RiVP+YbiZ/+BmNO/ivCEn/tZvR7Cghqvin06+6wsUlJEXhXLR/E1Wsg1/4yuv/yDuk4zDE7lVjE5MdI6gH/QTfOIDTgGjEwEx5yhNu4dlceo7iiZS6fBH0WhwL3x3cvEcj1LdEm8jLI2K5nyuABjF7BQeWNoFP1CMM0ToRuBXPIQVOX8ZLHjJiHUWaZR3cUIPJYaztqYgJlNwLXSYj4eVUp6SUM3TZ1itYPZViVIWVhr94fi96Bjt9mpL+0Eskebu4qqCEx4w34EGM4eTEESrEd5Z+jZH7kdH7hRpLJ0dS1gJSNhtRjHbPIIpsRk5Tr2DF0xKYNx46iU8/MctF56EpAlitFStGmGUspVYDyYsepSHK80KqV9rHuCXHx3OHid1PJ0WtJyfMrbuAAxy5EGI/N5E/O9KgXyl+Qnu1h94fJC84Dau5yavR/g2/LZM+7CvDp55rlVXubPuNsL52m/c3Fy5etCIvaPX26XuEMev5vL9wruHlRWNKvt8wtx3R25lwDg/Q1/8YN8MORX8a5X5Zi1p4Ym2M7eI5xlU5l4t0ji8acVW5l7urCcUSGks3Jg9wGNlRJPqrS/tRouIPpteoyklk7z6V3s/8Tf+YZnfl+t9UyCwDflP1hT/yLPOWjVjhonRivOOKMNVEXWuiFkkXsODMaZwb8Q65urRc+EY9FgHh/1Qo5B/99bNza++c2usXWI7NhjFcT64ye2yEOf9mHjbvDq0TUrToQNGiJnfOJsjlQKhTHQMSmLwL9/j0hODo/TA7YIS18saGK98Rh/wnA4z+K76w2HK7zY1Ct5clatOrlgWpv0QTZi6ltrrNmys9Jn9ZUnilESENKWGN+HqOHtD4u9uWG4O4zdyM/z+xAjczVugpVEZS+xhiL72+LCvDEaHcH+cEjlKwJx6NhZJwlvaqnRD54eds3DPctVCzpf3XOUb2dzJwvt6qKDn5erlZF9LgdFFJ+lxcEO/NbIrAN2LqB9U46zY7s4pephiuj8hdf7C1BtFHJ9iL4s8XHF3C+VncFKwdCeyBJ1BxX3EhB5LF4mNJOKFWcJdunV6QaNBBavXFgcd0cghzOYojDkCpHhlO9bfCNThgO7m6pIHYxEPP0SQo+j0IIucYDxKcOAd1g94WH+dWzYtP/TQphpW+0JzNk8KCj5lLg8MgaE4LSaQciz7wq2s2404ei3PgJ202mF/MffA49JlYCjTqbqKplj2zTtoHyOz8NbPSjpx6k+5jL2V8LYIgQDzziXF+i26FUeFVQHzIvPNm/CakV9tYGEL8OJPpuiNvGy+NHE/O/QTspaoTrridicDrPknyiW4BKYr/I3aHlUJfUA7K4ci/vKtw80/Obo7E+MogVaxaZ+QNYfXQwg8nt+jzYeaO/zRx2cm/EvH78/HolD6YpbXaUu1K2o/ZUE53G9Us58iufh8Yj7e+HrK41xfCDydgUVYsy6vtSjh196+v7mZYrPKixy5Em85YdenD66Evra5Ea9GkYw2I/UlN7S0EfelSr3UhL75ScvH56idiGsZ9awwpGGq0/FGJzijbpICGSk2K7Km5cIFjShicbnOP1kx79v1/iqQP/eT//jxf/VHfjar8Mf4PvhDXSpKymhMR3N4xbSjNhAAw9VZNOMI1ZiaIJ1OpMP07tnVaxNaMUPzId/4xcPN2/k8xdHoBI1VPSyR+sY6c2blelqejjjld+PXPVu6szHnCq/hAkZ4rGXE8OH2SSjWkBhiRh1A9NuJCaj12hXDltuIitvsfvWf5avK7Cc/i1tqggMiU9/RsgsCQCzLoQ4aRC8kwo4EiUfzPKAQYkBjUErF6pMP9pcS+UYwLRu8ECwrx0z+PyjM7nSw34lDfReBMrAmPvtuLKFz71arWWVC6FffXEaswndLYQe7s6+WWy8lVPzNJEsr5xPUrO+Oyi4Twa7+Y1FXGlxZ5meqw9lUAbr5BotTTy3d9Y0Syic5NfkaBE2epUAov9VW6ooAzu26ng/7nBFZuBNKFANL2vJWnfxUbod73HO5XcxH2eDnrKT1saPoH49oD3zIYp/2Lx1Fkwgbuq62qR41VcHLDVQHJ9xY/TshV7+tzRzpEqxgLtExdmLv5cdTxVOiqqAs78om0FOfw09WAq5VabVoCaVAN0ua0QzP4U/t4tm+pJmXw2/BHJkrvjJmsFI6ineQ32ZqpXMw8V5xCUejCMTmmoH7fHY4ZWMSfY5pCcMRTuWnDPQFo4NM+pTmohv+nBFDbcCtFLoJ3n7124elUfS6ooORXwqA0qAQ5lj5AOwWuKApWlP+2tupADOXJQ96IHb53m5C+9/cO9x88eHhuI8t967W9blHKYWT812bmbcq/Hx88h8fP9Pc3OPNr+YCwvcfz8Xle2YfunhyLcEN9+P5VU92bAn4F9v3Yd7j7dfutgH/0eb5F7Mc1A8O0edr37jXx6XyfFTsm+H2in4WDd+qXh9vibCTeU3av1V653F9sJa42o8cYWwe1v+4um7txfkZIR97697m2Zda65hyf5Sr2GZWixT2UoZj5GyVyJPcVVaGcXNY1mv0VhGlqy0fP/7ZvT/3N/7xovX78/d9VSBQju3+RNbNzzekw0JVrm6SkNAjWF3DFNuOJPX8HyLglpiNMgFIGkH+eC3cjvKZFA/eh1qV9aNtLvzfv/DG+PbB0Wkw5Tz3NDtRy8sNFQbBRWnQl7Ix2e6TlFYmne7HzHpYuUQISxKrOtdoWYnC1aXwQKwOvH1Wx/6tLpgQarjqyHXjoqnDQCpevv5NZj1swrtBWPj2L9jSCVUWnD0PKYp0WCPFNJ1um25WpRVncu7O4N6SwTYQ2vh0YqzStQfD4+2E6Wvh6PndFKTvvTNB0e9CO7m5uXRHFrhazKqlMDhZJ7lSzAuVeTP8nSJ6FJAHVcz+nxO1z93yUMhOIMVsFIV2IMi0gk2IjpGfGtbeqkdBmOBvZmNzFCyuByNKAhcd8shXV/kJxOAW7jyjR1l3Z+63OKDlyDbC3avjcXWZiHx4ywMKOx1gGRWEcdJr6kQJDg7BRdc5YqVKj8AuAG0ezOi19q+/WjZ9pk57+442D6dwtzrpfjiYZMc3rQyuvOoGdIUHYmjIvUGJzGnHRSpDuypDPSkBu/ytSpus3Vfu8Kks/UZ+VnfsGP4p1VKO8lBmYSgKpkNAtZkX7ijC9yTFGL6UjP7IrsNRDyIWfjYnMW4ewj04cC/L8Os67i/aZ6lTzsfL+6h64xfwxuVW+qFfZc2y6PQTd5hy56uP0WeKJvy3Skb4aqBwEAypeBq+YamZhs5zoGA4j9sqxYVVuR9/NeXxS20P92kCQvRRfIM2A7PCTiV4nYiNg15pDu9+cK9FD6sEX45C3KYfbaOfsT8DlRFyttFHr5uDdqbvx1O3rx9trr11uLn8TF+6qT41Y79OqO5rhlxr53Jf7qfwvrclwS9WnkUgRh9XS3cp1/q1WtrRKqfrb0Yflvjj29PNT35Pu+Ff7Yw57ezgx7faOHj91Zu5Z2uPRtWacHekyayqs9GRwkAbFk30n0bSntG10ZyzM/8ECryfV5i9v9en/8UvvP7J/+h3fDg6/Y5pjZhCrRFqlEGtvGvnHSbjrtFyc03syNinCQVFfB03fo+JqkbPL/bx+dvv3t985WYn25RGpx4hESwTVPycteXTCxPHKv7MRJYjOp6tM1zoTmFgxGUd6nw1TOkIPzBYw7H4UlIB0uGFW5Phq4a1++CoDG44Te18LhPKmH++Cz5xWQol6jGIldc/Cm4udZvneei5VFmZ6gxpCoNYPtMknBEHy8ScDUFn+e/5JtrNBX13k8xE0MfrKD5VS3G5TpaPVQ3eGzMeDrfwwxS+xGhYjWJ3q6kvFTovSNh8lrOey/99Ppy4E14LNcphrsIcrug7CG0dSGg+3nwkX3PznyNkiATPPjJ1O2TuVKeSzYiRWyQUFk26z0iy9JQVt4ALGZQEDpqpDhoSXlFvBBCBSRiudqrNykBeyWc5NYufePYeuBHIAIFFIbPKdyMmdGdBwjNRkeBuUUB1MrHPgIEwhULgtwVjcyo/NeGBTuoFz2XMwCc8Sj9KoDQMHLNpRhKhFfylNNRj8e7isaIHR5yyYFFCC198ueoq7zJs1IuSGbeqelWHRa+FT1lW2h7kRwXUsN0F/Xud/oWPwbKSbNw1hY/RX9jJLGI/K97mA17RQp90rIsRiJ3ho0gACxe7pLmACDynKM9BkxVgfsriBcpmrbqCS+VGEMLQpDk4RpXaEewxHJXV+9du39/8X4f3Nl9Js1tJaFOtOUD9g3Vv2ax+5SNmF+vfH2ui/Cs94/mXGw34NPPp0vyHV85sTreX40TC2QZCox+utrMpjBh388ZXO/uiepxLsVT0/O62qu+dd9rv1OjjWmnh7IuE2u+dFNYo9mpDnlwsfFYkhpsd6s6Ec+ElSh5P6senwonMuAzraY+lRJzNhjDKmE6bATPKI3rMBkORNd4cb3//wf908Jc+89emgPfxz6rB+1gA0J/+gz/yc/WUP1bNudurPIZanSi6Pn3voZdFhBnzbtMwM2LRiZ7023QzXAMLF0Vcw71X+viUQ96+cOPeEvY1hM9YsqyXq4UCI3z71Yg6HrfNDyTgXs754ot6XDxElThzBRkWXVYxxVCFscQxBmEySrC7lRzSdtLHCI+BP+Vg5uwaVevSGQn6mRMQUMREEY4Je28rhDBc8MVPWOUOa5bWMetLuRAYlZtl44A4yyl1rgs5qokTE9S/l/AO2qXyWWEW1CYXm/xLUMKFoGIpOT1Xx7C/hIuLRenZWVnOADMyMKJ4pzIoE5a/iXyjkFcLeye3lV3mo9hK7+jq0wl+glQ5Doyz69yx7iwvSnV221MOvY/wmTpSYjYbVk/NHgEIQgKTIqR4RijLX5h2HQVSzXTcHQ5lXXHu5bDCJZlQ2tWOwvwj+MHlgzfHox2l08ZoOHAqx0jpsHQEuECjm17r+OEVIuLNsZxnrTbpaWHDwrnySopftD8lQTndJx3KLwxt4QWkMPXCb+7q7g4XgmjcpiUqKPpFiR48Dx49UFITV3qCacH9JuyCR9BIRBYZLYGzaFBeQqhE5nHAjCTNLeG30kxAYXUK6SgPvnogtd8I/YBSHo43H2FX7E55qIfEs4Iqq33SNYJYaYuqr86oI14cfmj4ScFklIdLlKqyO+VxP8H59ZTH/3Pv3uazD+rvvaOZNHgQTopjeNwq78ey8n80v9Q3qp19IB+IOty7X41vf2durmebyLnrvLW0j1MOEg+dhdWkd8vab7zVcuDwOH8lERZd1P2BfSAR+813HmzeaMRAHl3KeGBHmUhHvI/mGjso/Eb1Msq5lHK41zs8tTvZ8CjZdbMR18dPnpoTHRhCv95O15uVd6566wMnG20wQPdSbnO6hxFb+WwehMsYlwRGwSmQWwfHj/8nn/65z90p5H29fnsUyM/+4p1P/f4fjpx7f0iTEnwalrbElDr/sq51hmJo2t3lPYLiupIujtA4eGlBWZ1B+uA6ZuDDz5xruWKHk+XzvlPDscL1gjN85Mou//jBA+NDSD/05HTCzUGDBFbCS5mVV4lzZyGO8igkSCOMND7BRcgQruId7Gj0MRPUU7dQCt5OCPGzc39VzPjWVacKx8JLkE+nVSvFdlfGPHvvp/7rOHfxqh2gcDDHY3JW50RZyovlTnC/FIN+f5PozzdpSF6ZV3AMCUsnF+2QlkBSlvkHNHW8tAK1wumeLzRTbK6EFXeYIr5WOe9OjkYPlWFPB3eA7y6MBd07Yeysn3MJUUpDGWjnO+pcLazemYPpwUYqq+idXNoK+/Bf+Gh2T8olPAh8cyNlrbW2lnvPRn8u9KAMtEXJ554604/Lm7AqjYl5dEZzwtOSb+kpLPQ1WpqRR89GYXjALnuGg1GYENco1/KujpvSyogB3/E10NntNdB+zBFKxyozuBPW2grWOy6DHyWjvKMwkhDFhWMC+daEOWqIi4f9LW5wLGzSqdNADdbASADJ4aVrRtTbePSc0P5M9PCDkXIPwoJ1Mkt8P6HlGnzVr2iuUN3UBLyRCZ8716Y8RiCzUivpqh3EgzErrILLsrdMVtrZ6Z3QXseTFBAi+ufKn5K16qrgB41OIEVW7JTUu/Xxf3b79uZf57pyqgK5on7cuQw0BpU2dlld9T1NUN+ozl/M2NJ+pyrnaxk+FoL83gS9as6yZKvKUiI2Bp7tBHAT2tea+zho0nxGXI1qHG9zFG53W/r9VqcTvN1ndMkWwp8MuZLCdZabj9hdTqncaDkuHnNqNSViXvBifetUaa4Wcz6YP3L5/OYDTuCtzzju5AvN5zpK6FLv52uHaaTot87f0t/jkNqK0WOe5EG74s1Pntjf++SJv/z3f3rV/P39+77PgTxF/+yH/+Lm1pf/aNzxMdbomDX4JcJNJ8RNMToXzHz/GaNi4kJ1kXnped4TmMP6EvR/OCz6ijUxv98ZMn/493xw870NSX/u376RP/H+CAcCnyVCyNxJ6hHmlxOu55obIF1BHeHTEzFjmG1icTpODT2iSZEhMWnHQlPmcjcIkxYe8Fx/Km87rJZxdXd/SxE+swpsm0uWlam6bx8d6cFKXzUuX3nQiMizlNgljVETGj3UOcrNhWIPyLO541jFl4t7vVwmdg/q9HZQ3653UX7oMtZ+9CeUTsWwDks5UV5W1WHUWCujYtjoexA+Rhvmiwi468U76v2ZROjd4gmmh+BWLpfXQdLzrdL7SuHFcKLclGF0csOmispwAKPhqbArwdKcJuQpaOdt6ZyYVd3gYARDCZlQLvtY5hxha+K5gOLQOFdwD42mCljCp7abuPJ1p5jwnyXGNmd6R11tRZ0qH1fM6KV0WtDIY/FfAjZL3Pcd1jffzRft54fHKZRkdAg5hgmauOZvdIG0Vt4pNnEOxiXwKI7VflIYBVSHYPTo/1NeoNQob4KT4maxE6BT1ylr8SPFvXivMsLAj3BT08cJH7SWVzGUgrkVArY58kYOUaF73phBwUS4PSyoYtd4hY17aQ8i4JTXSGD89MGAG2XANVVRc+xMxc679DY3zmqr8Knph/8ok4cpmLpN8EqEXGjWdZDisifkXkrnVzrH7fO5rRwRYnk12s4JEd09L4zqAxlPH9SPAvG5LPsz4eSk6HtGEiX6gXbo942MzbHzFESJKmtOZG4VluW0199IpVcHix4Pa7GDM80bvpt7KuH++tsPNzdyY6EX9/TbDZUutQkw0G3Sfbx5uWcLEYzkudfw60vJFKc7nIzn1YpJ8GxLfq+c299cvXywuXq33phP+HoK8l83srp/o/hnT7fLnfEUHikK/ONUIItaVJbBdqI5nP2Dgy8eP/PRvxjY35arJv3tuT79T//po0//2A9/tdL+02+WuBo92g9BJrxnry4dabh6vcbAvc9Vigi4OmHpcH5X/akf1umKyS90+NilhnrnO8/sUnS+VA8lUFm8vgXwTJ2dBTDiGLMHZtwTPStJp8cYIOp0Y+31okPOks7QsKHwaHz4RiBZPYRGacHU8ZcCCA5LQecDr9+aA1EPtVUGgeJvb8EUhilW3BJy3rgjRuH2DKY5kN2y0xEeJfKZWiC+K4/hUgY2R7IQ2xeTwr7arta7WUQzeipsN3/D9wod1CQwfVVQmlvVb77qSGCVgGC1ht0owIIDHR/m/Odvt8pmlsgWRyFIw6J0yuj14IxyKW2HNIxSoMy5ftBdrV03sgopjGfrdheqIRjKxKzoCj/CE22m5ctLsRKF4GsDXY0baqleactd+BptLaG8m0NYYbpx7ZIiscgDLFYsvMxrUAZGPyaY8YKfDWGsv9sJGTCq6SgAe1vGvVmpyrRbPhDz2/ERRVFDxiPas5r3vOq24MzIQ/5yaZMFYdEZILhyZxFBFEHFTzp3Bo05AJb74pfyK4+QqSwljGLoXtJw3vHlFGhBz8TvZ4lzJ6El3rFZUBeUx7Mv9u0n0BefBqe0Y+CUlsJQR0pDejxgnsSk80yAZ71zY7Hu4Qy3sq15h8JHCU3j1qYi1Mnx+5RT4a91SOU/Pbyz+Y3795p/ytCorYzQdsoTMPQ8GwIfjkev5H14PS1oLtNoF2/frBXF/XAjE7xwOo150vHs7ek40zzHmY4ruXPjaHabmzRXt4Nkyp2U1528GzduPdq8+W5j3IgCRYYNI8feE0aF/v+BviT4asewOxPuWsbSYYrKMnn96+txyV1tEi3/g7wmz7ab/VTwD3KB+tLnzVxkr3ei8NtNkF+Koc4nw061uddojyw83ijHfM2Jjn2nPCb8+JM/cvxP/+VfXi35/v/VJ3/brk//83/z+U/92O/4AzHDR4ZhYsYhPpYmvV21BAE5wrqGns6DA0X180RJ7J7nLn7yaUjCVurSxeCNHjc33z7c3GottxIIf0d7xO4DC9Mpyz4J+cSAqWO7tzpxXD87wcWCt7IJ/uOW6VFxwkcgB4TgAZPyEOtoDpOQcwUXHtxOlVhhW2QLmxS9L4FCRMBS+KTsvZD+H0vQY1YxOjZGhS/Xiw1Tz5iXSKr/YGdfmdg2of1G1o81JhfK51gFnWGB6ziFhKYjFd6uRjdnVJP1k7C/1fOtyrgbDB1TidwhMNtNMI9wD6YObILyy+1Gn090lnY6ZXR4tmE7V5Y85lpY8CxmJ6HyQZvEBJ2w1gHBHEUQXmMcFC6MQiLY4bBTFEOTcJxTemuXoQcyVT/Up2iGhpXJvYiSK8+irTLBGlfjPNf21UfYIYOgfKsN4o3oRphN+4cDd9y93DQUy3KdrbaSr3U6w0/gEvS4DW7WIlpogXfQ0WgITyrP+zdxWwJr1w8ongUdjxbXvzWSCkDv/qsrXsPHuJ3QBhO98JSU2nD6j5dCZn6kZ+FSOFuMoXOi3/SBIizflXkUSMCxtbD9lvYKo2hgZ+RwlPCd77WkvfjsJ6+4iDjzGBQAa757n4QZpWNOgVIYxRKMQ6OS+AVMtNeQx3MnUYi3+jb41/v9bPs9vtyQAC5z2m7J0ITHYOofra2qfKGFIs/3cwrCm1HFxuI342unM5jz+LHmBxX0jMnzlITM5kCufvDsjDAsyhn8UnRn2vtxJ1fRV1/PZdak1dev399caIXU2ep/lxFRdm5O8Gw6fT6F56uIrzVPwT3sPKy3ayMu4uc7YNHpDDbcfujM6c0Pf+Ti5rkPnt+cakvCQWdcHYTLmehjX9HtiH+3Ty28ctAJEB2weOpi7rbzjeMb3VRkUCoz+Bkz/+eJP/O3/zsk++269Nff5mv/T3QWxC9GY0bSbHahOTHMbj5EAxSAJoWVqmfXML7nwjD8XNv31dHKI/10SSlyx+TDvPTCmc21t3MK1MjxdB2KANQJIQG+yWKsmmWCAXpmxdqjQdiBSGwaacjDCtfhdWACjhtIOIQtn9XxCPi9OrPGZb2qAx8xaBQYQTauvCnfG2BLfKwq6Q7K7V56OCzFwgLrN7AWaQb8yt4EdUybsnglq+rLWfKOU/iVE53L01JBn6adCeKY+nQdyEqPG/VqnetaeJrcu5xQ90U0mKrPWPa9E4jmTVDV3IpOYFmiCXVuJ6OfgzJ9fyf7/kuWVpOCD+rMNyrzYpbfC+F1LNfU650mynK/VFqnj14IzpXOIuIGMz9BSSjDHh4KRpkUwX44YFY0oQgpZ8p/lrsGp/U3q9UrTzpzH3kcYD1CkkC1CRR8lB3rvfyrjin98lEO4Neiw3KE/BzsmTCg8MzpLINn8ZDPAbsyDMdocOIxIUgQr7kU0CoifjESqirTYOIpQjjNPqDKLpWk8U4we5zjPbpTurgCDSxNhaA3fMcEwZ9oDxa+xKPkvWdth2fUe4ljdFl9RGlqO+nALmA/ZSB9zTZHmCg30AnbwgjxhJojOcrUpG4jyCxgYSEgaBQPBeTk4kLHV0+JmfMw/2EJ7hySWNr5giAlE7xZXZWFPWfZ1akomhMBhNuJfP+RtTpE4+Y5rhX380eHm39xdGeWY58J2ctNgHNj3YvnGGYs/P3yX05xWCpL8bxdzX3v493SmJT2+eU/fPL05mr94kSrdW+3afZcOO/XyJeeOz0jndsdVWKSn3xwMjPa3bjefo5GT792/3BGNWcS4qYnfq0DOLkFA126RgvR8tlGBr9y43DzZqPyF8PDvAfjbVYB4p3aHT99qNPF7RmB5xgyadvTz57bfKR6OFn4bqeO/0Yjkdc7C+x8xrCPSBl9HA9xKyC5AALzsDZ635ftVrV/78KXv63Xp//5L7z5qR/9nedabfGjmHM4FOEi5vpXGKL0NkpBJ++a54g+QlTsNhxjDrfq/ADqNDHtPEfV2itmaq322/kSW9GhkXaCfBRAsEZQDDLcH2tkYSlghY0wcly7zjqYFMbi5POmRGZ10tyzLCvbxKvJ8umIIzFivJh7VmLVjWeYXTgXFoA6qXJWjZWxraN6TL0lK23lzUQ5ASOjuF3ecCWUnKnjk5gsbd9YZtlfK68J7hdSZtxYDi20CgoEeWZ+ozLPJOBP9a7M8eeWH81pefMr48IpE2HFp08RfT3lYZRBKBPq8p4s3406r9N5FXJQG5A5XilWViF/sD0Q13LiOogRDEetUAaWNHrXCSk0GxZR3+iO4kcrN+0vjADllpl5lWCu2ZMSdHEjGRmqqz9Ve65p756AAhv1pB3XFzqXeHCoDHkJjh1cJwKjnolSLbRODE4QBMw/tPNDH/SFyfDZKI/egu+aODC278qYEUpJFiVTHsXNd0nE4emgJSoGPzApxzW6gWdlVcFRGOAHe4eT+hiFbCkx9WHgwIHw187SnkqIUQA9JpDCQhkJb5a5EYkRx8ksbiuqZhI95nAAZWQaQ3BNovcCXu1ORuoLs/FQmhJS/L7rPlToz7i9qsxa+ls9yzubi7v7GNegWNkU8zsJ6X9+987mXx/dG8NHec67m3mmylMuGlK657fKw5f97A63iVaLGCVYGPJ79k5vvj/F8/+Sd+fBnmbnQd9v7923t+numR7NSCPJsi3JNg6ybJbYioFIrph9S+APhQBFgssViqoURRWVAJ4BQiWVVCqhkjiYEKgElyFsYbHB2A6OZBksLI2RJWFptIxGsy+9L7fv7SXfz3PuHVHJH8lf1szovcvv977v2c+zP88550g+D5FU2nH67OGNzeo80qJTa0uuXQxSes5MZC3GzXwdT7+y3T5baUGVaVHug2nXm7XPVvDKOFPo/PFsgGc7fOp6jHSYopr1pzGPl2zc1/iN+bPOiXx8IDPJncxiOzEIuwtz5G+2E++RzF/tz7Jxq1XuTM/XY8DPts/XW9sD8GjlH2gXDod5iVyr8//1gT//v/4w2PrlvH7ZGYjOPfq7f/1H9t/Y+b1Jd2enswHxQGE3BrqbedzIQIvgYhf4e/eV94Myk1IOwCOrHGM6AtWeVbb9kLZSRa+kcjbHvV8E1PYGJL5d9AvwEJEIyiBrZQHGkFhNENbnRFwhct1xFGM4LoiMADJfmc5peUi8mGAPqtO1/i+JEUJhdGhISV+9etJ3eWVQ//qRAKP1bvJOLZ5FQAOw8zkLMag3Ry7elGRFa3hyf4fjJMk/FIOQExJx0J6zRUUIYCxoYaoyErPZXN+HMVYWhFMlp7X2COnFTDjdXcZXZBcpXF/4lBDPFzJlGYuJ9qqOhLyZYuYdjk5MBzNHuJnLlPmmUmmH9olCMY7GBcO+1vtXSnepMoUQayvfiTmwUPJ6ZBGD0m7XzFn/zYsyLEpEmJEu2oSZMEfmcUyP6ivdwEfPFWNBJXMVxrXGznhUZnBjDoydvMpDjM0SJ746wML4GypIW9W1WmXcwFH9LM0uKe1ZT0uL+XimLSORTuqVVx3K8ssGXlNW/3bTaLNnmJJxV89C8Ij/3Jkn7zxXT+PQdwsflwiigHmUNrGkY1GNzMA0Dke00higq2dWq/OBaDdc6RfKDjNQEAe0AfVjLYdrrQvpcQBzK0biLA95tkdLWf1jMjrU/lNWv8vFqf9K4bqfuHlr42eT/C/fNuKLafP/3Q5HwNrRmIW51jeNfChf4PhPGoo3pf1eDn4IKt+QCPMrc1ob5Ms32mokZ/jxtmF3CuHxTFnKuNHiwBvtwEADPRiTYUq62nG3Lzcpn2vVOAhgGrZDxbny3ar9+nC2cpxoSDN4qpMET9a+U+FfvMT5X2P2PBGuovkPdu7Iw/kjj5ceDtoKfjtGwjlvk86D/R3u2b6c5mcCmGdacf5iWthbG/wTrZjHxCNWteTe5w696YHf+9iP/3No+Mt6fVUYiI4++hve+6m4++8fqAvYEaLGcAijEegrTPC/a14MZA+3LeEC1mZFPkn6Cti6VcgqADZ5lqRE077eSlKHD80+SbvpIZQpgKyAYm+vJN+VJT5/KuiTdIRILVt69+VdTGW9Y/7as4VTRRFUDI801keIq0xIEeMhOayWr1J6Pj+1eX1Kp/JIT/l2305bPBWJNTJkZdNu7gt5nD1+vLF02BMN6VMHbtXv7MA2G+yZxVLMgEILaSPUfxFZVG/MlAZFA9htwbTXinxEElEXykt7oJVoD8aBFV/pHsHHfKwT0UcLBGkQUB1y0IZ63VYjcm50/nOw3hftsI5Euep+qG+2eND7FUZb4i7zRHOQ1yfNAqH1hBCwJ/lXZX23XgOjWWYtBE5GBHPoWPfKmPkrvXK0Wa0+1aFc3/syZYMSeQZeGmMmJmUNK6vPS5NhmlxChzE1cUxLvS537VRe77VHOXv19nrat6f1uNU2PpbVGq8XPMx9+aPfQ9ykVarn5nZmpPe+0powZkg++frULz/TtzLqM5MPDSOa1vOIXKv4jwzx6nmTrfzN7PK0D+l8+juas3e61PsKnhBSuIWo2+RPzr2FgNqD705EVv4Pfg7byiDMA+f1NWE+k1jwFWMCZGgCDeZaaT+R5P3TbcX+UgR0hylM26sc07BZqpXlNA8+EH17OOZxXz03/s4BkV7/HunZr8rn0PZXG1djHubgaIR4MzsU7QPRvhajeO6ZRKYaLfzYPD9b1NXlCDvhRXQVxvBycIZZna9+jPVUTnjmKcyEj4dd6VbqDdqCNoDRczEuGrx5elNRVw+0xuRsC6BPnzu2cep867XK43x30Wnasnl6sx0Pgr3a+sXLN/JJ1o/afrp2bfbeepyg8d878AN/8Yle/bJfXxUGopePfejjX/yBX/cdj0QJ3zso0CC/igqADdaBTn9NpMns20qz+0p60ve8kH+S90za8ks/aNekHCkkr9ncuJIK6kjURUgkQIwQHQSl28pb37qJCJh09UN4krVCASXJdjsAJ6EDQj+kdMyFNIZpkFCnvJBgmNTUsJjJMJDyDomoHJ9ojmvlWzfDWCvPtbQVaNl9moBVtofCOk/OVpdV9FU45qtf3NfePBXBBmyF/Y4wWoX0TAQUwq29mJqV1wjgsRDtZOXQLsbcVYP4IqpsJGZtJKkOee+xMF3jYnUt5/ihGNggau+0lRmLBGgM1hYxtbk0JDJgf7082zESMwURRce4s43J7BVUOqapsc9XJnV/1pFMi6q/8vcYva7Fs6Zt5oDmaOMKTmvEXNst5KJRmD9zREqfkM7eDUGdlkS0ej/5IX3vzK/V+DPLleXHHRhYY0PzwIhra/Uh2l55u8e8zK1+6gt4UoZfzM+jxazATkRQaysHQdS/lXcVaDqU67lyVrsXcZRuaahLWDEHyjJniNg4zLWidoJHo2I9lD4eKfoI0R/NImnLwVPRpghj7yPmnOWI5JizIriHk5ynb5Vj7YEDxDCHmjzt0jZbvsyZIRrcn6grxw1v+cscRRsRwYUI2gmYqUi/61T5ak9lOd/juZzQP5fm8aXtRJnKdRkzcAUXMIoJpe+dMeNX+/q08ec7GwP+irj0eSJgeFdh+3anfrlyCUY2HIVvJwrhPXYin0PrOlgq9O14BB6MPd+ZH5/NlHQvnLYNEI2NaZg2zGf4SGNxrrPK+SheifiD0VOYcGVcidZosmfoiv3a9Otc0VbnW6R47oHNFicem0AEnQIXs66meg5X5uFTluNWQFGTVxu3Z2r35wsgOFlfHqjeNJS/fPS//ZH/bgblq/CPIPNVu/bfOfjHC7j+zQVDvGlCdBtwGgYQGQneyIMUT2YCdu97PrjbuyHWfUKeSVn+de0+mAKagg67OfeOU22GtpWKGGkJ6NlPMY6pb+qIAFU2pOMbWJrGQvoEiwFCrUN4AMOo7fKVx6riwZ0SQtxJV0MQBHKO0FrS1JIIgb1aV9rpy26rV197r++uPpEbHV6l6pcFSgHivFtEjmnpem04X9tfCHGceb4ZIp3pObOWxXwvpcJ/XWeia6d1Cs/mfziYLcE+VbaV3uzZZoBpLG3dwfFoxa4tPGgYGAct43T9P1fZx5s4hrGTpeEovJiMLj/ia1dfi7eWOco6khX1Yl8s48pHY83EK7VmQnlDVIQeupDytuqftmv3wcZUZBTGxnFvk+uRqiOELgSS7I85XKqtxkx0CyZYsRNFdq2+YgTOuz9SPgRHxAwCbBNC84UVM0Ehaierm4kJHGqv/biMP5MZCVJZBBVnvPS6mjJnlZ6QgRFiLliDPplJ9xicscdkPZ0yuh9i3rvFkJD1vle2fHuMJYo2sINAIob6D84qaEBm0laX29l2p09165mAAnnUzawmlTULxk0GWtTtJCFrIGgA1nnwhSSfDGEzHhhJ0xkD4Txf+aZA1Wtr8DIrpcs7GyPGHGySeCCOpE23U+UxEH5ITGEe9kJ0FY0D0dQ+/fTF9vEYDLPNz7VQ8Jng1JgJ/MD0ZoyU271NCk9E1PmL4Nu7Yh4vNqc06q/fl2ev8mi+7y7Ag/B0Odyn7TqKAJxv1h/7XeGYW0n6DhnDQLTzWubWx9N6HP9wqP5gTjDupaBQKLBxt+qcoLfV+zMR9TOZnZ7cujUHqz282/+Bs/Clppbb2K9+6DLAMD/Oq7ldfcdb7W6Vu40t77RgcV8M+0Rr2t6VGf6JGNSnCiD4dCvf3/bizeePnz/zx6eMr9I/cPhVux77mZ/fevTXffuXQsXfsyfNQP4Brpka8LQQEFzNdM2XbnxKCnsnzyRYzwIm+jKgJqXMQ0gQ8B/q+eUc6qQjZXCCQtUFnqsuNbkwDcgGwXxDAOxjxCzD2OjPG6YJEqm/sc5K13fIqi8QDNNBGrRSfYj6q1yvh3vPex3RCMR22+1jSIlyencoicfeV24AIuQm1ZBwIJG6nmDgKf35yPv9/TmsCeIgXG/PFkzqNipP11omOie3OSddJMsLtZxj+0J/IqMQ7Iv1cqc8JHgMxNCdrgTaimgsveKol04adJ1URzq52fyQ9BC7YVRpQ7QaEVgIrXUeGLb2MT2NL6N8l5qnF6rJind5Ofj5TRynq275EG9aiXcYIo3GnHAgY0T6qG7tNU9GOe1/NKM9wB+i3RgM86ieWcjYGGsTswM/i+25MZEJaS4/ZgMWIL1ppA0Yb3M/5Lk2rRnFSKp57tc8jmYN5koPdIeI9zkL5SpMO5VTFQMzfcy1x1wWzGIEC1bBCTgb2FRg5Y4W433P5cd4h2lVfq8n/eQJdpSCUTjXAuOYsNwmTmiusFNbaNgi/2AaAXMWPwgmMiOqvZlzaCATXeU7LaRxsxAP04CKs/K88N6tIp2sKB9cV1aOYGVLZI4HX2uTidPOZ5P6P9o6j0+lfVwpCskL40NwO1YeSX03FoQamvSb0sixrIvBj/PPXYSYh/IJ3p9wwwxpLJ2NovfH87Oc65jaw5norqdpEPIwrgKtNq7HTC53/+lsRo6jJXSAK/hzYcrZ2PiWdto9FZNg0gMIp1qPcTk8ei6NwbHTpp8gc1KaGqzsYzGsE43jBBd0P+HQ5T9UQIIt7o8Uokujc8YIrWzOrU8rtMfVRWeOtIDSGT7tlfUH3/Oj//jj08mv0r89PPoqVb+x8djPfPzTj373t39bMPfuwUYQ3w0IGuRp0uCFCIeh6ANBvQZh/QECF6CcR30iuN7vqfdz430IwVF1r4m5+EpMZFcQAhjyBItjghgzQ5UiDL5PO7zrO+mafd07hERzxibfc5I0iQjS8EuolwTLJrzwYhF8BW5HQKfcytQ/N3NWRF/1RH+gqZfj74gqnyhqZCKiqqNs1bFU45OMx32nJTyfSQhhE2nyrsJjMZS3RapV8fY+qftCXl+orc/2yUT0TFD+yQM7G5/vkznq022x+pmc70KdOZ+ZuvQRwVcvc5USbTkCoR4OuTjurbLVeYztUmUh3vp9NSQ0FuFqG80VhVJfoC8migDaTsZcGSsDgVSM/6NnRskYYyTqhaXK1SbSaB8xt8U45FbGCBXdYOy0Ev6SGSDllUfYsmiqJQjQImJC/dEs7q8tvl9N4r1eOLJYfRqRFfU2FiLVmxuIQ0gwE/qr7pnnvtESStLVZ+MzWnLfVuu1ZMGbfMrQ94GllakclVkb9q49BiG9IWJ2VAYfBxPLwI8nPWcinPTdYx/SSycPDUEflb8WtfbN82BFNBIT1aGACjEUrnsoouWZENP53tyO47Y8iN9kzhaMQYgemoWCEUSItLc1yXaHtsAzhNNpkKKtdO1QdeztaOv8lJoEYQOf+hGeXsgB/bFWYT/eJomiqLxGje3fZswIIdZ4yDhHEjS4NF4X2DgfTqAZhADM450WC/acZg6O+dzA44n6drLTN69nurqa0/xopu5rMb+Xs1LcjAHwD12pDAv7zB/44aN7uPLfUf02C8UATqfB7I9APNWWJp9sby7q2mb9EG0oMnGc65m1TmcqvD/T1fE+BSbQMpbfprmLiR9N09ifP2arBYxW8x89e3y2uDcARzKpHSoi66VMZQlqf+8/+cwv/Onp8Ffx31fVhLXX79ZF/MeB2G/IBnsKwAPq5rq/vjR5pJN5BLiaeAgJSN1BYRkmqbcBjbRz7ZYDwWQZ4nbq2MYD33Bm4+XnbmxceKVJCrARPgAJiflGZENglH+odwgz5oFBKB1CqndkIuX2nVTjq/8T3TRtRSCqtjzIwY32Vz4W4FnzsmqxUG4B/epHKavLz4zBgGwbukXUzh46llNarHtGCWn6o3Wca5+q6xE7EiaksHGbqKQ3hzQioqjXD6U6k8Kh25N9ezoT1/OZnBDgh7IJfy7mYaU4YoEh6PfF+v1KTvhzaQx8K6S4rco72zvrIS7XxqLlB5lvhiRMRr8ihnW/NlYPJ/kXhE+H9BBE2PJLIePpnp0pPxOXH/Rmq7Rsy5ydD1QWgv187TR2Exbdp61OaDzGWPl2HLahJCaAuZFeR3Pr3hzZGHt/bZnemMv6w3RVU/psTvo+e1t1z0SGIdJqEJULjedsilk6u8BfjZBIa6NN0i7zEr+Z8RQWPeaH0iGqNCBQQA3TP/PiGkGkx0xk/a457J2ymDXHvNkYKguBHCm9dzQhGjAmE2RVEujwZGqpH6sCms2qsTrUWyoMh2aFw2Aq2jPQVlngfn8LExBsY1KDVuQP7SMmIrpKqNCeYOa7jROl1U/teXX33LQK5iMtayedwmJrX4hEu8dYhOD2aGDa/lLWVCh3p9Akp3MKcpnFi9Xp82aM5rOZrT6Z1nG5NUQYMoFID8C9PvkZzbQGXSgNPD3dwN7o/Te3YeILzYTdtx1hcC74N/72wWLSa9esNIq08trhUKjtNKWnW/NxIi2Eie2l+vov8rLbfPSb0giMsShHW9QcyWF+LO3hfFrE9fw4Nw/FkHp/M0ap7dZQoR1zcB28a84fONr2JI69jaEMvUnTcz4NxnqrBc76hHnuU1fjcjsB1zqZY+fzBnZvHOU9fPLYxpvfcnvjWy/duPzPrt+KZn71r0W9vsrteOzDP3/10e/6VU8Hdr9rECegmsvAdjV+M8gjqfWoMf3Ktfv9VUCXp2crTd8VAeh7MFEqJiJA2Zdt9dpuWK9JFT2xnIwL6YdJKag/ksuShAHgQu55H/BiLgCGViKKBmIHCwFQgBWwIQxCDJ1ApjROOxIyk9Grjeubl7Vg2o0QIlTynGqxEBOVvZpuhJ2zT1EVkJLPpaKTlMeBXQF8HggqJPn2OzaH27fxnkPHI9aLgDBZ/eL+7Qmb5WB8a+YsiPWkTXUmX4gQwceoGvDa0h5W1bkTlGAE9rPSautIAI6+6pV+eW4fMqYBfhHj5Pjtjk4fDYDkhlDaouS+JvR0OWkwvR7T04rw6qZ8pDa+D6YX9SCIs8li320/obXGnWmJ2WrMEqVZpjJhyotQSIfp6wcCdKR6aRC0OJFqfD5jhquW+7ObA7tXKp+Z7lK1iLIxr8xytKWR3lF/sFTbkXSLw4yAMdgzVc1kdovwDLz0fUyYJTLeYGOxQuPXt555r5/gzJisMtXTXwnW7gkgZPd99dKG5ee8L9nMmfGSB7H1XMO8mqsvmPmsEC8vRsEsxUzF58EHsnwf67lyaB42VBzfSLjTMDTR/Wvy5zAoD/rOAa+i2Y7dfT80jtnmve/Tpl1GIV2zMjZ/u0UgjsOc+hTg8uVWmv9MB0M92YJBpzrSJAafwodpQPmVD5b62mfz2DsnVPLltWXUbD9zNgJu66KzPePLA9tgyqrw0zGEozEB5rgrEXGHRB2PMVzIUf1saf9VQtWbE/bs3HCzvoE3c/ZAWsd9aSl3rftIe7FfHhPemcJqCWkvpckwVTExMV29pdXj72jluHE9eXZ3pZWy6ndgkCYmgqu5jAlbga5nl5+/1pYlRzeOtQh6u7Hw7NCJDNGlq5j2wLr3H/0H//xnP9KLr/oF3l4TVwsMP/ED3/Ud7wpbvrV57oI0hm6+ri8LRgfhAPEgVxPlEyQBpsk3n+t+0ni/W55CnUJ3rA3R7rYw6PqVdrwkLYVQZN5B6GqFgkuaxBi8rwmKafK1CWFAsPhEfFofYBtx79j/SYBWvB4U4ledoUghh4WsWrzU/eW0Ec+F2VLLmRFEbvm0COpcNtNjfQam48i71uIlZextwy588UqSl+1GSJfKFhF2rXJ/TbsLv6mevCXkeTAiYkdivo2PJVUx6fBLyPMNdw5vfD5TFQYICRfTRJwRuEXMxsw0fUorqQymKQQOId4qD82LH4UvxLTRPGz/YrM4NAXxVZ+xNDq2WuHvOB8lZR5DMBFi75geOLlJmORZu/M+kOnBJ0ZwsXKYIK7lIB10bi6CkmlrTRnpjXnCuENF02UtB8ZBawJEzmCwpT07vXmA5JhVuSfIwFnVzGXP9Qd1jckQ6saLeUg9FZPpr3ntq0q0YmkaS+r3GKysVjZrMlWO8fEd05UbjKzey9FVMtqtsZ9NRXukZSo1HmrC5DCyeSyDMhqXYSLd+4nmTx1gH2Mf+CtfyRYD6TlpeZzhNVRormgpPpCpI/zAWKyf8hlo9S74FBnF3+GP9tAnbYSD3ecwjOoIBCfaCuFHJF0+preVV+WzzdAMZrcc0BgU89bTma4+unNj45O3CrnPUamH61/z0BieDp9mN2kPd+H0TQlY4IwAB84Ii29ug8SzhcQ5U6NmvCqkYNTCxo/UZ2tN7KL8XOedc8wTuL6Uw5xAJcLqbc3Sg+ErwYxvzuLRE7XVWG/TEBqfmtRfvrw0ihtpDtfqA63yldaqwNV3t/3JA+1fZWyPxiCO5G8xw3YhZuY7nAbEz+Ee3dsRwhsT2ywyy/hsX+8AgSaAWY+f6c6t2z/yyI/8wx8wLK+F6zVhwtobiP1n933/3Qsb39n928bn0ZcBugVBAwieVb0PVQAAQABJREFUkMiaNzMXZC4IHSbSQFPJHaZEQrTlB8ltNA+QGOBO/so7VHjcw994euPGtYwzL21vdJxy8eUhQUWSUhYCk8QDrHKRnqct4LYfREBpyAAEA9xTRc9IeQisywCvM5ljMLXn5VRz9nSpIfYAYN+n9Oo+nBkHwFypLVv3tkMI7Kmm9wxxQNAQoUt31mImBMfqbiYmhPdX3z228a6+dQDnEHUmmC9mrvrIvusxGJI/0nVv4+vq5Su1W6gtxJjSG7s3FS0m8uSlqABtRi84khuQiG9IUoueaZGg6DWmAezkYkwDsVQ2KUyfEGahuw/W553aZziuVOaF/piLHkp7+oY0IAh+rRbZwlw0jboQahqDiCYmLGUax1M5QZmYjJ91JRivcVaf8Z/FieUHEcbKxWxlV2KaBEJiLgkK6hWFY9z1pdMkYhoFENS/tR6jtKVHjJBVJk5zfrT05v0gbCd9RtGZpRAzMGLEfILRZersSd9Z8feEChE9CN2aCZVgh6sf6gIb2urZ3vWqD6p2KAcMVM20yT1BY3wf1aXsZeapD82p8SHUDBmvYO/ttTSHm1UFDUBhTJglHxxCFBGsOSZVOxKyrE/ArKoqU0z9wngi0gg/xCFJGxYasB12lYdR709SXx2qnKkXflVe6CXNwXwDzF4XIqL/oi3MOc1vtlGWnta1hSfd0eSd7XM+wepo+e2sbc4dKWCsHW5mLA5V7oONjDmDPY4goB0SVk5XnroJkTdr8wstTrTXlMi+p6v/lzpSVlDJmFOL3GRiA5Nog0CHZ8ON40VzPdjGh1cyYbEUtBN8W7tHO4IHwstmf9965NjGI+1r9cgDYWIMYsx9lXEoi0LW6DSOZozg2jOZDremZhznrVNz+mHN2diJKA3zNz8zifu/dPz0/u/fg4nXwidceM1cj/3kx2499p3f/rHm4fdnF4z2A+x+TVKT78dA7mkVDlYZZjHEdXVDmuHYMk5m6ZXjvvyelt58EIZ2cnrdTYQeB5+yex7YlqjvASVyxOygBYi3YiAryU5dbO2kn1mFHnKSZOzH44LkN5KiEH/PHKlJArd76Na+SGYaCxUYYlDRx6NQHeNEjtBChorfJTQhZthJ8qUVOAHPOJyk4ZQOQXUC4DsDbnnOxAjkF1n1z/bf3PhyrcYAljkoZ3HE/8n2pRKuzOTDAXydBlXZ59qOQd/2mJVR0xeSlXaOgzdk0o7eDAO60RALyfVs2dsRkvXHp3Ex85e2ILC0tq3G6Vjj9dakxwf6Y0oyH/qBUNvUcbY1qQxEgFmJZG1VPdMQwEUUj834VGbzhZhwqJukrDFLKo8A0CTY0eU/k1bGUa6NCIODszAQPh0BBOYTM/SziO6ae/+XSQ2RhdD99oHIg5IZdHfVof0+leF5ySbFjGHfVh7lTDG9XXm8J53qiwLMrxKk8k5ZfnyaJ++ld3mO2Y1pbTI1p91rC61FdnMst3pTJub7+o/JxVSSqCd/NyKapF1MoBZUH4KXxbTn6qqc8hD0MJOGcUxanOVNsxYvJtOkkr7vsb3ELLS5LKOBYFw0D+U5xvXTRV1hHhYLKkH9/uklc6426MNmHZj1G173na+DOdS82XPNLgxvjvjzh5hfz80ZTfYEmlGJR2Jql2KQl3tvHrcbjy80+/Zvu7807z58eOOd+UtpRBf1vbpEBrrekknqVP26cj0GFvM7mUnrclrMTuNAUHB87jee25wTUu1ZJdudzHmHcpLPWfOYRr/+He7oCdvGSETDs9uuvoRow6APHs+0yh8F8e5u/PZD/83//lk5XytXLXttXY/97Mef+lP/5nsyb+7/7iAmwA5YI7h7CLMHVJAFaPmYxXbuAsh5b3LW6wHYmawAA+b4mXDBJosEdTugvZYznZR6L4mEpEFChCEQGfApbEmTIYx0PbKYiCQz0mtzixhhLLMlegmQf9qEZ4jXkUxSAMb9HsNQMhKkrZq77hdiDnHoISIAu/N+1MYkmcqaMw+qX0TV8fpEonS62rtCHNs6PFi9+slv8mKRRD/XWctAH/G1/uJsbORqZfIhDBHNJDQ+gtqCmZDUNkvLrKV+yKP/pC2E7MYwgjSTxs9iReMwWl51TuRT6a1IH6m79DQcPpQbtU0flU8b2g4Jb/TgWEz0re3780Cc+nB/ENpoySftmBUrD+GhSQipxVTMDXPTmC9Kj3lMYENtRdyY0rT9WJ234Mt4ISJawaEqRPlSjO1y82WFr3k1v8pFPvfqMJrCe50ZQeMxDiWdT18WIV/3ZU+DWQRZ26Uzu2AKdJoHuY0rOqJ95t67ip7+1uzuF9HyfGazl3t+F4LGMPHJE7HX374HCmlYjWHEkgbSsE4/EE9EUz0u0T/8ICrk49BIkVfjD4nYr0OiSh+sTQc00p/O9Dn41vcplxmrTsHP26KsIsrCd+/taSiti1iTWfrws8cjyQ/j0NEuTvYnw8PH83l8Kcf5VkIXmALv+mlc1mFwa+yZkHgTwOTl0vKP0XjP83kEPxM80vhiHnaaZiYWHML8ZRyQguVDs26oA6GCAbB5O3i24SJB5J1pENaOMP9ejrnZoYIF4W2dpw6PzDPmus13kmnqen3fin5MlFWBAg+1gauw3LtpNeDKbty2o3fZV0v/MWkMGPzcbkU+68mB/E1Cm41pnU97S5irjJ3rt/78ib/0d/6q/K+la/XotdSi2nLwxNsevX3jy9/TwP9qUGsCoNTMGsLdAxMY6DXoUK1XTcK/fi0Uhxx7SLwQFTBKO9mTUk6e7/TCz+WKDZtP9fDOpYhlQMifcDcpeOqqYD4OVUQHhrAijgi3sxRGo0k0A6gjfQcI++QNXC3401ix+fwUzDKrdn2QriZWcGiotP4iXXNPPU6trRYHR0EmCGuhEULCCW3vq5veNTQP3F4SPNMVU9KTHZyj3E/GekhotjLRIvHsiPlz+VT4W65A1vLfDJFOVx7NhjkMwWX+Gydo5WidsUDMkUE+icPdkxVfblwwzoMhWIMxDBKD4OBGyC9mU+YHWURzkWf+olcqiy36lb7/Urbet9bfd1TOu3NeYu5MWhdqz/WozlaNZIc2erYRMesW9TG38evweWBu9hs6WnsQXUTjvt5k+Rq/CZPmy42CtmM0nK69Gt8L57w+wlt/N/hZIiBi/o0dJ62oNUIF846J63aINo0IPcbcAYkfZWFCyoJknoFl/gssClUUbMBEFzkpbzlkksw1ffRZuT3TN+UNs9Z7aXupbrDjQKf13fgjvqsg/fPNPGhjnRrTEal3TE49Qsy8M797DZB0NPm+CATxHLxiAhYI8qGIsMLVCQ9zvjnmkZYi7ZyfUeVMWOZS+iGWDYa2aPvAeXN7Md8B7ePJYR5ttV6dZhjOEMKOqrPv4xesDSxmWkQU+PpMoTbUPNJcOb5Zv/jkng+uTyS0Ya0iM8EeM+cIYLtjRsu91rhZYW6rd4WCedowJjzmt8qaM2CiD29p7yp1XisA50QweqIlATvsZZV7PO3tSALRmc4ROVW47Zj38rFYHGi8sjhPuolgayzGX5T4TuvYaZ8vnWbqM+58TPtjdsZop+1LauZH7/vmX/XoxsY/6Nlr69LK19y179FHb9/7E3/og8Hn46HpiSH4TRKuvC9oIQEFT0B6gN77GXlpALT3TbwJGHIQMITv61lJPTVRJu3w6eMbD7zjvo2P/+wznQlwuN01k2paUHSVNAXJKg/KQxL5LM5CgMa8030wEznoTZ+zKrlnDiXaDMCuN/OQkvR0OYLt/HBXRfZc6xEET6bkadNIXN0682MO3yG5VqcfJi8gdjRCey4AI42Tst5SqOLXp7ojsG8prNe5HpD0Ewd3Nj6dH6WCZtsRYapCWJ3Kpg/6JSzRPlizKWGfZ2ojUxYmciQfAS1kFgOWDzoyeT2QiQvztKqcnRkTIcFxxh+tPZl4I+QxrO5JwaK27JrZ9M04GS+O+iv1BRGzr8/lXv2ru1tz8NfbCy3+xmTpR8r7DjuOVtDNpMA7zB3Nye0WVGGGtMXtNCwcsBkapmEVNu3vYmPfurUuUVXWcyxfyrS11GPX7q1yaF3aiTh736zM/PARWJH+FkyoeZzySkeLlMYYT5/Kg6CNPbwxQex5qDAxM872sAtxr35XHzgAAGCA5sOXop5ptvb0vSZMmoqa5xiNuhf0+FbJ1YfZYV4rb2V0aw4wH6HctDktoV34GpjPP/UdiUBzpPuZfeL6VK9yaUl91JY+B9jrey+F644TvZfjr+z9YqR9YdeogkAyX0Ol5rhi+ppw3t0CMUNa0PUk71+4ubXxCy0YfHk7qAsuRBgOHsy4GZdloiW82c/teEBjbYjmLHzJFFS1TIz7Y0g7lesQtIN13jk0doSmkdFGyjJzzOdyOd+g3Rsa9eCvNVExj7dUt3D4zeO12fYDTRJN9MQwMWuB8hNmltqKS21utjVJDIMfw2aMAiuP2X6EqSqzEx6AgQTsCZ7BGEbSflp8HYdKzzdSdzdud2KZ80nMCSuKxYR3M3fvZCIrSuzasZMnPogm1vTX3PWaM2HtjdBjP/P4hR9437c91/3vGGId4CxGAQS6IFKTDSJGCxmqvCZgve8/LCjBpAsWpIViJKvBih6R0o8lsj793NWNL75wc+P+k50KFqGynQE1nJpJ8oTgcjOTNN0RnaThyrvZCLKNIiTHd81U15N+aCKQxIJB39W3+iH0l60UMK/2lXUubZtcHvd9EZCe1QbMQ/8hiW3b1Y1Ins8R/WuKpvL8VOTKam6S4udCjk8WYTU+mPK9M7L+SP6RX2xtB2l7mcKCSf2PaUDcYLdSFlLaME6zcV5CJQlOf6w9UZfIlOMxSesjhBHb6XRCffukEUi/GfGVFmGe/lQeQu4OSUXIdNWuphOS2Tg/n0T4+VD2F/3lB3oqpLsQA7zWOwKvzek4lM25DfTMLQJGkscIrkXer/R5pTqZpTC/y9X7XBrWxZ4790Qkmd19tZcJkrZJap+9jvoUpSWqTAjom2LINmXEcIwFpjGEqzbTBI3YaD59rcvd6VHpZvD62qWN89QYS9RVNUP8sD5gSkDwxujIS5Pq0TwTrRYdrJxgqMdDn3tDqAHLr95XgCaZJ8RcXaMRN37y+kG0MQAAhHAezVziHBDjiZnPPAcI0syivgrcV1rNHjbtXT/3dhf/3YmQOn72ToygzBHCGihPTGPaFpGU2Qp0xygLX10r2SOcwdgT+SB/tpDdp7bylDU+AiOMAZ8hGPUdvhyPGoM9/aLFmx+agbGeXQqqXh+E6tJAqrT3EXZCW/cUAO1h4i1eZub+04eW9k0QE2xC8zgbq3nnZsHoFf1M4b3C5s0HzX6rPp+PeZypT8bxrIOd6qfFyfYGM3YT3dYiwaOF9dqN+NalRLWE0TFbNcA1u5XmHT3LUV6dFmHOtiW783s4n4fghZ3CgQ9W7rEzx77v2F/62/+nHr0WLwLSa/Y6+F/9L39164/9we9q6v/Dkct2kcDAjz04YOhr3HohyGCiB10malTy8sxnwB0ELexbSUZbQTUd0PIt33Suvf6f2fjEi9c23t5++/d3NsCVq0UItSumwpiOlmTJdMVkAv2S7CtLmCfpJbQZgDt50H5T7mIqEXtfJgS0NtgvZ0wd2hCwhwtdkFLDF9J5COHVx+Rh40U+F8TrSEDIh8L8Ijz1HRE5UjPNiDmNo9p2J59rnceNxD6lPhIZ/+b2wHqqZxYMDvVSW+VrpzrYzn2/VtlCX52Bwul/X0yC7wABd6wt57QyHYREU2FCu9E9pDbEGOnViPXLMYJz/T2YXfpcjMRhPVfKaA3G2kY/BowAlmerPo3ZIKSsyHFoW5D15dasvNADezWQMPkvLFi02eKBEI+kaB2GOhHO+ey78dW3WUXeCwwO4xKEMIS6Z2PiaeyrvmdJ6aV3/K8QTxIws5U0NwUz9Mku7scYzZb2fa4whwWDzIGJGaOxZQqfQaJpDZOpzebybnM4QkR1OPNCWdrTR78Eiursj6EOodMndQwxr20YMbjDZsw5RnGv8dlP1Nen3g0D6Lm5cC0hpDzdD/OoHZ7xb/Tb47QMIBFcaiNJ2BxM23YHd8aof9JP0ErtwoMsiCUp00b2ZX7BcFIUl9StmZWtLozDanN+APURykPZjUsJaV/Maf7sruZxX6f0bffidmNuVGGFNlm3IfrKCAlCMRc0KhuVOPmv2wnMuFpDjDkmRAhwCJnx01hjSNhxdIAhfCnMFao7EYx9YkJOc7SFy6n8Qh+/nMhQX86nSdzXvHHIc45bP3Iic9WJmMyxtmLRP+vKhN6KRhPurI/bV3Y2brUVCtN4o5BfYzGNOwbImGS2EryD+bKaCL6pq8NM9segjp5pNdTBA//zsf/ptef3MLN712uagWjkkbed+CM7T157TyF034EouHzeSz0H0M3GANA8n9sF3f1fyOuZKWzS+pjkwd6olBA0jB5J+IFHTm5809ed2vixX3p544XL1zbek2nrvnbn3AyYrraHxf7b/A1AOAIXIeKMRjT3dmk9maRj8zY+hdPFjmvWtSDwVHbTW9TR6rGiHHGbEGEqxJTms2eVB8hHug0BIBBQZAoZ3td7yESiFDTLkfgdLRY8VW5ExcaDn20HXgTQTrwWCor2cirbr91pZW6nEn4+XwRpnRkEIXd6osvqdkQTzquTum+7anv6MGVxdGNQCKoh1w6MihmMieS6s0m7EMjlI4nwVvbz9eFC26LcX1sRf0T54cp6vvG71HcSpzF8ofFBvO+PEJ4qJlKcP7PTpdrBlzISYnVdQgjKrxUQHhGpiyOdH+7T+Jlntm6dGWm1tN0Nozd73rOVY0TdTF+WryTfUW2wiJFkrwx+IX1l9htQK4uxQcgJ2gqOvK86pe277V/6mGcIyWLSpSqt+4rty2Jk+m7UVwuN/BJGmqL5DjmRUe/Luca2gjAPfVeVXHZaNn6gZokiGMQ0bxiKwtTtnXKqdiKjnH/B/IKZ6acIpzuFl4qaonXcy68m4ERhpHB2/Zo+82YH3YnKiglY1X+HsFL+ipmx103za8t2DKpqZ7HgjEeDsBXhfLKw4M/FLK6GM3uCEu2dpsM0ZYxHg+jexqfO0bBVhX2wBHLwSCzfVEJL8ELb5Ew3RzppbJkdA4uiuIoSLM/lTOD8WC9Vpn3izL0gJ8LX8Yj4r0yYfC4fx6W0B/W/UvvfnNRkrZBuYFpmAzM0NsfSNGhhxowmof9306gMAmZ0NBPXIQsPm9Sb7WOFoYSAw5wwjmEeaTXO/xjYKOfmudjfof0/f3Dn/j/S7Wv6Gjx4LbfwsX/00Tt/5rt/9Y83Ab+voW/5X4PeSCMWM+LNmEkb5rL7ffojTUBYnkk7aQKBBeQhx7wACmFEAHkvyeH+EznTXri+8YV20hQV8kxOvZ2kjbNNsDM0FHY3irls5Xc3nsqB9nISzX05nytlzCDsrS4IAfGH6FdLNY8EyFRCJYfSLlIbudOdI1HXPQK/eLsgGW33T5mkSGr1t7ZtyEOIRune3o6jTxdpZauNFyMmHy9E2ErqN2fe+o33ToyZ5mNJ88w7kFp5R8pHg1IPqRhTQbjuqy1agwAxE2wOGtVvD7oADMKHOWISTE+znqDnMy8Vrt/KpGlgYo61tTXIdn8YjNPYSPWItHTkTeYnZkFCL3OBRiJ4mFyt6ae8vfMnj/Ek6TM/9TF9xNAQ14meUnbfzcaYE7vHaNnQmdYIAMKarUi/v78H6zV/D+e53Yf3/FoAxdQjRtuk19J4O2a0viPi076+a5f55iPxqW4QyARonPTHwErv/xDl+VbCLjnMj7xMq/3WqpVvnulvdbtogOrWd5CC6clAA9FzBHjmETzqe8/1wz9TyeehTPCEgDK9jIYyrZuiRip23Kt3K2tlyaxixK+O3cm+Tzdwih4TEdzYlykXwWS2Qpj5VYSvjjO9+rT5+Yjtp8KxJ1r3IbrJHN3M0wy+Jvqqsgg58FoklBMFH8j3N0y1/pztXiRVw1B52lS+/gRMKB9z0Ve7KNhi/7lGTij5MnM2u5Vrvk8Hi/rzlpjT+1rt/eX2mXqeyalC5HtzA3AxzeJEZu23ZrJyauOJ/ByEKX3eKQBgu1DfHkxQgXBd5irRaPwc2i+w4GpH0c4RuZn6rl/d3thuDcmhTF2H0mImvHfXJ3L4RKcQFutx5MDR9+/7C3/pQl15TV/m6zV/tUr98p9+33s/npT+wWY7vFuYg0G4EF0A4dM1z9fXAXQgNUlBFoQqLQll0ALQ903EhXOUTyeFfOGlGxsvt5LUUiZM5PHbNzeeS8q2nsF6BDvV/quDmVeS6M8W1md1M2B+JUf5iRgR5L0R4XPQjboRFqYnF/MTtZvUVkP6Xe1R/6tID+hCGsQTUkMQhJcZS7femTnqXTnOExDHTr+VI9l+PExM//Rgx32G0HwU/87dkxHNjY0PHbxVqGokVx0hjJh6Dnr7U5E6lY/YYgxHqw/RUmvDUdok8Noj7l5Z0nHck/aW5GxIRf4sezWEWbkrtTYNU6k0RNT4WUkuok1/zBmCtLSyEHDyVm91IH6UtF4n/WFkysKAFuFjvtJyo8rkRurce0fDYJJjM0c4F1NaZimS+tEKQtAxKhqfsEyr45nprD1xytxOzEI/9qR/xESNo4FUJwZ2KEZk+vbmp8eTxxyVtd/VB0LA0lRqY+0ZuOuZ+TBGa1ZX+7sNPI1BT2uH8F/lg9FhJuWve42dmVC3/I1L+bxHDC1kdYGdmYveuYZh1UevrV9YmyV6Xt3Bvec2Oex25hTIeq7CwKWauvqOWbHTmx9+QlQbOIvQQiybjo6ELaH7TGMKFGHEPKbsrbSWT167ufGJzFfXUk/W9ux6stoLhsw/mCNknG9+Hoxh6KPNP49VDkYwm3w2hjbrnHmuPvDCnDzrV8IzgRwc5M+1+NWi2dntoEk70tgAKHusvTvG9L4zJzZejhF8Kq1ohLjaAJ7O5NB+JfPbgw7Pqm8n0xTiJWkX1UHriOFglttXMzzWVd01UrNSv8aItrrSMgEHRM3pgtV9vM0UTz1QmHAMxJwcyu9x0BG1aMfhQylzt3/HkR/8G7+gpNf6tajaa72Vte/PfuTxL/6p73zvreb1AwudBi4DyMAuWFif8yWABoy7V4Aypg14EIZ4vpd2CBiEkB4iVNApAFKUzxOvFG8UBSWZU3NtbfFELOXzSffPxTjsVnp//oH2Uhu/AYaxzEDVV54rSeiQwB+GI4TX5bmN1va2qqj6rgopnTDgIe7ln7UiSUyc8IjtfSGQ0N23xjhEXemIYzpJ/9qPmfyTgzdmEznt/a13IrnV+dMHt3IeV2fQjdAjnPpkbQrCoc5FoOCTwWjbhoinETweAnNUInoWXD2TeeHF7Mw3e08L0urlb4h41b7JX06M0Hd9M8bTxz7Vh5myRTPNVYT/pSqdn5m+xahGqtbJniOhANUYIvjeYZieObZXD8T+MzVhNKRH7cc4aBuIvgWKm1E5K9ERob1tSZg82Mz173JmKFoMoj0aUmkn3LX+kG61Rpmjjc2nmVuwhtiQSmdzQGmnL0nWPZcPaTSqeot2gQZjixEJNJgMPStrd5j3yodIGze1rCfGbM3YMDD1eFvf1I/4TR3lH42ot3N511dmF/s00UDMkboGPyJ8zFmYjitaFhGuV/rJdrN3dQ9MPLNbrCijqupT4bWtBmsdnyGUUmlTUL0SrUKevZ7jPL/HZ4u8uuh42NoEJyX3Kd2phC8L+h6JeTialpBgvMCvQJb418DWtb7LQlggDN1XWnCijxa30oD1j2+PH4z/5C1ZDM7G9L6x4JP3HDq68c2tQXrq2s7Gl/NjnKkwc60z0tmF9yHO7EaK9YkGYvHvJmd3Zd5Mk9jJITlnmsR8aWsOzZJ2TluU9nQhv2dyzCdJeE8z8X1+usdYbNVuweDhk0f/02P/49/839ZIvfb/w8HXzfXnfvbxj/zJ73zvvxEafhPiCHAA62gkoK5JG+bge78erHSAOoJpysoEASaJWSYy9ADRn8dJMfclXTz94s2NV4oQkY5kLGSVmcOZFg8E1LN/UgAqAutqyAJQrQqHfxzQRyOoU0f3s+hwt1I+koVxanNNQ4foHuM7UV9tQni9QbxJXGfzD5wb6TlEC6vfUlus9xhiUsIfb6uSZyLsfCHvzxLsFEKaxwsRfMSqYhazCPGYWJQ9a0uGYLhLog5hmRKEIdtTS7SW/a9sHeKsD2d4IAzTttKtaxcRSmNstXcYSEWyrc/agWpDZIw/QusX0ZBOveOz6JkX8jNdILykM2MpqgvTocHYHQnQDhPpO00DY2BSwihOIza99xyxV85QwSl9MfRVT2mqy/vLETFlD1me5NXd89EEarj1GjQCjHeNdwWXV3rp9rQSIzGjUhkDS8rYrVfpCDw66zIu68tXPhBQWkSjllCPaRrTai6tenzKpo41PovoMs0Zt6m1D7Wq31hLq+3R+bmXDJOQHkg2rCOt2+xPm+yWS+tYmod+SoMIV1BMYwh8nD8Q6ep9+cc3UpnGw2JCEnlTUsW0Dn8lm7qaw3wfn22DwH95+9bGxcGFBTfzvvzGlyBmLzVmRj4pc4PRmnMHt43zPlhnpsU4CATGlslVQAufGYsAawFBQNSi9jtx0xYlby2yTmDH2fB1M6L9+awNn7LFUH2lpcx59jW6JneyYGux6tvL/Bs9ILAdi+Af7c+56ftocpm5T7byXIABGLFFyvXSH4/JHM8Hct/9x5avKWZyzL5YjTVhDsMW2qvgA5VThX/n2A/+rT9ata+by5y8rq7D++/9ge17+7650X63hgPQAWo3ABdWNDm+L2bRPayBCS7IEDSRiAbkm3SQAmlhG8A/2XGTv/EdZzZe+VRmKpuiBcgii6xaJVUFwxGsbPtFVFiXQPu4v7URgOtm5fs7VqIjEbOXMn+db/MbUTVXKmuwNoBZbYbEFVbdm5nCtA3xRjh5K7Xw5EhfG0lMMa7+ruUcF1V1PiRAeKX/UFuVfDrZ+aGe/a4c5pDmbx28tvFcBJ8pq9JCsGW2slCQpDb+lNJBinHm9mnPLkRspN/aIEw2cpDtf42rSKO1Sr/EDddoUQ3YMKJGkM+DRoOgYVK61u/upSxmIaTPXHRXgs2YZmjfmC0H5DWvqs+aGWYqTlRmDs70ibopDxcl08SxCtfe2aIihnmpsbnSzGDuTBO2tadp0UhctyM6+3tOCj1R+tGGaFP6UknmlWaizMBj1sHs6/2WVlcvU553Mw7NlXbKQ0NA4CZf761W79F0fp5246fH02f9AmwTYaUP6u9TFswR45pt33vQiFcy6CTpl6hvZtQojj9k8i8fh/oxAeWAbfc0Sm1Z+8I171Wwtx5DCCpHuhXo0h/oXl8G/DREhES/yzTcF880IVPOnVZHI4TaNDBcvbQSzEQSkrZODWPogTrtOPt82scX8nVc4Cwvj55hUKwDmNqZYJDJikbJxGhtE0aPgTKdGnYLa/m+hnFWNoYjIpF/EQNh3sKI5jCyPi02NT/6dSgcIpS0ReG07RNbWy1ozUKQynUnoUl0o418wNrZarX1Db+I9pwsjVDyw/lEkY3THUd7JH8IM9ZW5q/Lhew+dUMfb2182/3HZ43IZn6TBnXafbSzz42J9TPWgFTNxp32vlq92/dLuWD/QNW+ri4g8bq6HvvI49t/9n3v/ckA94MR4SwTAXx/A+nzfbc7TZqnI2JhKLtJFnE0dwstmX+mjLHPli4OQYLaRMgLw3s61VYY6Gbv9yJfOKPFm5t4W4CczZR1lD004HgxX8mZ7iGDHwTsVtBGC7H4aVvM47ypLlX3Q1shmY6UWjo2bFqGs5xP9+54wPrWAFmGsxFAB9owAVnD8OmI5ocObOVUP7LxG+8en605fmL/9dkUUNssYqxZ5cAQwr6q9Z2pTBsRjK0wfzYmDMO0lVkKwg3Fq1aEaCRvLS89prJ6t9uTKrA7MEbUiymXJjM3uwRmCNM8i+j26W01TNswEcxH/+VhOmQ6ijxNWQg904U2WhnOF0M+1EblMGmwe9M4EGfaCKYnUk154X6mrcwD02oEm7/F+i5aDapXeeXVJ4lvZjq09sdMaQXzxToGFyOOlDWO+jPMo3dTjbTlHTOSPiurq+SlWITSE3/Te/n7w4Rne5Rq6nZ3DCbnbi4sZI1VIF3fF8oOg1ZWz5S/mFnv3FcQBuMPHZfCYkJCLt/A2N1LKvJn7rPZrN12S9972odsdotduNVN4zFMAfNgP8pmyr9hJ1lrGW5nzhorcANpVoz5Gs/mx4K8nl7N4fyF9rn6ckzZ9jFgxgI9c8dfSIM/a3ylrg/Hekcoc948YWk00D5pVuPzKA38ABN8G7eakNmTrhEjPAgzNz6YioWyxhHOmCNBMV/IFM25ro/m+WK4CaYIWMxYp6pH9KFweL5NAsuJFglutt3ICYc7ZbI6EEe+WUjuF5+9ufGLF29uvFRgwNvSPM6muej1ocJ3t9NGDlRg1bS7brSgfCLY5hwUmt/Gvov7du58z9Ef/tFny/K6ul53DMToxkRe+TO//tv/WTPywW5bL9TkmK25AuBmCrj4D4GHBJo9f02r9yAr3J17z2gt8xoWFMrIjLTZyUXXLxSNtWsGYh+3FQin+XwGvLQTUtjLaSN2BXUhzpDipdT0k0VxIOS0Emd3xAtqFdK4Pg/HbBAlCO4h4EZUSMnMZaeHYXRCXkiH8N3fPSIJiZ4M+D984EbbTh/a+HWRuWfbHPGn92+Naq/MiWaqHsxL5/Qbv8RUOfUhIcaAmFLvtX4kuN5POknr24EQG1m4h7DWl7mM61CJxrm2n6NBVTbpT12YE8o65fR+ql3NGO3CvRlCGOQXgUZKlc0Y3asedZakv8UUMAZ12rdMFNmE8ZbXD6ZnDO3hZbzHx1NyzlJjNQyocUNcEWz3tLDYx0jtU3H36udDUobvfCZ7goPwz1k/UZnGagkJJP2ea0Pvd5vYnaYuLQCJMON1tbYX/DDpJUDah4D0fRFGGgSij/iTsCWacnfrM1/K1jYixZSt3cbR8/7UiiAaj2lj7RjHemnsg8V/t/eDWUhPyzjCgR4RVvYQOPmz1d8LQDAPUVfj96jdI4v0brYzKf3sf1X5xsWutTutuKblj9mv9NaCXMqR/KnMhZ8r2MQ2IhgQoQt8bvZH47X+R5/c643+wDtCnOg6xL6F20Pg4SFhouJ7C5YwjPKV115s04/K2zODgglnmmNWT6UBYR7q4B8hhBhB5kg+KYdJ8aEIY79ZGbYxOV10mfFT7rEYpzHbyST3xLM3Nj528frG02lW7948uvENnSK4Vf+fu7C18WJ/D9qRt3F2fsrhwoQFGnCyH2yvrCwouvWb7/ub/8hyp9fd9bpkIEb5sQ8//qU//d3f9sXsiL9rkKHJNLOvSkzAKsAAgCZ8raaNKC24BHHrCjgmD6/hpEuSSk+9UzTGVpLFzstWc4vkWDKf7RCuRkjZ5Nnm+Qku9AxxU6RtPjAB0r51IcBS3Do/yfVUZBdAHaIW85jtSTSwa0I46weEYpZxhvPJ0r5SfZx+b42ccRL7FVnyeJrHwz37DTnMP9FZHx9uK2oAT2LndHQQlQuhtLEix7wWIaL8DD6lBwQnajeTio0Al7ax2r4Yxu64GqvaZ7xWWxcjnIOkqoNPA0EY5lEb+1qJ0Lure0PvDsP3XP09rj7RXzGpxhNx1X4vECJlGiv55lAtaXpXsGNEPkmwt/c1NhjupCsvbQEh0Edax6ztUO+0e9iSuyl1mKzyItzyINzSD5j0fCCofNJ7h0AJTXVp0/RBud0hfPriU4ulTUbte2lr1xC3vo/Pp3QYI01TSC7wHd9Un3Iza60LY1ljYNyVDc681kb3c1W+sXInnbbO6NbWOe+jF+aFuWqYMC6FYVeayDx2fD3CKNTSv76voqek7u/EAKbM3f/6z2w1rgxJzU33nitAn2kftzPZ3Ch89XMR2E9EL18qkyhD82woRaIRrtQpzHpFxWnA2sDQpp8lLW2LV6tDDWebW0xmrRNq1EsALvgxHAoG35i8OM7B59kY930xDlvA26XARpoqhLf+CGUWs/KZMlVKJyqvrwNHj+RHORnTONrfDEv/rhVp9oWYx0dbdAjfv6UFxI8cP9a6qDsbT7Tm46Uc46etXG+h4fg79KG/W5m7zNShzgKJgfz++37kR/+hEXs9Xrsg8nps+sbGn/nw47/YeepB9b5/20QPBM5ns7RL6DwFpPPYTcAyDAMcdq1sDQOcQWB3NZDtAOBmNs1Ll5OpxW4HiLdCLmhm0SCtHEGmVpNYLWi6PyAjzTtt8OWQBcAi4jdLdynTFuIIyRCdw0V4rDUOIU1pkPpl/iisNC3j7UVaDbPo+ZkIzDsK3SVVjQ+iVlto9813j8ZUDuUsv7nxseQswLmCAXL6hzA0IfcYgzUbiBykNjbeMcEwO802EdOnELv3PZ4/YzMEsy8ABXKJ5loXEokALaKF+A0Bm3Fc+RFBBEd55meVhyn4W6CnDD+YFr8H4khr+UpkziJZI5GXL+Ft0s9ajwo0/k4+NH7DKEpjfKXnXaHHYILKXPVgWMvRSrIcAlZeY0vSndZULvoqt3K+QrAXE5jV5aWcfuhcaUREjU9I3REiDGHWajTIo8WN5FIb0iR71ef8H7OX9mqTv9FAV4q5N6ZgTuoZRHn7oUH5pm2+ETp8rtDd9c4eV/3OmNFGtEmGujraxuwuXCipiKCKGtMNSdlBUha4SW/0heze89e++HwpQAjTGGGi9xNh1XQy/d5OsvYnRPlWDvXtJoxj/an8f/8yIeepNI/ZbXe3vgaifqYZBI9vT4h5MJ+fMTAW8Mac0BiZqDCS882l7fgFfIDE0fr1sfcc589mLRhm1D0Gc3/mUeuOjN3FcMDiWI53QwEvaK7u4KnZN978LkLiJXo4vyL8ExVGQ7sRfXg6U9xnL9xIw7i18cXWjF2pzm870Z7ACTJfyoT1ues3ZwPQs4UAV3wco3/GXZ1pJtuZxh1pe+T4wT91+q/96P/Q49fttbD4ddv8mMjPPP6hH/i3vv1tAci3DRYENK5FdiBvNz2DsH4ACwQEUBgJpCcJjlcsBBDrzYS1daWDZV5uQV4x3Fs9d9b4qRYDvBL2kVgQK1upnwmgRf6w1VpcRx122NOptAsSMFsrJ96l3oElBFl8O3XdD8c1lZmjUDPeFtl7VyvMLWgbabz6HixcdystpCSzJoJ99qF8Ik+1/uOnIqGfz3SF0MFsP0IY2ZdnFMoEGdc6Dd1ekjrfyEjs1XkixneLVFgOar79v6a1Dd6MX89HK1CiRlT/RJH0ZYhp9dJcxmxUGgRUGvWvZmE062LCKXn5VhrEVZkk0sOZ1RBGq/aNFcKCimnn0dLslYuo9GK3zKKourdf1TC/mZ9l677VGI5DtQqVqy/aQSsZ5lla+eyjNSHUnlfPHH1b+vG1dM+3oo3D4Eszo1xB+yMYPZ4y98apIqeMGYDeTZ39A3mYUl2rnFhTn/q1Owv1gIazGD5pWH2N0KRZNvzKam70fDE1rVD3ao+yNGYvlBw87iYY2MReZiuRCmAmGzQpCYbhNEL7U3GKz6WRcf9Z+AeMihZCCO+0rNsKdN/HpGWeorPm01G0YkSYZ2jVtIqRxZLCnfj5pWAVnL64q4VjvsbaZbeEr096P6Ev8vWYZjyoWCcETRAYaBH3B7dmXuAKLUM5TH0sA4i+bp8Mjs5V5ok6yXR8uT84yJch/enMykxr7o0LQU+Zdq0Gw6K6MBIRW/f1nLB1p/untjJnxyDsiTVrT2IQLBAOuHopmvGZwpK/mNmaoHW/nYAbQ+ePjAl0eppDvz2ujuc/OfPg5l+574d/7I/N49fxv2XjeB13QNP3v33/99350t23RpTev7oSRENaWALaA/SFaPO4fyFRADVSYMjsHcy0rw90JLZBHsjB6W5TNlqG7d43dw5ufKpNCl851B5QASBtxH5JQgadS4EwnOX3iMADwkvthkt7QaC4Q48G3CKhSpYDMLV4ntsWpZ107xya8NuXQ7alObQXT5Kt1CfK8FAlWIB4IcL4D/J92O+KUWyiWGrn3gWhSPMAd0lZtaueQdgJb+29dRTIhX2zbHeN+I6TuXy3khJXmC35/StESvmc2+rTpimh8TXO9mQa53uF1sqI1iJGWS+GiEo92g9qU1PRJT6ded79Wr8ghDPpMoLOjY+oYmwaiuBbNaxcDJQDnLnMOo62a27s92282AaS1nvcrS18GBYUkl6tw3mw7+rELPo65i8r0JXhD1FGRswRIsRuzqSFaPNnVcUIDqKxpEPUMYQ9kxsz4cBOZRtL/iX16DOCLQJMHX2dcoahNe7258IKJrij9Mp26S+JgolrytCArr0yZr6mTnUQEupfddkteQ9mwQDlAnyLvjqYmVYkFKbhGod5TGP2ksvZgyncjTjyeVBTZofY6hjlKa26qUnzaHwaIGfnGAC+Qv4PmkaccXwjTHxEAAcsMe1crK4XWsh3ES526QlCvZngdaq2rPPMaRy0sMZjVNdwojZchITluL85ONf8K48/hLBjLMC0sghgwngxXzA1QluaARPkjHBlG1KmTn8ECzBCkKKF38g3Y5yUZ3gIaOZNCK+tfta2PglzMRtwMfBXWxxh8Evh/8U+CTn9tvnn7eCwTU+r8FTPnbN+uW0Yjm8d3Hh754Q8+Mjpnzp98qHvqzmv++sNwUD2fd8P7dz7L/7w7753/d5HwslvAaCh1QAisJn7oAIA7W9CMY49jWTAqkyI4kC/tSFlcMwmc8Ch8h0Jodj8rdK+L2w6EaH/fKU9XTrEMjgfokNaQVgROtszOL71pbSR6wHUSEoRP+9dFiGSqAC8sNPjgTUl+pkDVsA772P/hm3NH6pMKreFhFdD1sdzkj8eeXs+omireUR8Af7qnwkV+orIkti3YorQdsX+r0gl5Q0BC6loSaRwYaOAHxLzNWB3tCWSmrEcjaPvCIbvxtTfELn5Htb1QGoI6zsmxLRyO4Jg/KJ0IT7UjwlUWcNZysasd6KL5mjY3kaHesa8Rpql8aVJlHg7ZopQy4Vo0Kpsf7LZyGHWykFclA3BhWM6ujb3/saLMVvblmAoY/4q3yxGLB+Gi2GbG2OJ+BEEdMIY0r4QdOX2qLT6X+q+I9ZD5EuN7mkdeHB1270n0vm/mM+ec11xUpkzecEiVu+/9ix9I4JmrFQmQ+U07VMq0ipajHDgtXEXCdbX+UMIvaCNGGuO8dl5t86JBApMi6BqHLLrzx5NTdEhnKYyF7Ovl8238ykWE6tcuNLPXWOgITWioVbRMBflmDvz45Op98WinV4uIXOjQAk9c144GDTHF4JRi/8wf1ofQcbaI0zAuGEwBAX9o/0bh9nivTyEAidO9rR/SxtF8M3/HOxVWYMf5R9TYnXOOEq/W//4ASuTkEfosgnnxRj7A5W+TKkLtxxIhW48kZZxqToeyTx2MdwWUkwzgufqAkcv9/5N4biNUI+mjdx/MtNb56M/+NDmp+6eOvq79/3QDy2HqHa8jq83BAMx/vv+xA9dvvfoH/5N+3fu/Wzo9+YxjYCqJnyAK/AbxA7oFrgtpGPrhXCemfzgZ92XyXcSyXKwrgVLwP9kBZ0POw4lQW2H+RCZBAT4STYvRYCfjlC+GPOwwBBqk8QBO0cg85aFUgjYQxFFBEBUCgRxdgYEOt/Tb4rBHCuf7cl/4t61jc+2MeELSUrkqrV6OQAPUbR/tj2pDZvZbJnXmF0s/KPqLzkMoSJVLz8DwowwXad1VYCNDl+O4dldF0HwDCEZW3NlqMc1ZK2yxzfSHcItw7wt/WgjpUNAVmhuBBC5i4KRlFfCKaqnnu1qAI2pNS2IEp+M+swbGmXsLA6zzuNEY2IeSeq2RIGFtlo3q/Sik40t4kvrE9GjFJFYzoVwfggm8GAjfL35EdlGGjVvY2uveQRrphShoYjQ3rX6t+Z5X8TFnBmf+ax2ZF9dGPpQ68pBdoYpGcveKEN66Whsxlj6IdaT4ivzOOMvbXWAwckjTd8resFy78b81wN9BhPyqYP/pyoG6JiUZqfZtI1o2QgAoqvW+g9tWOXQRGgXrgnrjXpbdY3xqBR+rHls3Issca99GAUnscr1WVuH+fdpa5jZNr/v2oVxqMEfLW2YW3fmgVZlW86dYNBlod/JYIY0D1auBKu3yohJChIBL3Z4FtDCb2HuJgS+vBj/YQR/l2HN2q/ejz+kephpWQI42gkQg6N9t6PCMJHarT3vONCGpdX3cr0SZfVKbbjRO/DxSn1ysue5egZeDTdBSf8JaRbdnjySYJjZ78HzmxsPnDuSBez2b3r4h/6m42/eENcbhoGYjX2P/tBT9/7k97+/fUk+lOnhPGI/WsUwjUHtJhfeh5QydAMBEcCRrHoOEUX/kDycTWwFL7syycMzwOEX8SXZUn+ZrmwYiJjZQ4m0xT4LQQaIA3Z5mKtEj0ydISaJC5FDCPsa0pPM7+YwP7jxK2JOL4XAP7EvU1Xqvw3lEHfEYEwrtVFbIfw4tivC+RxO40MQlffq2oqQSDpI6B0E0W0Mjb0XAeFE5mhfEuIiWtqMHKjTuGkmh3QfrxI235HKSN+UietKrbaJVqqivTLUJMbeOGKXyIJniIFr+T5oP41DCM6UgZhATpKscTtQW6wHsaW69wg/TYRm6f3lpECSLckVibOLwNF8FfGPto23uKwFX5V5rtEWwWWbbv12LKr1HWUZh62ACqHNyq9LU542YgiivJi2WHr0TS/A2hrhxq66ScrGpiQDOwiZGywFu2EqA0tZ3SYlgmd8Jw8YrN0Yx5hRqgss+V6XGwOgu8auhvRtEVUFzKLO6jpQIgTb36gaao4Ti7ialulU16wir2wMBUzXjClvzjnXQUNSeTQR/btXqJNyRvBq2jjV61JtjUEXgrXOVjEn1ikVqVRtL9cWOxpgNn58Eky02/xjKYi1FjEn6rfIRU55h0MRRjCO2bakVGCYiZFpEpMnDE2fej6bN9YmWgUho9bNeDGLGmPjRWu4U/9v6VP10EjreW2qK+W9nZkZkwLF2v9UQluNqsZMqj0lYHydxcHdX49rCQfGiKxJwThBM3PaQ+2f5TTFs/k8ioR78erF2+9/xz/9p0/1+g1zvaEYiFnZ9+d+8DP3Hv3+7wkSfzqgyoIRVASQ/ZvtIQAQpIL4ngMw5oFB8BCDSm8/fsgENQFdkXgbN0IOCirgsOPuZuVw0s7iotLdCrPtkXWlqqx23gyZMRTED3K1yHcIy5XuH+4YzvvK42wOTjhmFVuZk46/JcL2rhYf/cKtmxs/kbnqyRyPzhA5FjqQzKnrhD1EHaHilAbofCtMZ8xX/CTORghnhik5z5npZxz7ISVCy0xklfpWfXAuwsuF1ZD7IBLWAnkh8jCU6vEcwTMqCJ1r7rpZORqZxsTNEIneSz+aUX3FtBE/JpdhZn2H7MZXX6aQ2mFO1Dn35R+kL600JEwSKkJqTEmvNDzEx9oQ/VoEl3aoxebg7sZLBkKbS+8sEUfkXopN2PblVH8kSmU4jZHPSWLjIi9Cwk/BX4MxMRsikogeFoCMuxBXbEQblIUwmgdrZ4wX6XTGbv4bm1eHa8ZlRq1ypUJa52v5Zsyrd/XR2571Tyu9W/X03LP+YS4+PRclhVjPWpbgw/zsL4Hn6sMZbQrIfGuuScrTWK/ASakAW6+nUuapiph8azvzhjRc4Ovwp43gHRzRtG/17bl67sxxvgsmpRs03uoVYXhdm/u+pPbylJemoL06CZ6xLc5tWkbul7kw4XGspzHr3zC+3ujDDpNb9cDpmYeemTvjb8ww9mE49YNwwP9n8IbZVj7YxPx4RAiOz99tO6DqcTonH8eb8m+a6cv1Q/mYjwAZ8GDhos8HMm392tMnZjsTFsEzpw9efP7Fre/57k/+3GemA2+gf284BmJu9j36g5+49+gf+t6g5icDm5MAs3kdwB/neTf3kgwWwQkpYGTAMaaEAP1Oq0V3ih7pRVEnydbtb8CWGUyOhiF2Q0ihyCG+ilNpC0wGZ8ryRJSZT8FWGdR3hy1tBqOYCSmK6mtNyTOAPGClhZxKQrbP1deV5+Eg7v/aubnxU22CaK0H5Bppt+/CQjcLdbyeKs0OD3EQEQzNRosnKpsEdC/GNHb+OMzBMIe0xwzwQO8d+bpdegsgOSmp/va5glhruwvEGfHtp/Qk8TV4IZcBqHxjNePlDUKzm74s/SJdi9BIOiacggJGG0krS/abttMiIBs7fbRn5kbu2YUYkSuz/qnHduDmhraHoewLYQ805swVxv1uxH6IavUNESmtrCREBxExZ1pg6NnF0nAeK8+ZEkyO521v0ViRaq+Yz/6O6kM/cwJleRaiII7dNA7Yhn4jSr6bh4ofguZzRqF6+y39bvdKMQyuucfg9FfXpR1NYS9dmRBGtcwcz/fSVK++DAE0l0qQZ8pAIJWk3PL351TDw8ETODPOylRnwzZpmoIZB2OhL/o7rWp8CCcWDpZp+Upwb/VX8grf7ZU1Hj0ZZ3lzQ6tEqDUKLIF32/g3OyOh8xFoYQUMczYW/G36o15CgXERjiu6DyEXqCJi0eT50C/d0AWf8rnMu1JEVYLTWU2+OjowRRP1zCbBfCR1sXbVt+rkB6y0yl4WhdEye2bBopB8dagXU7leI2gz8tNOCITaIo2+2/7kPUeObpyJGV8NKA/e3Xf1yxfufO/7P/Vzn+j1G+56QzIQs7Tv0b/80Xv/2ff9lkj3Pw5BotNNMYjrN6gJhknFIcNgMEmxV0HFvojJ7fbHcRTl7fapudk2BBzic5UfAlBjqdrc3hy1TEvPhj7Pt1cW27uQQsAlcsuJfoiU/Xs4dMfsEUF8+E7mrFCe6eTtMY43ty7kqQLt//u7l9rqIVSsndtJORgIojAIXhdI8KKCSHN8JYDXqWqnxtwScamtENk7ZiAJkCmL7pjIbiUNGgRmt5cq34KpnZB0zGCwoNTzf/c74rIGTRt8m3+7yUK6+ooQIArLLIHwkxxpeugP5kErMgY9GALY28Zgf4R/X4xgkY8IoAoqxzUSZG+MN6ICjRGlrUjPvsZ0kLh6MZQs3c1HxKvsJGCEkgQ8hFGVzbUt9LWHWY9kiZFjpldqg7GyszFfCinS2B6pTM9Jr062QwQxcEzV+JKy147A3mEwWMB6rgdDnHriR9v5pABbTUyabRx9MbaVDwa99tIj4yToQftHipas+6m3Z8YEuTRuilkjNtmHUTBxIqiAWnlSRgdnsaCtRzycMFx5S7a/cNTRKEpLo3At/OhBY24FtQZbPU36RvAdoqRsmiohQkP6X7L62wt7TdkF+kKw/HzwJZx2wYlRqpzgVUTfRH2VfqLryqvd5nD2PwNb/Qw8leY27UV7taXPwQn195DGJJjBd4xCSHjFVFYd7zmBZWkM4D2NnkZWX4zhjI+5qwO0Uw59Gj1tSYV+zL+dn+3aDFeE4pt3jnV4ag+tqplV7l8s1PdApr7Cg29e2b7zW37r53/+oyV9Q157sPeG7Ny+//wvfiiu8DsDN3tGD9GClH6CxrWFu++JW/sgEUC5VWhsB77cvNwBTBeL/4E0ASuijZAJF71aHtI+55qVzNRpB0vROCxs4vS2UtpuoqI1xKcDVHZSzkaOYM5nx76S4JT1C5XyI/uubnwmdjPbyAeUmEdg2Q+/Rp81FSAfD8AdhrS32pw5QISYVbykes5U+wpZo4JxcCzTUvhaRFlBFBFibP8TvVT5PeoCDgsJ96TCeVyZxg0zcJHVRqsLaWeRXveeSqO9CPhI0PVfwb4bAT9MbiRlOZi3HJvLvIEJ0zC0DQGpmPq8pGwSIkaBuBgvkVejMZXGZprWvSAae3VLMyud1VEa+3tdq3xMZg/xmafW6NIIM2n1XuQac5X85lkUnX8AAEAASURBVNh+ZzZX1F71I+D6glUgpJgLzXKPoJspEu1oauWnLSCWnO78aYSOGSkT2S9mZK0AoodpGR+mRlIdbWP1eTEt6Y2vtDJLPZ/daq/x4t14NZIteNivXp+9bKlC/0tUA2hgyKZ3yjCXGAptu+pnnPcWS848N+1ZRCeMdzTiJklesCjdaCQVpUXmxR9tzgmSF3vPzzflrNoan/LUvxstHDHX/DLGZbt52g4vFwzs9qlGqceJh7q+hk5N1ffqePRdV6oXPBOc+NMchSAlQa+klZ8GFKyZO6PhAucYiz9tEHW5WaTBHrxOAaV18BqN1b5xsMBOwlu7MGVOhCOf6hNcgeMv3L61/cTOzd/5wS8//iH1vFEvbPgNfT324Y9//tH3fccn793Z+XfjE7knQn+wE6Dta9I5zDGXTrnZ2Lm2tXH9xRYQPndz48KzrUQXaVJi/oIjmQJakB5zQAzamTObKKAlwWIEJExSKYlMSN/R0r7UO6YkG7wBTtIZZmMdx52A/JFWm5/v7ws5yf/J/ms54pemoHkAWEQIujiqfelPwfCAWfSIxVfuZ/PDMrAwcCBjCmtLh/ID/ApA9HxHSCCy9myXh3yHcFvHog4ETfkIF1k5tJ3+93AX37Ssr9L2OSjXd+NRkX3OWwmGiCKIka4hMDVhkNszxA+RVc6YiGoZSdFzBIUmwXFaMT1ZBNrYDVPqs9zTHvXxGzG3MIXIj2SQRGVGYKzXUIb+m2ufyqbt6C27trG235ToNVE/NBHlCpLQJUhirsFCv6PJea7P7qWVnwgyPp7up91lmrHpRn7jiqloo/oH+Xou9Vo1j7DXz54Z4SUfe7/S+K+M0dR6ZgwRTO/1xbsh6MruoZDdWVmeA+5I27SPX6PnmMk40xsfx64Oc5GHVN7njHptHkYfbtj/iiBlDoX0uvhDosX1ezH1butXcFVfaLev9N3pmM/1B2fMnT8XAm+8+F4OBMPMTuYdDMLLEQa0Q57KWvlWXq3TxgkWmPTzZMbAWGj7bjUz9s4xB4UYhPGTV13ujJd2KMF/8DIBM90TQPQNs5CXFcKGjF9hNtom7J3Qkxm0QRSUIX1C5O3LBzd+z3/73BM/2u0b+nrDMxCz99jPPP5Lj73vvU+EvL8jprHoHEBr9ehGe17dvnJzY+vC9Y0rz9/YuPLCzTSPFJZUdPZ/iHgktf9aktGlpGXIy28B6MSLU9FJTBzhFiY5M8Rirmd7Lu2o+wCvtBc5/QLY85lLfk07574tZ/qXCk39l+1pRZrdIxiz0BCCVS51G2DvAfyedKtfVptbjAjolX9rl3mMOad7EVZCkJnSaCDTlmbceea3GwWSklBf/JPJAoIdioioC0H3uRhoZNdr937Ky0exzGsRmvqNUK5WRgBDNj/yrwsiDooOgkFixAJRHS2rewMa7+35fJ288uuX9ACV7OcsCJfSJ1vjRGqUlp+KYxSDcK+81Ytu4jLGUytJ+b7vaXWInrkiOZ+tfJomorW2EV91eb9LnoZwTytqq3o0CRNDcF3mmDChT30dhjAMTD1S1TCjsZhLCSq7pFOYz3EC72Xu3RpXTKLyK3AR69V/2hBNbcxW5dVO/ZPrYHNJ29gF+PluxfkwnqSiQ+3GK93SSHRmepPQ0viMxt4ck5rG7tr45/NoiHdhQUvBEB/GGmdj7QzywYvm4dlCzF4JD5h1jecwt/L4Me9Tz8zkEiiUB970c2BrBkU1tXLaNlWufz2TfjHN3eeeSedVn0xkTLoDyz2b8e6V0Vnws5u+Z+qwZsl6JHAA7sAR3NC/fofhgVkVDLPrBqz4Md/wqr7eTpv7fT/y/Bf/lpRv9OsN6wP5f07cvv/yr/7123/0g7fu3dz663du3z58O1PVLJBKZLh9fWfjUszj+oUk8Ry4Dn05VnjV1tUQJD+Is50BkthuCIdMkFLtzyMklnnimUgV4jUHTQVtnNqOlgXI0jB1PJyf421pHO+ItDMt/XSeks93ljnkqvgAlaSztpeGRICSwYfUClF6PSoyREQU2JWdmIaAsMtaA4IPOBUOUZzNBsf8syQp2sa1jOFttjDRS9dTwyEV3wVkmdDZ6tju+SJxRXhFIEirR/NV3ElzYmrR3hVmmulhiHV5EcbqIgVuFbnCRQ7RGK/WwruFhPCPFkRLGoJYGszGd3Vqe/yg9ixThjap41hbXViQeDNrJOJrLAREjMmim1mUVt0Y2yJQiymYK1IhaRdhHZNT5and/CXvpnUwc2RKjBM4UEjAgXFl+phWN976PMTZfKt/99mR+jH9654O5Kq48Y8QCko6bfLcWNNQrG42Z9oqAYKOQCp379JuWmDFTnneKG4YcV+Y1vSUNO0dwjfhy1MAwSfmEKOy1bqAEduUmA3HsC6zUwnV3+/dGMTB7Hfj94haYh5MTA5ImgSaWddseSKMF94g9IjzajFi2183QndvlJ4DekxZPZcOhOsT34cTOeXfLXbK0LdF1tVYv3swcDZ5yhmHJphYSyStvOaUtkZjmf72TDo/SjOm+go2h2H0eMrtboUIg1vpFuMFNzT4ikyjh7sa5d7PyruKfrWG+kQkWAtX+9xuncnv/RsvPPl/lPxr4vqaYSBm8+Bf+OG/e+0P/vbf1tYLf/fOzvYxe/PvtM3ArT5vXrnVJnIdNtQOmYfb8z+oH1jZ7qQye/wA2dlzLmADZC93f2WAWoz7WjDFuX494nAswB57e2ltdTL2+IjXfYHrW1qYdDMM+MjdaxtfbpsToIgZAMMbMQ9mAAQFokE6hAriAXQIhgwgmiSkI93vKx37/jjNKxdt9F29fQxTOlw72PRFhw06QHZ5e04fgywYlB1x2aF7PH+D0KWdM0xs7pg54EAV3EoT06dxuFan9qEwh4sQs3hqOUurvn4gQRjEMi8wja3yD9TuJWVCTciZjlFdSyr3rPJRii4a2dHqA6x75jOkmuYnYscWHoinNTf8vTWv9velDmLKS3tQ/hQwY7B/l4kok69KGhobB/eR8iGN/qvHuoMqHoJE8qRt6gUSLp35knIIZN+NJdMZJuE5Zrt8AMqsAu2YN+sr7UVf996ZY38EDyYWxK6v9bO+la5HjUUs12dzNqY09UdI92cywvCHqPZ97V0VEa0TyryXAOH41Yqp8lUn+GOSwtwQXbtRj4Td5CG4+zCXmIx6K7L2xIibD32aOvWxsgghdqjmU6J5OFelLFOmLw5fI5DsaRPGdq7ql04LXd7PT58aamxoky5trRulWYSediCzjxm33fSj3ZR/TzDp9RrDChghRZ97hkkpUx1gf64pbxWqHd7NjPTpXpt8M8byuxIub6a9/86//eKTPz4Pvkb+rRn7Gumsbp74K3/vx7ev3v7eKy/evHrpuetpHjdTzfMpPLS5cf/Xneiw+83Z5oF0s9Opa7ey/d4UwhLIQCDftgNLpL8kaRmZsUIUUVcT9pe3kdPQcbMICK1kO4AjIZ2PwF6M2D9++1oHPu0MgZi1BaXbKh9pEiFDXKnGzDaIxOyj1T2kYFbRFus9+EAWIwjBeqxNtotQx9WYEf+ICbYlhD+bQgL8i2kI6j2a3VYESY/GVxJWThuWeh6qDJHtdc+3K88uqqQtES2zm291aueQ0T4hE2lziFr1omwQXQUIwPg5SrOY4ySotIX4pHH9ZB4jya9eSrMQHcHWdwa2kk6/lCu6zWKyHnXGSeHJ/dm+3BoRZWBcw9C6UzYiYwi1m3nPJpmz2jmJfqVf442ZLAJnzFZ9ghb0X37mKqv6576UAhccfITYjD2/PENuNEx7a8dqJYI4rGY+zQMTmERDKPtG05XWn7EXPadS6yqmjOq3vcu0uD74ma1qAhbMCwypM4CJYdRWsoQ2BFAWDGJIBAfJHGpUEaN9GB8r0A+1AG6/VXVlmvVRAdf6XO3xvaSNM7PoEpZGI6sd5lnUoYObaCLWbhAO1EVg8OfCmPY+zaox0Y7RMso/jKs0a/4m6W6eRgAA7F4rne4Ge42O9ozZCnLO0+rq0yWfvhujvWuNnQWATHHgbmat19IYo+7LPpizV2/3NGO4OXXsu3u1pN/7977GmIfef2Uk3X2NXOf//o99aPva3Q8EHhdPnm1R35s3N4519CTJbJAtQN6+HmJcjzgl0o5NO+Bh27Xw7xoneGlIWxzfVshaXAZARWvxm9h6g+2XTZjD/e2Zl5iPXogI2BZ+iBZADmusMp8tT8qPxAFOQM60JByx4oYAkDqhxdi75Su9VbVMMZdDAAuuXomgMn0pySl8R0J+DkDOPuGJ9opi69VW55NIdzBGgmmJIBkkCmmYo1bFCyjgCg1JFIrn/A60olUTW3DSZUzKynFhweOQLxMVfxUE8YckVkfejP50CsLuEQsaBKIIKBGUIbS1U90c/T4nVLh8g9490I8hYvURAyO1L1PjQvxJp73lFWXFH3Q8im1vJXsdnUualt75K8JyaW8VPxqEmj2jcZiFih8CWVHTlrVgzZ2rSvrV/hEC3JSBCYWTWM8Xi9JogsJ0f9qOEHU7feHIBxPGZEZLuspYUVkYGJhZjNF7RHPS9exO4viMp/IaD0xiVpg3V/qiTEyKKUqNszvv5ND+UpTHeC6JuxTl31/wyL0aKNpNOO+YtwxqgLidlk7DMzPEBPBzPdwQvXa9NPazmoAGZavBAPpmTOb7euapuRuBpfa51v++eP6v3+v/q5c3u2Xslr1GQ/MWowLro/2upFW9NFKlqkP4sHqtNQJv8q3Q8yX4THN326SuBZ+YcPVWQOHiF9s/7AM/9tKXP+T919pFg/+avN718x/+6Au/7f2/fv/BQz/RLqXnST47+UJuXYsAp5EwbQVXSXYhSlILU8kKtYTYXd3fDBG2QhYSmYV5bOyHe0m5vp5WYlvwt+8voDdAe8ZhCl38IkwvmAuTl8VJgLaiShfC9kFKs9hJvkW4qitIthpeGKpw0MNRoNvV64dcijhKbwsFq635YJh2mK5oJ5D7mDUXMRlIxX/igkC2nBbFJOwR6u3ZmUdyrFztIw9jGRz1kN0ZJkdqgwWCg4qls4uvcRlbeumnP/WJ5rEc7bbRRvKkM05jAKpcSK41C7mtnF+EzBPjqp6IlPHou8gyhAtB1GeBBjfL01SMZnW8SUMo5HFhuLQX4cCbDYZ8h+v/mrO+x+APNQFfIYQR2bJq0hCJPs0Dc9LsQTZl9q9nTImaYYT8GA8s05iPGStmpSxHECNQQ5QNfc+MK4a1LqS/kWk3A+tNVKz18trx4EhrafhaXMZE1zBwT9SPwRjjqikkPfgo6qohGa1jEpc3cClNs9hgG18tteVJU1JEYu8at9tp3Qrc13PHtd5LQ224K3Z3vCtjIAexDU61o995BsIvlVekIQ0ErPDNfcVX0otq/X9fSvDX1Wsj4TLX62lt2n09r3yvfL33VRuMgU9auofmYnyK2t9LkXKEGs8MhLkY5lF+pqvR2noeK5myZuLLYwy1huCCwc79NA+s7n/x0P5D3/OPn//iG3KRYN3+/7y+ZhmIkXnw7//UJ678+7/tuzsw56d2btx+8+2Yxs6NSG3wCpF2SFwBFYKDyB4PKJ12diBAmrUDITZQtRpdRBSTCBC0uvtUkVaA+UuxiWuAPcD1g6BPWKCUIaDT0hYyr7kaXwB0HISQpryVs4f8Fg0yFyysQRy7Lz3NB2M5WVpS9jjula+sChufSPf8CXVn7NUkVFt+84Fo0xyAVNlD39QrZ/1aqnrfd9tE4r+ROcshRYgyU509wOgPLv2khVREYxCZqg5tGMlutz1TVuWNRNhbCAx5y1K+ZcKaPN0rEYEeG33l0NCIgLsGnRkjTndGHcL1aD/6VS5pFKo3ZmekXGU0V/pBQ+JixYB9N7aGFxMgbUrX7+Q9ioD3EsMzJt6PhmHsSi/Mc/o1TV4Lz5C4RQgXsVMezUVPaRPTr916Guz6ou+7dSinijA4bRCFhmkgnNroolnpr9KNElhhWtrTInAybexxaboCJI70FDoDXfoKLmeFDqG3tYn7ZebCVMrPnAUA0fHy3LNWY1peuvLJwS9I67YTAsEKMzY+6VpDdGdOjc9Uu+rbExL0Zdq+iwtmUsrRt2ZM1dMzbXD5+NfxZtIoebVvJqH8ko0Q0avlf8FU4FbaeU4hfpydYTAEmJiL8atW7TFnfEnW8LgHV8LA617vMkfvP/DM2YNH3v+Dz37mDbc9yQzk/89/X9MMxBid+mt//zPPfuAD33l7686PJS19C0y7W3gvB5nzoSGQ7dwBnW0xOO1sAXILwAXUkFtYL0kRsC7EaeVzab68r8OoAstDER7+iQkNrM61ZqEvpV9gT9IBsNU5D5ZDj+Q2vopQkY3brrIIicWIdAUXhy9LPJc7s4yFaYdLR1rWXnU4BpQfgNYz+cunGucxaBNtB5OELN7YwwkSuxC0CvF0kEc6iI8AeiVUVDiwa5iJMOAQ/caMRINSPlLoqjGiMogfUupv31d/lxahTkwI8mJopMVhrt3TmrThcH0xxssxvQjufK+GIV6ZIu4rrfnoSPvKE1SQmUq5NdOuw8dqjgWgs1kmybw0xb71kx+mG22qhqmvf+VY9HOl8Kbe13ZzgKCrf35mHFefaSzlqg6OY4yqchv8YekzZ+UoqfwqNJ401julpzk6P2TCbVHo3Us9JtAT86i9SJ7d0MAPOn+of8xN+9KAbTUi+mpCeesXvgt2JjKrT0xHBNbeoVLL7Eho6lnHGcwx0JW/XRRJ0eLDVDptIGLe+54bP0BhdpF8470VzvCBrL6ap+oojVYP8+lz75p+dGNEzbkLXEg/bKy8gfL0dSYF/FflHgyuDCs/BiVs1zvX1NWzNWa1qf57ZtRGiwxGh7l0z3LgYoadSSmd8XTR7IS2412ebdaGbzp05FO//aHTv+l9H/vYU5Poa/jf1zwDMfcP/+RPPnXhAx/4rgsXdv52MPR+YtXBjvo80QKsY9ud7XGjxVA502cLk4gs34MFhIAcoUKERcdAFquqnbksCgXa2KoEobxRxBWCA9kG+cs3IarVtVAZCnpJJgXmJB3EdOVnhhH5pA1OQGRuomkAfYzDgjgZmdowDoCvEM59W8Cfys9BQpRemXMGeWmtzqVBqFV7p+Ke962r1NMeBB9y9qR3vgxDKdf4RHo2DLD2Ihz8I8xDi/kwESBzC2G1+EDUSG3/d3tnAmTZddb3+9Z+/bp7ehbNqhlbm2XjRU4QkXGMXQqpAoSBmAKz2oQKS1JFhSIUFapCQpQ4oYoUVVAmLqcMwcTGmFiFsV0YYWKMMCUMBmFLsmyBJc1oHc3SM9P78vr1y+/3P++NJBJjY8vWWL63+71371m/8917/t/5vu+cc9V8HPVZJJf5igC2oqSw0+IL4rqMvElEuUXLEMQKWEk0ZMJfRsZkFaQ15ekI12SmdqF26MPeR+Bns77U4D1DeBDvdiU2WiDj9qWN/uTU1hInzfLPNkqDQk7Asm3e7WxNboGE5D5zVuxD/IBA42ZRRqlXILM8dwhQG5mAHh6klGH2aFD8mic+MNJKn20yVYQgZ9IHCQlz0V8GPswoDLDyoDJ/I9qgu++azk0emzjM1UbM6/2EZUqH8mtxjpZIH2HCfmYpHa+4ptMGU3kFYNutMuOvPkLvn+Mt27QNL8pUYHJaLdfSLots60QQKLgKuBM5Prid0ORT6TNoBgL4yGu//fPfAgV3T72FRcPkwmv+rM+nLw8Iv/oBCc0EE1ukGav4SZiNyADAeiPMxgVam+Fq+m5/crDZ/sNrevPfgfB41mzJThM/78Pntz7gwN4PfnDx6q954U1T/e5bZ/byTo09rAWZZ8+lPuYZOpKdZdKJdaKrhfjgFsehjxkjSDrfGiMwd3cV8PyUDlac6z7MjtZ9+H1Ize/h9GABXWAz3D4uWLiKVnDXTKGtXDOBv3YMR9V2AEdPe0ndpW4Bacr8hKfPUY7Ode2/0mLnsKup1dg/tMvbefXtqNoX0UUKngpNT6YqI1uoMQM8KB27dGBTOG1XwWa7FCYKBacwm1baNZHpt3FSgLO+kC1Qb12WVHgavtKRndlVPmwOyZqZPSy0dAdhndyOeNMu88E4TSzWIR/i/+HccMHBCQnSu5e6D5DCfcIU5JqgXMTHLcq1W8BMUZxlS58CRr/FWOHkCl7AuzL7i3Pr4L8An/lMEMyFipwaYkKCSxuFJM1WGd0bRfq0Rc2H8tQ8pEdYU1gqSGS1znTblueOcOOShjzSqfAs/JANDjS4GzBXIG6xi2LeOkhbLYusxElDodlzXxyVSSMwSiHi/FzTZSaWGowZncruDESej6xSp7xsbEmU2p6TN7yLaopu4+O1DFJ4KEic1uvTWsy3RHlYhz+pwABSkL+Eeu0ZKQjyHqsN6ftx5bmfCBsiY8Y1sbw1PR+FR/kUOiZl+lQoKPo8f967TWY8+oxOnjf7ZXm+ioBx0a1rqOyHpvfZ8Hdvu/XWGy7ffdO/fKAWHrLeo9ZACh/yPX5L2L9Y/r5XH984v/mfF8+wtckFRABP2DToPuS1lDrUBXfHXjoNfVTtzJl1Redw0KZ5RGHgFtTrCBtt/9MAoVuO89LoPJD0C55OOru9Ng+wYALsAH5l1pedl7IQIq5wpzsxc6vNjrq++cwZVQAb+fYRZnqhwlGu25TYeZ3Ou861Hdy9twKKnDsVVUGxzI6+cSIGbO3mpbPwk/gAEXXYtwukcW49Bkg7OayvzLcnD20V7ITNkfTS4RRKbn9u2QoSw/SzOKoutvsiWJ4AUaAgZQdnMtK1vIAEdUMqEYJq8QVcNKVIDqqg28A740wTHtvZZeQoCNsIQU4tTskine4y4H2kuNAulWqTHt5dQT8AzrUAtu3OAuQX7BXGCmgZEYAnzDtUeKzogC981LNipgvIpSWEUL71mx9aMu2ZZ0AeR1tIcCmjJFGbcajgQCI1Uz7AbFMsl3ZoujJ/0QIRDqhHaRfgH/MUAkHzqPfL+5dFg7kX5f4qFNpxmMNgGjFyRCM93DLNYN4C14a4gNCXSzkTyzCSICR0mAPKtMztcZzsYZQ8LzzySTFpubcEX7zH0iIwmyLPlfk4uEq4z1v8RbRRAWqjollbNn8eJf/418Jz+Ev6pAlnU7/9zVckW5f3xXuk4FXIax6+jMWq2beLa4WX4Q4eHKTxsoWffdtjD7zhbY+VGurvwgG5XB9/iwNzv/n+NwzWR68brGxvOS9+/9Hpav+hXtXDwaiJyO48oHeoXdhR86jaMQj3zWpZAsjD6gwtTU52Ht8f4GPt1iP2mYArAYJdtiMnNoKD9JOFeo7m3c7aLVB0fu8HhLXju1Hj7LDJe6Knon5n3j1plzEz6MB0qq5CJGsdGNW7s6h+DkdSdpR1HOAKD0Ff8Laz+250R78CpJ1UqMrIWJAap5mAFMUbm04dWzfl2CnTqUUNzESCvZqJjkrbqt/HdjnfPkBHCdZn0QFCrgVeP9IjMAdgKE8gyciT5PJWU6AY53mhyQ4uRVyTdgCD1dbkgeWpCQVGUrR8Jt77Y0nUY17bKEj53hW1PHlVaOGb0blhxuvn8X478lLIOMVXYEqzyWGD9HlFc4On8U8JQtRtLWqJCi55rFM4a1/IZb7Cv9J+iky50X4oz+uJ1iFoBkjJ0cWc6Xs8DMsbBpFkZnU6eodnty2j4L9Et6eoO7vxkp9nQue4+eQtj0W0lBaLaTnNxzQOEEhStBjyum5E7dR7kuaSVj45m9Dpuz7lXssJ+WTmUp7fUkYsPPd4Qgsp97rUmqjyBY+KZmweSy1cSoGcT4SHiSdlljKsy3gpUMCWdvj8mY4WpU022vKdgOLMvnX6mkLDvuYWPz4Dc+3O1oHu1Ovec/r4G1Jo/fUUDtgP6uP/w4Ejt/3hO46/5JWPzB5o/k5vrr3nwmPs0MtwawLQwl1AjId8Yo+evALVaagsT4wG4oNpf7FLbZFWzcSN83yCY3bINQ9y+leZTqg/xe6SbsC5IN9FeHiznJPvIsU+oOJLqgRoO61mgzWufROiAsXRs1N27QR2GM1Y1ql5R9Vdp76dTbiwUw1Q6+3qk1Fsuj+dK1oK8WpMCgs7nDNaygJBO6LALdiWDj45N531CiTBGuoNQEozLcqIUr4AOkKyvDCdXb4IFAfDBfzJIkLItbRH34bagqNqm2E+uRU/FOkiuMbmvy6MNZ9mO4WS9yrgxrnt1nwnXwMqFgbdTlhQeCqAzKcWVdpVBg9qMpZZ6iyAJB/lhWGBrdTDFcT5gjF9SGokcoHiI3xMKc/VjtJGyiwleEUY/PbPAYM8y1RgrrONPHVFkyKdVqauQoR08omHJGs2iBoDfnkGwl9ZJgNMx5FZVjBA09XFrUysm3RqLwJ33uWiGdeNFAln6QxhnFKhgym1bzUPnf+G0VjuK/SpjpdqCLTSROVXThROySNpNyHfIS5JCE+LCDM1+a2TNBEMhCUtSUrrLLvUl+eMdKbvMmBT2yj+DZ+hUqbfluvgIaaqQl6eHU1u+gz3tVrnZ5qtb//lR+7740JR/f23OcCjUB+fiQNX3v0nf9wcNl++tTy898xZ1gGjxmt+EUxdpOfb7ASTAAdh/mb0y5OrI9Q9lQQsH/AstKNzLGWl+hBHONua5P3lgoOjdcQEgCFwae4R5H3w1Wh8b8h+Rpo+9HYy9+Ha4an33QT6ONzKxGnFbhfvXkT2nJiJAFjBdomRlQsJs3OvnZGPN14Q14HoynJHaYK4h6AVQPdc+gm342W1M3k0waQjE2fXLp265LWjT1YTW5IQE7CgDOvzL2BLGQGNcRn8RDsRmARZt2wnSY5oEPDGkbslqnk4MvceuAOqU5snWoMZFF6bmFmc7CDA+fHd8Gp4CgTTqgnoaFfQRiBQlzxxZB3coyLpLUJPQARswh/LLDb+aEbk0cGqQHEGnEQXnpSupbZUHOGlMcWP4nkBQLUQHfKG2LrswMyZoBbmU6881Yzi+yjix4EO+eRzYm1ZnzBO3mFU08G2qeZR9r1SMJAe57f31RXmWUBoWyijXI8JgFEKDc1ZJE3ZmcXFposdJpWofUDGWGCX++V9cvZV6KBMbhP0SLMEkT4fwnIziQyXFR3yB5oIki7/PMpkjXLutfkm/Uu1NpqIjecwrYMPhZblWIXlZC0IFJVSFB7cAZ4Jyyn5/PVT7qXv/TiHVu7gapb+4OsP9rS6905NdV9eC4+w7DN+laf8M0bXEZff/kd/3R3uumFje+fdGbXzlAYAeRgFh9KBS4fx/c0y1FGNGoLv+RD89FUIOjoV+QmgObrWAT+DENJhqoARxPuAQjE9tXmYceTzEeAdpfr2s7MICx3Wqtu+w2ID84orfjVVLxMmPb2xOcqyNH85krbvqI1Ig2Yk0wmIgpDhU+SZYtSuicZr6dbpbSclaTqfZShwzBsTU84K4BctAs6QyA7stfnGXTrCMHs0UXYJ45s2CZiBX9LKV8E9vJBvfARm+anpLWYk00CTYOu+XApchaQCQUEQugjDwhebvCBvjTKgCCDo495InGBTzFeaxMq5tAnWxjs9Wxq88lsQiuaTa1PaBn+FS67k8Zgn0fwop4g84wErtB3PiuYJHylY81jKJdz8bs0SYIU3aiDWXYou2l/ZqVfhIfUIRAC/x95tHXZ19MNtjCnKPLA29bsDbyv7X5V73mGKLo9U4jO6R2JaGlm4d9wF7x/vxCiOeGiMI904aNcERt0KY59hn0sJ9FXDrkNS8/DFbKK5AwmPpLBwzqTZU8O8M9Zv7/E7TxI8LsKG+JRtMHH+p1joTFmEm4/zwl2osG7jCMiiSk7lp8V4H4yaCBFrU6HSJ1JMnWgrmOx8HphN9+7mXOuGNx//yl7jAYs+66H2Xh+fhQP7b3/fMkm+45Y9L/1pNkL8r9ifW44qNRW5lXoLFFO4gAURDtq7nVqrE13T1BqOdIFbYHR0PDFruSix+C+KbdaHe4cO7DRJbbEKFLf8cIx/kv2rNCfpRNfE4zoTO4ujP7dRsXMIPa5Cjz2XUdWZIetQSCfouRGidRfhV3bf1QMiQNkBBXM7fDqhnZpPNAbaJzBQTMDC8IzmQD8B0HrtrAUEDTBeYGE4S54STx3UrSYjgKhZ2av9EVJNYwdXgPUQqGWmGiNh0itANE1o8xdm4jtInamq0Mm1PHe21ha06DtS21qHXzvO/ILQKdCC6qINqNUJ4mTJtSYh4yREPmiQU4B6KLSkULEpNY7m81Ii+QL/vKcF3eAidNpCfSC2Sb56aHIRA6ONpl6fF8yV3kBSWpM5Co8Umgoe74E1Ux7x1qLW5TNQ1mdY/vgeUQDNxQfCh7oUHFlTZL74RyyLmhA20T6j3hCZuqHZWVjeD8p32i0/GdUnD/nckHGoBqO3nkWEanTmlR8KRSeKlFXyao3URWyGMraVhtvKJx8T34RllI+xJZV1T849szwFms+ftIer/kwOwqJxJM6c8JN75DEp3XYljDQ+U/7ZSAcXeQ8LPFNwUNcQfv3Mbz524ufZrK4+PgcO+FzWx+fIgVs2Tt3+yv5lty81d76ZLUn6grECRGDwmdYPUezZrv/gbWw4tX07oesFBBOBwg6uyULfRTosGScbuQkIhmcUR9p1FnAJ3pkyiSBx5O27vQVi3/imxWQICFm3AkyNhqiYsoQl36DmqN/0duMiiug+XCfMjIQ7iidbvuyHAXrLJpdJBHxLCBSME1qPkQGDXHhuhxf0bGkBt+Q1HKDxyMwtrqWBxKlLs5LTmPu0r5jN9X2kQwfI7fCOdDThWLK02OHVFKLFUFZqpMiyDsSaSh0KFbfYVxAI2AIzpxE41qHGkLISY2sVcKYr9DnS5qwILk4SbuEc0jHhjLJA6rxH/kY7FfUsz5Tjtnqd54BQnwU7oPc9vhbKsMxyDwjnWq1JZ71EeE50PnFuc+62JL1pWsBz08EpFq0B+tmeJ/dDU1b4pxZCmJLMtSBO5Y3/Q4GIYOHGIEioxLomB4RAIgeCxRlY3JwBqq7rTDYRKE7W0Pfh/nCuAZH3A9I7ccQdF1z/I7k2KPc7JRV6IhFsVD6Fqw5Y0ji+/5+DgiK8J1nGCSaXT/x6Vg5rUpDGHEuw666yewJh80hbXzet+fNAu8t16+xMq/Wa33js+Nsn+evfz86BWgP57Dx6SoqfWfjkH/7okRddv721/du9UfU1fAIYjlpVifOw0tEFAn0bDvaEo4zQ6djOpBFc7HgjzEsCrEAR0KET2+Vcy6Hpao18ag+uTdjT6vHAF+HhwrfURclO112hHB34dpgdRvF2Qvuir+F0JO1ePwJhGcFprhFcfE84+wRRlphR4N0SivZTqA6cEVLixyIEmoU9rsb5yl5HCklS2kbKtlwHgpaoYJsYc7jkyNdYeOCHoCCFgxsxKoDML+hOfA6Z7RReyFMAmLIFP2ekCapqH6X1ABj5hrYNUFMAat5zhBxfh/mIlw/SLr4bHoq4jrmKMJthpPfSw3bL0PyGU0kAsMsHJz6UMtQMSx5bGxFCHu6pdfFn3ROdT60qWh8pNJ9ZgrkUHgpbOe/o2Fot3xptjxSpmUrfFAIhU4LlAzOssnbH0boMUuUhzQ6oXmZilXurFmJhArrNK7+UO/Z7kMXAxFFxBIcLCt1Usckvtyfvx8mEEfLnFclpXwqlWvjOte2YDBImwoOSc39TrzcgmgIJKbQMaHwKocUEk6MQRGH8m9Rwz0kT7SRpDbV9hpugHPLUO6RG7toOJ5044JL3z2PK7jV8FL6dncZf0v7v+IF76pXlY9Z9zj/ytz7+nhy4Y/nM4o1H9r1tc7N1mBkyX13MBS7sc+ouDykPqF1dVd8X/zi6dCRsf9ngWXd7E7USDwHHU8HX7lPAU+3BXXX1bbhzbZkN5VTcFc7tvMb5fo+EIUDUWvR5FK3BUa+CA/8I5dih7XCO8ARP6Urng0Zpj1nEDk2cos+0wR8JpJ6iEdki21DaafhFICZr4I98OeVK8Hfhl1oPSQMQ/lqX9fjr+7vt3NN8XL8RIZsOLpBqbhMWkj2CogVfI1hIL99Mz5q5pCvIUdYjOAK2zTr9/etzPm1dlK3ZTtqcfqug9pW6ZVJAKUfBqkbiPbR+180oGBTL1hmB6/mYMrcq0WRlmSQroeRVAJiG08K/8a91Rcjw63YoDigi0LnmUhZF41A7Ma/3Q03LXyPjR7J+zgkJXwXEvJoWhBwxsnA7E2W8z4A77/qxbP0XxRFOOMJB01TKFWkprWgkXqRi8hDLR2vkDlJwG61DM+cmD7GOZ6ey+zyuQoiC2oECBGYnBjUQF+v5nD35KMJB/sghapVnfOVPvnluoEdhHjQYW9LynXipjKZsOg79WuU6JUXIxpyHsN3HYOx5nW51iMHVLq5nKUM9cR5ar+p1/md/+/B3fudff/hcKan+/vtwoNZA/j7celLaX77vPtcR/vC/3//82wHCNy5W27NuG+Lhg6z/o8dTnymQhKk1OCvIThZwJo0jXsEkK8Hpe3YSwcJRtm8mdApiuhphvpPETtNG9TadQGYnjvZCGQKBgB0zFvWsZK0H7zkgn1RpvlE4lZFe0TLsapqMJiNoNR2BSfrKKNjpul5IhWBiXPElGCLI56D+sukclHHu4XdmllG7FBfTlR1XGghLhw8cRHgkGzTGvGKdBCQtxBRQQTBzLuDGSAThArQDatuhiapLnFOZnfLszBu3N9+mQb6+l+hSDgzTB1L2cVLQlXsgjQXwiy4T8IEM225eD53aZWiQu1IEBjyYvOTJWGkxufdFASvt8tTyM4mCa+MVxHH68xt/l/wlne0QwL2fclcN1vgSBu8o080SJc2tU9odHehcwJtRRgqSjJ+NcLA+QsK1H+6uS6G5/woX72fuK0IkbxoUpEkf8Lad0JlBhu2P1Cz5B+6FRe0+Nw5gXDyYomkH/xkwqO0mjHscrTTUQmOOwiNaEv5RYeiwfRJYhMdYI4HKIjxoG9F+yqCglGRa+ZRn1GIIjnAe1yPXGkg/dvLKrLy9nU71XCYQHN3VV6tfeXh548dvuudjby2l1d+fDwccZNXHF8CBD68tfPx1M8duOTva/FreC3K5HUcg8mkXqBz52onW6Vw6tH3oS6cqlXouqDtSN84RpnPWBRg/jogFbX+zgIvyHbFuIiDUQjw0aUzjLFbwCLI6ke2mmpZMU6ColBMwSpnm1ZwmBYUm4/Th5I9ozzPbhnKMS1rCUjpl2HEjkCwB2imm9GJPiffSw5rs2PIlgD2OCS8ow8O02ZOIM4HadBP/hqN73xQIC1OYJWclO3ktUy3BYgQ969EfJLhZqmCrb2U3H7fadx2Os7Y0i1lO2SZFkC4TIsRK6bKuCTBauCOtAtsKA0A319Ip76B53FgFheeTe2xKyzJMXkmT36Usz0tdRWBP4myLeeSrDeN8PAq3fZYXHiAYnGY71ePZGGsamXGFuUkzllpJnhlrRRJZVMxcY6Ghv8R8Fmi45i3ryWH9/I2Yuq4g5jSbMG6xL9zGRglbpsBlOOdEDp8zfSBuprhG+Bph8eelMPKPj8IDi7NtVJzqfAI5HZ+b1PbljzBbbD6UoTAmyTh14GMe05b+Yo5SZEnPFYx0Uan0yIN95Ll6V/+jV83PfsNrPvYXHyK4Pr4ADtQC5Atg3iTr+9ZOnvvGl13362unV1pzVePreGadTRmTiV3nHA++i61EAveFig2bCEepjkrtBI7IdfK5Lflk5GrHEUAEjfRzfjVnmT/mI7qLU3xnUc11tMfshclrylfLonk4E0oTRAQRaScg77qB9DRp8I8y7cLlXR1Q6bU9kdDJNE0vBSBNO3ZThUzAgAgFibR7bad2arCA7Lnt90j+0F8ElFgQMCSimGhMQ5kyjzC1szG2ZfRuekfsCgxH5ZYS0yAhPsTCtNqJfHGfsrKlhiDFDDR4sIuPe5WpibVJ4+QHfQ9io6VlRbl1iFLksa3yS0ETsCMuoEScdJRjzAvKmwCYgoDLpFCYFCAsXJBmGZvcfEXDIsyQ+FMSRm1JYPgYHAH1aF0E2D7L9I6pRfkp9VlH+fhqZrUKN0sMAwh3bYeywRdMxXTl71hYlPqgQibTZtueC5kDs3mMYr5yy5NtwrZcUIsz3XVIefc5GcqQBZ8IVS7Bg1Wy5v05pJF/FimPQizn1hMt0HD/UjmpaMxk8JHni9zluSp0ee6zpuD2+cpECNpxcfq55aau8kszrSym3nM04MHB1s9Vxw79wHfddttZY+rjC+NA2PuFFVHnfjIH/s3+a1+Jz/btq9X2c93aYclOTwI7qUCta9U3BwrMdgD78DTiRtOT79hwyw8B2TwCjDeovDp00rnc8A0YpUC7pVNfV8nnTC7zqImYawVbg6vF7YzWE+8nHT0jTBNaMvTZzSKwKEsgU6DpF7HHCyQTcLFTSldGjURmSjCj+tK5kzz5pdeP2lDSc55WpE36G8Sk0jLFix3f3HFmk8Y/yxQYjHeGmyN+aTGvQkXNANJDoAKl7BVmPZoJeR83k6xPkkBfkcJpH6aLYyzEPLSNFoIdfwogTB0IbbUcua0mAsFJz0+ElsIgM6DShtKO+FBSk/x3FbutLXGW5ZTqJ7jBqaYl2iPfBFmdzBMglQsKvcIxvsmrz0yKPGyPYXlPC7lN5+yr+IcyoQJ6QcgpFvm1ccb5TLTwg3TyMinaBmudecXjgjbi9jLQy6+lez1u8vgeUx8aSJ4FErjnVa7h1RYvWNvkPTkuB1lZHFQLC1vV2ZVBdZ6n+QI8WOLGqIU4uDjPzIaHGoPqLHX5LA/NND4mLVX85ZkgXL649kQ+KbDlufd08uwYJkt9ZvJs5KrcpzKwKoKisB3hwokaqI+HrxHwqR4LygeZefb628+c/JMxOfXP08AB7lx9PJ0c+LO1hYdedfiKty5sbz53sRq9xFlSdhwFRfZg4sp9dgRqO4mLl1T1y/47dDjO09HoOI7MioObDgNwaLpyLy2Bx1lGdhJfMyvIu9MoXT7+hJiwFAQiCEc6qeYJkTHXAA3lGW7HmwiyiJB0WLrwuONKjDBnwkwdNQPlaGJqI/golvhiLgv4kE/hmK7LuZ28gAHtoawe9HsYrgYg2GakTh6hovhqAEVi1ArMk1EmcU65jRDh3DDf7aGAULgUTYFfmDKA3FWkjBtfkgwe8kItCHVngBkkuO/diKYDBydly6lMKOBX7TGCivQKL2kMmFPcRGvy2sJtp7/ywPubWVGEeK2Q8oiZy/vNua33vgmS5pM3xtsu00dQEuOJKbznPjvm9WO53htl/BRCoMPsK2Ok3am5ftzB1sWCrh53aq5kKAw0d6mVWK71phDLszDKSBj8zGaJpM9uuKZLLBoFwmQT89VgazKN19mEZVBUhCS78lKfAkWN2CnoabUEcKR95dRa8/xNVvMrVG0XRIQ+0198Bjkv6czjs+tzpfZR7ocZyvNIOO3wmZgm3Qz+wrLFfuudU7t73/LHjz78N5ZbH08fB2on+tPHy4sl/XzZ7vn7Xn3gyt8D2N7E07/LvbGceusK6QAGwOAsoHRScmbUSV+1Y5TOVXqaZpo+Hze289yNEGP2Iq1d251/XSToVh1lbQl1GAdggRYBPEem7tpq1wxU0EnLCu3iwLXuUps1czgKhD7L15bOJef8jusUrIxzVXRZbUy5tEXKBaEJOD4ZDIwTJIgODamHcwHBMWrhCfUDftIooLrNh+VapvkzzdY4zjP11TQpLxxL2WQgX5laCwSSmvzUK1jGV+Ep/HB/qx01kHHd0dsoS5Oe9CtQihCEx6T3yIwt2zmuU55Iq1pSfBWcy8loU2Qp5r9Cb/wmabyzthT+5KVc22493lsCC2imzWiP4zh54/3w2skIAVDaoznKIzOtOA/veU5aCBU1ER+B3FGKhkQOwhACOVMqURYsSLkJ9IuE+uGcoexgRqYWLYK0pA/Ik7fs11bK95nmP4McF9VKFUnJSu2pIISEPm/YRAOzOu+fX/7lOhRzTptL6yahic69lxPy1iaYrUygsO+UgY1b97tJKfUsQcKPvfXs8d+o6jlWhYFP87f9pD6+SBz49OqFu16w9+Dbd7YH1zByfb42A8FAMLHD6QMRSMQVfx056T9wlGunYiM3OkGZnuu1ZiMiks4FhdkDapxmJep6acgESIIRhNvpHWSqzdixJz3T8WFTLSLCQl9MASo7qH8FXqGPupvQJZ0eKZffYvqyr2uUMLx0ec+TlAyGGFxAMFcZFRpW6ijmKzUIO70PpIvirKOXFPILkCDDRFtwPygFiHwU+LNjLbwzr9qMYLSMcFsX6fmXn3NoaHsYffeZqdRmSlzKJG00CtJYnjmtQx+LZbl2QI2ocN00Xku3+b2DlDVuh7nVDL1PaiFhFnHOjJMIQsKfkosIjonDWj5TDfkLzyElPLPMck+SAlNmESIEUxP8wFTlDc2iQAiJEHfHXbUOqo3W4bnlmQkqtBbFLwaDsw+WjeUcsstaD3g02YpEX0meT3IOeVgzQYPRiX6QFcxazjTchoQteO0ykinoW8SE5RTeFQSV/rzScls7ORRC0gM141/bqLQzrVqyfHF6tDR7f/xEW5aJJDWlPixf0+xOun3i52mYk1bceNJ+waud37u323n1G0/ef/uk5vr36edArYE8/Tx9Som/+8jfPErAP3v1/itfy1ZFb2Th4aFNOp0Ob9dpuCWJ4sTukpksAL7q+H5MPToL1VDm6BBZN2Iv57DjuQWKNn5D7NiemM90jvB2nMZKHEnLt2kECv4UGnbYzO5KvEBfUhahIEQKm2Qh3I7tnkKe+68fRyD0sPNHYI1/S3oiBALo8LcY3aSUfBmhQgNlQk5G4dlQEPARDLvwRFOQjm7hx1G6L8sS4DMryjIkg/A2bRA01bhiThvToBDIDgG0Ib4Y8jiDTP7G1AMNluXI1anGCjfpTLmkVXtzhN1B2Bjll3Q05VloLu9gcSFjWkLeyaEvRTu++S1TP5T8ix+DChwEyGvvle21eOvPhohcCJa2B26EVsv1DhSQpZyYoOATGxyqrSW23KosBlQeFE0BQUA5uTcIAsmxyiZmr2gANpZy0zbOR0UyQnsBbO+B2ooLCDUDqYWMHIX4TOLjcE1JO88d9wfeuMJbcyan1Rr+k82LwsOncKx58hxb5fhL0i+eGqwWJ0d8BjM5gKvipYNjJHAA5P12kCB/XCCric/n0dmCHT79Zuvx7qj94790+r5bCK6PLzIHuOX18aXgwPvPHL9lpjf7Qhx8vybT57ARXN6aqvbi3FX1ti8J6PZrZ2rZ6UQA7fYEp4O6YM3ONaDjXhg7zn1zmp1PX4q9LMYRfst4llLI46VgLqAIHgE1AjuM4DogzsT8Il0ZUUsMXdfurElH8LLjZg6+ZfApnVwoNNwyTV3CRYX4Vbie2PDTngCGwqDoYPF3kCnAQP4ICeizzQqIaBeUr//HkWY0NOLUVhz5SFfs4Jzj9Y3PxDz6OLLvFHmlSrrcHdlt9t0bKu/kINAYdz1W6Nn20ENYtKVAF3UQHo1CznIhLzMqJly+FXCnrDC58EwUdV806bQER9PGi9EKN8GRkPJLe81qGmnwJqmJmTM3TDr9cM/Fa0foTr0Vy31eNGP1ZiiDDIYJ+AoZ74dlJO/4vCwoNBHh/FFp2b6ER6c9xYCFyQYuJjTWI5oIv7Fk+WASnrU9nLtxY9aXeA5PZ6a4p/hYlkm2gvBQbJaDyjjkmQ2NrEtDqF7+WCxf0TBkMNmkOQOZcRHl2VIDL/fG1zd7j3wufEnbNNkUZvD71+Z6oxf+9zO18JCrX4qj1kC+FFwe1/GbD919ntMfeu3Bq9+Bf/MtaCBXewPcktx3LAwB+znO/dMsIKAZL4gP6FyOXk3nHlcC6gxDPregtp/ZTROvtOFIv6Q8D8FfwCjagp0ZxCBdADB10BFNakFktPMKcRntAXAe2sMFcMHLFcZFgBBH2oAFcaZxJo7A4MJCQSOzugIExRxkHdJZRKRA4KjSYhxrGspBPv1DCgH9CQKKm/YJ/ATnOqYm01JnTE2Ex/zBr0Cdd4YwHU7tTFpDY8w1lg/g+EWdEUSc20pHsR5CuRph1kbIi5QtdbQRAgR/C3GrmsIdf0lEuLQamMEAJ/JQoeYaCVs3EQKWL8SrISnUpa+M1Uu6rDgnr6DpyN5nIYyiDAIr9snMzCt9UNu8KbPLjrxSYN2agLyDvjtGQUwz83ZB8++wGWLehQ7Yc4MkOekntEd0QU/2iUGTCHinYKod+0+iBTFbQe1Y85kgrhBxVfoKtLkZZmGEJI8zW4/kce0fnLHqnFvHxQ0RSVQ44/Na7r1t8V/54o4FDli8v9E0KQP/0f3snPyjb1148EPVAgH18SXjwLjHfsnqqyuCA59cPX/86/e84FeWBquYsVsvY7O/5jwdYj/rN/YEuugv9jY6oiCmSLDz+K4R7c52vIzo6GqrjLw9BCY7p6BmbzO7wFRmTkUcpLMCDaVc0tpxJ0DlXlSO6gR0F9tpipnDOb8LDUlfhCYhF+w54lcDyTXnbkWiMJuGTjajizO4TM1l1G/55AsojWkq2krBLqUB/0+MzNMGAMR2k0vgnQiKrJOhvqId6INAcCAghc2ymy6gJJBxLb+cHXSBp9vV9b6nowfAzesHQQLrB+kCdEV4FBBT88onZYrC5LP+MU8C4KaBRgFa/ioEJn/SKy22B68SZ5Zb7glZLC5xua9cT0wzxvlxxln4Dz8FZvP6JcZbJjcygiT7WhnFtVqJfpCs7YAmf9vMvtIc5owrCybYuRRVFw3DgAC6zUMq5dkggfVbp4eCTxpd4Z5wrrcRJAM+LijML2GLbqhIozR9qbXMsvbkPPf73q3NaoXXNiu0PcIJT7kO1xJuoxKdr5jnqM2gyblZPM91GCDPoI2ImKxIzb3eZlbfL1zeO/Ldbz71iU8/UWJ99qXigH2oPp4BDvziIx9x6vxPv/bgVb/RHVa/xJTHr3cLcuew2+m9MYKHIy73GXJOjns8OfoXrDRZuQ9W/Bz0Km38AqcCYqIRBHnocHZcgVwDQrG1l94bALSnclw0Y1HWDOCkkakAYhnB25EtV1PLEAI1lcVMRbmO8vPeENIIQI4cnXHm2hSncirUitZi59dEA3hRr+VLb8ai5BGsfXdKMRk5lZeWkt/yFGrSq3Zh+6XHMqRbu71CovCA8gl35lQbwLPtQxPya11mkr/CaRzclF9GuADhGN1tnXUokGJmIU0APL+kI85rR/9Uza855I51UCPpFMTWGiBVenD4I4A7BCjtVsPimjJiAkN4ZXYRaR0glFzQaV2U6ZIK2EshxNOADlpHzGEIRx3mWj53tqQDGlmFnv2uvJeql9QhH1uYuDRNTRz4Gf1Lg3STbLRDIamLivjNWwWtU6oliDRuy6Oj3skMW6yr6eMP6SGwNjbZH4tnQcHms2YGuSWTIgzILo+MI4ToSQslj2toTCWk9/nLM5syDNe8C3flH+UPmqMPbXQbP/EHp07cXVUnSFAfzwQHagHyTHD9SXXecuoBOkD1T79h37HXMKL6BTrO1bHh05l0W59vlM0U7XJ2IDWFbL8h6tjp+BaQ7KQF0AQxO1oRAIYLaklDspYOdNILbwKTHTJOY9LYYWOqAhimSeWI2A6Ny5Q/f+n+gKbmpWwjT3ngSY4Ig1w7W8vRvYAgcLE2BfPTCppS2QgSIAQM1KaC6+R2ROnrUKXLFdlSaOukUWBpAhh9Ql3Z3CWds1d1SitwMg817RKMMQUS7/TiDr+Cq2ySRk1paiNZT4Ma0diUL2T0n3KsPaNzT0hXhJVUUBd8kiCjnJoq0CmIA5JoNIruCAYw05Ic2csDaZG/gl/5LWWooQU8iVPgCpYeCjY1wpKKayqSha6/UBNVSMh/tY/2WECMGER4rfYhPdajn8eyzJutSogpjnXCFCYXaZNg8pHmiTItAAAkWElEQVTYe2+LXKajQDSNfDHefbRGrJC0fHkQcqmvyY3rKkj4WI9bmxTxdbEJpk5ZluNhKd7TnE/C+PWZjRnT+qyFsgqPclrqLbnup7k/dceFx9+Ty/rrGeWAT2t9XAIcuH996d7vv/Lo/1hZ31lhU8CvRROZ8j0Lru/YpDNntD/uegK7moer1+1k9kNHrgK2GoLdXHu93ZRQ4umU9ElBLqBHWkFMp7iJ3BqFoHRgp8Q668sRfJm2CjhRjqYhYU6wsxQB1jDjdOT7ZsVil8b0xfkuYvqk7VNOzHPkPEA9bPWSdS0CWsxLKbNoHpxGw7AOBSWaGe12NMqHBrhtu22w3jjCx/VLs+1zLYXx0qnWdh5B4Y6XQlafRWVuprcfe84s5fZQi2I2Ir60h+vkL4CV0S5xtjbaAO1I2YVlqUPQk4WCvnWGv2NhATloAPBOISB9/hnI4bn3xbLNx0/47698zT3lV8GlkC1vCbQ80gPUBYyJ4N+FhIbp67D+suMuYQobiCOI5wIOqM7yG1OV15RtZNPJF9ZptLRE4pqppFX5UJCo/SjIfO6wZvFLHopQm3Fb+U3u5yfXN6sTmLAGbPI5eS5ta0yppfRC+vjc6oyXLtNQbGKg3qhcOBCKQGYDB7TNn33B0YOv/9DDJ+4pCervZ5oDtQbyTN+BJ9V/8z33+GbQ//a9B678XwvD4c+xf9YP0ouyE4NCQTOJoGOndhRvZ9Y05Oha8LDHuZ9VxpLiC53PDkr/JHcZ+QvGE4Hhmw+zKI0w94vShLYH4SHoC8aWKDg688YDKAgAtEY8NkTazSeCRJOQ9QhQrvpukUVT1MSHYKT5WiM2fSTc/arOg44nmU2mliXIW55gtc0oW7+GoKY5KgKMCzUPgU3HuiYtW+UhSOuTsY2ahBRAlqVA05+iuS0CluSdMQDHrLPFEFoQNR3pbaX8CSsFUD62X97LX8PVClIrbdwBVbPNDMWUFeD8RphwH2gf2cOnTPfVbGQZ5Bej44/mF3YlzPqlwrZIh3xsMpWrlKvjmBSWmTLgKz4HNQNpbA4ZAMBL/RpkT52CLuoKT48VQDPmPKfw+lbB7JFFshzUY14qsOV5s6FFJA8nttuFgtEGpMEotJgudW9jp2xyT6do27n17WoJ34eLWct9sa3WnSwphyvolQ+lPDlpmDMFI+Q493nygQ/viNRVj3D59Zle89/9+enTp+5erL3khaOXxnctQC6N+/AUKt55+vgpAn7o+suOvIke9Et0p1fa0TIaByid5SKolVGewKrpyW4LSFgSZio7qZAQQCGz/djZVxlNAxqClGlj9w+44wglvsygKr1ewMvMKnqz9ccfkRErC7ks23JJo2YgqO8w62lKIOLadQFOYy2OcMFcjQeQo+JshodUuJa0a9hMzkP84wiSM/pMxuBi2/RRaNrSpOccf8tzrK+oyK/1Q5caSTxAxEcA0LAZTEt4a4g1TflT44lZCdoEfzUXMha+eW5afjNziTIMceAOu3Nug6kCHo0B3nLFS7+IELSbCFvvjXRQW8py+rB8jaAn1BYYphaWe0QRAmiEnHmJ8z4Zpw8imocUSIv2PqS1W5Q4LdeptBKo+YeE+VXeZ3W4jnTKkrwWAsfGTHxdPDJ5AGxv7qN1eUIbpMtDDcod4kebGC9Jb7QaTg+asjqdSohW9kRL9mVeoZn7NoJQBzBqztSacIWrgxFf02yYwkKB6L1uorVKi+3uUOAAYQQn/4T8P3HnhTN/FYLqr0uOA7UAueRuyRME3XH2MTvOq75m/9GbsHW/ARy43gVajtDt/3ZzAV71X3QRtAQvftLZhf1ggnF0zORJABoHgKYTVHPVPIAzjWlHUN0RBCmCuujofHMuaLpoK6BGGkF1nXC1FBf8iS5umQ1WBcwJQagQx7Vpywwj8arYy3sAnVqFsmi+yyaHANa1O93qwmC7eoRppo9sb8VMolNc4QDpfnOuUFBYCT6EjdskvdbhX4AOnsyRtqs/hVF8MbmQXsJoH9asakpAZV8naRg5N5q80p+RNo02rfQKgJzAG/ksLX4MsjD1Jkw4FCKv1PwsPyNvSwQwYZcVWHz4ZxJOQ78VGqVGwk+OaDSpS4FiPdLGAUGymtsV/4dluNDPd4A09UcAutFCYUZxqJf2JMxeTgZIKyfmpWIXIo64SZqJMvVX2ggPqJuGj4IibVcQWYc0QK07JihIthQm8HuJ+7bOr89mzGSkKr417s14/zMbkEGIZchEPrbPtnhpjfIfH8wd3Vb7P/zl+cdvNbQ+Ll0O1ALk0r03Fyn7yzOP2JFuffmBY6/BZPWf6GXXCTh2+pgq0iEBITpf/hzZgjTpo5zbN11H4Xi3B4rokzjE6HE3M24EkT6o20X8rCsIfEmVnR/k7wHADkYdkZrXNylucCYgR4goVEgbjATg1DKsLOkFCwhQOyojTICPa2dg+WpRTUhdPswUJh2mJ0bLl7Fb7vMQBIvbvephdnt9DBPThmYm6jSfmo6H5iFXt/vwOq02wpEw/ilMzYXpzQBhNBWZAC0itVAVASvxBGli4yxmIhE8+bl237FoB6EdbkivYG/xfPxSozBCkNRp7cvASQL4wiuAXVNNgX7iyWDeaEfULcDKmwh/2iV31RKyJb7lC9SmIROzqBOXOi3Qe+GUWuxiLubL4kDbQ4IhIO403gi5tF4dyLqKIFCgZfaV/DDQQyFCRVIbn4lB1KHQQBZk8GD79H+kLlvFbR6glSicbL+bVi4yG8uXnpUZeRRigzk0l/rKgbIuhrIJS9SE95Shycp1Q0xQuIsy/+PHLpyqHeTh3qX/VQuQS/8eXaTwI6cffg9g/N4bDhx9LR31ZiK+yhFyps5ykfd/AAViQ6CDnlq0kwJ4bgN/BCGxB8HhTrYCh+awFexK0/w6G0fhIOi4zco6osHR6DEEyR7MYgNs7VvElk8ZIbtlvSJHk4kmLIF6mvS+2ldQVFuQFvdxmgaIpp09BOAIhDp/BV2Fieat7i7EAoC6i8AjuxFWjG7PsY344xe2qgV+xewIDRCsaCHFtFUERdAVgeK71aGBWmcd2ovC8oZP1tAAhCKgZhKH5FkzISgKonwcEetvMBfRAdohu8+qpLhYbqjdX7iFdrc81zkdsxJ1Fvs+/KdeNRs3EnRVeUxD4/viuW1WSOVNiQqaMe+9bxFGVD6Cl1xSCBSpyonm0BywR+MQzN2rqhFhF5FfzFo41V0saCudZWd+y9H0lBlYnEf2JbQIgDJbjggyTWjlKs+RvNBX5jOhcHKL9CF2Rp3vTh6ntVkbchq+LEJj4Zy5y+GMvb042dfgiVpsSFJomdYGUzJ8+xT8uPnOhZO3EFZu2KSA+veS5oBdpD6+jDhgB/uLM4++69v+9Y++mLHo6wH4++zpdny7o6NZoI8TwVDTFSP38SjQV746YlcAnAdSl/ldxcSzCNKfAQzO72xlrYn7bCmY/LXcdco/Ted3g8L9lHoUAL4CgXINw+MXAOVfxe9VOFP3g7La8d3CfhUc8CVabqjnFutS5+jURWkNt9vg44jXFx1px+9gylKQCECOSKfnu9W+Pb3qec+Zq17+gt3V1169pzo2O1XNajpxCEw6JxVE+yGXsCPNCkxnGAlsLjTUBObUUv+Nj7AiLG/uo10u+stEAgSBWo7n/AOQ0AkbM5NKxzMFiHcTgRwtwpE/YOif+XRq+yrZDp9sz2IeKM2HL0Ez94XzIdOam17DE7W0+I5MS5Cty+wj+CGdmUVB5f52p9EwoGvIiH/gmwF5Y6DX2bbdmhTMCjV+1fxiMiKv1zlIEuDml4cjZinbNdxSAygfQV06+edDGvkCLQotS4GtaZMy2IkN6wiP5TjQy9OXeiWKVA5adnPutHD5q1nOgqUhz26r+frv/Mkfe/Gd5x5/Vy084M2X2eGzWh9fhhy47bbbRifXV+669oavfvPw9Ln7eVHRNXTAg1n/QadWaGjGsr9mQRyd2b8thvCuIBaoFCaiogJFZ7rvt2Z5BEDLF8fQDk+cryj1HQ8akw4hJJxZtRtIvYzy/Bzk/CCocojzQ2g3B/kVyHzd6YBwsCezqVyDwT+pBWYAEeoESOnKrCIiyzsrBEvSAlhOU3XB3O7dvMv6YK/a3acBAN2Q+Wo7AJfOercysaECmh8FkyB2AbpPIiB9a57gtbvTrZ7DVN45AK0PYDYow/xu8BjApzeQPECvxmSZ4ROFqhmZppi25I/MEyJLe7zUP2CAgkLnt8JGMDcwoM1Zh/bKc7VGk5fZUvxSnTzxI4MUiIalfLS25KdMTVoKQjN3+wg/4sT7yVsGk5FMprdsZ11lCi/pC/wbaXoEOJVIp3XxH0HhrVfWKDSkMCIh9Cr0SEu4hwsIN1i0qEQ4z+/H19erBYSIQogiSh3QeaTTy8cJDMvcLzcAJdHd0PZvD371S/7VR++95+M+y2apjy8/DvCI1seXMwdOnDix8+j68p0nN1bffEV/z58xHfcgb+i7Or4HGuZW1+615UgcyCimH4SAaze8dgJtIJx0aiSuLTFMYeGOrCvYZ/QpOE1XweL2JI8DBpo9DpPf/bh8pa4g7vkcafYSPk96zViO/gUkX3KkNuP0XuQCdZeRtRqBA3Ft4AX0iCS9zuQAKJdtwA40RJh0ql17e9Whg/1qjpG44O9CD2dNKdSKJiG4ov2gMS1Q0AJawQrIrvCaw3t+DCHiiHgGTUjHu8YZzVk61s0nkkmTRFh8fAb8Gid9gi7ZY86KZgDxAX2STF7WJCCb3721FI5e70CP5kB5rd+nY5sc3Us3IK+mQ1R4FCK4RNlKGgWS03BNp6YBKSTlmnNpcVV4puhCcDQm2tpmt161u1QubcTpA6FKLtIgKcu5rY6gS5wVF1FjG6xMbavUWYSIgmQAPQqRbT6PrA+qO9ZXcaSzuEY+UYVfzqK7vNvjmWPtCJ/V0ej/4C/5sU8tL/zU2c31O312TVofX74c8BGtj2cJBz5y7uEP0JQP/PCB5193drjxUzOj9vfMjRiDAlJqA4LHPI5qhYHrMOzYvk7X2U3rjAxdP+GqcWdirSM4FCWOxLdAgx5CRxBxfylNUmvkdXvvyQ7B4qHwKNhrJ59GE9lLCcLJg5hr/ootwN1a5AimruEQcTaFFrEBcAHkLbzjair6DtQAHDU7I8wRvH6ZYooJJllr1Z1BG3n+fHXkml3VhdPr1akH16oLpzYCxgKmY+CyGJEzwZc2bTNbSWHmm/IEXViS2UyupnZ20ZD3Wwi4tJ5RPXVi5xfcbUE0C+iAvAgA83rkhVcCv/XRfgvVMa65x1C1laEmO8LVGtQOsxNyBIdChPQI1JiZYgqDF9ap4KGAIe8dn+xzRRU5FEbtXkoPX0yoSYlbUeKti3IVJNaLBTG75Eqbh8+C4bY5N1RhxLmKgUm8X/L74pH0JU7eKnQm8ZborKtFJjoMfLhMa8bkRzA3eMIajQH+sd8aDZu/8KfnHrvrYrn1ybOCAz729fEs48BfrS6cund98Xe+u7//1/aOWtuso3jxNJOkrtC8hMDgnJXjjepqHM7X8FFjmCPsGsD9SsTJMYSFU3xdNzLLuaPurM+AT47ad1GGeLEAOp0m7HHQZw+Q6WtohaCYp3iyugCTi8ymKNtZS67pOENZvOqXxW8UALjqgGYJSIQHCB8ACugLvBbnF+VnaiognpG0QZaJ76SPn2TP5f1qdr5dbW2gP+HwljaBeZF8D7XZQgUanOE0i2/iGEi/H6E4SyLXltBEaKMwx8KCLYAcAUB46ieKf1UI0kI3oTENEbmDySY705LfjQYVgDqwzSidE7B2dF+0FPJHIJIkiE968gnejugtO6vPFQaEpWy1DnnX44Pkd8v0aBkIqQ5ahsTRDOI0SRFvXfDFCOluoFrZRp3tkWrSBQ/iM5MWAosZzcwKF4Ucef1EqJnGSqAVmrZhrHl9te0m/pdNBO+DaCD3o31onnpiCnN7cbrZfOP+6Znve+dj97/tU6sXXNtUH88yDvik1cezlAMfWl9Y/uDGwgdvmr3sTdc0uo9eVbUvZ9vrQ6sg5dWMDg8jJPYALOoaBwCOowiGw4D+fsDNrUgOM3//qAKGT/wl4IhmGBfEaRJzN0hHngMQbB/XMwCLwKjNfWL79/Wq08zeOUT4cyjzAmU8RI0XqFNtwOm2AugOppCJUBFbY5sH0ECrgOrF9QMOnKlL0FSKqAU4u2hm33S17zm7qpnZTrXFpn4ra9QB4p1Bx16gvWJyn7YdbbOdCaA6I0DzcaWcAC3YC+7tPgCKb6SNFqKPRQGnKc2FeApS5jcHQKUxwkB5QXuN8nNRY4AuyCON8XxBi4BsoGFxciuUuFAjUFNx1bv6k8KS7MQJ9tAorQgLeZp2E9SBPoWJPhqB372xLMdjUmdmilGiWqHpQqc89f7QZvlmGOyUo6QsNKcUvjIlmXyasEyj8OAswtJV6OusPvfNhPdubFXHB2xhYhtH1Z0Q8l+6vf0/eM/5h97/yaWF5RBVfz0rOVCbsJ6Vt/Wpjfrps39tJ36Tn9/Z96IbnjPq/vC1zc73Agez+j0UBocRKPoUdrDXLAMUVzFanwbINtl69RwAcgrTlz6NDRDscYxap9h+xM0b9yJ0nO10gWmnexFCmsc2GJnqc+gxRcdZPAOdp5Sj5aWpGat4QKplHCLu7KpwGPJuVKfLzmrW2WD6q0BOZHdGaAO0yFth9mJjC0w4nZh5GIuPQRngor4mPpI9mLX6+6eq9l0L1SPHlylbGxV5qSfTbHMaqMwIf6SqQpsFYxMJwq1IS4QIPFC40sQIGonQV8M3ggKQR9CI2ebZoS0xJUmTaYwX3AVl+OeoXYEj8CqwFCoKD01mTvd1ijAnERpKOycPDFaZJgv4u1BwhIDF0ZQ0lqrGI/ZTVMqNJuW5QobfSC8EZZN7Yf0KGeunABkh0SSBb1yrdRgvjzwgNWkdLJQJwWpYaQwk2p5Sv2tjNqFjYWe0wvtO3omv7Ff/ZvXcR1PIiq++qY9nOwdqAfJsv8N/q33fvnCPHfyjp19040+eX1z+njPrGz9yqNG5oayLAChApE3A4rIZlhYCEB3sUqPlYXXZLI8KwMIicTSOTnXPYKu6B0Himou+2MPI3K0snLb7KD6POUb2B/F1OPR1Q8PTZHzu9HR1PUHa+cVr3BYxc+1j/UeDEfQIcF24wHRhbOozrDnZxkGxswEg72aETb4RYQ1m/HRJFwex6AlZ+ihGorkgSzlTu3rVtS/dW20D0g89NKw+jRApqja0AJ5kZ2QPoEJX1lEwI8u2OXLXWW2ZERAULLDrjylIDfYij0zreF0NQee4wsDq9T0YGcc7Z1nTYYjCI6jOhXX44+8YyF20RyaAnLy2yUvSOL1ZOg2KCcxyYFysUZEeCBqn9ZLP9kWIkD4CjbIb8gmhGnNU2oCQVRhJgY23ftpgfINwiiEvwZri1I6kIoQSIYtMbxrTc83d+CivG/iV0aj/W586f3yFEuvjK4wDtQD5Crvhk+YeuOc2O/yv+nngwMuu68w1fmS4ufX9p9cHe2Zdm2FCACMbKeLZ3ssaDEfYmne2cH5fOcQMBIQIoK5OdyR9cjSo+mgqa6TXtDXLqnYxaJtz153MbBEPUA7QVjQfPQKw79tpV33XMuBPcDbRpl50hMA+BNbyEnZ1zCSadzr4AAbTACJ+2e1NNlvk5fJNzCcCa3dmKgDo6u0dNJkGgkRfxGE0kX9wrlfdy0j+NAiva9tRdUHJkAZ+koePo3NBXrONiC0YK+h0risIoAqgFZzBVGjRvKUGUfaiwkwU0xdhIjk07eAALzPLKE8m8C9Yq72oJbg4T8R2QaG+jTLCJw9prGy4ocmLa4RTU80DHgvovv5YE1dmYEmqYJ42kcZqyC/4x09DOQF9fTdRo8bX0jI+JsKutJ32wjt5YHvHJMMfaKatih4kx3mmDL+DZ+FXXnXHHbVTfMLIr9DfJz1KX6EcqJt9kQOj66/vfOCBzW94/lzvu/ozrdcA1LsWlreqOQBs/gAgDUa5+nrl/KBaZxpWHyBdBczXCTu7M2DreVa1IyguADTO8toPyrgjrudulNijJrUFgdPZWK5VcTSrQ1tkVmj5Qq0uAOuUXP3su6a71coS7zsnj6Nnp792ZhBwcSpj+oE2Z2WpMbhSuum7uQHYwdpWdYEV7B97cLl638Z69fBoo5pvT1UvnZqqru9NV0epY0qghR5fRqWWkXeJow3E7xFtAoGgLwQVagenscLBWU0ROOTXlOMhSNMMUB+Cg/VcEC8CD5bRftAk4mQ3jnaqcbjdSQokDOUN2gVviohgIkrNY4zinmdiggyCLxGas/BOIac6wuG03SIjFBZqGnz0cSiQpBuSZHN7mvsIL7O1CHkl23PpCm3U78w3IxRqaVvlRruj98Cud12+56o/aLzlLVBaHzUHeJ5qJtQcmHCgcccdAsP7URfeP7rppqkTnzjzTaz7+K7pbuPbUC5mG0y3HSIwVhnRzwPa/b3l3Rpba4Sf22F9Rbs6jdZxbgfbFOipZtLnMwsYHRx1mb3VrB5j9Z4vpnL1etZtAI4N7fkCJumyfgGhcHp1szqJ8NqHkNk7h3kM05WYu4VGss5sqzZObfP0MOEMMEF1ecl8Bx9Jm0QC5xAz2PY6PhbixGG1iWlAfS/+kx6LEfUp5D0egOvOBitf0Kwu9gbwU/QWkDMji2tcLzFvNXHk6DsATKOFwBdVrALepiE8EwigzQa1oSsmJUBbUNYhryQGmjnh4Nr0jvxFeAWJvJPqCAB4rhVpB3+Q/IkpzLKinfjyLugU/McSQoExLjnCOVoMBSh0VAhl4khzFYtR1F48FDhxlFNPHO2pf4SG2ngf1++6bL75+41fvlVLZH3UHHgKB2oB8hR21BcTDjRuDWC8l+v3jl58Y2/h7MY3M031u1dWd74F/OpPzzi6BfgxKS0z4+kAIL9rvlU9d7NdvWijWy0C3uuYutzaJNoDoOQU4KzmBrcyegZkp1xZjgDJkgHAU42kid+ltQqwkadHZbPWdQDAg5iNtWG1innnzCI79q4iFNgWuLc6qKbxo0wpRBAc+kciOBAM2upFezAezB1VexE4x47OINjA/cdXqxF0Cppt6qA6KtYXo2kJEFezUDgQbFvdjlwHuZoKKxUl0H3qKdj1I/ywm7BmpozmA/BoC+4ASb2u9FfzUOhZ9uYSGRQegPs25jtfCSzYN+GndaLIsVbGuvlDILYxQylcLaP4f8jPuQIjM6nkDkRcnAUnjRKupOOIqYt6R5j24jQnWvohLQcyhOwN3sPV+F00kv+9uzr0e423/7ojgfqoOfAZOVALkM/ImjpiwoHGbbcJJO/28/DRl09PzzZuZFXzNzFyvml9dft5g9Vhtf9ynO6ak3ZhdgKUph4ZVEM2QBri01hccmNE1gyAZU5wAhsxGwHU/mWkD3BiTnE20oj0DeI0LeX96KQdAsytLUbRjP7n2NJkFjDdd7hTLS1uVydPb1YPLWP2YrPF+T4OY4CzzS6182zzsbbC9vAbm9VCBzUBpLT+JTUS6ukfmq7aB/rV+qNL1eAsu3ah4biuRN+GmkimFQP2jvwFeoWCiwBzQHOTOhr4b1Q51EIUMI0BQkDCoa/F9itDzF463cVxtQhNa2QAxEnitFx8HztMX3LtR0xNCBm9D/LE6c8CfYS0dVOKwsMyXP+hnyKLBSnSvAoi+akyYnhedevy+ggSaCI+CzPVXvynLAUWgZ8m76205vdn52dua/ziLc7Oro+aA58TB3y266PmwOfNgYeOXX91b7rxTf09rZuYQfRPGr1Gf4CWsHJqUO2+ApDGXDJc36nOPrZRrTKb6wyG/nMg6D9s8ZZz/BhTOp/BZbUO13S0sO3rR3/szEa1hAC4Yr6HGYh4ynFGUrbzAFxj8ydsdXFQ/cV969XjbC9+Bof+KdD8CLanI4DnEGD98PZGdR9L5zcB5j29qerlM7PVtf1edRWayBVH+1VvTx8hgbb08HK1ubKZuh2t68QWafX5CLbuOaUvwgG9AD1Au8mOtMQ58kcm8Uu8Q3pxWQ2GOPNr9jMvLYgGYxJLN6FlAOW5crJATmUAGoltVvq4FsQZau4X1kRL07QVP4dCjJyasFpoX0jgXGe6rgKLachqegY6HdgDbQYtY+ePRq3WrfiPfr/3llvvT0T9VXPg8+CAz1991Bx4Wjig32RzaelVy2c2b8KW//X4SF7SmGo3hxjfz5/YYuZUs1oGgR87u1Zdvt2pumosuwE2RuwOjLOVCSYhR+SnzqxX53CeX8mU3A7zhAVRHdoBYtK2ptFI8MP4nopT9zHDinzHEUz3X2A1OgJsCcB9oLtTXQCM19AKziKl3CX3EHsz/SOmE3/r3hn8IZiDECTdQ7MgNGalk2gjCDmn8irUthESMVPhHNfRrE+kiXlMk9swC1gQBAoahIV0WUbyIGDcaVexUBYPKjAE9yJULDObLSKUdig7vggYoAMdkTLWhjD5MRNNOtQ/mqTNzCsFgwIkWgclRrCqrVCZ9BGnlGu6BsR0bWxuzeruRrf9IVLcOrOn9eHan/G0PO51IXCgFiD1Y/BF4wACZdf2YOXlS6e2XzFY33rFvqumX9bst2a215it9eh6tbWA7R88bjurCh9E3q+hIEEonMM8tYTD/Nh+NuND0Chk+EZbAJQxh7XxnbTncZYDsI8+sFntPtTGrDUNgLO9yvKguvfBleqPVreqT7QQKIDteZDY0f4MwPp1MzPVq3u9is192QLFdRI654fVLGYtK9k6v1ltIoTUKBQCmpEG0Ix8QAMqZq6GwK+5CmGyzSfObbEbE1lAHyFIIIIGWtEcnNEUYaPZiim+WWmPQI2GQpta7gNDFs1b+o1aaBfms4wdNBi1Nf0b2X2X+Gz4SPo4vUnmr7Rxtor8+vNGt3U7zb19ptf7SOMdt+pxqY+aA087Bxiz1EfNgS8OB3DEC1zZ4NEaRq+7sV19vPHS7u72K2Ybo1csb67/4+2lnaM7+FDcJsMZTnECM3J2MaNw6Gp03rcbv4AaQMxcaBKOyEfMC9LWr0Bx4pdrPwTdI3NT1R60k+c8slG94/Ry9REmBwvKSoohQ/UVQH2ZfLOu1dA0RL1r57Z5BwmO+H2sYkeQtBQiq24bzwAe4NaMtq22wejemVlZt8GlAN9gozBnTakFuG5DR7tmJatUjjhFOI5utBTNcJaRtmjmon3W76tjt2mP5jHUnQhKpwurVajdpCyuY06j/qxsZ/yHUHyErfz/FOPW7byo6/b5+UMfb9xyC9KvPmoOfPE5UAuQLz6P6xrGHGjcfBvj6+qO8eeNBo9uvPGyxeNL1+EauQ7gvY71iS8BRF/EthjT65p9wFP3gG8KiYB1dw+vxUK4xJSF+WbELCxXbzcB8RG+lm19KaBtl7hj+1rVP1+cqnatNav3djbyRsIOXu2lHRzwmKT2snVKUwBn+u8yvpS5C+u8K538c92qu5fpUEw43gbkXbjYYo0JqhEEIwDA9awPwfEOUQgHrjlTgiAbImA0g2leMqaAP6BPI0bZ7JF6EQJJg3CwLLc+b8EdBYp+Dh3z2YuKKjoIS8pZR2rcg5ZxN5+7mJV1V7fZvWvXbbedter6qDnwTHCgFiDPBNfrOi9ygBleAqD2eT85Rjff3Dz3lnc/D+nxEvD+OpD3xfgZrma20RUk2OUMJkE7q8oBeA9B3llPXkVrcRQP+Loj8NUsWjzMUP4htpT3XRZLrlVBS9iDwNFB0HUqMnlXl3gV7vRm1oxU1KHPoXu4X23hVxkwVbiBdqO/QjMaYgMBwbX1YcoaadJSniDcpMvwmLWgU3+FtCgMs1AQmi9uWU+cGs02G0BKPNOZkW2NE+z8ez9mqk9gRrtrarq6+8i3vPrTjZtvVuepj5oDlwwHSu+7ZMipCak58HdzYPSN37i3Gq1eyUtJrgCpr2Q21BUP3bt2JVt3XbHv0NRzR+3mTEOfCQiuaezsw+vVnUtb1W93t6oHmUM8x74hVzEj6YUDHOqrI3YhbuSlW6eHm9Vhtms5dKBVTe2eqlpzgDrxrblO1Tk8Ww0XN6uNBab7YvLaURKgiejvcLqvW8i7ZkSNQw3DrUTUIHzZUofpxE6zJRpzGwKiMVol4EFSnECGHec9JScwxx1HuTnBFN3jx+75yLm/mwN1bM2BS4cDtQZy6dyLmpLPgQOND3xAgPWjKeypx4OA9Ld+a79aXNyHznAZDoJ9rE25rN9q7es2mpfh0t7XGu3sOzg1s++F891+d35nauvsehflgo2+Gl22ZZlaW2x1t1a3utMHu1MIge4W26F05za32v3O5sxUc2tzYWtrsLGziSDY2mm2NtlieIuV+JuN7aGvgl9gN+MFXh61QIlnWeuywMZfZ1FbFtBCzjamdxaO3HGH7+Kqj5oDzwoO/F8r71zydo9uWgAAAABJRU5ErkJggg==', + value: embed('0c6f377f-771e-432e-8e2e-15c3e9142ad6.png'), }, 'asset-9c2e5ab5-2dbe-43a8-bc84-e67f191fbcd8': { id: 'asset-9c2e5ab5-2dbe-43a8-bc84-e67f191fbcd8', '@created': '2019-03-29T15:23:05.713Z', type: 'dataurl', - value: - 'data:image/png;base64,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', + value: embed('9c2e5ab5-2dbe-43a8-bc84-e67f191fbcd8.png'), }, 'asset-6fb8f925-0e1e-4108-8442-3dbf88d145e5': { id: 'asset-6fb8f925-0e1e-4108-8442-3dbf88d145e5', '@created': '2019-03-29T15:36:01.954Z', type: 'dataurl', - value: - 'data:image/jpeg;base64,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', + value: embed('6fb8f925-0e1e-4108-8442-3dbf88d145e5.jpg'), }, 'asset-d38c5025-eafc-4a35-a5fd-fb7b5bdc9efa': { id: 'asset-d38c5025-eafc-4a35-a5fd-fb7b5bdc9efa', '@created': '2019-03-29T15:55:34.064Z', type: 'dataurl', - value: - 'data:image/jpeg;base64,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', + value: embed('d38c5025-eafc-4a35-a5fd-fb7b5bdc9efa.jpg'), }, 'asset-b22b6fa7-618c-4a59-82a1-ca921454da48': { id: 'asset-b22b6fa7-618c-4a59-82a1-ca921454da48', '@created': '2019-03-29T16:12:07.459Z', type: 'dataurl', - value: - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDIwIDI0Ij4KICA8cG9seWdvbiBmaWxsPSIjNDVCREIwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHBvaW50cz0iMjM3IDEyMCAyNDkgMTQwIDIyNSAxNDAiIHRyYW5zZm9ybT0icm90YXRlKDkwIDE4Mi41IC00Mi41KSIvPgo8L3N2Zz4K', + value: embed('b22b6fa7-618c-4a59-82a1-ca921454da48.svg'), }, 'asset-7f2d5d96-3c85-49a0-94f3-e9b05de23cb6': { id: 'asset-7f2d5d96-3c85-49a0-94f3-e9b05de23cb6', '@created': '2019-03-29T19:55:47.705Z', type: 'dataurl', - value: - 'data:image/jpeg;base64,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', + value: embed('7f2d5d96-3c85-49a0-94f3-e9b05de23cb6.jpg'), }, 'asset-0791ed56-9a2e-4d0d-8d2d-a2f8c3c268ee': { id: 'asset-0791ed56-9a2e-4d0d-8d2d-a2f8c3c268ee', '@created': '2019-03-29T19:55:47.974Z', type: 'dataurl', - value: - 'data:image/jpeg;base64,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jcYNTKV1obwhaXvFgHzOPSnc8ZqEAhjt49am5bFS3Y2pxutdybcAdw4qQTZ4qEg4GO9QrjJNYXvud9+XRI1EYZwauow4x2rCVjnP44q6shZvas5o6aVbo0bUcuOKsCTawNZMblm5+tXAxHHWsG7M9SlO6NiNgfm61qwnHPr2rnY3ORWzAxJBJ965ah7+Clc6G3YZDAVtw9vb8PxrnIHUgetbUEu1K4KrPpMJLRJm/E4AweamBAway7eXkFen6VfLc4Tt/KvOqI+lwtbZl4ScZ7+1TIAcFs5rOWQcE9atowA5Ncsu561KaOitblVGO9dDYXgziuIR1C5P+RW5p82XCjg15mKpJps+ny/FyTSPTdNulbAzjnvXYWzMSHTkEdR615vZSqpAHWurguysQavk8dC+x+jZRirKzeh//9L4GsrtCodcgHnn/Guu068KvuQ5UcnJrytHVgO+PaunsLvYFJGPxr9QrU7pnyFCpDmUorsevW91DcwZXqpHGfWuqtZzsWI4B68f/Xryawu1Egdc+p9a7e1v8IARkHIH1rwsTRd7I+rwcoP3pnpWlXhXIlYehFdJb3Y2788evavO7Wdmt/MXkk/5xitiyumjYLnHfB55/lXhYnB812fVYTMFFxpHottd8hu/TFdVbag6jBx9OvavOba+iyvzew//AF1u292rMUB79K8DE4S/Q+owuL/vHocV0kg3xgZ4696ZI4x8/HH61x63bISwOCen/wBarq3sxUO3XGceorx3hbM+ihiVy+ZqXTmNecZxmuankYsf7x61sfaElByccdT/APrrInTedwOSfSuijFLRmM3rczZpFwZCO9c9eopQTKc44B/xrZuY2QZfnnOO9Y0qtInONo7GvTw76pnj4yCs00cTdSsjEN9e3NYckjTKegx69xXTanDG7h1wD1A+lc3dRpkqvU5ya+koTTjtqfGYmjJT916HNXjMVwuck9+mKwriV0k3SN06YP4V115D5aiZm6DgVymoQlwMDLde3b/PtXqYarr5Hi5hhrp9yzaXRCiQDp68V01nqDhFcnBPr6CuCiZlG1OK07eWTCnJ9Cf8mniKXNcnBVXSh5nq9nq6rgdD7etd7pl95kY755968PtmePaWPUc12+m37xxqM4HX3/nXzWYYRPY+9yjHv7R7HaXCgAEZGe45rQJ5DDOO30rg7DVSzAM3156e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', + value: embed('0791ed56-9a2e-4d0d-8d2d-a2f8c3c268ee.jpg'), }, }, css: ".canvasPage h1, .canvasPage h2, .canvasPage h3, .canvasPage h4, .canvasPage h5 {\nfont-family: 'Futura';\ncolor: #444444;\n}\n\n.canvasPage h1 {\nfont-size: 112px;\nfont-weight: bold;\ncolor: #FFFFFF;\n}\n\n.canvasPage h2 {\nfont-size: 48px;\nfont-weight: bold;\n}\n\n.canvasPage h3 {\nfont-size: 30px;\nfont-weight: 300;\ntext-transform: uppercase;\ncolor: #FFFFFF;\n}\n\n.canvasPage h5 {\nfont-size: 24px;\nfont-style: italic;\n}", diff --git a/x-pack/plugins/canvas/shareable_runtime/webpack.config.js b/x-pack/plugins/canvas/shareable_runtime/webpack.config.js index 2e69f52bdf651..abe7113c26d1c 100644 --- a/x-pack/plugins/canvas/shareable_runtime/webpack.config.js +++ b/x-pack/plugins/canvas/shareable_runtime/webpack.config.js @@ -112,7 +112,7 @@ module.exports = { loader: 'postcss-loader', options: { postcssOptions: { - config: require.resolve('@kbn/optimizer/postcss.config.js'), + config: require.resolve('@kbn/optimizer/postcss.config'), }, }, }, diff --git a/x-pack/plugins/canvas/tsconfig.json b/x-pack/plugins/canvas/tsconfig.json index 32e1e6e6d5842..c0967e56e3315 100644 --- a/x-pack/plugins/canvas/tsconfig.json +++ b/x-pack/plugins/canvas/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", // the plugin contains some heavy json files "resolveJsonModule": false, @@ -28,33 +26,59 @@ ], "kbn_references": [ { "path": "../../../src/setup_node_env/tsconfig.json" }, - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/bfetch/tsconfig.json" }, - { "path": "../../../src/plugins/charts/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/discover/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../../src/plugins/expression_error/tsconfig.json" }, - { "path": "../../../src/plugins/expression_image/tsconfig.json" }, - { "path": "../../../src/plugins/expression_metric/tsconfig.json" }, - { "path": "../../../src/plugins/expression_repeat_image/tsconfig.json" }, - { "path": "../../../src/plugins/expression_reveal_image/tsconfig.json" }, - { "path": "../../../src/plugins/expression_shape/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/inspector/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/presentation_util/tsconfig.json" }, - { "path": "../../../src/plugins/saved_objects/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/visualizations/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../lens/tsconfig.json" }, - { "path": "../maps/tsconfig.json" }, - { "path": "../reporting/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, + "@kbn/core", + "@kbn/bfetch-plugin", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/share-plugin", + "@kbn/discover-plugin", + "@kbn/embeddable-plugin", + "@kbn/expressions-plugin", + "@kbn/expression-error-plugin", + "@kbn/expression-image-plugin", + "@kbn/expression-metric-plugin", + "@kbn/expression-repeat-image-plugin", + "@kbn/expression-reveal-image-plugin", + "@kbn/expression-shape-plugin", + "@kbn/home-plugin", + "@kbn/inspector-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/presentation-util-plugin", + "@kbn/saved-objects-plugin", + "@kbn/ui-actions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/visualizations-plugin", + "@kbn/features-plugin", + "@kbn/lens-plugin", + "@kbn/maps-plugin", + "@kbn/reporting-plugin", + "@kbn/spaces-plugin", + "@kbn/handlebars", + "@kbn/interpreter", + "@kbn/tinymath", + "@kbn/coloring", + "@kbn/es-query", + "@kbn/utility-types", + "@kbn/datemath", + "@kbn/field-formats-plugin", + "@kbn/monaco", + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/data-views-plugin", + "@kbn/expect", + "@kbn/analytics", + "@kbn/safer-lodash-set", + "@kbn/config-schema", + "@kbn/tooling-log", + "@kbn/ci-stats-reporter", + "@kbn/optimizer-webpack-helpers", + "@kbn/storybook", + "@kbn/core-apps-server-internal", + "@kbn/ui-framework", + "@kbn/flot-charts", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cases/tsconfig.json b/x-pack/plugins/cases/tsconfig.json index 3bc66fd8bca3b..cb1039e1eff7b 100644 --- a/x-pack/plugins/cases/tsconfig.json +++ b/x-pack/plugins/cases/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,22 +10,50 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", // optionalPlugins from ./kibana.json - { "path": "../lens/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, + "@kbn/lens-plugin", + "@kbn/security-plugin", + "@kbn/spaces-plugin", // Required from './kibana.json' - { "path": "../actions/tsconfig.json" }, - { "path": "../rule_registry/tsconfig.json" }, - { "path": "../triggers_actions_ui/tsconfig.json"}, - { "path": "../stack_connectors/tsconfig.json"}, - { "path": "../notifications/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/saved_objects/tsconfig.json" } + "@kbn/actions-plugin", + "@kbn/rule-registry-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/notifications-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/saved-objects-plugin", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/securitysolution-io-ts-utils", + "@kbn/cases-components", + "@kbn/es-query", + "@kbn/i18n-react", + "@kbn/management-plugin", + "@kbn/core-http-browser", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/home-plugin", + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/user-profile-components", + "@kbn/rule-data-utils", + "@kbn/ui-theme", + "@kbn/std", + "@kbn/test-jest-helpers", + "@kbn/config-schema", + "@kbn/task-manager-plugin", + "@kbn/usage-collection-plugin", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-common", + "@kbn/safer-lodash-set", + "@kbn/logging-mocks", + "@kbn/ecs", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cloud/tsconfig.json b/x-pack/plugins/cloud/tsconfig.json index 523869f892d3a..63a4d2a871145 100644 --- a/x-pack/plugins/cloud/tsconfig.json +++ b/x-pack/plugins/cloud/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ ".storybook/**/*", @@ -13,7 +11,12 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/analytics-client", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cloud_defend/tsconfig.json b/x-pack/plugins/cloud_defend/tsconfig.json index e40b3d8e9c273..aabb3ece1e8da 100755 --- a/x-pack/plugins/cloud_defend/tsconfig.json +++ b/x-pack/plugins/cloud_defend/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,7 +9,17 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../x-pack/plugins/fleet/tsconfig.json" } + "@kbn/core", + "@kbn/fleet-plugin", + "@kbn/fleet-plugin", + "@kbn/core", + "@kbn/i18n-react", + "@kbn/data-plugin", + "@kbn/kibana-react-plugin", + "@kbn/monaco", + "@kbn/i18n" + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cloud_integrations/cloud_chat/tsconfig.json b/x-pack/plugins/cloud_integrations/cloud_chat/tsconfig.json index bc4d834ed6971..6cc297a5b4361 100644 --- a/x-pack/plugins/cloud_integrations/cloud_chat/tsconfig.json +++ b/x-pack/plugins/cloud_integrations/cloud_chat/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ ".storybook/**/*", @@ -13,8 +11,16 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../cloud/tsconfig.json" }, - { "path": "../../security/tsconfig.json" }, + "@kbn/core", + "@kbn/cloud-plugin", + "@kbn/security-plugin", + "@kbn/storybook", + "@kbn/core-http-browser", + "@kbn/i18n", + "@kbn/ui-theme", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cloud_integrations/cloud_data_migration/tsconfig.json b/x-pack/plugins/cloud_integrations/cloud_data_migration/tsconfig.json index f20e862c01c20..f03c1067af556 100644 --- a/x-pack/plugins/cloud_integrations/cloud_data_migration/tsconfig.json +++ b/x-pack/plugins/cloud_integrations/cloud_data_migration/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,12 +10,17 @@ "../../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, + "@kbn/core", // required plugins - { "path": "../../cloud/tsconfig.json" }, - { "path": "../../../../src/plugins/management/tsconfig.json" }, - { "path": "../../features/tsconfig.json" }, + "@kbn/cloud-plugin", + "@kbn/management-plugin", + "@kbn/features-plugin", // required bundles - { "path": "../../../../src/plugins/kibana_react/tsconfig.json" }, + "@kbn/kibana-react-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cloud_integrations/cloud_experiments/tsconfig.json b/x-pack/plugins/cloud_integrations/cloud_experiments/tsconfig.json index 5e32996131fb1..8b9e3daf13aac 100644 --- a/x-pack/plugins/cloud_integrations/cloud_experiments/tsconfig.json +++ b/x-pack/plugins/cloud_integrations/cloud_experiments/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ ".storybook/**/*", @@ -13,9 +11,18 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../cloud/tsconfig.json" }, + "@kbn/core", + "@kbn/data-views-plugin", + "@kbn/usage-collection-plugin", + "@kbn/cloud-plugin", + "@kbn/crypto-browser", + "@kbn/config-schema", + "@kbn/crypto", + "@kbn/logging", + "@kbn/logging-mocks", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cloud_integrations/cloud_full_story/tsconfig.json b/x-pack/plugins/cloud_integrations/cloud_full_story/tsconfig.json index b2f06a09a6e03..47b6a5837a829 100644 --- a/x-pack/plugins/cloud_integrations/cloud_full_story/tsconfig.json +++ b/x-pack/plugins/cloud_integrations/cloud_full_story/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ ".storybook/**/*", @@ -13,7 +11,12 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../cloud/tsconfig.json" }, + "@kbn/core", + "@kbn/cloud-plugin", + "@kbn/config-schema", + "@kbn/analytics-shippers-fullstory", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cloud_integrations/cloud_gain_sight/tsconfig.json b/x-pack/plugins/cloud_integrations/cloud_gain_sight/tsconfig.json index 392e17e62f1d9..01bc88896e67a 100644 --- a/x-pack/plugins/cloud_integrations/cloud_gain_sight/tsconfig.json +++ b/x-pack/plugins/cloud_integrations/cloud_gain_sight/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ ".storybook/**/*", @@ -14,9 +12,12 @@ ], "exclude": [ "server/assets/*.js", + "target/**/*", ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../cloud/tsconfig.json" }, + "@kbn/core", + "@kbn/cloud-plugin", + "@kbn/config-schema", + "@kbn/analytics-shippers-gainsight", ] } diff --git a/x-pack/plugins/cloud_integrations/cloud_links/tsconfig.json b/x-pack/plugins/cloud_integrations/cloud_links/tsconfig.json index bc4d834ed6971..2354df693cb95 100644 --- a/x-pack/plugins/cloud_integrations/cloud_links/tsconfig.json +++ b/x-pack/plugins/cloud_integrations/cloud_links/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ ".storybook/**/*", @@ -13,8 +11,13 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../cloud/tsconfig.json" }, - { "path": "../../security/tsconfig.json" }, + "@kbn/core", + "@kbn/cloud-plugin", + "@kbn/security-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cloud_security_posture/tsconfig.json b/x-pack/plugins/cloud_security_posture/tsconfig.json index 09588ccdd6247..347f6e9c51057 100755 --- a/x-pack/plugins/cloud_security_posture/tsconfig.json +++ b/x-pack/plugins/cloud_security_posture/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -16,12 +14,39 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../x-pack/plugins/fleet/tsconfig.json" }, - { "path": "../../../x-pack/plugins/fleet/tsconfig.json" }, - { "path": "../../../x-pack/plugins/task_manager/tsconfig.json" }, - { "path": "../../../x-pack/plugins/security/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/fleet-plugin", + "@kbn/fleet-plugin", + "@kbn/task-manager-plugin", + "@kbn/security-plugin", + "@kbn/config-schema", + "@kbn/licensing-plugin", + "@kbn/kibana-react-plugin", + "@kbn/shared-ux-link-redirect-app", + "@kbn/usage-collection-plugin", + "@kbn/cloud-plugin", + "@kbn/unified-search-plugin", + "@kbn/charts-plugin", + "@kbn/discover-plugin", + "@kbn/i18n", + "@kbn/ui-theme", + "@kbn/i18n-react", + "@kbn/es-query", + "@kbn/rison", + "@kbn/data-views-plugin", + "@kbn/std", + "@kbn/monaco", + "@kbn/utility-types", + "@kbn/core-logging-server-mocks", + "@kbn/utility-types-jest", + "@kbn/securitysolution-es-utils", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/es-types", + "@kbn/core-elasticsearch-server", + "@kbn/ecs", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/cross_cluster_replication/tsconfig.json b/x-pack/plugins/cross_cluster_replication/tsconfig.json index f815f7e812d0a..20dfb113207a9 100644 --- a/x-pack/plugins/cross_cluster_replication/tsconfig.json +++ b/x-pack/plugins/cross_cluster_replication/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,20 +9,27 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", // required plugins - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../remote_clusters/tsconfig.json" }, - { "path": "../index_management/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, + "@kbn/licensing-plugin", + "@kbn/management-plugin", + "@kbn/remote-clusters-plugin", + "@kbn/index-management-plugin", + "@kbn/features-plugin", // optional plugins - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, + "@kbn/usage-collection-plugin", // required bundles - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../license_api_guard/tsconfig.json" }, + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/data-plugin", + "@kbn/license-api-guard-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/analytics", + "@kbn/test-jest-helpers", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/custom_branding/tsconfig.json b/x-pack/plugins/custom_branding/tsconfig.json index c6eec4a99683d..488891e7c5592 100644 --- a/x-pack/plugins/custom_branding/tsconfig.json +++ b/x-pack/plugins/custom_branding/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true, }, "include": [ @@ -12,8 +10,13 @@ "common/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../license_api_guard/tsconfig.json" } + "@kbn/core", + "@kbn/licensing-plugin", + "@kbn/license-api-guard-plugin", + "@kbn/i18n", + "@kbn/core-http-request-handler-context-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/dashboard_enhanced/tsconfig.json b/x-pack/plugins/dashboard_enhanced/tsconfig.json index 79ef7ff25b110..f5a6c6faaeb8c 100644 --- a/x-pack/plugins/dashboard_enhanced/tsconfig.json +++ b/x-pack/plugins/dashboard_enhanced/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,13 +9,21 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/dashboard/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json"}, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions_enhanced/tsconfig.json" }, - { "path": "../embeddable_enhanced/tsconfig.json" }, + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/dashboard-plugin", + "@kbn/share-plugin", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/ui-actions-enhanced-plugin", + "@kbn/embeddable-enhanced-plugin", + "@kbn/core", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/unified-search-plugin", + "@kbn/ui-actions-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/data_visualizer/tsconfig.json b/x-pack/plugins/data_visualizer/tsconfig.json index f818a547aa2fa..9aba91e813c84 100644 --- a/x-pack/plugins/data_visualizer/tsconfig.json +++ b/x-pack/plugins/data_visualizer/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../../typings/**/*", @@ -14,21 +12,46 @@ "types/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/custom_integrations/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../file_upload/tsconfig.json" }, - { "path": "../lens/tsconfig.json" }, - { "path": "../maps/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../cloud_integrations/cloud_chat/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/discover/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-plugin", + "@kbn/usage-collection-plugin", + "@kbn/custom-integrations-plugin", + "@kbn/security-plugin", + "@kbn/file-upload-plugin", + "@kbn/lens-plugin", + "@kbn/maps-plugin", + "@kbn/embeddable-plugin", + "@kbn/unified-search-plugin", + "@kbn/cloud-plugin", + "@kbn/cloud-chat-plugin", + "@kbn/embeddable-plugin", + "@kbn/discover-plugin", + "@kbn/field-formats-plugin", + "@kbn/datemath", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/ml-is-populated-object", + "@kbn/charts-plugin", + "@kbn/share-plugin", + "@kbn/home-plugin", + "@kbn/data-view-field-editor-plugin", + "@kbn/ui-actions-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/ace", + "@kbn/rison", + "@kbn/data-views-plugin", + "@kbn/utility-types", + "@kbn/i18n-react", + "@kbn/core-http-browser", + "@kbn/react-field", + "@kbn/ui-theme", + "@kbn/ml-agg-utils", + "@kbn/test-jest-helpers", + "@kbn/field-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/discover_enhanced/tsconfig.json b/x-pack/plugins/discover_enhanced/tsconfig.json index baa3aae67c3f8..21c18aee7455b 100644 --- a/x-pack/plugins/discover_enhanced/tsconfig.json +++ b/x-pack/plugins/discover_enhanced/tsconfig.json @@ -1,22 +1,26 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["*.ts", "common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/discover/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../lens/tsconfig.json" }, - { "path": "../../../src/plugins/url_forwarding/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/visualizations/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/discover-plugin", + "@kbn/share-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/lens-plugin", + "@kbn/usage-collection-plugin", + "@kbn/embeddable-plugin", + "@kbn/visualizations-plugin", + "@kbn/ui-actions-plugin", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/unified-search-plugin", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/drilldowns/url_drilldown/tsconfig.json b/x-pack/plugins/drilldowns/url_drilldown/tsconfig.json index b4ef559e81ce4..1ca5a342710fe 100644 --- a/x-pack/plugins/drilldowns/url_drilldown/tsconfig.json +++ b/x-pack/plugins/drilldowns/url_drilldown/tsconfig.json @@ -1,19 +1,23 @@ { "extends": "../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["public/**/*"], "kbn_references": [ - { "path": "../../../../src/core/tsconfig.json" }, - { "path": "../../../../src/plugins/ui_actions_enhanced/tsconfig.json" }, - { "path": "../../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../../../src/plugins/data/tsconfig.json" } + "@kbn/core", + "@kbn/ui-actions-enhanced-plugin", + "@kbn/embeddable-plugin", + "@kbn/expressions-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/ui-actions-plugin", + "@kbn/i18n", + "@kbn/es-query", + "@kbn/monaco", + "@kbn/std", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/embeddable_enhanced/tsconfig.json b/x-pack/plugins/embeddable_enhanced/tsconfig.json index c4086ef69251a..6a3face73f9ca 100644 --- a/x-pack/plugins/embeddable_enhanced/tsconfig.json +++ b/x-pack/plugins/embeddable_enhanced/tsconfig.json @@ -1,18 +1,22 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions_enhanced/tsconfig.json" }, + "@kbn/core", + "@kbn/embeddable-plugin", + "@kbn/ui-actions-plugin", + "@kbn/ui-actions-enhanced-plugin", + "@kbn/i18n", + "@kbn/kibana-utils-plugin", + "@kbn/data-plugin", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/encrypted_saved_objects/tsconfig.json b/x-pack/plugins/encrypted_saved_objects/tsconfig.json index a09f47180d4f7..4359bebb24833 100644 --- a/x-pack/plugins/encrypted_saved_objects/tsconfig.json +++ b/x-pack/plugins/encrypted_saved_objects/tsconfig.json @@ -1,12 +1,18 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["server/**/*"], "kbn_references": [ - { "path": "../security/tsconfig.json" }, + "@kbn/security-plugin", + "@kbn/config-schema", + "@kbn/core", + "@kbn/utility-types", + "@kbn/core-saved-objects-server", + "@kbn/core-saved-objects-common", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/enterprise_search/jest.config.js b/x-pack/plugins/enterprise_search/common/jest.config.js similarity index 91% rename from x-pack/plugins/enterprise_search/jest.config.js rename to x-pack/plugins/enterprise_search/common/jest.config.js index b5e6105ff41f2..b43a5fefdc920 100644 --- a/x-pack/plugins/enterprise_search/jest.config.js +++ b/x-pack/plugins/enterprise_search/common/jest.config.js @@ -7,8 +7,8 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../..', - roots: ['/x-pack/plugins/enterprise_search'], + rootDir: '../../../..', + roots: ['/x-pack/plugins/enterprise_search/common'], collectCoverage: true, coverageReporters: ['text', 'html'], collectCoverageFrom: [ diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/cypress.config.js b/x-pack/plugins/enterprise_search/public/applications/app_search/cypress.config.js index b625b3051f15a..a59ca6654442e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/cypress.config.js +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/cypress.config.js @@ -5,16 +5,12 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; -// eslint-disable-next-line import/no-default-export -export default defineConfig({ +export default defineCypressConfig({ defaultCommandTimeout: 120000, e2e: { baseUrl: 'http://localhost:5601', - // eslint-disable-next-line no-unused-vars - setupNodeEvents(on, config) {}, supportFile: './cypress/support/commands.ts', }, env: { diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/cypress/tsconfig.json b/x-pack/plugins/enterprise_search/public/applications/app_search/cypress/tsconfig.json index e2c99c65d590e..249475520f49a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/cypress/tsconfig.json +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/cypress/tsconfig.json @@ -1,6 +1,18 @@ { "extends": "../../shared/cypress/tsconfig.json", - "kbn_references": [{ "path": "../../shared/cypress/tsconfig.json" }], - "compilerOptions": { "outDir": "../../../../target/cypress/types/app_search" }, - "include": ["./**/*"] + "compilerOptions": { "outDir": "target/types" }, + "include": ["./**/*"], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + { "path": "../../shared/cypress/tsconfig.json" }, + // cypress projects that are nested inside of other ts project use code + // from the parent ts project in ways that can't be auto-matically deteceted + // at this time so we have to force the inclusion of this reference + { + "path": "../../../../tsconfig.json", + "force": true + }, + ], } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress.config.js b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress.config.js index a6d98df28c413..2cfee9aa082a5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress.config.js +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress.config.js @@ -5,16 +5,12 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; -// eslint-disable-next-line import/no-default-export -export default defineConfig({ +export default defineCypressConfig({ defaultCommandTimeout: 120000, e2e: { baseUrl: 'http://localhost:5601', - // eslint-disable-next-line no-unused-vars - setupNodeEvents(on, config) {}, supportFile: false, }, env: { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress/tsconfig.json b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress/tsconfig.json index 9ea4c931ce39e..249475520f49a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress/tsconfig.json +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress/tsconfig.json @@ -1,6 +1,18 @@ { "extends": "../../shared/cypress/tsconfig.json", - "kbn_references": [{ "path": "../../shared/cypress/tsconfig.json" }], - "compilerOptions": { "outDir": "../../../../target/cypress/types/enterprise_search" }, - "include": ["./**/*"] + "compilerOptions": { "outDir": "target/types" }, + "include": ["./**/*"], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + { "path": "../../shared/cypress/tsconfig.json" }, + // cypress projects that are nested inside of other ts project use code + // from the parent ts project in ways that can't be auto-matically deteceted + // at this time so we have to force the inclusion of this reference + { + "path": "../../../../tsconfig.json", + "force": true + }, + ], } diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cypress/commands.ts b/x-pack/plugins/enterprise_search/public/applications/shared/cypress/commands.ts index c5773ec5f44b9..e8ca0d0833bb8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/cypress/commands.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cypress/commands.ts @@ -39,9 +39,7 @@ export const login = ({ */ // eslint complains this should be in `dependencies` and not `devDependencies`, but these tests should only run on dev -// eslint-disable-next-line import/no-extraneous-dependencies import 'cypress-axe'; -// eslint-disable-next-line import/no-extraneous-dependencies import { AXE_CONFIG, AXE_OPTIONS } from '@kbn/axe-config'; const axeConfig = { diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cypress/tsconfig.json b/x-pack/plugins/enterprise_search/public/applications/shared/cypress/tsconfig.json index f36cb624e03ec..72efbd5408ad5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/cypress/tsconfig.json +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cypress/tsconfig.json @@ -1,9 +1,14 @@ { "extends": "../../../../../../../tsconfig.base.json", - "kbn_references": [{ "path": "../../../../../../../test/tsconfig.json" }], "include": ["./**/*"], "compilerOptions": { - "outDir": "../../../../target/cypress/types/shared", + "outDir": "target/types", "types": ["cypress", "cypress-axe", "node"] - } + }, + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/axe-config", + ], } diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress.config.js b/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress.config.js index b625b3051f15a..a59ca6654442e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress.config.js +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress.config.js @@ -5,16 +5,12 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; -// eslint-disable-next-line import/no-default-export -export default defineConfig({ +export default defineCypressConfig({ defaultCommandTimeout: 120000, e2e: { baseUrl: 'http://localhost:5601', - // eslint-disable-next-line no-unused-vars - setupNodeEvents(on, config) {}, supportFile: './cypress/support/commands.ts', }, env: { diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress/tsconfig.json b/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress/tsconfig.json index 296f97269fb0c..249475520f49a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress/tsconfig.json +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress/tsconfig.json @@ -1,6 +1,18 @@ { "extends": "../../shared/cypress/tsconfig.json", - "kbn_references": [{ "path": "../../shared/cypress/tsconfig.json" }], - "compilerOptions": { "outDir": "../../../../target/cypress/types/workplace_search" }, - "include": ["./**/*"] + "compilerOptions": { "outDir": "target/types" }, + "include": ["./**/*"], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + { "path": "../../shared/cypress/tsconfig.json" }, + // cypress projects that are nested inside of other ts project use code + // from the parent ts project in ways that can't be auto-matically deteceted + // at this time so we have to force the inclusion of this reference + { + "path": "../../../../tsconfig.json", + "force": true + }, + ], } diff --git a/x-pack/plugins/enterprise_search/public/jest.config.js b/x-pack/plugins/enterprise_search/public/jest.config.js new file mode 100644 index 0000000000000..c527b85707b42 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/jest.config.js @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/plugins/enterprise_search/public'], + collectCoverage: true, + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/plugins/enterprise_search/**/*.{ts,tsx}', + '!/x-pack/plugins/enterprise_search/public/*.ts', + '!/x-pack/plugins/enterprise_search/server/*.ts', + '!/x-pack/plugins/enterprise_search/public/applications/test_helpers/**/*.{ts,tsx}', + ], + coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/enterprise_search', + modulePathIgnorePatterns: [ + '/x-pack/plugins/enterprise_search/public/applications/app_search/cypress', + '/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress', + ], +}; diff --git a/x-pack/plugins/enterprise_search/server/jest.config.js b/x-pack/plugins/enterprise_search/server/jest.config.js new file mode 100644 index 0000000000000..c255b9c5a0ce6 --- /dev/null +++ b/x-pack/plugins/enterprise_search/server/jest.config.js @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/plugins/enterprise_search/server'], + collectCoverage: true, + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/plugins/enterprise_search/**/*.{ts,tsx}', + '!/x-pack/plugins/enterprise_search/public/*.ts', + '!/x-pack/plugins/enterprise_search/server/*.ts', + '!/x-pack/plugins/enterprise_search/public/applications/test_helpers/**/*.{ts,tsx}', + ], + coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/enterprise_search', + modulePathIgnorePatterns: [ + '/x-pack/plugins/enterprise_search/public/applications/app_search/cypress', + '/x-pack/plugins/enterprise_search/public/applications/workplace_search/cypress', + ], +}; diff --git a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.test.ts b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.test.ts index 3618892aa8892..5826fbca88b5c 100644 --- a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.test.ts @@ -13,7 +13,7 @@ import fetch from 'node-fetch'; const { Response } = jest.requireActual('node-fetch'); -jest.mock('@kbn/utils', () => ({ +jest.mock('@kbn/repo-info', () => ({ kibanaPackageJson: { version: '1.0.0' }, })); diff --git a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts index c6c0383b4bb98..3b9a37b32d1d7 100644 --- a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts +++ b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts @@ -9,7 +9,7 @@ import AbortController from 'abort-controller'; import fetch from 'node-fetch'; import { KibanaRequest, Logger } from '@kbn/core/server'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { ConfigType } from '..'; import { isVersionMismatch } from '../../common/is_version_mismatch'; diff --git a/x-pack/plugins/enterprise_search/tsconfig.json b/x-pack/plugins/enterprise_search/tsconfig.json index e94487d939500..495810e2e2f40 100644 --- a/x-pack/plugins/enterprise_search/tsconfig.json +++ b/x-pack/plugins/enterprise_search/tsconfig.json @@ -1,11 +1,12 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, - "exclude": ["public/applications/**/cypress/**/*"], + "exclude": [ + "public/applications/**/cypress/**/*", + "target/**/*", + ], "include": [ "common/**/*", "public/**/*", @@ -13,18 +14,37 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/charts/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../cloud_integrations/cloud_chat/tsconfig.json" }, - { "path": "../infra/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, + "@kbn/core", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/usage-collection-plugin", + "@kbn/cloud-plugin", + "@kbn/cloud-chat-plugin", + "@kbn/infra-plugin", + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/security-plugin", + "@kbn/spaces-plugin", + "@kbn/i18n", + "@kbn/ml-plugin", + "@kbn/guided-onboarding-plugin", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/core-ui-settings-browser-mocks", + "@kbn/es-ui-shared-plugin", + "@kbn/shared-ux-page-kibana-template", + "@kbn/ui-theme", + "@kbn/config-schema", + "@kbn/custom-integrations-plugin", + "@kbn/core-logging-server-mocks", + "@kbn/repo-info", + "@kbn/core-elasticsearch-server", + "@kbn/core-http-server", + "@kbn/core-saved-objects-server", + "@kbn/data-views-plugin", + "@kbn/cypress-config", + "@kbn/discover-plugin", ] } diff --git a/x-pack/plugins/event_log/tsconfig.json b/x-pack/plugins/event_log/tsconfig.json index 2695ae967fb74..4f69e9cce2886 100644 --- a/x-pack/plugins/event_log/tsconfig.json +++ b/x-pack/plugins/event_log/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "server/**/*", @@ -14,7 +12,16 @@ "common/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" } + "@kbn/core", + "@kbn/spaces-plugin", + "@kbn/es-query", + "@kbn/config-schema", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/std", + "@kbn/safer-lodash-set", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/features/tsconfig.json b/x-pack/plugins/features/tsconfig.json index d658362136865..e32008f52edd0 100644 --- a/x-pack/plugins/features/tsconfig.json +++ b/x-pack/plugins/features/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,7 +9,14 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, + "@kbn/core", + "@kbn/licensing-plugin", + "@kbn/utility-types", + "@kbn/std", + "@kbn/config-schema", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/file_upload/tsconfig.json b/x-pack/plugins/file_upload/tsconfig.json index a8cdfe45ef59f..82943345dc959 100644 --- a/x-pack/plugins/file_upload/tsconfig.json +++ b/x-pack/plugins/file_upload/tsconfig.json @@ -1,16 +1,21 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/usage-collection-plugin", + "@kbn/security-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + "@kbn/ml-is-populated-object", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/fleet/cypress.config.ts b/x-pack/plugins/fleet/cypress.config.ts index e2d5ffd3ffdac..f4002d16c7414 100644 --- a/x-pack/plugins/fleet/cypress.config.ts +++ b/x-pack/plugins/fleet/cypress.config.ts @@ -5,11 +5,9 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; -// eslint-disable-next-line import/no-default-export -export default defineConfig({ +export default defineCypressConfig({ defaultCommandTimeout: 60000, requestTimeout: 60000, responseTimeout: 60000, diff --git a/x-pack/plugins/fleet/cypress/plugins/index.ts b/x-pack/plugins/fleet/cypress/plugins/index.ts index 9fce88b6cd689..17825ba12a2bb 100644 --- a/x-pack/plugins/fleet/cypress/plugins/index.ts +++ b/x-pack/plugins/fleet/cypress/plugins/index.ts @@ -5,7 +5,6 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies import { createEsClientForTesting } from '@kbn/test'; const plugin: Cypress.PluginConfig = (on, config) => { diff --git a/x-pack/plugins/fleet/cypress/support/commands.ts b/x-pack/plugins/fleet/cypress/support/commands.ts index 204c48f7597ce..73eca72607db4 100644 --- a/x-pack/plugins/fleet/cypress/support/commands.ts +++ b/x-pack/plugins/fleet/cypress/support/commands.ts @@ -15,9 +15,7 @@ // https://on.cypress.io/custom-commands // *********************************************** // -/* eslint-disable-next-line import/no-extraneous-dependencies */ import 'cypress-axe'; -/* eslint-disable-next-line import/no-extraneous-dependencies */ import { AXE_CONFIG, AXE_OPTIONS } from '@kbn/axe-config'; const axeConfig = { diff --git a/x-pack/plugins/fleet/cypress/tsconfig.json b/x-pack/plugins/fleet/cypress/tsconfig.json index aba041b4e17b8..1f9f75590279f 100644 --- a/x-pack/plugins/fleet/cypress/tsconfig.json +++ b/x-pack/plugins/fleet/cypress/tsconfig.json @@ -1,20 +1,31 @@ { - "extends": "../../../../tsconfig.base.json", - "include": [ - "**/*", - "../cypress.config.ts" + "extends": "../../../../tsconfig.base.json", + "include": [ + "**/*", + "../cypress.config.ts" + ], + "exclude": [ + "target/**/*" + ], + "compilerOptions": { + "outDir": "target/types", + "types": [ + "cypress", + "node", + "cypress-real-events" ], - "exclude": [ - "target/**/*" - ], - "compilerOptions": { - "outDir": "target/types", - "types": [ - "cypress", - "node", - "cypress-real-events" - ], - "resolveJsonModule": true, - "target": "ES2019", - }, - } + "resolveJsonModule": true, + }, + "kbn_references": [ + "@kbn/test", + "@kbn/axe-config", + "@kbn/cypress-config", + // cypress projects that are nested inside of other ts project use code + // from the parent ts project in ways that can't be auto-matically deteceted + // at this time so we have to force the inclusion of this reference + { + "path": "../tsconfig.json", + "force": true + } + ] +} diff --git a/x-pack/plugins/fleet/scripts/get_all_packages/get_all_packages.ts b/x-pack/plugins/fleet/scripts/get_all_packages/get_all_packages.ts index 218ddb751dbf2..b29709190f15d 100644 --- a/x-pack/plugins/fleet/scripts/get_all_packages/get_all_packages.ts +++ b/x-pack/plugins/fleet/scripts/get_all_packages/get_all_packages.ts @@ -6,7 +6,7 @@ */ import fetch from 'node-fetch'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; import { chunk } from 'lodash'; diff --git a/x-pack/plugins/fleet/scripts/install_all_packages/install_all_packages.ts b/x-pack/plugins/fleet/scripts/install_all_packages/install_all_packages.ts index e38f08867338b..3ff907ceff761 100644 --- a/x-pack/plugins/fleet/scripts/install_all_packages/install_all_packages.ts +++ b/x-pack/plugins/fleet/scripts/install_all_packages/install_all_packages.ts @@ -6,7 +6,7 @@ */ import fetch from 'node-fetch'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; import yargs from 'yargs'; diff --git a/x-pack/plugins/fleet/server/integration_tests/validate_bundled_packages.test.ts b/x-pack/plugins/fleet/server/integration_tests/validate_bundled_packages.test.ts index f43b1699eab10..9c378773c41c8 100644 --- a/x-pack/plugins/fleet/server/integration_tests/validate_bundled_packages.test.ts +++ b/x-pack/plugins/fleet/server/integration_tests/validate_bundled_packages.test.ts @@ -9,7 +9,7 @@ import path from 'path'; import fs from 'fs/promises'; import JSON5 from 'json5'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import * as Registry from '../services/epm/registry'; import { generatePackageInfoFromArchiveBuffer } from '../services/epm/archive'; diff --git a/x-pack/plugins/fleet/server/routes/agent/handlers.ts b/x-pack/plugins/fleet/server/routes/agent/handlers.ts index 2244f312fc050..2177fcdc252f6 100644 --- a/x-pack/plugins/fleet/server/routes/agent/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent/handlers.ts @@ -8,7 +8,7 @@ import { readFile } from 'fs/promises'; import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import { uniq } from 'lodash'; import semverGte from 'semver/functions/gte'; import semverGt from 'semver/functions/gt'; diff --git a/x-pack/plugins/fleet/server/services/app_context.ts b/x-pack/plugins/fleet/server/services/app_context.ts index adcee89605274..caf3991431c21 100644 --- a/x-pack/plugins/fleet/server/services/app_context.ts +++ b/x-pack/plugins/fleet/server/services/app_context.ts @@ -7,7 +7,7 @@ import type { Observable } from 'rxjs'; import { BehaviorSubject } from 'rxjs'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import type { ElasticsearchClient, SavedObjectsServiceStart, diff --git a/x-pack/plugins/fleet/tsconfig.json b/x-pack/plugins/fleet/tsconfig.json index 901a746392ab5..db294662d2407 100644 --- a/x-pack/plugins/fleet/tsconfig.json +++ b/x-pack/plugins/fleet/tsconfig.json @@ -1,11 +1,12 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, - "exclude": ["cypress.config.ts"], + "exclude": [ + "cypress.config.ts", + "target/**/*", + ], "include": [ // add all the folders containing files to be compiled ".storybook/**/*", @@ -19,30 +20,79 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", { "path": "../../../src/setup_node_env/tsconfig.json" }, // add references to other TypeScript projects the plugin depends on // requiredPlugins from ./kibana.json - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../encrypted_saved_objects/tsconfig.json" }, - { "path": "../../../src/plugins/guided_onboarding/tsconfig.json" }, - { "path": "../../../src/plugins/files/tsconfig.json"}, + "@kbn/licensing-plugin", + "@kbn/data-plugin", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/guided-onboarding-plugin", + "@kbn/files-plugin", // optionalPlugins from ./kibana.json - { "path": "../security/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, + "@kbn/security-plugin", + "@kbn/features-plugin", + "@kbn/cloud-plugin", + "@kbn/usage-collection-plugin", + "@kbn/home-plugin", // requiredBundles from ./kibana.json - { "path": "../cloud_integrations/cloud_chat/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../infra/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" } + "@kbn/cloud-chat-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/infra-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/unified-search-plugin", + "@kbn/storybook", + "@kbn/share-plugin", + "@kbn/i18n-react", + "@kbn/custom-integrations-plugin", + + // packages + "@kbn/core-application-common", + "@kbn/core-capabilities-common", + "@kbn/i18n", + "@kbn/std", + "@kbn/es-types", + "@kbn/navigation-plugin", + "@kbn/spaces-plugin", + "@kbn/discover-plugin", + "@kbn/data-views-plugin", + "@kbn/global-search-plugin", + "@kbn/utility-types", + "@kbn/utility-types-jest", + "@kbn/test-jest-helpers", + "@kbn/es-query", + "@kbn/ui-theme", + "@kbn/rison", + "@kbn/config-schema", + "@kbn/telemetry-plugin", + "@kbn/task-manager-plugin", + "@kbn/saved-objects-tagging-plugin", + "@kbn/core-saved-objects-server", + "@kbn/core-elasticsearch-server", + "@kbn/es-errors", + "@kbn/core-test-helpers-kbn-server", + "@kbn/repo-info", + "@kbn/logging-mocks", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/test", + "@kbn/stdio-dev-helpers", + "@kbn/tooling-log", + "@kbn/apm-utils", + "@kbn/core-saved-objects-common", + "@kbn/core-http-server", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/core-saved-objects-api-server", + "@kbn/logging", + "@kbn/analytics-client", + "@kbn/core-saved-objects-utils-server", + "@kbn/core-logging-server-mocks", + "@kbn/ml-is-populated-object", + "@kbn/utils", + "@kbn/core-http-request-handler-context-server", ] } diff --git a/x-pack/plugins/global_search/tsconfig.json b/x-pack/plugins/global_search/tsconfig.json index 8a5a197e6b72f..0c63083590437 100644 --- a/x-pack/plugins/global_search/tsconfig.json +++ b/x-pack/plugins/global_search/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", @@ -12,8 +10,16 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" } + "@kbn/core", + "@kbn/licensing-plugin", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/config-schema", + "@kbn/utility-types", + "@kbn/core-test-helpers-test-utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/global_search_bar/tsconfig.json b/x-pack/plugins/global_search_bar/tsconfig.json index a3fb00c15aea0..e8cc744d9a0df 100644 --- a/x-pack/plugins/global_search_bar/tsconfig.json +++ b/x-pack/plugins/global_search_bar/tsconfig.json @@ -1,16 +1,21 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../global_search/tsconfig.json" }, - { "path": "../saved_objects_tagging/tsconfig.json" }, - { "path": "../security/tsconfig.json" } + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/global-search-plugin", + "@kbn/saved-objects-tagging-plugin", + "@kbn/analytics", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + "@kbn/i18n", + "@kbn/saved-objects-tagging-oss-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/global_search_providers/tsconfig.json b/x-pack/plugins/global_search_providers/tsconfig.json index 5787569cddceb..45c5e2865f500 100644 --- a/x-pack/plugins/global_search_providers/tsconfig.json +++ b/x-pack/plugins/global_search_providers/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", @@ -11,7 +9,10 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../global_search/tsconfig.json" } + "@kbn/core", + "@kbn/global-search-plugin" + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/graph/tsconfig.json b/x-pack/plugins/graph/tsconfig.json index 8a17949e7981d..182ee68ad0479 100644 --- a/x-pack/plugins/graph/tsconfig.json +++ b/x-pack/plugins/graph/tsconfig.json @@ -2,9 +2,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", // there is still a decent amount of JS in this plugin and we are taking // advantage of the fact that TS doesn't know the types of that code and // gives us `any`. Once that code is converted to .ts we can remove this @@ -19,16 +17,32 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../features/tsconfig.json"}, - { "path": "../../../src/plugins/data/tsconfig.json"}, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../src/plugins/saved_objects/tsconfig.json"}, - { "path": "../../../src/plugins/home/tsconfig.json"}, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/licensing-plugin", + "@kbn/features-plugin", + "@kbn/data-plugin", + "@kbn/navigation-plugin", + "@kbn/saved-objects-plugin", + "@kbn/home-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/spaces-plugin", + "@kbn/unified-search-plugin", + "@kbn/i18n", + "@kbn/config-schema", + "@kbn/i18n-react", + "@kbn/inspector-plugin", + "@kbn/content-management-table-list", + "@kbn/test-jest-helpers", + "@kbn/data-views-plugin", + "@kbn/es-query", + "@kbn/core-http-browser", + "@kbn/rison", + "@kbn/std", + "@kbn/utility-types", + "@kbn/react-field", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/grokdebugger/tsconfig.json b/x-pack/plugins/grokdebugger/tsconfig.json index da551988a7e60..ad54862881785 100644 --- a/x-pack/plugins/grokdebugger/tsconfig.json +++ b/x-pack/plugins/grokdebugger/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,11 +10,16 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/dev_tools/tsconfig.json"}, - { "path": "../../../src/plugins/home/tsconfig.json"}, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" } + "@kbn/core", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/licensing-plugin", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/index_lifecycle_management/tsconfig.json b/x-pack/plugins/index_lifecycle_management/tsconfig.json index 97d01cbe8a45b..75a4d7e689501 100644 --- a/x-pack/plugins/index_lifecycle_management/tsconfig.json +++ b/x-pack/plugins/index_lifecycle_management/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "__jest__/**/*", @@ -14,18 +12,30 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", // required plugins - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, + "@kbn/licensing-plugin", + "@kbn/management-plugin", + "@kbn/features-plugin", + "@kbn/share-plugin", // optional plugins - { "path": "../cloud/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../index_management/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, + "@kbn/cloud-plugin", + "@kbn/usage-collection-plugin", + "@kbn/index-management-plugin", + "@kbn/home-plugin", // required bundles - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, + "@kbn/kibana-react-plugin", + "@kbn/test-jest-helpers", + "@kbn/core-http-browser-mocks", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/analytics", + "@kbn/es-ui-shared-plugin", + "@kbn/i18n-react", + "@kbn/core-http-browser", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/index_management/tsconfig.json b/x-pack/plugins/index_management/tsconfig.json index cf7a457358cb8..4dddd38cab295 100644 --- a/x-pack/plugins/index_management/tsconfig.json +++ b/x-pack/plugins/index_management/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "__jest__/**/*", @@ -14,16 +12,26 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../runtime_fields/tsconfig.json" } + "@kbn/core", + "@kbn/management-plugin", + "@kbn/share-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/security-plugin", + "@kbn/runtime-fields-plugin", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/analytics", + "@kbn/utility-types", + "@kbn/i18n-react", + "@kbn/core-doc-links-browser-mocks", + "@kbn/core-execution-context-browser-mocks", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/infra/tsconfig.json b/x-pack/plugins/infra/tsconfig.json index 238681826ffc4..328cbb5bdb6d0 100644 --- a/x-pack/plugins/infra/tsconfig.json +++ b/x-pack/plugins/infra/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true + "outDir": "target/types", }, "include": [ "../../../typings/**/*", @@ -13,22 +11,50 @@ "types/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/vis_types/timeseries/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../license_management/tsconfig.json" }, - { "path": "../ml/tsconfig.json" }, - { "path": "../observability/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../triggers_actions_ui/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/embeddable-plugin", + "@kbn/home-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/usage-collection-plugin", + "@kbn/vis-type-timeseries-plugin", + "@kbn/alerting-plugin", + "@kbn/features-plugin", + "@kbn/license-management-plugin", + "@kbn/ml-plugin", + "@kbn/observability-plugin", + "@kbn/spaces-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/unified-search-plugin", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/std", + "@kbn/io-ts-utils", + "@kbn/rule-registry-plugin", + "@kbn/rule-data-utils", + "@kbn/rison", + "@kbn/core-http-browser", + "@kbn/share-plugin", + "@kbn/i18n-react", + "@kbn/es-query", + "@kbn/datemath", + "@kbn/core-notifications-browser", + "@kbn/shared-ux-page-kibana-template", + "@kbn/safer-lodash-set", + "@kbn/test-jest-helpers", + "@kbn/test-subj-selector", + "@kbn/controls-plugin", + "@kbn/securitysolution-io-ts-types", + "@kbn/config-schema", + "@kbn/es-ui-shared-plugin", + "@kbn/logging", + "@kbn/logging-mocks", + "@kbn/field-types", + "@kbn/es-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/ingest_pipelines/tsconfig.json b/x-pack/plugins/ingest_pipelines/tsconfig.json index 27d9c33354bae..0d7e754ad292a 100644 --- a/x-pack/plugins/ingest_pipelines/tsconfig.json +++ b/x-pack/plugins/ingest_pipelines/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -13,15 +11,25 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../file_upload/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json"}, - { "path": "../../../src/plugins/kibana_react/tsconfig.json"}, - { "path": "../../../src/plugins/management/tsconfig.json"}, - { "path": "../../../src/plugins/share/tsconfig.json"}, - { "path": "../../../src/plugins/usage_collection/tsconfig.json"}, + "@kbn/core", + "@kbn/licensing-plugin", + "@kbn/features-plugin", + "@kbn/security-plugin", + "@kbn/file-upload-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/kibana-react-plugin", + "@kbn/management-plugin", + "@kbn/share-plugin", + "@kbn/usage-collection-plugin", + "@kbn/utility-types", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/analytics", + "@kbn/monaco", + "@kbn/test-jest-helpers", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/kubernetes_security/tsconfig.json b/x-pack/plugins/kubernetes_security/tsconfig.json index 3358602dde0bb..8460942e5ac3f 100644 --- a/x-pack/plugins/kubernetes_security/tsconfig.json +++ b/x-pack/plugins/kubernetes_security/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ // add all the folders containg files to be compiled @@ -17,27 +15,26 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", // add references to other TypeScript projects the plugin depends on // requiredPlugins from ./kibana.json - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../encrypted_saved_objects/tsconfig.json" }, + "@kbn/data-plugin", // optionalPlugins from ./kibana.json - { "path": "../security/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, // requiredBundles from ./kibana.json - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../infra/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../rule_registry/tsconfig.json" }, - { "path": "../session_view/tsconfig.json" } + "@kbn/kibana-react-plugin", + "@kbn/rule-registry-plugin", + "@kbn/session-view-plugin", + "@kbn/i18n", + "@kbn/timelines-plugin", + "@kbn/es-query", + "@kbn/ui-theme", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/lens/tsconfig.json b/x-pack/plugins/lens/tsconfig.json index 0cb74b2b1a87a..f253f70b02c9d 100644 --- a/x-pack/plugins/lens/tsconfig.json +++ b/x-pack/plugins/lens/tsconfig.json @@ -1,45 +1,68 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["*.ts", "common/**/*", "public/**/*", "server/**/*", "../../../typings/**/*"], "kbn_references": [ - { "path": "../spaces/tsconfig.json" }, - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../task_manager/tsconfig.json" }, - { "path": "../global_search/tsconfig.json" }, - { "path": "../saved_objects_tagging/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../../src/plugins/data_view_field_editor/tsconfig.json" }, - { "path": "../../../src/plugins/charts/tsconfig.json" }, - { "path": "../../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../src/plugins/url_forwarding/tsconfig.json" }, - { "path": "../../../src/plugins/visualizations/tsconfig.json" }, - { "path": "../../../src/plugins/dashboard/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions_enhanced/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/saved_objects/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json"}, - { "path": "../../../src/plugins/presentation_util/tsconfig.json"}, - { "path": "../../../src/plugins/field_formats/tsconfig.json"}, - { "path": "../../../src/plugins/chart_expressions/expression_partition_vis/tsconfig.json"}, - { "path": "../../../src/plugins/chart_expressions/expression_heatmap/tsconfig.json"}, - { "path": "../../../src/plugins/chart_expressions/expression_gauge/tsconfig.json"}, - { "path": "../../../src/plugins/chart_expressions/expression_legacy_metric/tsconfig.json"}, - { "path": "../../../src/plugins/chart_expressions/expression_metric/tsconfig.json"}, - { "path": "../../../src/plugins/data_view_editor/tsconfig.json"}, - { "path": "../../../src/plugins/event_annotation/tsconfig.json"}, - { "path": "../../../src/plugins/chart_expressions/expression_xy/tsconfig.json"}, - { "path": "../../../src/plugins/unified_search/tsconfig.json" }, - { "path": "../../../src/plugins/unified_field_list/tsconfig.json" } + "@kbn/spaces-plugin", + "@kbn/core", + "@kbn/task-manager-plugin", + "@kbn/global-search-plugin", + "@kbn/saved-objects-tagging-plugin", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + "@kbn/data-view-field-editor-plugin", + "@kbn/charts-plugin", + "@kbn/expressions-plugin", + "@kbn/navigation-plugin", + "@kbn/url-forwarding-plugin", + "@kbn/visualizations-plugin", + "@kbn/dashboard-plugin", + "@kbn/ui-actions-plugin", + "@kbn/ui-actions-enhanced-plugin", + "@kbn/share-plugin", + "@kbn/usage-collection-plugin", + "@kbn/saved-objects-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/embeddable-plugin", + "@kbn/presentation-util-plugin", + "@kbn/field-formats-plugin", + "@kbn/expression-partition-vis-plugin", + "@kbn/expression-heatmap-plugin", + "@kbn/expression-gauge-plugin", + "@kbn/expression-legacy-metric-vis-plugin", + "@kbn/expression-metric-vis-plugin", + "@kbn/data-view-editor-plugin", + "@kbn/event-annotation-plugin", + "@kbn/expression-xy-plugin", + "@kbn/unified-search-plugin", + "@kbn/unified-field-list-plugin", + "@kbn/rison", + "@kbn/i18n", + "@kbn/field-types", + "@kbn/utility-types", + "@kbn/es-query", + "@kbn/coloring", + "@kbn/inspector-plugin", + "@kbn/core-doc-links-browser", + "@kbn/interpreter", + "@kbn/i18n-react", + "@kbn/shared-ux-page-analytics-no-data", + "@kbn/test-jest-helpers", + "@kbn/analytics", + "@kbn/core-execution-context-common", + "@kbn/chart-icons", + "@kbn/react-field", + "@kbn/tinymath", + "@kbn/ui-theme", + "@kbn/shared-ux-link-redirect-app", + "@kbn/monaco", + "@kbn/language-documentation-popover", + "@kbn/core-saved-objects-common", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/license_api_guard/tsconfig.json b/x-pack/plugins/license_api_guard/tsconfig.json index a3e855927b83f..e5c87114bd54d 100644 --- a/x-pack/plugins/license_api_guard/tsconfig.json +++ b/x-pack/plugins/license_api_guard/tsconfig.json @@ -1,15 +1,17 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "server/**/*" ], "kbn_references": [ - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/core/tsconfig.json" } + "@kbn/licensing-plugin", + "@kbn/core", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/license_management/tsconfig.json b/x-pack/plugins/license_management/tsconfig.json index 2cca1d4daff61..e53f1324077da 100644 --- a/x-pack/plugins/license_management/tsconfig.json +++ b/x-pack/plugins/license_management/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", @@ -13,15 +11,21 @@ "__mocks__/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/telemetry_management_section/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../../../src/plugins/telemetry/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../licensing/tsconfig.json"}, - { "path": "../features/tsconfig.json"}, - { "path": "../security/tsconfig.json"}, + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/telemetry-management-section-plugin", + "@kbn/management-plugin", + "@kbn/telemetry-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/licensing-plugin", + "@kbn/features-plugin", + "@kbn/security-plugin", + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/config-schema", + "@kbn/test-jest-helpers", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/licensing/tsconfig.json b/x-pack/plugins/licensing/tsconfig.json index 0a86901065804..0abd1517b2d3a 100644 --- a/x-pack/plugins/licensing/tsconfig.json +++ b/x-pack/plugins/licensing/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true, }, "include": [ @@ -12,7 +10,16 @@ "common/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" } + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/i18n-react", + "@kbn/utility-types", + "@kbn/config-schema", + "@kbn/std", + "@kbn/i18n", + "@kbn/analytics-client", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/lists/tsconfig.json b/x-pack/plugins/lists/tsconfig.json index 3da969b34db3d..e6fb0a15e7586 100644 --- a/x-pack/plugins/lists/tsconfig.json +++ b/x-pack/plugins/lists/tsconfig.json @@ -2,9 +2,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -14,9 +12,34 @@ "server/**/*.json", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../security/tsconfig.json"}, - { "path": "../../../src/plugins/unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/spaces-plugin", + "@kbn/security-plugin", + "@kbn/unified-search-plugin", + "@kbn/securitysolution-io-ts-list-types", + "@kbn/securitysolution-list-constants", + "@kbn/securitysolution-list-hooks", + "@kbn/securitysolution-list-api", + "@kbn/kibana-react-plugin", + "@kbn/i18n", + "@kbn/data-plugin", + "@kbn/securitysolution-list-utils", + "@kbn/securitysolution-utils", + "@kbn/es-query", + "@kbn/i18n-react", + "@kbn/securitysolution-autocomplete", + "@kbn/config-schema", + "@kbn/securitysolution-io-ts-utils", + "@kbn/core-http-server", + "@kbn/securitysolution-es-utils", + "@kbn/securitysolution-io-ts-types", + "@kbn/std", + "@kbn/utils", + "@kbn/logging-mocks", + "@kbn/utility-types", + "@kbn/core-elasticsearch-client-server-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/logstash/tsconfig.json b/x-pack/plugins/logstash/tsconfig.json index 96ffd953c3efd..560458be71c02 100644 --- a/x-pack/plugins/logstash/tsconfig.json +++ b/x-pack/plugins/logstash/tsconfig.json @@ -2,9 +2,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,13 +10,21 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json"}, - { "path": "../../../src/plugins/management/tsconfig.json"}, + "@kbn/core", + "@kbn/home-plugin", + "@kbn/management-plugin", - { "path": "../features/tsconfig.json" }, - { "path": "../licensing/tsconfig.json"}, - { "path": "../monitoring/tsconfig.json"}, - { "path": "../security/tsconfig.json"}, + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/security-plugin", + "@kbn/i18n", + "@kbn/kibana-react-plugin", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/es-ui-shared-plugin", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/maps/tsconfig.json b/x-pack/plugins/maps/tsconfig.json index 68c51855fe62e..e7ecc76396133 100644 --- a/x-pack/plugins/maps/tsconfig.json +++ b/x-pack/plugins/maps/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "allowJs": true }, "include": [ @@ -14,33 +12,60 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/maps_ems/tsconfig.json" }, - { "path": "../../../src/plugins/dashboard/tsconfig.json" }, - { "path": "../../../src/plugins/inspector/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../../src/plugins/visualizations/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/saved_objects/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/presentation_util/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/charts/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/screenshot_mode/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../lens/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../file_upload/tsconfig.json" }, - { "path": "../saved_objects_tagging/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/maps-ems-plugin", + "@kbn/dashboard-plugin", + "@kbn/inspector-plugin", + "@kbn/data-plugin", + "@kbn/ui-actions-plugin", + "@kbn/navigation-plugin", + "@kbn/expressions-plugin", + "@kbn/visualizations-plugin", + "@kbn/embeddable-plugin", + "@kbn/saved-objects-plugin", + "@kbn/share-plugin", + "@kbn/presentation-util-plugin", + "@kbn/home-plugin", + "@kbn/charts-plugin", + "@kbn/usage-collection-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/cloud-plugin", + "@kbn/features-plugin", + "@kbn/lens-plugin", + "@kbn/licensing-plugin", + "@kbn/file-upload-plugin", + "@kbn/saved-objects-tagging-plugin", + "@kbn/security-plugin", + "@kbn/spaces-plugin", + "@kbn/unified-search-plugin", + "@kbn/i18n", + "@kbn/rison", + "@kbn/es-query", + "@kbn/utility-types", + "@kbn/data-views-plugin", + "@kbn/std", + "@kbn/coloring", + "@kbn/field-formats-plugin", + "@kbn/shared-ux-button-exit-full-screen", + "@kbn/i18n-react", + "@kbn/content-management-table-list", + "@kbn/react-field", + "@kbn/analytics", + "@kbn/mapbox-gl", + "@kbn/core-execution-context-common", + "@kbn/chart-icons", + "@kbn/core-saved-objects-api-browser", + "@kbn/ui-theme", + "@kbn/monaco", + "@kbn/safer-lodash-set", + "@kbn/custom-integrations-plugin", + "@kbn/config-schema", + "@kbn/field-types", + "@kbn/controls-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/ml/server/routes/apidoc_scripts/schema_extractor.ts b/x-pack/plugins/ml/server/routes/apidoc_scripts/schema_extractor.ts index 41c31f82f76b0..0e1966aac3c45 100644 --- a/x-pack/plugins/ml/server/routes/apidoc_scripts/schema_extractor.ts +++ b/x-pack/plugins/ml/server/routes/apidoc_scripts/schema_extractor.ts @@ -6,7 +6,7 @@ */ import Path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; // eslint-disable-next-line import/no-extraneous-dependencies import * as ts from 'typescript'; diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json index 21897ae7ba4f4..145399120c08c 100644 --- a/x-pack/plugins/ml/tsconfig.json +++ b/x-pack/plugins/ml/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -16,21 +14,60 @@ "server/**/*.json" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/data_views/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../data_visualizer/tsconfig.json"}, - { "path": "../aiops/tsconfig.json"}, - { "path": "../license_management/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../maps/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../triggers_actions_ui/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" }, - { "path": "../cases/tsconfig.json" } + "@kbn/core", + "@kbn/embeddable-plugin", + "@kbn/data-views-plugin", + "@kbn/cloud-plugin", + "@kbn/features-plugin", + "@kbn/data-visualizer-plugin", + "@kbn/aiops-plugin", + "@kbn/license-management-plugin", + "@kbn/licensing-plugin", + "@kbn/maps-plugin", + "@kbn/security-plugin", + "@kbn/spaces-plugin", + "@kbn/alerting-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/unified-search-plugin", + "@kbn/cases-plugin", + "@kbn/i18n", + "@kbn/ml-is-populated-object", + "@kbn/data-plugin", + "@kbn/field-formats-plugin", + "@kbn/utility-types", + "@kbn/share-plugin", + "@kbn/datemath", + "@kbn/es-query", + "@kbn/ui-theme", + "@kbn/ml-string-hash", + "@kbn/core-http-browser", + "@kbn/home-plugin", + "@kbn/management-plugin", + "@kbn/lens-plugin", + "@kbn/ui-actions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/dashboard-plugin", + "@kbn/charts-plugin", + "@kbn/i18n-react", + "@kbn/ml-agg-utils", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/inspector-plugin", + "@kbn/es-types", + "@kbn/std", + "@kbn/test-jest-helpers", + "@kbn/analytics", + "@kbn/rison", + "@kbn/field-types", + "@kbn/es-ui-shared-plugin", + "@kbn/ace", + "@kbn/saved-objects-plugin", + "@kbn/actions-plugin", + "@kbn/task-manager-plugin", + "@kbn/config-schema", + "@kbn/repo-info", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/monitoring/tsconfig.json b/x-pack/plugins/monitoring/tsconfig.json index 1a5acddf592fc..8bd2ba0a75e32 100644 --- a/x-pack/plugins/monitoring/tsconfig.json +++ b/x-pack/plugins/monitoring/tsconfig.json @@ -1,29 +1,44 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*", "server/**/*.json"], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../actions/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../encrypted_saved_objects/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../infra/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../license_management/tsconfig.json" }, - { "path": "../observability/tsconfig.json" }, - { "path": "../telemetry_collection_xpack/tsconfig.json" }, - { "path": "../triggers_actions_ui/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/home-plugin", + "@kbn/navigation-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/usage-collection-plugin", + "@kbn/alerting-plugin", + "@kbn/actions-plugin", + "@kbn/cloud-plugin", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/features-plugin", + "@kbn/infra-plugin", + "@kbn/licensing-plugin", + "@kbn/observability-plugin", + "@kbn/telemetry-collection-xpack-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/expect", + "@kbn/i18n", + "@kbn/data-views-plugin", + "@kbn/es-query", + "@kbn/i18n-react", + "@kbn/test-jest-helpers", + "@kbn/safer-lodash-set", + "@kbn/core-http-browser", + "@kbn/unified-search-plugin", + "@kbn/config-schema", + "@kbn/rule-registry-plugin", + "@kbn/telemetry-collection-manager-plugin", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/logging-mocks", + "@kbn/io-ts-utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/monitoring_collection/tsconfig.json b/x-pack/plugins/monitoring_collection/tsconfig.json index 14ca8450fed91..7e27b29c24c9c 100644 --- a/x-pack/plugins/monitoring_collection/tsconfig.json +++ b/x-pack/plugins/monitoring_collection/tsconfig.json @@ -1,15 +1,20 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "server/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/config-schema", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/utility-types", + "@kbn/i18n", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/notifications/tsconfig.json b/x-pack/plugins/notifications/tsconfig.json index 6f2c186803b0c..a3230dfa321b1 100644 --- a/x-pack/plugins/notifications/tsconfig.json +++ b/x-pack/plugins/notifications/tsconfig.json @@ -1,10 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true + "outDir": "target/types", }, "include": [ "server/**/*", @@ -14,8 +11,15 @@ "common/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../actions/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" } + "@kbn/core", + "@kbn/actions-plugin", + "@kbn/licensing-plugin", + "@kbn/utility-types", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/logging-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/observability/e2e/tsconfig.json b/x-pack/plugins/observability/e2e/tsconfig.json index 0f9477b174d33..b6b7f0d2c6808 100644 --- a/x-pack/plugins/observability/e2e/tsconfig.json +++ b/x-pack/plugins/observability/e2e/tsconfig.json @@ -7,11 +7,7 @@ "types": [ "node"], }, "kbn_references": [ - { - "path": "../../apm/tsconfig.json", - }, - { - "path": "../tsconfig.json", - } + "@kbn/apm-plugin", + "@kbn/test", ] } diff --git a/x-pack/plugins/observability/tsconfig.json b/x-pack/plugins/observability/tsconfig.json index 4c052e8c9ecaf..fd944694986c7 100644 --- a/x-pack/plugins/observability/tsconfig.json +++ b/x-pack/plugins/observability/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -14,22 +12,62 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../cases/tsconfig.json" }, - { "path": "../lens/tsconfig.json" }, - { "path": "../rule_registry/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../timelines/tsconfig.json"}, - { "path": "../translations/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json"}, - { "path": "../../../src/plugins/guided_onboarding/tsconfig.json"}, - { "path": "../../../src/plugins/discover/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/usage-collection-plugin", + "@kbn/alerting-plugin", + "@kbn/licensing-plugin", + "@kbn/cases-plugin", + "@kbn/lens-plugin", + "@kbn/rule-registry-plugin", + "@kbn/spaces-plugin", + "@kbn/timelines-plugin", + "@kbn/translations-plugin", + "@kbn/unified-search-plugin", + "@kbn/guided-onboarding-plugin", + "@kbn/discover-plugin", + "@kbn/i18n", + "@kbn/rule-data-utils", + "@kbn/inspector-plugin", + "@kbn/data-views-plugin", + "@kbn/embeddable-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/security-plugin", + "@kbn/shared-ux-page-kibana-template", + "@kbn/navigation-plugin", + "@kbn/std", + "@kbn/i18n-react", + "@kbn/utility-types", + "@kbn/es-types", + "@kbn/rison", + "@kbn/analytics", + "@kbn/datemath", + "@kbn/core-ui-settings-browser", + "@kbn/es-query", + "@kbn/server-route-repository", + "@kbn/field-formats-plugin", + "@kbn/ui-theme", + "@kbn/coloring", + "@kbn/shared-ux-page-kibana-template-mocks", + "@kbn/test-jest-helpers", + "@kbn/ui-actions-plugin", + "@kbn/visualizations-plugin", + "@kbn/core-http-browser", + "@kbn/config-schema", + "@kbn/features-plugin", + "@kbn/core-saved-objects-server", + "@kbn/logging-mocks", + "@kbn/logging", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-utils-server", + "@kbn/core-saved-objects-common", + "@kbn/share-plugin", + "@kbn/core-notifications-browser", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/osquery/cypress.config.ts b/x-pack/plugins/osquery/cypress.config.ts index 862b4a916bead..f9d8297cfd335 100644 --- a/x-pack/plugins/osquery/cypress.config.ts +++ b/x-pack/plugins/osquery/cypress.config.ts @@ -5,11 +5,9 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; -// eslint-disable-next-line import/no-default-export -export default defineConfig({ +export default defineCypressConfig({ defaultCommandTimeout: 60000, execTimeout: 120000, pageLoadTimeout: 12000, @@ -35,8 +33,5 @@ export default defineConfig({ e2e: { baseUrl: 'http://localhost:5601', - setupNodeEvents(on, config) { - // implement node event listeners here - }, }, }); diff --git a/x-pack/plugins/osquery/cypress/plugins/index.ts b/x-pack/plugins/osquery/cypress/plugins/index.ts index f5d97d5cfd007..9bcc097256ca3 100644 --- a/x-pack/plugins/osquery/cypress/plugins/index.ts +++ b/x-pack/plugins/osquery/cypress/plugins/index.ts @@ -27,7 +27,7 @@ // @ts-ignore // eslint-disable-next-line @typescript-eslint/no-explicit-any module.exports = (on: any, config: any) => { - // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies + // eslint-disable-next-line @typescript-eslint/no-var-requires require('@cypress/code-coverage/task')(on, config); // `on` is used to hook into various events Cypress emits diff --git a/x-pack/plugins/osquery/cypress/support/e2e.ts b/x-pack/plugins/osquery/cypress/support/e2e.ts index 15e2b2516cbe4..da87e5919ce1d 100644 --- a/x-pack/plugins/osquery/cypress/support/e2e.ts +++ b/x-pack/plugins/osquery/cypress/support/e2e.ts @@ -25,7 +25,6 @@ // force ESM in this module export {}; -// eslint-disable-next-line import/no-extraneous-dependencies import 'cypress-react-selector'; // import './coverage'; diff --git a/x-pack/plugins/osquery/cypress/tsconfig.json b/x-pack/plugins/osquery/cypress/tsconfig.json index 548ac5dc3eb13..2ed014bc4c7d4 100644 --- a/x-pack/plugins/osquery/cypress/tsconfig.json +++ b/x-pack/plugins/osquery/cypress/tsconfig.json @@ -1,19 +1,29 @@ { - "extends": "../../../../tsconfig.base.json", - "include": [ - "**/*", - "../cypress.config.ts" + "extends": "../../../../tsconfig.base.json", + "include": [ + "**/*", + "../cypress.config.ts" + ], + "exclude": [ + "target/**/*" + ], + "compilerOptions": { + "outDir": "target/types", + "types": [ + "cypress", + "node", + "cypress-react-selector" ], - "exclude": [ - "target/**/*" - ], - "compilerOptions": { - "outDir": "target/types", - "types": [ - "cypress", - "node", - "cypress-react-selector" - ], - "resolveJsonModule": true, - }, - } + "resolveJsonModule": true, + }, + "kbn_references": [ + "@kbn/cypress-config", + // cypress projects that are nested inside of other ts project use code + // from the parent ts project in ways that can't be auto-matically deteceted + // at this time so we have to force the inclusion of this reference + { + "path": "../tsconfig.json", + "force": true + } + ] +} diff --git a/x-pack/plugins/osquery/tsconfig.json b/x-pack/plugins/osquery/tsconfig.json index 9d1944afbafa7..e29bd4d10cd73 100644 --- a/x-pack/plugins/osquery/tsconfig.json +++ b/x-pack/plugins/osquery/tsconfig.json @@ -1,11 +1,12 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, - "exclude": ["cypress.config.ts"], + "exclude": [ + "cypress.config.ts", + "target/**/*", + ], "include": [ // add all the folders contains files to be compiled "common/**/*", @@ -19,22 +20,50 @@ "public/common/schemas/*/**.json", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", { "path": "../../../src/setup_node_env/tsconfig.json" }, // add references to other TypeScript projects the plugin depends on // requiredPlugins from ./kibana.json - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../fleet/tsconfig.json" }, + "@kbn/data-plugin", + "@kbn/navigation-plugin", + "@kbn/fleet-plugin", // optionalPlugins from ./kibana.json - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../cases/tsconfig.json" }, + "@kbn/cases-plugin", // requiredBundles from ./kibana.json - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, + "@kbn/es-ui-shared-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + + // packages + "@kbn/config-schema", + "@kbn/es-query", + "@kbn/utility-types", + "@kbn/securitysolution-io-ts-utils", + "@kbn/osquery-io-ts-types", + "@kbn/ui-theme", + "@kbn/i18n-react", + "@kbn/discover-plugin", + "@kbn/lens-plugin", + "@kbn/security-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/timelines-plugin", + "@kbn/spaces-plugin", + "@kbn/i18n", + "@kbn/rison", + "@kbn/react-field", + "@kbn/dev-cli-runner", + "@kbn/telemetry-plugin", + "@kbn/actions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/features-plugin", + "@kbn/task-manager-plugin", + "@kbn/data-views-plugin", + "@kbn/rule-registry-plugin", + "@kbn/securitysolution-es-utils", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/std", ] } diff --git a/x-pack/plugins/painless_lab/tsconfig.json b/x-pack/plugins/painless_lab/tsconfig.json index d917b78df9992..257431001f6da 100644 --- a/x-pack/plugins/painless_lab/tsconfig.json +++ b/x-pack/plugins/painless_lab/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,11 +9,18 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/dev_tools/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" } + "@kbn/core", + "@kbn/dev-tools-plugin", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/licensing-plugin", + "@kbn/i18n", + "@kbn/monaco", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/profiling/tsconfig.json b/x-pack/plugins/profiling/tsconfig.json index 35b9870406304..18bd0ec6bf481 100644 --- a/x-pack/plugins/profiling/tsconfig.json +++ b/x-pack/plugins/profiling/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ // add all the folders containing files to be compiled @@ -14,31 +12,49 @@ "server/**/*.ts" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../observability/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/observability-plugin", + "@kbn/i18n", + "@kbn/es-types", + "@kbn/core-http-browser", + "@kbn/data-views-plugin", + "@kbn/charts-plugin", + "@kbn/typed-react-router-config", + "@kbn/shared-ux-link-redirect-app", + "@kbn/io-ts-utils", + "@kbn/unified-search-plugin", + "@kbn/es-query", + "@kbn/config-schema", + "@kbn/features-plugin", + "@kbn/logging", + "@kbn/logging-mocks", + "@kbn/core-http-server", + "@kbn/apm-utils", + "@kbn/core-elasticsearch-server", // add references to other TypeScript projects the plugin depends on // requiredPlugins from ./kibana.json - // { "path": "../licensing/tsconfig.json" }, - // { "path": "../../../src/plugins/data/tsconfig.json" }, - // { "path": "../encrypted_saved_objects/tsconfig.json" }, + // "@kbn/licensing-plugin", + // "@kbn/data-plugin", + // "@kbn/encrypted-saved-objects-plugin", // optionalPlugins from ./kibana.json - // { "path": "../security/tsconfig.json" }, - // { "path": "../features/tsconfig.json" }, - // { "path": "../cloud/tsconfig.json" }, - // { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - // { "path": "../../../src/plugins/home/tsconfig.json" }, + // "@kbn/security-plugin", + // "@kbn/features-plugin", + // "@kbn/cloud-plugin", + // "@kbn/usage-collection-plugin", + // "@kbn/home-plugin", // requiredBundles from ./kibana.json - // { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - // { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - // { "path": "../infra/tsconfig.json" }, - // { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, + // "@kbn/kibana-react-plugin", + // "@kbn/es-ui-shared-plugin", + // "@kbn/infra-plugin", + // "@kbn/kibana-utils-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/remote_clusters/tsconfig.json b/x-pack/plugins/remote_clusters/tsconfig.json index ec75eaa23f831..c8c7808bc8477 100644 --- a/x-pack/plugins/remote_clusters/tsconfig.json +++ b/x-pack/plugins/remote_clusters/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "__jest__/**/*", @@ -14,17 +12,29 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", // required plugins - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../index_management/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, + "@kbn/licensing-plugin", + "@kbn/management-plugin", + "@kbn/features-plugin", // optional plugins - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, + "@kbn/usage-collection-plugin", + "@kbn/cloud-plugin", // required bundles - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/test-jest-helpers", + "@kbn/core-execution-context-browser-mocks", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/share-plugin", + "@kbn/core-http-browser", + "@kbn/analytics", + "@kbn/i18n-react", + "@kbn/config-schema", + "@kbn/expect", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/reporting/tsconfig.json b/x-pack/plugins/reporting/tsconfig.json index 48a0d127af970..48b2f20a3c1e0 100644 --- a/x-pack/plugins/reporting/tsconfig.json +++ b/x-pack/plugins/reporting/tsconfig.json @@ -1,28 +1,43 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*", "../../../typings/**/*"], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/discover/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../../../src/plugins/screenshot_mode/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/field_formats/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../screenshotting/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/discover-plugin", + "@kbn/embeddable-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/management-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/share-plugin", + "@kbn/ui-actions-plugin", + "@kbn/usage-collection-plugin", + "@kbn/field-formats-plugin", + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/screenshotting-plugin", + "@kbn/security-plugin", + "@kbn/spaces-plugin", + "@kbn/config-schema", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/home-plugin", + "@kbn/i18n-react", + "@kbn/es-ui-shared-plugin", + "@kbn/test-jest-helpers", + "@kbn/rison", + "@kbn/task-manager-plugin", + "@kbn/config", + "@kbn/logging-mocks", + "@kbn/core-http-server", + "@kbn/core-test-helpers-test-utils", + "@kbn/expressions-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/rollup/tsconfig.json b/x-pack/plugins/rollup/tsconfig.json index c798f98f1bed6..90148868d6160 100644 --- a/x-pack/plugins/rollup/tsconfig.json +++ b/x-pack/plugins/rollup/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,21 +10,30 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", // required plugins - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, + "@kbn/management-plugin", + "@kbn/licensing-plugin", + "@kbn/features-plugin", // optional plugins - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../index_management/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/vis_types/timeseries/tsconfig.json" }, + "@kbn/home-plugin", + "@kbn/index-management-plugin", + "@kbn/usage-collection-plugin", + "@kbn/vis-type-timeseries-plugin", // required bundles - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/data-plugin", + "@kbn/test-jest-helpers", + "@kbn/analytics", + "@kbn/i18n", + "@kbn/core-http-browser", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/rule_registry/tsconfig.json b/x-pack/plugins/rule_registry/tsconfig.json index e24270edc4d4b..7b282319d62d0 100644 --- a/x-pack/plugins/rule_registry/tsconfig.json +++ b/x-pack/plugins/rule_registry/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -14,9 +12,27 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/alerting-plugin", + "@kbn/security-plugin", + "@kbn/safer-lodash-set", + "@kbn/rule-data-utils", + "@kbn/es-query", + "@kbn/data-views-plugin", + "@kbn/utility-types", + "@kbn/config-schema", + "@kbn/spaces-plugin", + "@kbn/securitysolution-es-utils", + "@kbn/securitysolution-io-ts-types", + "@kbn/securitysolution-io-ts-list-types", + "@kbn/es-types", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/logging-mocks", + "@kbn/logging", + "@kbn/securitysolution-io-ts-utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/runtime_fields/tsconfig.json b/x-pack/plugins/runtime_fields/tsconfig.json index 6ca831aa51fdc..d01b2e051eda5 100644 --- a/x-pack/plugins/runtime_fields/tsconfig.json +++ b/x-pack/plugins/runtime_fields/tsconfig.json @@ -1,16 +1,22 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "public/**/*", "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, + "@kbn/core", + "@kbn/es-ui-shared-plugin", + "@kbn/kibana-react-plugin", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/monaco", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/saved_objects_tagging/tsconfig.json b/x-pack/plugins/saved_objects_tagging/tsconfig.json index 7d7495aac26c7..8d74ebd7de0ed 100644 --- a/x-pack/plugins/saved_objects_tagging/tsconfig.json +++ b/x-pack/plugins/saved_objects_tagging/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,13 +9,20 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../../../src/plugins/saved_objects_tagging_oss/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/management-plugin", + "@kbn/saved-objects-tagging-oss-plugin", + "@kbn/kibana-react-plugin", + "@kbn/usage-collection-plugin", + "@kbn/features-plugin", + "@kbn/security-plugin", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/i18n-react", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/screenshotting/tsconfig.json b/x-pack/plugins/screenshotting/tsconfig.json index 3d53836a43244..71bbdc7de7396 100644 --- a/x-pack/plugins/screenshotting/tsconfig.json +++ b/x-pack/plugins/screenshotting/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -12,10 +10,19 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", { "path": "../../../src/setup_node_env/tsconfig.json" }, - { "path": "../../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../../src/plugins/screenshot_mode/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, + "@kbn/expressions-plugin", + "@kbn/screenshot-mode-plugin", + "@kbn/cloud-plugin", + "@kbn/utility-types", + "@kbn/config-schema", + "@kbn/logging", + "@kbn/std", + "@kbn/i18n", + "@kbn/utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/searchprofiler/tsconfig.json b/x-pack/plugins/searchprofiler/tsconfig.json index 9b5a054e4f4da..b5aff5d6214fc 100644 --- a/x-pack/plugins/searchprofiler/tsconfig.json +++ b/x-pack/plugins/searchprofiler/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -11,10 +9,22 @@ "server/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../../../src/plugins/dev_tools/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, + "@kbn/core", + "@kbn/es-ui-shared-plugin", + "@kbn/dev-tools-plugin", + "@kbn/home-plugin", + "@kbn/licensing-plugin", + "@kbn/i18n", + "@kbn/share-plugin", + "@kbn/kibana-react-plugin", + "@kbn/utility-types", + "@kbn/expect", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/ace", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/edit_role_mapping_page.test.tsx b/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/edit_role_mapping_page.test.tsx index 1a3be1b285177..a6d0de7da144c 100644 --- a/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/edit_role_mapping_page.test.tsx +++ b/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/edit_role_mapping_page.test.tsx @@ -8,7 +8,7 @@ // brace/ace uses the Worker class, which is not currently provided by JSDOM. // This is not required for the tests to pass, but it rather suppresses lengthy // warnings in the console which adds unnecessary noise to the test output. -import '@kbn/test-jest-helpers/target_node/src/stub_web_worker'; +import '@kbn/web-worker-stub'; import React from 'react'; diff --git a/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/rule_editor_panel/json_rule_editor.test.tsx b/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/rule_editor_panel/json_rule_editor.test.tsx index 13b745a19784f..514ac48976b1c 100644 --- a/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/rule_editor_panel/json_rule_editor.test.tsx +++ b/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/rule_editor_panel/json_rule_editor.test.tsx @@ -10,7 +10,7 @@ import 'brace/mode/json'; // brace/ace uses the Worker class, which is not currently provided by JSDOM. // This is not required for the tests to pass, but it rather suppresses lengthy // warnings in the console which adds unnecessary noise to the test output. -import '@kbn/test-jest-helpers/target_node/src/stub_web_worker'; +import '@kbn/web-worker-stub'; import React from 'react'; import { act } from 'react-dom/test-utils'; diff --git a/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/rule_editor_panel/rule_editor_panel.test.tsx b/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/rule_editor_panel/rule_editor_panel.test.tsx index 1241ff26cb0a3..99b26d878b066 100644 --- a/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/rule_editor_panel/rule_editor_panel.test.tsx +++ b/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/rule_editor_panel/rule_editor_panel.test.tsx @@ -8,7 +8,7 @@ // brace/ace uses the Worker class, which is not currently provided by JSDOM. // This is not required for the tests to pass, but it rather suppresses lengthy // warnings in the console which adds unnecessary noise to the test output. -import '@kbn/test-jest-helpers/target_node/src/stub_web_worker'; +import '@kbn/web-worker-stub'; import { EuiErrorBoundary } from '@elastic/eui'; import React from 'react'; diff --git a/x-pack/plugins/security/tsconfig.json b/x-pack/plugins/security/tsconfig.json index 988cf4d550c92..46043f33e56ec 100644 --- a/x-pack/plugins/security/tsconfig.json +++ b/x-pack/plugins/security/tsconfig.json @@ -1,23 +1,57 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../cloud/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../task_manager/tsconfig.json" }, - { "path": "../../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../../../src/plugins/share/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" } + "@kbn/cloud-plugin", + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/spaces-plugin", + "@kbn/task-manager-plugin", + "@kbn/data-views-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/management-plugin", + "@kbn/share-plugin", + "@kbn/usage-collection-plugin", + "@kbn/core", + "@kbn/i18n", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/crypto-browser", + "@kbn/ui-theme", + "@kbn/core-chrome-browser", + "@kbn/core-capabilities-common", + "@kbn/user-profile-components", + "@kbn/shared-ux-link-redirect-app", + "@kbn/utility-types", + "@kbn/core-test-helpers-http-setup-browser", + "@kbn/shared-ux-page-kibana-template", + "@kbn/core-http-browser", + "@kbn/monaco", + "@kbn/std", + "@kbn/config", + "@kbn/config-schema", + "@kbn/utils", + "@kbn/core-logging-server-mocks", + "@kbn/core-rendering-server-internal", + "@kbn/ui-shared-deps-npm", + "@kbn/ui-shared-deps-src", + "@kbn/core-saved-objects-server", + "@kbn/utility-types-jest", + "@kbn/es-errors", + "@kbn/logging", + "@kbn/core-saved-objects-api-server-internal", + "@kbn/core-saved-objects-common", + "@kbn/core-saved-objects-api-server-mocks", + "@kbn/logging-mocks", + "@kbn/web-worker-stub", + "@kbn/core-saved-objects-utils-server", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 91415ada0fe1a..d64466f439a6e 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -5,7 +5,7 @@ * 2.0. */ -export type ExperimentalFeatures = typeof allowedExperimentalValues; +export type ExperimentalFeatures = { [K in keyof typeof allowedExperimentalValues]: boolean }; /** * A list of allowed values that can be used in `xpack.securitySolution.enableExperimental`. @@ -127,7 +127,7 @@ export const parseExperimentalConfigValue = (configValue: string[]): Experimenta }; }; -export const isValidExperimentalValue = (value: string): boolean => { +export const isValidExperimentalValue = (value: string): value is keyof ExperimentalFeatures => { return allowedKeys.includes(value as keyof ExperimentalFeatures); }; diff --git a/x-pack/plugins/security_solution/common/jest.config.js b/x-pack/plugins/security_solution/common/jest.config.js index 1b5f75f8380ba..ee73875c3d5e9 100644 --- a/x-pack/plugins/security_solution/common/jest.config.js +++ b/x-pack/plugins/security_solution/common/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/common', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/common/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/cypress/cypress.config.ts b/x-pack/plugins/security_solution/cypress/cypress.config.ts index 548bafa5be281..d831f839a63a4 100644 --- a/x-pack/plugins/security_solution/cypress/cypress.config.ts +++ b/x-pack/plugins/security_solution/cypress/cypress.config.ts @@ -5,10 +5,9 @@ * 2.0. */ -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; -// eslint-disable-next-line import/no-default-export -export default defineConfig({ +export default defineCypressConfig({ defaultCommandTimeout: 60000, execTimeout: 60000, pageLoadTimeout: 60000, @@ -20,11 +19,5 @@ export default defineConfig({ viewportWidth: 1680, e2e: { baseUrl: 'http://localhost:5601', - // We've imported your old cypress plugins here. - // You may want to clean this up later by importing these. - setupNodeEvents(on, config) { - // eslint-disable-next-line @typescript-eslint/no-var-requires - return require('./plugins')(on, config); - }, }, }); diff --git a/x-pack/plugins/security_solution/cypress/cypress_ci.config.ts b/x-pack/plugins/security_solution/cypress/cypress_ci.config.ts index a7862819b0e6e..092bef5907016 100644 --- a/x-pack/plugins/security_solution/cypress/cypress_ci.config.ts +++ b/x-pack/plugins/security_solution/cypress/cypress_ci.config.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; // eslint-disable-next-line import/no-default-export -export default defineConfig({ +export default defineCypressConfig({ defaultCommandTimeout: 150000, execTimeout: 150000, pageLoadTimeout: 150000, @@ -24,11 +24,5 @@ export default defineConfig({ viewportWidth: 1680, e2e: { baseUrl: 'http://localhost:5601', - // We've imported your old cypress plugins here. - // You may want to clean this up later by importing these. - setupNodeEvents(on, config) { - // eslint-disable-next-line @typescript-eslint/no-var-requires - return require('./plugins')(on, config); - }, }, }); diff --git a/x-pack/plugins/security_solution/cypress/plugins/index.js b/x-pack/plugins/security_solution/cypress/plugins/index.js deleted file mode 100644 index ec7da1681f961..0000000000000 --- a/x-pack/plugins/security_solution/cypress/plugins/index.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -// eslint-disable-next-line import/no-extraneous-dependencies -const wp = require('@cypress/webpack-preprocessor'); - -module.exports = (on) => { - const options = { - webpackOptions: { - resolve: { - extensions: ['.ts', '.tsx', '.js'], - }, - module: { - rules: [ - { - test: /\.tsx?$/, - loader: 'ts-loader', - options: { transpileOnly: true }, - }, - { - test: /\.gif$/, - loader: 'file-loader', - }, - ], - }, - }, - }; - on('file:preprocessor', wp(options)); -}; diff --git a/x-pack/plugins/security_solution/cypress/tsconfig.json b/x-pack/plugins/security_solution/cypress/tsconfig.json index a0d03c742d07c..070f577c5c2fb 100644 --- a/x-pack/plugins/security_solution/cypress/tsconfig.json +++ b/x-pack/plugins/security_solution/cypress/tsconfig.json @@ -8,7 +8,6 @@ "target/**/*" ], "compilerOptions": { - "target": "ES2019", "outDir": "target/types", "types": [ "cypress", @@ -18,6 +17,15 @@ ], }, "kbn_references": [ - { "path": "../tsconfig.json" } + "@kbn/securitysolution-io-ts-alerting-types", + "@kbn/securitysolution-io-ts-list-types", + "@kbn/cypress-config", + // this cypress project uses code from the parent ts project + // in a way that can't be auto-matically deteceted at this time + // so we have to force the inclusion of this reference + { + "path": "../tsconfig.json", + "force": true + } ] } diff --git a/x-pack/plugins/security_solution/jest.config.dev.js b/x-pack/plugins/security_solution/jest.config.dev.js index 2162d85f43367..1810adc42e362 100644 --- a/x-pack/plugins/security_solution/jest.config.dev.js +++ b/x-pack/plugins/security_solution/jest.config.dev.js @@ -9,8 +9,7 @@ module.exports = { preset: '@kbn/test', rootDir: '../../../', projects: [ - '/x-pack/plugins/security_solution/*/jest.config.js', - + '/x-pack/plugins/security_solution/common/*/jest.config.js', '/x-pack/plugins/security_solution/server/*/jest.config.js', '/x-pack/plugins/security_solution/public/*/jest.config.js', ], diff --git a/x-pack/plugins/security_solution/public/app/jest.config.js b/x-pack/plugins/security_solution/public/app/jest.config.js index 8674e6754aabf..089b6e238c09b 100644 --- a/x-pack/plugins/security_solution/public/app/jest.config.js +++ b/x-pack/plugins/security_solution/public/app/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/public/app', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/public/app/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/cases/jest.config.js b/x-pack/plugins/security_solution/public/cases/jest.config.js index 9089585ce8687..e5268f5112f50 100644 --- a/x-pack/plugins/security_solution/public/cases/jest.config.js +++ b/x-pack/plugins/security_solution/public/cases/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/public/cases', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/public/cases/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/common/__mocks__/experimental_features_service.ts b/x-pack/plugins/security_solution/public/common/__mocks__/experimental_features_service.ts index bba0299899f42..a22ecb45a4f53 100644 --- a/x-pack/plugins/security_solution/public/common/__mocks__/experimental_features_service.ts +++ b/x-pack/plugins/security_solution/public/common/__mocks__/experimental_features_service.ts @@ -14,7 +14,6 @@ const ExperimentalFeaturesServiceMock = { get: jest.fn(() => { const ff: ExperimentalFeatures = { ...allowedExperimentalValues, - responseActionGetFileEnabled: true, }; diff --git a/x-pack/plugins/security_solution/public/common/jest.config.js b/x-pack/plugins/security_solution/public/common/jest.config.js index 3fedce946d633..1326b2602bf19 100644 --- a/x-pack/plugins/security_solution/public/common/jest.config.js +++ b/x-pack/plugins/security_solution/public/common/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/public/common', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/public/common/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/jest.config.js b/x-pack/plugins/security_solution/public/detection_engine/jest.config.js index 9f952742833e0..e6bfcc76205f9 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/jest.config.js +++ b/x-pack/plugins/security_solution/public/detection_engine/jest.config.js @@ -15,12 +15,5 @@ module.exports = { collectCoverageFrom: [ '/x-pack/plugins/security_solution/public/detection_engine/**/*.{ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/detections/jest.config.js b/x-pack/plugins/security_solution/public/detections/jest.config.js index 1121326c4ee34..c3da13db2d8e5 100644 --- a/x-pack/plugins/security_solution/public/detections/jest.config.js +++ b/x-pack/plugins/security_solution/public/detections/jest.config.js @@ -15,12 +15,5 @@ module.exports = { collectCoverageFrom: [ '/x-pack/plugins/security_solution/public/detections/**/*.{ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/exceptions/jest.config.js b/x-pack/plugins/security_solution/public/exceptions/jest.config.js index cce8582ebdd86..6c6bdbe0da125 100644 --- a/x-pack/plugins/security_solution/public/exceptions/jest.config.js +++ b/x-pack/plugins/security_solution/public/exceptions/jest.config.js @@ -25,12 +25,5 @@ module.exports = { '!/x-pack/plugins/security_solution/public/exceptions/translations/*', '!/x-pack/plugins/security_solution/public/exceptions/*.translations', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/explore/jest.config.js b/x-pack/plugins/security_solution/public/explore/jest.config.js index 20f7bfc74c310..cf380849ea68c 100644 --- a/x-pack/plugins/security_solution/public/explore/jest.config.js +++ b/x-pack/plugins/security_solution/public/explore/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/public/explore', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/public/explore/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/jest.config.js b/x-pack/plugins/security_solution/public/jest.config.js index afa3e1b47efd4..745b307ee4d41 100644 --- a/x-pack/plugins/security_solution/public/jest.config.js +++ b/x-pack/plugins/security_solution/public/jest.config.js @@ -25,12 +25,5 @@ module.exports = { '!/x-pack/plugins/security_solution/public/index.{js,ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/landing_pages/jest.config.js b/x-pack/plugins/security_solution/public/landing_pages/jest.config.js index 41b8d41269263..71b56bb8aaf14 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/jest.config.js +++ b/x-pack/plugins/security_solution/public/landing_pages/jest.config.js @@ -15,12 +15,5 @@ module.exports = { collectCoverageFrom: [ '/x-pack/plugins/security_solution/public/landing_pages/**/*.{ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/management/jest.config.js b/x-pack/plugins/security_solution/public/management/jest.config.js index 3e5560b56aa09..e33e13fb4ce1a 100644 --- a/x-pack/plugins/security_solution/public/management/jest.config.js +++ b/x-pack/plugins/security_solution/public/management/jest.config.js @@ -15,12 +15,5 @@ module.exports = { collectCoverageFrom: [ '/x-pack/plugins/security_solution/public/management/**/*.{ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/overview/jest.config.js b/x-pack/plugins/security_solution/public/overview/jest.config.js index b34dea8802c5e..94874720385c3 100644 --- a/x-pack/plugins/security_solution/public/overview/jest.config.js +++ b/x-pack/plugins/security_solution/public/overview/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/public/overview', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/public/overview/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/resolver/jest.config.js b/x-pack/plugins/security_solution/public/resolver/jest.config.js index f517075bf5962..641311b3c8cf2 100644 --- a/x-pack/plugins/security_solution/public/resolver/jest.config.js +++ b/x-pack/plugins/security_solution/public/resolver/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/public/resolver', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/public/resolver/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/public/timelines/jest.config.js b/x-pack/plugins/security_solution/public/timelines/jest.config.js index ac28fe2d34979..e2d6858969393 100644 --- a/x-pack/plugins/security_solution/public/timelines/jest.config.js +++ b/x-pack/plugins/security_solution/public/timelines/jest.config.js @@ -15,12 +15,5 @@ module.exports = { collectCoverageFrom: [ '/x-pack/plugins/security_solution/public/timelines/**/*.{ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../../server/__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/scripts/beat_docs/build.js b/x-pack/plugins/security_solution/scripts/beat_docs/build.js index 0179349df76a1..15c8ce3d642c8 100644 --- a/x-pack/plugins/security_solution/scripts/beat_docs/build.js +++ b/x-pack/plugins/security_solution/scripts/beat_docs/build.js @@ -211,20 +211,12 @@ async function main() { } console.log('done for', myBeat.index); } - const body = `/* - * 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 { BeatFields } from '../../../common/search_strategy/index_fields'; - - /* eslint-disable @typescript-eslint/naming-convention */ - export const fieldsBeat: BeatFields = - ${JSON.stringify(beatFields, null, 2)}; - `; - fs.writeFileSync(`${OUTPUT_SERVER_DIRECTORY}/fields.ts`, body, 'utf-8'); + + fs.writeFileSync( + `${OUTPUT_SERVER_DIRECTORY}/fields.json`, + JSON.stringify({ fieldsBeat: beatFields }), + 'utf-8' + ); } if (require.main === module) { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_loader.ts b/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_loader.ts index ccf252c4d551a..b9df8251da319 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_loader.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_loader.ts @@ -13,7 +13,7 @@ import pMap from 'p-map'; import type { CreatePackagePolicyResponse } from '@kbn/fleet-plugin/common'; import type { ToolingLog } from '@kbn/tooling-log'; import type seedrandom from 'seedrandom'; -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { indexAlerts } from '../../../../common/endpoint/data_loaders/index_alerts'; import { EndpointDocGenerator } from '../../../../common/endpoint/generate_data'; import { fetchEndpointMetadataList } from '../../common/endpoint_metadata_services'; diff --git a/x-pack/plugins/security_solution/server/__mocks__/module_name_map.js b/x-pack/plugins/security_solution/server/__mocks__/module_name_map.js new file mode 100644 index 0000000000000..61d6b09ba550b --- /dev/null +++ b/x-pack/plugins/security_solution/server/__mocks__/module_name_map.js @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// See: https://github.com/elastic/kibana/issues/117255, this moduleNameMapper creates +// mocks to avoid memory leaks from kibana core. +module.exports = { + '^@kbn/core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', + '^@kbn/task-manager-plugin/server$': + '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', + '^@kbn/alerting-plugin/server$': + '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', + '^@kbn/actions-plugin/server$': + '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', +}; diff --git a/x-pack/plugins/security_solution/server/client/jest.config.js b/x-pack/plugins/security_solution/server/client/jest.config.js index 593eb77b287e1..bdf35ce91c864 100644 --- a/x-pack/plugins/security_solution/server/client/jest.config.js +++ b/x-pack/plugins/security_solution/server/client/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/server/client', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/server/client/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/server/endpoint/jest.config.js b/x-pack/plugins/security_solution/server/endpoint/jest.config.js index 9bdafcc7668e3..54b164d779377 100644 --- a/x-pack/plugins/security_solution/server/endpoint/jest.config.js +++ b/x-pack/plugins/security_solution/server/endpoint/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/server/endpoint', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/server/endpoint/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/server/fleet_integration/jest.config.js b/x-pack/plugins/security_solution/server/fleet_integration/jest.config.js index abcd1a214c200..726842812a45a 100644 --- a/x-pack/plugins/security_solution/server/fleet_integration/jest.config.js +++ b/x-pack/plugins/security_solution/server/fleet_integration/jest.config.js @@ -15,12 +15,5 @@ module.exports = { collectCoverageFrom: [ '/x-pack/plugins/security_solution/server/fleet_integration/**/*.{ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/server/jest.config.js b/x-pack/plugins/security_solution/server/jest.config.js index 3f5aa91c5faec..feb812760d98a 100644 --- a/x-pack/plugins/security_solution/server/jest.config.js +++ b/x-pack/plugins/security_solution/server/jest.config.js @@ -15,12 +15,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/server', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/server/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('./__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/server/lib/jest.config.js b/x-pack/plugins/security_solution/server/lib/jest.config.js index 88b4ff927971d..dd07f905422b3 100644 --- a/x-pack/plugins/security_solution/server/lib/jest.config.js +++ b/x-pack/plugins/security_solution/server/lib/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/server/lib', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/server/lib/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/server/lists_integration/jest.config.js b/x-pack/plugins/security_solution/server/lists_integration/jest.config.js index 0831c87ee59d4..f2b4a98984bbd 100644 --- a/x-pack/plugins/security_solution/server/lists_integration/jest.config.js +++ b/x-pack/plugins/security_solution/server/lists_integration/jest.config.js @@ -15,12 +15,5 @@ module.exports = { collectCoverageFrom: [ '/x-pack/plugins/security_solution/server/lists_integration/**/*.{ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.test.ts b/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.test.ts index dbeb621400ef2..785d833e1fafc 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.test.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.test.ts @@ -9,7 +9,7 @@ import type { SearchStrategyDependencies, DataViewsServerPluginStart, } from '@kbn/data-plugin/server'; -import { fieldsBeat as beatFields } from '@kbn/timelines-plugin/server/utils/beat_schema/fields'; +import { fieldsBeat as beatFields } from '@kbn/timelines-plugin/server/utils/beat_schema/fields.json'; import { IndexPatternsFetcher } from '@kbn/data-plugin/server'; import { requestEndpointFieldsSearch } from '.'; import { createMockEndpointAppContextService } from '../../endpoint/mocks'; diff --git a/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts b/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts index 026af1d249b76..ce7270912b077 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts @@ -36,7 +36,7 @@ export const endpointFieldsProvider = ( // them to createFieldItem to reduce the amount of work done as much as possible const beatFields: BeatFields = // eslint-disable-next-line @typescript-eslint/no-var-requires - require('@kbn/timelines-plugin/server/utils/beat_schema/fields').fieldsBeat; + require('@kbn/timelines-plugin/server/utils/beat_schema/fields.json').fieldsBeat; return { search: (request, _, deps) => diff --git a/x-pack/plugins/security_solution/server/search_strategy/jest.config.js b/x-pack/plugins/security_solution/server/search_strategy/jest.config.js index 22999d3c5820e..9e17c9c3ae186 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/jest.config.js +++ b/x-pack/plugins/security_solution/server/search_strategy/jest.config.js @@ -15,12 +15,5 @@ module.exports = { collectCoverageFrom: [ '/x-pack/plugins/security_solution/server/search_strategy/**/*.{ts,tsx}', ], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/server/usage/jest.config.js b/x-pack/plugins/security_solution/server/usage/jest.config.js index 193590dbff542..4041e8f66d7c8 100644 --- a/x-pack/plugins/security_solution/server/usage/jest.config.js +++ b/x-pack/plugins/security_solution/server/usage/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/server/usage', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/server/usage/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/server/utils/jest.config.js b/x-pack/plugins/security_solution/server/utils/jest.config.js index ceaa2d790da2f..2e1817b0b4071 100644 --- a/x-pack/plugins/security_solution/server/utils/jest.config.js +++ b/x-pack/plugins/security_solution/server/utils/jest.config.js @@ -13,12 +13,5 @@ module.exports = { '/target/kibana-coverage/jest/x-pack/plugins/security_solution/server/utils', coverageReporters: ['text', 'html'], collectCoverageFrom: ['/x-pack/plugins/security_solution/server/utils/**/*.{ts,tsx}'], - // See: https://github.com/elastic/kibana/issues/117255, the moduleNameMapper creates mocks to avoid memory leaks from kibana core. - moduleNameMapper: { - 'core/server$': '/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts', - 'task_manager/server$': - '/x-pack/plugins/security_solution/server/__mocks__/task_manager.mock.ts', - 'alerting/server$': '/x-pack/plugins/security_solution/server/__mocks__/alert.mock.ts', - 'actions/server$': '/x-pack/plugins/security_solution/server/__mocks__/action.mock.ts', - }, + moduleNameMapper: require('../__mocks__/module_name_map'), }; diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json index da4106eb03257..f508a920fa8bd 100644 --- a/x-pack/plugins/security_solution/tsconfig.json +++ b/x-pack/plugins/security_solution/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true + "outDir": "target/types", }, "include": [ "common/**/*", @@ -17,38 +15,118 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", { "path": "../../../src/setup_node_env/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/files/tsconfig.json"}, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/inspector/tsconfig.json" }, - { "path": "../../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../../src/plugins/newsfeed/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/telemetry/tsconfig.json" }, - { "path": "../../../src/plugins/telemetry_management_section/tsconfig.json" }, - { "path": "../../../src/plugins/data_view_field_editor/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" }, - { "path": "../actions/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../cases/tsconfig.json" }, - { "path": "../cloud_integrations/cloud_experiments/tsconfig.json" }, - { "path": "../cloud_security_posture/tsconfig.json" }, - { "path": "../encrypted_saved_objects/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../fleet/tsconfig.json" }, - { "path": "../kubernetes_security/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../lists/tsconfig.json" }, - { "path": "../maps/tsconfig.json" }, - { "path": "../ml/tsconfig.json" }, - { "path": "../osquery/tsconfig.json" }, - { "path": "../session_view/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../threat_intelligence/tsconfig.json" }, - { "path": "../timelines/tsconfig.json" } + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/files-plugin", + "@kbn/home-plugin", + "@kbn/inspector-plugin", + "@kbn/ui-actions-plugin", + "@kbn/newsfeed-plugin", + "@kbn/usage-collection-plugin", + "@kbn/telemetry-plugin", + "@kbn/data-view-field-editor-plugin", + "@kbn/unified-search-plugin", + "@kbn/actions-plugin", + "@kbn/alerting-plugin", + "@kbn/cases-plugin", + "@kbn/cloud-experiments-plugin", + "@kbn/cloud-security-posture-plugin", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/features-plugin", + "@kbn/fleet-plugin", + "@kbn/kubernetes-security-plugin", + "@kbn/licensing-plugin", + "@kbn/lists-plugin", + "@kbn/maps-plugin", + "@kbn/ml-plugin", + "@kbn/osquery-plugin", + "@kbn/session-view-plugin", + "@kbn/security-plugin", + "@kbn/spaces-plugin", + "@kbn/threat-intelligence-plugin", + "@kbn/timelines-plugin", + "@kbn/es-query", + "@kbn/utility-types", + "@kbn/securitysolution-list-utils", + "@kbn/securitysolution-io-ts-list-types", + "@kbn/securitysolution-io-ts-alerting-types", + "@kbn/test", + "@kbn/std", + "@kbn/rule-data-utils", + "@kbn/securitysolution-t-grid", + "@kbn/rule-registry-plugin", + "@kbn/securitysolution-utils", + "@kbn/securitysolution-list-constants", + "@kbn/config-schema", + "@kbn/triggers-actions-ui-plugin", + "@kbn/securitysolution-io-ts-types", + "@kbn/securitysolution-io-ts-utils", + "@kbn/osquery-io-ts-types", + "@kbn/core-capabilities-common", + "@kbn/es-ui-shared-plugin", + "@kbn/i18n", + "@kbn/kibana-utils-plugin", + "@kbn/lens-plugin", + "@kbn/dashboard-plugin", + "@kbn/saved-objects-tagging-oss-plugin", + "@kbn/guided-onboarding-plugin", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + "@kbn/core-chrome-browser", + "@kbn/data-views-plugin", + "@kbn/datemath", + "@kbn/ui-theme", + "@kbn/securitysolution-list-api", + "@kbn/core-http-browser", + "@kbn/securitysolution-list-hooks", + "@kbn/securitysolution-exception-list-components", + "@kbn/rison", + "@kbn/shared-ux-page-kibana-template", + "@kbn/saved-objects-tagging-plugin", + "@kbn/securitysolution-hook-utils", + "@kbn/test-jest-helpers", + "@kbn/safer-lodash-set", + "@kbn/securitysolution-autocomplete", + "@kbn/core-application-browser", + "@kbn/expect", + "@kbn/share-plugin", + "@kbn/analytics", + "@kbn/observability-plugin", + "@kbn/core-notifications-browser", + "@kbn/doc-links", + "@kbn/react-field", + "@kbn/field-types", + "@kbn/securitysolution-rules", + "@kbn/core-mount-utils-browser-internal", + "@kbn/cases-components", + "@kbn/event-log-plugin", + "@kbn/task-manager-plugin", + "@kbn/cloud-plugin", + "@kbn/core-saved-objects-utils-server", + "@kbn/core-http-router-server-mocks", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/apm-utils", + "@kbn/core-saved-objects-server", + "@kbn/es-types", + "@kbn/utils", + "@kbn/logging-mocks", + "@kbn/securitysolution-es-utils", + "@kbn/logging", + "@kbn/utility-types-jest", + "@kbn/core-elasticsearch-server", + "@kbn/core-saved-objects-api-server", + "@kbn/core-http-server", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", + "@kbn/dev-utils", + "@kbn/tooling-log", + "@kbn/core-status-common-internal", + "@kbn/repo-info", + "@kbn/storybook", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/session_view/tsconfig.json b/x-pack/plugins/session_view/tsconfig.json index 33de77da0c6c4..8ae5f67959e18 100644 --- a/x-pack/plugins/session_view/tsconfig.json +++ b/x-pack/plugins/session_view/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ // add all the folders containg files to be compiled @@ -17,26 +15,27 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, + "@kbn/core", // add references to other TypeScript projects the plugin depends on // requiredPlugins from ./kibana.json - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../encrypted_saved_objects/tsconfig.json" }, // optionalPlugins from ./kibana.json - { "path": "../security/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, + "@kbn/security-plugin", // requiredBundles from ./kibana.json - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../infra/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../rule_registry/tsconfig.json" } + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/rule-registry-plugin", + "@kbn/i18n", + "@kbn/std", + "@kbn/ui-theme", + "@kbn/i18n-react", + "@kbn/config-schema", + "@kbn/alerting-plugin", + "@kbn/rule-data-utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/snapshot_restore/tsconfig.json b/x-pack/plugins/snapshot_restore/tsconfig.json index 79c5bd269fc5c..2842f5aa59a97 100644 --- a/x-pack/plugins/snapshot_restore/tsconfig.json +++ b/x-pack/plugins/snapshot_restore/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "__jest__/**/*", @@ -14,15 +12,25 @@ "../../../typings/**/*", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json"}, - { "path": "../../../src/plugins/usage_collection/tsconfig.json"}, - { "path": "../../../src/plugins/home/tsconfig.json"}, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" } + "@kbn/core", + "@kbn/licensing-plugin", + "@kbn/features-plugin", + "@kbn/cloud-plugin", + "@kbn/security-plugin", + "@kbn/management-plugin", + "@kbn/usage-collection-plugin", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/share-plugin", + "@kbn/i18n-react", + "@kbn/analytics", + "@kbn/config-schema", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/spaces/tsconfig.json b/x-pack/plugins/spaces/tsconfig.json index a0dec9464b8f8..b8f972e770d21 100644 --- a/x-pack/plugins/spaces/tsconfig.json +++ b/x-pack/plugins/spaces/tsconfig.json @@ -1,19 +1,33 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["common/**/*", "public/**/*", "server/**/*"], "kbn_references": [ - { "path": "../features/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../../../src/plugins/advanced_settings/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" } + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/advanced-settings-plugin", + "@kbn/home-plugin", + "@kbn/kibana-react-plugin", + "@kbn/management-plugin", + "@kbn/usage-collection-plugin", + "@kbn/i18n", + "@kbn/core", + "@kbn/test-jest-helpers", + "@kbn/i18n-react", + "@kbn/shared-ux-avatar-solution", + "@kbn/core-saved-objects-api-server", + "@kbn/config-schema", + "@kbn/utility-types", + "@kbn/std", + "@kbn/core-saved-objects-server", + "@kbn/core-test-helpers-kbn-server", + "@kbn/test", + "@kbn/utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/stack_alerts/tsconfig.json b/x-pack/plugins/stack_alerts/tsconfig.json index 1aadefdb18304..444a05797cec2 100644 --- a/x-pack/plugins/stack_alerts/tsconfig.json +++ b/x-pack/plugins/stack_alerts/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "server/**/*", @@ -12,14 +10,38 @@ "common/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../triggers_actions_ui/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/saved_objects/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../transform/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/alerting-plugin", + "@kbn/features-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/kibana-react-plugin", + "@kbn/data-plugin", + "@kbn/transform-plugin", + "@kbn/unified-search-plugin", + "@kbn/config-schema", + "@kbn/i18n", + "@kbn/config", + "@kbn/es-query", + "@kbn/utility-types", + "@kbn/es-types", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/data-views-plugin", + "@kbn/field-formats-plugin", + "@kbn/test-jest-helpers", + "@kbn/data-view-editor-plugin", + "@kbn/i18n-react", + "@kbn/charts-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/core-http-browser", + "@kbn/core-doc-links-browser", + "@kbn/core-ui-settings-server", + "@kbn/kibana-utils-plugin", + "@kbn/usage-collection-plugin", + "@kbn/react-field", + "@kbn/core-elasticsearch-server-mocks", + "@kbn/logging-mocks", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/stack_connectors/tsconfig.json b/x-pack/plugins/stack_connectors/tsconfig.json index 3262f96e0f15e..cb7b2687aea88 100644 --- a/x-pack/plugins/stack_connectors/tsconfig.json +++ b/x-pack/plugins/stack_connectors/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "server/**/*", @@ -13,8 +11,23 @@ "public/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../actions/tsconfig.json" }, - { "path": "../triggers_actions_ui/tsconfig.json" } + "@kbn/core", + "@kbn/actions-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/config-schema", + "@kbn/i18n", + "@kbn/logging-mocks", + "@kbn/logging", + "@kbn/core-logging-server-mocks", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/alerting-plugin", + "@kbn/i18n-react", + "@kbn/es-ui-shared-plugin", + "@kbn/kibana-react-plugin", + "@kbn/test-jest-helpers", + "@kbn/securitysolution-io-ts-utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/synthetics/e2e/tsconfig.json b/x-pack/plugins/synthetics/e2e/tsconfig.json index c62e73d4df121..672035e5a0d28 100644 --- a/x-pack/plugins/synthetics/e2e/tsconfig.json +++ b/x-pack/plugins/synthetics/e2e/tsconfig.json @@ -7,14 +7,13 @@ "types": [ "node"], }, "kbn_references": [ - { - "path": "../../apm/tsconfig.json", - }, + "@kbn/apm-plugin", { "path": "../../observability/e2e/tsconfig.json" }, - { - "path": "../tsconfig.json", - } + "@kbn/test", + "@kbn/dev-utils", + "@kbn/observability-plugin", + "@kbn/ux-plugin", ] } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/lib/helper/enzyme_helpers.tsx b/x-pack/plugins/synthetics/public/legacy_uptime/lib/helper/enzyme_helpers.tsx index b8e1c055dce49..5724bc9339a12 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/lib/helper/enzyme_helpers.tsx +++ b/x-pack/plugins/synthetics/public/legacy_uptime/lib/helper/enzyme_helpers.tsx @@ -9,7 +9,6 @@ import React, { ReactElement } from 'react'; import { Router } from 'react-router-dom'; import { MemoryHistory } from 'history/createMemoryHistory'; import { createMemoryHistory, History } from 'history'; -// eslint-disable-next-line import/no-extraneous-dependencies import { mountWithIntl, renderWithIntl, shallowWithIntl } from '@kbn/test-jest-helpers'; import { MountWithReduxProvider } from './helper_with_redux'; import { AppState } from '../../state'; diff --git a/x-pack/plugins/synthetics/tsconfig.json b/x-pack/plugins/synthetics/tsconfig.json index 49e2682a0bbb9..15962338db8c7 100644 --- a/x-pack/plugins/synthetics/tsconfig.json +++ b/x-pack/plugins/synthetics/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -15,27 +13,63 @@ "../../../typings/**/*" ], "kbn_references": [ - { - "path": "../alerting/tsconfig.json" - }, - { - "path": "../ml/tsconfig.json" - }, - { - "path": "../triggers_actions_ui/tsconfig.json" - }, - { - "path": "../observability/tsconfig.json" - }, - { - "path": "../fleet/tsconfig.json" - }, - { - "path": "../../../src/plugins/unified_search/tsconfig.json" - } + "@kbn/alerting-plugin", + "@kbn/ml-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/observability-plugin", + "@kbn/fleet-plugin", + "@kbn/unified-search-plugin" , - { - "path": "../index_lifecycle_management/tsconfig.json" - } + "@kbn/index-lifecycle-management-plugin", + "@kbn/i18n", + "@kbn/core", + "@kbn/config-schema", + "@kbn/server-http-tools", + "@kbn/datemath", + "@kbn/share-plugin", + "@kbn/discover-plugin", + "@kbn/home-plugin", + "@kbn/embeddable-plugin", + "@kbn/data-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/inspector-plugin", + "@kbn/cases-plugin", + "@kbn/cloud-plugin", + "@kbn/data-views-plugin", + "@kbn/spaces-plugin", + "@kbn/core-doc-links-browser", + "@kbn/usage-collection-plugin", + "@kbn/kibana-react-plugin", + "@kbn/i18n-react", + "@kbn/securitysolution-io-ts-utils", + "@kbn/shared-ux-page-kibana-template", + "@kbn/ui-theme", + "@kbn/es-query", + "@kbn/test-jest-helpers", + "@kbn/stack-connectors-plugin", + "@kbn/rule-data-utils", + "@kbn/core-http-browser", + "@kbn/core-http-browser-mocks", + "@kbn/core-notifications-browser", + "@kbn/rison", + "@kbn/core-http-router-server-internal", + "@kbn/licensing-plugin", + "@kbn/rule-registry-plugin", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/security-plugin", + "@kbn/logging-mocks", + "@kbn/task-manager-plugin", + "@kbn/es-types", + "@kbn/core-http-server-mocks", + "@kbn/utility-types", + "@kbn/telemetry-plugin", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-common", + "@kbn/features-plugin", + "@kbn/bfetch-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/task_manager/server/lib/log_health_metrics.ts b/x-pack/plugins/task_manager/server/lib/log_health_metrics.ts index 86974c6ff747e..65b39ecda4cba 100644 --- a/x-pack/plugins/task_manager/server/lib/log_health_metrics.ts +++ b/x-pack/plugins/task_manager/server/lib/log_health_metrics.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { kibanaPackageJson } from '@kbn/utils'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { isEmpty } from 'lodash'; import { Logger } from '@kbn/core/server'; diff --git a/x-pack/plugins/task_manager/tsconfig.json b/x-pack/plugins/task_manager/tsconfig.json index cb2a5fb3c8f56..60f0874339f82 100644 --- a/x-pack/plugins/task_manager/tsconfig.json +++ b/x-pack/plugins/task_manager/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "server/**/*", @@ -11,8 +9,17 @@ "server/**/*.json", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, + "@kbn/core", + "@kbn/usage-collection-plugin", + "@kbn/config-schema", + "@kbn/config", + "@kbn/utility-types", + "@kbn/safer-lodash-set", + "@kbn/es-types", + "@kbn/repo-info", + "@kbn/apm-utils", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/telemetry_collection_xpack/tsconfig.json b/x-pack/plugins/telemetry_collection_xpack/tsconfig.json index 6278cbf832236..5ea98b7ecfb1a 100644 --- a/x-pack/plugins/telemetry_collection_xpack/tsconfig.json +++ b/x-pack/plugins/telemetry_collection_xpack/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", "isolatedModules": true }, "include": [ @@ -15,9 +13,13 @@ "schema/xpack_root.json", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/telemetry_collection_manager/tsconfig.json" }, - { "path": "../../../src/plugins/telemetry/tsconfig.json" } + "@kbn/core", + "@kbn/telemetry-collection-manager-plugin", + "@kbn/telemetry-plugin", + "@kbn/usage-collection-plugin", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/threat_intelligence/cypress/cypress.config.ts b/x-pack/plugins/threat_intelligence/cypress/cypress.config.ts index fa392484a7e5b..cd931ec1b874f 100644 --- a/x-pack/plugins/threat_intelligence/cypress/cypress.config.ts +++ b/x-pack/plugins/threat_intelligence/cypress/cypress.config.ts @@ -5,8 +5,7 @@ * 2.0. */ -// eslint-disable-next-line import/no-extraneous-dependencies -import { defineConfig } from 'cypress'; +import { defineCypressConfig } from '@kbn/cypress-config'; const CI = process.env.BUILDKITE === 'true'; @@ -25,8 +24,7 @@ const CI_CONFIG: Cypress.ConfigOptions = { defaultCommandTimeout: sToMs(120), }; -// eslint-disable-next-line import/no-default-export -export default defineConfig({ +export default defineCypressConfig({ ...(CI ? CI_CONFIG : LOCAL_CONFIG), execTimeout: 120000, pageLoadTimeout: 120000, @@ -46,9 +44,5 @@ export default defineConfig({ }, e2e: { baseUrl: 'http://localhost:5601', - setupNodeEvents(on, config) { - // eslint-disable-next-line @typescript-eslint/no-var-requires - return require('./plugins')(on, config); - }, }, }); diff --git a/x-pack/plugins/threat_intelligence/cypress/plugins/index.js b/x-pack/plugins/threat_intelligence/cypress/plugins/index.js deleted file mode 100644 index 954aca2ed76e4..0000000000000 --- a/x-pack/plugins/threat_intelligence/cypress/plugins/index.js +++ /dev/null @@ -1,42 +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. - */ - -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -// eslint-disable-next-line import/no-extraneous-dependencies -const wp = require('@cypress/webpack-preprocessor'); - -module.exports = (on) => { - const options = { - webpackOptions: { - resolve: { - extensions: ['.ts', '.tsx', '.js'], - }, - module: { - rules: [ - { - test: /\.tsx?$/, - loader: 'ts-loader', - options: { transpileOnly: true }, - }, - ], - }, - }, - }; - on('file:preprocessor', wp(options)); -}; diff --git a/x-pack/plugins/threat_intelligence/cypress/tsconfig.json b/x-pack/plugins/threat_intelligence/cypress/tsconfig.json index a0d03c742d07c..d9f0d18d55561 100644 --- a/x-pack/plugins/threat_intelligence/cypress/tsconfig.json +++ b/x-pack/plugins/threat_intelligence/cypress/tsconfig.json @@ -8,7 +8,6 @@ "target/**/*" ], "compilerOptions": { - "target": "ES2019", "outDir": "target/types", "types": [ "cypress", @@ -18,6 +17,13 @@ ], }, "kbn_references": [ - { "path": "../tsconfig.json" } + "@kbn/cypress-config", + // cypress projects that are nested inside of other ts project use code + // from the parent ts project in ways that can't be auto-matically deteceted + // at this time so we have to force the inclusion of this reference + { + "path": "../tsconfig.json", + "force": true + } ] } diff --git a/x-pack/plugins/threat_intelligence/tsconfig.json b/x-pack/plugins/threat_intelligence/tsconfig.json index 7298fbe3c987d..a8e1b2a96b37d 100644 --- a/x-pack/plugins/threat_intelligence/tsconfig.json +++ b/x-pack/plugins/threat_intelligence/tsconfig.json @@ -1,10 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true + "outDir": "target/types", }, "include": [ "common/**/*", @@ -16,11 +13,26 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../cases/tsconfig.json" }, - { "path": "../timelines/tsconfig.json" }, - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" }, - { "path": "../triggers_actions_ui/tsconfig.json" } + "@kbn/cases-plugin", + "@kbn/timelines-plugin", + "@kbn/core", + "@kbn/data-plugin", + "@kbn/unified-search-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/i18n-react", + "@kbn/data-views-plugin", + "@kbn/es-query", + "@kbn/rule-registry-plugin", + "@kbn/inspector-plugin", + "@kbn/shared-ux-page-kibana-template-types", + "@kbn/doc-links", + "@kbn/i18n", + "@kbn/kibana-react-plugin", + "@kbn/utility-types", + "@kbn/ui-theme", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/timelines/server/search_strategy/index_fields/index.test.ts b/x-pack/plugins/timelines/server/search_strategy/index_fields/index.test.ts index 6146a73fddb08..abcf7c96b7d35 100644 --- a/x-pack/plugins/timelines/server/search_strategy/index_fields/index.test.ts +++ b/x-pack/plugins/timelines/server/search_strategy/index_fields/index.test.ts @@ -9,7 +9,7 @@ import { sortBy } from 'lodash/fp'; import { formatIndexFields, createFieldItem, requestIndexFieldSearchHandler } from '.'; import { mockAuditbeatIndexField, mockFilebeatIndexField, mockPacketbeatIndexField } from './mock'; -import { fieldsBeat as beatFields } from '../../utils/beat_schema/fields'; +import { fieldsBeat as beatFields } from '../../utils/beat_schema/fields.json'; import { IndexPatternsFetcher, SearchStrategyDependencies } from '@kbn/data-plugin/server'; describe('Index Fields', () => { diff --git a/x-pack/plugins/timelines/server/search_strategy/index_fields/index.ts b/x-pack/plugins/timelines/server/search_strategy/index_fields/index.ts index c035e9b382d52..d1f04c65c09dc 100644 --- a/x-pack/plugins/timelines/server/search_strategy/index_fields/index.ts +++ b/x-pack/plugins/timelines/server/search_strategy/index_fields/index.ts @@ -38,7 +38,7 @@ export const indexFieldsProvider = ( // require the fields once we actually need them, rather than ahead of time, and pass // them to createFieldItem to reduce the amount of work done as much as possible // eslint-disable-next-line @typescript-eslint/no-var-requires - const beatFields: BeatFields = require('../../utils/beat_schema/fields').fieldsBeat; + const beatFields: BeatFields = require('../../utils/beat_schema/fields.json').fieldsBeat; return { search: (request, options, deps) => diff --git a/x-pack/plugins/timelines/server/utils/beat_schema/fields.json b/x-pack/plugins/timelines/server/utils/beat_schema/fields.json new file mode 100644 index 0000000000000..073b2d92f83c0 --- /dev/null +++ b/x-pack/plugins/timelines/server/utils/beat_schema/fields.json @@ -0,0 +1 @@ +{"fieldsBeat":{"_id":{"category":"base","description":"Each document has an _id that uniquely identifies it","example":"Y-6TfmcB0WOhS6qyMv3s","name":"_id","type":"keyword"},"_index":{"category":"base","description":"An index is like a ‘database’ in a relational database. It has a mapping which defines multiple types. An index is a logical namespace which maps to one or more primary shards and can have zero or more replica shards.","example":"auditbeat-8.0.0-2019.02.19-000001","name":"_index","type":"keyword"},"@timestamp":{"category":"base","description":"Date/time when the event originated. This is the date/time extracted from the event, typically representing when the event was generated by the source. If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. Required field for all events.","example":"2016-05-23T08:05:34.853Z","name":"@timestamp","type":"date"},"labels":{"category":"base","description":"Custom key/value pairs. Can be used to add meta information to events. Should not contain nested objects. All values are stored as keyword. Example: `docker` and `k8s` labels.","example":"{\"application\": \"foo-bar\", \"env\": \"production\"}","name":"labels","type":"object"},"message":{"category":"base","description":"For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message.","example":"Hello World","name":"message","type":"match_only_text"},"tags":{"category":"base","description":"List of keywords used to tag each event.","example":"[\"production\", \"env2\"]","name":"tags","type":"keyword"},"agent.build.original":{"category":"agent","description":"Extended build information for the agent. This field is intended to contain any build information that a data source may provide, no specific formatting is required.","example":"metricbeat version 7.6.0 (amd64), libbeat 7.6.0 [6a23e8f8f30f5001ba344e4e54d8d9cb82cb107c built 2020-02-05 23:10:10 +0000 UTC]","name":"agent.build.original","type":"keyword"},"agent.ephemeral_id":{"category":"agent","description":"Ephemeral identifier of this agent (if one exists). This id normally changes across restarts, but `agent.id` does not.","example":"8a4f500f","name":"agent.ephemeral_id","type":"keyword"},"agent.id":{"category":"agent","description":"Unique identifier of this agent (if one exists). Example: For Beats this would be beat.id.","example":"8a4f500d","name":"agent.id","type":"keyword"},"agent.name":{"category":"agent","description":"Custom name of the agent. This is a name that can be given to an agent. This can be helpful if for example two Filebeat instances are running on the same host but a human readable separation is needed on which Filebeat instance data is coming from. If no name is given, the name is often left empty.","example":"foo","name":"agent.name","type":"keyword"},"agent.type":{"category":"agent","description":"Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.","example":"filebeat","name":"agent.type","type":"keyword"},"agent.version":{"category":"agent","description":"Version of the agent.","example":"6.0.0-rc2","name":"agent.version","type":"keyword"},"as.number":{"category":"as","description":"Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.","example":15169,"name":"as.number","type":"long"},"as.organization.name":{"category":"as","description":"Organization name.","example":"Google LLC","name":"as.organization.name","type":"keyword"},"client.address":{"category":"client","description":"Some event client addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.","name":"client.address","type":"keyword"},"client.as.number":{"category":"client","description":"Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.","example":15169,"name":"client.as.number","type":"long"},"client.as.organization.name":{"category":"client","description":"Organization name.","example":"Google LLC","name":"client.as.organization.name","type":"keyword"},"client.bytes":{"category":"client","description":"Bytes sent from the client to the server.","example":184,"name":"client.bytes","type":"long","format":"bytes"},"client.domain":{"category":"client","description":"Client domain.","name":"client.domain","type":"keyword"},"client.geo.city_name":{"category":"client","description":"City name.","example":"Montreal","name":"client.geo.city_name","type":"keyword"},"client.geo.continent_code":{"category":"client","description":"Two-letter code representing continent's name.","example":"NA","name":"client.geo.continent_code","type":"keyword"},"client.geo.continent_name":{"category":"client","description":"Name of the continent.","example":"North America","name":"client.geo.continent_name","type":"keyword"},"client.geo.country_iso_code":{"category":"client","description":"Country ISO code.","example":"CA","name":"client.geo.country_iso_code","type":"keyword"},"client.geo.country_name":{"category":"client","description":"Country name.","example":"Canada","name":"client.geo.country_name","type":"keyword"},"client.geo.location":{"category":"client","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"client.geo.location","type":"geo_point"},"client.geo.name":{"category":"client","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"client.geo.name","type":"keyword"},"client.geo.postal_code":{"category":"client","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"client.geo.postal_code","type":"keyword"},"client.geo.region_iso_code":{"category":"client","description":"Region ISO code.","example":"CA-QC","name":"client.geo.region_iso_code","type":"keyword"},"client.geo.region_name":{"category":"client","description":"Region name.","example":"Quebec","name":"client.geo.region_name","type":"keyword"},"client.geo.timezone":{"category":"client","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"client.geo.timezone","type":"keyword"},"client.ip":{"category":"client","description":"IP address of the client (IPv4 or IPv6).","name":"client.ip","type":"ip"},"client.mac":{"category":"client","description":"MAC address of the client. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.","example":"00-00-5E-00-53-23","name":"client.mac","type":"keyword"},"client.nat.ip":{"category":"client","description":"Translated IP of source based NAT sessions (e.g. internal client to internet). Typically connections traversing load balancers, firewalls, or routers.","name":"client.nat.ip","type":"ip"},"client.nat.port":{"category":"client","description":"Translated port of source based NAT sessions (e.g. internal client to internet). Typically connections traversing load balancers, firewalls, or routers.","name":"client.nat.port","type":"long","format":"string"},"client.packets":{"category":"client","description":"Packets sent from the client to the server.","example":12,"name":"client.packets","type":"long"},"client.port":{"category":"client","description":"Port of the client.","name":"client.port","type":"long","format":"string"},"client.registered_domain":{"category":"client","description":"The highest registered client domain, stripped of the subdomain. For example, the registered domain for \"foo.example.com\" is \"example.com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as \"co.uk\".","example":"example.com","name":"client.registered_domain","type":"keyword"},"client.subdomain":{"category":"client","description":"The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of \"www.east.mydomain.co.uk\" is \"east\". If the domain has multiple levels of subdomain, such as \"sub2.sub1.example.com\", the subdomain field should contain \"sub2.sub1\", with no trailing period.","example":"east","name":"client.subdomain","type":"keyword"},"client.top_level_domain":{"category":"client","description":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is \"com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as \"co.uk\".","example":"co.uk","name":"client.top_level_domain","type":"keyword"},"client.user.domain":{"category":"client","description":"Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.","name":"client.user.domain","type":"keyword"},"client.user.email":{"category":"client","description":"User email address.","name":"client.user.email","type":"keyword"},"client.user.full_name":{"category":"client","description":"User's full name, if available.","example":"Albert Einstein","name":"client.user.full_name","type":"keyword"},"client.user.group.domain":{"category":"client","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"client.user.group.domain","type":"keyword"},"client.user.group.id":{"category":"client","description":"Unique identifier for the group on the system/platform.","name":"client.user.group.id","type":"keyword"},"client.user.group.name":{"category":"client","description":"Name of the group.","name":"client.user.group.name","type":"keyword"},"client.user.hash":{"category":"client","description":"Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.","name":"client.user.hash","type":"keyword"},"client.user.id":{"category":"client","description":"Unique identifier of the user.","example":"S-1-5-21-202424912787-2692429404-2351956786-1000","name":"client.user.id","type":"keyword"},"client.user.name":{"category":"client","description":"Short name or login of the user.","example":"a.einstein","name":"client.user.name","type":"keyword"},"client.user.roles":{"category":"client","description":"Array of user roles at the time of the event.","example":"[\"kibana_admin\", \"reporting_user\"]","name":"client.user.roles","type":"keyword"},"cloud.account.id":{"category":"cloud","description":"The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.","example":666777888999,"name":"cloud.account.id","type":"keyword"},"cloud.account.name":{"category":"cloud","description":"The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.","example":"elastic-dev","name":"cloud.account.name","type":"keyword"},"cloud.availability_zone":{"category":"cloud","description":"Availability zone in which this host, resource, or service is located.","example":"us-east-1c","name":"cloud.availability_zone","type":"keyword"},"cloud.instance.id":{"category":"cloud","description":"Instance ID of the host machine.","example":"i-1234567890abcdef0","name":"cloud.instance.id","type":"keyword"},"cloud.instance.name":{"category":"cloud","description":"Instance name of the host machine.","name":"cloud.instance.name","type":"keyword"},"cloud.machine.type":{"category":"cloud","description":"Machine type of the host machine.","example":"t2.medium","name":"cloud.machine.type","type":"keyword"},"cloud.origin.account.id":{"category":"cloud","description":"The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.","example":666777888999,"name":"cloud.origin.account.id","type":"keyword"},"cloud.origin.account.name":{"category":"cloud","description":"The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.","example":"elastic-dev","name":"cloud.origin.account.name","type":"keyword"},"cloud.origin.availability_zone":{"category":"cloud","description":"Availability zone in which this host, resource, or service is located.","example":"us-east-1c","name":"cloud.origin.availability_zone","type":"keyword"},"cloud.origin.instance.id":{"category":"cloud","description":"Instance ID of the host machine.","example":"i-1234567890abcdef0","name":"cloud.origin.instance.id","type":"keyword"},"cloud.origin.instance.name":{"category":"cloud","description":"Instance name of the host machine.","name":"cloud.origin.instance.name","type":"keyword"},"cloud.origin.machine.type":{"category":"cloud","description":"Machine type of the host machine.","example":"t2.medium","name":"cloud.origin.machine.type","type":"keyword"},"cloud.origin.project.id":{"category":"cloud","description":"The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.","example":"my-project","name":"cloud.origin.project.id","type":"keyword"},"cloud.origin.project.name":{"category":"cloud","description":"The cloud project name. Examples: Google Cloud Project name, Azure Project name.","example":"my project","name":"cloud.origin.project.name","type":"keyword"},"cloud.origin.provider":{"category":"cloud","description":"Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.","example":"aws","name":"cloud.origin.provider","type":"keyword"},"cloud.origin.region":{"category":"cloud","description":"Region in which this host, resource, or service is located.","example":"us-east-1","name":"cloud.origin.region","type":"keyword"},"cloud.origin.service.name":{"category":"cloud","description":"The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.","example":"lambda","name":"cloud.origin.service.name","type":"keyword"},"cloud.project.id":{"category":"cloud","description":"The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.","example":"my-project","name":"cloud.project.id","type":"keyword"},"cloud.project.name":{"category":"cloud","description":"The cloud project name. Examples: Google Cloud Project name, Azure Project name.","example":"my project","name":"cloud.project.name","type":"keyword"},"cloud.provider":{"category":"cloud","description":"Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.","example":"aws","name":"cloud.provider","type":"keyword"},"cloud.region":{"category":"cloud","description":"Region in which this host, resource, or service is located.","example":"us-east-1","name":"cloud.region","type":"keyword"},"cloud.service.name":{"category":"cloud","description":"The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.","example":"lambda","name":"cloud.service.name","type":"keyword"},"cloud.target.account.id":{"category":"cloud","description":"The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.","example":666777888999,"name":"cloud.target.account.id","type":"keyword"},"cloud.target.account.name":{"category":"cloud","description":"The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.","example":"elastic-dev","name":"cloud.target.account.name","type":"keyword"},"cloud.target.availability_zone":{"category":"cloud","description":"Availability zone in which this host, resource, or service is located.","example":"us-east-1c","name":"cloud.target.availability_zone","type":"keyword"},"cloud.target.instance.id":{"category":"cloud","description":"Instance ID of the host machine.","example":"i-1234567890abcdef0","name":"cloud.target.instance.id","type":"keyword"},"cloud.target.instance.name":{"category":"cloud","description":"Instance name of the host machine.","name":"cloud.target.instance.name","type":"keyword"},"cloud.target.machine.type":{"category":"cloud","description":"Machine type of the host machine.","example":"t2.medium","name":"cloud.target.machine.type","type":"keyword"},"cloud.target.project.id":{"category":"cloud","description":"The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.","example":"my-project","name":"cloud.target.project.id","type":"keyword"},"cloud.target.project.name":{"category":"cloud","description":"The cloud project name. Examples: Google Cloud Project name, Azure Project name.","example":"my project","name":"cloud.target.project.name","type":"keyword"},"cloud.target.provider":{"category":"cloud","description":"Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.","example":"aws","name":"cloud.target.provider","type":"keyword"},"cloud.target.region":{"category":"cloud","description":"Region in which this host, resource, or service is located.","example":"us-east-1","name":"cloud.target.region","type":"keyword"},"cloud.target.service.name":{"category":"cloud","description":"The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.","example":"lambda","name":"cloud.target.service.name","type":"keyword"},"code_signature.digest_algorithm":{"category":"code_signature","description":"The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.","example":"sha256","name":"code_signature.digest_algorithm","type":"keyword"},"code_signature.exists":{"category":"code_signature","description":"Boolean to capture if a signature is present.","example":"true","name":"code_signature.exists","type":"boolean"},"code_signature.signing_id":{"category":"code_signature","description":"The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.","example":"com.apple.xpc.proxy","name":"code_signature.signing_id","type":"keyword"},"code_signature.status":{"category":"code_signature","description":"Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.","example":"ERROR_UNTRUSTED_ROOT","name":"code_signature.status","type":"keyword"},"code_signature.subject_name":{"category":"code_signature","description":"Subject name of the code signer","example":"Microsoft Corporation","name":"code_signature.subject_name","type":"keyword"},"code_signature.team_id":{"category":"code_signature","description":"The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.","example":"EQHXZ8M8AV","name":"code_signature.team_id","type":"keyword"},"code_signature.timestamp":{"category":"code_signature","description":"Date and time when the code signature was generated and signed.","example":"2021-01-01T12:10:30Z","name":"code_signature.timestamp","type":"date"},"code_signature.trusted":{"category":"code_signature","description":"Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.","example":"true","name":"code_signature.trusted","type":"boolean"},"code_signature.valid":{"category":"code_signature","description":"Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.","example":"true","name":"code_signature.valid","type":"boolean"},"container.id":{"category":"container","description":"Unique container id.","name":"container.id","type":"keyword"},"container.image.name":{"category":"container","description":"Name of the image the container was built on.","name":"container.image.name","type":"keyword"},"container.image.tag":{"category":"container","description":"Container image tags.","name":"container.image.tag","type":"keyword"},"container.labels":{"category":"container","description":"Image labels.","name":"container.labels","type":"object"},"container.name":{"category":"container","description":"Container name.","name":"container.name","type":"keyword"},"container.runtime":{"category":"container","description":"Runtime managing this container.","example":"docker","name":"container.runtime","type":"keyword"},"data_stream.dataset":{"category":"data_stream","description":"The field can contain anything that makes sense to signify the source of the data. Examples include `nginx.access`, `prometheus`, `endpoint` etc. For data streams that otherwise fit, but that do not have dataset set we use the value \"generic\" for the dataset value. `event.dataset` should have the same value as `data_stream.dataset`. Beyond the Elasticsearch data stream naming criteria noted above, the `dataset` value has additional restrictions: * Must not contain `-` * No longer than 100 characters","example":"nginx.access","name":"data_stream.dataset","type":"constant_keyword"},"data_stream.namespace":{"category":"data_stream","description":"A user defined namespace. Namespaces are useful to allow grouping of data. Many users already organize their indices this way, and the data stream naming scheme now provides this best practice as a default. Many users will populate this field with `default`. If no value is used, it falls back to `default`. Beyond the Elasticsearch index naming criteria noted above, `namespace` value has the additional restrictions: * Must not contain `-` * No longer than 100 characters","example":"production","name":"data_stream.namespace","type":"constant_keyword"},"data_stream.type":{"category":"data_stream","description":"An overarching type for the data stream. Currently allowed values are \"logs\" and \"metrics\". We expect to also add \"traces\" and \"synthetics\" in the near future.","example":"logs","name":"data_stream.type","type":"constant_keyword"},"destination.address":{"category":"destination","description":"Some event destination addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.","name":"destination.address","type":"keyword"},"destination.as.number":{"category":"destination","description":"Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.","example":15169,"name":"destination.as.number","type":"long"},"destination.as.organization.name":{"category":"destination","description":"Organization name.","example":"Google LLC","name":"destination.as.organization.name","type":"keyword"},"destination.bytes":{"category":"destination","description":"Bytes sent from the destination to the source.","example":184,"name":"destination.bytes","type":"long","format":"bytes"},"destination.domain":{"category":"destination","description":"Destination domain.","name":"destination.domain","type":"keyword"},"destination.geo.city_name":{"category":"destination","description":"City name.","example":"Montreal","name":"destination.geo.city_name","type":"keyword"},"destination.geo.continent_code":{"category":"destination","description":"Two-letter code representing continent's name.","example":"NA","name":"destination.geo.continent_code","type":"keyword"},"destination.geo.continent_name":{"category":"destination","description":"Name of the continent.","example":"North America","name":"destination.geo.continent_name","type":"keyword"},"destination.geo.country_iso_code":{"category":"destination","description":"Country ISO code.","example":"CA","name":"destination.geo.country_iso_code","type":"keyword"},"destination.geo.country_name":{"category":"destination","description":"Country name.","example":"Canada","name":"destination.geo.country_name","type":"keyword"},"destination.geo.location":{"category":"destination","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"destination.geo.location","type":"geo_point"},"destination.geo.name":{"category":"destination","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"destination.geo.name","type":"keyword"},"destination.geo.postal_code":{"category":"destination","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"destination.geo.postal_code","type":"keyword"},"destination.geo.region_iso_code":{"category":"destination","description":"Region ISO code.","example":"CA-QC","name":"destination.geo.region_iso_code","type":"keyword"},"destination.geo.region_name":{"category":"destination","description":"Region name.","example":"Quebec","name":"destination.geo.region_name","type":"keyword"},"destination.geo.timezone":{"category":"destination","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"destination.geo.timezone","type":"keyword"},"destination.ip":{"category":"destination","description":"IP address of the destination (IPv4 or IPv6).","name":"destination.ip","type":"ip"},"destination.mac":{"category":"destination","description":"MAC address of the destination. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.","example":"00-00-5E-00-53-23","name":"destination.mac","type":"keyword"},"destination.nat.ip":{"category":"destination","description":"Translated ip of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.","name":"destination.nat.ip","type":"ip"},"destination.nat.port":{"category":"destination","description":"Port the source session is translated to by NAT Device. Typically used with load balancers, firewalls, or routers.","name":"destination.nat.port","type":"long","format":"string"},"destination.packets":{"category":"destination","description":"Packets sent from the destination to the source.","example":12,"name":"destination.packets","type":"long"},"destination.port":{"category":"destination","description":"Port of the destination.","name":"destination.port","type":"long","format":"string"},"destination.registered_domain":{"category":"destination","description":"The highest registered destination domain, stripped of the subdomain. For example, the registered domain for \"foo.example.com\" is \"example.com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as \"co.uk\".","example":"example.com","name":"destination.registered_domain","type":"keyword"},"destination.subdomain":{"category":"destination","description":"The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of \"www.east.mydomain.co.uk\" is \"east\". If the domain has multiple levels of subdomain, such as \"sub2.sub1.example.com\", the subdomain field should contain \"sub2.sub1\", with no trailing period.","example":"east","name":"destination.subdomain","type":"keyword"},"destination.top_level_domain":{"category":"destination","description":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is \"com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as \"co.uk\".","example":"co.uk","name":"destination.top_level_domain","type":"keyword"},"destination.user.domain":{"category":"destination","description":"Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.","name":"destination.user.domain","type":"keyword"},"destination.user.email":{"category":"destination","description":"User email address.","name":"destination.user.email","type":"keyword"},"destination.user.full_name":{"category":"destination","description":"User's full name, if available.","example":"Albert Einstein","name":"destination.user.full_name","type":"keyword"},"destination.user.group.domain":{"category":"destination","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"destination.user.group.domain","type":"keyword"},"destination.user.group.id":{"category":"destination","description":"Unique identifier for the group on the system/platform.","name":"destination.user.group.id","type":"keyword"},"destination.user.group.name":{"category":"destination","description":"Name of the group.","name":"destination.user.group.name","type":"keyword"},"destination.user.hash":{"category":"destination","description":"Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.","name":"destination.user.hash","type":"keyword"},"destination.user.id":{"category":"destination","description":"Unique identifier of the user.","example":"S-1-5-21-202424912787-2692429404-2351956786-1000","name":"destination.user.id","type":"keyword"},"destination.user.name":{"category":"destination","description":"Short name or login of the user.","example":"a.einstein","name":"destination.user.name","type":"keyword"},"destination.user.roles":{"category":"destination","description":"Array of user roles at the time of the event.","example":"[\"kibana_admin\", \"reporting_user\"]","name":"destination.user.roles","type":"keyword"},"dll.code_signature.digest_algorithm":{"category":"dll","description":"The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.","example":"sha256","name":"dll.code_signature.digest_algorithm","type":"keyword"},"dll.code_signature.exists":{"category":"dll","description":"Boolean to capture if a signature is present.","example":"true","name":"dll.code_signature.exists","type":"boolean"},"dll.code_signature.signing_id":{"category":"dll","description":"The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.","example":"com.apple.xpc.proxy","name":"dll.code_signature.signing_id","type":"keyword"},"dll.code_signature.status":{"category":"dll","description":"Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.","example":"ERROR_UNTRUSTED_ROOT","name":"dll.code_signature.status","type":"keyword"},"dll.code_signature.subject_name":{"category":"dll","description":"Subject name of the code signer","example":"Microsoft Corporation","name":"dll.code_signature.subject_name","type":"keyword"},"dll.code_signature.team_id":{"category":"dll","description":"The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.","example":"EQHXZ8M8AV","name":"dll.code_signature.team_id","type":"keyword"},"dll.code_signature.timestamp":{"category":"dll","description":"Date and time when the code signature was generated and signed.","example":"2021-01-01T12:10:30Z","name":"dll.code_signature.timestamp","type":"date"},"dll.code_signature.trusted":{"category":"dll","description":"Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.","example":"true","name":"dll.code_signature.trusted","type":"boolean"},"dll.code_signature.valid":{"category":"dll","description":"Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.","example":"true","name":"dll.code_signature.valid","type":"boolean"},"dll.hash.md5":{"category":"dll","description":"MD5 hash.","name":"dll.hash.md5","type":"keyword"},"dll.hash.sha1":{"category":"dll","description":"SHA1 hash.","name":"dll.hash.sha1","type":"keyword"},"dll.hash.sha256":{"category":"dll","description":"SHA256 hash.","name":"dll.hash.sha256","type":"keyword"},"dll.hash.sha512":{"category":"dll","description":"SHA512 hash.","name":"dll.hash.sha512","type":"keyword"},"dll.hash.ssdeep":{"category":"dll","description":"SSDEEP hash.","name":"dll.hash.ssdeep","type":"keyword"},"dll.name":{"category":"dll","description":"Name of the library. This generally maps to the name of the file on disk.","example":"kernel32.dll","name":"dll.name","type":"keyword"},"dll.path":{"category":"dll","description":"Full file path of the library.","example":"C:\\Windows\\System32\\kernel32.dll","name":"dll.path","type":"keyword"},"dll.pe.architecture":{"category":"dll","description":"CPU architecture target for the file.","example":"x64","name":"dll.pe.architecture","type":"keyword"},"dll.pe.company":{"category":"dll","description":"Internal company name of the file, provided at compile-time.","example":"Microsoft Corporation","name":"dll.pe.company","type":"keyword"},"dll.pe.description":{"category":"dll","description":"Internal description of the file, provided at compile-time.","example":"Paint","name":"dll.pe.description","type":"keyword"},"dll.pe.file_version":{"category":"dll","description":"Internal version of the file, provided at compile-time.","example":"6.3.9600.17415","name":"dll.pe.file_version","type":"keyword"},"dll.pe.imphash":{"category":"dll","description":"A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.","example":"0c6803c4e922103c4dca5963aad36ddf","name":"dll.pe.imphash","type":"keyword"},"dll.pe.original_file_name":{"category":"dll","description":"Internal name of the file, provided at compile-time.","example":"MSPAINT.EXE","name":"dll.pe.original_file_name","type":"keyword"},"dll.pe.product":{"category":"dll","description":"Internal product name of the file, provided at compile-time.","example":"Microsoft® Windows® Operating System","name":"dll.pe.product","type":"keyword"},"dns.answers":{"category":"dns","description":"An array containing an object for each answer section returned by the server. The main keys that should be present in these objects are defined by ECS. Records that have more information may contain more keys than what ECS defines. Not all DNS data sources give all details about DNS answers. At minimum, answer objects must contain the `data` key. If more information is available, map as much of it to ECS as possible, and add any additional fields to the answer objects as custom fields.","name":"dns.answers","type":"object"},"dns.answers.class":{"category":"dns","description":"The class of DNS data contained in this resource record.","example":"IN","name":"dns.answers.class","type":"keyword"},"dns.answers.data":{"category":"dns","description":"The data describing the resource. The meaning of this data depends on the type and class of the resource record.","example":"10.10.10.10","name":"dns.answers.data","type":"keyword"},"dns.answers.name":{"category":"dns","description":"The domain name to which this resource record pertains. If a chain of CNAME is being resolved, each answer's `name` should be the one that corresponds with the answer's `data`. It should not simply be the original `question.name` repeated.","example":"www.example.com","name":"dns.answers.name","type":"keyword"},"dns.answers.ttl":{"category":"dns","description":"The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached.","example":180,"name":"dns.answers.ttl","type":"long"},"dns.answers.type":{"category":"dns","description":"The type of data contained in this resource record.","example":"CNAME","name":"dns.answers.type","type":"keyword"},"dns.header_flags":{"category":"dns","description":"Array of 2 letter DNS header flags. Expected values are: AA, TC, RD, RA, AD, CD, DO.","example":"[\"RD\", \"RA\"]","name":"dns.header_flags","type":"keyword"},"dns.id":{"category":"dns","description":"The DNS packet identifier assigned by the program that generated the query. The identifier is copied to the response.","example":62111,"name":"dns.id","type":"keyword"},"dns.op_code":{"category":"dns","description":"The DNS operation code that specifies the kind of query in the message. This value is set by the originator of a query and copied into the response.","example":"QUERY","name":"dns.op_code","type":"keyword"},"dns.question.class":{"category":"dns","description":"The class of records being queried.","example":"IN","name":"dns.question.class","type":"keyword"},"dns.question.name":{"category":"dns","description":"The name being queried. If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \\t, \\r, and \\n respectively.","example":"www.example.com","name":"dns.question.name","type":"keyword"},"dns.question.registered_domain":{"category":"dns","description":"The highest registered domain, stripped of the subdomain. For example, the registered domain for \"foo.example.com\" is \"example.com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as \"co.uk\".","example":"example.com","name":"dns.question.registered_domain","type":"keyword"},"dns.question.subdomain":{"category":"dns","description":"The subdomain is all of the labels under the registered_domain. If the domain has multiple levels of subdomain, such as \"sub2.sub1.example.com\", the subdomain field should contain \"sub2.sub1\", with no trailing period.","example":"www","name":"dns.question.subdomain","type":"keyword"},"dns.question.top_level_domain":{"category":"dns","description":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is \"com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as \"co.uk\".","example":"co.uk","name":"dns.question.top_level_domain","type":"keyword"},"dns.question.type":{"category":"dns","description":"The type of record being queried.","example":"AAAA","name":"dns.question.type","type":"keyword"},"dns.resolved_ip":{"category":"dns","description":"Array containing all IPs seen in `answers.data`. The `answers` array can be difficult to use, because of the variety of data formats it can contain. Extracting all IP addresses seen in there to `dns.resolved_ip` makes it possible to index them as IP addresses, and makes them easier to visualize and query for.","example":"[\"10.10.10.10\", \"10.10.10.11\"]","name":"dns.resolved_ip","type":"ip"},"dns.response_code":{"category":"dns","description":"The DNS response code.","example":"NOERROR","name":"dns.response_code","type":"keyword"},"dns.type":{"category":"dns","description":"The type of DNS event captured, query or answer. If your source of DNS events only gives you DNS queries, you should only create dns events of type `dns.type:query`. If your source of DNS events gives you answers as well, you should create one event per query (optionally as soon as the query is seen). And a second event containing all query details as well as an array of answers.","example":"answer","name":"dns.type","type":"keyword"},"ecs.version":{"category":"ecs","description":"ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events.","example":"1.0.0","name":"ecs.version","type":"keyword"},"elf.architecture":{"category":"elf","description":"Machine architecture of the ELF file.","example":"x86-64","name":"elf.architecture","type":"keyword"},"elf.byte_order":{"category":"elf","description":"Byte sequence of ELF file.","example":"Little Endian","name":"elf.byte_order","type":"keyword"},"elf.cpu_type":{"category":"elf","description":"CPU type of the ELF file.","example":"Intel","name":"elf.cpu_type","type":"keyword"},"elf.creation_date":{"category":"elf","description":"Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.","name":"elf.creation_date","type":"date"},"elf.exports":{"category":"elf","description":"List of exported element names and types.","name":"elf.exports","type":"flattened"},"elf.header.abi_version":{"category":"elf","description":"Version of the ELF Application Binary Interface (ABI).","name":"elf.header.abi_version","type":"keyword"},"elf.header.class":{"category":"elf","description":"Header class of the ELF file.","name":"elf.header.class","type":"keyword"},"elf.header.data":{"category":"elf","description":"Data table of the ELF header.","name":"elf.header.data","type":"keyword"},"elf.header.entrypoint":{"category":"elf","description":"Header entrypoint of the ELF file.","name":"elf.header.entrypoint","type":"long","format":"string"},"elf.header.object_version":{"category":"elf","description":"\"0x1\" for original ELF files.","name":"elf.header.object_version","type":"keyword"},"elf.header.os_abi":{"category":"elf","description":"Application Binary Interface (ABI) of the Linux OS.","name":"elf.header.os_abi","type":"keyword"},"elf.header.type":{"category":"elf","description":"Header type of the ELF file.","name":"elf.header.type","type":"keyword"},"elf.header.version":{"category":"elf","description":"Version of the ELF header.","name":"elf.header.version","type":"keyword"},"elf.imports":{"category":"elf","description":"List of imported element names and types.","name":"elf.imports","type":"flattened"},"elf.sections":{"category":"elf","description":"An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.","name":"elf.sections","type":"nested"},"elf.sections.chi2":{"category":"elf","description":"Chi-square probability distribution of the section.","name":"elf.sections.chi2","type":"long","format":"number"},"elf.sections.entropy":{"category":"elf","description":"Shannon entropy calculation from the section.","name":"elf.sections.entropy","type":"long","format":"number"},"elf.sections.flags":{"category":"elf","description":"ELF Section List flags.","name":"elf.sections.flags","type":"keyword"},"elf.sections.name":{"category":"elf","description":"ELF Section List name.","name":"elf.sections.name","type":"keyword"},"elf.sections.physical_offset":{"category":"elf","description":"ELF Section List offset.","name":"elf.sections.physical_offset","type":"keyword"},"elf.sections.physical_size":{"category":"elf","description":"ELF Section List physical size.","name":"elf.sections.physical_size","type":"long","format":"bytes"},"elf.sections.type":{"category":"elf","description":"ELF Section List type.","name":"elf.sections.type","type":"keyword"},"elf.sections.virtual_address":{"category":"elf","description":"ELF Section List virtual address.","name":"elf.sections.virtual_address","type":"long","format":"string"},"elf.sections.virtual_size":{"category":"elf","description":"ELF Section List virtual size.","name":"elf.sections.virtual_size","type":"long","format":"string"},"elf.segments":{"category":"elf","description":"An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.","name":"elf.segments","type":"nested"},"elf.segments.sections":{"category":"elf","description":"ELF object segment sections.","name":"elf.segments.sections","type":"keyword"},"elf.segments.type":{"category":"elf","description":"ELF object segment type.","name":"elf.segments.type","type":"keyword"},"elf.shared_libraries":{"category":"elf","description":"List of shared libraries used by this ELF object.","name":"elf.shared_libraries","type":"keyword"},"elf.telfhash":{"category":"elf","description":"telfhash symbol hash for ELF file.","name":"elf.telfhash","type":"keyword"},"error.code":{"category":"error","description":"Error code describing the error.","name":"error.code","type":"keyword"},"error.id":{"category":"error","description":"Unique identifier for the error.","name":"error.id","type":"keyword"},"error.message":{"category":"error","description":"Error message.","name":"error.message","type":"match_only_text"},"error.stack_trace":{"category":"error","description":"The stack trace of this error in plain text.","name":"error.stack_trace","type":"wildcard"},"error.type":{"category":"error","description":"The type of the error, for example the class name of the exception.","example":"java.lang.NullPointerException","name":"error.type","type":"keyword"},"event.action":{"category":"event","description":"The action captured by the event. This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer.","example":"user-password-change","name":"event.action","type":"keyword"},"event.agent_id_status":{"category":"event","description":"Agents are normally responsible for populating the `agent.id` field value. If the system receiving events is capable of validating the value based on authentication information for the client then this field can be used to reflect the outcome of that validation. For example if the agent's connection is authenticated with mTLS and the client cert contains the ID of the agent to which the cert was issued then the `agent.id` value in events can be checked against the certificate. If the values match then `event.agent_id_status: verified` is added to the event, otherwise one of the other allowed values should be used. If no validation is performed then the field should be omitted. The allowed values are: `verified` - The `agent.id` field value matches expected value obtained from auth metadata. `mismatch` - The `agent.id` field value does not match the expected value obtained from auth metadata. `missing` - There was no `agent.id` field in the event to validate. `auth_metadata_missing` - There was no auth metadata or it was missing information about the agent ID.","example":"verified","name":"event.agent_id_status","type":"keyword"},"event.category":{"category":"event","description":"This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the \"big buckets\" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories.","example":"authentication","name":"event.category","type":"keyword"},"event.code":{"category":"event","description":"Identification code for this event, if one exists. Some event sources use event codes to identify messages unambiguously, regardless of message language or wording adjustments over time. An example of this is the Windows Event ID.","example":4648,"name":"event.code","type":"keyword"},"event.created":{"category":"event","description":"event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used.","example":"2016-05-23T08:05:34.857Z","name":"event.created","type":"date"},"event.dataset":{"category":"event","description":"Name of the dataset. If an event source publishes more than one type of log or events (e.g. access log, error log), the dataset is used to specify which one the event comes from. It's recommended but not required to start the dataset name with the module name, followed by a dot, then the dataset name.","example":"apache.access","name":"event.dataset","type":"keyword"},"event.duration":{"category":"event","description":"Duration of the event in nanoseconds. If event.start and event.end are known this value should be the difference between the end and start time.","name":"event.duration","type":"long","format":"duration"},"event.end":{"category":"event","description":"event.end contains the date when the event ended or when the activity was last observed.","name":"event.end","type":"date"},"event.hash":{"category":"event","description":"Hash (perhaps logstash fingerprint) of raw field to be able to demonstrate log integrity.","example":"123456789012345678901234567890ABCD","name":"event.hash","type":"keyword"},"event.id":{"category":"event","description":"Unique ID to describe the event.","example":"8a4f500d","name":"event.id","type":"keyword"},"event.ingested":{"category":"event","description":"Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`.","example":"2016-05-23T08:05:35.101Z","name":"event.ingested","type":"date"},"event.kind":{"category":"event","description":"This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not.","example":"alert","name":"event.kind","type":"keyword"},"event.module":{"category":"event","description":"Name of the module this data is coming from. If your monitoring agent supports the concept of modules or plugins to process events of a given source (e.g. Apache logs), `event.module` should contain the name of this module.","example":"apache","name":"event.module","type":"keyword"},"event.original":{"category":"event","description":"Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`.","example":"Sep 19 08:26:10 host CEF:0|Security| threatmanager|1.0|100| worm successfully stopped|10|src=10.0.0.1 dst=2.1.2.2spt=1232","name":"event.original","type":"keyword"},"event.outcome":{"category":"event","description":"This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense.","example":"success","name":"event.outcome","type":"keyword"},"event.provider":{"category":"event","description":"Source of the event. Event transports such as Syslog or the Windows Event Log typically mention the source of an event. It can be the name of the software that generated the event (e.g. Sysmon, httpd), or of a subsystem of the operating system (kernel, Microsoft-Windows-Security-Auditing).","example":"kernel","name":"event.provider","type":"keyword"},"event.reason":{"category":"event","description":"Reason why this event happened, according to the source. This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`).","example":"Terminated an unexpected process","name":"event.reason","type":"keyword"},"event.reference":{"category":"event","description":"Reference URL linking to additional information about this event. This URL links to a static definition of this event. Alert events, indicated by `event.kind:alert`, are a common use case for this field.","example":"https://system.example.com/event/#0001234","name":"event.reference","type":"keyword"},"event.risk_score":{"category":"event","description":"Risk score or priority of the event (e.g. security solutions). Use your system's original value here.","name":"event.risk_score","type":"float"},"event.risk_score_norm":{"category":"event","description":"Normalized risk score or priority of the event, on a scale of 0 to 100. This is mainly useful if you use more than one system that assigns risk scores, and you want to see a normalized value across all systems.","name":"event.risk_score_norm","type":"float"},"event.sequence":{"category":"event","description":"Sequence number of the event. The sequence number is a value published by some event sources, to make the exact ordering of events unambiguous, regardless of the timestamp precision.","name":"event.sequence","type":"long","format":"string"},"event.severity":{"category":"event","description":"The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`.","example":7,"name":"event.severity","type":"long","format":"string"},"event.start":{"category":"event","description":"event.start contains the date when the event started or when the activity was first observed.","name":"event.start","type":"date"},"event.timezone":{"category":"event","description":"This field should be populated when the event's timestamp does not include timezone information already (e.g. default Syslog timestamps). It's optional otherwise. Acceptable timezone formats are: a canonical ID (e.g. \"Europe/Amsterdam\"), abbreviated (e.g. \"EST\") or an HH:mm differential (e.g. \"-05:00\").","name":"event.timezone","type":"keyword"},"event.type":{"category":"event","description":"This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization \"sub-bucket\" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types.","name":"event.type","type":"keyword"},"event.url":{"category":"event","description":"URL linking to an external system to continue investigation of this event. This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field.","example":"https://mysystem.example.com/alert/5271dedb-f5b0-4218-87f0-4ac4870a38fe","name":"event.url","type":"keyword"},"faas.coldstart":{"category":"faas","description":"Boolean value indicating a cold start of a function.","name":"faas.coldstart","type":"boolean"},"faas.execution":{"category":"faas","description":"The execution ID of the current function execution.","example":"af9d5aa4-a685-4c5f-a22b-444f80b3cc28","name":"faas.execution","type":"keyword"},"faas.trigger":{"category":"faas","description":"Details about the function trigger.","name":"faas.trigger","type":"nested"},"faas.trigger.request_id":{"category":"faas","description":"The ID of the trigger request , message, event, etc.","example":123456789,"name":"faas.trigger.request_id","type":"keyword"},"faas.trigger.type":{"category":"faas","description":"The trigger for the function execution. Expected values are: * http * pubsub * datasource * timer * other","example":"http","name":"faas.trigger.type","type":"keyword"},"file.accessed":{"category":"file","description":"Last time the file was accessed. Note that not all filesystems keep track of access time.","name":"file.accessed","type":"date"},"file.attributes":{"category":"file","description":"Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.","example":"[\"readonly\", \"system\"]","name":"file.attributes","type":"keyword"},"file.code_signature.digest_algorithm":{"category":"file","description":"The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.","example":"sha256","name":"file.code_signature.digest_algorithm","type":"keyword"},"file.code_signature.exists":{"category":"file","description":"Boolean to capture if a signature is present.","example":"true","name":"file.code_signature.exists","type":"boolean"},"file.code_signature.signing_id":{"category":"file","description":"The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.","example":"com.apple.xpc.proxy","name":"file.code_signature.signing_id","type":"keyword"},"file.code_signature.status":{"category":"file","description":"Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.","example":"ERROR_UNTRUSTED_ROOT","name":"file.code_signature.status","type":"keyword"},"file.code_signature.subject_name":{"category":"file","description":"Subject name of the code signer","example":"Microsoft Corporation","name":"file.code_signature.subject_name","type":"keyword"},"file.code_signature.team_id":{"category":"file","description":"The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.","example":"EQHXZ8M8AV","name":"file.code_signature.team_id","type":"keyword"},"file.code_signature.timestamp":{"category":"file","description":"Date and time when the code signature was generated and signed.","example":"2021-01-01T12:10:30Z","name":"file.code_signature.timestamp","type":"date"},"file.code_signature.trusted":{"category":"file","description":"Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.","example":"true","name":"file.code_signature.trusted","type":"boolean"},"file.code_signature.valid":{"category":"file","description":"Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.","example":"true","name":"file.code_signature.valid","type":"boolean"},"file.created":{"category":"file","description":"File creation time. Note that not all filesystems store the creation time.","name":"file.created","type":"date"},"file.ctime":{"category":"file","description":"Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.","name":"file.ctime","type":"date"},"file.device":{"category":"file","description":"Device that is the source of the file.","example":"sda","name":"file.device","type":"keyword"},"file.directory":{"category":"file","description":"Directory where the file is located. It should include the drive letter, when appropriate.","example":"/home/alice","name":"file.directory","type":"keyword"},"file.drive_letter":{"category":"file","description":"Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.","example":"C","name":"file.drive_letter","type":"keyword"},"file.elf.architecture":{"category":"file","description":"Machine architecture of the ELF file.","example":"x86-64","name":"file.elf.architecture","type":"keyword"},"file.elf.byte_order":{"category":"file","description":"Byte sequence of ELF file.","example":"Little Endian","name":"file.elf.byte_order","type":"keyword"},"file.elf.cpu_type":{"category":"file","description":"CPU type of the ELF file.","example":"Intel","name":"file.elf.cpu_type","type":"keyword"},"file.elf.creation_date":{"category":"file","description":"Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.","name":"file.elf.creation_date","type":"date"},"file.elf.exports":{"category":"file","description":"List of exported element names and types.","name":"file.elf.exports","type":"flattened"},"file.elf.header.abi_version":{"category":"file","description":"Version of the ELF Application Binary Interface (ABI).","name":"file.elf.header.abi_version","type":"keyword"},"file.elf.header.class":{"category":"file","description":"Header class of the ELF file.","name":"file.elf.header.class","type":"keyword"},"file.elf.header.data":{"category":"file","description":"Data table of the ELF header.","name":"file.elf.header.data","type":"keyword"},"file.elf.header.entrypoint":{"category":"file","description":"Header entrypoint of the ELF file.","name":"file.elf.header.entrypoint","type":"long","format":"string"},"file.elf.header.object_version":{"category":"file","description":"\"0x1\" for original ELF files.","name":"file.elf.header.object_version","type":"keyword"},"file.elf.header.os_abi":{"category":"file","description":"Application Binary Interface (ABI) of the Linux OS.","name":"file.elf.header.os_abi","type":"keyword"},"file.elf.header.type":{"category":"file","description":"Header type of the ELF file.","name":"file.elf.header.type","type":"keyword"},"file.elf.header.version":{"category":"file","description":"Version of the ELF header.","name":"file.elf.header.version","type":"keyword"},"file.elf.imports":{"category":"file","description":"List of imported element names and types.","name":"file.elf.imports","type":"flattened"},"file.elf.sections":{"category":"file","description":"An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.","name":"file.elf.sections","type":"nested"},"file.elf.sections.chi2":{"category":"file","description":"Chi-square probability distribution of the section.","name":"file.elf.sections.chi2","type":"long","format":"number"},"file.elf.sections.entropy":{"category":"file","description":"Shannon entropy calculation from the section.","name":"file.elf.sections.entropy","type":"long","format":"number"},"file.elf.sections.flags":{"category":"file","description":"ELF Section List flags.","name":"file.elf.sections.flags","type":"keyword"},"file.elf.sections.name":{"category":"file","description":"ELF Section List name.","name":"file.elf.sections.name","type":"keyword"},"file.elf.sections.physical_offset":{"category":"file","description":"ELF Section List offset.","name":"file.elf.sections.physical_offset","type":"keyword"},"file.elf.sections.physical_size":{"category":"file","description":"ELF Section List physical size.","name":"file.elf.sections.physical_size","type":"long","format":"bytes"},"file.elf.sections.type":{"category":"file","description":"ELF Section List type.","name":"file.elf.sections.type","type":"keyword"},"file.elf.sections.virtual_address":{"category":"file","description":"ELF Section List virtual address.","name":"file.elf.sections.virtual_address","type":"long","format":"string"},"file.elf.sections.virtual_size":{"category":"file","description":"ELF Section List virtual size.","name":"file.elf.sections.virtual_size","type":"long","format":"string"},"file.elf.segments":{"category":"file","description":"An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.","name":"file.elf.segments","type":"nested"},"file.elf.segments.sections":{"category":"file","description":"ELF object segment sections.","name":"file.elf.segments.sections","type":"keyword"},"file.elf.segments.type":{"category":"file","description":"ELF object segment type.","name":"file.elf.segments.type","type":"keyword"},"file.elf.shared_libraries":{"category":"file","description":"List of shared libraries used by this ELF object.","name":"file.elf.shared_libraries","type":"keyword"},"file.elf.telfhash":{"category":"file","description":"telfhash symbol hash for ELF file.","name":"file.elf.telfhash","type":"keyword"},"file.extension":{"category":"file","description":"File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured (\"gz\", not \"tar.gz\").","example":"png","name":"file.extension","type":"keyword"},"file.fork_name":{"category":"file","description":"A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.","example":"Zone.Identifer","name":"file.fork_name","type":"keyword"},"file.gid":{"category":"file","description":"Primary group ID (GID) of the file.","example":"1001","name":"file.gid","type":"keyword"},"file.group":{"category":"file","description":"Primary group name of the file.","example":"alice","name":"file.group","type":"keyword"},"file.hash.md5":{"category":"file","description":"MD5 hash.","name":"file.hash.md5","type":"keyword"},"file.hash.sha1":{"category":"file","description":"SHA1 hash.","name":"file.hash.sha1","type":"keyword"},"file.hash.sha256":{"category":"file","description":"SHA256 hash.","name":"file.hash.sha256","type":"keyword"},"file.hash.sha512":{"category":"file","description":"SHA512 hash.","name":"file.hash.sha512","type":"keyword"},"file.hash.ssdeep":{"category":"file","description":"SSDEEP hash.","name":"file.hash.ssdeep","type":"keyword"},"file.inode":{"category":"file","description":"Inode representing the file in the filesystem.","example":"256383","name":"file.inode","type":"keyword"},"file.mime_type":{"category":"file","description":"MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.","name":"file.mime_type","type":"keyword"},"file.mode":{"category":"file","description":"Mode of the file in octal representation.","example":"0640","name":"file.mode","type":"keyword"},"file.mtime":{"category":"file","description":"Last time the file content was modified.","name":"file.mtime","type":"date"},"file.name":{"category":"file","description":"Name of the file including the extension, without the directory.","example":"example.png","name":"file.name","type":"keyword"},"file.owner":{"category":"file","description":"File owner's username.","example":"alice","name":"file.owner","type":"keyword"},"file.path":{"category":"file","description":"Full path to the file, including the file name. It should include the drive letter, when appropriate.","example":"/home/alice/example.png","name":"file.path","type":"keyword"},"file.pe.architecture":{"category":"file","description":"CPU architecture target for the file.","example":"x64","name":"file.pe.architecture","type":"keyword"},"file.pe.company":{"category":"file","description":"Internal company name of the file, provided at compile-time.","example":"Microsoft Corporation","name":"file.pe.company","type":"keyword"},"file.pe.description":{"category":"file","description":"Internal description of the file, provided at compile-time.","example":"Paint","name":"file.pe.description","type":"keyword"},"file.pe.file_version":{"category":"file","description":"Internal version of the file, provided at compile-time.","example":"6.3.9600.17415","name":"file.pe.file_version","type":"keyword"},"file.pe.imphash":{"category":"file","description":"A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.","example":"0c6803c4e922103c4dca5963aad36ddf","name":"file.pe.imphash","type":"keyword"},"file.pe.original_file_name":{"category":"file","description":"Internal name of the file, provided at compile-time.","example":"MSPAINT.EXE","name":"file.pe.original_file_name","type":"keyword"},"file.pe.product":{"category":"file","description":"Internal product name of the file, provided at compile-time.","example":"Microsoft® Windows® Operating System","name":"file.pe.product","type":"keyword"},"file.size":{"category":"file","description":"File size in bytes. Only relevant when `file.type` is \"file\".","example":16384,"name":"file.size","type":"long"},"file.target_path":{"category":"file","description":"Target path for symlinks.","name":"file.target_path","type":"keyword"},"file.type":{"category":"file","description":"File type (file, dir, or symlink).","example":"file","name":"file.type","type":"keyword"},"file.uid":{"category":"file","description":"The user ID (UID) or security identifier (SID) of the file owner.","example":"1001","name":"file.uid","type":"keyword"},"file.x509.alternative_names":{"category":"file","description":"List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.","example":"*.elastic.co","name":"file.x509.alternative_names","type":"keyword"},"file.x509.issuer.common_name":{"category":"file","description":"List of common name (CN) of issuing certificate authority.","example":"Example SHA2 High Assurance Server CA","name":"file.x509.issuer.common_name","type":"keyword"},"file.x509.issuer.country":{"category":"file","description":"List of country (C) codes","example":"US","name":"file.x509.issuer.country","type":"keyword"},"file.x509.issuer.distinguished_name":{"category":"file","description":"Distinguished name (DN) of issuing certificate authority.","example":"C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA","name":"file.x509.issuer.distinguished_name","type":"keyword"},"file.x509.issuer.locality":{"category":"file","description":"List of locality names (L)","example":"Mountain View","name":"file.x509.issuer.locality","type":"keyword"},"file.x509.issuer.organization":{"category":"file","description":"List of organizations (O) of issuing certificate authority.","example":"Example Inc","name":"file.x509.issuer.organization","type":"keyword"},"file.x509.issuer.organizational_unit":{"category":"file","description":"List of organizational units (OU) of issuing certificate authority.","example":"www.example.com","name":"file.x509.issuer.organizational_unit","type":"keyword"},"file.x509.issuer.state_or_province":{"category":"file","description":"List of state or province names (ST, S, or P)","example":"California","name":"file.x509.issuer.state_or_province","type":"keyword"},"file.x509.not_after":{"category":"file","description":"Time at which the certificate is no longer considered valid.","example":"\"2020-07-16T03:15:39.000Z\"","name":"file.x509.not_after","type":"date"},"file.x509.not_before":{"category":"file","description":"Time at which the certificate is first considered valid.","example":"\"2019-08-16T01:40:25.000Z\"","name":"file.x509.not_before","type":"date"},"file.x509.public_key_algorithm":{"category":"file","description":"Algorithm used to generate the public key.","example":"RSA","name":"file.x509.public_key_algorithm","type":"keyword"},"file.x509.public_key_curve":{"category":"file","description":"The curve used by the elliptic curve public key algorithm. This is algorithm specific.","example":"nistp521","name":"file.x509.public_key_curve","type":"keyword"},"file.x509.public_key_exponent":{"category":"file","description":"Exponent used to derive the public key. This is algorithm specific.","example":65537,"name":"file.x509.public_key_exponent","type":"long"},"file.x509.public_key_size":{"category":"file","description":"The size of the public key space in bits.","example":2048,"name":"file.x509.public_key_size","type":"long"},"file.x509.serial_number":{"category":"file","description":"Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.","example":"55FBB9C7DEBF09809D12CCAA","name":"file.x509.serial_number","type":"keyword"},"file.x509.signature_algorithm":{"category":"file","description":"Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.","example":"SHA256-RSA","name":"file.x509.signature_algorithm","type":"keyword"},"file.x509.subject.common_name":{"category":"file","description":"List of common names (CN) of subject.","example":"shared.global.example.net","name":"file.x509.subject.common_name","type":"keyword"},"file.x509.subject.country":{"category":"file","description":"List of country (C) code","example":"US","name":"file.x509.subject.country","type":"keyword"},"file.x509.subject.distinguished_name":{"category":"file","description":"Distinguished name (DN) of the certificate subject entity.","example":"C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net","name":"file.x509.subject.distinguished_name","type":"keyword"},"file.x509.subject.locality":{"category":"file","description":"List of locality names (L)","example":"San Francisco","name":"file.x509.subject.locality","type":"keyword"},"file.x509.subject.organization":{"category":"file","description":"List of organizations (O) of subject.","example":"Example, Inc.","name":"file.x509.subject.organization","type":"keyword"},"file.x509.subject.organizational_unit":{"category":"file","description":"List of organizational units (OU) of subject.","name":"file.x509.subject.organizational_unit","type":"keyword"},"file.x509.subject.state_or_province":{"category":"file","description":"List of state or province names (ST, S, or P)","example":"California","name":"file.x509.subject.state_or_province","type":"keyword"},"file.x509.version_number":{"category":"file","description":"Version of x509 format.","example":3,"name":"file.x509.version_number","type":"keyword"},"geo.city_name":{"category":"geo","description":"City name.","example":"Montreal","name":"geo.city_name","type":"keyword"},"geo.continent_code":{"category":"geo","description":"Two-letter code representing continent's name.","example":"NA","name":"geo.continent_code","type":"keyword"},"geo.continent_name":{"category":"geo","description":"Name of the continent.","example":"North America","name":"geo.continent_name","type":"keyword"},"geo.country_iso_code":{"category":"geo","description":"Country ISO code.","example":"CA","name":"geo.country_iso_code","type":"keyword"},"geo.country_name":{"category":"geo","description":"Country name.","example":"Canada","name":"geo.country_name","type":"keyword"},"geo.location":{"category":"geo","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"geo.location","type":"geo_point"},"geo.name":{"category":"geo","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"geo.name","type":"keyword"},"geo.postal_code":{"category":"geo","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"geo.postal_code","type":"keyword"},"geo.region_iso_code":{"category":"geo","description":"Region ISO code.","example":"CA-QC","name":"geo.region_iso_code","type":"keyword"},"geo.region_name":{"category":"geo","description":"Region name.","example":"Quebec","name":"geo.region_name","type":"keyword"},"geo.timezone":{"category":"geo","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"geo.timezone","type":"keyword"},"group.domain":{"category":"group","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"group.domain","type":"keyword"},"group.id":{"category":"group","description":"Unique identifier for the group on the system/platform.","name":"group.id","type":"keyword"},"group.name":{"category":"group","description":"Name of the group.","name":"group.name","type":"keyword"},"hash.md5":{"category":"hash","description":"MD5 hash.","name":"hash.md5","type":"keyword"},"hash.sha1":{"category":"hash","description":"SHA1 hash.","name":"hash.sha1","type":"keyword"},"hash.sha256":{"category":"hash","description":"SHA256 hash.","name":"hash.sha256","type":"keyword"},"hash.sha512":{"category":"hash","description":"SHA512 hash.","name":"hash.sha512","type":"keyword"},"hash.ssdeep":{"category":"hash","description":"SSDEEP hash.","name":"hash.ssdeep","type":"keyword"},"host.architecture":{"category":"host","description":"Operating system architecture.","example":"x86_64","name":"host.architecture","type":"keyword"},"host.cpu.usage":{"category":"host","description":"Percent CPU used which is normalized by the number of CPU cores and it ranges from 0 to 1. Scaling factor: 1000. For example: For a two core host, this value should be the average of the two cores, between 0 and 1.","name":"host.cpu.usage","type":"scaled_float"},"host.disk.read.bytes":{"category":"host","description":"The total number of bytes (gauge) read successfully (aggregated from all disks) since the last metric collection.","name":"host.disk.read.bytes","type":"long"},"host.disk.write.bytes":{"category":"host","description":"The total number of bytes (gauge) written successfully (aggregated from all disks) since the last metric collection.","name":"host.disk.write.bytes","type":"long"},"host.domain":{"category":"host","description":"Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider.","example":"CONTOSO","name":"host.domain","type":"keyword"},"host.geo.city_name":{"category":"host","description":"City name.","example":"Montreal","name":"host.geo.city_name","type":"keyword"},"host.geo.continent_code":{"category":"host","description":"Two-letter code representing continent's name.","example":"NA","name":"host.geo.continent_code","type":"keyword"},"host.geo.continent_name":{"category":"host","description":"Name of the continent.","example":"North America","name":"host.geo.continent_name","type":"keyword"},"host.geo.country_iso_code":{"category":"host","description":"Country ISO code.","example":"CA","name":"host.geo.country_iso_code","type":"keyword"},"host.geo.country_name":{"category":"host","description":"Country name.","example":"Canada","name":"host.geo.country_name","type":"keyword"},"host.geo.location":{"category":"host","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"host.geo.location","type":"geo_point"},"host.geo.name":{"category":"host","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"host.geo.name","type":"keyword"},"host.geo.postal_code":{"category":"host","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"host.geo.postal_code","type":"keyword"},"host.geo.region_iso_code":{"category":"host","description":"Region ISO code.","example":"CA-QC","name":"host.geo.region_iso_code","type":"keyword"},"host.geo.region_name":{"category":"host","description":"Region name.","example":"Quebec","name":"host.geo.region_name","type":"keyword"},"host.geo.timezone":{"category":"host","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"host.geo.timezone","type":"keyword"},"host.hostname":{"category":"host","description":"Hostname of the host. It normally contains what the `hostname` command returns on the host machine.","name":"host.hostname","type":"keyword"},"host.id":{"category":"host","description":"Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`.","name":"host.id","type":"keyword"},"host.ip":{"category":"host","description":"Host ip addresses.","name":"host.ip","type":"ip"},"host.mac":{"category":"host","description":"Host MAC addresses. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.","example":"[\"00-00-5E-00-53-23\", \"00-00-5E-00-53-24\"]","name":"host.mac","type":"keyword"},"host.name":{"category":"host","description":"Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.","name":"host.name","type":"keyword"},"host.network.egress.bytes":{"category":"host","description":"The number of bytes (gauge) sent out on all network interfaces by the host since the last metric collection.","name":"host.network.egress.bytes","type":"long"},"host.network.egress.packets":{"category":"host","description":"The number of packets (gauge) sent out on all network interfaces by the host since the last metric collection.","name":"host.network.egress.packets","type":"long"},"host.network.ingress.bytes":{"category":"host","description":"The number of bytes received (gauge) on all network interfaces by the host since the last metric collection.","name":"host.network.ingress.bytes","type":"long"},"host.network.ingress.packets":{"category":"host","description":"The number of packets (gauge) received on all network interfaces by the host since the last metric collection.","name":"host.network.ingress.packets","type":"long"},"host.os.family":{"category":"host","description":"OS family (such as redhat, debian, freebsd, windows).","example":"debian","name":"host.os.family","type":"keyword"},"host.os.full":{"category":"host","description":"Operating system name, including the version or code name.","example":"Mac OS Mojave","name":"host.os.full","type":"keyword"},"host.os.kernel":{"category":"host","description":"Operating system kernel version as a raw string.","example":"4.4.0-112-generic","name":"host.os.kernel","type":"keyword"},"host.os.name":{"category":"host","description":"Operating system name, without the version.","example":"Mac OS X","name":"host.os.name","type":"keyword"},"host.os.platform":{"category":"host","description":"Operating system platform (such centos, ubuntu, windows).","example":"darwin","name":"host.os.platform","type":"keyword"},"host.os.type":{"category":"host","description":"Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.","example":"macos","name":"host.os.type","type":"keyword"},"host.os.version":{"category":"host","description":"Operating system version as a raw string.","example":"10.14.1","name":"host.os.version","type":"keyword"},"host.type":{"category":"host","description":"Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.","name":"host.type","type":"keyword"},"host.uptime":{"category":"host","description":"Seconds the host has been up.","example":1325,"name":"host.uptime","type":"long"},"http.request.body.bytes":{"category":"http","description":"Size in bytes of the request body.","example":887,"name":"http.request.body.bytes","type":"long","format":"bytes"},"http.request.body.content":{"category":"http","description":"The full HTTP request body.","example":"Hello world","name":"http.request.body.content","type":"wildcard"},"http.request.bytes":{"category":"http","description":"Total size in bytes of the request (body and headers).","example":1437,"name":"http.request.bytes","type":"long","format":"bytes"},"http.request.id":{"category":"http","description":"A unique identifier for each HTTP request to correlate logs between clients and servers in transactions. The id may be contained in a non-standard HTTP header, such as `X-Request-ID` or `X-Correlation-ID`.","example":"123e4567-e89b-12d3-a456-426614174000","name":"http.request.id","type":"keyword"},"http.request.method":{"category":"http","description":"HTTP request method. The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field.","example":"POST","name":"http.request.method","type":"keyword"},"http.request.mime_type":{"category":"http","description":"Mime type of the body of the request. This value must only be populated based on the content of the request body, not on the `Content-Type` header. Comparing the mime type of a request with the request's Content-Type header can be helpful in detecting threats or misconfigured clients.","example":"image/gif","name":"http.request.mime_type","type":"keyword"},"http.request.referrer":{"category":"http","description":"Referrer for this HTTP request.","example":"https://blog.example.com/","name":"http.request.referrer","type":"keyword"},"http.response.body.bytes":{"category":"http","description":"Size in bytes of the response body.","example":887,"name":"http.response.body.bytes","type":"long","format":"bytes"},"http.response.body.content":{"category":"http","description":"The full HTTP response body.","example":"Hello world","name":"http.response.body.content","type":"wildcard"},"http.response.bytes":{"category":"http","description":"Total size in bytes of the response (body and headers).","example":1437,"name":"http.response.bytes","type":"long","format":"bytes"},"http.response.mime_type":{"category":"http","description":"Mime type of the body of the response. This value must only be populated based on the content of the response body, not on the `Content-Type` header. Comparing the mime type of a response with the response's Content-Type header can be helpful in detecting misconfigured servers.","example":"image/gif","name":"http.response.mime_type","type":"keyword"},"http.response.status_code":{"category":"http","description":"HTTP response status code.","example":404,"name":"http.response.status_code","type":"long","format":"string"},"http.version":{"category":"http","description":"HTTP version.","example":1.1,"name":"http.version","type":"keyword"},"interface.alias":{"category":"interface","description":"Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.","example":"outside","name":"interface.alias","type":"keyword"},"interface.id":{"category":"interface","description":"Interface ID as reported by an observer (typically SNMP interface ID).","example":10,"name":"interface.id","type":"keyword"},"interface.name":{"category":"interface","description":"Interface name as reported by the system.","example":"eth0","name":"interface.name","type":"keyword"},"log.file.path":{"category":"log","description":"Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. If the event wasn't read from a log file, do not populate this field.","example":"/var/log/fun-times.log","name":"log.file.path","type":"keyword"},"log.level":{"category":"log","description":"Original log level of the log event. If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). Some examples are `warn`, `err`, `i`, `informational`.","example":"error","name":"log.level","type":"keyword"},"log.logger":{"category":"log","description":"The name of the logger inside an application. This is usually the name of the class which initialized the logger, or can be a custom name.","example":"org.elasticsearch.bootstrap.Bootstrap","name":"log.logger","type":"keyword"},"log.origin.file.line":{"category":"log","description":"The line number of the file containing the source code which originated the log event.","example":42,"name":"log.origin.file.line","type":"long"},"log.origin.file.name":{"category":"log","description":"The name of the file containing the source code which originated the log event. Note that this field is not meant to capture the log file. The correct field to capture the log file is `log.file.path`.","example":"Bootstrap.java","name":"log.origin.file.name","type":"keyword"},"log.origin.function":{"category":"log","description":"The name of the function or method which originated the log event.","example":"init","name":"log.origin.function","type":"keyword"},"log.syslog":{"category":"log","description":"The Syslog metadata of the event, if the event was transmitted via Syslog. Please see RFCs 5424 or 3164.","name":"log.syslog","type":"object"},"log.syslog.facility.code":{"category":"log","description":"The Syslog numeric facility of the log event, if available. According to RFCs 5424 and 3164, this value should be an integer between 0 and 23.","example":23,"name":"log.syslog.facility.code","type":"long","format":"string"},"log.syslog.facility.name":{"category":"log","description":"The Syslog text-based facility of the log event, if available.","example":"local7","name":"log.syslog.facility.name","type":"keyword"},"log.syslog.priority":{"category":"log","description":"Syslog numeric priority of the event, if available. According to RFCs 5424 and 3164, the priority is 8 * facility + severity. This number is therefore expected to contain a value between 0 and 191.","example":135,"name":"log.syslog.priority","type":"long","format":"string"},"log.syslog.severity.code":{"category":"log","description":"The Syslog numeric severity of the log event, if available. If the event source publishing via Syslog provides a different numeric severity value (e.g. firewall, IDS), your source's numeric severity should go to `event.severity`. If the event source does not specify a distinct severity, you can optionally copy the Syslog severity to `event.severity`.","example":3,"name":"log.syslog.severity.code","type":"long"},"log.syslog.severity.name":{"category":"log","description":"The Syslog numeric severity of the log event, if available. If the event source publishing via Syslog provides a different severity value (e.g. firewall, IDS), your source's text severity should go to `log.level`. If the event source does not specify a distinct severity, you can optionally copy the Syslog severity to `log.level`.","example":"Error","name":"log.syslog.severity.name","type":"keyword"},"network.application":{"category":"network","description":"When a specific application or service is identified from network connection details (source/dest IPs, ports, certificates, or wire format), this field captures the application's or service's name. For example, the original event identifies the network connection being from a specific web service in a `https` network connection, like `facebook` or `twitter`. The field value must be normalized to lowercase for querying.","example":"aim","name":"network.application","type":"keyword"},"network.bytes":{"category":"network","description":"Total bytes transferred in both directions. If `source.bytes` and `destination.bytes` are known, `network.bytes` is their sum.","example":368,"name":"network.bytes","type":"long","format":"bytes"},"network.community_id":{"category":"network","description":"A hash of source and destination IPs and ports, as well as the protocol used in a communication. This is a tool-agnostic standard to identify flows. Learn more at https://github.com/corelight/community-id-spec.","example":"1:hO+sN4H+MG5MY/8hIrXPqc4ZQz0=","name":"network.community_id","type":"keyword"},"network.direction":{"category":"network","description":"Direction of the network traffic. Recommended values are: * ingress * egress * inbound * outbound * internal * external * unknown When mapping events from a host-based monitoring context, populate this field from the host's point of view, using the values \"ingress\" or \"egress\". When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values \"inbound\", \"outbound\", \"internal\" or \"external\". Note that \"internal\" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that \"external\" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers.","example":"inbound","name":"network.direction","type":"keyword"},"network.forwarded_ip":{"category":"network","description":"Host IP address when the source IP address is the proxy.","example":"192.1.1.2","name":"network.forwarded_ip","type":"ip"},"network.iana_number":{"category":"network","description":"IANA Protocol Number (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Standardized list of protocols. This aligns well with NetFlow and sFlow related logs which use the IANA Protocol Number.","example":6,"name":"network.iana_number","type":"keyword"},"network.inner":{"category":"network","description":"Network.inner fields are added in addition to network.vlan fields to describe the innermost VLAN when q-in-q VLAN tagging is present. Allowed fields include vlan.id and vlan.name. Inner vlan fields are typically used when sending traffic with multiple 802.1q encapsulations to a network sensor (e.g. Zeek, Wireshark.)","name":"network.inner","type":"object"},"network.inner.vlan.id":{"category":"network","description":"VLAN ID as reported by the observer.","example":10,"name":"network.inner.vlan.id","type":"keyword"},"network.inner.vlan.name":{"category":"network","description":"Optional VLAN name as reported by the observer.","example":"outside","name":"network.inner.vlan.name","type":"keyword"},"network.name":{"category":"network","description":"Name given by operators to sections of their network.","example":"Guest Wifi","name":"network.name","type":"keyword"},"network.packets":{"category":"network","description":"Total packets transferred in both directions. If `source.packets` and `destination.packets` are known, `network.packets` is their sum.","example":24,"name":"network.packets","type":"long"},"network.protocol":{"category":"network","description":"In the OSI Model this would be the Application Layer protocol. For example, `http`, `dns`, or `ssh`. The field value must be normalized to lowercase for querying.","example":"http","name":"network.protocol","type":"keyword"},"network.transport":{"category":"network","description":"Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) The field value must be normalized to lowercase for querying.","example":"tcp","name":"network.transport","type":"keyword"},"network.type":{"category":"network","description":"In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc The field value must be normalized to lowercase for querying.","example":"ipv4","name":"network.type","type":"keyword"},"network.vlan.id":{"category":"network","description":"VLAN ID as reported by the observer.","example":10,"name":"network.vlan.id","type":"keyword"},"network.vlan.name":{"category":"network","description":"Optional VLAN name as reported by the observer.","example":"outside","name":"network.vlan.name","type":"keyword"},"observer.egress":{"category":"observer","description":"Observer.egress holds information like interface number and name, vlan, and zone information to classify egress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.","name":"observer.egress","type":"object"},"observer.egress.interface.alias":{"category":"observer","description":"Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.","example":"outside","name":"observer.egress.interface.alias","type":"keyword"},"observer.egress.interface.id":{"category":"observer","description":"Interface ID as reported by an observer (typically SNMP interface ID).","example":10,"name":"observer.egress.interface.id","type":"keyword"},"observer.egress.interface.name":{"category":"observer","description":"Interface name as reported by the system.","example":"eth0","name":"observer.egress.interface.name","type":"keyword"},"observer.egress.vlan.id":{"category":"observer","description":"VLAN ID as reported by the observer.","example":10,"name":"observer.egress.vlan.id","type":"keyword"},"observer.egress.vlan.name":{"category":"observer","description":"Optional VLAN name as reported by the observer.","example":"outside","name":"observer.egress.vlan.name","type":"keyword"},"observer.egress.zone":{"category":"observer","description":"Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc.","example":"Public_Internet","name":"observer.egress.zone","type":"keyword"},"observer.geo.city_name":{"category":"observer","description":"City name.","example":"Montreal","name":"observer.geo.city_name","type":"keyword"},"observer.geo.continent_code":{"category":"observer","description":"Two-letter code representing continent's name.","example":"NA","name":"observer.geo.continent_code","type":"keyword"},"observer.geo.continent_name":{"category":"observer","description":"Name of the continent.","example":"North America","name":"observer.geo.continent_name","type":"keyword"},"observer.geo.country_iso_code":{"category":"observer","description":"Country ISO code.","example":"CA","name":"observer.geo.country_iso_code","type":"keyword"},"observer.geo.country_name":{"category":"observer","description":"Country name.","example":"Canada","name":"observer.geo.country_name","type":"keyword"},"observer.geo.location":{"category":"observer","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"observer.geo.location","type":"geo_point"},"observer.geo.name":{"category":"observer","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"observer.geo.name","type":"keyword"},"observer.geo.postal_code":{"category":"observer","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"observer.geo.postal_code","type":"keyword"},"observer.geo.region_iso_code":{"category":"observer","description":"Region ISO code.","example":"CA-QC","name":"observer.geo.region_iso_code","type":"keyword"},"observer.geo.region_name":{"category":"observer","description":"Region name.","example":"Quebec","name":"observer.geo.region_name","type":"keyword"},"observer.geo.timezone":{"category":"observer","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"observer.geo.timezone","type":"keyword"},"observer.hostname":{"category":"observer","description":"Hostname of the observer.","name":"observer.hostname","type":"keyword"},"observer.ingress":{"category":"observer","description":"Observer.ingress holds information like interface number and name, vlan, and zone information to classify ingress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.","name":"observer.ingress","type":"object"},"observer.ingress.interface.alias":{"category":"observer","description":"Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.","example":"outside","name":"observer.ingress.interface.alias","type":"keyword"},"observer.ingress.interface.id":{"category":"observer","description":"Interface ID as reported by an observer (typically SNMP interface ID).","example":10,"name":"observer.ingress.interface.id","type":"keyword"},"observer.ingress.interface.name":{"category":"observer","description":"Interface name as reported by the system.","example":"eth0","name":"observer.ingress.interface.name","type":"keyword"},"observer.ingress.vlan.id":{"category":"observer","description":"VLAN ID as reported by the observer.","example":10,"name":"observer.ingress.vlan.id","type":"keyword"},"observer.ingress.vlan.name":{"category":"observer","description":"Optional VLAN name as reported by the observer.","example":"outside","name":"observer.ingress.vlan.name","type":"keyword"},"observer.ingress.zone":{"category":"observer","description":"Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc.","example":"DMZ","name":"observer.ingress.zone","type":"keyword"},"observer.ip":{"category":"observer","description":"IP addresses of the observer.","name":"observer.ip","type":"ip"},"observer.mac":{"category":"observer","description":"MAC addresses of the observer. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.","example":"[\"00-00-5E-00-53-23\", \"00-00-5E-00-53-24\"]","name":"observer.mac","type":"keyword"},"observer.name":{"category":"observer","description":"Custom name of the observer. This is a name that can be given to an observer. This can be helpful for example if multiple firewalls of the same model are used in an organization. If no custom name is needed, the field can be left empty.","example":"1_proxySG","name":"observer.name","type":"keyword"},"observer.os.family":{"category":"observer","description":"OS family (such as redhat, debian, freebsd, windows).","example":"debian","name":"observer.os.family","type":"keyword"},"observer.os.full":{"category":"observer","description":"Operating system name, including the version or code name.","example":"Mac OS Mojave","name":"observer.os.full","type":"keyword"},"observer.os.kernel":{"category":"observer","description":"Operating system kernel version as a raw string.","example":"4.4.0-112-generic","name":"observer.os.kernel","type":"keyword"},"observer.os.name":{"category":"observer","description":"Operating system name, without the version.","example":"Mac OS X","name":"observer.os.name","type":"keyword"},"observer.os.platform":{"category":"observer","description":"Operating system platform (such centos, ubuntu, windows).","example":"darwin","name":"observer.os.platform","type":"keyword"},"observer.os.type":{"category":"observer","description":"Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.","example":"macos","name":"observer.os.type","type":"keyword"},"observer.os.version":{"category":"observer","description":"Operating system version as a raw string.","example":"10.14.1","name":"observer.os.version","type":"keyword"},"observer.product":{"category":"observer","description":"The product name of the observer.","example":"s200","name":"observer.product","type":"keyword"},"observer.serial_number":{"category":"observer","description":"Observer serial number.","name":"observer.serial_number","type":"keyword"},"observer.type":{"category":"observer","description":"The type of the observer the data is coming from. There is no predefined list of observer types. Some examples are `forwarder`, `firewall`, `ids`, `ips`, `proxy`, `poller`, `sensor`, `APM server`.","example":"firewall","name":"observer.type","type":"keyword"},"observer.vendor":{"category":"observer","description":"Vendor name of the observer.","example":"Symantec","name":"observer.vendor","type":"keyword"},"observer.version":{"category":"observer","description":"Observer version.","name":"observer.version","type":"keyword"},"orchestrator.api_version":{"category":"orchestrator","description":"API version being used to carry out the action","example":"v1beta1","name":"orchestrator.api_version","type":"keyword"},"orchestrator.cluster.name":{"category":"orchestrator","description":"Name of the cluster.","name":"orchestrator.cluster.name","type":"keyword"},"orchestrator.cluster.url":{"category":"orchestrator","description":"URL of the API used to manage the cluster.","name":"orchestrator.cluster.url","type":"keyword"},"orchestrator.cluster.version":{"category":"orchestrator","description":"The version of the cluster.","name":"orchestrator.cluster.version","type":"keyword"},"orchestrator.namespace":{"category":"orchestrator","description":"Namespace in which the action is taking place.","example":"kube-system","name":"orchestrator.namespace","type":"keyword"},"orchestrator.organization":{"category":"orchestrator","description":"Organization affected by the event (for multi-tenant orchestrator setups).","example":"elastic","name":"orchestrator.organization","type":"keyword"},"orchestrator.resource.name":{"category":"orchestrator","description":"Name of the resource being acted upon.","example":"test-pod-cdcws","name":"orchestrator.resource.name","type":"keyword"},"orchestrator.resource.type":{"category":"orchestrator","description":"Type of resource being acted upon.","example":"service","name":"orchestrator.resource.type","type":"keyword"},"orchestrator.type":{"category":"orchestrator","description":"Orchestrator cluster type (e.g. kubernetes, nomad or cloudfoundry).","example":"kubernetes","name":"orchestrator.type","type":"keyword"},"organization.id":{"category":"organization","description":"Unique identifier for the organization.","name":"organization.id","type":"keyword"},"organization.name":{"category":"organization","description":"Organization name.","name":"organization.name","type":"keyword"},"os.family":{"category":"os","description":"OS family (such as redhat, debian, freebsd, windows).","example":"debian","name":"os.family","type":"keyword"},"os.full":{"category":"os","description":"Operating system name, including the version or code name.","example":"Mac OS Mojave","name":"os.full","type":"keyword"},"os.kernel":{"category":"os","description":"Operating system kernel version as a raw string.","example":"4.4.0-112-generic","name":"os.kernel","type":"keyword"},"os.name":{"category":"os","description":"Operating system name, without the version.","example":"Mac OS X","name":"os.name","type":"keyword"},"os.platform":{"category":"os","description":"Operating system platform (such centos, ubuntu, windows).","example":"darwin","name":"os.platform","type":"keyword"},"os.type":{"category":"os","description":"Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.","example":"macos","name":"os.type","type":"keyword"},"os.version":{"category":"os","description":"Operating system version as a raw string.","example":"10.14.1","name":"os.version","type":"keyword"},"package.architecture":{"category":"package","description":"Package architecture.","example":"x86_64","name":"package.architecture","type":"keyword"},"package.build_version":{"category":"package","description":"Additional information about the build version of the installed package. For example use the commit SHA of a non-released package.","example":"36f4f7e89dd61b0988b12ee000b98966867710cd","name":"package.build_version","type":"keyword"},"package.checksum":{"category":"package","description":"Checksum of the installed package for verification.","example":"68b329da9893e34099c7d8ad5cb9c940","name":"package.checksum","type":"keyword"},"package.description":{"category":"package","description":"Description of the package.","example":"Open source programming language to build simple/reliable/efficient software.","name":"package.description","type":"keyword"},"package.install_scope":{"category":"package","description":"Indicating how the package was installed, e.g. user-local, global.","example":"global","name":"package.install_scope","type":"keyword"},"package.installed":{"category":"package","description":"Time when package was installed.","name":"package.installed","type":"date"},"package.license":{"category":"package","description":"License under which the package was released. Use a short name, e.g. the license identifier from SPDX License List where possible (https://spdx.org/licenses/).","example":"Apache License 2.0","name":"package.license","type":"keyword"},"package.name":{"category":"package","description":"Package name","example":"go","name":"package.name","type":"keyword"},"package.path":{"category":"package","description":"Path where the package is installed.","example":"/usr/local/Cellar/go/1.12.9/","name":"package.path","type":"keyword"},"package.reference":{"category":"package","description":"Home page or reference URL of the software in this package, if available.","example":"https://golang.org","name":"package.reference","type":"keyword"},"package.size":{"category":"package","description":"Package size in bytes.","example":62231,"name":"package.size","type":"long","format":"string"},"package.type":{"category":"package","description":"Type of package. This should contain the package file type, rather than the package manager name. Examples: rpm, dpkg, brew, npm, gem, nupkg, jar.","example":"rpm","name":"package.type","type":"keyword"},"package.version":{"category":"package","description":"Package version","example":"1.12.9","name":"package.version","type":"keyword"},"pe.architecture":{"category":"pe","description":"CPU architecture target for the file.","example":"x64","name":"pe.architecture","type":"keyword"},"pe.company":{"category":"pe","description":"Internal company name of the file, provided at compile-time.","example":"Microsoft Corporation","name":"pe.company","type":"keyword"},"pe.description":{"category":"pe","description":"Internal description of the file, provided at compile-time.","example":"Paint","name":"pe.description","type":"keyword"},"pe.file_version":{"category":"pe","description":"Internal version of the file, provided at compile-time.","example":"6.3.9600.17415","name":"pe.file_version","type":"keyword"},"pe.imphash":{"category":"pe","description":"A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.","example":"0c6803c4e922103c4dca5963aad36ddf","name":"pe.imphash","type":"keyword"},"pe.original_file_name":{"category":"pe","description":"Internal name of the file, provided at compile-time.","example":"MSPAINT.EXE","name":"pe.original_file_name","type":"keyword"},"pe.product":{"category":"pe","description":"Internal product name of the file, provided at compile-time.","example":"Microsoft® Windows® Operating System","name":"pe.product","type":"keyword"},"process.args":{"category":"process","description":"Array of process arguments, starting with the absolute path to the executable. May be filtered to protect sensitive information.","example":"[\"/usr/bin/ssh\", \"-l\", \"user\", \"10.0.0.16\"]","name":"process.args","type":"keyword"},"process.args_count":{"category":"process","description":"Length of the process.args array. This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity.","example":4,"name":"process.args_count","type":"long"},"process.code_signature.digest_algorithm":{"category":"process","description":"The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.","example":"sha256","name":"process.code_signature.digest_algorithm","type":"keyword"},"process.code_signature.exists":{"category":"process","description":"Boolean to capture if a signature is present.","example":"true","name":"process.code_signature.exists","type":"boolean"},"process.code_signature.signing_id":{"category":"process","description":"The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.","example":"com.apple.xpc.proxy","name":"process.code_signature.signing_id","type":"keyword"},"process.code_signature.status":{"category":"process","description":"Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.","example":"ERROR_UNTRUSTED_ROOT","name":"process.code_signature.status","type":"keyword"},"process.code_signature.subject_name":{"category":"process","description":"Subject name of the code signer","example":"Microsoft Corporation","name":"process.code_signature.subject_name","type":"keyword"},"process.code_signature.team_id":{"category":"process","description":"The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.","example":"EQHXZ8M8AV","name":"process.code_signature.team_id","type":"keyword"},"process.code_signature.timestamp":{"category":"process","description":"Date and time when the code signature was generated and signed.","example":"2021-01-01T12:10:30Z","name":"process.code_signature.timestamp","type":"date"},"process.code_signature.trusted":{"category":"process","description":"Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.","example":"true","name":"process.code_signature.trusted","type":"boolean"},"process.code_signature.valid":{"category":"process","description":"Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.","example":"true","name":"process.code_signature.valid","type":"boolean"},"process.command_line":{"category":"process","description":"Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information.","example":"/usr/bin/ssh -l user 10.0.0.16","name":"process.command_line","type":"wildcard"},"process.elf.architecture":{"category":"process","description":"Machine architecture of the ELF file.","example":"x86-64","name":"process.elf.architecture","type":"keyword"},"process.elf.byte_order":{"category":"process","description":"Byte sequence of ELF file.","example":"Little Endian","name":"process.elf.byte_order","type":"keyword"},"process.elf.cpu_type":{"category":"process","description":"CPU type of the ELF file.","example":"Intel","name":"process.elf.cpu_type","type":"keyword"},"process.elf.creation_date":{"category":"process","description":"Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.","name":"process.elf.creation_date","type":"date"},"process.elf.exports":{"category":"process","description":"List of exported element names and types.","name":"process.elf.exports","type":"flattened"},"process.elf.header.abi_version":{"category":"process","description":"Version of the ELF Application Binary Interface (ABI).","name":"process.elf.header.abi_version","type":"keyword"},"process.elf.header.class":{"category":"process","description":"Header class of the ELF file.","name":"process.elf.header.class","type":"keyword"},"process.elf.header.data":{"category":"process","description":"Data table of the ELF header.","name":"process.elf.header.data","type":"keyword"},"process.elf.header.entrypoint":{"category":"process","description":"Header entrypoint of the ELF file.","name":"process.elf.header.entrypoint","type":"long","format":"string"},"process.elf.header.object_version":{"category":"process","description":"\"0x1\" for original ELF files.","name":"process.elf.header.object_version","type":"keyword"},"process.elf.header.os_abi":{"category":"process","description":"Application Binary Interface (ABI) of the Linux OS.","name":"process.elf.header.os_abi","type":"keyword"},"process.elf.header.type":{"category":"process","description":"Header type of the ELF file.","name":"process.elf.header.type","type":"keyword"},"process.elf.header.version":{"category":"process","description":"Version of the ELF header.","name":"process.elf.header.version","type":"keyword"},"process.elf.imports":{"category":"process","description":"List of imported element names and types.","name":"process.elf.imports","type":"flattened"},"process.elf.sections":{"category":"process","description":"An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.","name":"process.elf.sections","type":"nested"},"process.elf.sections.chi2":{"category":"process","description":"Chi-square probability distribution of the section.","name":"process.elf.sections.chi2","type":"long","format":"number"},"process.elf.sections.entropy":{"category":"process","description":"Shannon entropy calculation from the section.","name":"process.elf.sections.entropy","type":"long","format":"number"},"process.elf.sections.flags":{"category":"process","description":"ELF Section List flags.","name":"process.elf.sections.flags","type":"keyword"},"process.elf.sections.name":{"category":"process","description":"ELF Section List name.","name":"process.elf.sections.name","type":"keyword"},"process.elf.sections.physical_offset":{"category":"process","description":"ELF Section List offset.","name":"process.elf.sections.physical_offset","type":"keyword"},"process.elf.sections.physical_size":{"category":"process","description":"ELF Section List physical size.","name":"process.elf.sections.physical_size","type":"long","format":"bytes"},"process.elf.sections.type":{"category":"process","description":"ELF Section List type.","name":"process.elf.sections.type","type":"keyword"},"process.elf.sections.virtual_address":{"category":"process","description":"ELF Section List virtual address.","name":"process.elf.sections.virtual_address","type":"long","format":"string"},"process.elf.sections.virtual_size":{"category":"process","description":"ELF Section List virtual size.","name":"process.elf.sections.virtual_size","type":"long","format":"string"},"process.elf.segments":{"category":"process","description":"An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.","name":"process.elf.segments","type":"nested"},"process.elf.segments.sections":{"category":"process","description":"ELF object segment sections.","name":"process.elf.segments.sections","type":"keyword"},"process.elf.segments.type":{"category":"process","description":"ELF object segment type.","name":"process.elf.segments.type","type":"keyword"},"process.elf.shared_libraries":{"category":"process","description":"List of shared libraries used by this ELF object.","name":"process.elf.shared_libraries","type":"keyword"},"process.elf.telfhash":{"category":"process","description":"telfhash symbol hash for ELF file.","name":"process.elf.telfhash","type":"keyword"},"process.end":{"category":"process","description":"The time the process ended.","example":"2016-05-23T08:05:34.853Z","name":"process.end","type":"date"},"process.entity_id":{"category":"process","description":"Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts.","example":"c2c455d9f99375d","name":"process.entity_id","type":"keyword"},"process.executable":{"category":"process","description":"Absolute path to the process executable.","example":"/usr/bin/ssh","name":"process.executable","type":"keyword"},"process.exit_code":{"category":"process","description":"The exit code of the process, if this is a termination event. The field should be absent if there is no exit code for the event (e.g. process start).","example":137,"name":"process.exit_code","type":"long"},"process.hash.md5":{"category":"process","description":"MD5 hash.","name":"process.hash.md5","type":"keyword"},"process.hash.sha1":{"category":"process","description":"SHA1 hash.","name":"process.hash.sha1","type":"keyword"},"process.hash.sha256":{"category":"process","description":"SHA256 hash.","name":"process.hash.sha256","type":"keyword"},"process.hash.sha512":{"category":"process","description":"SHA512 hash.","name":"process.hash.sha512","type":"keyword"},"process.hash.ssdeep":{"category":"process","description":"SSDEEP hash.","name":"process.hash.ssdeep","type":"keyword"},"process.name":{"category":"process","description":"Process name. Sometimes called program name or similar.","example":"ssh","name":"process.name","type":"keyword"},"process.parent.args":{"category":"process","description":"Array of process arguments, starting with the absolute path to the executable. May be filtered to protect sensitive information.","example":"[\"/usr/bin/ssh\", \"-l\", \"user\", \"10.0.0.16\"]","name":"process.parent.args","type":"keyword"},"process.parent.args_count":{"category":"process","description":"Length of the process.args array. This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity.","example":4,"name":"process.parent.args_count","type":"long"},"process.parent.code_signature.digest_algorithm":{"category":"process","description":"The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.","example":"sha256","name":"process.parent.code_signature.digest_algorithm","type":"keyword"},"process.parent.code_signature.exists":{"category":"process","description":"Boolean to capture if a signature is present.","example":"true","name":"process.parent.code_signature.exists","type":"boolean"},"process.parent.code_signature.signing_id":{"category":"process","description":"The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.","example":"com.apple.xpc.proxy","name":"process.parent.code_signature.signing_id","type":"keyword"},"process.parent.code_signature.status":{"category":"process","description":"Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.","example":"ERROR_UNTRUSTED_ROOT","name":"process.parent.code_signature.status","type":"keyword"},"process.parent.code_signature.subject_name":{"category":"process","description":"Subject name of the code signer","example":"Microsoft Corporation","name":"process.parent.code_signature.subject_name","type":"keyword"},"process.parent.code_signature.team_id":{"category":"process","description":"The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.","example":"EQHXZ8M8AV","name":"process.parent.code_signature.team_id","type":"keyword"},"process.parent.code_signature.timestamp":{"category":"process","description":"Date and time when the code signature was generated and signed.","example":"2021-01-01T12:10:30Z","name":"process.parent.code_signature.timestamp","type":"date"},"process.parent.code_signature.trusted":{"category":"process","description":"Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.","example":"true","name":"process.parent.code_signature.trusted","type":"boolean"},"process.parent.code_signature.valid":{"category":"process","description":"Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.","example":"true","name":"process.parent.code_signature.valid","type":"boolean"},"process.parent.command_line":{"category":"process","description":"Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information.","example":"/usr/bin/ssh -l user 10.0.0.16","name":"process.parent.command_line","type":"wildcard"},"process.parent.elf.architecture":{"category":"process","description":"Machine architecture of the ELF file.","example":"x86-64","name":"process.parent.elf.architecture","type":"keyword"},"process.parent.elf.byte_order":{"category":"process","description":"Byte sequence of ELF file.","example":"Little Endian","name":"process.parent.elf.byte_order","type":"keyword"},"process.parent.elf.cpu_type":{"category":"process","description":"CPU type of the ELF file.","example":"Intel","name":"process.parent.elf.cpu_type","type":"keyword"},"process.parent.elf.creation_date":{"category":"process","description":"Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.","name":"process.parent.elf.creation_date","type":"date"},"process.parent.elf.exports":{"category":"process","description":"List of exported element names and types.","name":"process.parent.elf.exports","type":"flattened"},"process.parent.elf.header.abi_version":{"category":"process","description":"Version of the ELF Application Binary Interface (ABI).","name":"process.parent.elf.header.abi_version","type":"keyword"},"process.parent.elf.header.class":{"category":"process","description":"Header class of the ELF file.","name":"process.parent.elf.header.class","type":"keyword"},"process.parent.elf.header.data":{"category":"process","description":"Data table of the ELF header.","name":"process.parent.elf.header.data","type":"keyword"},"process.parent.elf.header.entrypoint":{"category":"process","description":"Header entrypoint of the ELF file.","name":"process.parent.elf.header.entrypoint","type":"long","format":"string"},"process.parent.elf.header.object_version":{"category":"process","description":"\"0x1\" for original ELF files.","name":"process.parent.elf.header.object_version","type":"keyword"},"process.parent.elf.header.os_abi":{"category":"process","description":"Application Binary Interface (ABI) of the Linux OS.","name":"process.parent.elf.header.os_abi","type":"keyword"},"process.parent.elf.header.type":{"category":"process","description":"Header type of the ELF file.","name":"process.parent.elf.header.type","type":"keyword"},"process.parent.elf.header.version":{"category":"process","description":"Version of the ELF header.","name":"process.parent.elf.header.version","type":"keyword"},"process.parent.elf.imports":{"category":"process","description":"List of imported element names and types.","name":"process.parent.elf.imports","type":"flattened"},"process.parent.elf.sections":{"category":"process","description":"An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.","name":"process.parent.elf.sections","type":"nested"},"process.parent.elf.sections.chi2":{"category":"process","description":"Chi-square probability distribution of the section.","name":"process.parent.elf.sections.chi2","type":"long","format":"number"},"process.parent.elf.sections.entropy":{"category":"process","description":"Shannon entropy calculation from the section.","name":"process.parent.elf.sections.entropy","type":"long","format":"number"},"process.parent.elf.sections.flags":{"category":"process","description":"ELF Section List flags.","name":"process.parent.elf.sections.flags","type":"keyword"},"process.parent.elf.sections.name":{"category":"process","description":"ELF Section List name.","name":"process.parent.elf.sections.name","type":"keyword"},"process.parent.elf.sections.physical_offset":{"category":"process","description":"ELF Section List offset.","name":"process.parent.elf.sections.physical_offset","type":"keyword"},"process.parent.elf.sections.physical_size":{"category":"process","description":"ELF Section List physical size.","name":"process.parent.elf.sections.physical_size","type":"long","format":"bytes"},"process.parent.elf.sections.type":{"category":"process","description":"ELF Section List type.","name":"process.parent.elf.sections.type","type":"keyword"},"process.parent.elf.sections.virtual_address":{"category":"process","description":"ELF Section List virtual address.","name":"process.parent.elf.sections.virtual_address","type":"long","format":"string"},"process.parent.elf.sections.virtual_size":{"category":"process","description":"ELF Section List virtual size.","name":"process.parent.elf.sections.virtual_size","type":"long","format":"string"},"process.parent.elf.segments":{"category":"process","description":"An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.","name":"process.parent.elf.segments","type":"nested"},"process.parent.elf.segments.sections":{"category":"process","description":"ELF object segment sections.","name":"process.parent.elf.segments.sections","type":"keyword"},"process.parent.elf.segments.type":{"category":"process","description":"ELF object segment type.","name":"process.parent.elf.segments.type","type":"keyword"},"process.parent.elf.shared_libraries":{"category":"process","description":"List of shared libraries used by this ELF object.","name":"process.parent.elf.shared_libraries","type":"keyword"},"process.parent.elf.telfhash":{"category":"process","description":"telfhash symbol hash for ELF file.","name":"process.parent.elf.telfhash","type":"keyword"},"process.parent.end":{"category":"process","description":"The time the process ended.","example":"2016-05-23T08:05:34.853Z","name":"process.parent.end","type":"date"},"process.parent.entity_id":{"category":"process","description":"Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts.","example":"c2c455d9f99375d","name":"process.parent.entity_id","type":"keyword"},"process.parent.executable":{"category":"process","description":"Absolute path to the process executable.","example":"/usr/bin/ssh","name":"process.parent.executable","type":"keyword"},"process.parent.exit_code":{"category":"process","description":"The exit code of the process, if this is a termination event. The field should be absent if there is no exit code for the event (e.g. process start).","example":137,"name":"process.parent.exit_code","type":"long"},"process.parent.hash.md5":{"category":"process","description":"MD5 hash.","name":"process.parent.hash.md5","type":"keyword"},"process.parent.hash.sha1":{"category":"process","description":"SHA1 hash.","name":"process.parent.hash.sha1","type":"keyword"},"process.parent.hash.sha256":{"category":"process","description":"SHA256 hash.","name":"process.parent.hash.sha256","type":"keyword"},"process.parent.hash.sha512":{"category":"process","description":"SHA512 hash.","name":"process.parent.hash.sha512","type":"keyword"},"process.parent.hash.ssdeep":{"category":"process","description":"SSDEEP hash.","name":"process.parent.hash.ssdeep","type":"keyword"},"process.parent.name":{"category":"process","description":"Process name. Sometimes called program name or similar.","example":"ssh","name":"process.parent.name","type":"keyword"},"process.parent.pe.architecture":{"category":"process","description":"CPU architecture target for the file.","example":"x64","name":"process.parent.pe.architecture","type":"keyword"},"process.parent.pe.company":{"category":"process","description":"Internal company name of the file, provided at compile-time.","example":"Microsoft Corporation","name":"process.parent.pe.company","type":"keyword"},"process.parent.pe.description":{"category":"process","description":"Internal description of the file, provided at compile-time.","example":"Paint","name":"process.parent.pe.description","type":"keyword"},"process.parent.pe.file_version":{"category":"process","description":"Internal version of the file, provided at compile-time.","example":"6.3.9600.17415","name":"process.parent.pe.file_version","type":"keyword"},"process.parent.pe.imphash":{"category":"process","description":"A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.","example":"0c6803c4e922103c4dca5963aad36ddf","name":"process.parent.pe.imphash","type":"keyword"},"process.parent.pe.original_file_name":{"category":"process","description":"Internal name of the file, provided at compile-time.","example":"MSPAINT.EXE","name":"process.parent.pe.original_file_name","type":"keyword"},"process.parent.pe.product":{"category":"process","description":"Internal product name of the file, provided at compile-time.","example":"Microsoft® Windows® Operating System","name":"process.parent.pe.product","type":"keyword"},"process.parent.pgid":{"category":"process","description":"Identifier of the group of processes the process belongs to.","name":"process.parent.pgid","type":"long","format":"string"},"process.parent.pid":{"category":"process","description":"Process id.","example":4242,"name":"process.parent.pid","type":"long","format":"string"},"process.parent.start":{"category":"process","description":"The time the process started.","example":"2016-05-23T08:05:34.853Z","name":"process.parent.start","type":"date"},"process.parent.thread.id":{"category":"process","description":"Thread ID.","example":4242,"name":"process.parent.thread.id","type":"long","format":"string"},"process.parent.thread.name":{"category":"process","description":"Thread name.","example":"thread-0","name":"process.parent.thread.name","type":"keyword"},"process.parent.title":{"category":"process","description":"Process title. The proctitle, some times the same as process name. Can also be different: for example a browser setting its title to the web page currently opened.","name":"process.parent.title","type":"keyword"},"process.parent.uptime":{"category":"process","description":"Seconds the process has been up.","example":1325,"name":"process.parent.uptime","type":"long"},"process.parent.working_directory":{"category":"process","description":"The working directory of the process.","example":"/home/alice","name":"process.parent.working_directory","type":"keyword"},"process.pe.architecture":{"category":"process","description":"CPU architecture target for the file.","example":"x64","name":"process.pe.architecture","type":"keyword"},"process.pe.company":{"category":"process","description":"Internal company name of the file, provided at compile-time.","example":"Microsoft Corporation","name":"process.pe.company","type":"keyword"},"process.pe.description":{"category":"process","description":"Internal description of the file, provided at compile-time.","example":"Paint","name":"process.pe.description","type":"keyword"},"process.pe.file_version":{"category":"process","description":"Internal version of the file, provided at compile-time.","example":"6.3.9600.17415","name":"process.pe.file_version","type":"keyword"},"process.pe.imphash":{"category":"process","description":"A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.","example":"0c6803c4e922103c4dca5963aad36ddf","name":"process.pe.imphash","type":"keyword"},"process.pe.original_file_name":{"category":"process","description":"Internal name of the file, provided at compile-time.","example":"MSPAINT.EXE","name":"process.pe.original_file_name","type":"keyword"},"process.pe.product":{"category":"process","description":"Internal product name of the file, provided at compile-time.","example":"Microsoft® Windows® Operating System","name":"process.pe.product","type":"keyword"},"process.pgid":{"category":"process","description":"Identifier of the group of processes the process belongs to.","name":"process.pgid","type":"long","format":"string"},"process.pid":{"category":"process","description":"Process id.","example":4242,"name":"process.pid","type":"long","format":"string"},"process.start":{"category":"process","description":"The time the process started.","example":"2016-05-23T08:05:34.853Z","name":"process.start","type":"date"},"process.thread.id":{"category":"process","description":"Thread ID.","example":4242,"name":"process.thread.id","type":"long","format":"string"},"process.thread.name":{"category":"process","description":"Thread name.","example":"thread-0","name":"process.thread.name","type":"keyword"},"process.title":{"category":"process","description":"Process title. The proctitle, some times the same as process name. Can also be different: for example a browser setting its title to the web page currently opened.","name":"process.title","type":"keyword"},"process.uptime":{"category":"process","description":"Seconds the process has been up.","example":1325,"name":"process.uptime","type":"long"},"process.working_directory":{"category":"process","description":"The working directory of the process.","example":"/home/alice","name":"process.working_directory","type":"keyword"},"registry.data.bytes":{"category":"registry","description":"Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.","example":"ZQBuAC0AVQBTAAAAZQBuAAAAAAA=","name":"registry.data.bytes","type":"keyword"},"registry.data.strings":{"category":"registry","description":"Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `\"1\"`).","example":"[\"C:\\rta\\red_ttp\\bin\\myapp.exe\"]","name":"registry.data.strings","type":"wildcard"},"registry.data.type":{"category":"registry","description":"Standard registry type for encoding contents","example":"REG_SZ","name":"registry.data.type","type":"keyword"},"registry.hive":{"category":"registry","description":"Abbreviated name for the hive.","example":"HKLM","name":"registry.hive","type":"keyword"},"registry.key":{"category":"registry","description":"Hive-relative path of keys.","example":"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe","name":"registry.key","type":"keyword"},"registry.path":{"category":"registry","description":"Full path, including hive, key and value","example":"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger","name":"registry.path","type":"keyword"},"registry.value":{"category":"registry","description":"Name of the value written.","example":"Debugger","name":"registry.value","type":"keyword"},"related.hash":{"category":"related","description":"All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search).","name":"related.hash","type":"keyword"},"related.hosts":{"category":"related","description":"All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases.","name":"related.hosts","type":"keyword"},"related.ip":{"category":"related","description":"All of the IPs seen on your event.","name":"related.ip","type":"ip"},"related.user":{"category":"related","description":"All the user names or other user identifiers seen on the event.","name":"related.user","type":"keyword"},"rule.author":{"category":"rule","description":"Name, organization, or pseudonym of the author or authors who created the rule used to generate this event.","example":"[\"Star-Lord\"]","name":"rule.author","type":"keyword"},"rule.category":{"category":"rule","description":"A categorization value keyword used by the entity using the rule for detection of this event.","example":"Attempted Information Leak","name":"rule.category","type":"keyword"},"rule.description":{"category":"rule","description":"The description of the rule generating the event.","example":"Block requests to public DNS over HTTPS / TLS protocols","name":"rule.description","type":"keyword"},"rule.id":{"category":"rule","description":"A rule ID that is unique within the scope of an agent, observer, or other entity using the rule for detection of this event.","example":101,"name":"rule.id","type":"keyword"},"rule.license":{"category":"rule","description":"Name of the license under which the rule used to generate this event is made available.","example":"Apache 2.0","name":"rule.license","type":"keyword"},"rule.name":{"category":"rule","description":"The name of the rule or signature generating the event.","example":"BLOCK_DNS_over_TLS","name":"rule.name","type":"keyword"},"rule.reference":{"category":"rule","description":"Reference URL to additional information about the rule used to generate this event. The URL can point to the vendor's documentation about the rule. If that's not available, it can also be a link to a more general page describing this type of alert.","example":"https://en.wikipedia.org/wiki/DNS_over_TLS","name":"rule.reference","type":"keyword"},"rule.ruleset":{"category":"rule","description":"Name of the ruleset, policy, group, or parent category in which the rule used to generate this event is a member.","example":"Standard_Protocol_Filters","name":"rule.ruleset","type":"keyword"},"rule.uuid":{"category":"rule","description":"A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event.","example":1100110011,"name":"rule.uuid","type":"keyword"},"rule.version":{"category":"rule","description":"The version / revision of the rule being used for analysis.","example":1.1,"name":"rule.version","type":"keyword"},"server.address":{"category":"server","description":"Some event server addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.","name":"server.address","type":"keyword"},"server.as.number":{"category":"server","description":"Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.","example":15169,"name":"server.as.number","type":"long"},"server.as.organization.name":{"category":"server","description":"Organization name.","example":"Google LLC","name":"server.as.organization.name","type":"keyword"},"server.bytes":{"category":"server","description":"Bytes sent from the server to the client.","example":184,"name":"server.bytes","type":"long","format":"bytes"},"server.domain":{"category":"server","description":"Server domain.","name":"server.domain","type":"keyword"},"server.geo.city_name":{"category":"server","description":"City name.","example":"Montreal","name":"server.geo.city_name","type":"keyword"},"server.geo.continent_code":{"category":"server","description":"Two-letter code representing continent's name.","example":"NA","name":"server.geo.continent_code","type":"keyword"},"server.geo.continent_name":{"category":"server","description":"Name of the continent.","example":"North America","name":"server.geo.continent_name","type":"keyword"},"server.geo.country_iso_code":{"category":"server","description":"Country ISO code.","example":"CA","name":"server.geo.country_iso_code","type":"keyword"},"server.geo.country_name":{"category":"server","description":"Country name.","example":"Canada","name":"server.geo.country_name","type":"keyword"},"server.geo.location":{"category":"server","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"server.geo.location","type":"geo_point"},"server.geo.name":{"category":"server","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"server.geo.name","type":"keyword"},"server.geo.postal_code":{"category":"server","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"server.geo.postal_code","type":"keyword"},"server.geo.region_iso_code":{"category":"server","description":"Region ISO code.","example":"CA-QC","name":"server.geo.region_iso_code","type":"keyword"},"server.geo.region_name":{"category":"server","description":"Region name.","example":"Quebec","name":"server.geo.region_name","type":"keyword"},"server.geo.timezone":{"category":"server","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"server.geo.timezone","type":"keyword"},"server.ip":{"category":"server","description":"IP address of the server (IPv4 or IPv6).","name":"server.ip","type":"ip"},"server.mac":{"category":"server","description":"MAC address of the server. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.","example":"00-00-5E-00-53-23","name":"server.mac","type":"keyword"},"server.nat.ip":{"category":"server","description":"Translated ip of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.","name":"server.nat.ip","type":"ip"},"server.nat.port":{"category":"server","description":"Translated port of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.","name":"server.nat.port","type":"long","format":"string"},"server.packets":{"category":"server","description":"Packets sent from the server to the client.","example":12,"name":"server.packets","type":"long"},"server.port":{"category":"server","description":"Port of the server.","name":"server.port","type":"long","format":"string"},"server.registered_domain":{"category":"server","description":"The highest registered server domain, stripped of the subdomain. For example, the registered domain for \"foo.example.com\" is \"example.com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as \"co.uk\".","example":"example.com","name":"server.registered_domain","type":"keyword"},"server.subdomain":{"category":"server","description":"The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of \"www.east.mydomain.co.uk\" is \"east\". If the domain has multiple levels of subdomain, such as \"sub2.sub1.example.com\", the subdomain field should contain \"sub2.sub1\", with no trailing period.","example":"east","name":"server.subdomain","type":"keyword"},"server.top_level_domain":{"category":"server","description":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is \"com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as \"co.uk\".","example":"co.uk","name":"server.top_level_domain","type":"keyword"},"server.user.domain":{"category":"server","description":"Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.","name":"server.user.domain","type":"keyword"},"server.user.email":{"category":"server","description":"User email address.","name":"server.user.email","type":"keyword"},"server.user.full_name":{"category":"server","description":"User's full name, if available.","example":"Albert Einstein","name":"server.user.full_name","type":"keyword"},"server.user.group.domain":{"category":"server","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"server.user.group.domain","type":"keyword"},"server.user.group.id":{"category":"server","description":"Unique identifier for the group on the system/platform.","name":"server.user.group.id","type":"keyword"},"server.user.group.name":{"category":"server","description":"Name of the group.","name":"server.user.group.name","type":"keyword"},"server.user.hash":{"category":"server","description":"Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.","name":"server.user.hash","type":"keyword"},"server.user.id":{"category":"server","description":"Unique identifier of the user.","example":"S-1-5-21-202424912787-2692429404-2351956786-1000","name":"server.user.id","type":"keyword"},"server.user.name":{"category":"server","description":"Short name or login of the user.","example":"a.einstein","name":"server.user.name","type":"keyword"},"server.user.roles":{"category":"server","description":"Array of user roles at the time of the event.","example":"[\"kibana_admin\", \"reporting_user\"]","name":"server.user.roles","type":"keyword"},"service.address":{"category":"service","description":"Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).","example":"172.26.0.2:5432","name":"service.address","type":"keyword"},"service.environment":{"category":"service","description":"Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.","example":"production","name":"service.environment","type":"keyword"},"service.ephemeral_id":{"category":"service","description":"Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.","example":"8a4f500f","name":"service.ephemeral_id","type":"keyword"},"service.id":{"category":"service","description":"Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.","example":"d37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6","name":"service.id","type":"keyword"},"service.name":{"category":"service","description":"Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.","example":"elasticsearch-metrics","name":"service.name","type":"keyword"},"service.node.name":{"category":"service","description":"Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.","example":"instance-0000000016","name":"service.node.name","type":"keyword"},"service.origin.address":{"category":"service","description":"Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).","example":"172.26.0.2:5432","name":"service.origin.address","type":"keyword"},"service.origin.environment":{"category":"service","description":"Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.","example":"production","name":"service.origin.environment","type":"keyword"},"service.origin.ephemeral_id":{"category":"service","description":"Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.","example":"8a4f500f","name":"service.origin.ephemeral_id","type":"keyword"},"service.origin.id":{"category":"service","description":"Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.","example":"d37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6","name":"service.origin.id","type":"keyword"},"service.origin.name":{"category":"service","description":"Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.","example":"elasticsearch-metrics","name":"service.origin.name","type":"keyword"},"service.origin.node.name":{"category":"service","description":"Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.","example":"instance-0000000016","name":"service.origin.node.name","type":"keyword"},"service.origin.state":{"category":"service","description":"Current state of the service.","name":"service.origin.state","type":"keyword"},"service.origin.type":{"category":"service","description":"The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.","example":"elasticsearch","name":"service.origin.type","type":"keyword"},"service.origin.version":{"category":"service","description":"Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.","example":"3.2.4","name":"service.origin.version","type":"keyword"},"service.state":{"category":"service","description":"Current state of the service.","name":"service.state","type":"keyword"},"service.target.address":{"category":"service","description":"Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).","example":"172.26.0.2:5432","name":"service.target.address","type":"keyword"},"service.target.environment":{"category":"service","description":"Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.","example":"production","name":"service.target.environment","type":"keyword"},"service.target.ephemeral_id":{"category":"service","description":"Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.","example":"8a4f500f","name":"service.target.ephemeral_id","type":"keyword"},"service.target.id":{"category":"service","description":"Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.","example":"d37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6","name":"service.target.id","type":"keyword"},"service.target.name":{"category":"service","description":"Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.","example":"elasticsearch-metrics","name":"service.target.name","type":"keyword"},"service.target.node.name":{"category":"service","description":"Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.","example":"instance-0000000016","name":"service.target.node.name","type":"keyword"},"service.target.state":{"category":"service","description":"Current state of the service.","name":"service.target.state","type":"keyword"},"service.target.type":{"category":"service","description":"The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.","example":"elasticsearch","name":"service.target.type","type":"keyword"},"service.target.version":{"category":"service","description":"Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.","example":"3.2.4","name":"service.target.version","type":"keyword"},"service.type":{"category":"service","description":"The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.","example":"elasticsearch","name":"service.type","type":"keyword"},"service.version":{"category":"service","description":"Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.","example":"3.2.4","name":"service.version","type":"keyword"},"source.address":{"category":"source","description":"Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.","name":"source.address","type":"keyword"},"source.as.number":{"category":"source","description":"Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.","example":15169,"name":"source.as.number","type":"long"},"source.as.organization.name":{"category":"source","description":"Organization name.","example":"Google LLC","name":"source.as.organization.name","type":"keyword"},"source.bytes":{"category":"source","description":"Bytes sent from the source to the destination.","example":184,"name":"source.bytes","type":"long","format":"bytes"},"source.domain":{"category":"source","description":"Source domain.","name":"source.domain","type":"keyword"},"source.geo.city_name":{"category":"source","description":"City name.","example":"Montreal","name":"source.geo.city_name","type":"keyword"},"source.geo.continent_code":{"category":"source","description":"Two-letter code representing continent's name.","example":"NA","name":"source.geo.continent_code","type":"keyword"},"source.geo.continent_name":{"category":"source","description":"Name of the continent.","example":"North America","name":"source.geo.continent_name","type":"keyword"},"source.geo.country_iso_code":{"category":"source","description":"Country ISO code.","example":"CA","name":"source.geo.country_iso_code","type":"keyword"},"source.geo.country_name":{"category":"source","description":"Country name.","example":"Canada","name":"source.geo.country_name","type":"keyword"},"source.geo.location":{"category":"source","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"source.geo.location","type":"geo_point"},"source.geo.name":{"category":"source","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"source.geo.name","type":"keyword"},"source.geo.postal_code":{"category":"source","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"source.geo.postal_code","type":"keyword"},"source.geo.region_iso_code":{"category":"source","description":"Region ISO code.","example":"CA-QC","name":"source.geo.region_iso_code","type":"keyword"},"source.geo.region_name":{"category":"source","description":"Region name.","example":"Quebec","name":"source.geo.region_name","type":"keyword"},"source.geo.timezone":{"category":"source","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"source.geo.timezone","type":"keyword"},"source.ip":{"category":"source","description":"IP address of the source (IPv4 or IPv6).","name":"source.ip","type":"ip"},"source.mac":{"category":"source","description":"MAC address of the source. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.","example":"00-00-5E-00-53-23","name":"source.mac","type":"keyword"},"source.nat.ip":{"category":"source","description":"Translated ip of source based NAT sessions (e.g. internal client to internet) Typically connections traversing load balancers, firewalls, or routers.","name":"source.nat.ip","type":"ip"},"source.nat.port":{"category":"source","description":"Translated port of source based NAT sessions. (e.g. internal client to internet) Typically used with load balancers, firewalls, or routers.","name":"source.nat.port","type":"long","format":"string"},"source.packets":{"category":"source","description":"Packets sent from the source to the destination.","example":12,"name":"source.packets","type":"long"},"source.port":{"category":"source","description":"Port of the source.","name":"source.port","type":"long","format":"string"},"source.registered_domain":{"category":"source","description":"The highest registered source domain, stripped of the subdomain. For example, the registered domain for \"foo.example.com\" is \"example.com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as \"co.uk\".","example":"example.com","name":"source.registered_domain","type":"keyword"},"source.subdomain":{"category":"source","description":"The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of \"www.east.mydomain.co.uk\" is \"east\". If the domain has multiple levels of subdomain, such as \"sub2.sub1.example.com\", the subdomain field should contain \"sub2.sub1\", with no trailing period.","example":"east","name":"source.subdomain","type":"keyword"},"source.top_level_domain":{"category":"source","description":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is \"com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as \"co.uk\".","example":"co.uk","name":"source.top_level_domain","type":"keyword"},"source.user.domain":{"category":"source","description":"Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.","name":"source.user.domain","type":"keyword"},"source.user.email":{"category":"source","description":"User email address.","name":"source.user.email","type":"keyword"},"source.user.full_name":{"category":"source","description":"User's full name, if available.","example":"Albert Einstein","name":"source.user.full_name","type":"keyword"},"source.user.group.domain":{"category":"source","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"source.user.group.domain","type":"keyword"},"source.user.group.id":{"category":"source","description":"Unique identifier for the group on the system/platform.","name":"source.user.group.id","type":"keyword"},"source.user.group.name":{"category":"source","description":"Name of the group.","name":"source.user.group.name","type":"keyword"},"source.user.hash":{"category":"source","description":"Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.","name":"source.user.hash","type":"keyword"},"source.user.id":{"category":"source","description":"Unique identifier of the user.","example":"S-1-5-21-202424912787-2692429404-2351956786-1000","name":"source.user.id","type":"keyword"},"source.user.name":{"category":"source","description":"Short name or login of the user.","example":"a.einstein","name":"source.user.name","type":"keyword"},"source.user.roles":{"category":"source","description":"Array of user roles at the time of the event.","example":"[\"kibana_admin\", \"reporting_user\"]","name":"source.user.roles","type":"keyword"},"threat.enrichments":{"category":"threat","description":"A list of associated indicators objects enriching the event, and the context of that association/enrichment.","name":"threat.enrichments","type":"nested"},"threat.enrichments.indicator":{"category":"threat","description":"Object containing associated indicators enriching the event.","name":"threat.enrichments.indicator","type":"object"},"threat.enrichments.indicator.as.number":{"category":"threat","description":"Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.","example":15169,"name":"threat.enrichments.indicator.as.number","type":"long"},"threat.enrichments.indicator.as.organization.name":{"category":"threat","description":"Organization name.","example":"Google LLC","name":"threat.enrichments.indicator.as.organization.name","type":"keyword"},"threat.enrichments.indicator.confidence":{"category":"threat","description":"Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: * Not Specified * None * Low * Medium * High","example":"Medium","name":"threat.enrichments.indicator.confidence","type":"keyword"},"threat.enrichments.indicator.description":{"category":"threat","description":"Describes the type of action conducted by the threat.","example":"IP x.x.x.x was observed delivering the Angler EK.","name":"threat.enrichments.indicator.description","type":"keyword"},"threat.enrichments.indicator.email.address":{"category":"threat","description":"Identifies a threat indicator as an email address (irrespective of direction).","example":"phish@example.com","name":"threat.enrichments.indicator.email.address","type":"keyword"},"threat.enrichments.indicator.file.accessed":{"category":"threat","description":"Last time the file was accessed. Note that not all filesystems keep track of access time.","name":"threat.enrichments.indicator.file.accessed","type":"date"},"threat.enrichments.indicator.file.attributes":{"category":"threat","description":"Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.","example":"[\"readonly\", \"system\"]","name":"threat.enrichments.indicator.file.attributes","type":"keyword"},"threat.enrichments.indicator.file.code_signature.digest_algorithm":{"category":"threat","description":"The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.","example":"sha256","name":"threat.enrichments.indicator.file.code_signature.digest_algorithm","type":"keyword"},"threat.enrichments.indicator.file.code_signature.exists":{"category":"threat","description":"Boolean to capture if a signature is present.","example":"true","name":"threat.enrichments.indicator.file.code_signature.exists","type":"boolean"},"threat.enrichments.indicator.file.code_signature.signing_id":{"category":"threat","description":"The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.","example":"com.apple.xpc.proxy","name":"threat.enrichments.indicator.file.code_signature.signing_id","type":"keyword"},"threat.enrichments.indicator.file.code_signature.status":{"category":"threat","description":"Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.","example":"ERROR_UNTRUSTED_ROOT","name":"threat.enrichments.indicator.file.code_signature.status","type":"keyword"},"threat.enrichments.indicator.file.code_signature.subject_name":{"category":"threat","description":"Subject name of the code signer","example":"Microsoft Corporation","name":"threat.enrichments.indicator.file.code_signature.subject_name","type":"keyword"},"threat.enrichments.indicator.file.code_signature.team_id":{"category":"threat","description":"The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.","example":"EQHXZ8M8AV","name":"threat.enrichments.indicator.file.code_signature.team_id","type":"keyword"},"threat.enrichments.indicator.file.code_signature.timestamp":{"category":"threat","description":"Date and time when the code signature was generated and signed.","example":"2021-01-01T12:10:30Z","name":"threat.enrichments.indicator.file.code_signature.timestamp","type":"date"},"threat.enrichments.indicator.file.code_signature.trusted":{"category":"threat","description":"Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.","example":"true","name":"threat.enrichments.indicator.file.code_signature.trusted","type":"boolean"},"threat.enrichments.indicator.file.code_signature.valid":{"category":"threat","description":"Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.","example":"true","name":"threat.enrichments.indicator.file.code_signature.valid","type":"boolean"},"threat.enrichments.indicator.file.created":{"category":"threat","description":"File creation time. Note that not all filesystems store the creation time.","name":"threat.enrichments.indicator.file.created","type":"date"},"threat.enrichments.indicator.file.ctime":{"category":"threat","description":"Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.","name":"threat.enrichments.indicator.file.ctime","type":"date"},"threat.enrichments.indicator.file.device":{"category":"threat","description":"Device that is the source of the file.","example":"sda","name":"threat.enrichments.indicator.file.device","type":"keyword"},"threat.enrichments.indicator.file.directory":{"category":"threat","description":"Directory where the file is located. It should include the drive letter, when appropriate.","example":"/home/alice","name":"threat.enrichments.indicator.file.directory","type":"keyword"},"threat.enrichments.indicator.file.drive_letter":{"category":"threat","description":"Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.","example":"C","name":"threat.enrichments.indicator.file.drive_letter","type":"keyword"},"threat.enrichments.indicator.file.elf.architecture":{"category":"threat","description":"Machine architecture of the ELF file.","example":"x86-64","name":"threat.enrichments.indicator.file.elf.architecture","type":"keyword"},"threat.enrichments.indicator.file.elf.byte_order":{"category":"threat","description":"Byte sequence of ELF file.","example":"Little Endian","name":"threat.enrichments.indicator.file.elf.byte_order","type":"keyword"},"threat.enrichments.indicator.file.elf.cpu_type":{"category":"threat","description":"CPU type of the ELF file.","example":"Intel","name":"threat.enrichments.indicator.file.elf.cpu_type","type":"keyword"},"threat.enrichments.indicator.file.elf.creation_date":{"category":"threat","description":"Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.","name":"threat.enrichments.indicator.file.elf.creation_date","type":"date"},"threat.enrichments.indicator.file.elf.exports":{"category":"threat","description":"List of exported element names and types.","name":"threat.enrichments.indicator.file.elf.exports","type":"flattened"},"threat.enrichments.indicator.file.elf.header.abi_version":{"category":"threat","description":"Version of the ELF Application Binary Interface (ABI).","name":"threat.enrichments.indicator.file.elf.header.abi_version","type":"keyword"},"threat.enrichments.indicator.file.elf.header.class":{"category":"threat","description":"Header class of the ELF file.","name":"threat.enrichments.indicator.file.elf.header.class","type":"keyword"},"threat.enrichments.indicator.file.elf.header.data":{"category":"threat","description":"Data table of the ELF header.","name":"threat.enrichments.indicator.file.elf.header.data","type":"keyword"},"threat.enrichments.indicator.file.elf.header.entrypoint":{"category":"threat","description":"Header entrypoint of the ELF file.","name":"threat.enrichments.indicator.file.elf.header.entrypoint","type":"long","format":"string"},"threat.enrichments.indicator.file.elf.header.object_version":{"category":"threat","description":"\"0x1\" for original ELF files.","name":"threat.enrichments.indicator.file.elf.header.object_version","type":"keyword"},"threat.enrichments.indicator.file.elf.header.os_abi":{"category":"threat","description":"Application Binary Interface (ABI) of the Linux OS.","name":"threat.enrichments.indicator.file.elf.header.os_abi","type":"keyword"},"threat.enrichments.indicator.file.elf.header.type":{"category":"threat","description":"Header type of the ELF file.","name":"threat.enrichments.indicator.file.elf.header.type","type":"keyword"},"threat.enrichments.indicator.file.elf.header.version":{"category":"threat","description":"Version of the ELF header.","name":"threat.enrichments.indicator.file.elf.header.version","type":"keyword"},"threat.enrichments.indicator.file.elf.imports":{"category":"threat","description":"List of imported element names and types.","name":"threat.enrichments.indicator.file.elf.imports","type":"flattened"},"threat.enrichments.indicator.file.elf.sections":{"category":"threat","description":"An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.","name":"threat.enrichments.indicator.file.elf.sections","type":"nested"},"threat.enrichments.indicator.file.elf.sections.chi2":{"category":"threat","description":"Chi-square probability distribution of the section.","name":"threat.enrichments.indicator.file.elf.sections.chi2","type":"long","format":"number"},"threat.enrichments.indicator.file.elf.sections.entropy":{"category":"threat","description":"Shannon entropy calculation from the section.","name":"threat.enrichments.indicator.file.elf.sections.entropy","type":"long","format":"number"},"threat.enrichments.indicator.file.elf.sections.flags":{"category":"threat","description":"ELF Section List flags.","name":"threat.enrichments.indicator.file.elf.sections.flags","type":"keyword"},"threat.enrichments.indicator.file.elf.sections.name":{"category":"threat","description":"ELF Section List name.","name":"threat.enrichments.indicator.file.elf.sections.name","type":"keyword"},"threat.enrichments.indicator.file.elf.sections.physical_offset":{"category":"threat","description":"ELF Section List offset.","name":"threat.enrichments.indicator.file.elf.sections.physical_offset","type":"keyword"},"threat.enrichments.indicator.file.elf.sections.physical_size":{"category":"threat","description":"ELF Section List physical size.","name":"threat.enrichments.indicator.file.elf.sections.physical_size","type":"long","format":"bytes"},"threat.enrichments.indicator.file.elf.sections.type":{"category":"threat","description":"ELF Section List type.","name":"threat.enrichments.indicator.file.elf.sections.type","type":"keyword"},"threat.enrichments.indicator.file.elf.sections.virtual_address":{"category":"threat","description":"ELF Section List virtual address.","name":"threat.enrichments.indicator.file.elf.sections.virtual_address","type":"long","format":"string"},"threat.enrichments.indicator.file.elf.sections.virtual_size":{"category":"threat","description":"ELF Section List virtual size.","name":"threat.enrichments.indicator.file.elf.sections.virtual_size","type":"long","format":"string"},"threat.enrichments.indicator.file.elf.segments":{"category":"threat","description":"An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.","name":"threat.enrichments.indicator.file.elf.segments","type":"nested"},"threat.enrichments.indicator.file.elf.segments.sections":{"category":"threat","description":"ELF object segment sections.","name":"threat.enrichments.indicator.file.elf.segments.sections","type":"keyword"},"threat.enrichments.indicator.file.elf.segments.type":{"category":"threat","description":"ELF object segment type.","name":"threat.enrichments.indicator.file.elf.segments.type","type":"keyword"},"threat.enrichments.indicator.file.elf.shared_libraries":{"category":"threat","description":"List of shared libraries used by this ELF object.","name":"threat.enrichments.indicator.file.elf.shared_libraries","type":"keyword"},"threat.enrichments.indicator.file.elf.telfhash":{"category":"threat","description":"telfhash symbol hash for ELF file.","name":"threat.enrichments.indicator.file.elf.telfhash","type":"keyword"},"threat.enrichments.indicator.file.extension":{"category":"threat","description":"File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured (\"gz\", not \"tar.gz\").","example":"png","name":"threat.enrichments.indicator.file.extension","type":"keyword"},"threat.enrichments.indicator.file.fork_name":{"category":"threat","description":"A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.","example":"Zone.Identifer","name":"threat.enrichments.indicator.file.fork_name","type":"keyword"},"threat.enrichments.indicator.file.gid":{"category":"threat","description":"Primary group ID (GID) of the file.","example":"1001","name":"threat.enrichments.indicator.file.gid","type":"keyword"},"threat.enrichments.indicator.file.group":{"category":"threat","description":"Primary group name of the file.","example":"alice","name":"threat.enrichments.indicator.file.group","type":"keyword"},"threat.enrichments.indicator.file.hash.md5":{"category":"threat","description":"MD5 hash.","name":"threat.enrichments.indicator.file.hash.md5","type":"keyword"},"threat.enrichments.indicator.file.hash.sha1":{"category":"threat","description":"SHA1 hash.","name":"threat.enrichments.indicator.file.hash.sha1","type":"keyword"},"threat.enrichments.indicator.file.hash.sha256":{"category":"threat","description":"SHA256 hash.","name":"threat.enrichments.indicator.file.hash.sha256","type":"keyword"},"threat.enrichments.indicator.file.hash.sha512":{"category":"threat","description":"SHA512 hash.","name":"threat.enrichments.indicator.file.hash.sha512","type":"keyword"},"threat.enrichments.indicator.file.hash.ssdeep":{"category":"threat","description":"SSDEEP hash.","name":"threat.enrichments.indicator.file.hash.ssdeep","type":"keyword"},"threat.enrichments.indicator.file.inode":{"category":"threat","description":"Inode representing the file in the filesystem.","example":"256383","name":"threat.enrichments.indicator.file.inode","type":"keyword"},"threat.enrichments.indicator.file.mime_type":{"category":"threat","description":"MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.","name":"threat.enrichments.indicator.file.mime_type","type":"keyword"},"threat.enrichments.indicator.file.mode":{"category":"threat","description":"Mode of the file in octal representation.","example":"0640","name":"threat.enrichments.indicator.file.mode","type":"keyword"},"threat.enrichments.indicator.file.mtime":{"category":"threat","description":"Last time the file content was modified.","name":"threat.enrichments.indicator.file.mtime","type":"date"},"threat.enrichments.indicator.file.name":{"category":"threat","description":"Name of the file including the extension, without the directory.","example":"example.png","name":"threat.enrichments.indicator.file.name","type":"keyword"},"threat.enrichments.indicator.file.owner":{"category":"threat","description":"File owner's username.","example":"alice","name":"threat.enrichments.indicator.file.owner","type":"keyword"},"threat.enrichments.indicator.file.path":{"category":"threat","description":"Full path to the file, including the file name. It should include the drive letter, when appropriate.","example":"/home/alice/example.png","name":"threat.enrichments.indicator.file.path","type":"keyword"},"threat.enrichments.indicator.file.pe.architecture":{"category":"threat","description":"CPU architecture target for the file.","example":"x64","name":"threat.enrichments.indicator.file.pe.architecture","type":"keyword"},"threat.enrichments.indicator.file.pe.company":{"category":"threat","description":"Internal company name of the file, provided at compile-time.","example":"Microsoft Corporation","name":"threat.enrichments.indicator.file.pe.company","type":"keyword"},"threat.enrichments.indicator.file.pe.description":{"category":"threat","description":"Internal description of the file, provided at compile-time.","example":"Paint","name":"threat.enrichments.indicator.file.pe.description","type":"keyword"},"threat.enrichments.indicator.file.pe.file_version":{"category":"threat","description":"Internal version of the file, provided at compile-time.","example":"6.3.9600.17415","name":"threat.enrichments.indicator.file.pe.file_version","type":"keyword"},"threat.enrichments.indicator.file.pe.imphash":{"category":"threat","description":"A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.","example":"0c6803c4e922103c4dca5963aad36ddf","name":"threat.enrichments.indicator.file.pe.imphash","type":"keyword"},"threat.enrichments.indicator.file.pe.original_file_name":{"category":"threat","description":"Internal name of the file, provided at compile-time.","example":"MSPAINT.EXE","name":"threat.enrichments.indicator.file.pe.original_file_name","type":"keyword"},"threat.enrichments.indicator.file.pe.product":{"category":"threat","description":"Internal product name of the file, provided at compile-time.","example":"Microsoft® Windows® Operating System","name":"threat.enrichments.indicator.file.pe.product","type":"keyword"},"threat.enrichments.indicator.file.size":{"category":"threat","description":"File size in bytes. Only relevant when `file.type` is \"file\".","example":16384,"name":"threat.enrichments.indicator.file.size","type":"long"},"threat.enrichments.indicator.file.target_path":{"category":"threat","description":"Target path for symlinks.","name":"threat.enrichments.indicator.file.target_path","type":"keyword"},"threat.enrichments.indicator.file.type":{"category":"threat","description":"File type (file, dir, or symlink).","example":"file","name":"threat.enrichments.indicator.file.type","type":"keyword"},"threat.enrichments.indicator.file.uid":{"category":"threat","description":"The user ID (UID) or security identifier (SID) of the file owner.","example":"1001","name":"threat.enrichments.indicator.file.uid","type":"keyword"},"threat.enrichments.indicator.file.x509.alternative_names":{"category":"threat","description":"List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.","example":"*.elastic.co","name":"threat.enrichments.indicator.file.x509.alternative_names","type":"keyword"},"threat.enrichments.indicator.file.x509.issuer.common_name":{"category":"threat","description":"List of common name (CN) of issuing certificate authority.","example":"Example SHA2 High Assurance Server CA","name":"threat.enrichments.indicator.file.x509.issuer.common_name","type":"keyword"},"threat.enrichments.indicator.file.x509.issuer.country":{"category":"threat","description":"List of country (C) codes","example":"US","name":"threat.enrichments.indicator.file.x509.issuer.country","type":"keyword"},"threat.enrichments.indicator.file.x509.issuer.distinguished_name":{"category":"threat","description":"Distinguished name (DN) of issuing certificate authority.","example":"C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA","name":"threat.enrichments.indicator.file.x509.issuer.distinguished_name","type":"keyword"},"threat.enrichments.indicator.file.x509.issuer.locality":{"category":"threat","description":"List of locality names (L)","example":"Mountain View","name":"threat.enrichments.indicator.file.x509.issuer.locality","type":"keyword"},"threat.enrichments.indicator.file.x509.issuer.organization":{"category":"threat","description":"List of organizations (O) of issuing certificate authority.","example":"Example Inc","name":"threat.enrichments.indicator.file.x509.issuer.organization","type":"keyword"},"threat.enrichments.indicator.file.x509.issuer.organizational_unit":{"category":"threat","description":"List of organizational units (OU) of issuing certificate authority.","example":"www.example.com","name":"threat.enrichments.indicator.file.x509.issuer.organizational_unit","type":"keyword"},"threat.enrichments.indicator.file.x509.issuer.state_or_province":{"category":"threat","description":"List of state or province names (ST, S, or P)","example":"California","name":"threat.enrichments.indicator.file.x509.issuer.state_or_province","type":"keyword"},"threat.enrichments.indicator.file.x509.not_after":{"category":"threat","description":"Time at which the certificate is no longer considered valid.","example":"\"2020-07-16T03:15:39.000Z\"","name":"threat.enrichments.indicator.file.x509.not_after","type":"date"},"threat.enrichments.indicator.file.x509.not_before":{"category":"threat","description":"Time at which the certificate is first considered valid.","example":"\"2019-08-16T01:40:25.000Z\"","name":"threat.enrichments.indicator.file.x509.not_before","type":"date"},"threat.enrichments.indicator.file.x509.public_key_algorithm":{"category":"threat","description":"Algorithm used to generate the public key.","example":"RSA","name":"threat.enrichments.indicator.file.x509.public_key_algorithm","type":"keyword"},"threat.enrichments.indicator.file.x509.public_key_curve":{"category":"threat","description":"The curve used by the elliptic curve public key algorithm. This is algorithm specific.","example":"nistp521","name":"threat.enrichments.indicator.file.x509.public_key_curve","type":"keyword"},"threat.enrichments.indicator.file.x509.public_key_exponent":{"category":"threat","description":"Exponent used to derive the public key. This is algorithm specific.","example":65537,"name":"threat.enrichments.indicator.file.x509.public_key_exponent","type":"long"},"threat.enrichments.indicator.file.x509.public_key_size":{"category":"threat","description":"The size of the public key space in bits.","example":2048,"name":"threat.enrichments.indicator.file.x509.public_key_size","type":"long"},"threat.enrichments.indicator.file.x509.serial_number":{"category":"threat","description":"Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.","example":"55FBB9C7DEBF09809D12CCAA","name":"threat.enrichments.indicator.file.x509.serial_number","type":"keyword"},"threat.enrichments.indicator.file.x509.signature_algorithm":{"category":"threat","description":"Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.","example":"SHA256-RSA","name":"threat.enrichments.indicator.file.x509.signature_algorithm","type":"keyword"},"threat.enrichments.indicator.file.x509.subject.common_name":{"category":"threat","description":"List of common names (CN) of subject.","example":"shared.global.example.net","name":"threat.enrichments.indicator.file.x509.subject.common_name","type":"keyword"},"threat.enrichments.indicator.file.x509.subject.country":{"category":"threat","description":"List of country (C) code","example":"US","name":"threat.enrichments.indicator.file.x509.subject.country","type":"keyword"},"threat.enrichments.indicator.file.x509.subject.distinguished_name":{"category":"threat","description":"Distinguished name (DN) of the certificate subject entity.","example":"C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net","name":"threat.enrichments.indicator.file.x509.subject.distinguished_name","type":"keyword"},"threat.enrichments.indicator.file.x509.subject.locality":{"category":"threat","description":"List of locality names (L)","example":"San Francisco","name":"threat.enrichments.indicator.file.x509.subject.locality","type":"keyword"},"threat.enrichments.indicator.file.x509.subject.organization":{"category":"threat","description":"List of organizations (O) of subject.","example":"Example, Inc.","name":"threat.enrichments.indicator.file.x509.subject.organization","type":"keyword"},"threat.enrichments.indicator.file.x509.subject.organizational_unit":{"category":"threat","description":"List of organizational units (OU) of subject.","name":"threat.enrichments.indicator.file.x509.subject.organizational_unit","type":"keyword"},"threat.enrichments.indicator.file.x509.subject.state_or_province":{"category":"threat","description":"List of state or province names (ST, S, or P)","example":"California","name":"threat.enrichments.indicator.file.x509.subject.state_or_province","type":"keyword"},"threat.enrichments.indicator.file.x509.version_number":{"category":"threat","description":"Version of x509 format.","example":3,"name":"threat.enrichments.indicator.file.x509.version_number","type":"keyword"},"threat.enrichments.indicator.first_seen":{"category":"threat","description":"The date and time when intelligence source first reported sighting this indicator.","example":"2020-11-05T17:25:47.000Z","name":"threat.enrichments.indicator.first_seen","type":"date"},"threat.enrichments.indicator.geo.city_name":{"category":"threat","description":"City name.","example":"Montreal","name":"threat.enrichments.indicator.geo.city_name","type":"keyword"},"threat.enrichments.indicator.geo.continent_code":{"category":"threat","description":"Two-letter code representing continent's name.","example":"NA","name":"threat.enrichments.indicator.geo.continent_code","type":"keyword"},"threat.enrichments.indicator.geo.continent_name":{"category":"threat","description":"Name of the continent.","example":"North America","name":"threat.enrichments.indicator.geo.continent_name","type":"keyword"},"threat.enrichments.indicator.geo.country_iso_code":{"category":"threat","description":"Country ISO code.","example":"CA","name":"threat.enrichments.indicator.geo.country_iso_code","type":"keyword"},"threat.enrichments.indicator.geo.country_name":{"category":"threat","description":"Country name.","example":"Canada","name":"threat.enrichments.indicator.geo.country_name","type":"keyword"},"threat.enrichments.indicator.geo.location":{"category":"threat","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"threat.enrichments.indicator.geo.location","type":"geo_point"},"threat.enrichments.indicator.geo.name":{"category":"threat","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"threat.enrichments.indicator.geo.name","type":"keyword"},"threat.enrichments.indicator.geo.postal_code":{"category":"threat","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"threat.enrichments.indicator.geo.postal_code","type":"keyword"},"threat.enrichments.indicator.geo.region_iso_code":{"category":"threat","description":"Region ISO code.","example":"CA-QC","name":"threat.enrichments.indicator.geo.region_iso_code","type":"keyword"},"threat.enrichments.indicator.geo.region_name":{"category":"threat","description":"Region name.","example":"Quebec","name":"threat.enrichments.indicator.geo.region_name","type":"keyword"},"threat.enrichments.indicator.geo.timezone":{"category":"threat","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"threat.enrichments.indicator.geo.timezone","type":"keyword"},"threat.enrichments.indicator.ip":{"category":"threat","description":"Identifies a threat indicator as an IP address (irrespective of direction).","example":"1.2.3.4","name":"threat.enrichments.indicator.ip","type":"ip"},"threat.enrichments.indicator.last_seen":{"category":"threat","description":"The date and time when intelligence source last reported sighting this indicator.","example":"2020-11-05T17:25:47.000Z","name":"threat.enrichments.indicator.last_seen","type":"date"},"threat.enrichments.indicator.marking.tlp":{"category":"threat","description":"Traffic Light Protocol sharing markings. Recommended values are: * WHITE * GREEN * AMBER * RED","example":"White","name":"threat.enrichments.indicator.marking.tlp","type":"keyword"},"threat.enrichments.indicator.modified_at":{"category":"threat","description":"The date and time when intelligence source last modified information for this indicator.","example":"2020-11-05T17:25:47.000Z","name":"threat.enrichments.indicator.modified_at","type":"date"},"threat.enrichments.indicator.port":{"category":"threat","description":"Identifies a threat indicator as a port number (irrespective of direction).","example":443,"name":"threat.enrichments.indicator.port","type":"long"},"threat.enrichments.indicator.provider":{"category":"threat","description":"The name of the indicator's provider.","example":"lrz_urlhaus","name":"threat.enrichments.indicator.provider","type":"keyword"},"threat.enrichments.indicator.reference":{"category":"threat","description":"Reference URL linking to additional information about this indicator.","example":"https://system.example.com/indicator/0001234","name":"threat.enrichments.indicator.reference","type":"keyword"},"threat.enrichments.indicator.registry.data.bytes":{"category":"threat","description":"Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.","example":"ZQBuAC0AVQBTAAAAZQBuAAAAAAA=","name":"threat.enrichments.indicator.registry.data.bytes","type":"keyword"},"threat.enrichments.indicator.registry.data.strings":{"category":"threat","description":"Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `\"1\"`).","example":"[\"C:\\rta\\red_ttp\\bin\\myapp.exe\"]","name":"threat.enrichments.indicator.registry.data.strings","type":"wildcard"},"threat.enrichments.indicator.registry.data.type":{"category":"threat","description":"Standard registry type for encoding contents","example":"REG_SZ","name":"threat.enrichments.indicator.registry.data.type","type":"keyword"},"threat.enrichments.indicator.registry.hive":{"category":"threat","description":"Abbreviated name for the hive.","example":"HKLM","name":"threat.enrichments.indicator.registry.hive","type":"keyword"},"threat.enrichments.indicator.registry.key":{"category":"threat","description":"Hive-relative path of keys.","example":"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe","name":"threat.enrichments.indicator.registry.key","type":"keyword"},"threat.enrichments.indicator.registry.path":{"category":"threat","description":"Full path, including hive, key and value","example":"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger","name":"threat.enrichments.indicator.registry.path","type":"keyword"},"threat.enrichments.indicator.registry.value":{"category":"threat","description":"Name of the value written.","example":"Debugger","name":"threat.enrichments.indicator.registry.value","type":"keyword"},"threat.enrichments.indicator.scanner_stats":{"category":"threat","description":"Count of AV/EDR vendors that successfully detected malicious file or URL.","example":4,"name":"threat.enrichments.indicator.scanner_stats","type":"long"},"threat.enrichments.indicator.sightings":{"category":"threat","description":"Number of times this indicator was observed conducting threat activity.","example":20,"name":"threat.enrichments.indicator.sightings","type":"long"},"threat.enrichments.indicator.type":{"category":"threat","description":"Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: * autonomous-system * artifact * directory * domain-name * email-addr * file * ipv4-addr * ipv6-addr * mac-addr * mutex * port * process * software * url * user-account * windows-registry-key * x509-certificate","example":"ipv4-addr","name":"threat.enrichments.indicator.type","type":"keyword"},"threat.enrichments.indicator.url.domain":{"category":"threat","description":"Domain of the url, such as \"www.elastic.co\". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.","example":"www.elastic.co","name":"threat.enrichments.indicator.url.domain","type":"keyword"},"threat.enrichments.indicator.url.extension":{"category":"threat","description":"The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be \"png\", not \".png\". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured (\"gz\", not \"tar.gz\").","example":"png","name":"threat.enrichments.indicator.url.extension","type":"keyword"},"threat.enrichments.indicator.url.fragment":{"category":"threat","description":"Portion of the url after the `#`, such as \"top\". The `#` is not part of the fragment.","name":"threat.enrichments.indicator.url.fragment","type":"keyword"},"threat.enrichments.indicator.url.full":{"category":"threat","description":"If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.","example":"https://www.elastic.co:443/search?q=elasticsearch#top","name":"threat.enrichments.indicator.url.full","type":"wildcard"},"threat.enrichments.indicator.url.original":{"category":"threat","description":"Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.","example":"https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch","name":"threat.enrichments.indicator.url.original","type":"wildcard"},"threat.enrichments.indicator.url.password":{"category":"threat","description":"Password of the request.","name":"threat.enrichments.indicator.url.password","type":"keyword"},"threat.enrichments.indicator.url.path":{"category":"threat","description":"Path of the request, such as \"/search\".","name":"threat.enrichments.indicator.url.path","type":"wildcard"},"threat.enrichments.indicator.url.port":{"category":"threat","description":"Port of the request, such as 443.","example":443,"name":"threat.enrichments.indicator.url.port","type":"long","format":"string"},"threat.enrichments.indicator.url.query":{"category":"threat","description":"The query field describes the query string of the request, such as \"q=elasticsearch\". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.","name":"threat.enrichments.indicator.url.query","type":"keyword"},"threat.enrichments.indicator.url.registered_domain":{"category":"threat","description":"The highest registered url domain, stripped of the subdomain. For example, the registered domain for \"foo.example.com\" is \"example.com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as \"co.uk\".","example":"example.com","name":"threat.enrichments.indicator.url.registered_domain","type":"keyword"},"threat.enrichments.indicator.url.scheme":{"category":"threat","description":"Scheme of the request, such as \"https\". Note: The `:` is not part of the scheme.","example":"https","name":"threat.enrichments.indicator.url.scheme","type":"keyword"},"threat.enrichments.indicator.url.subdomain":{"category":"threat","description":"The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of \"www.east.mydomain.co.uk\" is \"east\". If the domain has multiple levels of subdomain, such as \"sub2.sub1.example.com\", the subdomain field should contain \"sub2.sub1\", with no trailing period.","example":"east","name":"threat.enrichments.indicator.url.subdomain","type":"keyword"},"threat.enrichments.indicator.url.top_level_domain":{"category":"threat","description":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is \"com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as \"co.uk\".","example":"co.uk","name":"threat.enrichments.indicator.url.top_level_domain","type":"keyword"},"threat.enrichments.indicator.url.username":{"category":"threat","description":"Username of the request.","name":"threat.enrichments.indicator.url.username","type":"keyword"},"threat.enrichments.indicator.x509.alternative_names":{"category":"threat","description":"List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.","example":"*.elastic.co","name":"threat.enrichments.indicator.x509.alternative_names","type":"keyword"},"threat.enrichments.indicator.x509.issuer.common_name":{"category":"threat","description":"List of common name (CN) of issuing certificate authority.","example":"Example SHA2 High Assurance Server CA","name":"threat.enrichments.indicator.x509.issuer.common_name","type":"keyword"},"threat.enrichments.indicator.x509.issuer.country":{"category":"threat","description":"List of country (C) codes","example":"US","name":"threat.enrichments.indicator.x509.issuer.country","type":"keyword"},"threat.enrichments.indicator.x509.issuer.distinguished_name":{"category":"threat","description":"Distinguished name (DN) of issuing certificate authority.","example":"C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA","name":"threat.enrichments.indicator.x509.issuer.distinguished_name","type":"keyword"},"threat.enrichments.indicator.x509.issuer.locality":{"category":"threat","description":"List of locality names (L)","example":"Mountain View","name":"threat.enrichments.indicator.x509.issuer.locality","type":"keyword"},"threat.enrichments.indicator.x509.issuer.organization":{"category":"threat","description":"List of organizations (O) of issuing certificate authority.","example":"Example Inc","name":"threat.enrichments.indicator.x509.issuer.organization","type":"keyword"},"threat.enrichments.indicator.x509.issuer.organizational_unit":{"category":"threat","description":"List of organizational units (OU) of issuing certificate authority.","example":"www.example.com","name":"threat.enrichments.indicator.x509.issuer.organizational_unit","type":"keyword"},"threat.enrichments.indicator.x509.issuer.state_or_province":{"category":"threat","description":"List of state or province names (ST, S, or P)","example":"California","name":"threat.enrichments.indicator.x509.issuer.state_or_province","type":"keyword"},"threat.enrichments.indicator.x509.not_after":{"category":"threat","description":"Time at which the certificate is no longer considered valid.","example":"\"2020-07-16T03:15:39.000Z\"","name":"threat.enrichments.indicator.x509.not_after","type":"date"},"threat.enrichments.indicator.x509.not_before":{"category":"threat","description":"Time at which the certificate is first considered valid.","example":"\"2019-08-16T01:40:25.000Z\"","name":"threat.enrichments.indicator.x509.not_before","type":"date"},"threat.enrichments.indicator.x509.public_key_algorithm":{"category":"threat","description":"Algorithm used to generate the public key.","example":"RSA","name":"threat.enrichments.indicator.x509.public_key_algorithm","type":"keyword"},"threat.enrichments.indicator.x509.public_key_curve":{"category":"threat","description":"The curve used by the elliptic curve public key algorithm. This is algorithm specific.","example":"nistp521","name":"threat.enrichments.indicator.x509.public_key_curve","type":"keyword"},"threat.enrichments.indicator.x509.public_key_exponent":{"category":"threat","description":"Exponent used to derive the public key. This is algorithm specific.","example":65537,"name":"threat.enrichments.indicator.x509.public_key_exponent","type":"long"},"threat.enrichments.indicator.x509.public_key_size":{"category":"threat","description":"The size of the public key space in bits.","example":2048,"name":"threat.enrichments.indicator.x509.public_key_size","type":"long"},"threat.enrichments.indicator.x509.serial_number":{"category":"threat","description":"Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.","example":"55FBB9C7DEBF09809D12CCAA","name":"threat.enrichments.indicator.x509.serial_number","type":"keyword"},"threat.enrichments.indicator.x509.signature_algorithm":{"category":"threat","description":"Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.","example":"SHA256-RSA","name":"threat.enrichments.indicator.x509.signature_algorithm","type":"keyword"},"threat.enrichments.indicator.x509.subject.common_name":{"category":"threat","description":"List of common names (CN) of subject.","example":"shared.global.example.net","name":"threat.enrichments.indicator.x509.subject.common_name","type":"keyword"},"threat.enrichments.indicator.x509.subject.country":{"category":"threat","description":"List of country (C) code","example":"US","name":"threat.enrichments.indicator.x509.subject.country","type":"keyword"},"threat.enrichments.indicator.x509.subject.distinguished_name":{"category":"threat","description":"Distinguished name (DN) of the certificate subject entity.","example":"C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net","name":"threat.enrichments.indicator.x509.subject.distinguished_name","type":"keyword"},"threat.enrichments.indicator.x509.subject.locality":{"category":"threat","description":"List of locality names (L)","example":"San Francisco","name":"threat.enrichments.indicator.x509.subject.locality","type":"keyword"},"threat.enrichments.indicator.x509.subject.organization":{"category":"threat","description":"List of organizations (O) of subject.","example":"Example, Inc.","name":"threat.enrichments.indicator.x509.subject.organization","type":"keyword"},"threat.enrichments.indicator.x509.subject.organizational_unit":{"category":"threat","description":"List of organizational units (OU) of subject.","name":"threat.enrichments.indicator.x509.subject.organizational_unit","type":"keyword"},"threat.enrichments.indicator.x509.subject.state_or_province":{"category":"threat","description":"List of state or province names (ST, S, or P)","example":"California","name":"threat.enrichments.indicator.x509.subject.state_or_province","type":"keyword"},"threat.enrichments.indicator.x509.version_number":{"category":"threat","description":"Version of x509 format.","example":3,"name":"threat.enrichments.indicator.x509.version_number","type":"keyword"},"threat.enrichments.matched.atomic":{"category":"threat","description":"Identifies the atomic indicator value that matched a local environment endpoint or network event.","example":"bad-domain.com","name":"threat.enrichments.matched.atomic","type":"keyword"},"threat.enrichments.matched.field":{"category":"threat","description":"Identifies the field of the atomic indicator that matched a local environment endpoint or network event.","example":"file.hash.sha256","name":"threat.enrichments.matched.field","type":"keyword"},"threat.enrichments.matched.id":{"category":"threat","description":"Identifies the _id of the indicator document enriching the event.","example":"ff93aee5-86a1-4a61-b0e6-0cdc313d01b5","name":"threat.enrichments.matched.id","type":"keyword"},"threat.enrichments.matched.index":{"category":"threat","description":"Identifies the _index of the indicator document enriching the event.","example":"filebeat-8.0.0-2021.05.23-000011","name":"threat.enrichments.matched.index","type":"keyword"},"threat.enrichments.matched.type":{"category":"threat","description":"Identifies the type of match that caused the event to be enriched with the given indicator","example":"indicator_match_rule","name":"threat.enrichments.matched.type","type":"keyword"},"threat.framework":{"category":"threat","description":"Name of the threat framework used to further categorize and classify the tactic and technique of the reported threat. Framework classification can be provided by detecting systems, evaluated at ingest time, or retrospectively tagged to events.","example":"MITRE ATT&CK","name":"threat.framework","type":"keyword"},"threat.group.alias":{"category":"threat","description":"The alias(es) of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group alias(es).","example":"[ \"Magecart Group 6\" ]","name":"threat.group.alias","type":"keyword"},"threat.group.id":{"category":"threat","description":"The id of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group id.","example":"G0037","name":"threat.group.id","type":"keyword"},"threat.group.name":{"category":"threat","description":"The name of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group name.","example":"FIN6","name":"threat.group.name","type":"keyword"},"threat.group.reference":{"category":"threat","description":"The reference URL of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group reference URL.","example":"https://attack.mitre.org/groups/G0037/","name":"threat.group.reference","type":"keyword"},"threat.indicator.as.number":{"category":"threat","description":"Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.","example":15169,"name":"threat.indicator.as.number","type":"long"},"threat.indicator.as.organization.name":{"category":"threat","description":"Organization name.","example":"Google LLC","name":"threat.indicator.as.organization.name","type":"keyword"},"threat.indicator.confidence":{"category":"threat","description":"Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: * Not Specified * None * Low * Medium * High","example":"Medium","name":"threat.indicator.confidence","type":"keyword"},"threat.indicator.description":{"category":"threat","description":"Describes the type of action conducted by the threat.","example":"IP x.x.x.x was observed delivering the Angler EK.","name":"threat.indicator.description","type":"keyword"},"threat.indicator.email.address":{"category":"threat","description":"Identifies a threat indicator as an email address (irrespective of direction).","example":"phish@example.com","name":"threat.indicator.email.address","type":"keyword"},"threat.indicator.file.accessed":{"category":"threat","description":"Last time the file was accessed. Note that not all filesystems keep track of access time.","name":"threat.indicator.file.accessed","type":"date"},"threat.indicator.file.attributes":{"category":"threat","description":"Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.","example":"[\"readonly\", \"system\"]","name":"threat.indicator.file.attributes","type":"keyword"},"threat.indicator.file.code_signature.digest_algorithm":{"category":"threat","description":"The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.","example":"sha256","name":"threat.indicator.file.code_signature.digest_algorithm","type":"keyword"},"threat.indicator.file.code_signature.exists":{"category":"threat","description":"Boolean to capture if a signature is present.","example":"true","name":"threat.indicator.file.code_signature.exists","type":"boolean"},"threat.indicator.file.code_signature.signing_id":{"category":"threat","description":"The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.","example":"com.apple.xpc.proxy","name":"threat.indicator.file.code_signature.signing_id","type":"keyword"},"threat.indicator.file.code_signature.status":{"category":"threat","description":"Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.","example":"ERROR_UNTRUSTED_ROOT","name":"threat.indicator.file.code_signature.status","type":"keyword"},"threat.indicator.file.code_signature.subject_name":{"category":"threat","description":"Subject name of the code signer","example":"Microsoft Corporation","name":"threat.indicator.file.code_signature.subject_name","type":"keyword"},"threat.indicator.file.code_signature.team_id":{"category":"threat","description":"The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.","example":"EQHXZ8M8AV","name":"threat.indicator.file.code_signature.team_id","type":"keyword"},"threat.indicator.file.code_signature.timestamp":{"category":"threat","description":"Date and time when the code signature was generated and signed.","example":"2021-01-01T12:10:30Z","name":"threat.indicator.file.code_signature.timestamp","type":"date"},"threat.indicator.file.code_signature.trusted":{"category":"threat","description":"Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.","example":"true","name":"threat.indicator.file.code_signature.trusted","type":"boolean"},"threat.indicator.file.code_signature.valid":{"category":"threat","description":"Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.","example":"true","name":"threat.indicator.file.code_signature.valid","type":"boolean"},"threat.indicator.file.created":{"category":"threat","description":"File creation time. Note that not all filesystems store the creation time.","name":"threat.indicator.file.created","type":"date"},"threat.indicator.file.ctime":{"category":"threat","description":"Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.","name":"threat.indicator.file.ctime","type":"date"},"threat.indicator.file.device":{"category":"threat","description":"Device that is the source of the file.","example":"sda","name":"threat.indicator.file.device","type":"keyword"},"threat.indicator.file.directory":{"category":"threat","description":"Directory where the file is located. It should include the drive letter, when appropriate.","example":"/home/alice","name":"threat.indicator.file.directory","type":"keyword"},"threat.indicator.file.drive_letter":{"category":"threat","description":"Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.","example":"C","name":"threat.indicator.file.drive_letter","type":"keyword"},"threat.indicator.file.elf.architecture":{"category":"threat","description":"Machine architecture of the ELF file.","example":"x86-64","name":"threat.indicator.file.elf.architecture","type":"keyword"},"threat.indicator.file.elf.byte_order":{"category":"threat","description":"Byte sequence of ELF file.","example":"Little Endian","name":"threat.indicator.file.elf.byte_order","type":"keyword"},"threat.indicator.file.elf.cpu_type":{"category":"threat","description":"CPU type of the ELF file.","example":"Intel","name":"threat.indicator.file.elf.cpu_type","type":"keyword"},"threat.indicator.file.elf.creation_date":{"category":"threat","description":"Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.","name":"threat.indicator.file.elf.creation_date","type":"date"},"threat.indicator.file.elf.exports":{"category":"threat","description":"List of exported element names and types.","name":"threat.indicator.file.elf.exports","type":"flattened"},"threat.indicator.file.elf.header.abi_version":{"category":"threat","description":"Version of the ELF Application Binary Interface (ABI).","name":"threat.indicator.file.elf.header.abi_version","type":"keyword"},"threat.indicator.file.elf.header.class":{"category":"threat","description":"Header class of the ELF file.","name":"threat.indicator.file.elf.header.class","type":"keyword"},"threat.indicator.file.elf.header.data":{"category":"threat","description":"Data table of the ELF header.","name":"threat.indicator.file.elf.header.data","type":"keyword"},"threat.indicator.file.elf.header.entrypoint":{"category":"threat","description":"Header entrypoint of the ELF file.","name":"threat.indicator.file.elf.header.entrypoint","type":"long","format":"string"},"threat.indicator.file.elf.header.object_version":{"category":"threat","description":"\"0x1\" for original ELF files.","name":"threat.indicator.file.elf.header.object_version","type":"keyword"},"threat.indicator.file.elf.header.os_abi":{"category":"threat","description":"Application Binary Interface (ABI) of the Linux OS.","name":"threat.indicator.file.elf.header.os_abi","type":"keyword"},"threat.indicator.file.elf.header.type":{"category":"threat","description":"Header type of the ELF file.","name":"threat.indicator.file.elf.header.type","type":"keyword"},"threat.indicator.file.elf.header.version":{"category":"threat","description":"Version of the ELF header.","name":"threat.indicator.file.elf.header.version","type":"keyword"},"threat.indicator.file.elf.imports":{"category":"threat","description":"List of imported element names and types.","name":"threat.indicator.file.elf.imports","type":"flattened"},"threat.indicator.file.elf.sections":{"category":"threat","description":"An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.","name":"threat.indicator.file.elf.sections","type":"nested"},"threat.indicator.file.elf.sections.chi2":{"category":"threat","description":"Chi-square probability distribution of the section.","name":"threat.indicator.file.elf.sections.chi2","type":"long","format":"number"},"threat.indicator.file.elf.sections.entropy":{"category":"threat","description":"Shannon entropy calculation from the section.","name":"threat.indicator.file.elf.sections.entropy","type":"long","format":"number"},"threat.indicator.file.elf.sections.flags":{"category":"threat","description":"ELF Section List flags.","name":"threat.indicator.file.elf.sections.flags","type":"keyword"},"threat.indicator.file.elf.sections.name":{"category":"threat","description":"ELF Section List name.","name":"threat.indicator.file.elf.sections.name","type":"keyword"},"threat.indicator.file.elf.sections.physical_offset":{"category":"threat","description":"ELF Section List offset.","name":"threat.indicator.file.elf.sections.physical_offset","type":"keyword"},"threat.indicator.file.elf.sections.physical_size":{"category":"threat","description":"ELF Section List physical size.","name":"threat.indicator.file.elf.sections.physical_size","type":"long","format":"bytes"},"threat.indicator.file.elf.sections.type":{"category":"threat","description":"ELF Section List type.","name":"threat.indicator.file.elf.sections.type","type":"keyword"},"threat.indicator.file.elf.sections.virtual_address":{"category":"threat","description":"ELF Section List virtual address.","name":"threat.indicator.file.elf.sections.virtual_address","type":"long","format":"string"},"threat.indicator.file.elf.sections.virtual_size":{"category":"threat","description":"ELF Section List virtual size.","name":"threat.indicator.file.elf.sections.virtual_size","type":"long","format":"string"},"threat.indicator.file.elf.segments":{"category":"threat","description":"An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.","name":"threat.indicator.file.elf.segments","type":"nested"},"threat.indicator.file.elf.segments.sections":{"category":"threat","description":"ELF object segment sections.","name":"threat.indicator.file.elf.segments.sections","type":"keyword"},"threat.indicator.file.elf.segments.type":{"category":"threat","description":"ELF object segment type.","name":"threat.indicator.file.elf.segments.type","type":"keyword"},"threat.indicator.file.elf.shared_libraries":{"category":"threat","description":"List of shared libraries used by this ELF object.","name":"threat.indicator.file.elf.shared_libraries","type":"keyword"},"threat.indicator.file.elf.telfhash":{"category":"threat","description":"telfhash symbol hash for ELF file.","name":"threat.indicator.file.elf.telfhash","type":"keyword"},"threat.indicator.file.extension":{"category":"threat","description":"File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured (\"gz\", not \"tar.gz\").","example":"png","name":"threat.indicator.file.extension","type":"keyword"},"threat.indicator.file.fork_name":{"category":"threat","description":"A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.","example":"Zone.Identifer","name":"threat.indicator.file.fork_name","type":"keyword"},"threat.indicator.file.gid":{"category":"threat","description":"Primary group ID (GID) of the file.","example":"1001","name":"threat.indicator.file.gid","type":"keyword"},"threat.indicator.file.group":{"category":"threat","description":"Primary group name of the file.","example":"alice","name":"threat.indicator.file.group","type":"keyword"},"threat.indicator.file.hash.md5":{"category":"threat","description":"MD5 hash.","name":"threat.indicator.file.hash.md5","type":"keyword"},"threat.indicator.file.hash.sha1":{"category":"threat","description":"SHA1 hash.","name":"threat.indicator.file.hash.sha1","type":"keyword"},"threat.indicator.file.hash.sha256":{"category":"threat","description":"SHA256 hash.","name":"threat.indicator.file.hash.sha256","type":"keyword"},"threat.indicator.file.hash.sha512":{"category":"threat","description":"SHA512 hash.","name":"threat.indicator.file.hash.sha512","type":"keyword"},"threat.indicator.file.hash.ssdeep":{"category":"threat","description":"SSDEEP hash.","name":"threat.indicator.file.hash.ssdeep","type":"keyword"},"threat.indicator.file.inode":{"category":"threat","description":"Inode representing the file in the filesystem.","example":"256383","name":"threat.indicator.file.inode","type":"keyword"},"threat.indicator.file.mime_type":{"category":"threat","description":"MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.","name":"threat.indicator.file.mime_type","type":"keyword"},"threat.indicator.file.mode":{"category":"threat","description":"Mode of the file in octal representation.","example":"0640","name":"threat.indicator.file.mode","type":"keyword"},"threat.indicator.file.mtime":{"category":"threat","description":"Last time the file content was modified.","name":"threat.indicator.file.mtime","type":"date"},"threat.indicator.file.name":{"category":"threat","description":"Name of the file including the extension, without the directory.","example":"example.png","name":"threat.indicator.file.name","type":"keyword"},"threat.indicator.file.owner":{"category":"threat","description":"File owner's username.","example":"alice","name":"threat.indicator.file.owner","type":"keyword"},"threat.indicator.file.path":{"category":"threat","description":"Full path to the file, including the file name. It should include the drive letter, when appropriate.","example":"/home/alice/example.png","name":"threat.indicator.file.path","type":"keyword"},"threat.indicator.file.pe.architecture":{"category":"threat","description":"CPU architecture target for the file.","example":"x64","name":"threat.indicator.file.pe.architecture","type":"keyword"},"threat.indicator.file.pe.company":{"category":"threat","description":"Internal company name of the file, provided at compile-time.","example":"Microsoft Corporation","name":"threat.indicator.file.pe.company","type":"keyword"},"threat.indicator.file.pe.description":{"category":"threat","description":"Internal description of the file, provided at compile-time.","example":"Paint","name":"threat.indicator.file.pe.description","type":"keyword"},"threat.indicator.file.pe.file_version":{"category":"threat","description":"Internal version of the file, provided at compile-time.","example":"6.3.9600.17415","name":"threat.indicator.file.pe.file_version","type":"keyword"},"threat.indicator.file.pe.imphash":{"category":"threat","description":"A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.","example":"0c6803c4e922103c4dca5963aad36ddf","name":"threat.indicator.file.pe.imphash","type":"keyword"},"threat.indicator.file.pe.original_file_name":{"category":"threat","description":"Internal name of the file, provided at compile-time.","example":"MSPAINT.EXE","name":"threat.indicator.file.pe.original_file_name","type":"keyword"},"threat.indicator.file.pe.product":{"category":"threat","description":"Internal product name of the file, provided at compile-time.","example":"Microsoft® Windows® Operating System","name":"threat.indicator.file.pe.product","type":"keyword"},"threat.indicator.file.size":{"category":"threat","description":"File size in bytes. Only relevant when `file.type` is \"file\".","example":16384,"name":"threat.indicator.file.size","type":"long"},"threat.indicator.file.target_path":{"category":"threat","description":"Target path for symlinks.","name":"threat.indicator.file.target_path","type":"keyword"},"threat.indicator.file.type":{"category":"threat","description":"File type (file, dir, or symlink).","example":"file","name":"threat.indicator.file.type","type":"keyword"},"threat.indicator.file.uid":{"category":"threat","description":"The user ID (UID) or security identifier (SID) of the file owner.","example":"1001","name":"threat.indicator.file.uid","type":"keyword"},"threat.indicator.file.x509.alternative_names":{"category":"threat","description":"List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.","example":"*.elastic.co","name":"threat.indicator.file.x509.alternative_names","type":"keyword"},"threat.indicator.file.x509.issuer.common_name":{"category":"threat","description":"List of common name (CN) of issuing certificate authority.","example":"Example SHA2 High Assurance Server CA","name":"threat.indicator.file.x509.issuer.common_name","type":"keyword"},"threat.indicator.file.x509.issuer.country":{"category":"threat","description":"List of country (C) codes","example":"US","name":"threat.indicator.file.x509.issuer.country","type":"keyword"},"threat.indicator.file.x509.issuer.distinguished_name":{"category":"threat","description":"Distinguished name (DN) of issuing certificate authority.","example":"C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA","name":"threat.indicator.file.x509.issuer.distinguished_name","type":"keyword"},"threat.indicator.file.x509.issuer.locality":{"category":"threat","description":"List of locality names (L)","example":"Mountain View","name":"threat.indicator.file.x509.issuer.locality","type":"keyword"},"threat.indicator.file.x509.issuer.organization":{"category":"threat","description":"List of organizations (O) of issuing certificate authority.","example":"Example Inc","name":"threat.indicator.file.x509.issuer.organization","type":"keyword"},"threat.indicator.file.x509.issuer.organizational_unit":{"category":"threat","description":"List of organizational units (OU) of issuing certificate authority.","example":"www.example.com","name":"threat.indicator.file.x509.issuer.organizational_unit","type":"keyword"},"threat.indicator.file.x509.issuer.state_or_province":{"category":"threat","description":"List of state or province names (ST, S, or P)","example":"California","name":"threat.indicator.file.x509.issuer.state_or_province","type":"keyword"},"threat.indicator.file.x509.not_after":{"category":"threat","description":"Time at which the certificate is no longer considered valid.","example":"\"2020-07-16T03:15:39.000Z\"","name":"threat.indicator.file.x509.not_after","type":"date"},"threat.indicator.file.x509.not_before":{"category":"threat","description":"Time at which the certificate is first considered valid.","example":"\"2019-08-16T01:40:25.000Z\"","name":"threat.indicator.file.x509.not_before","type":"date"},"threat.indicator.file.x509.public_key_algorithm":{"category":"threat","description":"Algorithm used to generate the public key.","example":"RSA","name":"threat.indicator.file.x509.public_key_algorithm","type":"keyword"},"threat.indicator.file.x509.public_key_curve":{"category":"threat","description":"The curve used by the elliptic curve public key algorithm. This is algorithm specific.","example":"nistp521","name":"threat.indicator.file.x509.public_key_curve","type":"keyword"},"threat.indicator.file.x509.public_key_exponent":{"category":"threat","description":"Exponent used to derive the public key. This is algorithm specific.","example":65537,"name":"threat.indicator.file.x509.public_key_exponent","type":"long"},"threat.indicator.file.x509.public_key_size":{"category":"threat","description":"The size of the public key space in bits.","example":2048,"name":"threat.indicator.file.x509.public_key_size","type":"long"},"threat.indicator.file.x509.serial_number":{"category":"threat","description":"Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.","example":"55FBB9C7DEBF09809D12CCAA","name":"threat.indicator.file.x509.serial_number","type":"keyword"},"threat.indicator.file.x509.signature_algorithm":{"category":"threat","description":"Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.","example":"SHA256-RSA","name":"threat.indicator.file.x509.signature_algorithm","type":"keyword"},"threat.indicator.file.x509.subject.common_name":{"category":"threat","description":"List of common names (CN) of subject.","example":"shared.global.example.net","name":"threat.indicator.file.x509.subject.common_name","type":"keyword"},"threat.indicator.file.x509.subject.country":{"category":"threat","description":"List of country (C) code","example":"US","name":"threat.indicator.file.x509.subject.country","type":"keyword"},"threat.indicator.file.x509.subject.distinguished_name":{"category":"threat","description":"Distinguished name (DN) of the certificate subject entity.","example":"C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net","name":"threat.indicator.file.x509.subject.distinguished_name","type":"keyword"},"threat.indicator.file.x509.subject.locality":{"category":"threat","description":"List of locality names (L)","example":"San Francisco","name":"threat.indicator.file.x509.subject.locality","type":"keyword"},"threat.indicator.file.x509.subject.organization":{"category":"threat","description":"List of organizations (O) of subject.","example":"Example, Inc.","name":"threat.indicator.file.x509.subject.organization","type":"keyword"},"threat.indicator.file.x509.subject.organizational_unit":{"category":"threat","description":"List of organizational units (OU) of subject.","name":"threat.indicator.file.x509.subject.organizational_unit","type":"keyword"},"threat.indicator.file.x509.subject.state_or_province":{"category":"threat","description":"List of state or province names (ST, S, or P)","example":"California","name":"threat.indicator.file.x509.subject.state_or_province","type":"keyword"},"threat.indicator.file.x509.version_number":{"category":"threat","description":"Version of x509 format.","example":3,"name":"threat.indicator.file.x509.version_number","type":"keyword"},"threat.indicator.first_seen":{"category":"threat","description":"The date and time when intelligence source first reported sighting this indicator.","example":"2020-11-05T17:25:47.000Z","name":"threat.indicator.first_seen","type":"date"},"threat.indicator.geo.city_name":{"category":"threat","description":"City name.","example":"Montreal","name":"threat.indicator.geo.city_name","type":"keyword"},"threat.indicator.geo.continent_code":{"category":"threat","description":"Two-letter code representing continent's name.","example":"NA","name":"threat.indicator.geo.continent_code","type":"keyword"},"threat.indicator.geo.continent_name":{"category":"threat","description":"Name of the continent.","example":"North America","name":"threat.indicator.geo.continent_name","type":"keyword"},"threat.indicator.geo.country_iso_code":{"category":"threat","description":"Country ISO code.","example":"CA","name":"threat.indicator.geo.country_iso_code","type":"keyword"},"threat.indicator.geo.country_name":{"category":"threat","description":"Country name.","example":"Canada","name":"threat.indicator.geo.country_name","type":"keyword"},"threat.indicator.geo.location":{"category":"threat","description":"Longitude and latitude.","example":"{ \"lon\": -73.614830, \"lat\": 45.505918 }","name":"threat.indicator.geo.location","type":"geo_point"},"threat.indicator.geo.name":{"category":"threat","description":"User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.","example":"boston-dc","name":"threat.indicator.geo.name","type":"keyword"},"threat.indicator.geo.postal_code":{"category":"threat","description":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.","example":94040,"name":"threat.indicator.geo.postal_code","type":"keyword"},"threat.indicator.geo.region_iso_code":{"category":"threat","description":"Region ISO code.","example":"CA-QC","name":"threat.indicator.geo.region_iso_code","type":"keyword"},"threat.indicator.geo.region_name":{"category":"threat","description":"Region name.","example":"Quebec","name":"threat.indicator.geo.region_name","type":"keyword"},"threat.indicator.geo.timezone":{"category":"threat","description":"The time zone of the location, such as IANA time zone name.","example":"America/Argentina/Buenos_Aires","name":"threat.indicator.geo.timezone","type":"keyword"},"threat.indicator.ip":{"category":"threat","description":"Identifies a threat indicator as an IP address (irrespective of direction).","example":"1.2.3.4","name":"threat.indicator.ip","type":"ip"},"threat.indicator.last_seen":{"category":"threat","description":"The date and time when intelligence source last reported sighting this indicator.","example":"2020-11-05T17:25:47.000Z","name":"threat.indicator.last_seen","type":"date"},"threat.indicator.marking.tlp":{"category":"threat","description":"Traffic Light Protocol sharing markings. Recommended values are: * WHITE * GREEN * AMBER * RED","example":"WHITE","name":"threat.indicator.marking.tlp","type":"keyword"},"threat.indicator.modified_at":{"category":"threat","description":"The date and time when intelligence source last modified information for this indicator.","example":"2020-11-05T17:25:47.000Z","name":"threat.indicator.modified_at","type":"date"},"threat.indicator.port":{"category":"threat","description":"Identifies a threat indicator as a port number (irrespective of direction).","example":443,"name":"threat.indicator.port","type":"long"},"threat.indicator.provider":{"category":"threat","description":"The name of the indicator's provider.","example":"lrz_urlhaus","name":"threat.indicator.provider","type":"keyword"},"threat.indicator.reference":{"category":"threat","description":"Reference URL linking to additional information about this indicator.","example":"https://system.example.com/indicator/0001234","name":"threat.indicator.reference","type":"keyword"},"threat.indicator.registry.data.bytes":{"category":"threat","description":"Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.","example":"ZQBuAC0AVQBTAAAAZQBuAAAAAAA=","name":"threat.indicator.registry.data.bytes","type":"keyword"},"threat.indicator.registry.data.strings":{"category":"threat","description":"Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `\"1\"`).","example":"[\"C:\\rta\\red_ttp\\bin\\myapp.exe\"]","name":"threat.indicator.registry.data.strings","type":"wildcard"},"threat.indicator.registry.data.type":{"category":"threat","description":"Standard registry type for encoding contents","example":"REG_SZ","name":"threat.indicator.registry.data.type","type":"keyword"},"threat.indicator.registry.hive":{"category":"threat","description":"Abbreviated name for the hive.","example":"HKLM","name":"threat.indicator.registry.hive","type":"keyword"},"threat.indicator.registry.key":{"category":"threat","description":"Hive-relative path of keys.","example":"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe","name":"threat.indicator.registry.key","type":"keyword"},"threat.indicator.registry.path":{"category":"threat","description":"Full path, including hive, key and value","example":"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger","name":"threat.indicator.registry.path","type":"keyword"},"threat.indicator.registry.value":{"category":"threat","description":"Name of the value written.","example":"Debugger","name":"threat.indicator.registry.value","type":"keyword"},"threat.indicator.scanner_stats":{"category":"threat","description":"Count of AV/EDR vendors that successfully detected malicious file or URL.","example":4,"name":"threat.indicator.scanner_stats","type":"long"},"threat.indicator.sightings":{"category":"threat","description":"Number of times this indicator was observed conducting threat activity.","example":20,"name":"threat.indicator.sightings","type":"long"},"threat.indicator.type":{"category":"threat","description":"Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: * autonomous-system * artifact * directory * domain-name * email-addr * file * ipv4-addr * ipv6-addr * mac-addr * mutex * port * process * software * url * user-account * windows-registry-key * x509-certificate","example":"ipv4-addr","name":"threat.indicator.type","type":"keyword"},"threat.indicator.url.domain":{"category":"threat","description":"Domain of the url, such as \"www.elastic.co\". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.","example":"www.elastic.co","name":"threat.indicator.url.domain","type":"keyword"},"threat.indicator.url.extension":{"category":"threat","description":"The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be \"png\", not \".png\". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured (\"gz\", not \"tar.gz\").","example":"png","name":"threat.indicator.url.extension","type":"keyword"},"threat.indicator.url.fragment":{"category":"threat","description":"Portion of the url after the `#`, such as \"top\". The `#` is not part of the fragment.","name":"threat.indicator.url.fragment","type":"keyword"},"threat.indicator.url.full":{"category":"threat","description":"If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.","example":"https://www.elastic.co:443/search?q=elasticsearch#top","name":"threat.indicator.url.full","type":"wildcard"},"threat.indicator.url.original":{"category":"threat","description":"Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.","example":"https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch","name":"threat.indicator.url.original","type":"wildcard"},"threat.indicator.url.password":{"category":"threat","description":"Password of the request.","name":"threat.indicator.url.password","type":"keyword"},"threat.indicator.url.path":{"category":"threat","description":"Path of the request, such as \"/search\".","name":"threat.indicator.url.path","type":"wildcard"},"threat.indicator.url.port":{"category":"threat","description":"Port of the request, such as 443.","example":443,"name":"threat.indicator.url.port","type":"long","format":"string"},"threat.indicator.url.query":{"category":"threat","description":"The query field describes the query string of the request, such as \"q=elasticsearch\". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.","name":"threat.indicator.url.query","type":"keyword"},"threat.indicator.url.registered_domain":{"category":"threat","description":"The highest registered url domain, stripped of the subdomain. For example, the registered domain for \"foo.example.com\" is \"example.com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as \"co.uk\".","example":"example.com","name":"threat.indicator.url.registered_domain","type":"keyword"},"threat.indicator.url.scheme":{"category":"threat","description":"Scheme of the request, such as \"https\". Note: The `:` is not part of the scheme.","example":"https","name":"threat.indicator.url.scheme","type":"keyword"},"threat.indicator.url.subdomain":{"category":"threat","description":"The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of \"www.east.mydomain.co.uk\" is \"east\". If the domain has multiple levels of subdomain, such as \"sub2.sub1.example.com\", the subdomain field should contain \"sub2.sub1\", with no trailing period.","example":"east","name":"threat.indicator.url.subdomain","type":"keyword"},"threat.indicator.url.top_level_domain":{"category":"threat","description":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is \"com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as \"co.uk\".","example":"co.uk","name":"threat.indicator.url.top_level_domain","type":"keyword"},"threat.indicator.url.username":{"category":"threat","description":"Username of the request.","name":"threat.indicator.url.username","type":"keyword"},"threat.indicator.x509.alternative_names":{"category":"threat","description":"List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.","example":"*.elastic.co","name":"threat.indicator.x509.alternative_names","type":"keyword"},"threat.indicator.x509.issuer.common_name":{"category":"threat","description":"List of common name (CN) of issuing certificate authority.","example":"Example SHA2 High Assurance Server CA","name":"threat.indicator.x509.issuer.common_name","type":"keyword"},"threat.indicator.x509.issuer.country":{"category":"threat","description":"List of country (C) codes","example":"US","name":"threat.indicator.x509.issuer.country","type":"keyword"},"threat.indicator.x509.issuer.distinguished_name":{"category":"threat","description":"Distinguished name (DN) of issuing certificate authority.","example":"C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA","name":"threat.indicator.x509.issuer.distinguished_name","type":"keyword"},"threat.indicator.x509.issuer.locality":{"category":"threat","description":"List of locality names (L)","example":"Mountain View","name":"threat.indicator.x509.issuer.locality","type":"keyword"},"threat.indicator.x509.issuer.organization":{"category":"threat","description":"List of organizations (O) of issuing certificate authority.","example":"Example Inc","name":"threat.indicator.x509.issuer.organization","type":"keyword"},"threat.indicator.x509.issuer.organizational_unit":{"category":"threat","description":"List of organizational units (OU) of issuing certificate authority.","example":"www.example.com","name":"threat.indicator.x509.issuer.organizational_unit","type":"keyword"},"threat.indicator.x509.issuer.state_or_province":{"category":"threat","description":"List of state or province names (ST, S, or P)","example":"California","name":"threat.indicator.x509.issuer.state_or_province","type":"keyword"},"threat.indicator.x509.not_after":{"category":"threat","description":"Time at which the certificate is no longer considered valid.","example":"\"2020-07-16T03:15:39.000Z\"","name":"threat.indicator.x509.not_after","type":"date"},"threat.indicator.x509.not_before":{"category":"threat","description":"Time at which the certificate is first considered valid.","example":"\"2019-08-16T01:40:25.000Z\"","name":"threat.indicator.x509.not_before","type":"date"},"threat.indicator.x509.public_key_algorithm":{"category":"threat","description":"Algorithm used to generate the public key.","example":"RSA","name":"threat.indicator.x509.public_key_algorithm","type":"keyword"},"threat.indicator.x509.public_key_curve":{"category":"threat","description":"The curve used by the elliptic curve public key algorithm. This is algorithm specific.","example":"nistp521","name":"threat.indicator.x509.public_key_curve","type":"keyword"},"threat.indicator.x509.public_key_exponent":{"category":"threat","description":"Exponent used to derive the public key. This is algorithm specific.","example":65537,"name":"threat.indicator.x509.public_key_exponent","type":"long"},"threat.indicator.x509.public_key_size":{"category":"threat","description":"The size of the public key space in bits.","example":2048,"name":"threat.indicator.x509.public_key_size","type":"long"},"threat.indicator.x509.serial_number":{"category":"threat","description":"Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.","example":"55FBB9C7DEBF09809D12CCAA","name":"threat.indicator.x509.serial_number","type":"keyword"},"threat.indicator.x509.signature_algorithm":{"category":"threat","description":"Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.","example":"SHA256-RSA","name":"threat.indicator.x509.signature_algorithm","type":"keyword"},"threat.indicator.x509.subject.common_name":{"category":"threat","description":"List of common names (CN) of subject.","example":"shared.global.example.net","name":"threat.indicator.x509.subject.common_name","type":"keyword"},"threat.indicator.x509.subject.country":{"category":"threat","description":"List of country (C) code","example":"US","name":"threat.indicator.x509.subject.country","type":"keyword"},"threat.indicator.x509.subject.distinguished_name":{"category":"threat","description":"Distinguished name (DN) of the certificate subject entity.","example":"C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net","name":"threat.indicator.x509.subject.distinguished_name","type":"keyword"},"threat.indicator.x509.subject.locality":{"category":"threat","description":"List of locality names (L)","example":"San Francisco","name":"threat.indicator.x509.subject.locality","type":"keyword"},"threat.indicator.x509.subject.organization":{"category":"threat","description":"List of organizations (O) of subject.","example":"Example, Inc.","name":"threat.indicator.x509.subject.organization","type":"keyword"},"threat.indicator.x509.subject.organizational_unit":{"category":"threat","description":"List of organizational units (OU) of subject.","name":"threat.indicator.x509.subject.organizational_unit","type":"keyword"},"threat.indicator.x509.subject.state_or_province":{"category":"threat","description":"List of state or province names (ST, S, or P)","example":"California","name":"threat.indicator.x509.subject.state_or_province","type":"keyword"},"threat.indicator.x509.version_number":{"category":"threat","description":"Version of x509 format.","example":3,"name":"threat.indicator.x509.version_number","type":"keyword"},"threat.software.alias":{"category":"threat","description":"The alias(es) of the software for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® associated software description.","example":"[ \"X-Agent\" ]","name":"threat.software.alias","type":"keyword"},"threat.software.id":{"category":"threat","description":"The id of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software id.","example":"S0552","name":"threat.software.id","type":"keyword"},"threat.software.name":{"category":"threat","description":"The name of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software name.","example":"AdFind","name":"threat.software.name","type":"keyword"},"threat.software.platforms":{"category":"threat","description":"The platforms of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. Recommended Values: * AWS * Azure * Azure AD * GCP * Linux * macOS * Network * Office 365 * SaaS * Windows While not required, you can use a MITRE ATT&CK® software platforms.","example":"[ \"Windows\" ]","name":"threat.software.platforms","type":"keyword"},"threat.software.reference":{"category":"threat","description":"The reference URL of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software reference URL.","example":"https://attack.mitre.org/software/S0552/","name":"threat.software.reference","type":"keyword"},"threat.software.type":{"category":"threat","description":"The type of software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. Recommended values * Malware * Tool While not required, you can use a MITRE ATT&CK® software type.","example":"Tool","name":"threat.software.type","type":"keyword"},"threat.tactic.id":{"category":"threat","description":"The id of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ )","example":"TA0002","name":"threat.tactic.id","type":"keyword"},"threat.tactic.name":{"category":"threat","description":"Name of the type of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/)","example":"Execution","name":"threat.tactic.name","type":"keyword"},"threat.tactic.reference":{"category":"threat","description":"The reference url of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ )","example":"https://attack.mitre.org/tactics/TA0002/","name":"threat.tactic.reference","type":"keyword"},"threat.technique.id":{"category":"threat","description":"The id of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)","example":"T1059","name":"threat.technique.id","type":"keyword"},"threat.technique.name":{"category":"threat","description":"The name of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)","example":"Command and Scripting Interpreter","name":"threat.technique.name","type":"keyword"},"threat.technique.reference":{"category":"threat","description":"The reference url of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)","example":"https://attack.mitre.org/techniques/T1059/","name":"threat.technique.reference","type":"keyword"},"threat.technique.subtechnique.id":{"category":"threat","description":"The full id of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)","example":"T1059.001","name":"threat.technique.subtechnique.id","type":"keyword"},"threat.technique.subtechnique.name":{"category":"threat","description":"The name of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)","example":"PowerShell","name":"threat.technique.subtechnique.name","type":"keyword"},"threat.technique.subtechnique.reference":{"category":"threat","description":"The reference url of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)","example":"https://attack.mitre.org/techniques/T1059/001/","name":"threat.technique.subtechnique.reference","type":"keyword"},"tls.cipher":{"category":"tls","description":"String indicating the cipher used during the current connection.","example":"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256","name":"tls.cipher","type":"keyword"},"tls.client.certificate":{"category":"tls","description":"PEM-encoded stand-alone certificate offered by the client. This is usually mutually-exclusive of `client.certificate_chain` since this value also exists in that list.","example":"MII...","name":"tls.client.certificate","type":"keyword"},"tls.client.certificate_chain":{"category":"tls","description":"Array of PEM-encoded certificates that make up the certificate chain offered by the client. This is usually mutually-exclusive of `client.certificate` since that value should be the first certificate in the chain.","example":"[\"MII...\", \"MII...\"]","name":"tls.client.certificate_chain","type":"keyword"},"tls.client.hash.md5":{"category":"tls","description":"Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.","example":"0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC","name":"tls.client.hash.md5","type":"keyword"},"tls.client.hash.sha1":{"category":"tls","description":"Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.","example":"9E393D93138888D288266C2D915214D1D1CCEB2A","name":"tls.client.hash.sha1","type":"keyword"},"tls.client.hash.sha256":{"category":"tls","description":"Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.","example":"0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0","name":"tls.client.hash.sha256","type":"keyword"},"tls.client.issuer":{"category":"tls","description":"Distinguished name of subject of the issuer of the x.509 certificate presented by the client.","example":"CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com","name":"tls.client.issuer","type":"keyword"},"tls.client.ja3":{"category":"tls","description":"A hash that identifies clients based on how they perform an SSL/TLS handshake.","example":"d4e5b18d6b55c71272893221c96ba240","name":"tls.client.ja3","type":"keyword"},"tls.client.not_after":{"category":"tls","description":"Date/Time indicating when client certificate is no longer considered valid.","example":"2021-01-01T00:00:00.000Z","name":"tls.client.not_after","type":"date"},"tls.client.not_before":{"category":"tls","description":"Date/Time indicating when client certificate is first considered valid.","example":"1970-01-01T00:00:00.000Z","name":"tls.client.not_before","type":"date"},"tls.client.server_name":{"category":"tls","description":"Also called an SNI, this tells the server which hostname to which the client is attempting to connect to. When this value is available, it should get copied to `destination.domain`.","example":"www.elastic.co","name":"tls.client.server_name","type":"keyword"},"tls.client.subject":{"category":"tls","description":"Distinguished name of subject of the x.509 certificate presented by the client.","example":"CN=myclient, OU=Documentation Team, DC=example, DC=com","name":"tls.client.subject","type":"keyword"},"tls.client.supported_ciphers":{"category":"tls","description":"Array of ciphers offered by the client during the client hello.","example":"[\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\", \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\", \"...\"]","name":"tls.client.supported_ciphers","type":"keyword"},"tls.client.x509.alternative_names":{"category":"tls","description":"List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.","example":"*.elastic.co","name":"tls.client.x509.alternative_names","type":"keyword"},"tls.client.x509.issuer.common_name":{"category":"tls","description":"List of common name (CN) of issuing certificate authority.","example":"Example SHA2 High Assurance Server CA","name":"tls.client.x509.issuer.common_name","type":"keyword"},"tls.client.x509.issuer.country":{"category":"tls","description":"List of country (C) codes","example":"US","name":"tls.client.x509.issuer.country","type":"keyword"},"tls.client.x509.issuer.distinguished_name":{"category":"tls","description":"Distinguished name (DN) of issuing certificate authority.","example":"C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA","name":"tls.client.x509.issuer.distinguished_name","type":"keyword"},"tls.client.x509.issuer.locality":{"category":"tls","description":"List of locality names (L)","example":"Mountain View","name":"tls.client.x509.issuer.locality","type":"keyword"},"tls.client.x509.issuer.organization":{"category":"tls","description":"List of organizations (O) of issuing certificate authority.","example":"Example Inc","name":"tls.client.x509.issuer.organization","type":"keyword"},"tls.client.x509.issuer.organizational_unit":{"category":"tls","description":"List of organizational units (OU) of issuing certificate authority.","example":"www.example.com","name":"tls.client.x509.issuer.organizational_unit","type":"keyword"},"tls.client.x509.issuer.state_or_province":{"category":"tls","description":"List of state or province names (ST, S, or P)","example":"California","name":"tls.client.x509.issuer.state_or_province","type":"keyword"},"tls.client.x509.not_after":{"category":"tls","description":"Time at which the certificate is no longer considered valid.","example":"\"2020-07-16T03:15:39.000Z\"","name":"tls.client.x509.not_after","type":"date"},"tls.client.x509.not_before":{"category":"tls","description":"Time at which the certificate is first considered valid.","example":"\"2019-08-16T01:40:25.000Z\"","name":"tls.client.x509.not_before","type":"date"},"tls.client.x509.public_key_algorithm":{"category":"tls","description":"Algorithm used to generate the public key.","example":"RSA","name":"tls.client.x509.public_key_algorithm","type":"keyword"},"tls.client.x509.public_key_curve":{"category":"tls","description":"The curve used by the elliptic curve public key algorithm. This is algorithm specific.","example":"nistp521","name":"tls.client.x509.public_key_curve","type":"keyword"},"tls.client.x509.public_key_exponent":{"category":"tls","description":"Exponent used to derive the public key. This is algorithm specific.","example":65537,"name":"tls.client.x509.public_key_exponent","type":"long"},"tls.client.x509.public_key_size":{"category":"tls","description":"The size of the public key space in bits.","example":2048,"name":"tls.client.x509.public_key_size","type":"long"},"tls.client.x509.serial_number":{"category":"tls","description":"Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.","example":"55FBB9C7DEBF09809D12CCAA","name":"tls.client.x509.serial_number","type":"keyword"},"tls.client.x509.signature_algorithm":{"category":"tls","description":"Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.","example":"SHA256-RSA","name":"tls.client.x509.signature_algorithm","type":"keyword"},"tls.client.x509.subject.common_name":{"category":"tls","description":"List of common names (CN) of subject.","example":"shared.global.example.net","name":"tls.client.x509.subject.common_name","type":"keyword"},"tls.client.x509.subject.country":{"category":"tls","description":"List of country (C) code","example":"US","name":"tls.client.x509.subject.country","type":"keyword"},"tls.client.x509.subject.distinguished_name":{"category":"tls","description":"Distinguished name (DN) of the certificate subject entity.","example":"C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net","name":"tls.client.x509.subject.distinguished_name","type":"keyword"},"tls.client.x509.subject.locality":{"category":"tls","description":"List of locality names (L)","example":"San Francisco","name":"tls.client.x509.subject.locality","type":"keyword"},"tls.client.x509.subject.organization":{"category":"tls","description":"List of organizations (O) of subject.","example":"Example, Inc.","name":"tls.client.x509.subject.organization","type":"keyword"},"tls.client.x509.subject.organizational_unit":{"category":"tls","description":"List of organizational units (OU) of subject.","name":"tls.client.x509.subject.organizational_unit","type":"keyword"},"tls.client.x509.subject.state_or_province":{"category":"tls","description":"List of state or province names (ST, S, or P)","example":"California","name":"tls.client.x509.subject.state_or_province","type":"keyword"},"tls.client.x509.version_number":{"category":"tls","description":"Version of x509 format.","example":3,"name":"tls.client.x509.version_number","type":"keyword"},"tls.curve":{"category":"tls","description":"String indicating the curve used for the given cipher, when applicable.","example":"secp256r1","name":"tls.curve","type":"keyword"},"tls.established":{"category":"tls","description":"Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel.","name":"tls.established","type":"boolean"},"tls.next_protocol":{"category":"tls","description":"String indicating the protocol being tunneled. Per the values in the IANA registry (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), this string should be lower case.","example":"http/1.1","name":"tls.next_protocol","type":"keyword"},"tls.resumed":{"category":"tls","description":"Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation.","name":"tls.resumed","type":"boolean"},"tls.server.certificate":{"category":"tls","description":"PEM-encoded stand-alone certificate offered by the server. This is usually mutually-exclusive of `server.certificate_chain` since this value also exists in that list.","example":"MII...","name":"tls.server.certificate","type":"keyword"},"tls.server.certificate_chain":{"category":"tls","description":"Array of PEM-encoded certificates that make up the certificate chain offered by the server. This is usually mutually-exclusive of `server.certificate` since that value should be the first certificate in the chain.","example":"[\"MII...\", \"MII...\"]","name":"tls.server.certificate_chain","type":"keyword"},"tls.server.hash.md5":{"category":"tls","description":"Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.","example":"0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC","name":"tls.server.hash.md5","type":"keyword"},"tls.server.hash.sha1":{"category":"tls","description":"Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.","example":"9E393D93138888D288266C2D915214D1D1CCEB2A","name":"tls.server.hash.sha1","type":"keyword"},"tls.server.hash.sha256":{"category":"tls","description":"Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.","example":"0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0","name":"tls.server.hash.sha256","type":"keyword"},"tls.server.issuer":{"category":"tls","description":"Subject of the issuer of the x.509 certificate presented by the server.","example":"CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com","name":"tls.server.issuer","type":"keyword"},"tls.server.ja3s":{"category":"tls","description":"A hash that identifies servers based on how they perform an SSL/TLS handshake.","example":"394441ab65754e2207b1e1b457b3641d","name":"tls.server.ja3s","type":"keyword"},"tls.server.not_after":{"category":"tls","description":"Timestamp indicating when server certificate is no longer considered valid.","example":"2021-01-01T00:00:00.000Z","name":"tls.server.not_after","type":"date"},"tls.server.not_before":{"category":"tls","description":"Timestamp indicating when server certificate is first considered valid.","example":"1970-01-01T00:00:00.000Z","name":"tls.server.not_before","type":"date"},"tls.server.subject":{"category":"tls","description":"Subject of the x.509 certificate presented by the server.","example":"CN=www.example.com, OU=Infrastructure Team, DC=example, DC=com","name":"tls.server.subject","type":"keyword"},"tls.server.x509.alternative_names":{"category":"tls","description":"List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.","example":"*.elastic.co","name":"tls.server.x509.alternative_names","type":"keyword"},"tls.server.x509.issuer.common_name":{"category":"tls","description":"List of common name (CN) of issuing certificate authority.","example":"Example SHA2 High Assurance Server CA","name":"tls.server.x509.issuer.common_name","type":"keyword"},"tls.server.x509.issuer.country":{"category":"tls","description":"List of country (C) codes","example":"US","name":"tls.server.x509.issuer.country","type":"keyword"},"tls.server.x509.issuer.distinguished_name":{"category":"tls","description":"Distinguished name (DN) of issuing certificate authority.","example":"C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA","name":"tls.server.x509.issuer.distinguished_name","type":"keyword"},"tls.server.x509.issuer.locality":{"category":"tls","description":"List of locality names (L)","example":"Mountain View","name":"tls.server.x509.issuer.locality","type":"keyword"},"tls.server.x509.issuer.organization":{"category":"tls","description":"List of organizations (O) of issuing certificate authority.","example":"Example Inc","name":"tls.server.x509.issuer.organization","type":"keyword"},"tls.server.x509.issuer.organizational_unit":{"category":"tls","description":"List of organizational units (OU) of issuing certificate authority.","example":"www.example.com","name":"tls.server.x509.issuer.organizational_unit","type":"keyword"},"tls.server.x509.issuer.state_or_province":{"category":"tls","description":"List of state or province names (ST, S, or P)","example":"California","name":"tls.server.x509.issuer.state_or_province","type":"keyword"},"tls.server.x509.not_after":{"category":"tls","description":"Time at which the certificate is no longer considered valid.","example":"\"2020-07-16T03:15:39.000Z\"","name":"tls.server.x509.not_after","type":"date"},"tls.server.x509.not_before":{"category":"tls","description":"Time at which the certificate is first considered valid.","example":"\"2019-08-16T01:40:25.000Z\"","name":"tls.server.x509.not_before","type":"date"},"tls.server.x509.public_key_algorithm":{"category":"tls","description":"Algorithm used to generate the public key.","example":"RSA","name":"tls.server.x509.public_key_algorithm","type":"keyword"},"tls.server.x509.public_key_curve":{"category":"tls","description":"The curve used by the elliptic curve public key algorithm. This is algorithm specific.","example":"nistp521","name":"tls.server.x509.public_key_curve","type":"keyword"},"tls.server.x509.public_key_exponent":{"category":"tls","description":"Exponent used to derive the public key. This is algorithm specific.","example":65537,"name":"tls.server.x509.public_key_exponent","type":"long"},"tls.server.x509.public_key_size":{"category":"tls","description":"The size of the public key space in bits.","example":2048,"name":"tls.server.x509.public_key_size","type":"long"},"tls.server.x509.serial_number":{"category":"tls","description":"Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.","example":"55FBB9C7DEBF09809D12CCAA","name":"tls.server.x509.serial_number","type":"keyword"},"tls.server.x509.signature_algorithm":{"category":"tls","description":"Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.","example":"SHA256-RSA","name":"tls.server.x509.signature_algorithm","type":"keyword"},"tls.server.x509.subject.common_name":{"category":"tls","description":"List of common names (CN) of subject.","example":"shared.global.example.net","name":"tls.server.x509.subject.common_name","type":"keyword"},"tls.server.x509.subject.country":{"category":"tls","description":"List of country (C) code","example":"US","name":"tls.server.x509.subject.country","type":"keyword"},"tls.server.x509.subject.distinguished_name":{"category":"tls","description":"Distinguished name (DN) of the certificate subject entity.","example":"C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net","name":"tls.server.x509.subject.distinguished_name","type":"keyword"},"tls.server.x509.subject.locality":{"category":"tls","description":"List of locality names (L)","example":"San Francisco","name":"tls.server.x509.subject.locality","type":"keyword"},"tls.server.x509.subject.organization":{"category":"tls","description":"List of organizations (O) of subject.","example":"Example, Inc.","name":"tls.server.x509.subject.organization","type":"keyword"},"tls.server.x509.subject.organizational_unit":{"category":"tls","description":"List of organizational units (OU) of subject.","name":"tls.server.x509.subject.organizational_unit","type":"keyword"},"tls.server.x509.subject.state_or_province":{"category":"tls","description":"List of state or province names (ST, S, or P)","example":"California","name":"tls.server.x509.subject.state_or_province","type":"keyword"},"tls.server.x509.version_number":{"category":"tls","description":"Version of x509 format.","example":3,"name":"tls.server.x509.version_number","type":"keyword"},"tls.version":{"category":"tls","description":"Numeric part of the version parsed from the original string.","example":"1.2","name":"tls.version","type":"keyword"},"tls.version_protocol":{"category":"tls","description":"Normalized lowercase protocol name parsed from original string.","example":"tls","name":"tls.version_protocol","type":"keyword"},"span.id":{"category":"span","description":"Unique identifier of the span within the scope of its trace. A span represents an operation within a transaction, such as a request to another service, or a database query.","example":"3ff9a8981b7ccd5a","name":"span.id","type":"keyword"},"trace.id":{"category":"trace","description":"Unique identifier of the trace. A trace groups multiple events like transactions that belong together. For example, a user request handled by multiple inter-connected services.","example":"4bf92f3577b34da6a3ce929d0e0e4736","name":"trace.id","type":"keyword"},"transaction.id":{"category":"transaction","description":"Unique identifier of the transaction within the scope of its trace. A transaction is the highest level of work measured within a service, such as a request to a server.","example":"00f067aa0ba902b7","name":"transaction.id","type":"keyword"},"url.domain":{"category":"url","description":"Domain of the url, such as \"www.elastic.co\". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.","example":"www.elastic.co","name":"url.domain","type":"keyword"},"url.extension":{"category":"url","description":"The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be \"png\", not \".png\". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured (\"gz\", not \"tar.gz\").","example":"png","name":"url.extension","type":"keyword"},"url.fragment":{"category":"url","description":"Portion of the url after the `#`, such as \"top\". The `#` is not part of the fragment.","name":"url.fragment","type":"keyword"},"url.full":{"category":"url","description":"If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.","example":"https://www.elastic.co:443/search?q=elasticsearch#top","name":"url.full","type":"wildcard"},"url.original":{"category":"url","description":"Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.","example":"https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch","name":"url.original","type":"wildcard"},"url.password":{"category":"url","description":"Password of the request.","name":"url.password","type":"keyword"},"url.path":{"category":"url","description":"Path of the request, such as \"/search\".","name":"url.path","type":"wildcard"},"url.port":{"category":"url","description":"Port of the request, such as 443.","example":443,"name":"url.port","type":"long","format":"string"},"url.query":{"category":"url","description":"The query field describes the query string of the request, such as \"q=elasticsearch\". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.","name":"url.query","type":"keyword"},"url.registered_domain":{"category":"url","description":"The highest registered url domain, stripped of the subdomain. For example, the registered domain for \"foo.example.com\" is \"example.com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as \"co.uk\".","example":"example.com","name":"url.registered_domain","type":"keyword"},"url.scheme":{"category":"url","description":"Scheme of the request, such as \"https\". Note: The `:` is not part of the scheme.","example":"https","name":"url.scheme","type":"keyword"},"url.subdomain":{"category":"url","description":"The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of \"www.east.mydomain.co.uk\" is \"east\". If the domain has multiple levels of subdomain, such as \"sub2.sub1.example.com\", the subdomain field should contain \"sub2.sub1\", with no trailing period.","example":"east","name":"url.subdomain","type":"keyword"},"url.top_level_domain":{"category":"url","description":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is \"com\". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as \"co.uk\".","example":"co.uk","name":"url.top_level_domain","type":"keyword"},"url.username":{"category":"url","description":"Username of the request.","name":"url.username","type":"keyword"},"user.changes.domain":{"category":"user","description":"Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.","name":"user.changes.domain","type":"keyword"},"user.changes.email":{"category":"user","description":"User email address.","name":"user.changes.email","type":"keyword"},"user.changes.full_name":{"category":"user","description":"User's full name, if available.","example":"Albert Einstein","name":"user.changes.full_name","type":"keyword"},"user.changes.group.domain":{"category":"user","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"user.changes.group.domain","type":"keyword"},"user.changes.group.id":{"category":"user","description":"Unique identifier for the group on the system/platform.","name":"user.changes.group.id","type":"keyword"},"user.changes.group.name":{"category":"user","description":"Name of the group.","name":"user.changes.group.name","type":"keyword"},"user.changes.hash":{"category":"user","description":"Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.","name":"user.changes.hash","type":"keyword"},"user.changes.id":{"category":"user","description":"Unique identifier of the user.","example":"S-1-5-21-202424912787-2692429404-2351956786-1000","name":"user.changes.id","type":"keyword"},"user.changes.name":{"category":"user","description":"Short name or login of the user.","example":"a.einstein","name":"user.changes.name","type":"keyword"},"user.changes.roles":{"category":"user","description":"Array of user roles at the time of the event.","example":"[\"kibana_admin\", \"reporting_user\"]","name":"user.changes.roles","type":"keyword"},"user.domain":{"category":"user","description":"Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.","name":"user.domain","type":"keyword"},"user.effective.domain":{"category":"user","description":"Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.","name":"user.effective.domain","type":"keyword"},"user.effective.email":{"category":"user","description":"User email address.","name":"user.effective.email","type":"keyword"},"user.effective.full_name":{"category":"user","description":"User's full name, if available.","example":"Albert Einstein","name":"user.effective.full_name","type":"keyword"},"user.effective.group.domain":{"category":"user","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"user.effective.group.domain","type":"keyword"},"user.effective.group.id":{"category":"user","description":"Unique identifier for the group on the system/platform.","name":"user.effective.group.id","type":"keyword"},"user.effective.group.name":{"category":"user","description":"Name of the group.","name":"user.effective.group.name","type":"keyword"},"user.effective.hash":{"category":"user","description":"Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.","name":"user.effective.hash","type":"keyword"},"user.effective.id":{"category":"user","description":"Unique identifier of the user.","example":"S-1-5-21-202424912787-2692429404-2351956786-1000","name":"user.effective.id","type":"keyword"},"user.effective.name":{"category":"user","description":"Short name or login of the user.","example":"a.einstein","name":"user.effective.name","type":"keyword"},"user.effective.roles":{"category":"user","description":"Array of user roles at the time of the event.","example":"[\"kibana_admin\", \"reporting_user\"]","name":"user.effective.roles","type":"keyword"},"user.email":{"category":"user","description":"User email address.","name":"user.email","type":"keyword"},"user.full_name":{"category":"user","description":"User's full name, if available.","example":"Albert Einstein","name":"user.full_name","type":"keyword"},"user.group.domain":{"category":"user","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"user.group.domain","type":"keyword"},"user.group.id":{"category":"user","description":"Unique identifier for the group on the system/platform.","name":"user.group.id","type":"keyword"},"user.group.name":{"category":"user","description":"Name of the group.","name":"user.group.name","type":"keyword"},"user.hash":{"category":"user","description":"Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.","name":"user.hash","type":"keyword"},"user.id":{"category":"user","description":"Unique identifier of the user.","example":"S-1-5-21-202424912787-2692429404-2351956786-1000","name":"user.id","type":"keyword"},"user.name":{"category":"user","description":"Short name or login of the user.","example":"a.einstein","name":"user.name","type":"keyword"},"user.roles":{"category":"user","description":"Array of user roles at the time of the event.","example":"[\"kibana_admin\", \"reporting_user\"]","name":"user.roles","type":"keyword"},"user.target.domain":{"category":"user","description":"Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.","name":"user.target.domain","type":"keyword"},"user.target.email":{"category":"user","description":"User email address.","name":"user.target.email","type":"keyword"},"user.target.full_name":{"category":"user","description":"User's full name, if available.","example":"Albert Einstein","name":"user.target.full_name","type":"keyword"},"user.target.group.domain":{"category":"user","description":"Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.","name":"user.target.group.domain","type":"keyword"},"user.target.group.id":{"category":"user","description":"Unique identifier for the group on the system/platform.","name":"user.target.group.id","type":"keyword"},"user.target.group.name":{"category":"user","description":"Name of the group.","name":"user.target.group.name","type":"keyword"},"user.target.hash":{"category":"user","description":"Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.","name":"user.target.hash","type":"keyword"},"user.target.id":{"category":"user","description":"Unique identifier of the user.","example":"S-1-5-21-202424912787-2692429404-2351956786-1000","name":"user.target.id","type":"keyword"},"user.target.name":{"category":"user","description":"Short name or login of the user.","example":"a.einstein","name":"user.target.name","type":"keyword"},"user.target.roles":{"category":"user","description":"Array of user roles at the time of the event.","example":"[\"kibana_admin\", \"reporting_user\"]","name":"user.target.roles","type":"keyword"},"user_agent.device.name":{"category":"user_agent","description":"Name of the device.","example":"iPhone","name":"user_agent.device.name","type":"keyword"},"user_agent.name":{"category":"user_agent","description":"Name of the user agent.","example":"Safari","name":"user_agent.name","type":"keyword"},"user_agent.original":{"category":"user_agent","description":"Unparsed user_agent string.","example":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1","name":"user_agent.original","type":"keyword"},"user_agent.os.family":{"category":"user_agent","description":"OS family (such as redhat, debian, freebsd, windows).","example":"debian","name":"user_agent.os.family","type":"keyword"},"user_agent.os.full":{"category":"user_agent","description":"Operating system name, including the version or code name.","example":"Mac OS Mojave","name":"user_agent.os.full","type":"keyword"},"user_agent.os.kernel":{"category":"user_agent","description":"Operating system kernel version as a raw string.","example":"4.4.0-112-generic","name":"user_agent.os.kernel","type":"keyword"},"user_agent.os.name":{"category":"user_agent","description":"Operating system name, without the version.","example":"Mac OS X","name":"user_agent.os.name","type":"keyword"},"user_agent.os.platform":{"category":"user_agent","description":"Operating system platform (such centos, ubuntu, windows).","example":"darwin","name":"user_agent.os.platform","type":"keyword"},"user_agent.os.type":{"category":"user_agent","description":"Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.","example":"macos","name":"user_agent.os.type","type":"keyword"},"user_agent.os.version":{"category":"user_agent","description":"Operating system version as a raw string.","example":"10.14.1","name":"user_agent.os.version","type":"keyword"},"user_agent.version":{"category":"user_agent","description":"Version of the user agent.","example":12,"name":"user_agent.version","type":"keyword"},"vlan.id":{"category":"vlan","description":"VLAN ID as reported by the observer.","example":10,"name":"vlan.id","type":"keyword"},"vlan.name":{"category":"vlan","description":"Optional VLAN name as reported by the observer.","example":"outside","name":"vlan.name","type":"keyword"},"vulnerability.category":{"category":"vulnerability","description":"The type of system or architecture that the vulnerability affects. These may be platform-specific (for example, Debian or SUSE) or general (for example, Database or Firewall). For example (https://qualysguard.qualys.com/qwebhelp/fo_portal/knowledgebase/vulnerability_categories.htm[Qualys vulnerability categories]) This field must be an array.","example":"[\"Firewall\"]","name":"vulnerability.category","type":"keyword"},"vulnerability.classification":{"category":"vulnerability","description":"The classification of the vulnerability scoring system. For example (https://www.first.org/cvss/)","example":"CVSS","name":"vulnerability.classification","type":"keyword"},"vulnerability.description":{"category":"vulnerability","description":"The description of the vulnerability that provides additional context of the vulnerability. For example (https://cve.mitre.org/about/faqs.html#cve_entry_descriptions_created[Common Vulnerabilities and Exposure CVE description])","example":"In macOS before 2.12.6, there is a vulnerability in the RPC...","name":"vulnerability.description","type":"keyword"},"vulnerability.enumeration":{"category":"vulnerability","description":"The type of identifier used for this vulnerability. For example (https://cve.mitre.org/about/)","example":"CVE","name":"vulnerability.enumeration","type":"keyword"},"vulnerability.id":{"category":"vulnerability","description":"The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id)[Common Vulnerabilities and Exposure CVE ID]","example":"CVE-2019-00001","name":"vulnerability.id","type":"keyword"},"vulnerability.reference":{"category":"vulnerability","description":"A resource that provides additional information, context, and mitigations for the identified vulnerability.","example":"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6111","name":"vulnerability.reference","type":"keyword"},"vulnerability.report_id":{"category":"vulnerability","description":"The report or scan identification number.","example":20191018.0001,"name":"vulnerability.report_id","type":"keyword"},"vulnerability.scanner.vendor":{"category":"vulnerability","description":"The name of the vulnerability scanner vendor.","example":"Tenable","name":"vulnerability.scanner.vendor","type":"keyword"},"vulnerability.score.base":{"category":"vulnerability","description":"Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Base scores cover an assessment for exploitability metrics (attack vector, complexity, privileges, and user interaction), impact metrics (confidentiality, integrity, and availability), and scope. For example (https://www.first.org/cvss/specification-document)","example":5.5,"name":"vulnerability.score.base","type":"float"},"vulnerability.score.environmental":{"category":"vulnerability","description":"Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Environmental scores cover an assessment for any modified Base metrics, confidentiality, integrity, and availability requirements. For example (https://www.first.org/cvss/specification-document)","example":5.5,"name":"vulnerability.score.environmental","type":"float"},"vulnerability.score.temporal":{"category":"vulnerability","description":"Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Temporal scores cover an assessment for code maturity, remediation level, and confidence. For example (https://www.first.org/cvss/specification-document)","name":"vulnerability.score.temporal","type":"float"},"vulnerability.score.version":{"category":"vulnerability","description":"The National Vulnerability Database (NVD) provides qualitative severity rankings of \"Low\", \"Medium\", and \"High\" for CVSS v2.0 base score ranges in addition to the severity ratings for CVSS v3.0 as they are defined in the CVSS v3.0 specification. CVSS is owned and managed by FIRST.Org, Inc. (FIRST), a US-based non-profit organization, whose mission is to help computer security incident response teams across the world. For example (https://nvd.nist.gov/vuln-metrics/cvss)","example":2,"name":"vulnerability.score.version","type":"keyword"},"vulnerability.severity":{"category":"vulnerability","description":"The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss)","example":"Critical","name":"vulnerability.severity","type":"keyword"},"x509.alternative_names":{"category":"x509","description":"List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.","example":"*.elastic.co","name":"x509.alternative_names","type":"keyword"},"x509.issuer.common_name":{"category":"x509","description":"List of common name (CN) of issuing certificate authority.","example":"Example SHA2 High Assurance Server CA","name":"x509.issuer.common_name","type":"keyword"},"x509.issuer.country":{"category":"x509","description":"List of country (C) codes","example":"US","name":"x509.issuer.country","type":"keyword"},"x509.issuer.distinguished_name":{"category":"x509","description":"Distinguished name (DN) of issuing certificate authority.","example":"C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA","name":"x509.issuer.distinguished_name","type":"keyword"},"x509.issuer.locality":{"category":"x509","description":"List of locality names (L)","example":"Mountain View","name":"x509.issuer.locality","type":"keyword"},"x509.issuer.organization":{"category":"x509","description":"List of organizations (O) of issuing certificate authority.","example":"Example Inc","name":"x509.issuer.organization","type":"keyword"},"x509.issuer.organizational_unit":{"category":"x509","description":"List of organizational units (OU) of issuing certificate authority.","example":"www.example.com","name":"x509.issuer.organizational_unit","type":"keyword"},"x509.issuer.state_or_province":{"category":"x509","description":"List of state or province names (ST, S, or P)","example":"California","name":"x509.issuer.state_or_province","type":"keyword"},"x509.not_after":{"category":"x509","description":"Time at which the certificate is no longer considered valid.","example":"\"2020-07-16T03:15:39.000Z\"","name":"x509.not_after","type":"date"},"x509.not_before":{"category":"x509","description":"Time at which the certificate is first considered valid.","example":"\"2019-08-16T01:40:25.000Z\"","name":"x509.not_before","type":"date"},"x509.public_key_algorithm":{"category":"x509","description":"Algorithm used to generate the public key.","example":"RSA","name":"x509.public_key_algorithm","type":"keyword"},"x509.public_key_curve":{"category":"x509","description":"The curve used by the elliptic curve public key algorithm. This is algorithm specific.","example":"nistp521","name":"x509.public_key_curve","type":"keyword"},"x509.public_key_exponent":{"category":"x509","description":"Exponent used to derive the public key. This is algorithm specific.","example":65537,"name":"x509.public_key_exponent","type":"long"},"x509.public_key_size":{"category":"x509","description":"The size of the public key space in bits.","example":2048,"name":"x509.public_key_size","type":"long"},"x509.serial_number":{"category":"x509","description":"Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.","example":"55FBB9C7DEBF09809D12CCAA","name":"x509.serial_number","type":"keyword"},"x509.signature_algorithm":{"category":"x509","description":"Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.","example":"SHA256-RSA","name":"x509.signature_algorithm","type":"keyword"},"x509.subject.common_name":{"category":"x509","description":"List of common names (CN) of subject.","example":"shared.global.example.net","name":"x509.subject.common_name","type":"keyword"},"x509.subject.country":{"category":"x509","description":"List of country (C) code","example":"US","name":"x509.subject.country","type":"keyword"},"x509.subject.distinguished_name":{"category":"x509","description":"Distinguished name (DN) of the certificate subject entity.","example":"C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net","name":"x509.subject.distinguished_name","type":"keyword"},"x509.subject.locality":{"category":"x509","description":"List of locality names (L)","example":"San Francisco","name":"x509.subject.locality","type":"keyword"},"x509.subject.organization":{"category":"x509","description":"List of organizations (O) of subject.","example":"Example, Inc.","name":"x509.subject.organization","type":"keyword"},"x509.subject.organizational_unit":{"category":"x509","description":"List of organizational units (OU) of subject.","name":"x509.subject.organizational_unit","type":"keyword"},"x509.subject.state_or_province":{"category":"x509","description":"List of state or province names (ST, S, or P)","example":"California","name":"x509.subject.state_or_province","type":"keyword"},"x509.version_number":{"category":"x509","description":"Version of x509 format.","example":3,"name":"x509.version_number","type":"keyword"},"agent.hostname":{"category":"agent","description":"Deprecated - use agent.name or agent.id to identify an agent. ","name":"agent.hostname","type":"alias"},"beat.timezone":{"category":"beat","name":"beat.timezone","type":"alias"},"fields":{"category":"base","description":"Contains user configurable fields. ","name":"fields","type":"object"},"beat.name":{"category":"beat","name":"beat.name","type":"alias"},"beat.hostname":{"category":"beat","name":"beat.hostname","type":"alias"},"timeseries.instance":{"category":"timeseries","description":"Time series instance id","name":"timeseries.instance","type":"keyword"},"cloud.image.id":{"category":"cloud","description":"Image ID for the cloud instance. ","example":"ami-abcd1234","name":"cloud.image.id"},"meta.cloud.provider":{"category":"meta","name":"meta.cloud.provider","type":"alias"},"meta.cloud.instance_id":{"category":"meta","name":"meta.cloud.instance_id","type":"alias"},"meta.cloud.instance_name":{"category":"meta","name":"meta.cloud.instance_name","type":"alias"},"meta.cloud.machine_type":{"category":"meta","name":"meta.cloud.machine_type","type":"alias"},"meta.cloud.availability_zone":{"category":"meta","name":"meta.cloud.availability_zone","type":"alias"},"meta.cloud.project_id":{"category":"meta","name":"meta.cloud.project_id","type":"alias"},"meta.cloud.region":{"category":"meta","name":"meta.cloud.region","type":"alias"},"docker.container.id":{"category":"docker","name":"docker.container.id","type":"alias"},"docker.container.image":{"category":"docker","name":"docker.container.image","type":"alias"},"docker.container.name":{"category":"docker","name":"docker.container.name","type":"alias"},"docker.container.labels":{"category":"docker","description":"Image labels. ","name":"docker.container.labels","type":"object"},"host.containerized":{"category":"host","description":"If the host is a container. ","name":"host.containerized","type":"boolean"},"host.os.build":{"category":"host","description":"OS build information. ","example":"18D109","name":"host.os.build","type":"keyword"},"host.os.codename":{"category":"host","description":"OS codename, if any. ","example":"stretch","name":"host.os.codename","type":"keyword"},"kubernetes.pod.name":{"category":"kubernetes","description":"Kubernetes pod name ","name":"kubernetes.pod.name","type":"keyword"},"kubernetes.pod.uid":{"category":"kubernetes","description":"Kubernetes Pod UID ","name":"kubernetes.pod.uid","type":"keyword"},"kubernetes.pod.ip":{"category":"kubernetes","description":"Kubernetes Pod IP ","name":"kubernetes.pod.ip","type":"ip"},"kubernetes.namespace":{"category":"kubernetes","description":"Kubernetes namespace ","name":"kubernetes.namespace","type":"keyword"},"kubernetes.node.name":{"category":"kubernetes","description":"Kubernetes node name ","name":"kubernetes.node.name","type":"keyword"},"kubernetes.node.hostname":{"category":"kubernetes","description":"Kubernetes hostname as reported by the node’s kernel ","name":"kubernetes.node.hostname","type":"keyword"},"kubernetes.labels.*":{"category":"kubernetes","description":"Kubernetes labels map ","name":"kubernetes.labels.*","type":"object"},"kubernetes.annotations.*":{"category":"kubernetes","description":"Kubernetes annotations map ","name":"kubernetes.annotations.*","type":"object"},"kubernetes.selectors.*":{"category":"kubernetes","description":"Kubernetes selectors map ","name":"kubernetes.selectors.*","type":"object"},"kubernetes.replicaset.name":{"category":"kubernetes","description":"Kubernetes replicaset name ","name":"kubernetes.replicaset.name","type":"keyword"},"kubernetes.deployment.name":{"category":"kubernetes","description":"Kubernetes deployment name ","name":"kubernetes.deployment.name","type":"keyword"},"kubernetes.statefulset.name":{"category":"kubernetes","description":"Kubernetes statefulset name ","name":"kubernetes.statefulset.name","type":"keyword"},"kubernetes.container.name":{"category":"kubernetes","description":"Kubernetes container name (different than the name from the runtime) ","name":"kubernetes.container.name","type":"keyword"},"process.exe":{"category":"process","name":"process.exe","type":"alias"},"process.owner.id":{"category":"process","description":"Unique identifier of the user.","name":"process.owner.id","type":"keyword"},"process.owner.name":{"category":"process","description":"Short name or login of the user.","example":"albert","name":"process.owner.name","type":"keyword"},"jolokia.agent.version":{"category":"jolokia","description":"Version number of jolokia agent. ","name":"jolokia.agent.version","type":"keyword"},"jolokia.agent.id":{"category":"jolokia","description":"Each agent has a unique id which can be either provided during startup of the agent in form of a configuration parameter or being autodetected. If autodected, the id has several parts: The IP, the process id, hashcode of the agent and its type. ","name":"jolokia.agent.id","type":"keyword"},"jolokia.server.product":{"category":"jolokia","description":"The container product if detected. ","name":"jolokia.server.product","type":"keyword"},"jolokia.server.version":{"category":"jolokia","description":"The container's version (if detected). ","name":"jolokia.server.version","type":"keyword"},"jolokia.server.vendor":{"category":"jolokia","description":"The vendor of the container the agent is running in. ","name":"jolokia.server.vendor","type":"keyword"},"jolokia.url":{"category":"jolokia","description":"The URL how this agent can be contacted. ","name":"jolokia.url","type":"keyword"},"jolokia.secured":{"category":"jolokia","description":"Whether the agent was configured for authentication or not. ","name":"jolokia.secured","type":"boolean"},"file.setuid":{"category":"file","description":"Set if the file has the `setuid` bit set. Omitted otherwise.","example":"true","name":"file.setuid","type":"boolean"},"file.setgid":{"category":"file","description":"Set if the file has the `setgid` bit set. Omitted otherwise.","example":"true","name":"file.setgid","type":"boolean"},"file.origin":{"category":"file","description":"An array of strings describing a possible external origin for this file. For example, the URL it was downloaded from. Only supported in macOS, via the kMDItemWhereFroms attribute. Omitted if origin information is not available. ","name":"file.origin","type":"keyword"},"file.selinux.user":{"category":"file","description":"The owner of the object.","name":"file.selinux.user","type":"keyword"},"file.selinux.role":{"category":"file","description":"The object's SELinux role.","name":"file.selinux.role","type":"keyword"},"file.selinux.domain":{"category":"file","description":"The object's SELinux domain or type.","name":"file.selinux.domain","type":"keyword"},"file.selinux.level":{"category":"file","description":"The object's SELinux level.","example":"s0","name":"file.selinux.level","type":"keyword"},"user.audit.id":{"category":"user","description":"Audit user ID.","name":"user.audit.id","type":"keyword"},"user.audit.name":{"category":"user","description":"Audit user name.","name":"user.audit.name","type":"keyword"},"user.filesystem.id":{"category":"user","description":"Filesystem user ID.","name":"user.filesystem.id","type":"keyword"},"user.filesystem.name":{"category":"user","description":"Filesystem user name.","name":"user.filesystem.name","type":"keyword"},"user.filesystem.group.id":{"category":"user","description":"Filesystem group ID.","name":"user.filesystem.group.id","type":"keyword"},"user.filesystem.group.name":{"category":"user","description":"Filesystem group name.","name":"user.filesystem.group.name","type":"keyword"},"user.saved.id":{"category":"user","description":"Saved user ID.","name":"user.saved.id","type":"keyword"},"user.saved.name":{"category":"user","description":"Saved user name.","name":"user.saved.name","type":"keyword"},"user.saved.group.id":{"category":"user","description":"Saved group ID.","name":"user.saved.group.id","type":"keyword"},"user.saved.group.name":{"category":"user","description":"Saved group name.","name":"user.saved.group.name","type":"keyword"},"user.auid":{"category":"user","name":"user.auid","type":"alias"},"user.uid":{"category":"user","name":"user.uid","type":"alias"},"user.fsuid":{"category":"user","name":"user.fsuid","type":"alias"},"user.suid":{"category":"user","name":"user.suid","type":"alias"},"user.gid":{"category":"user","name":"user.gid","type":"alias"},"user.sgid":{"category":"user","name":"user.sgid","type":"alias"},"user.fsgid":{"category":"user","name":"user.fsgid","type":"alias"},"user.name_map.auid":{"category":"user","name":"user.name_map.auid","type":"alias"},"user.name_map.uid":{"category":"user","name":"user.name_map.uid","type":"alias"},"user.name_map.fsuid":{"category":"user","name":"user.name_map.fsuid","type":"alias"},"user.name_map.suid":{"category":"user","name":"user.name_map.suid","type":"alias"},"user.name_map.gid":{"category":"user","name":"user.name_map.gid","type":"alias"},"user.name_map.sgid":{"category":"user","name":"user.name_map.sgid","type":"alias"},"user.name_map.fsgid":{"category":"user","name":"user.name_map.fsgid","type":"alias"},"user.selinux.user":{"category":"user","description":"account submitted for authentication","name":"user.selinux.user","type":"keyword"},"user.selinux.role":{"category":"user","description":"user's SELinux role","name":"user.selinux.role","type":"keyword"},"user.selinux.domain":{"category":"user","description":"The actor's SELinux domain or type.","name":"user.selinux.domain","type":"keyword"},"user.selinux.level":{"category":"user","description":"The actor's SELinux level.","example":"s0","name":"user.selinux.level","type":"keyword"},"user.selinux.category":{"category":"user","description":"The actor's SELinux category or compartments.","name":"user.selinux.category","type":"keyword"},"process.cwd":{"category":"process","description":"The current working directory.","name":"process.cwd","type":"alias"},"source.path":{"category":"source","description":"This is the path associated with a unix socket.","name":"source.path","type":"keyword"},"destination.path":{"category":"destination","description":"This is the path associated with a unix socket.","name":"destination.path","type":"keyword"},"auditd.message_type":{"category":"auditd","description":"The audit message type (e.g. syscall or apparmor_denied). ","example":"syscall","name":"auditd.message_type","type":"keyword"},"auditd.sequence":{"category":"auditd","description":"The sequence number of the event as assigned by the kernel. Sequence numbers are stored as a uint32 in the kernel and can rollover. ","name":"auditd.sequence","type":"long"},"auditd.session":{"category":"auditd","description":"The session ID assigned to a login. All events related to a login session will have the same value. ","name":"auditd.session","type":"keyword"},"auditd.result":{"category":"auditd","description":"The result of the audited operation (success/fail).","example":"success or fail","name":"auditd.result","type":"keyword"},"auditd.summary.actor.primary":{"category":"auditd","description":"The primary identity of the actor. This is the actor's original login ID. It will not change even if the user changes to another account. ","name":"auditd.summary.actor.primary","type":"keyword"},"auditd.summary.actor.secondary":{"category":"auditd","description":"The secondary identity of the actor. This is typically the same as the primary, except for when the user has used `su`.","name":"auditd.summary.actor.secondary","type":"keyword"},"auditd.summary.object.type":{"category":"auditd","description":"A description of the what the \"thing\" is (e.g. file, socket, user-session). ","name":"auditd.summary.object.type","type":"keyword"},"auditd.summary.object.primary":{"category":"auditd","description":"","name":"auditd.summary.object.primary","type":"keyword"},"auditd.summary.object.secondary":{"category":"auditd","description":"","name":"auditd.summary.object.secondary","type":"keyword"},"auditd.summary.how":{"category":"auditd","description":"This describes how the action was performed. Usually this is the exe or command that was being executed that triggered the event. ","name":"auditd.summary.how","type":"keyword"},"auditd.paths.inode":{"category":"auditd","description":"inode number","name":"auditd.paths.inode","type":"keyword"},"auditd.paths.dev":{"category":"auditd","description":"device name as found in /dev","name":"auditd.paths.dev","type":"keyword"},"auditd.paths.obj_user":{"category":"auditd","description":"","name":"auditd.paths.obj_user","type":"keyword"},"auditd.paths.obj_role":{"category":"auditd","description":"","name":"auditd.paths.obj_role","type":"keyword"},"auditd.paths.obj_domain":{"category":"auditd","description":"","name":"auditd.paths.obj_domain","type":"keyword"},"auditd.paths.obj_level":{"category":"auditd","description":"","name":"auditd.paths.obj_level","type":"keyword"},"auditd.paths.objtype":{"category":"auditd","description":"","name":"auditd.paths.objtype","type":"keyword"},"auditd.paths.ouid":{"category":"auditd","description":"file owner user ID","name":"auditd.paths.ouid","type":"keyword"},"auditd.paths.rdev":{"category":"auditd","description":"the device identifier (special files only)","name":"auditd.paths.rdev","type":"keyword"},"auditd.paths.nametype":{"category":"auditd","description":"kind of file operation being referenced","name":"auditd.paths.nametype","type":"keyword"},"auditd.paths.ogid":{"category":"auditd","description":"file owner group ID","name":"auditd.paths.ogid","type":"keyword"},"auditd.paths.item":{"category":"auditd","description":"which item is being recorded","name":"auditd.paths.item","type":"keyword"},"auditd.paths.mode":{"category":"auditd","description":"mode flags on a file","name":"auditd.paths.mode","type":"keyword"},"auditd.paths.name":{"category":"auditd","description":"file name in avcs","name":"auditd.paths.name","type":"keyword"},"auditd.data.action":{"category":"auditd","description":"netfilter packet disposition","name":"auditd.data.action","type":"keyword"},"auditd.data.minor":{"category":"auditd","description":"device minor number","name":"auditd.data.minor","type":"keyword"},"auditd.data.acct":{"category":"auditd","description":"a user's account name","name":"auditd.data.acct","type":"keyword"},"auditd.data.addr":{"category":"auditd","description":"the remote address that the user is connecting from","name":"auditd.data.addr","type":"keyword"},"auditd.data.cipher":{"category":"auditd","description":"name of crypto cipher selected","name":"auditd.data.cipher","type":"keyword"},"auditd.data.id":{"category":"auditd","description":"during account changes","name":"auditd.data.id","type":"keyword"},"auditd.data.entries":{"category":"auditd","description":"number of entries in the netfilter table","name":"auditd.data.entries","type":"keyword"},"auditd.data.kind":{"category":"auditd","description":"server or client in crypto operation","name":"auditd.data.kind","type":"keyword"},"auditd.data.ksize":{"category":"auditd","description":"key size for crypto operation","name":"auditd.data.ksize","type":"keyword"},"auditd.data.spid":{"category":"auditd","description":"sent process ID","name":"auditd.data.spid","type":"keyword"},"auditd.data.arch":{"category":"auditd","description":"the elf architecture flags","name":"auditd.data.arch","type":"keyword"},"auditd.data.argc":{"category":"auditd","description":"the number of arguments to an execve syscall","name":"auditd.data.argc","type":"keyword"},"auditd.data.major":{"category":"auditd","description":"device major number","name":"auditd.data.major","type":"keyword"},"auditd.data.unit":{"category":"auditd","description":"systemd unit","name":"auditd.data.unit","type":"keyword"},"auditd.data.table":{"category":"auditd","description":"netfilter table name","name":"auditd.data.table","type":"keyword"},"auditd.data.terminal":{"category":"auditd","description":"terminal name the user is running programs on","name":"auditd.data.terminal","type":"keyword"},"auditd.data.grantors":{"category":"auditd","description":"pam modules approving the action","name":"auditd.data.grantors","type":"keyword"},"auditd.data.direction":{"category":"auditd","description":"direction of crypto operation","name":"auditd.data.direction","type":"keyword"},"auditd.data.op":{"category":"auditd","description":"the operation being performed that is audited","name":"auditd.data.op","type":"keyword"},"auditd.data.tty":{"category":"auditd","description":"tty udevice the user is running programs on","name":"auditd.data.tty","type":"keyword"},"auditd.data.syscall":{"category":"auditd","description":"syscall number in effect when the event occurred","name":"auditd.data.syscall","type":"keyword"},"auditd.data.data":{"category":"auditd","description":"TTY text","name":"auditd.data.data","type":"keyword"},"auditd.data.family":{"category":"auditd","description":"netfilter protocol","name":"auditd.data.family","type":"keyword"},"auditd.data.mac":{"category":"auditd","description":"crypto MAC algorithm selected","name":"auditd.data.mac","type":"keyword"},"auditd.data.pfs":{"category":"auditd","description":"perfect forward secrecy method","name":"auditd.data.pfs","type":"keyword"},"auditd.data.items":{"category":"auditd","description":"the number of path records in the event","name":"auditd.data.items","type":"keyword"},"auditd.data.a0":{"category":"auditd","description":"","name":"auditd.data.a0","type":"keyword"},"auditd.data.a1":{"category":"auditd","description":"","name":"auditd.data.a1","type":"keyword"},"auditd.data.a2":{"category":"auditd","description":"","name":"auditd.data.a2","type":"keyword"},"auditd.data.a3":{"category":"auditd","description":"","name":"auditd.data.a3","type":"keyword"},"auditd.data.hostname":{"category":"auditd","description":"the hostname that the user is connecting from","name":"auditd.data.hostname","type":"keyword"},"auditd.data.lport":{"category":"auditd","description":"local network port","name":"auditd.data.lport","type":"keyword"},"auditd.data.rport":{"category":"auditd","description":"remote port number","name":"auditd.data.rport","type":"keyword"},"auditd.data.exit":{"category":"auditd","description":"syscall exit code","name":"auditd.data.exit","type":"keyword"},"auditd.data.fp":{"category":"auditd","description":"crypto key finger print","name":"auditd.data.fp","type":"keyword"},"auditd.data.laddr":{"category":"auditd","description":"local network address","name":"auditd.data.laddr","type":"keyword"},"auditd.data.sport":{"category":"auditd","description":"local port number","name":"auditd.data.sport","type":"keyword"},"auditd.data.capability":{"category":"auditd","description":"posix capabilities","name":"auditd.data.capability","type":"keyword"},"auditd.data.nargs":{"category":"auditd","description":"the number of arguments to a socket call","name":"auditd.data.nargs","type":"keyword"},"auditd.data.new-enabled":{"category":"auditd","description":"new TTY audit enabled setting","name":"auditd.data.new-enabled","type":"keyword"},"auditd.data.audit_backlog_limit":{"category":"auditd","description":"audit system's backlog queue size","name":"auditd.data.audit_backlog_limit","type":"keyword"},"auditd.data.dir":{"category":"auditd","description":"directory name","name":"auditd.data.dir","type":"keyword"},"auditd.data.cap_pe":{"category":"auditd","description":"process effective capability map","name":"auditd.data.cap_pe","type":"keyword"},"auditd.data.model":{"category":"auditd","description":"security model being used for virt","name":"auditd.data.model","type":"keyword"},"auditd.data.new_pp":{"category":"auditd","description":"new process permitted capability map","name":"auditd.data.new_pp","type":"keyword"},"auditd.data.old-enabled":{"category":"auditd","description":"present TTY audit enabled setting","name":"auditd.data.old-enabled","type":"keyword"},"auditd.data.oauid":{"category":"auditd","description":"object's login user ID","name":"auditd.data.oauid","type":"keyword"},"auditd.data.old":{"category":"auditd","description":"old value","name":"auditd.data.old","type":"keyword"},"auditd.data.banners":{"category":"auditd","description":"banners used on printed page","name":"auditd.data.banners","type":"keyword"},"auditd.data.feature":{"category":"auditd","description":"kernel feature being changed","name":"auditd.data.feature","type":"keyword"},"auditd.data.vm-ctx":{"category":"auditd","description":"the vm's context string","name":"auditd.data.vm-ctx","type":"keyword"},"auditd.data.opid":{"category":"auditd","description":"object's process ID","name":"auditd.data.opid","type":"keyword"},"auditd.data.seperms":{"category":"auditd","description":"SELinux permissions being used","name":"auditd.data.seperms","type":"keyword"},"auditd.data.seresult":{"category":"auditd","description":"SELinux AVC decision granted/denied","name":"auditd.data.seresult","type":"keyword"},"auditd.data.new-rng":{"category":"auditd","description":"device name of rng being added from a vm","name":"auditd.data.new-rng","type":"keyword"},"auditd.data.old-net":{"category":"auditd","description":"present MAC address assigned to vm","name":"auditd.data.old-net","type":"keyword"},"auditd.data.sigev_signo":{"category":"auditd","description":"signal number","name":"auditd.data.sigev_signo","type":"keyword"},"auditd.data.ino":{"category":"auditd","description":"inode number","name":"auditd.data.ino","type":"keyword"},"auditd.data.old_enforcing":{"category":"auditd","description":"old MAC enforcement status","name":"auditd.data.old_enforcing","type":"keyword"},"auditd.data.old-vcpu":{"category":"auditd","description":"present number of CPU cores","name":"auditd.data.old-vcpu","type":"keyword"},"auditd.data.range":{"category":"auditd","description":"user's SE Linux range","name":"auditd.data.range","type":"keyword"},"auditd.data.res":{"category":"auditd","description":"result of the audited operation(success/fail)","name":"auditd.data.res","type":"keyword"},"auditd.data.added":{"category":"auditd","description":"number of new files detected","name":"auditd.data.added","type":"keyword"},"auditd.data.fam":{"category":"auditd","description":"socket address family","name":"auditd.data.fam","type":"keyword"},"auditd.data.nlnk-pid":{"category":"auditd","description":"pid of netlink packet sender","name":"auditd.data.nlnk-pid","type":"keyword"},"auditd.data.subj":{"category":"auditd","description":"lspp subject's context string","name":"auditd.data.subj","type":"keyword"},"auditd.data.a[0-3]":{"category":"auditd","description":"the arguments to a syscall","name":"auditd.data.a[0-3]","type":"keyword"},"auditd.data.cgroup":{"category":"auditd","description":"path to cgroup in sysfs","name":"auditd.data.cgroup","type":"keyword"},"auditd.data.kernel":{"category":"auditd","description":"kernel's version number","name":"auditd.data.kernel","type":"keyword"},"auditd.data.ocomm":{"category":"auditd","description":"object's command line name","name":"auditd.data.ocomm","type":"keyword"},"auditd.data.new-net":{"category":"auditd","description":"MAC address being assigned to vm","name":"auditd.data.new-net","type":"keyword"},"auditd.data.permissive":{"category":"auditd","description":"SELinux is in permissive mode","name":"auditd.data.permissive","type":"keyword"},"auditd.data.class":{"category":"auditd","description":"resource class assigned to vm","name":"auditd.data.class","type":"keyword"},"auditd.data.compat":{"category":"auditd","description":"is_compat_task result","name":"auditd.data.compat","type":"keyword"},"auditd.data.fi":{"category":"auditd","description":"file assigned inherited capability map","name":"auditd.data.fi","type":"keyword"},"auditd.data.changed":{"category":"auditd","description":"number of changed files","name":"auditd.data.changed","type":"keyword"},"auditd.data.msg":{"category":"auditd","description":"the payload of the audit record","name":"auditd.data.msg","type":"keyword"},"auditd.data.dport":{"category":"auditd","description":"remote port number","name":"auditd.data.dport","type":"keyword"},"auditd.data.new-seuser":{"category":"auditd","description":"new SELinux user","name":"auditd.data.new-seuser","type":"keyword"},"auditd.data.invalid_context":{"category":"auditd","description":"SELinux context","name":"auditd.data.invalid_context","type":"keyword"},"auditd.data.dmac":{"category":"auditd","description":"remote MAC address","name":"auditd.data.dmac","type":"keyword"},"auditd.data.ipx-net":{"category":"auditd","description":"IPX network number","name":"auditd.data.ipx-net","type":"keyword"},"auditd.data.iuid":{"category":"auditd","description":"ipc object's user ID","name":"auditd.data.iuid","type":"keyword"},"auditd.data.macproto":{"category":"auditd","description":"ethernet packet type ID field","name":"auditd.data.macproto","type":"keyword"},"auditd.data.obj":{"category":"auditd","description":"lspp object context string","name":"auditd.data.obj","type":"keyword"},"auditd.data.ipid":{"category":"auditd","description":"IP datagram fragment identifier","name":"auditd.data.ipid","type":"keyword"},"auditd.data.new-fs":{"category":"auditd","description":"file system being added to vm","name":"auditd.data.new-fs","type":"keyword"},"auditd.data.vm-pid":{"category":"auditd","description":"vm's process ID","name":"auditd.data.vm-pid","type":"keyword"},"auditd.data.cap_pi":{"category":"auditd","description":"process inherited capability map","name":"auditd.data.cap_pi","type":"keyword"},"auditd.data.old-auid":{"category":"auditd","description":"previous auid value","name":"auditd.data.old-auid","type":"keyword"},"auditd.data.oses":{"category":"auditd","description":"object's session ID","name":"auditd.data.oses","type":"keyword"},"auditd.data.fd":{"category":"auditd","description":"file descriptor number","name":"auditd.data.fd","type":"keyword"},"auditd.data.igid":{"category":"auditd","description":"ipc object's group ID","name":"auditd.data.igid","type":"keyword"},"auditd.data.new-disk":{"category":"auditd","description":"disk being added to vm","name":"auditd.data.new-disk","type":"keyword"},"auditd.data.parent":{"category":"auditd","description":"the inode number of the parent file","name":"auditd.data.parent","type":"keyword"},"auditd.data.len":{"category":"auditd","description":"length","name":"auditd.data.len","type":"keyword"},"auditd.data.oflag":{"category":"auditd","description":"open syscall flags","name":"auditd.data.oflag","type":"keyword"},"auditd.data.uuid":{"category":"auditd","description":"a UUID","name":"auditd.data.uuid","type":"keyword"},"auditd.data.code":{"category":"auditd","description":"seccomp action code","name":"auditd.data.code","type":"keyword"},"auditd.data.nlnk-grp":{"category":"auditd","description":"netlink group number","name":"auditd.data.nlnk-grp","type":"keyword"},"auditd.data.cap_fp":{"category":"auditd","description":"file permitted capability map","name":"auditd.data.cap_fp","type":"keyword"},"auditd.data.new-mem":{"category":"auditd","description":"new amount of memory in KB","name":"auditd.data.new-mem","type":"keyword"},"auditd.data.seperm":{"category":"auditd","description":"SELinux permission being decided on","name":"auditd.data.seperm","type":"keyword"},"auditd.data.enforcing":{"category":"auditd","description":"new MAC enforcement status","name":"auditd.data.enforcing","type":"keyword"},"auditd.data.new-chardev":{"category":"auditd","description":"new character device being assigned to vm","name":"auditd.data.new-chardev","type":"keyword"},"auditd.data.old-rng":{"category":"auditd","description":"device name of rng being removed from a vm","name":"auditd.data.old-rng","type":"keyword"},"auditd.data.outif":{"category":"auditd","description":"out interface number","name":"auditd.data.outif","type":"keyword"},"auditd.data.cmd":{"category":"auditd","description":"command being executed","name":"auditd.data.cmd","type":"keyword"},"auditd.data.hook":{"category":"auditd","description":"netfilter hook that packet came from","name":"auditd.data.hook","type":"keyword"},"auditd.data.new-level":{"category":"auditd","description":"new run level","name":"auditd.data.new-level","type":"keyword"},"auditd.data.sauid":{"category":"auditd","description":"sent login user ID","name":"auditd.data.sauid","type":"keyword"},"auditd.data.sig":{"category":"auditd","description":"signal number","name":"auditd.data.sig","type":"keyword"},"auditd.data.audit_backlog_wait_time":{"category":"auditd","description":"audit system's backlog wait time","name":"auditd.data.audit_backlog_wait_time","type":"keyword"},"auditd.data.printer":{"category":"auditd","description":"printer name","name":"auditd.data.printer","type":"keyword"},"auditd.data.old-mem":{"category":"auditd","description":"present amount of memory in KB","name":"auditd.data.old-mem","type":"keyword"},"auditd.data.perm":{"category":"auditd","description":"the file permission being used","name":"auditd.data.perm","type":"keyword"},"auditd.data.old_pi":{"category":"auditd","description":"old process inherited capability map","name":"auditd.data.old_pi","type":"keyword"},"auditd.data.state":{"category":"auditd","description":"audit daemon configuration resulting state","name":"auditd.data.state","type":"keyword"},"auditd.data.format":{"category":"auditd","description":"audit log's format","name":"auditd.data.format","type":"keyword"},"auditd.data.new_gid":{"category":"auditd","description":"new group ID being assigned","name":"auditd.data.new_gid","type":"keyword"},"auditd.data.tcontext":{"category":"auditd","description":"the target's or object's context string","name":"auditd.data.tcontext","type":"keyword"},"auditd.data.maj":{"category":"auditd","description":"device major number","name":"auditd.data.maj","type":"keyword"},"auditd.data.watch":{"category":"auditd","description":"file name in a watch record","name":"auditd.data.watch","type":"keyword"},"auditd.data.device":{"category":"auditd","description":"device name","name":"auditd.data.device","type":"keyword"},"auditd.data.grp":{"category":"auditd","description":"group name","name":"auditd.data.grp","type":"keyword"},"auditd.data.bool":{"category":"auditd","description":"name of SELinux boolean","name":"auditd.data.bool","type":"keyword"},"auditd.data.icmp_type":{"category":"auditd","description":"type of icmp message","name":"auditd.data.icmp_type","type":"keyword"},"auditd.data.new_lock":{"category":"auditd","description":"new value of feature lock","name":"auditd.data.new_lock","type":"keyword"},"auditd.data.old_prom":{"category":"auditd","description":"network promiscuity flag","name":"auditd.data.old_prom","type":"keyword"},"auditd.data.acl":{"category":"auditd","description":"access mode of resource assigned to vm","name":"auditd.data.acl","type":"keyword"},"auditd.data.ip":{"category":"auditd","description":"network address of a printer","name":"auditd.data.ip","type":"keyword"},"auditd.data.new_pi":{"category":"auditd","description":"new process inherited capability map","name":"auditd.data.new_pi","type":"keyword"},"auditd.data.default-context":{"category":"auditd","description":"default MAC context","name":"auditd.data.default-context","type":"keyword"},"auditd.data.inode_gid":{"category":"auditd","description":"group ID of the inode's owner","name":"auditd.data.inode_gid","type":"keyword"},"auditd.data.new-log_passwd":{"category":"auditd","description":"new value for TTY password logging","name":"auditd.data.new-log_passwd","type":"keyword"},"auditd.data.new_pe":{"category":"auditd","description":"new process effective capability map","name":"auditd.data.new_pe","type":"keyword"},"auditd.data.selected-context":{"category":"auditd","description":"new MAC context assigned to session","name":"auditd.data.selected-context","type":"keyword"},"auditd.data.cap_fver":{"category":"auditd","description":"file system capabilities version number","name":"auditd.data.cap_fver","type":"keyword"},"auditd.data.file":{"category":"auditd","description":"file name","name":"auditd.data.file","type":"keyword"},"auditd.data.net":{"category":"auditd","description":"network MAC address","name":"auditd.data.net","type":"keyword"},"auditd.data.virt":{"category":"auditd","description":"kind of virtualization being referenced","name":"auditd.data.virt","type":"keyword"},"auditd.data.cap_pp":{"category":"auditd","description":"process permitted capability map","name":"auditd.data.cap_pp","type":"keyword"},"auditd.data.old-range":{"category":"auditd","description":"present SELinux range","name":"auditd.data.old-range","type":"keyword"},"auditd.data.resrc":{"category":"auditd","description":"resource being assigned","name":"auditd.data.resrc","type":"keyword"},"auditd.data.new-range":{"category":"auditd","description":"new SELinux range","name":"auditd.data.new-range","type":"keyword"},"auditd.data.obj_gid":{"category":"auditd","description":"group ID of object","name":"auditd.data.obj_gid","type":"keyword"},"auditd.data.proto":{"category":"auditd","description":"network protocol","name":"auditd.data.proto","type":"keyword"},"auditd.data.old-disk":{"category":"auditd","description":"disk being removed from vm","name":"auditd.data.old-disk","type":"keyword"},"auditd.data.audit_failure":{"category":"auditd","description":"audit system's failure mode","name":"auditd.data.audit_failure","type":"keyword"},"auditd.data.inif":{"category":"auditd","description":"in interface number","name":"auditd.data.inif","type":"keyword"},"auditd.data.vm":{"category":"auditd","description":"virtual machine name","name":"auditd.data.vm","type":"keyword"},"auditd.data.flags":{"category":"auditd","description":"mmap syscall flags","name":"auditd.data.flags","type":"keyword"},"auditd.data.nlnk-fam":{"category":"auditd","description":"netlink protocol number","name":"auditd.data.nlnk-fam","type":"keyword"},"auditd.data.old-fs":{"category":"auditd","description":"file system being removed from vm","name":"auditd.data.old-fs","type":"keyword"},"auditd.data.old-ses":{"category":"auditd","description":"previous ses value","name":"auditd.data.old-ses","type":"keyword"},"auditd.data.seqno":{"category":"auditd","description":"sequence number","name":"auditd.data.seqno","type":"keyword"},"auditd.data.fver":{"category":"auditd","description":"file system capabilities version number","name":"auditd.data.fver","type":"keyword"},"auditd.data.qbytes":{"category":"auditd","description":"ipc objects quantity of bytes","name":"auditd.data.qbytes","type":"keyword"},"auditd.data.seuser":{"category":"auditd","description":"user's SE Linux user acct","name":"auditd.data.seuser","type":"keyword"},"auditd.data.cap_fe":{"category":"auditd","description":"file assigned effective capability map","name":"auditd.data.cap_fe","type":"keyword"},"auditd.data.new-vcpu":{"category":"auditd","description":"new number of CPU cores","name":"auditd.data.new-vcpu","type":"keyword"},"auditd.data.old-level":{"category":"auditd","description":"old run level","name":"auditd.data.old-level","type":"keyword"},"auditd.data.old_pp":{"category":"auditd","description":"old process permitted capability map","name":"auditd.data.old_pp","type":"keyword"},"auditd.data.daddr":{"category":"auditd","description":"remote IP address","name":"auditd.data.daddr","type":"keyword"},"auditd.data.old-role":{"category":"auditd","description":"present SELinux role","name":"auditd.data.old-role","type":"keyword"},"auditd.data.ioctlcmd":{"category":"auditd","description":"The request argument to the ioctl syscall","name":"auditd.data.ioctlcmd","type":"keyword"},"auditd.data.smac":{"category":"auditd","description":"local MAC address","name":"auditd.data.smac","type":"keyword"},"auditd.data.apparmor":{"category":"auditd","description":"apparmor event information","name":"auditd.data.apparmor","type":"keyword"},"auditd.data.fe":{"category":"auditd","description":"file assigned effective capability map","name":"auditd.data.fe","type":"keyword"},"auditd.data.perm_mask":{"category":"auditd","description":"file permission mask that triggered a watch event","name":"auditd.data.perm_mask","type":"keyword"},"auditd.data.ses":{"category":"auditd","description":"login session ID","name":"auditd.data.ses","type":"keyword"},"auditd.data.cap_fi":{"category":"auditd","description":"file inherited capability map","name":"auditd.data.cap_fi","type":"keyword"},"auditd.data.obj_uid":{"category":"auditd","description":"user ID of object","name":"auditd.data.obj_uid","type":"keyword"},"auditd.data.reason":{"category":"auditd","description":"text string denoting a reason for the action","name":"auditd.data.reason","type":"keyword"},"auditd.data.list":{"category":"auditd","description":"the audit system's filter list number","name":"auditd.data.list","type":"keyword"},"auditd.data.old_lock":{"category":"auditd","description":"present value of feature lock","name":"auditd.data.old_lock","type":"keyword"},"auditd.data.bus":{"category":"auditd","description":"name of subsystem bus a vm resource belongs to","name":"auditd.data.bus","type":"keyword"},"auditd.data.old_pe":{"category":"auditd","description":"old process effective capability map","name":"auditd.data.old_pe","type":"keyword"},"auditd.data.new-role":{"category":"auditd","description":"new SELinux role","name":"auditd.data.new-role","type":"keyword"},"auditd.data.prom":{"category":"auditd","description":"network promiscuity flag","name":"auditd.data.prom","type":"keyword"},"auditd.data.uri":{"category":"auditd","description":"URI pointing to a printer","name":"auditd.data.uri","type":"keyword"},"auditd.data.audit_enabled":{"category":"auditd","description":"audit systems's enable/disable status","name":"auditd.data.audit_enabled","type":"keyword"},"auditd.data.old-log_passwd":{"category":"auditd","description":"present value for TTY password logging","name":"auditd.data.old-log_passwd","type":"keyword"},"auditd.data.old-seuser":{"category":"auditd","description":"present SELinux user","name":"auditd.data.old-seuser","type":"keyword"},"auditd.data.per":{"category":"auditd","description":"linux personality","name":"auditd.data.per","type":"keyword"},"auditd.data.scontext":{"category":"auditd","description":"the subject's context string","name":"auditd.data.scontext","type":"keyword"},"auditd.data.tclass":{"category":"auditd","description":"target's object classification","name":"auditd.data.tclass","type":"keyword"},"auditd.data.ver":{"category":"auditd","description":"audit daemon's version number","name":"auditd.data.ver","type":"keyword"},"auditd.data.new":{"category":"auditd","description":"value being set in feature","name":"auditd.data.new","type":"keyword"},"auditd.data.val":{"category":"auditd","description":"generic value associated with the operation","name":"auditd.data.val","type":"keyword"},"auditd.data.img-ctx":{"category":"auditd","description":"the vm's disk image context string","name":"auditd.data.img-ctx","type":"keyword"},"auditd.data.old-chardev":{"category":"auditd","description":"present character device assigned to vm","name":"auditd.data.old-chardev","type":"keyword"},"auditd.data.old_val":{"category":"auditd","description":"current value of SELinux boolean","name":"auditd.data.old_val","type":"keyword"},"auditd.data.success":{"category":"auditd","description":"whether the syscall was successful or not","name":"auditd.data.success","type":"keyword"},"auditd.data.inode_uid":{"category":"auditd","description":"user ID of the inode's owner","name":"auditd.data.inode_uid","type":"keyword"},"auditd.data.removed":{"category":"auditd","description":"number of deleted files","name":"auditd.data.removed","type":"keyword"},"auditd.data.socket.port":{"category":"auditd","description":"The port number.","name":"auditd.data.socket.port","type":"keyword"},"auditd.data.socket.saddr":{"category":"auditd","description":"The raw socket address structure.","name":"auditd.data.socket.saddr","type":"keyword"},"auditd.data.socket.addr":{"category":"auditd","description":"The remote address.","name":"auditd.data.socket.addr","type":"keyword"},"auditd.data.socket.family":{"category":"auditd","description":"The socket family (unix, ipv4, ipv6, netlink).","example":"unix","name":"auditd.data.socket.family","type":"keyword"},"auditd.data.socket.path":{"category":"auditd","description":"This is the path associated with a unix socket.","name":"auditd.data.socket.path","type":"keyword"},"auditd.messages":{"category":"auditd","description":"An ordered list of the raw messages received from the kernel that were used to construct this document. This field is present if an error occurred processing the data or if `include_raw_message` is set in the config. ","name":"auditd.messages","type":"alias"},"auditd.warnings":{"category":"auditd","description":"The warnings generated by the Beat during the construction of the event. These are disabled by default and are used for development and debug purposes only. ","name":"auditd.warnings","type":"alias"},"geoip.continent_name":{"category":"geoip","description":"The name of the continent. ","name":"geoip.continent_name","type":"keyword"},"geoip.city_name":{"category":"geoip","description":"The name of the city. ","name":"geoip.city_name","type":"keyword"},"geoip.region_name":{"category":"geoip","description":"The name of the region. ","name":"geoip.region_name","type":"keyword"},"geoip.country_iso_code":{"category":"geoip","description":"Country ISO code. ","name":"geoip.country_iso_code","type":"keyword"},"geoip.location":{"category":"geoip","description":"The longitude and latitude. ","name":"geoip.location","type":"geo_point"},"hash.blake2b_256":{"category":"hash","description":"BLAKE2b-256 hash of the file.","name":"hash.blake2b_256","type":"keyword"},"hash.blake2b_384":{"category":"hash","description":"BLAKE2b-384 hash of the file.","name":"hash.blake2b_384","type":"keyword"},"hash.blake2b_512":{"category":"hash","description":"BLAKE2b-512 hash of the file.","name":"hash.blake2b_512","type":"keyword"},"hash.sha224":{"category":"hash","description":"SHA224 hash of the file.","name":"hash.sha224","type":"keyword"},"hash.sha384":{"category":"hash","description":"SHA384 hash of the file.","name":"hash.sha384","type":"keyword"},"hash.sha3_224":{"category":"hash","description":"SHA3_224 hash of the file.","name":"hash.sha3_224","type":"keyword"},"hash.sha3_256":{"category":"hash","description":"SHA3_256 hash of the file.","name":"hash.sha3_256","type":"keyword"},"hash.sha3_384":{"category":"hash","description":"SHA3_384 hash of the file.","name":"hash.sha3_384","type":"keyword"},"hash.sha3_512":{"category":"hash","description":"SHA3_512 hash of the file.","name":"hash.sha3_512","type":"keyword"},"hash.sha512_224":{"category":"hash","description":"SHA512/224 hash of the file.","name":"hash.sha512_224","type":"keyword"},"hash.sha512_256":{"category":"hash","description":"SHA512/256 hash of the file.","name":"hash.sha512_256","type":"keyword"},"hash.xxh64":{"category":"hash","description":"XX64 hash of the file.","name":"hash.xxh64","type":"keyword"},"event.origin":{"category":"event","description":"Origin of the event. This can be a file path (e.g. `/var/log/log.1`), or the name of the system component that supplied the data (e.g. `netlink`). ","name":"event.origin","type":"keyword"},"user.entity_id":{"category":"user","description":"ID uniquely identifying the user on a host. It is computed as a SHA-256 hash of the host ID, user ID, and user name. ","name":"user.entity_id","type":"keyword"},"user.terminal":{"category":"user","description":"Terminal of the user. ","name":"user.terminal","type":"keyword"},"process.hash.blake2b_256":{"category":"process","description":"BLAKE2b-256 hash of the executable.","name":"process.hash.blake2b_256","type":"keyword"},"process.hash.blake2b_384":{"category":"process","description":"BLAKE2b-384 hash of the executable.","name":"process.hash.blake2b_384","type":"keyword"},"process.hash.blake2b_512":{"category":"process","description":"BLAKE2b-512 hash of the executable.","name":"process.hash.blake2b_512","type":"keyword"},"process.hash.sha224":{"category":"process","description":"SHA224 hash of the executable.","name":"process.hash.sha224","type":"keyword"},"process.hash.sha384":{"category":"process","description":"SHA384 hash of the executable.","name":"process.hash.sha384","type":"keyword"},"process.hash.sha3_224":{"category":"process","description":"SHA3_224 hash of the executable.","name":"process.hash.sha3_224","type":"keyword"},"process.hash.sha3_256":{"category":"process","description":"SHA3_256 hash of the executable.","name":"process.hash.sha3_256","type":"keyword"},"process.hash.sha3_384":{"category":"process","description":"SHA3_384 hash of the executable.","name":"process.hash.sha3_384","type":"keyword"},"process.hash.sha3_512":{"category":"process","description":"SHA3_512 hash of the executable.","name":"process.hash.sha3_512","type":"keyword"},"process.hash.sha512_224":{"category":"process","description":"SHA512/224 hash of the executable.","name":"process.hash.sha512_224","type":"keyword"},"process.hash.sha512_256":{"category":"process","description":"SHA512/256 hash of the executable.","name":"process.hash.sha512_256","type":"keyword"},"process.hash.xxh64":{"category":"process","description":"XX64 hash of the executable.","name":"process.hash.xxh64","type":"keyword"},"socket.entity_id":{"category":"socket","description":"ID uniquely identifying the socket. It is computed as a SHA-256 hash of the host ID, socket inode, local IP, local port, remote IP, and remote port. ","name":"socket.entity_id","type":"keyword"},"system.audit.host.uptime":{"category":"system","description":"Uptime in nanoseconds. ","name":"system.audit.host.uptime","type":"long","format":"duration"},"system.audit.host.boottime":{"category":"system","description":"Boot time. ","name":"system.audit.host.boottime","type":"date"},"system.audit.host.containerized":{"category":"system","description":"Set if host is a container. ","name":"system.audit.host.containerized","type":"boolean"},"system.audit.host.timezone.name":{"category":"system","description":"Name of the timezone of the host, e.g. BST. ","name":"system.audit.host.timezone.name","type":"keyword"},"system.audit.host.timezone.offset.sec":{"category":"system","description":"Timezone offset in seconds. ","name":"system.audit.host.timezone.offset.sec","type":"long"},"system.audit.host.hostname":{"category":"system","description":"Hostname. ","name":"system.audit.host.hostname","type":"keyword"},"system.audit.host.id":{"category":"system","description":"Host ID. ","name":"system.audit.host.id","type":"keyword"},"system.audit.host.architecture":{"category":"system","description":"Host architecture (e.g. x86_64). ","name":"system.audit.host.architecture","type":"keyword"},"system.audit.host.mac":{"category":"system","description":"MAC addresses. ","name":"system.audit.host.mac","type":"keyword"},"system.audit.host.ip":{"category":"system","description":"IP addresses. ","name":"system.audit.host.ip","type":"ip"},"system.audit.host.os.codename":{"category":"system","description":"OS codename, if any (e.g. stretch). ","name":"system.audit.host.os.codename","type":"keyword"},"system.audit.host.os.platform":{"category":"system","description":"OS platform (e.g. centos, ubuntu, windows). ","name":"system.audit.host.os.platform","type":"keyword"},"system.audit.host.os.name":{"category":"system","description":"OS name (e.g. Mac OS X). ","name":"system.audit.host.os.name","type":"keyword"},"system.audit.host.os.family":{"category":"system","description":"OS family (e.g. redhat, debian, freebsd, windows). ","name":"system.audit.host.os.family","type":"keyword"},"system.audit.host.os.version":{"category":"system","description":"OS version. ","name":"system.audit.host.os.version","type":"keyword"},"system.audit.host.os.kernel":{"category":"system","description":"The operating system's kernel version. ","name":"system.audit.host.os.kernel","type":"keyword"},"system.audit.host.os.type":{"category":"system","description":"OS type (see ECS os.type). ","name":"system.audit.host.os.type","type":"keyword"},"system.audit.package.entity_id":{"category":"system","description":"ID uniquely identifying the package. It is computed as a SHA-256 hash of the host ID, package name, and package version. ","name":"system.audit.package.entity_id","type":"keyword"},"system.audit.package.name":{"category":"system","description":"Package name. ","name":"system.audit.package.name","type":"keyword"},"system.audit.package.version":{"category":"system","description":"Package version. ","name":"system.audit.package.version","type":"keyword"},"system.audit.package.release":{"category":"system","description":"Package release. ","name":"system.audit.package.release","type":"keyword"},"system.audit.package.arch":{"category":"system","description":"Package architecture. ","name":"system.audit.package.arch","type":"keyword"},"system.audit.package.license":{"category":"system","description":"Package license. ","name":"system.audit.package.license","type":"keyword"},"system.audit.package.installtime":{"category":"system","description":"Package install time. ","name":"system.audit.package.installtime","type":"date"},"system.audit.package.size":{"category":"system","description":"Package size. ","name":"system.audit.package.size","type":"long"},"system.audit.package.summary":{"category":"system","description":"Package summary. ","name":"system.audit.package.summary"},"system.audit.package.url":{"category":"system","description":"Package URL. ","name":"system.audit.package.url","type":"keyword"},"system.audit.user.name":{"category":"system","description":"User name. ","name":"system.audit.user.name","type":"keyword"},"system.audit.user.uid":{"category":"system","description":"User ID. ","name":"system.audit.user.uid","type":"keyword"},"system.audit.user.gid":{"category":"system","description":"Group ID. ","name":"system.audit.user.gid","type":"keyword"},"system.audit.user.dir":{"category":"system","description":"User's home directory. ","name":"system.audit.user.dir","type":"keyword"},"system.audit.user.shell":{"category":"system","description":"Program to run at login. ","name":"system.audit.user.shell","type":"keyword"},"system.audit.user.user_information":{"category":"system","description":"General user information. On Linux, this is the gecos field. ","name":"system.audit.user.user_information","type":"keyword"},"system.audit.user.group.name":{"category":"system","description":"Group name. ","name":"system.audit.user.group.name","type":"keyword"},"system.audit.user.group.gid":{"category":"system","description":"Group ID. ","name":"system.audit.user.group.gid","type":"integer"},"system.audit.user.password.type":{"category":"system","description":"A user's password type. Possible values are `shadow_password` (the password hash is in the shadow file), `password_disabled`, `no_password` (this is dangerous as anyone can log in), and `crypt_password` (when the password field in /etc/passwd seems to contain an encrypted password). ","name":"system.audit.user.password.type","type":"keyword"},"system.audit.user.password.last_changed":{"category":"system","description":"The day the user's password was last changed. ","name":"system.audit.user.password.last_changed","type":"date"},"log.source.address":{"category":"log","description":"Source address from which the log event was read / sent from. ","name":"log.source.address","type":"keyword"},"log.offset":{"category":"log","description":"The file offset the reported line starts at. ","name":"log.offset","type":"long"},"stream":{"category":"base","description":"Log stream when reading container logs, can be 'stdout' or 'stderr' ","name":"stream","type":"keyword"},"input.type":{"category":"input","description":"The input type from which the event was generated. This field is set to the value specified for the `type` option in the input section of the Filebeat config file. ","name":"input.type"},"syslog.facility":{"category":"syslog","description":"The facility extracted from the priority. ","name":"syslog.facility","type":"long"},"syslog.priority":{"category":"syslog","description":"The priority of the syslog event. ","name":"syslog.priority","type":"long"},"syslog.severity_label":{"category":"syslog","description":"The human readable severity. ","name":"syslog.severity_label","type":"keyword"},"syslog.facility_label":{"category":"syslog","description":"The human readable facility. ","name":"syslog.facility_label","type":"keyword"},"process.program":{"category":"process","description":"The name of the program. ","name":"process.program","type":"keyword"},"log.flags":{"category":"log","description":"This field contains the flags of the event. ","name":"log.flags"},"http.response.content_length":{"category":"http","name":"http.response.content_length","type":"alias"},"user_agent.os.full_name":{"category":"user_agent","name":"user_agent.os.full_name","type":"keyword"},"fileset.name":{"category":"fileset","description":"The Filebeat fileset that generated this event. ","name":"fileset.name","type":"keyword"},"fileset.module":{"category":"fileset","name":"fileset.module","type":"alias"},"read_timestamp":{"category":"base","name":"read_timestamp","type":"alias"},"docker.attrs":{"category":"docker","description":"docker.attrs contains labels and environment variables written by docker's JSON File logging driver. These fields are only available when they are configured in the logging driver options. ","name":"docker.attrs","type":"object"},"icmp.code":{"category":"icmp","description":"ICMP code. ","name":"icmp.code","type":"keyword"},"icmp.type":{"category":"icmp","description":"ICMP type. ","name":"icmp.type","type":"keyword"},"igmp.type":{"category":"igmp","description":"IGMP type. ","name":"igmp.type","type":"keyword"},"azure.eventhub":{"category":"azure","description":"Name of the eventhub. ","name":"azure.eventhub","type":"keyword"},"azure.offset":{"category":"azure","description":"The offset. ","name":"azure.offset","type":"long"},"azure.enqueued_time":{"category":"azure","description":"The enqueued time. ","name":"azure.enqueued_time","type":"date"},"azure.partition_id":{"category":"azure","description":"The partition id. ","name":"azure.partition_id","type":"long"},"azure.consumer_group":{"category":"azure","description":"The consumer group. ","name":"azure.consumer_group","type":"keyword"},"azure.sequence_number":{"category":"azure","description":"The sequence number. ","name":"azure.sequence_number","type":"long"},"kafka.topic":{"category":"kafka","description":"Kafka topic ","name":"kafka.topic","type":"keyword"},"kafka.partition":{"category":"kafka","description":"Kafka partition number ","name":"kafka.partition","type":"long"},"kafka.offset":{"category":"kafka","description":"Kafka offset of this message ","name":"kafka.offset","type":"long"},"kafka.key":{"category":"kafka","description":"Kafka key, corresponding to the Kafka value stored in the message ","name":"kafka.key","type":"keyword"},"kafka.block_timestamp":{"category":"kafka","description":"Kafka outer (compressed) block timestamp ","name":"kafka.block_timestamp","type":"date"},"kafka.headers":{"category":"kafka","description":"An array of Kafka header strings for this message, in the form \": \". ","name":"kafka.headers","type":"array"},"apache.access.ssl.protocol":{"category":"apache","description":"SSL protocol version. ","name":"apache.access.ssl.protocol","type":"keyword"},"apache.access.ssl.cipher":{"category":"apache","description":"SSL cipher name. ","name":"apache.access.ssl.cipher","type":"keyword"},"apache.error.module":{"category":"apache","description":"The module producing the logged message. ","name":"apache.error.module","type":"keyword"},"user.audit.group.id":{"category":"user","description":"Unique identifier for the group on the system/platform. ","name":"user.audit.group.id","type":"keyword"},"user.audit.group.name":{"category":"user","description":"Name of the group. ","name":"user.audit.group.name","type":"keyword"},"user.owner.id":{"category":"user","description":"One or multiple unique identifiers of the user. ","name":"user.owner.id","type":"keyword"},"user.owner.name":{"category":"user","description":"Short name or login of the user. ","example":"albert","name":"user.owner.name","type":"keyword"},"user.owner.group.id":{"category":"user","description":"Unique identifier for the group on the system/platform. ","name":"user.owner.group.id","type":"keyword"},"user.owner.group.name":{"category":"user","description":"Name of the group. ","name":"user.owner.group.name","type":"keyword"},"auditd.log.old_auid":{"category":"auditd","description":"For login events this is the old audit ID used for the user prior to this login. ","name":"auditd.log.old_auid"},"auditd.log.new_auid":{"category":"auditd","description":"For login events this is the new audit ID. The audit ID can be used to trace future events to the user even if their identity changes (like becoming root). ","name":"auditd.log.new_auid"},"auditd.log.old_ses":{"category":"auditd","description":"For login events this is the old session ID used for the user prior to this login. ","name":"auditd.log.old_ses"},"auditd.log.new_ses":{"category":"auditd","description":"For login events this is the new session ID. It can be used to tie a user to future events by session ID. ","name":"auditd.log.new_ses"},"auditd.log.sequence":{"category":"auditd","description":"The audit event sequence number. ","name":"auditd.log.sequence","type":"long"},"auditd.log.items":{"category":"auditd","description":"The number of items in an event. ","name":"auditd.log.items"},"auditd.log.item":{"category":"auditd","description":"The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. ","name":"auditd.log.item"},"auditd.log.tty":{"category":"auditd","name":"auditd.log.tty","type":"keyword"},"auditd.log.a0":{"category":"auditd","description":"The first argument to the system call. ","name":"auditd.log.a0"},"auditd.log.addr":{"category":"auditd","name":"auditd.log.addr","type":"ip"},"auditd.log.rport":{"category":"auditd","name":"auditd.log.rport","type":"long"},"auditd.log.laddr":{"category":"auditd","name":"auditd.log.laddr","type":"ip"},"auditd.log.lport":{"category":"auditd","name":"auditd.log.lport","type":"long"},"auditd.log.acct":{"category":"auditd","name":"auditd.log.acct","type":"alias"},"auditd.log.pid":{"category":"auditd","name":"auditd.log.pid","type":"alias"},"auditd.log.ppid":{"category":"auditd","name":"auditd.log.ppid","type":"alias"},"auditd.log.res":{"category":"auditd","name":"auditd.log.res","type":"alias"},"auditd.log.record_type":{"category":"auditd","name":"auditd.log.record_type","type":"alias"},"auditd.log.geoip.continent_name":{"category":"auditd","name":"auditd.log.geoip.continent_name","type":"alias"},"auditd.log.geoip.country_iso_code":{"category":"auditd","name":"auditd.log.geoip.country_iso_code","type":"alias"},"auditd.log.geoip.location":{"category":"auditd","name":"auditd.log.geoip.location","type":"alias"},"auditd.log.geoip.region_name":{"category":"auditd","name":"auditd.log.geoip.region_name","type":"alias"},"auditd.log.geoip.city_name":{"category":"auditd","name":"auditd.log.geoip.city_name","type":"alias"},"auditd.log.geoip.region_iso_code":{"category":"auditd","name":"auditd.log.geoip.region_iso_code","type":"alias"},"auditd.log.arch":{"category":"auditd","name":"auditd.log.arch","type":"alias"},"auditd.log.gid":{"category":"auditd","name":"auditd.log.gid","type":"alias"},"auditd.log.uid":{"category":"auditd","name":"auditd.log.uid","type":"alias"},"auditd.log.agid":{"category":"auditd","name":"auditd.log.agid","type":"alias"},"auditd.log.auid":{"category":"auditd","name":"auditd.log.auid","type":"alias"},"auditd.log.fsgid":{"category":"auditd","name":"auditd.log.fsgid","type":"alias"},"auditd.log.fsuid":{"category":"auditd","name":"auditd.log.fsuid","type":"alias"},"auditd.log.egid":{"category":"auditd","name":"auditd.log.egid","type":"alias"},"auditd.log.euid":{"category":"auditd","name":"auditd.log.euid","type":"alias"},"auditd.log.sgid":{"category":"auditd","name":"auditd.log.sgid","type":"alias"},"auditd.log.suid":{"category":"auditd","name":"auditd.log.suid","type":"alias"},"auditd.log.ogid":{"category":"auditd","name":"auditd.log.ogid","type":"alias"},"auditd.log.ouid":{"category":"auditd","name":"auditd.log.ouid","type":"alias"},"auditd.log.comm":{"category":"auditd","name":"auditd.log.comm","type":"alias"},"auditd.log.exe":{"category":"auditd","name":"auditd.log.exe","type":"alias"},"auditd.log.terminal":{"category":"auditd","name":"auditd.log.terminal","type":"alias"},"auditd.log.msg":{"category":"auditd","name":"auditd.log.msg","type":"alias"},"auditd.log.src":{"category":"auditd","name":"auditd.log.src","type":"alias"},"auditd.log.dst":{"category":"auditd","name":"auditd.log.dst","type":"alias"},"elasticsearch.component":{"category":"elasticsearch","description":"Elasticsearch component from where the log event originated","example":"o.e.c.m.MetaDataCreateIndexService","name":"elasticsearch.component","type":"keyword"},"elasticsearch.cluster.uuid":{"category":"elasticsearch","description":"UUID of the cluster","example":"GmvrbHlNTiSVYiPf8kxg9g","name":"elasticsearch.cluster.uuid","type":"keyword"},"elasticsearch.cluster.name":{"category":"elasticsearch","description":"Name of the cluster","example":"docker-cluster","name":"elasticsearch.cluster.name","type":"keyword"},"elasticsearch.node.id":{"category":"elasticsearch","description":"ID of the node","example":"DSiWcTyeThWtUXLB9J0BMw","name":"elasticsearch.node.id","type":"keyword"},"elasticsearch.node.name":{"category":"elasticsearch","description":"Name of the node","example":"vWNJsZ3","name":"elasticsearch.node.name","type":"keyword"},"elasticsearch.index.name":{"category":"elasticsearch","description":"Index name","example":"filebeat-test-input","name":"elasticsearch.index.name","type":"keyword"},"elasticsearch.index.id":{"category":"elasticsearch","description":"Index id","example":"aOGgDwbURfCV57AScqbCgw","name":"elasticsearch.index.id","type":"keyword"},"elasticsearch.shard.id":{"category":"elasticsearch","description":"Id of the shard","example":"0","name":"elasticsearch.shard.id","type":"keyword"},"elasticsearch.audit.layer":{"category":"elasticsearch","description":"The layer from which this event originated: rest, transport or ip_filter","example":"rest","name":"elasticsearch.audit.layer","type":"keyword"},"elasticsearch.audit.event_type":{"category":"elasticsearch","description":"The type of event that occurred: anonymous_access_denied, authentication_failed, access_denied, access_granted, connection_granted, connection_denied, tampered_request, run_as_granted, run_as_denied","example":"access_granted","name":"elasticsearch.audit.event_type","type":"keyword"},"elasticsearch.audit.origin.type":{"category":"elasticsearch","description":"Where the request originated: rest (request originated from a REST API request), transport (request was received on the transport channel), local_node (the local node issued the request)","example":"local_node","name":"elasticsearch.audit.origin.type","type":"keyword"},"elasticsearch.audit.realm":{"category":"elasticsearch","description":"The authentication realm the authentication was validated against","name":"elasticsearch.audit.realm","type":"keyword"},"elasticsearch.audit.user.realm":{"category":"elasticsearch","description":"The user's authentication realm, if authenticated","name":"elasticsearch.audit.user.realm","type":"keyword"},"elasticsearch.audit.user.roles":{"category":"elasticsearch","description":"Roles to which the principal belongs","example":"[\"kibana_admin\",\"beats_admin\"]","name":"elasticsearch.audit.user.roles","type":"keyword"},"elasticsearch.audit.user.run_as.name":{"category":"elasticsearch","name":"elasticsearch.audit.user.run_as.name","type":"keyword"},"elasticsearch.audit.user.run_as.realm":{"category":"elasticsearch","name":"elasticsearch.audit.user.run_as.realm","type":"keyword"},"elasticsearch.audit.component":{"category":"elasticsearch","name":"elasticsearch.audit.component","type":"keyword"},"elasticsearch.audit.action":{"category":"elasticsearch","description":"The name of the action that was executed","example":"cluster:monitor/main","name":"elasticsearch.audit.action","type":"keyword"},"elasticsearch.audit.url.params":{"category":"elasticsearch","description":"REST URI parameters","example":"{username=jacknich2}","name":"elasticsearch.audit.url.params"},"elasticsearch.audit.indices":{"category":"elasticsearch","description":"Indices accessed by action","example":"[\"foo-2019.01.04\",\"foo-2019.01.03\",\"foo-2019.01.06\"]","name":"elasticsearch.audit.indices","type":"keyword"},"elasticsearch.audit.request.id":{"category":"elasticsearch","description":"Unique ID of request","example":"WzL_kb6VSvOhAq0twPvHOQ","name":"elasticsearch.audit.request.id","type":"keyword"},"elasticsearch.audit.request.name":{"category":"elasticsearch","description":"The type of request that was executed","example":"ClearScrollRequest","name":"elasticsearch.audit.request.name","type":"keyword"},"elasticsearch.audit.request_body":{"category":"elasticsearch","name":"elasticsearch.audit.request_body","type":"alias"},"elasticsearch.audit.origin_address":{"category":"elasticsearch","name":"elasticsearch.audit.origin_address","type":"alias"},"elasticsearch.audit.uri":{"category":"elasticsearch","name":"elasticsearch.audit.uri","type":"alias"},"elasticsearch.audit.principal":{"category":"elasticsearch","name":"elasticsearch.audit.principal","type":"alias"},"elasticsearch.audit.message":{"category":"elasticsearch","name":"elasticsearch.audit.message","type":"text"},"elasticsearch.audit.invalidate.apikeys.owned_by_authenticated_user":{"category":"elasticsearch","name":"elasticsearch.audit.invalidate.apikeys.owned_by_authenticated_user","type":"boolean"},"elasticsearch.deprecation":{"category":"elasticsearch","description":"","name":"elasticsearch.deprecation","type":"group"},"elasticsearch.gc.phase.name":{"category":"elasticsearch","description":"Name of the GC collection phase. ","name":"elasticsearch.gc.phase.name","type":"keyword"},"elasticsearch.gc.phase.duration_sec":{"category":"elasticsearch","description":"Collection phase duration according to the Java virtual machine. ","name":"elasticsearch.gc.phase.duration_sec","type":"float"},"elasticsearch.gc.phase.scrub_symbol_table_time_sec":{"category":"elasticsearch","description":"Pause time in seconds cleaning up symbol tables. ","name":"elasticsearch.gc.phase.scrub_symbol_table_time_sec","type":"float"},"elasticsearch.gc.phase.scrub_string_table_time_sec":{"category":"elasticsearch","description":"Pause time in seconds cleaning up string tables. ","name":"elasticsearch.gc.phase.scrub_string_table_time_sec","type":"float"},"elasticsearch.gc.phase.weak_refs_processing_time_sec":{"category":"elasticsearch","description":"Time spent processing weak references in seconds. ","name":"elasticsearch.gc.phase.weak_refs_processing_time_sec","type":"float"},"elasticsearch.gc.phase.parallel_rescan_time_sec":{"category":"elasticsearch","description":"Time spent in seconds marking live objects while application is stopped. ","name":"elasticsearch.gc.phase.parallel_rescan_time_sec","type":"float"},"elasticsearch.gc.phase.class_unload_time_sec":{"category":"elasticsearch","description":"Time spent unloading unused classes in seconds. ","name":"elasticsearch.gc.phase.class_unload_time_sec","type":"float"},"elasticsearch.gc.phase.cpu_time.user_sec":{"category":"elasticsearch","description":"CPU time spent outside the kernel. ","name":"elasticsearch.gc.phase.cpu_time.user_sec","type":"float"},"elasticsearch.gc.phase.cpu_time.sys_sec":{"category":"elasticsearch","description":"CPU time spent inside the kernel. ","name":"elasticsearch.gc.phase.cpu_time.sys_sec","type":"float"},"elasticsearch.gc.phase.cpu_time.real_sec":{"category":"elasticsearch","description":"Total elapsed CPU time spent to complete the collection from start to finish. ","name":"elasticsearch.gc.phase.cpu_time.real_sec","type":"float"},"elasticsearch.gc.jvm_runtime_sec":{"category":"elasticsearch","description":"The time from JVM start up in seconds, as a floating point number. ","name":"elasticsearch.gc.jvm_runtime_sec","type":"float"},"elasticsearch.gc.threads_total_stop_time_sec":{"category":"elasticsearch","description":"Garbage collection threads total stop time seconds. ","name":"elasticsearch.gc.threads_total_stop_time_sec","type":"float"},"elasticsearch.gc.stopping_threads_time_sec":{"category":"elasticsearch","description":"Time took to stop threads seconds. ","name":"elasticsearch.gc.stopping_threads_time_sec","type":"float"},"elasticsearch.gc.tags":{"category":"elasticsearch","description":"GC logging tags. ","name":"elasticsearch.gc.tags","type":"keyword"},"elasticsearch.gc.heap.size_kb":{"category":"elasticsearch","description":"Total heap size in kilobytes. ","name":"elasticsearch.gc.heap.size_kb","type":"integer"},"elasticsearch.gc.heap.used_kb":{"category":"elasticsearch","description":"Used heap in kilobytes. ","name":"elasticsearch.gc.heap.used_kb","type":"integer"},"elasticsearch.gc.old_gen.size_kb":{"category":"elasticsearch","description":"Total size of old generation in kilobytes. ","name":"elasticsearch.gc.old_gen.size_kb","type":"integer"},"elasticsearch.gc.old_gen.used_kb":{"category":"elasticsearch","description":"Old generation occupancy in kilobytes. ","name":"elasticsearch.gc.old_gen.used_kb","type":"integer"},"elasticsearch.gc.young_gen.size_kb":{"category":"elasticsearch","description":"Total size of young generation in kilobytes. ","name":"elasticsearch.gc.young_gen.size_kb","type":"integer"},"elasticsearch.gc.young_gen.used_kb":{"category":"elasticsearch","description":"Young generation occupancy in kilobytes. ","name":"elasticsearch.gc.young_gen.used_kb","type":"integer"},"elasticsearch.server.stacktrace":{"category":"elasticsearch","name":"elasticsearch.server.stacktrace"},"elasticsearch.server.gc.young.one":{"category":"elasticsearch","description":"","example":"","name":"elasticsearch.server.gc.young.one","type":"long"},"elasticsearch.server.gc.young.two":{"category":"elasticsearch","description":"","example":"","name":"elasticsearch.server.gc.young.two","type":"long"},"elasticsearch.server.gc.overhead_seq":{"category":"elasticsearch","description":"Sequence number","example":3449992,"name":"elasticsearch.server.gc.overhead_seq","type":"long"},"elasticsearch.server.gc.collection_duration.ms":{"category":"elasticsearch","description":"Time spent in GC, in milliseconds","example":1600,"name":"elasticsearch.server.gc.collection_duration.ms","type":"float"},"elasticsearch.server.gc.observation_duration.ms":{"category":"elasticsearch","description":"Total time over which collection was observed, in milliseconds","example":1800,"name":"elasticsearch.server.gc.observation_duration.ms","type":"float"},"elasticsearch.slowlog.logger":{"category":"elasticsearch","description":"Logger name","example":"index.search.slowlog.fetch","name":"elasticsearch.slowlog.logger","type":"keyword"},"elasticsearch.slowlog.took":{"category":"elasticsearch","description":"Time it took to execute the query","example":"300ms","name":"elasticsearch.slowlog.took","type":"keyword"},"elasticsearch.slowlog.types":{"category":"elasticsearch","description":"Types","example":"","name":"elasticsearch.slowlog.types","type":"keyword"},"elasticsearch.slowlog.stats":{"category":"elasticsearch","description":"Stats groups","example":"group1","name":"elasticsearch.slowlog.stats","type":"keyword"},"elasticsearch.slowlog.search_type":{"category":"elasticsearch","description":"Search type","example":"QUERY_THEN_FETCH","name":"elasticsearch.slowlog.search_type","type":"keyword"},"elasticsearch.slowlog.source_query":{"category":"elasticsearch","description":"Slow query","example":"{\"query\":{\"match_all\":{\"boost\":1.0}}}","name":"elasticsearch.slowlog.source_query","type":"keyword"},"elasticsearch.slowlog.extra_source":{"category":"elasticsearch","description":"Extra source information","example":"","name":"elasticsearch.slowlog.extra_source","type":"keyword"},"elasticsearch.slowlog.total_hits":{"category":"elasticsearch","description":"Total hits","example":42,"name":"elasticsearch.slowlog.total_hits","type":"keyword"},"elasticsearch.slowlog.total_shards":{"category":"elasticsearch","description":"Total queried shards","example":22,"name":"elasticsearch.slowlog.total_shards","type":"keyword"},"elasticsearch.slowlog.routing":{"category":"elasticsearch","description":"Routing","example":"s01HZ2QBk9jw4gtgaFtn","name":"elasticsearch.slowlog.routing","type":"keyword"},"elasticsearch.slowlog.id":{"category":"elasticsearch","description":"Id","example":"","name":"elasticsearch.slowlog.id","type":"keyword"},"elasticsearch.slowlog.type":{"category":"elasticsearch","description":"Type","example":"doc","name":"elasticsearch.slowlog.type","type":"keyword"},"elasticsearch.slowlog.source":{"category":"elasticsearch","description":"Source of document that was indexed","name":"elasticsearch.slowlog.source","type":"keyword"},"haproxy.frontend_name":{"category":"haproxy","description":"Name of the frontend (or listener) which received and processed the connection.","name":"haproxy.frontend_name"},"haproxy.backend_name":{"category":"haproxy","description":"Name of the backend (or listener) which was selected to manage the connection to the server.","name":"haproxy.backend_name"},"haproxy.server_name":{"category":"haproxy","description":"Name of the last server to which the connection was sent.","name":"haproxy.server_name"},"haproxy.total_waiting_time_ms":{"category":"haproxy","description":"Total time in milliseconds spent waiting in the various queues","name":"haproxy.total_waiting_time_ms","type":"long"},"haproxy.connection_wait_time_ms":{"category":"haproxy","description":"Total time in milliseconds spent waiting for the connection to establish to the final server","name":"haproxy.connection_wait_time_ms","type":"long"},"haproxy.bytes_read":{"category":"haproxy","description":"Total number of bytes transmitted to the client when the log is emitted.","name":"haproxy.bytes_read","type":"long"},"haproxy.time_queue":{"category":"haproxy","description":"Total time in milliseconds spent waiting in the various queues.","name":"haproxy.time_queue","type":"long"},"haproxy.time_backend_connect":{"category":"haproxy","description":"Total time in milliseconds spent waiting for the connection to establish to the final server, including retries.","name":"haproxy.time_backend_connect","type":"long"},"haproxy.server_queue":{"category":"haproxy","description":"Total number of requests which were processed before this one in the server queue.","name":"haproxy.server_queue","type":"long"},"haproxy.backend_queue":{"category":"haproxy","description":"Total number of requests which were processed before this one in the backend's global queue.","name":"haproxy.backend_queue","type":"long"},"haproxy.bind_name":{"category":"haproxy","description":"Name of the listening address which received the connection.","name":"haproxy.bind_name"},"haproxy.error_message":{"category":"haproxy","description":"Error message logged by HAProxy in case of error.","name":"haproxy.error_message","type":"text"},"haproxy.source":{"category":"haproxy","description":"The HAProxy source of the log","name":"haproxy.source","type":"keyword"},"haproxy.termination_state":{"category":"haproxy","description":"Condition the session was in when the session ended.","name":"haproxy.termination_state"},"haproxy.mode":{"category":"haproxy","description":"mode that the frontend is operating (TCP or HTTP)","name":"haproxy.mode","type":"keyword"},"haproxy.connections.active":{"category":"haproxy","description":"Total number of concurrent connections on the process when the session was logged.","name":"haproxy.connections.active","type":"long"},"haproxy.connections.frontend":{"category":"haproxy","description":"Total number of concurrent connections on the frontend when the session was logged.","name":"haproxy.connections.frontend","type":"long"},"haproxy.connections.backend":{"category":"haproxy","description":"Total number of concurrent connections handled by the backend when the session was logged.","name":"haproxy.connections.backend","type":"long"},"haproxy.connections.server":{"category":"haproxy","description":"Total number of concurrent connections still active on the server when the session was logged.","name":"haproxy.connections.server","type":"long"},"haproxy.connections.retries":{"category":"haproxy","description":"Number of connection retries experienced by this session when trying to connect to the server.","name":"haproxy.connections.retries","type":"long"},"haproxy.client.ip":{"category":"haproxy","name":"haproxy.client.ip","type":"alias"},"haproxy.client.port":{"category":"haproxy","name":"haproxy.client.port","type":"alias"},"haproxy.process_name":{"category":"haproxy","name":"haproxy.process_name","type":"alias"},"haproxy.pid":{"category":"haproxy","name":"haproxy.pid","type":"alias"},"haproxy.destination.port":{"category":"haproxy","name":"haproxy.destination.port","type":"alias"},"haproxy.destination.ip":{"category":"haproxy","name":"haproxy.destination.ip","type":"alias"},"haproxy.geoip.continent_name":{"category":"haproxy","name":"haproxy.geoip.continent_name","type":"alias"},"haproxy.geoip.country_iso_code":{"category":"haproxy","name":"haproxy.geoip.country_iso_code","type":"alias"},"haproxy.geoip.location":{"category":"haproxy","name":"haproxy.geoip.location","type":"alias"},"haproxy.geoip.region_name":{"category":"haproxy","name":"haproxy.geoip.region_name","type":"alias"},"haproxy.geoip.city_name":{"category":"haproxy","name":"haproxy.geoip.city_name","type":"alias"},"haproxy.geoip.region_iso_code":{"category":"haproxy","name":"haproxy.geoip.region_iso_code","type":"alias"},"haproxy.http.response.captured_cookie":{"category":"haproxy","description":"Optional \"name=value\" entry indicating that the client had this cookie in the response. ","name":"haproxy.http.response.captured_cookie"},"haproxy.http.response.captured_headers":{"category":"haproxy","description":"List of headers captured in the response due to the presence of the \"capture response header\" statement in the frontend. ","name":"haproxy.http.response.captured_headers","type":"keyword"},"haproxy.http.response.status_code":{"category":"haproxy","name":"haproxy.http.response.status_code","type":"alias"},"haproxy.http.request.captured_cookie":{"category":"haproxy","description":"Optional \"name=value\" entry indicating that the server has returned a cookie with its request. ","name":"haproxy.http.request.captured_cookie"},"haproxy.http.request.captured_headers":{"category":"haproxy","description":"List of headers captured in the request due to the presence of the \"capture request header\" statement in the frontend. ","name":"haproxy.http.request.captured_headers","type":"keyword"},"haproxy.http.request.raw_request_line":{"category":"haproxy","description":"Complete HTTP request line, including the method, request and HTTP version string.","name":"haproxy.http.request.raw_request_line","type":"keyword"},"haproxy.http.request.time_wait_without_data_ms":{"category":"haproxy","description":"Total time in milliseconds spent waiting for the server to send a full HTTP response, not counting data.","name":"haproxy.http.request.time_wait_without_data_ms","type":"long"},"haproxy.http.request.time_wait_ms":{"category":"haproxy","description":"Total time in milliseconds spent waiting for a full HTTP request from the client (not counting body) after the first byte was received.","name":"haproxy.http.request.time_wait_ms","type":"long"},"haproxy.tcp.connection_waiting_time_ms":{"category":"haproxy","description":"Total time in milliseconds elapsed between the accept and the last close","name":"haproxy.tcp.connection_waiting_time_ms","type":"long"},"icinga.debug.facility":{"category":"icinga","description":"Specifies what component of Icinga logged the message. ","name":"icinga.debug.facility","type":"keyword"},"icinga.debug.severity":{"category":"icinga","name":"icinga.debug.severity","type":"alias"},"icinga.debug.message":{"category":"icinga","name":"icinga.debug.message","type":"alias"},"icinga.main.facility":{"category":"icinga","description":"Specifies what component of Icinga logged the message. ","name":"icinga.main.facility","type":"keyword"},"icinga.main.severity":{"category":"icinga","name":"icinga.main.severity","type":"alias"},"icinga.main.message":{"category":"icinga","name":"icinga.main.message","type":"alias"},"icinga.startup.facility":{"category":"icinga","description":"Specifies what component of Icinga logged the message. ","name":"icinga.startup.facility","type":"keyword"},"icinga.startup.severity":{"category":"icinga","name":"icinga.startup.severity","type":"alias"},"icinga.startup.message":{"category":"icinga","name":"icinga.startup.message","type":"alias"},"iis.access.sub_status":{"category":"iis","description":"The HTTP substatus code. ","name":"iis.access.sub_status","type":"long"},"iis.access.win32_status":{"category":"iis","description":"The Windows status code. ","name":"iis.access.win32_status","type":"long"},"iis.access.site_name":{"category":"iis","description":"The site name and instance number. ","name":"iis.access.site_name","type":"keyword"},"iis.access.server_name":{"category":"iis","description":"The name of the server on which the log file entry was generated. ","name":"iis.access.server_name","type":"keyword"},"iis.access.cookie":{"category":"iis","description":"The content of the cookie sent or received, if any. ","name":"iis.access.cookie","type":"keyword"},"iis.access.body_received.bytes":{"category":"iis","name":"iis.access.body_received.bytes","type":"alias"},"iis.access.body_sent.bytes":{"category":"iis","name":"iis.access.body_sent.bytes","type":"alias"},"iis.access.server_ip":{"category":"iis","name":"iis.access.server_ip","type":"alias"},"iis.access.method":{"category":"iis","name":"iis.access.method","type":"alias"},"iis.access.url":{"category":"iis","name":"iis.access.url","type":"alias"},"iis.access.query_string":{"category":"iis","name":"iis.access.query_string","type":"alias"},"iis.access.port":{"category":"iis","name":"iis.access.port","type":"alias"},"iis.access.user_name":{"category":"iis","name":"iis.access.user_name","type":"alias"},"iis.access.remote_ip":{"category":"iis","name":"iis.access.remote_ip","type":"alias"},"iis.access.referrer":{"category":"iis","name":"iis.access.referrer","type":"alias"},"iis.access.response_code":{"category":"iis","name":"iis.access.response_code","type":"alias"},"iis.access.http_version":{"category":"iis","name":"iis.access.http_version","type":"alias"},"iis.access.hostname":{"category":"iis","name":"iis.access.hostname","type":"alias"},"iis.access.user_agent.device":{"category":"iis","name":"iis.access.user_agent.device","type":"alias"},"iis.access.user_agent.name":{"category":"iis","name":"iis.access.user_agent.name","type":"alias"},"iis.access.user_agent.os":{"category":"iis","name":"iis.access.user_agent.os","type":"alias"},"iis.access.user_agent.os_name":{"category":"iis","name":"iis.access.user_agent.os_name","type":"alias"},"iis.access.user_agent.original":{"category":"iis","name":"iis.access.user_agent.original","type":"alias"},"iis.access.geoip.continent_name":{"category":"iis","name":"iis.access.geoip.continent_name","type":"alias"},"iis.access.geoip.country_iso_code":{"category":"iis","name":"iis.access.geoip.country_iso_code","type":"alias"},"iis.access.geoip.location":{"category":"iis","name":"iis.access.geoip.location","type":"alias"},"iis.access.geoip.region_name":{"category":"iis","name":"iis.access.geoip.region_name","type":"alias"},"iis.access.geoip.city_name":{"category":"iis","name":"iis.access.geoip.city_name","type":"alias"},"iis.access.geoip.region_iso_code":{"category":"iis","name":"iis.access.geoip.region_iso_code","type":"alias"},"iis.error.reason_phrase":{"category":"iis","description":"The HTTP reason phrase. ","name":"iis.error.reason_phrase","type":"keyword"},"iis.error.queue_name":{"category":"iis","description":"The IIS application pool name. ","name":"iis.error.queue_name","type":"keyword"},"iis.error.remote_ip":{"category":"iis","name":"iis.error.remote_ip","type":"alias"},"iis.error.remote_port":{"category":"iis","name":"iis.error.remote_port","type":"alias"},"iis.error.server_ip":{"category":"iis","name":"iis.error.server_ip","type":"alias"},"iis.error.server_port":{"category":"iis","name":"iis.error.server_port","type":"alias"},"iis.error.http_version":{"category":"iis","name":"iis.error.http_version","type":"alias"},"iis.error.method":{"category":"iis","name":"iis.error.method","type":"alias"},"iis.error.url":{"category":"iis","name":"iis.error.url","type":"alias"},"iis.error.response_code":{"category":"iis","name":"iis.error.response_code","type":"alias"},"iis.error.geoip.continent_name":{"category":"iis","name":"iis.error.geoip.continent_name","type":"alias"},"iis.error.geoip.country_iso_code":{"category":"iis","name":"iis.error.geoip.country_iso_code","type":"alias"},"iis.error.geoip.location":{"category":"iis","name":"iis.error.geoip.location","type":"alias"},"iis.error.geoip.region_name":{"category":"iis","name":"iis.error.geoip.region_name","type":"alias"},"iis.error.geoip.city_name":{"category":"iis","name":"iis.error.geoip.city_name","type":"alias"},"iis.error.geoip.region_iso_code":{"category":"iis","name":"iis.error.geoip.region_iso_code","type":"alias"},"kafka.log.component":{"category":"kafka","description":"Component the log is coming from. ","name":"kafka.log.component","type":"keyword"},"kafka.log.class":{"category":"kafka","description":"Java class the log is coming from. ","name":"kafka.log.class","type":"keyword"},"kafka.log.thread":{"category":"kafka","description":"Thread name the log is coming from. ","name":"kafka.log.thread","type":"keyword"},"kafka.log.trace.class":{"category":"kafka","description":"Java class the trace is coming from. ","name":"kafka.log.trace.class","type":"keyword"},"kafka.log.trace.message":{"category":"kafka","description":"Message part of the trace. ","name":"kafka.log.trace.message","type":"text"},"kibana.session_id":{"category":"kibana","description":"The ID of the user session associated with this event. Each login attempt results in a unique session id.","example":"123e4567-e89b-12d3-a456-426614174000","name":"kibana.session_id","type":"keyword"},"kibana.space_id":{"category":"kibana","description":"The id of the space associated with this event.","example":"default","name":"kibana.space_id","type":"keyword"},"kibana.saved_object.type":{"category":"kibana","description":"The type of the saved object associated with this event.","example":"dashboard","name":"kibana.saved_object.type","type":"keyword"},"kibana.saved_object.id":{"category":"kibana","description":"The id of the saved object associated with this event.","example":"6295bdd0-0a0e-11e7-825f-6748cda7d858","name":"kibana.saved_object.id","type":"keyword"},"kibana.add_to_spaces":{"category":"kibana","description":"The set of space ids that a saved object was shared to.","example":"['default', 'marketing']","name":"kibana.add_to_spaces","type":"keyword"},"kibana.delete_from_spaces":{"category":"kibana","description":"The set of space ids that a saved object was removed from.","example":"['default', 'marketing']","name":"kibana.delete_from_spaces","type":"keyword"},"kibana.authentication_provider":{"category":"kibana","description":"The authentication provider associated with a login event.","example":"basic1","name":"kibana.authentication_provider","type":"keyword"},"kibana.authentication_type":{"category":"kibana","description":"The authentication provider type associated with a login event.","example":"basic","name":"kibana.authentication_type","type":"keyword"},"kibana.authentication_realm":{"category":"kibana","description":"The Elasticsearch authentication realm name which fulfilled a login event.","example":"native","name":"kibana.authentication_realm","type":"keyword"},"kibana.lookup_realm":{"category":"kibana","description":"The Elasticsearch lookup realm which fulfilled a login event.","example":"native","name":"kibana.lookup_realm","type":"keyword"},"kibana.log.tags":{"category":"kibana","description":"Kibana logging tags. ","name":"kibana.log.tags","type":"keyword"},"kibana.log.state":{"category":"kibana","description":"Current state of Kibana. ","name":"kibana.log.state","type":"keyword"},"kibana.log.meta":{"category":"kibana","name":"kibana.log.meta","type":"object"},"kibana.log.kibana.log.meta.req.headers.referer":{"category":"kibana","name":"kibana.log.kibana.log.meta.req.headers.referer","type":"alias"},"kibana.log.kibana.log.meta.req.referer":{"category":"kibana","name":"kibana.log.kibana.log.meta.req.referer","type":"alias"},"kibana.log.kibana.log.meta.req.headers.user-agent":{"category":"kibana","name":"kibana.log.kibana.log.meta.req.headers.user-agent","type":"alias"},"kibana.log.kibana.log.meta.req.remoteAddress":{"category":"kibana","name":"kibana.log.kibana.log.meta.req.remoteAddress","type":"alias"},"kibana.log.kibana.log.meta.req.url":{"category":"kibana","name":"kibana.log.kibana.log.meta.req.url","type":"alias"},"kibana.log.kibana.log.meta.statusCode":{"category":"kibana","name":"kibana.log.kibana.log.meta.statusCode","type":"alias"},"kibana.log.kibana.log.meta.method":{"category":"kibana","name":"kibana.log.kibana.log.meta.method","type":"alias"},"logstash.log.module":{"category":"logstash","description":"The module or class where the event originate. ","name":"logstash.log.module","type":"keyword"},"logstash.log.thread":{"category":"logstash","description":"Information about the running thread where the log originate. ","name":"logstash.log.thread","type":"keyword"},"logstash.log.log_event":{"category":"logstash","description":"key and value debugging information. ","name":"logstash.log.log_event","type":"object"},"logstash.log.log_event.action":{"category":"logstash","name":"logstash.log.log_event.action","type":"keyword"},"logstash.log.pipeline_id":{"category":"logstash","description":"The ID of the pipeline. ","example":"main","name":"logstash.log.pipeline_id","type":"keyword"},"logstash.log.message":{"category":"logstash","name":"logstash.log.message","type":"alias"},"logstash.log.level":{"category":"logstash","name":"logstash.log.level","type":"alias"},"logstash.slowlog.module":{"category":"logstash","description":"The module or class where the event originate. ","name":"logstash.slowlog.module","type":"keyword"},"logstash.slowlog.thread":{"category":"logstash","description":"Information about the running thread where the log originate. ","name":"logstash.slowlog.thread","type":"keyword"},"logstash.slowlog.event":{"category":"logstash","description":"Raw dump of the original event ","name":"logstash.slowlog.event","type":"keyword"},"logstash.slowlog.plugin_name":{"category":"logstash","description":"Name of the plugin ","name":"logstash.slowlog.plugin_name","type":"keyword"},"logstash.slowlog.plugin_type":{"category":"logstash","description":"Type of the plugin: Inputs, Filters, Outputs or Codecs. ","name":"logstash.slowlog.plugin_type","type":"keyword"},"logstash.slowlog.took_in_millis":{"category":"logstash","description":"Execution time for the plugin in milliseconds. ","name":"logstash.slowlog.took_in_millis","type":"long"},"logstash.slowlog.plugin_params":{"category":"logstash","description":"String value of the plugin configuration ","name":"logstash.slowlog.plugin_params","type":"keyword"},"logstash.slowlog.plugin_params_object":{"category":"logstash","description":"key -> value of the configuration used by the plugin. ","name":"logstash.slowlog.plugin_params_object","type":"object"},"logstash.slowlog.level":{"category":"logstash","name":"logstash.slowlog.level","type":"alias"},"logstash.slowlog.took_in_nanos":{"category":"logstash","name":"logstash.slowlog.took_in_nanos","type":"alias"},"mongodb.log.component":{"category":"mongodb","description":"Functional categorization of message ","example":"COMMAND","name":"mongodb.log.component","type":"keyword"},"mongodb.log.context":{"category":"mongodb","description":"Context of message ","example":"initandlisten","name":"mongodb.log.context","type":"keyword"},"mongodb.log.severity":{"category":"mongodb","name":"mongodb.log.severity","type":"alias"},"mongodb.log.message":{"category":"mongodb","name":"mongodb.log.message","type":"alias"},"mongodb.log.id":{"category":"mongodb","description":"Integer representing the unique identifier of the log statement ","example":4615611,"name":"mongodb.log.id","type":"long"},"mysql.thread_id":{"category":"mysql","description":"The connection or thread ID for the query. ","name":"mysql.thread_id","type":"long"},"mysql.error.thread_id":{"category":"mysql","name":"mysql.error.thread_id","type":"alias"},"mysql.error.level":{"category":"mysql","name":"mysql.error.level","type":"alias"},"mysql.error.message":{"category":"mysql","name":"mysql.error.message","type":"alias"},"mysql.slowlog.lock_time.sec":{"category":"mysql","description":"The amount of time the query waited for the lock to be available. The value is in seconds, as a floating point number. ","name":"mysql.slowlog.lock_time.sec","type":"float"},"mysql.slowlog.rows_sent":{"category":"mysql","description":"The number of rows returned by the query. ","name":"mysql.slowlog.rows_sent","type":"long"},"mysql.slowlog.rows_examined":{"category":"mysql","description":"The number of rows scanned by the query. ","name":"mysql.slowlog.rows_examined","type":"long"},"mysql.slowlog.rows_affected":{"category":"mysql","description":"The number of rows modified by the query. ","name":"mysql.slowlog.rows_affected","type":"long"},"mysql.slowlog.bytes_sent":{"category":"mysql","description":"The number of bytes sent to client. ","name":"mysql.slowlog.bytes_sent","type":"long","format":"bytes"},"mysql.slowlog.bytes_received":{"category":"mysql","description":"The number of bytes received from client. ","name":"mysql.slowlog.bytes_received","type":"long","format":"bytes"},"mysql.slowlog.query":{"category":"mysql","description":"The slow query. ","name":"mysql.slowlog.query"},"mysql.slowlog.id":{"category":"mysql","name":"mysql.slowlog.id","type":"alias"},"mysql.slowlog.schema":{"category":"mysql","description":"The schema where the slow query was executed. ","name":"mysql.slowlog.schema","type":"keyword"},"mysql.slowlog.current_user":{"category":"mysql","description":"Current authenticated user, used to determine access privileges. Can differ from the value for user. ","name":"mysql.slowlog.current_user","type":"keyword"},"mysql.slowlog.last_errno":{"category":"mysql","description":"Last SQL error seen. ","name":"mysql.slowlog.last_errno","type":"keyword"},"mysql.slowlog.killed":{"category":"mysql","description":"Code of the reason if the query was killed. ","name":"mysql.slowlog.killed","type":"keyword"},"mysql.slowlog.query_cache_hit":{"category":"mysql","description":"Whether the query cache was hit. ","name":"mysql.slowlog.query_cache_hit","type":"boolean"},"mysql.slowlog.tmp_table":{"category":"mysql","description":"Whether a temporary table was used to resolve the query. ","name":"mysql.slowlog.tmp_table","type":"boolean"},"mysql.slowlog.tmp_table_on_disk":{"category":"mysql","description":"Whether the query needed temporary tables on disk. ","name":"mysql.slowlog.tmp_table_on_disk","type":"boolean"},"mysql.slowlog.tmp_tables":{"category":"mysql","description":"Number of temporary tables created for this query ","name":"mysql.slowlog.tmp_tables","type":"long"},"mysql.slowlog.tmp_disk_tables":{"category":"mysql","description":"Number of temporary tables created on disk for this query. ","name":"mysql.slowlog.tmp_disk_tables","type":"long"},"mysql.slowlog.tmp_table_sizes":{"category":"mysql","description":"Size of temporary tables created for this query.","name":"mysql.slowlog.tmp_table_sizes","type":"long","format":"bytes"},"mysql.slowlog.filesort":{"category":"mysql","description":"Whether filesort optimization was used. ","name":"mysql.slowlog.filesort","type":"boolean"},"mysql.slowlog.filesort_on_disk":{"category":"mysql","description":"Whether filesort optimization was used and it needed temporary tables on disk. ","name":"mysql.slowlog.filesort_on_disk","type":"boolean"},"mysql.slowlog.priority_queue":{"category":"mysql","description":"Whether a priority queue was used for filesort. ","name":"mysql.slowlog.priority_queue","type":"boolean"},"mysql.slowlog.full_scan":{"category":"mysql","description":"Whether a full table scan was needed for the slow query. ","name":"mysql.slowlog.full_scan","type":"boolean"},"mysql.slowlog.full_join":{"category":"mysql","description":"Whether a full join was needed for the slow query (no indexes were used for joins). ","name":"mysql.slowlog.full_join","type":"boolean"},"mysql.slowlog.merge_passes":{"category":"mysql","description":"Number of merge passes executed for the query. ","name":"mysql.slowlog.merge_passes","type":"long"},"mysql.slowlog.sort_merge_passes":{"category":"mysql","description":"Number of merge passes that the sort algorithm has had to do. ","name":"mysql.slowlog.sort_merge_passes","type":"long"},"mysql.slowlog.sort_range_count":{"category":"mysql","description":"Number of sorts that were done using ranges. ","name":"mysql.slowlog.sort_range_count","type":"long"},"mysql.slowlog.sort_rows":{"category":"mysql","description":"Number of sorted rows. ","name":"mysql.slowlog.sort_rows","type":"long"},"mysql.slowlog.sort_scan_count":{"category":"mysql","description":"Number of sorts that were done by scanning the table. ","name":"mysql.slowlog.sort_scan_count","type":"long"},"mysql.slowlog.log_slow_rate_type":{"category":"mysql","description":"Type of slow log rate limit, it can be `session` if the rate limit is applied per session, or `query` if it applies per query. ","name":"mysql.slowlog.log_slow_rate_type","type":"keyword"},"mysql.slowlog.log_slow_rate_limit":{"category":"mysql","description":"Slow log rate limit, a value of 100 means that one in a hundred queries or sessions are being logged. ","name":"mysql.slowlog.log_slow_rate_limit","type":"keyword"},"mysql.slowlog.read_first":{"category":"mysql","description":"The number of times the first entry in an index was read. ","name":"mysql.slowlog.read_first","type":"long"},"mysql.slowlog.read_last":{"category":"mysql","description":"The number of times the last key in an index was read. ","name":"mysql.slowlog.read_last","type":"long"},"mysql.slowlog.read_key":{"category":"mysql","description":"The number of requests to read a row based on a key. ","name":"mysql.slowlog.read_key","type":"long"},"mysql.slowlog.read_next":{"category":"mysql","description":"The number of requests to read the next row in key order. ","name":"mysql.slowlog.read_next","type":"long"},"mysql.slowlog.read_prev":{"category":"mysql","description":"The number of requests to read the previous row in key order. ","name":"mysql.slowlog.read_prev","type":"long"},"mysql.slowlog.read_rnd":{"category":"mysql","description":"The number of requests to read a row based on a fixed position. ","name":"mysql.slowlog.read_rnd","type":"long"},"mysql.slowlog.read_rnd_next":{"category":"mysql","description":"The number of requests to read the next row in the data file. ","name":"mysql.slowlog.read_rnd_next","type":"long"},"mysql.slowlog.innodb.trx_id":{"category":"mysql","description":"Transaction ID ","name":"mysql.slowlog.innodb.trx_id","type":"keyword"},"mysql.slowlog.innodb.io_r_ops":{"category":"mysql","description":"Number of page read operations. ","name":"mysql.slowlog.innodb.io_r_ops","type":"long"},"mysql.slowlog.innodb.io_r_bytes":{"category":"mysql","description":"Bytes read during page read operations. ","name":"mysql.slowlog.innodb.io_r_bytes","type":"long","format":"bytes"},"mysql.slowlog.innodb.io_r_wait.sec":{"category":"mysql","description":"How long it took to read all needed data from storage. ","name":"mysql.slowlog.innodb.io_r_wait.sec","type":"long"},"mysql.slowlog.innodb.rec_lock_wait.sec":{"category":"mysql","description":"How long the query waited for locks. ","name":"mysql.slowlog.innodb.rec_lock_wait.sec","type":"long"},"mysql.slowlog.innodb.queue_wait.sec":{"category":"mysql","description":"How long the query waited to enter the InnoDB queue and to be executed once in the queue. ","name":"mysql.slowlog.innodb.queue_wait.sec","type":"long"},"mysql.slowlog.innodb.pages_distinct":{"category":"mysql","description":"Approximated count of pages accessed to execute the query. ","name":"mysql.slowlog.innodb.pages_distinct","type":"long"},"mysql.slowlog.user":{"category":"mysql","name":"mysql.slowlog.user","type":"alias"},"mysql.slowlog.host":{"category":"mysql","name":"mysql.slowlog.host","type":"alias"},"mysql.slowlog.ip":{"category":"mysql","name":"mysql.slowlog.ip","type":"alias"},"nats.log.client.id":{"category":"nats","description":"The id of the client ","name":"nats.log.client.id","type":"integer"},"nats.log.msg.bytes":{"category":"nats","description":"Size of the payload in bytes ","name":"nats.log.msg.bytes","type":"long","format":"bytes"},"nats.log.msg.type":{"category":"nats","description":"The protocol message type ","name":"nats.log.msg.type","type":"keyword"},"nats.log.msg.subject":{"category":"nats","description":"Subject name this message was received on ","name":"nats.log.msg.subject","type":"keyword"},"nats.log.msg.sid":{"category":"nats","description":"The unique alphanumeric subscription ID of the subject ","name":"nats.log.msg.sid","type":"integer"},"nats.log.msg.reply_to":{"category":"nats","description":"The inbox subject on which the publisher is listening for responses ","name":"nats.log.msg.reply_to","type":"keyword"},"nats.log.msg.max_messages":{"category":"nats","description":"An optional number of messages to wait for before automatically unsubscribing ","name":"nats.log.msg.max_messages","type":"integer"},"nats.log.msg.error.message":{"category":"nats","description":"Details about the error occurred ","name":"nats.log.msg.error.message","type":"text"},"nats.log.msg.queue_group":{"category":"nats","description":"The queue group which subscriber will join ","name":"nats.log.msg.queue_group","type":"text"},"nginx.access.remote_ip_list":{"category":"nginx","description":"An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ","name":"nginx.access.remote_ip_list","type":"array"},"nginx.access.body_sent.bytes":{"category":"nginx","name":"nginx.access.body_sent.bytes","type":"alias"},"nginx.access.user_name":{"category":"nginx","name":"nginx.access.user_name","type":"alias"},"nginx.access.method":{"category":"nginx","name":"nginx.access.method","type":"alias"},"nginx.access.url":{"category":"nginx","name":"nginx.access.url","type":"alias"},"nginx.access.http_version":{"category":"nginx","name":"nginx.access.http_version","type":"alias"},"nginx.access.response_code":{"category":"nginx","name":"nginx.access.response_code","type":"alias"},"nginx.access.referrer":{"category":"nginx","name":"nginx.access.referrer","type":"alias"},"nginx.access.agent":{"category":"nginx","name":"nginx.access.agent","type":"alias"},"nginx.access.user_agent.device":{"category":"nginx","name":"nginx.access.user_agent.device","type":"alias"},"nginx.access.user_agent.name":{"category":"nginx","name":"nginx.access.user_agent.name","type":"alias"},"nginx.access.user_agent.os":{"category":"nginx","name":"nginx.access.user_agent.os","type":"alias"},"nginx.access.user_agent.os_name":{"category":"nginx","name":"nginx.access.user_agent.os_name","type":"alias"},"nginx.access.user_agent.original":{"category":"nginx","name":"nginx.access.user_agent.original","type":"alias"},"nginx.access.geoip.continent_name":{"category":"nginx","name":"nginx.access.geoip.continent_name","type":"alias"},"nginx.access.geoip.country_iso_code":{"category":"nginx","name":"nginx.access.geoip.country_iso_code","type":"alias"},"nginx.access.geoip.location":{"category":"nginx","name":"nginx.access.geoip.location","type":"alias"},"nginx.access.geoip.region_name":{"category":"nginx","name":"nginx.access.geoip.region_name","type":"alias"},"nginx.access.geoip.city_name":{"category":"nginx","name":"nginx.access.geoip.city_name","type":"alias"},"nginx.access.geoip.region_iso_code":{"category":"nginx","name":"nginx.access.geoip.region_iso_code","type":"alias"},"nginx.error.connection_id":{"category":"nginx","description":"Connection identifier. ","name":"nginx.error.connection_id","type":"long"},"nginx.error.level":{"category":"nginx","name":"nginx.error.level","type":"alias"},"nginx.error.pid":{"category":"nginx","name":"nginx.error.pid","type":"alias"},"nginx.error.tid":{"category":"nginx","name":"nginx.error.tid","type":"alias"},"nginx.error.message":{"category":"nginx","name":"nginx.error.message","type":"alias"},"nginx.ingress_controller.remote_ip_list":{"category":"nginx","description":"An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ","name":"nginx.ingress_controller.remote_ip_list","type":"array"},"nginx.ingress_controller.upstream_address_list":{"category":"nginx","description":"An array of the upstream addresses. It is a list because it is common that several upstream servers were contacted during request processing. ","name":"nginx.ingress_controller.upstream_address_list","type":"keyword"},"nginx.ingress_controller.upstream.response.length_list":{"category":"nginx","description":"An array of upstream response lengths. It is a list because it is common that several upstream servers were contacted during request processing. ","name":"nginx.ingress_controller.upstream.response.length_list","type":"keyword"},"nginx.ingress_controller.upstream.response.time_list":{"category":"nginx","description":"An array of upstream response durations. It is a list because it is common that several upstream servers were contacted during request processing. ","name":"nginx.ingress_controller.upstream.response.time_list","type":"keyword"},"nginx.ingress_controller.upstream.response.status_code_list":{"category":"nginx","description":"An array of upstream response status codes. It is a list because it is common that several upstream servers were contacted during request processing. ","name":"nginx.ingress_controller.upstream.response.status_code_list","type":"keyword"},"nginx.ingress_controller.http.request.length":{"category":"nginx","description":"The request length (including request line, header, and request body) ","name":"nginx.ingress_controller.http.request.length","type":"long","format":"bytes"},"nginx.ingress_controller.http.request.time":{"category":"nginx","description":"Time elapsed since the first bytes were read from the client ","name":"nginx.ingress_controller.http.request.time","type":"double","format":"duration"},"nginx.ingress_controller.upstream.name":{"category":"nginx","description":"The name of the upstream. ","name":"nginx.ingress_controller.upstream.name","type":"keyword"},"nginx.ingress_controller.upstream.alternative_name":{"category":"nginx","description":"The name of the alternative upstream. ","name":"nginx.ingress_controller.upstream.alternative_name","type":"keyword"},"nginx.ingress_controller.upstream.response.length":{"category":"nginx","description":"The length of the response obtained from the upstream server. If several servers were contacted during request process, the summary of the multiple response lengths is stored. ","name":"nginx.ingress_controller.upstream.response.length","type":"long","format":"bytes"},"nginx.ingress_controller.upstream.response.time":{"category":"nginx","description":"The time spent on receiving the response from the upstream as seconds with millisecond resolution. If several servers were contacted during request process, the summary of the multiple response times is stored. ","name":"nginx.ingress_controller.upstream.response.time","type":"double","format":"duration"},"nginx.ingress_controller.upstream.response.status_code":{"category":"nginx","description":"The status code of the response obtained from the upstream server. If several servers were contacted during request process, only the status code of the response from the last one is stored in this field. ","name":"nginx.ingress_controller.upstream.response.status_code","type":"long"},"nginx.ingress_controller.upstream.ip":{"category":"nginx","description":"The IP address of the upstream server. If several servers were contacted during request process, only the last one is stored in this field. ","name":"nginx.ingress_controller.upstream.ip","type":"ip"},"nginx.ingress_controller.upstream.port":{"category":"nginx","description":"The port of the upstream server. If several servers were contacted during request process, only the last one is stored in this field. ","name":"nginx.ingress_controller.upstream.port","type":"long"},"nginx.ingress_controller.http.request.id":{"category":"nginx","description":"The randomly generated ID of the request ","name":"nginx.ingress_controller.http.request.id","type":"keyword"},"nginx.ingress_controller.body_sent.bytes":{"category":"nginx","name":"nginx.ingress_controller.body_sent.bytes","type":"alias"},"nginx.ingress_controller.user_name":{"category":"nginx","name":"nginx.ingress_controller.user_name","type":"alias"},"nginx.ingress_controller.method":{"category":"nginx","name":"nginx.ingress_controller.method","type":"alias"},"nginx.ingress_controller.url":{"category":"nginx","name":"nginx.ingress_controller.url","type":"alias"},"nginx.ingress_controller.http_version":{"category":"nginx","name":"nginx.ingress_controller.http_version","type":"alias"},"nginx.ingress_controller.response_code":{"category":"nginx","name":"nginx.ingress_controller.response_code","type":"alias"},"nginx.ingress_controller.referrer":{"category":"nginx","name":"nginx.ingress_controller.referrer","type":"alias"},"nginx.ingress_controller.agent":{"category":"nginx","name":"nginx.ingress_controller.agent","type":"alias"},"nginx.ingress_controller.user_agent.device":{"category":"nginx","name":"nginx.ingress_controller.user_agent.device","type":"alias"},"nginx.ingress_controller.user_agent.name":{"category":"nginx","name":"nginx.ingress_controller.user_agent.name","type":"alias"},"nginx.ingress_controller.user_agent.os":{"category":"nginx","name":"nginx.ingress_controller.user_agent.os","type":"alias"},"nginx.ingress_controller.user_agent.os_name":{"category":"nginx","name":"nginx.ingress_controller.user_agent.os_name","type":"alias"},"nginx.ingress_controller.user_agent.original":{"category":"nginx","name":"nginx.ingress_controller.user_agent.original","type":"alias"},"nginx.ingress_controller.geoip.continent_name":{"category":"nginx","name":"nginx.ingress_controller.geoip.continent_name","type":"alias"},"nginx.ingress_controller.geoip.country_iso_code":{"category":"nginx","name":"nginx.ingress_controller.geoip.country_iso_code","type":"alias"},"nginx.ingress_controller.geoip.location":{"category":"nginx","name":"nginx.ingress_controller.geoip.location","type":"alias"},"nginx.ingress_controller.geoip.region_name":{"category":"nginx","name":"nginx.ingress_controller.geoip.region_name","type":"alias"},"nginx.ingress_controller.geoip.city_name":{"category":"nginx","name":"nginx.ingress_controller.geoip.city_name","type":"alias"},"nginx.ingress_controller.geoip.region_iso_code":{"category":"nginx","name":"nginx.ingress_controller.geoip.region_iso_code","type":"alias"},"osquery.result.name":{"category":"osquery","description":"The name of the query that generated this event. ","name":"osquery.result.name","type":"keyword"},"osquery.result.action":{"category":"osquery","description":"For incremental data, marks whether the entry was added or removed. It can be one of \"added\", \"removed\", or \"snapshot\". ","name":"osquery.result.action","type":"keyword"},"osquery.result.host_identifier":{"category":"osquery","description":"The identifier for the host on which the osquery agent is running. Normally the hostname. ","name":"osquery.result.host_identifier","type":"keyword"},"osquery.result.unix_time":{"category":"osquery","description":"Unix timestamp of the event, in seconds since the epoch. Used for computing the `@timestamp` column. ","name":"osquery.result.unix_time","type":"long"},"osquery.result.calendar_time":{"category":"osquery","description":"String representation of the collection time, as formatted by osquery. ","name":"osquery.result.calendar_time","type":"keyword"},"pensando.dfw.action":{"category":"pensando","description":"Action on the flow. ","name":"pensando.dfw.action","type":"keyword"},"pensando.dfw.app_id":{"category":"pensando","description":"Application ID ","name":"pensando.dfw.app_id","type":"integer"},"pensando.dfw.destination_address":{"category":"pensando","description":"Address of destination. ","name":"pensando.dfw.destination_address","type":"keyword"},"pensando.dfw.destination_port":{"category":"pensando","description":"Port of destination. ","name":"pensando.dfw.destination_port","type":"integer"},"pensando.dfw.direction":{"category":"pensando","description":"Direction of the flow ","name":"pensando.dfw.direction","type":"keyword"},"pensando.dfw.protocol":{"category":"pensando","description":"Protocol of the flow ","name":"pensando.dfw.protocol","type":"keyword"},"pensando.dfw.rule_id":{"category":"pensando","description":"Rule ID that was matched. ","name":"pensando.dfw.rule_id","type":"keyword"},"pensando.dfw.session_id":{"category":"pensando","description":"Session ID of the flow ","name":"pensando.dfw.session_id","type":"integer"},"pensando.dfw.session_state":{"category":"pensando","description":"Session state of the flow. ","name":"pensando.dfw.session_state","type":"keyword"},"pensando.dfw.source_address":{"category":"pensando","description":"Source address of the flow. ","name":"pensando.dfw.source_address","type":"keyword"},"pensando.dfw.source_port":{"category":"pensando","description":"Source port of the flow. ","name":"pensando.dfw.source_port","type":"integer"},"pensando.dfw.timestamp":{"category":"pensando","description":"Timestamp of the log. ","name":"pensando.dfw.timestamp","type":"date"},"postgresql.log.timestamp":{"category":"postgresql","description":"The timestamp from the log line. ","name":"postgresql.log.timestamp"},"postgresql.log.core_id":{"category":"postgresql","description":"Core id. (deprecated, there is no core_id in PostgreSQL logs, this is actually session_line_number). ","name":"postgresql.log.core_id","type":"alias"},"postgresql.log.client_addr":{"category":"postgresql","description":"Host where the connection originated from. ","example":"127.0.0.1","name":"postgresql.log.client_addr"},"postgresql.log.client_port":{"category":"postgresql","description":"Port where the connection originated from. ","example":"59700","name":"postgresql.log.client_port"},"postgresql.log.session_id":{"category":"postgresql","description":"PostgreSQL session. ","example":"5ff1dd98.22","name":"postgresql.log.session_id"},"postgresql.log.session_line_number":{"category":"postgresql","description":"Line number inside a session. (%l in `log_line_prefix`). ","name":"postgresql.log.session_line_number","type":"long"},"postgresql.log.database":{"category":"postgresql","description":"Name of database. ","example":"postgres","name":"postgresql.log.database"},"postgresql.log.query":{"category":"postgresql","description":"Query statement. In the case of CSV parse, look at command_tag to get more context. ","example":"SELECT * FROM users;","name":"postgresql.log.query"},"postgresql.log.query_step":{"category":"postgresql","description":"Statement step when using extended query protocol (one of statement, parse, bind or execute). ","example":"parse","name":"postgresql.log.query_step"},"postgresql.log.query_name":{"category":"postgresql","description":"Name given to a query when using extended query protocol. If it is \"\", or not present, this field is ignored. ","example":"pdo_stmt_00000001","name":"postgresql.log.query_name"},"postgresql.log.command_tag":{"category":"postgresql","description":"Type of session's current command. The complete list can be found at: src/include/tcop/cmdtaglist.h ","example":"SELECT","name":"postgresql.log.command_tag"},"postgresql.log.session_start_time":{"category":"postgresql","description":"Time when this session started. ","name":"postgresql.log.session_start_time","type":"date"},"postgresql.log.virtual_transaction_id":{"category":"postgresql","description":"Backend local transaction id. ","name":"postgresql.log.virtual_transaction_id"},"postgresql.log.transaction_id":{"category":"postgresql","description":"The id of current transaction. ","name":"postgresql.log.transaction_id","type":"long"},"postgresql.log.sql_state_code":{"category":"postgresql","description":"State code returned by Postgres (if any). See also https://www.postgresql.org/docs/current/errcodes-appendix.html ","name":"postgresql.log.sql_state_code","type":"keyword"},"postgresql.log.detail":{"category":"postgresql","description":"More information about the message, parameters in case of a parametrized query. e.g. 'Role \\\"user\\\" does not exist.', 'parameters: $1 = 42', etc. ","name":"postgresql.log.detail"},"postgresql.log.hint":{"category":"postgresql","description":"A possible solution to solve an error. ","name":"postgresql.log.hint"},"postgresql.log.internal_query":{"category":"postgresql","description":"Internal query that led to the error (if any). ","name":"postgresql.log.internal_query"},"postgresql.log.internal_query_pos":{"category":"postgresql","description":"Character count of the internal query (if any). ","name":"postgresql.log.internal_query_pos","type":"long"},"postgresql.log.context":{"category":"postgresql","description":"Error context. ","name":"postgresql.log.context"},"postgresql.log.query_pos":{"category":"postgresql","description":"Character count of the error position (if any). ","name":"postgresql.log.query_pos","type":"long"},"postgresql.log.location":{"category":"postgresql","description":"Location of the error in the PostgreSQL source code (if log_error_verbosity is set to verbose). ","name":"postgresql.log.location"},"postgresql.log.application_name":{"category":"postgresql","description":"Name of the application of this event. It is defined by the client. ","name":"postgresql.log.application_name"},"postgresql.log.backend_type":{"category":"postgresql","description":"Type of backend of this event. Possible types are autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender and walwriter. In addition, background workers registered by extensions may have additional types. ","example":"client backend","name":"postgresql.log.backend_type"},"postgresql.log.error.code":{"category":"postgresql","description":"Error code returned by Postgres (if any). Deprecated: errors can have letters. Use sql_state_code instead. ","name":"postgresql.log.error.code","type":"alias"},"postgresql.log.timezone":{"category":"postgresql","name":"postgresql.log.timezone","type":"alias"},"postgresql.log.user":{"category":"postgresql","name":"postgresql.log.user","type":"alias"},"postgresql.log.level":{"category":"postgresql","description":"Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. ","example":"LOG","name":"postgresql.log.level","type":"alias"},"postgresql.log.message":{"category":"postgresql","name":"postgresql.log.message","type":"alias"},"redis.log.role":{"category":"redis","description":"The role of the Redis instance. Can be one of `master`, `slave`, `child` (for RDF/AOF writing child), or `sentinel`. ","name":"redis.log.role","type":"keyword"},"redis.log.pid":{"category":"redis","name":"redis.log.pid","type":"alias"},"redis.log.level":{"category":"redis","name":"redis.log.level","type":"alias"},"redis.log.message":{"category":"redis","name":"redis.log.message","type":"alias"},"redis.slowlog.cmd":{"category":"redis","description":"The command executed. ","name":"redis.slowlog.cmd","type":"keyword"},"redis.slowlog.duration.us":{"category":"redis","description":"How long it took to execute the command in microseconds. ","name":"redis.slowlog.duration.us","type":"long"},"redis.slowlog.id":{"category":"redis","description":"The ID of the query. ","name":"redis.slowlog.id","type":"long"},"redis.slowlog.key":{"category":"redis","description":"The key on which the command was executed. ","name":"redis.slowlog.key","type":"keyword"},"redis.slowlog.args":{"category":"redis","description":"The arguments with which the command was called. ","name":"redis.slowlog.args","type":"keyword"},"santa.action":{"category":"santa","description":"Action","example":"EXEC","name":"santa.action","type":"keyword"},"santa.decision":{"category":"santa","description":"Decision that santad took.","example":"ALLOW","name":"santa.decision","type":"keyword"},"santa.reason":{"category":"santa","description":"Reason for the decsision.","example":"CERT","name":"santa.reason","type":"keyword"},"santa.mode":{"category":"santa","description":"Operating mode of Santa.","example":"M","name":"santa.mode","type":"keyword"},"santa.disk.volume":{"category":"santa","description":"The volume name.","name":"santa.disk.volume"},"santa.disk.bus":{"category":"santa","description":"The disk bus protocol.","name":"santa.disk.bus"},"santa.disk.serial":{"category":"santa","description":"The disk serial number.","name":"santa.disk.serial"},"santa.disk.bsdname":{"category":"santa","description":"The disk BSD name.","example":"disk1s3","name":"santa.disk.bsdname"},"santa.disk.model":{"category":"santa","description":"The disk model.","example":"APPLE SSD SM0512L","name":"santa.disk.model"},"santa.disk.fs":{"category":"santa","description":"The disk volume kind (filesystem type).","example":"apfs","name":"santa.disk.fs"},"santa.disk.mount":{"category":"santa","description":"The disk volume path.","name":"santa.disk.mount"},"santa.certificate.common_name":{"category":"santa","description":"Common name from code signing certificate.","name":"santa.certificate.common_name","type":"keyword"},"santa.certificate.sha256":{"category":"santa","description":"SHA256 hash of code signing certificate.","name":"santa.certificate.sha256","type":"keyword"},"system.auth.timestamp":{"category":"system","name":"system.auth.timestamp","type":"alias"},"system.auth.hostname":{"category":"system","name":"system.auth.hostname","type":"alias"},"system.auth.program":{"category":"system","name":"system.auth.program","type":"alias"},"system.auth.pid":{"category":"system","name":"system.auth.pid","type":"alias"},"system.auth.message":{"category":"system","name":"system.auth.message","type":"alias"},"system.auth.user":{"category":"system","name":"system.auth.user","type":"alias"},"system.auth.ssh.method":{"category":"system","description":"The SSH authentication method. Can be one of \"password\" or \"publickey\". ","name":"system.auth.ssh.method"},"system.auth.ssh.signature":{"category":"system","description":"The signature of the client public key. ","name":"system.auth.ssh.signature"},"system.auth.ssh.dropped_ip":{"category":"system","description":"The client IP from SSH connections that are open and immediately dropped. ","name":"system.auth.ssh.dropped_ip","type":"ip"},"system.auth.ssh.event":{"category":"system","description":"The SSH event as found in the logs (Accepted, Invalid, Failed, etc.) ","example":"Accepted","name":"system.auth.ssh.event"},"system.auth.ssh.ip":{"category":"system","name":"system.auth.ssh.ip","type":"alias"},"system.auth.ssh.port":{"category":"system","name":"system.auth.ssh.port","type":"alias"},"system.auth.ssh.geoip.continent_name":{"category":"system","name":"system.auth.ssh.geoip.continent_name","type":"alias"},"system.auth.ssh.geoip.country_iso_code":{"category":"system","name":"system.auth.ssh.geoip.country_iso_code","type":"alias"},"system.auth.ssh.geoip.location":{"category":"system","name":"system.auth.ssh.geoip.location","type":"alias"},"system.auth.ssh.geoip.region_name":{"category":"system","name":"system.auth.ssh.geoip.region_name","type":"alias"},"system.auth.ssh.geoip.city_name":{"category":"system","name":"system.auth.ssh.geoip.city_name","type":"alias"},"system.auth.ssh.geoip.region_iso_code":{"category":"system","name":"system.auth.ssh.geoip.region_iso_code","type":"alias"},"system.auth.sudo.error":{"category":"system","description":"The error message in case the sudo command failed. ","example":"user NOT in sudoers","name":"system.auth.sudo.error"},"system.auth.sudo.tty":{"category":"system","description":"The TTY where the sudo command is executed. ","name":"system.auth.sudo.tty"},"system.auth.sudo.pwd":{"category":"system","description":"The current directory where the sudo command is executed. ","name":"system.auth.sudo.pwd"},"system.auth.sudo.user":{"category":"system","description":"The target user to which the sudo command is switching. ","example":"root","name":"system.auth.sudo.user"},"system.auth.sudo.command":{"category":"system","description":"The command executed via sudo. ","name":"system.auth.sudo.command"},"system.auth.useradd.home":{"category":"system","description":"The home folder for the new user.","name":"system.auth.useradd.home"},"system.auth.useradd.shell":{"category":"system","description":"The default shell for the new user.","name":"system.auth.useradd.shell"},"system.auth.useradd.name":{"category":"system","name":"system.auth.useradd.name","type":"alias"},"system.auth.useradd.uid":{"category":"system","name":"system.auth.useradd.uid","type":"alias"},"system.auth.useradd.gid":{"category":"system","name":"system.auth.useradd.gid","type":"alias"},"system.auth.groupadd.name":{"category":"system","name":"system.auth.groupadd.name","type":"alias"},"system.auth.groupadd.gid":{"category":"system","name":"system.auth.groupadd.gid","type":"alias"},"system.syslog.timestamp":{"category":"system","name":"system.syslog.timestamp","type":"alias"},"system.syslog.hostname":{"category":"system","name":"system.syslog.hostname","type":"alias"},"system.syslog.program":{"category":"system","name":"system.syslog.program","type":"alias"},"system.syslog.pid":{"category":"system","name":"system.syslog.pid","type":"alias"},"system.syslog.message":{"category":"system","name":"system.syslog.message","type":"alias"},"traefik.access.user_identifier":{"category":"traefik","description":"Is the RFC 1413 identity of the client ","name":"traefik.access.user_identifier","type":"keyword"},"traefik.access.request_count":{"category":"traefik","description":"The number of requests ","name":"traefik.access.request_count","type":"long"},"traefik.access.frontend_name":{"category":"traefik","description":"The name of the frontend used ","name":"traefik.access.frontend_name","type":"keyword"},"traefik.access.backend_url":{"category":"traefik","description":"The url of the backend where request is forwarded","name":"traefik.access.backend_url","type":"keyword"},"traefik.access.body_sent.bytes":{"category":"traefik","name":"traefik.access.body_sent.bytes","type":"alias"},"traefik.access.remote_ip":{"category":"traefik","name":"traefik.access.remote_ip","type":"alias"},"traefik.access.user_name":{"category":"traefik","name":"traefik.access.user_name","type":"alias"},"traefik.access.method":{"category":"traefik","name":"traefik.access.method","type":"alias"},"traefik.access.url":{"category":"traefik","name":"traefik.access.url","type":"alias"},"traefik.access.http_version":{"category":"traefik","name":"traefik.access.http_version","type":"alias"},"traefik.access.response_code":{"category":"traefik","name":"traefik.access.response_code","type":"alias"},"traefik.access.referrer":{"category":"traefik","name":"traefik.access.referrer","type":"alias"},"traefik.access.agent":{"category":"traefik","name":"traefik.access.agent","type":"alias"},"traefik.access.user_agent.name":{"category":"traefik","name":"traefik.access.user_agent.name","type":"alias"},"traefik.access.user_agent.os":{"category":"traefik","name":"traefik.access.user_agent.os","type":"alias"},"traefik.access.user_agent.os_name":{"category":"traefik","name":"traefik.access.user_agent.os_name","type":"alias"},"traefik.access.user_agent.original":{"category":"traefik","name":"traefik.access.user_agent.original","type":"alias"},"traefik.access.geoip.continent_name":{"category":"traefik","name":"traefik.access.geoip.continent_name","type":"alias"},"traefik.access.geoip.country_iso_code":{"category":"traefik","name":"traefik.access.geoip.country_iso_code","type":"alias"},"traefik.access.geoip.location":{"category":"traefik","name":"traefik.access.geoip.location","type":"alias"},"traefik.access.geoip.region_name":{"category":"traefik","name":"traefik.access.geoip.region_name","type":"alias"},"traefik.access.geoip.city_name":{"category":"traefik","name":"traefik.access.geoip.city_name","type":"alias"},"traefik.access.geoip.region_iso_code":{"category":"traefik","name":"traefik.access.geoip.region_iso_code","type":"alias"},"activemq.caller":{"category":"activemq","description":"Name of the caller issuing the logging request (class or resource). ","name":"activemq.caller","type":"keyword"},"activemq.thread":{"category":"activemq","description":"Thread that generated the logging event. ","name":"activemq.thread","type":"keyword"},"activemq.user":{"category":"activemq","description":"User that generated the logging event. ","name":"activemq.user","type":"keyword"},"activemq.audit":{"category":"activemq","description":"Fields from ActiveMQ audit logs. ","name":"activemq.audit","type":"group"},"activemq.log.stack_trace":{"category":"activemq","name":"activemq.log.stack_trace","type":"keyword"},"aws.cloudtrail.event_version":{"category":"aws","description":"The CloudTrail version of the log event format. ","name":"aws.cloudtrail.event_version","type":"keyword"},"aws.cloudtrail.user_identity.type":{"category":"aws","description":"The type of the identity ","name":"aws.cloudtrail.user_identity.type","type":"keyword"},"aws.cloudtrail.user_identity.arn":{"category":"aws","description":"The Amazon Resource Name (ARN) of the principal that made the call.","name":"aws.cloudtrail.user_identity.arn","type":"keyword"},"aws.cloudtrail.user_identity.access_key_id":{"category":"aws","description":"The access key ID that was used to sign the request.","name":"aws.cloudtrail.user_identity.access_key_id","type":"keyword"},"aws.cloudtrail.user_identity.session_context.mfa_authenticated":{"category":"aws","description":"The value is true if the root user or IAM user whose credentials were used for the request also was authenticated with an MFA device; otherwise, false.","name":"aws.cloudtrail.user_identity.session_context.mfa_authenticated","type":"keyword"},"aws.cloudtrail.user_identity.session_context.creation_date":{"category":"aws","description":"The date and time when the temporary security credentials were issued.","name":"aws.cloudtrail.user_identity.session_context.creation_date","type":"date"},"aws.cloudtrail.user_identity.session_context.session_issuer.type":{"category":"aws","description":"The source of the temporary security credentials, such as Root, IAMUser, or Role.","name":"aws.cloudtrail.user_identity.session_context.session_issuer.type","type":"keyword"},"aws.cloudtrail.user_identity.session_context.session_issuer.principal_id":{"category":"aws","description":"The internal ID of the entity that was used to get credentials.","name":"aws.cloudtrail.user_identity.session_context.session_issuer.principal_id","type":"keyword"},"aws.cloudtrail.user_identity.session_context.session_issuer.arn":{"category":"aws","description":"The ARN of the source (account, IAM user, or role) that was used to get temporary security credentials.","name":"aws.cloudtrail.user_identity.session_context.session_issuer.arn","type":"keyword"},"aws.cloudtrail.user_identity.session_context.session_issuer.account_id":{"category":"aws","description":"The account that owns the entity that was used to get credentials.","name":"aws.cloudtrail.user_identity.session_context.session_issuer.account_id","type":"keyword"},"aws.cloudtrail.user_identity.invoked_by":{"category":"aws","description":"The name of the AWS service that made the request, such as Amazon EC2 Auto Scaling or AWS Elastic Beanstalk.","name":"aws.cloudtrail.user_identity.invoked_by","type":"keyword"},"aws.cloudtrail.error_code":{"category":"aws","description":"The AWS service error if the request returns an error.","name":"aws.cloudtrail.error_code","type":"keyword"},"aws.cloudtrail.error_message":{"category":"aws","description":"If the request returns an error, the description of the error.","name":"aws.cloudtrail.error_message","type":"keyword"},"aws.cloudtrail.request_parameters":{"category":"aws","description":"The parameters, if any, that were sent with the request.","name":"aws.cloudtrail.request_parameters","type":"keyword"},"aws.cloudtrail.response_elements":{"category":"aws","description":"The response element for actions that make changes (create, update, or delete actions).","name":"aws.cloudtrail.response_elements","type":"keyword"},"aws.cloudtrail.additional_eventdata":{"category":"aws","description":"Additional data about the event that was not part of the request or response.","name":"aws.cloudtrail.additional_eventdata","type":"keyword"},"aws.cloudtrail.request_id":{"category":"aws","description":"The value that identifies the request. The service being called generates this value.","name":"aws.cloudtrail.request_id","type":"keyword"},"aws.cloudtrail.event_type":{"category":"aws","description":"Identifies the type of event that generated the event record.","name":"aws.cloudtrail.event_type","type":"keyword"},"aws.cloudtrail.api_version":{"category":"aws","description":"Identifies the API version associated with the AwsApiCall eventType value.","name":"aws.cloudtrail.api_version","type":"keyword"},"aws.cloudtrail.management_event":{"category":"aws","description":"A Boolean value that identifies whether the event is a management event.","name":"aws.cloudtrail.management_event","type":"keyword"},"aws.cloudtrail.read_only":{"category":"aws","description":"Identifies whether this operation is a read-only operation.","name":"aws.cloudtrail.read_only","type":"keyword"},"aws.cloudtrail.resources.arn":{"category":"aws","description":"Resource ARNs","name":"aws.cloudtrail.resources.arn","type":"keyword"},"aws.cloudtrail.resources.account_id":{"category":"aws","description":"Account ID of the resource owner","name":"aws.cloudtrail.resources.account_id","type":"keyword"},"aws.cloudtrail.resources.type":{"category":"aws","description":"Resource type identifier in the format: AWS::aws-service-name::data-type-name","name":"aws.cloudtrail.resources.type","type":"keyword"},"aws.cloudtrail.recipient_account_id":{"category":"aws","description":"Represents the account ID that received this event.","name":"aws.cloudtrail.recipient_account_id","type":"keyword"},"aws.cloudtrail.service_event_details":{"category":"aws","description":"Identifies the service event, including what triggered the event and the result.","name":"aws.cloudtrail.service_event_details","type":"keyword"},"aws.cloudtrail.shared_event_id":{"category":"aws","description":"GUID generated by CloudTrail to uniquely identify CloudTrail events from the same AWS action that is sent to different AWS accounts.","name":"aws.cloudtrail.shared_event_id","type":"keyword"},"aws.cloudtrail.vpc_endpoint_id":{"category":"aws","description":"Identifies the VPC endpoint in which requests were made from a VPC to another AWS service, such as Amazon S3.","name":"aws.cloudtrail.vpc_endpoint_id","type":"keyword"},"aws.cloudtrail.event_category":{"category":"aws","description":"Shows the event category that is used in LookupEvents calls. - For management events, the value is management. - For data events, the value is data. - For Insights events, the value is insight.","name":"aws.cloudtrail.event_category","type":"keyword"},"aws.cloudtrail.console_login.additional_eventdata.mobile_version":{"category":"aws","description":"Identifies whether ConsoleLogin was from mobile version","name":"aws.cloudtrail.console_login.additional_eventdata.mobile_version","type":"boolean"},"aws.cloudtrail.console_login.additional_eventdata.login_to":{"category":"aws","description":"URL for ConsoleLogin","name":"aws.cloudtrail.console_login.additional_eventdata.login_to","type":"keyword"},"aws.cloudtrail.console_login.additional_eventdata.mfa_used":{"category":"aws","description":"Identifies whether multi factor authentication was used during ConsoleLogin","name":"aws.cloudtrail.console_login.additional_eventdata.mfa_used","type":"boolean"},"aws.cloudtrail.flattened.additional_eventdata":{"category":"aws","description":"Additional data about the event that was not part of the request or response. ","name":"aws.cloudtrail.flattened.additional_eventdata","type":"flattened"},"aws.cloudtrail.flattened.request_parameters":{"category":"aws","description":"The parameters, if any, that were sent with the request.","name":"aws.cloudtrail.flattened.request_parameters","type":"flattened"},"aws.cloudtrail.flattened.response_elements":{"category":"aws","description":"The response element for actions that make changes (create, update, or delete actions).","name":"aws.cloudtrail.flattened.response_elements","type":"flattened"},"aws.cloudtrail.flattened.service_event_details":{"category":"aws","description":"Identifies the service event, including what triggered the event and the result.","name":"aws.cloudtrail.flattened.service_event_details","type":"flattened"},"aws.cloudtrail.digest.log_files":{"category":"aws","description":"A list of Logfiles contained in the digest.","name":"aws.cloudtrail.digest.log_files","type":"nested"},"aws.cloudtrail.digest.start_time":{"category":"aws","description":"The starting UTC time range that the digest file covers, taking as a reference the time in which log files have been delivered by CloudTrail.","name":"aws.cloudtrail.digest.start_time","type":"date"},"aws.cloudtrail.digest.end_time":{"category":"aws","description":"The ending UTC time range that the digest file covers, taking as a reference the time in which log files have been delivered by CloudTrail.","name":"aws.cloudtrail.digest.end_time","type":"date"},"aws.cloudtrail.digest.s3_bucket":{"category":"aws","description":"The name of the Amazon S3 bucket to which the current digest file has been delivered.","name":"aws.cloudtrail.digest.s3_bucket","type":"keyword"},"aws.cloudtrail.digest.s3_object":{"category":"aws","description":"The Amazon S3 object key (that is, the Amazon S3 bucket location) of the current digest file.","name":"aws.cloudtrail.digest.s3_object","type":"keyword"},"aws.cloudtrail.digest.newest_event_time":{"category":"aws","description":"The UTC time of the most recent event among all of the events in the log files in the digest.","name":"aws.cloudtrail.digest.newest_event_time","type":"date"},"aws.cloudtrail.digest.oldest_event_time":{"category":"aws","description":"The UTC time of the oldest event among all of the events in the log files in the digest.","name":"aws.cloudtrail.digest.oldest_event_time","type":"date"},"aws.cloudtrail.digest.previous_s3_bucket":{"category":"aws","description":"The Amazon S3 bucket to which the previous digest file was delivered.","name":"aws.cloudtrail.digest.previous_s3_bucket","type":"keyword"},"aws.cloudtrail.digest.previous_hash_algorithm":{"category":"aws","description":"The name of the hash algorithm that was used to hash the previous digest file.","name":"aws.cloudtrail.digest.previous_hash_algorithm","type":"keyword"},"aws.cloudtrail.digest.public_key_fingerprint":{"category":"aws","description":"The hexadecimal encoded fingerprint of the public key that matches the private key used to sign this digest file.","name":"aws.cloudtrail.digest.public_key_fingerprint","type":"keyword"},"aws.cloudtrail.digest.signature_algorithm":{"category":"aws","description":"The algorithm used to sign the digest file.","name":"aws.cloudtrail.digest.signature_algorithm","type":"keyword"},"aws.cloudtrail.insight_details":{"category":"aws","description":"Shows information about the underlying triggers of an Insights event, such as event source, user agent, statistics, API name, and whether the event is the start or end of the Insights event.","name":"aws.cloudtrail.insight_details","type":"flattened"},"aws.cloudwatch.message":{"category":"aws","description":"CloudWatch log message. ","name":"aws.cloudwatch.message","type":"text"},"aws.ec2.ip_address":{"category":"aws","description":"The internet address of the requester. ","name":"aws.ec2.ip_address","type":"keyword"},"aws.elb.name":{"category":"aws","description":"The name of the load balancer. ","name":"aws.elb.name","type":"keyword"},"aws.elb.type":{"category":"aws","description":"The type of the load balancer for v2 Load Balancers. ","name":"aws.elb.type","type":"keyword"},"aws.elb.target_group.arn":{"category":"aws","description":"The ARN of the target group handling the request. ","name":"aws.elb.target_group.arn","type":"keyword"},"aws.elb.listener":{"category":"aws","description":"The ELB listener that received the connection. ","name":"aws.elb.listener","type":"keyword"},"aws.elb.protocol":{"category":"aws","description":"The protocol of the load balancer (http or tcp). ","name":"aws.elb.protocol","type":"keyword"},"aws.elb.request_processing_time.sec":{"category":"aws","description":"The total time in seconds since the connection or request is received until it is sent to a registered backend. ","name":"aws.elb.request_processing_time.sec","type":"float"},"aws.elb.backend_processing_time.sec":{"category":"aws","description":"The total time in seconds since the connection is sent to the backend till the backend starts responding. ","name":"aws.elb.backend_processing_time.sec","type":"float"},"aws.elb.response_processing_time.sec":{"category":"aws","description":"The total time in seconds since the response is received from the backend till it is sent to the client. ","name":"aws.elb.response_processing_time.sec","type":"float"},"aws.elb.connection_time.ms":{"category":"aws","description":"The total time of the connection in milliseconds, since it is opened till it is closed. ","name":"aws.elb.connection_time.ms","type":"long"},"aws.elb.tls_handshake_time.ms":{"category":"aws","description":"The total time for the TLS handshake to complete in milliseconds once the connection has been established. ","name":"aws.elb.tls_handshake_time.ms","type":"long"},"aws.elb.backend.ip":{"category":"aws","description":"The IP address of the backend processing this connection. ","name":"aws.elb.backend.ip","type":"keyword"},"aws.elb.backend.port":{"category":"aws","description":"The port in the backend processing this connection. ","name":"aws.elb.backend.port","type":"keyword"},"aws.elb.backend.http.response.status_code":{"category":"aws","description":"The status code from the backend (status code sent to the client from ELB is stored in `http.response.status_code` ","name":"aws.elb.backend.http.response.status_code","type":"keyword"},"aws.elb.ssl_cipher":{"category":"aws","description":"The SSL cipher used in TLS/SSL connections. ","name":"aws.elb.ssl_cipher","type":"keyword"},"aws.elb.ssl_protocol":{"category":"aws","description":"The SSL protocol used in TLS/SSL connections. ","name":"aws.elb.ssl_protocol","type":"keyword"},"aws.elb.chosen_cert.arn":{"category":"aws","description":"The ARN of the chosen certificate presented to the client in TLS/SSL connections. ","name":"aws.elb.chosen_cert.arn","type":"keyword"},"aws.elb.chosen_cert.serial":{"category":"aws","description":"The serial number of the chosen certificate presented to the client in TLS/SSL connections. ","name":"aws.elb.chosen_cert.serial","type":"keyword"},"aws.elb.incoming_tls_alert":{"category":"aws","description":"The integer value of TLS alerts received by the load balancer from the client, if present. ","name":"aws.elb.incoming_tls_alert","type":"keyword"},"aws.elb.tls_named_group":{"category":"aws","description":"The TLS named group. ","name":"aws.elb.tls_named_group","type":"keyword"},"aws.elb.trace_id":{"category":"aws","description":"The contents of the `X-Amzn-Trace-Id` header. ","name":"aws.elb.trace_id","type":"keyword"},"aws.elb.matched_rule_priority":{"category":"aws","description":"The priority value of the rule that matched the request, if a rule matched. ","name":"aws.elb.matched_rule_priority","type":"keyword"},"aws.elb.action_executed":{"category":"aws","description":"The action executed when processing the request (forward, fixed-response, authenticate...). It can contain several values. ","name":"aws.elb.action_executed","type":"keyword"},"aws.elb.redirect_url":{"category":"aws","description":"The URL used if a redirection action was executed. ","name":"aws.elb.redirect_url","type":"keyword"},"aws.elb.error.reason":{"category":"aws","description":"The error reason if the executed action failed. ","name":"aws.elb.error.reason","type":"keyword"},"aws.elb.target_port":{"category":"aws","description":"List of IP addresses and ports for the targets that processed this request. ","name":"aws.elb.target_port","type":"keyword"},"aws.elb.target_status_code":{"category":"aws","description":"List of status codes from the responses of the targets. ","name":"aws.elb.target_status_code","type":"keyword"},"aws.elb.classification":{"category":"aws","description":"The classification for desync mitigation. ","name":"aws.elb.classification","type":"keyword"},"aws.elb.classification_reason":{"category":"aws","description":"The classification reason code. ","name":"aws.elb.classification_reason","type":"keyword"},"aws.s3access.bucket_owner":{"category":"aws","description":"The canonical user ID of the owner of the source bucket. ","name":"aws.s3access.bucket_owner","type":"keyword"},"aws.s3access.bucket":{"category":"aws","description":"The name of the bucket that the request was processed against. ","name":"aws.s3access.bucket","type":"keyword"},"aws.s3access.remote_ip":{"category":"aws","description":"The apparent internet address of the requester. ","name":"aws.s3access.remote_ip","type":"ip"},"aws.s3access.requester":{"category":"aws","description":"The canonical user ID of the requester, or a - for unauthenticated requests. ","name":"aws.s3access.requester","type":"keyword"},"aws.s3access.request_id":{"category":"aws","description":"A string generated by Amazon S3 to uniquely identify each request. ","name":"aws.s3access.request_id","type":"keyword"},"aws.s3access.operation":{"category":"aws","description":"The operation listed here is declared as SOAP.operation, REST.HTTP_method.resource_type, WEBSITE.HTTP_method.resource_type, or BATCH.DELETE.OBJECT. ","name":"aws.s3access.operation","type":"keyword"},"aws.s3access.key":{"category":"aws","description":"The \"key\" part of the request, URL encoded, or \"-\" if the operation does not take a key parameter. ","name":"aws.s3access.key","type":"keyword"},"aws.s3access.request_uri":{"category":"aws","description":"The Request-URI part of the HTTP request message. ","name":"aws.s3access.request_uri","type":"keyword"},"aws.s3access.http_status":{"category":"aws","description":"The numeric HTTP status code of the response. ","name":"aws.s3access.http_status","type":"long"},"aws.s3access.error_code":{"category":"aws","description":"The Amazon S3 Error Code, or \"-\" if no error occurred. ","name":"aws.s3access.error_code","type":"keyword"},"aws.s3access.bytes_sent":{"category":"aws","description":"The number of response bytes sent, excluding HTTP protocol overhead, or \"-\" if zero. ","name":"aws.s3access.bytes_sent","type":"long"},"aws.s3access.object_size":{"category":"aws","description":"The total size of the object in question. ","name":"aws.s3access.object_size","type":"long"},"aws.s3access.total_time":{"category":"aws","description":"The number of milliseconds the request was in flight from the server's perspective. ","name":"aws.s3access.total_time","type":"long"},"aws.s3access.turn_around_time":{"category":"aws","description":"The number of milliseconds that Amazon S3 spent processing your request. ","name":"aws.s3access.turn_around_time","type":"long"},"aws.s3access.referrer":{"category":"aws","description":"The value of the HTTP Referrer header, if present. ","name":"aws.s3access.referrer","type":"keyword"},"aws.s3access.user_agent":{"category":"aws","description":"The value of the HTTP User-Agent header. ","name":"aws.s3access.user_agent","type":"keyword"},"aws.s3access.version_id":{"category":"aws","description":"The version ID in the request, or \"-\" if the operation does not take a versionId parameter. ","name":"aws.s3access.version_id","type":"keyword"},"aws.s3access.host_id":{"category":"aws","description":"The x-amz-id-2 or Amazon S3 extended request ID. ","name":"aws.s3access.host_id","type":"keyword"},"aws.s3access.signature_version":{"category":"aws","description":"The signature version, SigV2 or SigV4, that was used to authenticate the request or a - for unauthenticated requests. ","name":"aws.s3access.signature_version","type":"keyword"},"aws.s3access.cipher_suite":{"category":"aws","description":"The Secure Sockets Layer (SSL) cipher that was negotiated for HTTPS request or a - for HTTP. ","name":"aws.s3access.cipher_suite","type":"keyword"},"aws.s3access.authentication_type":{"category":"aws","description":"The type of request authentication used, AuthHeader for authentication headers, QueryString for query string (pre-signed URL) or a - for unauthenticated requests. ","name":"aws.s3access.authentication_type","type":"keyword"},"aws.s3access.host_header":{"category":"aws","description":"The endpoint used to connect to Amazon S3. ","name":"aws.s3access.host_header","type":"keyword"},"aws.s3access.tls_version":{"category":"aws","description":"The Transport Layer Security (TLS) version negotiated by the client. ","name":"aws.s3access.tls_version","type":"keyword"},"aws.vpcflow.version":{"category":"aws","description":"The VPC Flow Logs version. If you use the default format, the version is 2. If you specify a custom format, the version is 3. ","name":"aws.vpcflow.version","type":"keyword"},"aws.vpcflow.account_id":{"category":"aws","description":"The AWS account ID for the flow log. ","name":"aws.vpcflow.account_id","type":"keyword"},"aws.vpcflow.interface_id":{"category":"aws","description":"The ID of the network interface for which the traffic is recorded. ","name":"aws.vpcflow.interface_id","type":"keyword"},"aws.vpcflow.action":{"category":"aws","description":"The action that is associated with the traffic, ACCEPT or REJECT. ","name":"aws.vpcflow.action","type":"keyword"},"aws.vpcflow.log_status":{"category":"aws","description":"The logging status of the flow log, OK, NODATA or SKIPDATA. ","name":"aws.vpcflow.log_status","type":"keyword"},"aws.vpcflow.instance_id":{"category":"aws","description":"The ID of the instance that's associated with network interface for which the traffic is recorded, if the instance is owned by you. ","name":"aws.vpcflow.instance_id","type":"keyword"},"aws.vpcflow.pkt_srcaddr":{"category":"aws","description":"The packet-level (original) source IP address of the traffic. ","name":"aws.vpcflow.pkt_srcaddr","type":"ip"},"aws.vpcflow.pkt_dstaddr":{"category":"aws","description":"The packet-level (original) destination IP address for the traffic. ","name":"aws.vpcflow.pkt_dstaddr","type":"ip"},"aws.vpcflow.vpc_id":{"category":"aws","description":"The ID of the VPC that contains the network interface for which the traffic is recorded. ","name":"aws.vpcflow.vpc_id","type":"keyword"},"aws.vpcflow.subnet_id":{"category":"aws","description":"The ID of the subnet that contains the network interface for which the traffic is recorded. ","name":"aws.vpcflow.subnet_id","type":"keyword"},"aws.vpcflow.tcp_flags":{"category":"aws","description":"The bitmask value for the following TCP flags: 2=SYN,18=SYN-ACK,1=FIN,4=RST ","name":"aws.vpcflow.tcp_flags","type":"keyword"},"aws.vpcflow.tcp_flags_array":{"category":"aws","description":"List of TCP flags: 'fin, syn, rst, psh, ack, urg' ","name":"aws.vpcflow.tcp_flags_array","type":"keyword"},"aws.vpcflow.type":{"category":"aws","description":"The type of traffic: IPv4, IPv6, or EFA. ","name":"aws.vpcflow.type","type":"keyword"},"awsfargate.log":{"category":"awsfargate","description":"Fields for Amazon Fargate container logs. ","name":"awsfargate.log","type":"group"},"azure.subscription_id":{"category":"azure","description":"Azure subscription ID ","name":"azure.subscription_id","type":"keyword"},"azure.correlation_id":{"category":"azure","description":"Correlation ID ","name":"azure.correlation_id","type":"keyword"},"azure.tenant_id":{"category":"azure","description":"tenant ID ","name":"azure.tenant_id","type":"keyword"},"azure.resource.id":{"category":"azure","description":"Resource ID ","name":"azure.resource.id","type":"keyword"},"azure.resource.group":{"category":"azure","description":"Resource group ","name":"azure.resource.group","type":"keyword"},"azure.resource.provider":{"category":"azure","description":"Resource type/namespace ","name":"azure.resource.provider","type":"keyword"},"azure.resource.namespace":{"category":"azure","description":"Resource type/namespace ","name":"azure.resource.namespace","type":"keyword"},"azure.resource.name":{"category":"azure","description":"Name ","name":"azure.resource.name","type":"keyword"},"azure.resource.authorization_rule":{"category":"azure","description":"Authorization rule ","name":"azure.resource.authorization_rule","type":"keyword"},"azure.activitylogs.identity.claims_initiated_by_user.name":{"category":"azure","description":"Name ","name":"azure.activitylogs.identity.claims_initiated_by_user.name","type":"keyword"},"azure.activitylogs.identity.claims_initiated_by_user.givenname":{"category":"azure","description":"Givenname ","name":"azure.activitylogs.identity.claims_initiated_by_user.givenname","type":"keyword"},"azure.activitylogs.identity.claims_initiated_by_user.surname":{"category":"azure","description":"Surname ","name":"azure.activitylogs.identity.claims_initiated_by_user.surname","type":"keyword"},"azure.activitylogs.identity.claims_initiated_by_user.fullname":{"category":"azure","description":"Fullname ","name":"azure.activitylogs.identity.claims_initiated_by_user.fullname","type":"keyword"},"azure.activitylogs.identity.claims_initiated_by_user.schema":{"category":"azure","description":"Schema ","name":"azure.activitylogs.identity.claims_initiated_by_user.schema","type":"keyword"},"azure.activitylogs.identity.claims.*":{"category":"azure","description":"Claims ","name":"azure.activitylogs.identity.claims.*","type":"object"},"azure.activitylogs.identity.authorization.scope":{"category":"azure","description":"Scope ","name":"azure.activitylogs.identity.authorization.scope","type":"keyword"},"azure.activitylogs.identity.authorization.action":{"category":"azure","description":"Action ","name":"azure.activitylogs.identity.authorization.action","type":"keyword"},"azure.activitylogs.identity.authorization.evidence.role_assignment_scope":{"category":"azure","description":"Role assignment scope ","name":"azure.activitylogs.identity.authorization.evidence.role_assignment_scope","type":"keyword"},"azure.activitylogs.identity.authorization.evidence.role_definition_id":{"category":"azure","description":"Role definition ID ","name":"azure.activitylogs.identity.authorization.evidence.role_definition_id","type":"keyword"},"azure.activitylogs.identity.authorization.evidence.role":{"category":"azure","description":"Role ","name":"azure.activitylogs.identity.authorization.evidence.role","type":"keyword"},"azure.activitylogs.identity.authorization.evidence.role_assignment_id":{"category":"azure","description":"Role assignment ID ","name":"azure.activitylogs.identity.authorization.evidence.role_assignment_id","type":"keyword"},"azure.activitylogs.identity.authorization.evidence.principal_id":{"category":"azure","description":"Principal ID ","name":"azure.activitylogs.identity.authorization.evidence.principal_id","type":"keyword"},"azure.activitylogs.identity.authorization.evidence.principal_type":{"category":"azure","description":"Principal type ","name":"azure.activitylogs.identity.authorization.evidence.principal_type","type":"keyword"},"azure.activitylogs.operation_name":{"category":"azure","description":"Operation name ","name":"azure.activitylogs.operation_name","type":"keyword"},"azure.activitylogs.result_type":{"category":"azure","description":"Result type ","name":"azure.activitylogs.result_type","type":"keyword"},"azure.activitylogs.result_signature":{"category":"azure","description":"Result signature ","name":"azure.activitylogs.result_signature","type":"keyword"},"azure.activitylogs.category":{"category":"azure","description":"Category ","name":"azure.activitylogs.category","type":"keyword"},"azure.activitylogs.event_category":{"category":"azure","description":"Event Category ","name":"azure.activitylogs.event_category","type":"keyword"},"azure.activitylogs.properties":{"category":"azure","description":"Properties ","name":"azure.activitylogs.properties","type":"flattened"},"azure.auditlogs.category":{"category":"azure","description":"The category of the operation. Currently, Audit is the only supported value. ","name":"azure.auditlogs.category","type":"keyword"},"azure.auditlogs.operation_name":{"category":"azure","description":"The operation name ","name":"azure.auditlogs.operation_name","type":"keyword"},"azure.auditlogs.operation_version":{"category":"azure","description":"The operation version ","name":"azure.auditlogs.operation_version","type":"keyword"},"azure.auditlogs.identity":{"category":"azure","description":"Identity ","name":"azure.auditlogs.identity","type":"keyword"},"azure.auditlogs.tenant_id":{"category":"azure","description":"Tenant ID ","name":"azure.auditlogs.tenant_id","type":"keyword"},"azure.auditlogs.result_signature":{"category":"azure","description":"Result signature ","name":"azure.auditlogs.result_signature","type":"keyword"},"azure.auditlogs.properties.result":{"category":"azure","description":"Log result ","name":"azure.auditlogs.properties.result","type":"keyword"},"azure.auditlogs.properties.activity_display_name":{"category":"azure","description":"Activity display name ","name":"azure.auditlogs.properties.activity_display_name","type":"keyword"},"azure.auditlogs.properties.result_reason":{"category":"azure","description":"Reason for the log result ","name":"azure.auditlogs.properties.result_reason","type":"keyword"},"azure.auditlogs.properties.correlation_id":{"category":"azure","description":"Correlation ID ","name":"azure.auditlogs.properties.correlation_id","type":"keyword"},"azure.auditlogs.properties.logged_by_service":{"category":"azure","description":"Logged by service ","name":"azure.auditlogs.properties.logged_by_service","type":"keyword"},"azure.auditlogs.properties.operation_type":{"category":"azure","description":"Operation type ","name":"azure.auditlogs.properties.operation_type","type":"keyword"},"azure.auditlogs.properties.id":{"category":"azure","description":"ID ","name":"azure.auditlogs.properties.id","type":"keyword"},"azure.auditlogs.properties.activity_datetime":{"category":"azure","description":"Activity timestamp ","name":"azure.auditlogs.properties.activity_datetime","type":"date"},"azure.auditlogs.properties.category":{"category":"azure","description":"category ","name":"azure.auditlogs.properties.category","type":"keyword"},"azure.auditlogs.properties.target_resources.*.display_name":{"category":"azure","description":"Display name ","name":"azure.auditlogs.properties.target_resources.*.display_name","type":"keyword"},"azure.auditlogs.properties.target_resources.*.id":{"category":"azure","description":"ID ","name":"azure.auditlogs.properties.target_resources.*.id","type":"keyword"},"azure.auditlogs.properties.target_resources.*.type":{"category":"azure","description":"Type ","name":"azure.auditlogs.properties.target_resources.*.type","type":"keyword"},"azure.auditlogs.properties.target_resources.*.ip_address":{"category":"azure","description":"ip Address ","name":"azure.auditlogs.properties.target_resources.*.ip_address","type":"keyword"},"azure.auditlogs.properties.target_resources.*.user_principal_name":{"category":"azure","description":"User principal name ","name":"azure.auditlogs.properties.target_resources.*.user_principal_name","type":"keyword"},"azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value":{"category":"azure","description":"New value ","name":"azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value","type":"keyword"},"azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name":{"category":"azure","description":"Display value ","name":"azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name","type":"keyword"},"azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value":{"category":"azure","description":"Old value ","name":"azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value","type":"keyword"},"azure.auditlogs.properties.initiated_by.app.servicePrincipalName":{"category":"azure","description":"Service principal name ","name":"azure.auditlogs.properties.initiated_by.app.servicePrincipalName","type":"keyword"},"azure.auditlogs.properties.initiated_by.app.displayName":{"category":"azure","description":"Display name ","name":"azure.auditlogs.properties.initiated_by.app.displayName","type":"keyword"},"azure.auditlogs.properties.initiated_by.app.appId":{"category":"azure","description":"App ID ","name":"azure.auditlogs.properties.initiated_by.app.appId","type":"keyword"},"azure.auditlogs.properties.initiated_by.app.servicePrincipalId":{"category":"azure","description":"Service principal ID ","name":"azure.auditlogs.properties.initiated_by.app.servicePrincipalId","type":"keyword"},"azure.auditlogs.properties.initiated_by.user.userPrincipalName":{"category":"azure","description":"User principal name ","name":"azure.auditlogs.properties.initiated_by.user.userPrincipalName","type":"keyword"},"azure.auditlogs.properties.initiated_by.user.displayName":{"category":"azure","description":"Display name ","name":"azure.auditlogs.properties.initiated_by.user.displayName","type":"keyword"},"azure.auditlogs.properties.initiated_by.user.id":{"category":"azure","description":"ID ","name":"azure.auditlogs.properties.initiated_by.user.id","type":"keyword"},"azure.auditlogs.properties.initiated_by.user.ipAddress":{"category":"azure","description":"ip Address ","name":"azure.auditlogs.properties.initiated_by.user.ipAddress","type":"keyword"},"azure.platformlogs.operation_name":{"category":"azure","description":"Operation name ","name":"azure.platformlogs.operation_name","type":"keyword"},"azure.platformlogs.result_type":{"category":"azure","description":"Result type ","name":"azure.platformlogs.result_type","type":"keyword"},"azure.platformlogs.result_signature":{"category":"azure","description":"Result signature ","name":"azure.platformlogs.result_signature","type":"keyword"},"azure.platformlogs.category":{"category":"azure","description":"Category ","name":"azure.platformlogs.category","type":"keyword"},"azure.platformlogs.event_category":{"category":"azure","description":"Event Category ","name":"azure.platformlogs.event_category","type":"keyword"},"azure.platformlogs.status":{"category":"azure","description":"Status ","name":"azure.platformlogs.status","type":"keyword"},"azure.platformlogs.ccpNamespace":{"category":"azure","description":"ccpNamespace ","name":"azure.platformlogs.ccpNamespace","type":"keyword"},"azure.platformlogs.Cloud":{"category":"azure","description":"Cloud ","name":"azure.platformlogs.Cloud","type":"keyword"},"azure.platformlogs.Environment":{"category":"azure","description":"Environment ","name":"azure.platformlogs.Environment","type":"keyword"},"azure.platformlogs.EventTimeString":{"category":"azure","description":"EventTimeString ","name":"azure.platformlogs.EventTimeString","type":"keyword"},"azure.platformlogs.Caller":{"category":"azure","description":"Caller ","name":"azure.platformlogs.Caller","type":"keyword"},"azure.platformlogs.ScaleUnit":{"category":"azure","description":"ScaleUnit ","name":"azure.platformlogs.ScaleUnit","type":"keyword"},"azure.platformlogs.ActivityId":{"category":"azure","description":"ActivityId ","name":"azure.platformlogs.ActivityId","type":"keyword"},"azure.platformlogs.properties":{"category":"azure","description":"Event inner properties ","name":"azure.platformlogs.properties","type":"flattened"},"azure.signinlogs.operation_name":{"category":"azure","description":"The operation name ","name":"azure.signinlogs.operation_name","type":"keyword"},"azure.signinlogs.operation_version":{"category":"azure","description":"The operation version ","name":"azure.signinlogs.operation_version","type":"keyword"},"azure.signinlogs.tenant_id":{"category":"azure","description":"Tenant ID ","name":"azure.signinlogs.tenant_id","type":"keyword"},"azure.signinlogs.result_signature":{"category":"azure","description":"Result signature ","name":"azure.signinlogs.result_signature","type":"keyword"},"azure.signinlogs.result_description":{"category":"azure","description":"Result description ","name":"azure.signinlogs.result_description","type":"keyword"},"azure.signinlogs.result_type":{"category":"azure","description":"Result type ","name":"azure.signinlogs.result_type","type":"keyword"},"azure.signinlogs.identity":{"category":"azure","description":"Identity ","name":"azure.signinlogs.identity","type":"keyword"},"azure.signinlogs.category":{"category":"azure","description":"Category ","name":"azure.signinlogs.category","type":"keyword"},"azure.signinlogs.properties.id":{"category":"azure","description":"Unique ID representing the sign-in activity. ","name":"azure.signinlogs.properties.id","type":"keyword"},"azure.signinlogs.properties.created_at":{"category":"azure","description":"Date and time (UTC) the sign-in was initiated. ","name":"azure.signinlogs.properties.created_at","type":"date"},"azure.signinlogs.properties.user_display_name":{"category":"azure","description":"User display name ","name":"azure.signinlogs.properties.user_display_name","type":"keyword"},"azure.signinlogs.properties.correlation_id":{"category":"azure","description":"Correlation ID ","name":"azure.signinlogs.properties.correlation_id","type":"keyword"},"azure.signinlogs.properties.user_principal_name":{"category":"azure","description":"User principal name ","name":"azure.signinlogs.properties.user_principal_name","type":"keyword"},"azure.signinlogs.properties.user_id":{"category":"azure","description":"User ID ","name":"azure.signinlogs.properties.user_id","type":"keyword"},"azure.signinlogs.properties.app_id":{"category":"azure","description":"App ID ","name":"azure.signinlogs.properties.app_id","type":"keyword"},"azure.signinlogs.properties.app_display_name":{"category":"azure","description":"App display name ","name":"azure.signinlogs.properties.app_display_name","type":"keyword"},"azure.signinlogs.properties.autonomous_system_number":{"category":"azure","description":"Autonomous system number.","name":"azure.signinlogs.properties.autonomous_system_number","type":"long"},"azure.signinlogs.properties.client_app_used":{"category":"azure","description":"Client app used ","name":"azure.signinlogs.properties.client_app_used","type":"keyword"},"azure.signinlogs.properties.conditional_access_status":{"category":"azure","description":"Conditional access status ","name":"azure.signinlogs.properties.conditional_access_status","type":"keyword"},"azure.signinlogs.properties.original_request_id":{"category":"azure","description":"Original request ID ","name":"azure.signinlogs.properties.original_request_id","type":"keyword"},"azure.signinlogs.properties.is_interactive":{"category":"azure","description":"Is interactive ","name":"azure.signinlogs.properties.is_interactive","type":"boolean"},"azure.signinlogs.properties.token_issuer_name":{"category":"azure","description":"Token issuer name ","name":"azure.signinlogs.properties.token_issuer_name","type":"keyword"},"azure.signinlogs.properties.token_issuer_type":{"category":"azure","description":"Token issuer type ","name":"azure.signinlogs.properties.token_issuer_type","type":"keyword"},"azure.signinlogs.properties.processing_time_ms":{"category":"azure","description":"Processing time in milliseconds ","name":"azure.signinlogs.properties.processing_time_ms","type":"float"},"azure.signinlogs.properties.risk_detail":{"category":"azure","description":"Risk detail ","name":"azure.signinlogs.properties.risk_detail","type":"keyword"},"azure.signinlogs.properties.risk_level_aggregated":{"category":"azure","description":"Risk level aggregated ","name":"azure.signinlogs.properties.risk_level_aggregated","type":"keyword"},"azure.signinlogs.properties.risk_level_during_signin":{"category":"azure","description":"Risk level during signIn ","name":"azure.signinlogs.properties.risk_level_during_signin","type":"keyword"},"azure.signinlogs.properties.risk_state":{"category":"azure","description":"Risk state ","name":"azure.signinlogs.properties.risk_state","type":"keyword"},"azure.signinlogs.properties.resource_display_name":{"category":"azure","description":"Resource display name ","name":"azure.signinlogs.properties.resource_display_name","type":"keyword"},"azure.signinlogs.properties.status.error_code":{"category":"azure","description":"Error code ","name":"azure.signinlogs.properties.status.error_code","type":"long"},"azure.signinlogs.properties.device_detail.device_id":{"category":"azure","description":"Device ID ","name":"azure.signinlogs.properties.device_detail.device_id","type":"keyword"},"azure.signinlogs.properties.device_detail.operating_system":{"category":"azure","description":"Operating system ","name":"azure.signinlogs.properties.device_detail.operating_system","type":"keyword"},"azure.signinlogs.properties.device_detail.browser":{"category":"azure","description":"Browser ","name":"azure.signinlogs.properties.device_detail.browser","type":"keyword"},"azure.signinlogs.properties.device_detail.display_name":{"category":"azure","description":"Display name ","name":"azure.signinlogs.properties.device_detail.display_name","type":"keyword"},"azure.signinlogs.properties.device_detail.trust_type":{"category":"azure","description":"Trust type ","name":"azure.signinlogs.properties.device_detail.trust_type","type":"keyword"},"azure.signinlogs.properties.applied_conditional_access_policies":{"category":"azure","description":"A list of conditional access policies that are triggered by the corresponding sign-in activity. ","name":"azure.signinlogs.properties.applied_conditional_access_policies","type":"array"},"azure.signinlogs.properties.authentication_details":{"category":"azure","description":"The result of the authentication attempt and additional details on the authentication method. ","name":"azure.signinlogs.properties.authentication_details","type":"array"},"azure.signinlogs.properties.authentication_processing_details":{"category":"azure","description":"Additional authentication processing details, such as the agent name in case of PTA/PHS or Server/farm name in case of federated authentication. ","name":"azure.signinlogs.properties.authentication_processing_details","type":"flattened"},"azure.signinlogs.properties.authentication_requirement":{"category":"azure","description":"This holds the highest level of authentication needed through all the sign-in steps, for sign-in to succeed. ","name":"azure.signinlogs.properties.authentication_requirement","type":"keyword"},"azure.signinlogs.properties.authentication_requirement_policies":{"category":"azure","description":"Set of CA policies that apply to this sign-in, each as CA: policy name, and/or MFA: Per-user ","name":"azure.signinlogs.properties.authentication_requirement_policies","type":"keyword"},"azure.signinlogs.properties.flagged_for_review":{"category":"azure","name":"azure.signinlogs.properties.flagged_for_review","type":"boolean"},"azure.signinlogs.properties.home_tenant_id":{"category":"azure","name":"azure.signinlogs.properties.home_tenant_id","type":"keyword"},"azure.signinlogs.properties.network_location_details":{"category":"azure","description":"The network location details including the type of network used and its names.","name":"azure.signinlogs.properties.network_location_details","type":"array"},"azure.signinlogs.properties.resource_id":{"category":"azure","description":"The identifier of the resource that the user signed in to.","name":"azure.signinlogs.properties.resource_id","type":"keyword"},"azure.signinlogs.properties.resource_tenant_id":{"category":"azure","name":"azure.signinlogs.properties.resource_tenant_id","type":"keyword"},"azure.signinlogs.properties.risk_event_types":{"category":"azure","description":"The list of risk event types associated with the sign-in. Possible values: unlikelyTravel, anonymizedIPAddress, maliciousIPAddress, unfamiliarFeatures, malwareInfectedIPAddress, suspiciousIPAddress, leakedCredentials, investigationsThreatIntelligence, generic, or unknownFutureValue. ","name":"azure.signinlogs.properties.risk_event_types","type":"keyword"},"azure.signinlogs.properties.risk_event_types_v2":{"category":"azure","description":"The list of risk event types associated with the sign-in. Possible values: unlikelyTravel, anonymizedIPAddress, maliciousIPAddress, unfamiliarFeatures, malwareInfectedIPAddress, suspiciousIPAddress, leakedCredentials, investigationsThreatIntelligence, generic, or unknownFutureValue. ","name":"azure.signinlogs.properties.risk_event_types_v2","type":"keyword"},"azure.signinlogs.properties.service_principal_name":{"category":"azure","description":"The application name used for sign-in. This field is populated when you are signing in using an application. ","name":"azure.signinlogs.properties.service_principal_name","type":"keyword"},"azure.signinlogs.properties.user_type":{"category":"azure","name":"azure.signinlogs.properties.user_type","type":"keyword"},"azure.signinlogs.properties.service_principal_id":{"category":"azure","description":"The application identifier used for sign-in. This field is populated when you are signing in using an application. ","name":"azure.signinlogs.properties.service_principal_id","type":"keyword"},"azure.signinlogs.properties.cross_tenant_access_type":{"category":"azure","name":"azure.signinlogs.properties.cross_tenant_access_type","type":"keyword"},"azure.signinlogs.properties.is_tenant_restricted":{"category":"azure","name":"azure.signinlogs.properties.is_tenant_restricted","type":"boolean"},"azure.signinlogs.properties.sso_extension_version":{"category":"azure","name":"azure.signinlogs.properties.sso_extension_version","type":"keyword"},"network.interface.name":{"category":"network","description":"Name of the network interface where the traffic has been observed. ","name":"network.interface.name","type":"keyword"},"rsa.internal.msg":{"category":"rsa","description":"This key is used to capture the raw message that comes into the Log Decoder","name":"rsa.internal.msg","type":"keyword"},"rsa.internal.messageid":{"category":"rsa","name":"rsa.internal.messageid","type":"keyword"},"rsa.internal.event_desc":{"category":"rsa","name":"rsa.internal.event_desc","type":"keyword"},"rsa.internal.message":{"category":"rsa","description":"This key captures the contents of instant messages","name":"rsa.internal.message","type":"keyword"},"rsa.internal.time":{"category":"rsa","description":"This is the time at which a session hits a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness.","name":"rsa.internal.time","type":"date"},"rsa.internal.level":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.level","type":"long"},"rsa.internal.msg_id":{"category":"rsa","description":"This is the Message ID1 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.msg_id","type":"keyword"},"rsa.internal.msg_vid":{"category":"rsa","description":"This is the Message ID2 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.msg_vid","type":"keyword"},"rsa.internal.data":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.data","type":"keyword"},"rsa.internal.obj_server":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.obj_server","type":"keyword"},"rsa.internal.obj_val":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.obj_val","type":"keyword"},"rsa.internal.resource":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.resource","type":"keyword"},"rsa.internal.obj_id":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.obj_id","type":"keyword"},"rsa.internal.statement":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.statement","type":"keyword"},"rsa.internal.audit_class":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.audit_class","type":"keyword"},"rsa.internal.entry":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.entry","type":"keyword"},"rsa.internal.hcode":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.hcode","type":"keyword"},"rsa.internal.inode":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.inode","type":"long"},"rsa.internal.resource_class":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.resource_class","type":"keyword"},"rsa.internal.dead":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.dead","type":"long"},"rsa.internal.feed_desc":{"category":"rsa","description":"This is used to capture the description of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.feed_desc","type":"keyword"},"rsa.internal.feed_name":{"category":"rsa","description":"This is used to capture the name of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.feed_name","type":"keyword"},"rsa.internal.cid":{"category":"rsa","description":"This is the unique identifier used to identify a NetWitness Concentrator. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.cid","type":"keyword"},"rsa.internal.device_class":{"category":"rsa","description":"This is the Classification of the Log Event Source under a predefined fixed set of Event Source Classifications. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.device_class","type":"keyword"},"rsa.internal.device_group":{"category":"rsa","description":"This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.device_group","type":"keyword"},"rsa.internal.device_host":{"category":"rsa","description":"This is the Hostname of the log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.device_host","type":"keyword"},"rsa.internal.device_ip":{"category":"rsa","description":"This is the IPv4 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.device_ip","type":"ip"},"rsa.internal.device_ipv6":{"category":"rsa","description":"This is the IPv6 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.device_ipv6","type":"ip"},"rsa.internal.device_type":{"category":"rsa","description":"This is the name of the log parser which parsed a given session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.device_type","type":"keyword"},"rsa.internal.device_type_id":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.device_type_id","type":"long"},"rsa.internal.did":{"category":"rsa","description":"This is the unique identifier used to identify a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.did","type":"keyword"},"rsa.internal.entropy_req":{"category":"rsa","description":"This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration","name":"rsa.internal.entropy_req","type":"long"},"rsa.internal.entropy_res":{"category":"rsa","description":"This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration","name":"rsa.internal.entropy_res","type":"long"},"rsa.internal.event_name":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.event_name","type":"keyword"},"rsa.internal.feed_category":{"category":"rsa","description":"This is used to capture the category of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.feed_category","type":"keyword"},"rsa.internal.forward_ip":{"category":"rsa","description":"This key should be used to capture the IPV4 address of a relay system which forwarded the events from the original system to NetWitness.","name":"rsa.internal.forward_ip","type":"ip"},"rsa.internal.forward_ipv6":{"category":"rsa","description":"This key is used to capture the IPV6 address of a relay system which forwarded the events from the original system to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.forward_ipv6","type":"ip"},"rsa.internal.header_id":{"category":"rsa","description":"This is the Header ID value that identifies the exact log parser header definition that parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.header_id","type":"keyword"},"rsa.internal.lc_cid":{"category":"rsa","description":"This is a unique Identifier of a Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.lc_cid","type":"keyword"},"rsa.internal.lc_ctime":{"category":"rsa","description":"This is the time at which a log is collected in a NetWitness Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.lc_ctime","type":"date"},"rsa.internal.mcb_req":{"category":"rsa","description":"This key is only used by the Entropy Parser, the most common byte request is simply which byte for each side (0 thru 255) was seen the most","name":"rsa.internal.mcb_req","type":"long"},"rsa.internal.mcb_res":{"category":"rsa","description":"This key is only used by the Entropy Parser, the most common byte response is simply which byte for each side (0 thru 255) was seen the most","name":"rsa.internal.mcb_res","type":"long"},"rsa.internal.mcbc_req":{"category":"rsa","description":"This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams","name":"rsa.internal.mcbc_req","type":"long"},"rsa.internal.mcbc_res":{"category":"rsa","description":"This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams","name":"rsa.internal.mcbc_res","type":"long"},"rsa.internal.medium":{"category":"rsa","description":"This key is used to identify if it’s a log/packet session or Layer 2 Encapsulation Type. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness. 32 = log, 33 = correlation session, < 32 is packet session","name":"rsa.internal.medium","type":"long"},"rsa.internal.node_name":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.node_name","type":"keyword"},"rsa.internal.nwe_callback_id":{"category":"rsa","description":"This key denotes that event is endpoint related","name":"rsa.internal.nwe_callback_id","type":"keyword"},"rsa.internal.parse_error":{"category":"rsa","description":"This is a special key that stores any Meta key validation error found while parsing a log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.parse_error","type":"keyword"},"rsa.internal.payload_req":{"category":"rsa","description":"This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep","name":"rsa.internal.payload_req","type":"long"},"rsa.internal.payload_res":{"category":"rsa","description":"This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep","name":"rsa.internal.payload_res","type":"long"},"rsa.internal.process_vid_dst":{"category":"rsa","description":"Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the target process.","name":"rsa.internal.process_vid_dst","type":"keyword"},"rsa.internal.process_vid_src":{"category":"rsa","description":"Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the source process.","name":"rsa.internal.process_vid_src","type":"keyword"},"rsa.internal.rid":{"category":"rsa","description":"This is a special ID of the Remote Session created by NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.rid","type":"long"},"rsa.internal.session_split":{"category":"rsa","description":"This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.session_split","type":"keyword"},"rsa.internal.site":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.internal.site","type":"keyword"},"rsa.internal.size":{"category":"rsa","description":"This is the size of the session as seen by the NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.size","type":"long"},"rsa.internal.sourcefile":{"category":"rsa","description":"This is the name of the log file or PCAPs that can be imported into NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.internal.sourcefile","type":"keyword"},"rsa.internal.ubc_req":{"category":"rsa","description":"This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once","name":"rsa.internal.ubc_req","type":"long"},"rsa.internal.ubc_res":{"category":"rsa","description":"This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once","name":"rsa.internal.ubc_res","type":"long"},"rsa.internal.word":{"category":"rsa","description":"This is used by the Word Parsing technology to capture the first 5 character of every word in an unparsed log","name":"rsa.internal.word","type":"keyword"},"rsa.time.event_time":{"category":"rsa","description":"This key is used to capture the time mentioned in a raw session that represents the actual time an event occured in a standard normalized form","name":"rsa.time.event_time","type":"date"},"rsa.time.duration_time":{"category":"rsa","description":"This key is used to capture the normalized duration/lifetime in seconds.","name":"rsa.time.duration_time","type":"double"},"rsa.time.event_time_str":{"category":"rsa","description":"This key is used to capture the incomplete time mentioned in a session as a string","name":"rsa.time.event_time_str","type":"keyword"},"rsa.time.starttime":{"category":"rsa","description":"This key is used to capture the Start time mentioned in a session in a standard form","name":"rsa.time.starttime","type":"date"},"rsa.time.month":{"category":"rsa","name":"rsa.time.month","type":"keyword"},"rsa.time.day":{"category":"rsa","name":"rsa.time.day","type":"keyword"},"rsa.time.endtime":{"category":"rsa","description":"This key is used to capture the End time mentioned in a session in a standard form","name":"rsa.time.endtime","type":"date"},"rsa.time.timezone":{"category":"rsa","description":"This key is used to capture the timezone of the Event Time","name":"rsa.time.timezone","type":"keyword"},"rsa.time.duration_str":{"category":"rsa","description":"A text string version of the duration","name":"rsa.time.duration_str","type":"keyword"},"rsa.time.date":{"category":"rsa","name":"rsa.time.date","type":"keyword"},"rsa.time.year":{"category":"rsa","name":"rsa.time.year","type":"keyword"},"rsa.time.recorded_time":{"category":"rsa","description":"The event time as recorded by the system the event is collected from. The usage scenario is a multi-tier application where the management layer of the system records it's own timestamp at the time of collection from its child nodes. Must be in timestamp format.","name":"rsa.time.recorded_time","type":"date"},"rsa.time.datetime":{"category":"rsa","name":"rsa.time.datetime","type":"keyword"},"rsa.time.effective_time":{"category":"rsa","description":"This key is the effective time referenced by an individual event in a Standard Timestamp format","name":"rsa.time.effective_time","type":"date"},"rsa.time.expire_time":{"category":"rsa","description":"This key is the timestamp that explicitly refers to an expiration.","name":"rsa.time.expire_time","type":"date"},"rsa.time.process_time":{"category":"rsa","description":"Deprecated, use duration.time","name":"rsa.time.process_time","type":"keyword"},"rsa.time.hour":{"category":"rsa","name":"rsa.time.hour","type":"keyword"},"rsa.time.min":{"category":"rsa","name":"rsa.time.min","type":"keyword"},"rsa.time.timestamp":{"category":"rsa","name":"rsa.time.timestamp","type":"keyword"},"rsa.time.event_queue_time":{"category":"rsa","description":"This key is the Time that the event was queued.","name":"rsa.time.event_queue_time","type":"date"},"rsa.time.p_time1":{"category":"rsa","name":"rsa.time.p_time1","type":"keyword"},"rsa.time.tzone":{"category":"rsa","name":"rsa.time.tzone","type":"keyword"},"rsa.time.eventtime":{"category":"rsa","name":"rsa.time.eventtime","type":"keyword"},"rsa.time.gmtdate":{"category":"rsa","name":"rsa.time.gmtdate","type":"keyword"},"rsa.time.gmttime":{"category":"rsa","name":"rsa.time.gmttime","type":"keyword"},"rsa.time.p_date":{"category":"rsa","name":"rsa.time.p_date","type":"keyword"},"rsa.time.p_month":{"category":"rsa","name":"rsa.time.p_month","type":"keyword"},"rsa.time.p_time":{"category":"rsa","name":"rsa.time.p_time","type":"keyword"},"rsa.time.p_time2":{"category":"rsa","name":"rsa.time.p_time2","type":"keyword"},"rsa.time.p_year":{"category":"rsa","name":"rsa.time.p_year","type":"keyword"},"rsa.time.expire_time_str":{"category":"rsa","description":"This key is used to capture incomplete timestamp that explicitly refers to an expiration.","name":"rsa.time.expire_time_str","type":"keyword"},"rsa.time.stamp":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.time.stamp","type":"date"},"rsa.misc.action":{"category":"rsa","name":"rsa.misc.action","type":"keyword"},"rsa.misc.result":{"category":"rsa","description":"This key is used to capture the outcome/result string value of an action in a session.","name":"rsa.misc.result","type":"keyword"},"rsa.misc.severity":{"category":"rsa","description":"This key is used to capture the severity given the session","name":"rsa.misc.severity","type":"keyword"},"rsa.misc.event_type":{"category":"rsa","description":"This key captures the event category type as specified by the event source.","name":"rsa.misc.event_type","type":"keyword"},"rsa.misc.reference_id":{"category":"rsa","description":"This key is used to capture an event id from the session directly","name":"rsa.misc.reference_id","type":"keyword"},"rsa.misc.version":{"category":"rsa","description":"This key captures Version of the application or OS which is generating the event.","name":"rsa.misc.version","type":"keyword"},"rsa.misc.disposition":{"category":"rsa","description":"This key captures the The end state of an action.","name":"rsa.misc.disposition","type":"keyword"},"rsa.misc.result_code":{"category":"rsa","description":"This key is used to capture the outcome/result numeric value of an action in a session","name":"rsa.misc.result_code","type":"keyword"},"rsa.misc.category":{"category":"rsa","description":"This key is used to capture the category of an event given by the vendor in the session","name":"rsa.misc.category","type":"keyword"},"rsa.misc.obj_name":{"category":"rsa","description":"This is used to capture name of object","name":"rsa.misc.obj_name","type":"keyword"},"rsa.misc.obj_type":{"category":"rsa","description":"This is used to capture type of object","name":"rsa.misc.obj_type","type":"keyword"},"rsa.misc.event_source":{"category":"rsa","description":"This key captures Source of the event that’s not a hostname","name":"rsa.misc.event_source","type":"keyword"},"rsa.misc.log_session_id":{"category":"rsa","description":"This key is used to capture a sessionid from the session directly","name":"rsa.misc.log_session_id","type":"keyword"},"rsa.misc.group":{"category":"rsa","description":"This key captures the Group Name value","name":"rsa.misc.group","type":"keyword"},"rsa.misc.policy_name":{"category":"rsa","description":"This key is used to capture the Policy Name only.","name":"rsa.misc.policy_name","type":"keyword"},"rsa.misc.rule_name":{"category":"rsa","description":"This key captures the Rule Name","name":"rsa.misc.rule_name","type":"keyword"},"rsa.misc.context":{"category":"rsa","description":"This key captures Information which adds additional context to the event.","name":"rsa.misc.context","type":"keyword"},"rsa.misc.change_new":{"category":"rsa","description":"This key is used to capture the new values of the attribute that’s changing in a session","name":"rsa.misc.change_new","type":"keyword"},"rsa.misc.space":{"category":"rsa","name":"rsa.misc.space","type":"keyword"},"rsa.misc.client":{"category":"rsa","description":"This key is used to capture only the name of the client application requesting resources of the server. See the user.agent meta key for capture of the specific user agent identifier or browser identification string.","name":"rsa.misc.client","type":"keyword"},"rsa.misc.msgIdPart1":{"category":"rsa","name":"rsa.misc.msgIdPart1","type":"keyword"},"rsa.misc.msgIdPart2":{"category":"rsa","name":"rsa.misc.msgIdPart2","type":"keyword"},"rsa.misc.change_old":{"category":"rsa","description":"This key is used to capture the old value of the attribute that’s changing in a session","name":"rsa.misc.change_old","type":"keyword"},"rsa.misc.operation_id":{"category":"rsa","description":"An alert number or operation number. The values should be unique and non-repeating.","name":"rsa.misc.operation_id","type":"keyword"},"rsa.misc.event_state":{"category":"rsa","description":"This key captures the current state of the object/item referenced within the event. Describing an on-going event.","name":"rsa.misc.event_state","type":"keyword"},"rsa.misc.group_object":{"category":"rsa","description":"This key captures a collection/grouping of entities. Specific usage","name":"rsa.misc.group_object","type":"keyword"},"rsa.misc.node":{"category":"rsa","description":"Common use case is the node name within a cluster. The cluster name is reflected by the host name.","name":"rsa.misc.node","type":"keyword"},"rsa.misc.rule":{"category":"rsa","description":"This key captures the Rule number","name":"rsa.misc.rule","type":"keyword"},"rsa.misc.device_name":{"category":"rsa","description":"This is used to capture name of the Device associated with the node Like: a physical disk, printer, etc","name":"rsa.misc.device_name","type":"keyword"},"rsa.misc.param":{"category":"rsa","description":"This key is the parameters passed as part of a command or application, etc.","name":"rsa.misc.param","type":"keyword"},"rsa.misc.change_attrib":{"category":"rsa","description":"This key is used to capture the name of the attribute that’s changing in a session","name":"rsa.misc.change_attrib","type":"keyword"},"rsa.misc.event_computer":{"category":"rsa","description":"This key is a windows only concept, where this key is used to capture fully qualified domain name in a windows log.","name":"rsa.misc.event_computer","type":"keyword"},"rsa.misc.reference_id1":{"category":"rsa","description":"This key is for Linked ID to be used as an addition to \"reference.id\"","name":"rsa.misc.reference_id1","type":"keyword"},"rsa.misc.event_log":{"category":"rsa","description":"This key captures the Name of the event log","name":"rsa.misc.event_log","type":"keyword"},"rsa.misc.OS":{"category":"rsa","description":"This key captures the Name of the Operating System","name":"rsa.misc.OS","type":"keyword"},"rsa.misc.terminal":{"category":"rsa","description":"This key captures the Terminal Names only","name":"rsa.misc.terminal","type":"keyword"},"rsa.misc.msgIdPart3":{"category":"rsa","name":"rsa.misc.msgIdPart3","type":"keyword"},"rsa.misc.filter":{"category":"rsa","description":"This key captures Filter used to reduce result set","name":"rsa.misc.filter","type":"keyword"},"rsa.misc.serial_number":{"category":"rsa","description":"This key is the Serial number associated with a physical asset.","name":"rsa.misc.serial_number","type":"keyword"},"rsa.misc.checksum":{"category":"rsa","description":"This key is used to capture the checksum or hash of the entity such as a file or process. Checksum should be used over checksum.src or checksum.dst when it is unclear whether the entity is a source or target of an action.","name":"rsa.misc.checksum","type":"keyword"},"rsa.misc.event_user":{"category":"rsa","description":"This key is a windows only concept, where this key is used to capture combination of domain name and username in a windows log.","name":"rsa.misc.event_user","type":"keyword"},"rsa.misc.virusname":{"category":"rsa","description":"This key captures the name of the virus","name":"rsa.misc.virusname","type":"keyword"},"rsa.misc.content_type":{"category":"rsa","description":"This key is used to capture Content Type only.","name":"rsa.misc.content_type","type":"keyword"},"rsa.misc.group_id":{"category":"rsa","description":"This key captures Group ID Number (related to the group name)","name":"rsa.misc.group_id","type":"keyword"},"rsa.misc.policy_id":{"category":"rsa","description":"This key is used to capture the Policy ID only, this should be a numeric value, use policy.name otherwise","name":"rsa.misc.policy_id","type":"keyword"},"rsa.misc.vsys":{"category":"rsa","description":"This key captures Virtual System Name","name":"rsa.misc.vsys","type":"keyword"},"rsa.misc.connection_id":{"category":"rsa","description":"This key captures the Connection ID","name":"rsa.misc.connection_id","type":"keyword"},"rsa.misc.reference_id2":{"category":"rsa","description":"This key is for the 2nd Linked ID. Can be either linked to \"reference.id\" or \"reference.id1\" value but should not be used unless the other two variables are in play.","name":"rsa.misc.reference_id2","type":"keyword"},"rsa.misc.sensor":{"category":"rsa","description":"This key captures Name of the sensor. Typically used in IDS/IPS based devices","name":"rsa.misc.sensor","type":"keyword"},"rsa.misc.sig_id":{"category":"rsa","description":"This key captures IDS/IPS Int Signature ID","name":"rsa.misc.sig_id","type":"long"},"rsa.misc.port_name":{"category":"rsa","description":"This key is used for Physical or logical port connection but does NOT include a network port. (Example: Printer port name).","name":"rsa.misc.port_name","type":"keyword"},"rsa.misc.rule_group":{"category":"rsa","description":"This key captures the Rule group name","name":"rsa.misc.rule_group","type":"keyword"},"rsa.misc.risk_num":{"category":"rsa","description":"This key captures a Numeric Risk value","name":"rsa.misc.risk_num","type":"double"},"rsa.misc.trigger_val":{"category":"rsa","description":"This key captures the Value of the trigger or threshold condition.","name":"rsa.misc.trigger_val","type":"keyword"},"rsa.misc.log_session_id1":{"category":"rsa","description":"This key is used to capture a Linked (Related) Session ID from the session directly","name":"rsa.misc.log_session_id1","type":"keyword"},"rsa.misc.comp_version":{"category":"rsa","description":"This key captures the Version level of a sub-component of a product.","name":"rsa.misc.comp_version","type":"keyword"},"rsa.misc.content_version":{"category":"rsa","description":"This key captures Version level of a signature or database content.","name":"rsa.misc.content_version","type":"keyword"},"rsa.misc.hardware_id":{"category":"rsa","description":"This key is used to capture unique identifier for a device or system (NOT a Mac address)","name":"rsa.misc.hardware_id","type":"keyword"},"rsa.misc.risk":{"category":"rsa","description":"This key captures the non-numeric risk value","name":"rsa.misc.risk","type":"keyword"},"rsa.misc.event_id":{"category":"rsa","name":"rsa.misc.event_id","type":"keyword"},"rsa.misc.reason":{"category":"rsa","name":"rsa.misc.reason","type":"keyword"},"rsa.misc.status":{"category":"rsa","name":"rsa.misc.status","type":"keyword"},"rsa.misc.mail_id":{"category":"rsa","description":"This key is used to capture the mailbox id/name","name":"rsa.misc.mail_id","type":"keyword"},"rsa.misc.rule_uid":{"category":"rsa","description":"This key is the Unique Identifier for a rule.","name":"rsa.misc.rule_uid","type":"keyword"},"rsa.misc.trigger_desc":{"category":"rsa","description":"This key captures the Description of the trigger or threshold condition.","name":"rsa.misc.trigger_desc","type":"keyword"},"rsa.misc.inout":{"category":"rsa","name":"rsa.misc.inout","type":"keyword"},"rsa.misc.p_msgid":{"category":"rsa","name":"rsa.misc.p_msgid","type":"keyword"},"rsa.misc.data_type":{"category":"rsa","name":"rsa.misc.data_type","type":"keyword"},"rsa.misc.msgIdPart4":{"category":"rsa","name":"rsa.misc.msgIdPart4","type":"keyword"},"rsa.misc.error":{"category":"rsa","description":"This key captures All non successful Error codes or responses","name":"rsa.misc.error","type":"keyword"},"rsa.misc.index":{"category":"rsa","name":"rsa.misc.index","type":"keyword"},"rsa.misc.listnum":{"category":"rsa","description":"This key is used to capture listname or listnumber, primarily for collecting access-list","name":"rsa.misc.listnum","type":"keyword"},"rsa.misc.ntype":{"category":"rsa","name":"rsa.misc.ntype","type":"keyword"},"rsa.misc.observed_val":{"category":"rsa","description":"This key captures the Value observed (from the perspective of the device generating the log).","name":"rsa.misc.observed_val","type":"keyword"},"rsa.misc.policy_value":{"category":"rsa","description":"This key captures the contents of the policy. This contains details about the policy","name":"rsa.misc.policy_value","type":"keyword"},"rsa.misc.pool_name":{"category":"rsa","description":"This key captures the name of a resource pool","name":"rsa.misc.pool_name","type":"keyword"},"rsa.misc.rule_template":{"category":"rsa","description":"A default set of parameters which are overlayed onto a rule (or rulename) which efffectively constitutes a template","name":"rsa.misc.rule_template","type":"keyword"},"rsa.misc.count":{"category":"rsa","name":"rsa.misc.count","type":"keyword"},"rsa.misc.number":{"category":"rsa","name":"rsa.misc.number","type":"keyword"},"rsa.misc.sigcat":{"category":"rsa","name":"rsa.misc.sigcat","type":"keyword"},"rsa.misc.type":{"category":"rsa","name":"rsa.misc.type","type":"keyword"},"rsa.misc.comments":{"category":"rsa","description":"Comment information provided in the log message","name":"rsa.misc.comments","type":"keyword"},"rsa.misc.doc_number":{"category":"rsa","description":"This key captures File Identification number","name":"rsa.misc.doc_number","type":"long"},"rsa.misc.expected_val":{"category":"rsa","description":"This key captures the Value expected (from the perspective of the device generating the log).","name":"rsa.misc.expected_val","type":"keyword"},"rsa.misc.job_num":{"category":"rsa","description":"This key captures the Job Number","name":"rsa.misc.job_num","type":"keyword"},"rsa.misc.spi_dst":{"category":"rsa","description":"Destination SPI Index","name":"rsa.misc.spi_dst","type":"keyword"},"rsa.misc.spi_src":{"category":"rsa","description":"Source SPI Index","name":"rsa.misc.spi_src","type":"keyword"},"rsa.misc.code":{"category":"rsa","name":"rsa.misc.code","type":"keyword"},"rsa.misc.agent_id":{"category":"rsa","description":"This key is used to capture agent id","name":"rsa.misc.agent_id","type":"keyword"},"rsa.misc.message_body":{"category":"rsa","description":"This key captures the The contents of the message body.","name":"rsa.misc.message_body","type":"keyword"},"rsa.misc.phone":{"category":"rsa","name":"rsa.misc.phone","type":"keyword"},"rsa.misc.sig_id_str":{"category":"rsa","description":"This key captures a string object of the sigid variable.","name":"rsa.misc.sig_id_str","type":"keyword"},"rsa.misc.cmd":{"category":"rsa","name":"rsa.misc.cmd","type":"keyword"},"rsa.misc.misc":{"category":"rsa","name":"rsa.misc.misc","type":"keyword"},"rsa.misc.name":{"category":"rsa","name":"rsa.misc.name","type":"keyword"},"rsa.misc.cpu":{"category":"rsa","description":"This key is the CPU time used in the execution of the event being recorded.","name":"rsa.misc.cpu","type":"long"},"rsa.misc.event_desc":{"category":"rsa","description":"This key is used to capture a description of an event available directly or inferred","name":"rsa.misc.event_desc","type":"keyword"},"rsa.misc.sig_id1":{"category":"rsa","description":"This key captures IDS/IPS Int Signature ID. This must be linked to the sig.id","name":"rsa.misc.sig_id1","type":"long"},"rsa.misc.im_buddyid":{"category":"rsa","name":"rsa.misc.im_buddyid","type":"keyword"},"rsa.misc.im_client":{"category":"rsa","name":"rsa.misc.im_client","type":"keyword"},"rsa.misc.im_userid":{"category":"rsa","name":"rsa.misc.im_userid","type":"keyword"},"rsa.misc.pid":{"category":"rsa","name":"rsa.misc.pid","type":"keyword"},"rsa.misc.priority":{"category":"rsa","name":"rsa.misc.priority","type":"keyword"},"rsa.misc.context_subject":{"category":"rsa","description":"This key is to be used in an audit context where the subject is the object being identified","name":"rsa.misc.context_subject","type":"keyword"},"rsa.misc.context_target":{"category":"rsa","name":"rsa.misc.context_target","type":"keyword"},"rsa.misc.cve":{"category":"rsa","description":"This key captures CVE (Common Vulnerabilities and Exposures) - an identifier for known information security vulnerabilities.","name":"rsa.misc.cve","type":"keyword"},"rsa.misc.fcatnum":{"category":"rsa","description":"This key captures Filter Category Number. Legacy Usage","name":"rsa.misc.fcatnum","type":"keyword"},"rsa.misc.library":{"category":"rsa","description":"This key is used to capture library information in mainframe devices","name":"rsa.misc.library","type":"keyword"},"rsa.misc.parent_node":{"category":"rsa","description":"This key captures the Parent Node Name. Must be related to node variable.","name":"rsa.misc.parent_node","type":"keyword"},"rsa.misc.risk_info":{"category":"rsa","description":"Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)","name":"rsa.misc.risk_info","type":"keyword"},"rsa.misc.tcp_flags":{"category":"rsa","description":"This key is captures the TCP flags set in any packet of session","name":"rsa.misc.tcp_flags","type":"long"},"rsa.misc.tos":{"category":"rsa","description":"This key describes the type of service","name":"rsa.misc.tos","type":"long"},"rsa.misc.vm_target":{"category":"rsa","description":"VMWare Target **VMWARE** only varaible.","name":"rsa.misc.vm_target","type":"keyword"},"rsa.misc.workspace":{"category":"rsa","description":"This key captures Workspace Description","name":"rsa.misc.workspace","type":"keyword"},"rsa.misc.command":{"category":"rsa","name":"rsa.misc.command","type":"keyword"},"rsa.misc.event_category":{"category":"rsa","name":"rsa.misc.event_category","type":"keyword"},"rsa.misc.facilityname":{"category":"rsa","name":"rsa.misc.facilityname","type":"keyword"},"rsa.misc.forensic_info":{"category":"rsa","name":"rsa.misc.forensic_info","type":"keyword"},"rsa.misc.jobname":{"category":"rsa","name":"rsa.misc.jobname","type":"keyword"},"rsa.misc.mode":{"category":"rsa","name":"rsa.misc.mode","type":"keyword"},"rsa.misc.policy":{"category":"rsa","name":"rsa.misc.policy","type":"keyword"},"rsa.misc.policy_waiver":{"category":"rsa","name":"rsa.misc.policy_waiver","type":"keyword"},"rsa.misc.second":{"category":"rsa","name":"rsa.misc.second","type":"keyword"},"rsa.misc.space1":{"category":"rsa","name":"rsa.misc.space1","type":"keyword"},"rsa.misc.subcategory":{"category":"rsa","name":"rsa.misc.subcategory","type":"keyword"},"rsa.misc.tbdstr2":{"category":"rsa","name":"rsa.misc.tbdstr2","type":"keyword"},"rsa.misc.alert_id":{"category":"rsa","description":"Deprecated, New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)","name":"rsa.misc.alert_id","type":"keyword"},"rsa.misc.checksum_dst":{"category":"rsa","description":"This key is used to capture the checksum or hash of the the target entity such as a process or file.","name":"rsa.misc.checksum_dst","type":"keyword"},"rsa.misc.checksum_src":{"category":"rsa","description":"This key is used to capture the checksum or hash of the source entity such as a file or process.","name":"rsa.misc.checksum_src","type":"keyword"},"rsa.misc.fresult":{"category":"rsa","description":"This key captures the Filter Result","name":"rsa.misc.fresult","type":"long"},"rsa.misc.payload_dst":{"category":"rsa","description":"This key is used to capture destination payload","name":"rsa.misc.payload_dst","type":"keyword"},"rsa.misc.payload_src":{"category":"rsa","description":"This key is used to capture source payload","name":"rsa.misc.payload_src","type":"keyword"},"rsa.misc.pool_id":{"category":"rsa","description":"This key captures the identifier (typically numeric field) of a resource pool","name":"rsa.misc.pool_id","type":"keyword"},"rsa.misc.process_id_val":{"category":"rsa","description":"This key is a failure key for Process ID when it is not an integer value","name":"rsa.misc.process_id_val","type":"keyword"},"rsa.misc.risk_num_comm":{"category":"rsa","description":"This key captures Risk Number Community","name":"rsa.misc.risk_num_comm","type":"double"},"rsa.misc.risk_num_next":{"category":"rsa","description":"This key captures Risk Number NextGen","name":"rsa.misc.risk_num_next","type":"double"},"rsa.misc.risk_num_sand":{"category":"rsa","description":"This key captures Risk Number SandBox","name":"rsa.misc.risk_num_sand","type":"double"},"rsa.misc.risk_num_static":{"category":"rsa","description":"This key captures Risk Number Static","name":"rsa.misc.risk_num_static","type":"double"},"rsa.misc.risk_suspicious":{"category":"rsa","description":"Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)","name":"rsa.misc.risk_suspicious","type":"keyword"},"rsa.misc.risk_warning":{"category":"rsa","description":"Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)","name":"rsa.misc.risk_warning","type":"keyword"},"rsa.misc.snmp_oid":{"category":"rsa","description":"SNMP Object Identifier","name":"rsa.misc.snmp_oid","type":"keyword"},"rsa.misc.sql":{"category":"rsa","description":"This key captures the SQL query","name":"rsa.misc.sql","type":"keyword"},"rsa.misc.vuln_ref":{"category":"rsa","description":"This key captures the Vulnerability Reference details","name":"rsa.misc.vuln_ref","type":"keyword"},"rsa.misc.acl_id":{"category":"rsa","name":"rsa.misc.acl_id","type":"keyword"},"rsa.misc.acl_op":{"category":"rsa","name":"rsa.misc.acl_op","type":"keyword"},"rsa.misc.acl_pos":{"category":"rsa","name":"rsa.misc.acl_pos","type":"keyword"},"rsa.misc.acl_table":{"category":"rsa","name":"rsa.misc.acl_table","type":"keyword"},"rsa.misc.admin":{"category":"rsa","name":"rsa.misc.admin","type":"keyword"},"rsa.misc.alarm_id":{"category":"rsa","name":"rsa.misc.alarm_id","type":"keyword"},"rsa.misc.alarmname":{"category":"rsa","name":"rsa.misc.alarmname","type":"keyword"},"rsa.misc.app_id":{"category":"rsa","name":"rsa.misc.app_id","type":"keyword"},"rsa.misc.audit":{"category":"rsa","name":"rsa.misc.audit","type":"keyword"},"rsa.misc.audit_object":{"category":"rsa","name":"rsa.misc.audit_object","type":"keyword"},"rsa.misc.auditdata":{"category":"rsa","name":"rsa.misc.auditdata","type":"keyword"},"rsa.misc.benchmark":{"category":"rsa","name":"rsa.misc.benchmark","type":"keyword"},"rsa.misc.bypass":{"category":"rsa","name":"rsa.misc.bypass","type":"keyword"},"rsa.misc.cache":{"category":"rsa","name":"rsa.misc.cache","type":"keyword"},"rsa.misc.cache_hit":{"category":"rsa","name":"rsa.misc.cache_hit","type":"keyword"},"rsa.misc.cefversion":{"category":"rsa","name":"rsa.misc.cefversion","type":"keyword"},"rsa.misc.cfg_attr":{"category":"rsa","name":"rsa.misc.cfg_attr","type":"keyword"},"rsa.misc.cfg_obj":{"category":"rsa","name":"rsa.misc.cfg_obj","type":"keyword"},"rsa.misc.cfg_path":{"category":"rsa","name":"rsa.misc.cfg_path","type":"keyword"},"rsa.misc.changes":{"category":"rsa","name":"rsa.misc.changes","type":"keyword"},"rsa.misc.client_ip":{"category":"rsa","name":"rsa.misc.client_ip","type":"keyword"},"rsa.misc.clustermembers":{"category":"rsa","name":"rsa.misc.clustermembers","type":"keyword"},"rsa.misc.cn_acttimeout":{"category":"rsa","name":"rsa.misc.cn_acttimeout","type":"keyword"},"rsa.misc.cn_asn_src":{"category":"rsa","name":"rsa.misc.cn_asn_src","type":"keyword"},"rsa.misc.cn_bgpv4nxthop":{"category":"rsa","name":"rsa.misc.cn_bgpv4nxthop","type":"keyword"},"rsa.misc.cn_ctr_dst_code":{"category":"rsa","name":"rsa.misc.cn_ctr_dst_code","type":"keyword"},"rsa.misc.cn_dst_tos":{"category":"rsa","name":"rsa.misc.cn_dst_tos","type":"keyword"},"rsa.misc.cn_dst_vlan":{"category":"rsa","name":"rsa.misc.cn_dst_vlan","type":"keyword"},"rsa.misc.cn_engine_id":{"category":"rsa","name":"rsa.misc.cn_engine_id","type":"keyword"},"rsa.misc.cn_engine_type":{"category":"rsa","name":"rsa.misc.cn_engine_type","type":"keyword"},"rsa.misc.cn_f_switch":{"category":"rsa","name":"rsa.misc.cn_f_switch","type":"keyword"},"rsa.misc.cn_flowsampid":{"category":"rsa","name":"rsa.misc.cn_flowsampid","type":"keyword"},"rsa.misc.cn_flowsampintv":{"category":"rsa","name":"rsa.misc.cn_flowsampintv","type":"keyword"},"rsa.misc.cn_flowsampmode":{"category":"rsa","name":"rsa.misc.cn_flowsampmode","type":"keyword"},"rsa.misc.cn_inacttimeout":{"category":"rsa","name":"rsa.misc.cn_inacttimeout","type":"keyword"},"rsa.misc.cn_inpermbyts":{"category":"rsa","name":"rsa.misc.cn_inpermbyts","type":"keyword"},"rsa.misc.cn_inpermpckts":{"category":"rsa","name":"rsa.misc.cn_inpermpckts","type":"keyword"},"rsa.misc.cn_invalid":{"category":"rsa","name":"rsa.misc.cn_invalid","type":"keyword"},"rsa.misc.cn_ip_proto_ver":{"category":"rsa","name":"rsa.misc.cn_ip_proto_ver","type":"keyword"},"rsa.misc.cn_ipv4_ident":{"category":"rsa","name":"rsa.misc.cn_ipv4_ident","type":"keyword"},"rsa.misc.cn_l_switch":{"category":"rsa","name":"rsa.misc.cn_l_switch","type":"keyword"},"rsa.misc.cn_log_did":{"category":"rsa","name":"rsa.misc.cn_log_did","type":"keyword"},"rsa.misc.cn_log_rid":{"category":"rsa","name":"rsa.misc.cn_log_rid","type":"keyword"},"rsa.misc.cn_max_ttl":{"category":"rsa","name":"rsa.misc.cn_max_ttl","type":"keyword"},"rsa.misc.cn_maxpcktlen":{"category":"rsa","name":"rsa.misc.cn_maxpcktlen","type":"keyword"},"rsa.misc.cn_min_ttl":{"category":"rsa","name":"rsa.misc.cn_min_ttl","type":"keyword"},"rsa.misc.cn_minpcktlen":{"category":"rsa","name":"rsa.misc.cn_minpcktlen","type":"keyword"},"rsa.misc.cn_mpls_lbl_1":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_1","type":"keyword"},"rsa.misc.cn_mpls_lbl_10":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_10","type":"keyword"},"rsa.misc.cn_mpls_lbl_2":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_2","type":"keyword"},"rsa.misc.cn_mpls_lbl_3":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_3","type":"keyword"},"rsa.misc.cn_mpls_lbl_4":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_4","type":"keyword"},"rsa.misc.cn_mpls_lbl_5":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_5","type":"keyword"},"rsa.misc.cn_mpls_lbl_6":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_6","type":"keyword"},"rsa.misc.cn_mpls_lbl_7":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_7","type":"keyword"},"rsa.misc.cn_mpls_lbl_8":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_8","type":"keyword"},"rsa.misc.cn_mpls_lbl_9":{"category":"rsa","name":"rsa.misc.cn_mpls_lbl_9","type":"keyword"},"rsa.misc.cn_mplstoplabel":{"category":"rsa","name":"rsa.misc.cn_mplstoplabel","type":"keyword"},"rsa.misc.cn_mplstoplabip":{"category":"rsa","name":"rsa.misc.cn_mplstoplabip","type":"keyword"},"rsa.misc.cn_mul_dst_byt":{"category":"rsa","name":"rsa.misc.cn_mul_dst_byt","type":"keyword"},"rsa.misc.cn_mul_dst_pks":{"category":"rsa","name":"rsa.misc.cn_mul_dst_pks","type":"keyword"},"rsa.misc.cn_muligmptype":{"category":"rsa","name":"rsa.misc.cn_muligmptype","type":"keyword"},"rsa.misc.cn_sampalgo":{"category":"rsa","name":"rsa.misc.cn_sampalgo","type":"keyword"},"rsa.misc.cn_sampint":{"category":"rsa","name":"rsa.misc.cn_sampint","type":"keyword"},"rsa.misc.cn_seqctr":{"category":"rsa","name":"rsa.misc.cn_seqctr","type":"keyword"},"rsa.misc.cn_spackets":{"category":"rsa","name":"rsa.misc.cn_spackets","type":"keyword"},"rsa.misc.cn_src_tos":{"category":"rsa","name":"rsa.misc.cn_src_tos","type":"keyword"},"rsa.misc.cn_src_vlan":{"category":"rsa","name":"rsa.misc.cn_src_vlan","type":"keyword"},"rsa.misc.cn_sysuptime":{"category":"rsa","name":"rsa.misc.cn_sysuptime","type":"keyword"},"rsa.misc.cn_template_id":{"category":"rsa","name":"rsa.misc.cn_template_id","type":"keyword"},"rsa.misc.cn_totbytsexp":{"category":"rsa","name":"rsa.misc.cn_totbytsexp","type":"keyword"},"rsa.misc.cn_totflowexp":{"category":"rsa","name":"rsa.misc.cn_totflowexp","type":"keyword"},"rsa.misc.cn_totpcktsexp":{"category":"rsa","name":"rsa.misc.cn_totpcktsexp","type":"keyword"},"rsa.misc.cn_unixnanosecs":{"category":"rsa","name":"rsa.misc.cn_unixnanosecs","type":"keyword"},"rsa.misc.cn_v6flowlabel":{"category":"rsa","name":"rsa.misc.cn_v6flowlabel","type":"keyword"},"rsa.misc.cn_v6optheaders":{"category":"rsa","name":"rsa.misc.cn_v6optheaders","type":"keyword"},"rsa.misc.comp_class":{"category":"rsa","name":"rsa.misc.comp_class","type":"keyword"},"rsa.misc.comp_name":{"category":"rsa","name":"rsa.misc.comp_name","type":"keyword"},"rsa.misc.comp_rbytes":{"category":"rsa","name":"rsa.misc.comp_rbytes","type":"keyword"},"rsa.misc.comp_sbytes":{"category":"rsa","name":"rsa.misc.comp_sbytes","type":"keyword"},"rsa.misc.cpu_data":{"category":"rsa","name":"rsa.misc.cpu_data","type":"keyword"},"rsa.misc.criticality":{"category":"rsa","name":"rsa.misc.criticality","type":"keyword"},"rsa.misc.cs_agency_dst":{"category":"rsa","name":"rsa.misc.cs_agency_dst","type":"keyword"},"rsa.misc.cs_analyzedby":{"category":"rsa","name":"rsa.misc.cs_analyzedby","type":"keyword"},"rsa.misc.cs_av_other":{"category":"rsa","name":"rsa.misc.cs_av_other","type":"keyword"},"rsa.misc.cs_av_primary":{"category":"rsa","name":"rsa.misc.cs_av_primary","type":"keyword"},"rsa.misc.cs_av_secondary":{"category":"rsa","name":"rsa.misc.cs_av_secondary","type":"keyword"},"rsa.misc.cs_bgpv6nxthop":{"category":"rsa","name":"rsa.misc.cs_bgpv6nxthop","type":"keyword"},"rsa.misc.cs_bit9status":{"category":"rsa","name":"rsa.misc.cs_bit9status","type":"keyword"},"rsa.misc.cs_context":{"category":"rsa","name":"rsa.misc.cs_context","type":"keyword"},"rsa.misc.cs_control":{"category":"rsa","name":"rsa.misc.cs_control","type":"keyword"},"rsa.misc.cs_data":{"category":"rsa","name":"rsa.misc.cs_data","type":"keyword"},"rsa.misc.cs_datecret":{"category":"rsa","name":"rsa.misc.cs_datecret","type":"keyword"},"rsa.misc.cs_dst_tld":{"category":"rsa","name":"rsa.misc.cs_dst_tld","type":"keyword"},"rsa.misc.cs_eth_dst_ven":{"category":"rsa","name":"rsa.misc.cs_eth_dst_ven","type":"keyword"},"rsa.misc.cs_eth_src_ven":{"category":"rsa","name":"rsa.misc.cs_eth_src_ven","type":"keyword"},"rsa.misc.cs_event_uuid":{"category":"rsa","name":"rsa.misc.cs_event_uuid","type":"keyword"},"rsa.misc.cs_filetype":{"category":"rsa","name":"rsa.misc.cs_filetype","type":"keyword"},"rsa.misc.cs_fld":{"category":"rsa","name":"rsa.misc.cs_fld","type":"keyword"},"rsa.misc.cs_if_desc":{"category":"rsa","name":"rsa.misc.cs_if_desc","type":"keyword"},"rsa.misc.cs_if_name":{"category":"rsa","name":"rsa.misc.cs_if_name","type":"keyword"},"rsa.misc.cs_ip_next_hop":{"category":"rsa","name":"rsa.misc.cs_ip_next_hop","type":"keyword"},"rsa.misc.cs_ipv4dstpre":{"category":"rsa","name":"rsa.misc.cs_ipv4dstpre","type":"keyword"},"rsa.misc.cs_ipv4srcpre":{"category":"rsa","name":"rsa.misc.cs_ipv4srcpre","type":"keyword"},"rsa.misc.cs_lifetime":{"category":"rsa","name":"rsa.misc.cs_lifetime","type":"keyword"},"rsa.misc.cs_log_medium":{"category":"rsa","name":"rsa.misc.cs_log_medium","type":"keyword"},"rsa.misc.cs_loginname":{"category":"rsa","name":"rsa.misc.cs_loginname","type":"keyword"},"rsa.misc.cs_modulescore":{"category":"rsa","name":"rsa.misc.cs_modulescore","type":"keyword"},"rsa.misc.cs_modulesign":{"category":"rsa","name":"rsa.misc.cs_modulesign","type":"keyword"},"rsa.misc.cs_opswatresult":{"category":"rsa","name":"rsa.misc.cs_opswatresult","type":"keyword"},"rsa.misc.cs_payload":{"category":"rsa","name":"rsa.misc.cs_payload","type":"keyword"},"rsa.misc.cs_registrant":{"category":"rsa","name":"rsa.misc.cs_registrant","type":"keyword"},"rsa.misc.cs_registrar":{"category":"rsa","name":"rsa.misc.cs_registrar","type":"keyword"},"rsa.misc.cs_represult":{"category":"rsa","name":"rsa.misc.cs_represult","type":"keyword"},"rsa.misc.cs_rpayload":{"category":"rsa","name":"rsa.misc.cs_rpayload","type":"keyword"},"rsa.misc.cs_sampler_name":{"category":"rsa","name":"rsa.misc.cs_sampler_name","type":"keyword"},"rsa.misc.cs_sourcemodule":{"category":"rsa","name":"rsa.misc.cs_sourcemodule","type":"keyword"},"rsa.misc.cs_streams":{"category":"rsa","name":"rsa.misc.cs_streams","type":"keyword"},"rsa.misc.cs_targetmodule":{"category":"rsa","name":"rsa.misc.cs_targetmodule","type":"keyword"},"rsa.misc.cs_v6nxthop":{"category":"rsa","name":"rsa.misc.cs_v6nxthop","type":"keyword"},"rsa.misc.cs_whois_server":{"category":"rsa","name":"rsa.misc.cs_whois_server","type":"keyword"},"rsa.misc.cs_yararesult":{"category":"rsa","name":"rsa.misc.cs_yararesult","type":"keyword"},"rsa.misc.description":{"category":"rsa","name":"rsa.misc.description","type":"keyword"},"rsa.misc.devvendor":{"category":"rsa","name":"rsa.misc.devvendor","type":"keyword"},"rsa.misc.distance":{"category":"rsa","name":"rsa.misc.distance","type":"keyword"},"rsa.misc.dstburb":{"category":"rsa","name":"rsa.misc.dstburb","type":"keyword"},"rsa.misc.edomain":{"category":"rsa","name":"rsa.misc.edomain","type":"keyword"},"rsa.misc.edomaub":{"category":"rsa","name":"rsa.misc.edomaub","type":"keyword"},"rsa.misc.euid":{"category":"rsa","name":"rsa.misc.euid","type":"keyword"},"rsa.misc.facility":{"category":"rsa","name":"rsa.misc.facility","type":"keyword"},"rsa.misc.finterface":{"category":"rsa","name":"rsa.misc.finterface","type":"keyword"},"rsa.misc.flags":{"category":"rsa","name":"rsa.misc.flags","type":"keyword"},"rsa.misc.gaddr":{"category":"rsa","name":"rsa.misc.gaddr","type":"keyword"},"rsa.misc.id3":{"category":"rsa","name":"rsa.misc.id3","type":"keyword"},"rsa.misc.im_buddyname":{"category":"rsa","name":"rsa.misc.im_buddyname","type":"keyword"},"rsa.misc.im_croomid":{"category":"rsa","name":"rsa.misc.im_croomid","type":"keyword"},"rsa.misc.im_croomtype":{"category":"rsa","name":"rsa.misc.im_croomtype","type":"keyword"},"rsa.misc.im_members":{"category":"rsa","name":"rsa.misc.im_members","type":"keyword"},"rsa.misc.im_username":{"category":"rsa","name":"rsa.misc.im_username","type":"keyword"},"rsa.misc.ipkt":{"category":"rsa","name":"rsa.misc.ipkt","type":"keyword"},"rsa.misc.ipscat":{"category":"rsa","name":"rsa.misc.ipscat","type":"keyword"},"rsa.misc.ipspri":{"category":"rsa","name":"rsa.misc.ipspri","type":"keyword"},"rsa.misc.latitude":{"category":"rsa","name":"rsa.misc.latitude","type":"keyword"},"rsa.misc.linenum":{"category":"rsa","name":"rsa.misc.linenum","type":"keyword"},"rsa.misc.list_name":{"category":"rsa","name":"rsa.misc.list_name","type":"keyword"},"rsa.misc.load_data":{"category":"rsa","name":"rsa.misc.load_data","type":"keyword"},"rsa.misc.location_floor":{"category":"rsa","name":"rsa.misc.location_floor","type":"keyword"},"rsa.misc.location_mark":{"category":"rsa","name":"rsa.misc.location_mark","type":"keyword"},"rsa.misc.log_id":{"category":"rsa","name":"rsa.misc.log_id","type":"keyword"},"rsa.misc.log_type":{"category":"rsa","name":"rsa.misc.log_type","type":"keyword"},"rsa.misc.logid":{"category":"rsa","name":"rsa.misc.logid","type":"keyword"},"rsa.misc.logip":{"category":"rsa","name":"rsa.misc.logip","type":"keyword"},"rsa.misc.logname":{"category":"rsa","name":"rsa.misc.logname","type":"keyword"},"rsa.misc.longitude":{"category":"rsa","name":"rsa.misc.longitude","type":"keyword"},"rsa.misc.lport":{"category":"rsa","name":"rsa.misc.lport","type":"keyword"},"rsa.misc.mbug_data":{"category":"rsa","name":"rsa.misc.mbug_data","type":"keyword"},"rsa.misc.misc_name":{"category":"rsa","name":"rsa.misc.misc_name","type":"keyword"},"rsa.misc.msg_type":{"category":"rsa","name":"rsa.misc.msg_type","type":"keyword"},"rsa.misc.msgid":{"category":"rsa","name":"rsa.misc.msgid","type":"keyword"},"rsa.misc.netsessid":{"category":"rsa","name":"rsa.misc.netsessid","type":"keyword"},"rsa.misc.num":{"category":"rsa","name":"rsa.misc.num","type":"keyword"},"rsa.misc.number1":{"category":"rsa","name":"rsa.misc.number1","type":"keyword"},"rsa.misc.number2":{"category":"rsa","name":"rsa.misc.number2","type":"keyword"},"rsa.misc.nwwn":{"category":"rsa","name":"rsa.misc.nwwn","type":"keyword"},"rsa.misc.object":{"category":"rsa","name":"rsa.misc.object","type":"keyword"},"rsa.misc.operation":{"category":"rsa","name":"rsa.misc.operation","type":"keyword"},"rsa.misc.opkt":{"category":"rsa","name":"rsa.misc.opkt","type":"keyword"},"rsa.misc.orig_from":{"category":"rsa","name":"rsa.misc.orig_from","type":"keyword"},"rsa.misc.owner_id":{"category":"rsa","name":"rsa.misc.owner_id","type":"keyword"},"rsa.misc.p_action":{"category":"rsa","name":"rsa.misc.p_action","type":"keyword"},"rsa.misc.p_filter":{"category":"rsa","name":"rsa.misc.p_filter","type":"keyword"},"rsa.misc.p_group_object":{"category":"rsa","name":"rsa.misc.p_group_object","type":"keyword"},"rsa.misc.p_id":{"category":"rsa","name":"rsa.misc.p_id","type":"keyword"},"rsa.misc.p_msgid1":{"category":"rsa","name":"rsa.misc.p_msgid1","type":"keyword"},"rsa.misc.p_msgid2":{"category":"rsa","name":"rsa.misc.p_msgid2","type":"keyword"},"rsa.misc.p_result1":{"category":"rsa","name":"rsa.misc.p_result1","type":"keyword"},"rsa.misc.password_chg":{"category":"rsa","name":"rsa.misc.password_chg","type":"keyword"},"rsa.misc.password_expire":{"category":"rsa","name":"rsa.misc.password_expire","type":"keyword"},"rsa.misc.permgranted":{"category":"rsa","name":"rsa.misc.permgranted","type":"keyword"},"rsa.misc.permwanted":{"category":"rsa","name":"rsa.misc.permwanted","type":"keyword"},"rsa.misc.pgid":{"category":"rsa","name":"rsa.misc.pgid","type":"keyword"},"rsa.misc.policyUUID":{"category":"rsa","name":"rsa.misc.policyUUID","type":"keyword"},"rsa.misc.prog_asp_num":{"category":"rsa","name":"rsa.misc.prog_asp_num","type":"keyword"},"rsa.misc.program":{"category":"rsa","name":"rsa.misc.program","type":"keyword"},"rsa.misc.real_data":{"category":"rsa","name":"rsa.misc.real_data","type":"keyword"},"rsa.misc.rec_asp_device":{"category":"rsa","name":"rsa.misc.rec_asp_device","type":"keyword"},"rsa.misc.rec_asp_num":{"category":"rsa","name":"rsa.misc.rec_asp_num","type":"keyword"},"rsa.misc.rec_library":{"category":"rsa","name":"rsa.misc.rec_library","type":"keyword"},"rsa.misc.recordnum":{"category":"rsa","name":"rsa.misc.recordnum","type":"keyword"},"rsa.misc.ruid":{"category":"rsa","name":"rsa.misc.ruid","type":"keyword"},"rsa.misc.sburb":{"category":"rsa","name":"rsa.misc.sburb","type":"keyword"},"rsa.misc.sdomain_fld":{"category":"rsa","name":"rsa.misc.sdomain_fld","type":"keyword"},"rsa.misc.sec":{"category":"rsa","name":"rsa.misc.sec","type":"keyword"},"rsa.misc.sensorname":{"category":"rsa","name":"rsa.misc.sensorname","type":"keyword"},"rsa.misc.seqnum":{"category":"rsa","name":"rsa.misc.seqnum","type":"keyword"},"rsa.misc.session":{"category":"rsa","name":"rsa.misc.session","type":"keyword"},"rsa.misc.sessiontype":{"category":"rsa","name":"rsa.misc.sessiontype","type":"keyword"},"rsa.misc.sigUUID":{"category":"rsa","name":"rsa.misc.sigUUID","type":"keyword"},"rsa.misc.spi":{"category":"rsa","name":"rsa.misc.spi","type":"keyword"},"rsa.misc.srcburb":{"category":"rsa","name":"rsa.misc.srcburb","type":"keyword"},"rsa.misc.srcdom":{"category":"rsa","name":"rsa.misc.srcdom","type":"keyword"},"rsa.misc.srcservice":{"category":"rsa","name":"rsa.misc.srcservice","type":"keyword"},"rsa.misc.state":{"category":"rsa","name":"rsa.misc.state","type":"keyword"},"rsa.misc.status1":{"category":"rsa","name":"rsa.misc.status1","type":"keyword"},"rsa.misc.svcno":{"category":"rsa","name":"rsa.misc.svcno","type":"keyword"},"rsa.misc.system":{"category":"rsa","name":"rsa.misc.system","type":"keyword"},"rsa.misc.tbdstr1":{"category":"rsa","name":"rsa.misc.tbdstr1","type":"keyword"},"rsa.misc.tgtdom":{"category":"rsa","name":"rsa.misc.tgtdom","type":"keyword"},"rsa.misc.tgtdomain":{"category":"rsa","name":"rsa.misc.tgtdomain","type":"keyword"},"rsa.misc.threshold":{"category":"rsa","name":"rsa.misc.threshold","type":"keyword"},"rsa.misc.type1":{"category":"rsa","name":"rsa.misc.type1","type":"keyword"},"rsa.misc.udb_class":{"category":"rsa","name":"rsa.misc.udb_class","type":"keyword"},"rsa.misc.url_fld":{"category":"rsa","name":"rsa.misc.url_fld","type":"keyword"},"rsa.misc.user_div":{"category":"rsa","name":"rsa.misc.user_div","type":"keyword"},"rsa.misc.userid":{"category":"rsa","name":"rsa.misc.userid","type":"keyword"},"rsa.misc.username_fld":{"category":"rsa","name":"rsa.misc.username_fld","type":"keyword"},"rsa.misc.utcstamp":{"category":"rsa","name":"rsa.misc.utcstamp","type":"keyword"},"rsa.misc.v_instafname":{"category":"rsa","name":"rsa.misc.v_instafname","type":"keyword"},"rsa.misc.virt_data":{"category":"rsa","name":"rsa.misc.virt_data","type":"keyword"},"rsa.misc.vpnid":{"category":"rsa","name":"rsa.misc.vpnid","type":"keyword"},"rsa.misc.autorun_type":{"category":"rsa","description":"This is used to capture Auto Run type","name":"rsa.misc.autorun_type","type":"keyword"},"rsa.misc.cc_number":{"category":"rsa","description":"Valid Credit Card Numbers only","name":"rsa.misc.cc_number","type":"long"},"rsa.misc.content":{"category":"rsa","description":"This key captures the content type from protocol headers","name":"rsa.misc.content","type":"keyword"},"rsa.misc.ein_number":{"category":"rsa","description":"Employee Identification Numbers only","name":"rsa.misc.ein_number","type":"long"},"rsa.misc.found":{"category":"rsa","description":"This is used to capture the results of regex match","name":"rsa.misc.found","type":"keyword"},"rsa.misc.language":{"category":"rsa","description":"This is used to capture list of languages the client support and what it prefers","name":"rsa.misc.language","type":"keyword"},"rsa.misc.lifetime":{"category":"rsa","description":"This key is used to capture the session lifetime in seconds.","name":"rsa.misc.lifetime","type":"long"},"rsa.misc.link":{"category":"rsa","description":"This key is used to link the sessions together. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness","name":"rsa.misc.link","type":"keyword"},"rsa.misc.match":{"category":"rsa","description":"This key is for regex match name from search.ini","name":"rsa.misc.match","type":"keyword"},"rsa.misc.param_dst":{"category":"rsa","description":"This key captures the command line/launch argument of the target process or file","name":"rsa.misc.param_dst","type":"keyword"},"rsa.misc.param_src":{"category":"rsa","description":"This key captures source parameter","name":"rsa.misc.param_src","type":"keyword"},"rsa.misc.search_text":{"category":"rsa","description":"This key captures the Search Text used","name":"rsa.misc.search_text","type":"keyword"},"rsa.misc.sig_name":{"category":"rsa","description":"This key is used to capture the Signature Name only.","name":"rsa.misc.sig_name","type":"keyword"},"rsa.misc.snmp_value":{"category":"rsa","description":"SNMP set request value","name":"rsa.misc.snmp_value","type":"keyword"},"rsa.misc.streams":{"category":"rsa","description":"This key captures number of streams in session","name":"rsa.misc.streams","type":"long"},"rsa.db.index":{"category":"rsa","description":"This key captures IndexID of the index.","name":"rsa.db.index","type":"keyword"},"rsa.db.instance":{"category":"rsa","description":"This key is used to capture the database server instance name","name":"rsa.db.instance","type":"keyword"},"rsa.db.database":{"category":"rsa","description":"This key is used to capture the name of a database or an instance as seen in a session","name":"rsa.db.database","type":"keyword"},"rsa.db.transact_id":{"category":"rsa","description":"This key captures the SQL transantion ID of the current session","name":"rsa.db.transact_id","type":"keyword"},"rsa.db.permissions":{"category":"rsa","description":"This key captures permission or privilege level assigned to a resource.","name":"rsa.db.permissions","type":"keyword"},"rsa.db.table_name":{"category":"rsa","description":"This key is used to capture the table name","name":"rsa.db.table_name","type":"keyword"},"rsa.db.db_id":{"category":"rsa","description":"This key is used to capture the unique identifier for a database","name":"rsa.db.db_id","type":"keyword"},"rsa.db.db_pid":{"category":"rsa","description":"This key captures the process id of a connection with database server","name":"rsa.db.db_pid","type":"long"},"rsa.db.lread":{"category":"rsa","description":"This key is used for the number of logical reads","name":"rsa.db.lread","type":"long"},"rsa.db.lwrite":{"category":"rsa","description":"This key is used for the number of logical writes","name":"rsa.db.lwrite","type":"long"},"rsa.db.pread":{"category":"rsa","description":"This key is used for the number of physical writes","name":"rsa.db.pread","type":"long"},"rsa.network.alias_host":{"category":"rsa","description":"This key should be used when the source or destination context of a hostname is not clear.Also it captures the Device Hostname. Any Hostname that isnt ad.computer.","name":"rsa.network.alias_host","type":"keyword"},"rsa.network.domain":{"category":"rsa","name":"rsa.network.domain","type":"keyword"},"rsa.network.host_dst":{"category":"rsa","description":"This key should only be used when it’s a Destination Hostname","name":"rsa.network.host_dst","type":"keyword"},"rsa.network.network_service":{"category":"rsa","description":"This is used to capture layer 7 protocols/service names","name":"rsa.network.network_service","type":"keyword"},"rsa.network.interface":{"category":"rsa","description":"This key should be used when the source or destination context of an interface is not clear","name":"rsa.network.interface","type":"keyword"},"rsa.network.network_port":{"category":"rsa","description":"Deprecated, use port. NOTE: There is a type discrepancy as currently used, TM: Int32, INDEX: UInt64 (why neither chose the correct UInt16?!)","name":"rsa.network.network_port","type":"long"},"rsa.network.eth_host":{"category":"rsa","description":"Deprecated, use alias.mac","name":"rsa.network.eth_host","type":"keyword"},"rsa.network.sinterface":{"category":"rsa","description":"This key should only be used when it’s a Source Interface","name":"rsa.network.sinterface","type":"keyword"},"rsa.network.dinterface":{"category":"rsa","description":"This key should only be used when it’s a Destination Interface","name":"rsa.network.dinterface","type":"keyword"},"rsa.network.vlan":{"category":"rsa","description":"This key should only be used to capture the ID of the Virtual LAN","name":"rsa.network.vlan","type":"long"},"rsa.network.zone_src":{"category":"rsa","description":"This key should only be used when it’s a Source Zone.","name":"rsa.network.zone_src","type":"keyword"},"rsa.network.zone":{"category":"rsa","description":"This key should be used when the source or destination context of a Zone is not clear","name":"rsa.network.zone","type":"keyword"},"rsa.network.zone_dst":{"category":"rsa","description":"This key should only be used when it’s a Destination Zone.","name":"rsa.network.zone_dst","type":"keyword"},"rsa.network.gateway":{"category":"rsa","description":"This key is used to capture the IP Address of the gateway","name":"rsa.network.gateway","type":"keyword"},"rsa.network.icmp_type":{"category":"rsa","description":"This key is used to capture the ICMP type only","name":"rsa.network.icmp_type","type":"long"},"rsa.network.mask":{"category":"rsa","description":"This key is used to capture the device network IPmask.","name":"rsa.network.mask","type":"keyword"},"rsa.network.icmp_code":{"category":"rsa","description":"This key is used to capture the ICMP code only","name":"rsa.network.icmp_code","type":"long"},"rsa.network.protocol_detail":{"category":"rsa","description":"This key should be used to capture additional protocol information","name":"rsa.network.protocol_detail","type":"keyword"},"rsa.network.dmask":{"category":"rsa","description":"This key is used for Destionation Device network mask","name":"rsa.network.dmask","type":"keyword"},"rsa.network.port":{"category":"rsa","description":"This key should only be used to capture a Network Port when the directionality is not clear","name":"rsa.network.port","type":"long"},"rsa.network.smask":{"category":"rsa","description":"This key is used for capturing source Network Mask","name":"rsa.network.smask","type":"keyword"},"rsa.network.netname":{"category":"rsa","description":"This key is used to capture the network name associated with an IP range. This is configured by the end user.","name":"rsa.network.netname","type":"keyword"},"rsa.network.paddr":{"category":"rsa","description":"Deprecated","name":"rsa.network.paddr","type":"ip"},"rsa.network.faddr":{"category":"rsa","name":"rsa.network.faddr","type":"keyword"},"rsa.network.lhost":{"category":"rsa","name":"rsa.network.lhost","type":"keyword"},"rsa.network.origin":{"category":"rsa","name":"rsa.network.origin","type":"keyword"},"rsa.network.remote_domain_id":{"category":"rsa","name":"rsa.network.remote_domain_id","type":"keyword"},"rsa.network.addr":{"category":"rsa","name":"rsa.network.addr","type":"keyword"},"rsa.network.dns_a_record":{"category":"rsa","name":"rsa.network.dns_a_record","type":"keyword"},"rsa.network.dns_ptr_record":{"category":"rsa","name":"rsa.network.dns_ptr_record","type":"keyword"},"rsa.network.fhost":{"category":"rsa","name":"rsa.network.fhost","type":"keyword"},"rsa.network.fport":{"category":"rsa","name":"rsa.network.fport","type":"keyword"},"rsa.network.laddr":{"category":"rsa","name":"rsa.network.laddr","type":"keyword"},"rsa.network.linterface":{"category":"rsa","name":"rsa.network.linterface","type":"keyword"},"rsa.network.phost":{"category":"rsa","name":"rsa.network.phost","type":"keyword"},"rsa.network.ad_computer_dst":{"category":"rsa","description":"Deprecated, use host.dst","name":"rsa.network.ad_computer_dst","type":"keyword"},"rsa.network.eth_type":{"category":"rsa","description":"This key is used to capture Ethernet Type, Used for Layer 3 Protocols Only","name":"rsa.network.eth_type","type":"long"},"rsa.network.ip_proto":{"category":"rsa","description":"This key should be used to capture the Protocol number, all the protocol nubers are converted into string in UI","name":"rsa.network.ip_proto","type":"long"},"rsa.network.dns_cname_record":{"category":"rsa","name":"rsa.network.dns_cname_record","type":"keyword"},"rsa.network.dns_id":{"category":"rsa","name":"rsa.network.dns_id","type":"keyword"},"rsa.network.dns_opcode":{"category":"rsa","name":"rsa.network.dns_opcode","type":"keyword"},"rsa.network.dns_resp":{"category":"rsa","name":"rsa.network.dns_resp","type":"keyword"},"rsa.network.dns_type":{"category":"rsa","name":"rsa.network.dns_type","type":"keyword"},"rsa.network.domain1":{"category":"rsa","name":"rsa.network.domain1","type":"keyword"},"rsa.network.host_type":{"category":"rsa","name":"rsa.network.host_type","type":"keyword"},"rsa.network.packet_length":{"category":"rsa","name":"rsa.network.packet_length","type":"keyword"},"rsa.network.host_orig":{"category":"rsa","description":"This is used to capture the original hostname in case of a Forwarding Agent or a Proxy in between.","name":"rsa.network.host_orig","type":"keyword"},"rsa.network.rpayload":{"category":"rsa","description":"This key is used to capture the total number of payload bytes seen in the retransmitted packets.","name":"rsa.network.rpayload","type":"keyword"},"rsa.network.vlan_name":{"category":"rsa","description":"This key should only be used to capture the name of the Virtual LAN","name":"rsa.network.vlan_name","type":"keyword"},"rsa.investigations.ec_activity":{"category":"rsa","description":"This key captures the particular event activity(Ex:Logoff)","name":"rsa.investigations.ec_activity","type":"keyword"},"rsa.investigations.ec_theme":{"category":"rsa","description":"This key captures the Theme of a particular Event(Ex:Authentication)","name":"rsa.investigations.ec_theme","type":"keyword"},"rsa.investigations.ec_subject":{"category":"rsa","description":"This key captures the Subject of a particular Event(Ex:User)","name":"rsa.investigations.ec_subject","type":"keyword"},"rsa.investigations.ec_outcome":{"category":"rsa","description":"This key captures the outcome of a particular Event(Ex:Success)","name":"rsa.investigations.ec_outcome","type":"keyword"},"rsa.investigations.event_cat":{"category":"rsa","description":"This key captures the Event category number","name":"rsa.investigations.event_cat","type":"long"},"rsa.investigations.event_cat_name":{"category":"rsa","description":"This key captures the event category name corresponding to the event cat code","name":"rsa.investigations.event_cat_name","type":"keyword"},"rsa.investigations.event_vcat":{"category":"rsa","description":"This is a vendor supplied category. This should be used in situations where the vendor has adopted their own event_category taxonomy.","name":"rsa.investigations.event_vcat","type":"keyword"},"rsa.investigations.analysis_file":{"category":"rsa","description":"This is used to capture all indicators used in a File Analysis. This key should be used to capture an analysis of a file","name":"rsa.investigations.analysis_file","type":"keyword"},"rsa.investigations.analysis_service":{"category":"rsa","description":"This is used to capture all indicators used in a Service Analysis. This key should be used to capture an analysis of a service","name":"rsa.investigations.analysis_service","type":"keyword"},"rsa.investigations.analysis_session":{"category":"rsa","description":"This is used to capture all indicators used for a Session Analysis. This key should be used to capture an analysis of a session","name":"rsa.investigations.analysis_session","type":"keyword"},"rsa.investigations.boc":{"category":"rsa","description":"This is used to capture behaviour of compromise","name":"rsa.investigations.boc","type":"keyword"},"rsa.investigations.eoc":{"category":"rsa","description":"This is used to capture Enablers of Compromise","name":"rsa.investigations.eoc","type":"keyword"},"rsa.investigations.inv_category":{"category":"rsa","description":"This used to capture investigation category","name":"rsa.investigations.inv_category","type":"keyword"},"rsa.investigations.inv_context":{"category":"rsa","description":"This used to capture investigation context","name":"rsa.investigations.inv_context","type":"keyword"},"rsa.investigations.ioc":{"category":"rsa","description":"This is key capture indicator of compromise","name":"rsa.investigations.ioc","type":"keyword"},"rsa.counters.dclass_c1":{"category":"rsa","description":"This is a generic counter key that should be used with the label dclass.c1.str only","name":"rsa.counters.dclass_c1","type":"long"},"rsa.counters.dclass_c2":{"category":"rsa","description":"This is a generic counter key that should be used with the label dclass.c2.str only","name":"rsa.counters.dclass_c2","type":"long"},"rsa.counters.event_counter":{"category":"rsa","description":"This is used to capture the number of times an event repeated","name":"rsa.counters.event_counter","type":"long"},"rsa.counters.dclass_r1":{"category":"rsa","description":"This is a generic ratio key that should be used with the label dclass.r1.str only","name":"rsa.counters.dclass_r1","type":"keyword"},"rsa.counters.dclass_c3":{"category":"rsa","description":"This is a generic counter key that should be used with the label dclass.c3.str only","name":"rsa.counters.dclass_c3","type":"long"},"rsa.counters.dclass_c1_str":{"category":"rsa","description":"This is a generic counter string key that should be used with the label dclass.c1 only","name":"rsa.counters.dclass_c1_str","type":"keyword"},"rsa.counters.dclass_c2_str":{"category":"rsa","description":"This is a generic counter string key that should be used with the label dclass.c2 only","name":"rsa.counters.dclass_c2_str","type":"keyword"},"rsa.counters.dclass_r1_str":{"category":"rsa","description":"This is a generic ratio string key that should be used with the label dclass.r1 only","name":"rsa.counters.dclass_r1_str","type":"keyword"},"rsa.counters.dclass_r2":{"category":"rsa","description":"This is a generic ratio key that should be used with the label dclass.r2.str only","name":"rsa.counters.dclass_r2","type":"keyword"},"rsa.counters.dclass_c3_str":{"category":"rsa","description":"This is a generic counter string key that should be used with the label dclass.c3 only","name":"rsa.counters.dclass_c3_str","type":"keyword"},"rsa.counters.dclass_r3":{"category":"rsa","description":"This is a generic ratio key that should be used with the label dclass.r3.str only","name":"rsa.counters.dclass_r3","type":"keyword"},"rsa.counters.dclass_r2_str":{"category":"rsa","description":"This is a generic ratio string key that should be used with the label dclass.r2 only","name":"rsa.counters.dclass_r2_str","type":"keyword"},"rsa.counters.dclass_r3_str":{"category":"rsa","description":"This is a generic ratio string key that should be used with the label dclass.r3 only","name":"rsa.counters.dclass_r3_str","type":"keyword"},"rsa.identity.auth_method":{"category":"rsa","description":"This key is used to capture authentication methods used only","name":"rsa.identity.auth_method","type":"keyword"},"rsa.identity.user_role":{"category":"rsa","description":"This key is used to capture the Role of a user only","name":"rsa.identity.user_role","type":"keyword"},"rsa.identity.dn":{"category":"rsa","description":"X.500 (LDAP) Distinguished Name","name":"rsa.identity.dn","type":"keyword"},"rsa.identity.logon_type":{"category":"rsa","description":"This key is used to capture the type of logon method used.","name":"rsa.identity.logon_type","type":"keyword"},"rsa.identity.profile":{"category":"rsa","description":"This key is used to capture the user profile","name":"rsa.identity.profile","type":"keyword"},"rsa.identity.accesses":{"category":"rsa","description":"This key is used to capture actual privileges used in accessing an object","name":"rsa.identity.accesses","type":"keyword"},"rsa.identity.realm":{"category":"rsa","description":"Radius realm or similar grouping of accounts","name":"rsa.identity.realm","type":"keyword"},"rsa.identity.user_sid_dst":{"category":"rsa","description":"This key captures Destination User Session ID","name":"rsa.identity.user_sid_dst","type":"keyword"},"rsa.identity.dn_src":{"category":"rsa","description":"An X.500 (LDAP) Distinguished name that is used in a context that indicates a Source dn","name":"rsa.identity.dn_src","type":"keyword"},"rsa.identity.org":{"category":"rsa","description":"This key captures the User organization","name":"rsa.identity.org","type":"keyword"},"rsa.identity.dn_dst":{"category":"rsa","description":"An X.500 (LDAP) Distinguished name that used in a context that indicates a Destination dn","name":"rsa.identity.dn_dst","type":"keyword"},"rsa.identity.firstname":{"category":"rsa","description":"This key is for First Names only, this is used for Healthcare predominantly to capture Patients information","name":"rsa.identity.firstname","type":"keyword"},"rsa.identity.lastname":{"category":"rsa","description":"This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information","name":"rsa.identity.lastname","type":"keyword"},"rsa.identity.user_dept":{"category":"rsa","description":"User's Department Names only","name":"rsa.identity.user_dept","type":"keyword"},"rsa.identity.user_sid_src":{"category":"rsa","description":"This key captures Source User Session ID","name":"rsa.identity.user_sid_src","type":"keyword"},"rsa.identity.federated_sp":{"category":"rsa","description":"This key is the Federated Service Provider. This is the application requesting authentication.","name":"rsa.identity.federated_sp","type":"keyword"},"rsa.identity.federated_idp":{"category":"rsa","description":"This key is the federated Identity Provider. This is the server providing the authentication.","name":"rsa.identity.federated_idp","type":"keyword"},"rsa.identity.logon_type_desc":{"category":"rsa","description":"This key is used to capture the textual description of an integer logon type as stored in the meta key 'logon.type'.","name":"rsa.identity.logon_type_desc","type":"keyword"},"rsa.identity.middlename":{"category":"rsa","description":"This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information","name":"rsa.identity.middlename","type":"keyword"},"rsa.identity.password":{"category":"rsa","description":"This key is for Passwords seen in any session, plain text or encrypted","name":"rsa.identity.password","type":"keyword"},"rsa.identity.host_role":{"category":"rsa","description":"This key should only be used to capture the role of a Host Machine","name":"rsa.identity.host_role","type":"keyword"},"rsa.identity.ldap":{"category":"rsa","description":"This key is for Uninterpreted LDAP values. Ldap Values that don’t have a clear query or response context","name":"rsa.identity.ldap","type":"keyword"},"rsa.identity.ldap_query":{"category":"rsa","description":"This key is the Search criteria from an LDAP search","name":"rsa.identity.ldap_query","type":"keyword"},"rsa.identity.ldap_response":{"category":"rsa","description":"This key is to capture Results from an LDAP search","name":"rsa.identity.ldap_response","type":"keyword"},"rsa.identity.owner":{"category":"rsa","description":"This is used to capture username the process or service is running as, the author of the task","name":"rsa.identity.owner","type":"keyword"},"rsa.identity.service_account":{"category":"rsa","description":"This key is a windows specific key, used for capturing name of the account a service (referenced in the event) is running under. Legacy Usage","name":"rsa.identity.service_account","type":"keyword"},"rsa.email.email_dst":{"category":"rsa","description":"This key is used to capture the Destination email address only, when the destination context is not clear use email","name":"rsa.email.email_dst","type":"keyword"},"rsa.email.email_src":{"category":"rsa","description":"This key is used to capture the source email address only, when the source context is not clear use email","name":"rsa.email.email_src","type":"keyword"},"rsa.email.subject":{"category":"rsa","description":"This key is used to capture the subject string from an Email only.","name":"rsa.email.subject","type":"keyword"},"rsa.email.email":{"category":"rsa","description":"This key is used to capture a generic email address where the source or destination context is not clear","name":"rsa.email.email","type":"keyword"},"rsa.email.trans_from":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.email.trans_from","type":"keyword"},"rsa.email.trans_to":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.email.trans_to","type":"keyword"},"rsa.file.privilege":{"category":"rsa","description":"Deprecated, use permissions","name":"rsa.file.privilege","type":"keyword"},"rsa.file.attachment":{"category":"rsa","description":"This key captures the attachment file name","name":"rsa.file.attachment","type":"keyword"},"rsa.file.filesystem":{"category":"rsa","name":"rsa.file.filesystem","type":"keyword"},"rsa.file.binary":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.file.binary","type":"keyword"},"rsa.file.filename_dst":{"category":"rsa","description":"This is used to capture name of the file targeted by the action","name":"rsa.file.filename_dst","type":"keyword"},"rsa.file.filename_src":{"category":"rsa","description":"This is used to capture name of the parent filename, the file which performed the action","name":"rsa.file.filename_src","type":"keyword"},"rsa.file.filename_tmp":{"category":"rsa","name":"rsa.file.filename_tmp","type":"keyword"},"rsa.file.directory_dst":{"category":"rsa","description":"This key is used to capture the directory of the target process or file","name":"rsa.file.directory_dst","type":"keyword"},"rsa.file.directory_src":{"category":"rsa","description":"This key is used to capture the directory of the source process or file","name":"rsa.file.directory_src","type":"keyword"},"rsa.file.file_entropy":{"category":"rsa","description":"This is used to capture entropy vale of a file","name":"rsa.file.file_entropy","type":"double"},"rsa.file.file_vendor":{"category":"rsa","description":"This is used to capture Company name of file located in version_info","name":"rsa.file.file_vendor","type":"keyword"},"rsa.file.task_name":{"category":"rsa","description":"This is used to capture name of the task","name":"rsa.file.task_name","type":"keyword"},"rsa.web.fqdn":{"category":"rsa","description":"Fully Qualified Domain Names","name":"rsa.web.fqdn","type":"keyword"},"rsa.web.web_cookie":{"category":"rsa","description":"This key is used to capture the Web cookies specifically.","name":"rsa.web.web_cookie","type":"keyword"},"rsa.web.alias_host":{"category":"rsa","name":"rsa.web.alias_host","type":"keyword"},"rsa.web.reputation_num":{"category":"rsa","description":"Reputation Number of an entity. Typically used for Web Domains","name":"rsa.web.reputation_num","type":"double"},"rsa.web.web_ref_domain":{"category":"rsa","description":"Web referer's domain","name":"rsa.web.web_ref_domain","type":"keyword"},"rsa.web.web_ref_query":{"category":"rsa","description":"This key captures Web referer's query portion of the URL","name":"rsa.web.web_ref_query","type":"keyword"},"rsa.web.remote_domain":{"category":"rsa","name":"rsa.web.remote_domain","type":"keyword"},"rsa.web.web_ref_page":{"category":"rsa","description":"This key captures Web referer's page information","name":"rsa.web.web_ref_page","type":"keyword"},"rsa.web.web_ref_root":{"category":"rsa","description":"Web referer's root URL path","name":"rsa.web.web_ref_root","type":"keyword"},"rsa.web.cn_asn_dst":{"category":"rsa","name":"rsa.web.cn_asn_dst","type":"keyword"},"rsa.web.cn_rpackets":{"category":"rsa","name":"rsa.web.cn_rpackets","type":"keyword"},"rsa.web.urlpage":{"category":"rsa","name":"rsa.web.urlpage","type":"keyword"},"rsa.web.urlroot":{"category":"rsa","name":"rsa.web.urlroot","type":"keyword"},"rsa.web.p_url":{"category":"rsa","name":"rsa.web.p_url","type":"keyword"},"rsa.web.p_user_agent":{"category":"rsa","name":"rsa.web.p_user_agent","type":"keyword"},"rsa.web.p_web_cookie":{"category":"rsa","name":"rsa.web.p_web_cookie","type":"keyword"},"rsa.web.p_web_method":{"category":"rsa","name":"rsa.web.p_web_method","type":"keyword"},"rsa.web.p_web_referer":{"category":"rsa","name":"rsa.web.p_web_referer","type":"keyword"},"rsa.web.web_extension_tmp":{"category":"rsa","name":"rsa.web.web_extension_tmp","type":"keyword"},"rsa.web.web_page":{"category":"rsa","name":"rsa.web.web_page","type":"keyword"},"rsa.threat.threat_category":{"category":"rsa","description":"This key captures Threat Name/Threat Category/Categorization of alert","name":"rsa.threat.threat_category","type":"keyword"},"rsa.threat.threat_desc":{"category":"rsa","description":"This key is used to capture the threat description from the session directly or inferred","name":"rsa.threat.threat_desc","type":"keyword"},"rsa.threat.alert":{"category":"rsa","description":"This key is used to capture name of the alert","name":"rsa.threat.alert","type":"keyword"},"rsa.threat.threat_source":{"category":"rsa","description":"This key is used to capture source of the threat","name":"rsa.threat.threat_source","type":"keyword"},"rsa.crypto.crypto":{"category":"rsa","description":"This key is used to capture the Encryption Type or Encryption Key only","name":"rsa.crypto.crypto","type":"keyword"},"rsa.crypto.cipher_src":{"category":"rsa","description":"This key is for Source (Client) Cipher","name":"rsa.crypto.cipher_src","type":"keyword"},"rsa.crypto.cert_subject":{"category":"rsa","description":"This key is used to capture the Certificate organization only","name":"rsa.crypto.cert_subject","type":"keyword"},"rsa.crypto.peer":{"category":"rsa","description":"This key is for Encryption peer's IP Address","name":"rsa.crypto.peer","type":"keyword"},"rsa.crypto.cipher_size_src":{"category":"rsa","description":"This key captures Source (Client) Cipher Size","name":"rsa.crypto.cipher_size_src","type":"long"},"rsa.crypto.ike":{"category":"rsa","description":"IKE negotiation phase.","name":"rsa.crypto.ike","type":"keyword"},"rsa.crypto.scheme":{"category":"rsa","description":"This key captures the Encryption scheme used","name":"rsa.crypto.scheme","type":"keyword"},"rsa.crypto.peer_id":{"category":"rsa","description":"This key is for Encryption peer’s identity","name":"rsa.crypto.peer_id","type":"keyword"},"rsa.crypto.sig_type":{"category":"rsa","description":"This key captures the Signature Type","name":"rsa.crypto.sig_type","type":"keyword"},"rsa.crypto.cert_issuer":{"category":"rsa","name":"rsa.crypto.cert_issuer","type":"keyword"},"rsa.crypto.cert_host_name":{"category":"rsa","description":"Deprecated key defined only in table map.","name":"rsa.crypto.cert_host_name","type":"keyword"},"rsa.crypto.cert_error":{"category":"rsa","description":"This key captures the Certificate Error String","name":"rsa.crypto.cert_error","type":"keyword"},"rsa.crypto.cipher_dst":{"category":"rsa","description":"This key is for Destination (Server) Cipher","name":"rsa.crypto.cipher_dst","type":"keyword"},"rsa.crypto.cipher_size_dst":{"category":"rsa","description":"This key captures Destination (Server) Cipher Size","name":"rsa.crypto.cipher_size_dst","type":"long"},"rsa.crypto.ssl_ver_src":{"category":"rsa","description":"Deprecated, use version","name":"rsa.crypto.ssl_ver_src","type":"keyword"},"rsa.crypto.d_certauth":{"category":"rsa","name":"rsa.crypto.d_certauth","type":"keyword"},"rsa.crypto.s_certauth":{"category":"rsa","name":"rsa.crypto.s_certauth","type":"keyword"},"rsa.crypto.ike_cookie1":{"category":"rsa","description":"ID of the negotiation — sent for ISAKMP Phase One","name":"rsa.crypto.ike_cookie1","type":"keyword"},"rsa.crypto.ike_cookie2":{"category":"rsa","description":"ID of the negotiation — sent for ISAKMP Phase Two","name":"rsa.crypto.ike_cookie2","type":"keyword"},"rsa.crypto.cert_checksum":{"category":"rsa","name":"rsa.crypto.cert_checksum","type":"keyword"},"rsa.crypto.cert_host_cat":{"category":"rsa","description":"This key is used for the hostname category value of a certificate","name":"rsa.crypto.cert_host_cat","type":"keyword"},"rsa.crypto.cert_serial":{"category":"rsa","description":"This key is used to capture the Certificate serial number only","name":"rsa.crypto.cert_serial","type":"keyword"},"rsa.crypto.cert_status":{"category":"rsa","description":"This key captures Certificate validation status","name":"rsa.crypto.cert_status","type":"keyword"},"rsa.crypto.ssl_ver_dst":{"category":"rsa","description":"Deprecated, use version","name":"rsa.crypto.ssl_ver_dst","type":"keyword"},"rsa.crypto.cert_keysize":{"category":"rsa","name":"rsa.crypto.cert_keysize","type":"keyword"},"rsa.crypto.cert_username":{"category":"rsa","name":"rsa.crypto.cert_username","type":"keyword"},"rsa.crypto.https_insact":{"category":"rsa","name":"rsa.crypto.https_insact","type":"keyword"},"rsa.crypto.https_valid":{"category":"rsa","name":"rsa.crypto.https_valid","type":"keyword"},"rsa.crypto.cert_ca":{"category":"rsa","description":"This key is used to capture the Certificate signing authority only","name":"rsa.crypto.cert_ca","type":"keyword"},"rsa.crypto.cert_common":{"category":"rsa","description":"This key is used to capture the Certificate common name only","name":"rsa.crypto.cert_common","type":"keyword"},"rsa.wireless.wlan_ssid":{"category":"rsa","description":"This key is used to capture the ssid of a Wireless Session","name":"rsa.wireless.wlan_ssid","type":"keyword"},"rsa.wireless.access_point":{"category":"rsa","description":"This key is used to capture the access point name.","name":"rsa.wireless.access_point","type":"keyword"},"rsa.wireless.wlan_channel":{"category":"rsa","description":"This is used to capture the channel names","name":"rsa.wireless.wlan_channel","type":"long"},"rsa.wireless.wlan_name":{"category":"rsa","description":"This key captures either WLAN number/name","name":"rsa.wireless.wlan_name","type":"keyword"},"rsa.storage.disk_volume":{"category":"rsa","description":"A unique name assigned to logical units (volumes) within a physical disk","name":"rsa.storage.disk_volume","type":"keyword"},"rsa.storage.lun":{"category":"rsa","description":"Logical Unit Number.This key is a very useful concept in Storage.","name":"rsa.storage.lun","type":"keyword"},"rsa.storage.pwwn":{"category":"rsa","description":"This uniquely identifies a port on a HBA.","name":"rsa.storage.pwwn","type":"keyword"},"rsa.physical.org_dst":{"category":"rsa","description":"This is used to capture the destination organization based on the GEOPIP Maxmind database.","name":"rsa.physical.org_dst","type":"keyword"},"rsa.physical.org_src":{"category":"rsa","description":"This is used to capture the source organization based on the GEOPIP Maxmind database.","name":"rsa.physical.org_src","type":"keyword"},"rsa.healthcare.patient_fname":{"category":"rsa","description":"This key is for First Names only, this is used for Healthcare predominantly to capture Patients information","name":"rsa.healthcare.patient_fname","type":"keyword"},"rsa.healthcare.patient_id":{"category":"rsa","description":"This key captures the unique ID for a patient","name":"rsa.healthcare.patient_id","type":"keyword"},"rsa.healthcare.patient_lname":{"category":"rsa","description":"This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information","name":"rsa.healthcare.patient_lname","type":"keyword"},"rsa.healthcare.patient_mname":{"category":"rsa","description":"This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information","name":"rsa.healthcare.patient_mname","type":"keyword"},"rsa.endpoint.host_state":{"category":"rsa","description":"This key is used to capture the current state of the machine, such as blacklisted, infected, firewall disabled and so on","name":"rsa.endpoint.host_state","type":"keyword"},"rsa.endpoint.registry_key":{"category":"rsa","description":"This key captures the path to the registry key","name":"rsa.endpoint.registry_key","type":"keyword"},"rsa.endpoint.registry_value":{"category":"rsa","description":"This key captures values or decorators used within a registry entry","name":"rsa.endpoint.registry_value","type":"keyword"},"forcepoint.virus_id":{"category":"forcepoint","description":"Virus ID ","name":"forcepoint.virus_id","type":"keyword"},"checkpoint.app_risk":{"category":"checkpoint","description":"Application risk.","name":"checkpoint.app_risk","type":"keyword"},"checkpoint.app_severity":{"category":"checkpoint","description":"Application threat severity.","name":"checkpoint.app_severity","type":"keyword"},"checkpoint.app_sig_id":{"category":"checkpoint","description":"The signature ID which the application was detected by.","name":"checkpoint.app_sig_id","type":"keyword"},"checkpoint.auth_method":{"category":"checkpoint","description":"Password authentication protocol used.","name":"checkpoint.auth_method","type":"keyword"},"checkpoint.category":{"category":"checkpoint","description":"Category.","name":"checkpoint.category","type":"keyword"},"checkpoint.confidence_level":{"category":"checkpoint","description":"Confidence level determined.","name":"checkpoint.confidence_level","type":"integer"},"checkpoint.connectivity_state":{"category":"checkpoint","description":"Connectivity state.","name":"checkpoint.connectivity_state","type":"keyword"},"checkpoint.cookie":{"category":"checkpoint","description":"IKE cookie.","name":"checkpoint.cookie","type":"keyword"},"checkpoint.dst_phone_number":{"category":"checkpoint","description":"Destination IP-Phone.","name":"checkpoint.dst_phone_number","type":"keyword"},"checkpoint.email_control":{"category":"checkpoint","description":"Engine name.","name":"checkpoint.email_control","type":"keyword"},"checkpoint.email_id":{"category":"checkpoint","description":"Internal email ID.","name":"checkpoint.email_id","type":"keyword"},"checkpoint.email_recipients_num":{"category":"checkpoint","description":"Number of recipients.","name":"checkpoint.email_recipients_num","type":"long"},"checkpoint.email_session_id":{"category":"checkpoint","description":"Internal email session ID.","name":"checkpoint.email_session_id","type":"keyword"},"checkpoint.email_spool_id":{"category":"checkpoint","description":"Internal email spool ID.","name":"checkpoint.email_spool_id","type":"keyword"},"checkpoint.email_subject":{"category":"checkpoint","description":"Email subject.","name":"checkpoint.email_subject","type":"keyword"},"checkpoint.event_count":{"category":"checkpoint","description":"Number of events associated with the log.","name":"checkpoint.event_count","type":"long"},"checkpoint.frequency":{"category":"checkpoint","description":"Scan frequency.","name":"checkpoint.frequency","type":"keyword"},"checkpoint.icmp_type":{"category":"checkpoint","description":"ICMP type.","name":"checkpoint.icmp_type","type":"long"},"checkpoint.icmp_code":{"category":"checkpoint","description":"ICMP code.","name":"checkpoint.icmp_code","type":"long"},"checkpoint.identity_type":{"category":"checkpoint","description":"Identity type.","name":"checkpoint.identity_type","type":"keyword"},"checkpoint.incident_extension":{"category":"checkpoint","description":"Format of original data.","name":"checkpoint.incident_extension","type":"keyword"},"checkpoint.integrity_av_invoke_type":{"category":"checkpoint","description":"Scan invoke type.","name":"checkpoint.integrity_av_invoke_type","type":"keyword"},"checkpoint.malware_family":{"category":"checkpoint","description":"Malware family.","name":"checkpoint.malware_family","type":"keyword"},"checkpoint.peer_gateway":{"category":"checkpoint","description":"Main IP of the peer Security Gateway.","name":"checkpoint.peer_gateway","type":"ip"},"checkpoint.performance_impact":{"category":"checkpoint","description":"Protection performance impact.","name":"checkpoint.performance_impact","type":"integer"},"checkpoint.protection_id":{"category":"checkpoint","description":"Protection malware ID.","name":"checkpoint.protection_id","type":"keyword"},"checkpoint.protection_name":{"category":"checkpoint","description":"Specific signature name of the attack.","name":"checkpoint.protection_name","type":"keyword"},"checkpoint.protection_type":{"category":"checkpoint","description":"Type of protection used to detect the attack.","name":"checkpoint.protection_type","type":"keyword"},"checkpoint.scan_result":{"category":"checkpoint","description":"Scan result.","name":"checkpoint.scan_result","type":"keyword"},"checkpoint.sensor_mode":{"category":"checkpoint","description":"Sensor mode.","name":"checkpoint.sensor_mode","type":"keyword"},"checkpoint.severity":{"category":"checkpoint","description":"Threat severity.","name":"checkpoint.severity","type":"keyword"},"checkpoint.spyware_name":{"category":"checkpoint","description":"Spyware name.","name":"checkpoint.spyware_name","type":"keyword"},"checkpoint.spyware_status":{"category":"checkpoint","description":"Spyware status.","name":"checkpoint.spyware_status","type":"keyword"},"checkpoint.subs_exp":{"category":"checkpoint","description":"The expiration date of the subscription.","name":"checkpoint.subs_exp","type":"date"},"checkpoint.tcp_flags":{"category":"checkpoint","description":"TCP packet flags.","name":"checkpoint.tcp_flags","type":"keyword"},"checkpoint.termination_reason":{"category":"checkpoint","description":"Termination reason.","name":"checkpoint.termination_reason","type":"keyword"},"checkpoint.update_status":{"category":"checkpoint","description":"Update status.","name":"checkpoint.update_status","type":"keyword"},"checkpoint.user_status":{"category":"checkpoint","description":"User response.","name":"checkpoint.user_status","type":"keyword"},"checkpoint.uuid":{"category":"checkpoint","description":"External ID.","name":"checkpoint.uuid","type":"keyword"},"checkpoint.virus_name":{"category":"checkpoint","description":"Virus name.","name":"checkpoint.virus_name","type":"keyword"},"checkpoint.voip_log_type":{"category":"checkpoint","description":"VoIP log types.","name":"checkpoint.voip_log_type","type":"keyword"},"cef.extensions.cp_app_risk":{"category":"cef","name":"cef.extensions.cp_app_risk","type":"keyword"},"cef.extensions.cp_severity":{"category":"cef","name":"cef.extensions.cp_severity","type":"keyword"},"cef.extensions.ifname":{"category":"cef","name":"cef.extensions.ifname","type":"keyword"},"cef.extensions.inzone":{"category":"cef","name":"cef.extensions.inzone","type":"keyword"},"cef.extensions.layer_uuid":{"category":"cef","name":"cef.extensions.layer_uuid","type":"keyword"},"cef.extensions.layer_name":{"category":"cef","name":"cef.extensions.layer_name","type":"keyword"},"cef.extensions.logid":{"category":"cef","name":"cef.extensions.logid","type":"keyword"},"cef.extensions.loguid":{"category":"cef","name":"cef.extensions.loguid","type":"keyword"},"cef.extensions.match_id":{"category":"cef","name":"cef.extensions.match_id","type":"keyword"},"cef.extensions.nat_addtnl_rulenum":{"category":"cef","name":"cef.extensions.nat_addtnl_rulenum","type":"keyword"},"cef.extensions.nat_rulenum":{"category":"cef","name":"cef.extensions.nat_rulenum","type":"keyword"},"cef.extensions.origin":{"category":"cef","name":"cef.extensions.origin","type":"keyword"},"cef.extensions.originsicname":{"category":"cef","name":"cef.extensions.originsicname","type":"keyword"},"cef.extensions.outzone":{"category":"cef","name":"cef.extensions.outzone","type":"keyword"},"cef.extensions.parent_rule":{"category":"cef","name":"cef.extensions.parent_rule","type":"keyword"},"cef.extensions.product":{"category":"cef","name":"cef.extensions.product","type":"keyword"},"cef.extensions.rule_action":{"category":"cef","name":"cef.extensions.rule_action","type":"keyword"},"cef.extensions.rule_uid":{"category":"cef","name":"cef.extensions.rule_uid","type":"keyword"},"cef.extensions.sequencenum":{"category":"cef","name":"cef.extensions.sequencenum","type":"keyword"},"cef.extensions.service_id":{"category":"cef","name":"cef.extensions.service_id","type":"keyword"},"cef.extensions.version":{"category":"cef","name":"cef.extensions.version","type":"keyword"},"checkpoint.calc_desc":{"category":"checkpoint","description":"Log description. ","name":"checkpoint.calc_desc","type":"keyword"},"checkpoint.dst_country":{"category":"checkpoint","description":"Destination country. ","name":"checkpoint.dst_country","type":"keyword"},"checkpoint.dst_user_name":{"category":"checkpoint","description":"Connected user name on the destination IP. ","name":"checkpoint.dst_user_name","type":"keyword"},"checkpoint.sys_message":{"category":"checkpoint","description":"System messages ","name":"checkpoint.sys_message","type":"keyword"},"checkpoint.logid":{"category":"checkpoint","description":"System messages ","name":"checkpoint.logid","type":"keyword"},"checkpoint.failure_impact":{"category":"checkpoint","description":"The impact of update service failure. ","name":"checkpoint.failure_impact","type":"keyword"},"checkpoint.id":{"category":"checkpoint","description":"Override application ID. ","name":"checkpoint.id","type":"integer"},"checkpoint.information":{"category":"checkpoint","description":"Policy installation status for a specific blade. ","name":"checkpoint.information","type":"keyword"},"checkpoint.layer_name":{"category":"checkpoint","description":"Layer name. ","name":"checkpoint.layer_name","type":"keyword"},"checkpoint.layer_uuid":{"category":"checkpoint","description":"Layer UUID. ","name":"checkpoint.layer_uuid","type":"keyword"},"checkpoint.log_id":{"category":"checkpoint","description":"Unique identity for logs. ","name":"checkpoint.log_id","type":"integer"},"checkpoint.origin_sic_name":{"category":"checkpoint","description":"Machine SIC. ","name":"checkpoint.origin_sic_name","type":"keyword"},"checkpoint.policy_mgmt":{"category":"checkpoint","description":"Name of the Management Server that manages this Security Gateway. ","name":"checkpoint.policy_mgmt","type":"keyword"},"checkpoint.policy_name":{"category":"checkpoint","description":"Name of the last policy that this Security Gateway fetched. ","name":"checkpoint.policy_name","type":"keyword"},"checkpoint.protocol":{"category":"checkpoint","description":"Protocol detected on the connection. ","name":"checkpoint.protocol","type":"keyword"},"checkpoint.proxy_src_ip":{"category":"checkpoint","description":"Sender source IP (even when using proxy). ","name":"checkpoint.proxy_src_ip","type":"ip"},"checkpoint.rule":{"category":"checkpoint","description":"Matched rule number. ","name":"checkpoint.rule","type":"integer"},"checkpoint.rule_action":{"category":"checkpoint","description":"Action of the matched rule in the access policy. ","name":"checkpoint.rule_action","type":"keyword"},"checkpoint.scan_direction":{"category":"checkpoint","description":"Scan direction. ","name":"checkpoint.scan_direction","type":"keyword"},"checkpoint.session_id":{"category":"checkpoint","description":"Log uuid. ","name":"checkpoint.session_id","type":"keyword"},"checkpoint.source_os":{"category":"checkpoint","description":"OS which generated the attack. ","name":"checkpoint.source_os","type":"keyword"},"checkpoint.src_country":{"category":"checkpoint","description":"Country name, derived from connection source IP address. ","name":"checkpoint.src_country","type":"keyword"},"checkpoint.src_user_name":{"category":"checkpoint","description":"User name connected to source IP ","name":"checkpoint.src_user_name","type":"keyword"},"checkpoint.ticket_id":{"category":"checkpoint","description":"Unique ID per file. ","name":"checkpoint.ticket_id","type":"keyword"},"checkpoint.tls_server_host_name":{"category":"checkpoint","description":"SNI/CN from encrypted TLS connection used by URLF for categorization. ","name":"checkpoint.tls_server_host_name","type":"keyword"},"checkpoint.verdict":{"category":"checkpoint","description":"TE engine verdict Possible values: Malicious/Benign/Error. ","name":"checkpoint.verdict","type":"keyword"},"checkpoint.user":{"category":"checkpoint","description":"Source user name. ","name":"checkpoint.user","type":"keyword"},"checkpoint.vendor_list":{"category":"checkpoint","description":"The vendor name that provided the verdict for a malicious URL. ","name":"checkpoint.vendor_list","type":"keyword"},"checkpoint.web_server_type":{"category":"checkpoint","description":"Web server detected in the HTTP response. ","name":"checkpoint.web_server_type","type":"keyword"},"checkpoint.client_name":{"category":"checkpoint","description":"Client Application or Software Blade that detected the event. ","name":"checkpoint.client_name","type":"keyword"},"checkpoint.client_version":{"category":"checkpoint","description":"Build version of SandBlast Agent client installed on the computer. ","name":"checkpoint.client_version","type":"keyword"},"checkpoint.extension_version":{"category":"checkpoint","description":"Build version of the SandBlast Agent browser extension. ","name":"checkpoint.extension_version","type":"keyword"},"checkpoint.host_time":{"category":"checkpoint","description":"Local time on the endpoint computer. ","name":"checkpoint.host_time","type":"keyword"},"checkpoint.installed_products":{"category":"checkpoint","description":"List of installed Endpoint Software Blades. ","name":"checkpoint.installed_products","type":"keyword"},"checkpoint.cc":{"category":"checkpoint","description":"The Carbon Copy address of the email. ","name":"checkpoint.cc","type":"keyword"},"checkpoint.parent_process_username":{"category":"checkpoint","description":"Owner username of the parent process of the process that triggered the attack. ","name":"checkpoint.parent_process_username","type":"keyword"},"checkpoint.process_username":{"category":"checkpoint","description":"Owner username of the process that triggered the attack. ","name":"checkpoint.process_username","type":"keyword"},"checkpoint.audit_status":{"category":"checkpoint","description":"Audit Status. Can be Success or Failure. ","name":"checkpoint.audit_status","type":"keyword"},"checkpoint.objecttable":{"category":"checkpoint","description":"Table of affected objects. ","name":"checkpoint.objecttable","type":"keyword"},"checkpoint.objecttype":{"category":"checkpoint","description":"The type of the affected object. ","name":"checkpoint.objecttype","type":"keyword"},"checkpoint.operation_number":{"category":"checkpoint","description":"The operation nuber. ","name":"checkpoint.operation_number","type":"keyword"},"checkpoint.suppressed_logs":{"category":"checkpoint","description":"Aggregated connections for five minutes on the same source, destination and port. ","name":"checkpoint.suppressed_logs","type":"integer"},"checkpoint.blade_name":{"category":"checkpoint","description":"Blade name. ","name":"checkpoint.blade_name","type":"keyword"},"checkpoint.status":{"category":"checkpoint","description":"Ok/Warning/Error. ","name":"checkpoint.status","type":"keyword"},"checkpoint.short_desc":{"category":"checkpoint","description":"Short description of the process that was executed. ","name":"checkpoint.short_desc","type":"keyword"},"checkpoint.long_desc":{"category":"checkpoint","description":"More information on the process (usually describing error reason in failure). ","name":"checkpoint.long_desc","type":"keyword"},"checkpoint.scan_hosts_hour":{"category":"checkpoint","description":"Number of unique hosts during the last hour. ","name":"checkpoint.scan_hosts_hour","type":"integer"},"checkpoint.scan_hosts_day":{"category":"checkpoint","description":"Number of unique hosts during the last day. ","name":"checkpoint.scan_hosts_day","type":"integer"},"checkpoint.scan_hosts_week":{"category":"checkpoint","description":"Number of unique hosts during the last week. ","name":"checkpoint.scan_hosts_week","type":"integer"},"checkpoint.unique_detected_hour":{"category":"checkpoint","description":"Detected virus for a specific host during the last hour. ","name":"checkpoint.unique_detected_hour","type":"integer"},"checkpoint.unique_detected_day":{"category":"checkpoint","description":"Detected virus for a specific host during the last day. ","name":"checkpoint.unique_detected_day","type":"integer"},"checkpoint.unique_detected_week":{"category":"checkpoint","description":"Detected virus for a specific host during the last week. ","name":"checkpoint.unique_detected_week","type":"integer"},"checkpoint.scan_mail":{"category":"checkpoint","description":"Number of emails that were scanned by \"AB malicious activity\" engine. ","name":"checkpoint.scan_mail","type":"integer"},"checkpoint.additional_ip":{"category":"checkpoint","description":"DNS host name. ","name":"checkpoint.additional_ip","type":"keyword"},"checkpoint.description":{"category":"checkpoint","description":"Additional explanation how the security gateway enforced the connection. ","name":"checkpoint.description","type":"keyword"},"checkpoint.email_spam_category":{"category":"checkpoint","description":"Email categories. Possible values: spam/not spam/phishing. ","name":"checkpoint.email_spam_category","type":"keyword"},"checkpoint.email_control_analysis":{"category":"checkpoint","description":"Message classification, received from spam vendor engine. ","name":"checkpoint.email_control_analysis","type":"keyword"},"checkpoint.scan_results":{"category":"checkpoint","description":"\"Infected\"/description of a failure. ","name":"checkpoint.scan_results","type":"keyword"},"checkpoint.original_queue_id":{"category":"checkpoint","description":"Original postfix email queue id. ","name":"checkpoint.original_queue_id","type":"keyword"},"checkpoint.risk":{"category":"checkpoint","description":"Risk level we got from the engine. ","name":"checkpoint.risk","type":"keyword"},"checkpoint.observable_name":{"category":"checkpoint","description":"IOC observable signature name. ","name":"checkpoint.observable_name","type":"keyword"},"checkpoint.observable_id":{"category":"checkpoint","description":"IOC observable signature id. ","name":"checkpoint.observable_id","type":"keyword"},"checkpoint.observable_comment":{"category":"checkpoint","description":"IOC observable signature description. ","name":"checkpoint.observable_comment","type":"keyword"},"checkpoint.indicator_name":{"category":"checkpoint","description":"IOC indicator name. ","name":"checkpoint.indicator_name","type":"keyword"},"checkpoint.indicator_description":{"category":"checkpoint","description":"IOC indicator description. ","name":"checkpoint.indicator_description","type":"keyword"},"checkpoint.indicator_reference":{"category":"checkpoint","description":"IOC indicator reference. ","name":"checkpoint.indicator_reference","type":"keyword"},"checkpoint.indicator_uuid":{"category":"checkpoint","description":"IOC indicator uuid. ","name":"checkpoint.indicator_uuid","type":"keyword"},"checkpoint.app_desc":{"category":"checkpoint","description":"Application description. ","name":"checkpoint.app_desc","type":"keyword"},"checkpoint.app_id":{"category":"checkpoint","description":"Application ID. ","name":"checkpoint.app_id","type":"integer"},"checkpoint.certificate_resource":{"category":"checkpoint","description":"HTTPS resource Possible values: SNI or domain name (DN). ","name":"checkpoint.certificate_resource","type":"keyword"},"checkpoint.certificate_validation":{"category":"checkpoint","description":"Precise error, describing HTTPS certificate failure under \"HTTPS categorize websites\" feature. ","name":"checkpoint.certificate_validation","type":"keyword"},"checkpoint.browse_time":{"category":"checkpoint","description":"Application session browse time. ","name":"checkpoint.browse_time","type":"keyword"},"checkpoint.limit_requested":{"category":"checkpoint","description":"Indicates whether data limit was requested for the session. ","name":"checkpoint.limit_requested","type":"integer"},"checkpoint.limit_applied":{"category":"checkpoint","description":"Indicates whether the session was actually date limited. ","name":"checkpoint.limit_applied","type":"integer"},"checkpoint.dropped_total":{"category":"checkpoint","description":"Amount of dropped packets (both incoming and outgoing). ","name":"checkpoint.dropped_total","type":"integer"},"checkpoint.client_type_os":{"category":"checkpoint","description":"Client OS detected in the HTTP request. ","name":"checkpoint.client_type_os","type":"keyword"},"checkpoint.name":{"category":"checkpoint","description":"Application name. ","name":"checkpoint.name","type":"keyword"},"checkpoint.properties":{"category":"checkpoint","description":"Application categories. ","name":"checkpoint.properties","type":"keyword"},"checkpoint.sig_id":{"category":"checkpoint","description":"Application's signature ID which how it was detected by. ","name":"checkpoint.sig_id","type":"keyword"},"checkpoint.desc":{"category":"checkpoint","description":"Override application description. ","name":"checkpoint.desc","type":"keyword"},"checkpoint.referrer_self_uid":{"category":"checkpoint","description":"UUID of the current log. ","name":"checkpoint.referrer_self_uid","type":"keyword"},"checkpoint.referrer_parent_uid":{"category":"checkpoint","description":"Log UUID of the referring application. ","name":"checkpoint.referrer_parent_uid","type":"keyword"},"checkpoint.needs_browse_time":{"category":"checkpoint","description":"Browse time required for the connection. ","name":"checkpoint.needs_browse_time","type":"integer"},"checkpoint.cluster_info":{"category":"checkpoint","description":"Cluster information. Possible options: Failover reason/cluster state changes/CP cluster or 3rd party. ","name":"checkpoint.cluster_info","type":"keyword"},"checkpoint.sync":{"category":"checkpoint","description":"Sync status and the reason (stable, at risk). ","name":"checkpoint.sync","type":"keyword"},"checkpoint.file_direction":{"category":"checkpoint","description":"File direction. Possible options: upload/download. ","name":"checkpoint.file_direction","type":"keyword"},"checkpoint.invalid_file_size":{"category":"checkpoint","description":"File_size field is valid only if this field is set to 0. ","name":"checkpoint.invalid_file_size","type":"integer"},"checkpoint.top_archive_file_name":{"category":"checkpoint","description":"In case of archive file: the file that was sent/received. ","name":"checkpoint.top_archive_file_name","type":"keyword"},"checkpoint.data_type_name":{"category":"checkpoint","description":"Data type in rulebase that was matched. ","name":"checkpoint.data_type_name","type":"keyword"},"checkpoint.specific_data_type_name":{"category":"checkpoint","description":"Compound/Group scenario, data type that was matched. ","name":"checkpoint.specific_data_type_name","type":"keyword"},"checkpoint.word_list":{"category":"checkpoint","description":"Words matched by data type. ","name":"checkpoint.word_list","type":"keyword"},"checkpoint.info":{"category":"checkpoint","description":"Special log message. ","name":"checkpoint.info","type":"keyword"},"checkpoint.outgoing_url":{"category":"checkpoint","description":"URL related to this log (for HTTP). ","name":"checkpoint.outgoing_url","type":"keyword"},"checkpoint.dlp_rule_name":{"category":"checkpoint","description":"Matched rule name. ","name":"checkpoint.dlp_rule_name","type":"keyword"},"checkpoint.dlp_recipients":{"category":"checkpoint","description":"Mail recipients. ","name":"checkpoint.dlp_recipients","type":"keyword"},"checkpoint.dlp_subject":{"category":"checkpoint","description":"Mail subject. ","name":"checkpoint.dlp_subject","type":"keyword"},"checkpoint.dlp_word_list":{"category":"checkpoint","description":"Phrases matched by data type. ","name":"checkpoint.dlp_word_list","type":"keyword"},"checkpoint.dlp_template_score":{"category":"checkpoint","description":"Template data type match score. ","name":"checkpoint.dlp_template_score","type":"keyword"},"checkpoint.message_size":{"category":"checkpoint","description":"Mail/post size. ","name":"checkpoint.message_size","type":"integer"},"checkpoint.dlp_incident_uid":{"category":"checkpoint","description":"Unique ID of the matched rule. ","name":"checkpoint.dlp_incident_uid","type":"keyword"},"checkpoint.dlp_related_incident_uid":{"category":"checkpoint","description":"Other ID related to this one. ","name":"checkpoint.dlp_related_incident_uid","type":"keyword"},"checkpoint.dlp_data_type_name":{"category":"checkpoint","description":"Matched data type. ","name":"checkpoint.dlp_data_type_name","type":"keyword"},"checkpoint.dlp_data_type_uid":{"category":"checkpoint","description":"Unique ID of the matched data type. ","name":"checkpoint.dlp_data_type_uid","type":"keyword"},"checkpoint.dlp_violation_description":{"category":"checkpoint","description":"Violation descriptions described in the rulebase. ","name":"checkpoint.dlp_violation_description","type":"keyword"},"checkpoint.dlp_relevant_data_types":{"category":"checkpoint","description":"In case of Compound/Group: the inner data types that were matched. ","name":"checkpoint.dlp_relevant_data_types","type":"keyword"},"checkpoint.dlp_action_reason":{"category":"checkpoint","description":"Action chosen reason. ","name":"checkpoint.dlp_action_reason","type":"keyword"},"checkpoint.dlp_categories":{"category":"checkpoint","description":"Data type category. ","name":"checkpoint.dlp_categories","type":"keyword"},"checkpoint.dlp_transint":{"category":"checkpoint","description":"HTTP/SMTP/FTP. ","name":"checkpoint.dlp_transint","type":"keyword"},"checkpoint.duplicate":{"category":"checkpoint","description":"Log marked as duplicated, when mail is split and the Security Gateway sees it twice. ","name":"checkpoint.duplicate","type":"keyword"},"checkpoint.matched_file":{"category":"checkpoint","description":"Unique ID of the matched data type. ","name":"checkpoint.matched_file","type":"keyword"},"checkpoint.matched_file_text_segments":{"category":"checkpoint","description":"Fingerprint: number of text segments matched by this traffic. ","name":"checkpoint.matched_file_text_segments","type":"integer"},"checkpoint.matched_file_percentage":{"category":"checkpoint","description":"Fingerprint: match percentage of the traffic. ","name":"checkpoint.matched_file_percentage","type":"integer"},"checkpoint.dlp_additional_action":{"category":"checkpoint","description":"Watermark/None. ","name":"checkpoint.dlp_additional_action","type":"keyword"},"checkpoint.dlp_watermark_profile":{"category":"checkpoint","description":"Watermark which was applied. ","name":"checkpoint.dlp_watermark_profile","type":"keyword"},"checkpoint.dlp_repository_id":{"category":"checkpoint","description":"ID of scanned repository. ","name":"checkpoint.dlp_repository_id","type":"keyword"},"checkpoint.dlp_repository_root_path":{"category":"checkpoint","description":"Repository path. ","name":"checkpoint.dlp_repository_root_path","type":"keyword"},"checkpoint.scan_id":{"category":"checkpoint","description":"Sequential number of scan. ","name":"checkpoint.scan_id","type":"keyword"},"checkpoint.special_properties":{"category":"checkpoint","description":"If this field is set to '1' the log will not be shown (in use for monitoring scan progress). ","name":"checkpoint.special_properties","type":"integer"},"checkpoint.dlp_repository_total_size":{"category":"checkpoint","description":"Repository size. ","name":"checkpoint.dlp_repository_total_size","type":"integer"},"checkpoint.dlp_repository_files_number":{"category":"checkpoint","description":"Number of files in repository. ","name":"checkpoint.dlp_repository_files_number","type":"integer"},"checkpoint.dlp_repository_scanned_files_number":{"category":"checkpoint","description":"Number of scanned files in repository. ","name":"checkpoint.dlp_repository_scanned_files_number","type":"integer"},"checkpoint.duration":{"category":"checkpoint","description":"Scan duration. ","name":"checkpoint.duration","type":"keyword"},"checkpoint.dlp_fingerprint_long_status":{"category":"checkpoint","description":"Scan status - long format. ","name":"checkpoint.dlp_fingerprint_long_status","type":"keyword"},"checkpoint.dlp_fingerprint_short_status":{"category":"checkpoint","description":"Scan status - short format. ","name":"checkpoint.dlp_fingerprint_short_status","type":"keyword"},"checkpoint.dlp_repository_directories_number":{"category":"checkpoint","description":"Number of directories in repository. ","name":"checkpoint.dlp_repository_directories_number","type":"integer"},"checkpoint.dlp_repository_unreachable_directories_number":{"category":"checkpoint","description":"Number of directories the Security Gateway was unable to read. ","name":"checkpoint.dlp_repository_unreachable_directories_number","type":"integer"},"checkpoint.dlp_fingerprint_files_number":{"category":"checkpoint","description":"Number of successfully scanned files in repository. ","name":"checkpoint.dlp_fingerprint_files_number","type":"integer"},"checkpoint.dlp_repository_skipped_files_number":{"category":"checkpoint","description":"Skipped number of files because of configuration. ","name":"checkpoint.dlp_repository_skipped_files_number","type":"integer"},"checkpoint.dlp_repository_scanned_directories_number":{"category":"checkpoint","description":"Amount of directories scanned. ","name":"checkpoint.dlp_repository_scanned_directories_number","type":"integer"},"checkpoint.number_of_errors":{"category":"checkpoint","description":"Number of files that were not scanned due to an error. ","name":"checkpoint.number_of_errors","type":"integer"},"checkpoint.next_scheduled_scan_date":{"category":"checkpoint","description":"Next scan scheduled time according to time object. ","name":"checkpoint.next_scheduled_scan_date","type":"keyword"},"checkpoint.dlp_repository_scanned_total_size":{"category":"checkpoint","description":"Size scanned. ","name":"checkpoint.dlp_repository_scanned_total_size","type":"integer"},"checkpoint.dlp_repository_reached_directories_number":{"category":"checkpoint","description":"Number of scanned directories in repository. ","name":"checkpoint.dlp_repository_reached_directories_number","type":"integer"},"checkpoint.dlp_repository_not_scanned_directories_percentage":{"category":"checkpoint","description":"Percentage of directories the Security Gateway was unable to read. ","name":"checkpoint.dlp_repository_not_scanned_directories_percentage","type":"integer"},"checkpoint.speed":{"category":"checkpoint","description":"Current scan speed. ","name":"checkpoint.speed","type":"integer"},"checkpoint.dlp_repository_scan_progress":{"category":"checkpoint","description":"Scan percentage. ","name":"checkpoint.dlp_repository_scan_progress","type":"integer"},"checkpoint.sub_policy_name":{"category":"checkpoint","description":"Layer name. ","name":"checkpoint.sub_policy_name","type":"keyword"},"checkpoint.sub_policy_uid":{"category":"checkpoint","description":"Layer uid. ","name":"checkpoint.sub_policy_uid","type":"keyword"},"checkpoint.fw_message":{"category":"checkpoint","description":"Used for various firewall errors. ","name":"checkpoint.fw_message","type":"keyword"},"checkpoint.message":{"category":"checkpoint","description":"ISP link has failed. ","name":"checkpoint.message","type":"keyword"},"checkpoint.isp_link":{"category":"checkpoint","description":"Name of ISP link. ","name":"checkpoint.isp_link","type":"keyword"},"checkpoint.fw_subproduct":{"category":"checkpoint","description":"Can be vpn/non vpn. ","name":"checkpoint.fw_subproduct","type":"keyword"},"checkpoint.sctp_error":{"category":"checkpoint","description":"Error information, what caused sctp to fail on out_of_state. ","name":"checkpoint.sctp_error","type":"keyword"},"checkpoint.chunk_type":{"category":"checkpoint","description":"Chunck of the sctp stream. ","name":"checkpoint.chunk_type","type":"keyword"},"checkpoint.sctp_association_state":{"category":"checkpoint","description":"The bad state you were trying to update to. ","name":"checkpoint.sctp_association_state","type":"keyword"},"checkpoint.tcp_packet_out_of_state":{"category":"checkpoint","description":"State violation. ","name":"checkpoint.tcp_packet_out_of_state","type":"keyword"},"checkpoint.connectivity_level":{"category":"checkpoint","description":"Log for a new connection in wire mode. ","name":"checkpoint.connectivity_level","type":"keyword"},"checkpoint.ip_option":{"category":"checkpoint","description":"IP option that was dropped. ","name":"checkpoint.ip_option","type":"integer"},"checkpoint.tcp_state":{"category":"checkpoint","description":"Log reinting a tcp state change. ","name":"checkpoint.tcp_state","type":"keyword"},"checkpoint.expire_time":{"category":"checkpoint","description":"Connection closing time. ","name":"checkpoint.expire_time","type":"keyword"},"checkpoint.rpc_prog":{"category":"checkpoint","description":"Log for new RPC state - prog values. ","name":"checkpoint.rpc_prog","type":"integer"},"checkpoint.dce-rpc_interface_uuid":{"category":"checkpoint","description":"Log for new RPC state - UUID values ","name":"checkpoint.dce-rpc_interface_uuid","type":"keyword"},"checkpoint.elapsed":{"category":"checkpoint","description":"Time passed since start time. ","name":"checkpoint.elapsed","type":"keyword"},"checkpoint.icmp":{"category":"checkpoint","description":"Number of packets, received by the client. ","name":"checkpoint.icmp","type":"keyword"},"checkpoint.capture_uuid":{"category":"checkpoint","description":"UUID generated for the capture. Used when enabling the capture when logging. ","name":"checkpoint.capture_uuid","type":"keyword"},"checkpoint.diameter_app_ID":{"category":"checkpoint","description":"The ID of diameter application. ","name":"checkpoint.diameter_app_ID","type":"integer"},"checkpoint.diameter_cmd_code":{"category":"checkpoint","description":"Diameter not allowed application command id. ","name":"checkpoint.diameter_cmd_code","type":"integer"},"checkpoint.diameter_msg_type":{"category":"checkpoint","description":"Diameter message type. ","name":"checkpoint.diameter_msg_type","type":"keyword"},"checkpoint.cp_message":{"category":"checkpoint","description":"Used to log a general message. ","name":"checkpoint.cp_message","type":"integer"},"checkpoint.log_delay":{"category":"checkpoint","description":"Time left before deleting template. ","name":"checkpoint.log_delay","type":"integer"},"checkpoint.attack_status":{"category":"checkpoint","description":"In case of a malicious event on an endpoint computer, the status of the attack. ","name":"checkpoint.attack_status","type":"keyword"},"checkpoint.impacted_files":{"category":"checkpoint","description":"In case of an infection on an endpoint computer, the list of files that the malware impacted. ","name":"checkpoint.impacted_files","type":"keyword"},"checkpoint.remediated_files":{"category":"checkpoint","description":"In case of an infection and a successful cleaning of that infection, this is a list of remediated files on the computer. ","name":"checkpoint.remediated_files","type":"keyword"},"checkpoint.triggered_by":{"category":"checkpoint","description":"The name of the mechanism that triggered the Software Blade to enforce a protection. ","name":"checkpoint.triggered_by","type":"keyword"},"checkpoint.https_inspection_rule_id":{"category":"checkpoint","description":"ID of the matched rule. ","name":"checkpoint.https_inspection_rule_id","type":"keyword"},"checkpoint.https_inspection_rule_name":{"category":"checkpoint","description":"Name of the matched rule. ","name":"checkpoint.https_inspection_rule_name","type":"keyword"},"checkpoint.app_properties":{"category":"checkpoint","description":"List of all found categories. ","name":"checkpoint.app_properties","type":"keyword"},"checkpoint.https_validation":{"category":"checkpoint","description":"Precise error, describing HTTPS inspection failure. ","name":"checkpoint.https_validation","type":"keyword"},"checkpoint.https_inspection_action":{"category":"checkpoint","description":"HTTPS inspection action (Inspect/Bypass/Error). ","name":"checkpoint.https_inspection_action","type":"keyword"},"checkpoint.icap_service_id":{"category":"checkpoint","description":"Service ID, can work with multiple servers, treated as services. ","name":"checkpoint.icap_service_id","type":"integer"},"checkpoint.icap_server_name":{"category":"checkpoint","description":"Server name. ","name":"checkpoint.icap_server_name","type":"keyword"},"checkpoint.internal_error":{"category":"checkpoint","description":"Internal error, for troubleshooting ","name":"checkpoint.internal_error","type":"keyword"},"checkpoint.icap_more_info":{"category":"checkpoint","description":"Free text for verdict. ","name":"checkpoint.icap_more_info","type":"integer"},"checkpoint.reply_status":{"category":"checkpoint","description":"ICAP reply status code, e.g. 200 or 204. ","name":"checkpoint.reply_status","type":"integer"},"checkpoint.icap_server_service":{"category":"checkpoint","description":"Service name, as given in the ICAP URI ","name":"checkpoint.icap_server_service","type":"keyword"},"checkpoint.mirror_and_decrypt_type":{"category":"checkpoint","description":"Information about decrypt and forward. Possible values: Mirror only, Decrypt and mirror, Partial mirroring (HTTPS inspection Bypass). ","name":"checkpoint.mirror_and_decrypt_type","type":"keyword"},"checkpoint.interface_name":{"category":"checkpoint","description":"Designated interface for mirror And decrypt. ","name":"checkpoint.interface_name","type":"keyword"},"checkpoint.session_uid":{"category":"checkpoint","description":"HTTP session-id. ","name":"checkpoint.session_uid","type":"keyword"},"checkpoint.broker_publisher":{"category":"checkpoint","description":"IP address of the broker publisher who shared the session information. ","name":"checkpoint.broker_publisher","type":"ip"},"checkpoint.src_user_dn":{"category":"checkpoint","description":"User distinguished name connected to source IP. ","name":"checkpoint.src_user_dn","type":"keyword"},"checkpoint.proxy_user_name":{"category":"checkpoint","description":"User name connected to proxy IP. ","name":"checkpoint.proxy_user_name","type":"keyword"},"checkpoint.proxy_machine_name":{"category":"checkpoint","description":"Machine name connected to proxy IP. ","name":"checkpoint.proxy_machine_name","type":"integer"},"checkpoint.proxy_user_dn":{"category":"checkpoint","description":"User distinguished name connected to proxy IP. ","name":"checkpoint.proxy_user_dn","type":"keyword"},"checkpoint.query":{"category":"checkpoint","description":"DNS query. ","name":"checkpoint.query","type":"keyword"},"checkpoint.dns_query":{"category":"checkpoint","description":"DNS query. ","name":"checkpoint.dns_query","type":"keyword"},"checkpoint.inspection_item":{"category":"checkpoint","description":"Blade element performed inspection. ","name":"checkpoint.inspection_item","type":"keyword"},"checkpoint.inspection_category":{"category":"checkpoint","description":"Inspection category: protocol anomaly, signature etc. ","name":"checkpoint.inspection_category","type":"keyword"},"checkpoint.inspection_profile":{"category":"checkpoint","description":"Profile which the activated protection belongs to. ","name":"checkpoint.inspection_profile","type":"keyword"},"checkpoint.summary":{"category":"checkpoint","description":"Summary message of a non-compliant DNS traffic drops or detects. ","name":"checkpoint.summary","type":"keyword"},"checkpoint.question_rdata":{"category":"checkpoint","description":"List of question records domains. ","name":"checkpoint.question_rdata","type":"keyword"},"checkpoint.answer_rdata":{"category":"checkpoint","description":"List of answer resource records to the questioned domains. ","name":"checkpoint.answer_rdata","type":"keyword"},"checkpoint.authority_rdata":{"category":"checkpoint","description":"List of authoritative servers. ","name":"checkpoint.authority_rdata","type":"keyword"},"checkpoint.additional_rdata":{"category":"checkpoint","description":"List of additional resource records. ","name":"checkpoint.additional_rdata","type":"keyword"},"checkpoint.files_names":{"category":"checkpoint","description":"List of files requested by FTP. ","name":"checkpoint.files_names","type":"keyword"},"checkpoint.ftp_user":{"category":"checkpoint","description":"FTP username. ","name":"checkpoint.ftp_user","type":"keyword"},"checkpoint.mime_from":{"category":"checkpoint","description":"Sender's address. ","name":"checkpoint.mime_from","type":"keyword"},"checkpoint.mime_to":{"category":"checkpoint","description":"List of receiver address. ","name":"checkpoint.mime_to","type":"keyword"},"checkpoint.bcc":{"category":"checkpoint","description":"List of BCC addresses. ","name":"checkpoint.bcc","type":"keyword"},"checkpoint.content_type":{"category":"checkpoint","description":"Mail content type. Possible values: application/msword, text/html, image/gif etc. ","name":"checkpoint.content_type","type":"keyword"},"checkpoint.user_agent":{"category":"checkpoint","description":"String identifying requesting software user agent. ","name":"checkpoint.user_agent","type":"keyword"},"checkpoint.referrer":{"category":"checkpoint","description":"Referrer HTTP request header, previous web page address. ","name":"checkpoint.referrer","type":"keyword"},"checkpoint.http_location":{"category":"checkpoint","description":"Response header, indicates the URL to redirect a page to. ","name":"checkpoint.http_location","type":"keyword"},"checkpoint.content_disposition":{"category":"checkpoint","description":"Indicates how the content is expected to be displayed inline in the browser. ","name":"checkpoint.content_disposition","type":"keyword"},"checkpoint.via":{"category":"checkpoint","description":"Via header is added by proxies for tracking purposes to avoid sending reqests in loop. ","name":"checkpoint.via","type":"keyword"},"checkpoint.http_server":{"category":"checkpoint","description":"Server HTTP header value, contains information about the software used by the origin server, which handles the request. ","name":"checkpoint.http_server","type":"keyword"},"checkpoint.content_length":{"category":"checkpoint","description":"Indicates the size of the entity-body of the HTTP header. ","name":"checkpoint.content_length","type":"keyword"},"checkpoint.authorization":{"category":"checkpoint","description":"Authorization HTTP header value. ","name":"checkpoint.authorization","type":"keyword"},"checkpoint.http_host":{"category":"checkpoint","description":"Domain name of the server that the HTTP request is sent to. ","name":"checkpoint.http_host","type":"keyword"},"checkpoint.inspection_settings_log":{"category":"checkpoint","description":"Indicats that the log was released by inspection settings. ","name":"checkpoint.inspection_settings_log","type":"keyword"},"checkpoint.cvpn_resource":{"category":"checkpoint","description":"Mobile Access application. ","name":"checkpoint.cvpn_resource","type":"keyword"},"checkpoint.cvpn_category":{"category":"checkpoint","description":"Mobile Access application type. ","name":"checkpoint.cvpn_category","type":"keyword"},"checkpoint.url":{"category":"checkpoint","description":"Translated URL. ","name":"checkpoint.url","type":"keyword"},"checkpoint.reject_id":{"category":"checkpoint","description":"A reject ID that corresponds to the one presented in the Mobile Access error page. ","name":"checkpoint.reject_id","type":"keyword"},"checkpoint.fs-proto":{"category":"checkpoint","description":"The file share protocol used in mobile acess file share application. ","name":"checkpoint.fs-proto","type":"keyword"},"checkpoint.app_package":{"category":"checkpoint","description":"Unique identifier of the application on the protected mobile device. ","name":"checkpoint.app_package","type":"keyword"},"checkpoint.appi_name":{"category":"checkpoint","description":"Name of application downloaded on the protected mobile device. ","name":"checkpoint.appi_name","type":"keyword"},"checkpoint.app_repackaged":{"category":"checkpoint","description":"Indicates whether the original application was repackage not by the official developer. ","name":"checkpoint.app_repackaged","type":"keyword"},"checkpoint.app_sid_id":{"category":"checkpoint","description":"Unique SHA identifier of a mobile application. ","name":"checkpoint.app_sid_id","type":"keyword"},"checkpoint.app_version":{"category":"checkpoint","description":"Version of the application downloaded on the protected mobile device. ","name":"checkpoint.app_version","type":"keyword"},"checkpoint.developer_certificate_name":{"category":"checkpoint","description":"Name of the developer's certificate that was used to sign the mobile application. ","name":"checkpoint.developer_certificate_name","type":"keyword"},"checkpoint.email_message_id":{"category":"checkpoint","description":"Email session id (uniqe ID of the mail). ","name":"checkpoint.email_message_id","type":"keyword"},"checkpoint.email_queue_id":{"category":"checkpoint","description":"Postfix email queue id. ","name":"checkpoint.email_queue_id","type":"keyword"},"checkpoint.email_queue_name":{"category":"checkpoint","description":"Postfix email queue name. ","name":"checkpoint.email_queue_name","type":"keyword"},"checkpoint.file_name":{"category":"checkpoint","description":"Malicious file name. ","name":"checkpoint.file_name","type":"keyword"},"checkpoint.failure_reason":{"category":"checkpoint","description":"MTA failure description. ","name":"checkpoint.failure_reason","type":"keyword"},"checkpoint.email_headers":{"category":"checkpoint","description":"String containing all the email headers. ","name":"checkpoint.email_headers","type":"keyword"},"checkpoint.arrival_time":{"category":"checkpoint","description":"Email arrival timestamp. ","name":"checkpoint.arrival_time","type":"keyword"},"checkpoint.email_status":{"category":"checkpoint","description":"Describes the email's state. Possible options: delivered, deferred, skipped, bounced, hold, new, scan_started, scan_ended ","name":"checkpoint.email_status","type":"keyword"},"checkpoint.status_update":{"category":"checkpoint","description":"Last time log was updated. ","name":"checkpoint.status_update","type":"keyword"},"checkpoint.delivery_time":{"category":"checkpoint","description":"Timestamp of when email was delivered (MTA finished handling the email. ","name":"checkpoint.delivery_time","type":"keyword"},"checkpoint.links_num":{"category":"checkpoint","description":"Number of links in the mail. ","name":"checkpoint.links_num","type":"integer"},"checkpoint.attachments_num":{"category":"checkpoint","description":"Number of attachments in the mail. ","name":"checkpoint.attachments_num","type":"integer"},"checkpoint.email_content":{"category":"checkpoint","description":"Mail contents. Possible options: attachments/links & attachments/links/text only. ","name":"checkpoint.email_content","type":"keyword"},"checkpoint.allocated_ports":{"category":"checkpoint","description":"Amount of allocated ports. ","name":"checkpoint.allocated_ports","type":"integer"},"checkpoint.capacity":{"category":"checkpoint","description":"Capacity of the ports. ","name":"checkpoint.capacity","type":"integer"},"checkpoint.ports_usage":{"category":"checkpoint","description":"Percentage of allocated ports. ","name":"checkpoint.ports_usage","type":"integer"},"checkpoint.nat_exhausted_pool":{"category":"checkpoint","description":"4-tuple of an exhausted pool. ","name":"checkpoint.nat_exhausted_pool","type":"keyword"},"checkpoint.nat_rulenum":{"category":"checkpoint","description":"NAT rulebase first matched rule. ","name":"checkpoint.nat_rulenum","type":"integer"},"checkpoint.nat_addtnl_rulenum":{"category":"checkpoint","description":"When matching 2 automatic rules , second rule match will be shown otherwise field will be 0. ","name":"checkpoint.nat_addtnl_rulenum","type":"integer"},"checkpoint.message_info":{"category":"checkpoint","description":"Used for information messages, for example:NAT connection has ended. ","name":"checkpoint.message_info","type":"keyword"},"checkpoint.nat46":{"category":"checkpoint","description":"NAT 46 status, in most cases \"enabled\". ","name":"checkpoint.nat46","type":"keyword"},"checkpoint.end_time":{"category":"checkpoint","description":"TCP connection end time. ","name":"checkpoint.end_time","type":"keyword"},"checkpoint.tcp_end_reason":{"category":"checkpoint","description":"Reason for TCP connection closure. ","name":"checkpoint.tcp_end_reason","type":"keyword"},"checkpoint.cgnet":{"category":"checkpoint","description":"Describes NAT allocation for specific subscriber. ","name":"checkpoint.cgnet","type":"keyword"},"checkpoint.subscriber":{"category":"checkpoint","description":"Source IP before CGNAT. ","name":"checkpoint.subscriber","type":"ip"},"checkpoint.hide_ip":{"category":"checkpoint","description":"Source IP which will be used after CGNAT. ","name":"checkpoint.hide_ip","type":"ip"},"checkpoint.int_start":{"category":"checkpoint","description":"Subscriber start int which will be used for NAT. ","name":"checkpoint.int_start","type":"integer"},"checkpoint.int_end":{"category":"checkpoint","description":"Subscriber end int which will be used for NAT. ","name":"checkpoint.int_end","type":"integer"},"checkpoint.packet_amount":{"category":"checkpoint","description":"Amount of packets dropped. ","name":"checkpoint.packet_amount","type":"integer"},"checkpoint.monitor_reason":{"category":"checkpoint","description":"Aggregated logs of monitored packets. ","name":"checkpoint.monitor_reason","type":"keyword"},"checkpoint.drops_amount":{"category":"checkpoint","description":"Amount of multicast packets dropped. ","name":"checkpoint.drops_amount","type":"integer"},"checkpoint.securexl_message":{"category":"checkpoint","description":"Two options for a SecureXL message: 1. Missed accounting records after heavy load on logging system. 2. FW log message regarding a packet drop. ","name":"checkpoint.securexl_message","type":"keyword"},"checkpoint.conns_amount":{"category":"checkpoint","description":"Connections amount of aggregated log info. ","name":"checkpoint.conns_amount","type":"integer"},"checkpoint.scope":{"category":"checkpoint","description":"IP related to the attack. ","name":"checkpoint.scope","type":"keyword"},"checkpoint.analyzed_on":{"category":"checkpoint","description":"Check Point ThreatCloud / emulator name. ","name":"checkpoint.analyzed_on","type":"keyword"},"checkpoint.detected_on":{"category":"checkpoint","description":"System and applications version the file was emulated on. ","name":"checkpoint.detected_on","type":"keyword"},"checkpoint.dropped_file_name":{"category":"checkpoint","description":"List of names dropped from the original file. ","name":"checkpoint.dropped_file_name","type":"keyword"},"checkpoint.dropped_file_type":{"category":"checkpoint","description":"List of file types dropped from the original file. ","name":"checkpoint.dropped_file_type","type":"keyword"},"checkpoint.dropped_file_hash":{"category":"checkpoint","description":"List of file hashes dropped from the original file. ","name":"checkpoint.dropped_file_hash","type":"keyword"},"checkpoint.dropped_file_verdict":{"category":"checkpoint","description":"List of file verdics dropped from the original file. ","name":"checkpoint.dropped_file_verdict","type":"keyword"},"checkpoint.emulated_on":{"category":"checkpoint","description":"Images the files were emulated on. ","name":"checkpoint.emulated_on","type":"keyword"},"checkpoint.extracted_file_type":{"category":"checkpoint","description":"Types of extracted files in case of an archive. ","name":"checkpoint.extracted_file_type","type":"keyword"},"checkpoint.extracted_file_names":{"category":"checkpoint","description":"Names of extracted files in case of an archive. ","name":"checkpoint.extracted_file_names","type":"keyword"},"checkpoint.extracted_file_hash":{"category":"checkpoint","description":"Archive hash in case of extracted files. ","name":"checkpoint.extracted_file_hash","type":"keyword"},"checkpoint.extracted_file_verdict":{"category":"checkpoint","description":"Verdict of extracted files in case of an archive. ","name":"checkpoint.extracted_file_verdict","type":"keyword"},"checkpoint.extracted_file_uid":{"category":"checkpoint","description":"UID of extracted files in case of an archive. ","name":"checkpoint.extracted_file_uid","type":"keyword"},"checkpoint.mitre_initial_access":{"category":"checkpoint","description":"The adversary is trying to break into your network. ","name":"checkpoint.mitre_initial_access","type":"keyword"},"checkpoint.mitre_execution":{"category":"checkpoint","description":"The adversary is trying to run malicious code. ","name":"checkpoint.mitre_execution","type":"keyword"},"checkpoint.mitre_persistence":{"category":"checkpoint","description":"The adversary is trying to maintain his foothold. ","name":"checkpoint.mitre_persistence","type":"keyword"},"checkpoint.mitre_privilege_escalation":{"category":"checkpoint","description":"The adversary is trying to gain higher-level permissions. ","name":"checkpoint.mitre_privilege_escalation","type":"keyword"},"checkpoint.mitre_defense_evasion":{"category":"checkpoint","description":"The adversary is trying to avoid being detected. ","name":"checkpoint.mitre_defense_evasion","type":"keyword"},"checkpoint.mitre_credential_access":{"category":"checkpoint","description":"The adversary is trying to steal account names and passwords. ","name":"checkpoint.mitre_credential_access","type":"keyword"},"checkpoint.mitre_discovery":{"category":"checkpoint","description":"The adversary is trying to expose information about your environment. ","name":"checkpoint.mitre_discovery","type":"keyword"},"checkpoint.mitre_lateral_movement":{"category":"checkpoint","description":"The adversary is trying to explore your environment. ","name":"checkpoint.mitre_lateral_movement","type":"keyword"},"checkpoint.mitre_collection":{"category":"checkpoint","description":"The adversary is trying to collect data of interest to achieve his goal. ","name":"checkpoint.mitre_collection","type":"keyword"},"checkpoint.mitre_command_and_control":{"category":"checkpoint","description":"The adversary is trying to communicate with compromised systems in order to control them. ","name":"checkpoint.mitre_command_and_control","type":"keyword"},"checkpoint.mitre_exfiltration":{"category":"checkpoint","description":"The adversary is trying to steal data. ","name":"checkpoint.mitre_exfiltration","type":"keyword"},"checkpoint.mitre_impact":{"category":"checkpoint","description":"The adversary is trying to manipulate, interrupt, or destroy your systems and data. ","name":"checkpoint.mitre_impact","type":"keyword"},"checkpoint.parent_file_hash":{"category":"checkpoint","description":"Archive's hash in case of extracted files. ","name":"checkpoint.parent_file_hash","type":"keyword"},"checkpoint.parent_file_name":{"category":"checkpoint","description":"Archive's name in case of extracted files. ","name":"checkpoint.parent_file_name","type":"keyword"},"checkpoint.parent_file_uid":{"category":"checkpoint","description":"Archive's UID in case of extracted files. ","name":"checkpoint.parent_file_uid","type":"keyword"},"checkpoint.similiar_iocs":{"category":"checkpoint","description":"Other IoCs similar to the ones found, related to the malicious file. ","name":"checkpoint.similiar_iocs","type":"keyword"},"checkpoint.similar_hashes":{"category":"checkpoint","description":"Hashes found similar to the malicious file. ","name":"checkpoint.similar_hashes","type":"keyword"},"checkpoint.similar_strings":{"category":"checkpoint","description":"Strings found similar to the malicious file. ","name":"checkpoint.similar_strings","type":"keyword"},"checkpoint.similar_communication":{"category":"checkpoint","description":"Network action found similar to the malicious file. ","name":"checkpoint.similar_communication","type":"keyword"},"checkpoint.te_verdict_determined_by":{"category":"checkpoint","description":"Emulators determined file verdict. ","name":"checkpoint.te_verdict_determined_by","type":"keyword"},"checkpoint.packet_capture_unique_id":{"category":"checkpoint","description":"Identifier of the packet capture files. ","name":"checkpoint.packet_capture_unique_id","type":"keyword"},"checkpoint.total_attachments":{"category":"checkpoint","description":"The number of attachments in an email. ","name":"checkpoint.total_attachments","type":"integer"},"checkpoint.additional_info":{"category":"checkpoint","description":"ID of original file/mail which are sent by admin. ","name":"checkpoint.additional_info","type":"keyword"},"checkpoint.content_risk":{"category":"checkpoint","description":"File risk. ","name":"checkpoint.content_risk","type":"integer"},"checkpoint.operation":{"category":"checkpoint","description":"Operation made by Threat Extraction. ","name":"checkpoint.operation","type":"keyword"},"checkpoint.scrubbed_content":{"category":"checkpoint","description":"Active content that was found. ","name":"checkpoint.scrubbed_content","type":"keyword"},"checkpoint.scrub_time":{"category":"checkpoint","description":"Extraction process duration. ","name":"checkpoint.scrub_time","type":"keyword"},"checkpoint.scrub_download_time":{"category":"checkpoint","description":"File download time from resource. ","name":"checkpoint.scrub_download_time","type":"keyword"},"checkpoint.scrub_total_time":{"category":"checkpoint","description":"Threat extraction total file handling time. ","name":"checkpoint.scrub_total_time","type":"keyword"},"checkpoint.scrub_activity":{"category":"checkpoint","description":"The result of the extraction ","name":"checkpoint.scrub_activity","type":"keyword"},"checkpoint.watermark":{"category":"checkpoint","description":"Reports whether watermark is added to the cleaned file. ","name":"checkpoint.watermark","type":"keyword"},"checkpoint.source_object":{"category":"checkpoint","description":"Matched object name on source column. ","name":"checkpoint.source_object","type":"keyword"},"checkpoint.destination_object":{"category":"checkpoint","description":"Matched object name on destination column. ","name":"checkpoint.destination_object","type":"keyword"},"checkpoint.drop_reason":{"category":"checkpoint","description":"Drop reason description. ","name":"checkpoint.drop_reason","type":"keyword"},"checkpoint.hit":{"category":"checkpoint","description":"Number of hits on a rule. ","name":"checkpoint.hit","type":"integer"},"checkpoint.rulebase_id":{"category":"checkpoint","description":"Layer number. ","name":"checkpoint.rulebase_id","type":"integer"},"checkpoint.first_hit_time":{"category":"checkpoint","description":"First hit time in current interval. ","name":"checkpoint.first_hit_time","type":"integer"},"checkpoint.last_hit_time":{"category":"checkpoint","description":"Last hit time in current interval. ","name":"checkpoint.last_hit_time","type":"integer"},"checkpoint.rematch_info":{"category":"checkpoint","description":"Information sent when old connections cannot be matched during policy installation. ","name":"checkpoint.rematch_info","type":"keyword"},"checkpoint.last_rematch_time":{"category":"checkpoint","description":"Connection rematched time. ","name":"checkpoint.last_rematch_time","type":"keyword"},"checkpoint.action_reason":{"category":"checkpoint","description":"Connection drop reason. ","name":"checkpoint.action_reason","type":"integer"},"checkpoint.action_reason_msg":{"category":"checkpoint","description":"Connection drop reason message. ","name":"checkpoint.action_reason_msg","type":"keyword"},"checkpoint.c_bytes":{"category":"checkpoint","description":"Boolean value indicates whether bytes sent from the client side are used. ","name":"checkpoint.c_bytes","type":"integer"},"checkpoint.context_num":{"category":"checkpoint","description":"Serial number of the log for a specific connection. ","name":"checkpoint.context_num","type":"integer"},"checkpoint.match_id":{"category":"checkpoint","description":"Private key of the rule ","name":"checkpoint.match_id","type":"integer"},"checkpoint.alert":{"category":"checkpoint","description":"Alert level of matched rule (for connection logs). ","name":"checkpoint.alert","type":"keyword"},"checkpoint.parent_rule":{"category":"checkpoint","description":"Parent rule number, in case of inline layer. ","name":"checkpoint.parent_rule","type":"integer"},"checkpoint.match_fk":{"category":"checkpoint","description":"Rule number. ","name":"checkpoint.match_fk","type":"integer"},"checkpoint.dropped_outgoing":{"category":"checkpoint","description":"Number of outgoing bytes dropped when using UP-limit feature. ","name":"checkpoint.dropped_outgoing","type":"integer"},"checkpoint.dropped_incoming":{"category":"checkpoint","description":"Number of incoming bytes dropped when using UP-limit feature. ","name":"checkpoint.dropped_incoming","type":"integer"},"checkpoint.media_type":{"category":"checkpoint","description":"Media used (audio, video, etc.) ","name":"checkpoint.media_type","type":"keyword"},"checkpoint.sip_reason":{"category":"checkpoint","description":"Explains why 'source_ip' isn't allowed to redirect (handover). ","name":"checkpoint.sip_reason","type":"keyword"},"checkpoint.voip_method":{"category":"checkpoint","description":"Registration request. ","name":"checkpoint.voip_method","type":"keyword"},"checkpoint.registered_ip-phones":{"category":"checkpoint","description":"Registered IP-Phones. ","name":"checkpoint.registered_ip-phones","type":"keyword"},"checkpoint.voip_reg_user_type":{"category":"checkpoint","description":"Registered IP-Phone type. ","name":"checkpoint.voip_reg_user_type","type":"keyword"},"checkpoint.voip_call_id":{"category":"checkpoint","description":"Call-ID. ","name":"checkpoint.voip_call_id","type":"keyword"},"checkpoint.voip_reg_int":{"category":"checkpoint","description":"Registration port. ","name":"checkpoint.voip_reg_int","type":"integer"},"checkpoint.voip_reg_ipp":{"category":"checkpoint","description":"Registration IP protocol. ","name":"checkpoint.voip_reg_ipp","type":"integer"},"checkpoint.voip_reg_period":{"category":"checkpoint","description":"Registration period. ","name":"checkpoint.voip_reg_period","type":"integer"},"checkpoint.src_phone_number":{"category":"checkpoint","description":"Source IP-Phone. ","name":"checkpoint.src_phone_number","type":"keyword"},"checkpoint.voip_from_user_type":{"category":"checkpoint","description":"Source IP-Phone type. ","name":"checkpoint.voip_from_user_type","type":"keyword"},"checkpoint.voip_to_user_type":{"category":"checkpoint","description":"Destination IP-Phone type. ","name":"checkpoint.voip_to_user_type","type":"keyword"},"checkpoint.voip_call_dir":{"category":"checkpoint","description":"Call direction: in/out. ","name":"checkpoint.voip_call_dir","type":"keyword"},"checkpoint.voip_call_state":{"category":"checkpoint","description":"Call state. Possible values: in/out. ","name":"checkpoint.voip_call_state","type":"keyword"},"checkpoint.voip_call_term_time":{"category":"checkpoint","description":"Call termination time stamp. ","name":"checkpoint.voip_call_term_time","type":"keyword"},"checkpoint.voip_duration":{"category":"checkpoint","description":"Call duration (seconds). ","name":"checkpoint.voip_duration","type":"keyword"},"checkpoint.voip_media_port":{"category":"checkpoint","description":"Media int. ","name":"checkpoint.voip_media_port","type":"keyword"},"checkpoint.voip_media_ipp":{"category":"checkpoint","description":"Media IP protocol. ","name":"checkpoint.voip_media_ipp","type":"keyword"},"checkpoint.voip_est_codec":{"category":"checkpoint","description":"Estimated codec. ","name":"checkpoint.voip_est_codec","type":"keyword"},"checkpoint.voip_exp":{"category":"checkpoint","description":"Expiration. ","name":"checkpoint.voip_exp","type":"integer"},"checkpoint.voip_attach_sz":{"category":"checkpoint","description":"Attachment size. ","name":"checkpoint.voip_attach_sz","type":"integer"},"checkpoint.voip_attach_action_info":{"category":"checkpoint","description":"Attachment action Info. ","name":"checkpoint.voip_attach_action_info","type":"keyword"},"checkpoint.voip_media_codec":{"category":"checkpoint","description":"Estimated codec. ","name":"checkpoint.voip_media_codec","type":"keyword"},"checkpoint.voip_reject_reason":{"category":"checkpoint","description":"Reject reason. ","name":"checkpoint.voip_reject_reason","type":"keyword"},"checkpoint.voip_reason_info":{"category":"checkpoint","description":"Information. ","name":"checkpoint.voip_reason_info","type":"keyword"},"checkpoint.voip_config":{"category":"checkpoint","description":"Configuration. ","name":"checkpoint.voip_config","type":"keyword"},"checkpoint.voip_reg_server":{"category":"checkpoint","description":"Registrar server IP address. ","name":"checkpoint.voip_reg_server","type":"ip"},"checkpoint.scv_user":{"category":"checkpoint","description":"Username whose packets are dropped on SCV. ","name":"checkpoint.scv_user","type":"keyword"},"checkpoint.scv_message_info":{"category":"checkpoint","description":"Drop reason. ","name":"checkpoint.scv_message_info","type":"keyword"},"checkpoint.ppp":{"category":"checkpoint","description":"Authentication status. ","name":"checkpoint.ppp","type":"keyword"},"checkpoint.scheme":{"category":"checkpoint","description":"Describes the scheme used for the log. ","name":"checkpoint.scheme","type":"keyword"},"checkpoint.machine":{"category":"checkpoint","description":"L2TP machine which triggered the log and the log refers to it. ","name":"checkpoint.machine","type":"keyword"},"checkpoint.vpn_feature_name":{"category":"checkpoint","description":"L2TP /IKE / Link Selection. ","name":"checkpoint.vpn_feature_name","type":"keyword"},"checkpoint.reject_category":{"category":"checkpoint","description":"Authentication failure reason. ","name":"checkpoint.reject_category","type":"keyword"},"checkpoint.peer_ip_probing_status_update":{"category":"checkpoint","description":"IP address response status. ","name":"checkpoint.peer_ip_probing_status_update","type":"keyword"},"checkpoint.peer_ip":{"category":"checkpoint","description":"IP address which the client connects to. ","name":"checkpoint.peer_ip","type":"keyword"},"checkpoint.link_probing_status_update":{"category":"checkpoint","description":"IP address response status. ","name":"checkpoint.link_probing_status_update","type":"keyword"},"checkpoint.source_interface":{"category":"checkpoint","description":"External Interface name for source interface or Null if not found. ","name":"checkpoint.source_interface","type":"keyword"},"checkpoint.next_hop_ip":{"category":"checkpoint","description":"Next hop IP address. ","name":"checkpoint.next_hop_ip","type":"keyword"},"checkpoint.srckeyid":{"category":"checkpoint","description":"Initiator Spi ID. ","name":"checkpoint.srckeyid","type":"keyword"},"checkpoint.dstkeyid":{"category":"checkpoint","description":"Responder Spi ID. ","name":"checkpoint.dstkeyid","type":"keyword"},"checkpoint.encryption_failure":{"category":"checkpoint","description":"Message indicating why the encryption failed. ","name":"checkpoint.encryption_failure","type":"keyword"},"checkpoint.ike_ids":{"category":"checkpoint","description":"All QM ids. ","name":"checkpoint.ike_ids","type":"keyword"},"checkpoint.community":{"category":"checkpoint","description":"Community name for the IPSec key and the use of the IKEv. ","name":"checkpoint.community","type":"keyword"},"checkpoint.ike":{"category":"checkpoint","description":"IKEMode (PHASE1, PHASE2, etc..). ","name":"checkpoint.ike","type":"keyword"},"checkpoint.cookieI":{"category":"checkpoint","description":"Initiator cookie. ","name":"checkpoint.cookieI","type":"keyword"},"checkpoint.cookieR":{"category":"checkpoint","description":"Responder cookie. ","name":"checkpoint.cookieR","type":"keyword"},"checkpoint.msgid":{"category":"checkpoint","description":"Message ID. ","name":"checkpoint.msgid","type":"keyword"},"checkpoint.methods":{"category":"checkpoint","description":"IPSEc methods. ","name":"checkpoint.methods","type":"keyword"},"checkpoint.connection_uid":{"category":"checkpoint","description":"Calculation of md5 of the IP and user name as UID. ","name":"checkpoint.connection_uid","type":"keyword"},"checkpoint.site_name":{"category":"checkpoint","description":"Site name. ","name":"checkpoint.site_name","type":"keyword"},"checkpoint.esod_rule_name":{"category":"checkpoint","description":"Unknown rule name. ","name":"checkpoint.esod_rule_name","type":"keyword"},"checkpoint.esod_rule_action":{"category":"checkpoint","description":"Unknown rule action. ","name":"checkpoint.esod_rule_action","type":"keyword"},"checkpoint.esod_rule_type":{"category":"checkpoint","description":"Unknown rule type. ","name":"checkpoint.esod_rule_type","type":"keyword"},"checkpoint.esod_noncompliance_reason":{"category":"checkpoint","description":"Non-compliance reason. ","name":"checkpoint.esod_noncompliance_reason","type":"keyword"},"checkpoint.esod_associated_policies":{"category":"checkpoint","description":"Associated policies. ","name":"checkpoint.esod_associated_policies","type":"keyword"},"checkpoint.spyware_type":{"category":"checkpoint","description":"Spyware type. ","name":"checkpoint.spyware_type","type":"keyword"},"checkpoint.anti_virus_type":{"category":"checkpoint","description":"Anti virus type. ","name":"checkpoint.anti_virus_type","type":"keyword"},"checkpoint.end_user_firewall_type":{"category":"checkpoint","description":"End user firewall type. ","name":"checkpoint.end_user_firewall_type","type":"keyword"},"checkpoint.esod_scan_status":{"category":"checkpoint","description":"Scan failed. ","name":"checkpoint.esod_scan_status","type":"keyword"},"checkpoint.esod_access_status":{"category":"checkpoint","description":"Access denied. ","name":"checkpoint.esod_access_status","type":"keyword"},"checkpoint.client_type":{"category":"checkpoint","description":"Endpoint Connect. ","name":"checkpoint.client_type","type":"keyword"},"checkpoint.precise_error":{"category":"checkpoint","description":"HTTP parser error. ","name":"checkpoint.precise_error","type":"keyword"},"checkpoint.method":{"category":"checkpoint","description":"HTTP method. ","name":"checkpoint.method","type":"keyword"},"checkpoint.trusted_domain":{"category":"checkpoint","description":"In case of phishing event, the domain, which the attacker was impersonating. ","name":"checkpoint.trusted_domain","type":"keyword"},"cisco.amp.timestamp_nanoseconds":{"category":"cisco","description":"The timestamp in Epoch nanoseconds. ","name":"cisco.amp.timestamp_nanoseconds","type":"date"},"cisco.amp.event_type_id":{"category":"cisco","description":"A sub ID of the event, depending on event type. ","name":"cisco.amp.event_type_id","type":"keyword"},"cisco.amp.detection":{"category":"cisco","description":"The name of the malware detected. ","name":"cisco.amp.detection","type":"keyword"},"cisco.amp.detection_id":{"category":"cisco","description":"The ID of the detection. ","name":"cisco.amp.detection_id","type":"keyword"},"cisco.amp.connector_guid":{"category":"cisco","description":"The GUID of the connector sending information to AMP. ","name":"cisco.amp.connector_guid","type":"keyword"},"cisco.amp.group_guids":{"category":"cisco","description":"An array of group GUIDS related to the connector sending information to AMP. ","name":"cisco.amp.group_guids","type":"keyword"},"cisco.amp.vulnerabilities":{"category":"cisco","description":"An array of related vulnerabilities to the malicious event. ","name":"cisco.amp.vulnerabilities","type":"flattened"},"cisco.amp.scan.description":{"category":"cisco","description":"Description of an event related to a scan being initiated, for example the specific directory name. ","name":"cisco.amp.scan.description","type":"keyword"},"cisco.amp.scan.clean":{"category":"cisco","description":"Boolean value if a scanned file was clean or not. ","name":"cisco.amp.scan.clean","type":"boolean"},"cisco.amp.scan.scanned_files":{"category":"cisco","description":"Count of files scanned in a directory. ","name":"cisco.amp.scan.scanned_files","type":"long"},"cisco.amp.scan.scanned_processes":{"category":"cisco","description":"Count of processes scanned related to a single scan event. ","name":"cisco.amp.scan.scanned_processes","type":"long"},"cisco.amp.scan.scanned_paths":{"category":"cisco","description":"Count of different directories scanned related to a single scan event. ","name":"cisco.amp.scan.scanned_paths","type":"long"},"cisco.amp.scan.malicious_detections":{"category":"cisco","description":"Count of malicious files or documents detected related to a single scan event. ","name":"cisco.amp.scan.malicious_detections","type":"long"},"cisco.amp.computer.connector_guid":{"category":"cisco","description":"The GUID of the connector, similar to top level connector_guid, but unique if multiple connectors are involved. ","name":"cisco.amp.computer.connector_guid","type":"keyword"},"cisco.amp.computer.external_ip":{"category":"cisco","description":"The external IP of the related host. ","name":"cisco.amp.computer.external_ip","type":"ip"},"cisco.amp.computer.active":{"category":"cisco","description":"If the current endpoint is active or not. ","name":"cisco.amp.computer.active","type":"boolean"},"cisco.amp.computer.network_addresses":{"category":"cisco","description":"All network interface information on the related host. ","name":"cisco.amp.computer.network_addresses","type":"flattened"},"cisco.amp.file.disposition":{"category":"cisco","description":"Categorization of file, for example \"Malicious\" or \"Clean\". ","name":"cisco.amp.file.disposition","type":"keyword"},"cisco.amp.network_info.disposition":{"category":"cisco","description":"Categorization of a network event related to a file, for example \"Malicious\" or \"Clean\". ","name":"cisco.amp.network_info.disposition","type":"keyword"},"cisco.amp.network_info.nfm.direction":{"category":"cisco","description":"The current direction based on source and destination IP. ","name":"cisco.amp.network_info.nfm.direction","type":"keyword"},"cisco.amp.related.mac":{"category":"cisco","description":"An array of all related MAC addresses. ","name":"cisco.amp.related.mac","type":"keyword"},"cisco.amp.related.cve":{"category":"cisco","description":"An array of all related MAC addresses. ","name":"cisco.amp.related.cve","type":"keyword"},"cisco.amp.cloud_ioc.description":{"category":"cisco","description":"Description of the related IOC for specific IOC events from AMP. ","name":"cisco.amp.cloud_ioc.description","type":"keyword"},"cisco.amp.cloud_ioc.short_description":{"category":"cisco","description":"Short description of the related IOC for specific IOC events from AMP. ","name":"cisco.amp.cloud_ioc.short_description","type":"keyword"},"cisco.amp.network_info.parent.disposition":{"category":"cisco","description":"Categorization of a IOC for example \"Malicious\" or \"Clean\". ","name":"cisco.amp.network_info.parent.disposition","type":"keyword"},"cisco.amp.network_info.parent.identity.md5":{"category":"cisco","description":"MD5 hash of the related IOC. ","name":"cisco.amp.network_info.parent.identity.md5","type":"keyword"},"cisco.amp.network_info.parent.identity.sha1":{"category":"cisco","description":"SHA1 hash of the related IOC. ","name":"cisco.amp.network_info.parent.identity.sha1","type":"keyword"},"cisco.amp.network_info.parent.identify.sha256":{"category":"cisco","description":"SHA256 hash of the related IOC. ","name":"cisco.amp.network_info.parent.identify.sha256","type":"keyword"},"cisco.amp.file.archived_file.disposition":{"category":"cisco","description":"Categorization of a file archive related to a file, for example \"Malicious\" or \"Clean\". ","name":"cisco.amp.file.archived_file.disposition","type":"keyword"},"cisco.amp.file.archived_file.identity.md5":{"category":"cisco","description":"MD5 hash of the archived file related to the malicious event. ","name":"cisco.amp.file.archived_file.identity.md5","type":"keyword"},"cisco.amp.file.archived_file.identity.sha1":{"category":"cisco","description":"SHA1 hash of the archived file related to the malicious event. ","name":"cisco.amp.file.archived_file.identity.sha1","type":"keyword"},"cisco.amp.file.archived_file.identity.sha256":{"category":"cisco","description":"SHA256 hash of the archived file related to the malicious event. ","name":"cisco.amp.file.archived_file.identity.sha256","type":"keyword"},"cisco.amp.file.attack_details.application":{"category":"cisco","description":"The application name related to Exploit Prevention events. ","name":"cisco.amp.file.attack_details.application","type":"keyword"},"cisco.amp.file.attack_details.attacked_module":{"category":"cisco","description":"Path to the executable or dll that was attacked and detected by Exploit Prevention. ","name":"cisco.amp.file.attack_details.attacked_module","type":"keyword"},"cisco.amp.file.attack_details.base_address":{"category":"cisco","description":"The base memory address related to the exploit detected. ","name":"cisco.amp.file.attack_details.base_address","type":"keyword"},"cisco.amp.file.attack_details.suspicious_files":{"category":"cisco","description":"An array of related files when an attack is detected by Exploit Prevention. ","name":"cisco.amp.file.attack_details.suspicious_files","type":"keyword"},"cisco.amp.file.parent.disposition":{"category":"cisco","description":"Categorization of parrent, for example \"Malicious\" or \"Clean\". ","name":"cisco.amp.file.parent.disposition","type":"keyword"},"cisco.amp.error.description":{"category":"cisco","description":"Description of an endpoint error event. ","name":"cisco.amp.error.description","type":"keyword"},"cisco.amp.error.error_code":{"category":"cisco","description":"The error code describing the related error event. ","name":"cisco.amp.error.error_code","type":"keyword"},"cisco.amp.threat_hunting.severity":{"category":"cisco","description":"Severity result of the threat hunt registered to the malicious event. Can be Low-Critical. ","name":"cisco.amp.threat_hunting.severity","type":"keyword"},"cisco.amp.threat_hunting.incident_report_guid":{"category":"cisco","description":"The GUID of the related threat hunting report. ","name":"cisco.amp.threat_hunting.incident_report_guid","type":"keyword"},"cisco.amp.threat_hunting.incident_hunt_guid":{"category":"cisco","description":"The GUID of the related investigation tracking issue. ","name":"cisco.amp.threat_hunting.incident_hunt_guid","type":"keyword"},"cisco.amp.threat_hunting.incident_title":{"category":"cisco","description":"Title of the incident related to the threat hunting activity. ","name":"cisco.amp.threat_hunting.incident_title","type":"keyword"},"cisco.amp.threat_hunting.incident_summary":{"category":"cisco","description":"Summary of the outcome on the threat hunting activity. ","name":"cisco.amp.threat_hunting.incident_summary","type":"keyword"},"cisco.amp.threat_hunting.incident_remediation":{"category":"cisco","description":"Recommendations to resolve the vulnerability or exploited host. ","name":"cisco.amp.threat_hunting.incident_remediation","type":"keyword"},"cisco.amp.threat_hunting.incident_id":{"category":"cisco","description":"The id of the related incident for the threat hunting activity. ","name":"cisco.amp.threat_hunting.incident_id","type":"keyword"},"cisco.amp.threat_hunting.incident_end_time":{"category":"cisco","description":"When the threat hunt finalized or closed. ","name":"cisco.amp.threat_hunting.incident_end_time","type":"date"},"cisco.amp.threat_hunting.incident_start_time":{"category":"cisco","description":"When the threat hunt was initiated. ","name":"cisco.amp.threat_hunting.incident_start_time","type":"date"},"cisco.amp.file.attack_details.indicators":{"category":"cisco","description":"Different indicator types that matches the exploit detected, for example different MITRE tactics. ","name":"cisco.amp.file.attack_details.indicators","type":"flattened"},"cisco.amp.threat_hunting.tactics":{"category":"cisco","description":"List of all MITRE tactics related to the incident found. ","name":"cisco.amp.threat_hunting.tactics","type":"flattened"},"cisco.amp.threat_hunting.techniques":{"category":"cisco","description":"List of all MITRE techniques related to the incident found. ","name":"cisco.amp.threat_hunting.techniques","type":"flattened"},"cisco.amp.tactics":{"category":"cisco","description":"List of all MITRE tactics related to the incident found. ","name":"cisco.amp.tactics","type":"flattened"},"cisco.amp.mitre_tactics":{"category":"cisco","description":"Array of all related mitre tactic ID's ","name":"cisco.amp.mitre_tactics","type":"keyword"},"cisco.amp.techniques":{"category":"cisco","description":"List of all MITRE techniques related to the incident found. ","name":"cisco.amp.techniques","type":"flattened"},"cisco.amp.mitre_techniques":{"category":"cisco","description":"Array of all related mitre technique ID's ","name":"cisco.amp.mitre_techniques","type":"keyword"},"cisco.amp.command_line.arguments":{"category":"cisco","description":"The CLI arguments related to the Cloud Threat IOC reported by Cisco. ","name":"cisco.amp.command_line.arguments","type":"keyword"},"cisco.amp.bp_data":{"category":"cisco","description":"Endpoint isolation information ","name":"cisco.amp.bp_data","type":"flattened"},"cisco.asa.message_id":{"category":"cisco","description":"The Cisco ASA message identifier. ","name":"cisco.asa.message_id","type":"keyword"},"cisco.asa.suffix":{"category":"cisco","description":"Optional suffix after %ASA identifier. ","example":"session","name":"cisco.asa.suffix","type":"keyword"},"cisco.asa.source_interface":{"category":"cisco","description":"Source interface for the flow or event. ","name":"cisco.asa.source_interface","type":"keyword"},"cisco.asa.destination_interface":{"category":"cisco","description":"Destination interface for the flow or event. ","name":"cisco.asa.destination_interface","type":"keyword"},"cisco.asa.rule_name":{"category":"cisco","description":"Name of the Access Control List rule that matched this event. ","name":"cisco.asa.rule_name","type":"keyword"},"cisco.asa.source_username":{"category":"cisco","description":"Name of the user that is the source for this event. ","name":"cisco.asa.source_username","type":"keyword"},"cisco.asa.destination_username":{"category":"cisco","description":"Name of the user that is the destination for this event. ","name":"cisco.asa.destination_username","type":"keyword"},"cisco.asa.mapped_source_ip":{"category":"cisco","description":"The translated source IP address. ","name":"cisco.asa.mapped_source_ip","type":"ip"},"cisco.asa.mapped_source_host":{"category":"cisco","description":"The translated source host. ","name":"cisco.asa.mapped_source_host","type":"keyword"},"cisco.asa.mapped_source_port":{"category":"cisco","description":"The translated source port. ","name":"cisco.asa.mapped_source_port","type":"long"},"cisco.asa.mapped_destination_ip":{"category":"cisco","description":"The translated destination IP address. ","name":"cisco.asa.mapped_destination_ip","type":"ip"},"cisco.asa.mapped_destination_host":{"category":"cisco","description":"The translated destination host. ","name":"cisco.asa.mapped_destination_host","type":"keyword"},"cisco.asa.mapped_destination_port":{"category":"cisco","description":"The translated destination port. ","name":"cisco.asa.mapped_destination_port","type":"long"},"cisco.asa.threat_level":{"category":"cisco","description":"Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ","name":"cisco.asa.threat_level","type":"keyword"},"cisco.asa.threat_category":{"category":"cisco","description":"Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ","name":"cisco.asa.threat_category","type":"keyword"},"cisco.asa.connection_id":{"category":"cisco","description":"Unique identifier for a flow. ","name":"cisco.asa.connection_id","type":"keyword"},"cisco.asa.icmp_type":{"category":"cisco","description":"ICMP type. ","name":"cisco.asa.icmp_type","type":"short"},"cisco.asa.icmp_code":{"category":"cisco","description":"ICMP code. ","name":"cisco.asa.icmp_code","type":"short"},"cisco.asa.connection_type":{"category":"cisco","description":"The VPN connection type ","name":"cisco.asa.connection_type","type":"keyword"},"cisco.asa.dap_records":{"category":"cisco","description":"The assigned DAP records ","name":"cisco.asa.dap_records","type":"keyword"},"cisco.asa.command_line_arguments":{"category":"cisco","description":"The command line arguments logged by the local audit log ","name":"cisco.asa.command_line_arguments","type":"keyword"},"cisco.asa.assigned_ip":{"category":"cisco","description":"The IP address assigned to a VPN client successfully connecting ","name":"cisco.asa.assigned_ip","type":"ip"},"cisco.asa.privilege.old":{"category":"cisco","description":"When a users privilege is changed this is the old value ","name":"cisco.asa.privilege.old","type":"keyword"},"cisco.asa.privilege.new":{"category":"cisco","description":"When a users privilege is changed this is the new value ","name":"cisco.asa.privilege.new","type":"keyword"},"cisco.asa.burst.object":{"category":"cisco","description":"The related object for burst warnings ","name":"cisco.asa.burst.object","type":"keyword"},"cisco.asa.burst.id":{"category":"cisco","description":"The related rate ID for burst warnings ","name":"cisco.asa.burst.id","type":"keyword"},"cisco.asa.burst.current_rate":{"category":"cisco","description":"The current burst rate seen ","name":"cisco.asa.burst.current_rate","type":"keyword"},"cisco.asa.burst.configured_rate":{"category":"cisco","description":"The current configured burst rate ","name":"cisco.asa.burst.configured_rate","type":"keyword"},"cisco.asa.burst.avg_rate":{"category":"cisco","description":"The current average burst rate seen ","name":"cisco.asa.burst.avg_rate","type":"keyword"},"cisco.asa.burst.configured_avg_rate":{"category":"cisco","description":"The current configured average burst rate allowed ","name":"cisco.asa.burst.configured_avg_rate","type":"keyword"},"cisco.asa.burst.cumulative_count":{"category":"cisco","description":"The total count of burst rate hits since the object was created or cleared ","name":"cisco.asa.burst.cumulative_count","type":"keyword"},"cisco.asa.termination_user":{"category":"cisco","description":"AAA name of user requesting termination ","name":"cisco.asa.termination_user","type":"keyword"},"cisco.asa.webvpn.group_name":{"category":"cisco","description":"The WebVPN group name the user belongs to ","name":"cisco.asa.webvpn.group_name","type":"keyword"},"cisco.asa.termination_initiator":{"category":"cisco","description":"Interface name of the side that initiated the teardown ","name":"cisco.asa.termination_initiator","type":"keyword"},"cisco.asa.tunnel_type":{"category":"cisco","description":"SA type (remote access or L2L) ","name":"cisco.asa.tunnel_type","type":"keyword"},"cisco.asa.session_type":{"category":"cisco","description":"Session type (for example, IPsec or UDP) ","name":"cisco.asa.session_type","type":"keyword"},"cisco.ftd.message_id":{"category":"cisco","description":"The Cisco FTD message identifier. ","name":"cisco.ftd.message_id","type":"keyword"},"cisco.ftd.suffix":{"category":"cisco","description":"Optional suffix after %FTD identifier. ","example":"session","name":"cisco.ftd.suffix","type":"keyword"},"cisco.ftd.source_interface":{"category":"cisco","description":"Source interface for the flow or event. ","name":"cisco.ftd.source_interface","type":"keyword"},"cisco.ftd.destination_interface":{"category":"cisco","description":"Destination interface for the flow or event. ","name":"cisco.ftd.destination_interface","type":"keyword"},"cisco.ftd.rule_name":{"category":"cisco","description":"Name of the Access Control List rule that matched this event. ","name":"cisco.ftd.rule_name","type":"keyword"},"cisco.ftd.source_username":{"category":"cisco","description":"Name of the user that is the source for this event. ","name":"cisco.ftd.source_username","type":"keyword"},"cisco.ftd.destination_username":{"category":"cisco","description":"Name of the user that is the destination for this event. ","name":"cisco.ftd.destination_username","type":"keyword"},"cisco.ftd.mapped_source_ip":{"category":"cisco","description":"The translated source IP address. Use ECS source.nat.ip. ","name":"cisco.ftd.mapped_source_ip","type":"ip"},"cisco.ftd.mapped_source_host":{"category":"cisco","description":"The translated source host. ","name":"cisco.ftd.mapped_source_host","type":"keyword"},"cisco.ftd.mapped_source_port":{"category":"cisco","description":"The translated source port. Use ECS source.nat.port. ","name":"cisco.ftd.mapped_source_port","type":"long"},"cisco.ftd.mapped_destination_ip":{"category":"cisco","description":"The translated destination IP address. Use ECS destination.nat.ip. ","name":"cisco.ftd.mapped_destination_ip","type":"ip"},"cisco.ftd.mapped_destination_host":{"category":"cisco","description":"The translated destination host. ","name":"cisco.ftd.mapped_destination_host","type":"keyword"},"cisco.ftd.mapped_destination_port":{"category":"cisco","description":"The translated destination port. Use ECS destination.nat.port. ","name":"cisco.ftd.mapped_destination_port","type":"long"},"cisco.ftd.threat_level":{"category":"cisco","description":"Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ","name":"cisco.ftd.threat_level","type":"keyword"},"cisco.ftd.threat_category":{"category":"cisco","description":"Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ","name":"cisco.ftd.threat_category","type":"keyword"},"cisco.ftd.connection_id":{"category":"cisco","description":"Unique identifier for a flow. ","name":"cisco.ftd.connection_id","type":"keyword"},"cisco.ftd.icmp_type":{"category":"cisco","description":"ICMP type. ","name":"cisco.ftd.icmp_type","type":"short"},"cisco.ftd.icmp_code":{"category":"cisco","description":"ICMP code. ","name":"cisco.ftd.icmp_code","type":"short"},"cisco.ftd.security":{"category":"cisco","description":"Raw fields for Security Events.","name":"cisco.ftd.security","type":"object"},"cisco.ftd.connection_type":{"category":"cisco","description":"The VPN connection type ","name":"cisco.ftd.connection_type","type":"keyword"},"cisco.ftd.dap_records":{"category":"cisco","description":"The assigned DAP records ","name":"cisco.ftd.dap_records","type":"keyword"},"cisco.ftd.termination_user":{"category":"cisco","description":"AAA name of user requesting termination ","name":"cisco.ftd.termination_user","type":"keyword"},"cisco.ftd.webvpn.group_name":{"category":"cisco","description":"The WebVPN group name the user belongs to ","name":"cisco.ftd.webvpn.group_name","type":"keyword"},"cisco.ftd.termination_initiator":{"category":"cisco","description":"Interface name of the side that initiated the teardown ","name":"cisco.ftd.termination_initiator","type":"keyword"},"cisco.ios.access_list":{"category":"cisco","description":"Name of the IP access list. ","name":"cisco.ios.access_list","type":"keyword"},"cisco.ios.facility":{"category":"cisco","description":"The facility to which the message refers (for example, SNMP, SYS, and so forth). A facility can be a hardware device, a protocol, or a module of the system software. It denotes the source or the cause of the system message. ","example":"SEC","name":"cisco.ios.facility","type":"keyword"},"cisco.umbrella.identities":{"category":"cisco","description":"An array of the different identities related to the event. ","name":"cisco.umbrella.identities","type":"keyword"},"cisco.umbrella.categories":{"category":"cisco","description":"The security or content categories that the destination matches. ","name":"cisco.umbrella.categories","type":"keyword"},"cisco.umbrella.policy_identity_type":{"category":"cisco","description":"The first identity type matched with this request. Available in version 3 and above. ","name":"cisco.umbrella.policy_identity_type","type":"keyword"},"cisco.umbrella.identity_types":{"category":"cisco","description":"The type of identity that made the request. For example, Roaming Computer or Network. ","name":"cisco.umbrella.identity_types","type":"keyword"},"cisco.umbrella.blocked_categories":{"category":"cisco","description":"The categories that resulted in the destination being blocked. Available in version 4 and above. ","name":"cisco.umbrella.blocked_categories","type":"keyword"},"cisco.umbrella.content_type":{"category":"cisco","description":"The type of web content, typically text/html. ","name":"cisco.umbrella.content_type","type":"keyword"},"cisco.umbrella.sha_sha256":{"category":"cisco","description":"Hex digest of the response content. ","name":"cisco.umbrella.sha_sha256","type":"keyword"},"cisco.umbrella.av_detections":{"category":"cisco","description":"The detection name according to the antivirus engine used in file inspection. ","name":"cisco.umbrella.av_detections","type":"keyword"},"cisco.umbrella.puas":{"category":"cisco","description":"A list of all potentially unwanted application (PUA) results for the proxied file as returned by the antivirus scanner. ","name":"cisco.umbrella.puas","type":"keyword"},"cisco.umbrella.amp_disposition":{"category":"cisco","description":"The status of the files proxied and scanned by Cisco Advanced Malware Protection (AMP) as part of the Umbrella File Inspection feature; can be Clean, Malicious or Unknown. ","name":"cisco.umbrella.amp_disposition","type":"keyword"},"cisco.umbrella.amp_malware_name":{"category":"cisco","description":"If Malicious, the name of the malware according to AMP. ","name":"cisco.umbrella.amp_malware_name","type":"keyword"},"cisco.umbrella.amp_score":{"category":"cisco","description":"The score of the malware from AMP. This field is not currently used and will be blank. ","name":"cisco.umbrella.amp_score","type":"keyword"},"cisco.umbrella.datacenter":{"category":"cisco","description":"The name of the Umbrella Data Center that processed the user-generated traffic. ","name":"cisco.umbrella.datacenter","type":"keyword"},"cisco.umbrella.origin_id":{"category":"cisco","description":"The unique identity of the network tunnel. ","name":"cisco.umbrella.origin_id","type":"keyword"},"coredns.query.size":{"category":"coredns","description":"size of the DNS query ","name":"coredns.query.size","type":"integer","format":"bytes"},"coredns.response.size":{"category":"coredns","description":"size of the DNS response ","name":"coredns.response.size","type":"integer","format":"bytes"},"crowdstrike.metadata.eventType":{"category":"crowdstrike","description":"DetectionSummaryEvent, FirewallMatchEvent, IncidentSummaryEvent, RemoteResponseSessionStartEvent, RemoteResponseSessionEndEvent, AuthActivityAuditEvent, or UserActivityAuditEvent ","name":"crowdstrike.metadata.eventType","type":"keyword"},"crowdstrike.metadata.eventCreationTime":{"category":"crowdstrike","description":"The time this event occurred on the endpoint in UTC UNIX_MS format. ","name":"crowdstrike.metadata.eventCreationTime","type":"date"},"crowdstrike.metadata.offset":{"category":"crowdstrike","description":"Offset number that tracks the location of the event in stream. This is used to identify unique detection events. ","name":"crowdstrike.metadata.offset","type":"integer"},"crowdstrike.metadata.customerIDString":{"category":"crowdstrike","description":"Customer identifier ","name":"crowdstrike.metadata.customerIDString","type":"keyword"},"crowdstrike.metadata.version":{"category":"crowdstrike","description":"Schema version ","name":"crowdstrike.metadata.version","type":"keyword"},"crowdstrike.event.ProcessStartTime":{"category":"crowdstrike","description":"The process start time in UTC UNIX_MS format. ","name":"crowdstrike.event.ProcessStartTime","type":"date"},"crowdstrike.event.ProcessEndTime":{"category":"crowdstrike","description":"The process termination time in UTC UNIX_MS format. ","name":"crowdstrike.event.ProcessEndTime","type":"date"},"crowdstrike.event.ProcessId":{"category":"crowdstrike","description":"Process ID related to the detection. ","name":"crowdstrike.event.ProcessId","type":"integer"},"crowdstrike.event.ParentProcessId":{"category":"crowdstrike","description":"Parent process ID related to the detection. ","name":"crowdstrike.event.ParentProcessId","type":"integer"},"crowdstrike.event.ComputerName":{"category":"crowdstrike","description":"Name of the computer where the detection occurred. ","name":"crowdstrike.event.ComputerName","type":"keyword"},"crowdstrike.event.UserName":{"category":"crowdstrike","description":"User name associated with the detection. ","name":"crowdstrike.event.UserName","type":"keyword"},"crowdstrike.event.DetectName":{"category":"crowdstrike","description":"Name of the detection. ","name":"crowdstrike.event.DetectName","type":"keyword"},"crowdstrike.event.DetectDescription":{"category":"crowdstrike","description":"Description of the detection. ","name":"crowdstrike.event.DetectDescription","type":"keyword"},"crowdstrike.event.Severity":{"category":"crowdstrike","description":"Severity score of the detection. ","name":"crowdstrike.event.Severity","type":"integer"},"crowdstrike.event.SeverityName":{"category":"crowdstrike","description":"Severity score text. ","name":"crowdstrike.event.SeverityName","type":"keyword"},"crowdstrike.event.FileName":{"category":"crowdstrike","description":"File name of the associated process for the detection. ","name":"crowdstrike.event.FileName","type":"keyword"},"crowdstrike.event.FilePath":{"category":"crowdstrike","description":"Path of the executable associated with the detection. ","name":"crowdstrike.event.FilePath","type":"keyword"},"crowdstrike.event.CommandLine":{"category":"crowdstrike","description":"Executable path with command line arguments. ","name":"crowdstrike.event.CommandLine","type":"keyword"},"crowdstrike.event.SHA1String":{"category":"crowdstrike","description":"SHA1 sum of the executable associated with the detection. ","name":"crowdstrike.event.SHA1String","type":"keyword"},"crowdstrike.event.SHA256String":{"category":"crowdstrike","description":"SHA256 sum of the executable associated with the detection. ","name":"crowdstrike.event.SHA256String","type":"keyword"},"crowdstrike.event.MD5String":{"category":"crowdstrike","description":"MD5 sum of the executable associated with the detection. ","name":"crowdstrike.event.MD5String","type":"keyword"},"crowdstrike.event.MachineDomain":{"category":"crowdstrike","description":"Domain for the machine associated with the detection. ","name":"crowdstrike.event.MachineDomain","type":"keyword"},"crowdstrike.event.FalconHostLink":{"category":"crowdstrike","description":"URL to view the detection in Falcon. ","name":"crowdstrike.event.FalconHostLink","type":"keyword"},"crowdstrike.event.SensorId":{"category":"crowdstrike","description":"Unique ID associated with the Falcon sensor. ","name":"crowdstrike.event.SensorId","type":"keyword"},"crowdstrike.event.DetectId":{"category":"crowdstrike","description":"Unique ID associated with the detection. ","name":"crowdstrike.event.DetectId","type":"keyword"},"crowdstrike.event.LocalIP":{"category":"crowdstrike","description":"IP address of the host associated with the detection. ","name":"crowdstrike.event.LocalIP","type":"keyword"},"crowdstrike.event.MACAddress":{"category":"crowdstrike","description":"MAC address of the host associated with the detection. ","name":"crowdstrike.event.MACAddress","type":"keyword"},"crowdstrike.event.Tactic":{"category":"crowdstrike","description":"MITRE tactic category of the detection. ","name":"crowdstrike.event.Tactic","type":"keyword"},"crowdstrike.event.Technique":{"category":"crowdstrike","description":"MITRE technique category of the detection. ","name":"crowdstrike.event.Technique","type":"keyword"},"crowdstrike.event.Objective":{"category":"crowdstrike","description":"Method of detection. ","name":"crowdstrike.event.Objective","type":"keyword"},"crowdstrike.event.PatternDispositionDescription":{"category":"crowdstrike","description":"Action taken by Falcon. ","name":"crowdstrike.event.PatternDispositionDescription","type":"keyword"},"crowdstrike.event.PatternDispositionValue":{"category":"crowdstrike","description":"Unique ID associated with action taken. ","name":"crowdstrike.event.PatternDispositionValue","type":"integer"},"crowdstrike.event.PatternDispositionFlags":{"category":"crowdstrike","description":"Flags indicating actions taken. ","name":"crowdstrike.event.PatternDispositionFlags","type":"object"},"crowdstrike.event.State":{"category":"crowdstrike","description":"Whether the incident summary is open and ongoing or closed. ","name":"crowdstrike.event.State","type":"keyword"},"crowdstrike.event.IncidentStartTime":{"category":"crowdstrike","description":"Start time for the incident in UTC UNIX format. ","name":"crowdstrike.event.IncidentStartTime","type":"date"},"crowdstrike.event.IncidentEndTime":{"category":"crowdstrike","description":"End time for the incident in UTC UNIX format. ","name":"crowdstrike.event.IncidentEndTime","type":"date"},"crowdstrike.event.FineScore":{"category":"crowdstrike","description":"Score for incident. ","name":"crowdstrike.event.FineScore","type":"float"},"crowdstrike.event.UserId":{"category":"crowdstrike","description":"Email address or user ID associated with the event. ","name":"crowdstrike.event.UserId","type":"keyword"},"crowdstrike.event.UserIp":{"category":"crowdstrike","description":"IP address associated with the user. ","name":"crowdstrike.event.UserIp","type":"keyword"},"crowdstrike.event.OperationName":{"category":"crowdstrike","description":"Event subtype. ","name":"crowdstrike.event.OperationName","type":"keyword"},"crowdstrike.event.ServiceName":{"category":"crowdstrike","description":"Service associated with this event. ","name":"crowdstrike.event.ServiceName","type":"keyword"},"crowdstrike.event.Success":{"category":"crowdstrike","description":"Indicator of whether or not this event was successful. ","name":"crowdstrike.event.Success","type":"boolean"},"crowdstrike.event.UTCTimestamp":{"category":"crowdstrike","description":"Timestamp associated with this event in UTC UNIX format. ","name":"crowdstrike.event.UTCTimestamp","type":"date"},"crowdstrike.event.AuditKeyValues":{"category":"crowdstrike","description":"Fields that were changed in this event. ","name":"crowdstrike.event.AuditKeyValues","type":"nested"},"crowdstrike.event.ExecutablesWritten":{"category":"crowdstrike","description":"Detected executables written to disk by a process. ","name":"crowdstrike.event.ExecutablesWritten","type":"nested"},"crowdstrike.event.SessionId":{"category":"crowdstrike","description":"Session ID of the remote response session. ","name":"crowdstrike.event.SessionId","type":"keyword"},"crowdstrike.event.HostnameField":{"category":"crowdstrike","description":"Host name of the machine for the remote session. ","name":"crowdstrike.event.HostnameField","type":"keyword"},"crowdstrike.event.StartTimestamp":{"category":"crowdstrike","description":"Start time for the remote session in UTC UNIX format. ","name":"crowdstrike.event.StartTimestamp","type":"date"},"crowdstrike.event.EndTimestamp":{"category":"crowdstrike","description":"End time for the remote session in UTC UNIX format. ","name":"crowdstrike.event.EndTimestamp","type":"date"},"crowdstrike.event.LateralMovement":{"category":"crowdstrike","description":"Lateral movement field for incident. ","name":"crowdstrike.event.LateralMovement","type":"long"},"crowdstrike.event.ParentImageFileName":{"category":"crowdstrike","description":"Path to the parent process. ","name":"crowdstrike.event.ParentImageFileName","type":"keyword"},"crowdstrike.event.ParentCommandLine":{"category":"crowdstrike","description":"Parent process command line arguments. ","name":"crowdstrike.event.ParentCommandLine","type":"keyword"},"crowdstrike.event.GrandparentImageFileName":{"category":"crowdstrike","description":"Path to the grandparent process. ","name":"crowdstrike.event.GrandparentImageFileName","type":"keyword"},"crowdstrike.event.GrandparentCommandLine":{"category":"crowdstrike","description":"Grandparent process command line arguments. ","name":"crowdstrike.event.GrandparentCommandLine","type":"keyword"},"crowdstrike.event.IOCType":{"category":"crowdstrike","description":"CrowdStrike type for indicator of compromise. ","name":"crowdstrike.event.IOCType","type":"keyword"},"crowdstrike.event.IOCValue":{"category":"crowdstrike","description":"CrowdStrike value for indicator of compromise. ","name":"crowdstrike.event.IOCValue","type":"keyword"},"crowdstrike.event.CustomerId":{"category":"crowdstrike","description":"Customer identifier. ","name":"crowdstrike.event.CustomerId","type":"keyword"},"crowdstrike.event.DeviceId":{"category":"crowdstrike","description":"Device on which the event occurred. ","name":"crowdstrike.event.DeviceId","type":"keyword"},"crowdstrike.event.Ipv":{"category":"crowdstrike","description":"Protocol for network request. ","name":"crowdstrike.event.Ipv","type":"keyword"},"crowdstrike.event.ConnectionDirection":{"category":"crowdstrike","description":"Direction for network connection. ","name":"crowdstrike.event.ConnectionDirection","type":"keyword"},"crowdstrike.event.EventType":{"category":"crowdstrike","description":"CrowdStrike provided event type. ","name":"crowdstrike.event.EventType","type":"keyword"},"crowdstrike.event.HostName":{"category":"crowdstrike","description":"Host name of the local machine. ","name":"crowdstrike.event.HostName","type":"keyword"},"crowdstrike.event.ICMPCode":{"category":"crowdstrike","description":"RFC2780 ICMP Code field. ","name":"crowdstrike.event.ICMPCode","type":"keyword"},"crowdstrike.event.ICMPType":{"category":"crowdstrike","description":"RFC2780 ICMP Type field. ","name":"crowdstrike.event.ICMPType","type":"keyword"},"crowdstrike.event.ImageFileName":{"category":"crowdstrike","description":"File name of the associated process for the detection. ","name":"crowdstrike.event.ImageFileName","type":"keyword"},"crowdstrike.event.PID":{"category":"crowdstrike","description":"Associated process id for the detection. ","name":"crowdstrike.event.PID","type":"long"},"crowdstrike.event.LocalAddress":{"category":"crowdstrike","description":"IP address of local machine. ","name":"crowdstrike.event.LocalAddress","type":"ip"},"crowdstrike.event.LocalPort":{"category":"crowdstrike","description":"Port of local machine. ","name":"crowdstrike.event.LocalPort","type":"long"},"crowdstrike.event.RemoteAddress":{"category":"crowdstrike","description":"IP address of remote machine. ","name":"crowdstrike.event.RemoteAddress","type":"ip"},"crowdstrike.event.RemotePort":{"category":"crowdstrike","description":"Port of remote machine. ","name":"crowdstrike.event.RemotePort","type":"long"},"crowdstrike.event.RuleAction":{"category":"crowdstrike","description":"Firewall rule action. ","name":"crowdstrike.event.RuleAction","type":"keyword"},"crowdstrike.event.RuleDescription":{"category":"crowdstrike","description":"Firewall rule description. ","name":"crowdstrike.event.RuleDescription","type":"keyword"},"crowdstrike.event.RuleFamilyID":{"category":"crowdstrike","description":"Firewall rule family id. ","name":"crowdstrike.event.RuleFamilyID","type":"keyword"},"crowdstrike.event.RuleGroupName":{"category":"crowdstrike","description":"Firewall rule group name. ","name":"crowdstrike.event.RuleGroupName","type":"keyword"},"crowdstrike.event.RuleName":{"category":"crowdstrike","description":"Firewall rule name. ","name":"crowdstrike.event.RuleName","type":"keyword"},"crowdstrike.event.RuleId":{"category":"crowdstrike","description":"Firewall rule id. ","name":"crowdstrike.event.RuleId","type":"keyword"},"crowdstrike.event.MatchCount":{"category":"crowdstrike","description":"Number of firewall rule matches. ","name":"crowdstrike.event.MatchCount","type":"long"},"crowdstrike.event.MatchCountSinceLastReport":{"category":"crowdstrike","description":"Number of firewall rule matches since the last report. ","name":"crowdstrike.event.MatchCountSinceLastReport","type":"long"},"crowdstrike.event.Timestamp":{"category":"crowdstrike","description":"Firewall rule triggered timestamp. ","name":"crowdstrike.event.Timestamp","type":"date"},"crowdstrike.event.Flags.Audit":{"category":"crowdstrike","description":"CrowdStrike audit flag. ","name":"crowdstrike.event.Flags.Audit","type":"boolean"},"crowdstrike.event.Flags.Log":{"category":"crowdstrike","description":"CrowdStrike log flag. ","name":"crowdstrike.event.Flags.Log","type":"boolean"},"crowdstrike.event.Flags.Monitor":{"category":"crowdstrike","description":"CrowdStrike monitor flag. ","name":"crowdstrike.event.Flags.Monitor","type":"boolean"},"crowdstrike.event.Protocol":{"category":"crowdstrike","description":"CrowdStrike provided protocol. ","name":"crowdstrike.event.Protocol","type":"keyword"},"crowdstrike.event.NetworkProfile":{"category":"crowdstrike","description":"CrowdStrike network profile. ","name":"crowdstrike.event.NetworkProfile","type":"keyword"},"crowdstrike.event.PolicyName":{"category":"crowdstrike","description":"CrowdStrike policy name. ","name":"crowdstrike.event.PolicyName","type":"keyword"},"crowdstrike.event.PolicyID":{"category":"crowdstrike","description":"CrowdStrike policy id. ","name":"crowdstrike.event.PolicyID","type":"keyword"},"crowdstrike.event.Status":{"category":"crowdstrike","description":"CrowdStrike status. ","name":"crowdstrike.event.Status","type":"keyword"},"crowdstrike.event.TreeID":{"category":"crowdstrike","description":"CrowdStrike tree id. ","name":"crowdstrike.event.TreeID","type":"keyword"},"crowdstrike.event.Commands":{"category":"crowdstrike","description":"Commands run in a remote session. ","name":"crowdstrike.event.Commands","type":"keyword"},"cyberarkpas.audit.action":{"category":"cyberarkpas","description":"A description of the audit record.","name":"cyberarkpas.audit.action","type":"keyword"},"cyberarkpas.audit.ca_properties.address":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.address","type":"keyword"},"cyberarkpas.audit.ca_properties.cpm_disabled":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.cpm_disabled","type":"keyword"},"cyberarkpas.audit.ca_properties.cpm_error_details":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.cpm_error_details","type":"keyword"},"cyberarkpas.audit.ca_properties.cpm_status":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.cpm_status","type":"keyword"},"cyberarkpas.audit.ca_properties.creation_method":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.creation_method","type":"keyword"},"cyberarkpas.audit.ca_properties.customer":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.customer","type":"keyword"},"cyberarkpas.audit.ca_properties.database":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.database","type":"keyword"},"cyberarkpas.audit.ca_properties.device_type":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.device_type","type":"keyword"},"cyberarkpas.audit.ca_properties.dual_account_status":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.dual_account_status","type":"keyword"},"cyberarkpas.audit.ca_properties.group_name":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.group_name","type":"keyword"},"cyberarkpas.audit.ca_properties.in_process":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.in_process","type":"keyword"},"cyberarkpas.audit.ca_properties.index":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.index","type":"keyword"},"cyberarkpas.audit.ca_properties.last_fail_date":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.last_fail_date","type":"keyword"},"cyberarkpas.audit.ca_properties.last_success_change":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.last_success_change","type":"keyword"},"cyberarkpas.audit.ca_properties.last_success_reconciliation":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.last_success_reconciliation","type":"keyword"},"cyberarkpas.audit.ca_properties.last_success_verification":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.last_success_verification","type":"keyword"},"cyberarkpas.audit.ca_properties.last_task":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.last_task","type":"keyword"},"cyberarkpas.audit.ca_properties.logon_domain":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.logon_domain","type":"keyword"},"cyberarkpas.audit.ca_properties.policy_id":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.policy_id","type":"keyword"},"cyberarkpas.audit.ca_properties.port":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.port","type":"keyword"},"cyberarkpas.audit.ca_properties.privcloud":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.privcloud","type":"keyword"},"cyberarkpas.audit.ca_properties.reset_immediately":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.reset_immediately","type":"keyword"},"cyberarkpas.audit.ca_properties.retries_count":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.retries_count","type":"keyword"},"cyberarkpas.audit.ca_properties.sequence_id":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.sequence_id","type":"keyword"},"cyberarkpas.audit.ca_properties.tags":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.tags","type":"keyword"},"cyberarkpas.audit.ca_properties.user_dn":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.user_dn","type":"keyword"},"cyberarkpas.audit.ca_properties.user_name":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.user_name","type":"keyword"},"cyberarkpas.audit.ca_properties.virtual_username":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.virtual_username","type":"keyword"},"cyberarkpas.audit.ca_properties.other":{"category":"cyberarkpas","name":"cyberarkpas.audit.ca_properties.other","type":"flattened"},"cyberarkpas.audit.category":{"category":"cyberarkpas","description":"The category name (for category-related operations).","name":"cyberarkpas.audit.category","type":"keyword"},"cyberarkpas.audit.desc":{"category":"cyberarkpas","description":"A static value that displays a description of the audit codes.","name":"cyberarkpas.audit.desc","type":"keyword"},"cyberarkpas.audit.extra_details.ad_process_id":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.ad_process_id","type":"keyword"},"cyberarkpas.audit.extra_details.ad_process_name":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.ad_process_name","type":"keyword"},"cyberarkpas.audit.extra_details.application_type":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.application_type","type":"keyword"},"cyberarkpas.audit.extra_details.command":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.command","type":"keyword"},"cyberarkpas.audit.extra_details.connection_component_id":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.connection_component_id","type":"keyword"},"cyberarkpas.audit.extra_details.dst_host":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.dst_host","type":"keyword"},"cyberarkpas.audit.extra_details.logon_account":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.logon_account","type":"keyword"},"cyberarkpas.audit.extra_details.managed_account":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.managed_account","type":"keyword"},"cyberarkpas.audit.extra_details.process_id":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.process_id","type":"keyword"},"cyberarkpas.audit.extra_details.process_name":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.process_name","type":"keyword"},"cyberarkpas.audit.extra_details.protocol":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.protocol","type":"keyword"},"cyberarkpas.audit.extra_details.psmid":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.psmid","type":"keyword"},"cyberarkpas.audit.extra_details.session_duration":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.session_duration","type":"keyword"},"cyberarkpas.audit.extra_details.session_id":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.session_id","type":"keyword"},"cyberarkpas.audit.extra_details.src_host":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.src_host","type":"keyword"},"cyberarkpas.audit.extra_details.username":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.username","type":"keyword"},"cyberarkpas.audit.extra_details.other":{"category":"cyberarkpas","name":"cyberarkpas.audit.extra_details.other","type":"flattened"},"cyberarkpas.audit.file":{"category":"cyberarkpas","description":"The name of the target file.","name":"cyberarkpas.audit.file","type":"keyword"},"cyberarkpas.audit.gateway_station":{"category":"cyberarkpas","description":"The IP of the web application machine (PVWA).","name":"cyberarkpas.audit.gateway_station","type":"ip"},"cyberarkpas.audit.hostname":{"category":"cyberarkpas","description":"The hostname, in upper case.","example":"MY-COMPUTER","name":"cyberarkpas.audit.hostname","type":"keyword"},"cyberarkpas.audit.iso_timestamp":{"category":"cyberarkpas","description":"The timestamp, in ISO Timestamp format (RFC 3339).","example":"\"2013-06-25T10:47:19.000Z\"","name":"cyberarkpas.audit.iso_timestamp","type":"date"},"cyberarkpas.audit.issuer":{"category":"cyberarkpas","description":"The Vault user who wrote the audit. This is usually the user who performed the operation.","name":"cyberarkpas.audit.issuer","type":"keyword"},"cyberarkpas.audit.location":{"category":"cyberarkpas","description":"The target Location (for Location operations).","name":"cyberarkpas.audit.location","type":"keyword"},"cyberarkpas.audit.message":{"category":"cyberarkpas","description":"A description of the audit records (same information as in the Desc field).","name":"cyberarkpas.audit.message","type":"keyword"},"cyberarkpas.audit.message_id":{"category":"cyberarkpas","description":"The code ID of the audit records.","name":"cyberarkpas.audit.message_id","type":"keyword"},"cyberarkpas.audit.product":{"category":"cyberarkpas","description":"A static value that represents the product.","name":"cyberarkpas.audit.product","type":"keyword"},"cyberarkpas.audit.pvwa_details":{"category":"cyberarkpas","description":"Specific details of the PVWA audit records.","name":"cyberarkpas.audit.pvwa_details","type":"flattened"},"cyberarkpas.audit.raw":{"category":"cyberarkpas","description":"Raw XML for the original audit record. Only present when XSLT file has debugging enabled. ","name":"cyberarkpas.audit.raw","type":"keyword"},"cyberarkpas.audit.reason":{"category":"cyberarkpas","description":"The reason entered by the user.","name":"cyberarkpas.audit.reason","type":"text"},"cyberarkpas.audit.rfc5424":{"category":"cyberarkpas","description":"Whether the syslog format complies with RFC5424.","example":"yes","name":"cyberarkpas.audit.rfc5424","type":"boolean"},"cyberarkpas.audit.safe":{"category":"cyberarkpas","description":"The name of the target Safe.","name":"cyberarkpas.audit.safe","type":"keyword"},"cyberarkpas.audit.severity":{"category":"cyberarkpas","description":"The severity of the audit records.","name":"cyberarkpas.audit.severity","type":"keyword"},"cyberarkpas.audit.source_user":{"category":"cyberarkpas","description":"The name of the Vault user who performed the operation.","name":"cyberarkpas.audit.source_user","type":"keyword"},"cyberarkpas.audit.station":{"category":"cyberarkpas","description":"The IP from where the operation was performed. For PVWA sessions, this will be the real client machine IP.","name":"cyberarkpas.audit.station","type":"ip"},"cyberarkpas.audit.target_user":{"category":"cyberarkpas","description":"The name of the Vault user on which the operation was performed.","name":"cyberarkpas.audit.target_user","type":"keyword"},"cyberarkpas.audit.timestamp":{"category":"cyberarkpas","description":"The timestamp, in MMM DD HH:MM:SS format.","example":"Jun 25 10:47:19","name":"cyberarkpas.audit.timestamp","type":"keyword"},"cyberarkpas.audit.vendor":{"category":"cyberarkpas","description":"A static value that represents the vendor.","name":"cyberarkpas.audit.vendor","type":"keyword"},"cyberarkpas.audit.version":{"category":"cyberarkpas","description":"A static value that represents the version of the Vault.","name":"cyberarkpas.audit.version","type":"keyword"},"envoyproxy.log_type":{"category":"envoyproxy","description":"Envoy log type, normally ACCESS ","name":"envoyproxy.log_type","type":"keyword"},"envoyproxy.response_flags":{"category":"envoyproxy","description":"Response flags ","name":"envoyproxy.response_flags","type":"keyword"},"envoyproxy.upstream_service_time":{"category":"envoyproxy","description":"Upstream service time in nanoseconds ","name":"envoyproxy.upstream_service_time","type":"long","format":"duration"},"envoyproxy.request_id":{"category":"envoyproxy","description":"ID of the request ","name":"envoyproxy.request_id","type":"keyword"},"envoyproxy.authority":{"category":"envoyproxy","description":"Envoy proxy authority field ","name":"envoyproxy.authority","type":"keyword"},"envoyproxy.proxy_type":{"category":"envoyproxy","description":"Envoy proxy type, tcp or http ","name":"envoyproxy.proxy_type","type":"keyword"},"fortinet.file.hash.crc32":{"category":"fortinet","description":"CRC32 Hash of file ","name":"fortinet.file.hash.crc32","type":"keyword"},"fortinet.firewall.acct_stat":{"category":"fortinet","description":"Accounting state (RADIUS) ","name":"fortinet.firewall.acct_stat","type":"keyword"},"fortinet.firewall.acktime":{"category":"fortinet","description":"Alarm Acknowledge Time ","name":"fortinet.firewall.acktime","type":"keyword"},"fortinet.firewall.act":{"category":"fortinet","description":"Action ","name":"fortinet.firewall.act","type":"keyword"},"fortinet.firewall.action":{"category":"fortinet","description":"Status of the session ","name":"fortinet.firewall.action","type":"keyword"},"fortinet.firewall.activity":{"category":"fortinet","description":"HA activity message ","name":"fortinet.firewall.activity","type":"keyword"},"fortinet.firewall.addr":{"category":"fortinet","description":"IP Address ","name":"fortinet.firewall.addr","type":"ip"},"fortinet.firewall.addr_type":{"category":"fortinet","description":"Address Type ","name":"fortinet.firewall.addr_type","type":"keyword"},"fortinet.firewall.addrgrp":{"category":"fortinet","description":"Address Group ","name":"fortinet.firewall.addrgrp","type":"keyword"},"fortinet.firewall.adgroup":{"category":"fortinet","description":"AD Group Name ","name":"fortinet.firewall.adgroup","type":"keyword"},"fortinet.firewall.admin":{"category":"fortinet","description":"Admin User ","name":"fortinet.firewall.admin","type":"keyword"},"fortinet.firewall.age":{"category":"fortinet","description":"Time in seconds - time passed since last seen ","name":"fortinet.firewall.age","type":"integer"},"fortinet.firewall.agent":{"category":"fortinet","description":"User agent - eg. agent=\"Mozilla/5.0\" ","name":"fortinet.firewall.agent","type":"keyword"},"fortinet.firewall.alarmid":{"category":"fortinet","description":"Alarm ID ","name":"fortinet.firewall.alarmid","type":"integer"},"fortinet.firewall.alert":{"category":"fortinet","description":"Alert ","name":"fortinet.firewall.alert","type":"keyword"},"fortinet.firewall.analyticscksum":{"category":"fortinet","description":"The checksum of the file submitted for analytics ","name":"fortinet.firewall.analyticscksum","type":"keyword"},"fortinet.firewall.analyticssubmit":{"category":"fortinet","description":"The flag for analytics submission ","name":"fortinet.firewall.analyticssubmit","type":"keyword"},"fortinet.firewall.ap":{"category":"fortinet","description":"Access Point ","name":"fortinet.firewall.ap","type":"keyword"},"fortinet.firewall.app-type":{"category":"fortinet","description":"Address Type ","name":"fortinet.firewall.app-type","type":"keyword"},"fortinet.firewall.appact":{"category":"fortinet","description":"The security action from app control ","name":"fortinet.firewall.appact","type":"keyword"},"fortinet.firewall.appid":{"category":"fortinet","description":"Application ID ","name":"fortinet.firewall.appid","type":"integer"},"fortinet.firewall.applist":{"category":"fortinet","description":"Application Control profile ","name":"fortinet.firewall.applist","type":"keyword"},"fortinet.firewall.apprisk":{"category":"fortinet","description":"Application Risk Level ","name":"fortinet.firewall.apprisk","type":"keyword"},"fortinet.firewall.apscan":{"category":"fortinet","description":"The name of the AP, which scanned and detected the rogue AP ","name":"fortinet.firewall.apscan","type":"keyword"},"fortinet.firewall.apsn":{"category":"fortinet","description":"Access Point ","name":"fortinet.firewall.apsn","type":"keyword"},"fortinet.firewall.apstatus":{"category":"fortinet","description":"Access Point status ","name":"fortinet.firewall.apstatus","type":"keyword"},"fortinet.firewall.aptype":{"category":"fortinet","description":"Access Point type ","name":"fortinet.firewall.aptype","type":"keyword"},"fortinet.firewall.assigned":{"category":"fortinet","description":"Assigned IP Address ","name":"fortinet.firewall.assigned","type":"ip"},"fortinet.firewall.assignip":{"category":"fortinet","description":"Assigned IP Address ","name":"fortinet.firewall.assignip","type":"ip"},"fortinet.firewall.attachment":{"category":"fortinet","description":"The flag for email attachement ","name":"fortinet.firewall.attachment","type":"keyword"},"fortinet.firewall.attack":{"category":"fortinet","description":"Attack Name ","name":"fortinet.firewall.attack","type":"keyword"},"fortinet.firewall.attackcontext":{"category":"fortinet","description":"The trigger patterns and the packetdata with base64 encoding ","name":"fortinet.firewall.attackcontext","type":"keyword"},"fortinet.firewall.attackcontextid":{"category":"fortinet","description":"Attack context id / total ","name":"fortinet.firewall.attackcontextid","type":"keyword"},"fortinet.firewall.attackid":{"category":"fortinet","description":"Attack ID ","name":"fortinet.firewall.attackid","type":"integer"},"fortinet.firewall.auditid":{"category":"fortinet","description":"Audit ID ","name":"fortinet.firewall.auditid","type":"long"},"fortinet.firewall.auditscore":{"category":"fortinet","description":"The Audit Score ","name":"fortinet.firewall.auditscore","type":"keyword"},"fortinet.firewall.audittime":{"category":"fortinet","description":"The time of the audit ","name":"fortinet.firewall.audittime","type":"long"},"fortinet.firewall.authgrp":{"category":"fortinet","description":"Authorization Group ","name":"fortinet.firewall.authgrp","type":"keyword"},"fortinet.firewall.authid":{"category":"fortinet","description":"Authentication ID ","name":"fortinet.firewall.authid","type":"keyword"},"fortinet.firewall.authproto":{"category":"fortinet","description":"The protocol that initiated the authentication ","name":"fortinet.firewall.authproto","type":"keyword"},"fortinet.firewall.authserver":{"category":"fortinet","description":"Authentication server ","name":"fortinet.firewall.authserver","type":"keyword"},"fortinet.firewall.bandwidth":{"category":"fortinet","description":"Bandwidth ","name":"fortinet.firewall.bandwidth","type":"keyword"},"fortinet.firewall.banned_rule":{"category":"fortinet","description":"NAC quarantine Banned Rule Name ","name":"fortinet.firewall.banned_rule","type":"keyword"},"fortinet.firewall.banned_src":{"category":"fortinet","description":"NAC quarantine Banned Source IP ","name":"fortinet.firewall.banned_src","type":"keyword"},"fortinet.firewall.banword":{"category":"fortinet","description":"Banned word ","name":"fortinet.firewall.banword","type":"keyword"},"fortinet.firewall.botnetdomain":{"category":"fortinet","description":"Botnet Domain Name ","name":"fortinet.firewall.botnetdomain","type":"keyword"},"fortinet.firewall.botnetip":{"category":"fortinet","description":"Botnet IP Address ","name":"fortinet.firewall.botnetip","type":"ip"},"fortinet.firewall.bssid":{"category":"fortinet","description":"Service Set ID ","name":"fortinet.firewall.bssid","type":"keyword"},"fortinet.firewall.call_id":{"category":"fortinet","description":"Caller ID ","name":"fortinet.firewall.call_id","type":"keyword"},"fortinet.firewall.carrier_ep":{"category":"fortinet","description":"The FortiOS Carrier end-point identification ","name":"fortinet.firewall.carrier_ep","type":"keyword"},"fortinet.firewall.cat":{"category":"fortinet","description":"DNS category ID ","name":"fortinet.firewall.cat","type":"integer"},"fortinet.firewall.category":{"category":"fortinet","description":"Authentication category ","name":"fortinet.firewall.category","type":"keyword"},"fortinet.firewall.cc":{"category":"fortinet","description":"CC Email Address ","name":"fortinet.firewall.cc","type":"keyword"},"fortinet.firewall.cdrcontent":{"category":"fortinet","description":"Cdrcontent ","name":"fortinet.firewall.cdrcontent","type":"keyword"},"fortinet.firewall.centralnatid":{"category":"fortinet","description":"Central NAT ID ","name":"fortinet.firewall.centralnatid","type":"integer"},"fortinet.firewall.cert":{"category":"fortinet","description":"Certificate ","name":"fortinet.firewall.cert","type":"keyword"},"fortinet.firewall.cert-type":{"category":"fortinet","description":"Certificate type ","name":"fortinet.firewall.cert-type","type":"keyword"},"fortinet.firewall.certhash":{"category":"fortinet","description":"Certificate hash ","name":"fortinet.firewall.certhash","type":"keyword"},"fortinet.firewall.cfgattr":{"category":"fortinet","description":"Configuration attribute ","name":"fortinet.firewall.cfgattr","type":"keyword"},"fortinet.firewall.cfgobj":{"category":"fortinet","description":"Configuration object ","name":"fortinet.firewall.cfgobj","type":"keyword"},"fortinet.firewall.cfgpath":{"category":"fortinet","description":"Configuration path ","name":"fortinet.firewall.cfgpath","type":"keyword"},"fortinet.firewall.cfgtid":{"category":"fortinet","description":"Configuration transaction ID ","name":"fortinet.firewall.cfgtid","type":"keyword"},"fortinet.firewall.cfgtxpower":{"category":"fortinet","description":"Configuration TX power ","name":"fortinet.firewall.cfgtxpower","type":"integer"},"fortinet.firewall.channel":{"category":"fortinet","description":"Wireless Channel ","name":"fortinet.firewall.channel","type":"integer"},"fortinet.firewall.channeltype":{"category":"fortinet","description":"SSH channel type ","name":"fortinet.firewall.channeltype","type":"keyword"},"fortinet.firewall.chassisid":{"category":"fortinet","description":"Chassis ID ","name":"fortinet.firewall.chassisid","type":"integer"},"fortinet.firewall.checksum":{"category":"fortinet","description":"The checksum of the scanned file ","name":"fortinet.firewall.checksum","type":"keyword"},"fortinet.firewall.chgheaders":{"category":"fortinet","description":"HTTP Headers ","name":"fortinet.firewall.chgheaders","type":"keyword"},"fortinet.firewall.cldobjid":{"category":"fortinet","description":"Connector object ID ","name":"fortinet.firewall.cldobjid","type":"keyword"},"fortinet.firewall.client_addr":{"category":"fortinet","description":"Wifi client address ","name":"fortinet.firewall.client_addr","type":"keyword"},"fortinet.firewall.cloudaction":{"category":"fortinet","description":"Cloud Action ","name":"fortinet.firewall.cloudaction","type":"keyword"},"fortinet.firewall.clouduser":{"category":"fortinet","description":"Cloud User ","name":"fortinet.firewall.clouduser","type":"keyword"},"fortinet.firewall.column":{"category":"fortinet","description":"VOIP Column ","name":"fortinet.firewall.column","type":"integer"},"fortinet.firewall.command":{"category":"fortinet","description":"CLI Command ","name":"fortinet.firewall.command","type":"keyword"},"fortinet.firewall.community":{"category":"fortinet","description":"SNMP Community ","name":"fortinet.firewall.community","type":"keyword"},"fortinet.firewall.configcountry":{"category":"fortinet","description":"Configuration country ","name":"fortinet.firewall.configcountry","type":"keyword"},"fortinet.firewall.connection_type":{"category":"fortinet","description":"FortiClient Connection Type ","name":"fortinet.firewall.connection_type","type":"keyword"},"fortinet.firewall.conserve":{"category":"fortinet","description":"Flag for conserve mode ","name":"fortinet.firewall.conserve","type":"keyword"},"fortinet.firewall.constraint":{"category":"fortinet","description":"WAF http protocol restrictions ","name":"fortinet.firewall.constraint","type":"keyword"},"fortinet.firewall.contentdisarmed":{"category":"fortinet","description":"Email scanned content ","name":"fortinet.firewall.contentdisarmed","type":"keyword"},"fortinet.firewall.contenttype":{"category":"fortinet","description":"Content Type from HTTP header ","name":"fortinet.firewall.contenttype","type":"keyword"},"fortinet.firewall.cookies":{"category":"fortinet","description":"VPN Cookie ","name":"fortinet.firewall.cookies","type":"keyword"},"fortinet.firewall.count":{"category":"fortinet","description":"Counts of action type ","name":"fortinet.firewall.count","type":"integer"},"fortinet.firewall.countapp":{"category":"fortinet","description":"Number of App Ctrl logs associated with the session ","name":"fortinet.firewall.countapp","type":"integer"},"fortinet.firewall.countav":{"category":"fortinet","description":"Number of AV logs associated with the session ","name":"fortinet.firewall.countav","type":"integer"},"fortinet.firewall.countcifs":{"category":"fortinet","description":"Number of CIFS logs associated with the session ","name":"fortinet.firewall.countcifs","type":"integer"},"fortinet.firewall.countdlp":{"category":"fortinet","description":"Number of DLP logs associated with the session ","name":"fortinet.firewall.countdlp","type":"integer"},"fortinet.firewall.countdns":{"category":"fortinet","description":"Number of DNS logs associated with the session ","name":"fortinet.firewall.countdns","type":"integer"},"fortinet.firewall.countemail":{"category":"fortinet","description":"Number of email logs associated with the session ","name":"fortinet.firewall.countemail","type":"integer"},"fortinet.firewall.countff":{"category":"fortinet","description":"Number of ff logs associated with the session ","name":"fortinet.firewall.countff","type":"integer"},"fortinet.firewall.countips":{"category":"fortinet","description":"Number of IPS logs associated with the session ","name":"fortinet.firewall.countips","type":"integer"},"fortinet.firewall.countssh":{"category":"fortinet","description":"Number of SSH logs associated with the session ","name":"fortinet.firewall.countssh","type":"integer"},"fortinet.firewall.countssl":{"category":"fortinet","description":"Number of SSL logs associated with the session ","name":"fortinet.firewall.countssl","type":"integer"},"fortinet.firewall.countwaf":{"category":"fortinet","description":"Number of WAF logs associated with the session ","name":"fortinet.firewall.countwaf","type":"integer"},"fortinet.firewall.countweb":{"category":"fortinet","description":"Number of Web filter logs associated with the session ","name":"fortinet.firewall.countweb","type":"integer"},"fortinet.firewall.cpu":{"category":"fortinet","description":"CPU Usage ","name":"fortinet.firewall.cpu","type":"integer"},"fortinet.firewall.craction":{"category":"fortinet","description":"Client Reputation Action ","name":"fortinet.firewall.craction","type":"integer"},"fortinet.firewall.criticalcount":{"category":"fortinet","description":"Number of critical ratings ","name":"fortinet.firewall.criticalcount","type":"integer"},"fortinet.firewall.crl":{"category":"fortinet","description":"Client Reputation Level ","name":"fortinet.firewall.crl","type":"keyword"},"fortinet.firewall.crlevel":{"category":"fortinet","description":"Client Reputation Level ","name":"fortinet.firewall.crlevel","type":"keyword"},"fortinet.firewall.crscore":{"category":"fortinet","description":"Some description ","name":"fortinet.firewall.crscore","type":"integer"},"fortinet.firewall.cveid":{"category":"fortinet","description":"CVE ID ","name":"fortinet.firewall.cveid","type":"keyword"},"fortinet.firewall.daemon":{"category":"fortinet","description":"Daemon name ","name":"fortinet.firewall.daemon","type":"keyword"},"fortinet.firewall.datarange":{"category":"fortinet","description":"Data range for reports ","name":"fortinet.firewall.datarange","type":"keyword"},"fortinet.firewall.date":{"category":"fortinet","description":"Date ","name":"fortinet.firewall.date","type":"keyword"},"fortinet.firewall.ddnsserver":{"category":"fortinet","description":"DDNS server ","name":"fortinet.firewall.ddnsserver","type":"ip"},"fortinet.firewall.desc":{"category":"fortinet","description":"Description ","name":"fortinet.firewall.desc","type":"keyword"},"fortinet.firewall.detectionmethod":{"category":"fortinet","description":"Detection method ","name":"fortinet.firewall.detectionmethod","type":"keyword"},"fortinet.firewall.devcategory":{"category":"fortinet","description":"Device category ","name":"fortinet.firewall.devcategory","type":"keyword"},"fortinet.firewall.devintfname":{"category":"fortinet","description":"HA device Interface Name ","name":"fortinet.firewall.devintfname","type":"keyword"},"fortinet.firewall.devtype":{"category":"fortinet","description":"Device type ","name":"fortinet.firewall.devtype","type":"keyword"},"fortinet.firewall.dhcp_msg":{"category":"fortinet","description":"DHCP Message ","name":"fortinet.firewall.dhcp_msg","type":"keyword"},"fortinet.firewall.dintf":{"category":"fortinet","description":"Destination interface ","name":"fortinet.firewall.dintf","type":"keyword"},"fortinet.firewall.disk":{"category":"fortinet","description":"Assosciated disk ","name":"fortinet.firewall.disk","type":"keyword"},"fortinet.firewall.disklograte":{"category":"fortinet","description":"Disk logging rate ","name":"fortinet.firewall.disklograte","type":"long"},"fortinet.firewall.dlpextra":{"category":"fortinet","description":"DLP extra information ","name":"fortinet.firewall.dlpextra","type":"keyword"},"fortinet.firewall.docsource":{"category":"fortinet","description":"DLP fingerprint document source ","name":"fortinet.firewall.docsource","type":"keyword"},"fortinet.firewall.domainctrlauthstate":{"category":"fortinet","description":"CIFS domain auth state ","name":"fortinet.firewall.domainctrlauthstate","type":"integer"},"fortinet.firewall.domainctrlauthtype":{"category":"fortinet","description":"CIFS domain auth type ","name":"fortinet.firewall.domainctrlauthtype","type":"integer"},"fortinet.firewall.domainctrldomain":{"category":"fortinet","description":"CIFS domain auth domain ","name":"fortinet.firewall.domainctrldomain","type":"keyword"},"fortinet.firewall.domainctrlip":{"category":"fortinet","description":"CIFS Domain IP ","name":"fortinet.firewall.domainctrlip","type":"ip"},"fortinet.firewall.domainctrlname":{"category":"fortinet","description":"CIFS Domain name ","name":"fortinet.firewall.domainctrlname","type":"keyword"},"fortinet.firewall.domainctrlprotocoltype":{"category":"fortinet","description":"CIFS Domain connection protocol ","name":"fortinet.firewall.domainctrlprotocoltype","type":"integer"},"fortinet.firewall.domainctrlusername":{"category":"fortinet","description":"CIFS Domain username ","name":"fortinet.firewall.domainctrlusername","type":"keyword"},"fortinet.firewall.domainfilteridx":{"category":"fortinet","description":"Domain filter ID ","name":"fortinet.firewall.domainfilteridx","type":"integer"},"fortinet.firewall.domainfilterlist":{"category":"fortinet","description":"Domain filter name ","name":"fortinet.firewall.domainfilterlist","type":"keyword"},"fortinet.firewall.ds":{"category":"fortinet","description":"Direction with distribution system ","name":"fortinet.firewall.ds","type":"keyword"},"fortinet.firewall.dst_int":{"category":"fortinet","description":"Destination interface ","name":"fortinet.firewall.dst_int","type":"keyword"},"fortinet.firewall.dstintfrole":{"category":"fortinet","description":"Destination interface role ","name":"fortinet.firewall.dstintfrole","type":"keyword"},"fortinet.firewall.dstcountry":{"category":"fortinet","description":"Destination country ","name":"fortinet.firewall.dstcountry","type":"keyword"},"fortinet.firewall.dstdevcategory":{"category":"fortinet","description":"Destination device category ","name":"fortinet.firewall.dstdevcategory","type":"keyword"},"fortinet.firewall.dstdevtype":{"category":"fortinet","description":"Destination device type ","name":"fortinet.firewall.dstdevtype","type":"keyword"},"fortinet.firewall.dstfamily":{"category":"fortinet","description":"Destination OS family ","name":"fortinet.firewall.dstfamily","type":"keyword"},"fortinet.firewall.dsthwvendor":{"category":"fortinet","description":"Destination HW vendor ","name":"fortinet.firewall.dsthwvendor","type":"keyword"},"fortinet.firewall.dsthwversion":{"category":"fortinet","description":"Destination HW version ","name":"fortinet.firewall.dsthwversion","type":"keyword"},"fortinet.firewall.dstinetsvc":{"category":"fortinet","description":"Destination interface service ","name":"fortinet.firewall.dstinetsvc","type":"keyword"},"fortinet.firewall.dstosname":{"category":"fortinet","description":"Destination OS name ","name":"fortinet.firewall.dstosname","type":"keyword"},"fortinet.firewall.dstosversion":{"category":"fortinet","description":"Destination OS version ","name":"fortinet.firewall.dstosversion","type":"keyword"},"fortinet.firewall.dstserver":{"category":"fortinet","description":"Destination server ","name":"fortinet.firewall.dstserver","type":"integer"},"fortinet.firewall.dstssid":{"category":"fortinet","description":"Destination SSID ","name":"fortinet.firewall.dstssid","type":"keyword"},"fortinet.firewall.dstswversion":{"category":"fortinet","description":"Destination software version ","name":"fortinet.firewall.dstswversion","type":"keyword"},"fortinet.firewall.dstunauthusersource":{"category":"fortinet","description":"Destination unauthenticated source ","name":"fortinet.firewall.dstunauthusersource","type":"keyword"},"fortinet.firewall.dstuuid":{"category":"fortinet","description":"UUID of the Destination IP address ","name":"fortinet.firewall.dstuuid","type":"keyword"},"fortinet.firewall.duid":{"category":"fortinet","description":"DHCP UID ","name":"fortinet.firewall.duid","type":"keyword"},"fortinet.firewall.eapolcnt":{"category":"fortinet","description":"EAPOL packet count ","name":"fortinet.firewall.eapolcnt","type":"integer"},"fortinet.firewall.eapoltype":{"category":"fortinet","description":"EAPOL packet type ","name":"fortinet.firewall.eapoltype","type":"keyword"},"fortinet.firewall.encrypt":{"category":"fortinet","description":"Whether the packet is encrypted or not ","name":"fortinet.firewall.encrypt","type":"integer"},"fortinet.firewall.encryption":{"category":"fortinet","description":"Encryption method ","name":"fortinet.firewall.encryption","type":"keyword"},"fortinet.firewall.epoch":{"category":"fortinet","description":"Epoch used for locating file ","name":"fortinet.firewall.epoch","type":"integer"},"fortinet.firewall.espauth":{"category":"fortinet","description":"ESP Authentication ","name":"fortinet.firewall.espauth","type":"keyword"},"fortinet.firewall.esptransform":{"category":"fortinet","description":"ESP Transform ","name":"fortinet.firewall.esptransform","type":"keyword"},"fortinet.firewall.eventtype":{"category":"fortinet","description":"UTM Event Type ","name":"fortinet.firewall.eventtype","type":"keyword"},"fortinet.firewall.exch":{"category":"fortinet","description":"Mail Exchanges from DNS response answer section ","name":"fortinet.firewall.exch","type":"keyword"},"fortinet.firewall.exchange":{"category":"fortinet","description":"Mail Exchanges from DNS response answer section ","name":"fortinet.firewall.exchange","type":"keyword"},"fortinet.firewall.expectedsignature":{"category":"fortinet","description":"Expected SSL signature ","name":"fortinet.firewall.expectedsignature","type":"keyword"},"fortinet.firewall.expiry":{"category":"fortinet","description":"FortiGuard override expiry timestamp ","name":"fortinet.firewall.expiry","type":"keyword"},"fortinet.firewall.fams_pause":{"category":"fortinet","description":"Fortinet Analysis and Management Service Pause ","name":"fortinet.firewall.fams_pause","type":"integer"},"fortinet.firewall.fazlograte":{"category":"fortinet","description":"FortiAnalyzer Logging Rate ","name":"fortinet.firewall.fazlograte","type":"long"},"fortinet.firewall.fctemssn":{"category":"fortinet","description":"FortiClient Endpoint SSN ","name":"fortinet.firewall.fctemssn","type":"keyword"},"fortinet.firewall.fctuid":{"category":"fortinet","description":"FortiClient UID ","name":"fortinet.firewall.fctuid","type":"keyword"},"fortinet.firewall.field":{"category":"fortinet","description":"NTP status field ","name":"fortinet.firewall.field","type":"keyword"},"fortinet.firewall.filefilter":{"category":"fortinet","description":"The filter used to identify the affected file ","name":"fortinet.firewall.filefilter","type":"keyword"},"fortinet.firewall.filehashsrc":{"category":"fortinet","description":"Filehash source ","name":"fortinet.firewall.filehashsrc","type":"keyword"},"fortinet.firewall.filtercat":{"category":"fortinet","description":"DLP filter category ","name":"fortinet.firewall.filtercat","type":"keyword"},"fortinet.firewall.filteridx":{"category":"fortinet","description":"DLP filter ID ","name":"fortinet.firewall.filteridx","type":"integer"},"fortinet.firewall.filtername":{"category":"fortinet","description":"DLP rule name ","name":"fortinet.firewall.filtername","type":"keyword"},"fortinet.firewall.filtertype":{"category":"fortinet","description":"DLP filter type ","name":"fortinet.firewall.filtertype","type":"keyword"},"fortinet.firewall.fortiguardresp":{"category":"fortinet","description":"Antispam ESP value ","name":"fortinet.firewall.fortiguardresp","type":"keyword"},"fortinet.firewall.forwardedfor":{"category":"fortinet","description":"Email address forwarded ","name":"fortinet.firewall.forwardedfor","type":"keyword"},"fortinet.firewall.fqdn":{"category":"fortinet","description":"FQDN ","name":"fortinet.firewall.fqdn","type":"keyword"},"fortinet.firewall.frametype":{"category":"fortinet","description":"Wireless frametype ","name":"fortinet.firewall.frametype","type":"keyword"},"fortinet.firewall.freediskstorage":{"category":"fortinet","description":"Free disk integer ","name":"fortinet.firewall.freediskstorage","type":"integer"},"fortinet.firewall.from":{"category":"fortinet","description":"From email address ","name":"fortinet.firewall.from","type":"keyword"},"fortinet.firewall.from_vcluster":{"category":"fortinet","description":"Source virtual cluster number ","name":"fortinet.firewall.from_vcluster","type":"integer"},"fortinet.firewall.fsaverdict":{"category":"fortinet","description":"FSA verdict ","name":"fortinet.firewall.fsaverdict","type":"keyword"},"fortinet.firewall.fwserver_name":{"category":"fortinet","description":"Web proxy server name ","name":"fortinet.firewall.fwserver_name","type":"keyword"},"fortinet.firewall.gateway":{"category":"fortinet","description":"Gateway ip address for PPPoE status report ","name":"fortinet.firewall.gateway","type":"ip"},"fortinet.firewall.green":{"category":"fortinet","description":"Memory status ","name":"fortinet.firewall.green","type":"keyword"},"fortinet.firewall.groupid":{"category":"fortinet","description":"User Group ID ","name":"fortinet.firewall.groupid","type":"integer"},"fortinet.firewall.ha-prio":{"category":"fortinet","description":"HA Priority ","name":"fortinet.firewall.ha-prio","type":"integer"},"fortinet.firewall.ha_group":{"category":"fortinet","description":"HA Group ","name":"fortinet.firewall.ha_group","type":"keyword"},"fortinet.firewall.ha_role":{"category":"fortinet","description":"HA Role ","name":"fortinet.firewall.ha_role","type":"keyword"},"fortinet.firewall.handshake":{"category":"fortinet","description":"SSL Handshake ","name":"fortinet.firewall.handshake","type":"keyword"},"fortinet.firewall.hash":{"category":"fortinet","description":"Hash value of downloaded file ","name":"fortinet.firewall.hash","type":"keyword"},"fortinet.firewall.hbdn_reason":{"category":"fortinet","description":"Heartbeat down reason ","name":"fortinet.firewall.hbdn_reason","type":"keyword"},"fortinet.firewall.highcount":{"category":"fortinet","description":"Highcount fabric summary ","name":"fortinet.firewall.highcount","type":"integer"},"fortinet.firewall.host":{"category":"fortinet","description":"Hostname ","name":"fortinet.firewall.host","type":"keyword"},"fortinet.firewall.iaid":{"category":"fortinet","description":"DHCPv6 id ","name":"fortinet.firewall.iaid","type":"keyword"},"fortinet.firewall.icmpcode":{"category":"fortinet","description":"Destination Port of the ICMP message ","name":"fortinet.firewall.icmpcode","type":"keyword"},"fortinet.firewall.icmpid":{"category":"fortinet","description":"Source port of the ICMP message ","name":"fortinet.firewall.icmpid","type":"keyword"},"fortinet.firewall.icmptype":{"category":"fortinet","description":"The type of ICMP message ","name":"fortinet.firewall.icmptype","type":"keyword"},"fortinet.firewall.identifier":{"category":"fortinet","description":"Network traffic identifier ","name":"fortinet.firewall.identifier","type":"integer"},"fortinet.firewall.in_spi":{"category":"fortinet","description":"IPSEC inbound SPI ","name":"fortinet.firewall.in_spi","type":"keyword"},"fortinet.firewall.incidentserialno":{"category":"fortinet","description":"Incident serial number ","name":"fortinet.firewall.incidentserialno","type":"integer"},"fortinet.firewall.infected":{"category":"fortinet","description":"Infected MMS ","name":"fortinet.firewall.infected","type":"integer"},"fortinet.firewall.infectedfilelevel":{"category":"fortinet","description":"DLP infected file level ","name":"fortinet.firewall.infectedfilelevel","type":"integer"},"fortinet.firewall.informationsource":{"category":"fortinet","description":"Information source ","name":"fortinet.firewall.informationsource","type":"keyword"},"fortinet.firewall.init":{"category":"fortinet","description":"IPSEC init stage ","name":"fortinet.firewall.init","type":"keyword"},"fortinet.firewall.initiator":{"category":"fortinet","description":"Original login user name for Fortiguard override ","name":"fortinet.firewall.initiator","type":"keyword"},"fortinet.firewall.interface":{"category":"fortinet","description":"Related interface ","name":"fortinet.firewall.interface","type":"keyword"},"fortinet.firewall.intf":{"category":"fortinet","description":"Related interface ","name":"fortinet.firewall.intf","type":"keyword"},"fortinet.firewall.invalidmac":{"category":"fortinet","description":"The MAC address with invalid OUI ","name":"fortinet.firewall.invalidmac","type":"keyword"},"fortinet.firewall.ip":{"category":"fortinet","description":"Related IP ","name":"fortinet.firewall.ip","type":"ip"},"fortinet.firewall.iptype":{"category":"fortinet","description":"Related IP type ","name":"fortinet.firewall.iptype","type":"keyword"},"fortinet.firewall.keyword":{"category":"fortinet","description":"Keyword used for search ","name":"fortinet.firewall.keyword","type":"keyword"},"fortinet.firewall.kind":{"category":"fortinet","description":"VOIP kind ","name":"fortinet.firewall.kind","type":"keyword"},"fortinet.firewall.lanin":{"category":"fortinet","description":"LAN incoming traffic in bytes ","name":"fortinet.firewall.lanin","type":"long"},"fortinet.firewall.lanout":{"category":"fortinet","description":"LAN outbound traffic in bytes ","name":"fortinet.firewall.lanout","type":"long"},"fortinet.firewall.lease":{"category":"fortinet","description":"DHCP lease ","name":"fortinet.firewall.lease","type":"integer"},"fortinet.firewall.license_limit":{"category":"fortinet","description":"Maximum Number of FortiClients for the License ","name":"fortinet.firewall.license_limit","type":"keyword"},"fortinet.firewall.limit":{"category":"fortinet","description":"Virtual Domain Resource Limit ","name":"fortinet.firewall.limit","type":"integer"},"fortinet.firewall.line":{"category":"fortinet","description":"VOIP line ","name":"fortinet.firewall.line","type":"keyword"},"fortinet.firewall.live":{"category":"fortinet","description":"Time in seconds ","name":"fortinet.firewall.live","type":"integer"},"fortinet.firewall.local":{"category":"fortinet","description":"Local IP for a PPPD Connection ","name":"fortinet.firewall.local","type":"ip"},"fortinet.firewall.log":{"category":"fortinet","description":"Log message ","name":"fortinet.firewall.log","type":"keyword"},"fortinet.firewall.login":{"category":"fortinet","description":"SSH login ","name":"fortinet.firewall.login","type":"keyword"},"fortinet.firewall.lowcount":{"category":"fortinet","description":"Fabric lowcount ","name":"fortinet.firewall.lowcount","type":"integer"},"fortinet.firewall.mac":{"category":"fortinet","description":"DHCP mac address ","name":"fortinet.firewall.mac","type":"keyword"},"fortinet.firewall.malform_data":{"category":"fortinet","description":"VOIP malformed data ","name":"fortinet.firewall.malform_data","type":"integer"},"fortinet.firewall.malform_desc":{"category":"fortinet","description":"VOIP malformed data description ","name":"fortinet.firewall.malform_desc","type":"keyword"},"fortinet.firewall.manuf":{"category":"fortinet","description":"Manufacturer name ","name":"fortinet.firewall.manuf","type":"keyword"},"fortinet.firewall.masterdstmac":{"category":"fortinet","description":"Master mac address for a host with multiple network interfaces ","name":"fortinet.firewall.masterdstmac","type":"keyword"},"fortinet.firewall.mastersrcmac":{"category":"fortinet","description":"The master MAC address for a host that has multiple network interfaces ","name":"fortinet.firewall.mastersrcmac","type":"keyword"},"fortinet.firewall.mediumcount":{"category":"fortinet","description":"Fabric medium count ","name":"fortinet.firewall.mediumcount","type":"integer"},"fortinet.firewall.mem":{"category":"fortinet","description":"Memory usage system statistics ","name":"fortinet.firewall.mem","type":"integer"},"fortinet.firewall.meshmode":{"category":"fortinet","description":"Wireless mesh mode ","name":"fortinet.firewall.meshmode","type":"keyword"},"fortinet.firewall.message_type":{"category":"fortinet","description":"VOIP message type ","name":"fortinet.firewall.message_type","type":"keyword"},"fortinet.firewall.method":{"category":"fortinet","description":"HTTP method ","name":"fortinet.firewall.method","type":"keyword"},"fortinet.firewall.mgmtcnt":{"category":"fortinet","description":"The number of unauthorized client flooding managemet frames ","name":"fortinet.firewall.mgmtcnt","type":"integer"},"fortinet.firewall.mode":{"category":"fortinet","description":"IPSEC mode ","name":"fortinet.firewall.mode","type":"keyword"},"fortinet.firewall.module":{"category":"fortinet","description":"PCI-DSS module ","name":"fortinet.firewall.module","type":"keyword"},"fortinet.firewall.monitor-name":{"category":"fortinet","description":"Health Monitor Name ","name":"fortinet.firewall.monitor-name","type":"keyword"},"fortinet.firewall.monitor-type":{"category":"fortinet","description":"Health Monitor Type ","name":"fortinet.firewall.monitor-type","type":"keyword"},"fortinet.firewall.mpsk":{"category":"fortinet","description":"Wireless MPSK ","name":"fortinet.firewall.mpsk","type":"keyword"},"fortinet.firewall.msgproto":{"category":"fortinet","description":"Message Protocol Number ","name":"fortinet.firewall.msgproto","type":"keyword"},"fortinet.firewall.mtu":{"category":"fortinet","description":"Max Transmission Unit Value ","name":"fortinet.firewall.mtu","type":"integer"},"fortinet.firewall.name":{"category":"fortinet","description":"Name ","name":"fortinet.firewall.name","type":"keyword"},"fortinet.firewall.nat":{"category":"fortinet","description":"NAT IP Address ","name":"fortinet.firewall.nat","type":"keyword"},"fortinet.firewall.netid":{"category":"fortinet","description":"Connector NetID ","name":"fortinet.firewall.netid","type":"keyword"},"fortinet.firewall.new_status":{"category":"fortinet","description":"New status on user change ","name":"fortinet.firewall.new_status","type":"keyword"},"fortinet.firewall.new_value":{"category":"fortinet","description":"New Virtual Domain Name ","name":"fortinet.firewall.new_value","type":"keyword"},"fortinet.firewall.newchannel":{"category":"fortinet","description":"New Channel Number ","name":"fortinet.firewall.newchannel","type":"integer"},"fortinet.firewall.newchassisid":{"category":"fortinet","description":"New Chassis ID ","name":"fortinet.firewall.newchassisid","type":"integer"},"fortinet.firewall.newslot":{"category":"fortinet","description":"New Slot Number ","name":"fortinet.firewall.newslot","type":"integer"},"fortinet.firewall.nextstat":{"category":"fortinet","description":"Time interval in seconds for the next statistics. ","name":"fortinet.firewall.nextstat","type":"integer"},"fortinet.firewall.nf_type":{"category":"fortinet","description":"Notification Type ","name":"fortinet.firewall.nf_type","type":"keyword"},"fortinet.firewall.noise":{"category":"fortinet","description":"Wifi Noise ","name":"fortinet.firewall.noise","type":"integer"},"fortinet.firewall.old_status":{"category":"fortinet","description":"Original Status ","name":"fortinet.firewall.old_status","type":"keyword"},"fortinet.firewall.old_value":{"category":"fortinet","description":"Original Virtual Domain name ","name":"fortinet.firewall.old_value","type":"keyword"},"fortinet.firewall.oldchannel":{"category":"fortinet","description":"Original channel ","name":"fortinet.firewall.oldchannel","type":"integer"},"fortinet.firewall.oldchassisid":{"category":"fortinet","description":"Original Chassis Number ","name":"fortinet.firewall.oldchassisid","type":"integer"},"fortinet.firewall.oldslot":{"category":"fortinet","description":"Original Slot Number ","name":"fortinet.firewall.oldslot","type":"integer"},"fortinet.firewall.oldsn":{"category":"fortinet","description":"Old Serial number ","name":"fortinet.firewall.oldsn","type":"keyword"},"fortinet.firewall.oldwprof":{"category":"fortinet","description":"Old Web Filter Profile ","name":"fortinet.firewall.oldwprof","type":"keyword"},"fortinet.firewall.onwire":{"category":"fortinet","description":"A flag to indicate if the AP is onwire or not ","name":"fortinet.firewall.onwire","type":"keyword"},"fortinet.firewall.opercountry":{"category":"fortinet","description":"Operating Country ","name":"fortinet.firewall.opercountry","type":"keyword"},"fortinet.firewall.opertxpower":{"category":"fortinet","description":"Operating TX power ","name":"fortinet.firewall.opertxpower","type":"integer"},"fortinet.firewall.osname":{"category":"fortinet","description":"Operating System name ","name":"fortinet.firewall.osname","type":"keyword"},"fortinet.firewall.osversion":{"category":"fortinet","description":"Operating System version ","name":"fortinet.firewall.osversion","type":"keyword"},"fortinet.firewall.out_spi":{"category":"fortinet","description":"Out SPI ","name":"fortinet.firewall.out_spi","type":"keyword"},"fortinet.firewall.outintf":{"category":"fortinet","description":"Out interface ","name":"fortinet.firewall.outintf","type":"keyword"},"fortinet.firewall.passedcount":{"category":"fortinet","description":"Fabric passed count ","name":"fortinet.firewall.passedcount","type":"integer"},"fortinet.firewall.passwd":{"category":"fortinet","description":"Changed user password information ","name":"fortinet.firewall.passwd","type":"keyword"},"fortinet.firewall.path":{"category":"fortinet","description":"Path of looped configuration for security fabric ","name":"fortinet.firewall.path","type":"keyword"},"fortinet.firewall.peer":{"category":"fortinet","description":"WAN optimization peer ","name":"fortinet.firewall.peer","type":"keyword"},"fortinet.firewall.peer_notif":{"category":"fortinet","description":"VPN peer notification ","name":"fortinet.firewall.peer_notif","type":"keyword"},"fortinet.firewall.phase2_name":{"category":"fortinet","description":"VPN phase2 name ","name":"fortinet.firewall.phase2_name","type":"keyword"},"fortinet.firewall.phone":{"category":"fortinet","description":"VOIP Phone ","name":"fortinet.firewall.phone","type":"keyword"},"fortinet.firewall.pid":{"category":"fortinet","description":"Process ID ","name":"fortinet.firewall.pid","type":"integer"},"fortinet.firewall.policytype":{"category":"fortinet","description":"Policy Type ","name":"fortinet.firewall.policytype","type":"keyword"},"fortinet.firewall.poolname":{"category":"fortinet","description":"IP Pool name ","name":"fortinet.firewall.poolname","type":"keyword"},"fortinet.firewall.port":{"category":"fortinet","description":"Log upload error port ","name":"fortinet.firewall.port","type":"integer"},"fortinet.firewall.portbegin":{"category":"fortinet","description":"IP Pool port number to begin ","name":"fortinet.firewall.portbegin","type":"integer"},"fortinet.firewall.portend":{"category":"fortinet","description":"IP Pool port number to end ","name":"fortinet.firewall.portend","type":"integer"},"fortinet.firewall.probeproto":{"category":"fortinet","description":"Link Monitor Probe Protocol ","name":"fortinet.firewall.probeproto","type":"keyword"},"fortinet.firewall.process":{"category":"fortinet","description":"URL Filter process ","name":"fortinet.firewall.process","type":"keyword"},"fortinet.firewall.processtime":{"category":"fortinet","description":"Process time for reports ","name":"fortinet.firewall.processtime","type":"integer"},"fortinet.firewall.profile":{"category":"fortinet","description":"Profile Name ","name":"fortinet.firewall.profile","type":"keyword"},"fortinet.firewall.profile_vd":{"category":"fortinet","description":"Virtual Domain Name ","name":"fortinet.firewall.profile_vd","type":"keyword"},"fortinet.firewall.profilegroup":{"category":"fortinet","description":"Profile Group Name ","name":"fortinet.firewall.profilegroup","type":"keyword"},"fortinet.firewall.profiletype":{"category":"fortinet","description":"Profile Type ","name":"fortinet.firewall.profiletype","type":"keyword"},"fortinet.firewall.qtypeval":{"category":"fortinet","description":"DNS question type value ","name":"fortinet.firewall.qtypeval","type":"integer"},"fortinet.firewall.quarskip":{"category":"fortinet","description":"Quarantine skip explanation ","name":"fortinet.firewall.quarskip","type":"keyword"},"fortinet.firewall.quotaexceeded":{"category":"fortinet","description":"If quota has been exceeded ","name":"fortinet.firewall.quotaexceeded","type":"keyword"},"fortinet.firewall.quotamax":{"category":"fortinet","description":"Maximum quota allowed - in seconds if time-based - in bytes if traffic-based ","name":"fortinet.firewall.quotamax","type":"long"},"fortinet.firewall.quotatype":{"category":"fortinet","description":"Quota type ","name":"fortinet.firewall.quotatype","type":"keyword"},"fortinet.firewall.quotaused":{"category":"fortinet","description":"Quota used - in seconds if time-based - in bytes if trafficbased) ","name":"fortinet.firewall.quotaused","type":"long"},"fortinet.firewall.radioband":{"category":"fortinet","description":"Radio band ","name":"fortinet.firewall.radioband","type":"keyword"},"fortinet.firewall.radioid":{"category":"fortinet","description":"Radio ID ","name":"fortinet.firewall.radioid","type":"integer"},"fortinet.firewall.radioidclosest":{"category":"fortinet","description":"Radio ID on the AP closest the rogue AP ","name":"fortinet.firewall.radioidclosest","type":"integer"},"fortinet.firewall.radioiddetected":{"category":"fortinet","description":"Radio ID on the AP which detected the rogue AP ","name":"fortinet.firewall.radioiddetected","type":"integer"},"fortinet.firewall.rate":{"category":"fortinet","description":"Wireless rogue rate value ","name":"fortinet.firewall.rate","type":"keyword"},"fortinet.firewall.rawdata":{"category":"fortinet","description":"Raw data value ","name":"fortinet.firewall.rawdata","type":"keyword"},"fortinet.firewall.rawdataid":{"category":"fortinet","description":"Raw data ID ","name":"fortinet.firewall.rawdataid","type":"keyword"},"fortinet.firewall.rcvddelta":{"category":"fortinet","description":"Received bytes delta ","name":"fortinet.firewall.rcvddelta","type":"keyword"},"fortinet.firewall.reason":{"category":"fortinet","description":"Alert reason ","name":"fortinet.firewall.reason","type":"keyword"},"fortinet.firewall.received":{"category":"fortinet","description":"Server key exchange received ","name":"fortinet.firewall.received","type":"integer"},"fortinet.firewall.receivedsignature":{"category":"fortinet","description":"Server key exchange received signature ","name":"fortinet.firewall.receivedsignature","type":"keyword"},"fortinet.firewall.red":{"category":"fortinet","description":"Memory information in red ","name":"fortinet.firewall.red","type":"keyword"},"fortinet.firewall.referralurl":{"category":"fortinet","description":"Web filter referralurl ","name":"fortinet.firewall.referralurl","type":"keyword"},"fortinet.firewall.remote":{"category":"fortinet","description":"Remote PPP IP address ","name":"fortinet.firewall.remote","type":"ip"},"fortinet.firewall.remotewtptime":{"category":"fortinet","description":"Remote Wifi Radius authentication time ","name":"fortinet.firewall.remotewtptime","type":"keyword"},"fortinet.firewall.reporttype":{"category":"fortinet","description":"Report type ","name":"fortinet.firewall.reporttype","type":"keyword"},"fortinet.firewall.reqtype":{"category":"fortinet","description":"Request type ","name":"fortinet.firewall.reqtype","type":"keyword"},"fortinet.firewall.request_name":{"category":"fortinet","description":"VOIP request name ","name":"fortinet.firewall.request_name","type":"keyword"},"fortinet.firewall.result":{"category":"fortinet","description":"VPN phase result ","name":"fortinet.firewall.result","type":"keyword"},"fortinet.firewall.role":{"category":"fortinet","description":"VPN Phase 2 role ","name":"fortinet.firewall.role","type":"keyword"},"fortinet.firewall.rssi":{"category":"fortinet","description":"Received signal strength indicator ","name":"fortinet.firewall.rssi","type":"integer"},"fortinet.firewall.rsso_key":{"category":"fortinet","description":"RADIUS SSO attribute value ","name":"fortinet.firewall.rsso_key","type":"keyword"},"fortinet.firewall.ruledata":{"category":"fortinet","description":"Rule data ","name":"fortinet.firewall.ruledata","type":"keyword"},"fortinet.firewall.ruletype":{"category":"fortinet","description":"Rule type ","name":"fortinet.firewall.ruletype","type":"keyword"},"fortinet.firewall.scanned":{"category":"fortinet","description":"Number of Scanned MMSs ","name":"fortinet.firewall.scanned","type":"integer"},"fortinet.firewall.scantime":{"category":"fortinet","description":"Scanned time ","name":"fortinet.firewall.scantime","type":"long"},"fortinet.firewall.scope":{"category":"fortinet","description":"FortiGuard Override Scope ","name":"fortinet.firewall.scope","type":"keyword"},"fortinet.firewall.security":{"category":"fortinet","description":"Wireless rogue security ","name":"fortinet.firewall.security","type":"keyword"},"fortinet.firewall.sensitivity":{"category":"fortinet","description":"Sensitivity for document fingerprint ","name":"fortinet.firewall.sensitivity","type":"keyword"},"fortinet.firewall.sensor":{"category":"fortinet","description":"NAC Sensor Name ","name":"fortinet.firewall.sensor","type":"keyword"},"fortinet.firewall.sentdelta":{"category":"fortinet","description":"Sent bytes delta ","name":"fortinet.firewall.sentdelta","type":"keyword"},"fortinet.firewall.seq":{"category":"fortinet","description":"Sequence number ","name":"fortinet.firewall.seq","type":"keyword"},"fortinet.firewall.serial":{"category":"fortinet","description":"WAN optimisation serial ","name":"fortinet.firewall.serial","type":"keyword"},"fortinet.firewall.serialno":{"category":"fortinet","description":"Serial number ","name":"fortinet.firewall.serialno","type":"keyword"},"fortinet.firewall.server":{"category":"fortinet","description":"AD server FQDN or IP ","name":"fortinet.firewall.server","type":"keyword"},"fortinet.firewall.session_id":{"category":"fortinet","description":"Session ID ","name":"fortinet.firewall.session_id","type":"keyword"},"fortinet.firewall.sessionid":{"category":"fortinet","description":"WAD Session ID ","name":"fortinet.firewall.sessionid","type":"integer"},"fortinet.firewall.setuprate":{"category":"fortinet","description":"Session Setup Rate ","name":"fortinet.firewall.setuprate","type":"long"},"fortinet.firewall.severity":{"category":"fortinet","description":"Severity ","name":"fortinet.firewall.severity","type":"keyword"},"fortinet.firewall.shaperdroprcvdbyte":{"category":"fortinet","description":"Received bytes dropped by shaper ","name":"fortinet.firewall.shaperdroprcvdbyte","type":"integer"},"fortinet.firewall.shaperdropsentbyte":{"category":"fortinet","description":"Sent bytes dropped by shaper ","name":"fortinet.firewall.shaperdropsentbyte","type":"integer"},"fortinet.firewall.shaperperipdropbyte":{"category":"fortinet","description":"Dropped bytes per IP by shaper ","name":"fortinet.firewall.shaperperipdropbyte","type":"integer"},"fortinet.firewall.shaperperipname":{"category":"fortinet","description":"Traffic shaper name (per IP) ","name":"fortinet.firewall.shaperperipname","type":"keyword"},"fortinet.firewall.shaperrcvdname":{"category":"fortinet","description":"Traffic shaper name for received traffic ","name":"fortinet.firewall.shaperrcvdname","type":"keyword"},"fortinet.firewall.shapersentname":{"category":"fortinet","description":"Traffic shaper name for sent traffic ","name":"fortinet.firewall.shapersentname","type":"keyword"},"fortinet.firewall.shapingpolicyid":{"category":"fortinet","description":"Traffic shaper policy ID ","name":"fortinet.firewall.shapingpolicyid","type":"integer"},"fortinet.firewall.signal":{"category":"fortinet","description":"Wireless rogue API signal ","name":"fortinet.firewall.signal","type":"integer"},"fortinet.firewall.size":{"category":"fortinet","description":"Email size in bytes ","name":"fortinet.firewall.size","type":"long"},"fortinet.firewall.slot":{"category":"fortinet","description":"Slot number ","name":"fortinet.firewall.slot","type":"integer"},"fortinet.firewall.sn":{"category":"fortinet","description":"Security fabric serial number ","name":"fortinet.firewall.sn","type":"keyword"},"fortinet.firewall.snclosest":{"category":"fortinet","description":"SN of the AP closest to the rogue AP ","name":"fortinet.firewall.snclosest","type":"keyword"},"fortinet.firewall.sndetected":{"category":"fortinet","description":"SN of the AP which detected the rogue AP ","name":"fortinet.firewall.sndetected","type":"keyword"},"fortinet.firewall.snmeshparent":{"category":"fortinet","description":"SN of the mesh parent ","name":"fortinet.firewall.snmeshparent","type":"keyword"},"fortinet.firewall.spi":{"category":"fortinet","description":"IPSEC SPI ","name":"fortinet.firewall.spi","type":"keyword"},"fortinet.firewall.src_int":{"category":"fortinet","description":"Source interface ","name":"fortinet.firewall.src_int","type":"keyword"},"fortinet.firewall.srcintfrole":{"category":"fortinet","description":"Source interface role ","name":"fortinet.firewall.srcintfrole","type":"keyword"},"fortinet.firewall.srccountry":{"category":"fortinet","description":"Source country ","name":"fortinet.firewall.srccountry","type":"keyword"},"fortinet.firewall.srcfamily":{"category":"fortinet","description":"Source family ","name":"fortinet.firewall.srcfamily","type":"keyword"},"fortinet.firewall.srchwvendor":{"category":"fortinet","description":"Source hardware vendor ","name":"fortinet.firewall.srchwvendor","type":"keyword"},"fortinet.firewall.srchwversion":{"category":"fortinet","description":"Source hardware version ","name":"fortinet.firewall.srchwversion","type":"keyword"},"fortinet.firewall.srcinetsvc":{"category":"fortinet","description":"Source interface service ","name":"fortinet.firewall.srcinetsvc","type":"keyword"},"fortinet.firewall.srcname":{"category":"fortinet","description":"Source name ","name":"fortinet.firewall.srcname","type":"keyword"},"fortinet.firewall.srcserver":{"category":"fortinet","description":"Source server ","name":"fortinet.firewall.srcserver","type":"integer"},"fortinet.firewall.srcssid":{"category":"fortinet","description":"Source SSID ","name":"fortinet.firewall.srcssid","type":"keyword"},"fortinet.firewall.srcswversion":{"category":"fortinet","description":"Source software version ","name":"fortinet.firewall.srcswversion","type":"keyword"},"fortinet.firewall.srcuuid":{"category":"fortinet","description":"Source UUID ","name":"fortinet.firewall.srcuuid","type":"keyword"},"fortinet.firewall.sscname":{"category":"fortinet","description":"SSC name ","name":"fortinet.firewall.sscname","type":"keyword"},"fortinet.firewall.ssid":{"category":"fortinet","description":"Base Service Set ID ","name":"fortinet.firewall.ssid","type":"keyword"},"fortinet.firewall.sslaction":{"category":"fortinet","description":"SSL Action ","name":"fortinet.firewall.sslaction","type":"keyword"},"fortinet.firewall.ssllocal":{"category":"fortinet","description":"WAD SSL local ","name":"fortinet.firewall.ssllocal","type":"keyword"},"fortinet.firewall.sslremote":{"category":"fortinet","description":"WAD SSL remote ","name":"fortinet.firewall.sslremote","type":"keyword"},"fortinet.firewall.stacount":{"category":"fortinet","description":"Number of stations/clients ","name":"fortinet.firewall.stacount","type":"integer"},"fortinet.firewall.stage":{"category":"fortinet","description":"IPSEC stage ","name":"fortinet.firewall.stage","type":"keyword"},"fortinet.firewall.stamac":{"category":"fortinet","description":"802.1x station mac ","name":"fortinet.firewall.stamac","type":"keyword"},"fortinet.firewall.state":{"category":"fortinet","description":"Admin login state ","name":"fortinet.firewall.state","type":"keyword"},"fortinet.firewall.status":{"category":"fortinet","description":"Status ","name":"fortinet.firewall.status","type":"keyword"},"fortinet.firewall.stitch":{"category":"fortinet","description":"Automation stitch triggered ","name":"fortinet.firewall.stitch","type":"keyword"},"fortinet.firewall.subject":{"category":"fortinet","description":"Email subject ","name":"fortinet.firewall.subject","type":"keyword"},"fortinet.firewall.submodule":{"category":"fortinet","description":"Configuration Sub-Module Name ","name":"fortinet.firewall.submodule","type":"keyword"},"fortinet.firewall.subservice":{"category":"fortinet","description":"AV subservice ","name":"fortinet.firewall.subservice","type":"keyword"},"fortinet.firewall.subtype":{"category":"fortinet","description":"Log subtype ","name":"fortinet.firewall.subtype","type":"keyword"},"fortinet.firewall.suspicious":{"category":"fortinet","description":"Number of Suspicious MMSs ","name":"fortinet.firewall.suspicious","type":"integer"},"fortinet.firewall.switchproto":{"category":"fortinet","description":"Protocol change information ","name":"fortinet.firewall.switchproto","type":"keyword"},"fortinet.firewall.sync_status":{"category":"fortinet","description":"The sync status with the master ","name":"fortinet.firewall.sync_status","type":"keyword"},"fortinet.firewall.sync_type":{"category":"fortinet","description":"The sync type with the master ","name":"fortinet.firewall.sync_type","type":"keyword"},"fortinet.firewall.sysuptime":{"category":"fortinet","description":"System uptime ","name":"fortinet.firewall.sysuptime","type":"keyword"},"fortinet.firewall.tamac":{"category":"fortinet","description":"the MAC address of Transmitter, if none, then Receiver ","name":"fortinet.firewall.tamac","type":"keyword"},"fortinet.firewall.threattype":{"category":"fortinet","description":"WIDS threat type ","name":"fortinet.firewall.threattype","type":"keyword"},"fortinet.firewall.time":{"category":"fortinet","description":"Time of the event ","name":"fortinet.firewall.time","type":"keyword"},"fortinet.firewall.to":{"category":"fortinet","description":"Email to field ","name":"fortinet.firewall.to","type":"keyword"},"fortinet.firewall.to_vcluster":{"category":"fortinet","description":"destination virtual cluster number ","name":"fortinet.firewall.to_vcluster","type":"integer"},"fortinet.firewall.total":{"category":"fortinet","description":"Total memory ","name":"fortinet.firewall.total","type":"integer"},"fortinet.firewall.totalsession":{"category":"fortinet","description":"Total Number of Sessions ","name":"fortinet.firewall.totalsession","type":"integer"},"fortinet.firewall.trace_id":{"category":"fortinet","description":"Session clash trace ID ","name":"fortinet.firewall.trace_id","type":"keyword"},"fortinet.firewall.trandisp":{"category":"fortinet","description":"NAT translation type ","name":"fortinet.firewall.trandisp","type":"keyword"},"fortinet.firewall.transid":{"category":"fortinet","description":"HTTP transaction ID ","name":"fortinet.firewall.transid","type":"integer"},"fortinet.firewall.translationid":{"category":"fortinet","description":"DNS filter transaltion ID ","name":"fortinet.firewall.translationid","type":"keyword"},"fortinet.firewall.trigger":{"category":"fortinet","description":"Automation stitch trigger ","name":"fortinet.firewall.trigger","type":"keyword"},"fortinet.firewall.trueclntip":{"category":"fortinet","description":"File filter true client IP ","name":"fortinet.firewall.trueclntip","type":"ip"},"fortinet.firewall.tunnelid":{"category":"fortinet","description":"IPSEC tunnel ID ","name":"fortinet.firewall.tunnelid","type":"integer"},"fortinet.firewall.tunnelip":{"category":"fortinet","description":"IPSEC tunnel IP ","name":"fortinet.firewall.tunnelip","type":"ip"},"fortinet.firewall.tunneltype":{"category":"fortinet","description":"IPSEC tunnel type ","name":"fortinet.firewall.tunneltype","type":"keyword"},"fortinet.firewall.type":{"category":"fortinet","description":"Module type ","name":"fortinet.firewall.type","type":"keyword"},"fortinet.firewall.ui":{"category":"fortinet","description":"Admin authentication UI type ","name":"fortinet.firewall.ui","type":"keyword"},"fortinet.firewall.unauthusersource":{"category":"fortinet","description":"Unauthenticated user source ","name":"fortinet.firewall.unauthusersource","type":"keyword"},"fortinet.firewall.unit":{"category":"fortinet","description":"Power supply unit ","name":"fortinet.firewall.unit","type":"integer"},"fortinet.firewall.urlfilteridx":{"category":"fortinet","description":"URL filter ID ","name":"fortinet.firewall.urlfilteridx","type":"integer"},"fortinet.firewall.urlfilterlist":{"category":"fortinet","description":"URL filter list ","name":"fortinet.firewall.urlfilterlist","type":"keyword"},"fortinet.firewall.urlsource":{"category":"fortinet","description":"URL filter source ","name":"fortinet.firewall.urlsource","type":"keyword"},"fortinet.firewall.urltype":{"category":"fortinet","description":"URL filter type ","name":"fortinet.firewall.urltype","type":"keyword"},"fortinet.firewall.used":{"category":"fortinet","description":"Number of Used IPs ","name":"fortinet.firewall.used","type":"integer"},"fortinet.firewall.used_for_type":{"category":"fortinet","description":"Connection for the type ","name":"fortinet.firewall.used_for_type","type":"integer"},"fortinet.firewall.utmaction":{"category":"fortinet","description":"Security action performed by UTM ","name":"fortinet.firewall.utmaction","type":"keyword"},"fortinet.firewall.utmref":{"category":"fortinet","description":"Reference to UTM ","name":"fortinet.firewall.utmref","type":"keyword"},"fortinet.firewall.vap":{"category":"fortinet","description":"Virtual AP ","name":"fortinet.firewall.vap","type":"keyword"},"fortinet.firewall.vapmode":{"category":"fortinet","description":"Virtual AP mode ","name":"fortinet.firewall.vapmode","type":"keyword"},"fortinet.firewall.vcluster":{"category":"fortinet","description":"virtual cluster id ","name":"fortinet.firewall.vcluster","type":"integer"},"fortinet.firewall.vcluster_member":{"category":"fortinet","description":"Virtual cluster member ","name":"fortinet.firewall.vcluster_member","type":"integer"},"fortinet.firewall.vcluster_state":{"category":"fortinet","description":"Virtual cluster state ","name":"fortinet.firewall.vcluster_state","type":"keyword"},"fortinet.firewall.vd":{"category":"fortinet","description":"Virtual Domain Name ","name":"fortinet.firewall.vd","type":"keyword"},"fortinet.firewall.vdname":{"category":"fortinet","description":"Virtual Domain Name ","name":"fortinet.firewall.vdname","type":"keyword"},"fortinet.firewall.vendorurl":{"category":"fortinet","description":"Vulnerability scan vendor name ","name":"fortinet.firewall.vendorurl","type":"keyword"},"fortinet.firewall.version":{"category":"fortinet","description":"Version ","name":"fortinet.firewall.version","type":"keyword"},"fortinet.firewall.vip":{"category":"fortinet","description":"Virtual IP ","name":"fortinet.firewall.vip","type":"keyword"},"fortinet.firewall.virus":{"category":"fortinet","description":"Virus name ","name":"fortinet.firewall.virus","type":"keyword"},"fortinet.firewall.virusid":{"category":"fortinet","description":"Virus ID (unique virus identifier) ","name":"fortinet.firewall.virusid","type":"integer"},"fortinet.firewall.voip_proto":{"category":"fortinet","description":"VOIP protocol ","name":"fortinet.firewall.voip_proto","type":"keyword"},"fortinet.firewall.vpn":{"category":"fortinet","description":"VPN description ","name":"fortinet.firewall.vpn","type":"keyword"},"fortinet.firewall.vpntunnel":{"category":"fortinet","description":"IPsec Vpn Tunnel Name ","name":"fortinet.firewall.vpntunnel","type":"keyword"},"fortinet.firewall.vpntype":{"category":"fortinet","description":"The type of the VPN tunnel ","name":"fortinet.firewall.vpntype","type":"keyword"},"fortinet.firewall.vrf":{"category":"fortinet","description":"VRF number ","name":"fortinet.firewall.vrf","type":"integer"},"fortinet.firewall.vulncat":{"category":"fortinet","description":"Vulnerability Category ","name":"fortinet.firewall.vulncat","type":"keyword"},"fortinet.firewall.vulnid":{"category":"fortinet","description":"Vulnerability ID ","name":"fortinet.firewall.vulnid","type":"integer"},"fortinet.firewall.vulnname":{"category":"fortinet","description":"Vulnerability name ","name":"fortinet.firewall.vulnname","type":"keyword"},"fortinet.firewall.vwlid":{"category":"fortinet","description":"VWL ID ","name":"fortinet.firewall.vwlid","type":"integer"},"fortinet.firewall.vwlquality":{"category":"fortinet","description":"VWL quality ","name":"fortinet.firewall.vwlquality","type":"keyword"},"fortinet.firewall.vwlservice":{"category":"fortinet","description":"VWL service ","name":"fortinet.firewall.vwlservice","type":"keyword"},"fortinet.firewall.vwpvlanid":{"category":"fortinet","description":"VWP VLAN ID ","name":"fortinet.firewall.vwpvlanid","type":"integer"},"fortinet.firewall.wanin":{"category":"fortinet","description":"WAN incoming traffic in bytes ","name":"fortinet.firewall.wanin","type":"long"},"fortinet.firewall.wanoptapptype":{"category":"fortinet","description":"WAN Optimization Application type ","name":"fortinet.firewall.wanoptapptype","type":"keyword"},"fortinet.firewall.wanout":{"category":"fortinet","description":"WAN outgoing traffic in bytes ","name":"fortinet.firewall.wanout","type":"long"},"fortinet.firewall.weakwepiv":{"category":"fortinet","description":"Weak Wep Initiation Vector ","name":"fortinet.firewall.weakwepiv","type":"keyword"},"fortinet.firewall.xauthgroup":{"category":"fortinet","description":"XAuth Group Name ","name":"fortinet.firewall.xauthgroup","type":"keyword"},"fortinet.firewall.xauthuser":{"category":"fortinet","description":"XAuth User Name ","name":"fortinet.firewall.xauthuser","type":"keyword"},"fortinet.firewall.xid":{"category":"fortinet","description":"Wireless X ID ","name":"fortinet.firewall.xid","type":"integer"},"gcp.destination.instance.project_id":{"category":"gcp","description":"ID of the project containing the VM. ","name":"gcp.destination.instance.project_id","type":"keyword"},"gcp.destination.instance.region":{"category":"gcp","description":"Region of the VM. ","name":"gcp.destination.instance.region","type":"keyword"},"gcp.destination.instance.zone":{"category":"gcp","description":"Zone of the VM. ","name":"gcp.destination.instance.zone","type":"keyword"},"gcp.destination.vpc.project_id":{"category":"gcp","description":"ID of the project containing the VM. ","name":"gcp.destination.vpc.project_id","type":"keyword"},"gcp.destination.vpc.vpc_name":{"category":"gcp","description":"VPC on which the VM is operating. ","name":"gcp.destination.vpc.vpc_name","type":"keyword"},"gcp.destination.vpc.subnetwork_name":{"category":"gcp","description":"Subnetwork on which the VM is operating. ","name":"gcp.destination.vpc.subnetwork_name","type":"keyword"},"gcp.source.instance.project_id":{"category":"gcp","description":"ID of the project containing the VM. ","name":"gcp.source.instance.project_id","type":"keyword"},"gcp.source.instance.region":{"category":"gcp","description":"Region of the VM. ","name":"gcp.source.instance.region","type":"keyword"},"gcp.source.instance.zone":{"category":"gcp","description":"Zone of the VM. ","name":"gcp.source.instance.zone","type":"keyword"},"gcp.source.vpc.project_id":{"category":"gcp","description":"ID of the project containing the VM. ","name":"gcp.source.vpc.project_id","type":"keyword"},"gcp.source.vpc.vpc_name":{"category":"gcp","description":"VPC on which the VM is operating. ","name":"gcp.source.vpc.vpc_name","type":"keyword"},"gcp.source.vpc.subnetwork_name":{"category":"gcp","description":"Subnetwork on which the VM is operating. ","name":"gcp.source.vpc.subnetwork_name","type":"keyword"},"gcp.audit.type":{"category":"gcp","description":"Type property. ","name":"gcp.audit.type","type":"keyword"},"gcp.audit.authentication_info.principal_email":{"category":"gcp","description":"The email address of the authenticated user making the request. ","name":"gcp.audit.authentication_info.principal_email","type":"keyword"},"gcp.audit.authentication_info.authority_selector":{"category":"gcp","description":"The authority selector specified by the requestor, if any. It is not guaranteed that the principal was allowed to use this authority. ","name":"gcp.audit.authentication_info.authority_selector","type":"keyword"},"gcp.audit.authorization_info.permission":{"category":"gcp","description":"The required IAM permission. ","name":"gcp.audit.authorization_info.permission","type":"keyword"},"gcp.audit.authorization_info.granted":{"category":"gcp","description":"Whether or not authorization for resource and permission was granted. ","name":"gcp.audit.authorization_info.granted","type":"boolean"},"gcp.audit.authorization_info.resource_attributes.service":{"category":"gcp","description":"The name of the service. ","name":"gcp.audit.authorization_info.resource_attributes.service","type":"keyword"},"gcp.audit.authorization_info.resource_attributes.name":{"category":"gcp","description":"The name of the resource. ","name":"gcp.audit.authorization_info.resource_attributes.name","type":"keyword"},"gcp.audit.authorization_info.resource_attributes.type":{"category":"gcp","description":"The type of the resource. ","name":"gcp.audit.authorization_info.resource_attributes.type","type":"keyword"},"gcp.audit.method_name":{"category":"gcp","description":"The name of the service method or operation. For API calls, this should be the name of the API method. For example, 'google.datastore.v1.Datastore.RunQuery'. ","name":"gcp.audit.method_name","type":"keyword"},"gcp.audit.num_response_items":{"category":"gcp","description":"The number of items returned from a List or Query API method, if applicable. ","name":"gcp.audit.num_response_items","type":"long"},"gcp.audit.request.proto_name":{"category":"gcp","description":"Type property of the request. ","name":"gcp.audit.request.proto_name","type":"keyword"},"gcp.audit.request.filter":{"category":"gcp","description":"Filter of the request. ","name":"gcp.audit.request.filter","type":"keyword"},"gcp.audit.request.name":{"category":"gcp","description":"Name of the request. ","name":"gcp.audit.request.name","type":"keyword"},"gcp.audit.request.resource_name":{"category":"gcp","description":"Name of the request resource. ","name":"gcp.audit.request.resource_name","type":"keyword"},"gcp.audit.request_metadata.caller_ip":{"category":"gcp","description":"The IP address of the caller. ","name":"gcp.audit.request_metadata.caller_ip","type":"ip"},"gcp.audit.request_metadata.caller_supplied_user_agent":{"category":"gcp","description":"The user agent of the caller. This information is not authenticated and should be treated accordingly. ","name":"gcp.audit.request_metadata.caller_supplied_user_agent","type":"keyword"},"gcp.audit.response.proto_name":{"category":"gcp","description":"Type property of the response. ","name":"gcp.audit.response.proto_name","type":"keyword"},"gcp.audit.response.details.group":{"category":"gcp","description":"The name of the group. ","name":"gcp.audit.response.details.group","type":"keyword"},"gcp.audit.response.details.kind":{"category":"gcp","description":"The kind of the response details. ","name":"gcp.audit.response.details.kind","type":"keyword"},"gcp.audit.response.details.name":{"category":"gcp","description":"The name of the response details. ","name":"gcp.audit.response.details.name","type":"keyword"},"gcp.audit.response.details.uid":{"category":"gcp","description":"The uid of the response details. ","name":"gcp.audit.response.details.uid","type":"keyword"},"gcp.audit.response.status":{"category":"gcp","description":"Status of the response. ","name":"gcp.audit.response.status","type":"keyword"},"gcp.audit.resource_name":{"category":"gcp","description":"The resource or collection that is the target of the operation. The name is a scheme-less URI, not including the API service name. For example, 'shelves/SHELF_ID/books'. ","name":"gcp.audit.resource_name","type":"keyword"},"gcp.audit.resource_location.current_locations":{"category":"gcp","description":"Current locations of the resource. ","name":"gcp.audit.resource_location.current_locations","type":"keyword"},"gcp.audit.service_name":{"category":"gcp","description":"The name of the API service performing the operation. For example, datastore.googleapis.com. ","name":"gcp.audit.service_name","type":"keyword"},"gcp.audit.status.code":{"category":"gcp","description":"The status code, which should be an enum value of google.rpc.Code. ","name":"gcp.audit.status.code","type":"integer"},"gcp.audit.status.message":{"category":"gcp","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client. ","name":"gcp.audit.status.message","type":"keyword"},"gcp.firewall.rule_details.priority":{"category":"gcp","description":"The priority for the firewall rule.","name":"gcp.firewall.rule_details.priority","type":"long"},"gcp.firewall.rule_details.action":{"category":"gcp","description":"Action that the rule performs on match.","name":"gcp.firewall.rule_details.action","type":"keyword"},"gcp.firewall.rule_details.direction":{"category":"gcp","description":"Direction of traffic that matches this rule.","name":"gcp.firewall.rule_details.direction","type":"keyword"},"gcp.firewall.rule_details.reference":{"category":"gcp","description":"Reference to the firewall rule.","name":"gcp.firewall.rule_details.reference","type":"keyword"},"gcp.firewall.rule_details.source_range":{"category":"gcp","description":"List of source ranges that the firewall rule applies to.","name":"gcp.firewall.rule_details.source_range","type":"keyword"},"gcp.firewall.rule_details.destination_range":{"category":"gcp","description":"List of destination ranges that the firewall applies to.","name":"gcp.firewall.rule_details.destination_range","type":"keyword"},"gcp.firewall.rule_details.source_tag":{"category":"gcp","description":"List of all the source tags that the firewall rule applies to. ","name":"gcp.firewall.rule_details.source_tag","type":"keyword"},"gcp.firewall.rule_details.target_tag":{"category":"gcp","description":"List of all the target tags that the firewall rule applies to. ","name":"gcp.firewall.rule_details.target_tag","type":"keyword"},"gcp.firewall.rule_details.ip_port_info":{"category":"gcp","description":"List of ip protocols and applicable port ranges for rules. ","name":"gcp.firewall.rule_details.ip_port_info","type":"array"},"gcp.firewall.rule_details.source_service_account":{"category":"gcp","description":"List of all the source service accounts that the firewall rule applies to. ","name":"gcp.firewall.rule_details.source_service_account","type":"keyword"},"gcp.firewall.rule_details.target_service_account":{"category":"gcp","description":"List of all the target service accounts that the firewall rule applies to. ","name":"gcp.firewall.rule_details.target_service_account","type":"keyword"},"gcp.vpcflow.reporter":{"category":"gcp","description":"The side which reported the flow. Can be either 'SRC' or 'DEST'. ","name":"gcp.vpcflow.reporter","type":"keyword"},"gcp.vpcflow.rtt.ms":{"category":"gcp","description":"Latency as measured (for TCP flows only) during the time interval. This is the time elapsed between sending a SEQ and receiving a corresponding ACK and it contains the network RTT as well as the application related delay. ","name":"gcp.vpcflow.rtt.ms","type":"long"},"google_workspace.actor.type":{"category":"google_workspace","description":"The type of actor. Values can be: *USER*: Another user in the same domain. *EXTERNAL_USER*: A user outside the domain. *KEY*: A non-human actor. ","name":"google_workspace.actor.type","type":"keyword"},"google_workspace.actor.key":{"category":"google_workspace","description":"Only present when `actor.type` is `KEY`. Can be the `consumer_key` of the requestor for OAuth 2LO API requests or an identifier for robot accounts. ","name":"google_workspace.actor.key","type":"keyword"},"google_workspace.event.type":{"category":"google_workspace","description":"The type of Google Workspace event, mapped from `items[].events[].type` in the original payload. Each fileset can have a different set of values for it, more details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ","example":"audit#activity","name":"google_workspace.event.type","type":"keyword"},"google_workspace.kind":{"category":"google_workspace","description":"The type of API resource, mapped from `kind` in the original payload. More details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ","example":"audit#activity","name":"google_workspace.kind","type":"keyword"},"google_workspace.organization.domain":{"category":"google_workspace","description":"The domain that is affected by the report's event. ","name":"google_workspace.organization.domain","type":"keyword"},"google_workspace.admin.application.edition":{"category":"google_workspace","description":"The Google Workspace edition.","name":"google_workspace.admin.application.edition","type":"keyword"},"google_workspace.admin.application.name":{"category":"google_workspace","description":"The application's name.","name":"google_workspace.admin.application.name","type":"keyword"},"google_workspace.admin.application.enabled":{"category":"google_workspace","description":"The enabled application.","name":"google_workspace.admin.application.enabled","type":"keyword"},"google_workspace.admin.application.licences_order_number":{"category":"google_workspace","description":"Order number used to redeem licenses.","name":"google_workspace.admin.application.licences_order_number","type":"keyword"},"google_workspace.admin.application.licences_purchased":{"category":"google_workspace","description":"Number of licences purchased.","name":"google_workspace.admin.application.licences_purchased","type":"keyword"},"google_workspace.admin.application.id":{"category":"google_workspace","description":"The application ID.","name":"google_workspace.admin.application.id","type":"keyword"},"google_workspace.admin.application.asp_id":{"category":"google_workspace","description":"The application specific password ID.","name":"google_workspace.admin.application.asp_id","type":"keyword"},"google_workspace.admin.application.package_id":{"category":"google_workspace","description":"The mobile application package ID.","name":"google_workspace.admin.application.package_id","type":"keyword"},"google_workspace.admin.group.email":{"category":"google_workspace","description":"The group's primary email address.","name":"google_workspace.admin.group.email","type":"keyword"},"google_workspace.admin.new_value":{"category":"google_workspace","description":"The new value for the setting.","name":"google_workspace.admin.new_value","type":"keyword"},"google_workspace.admin.old_value":{"category":"google_workspace","description":"The old value for the setting.","name":"google_workspace.admin.old_value","type":"keyword"},"google_workspace.admin.org_unit.name":{"category":"google_workspace","description":"The organizational unit name.","name":"google_workspace.admin.org_unit.name","type":"keyword"},"google_workspace.admin.org_unit.full":{"category":"google_workspace","description":"The org unit full path including the root org unit name.","name":"google_workspace.admin.org_unit.full","type":"keyword"},"google_workspace.admin.setting.name":{"category":"google_workspace","description":"The setting name.","name":"google_workspace.admin.setting.name","type":"keyword"},"google_workspace.admin.user_defined_setting.name":{"category":"google_workspace","description":"The name of the user-defined setting.","name":"google_workspace.admin.user_defined_setting.name","type":"keyword"},"google_workspace.admin.setting.description":{"category":"google_workspace","description":"The setting name.","name":"google_workspace.admin.setting.description","type":"keyword"},"google_workspace.admin.group.priorities":{"category":"google_workspace","description":"Group priorities.","name":"google_workspace.admin.group.priorities","type":"keyword"},"google_workspace.admin.domain.alias":{"category":"google_workspace","description":"The domain alias.","name":"google_workspace.admin.domain.alias","type":"keyword"},"google_workspace.admin.domain.name":{"category":"google_workspace","description":"The primary domain name.","name":"google_workspace.admin.domain.name","type":"keyword"},"google_workspace.admin.domain.secondary_name":{"category":"google_workspace","description":"The secondary domain name.","name":"google_workspace.admin.domain.secondary_name","type":"keyword"},"google_workspace.admin.managed_configuration":{"category":"google_workspace","description":"The name of the managed configuration.","name":"google_workspace.admin.managed_configuration","type":"keyword"},"google_workspace.admin.non_featured_services_selection":{"category":"google_workspace","description":"Non-featured services selection. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-application-settings#FLASHLIGHT_EDU_NON_FEATURED_SERVICES_SELECTED ","name":"google_workspace.admin.non_featured_services_selection","type":"keyword"},"google_workspace.admin.field":{"category":"google_workspace","description":"The name of the field.","name":"google_workspace.admin.field","type":"keyword"},"google_workspace.admin.resource.id":{"category":"google_workspace","description":"The name of the resource identifier.","name":"google_workspace.admin.resource.id","type":"keyword"},"google_workspace.admin.user.email":{"category":"google_workspace","description":"The user's primary email address.","name":"google_workspace.admin.user.email","type":"keyword"},"google_workspace.admin.user.nickname":{"category":"google_workspace","description":"The user's nickname.","name":"google_workspace.admin.user.nickname","type":"keyword"},"google_workspace.admin.user.birthdate":{"category":"google_workspace","description":"The user's birth date.","name":"google_workspace.admin.user.birthdate","type":"date"},"google_workspace.admin.gateway.name":{"category":"google_workspace","description":"Gateway name. Present on some chat settings.","name":"google_workspace.admin.gateway.name","type":"keyword"},"google_workspace.admin.chrome_os.session_type":{"category":"google_workspace","description":"Chrome OS session type.","name":"google_workspace.admin.chrome_os.session_type","type":"keyword"},"google_workspace.admin.device.serial_number":{"category":"google_workspace","description":"Device serial number.","name":"google_workspace.admin.device.serial_number","type":"keyword"},"google_workspace.admin.device.id":{"category":"google_workspace","name":"google_workspace.admin.device.id","type":"keyword"},"google_workspace.admin.device.type":{"category":"google_workspace","description":"Device type.","name":"google_workspace.admin.device.type","type":"keyword"},"google_workspace.admin.print_server.name":{"category":"google_workspace","description":"The name of the print server.","name":"google_workspace.admin.print_server.name","type":"keyword"},"google_workspace.admin.printer.name":{"category":"google_workspace","description":"The name of the printer.","name":"google_workspace.admin.printer.name","type":"keyword"},"google_workspace.admin.device.command_details":{"category":"google_workspace","description":"Command details.","name":"google_workspace.admin.device.command_details","type":"keyword"},"google_workspace.admin.role.id":{"category":"google_workspace","description":"Unique identifier for this role privilege.","name":"google_workspace.admin.role.id","type":"keyword"},"google_workspace.admin.role.name":{"category":"google_workspace","description":"The role name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-delegated-admin-settings ","name":"google_workspace.admin.role.name","type":"keyword"},"google_workspace.admin.privilege.name":{"category":"google_workspace","description":"Privilege name.","name":"google_workspace.admin.privilege.name","type":"keyword"},"google_workspace.admin.service.name":{"category":"google_workspace","description":"The service name.","name":"google_workspace.admin.service.name","type":"keyword"},"google_workspace.admin.url.name":{"category":"google_workspace","description":"The website name.","name":"google_workspace.admin.url.name","type":"keyword"},"google_workspace.admin.product.name":{"category":"google_workspace","description":"The product name.","name":"google_workspace.admin.product.name","type":"keyword"},"google_workspace.admin.product.sku":{"category":"google_workspace","description":"The product SKU.","name":"google_workspace.admin.product.sku","type":"keyword"},"google_workspace.admin.bulk_upload.failed":{"category":"google_workspace","description":"Number of failed records in bulk upload operation.","name":"google_workspace.admin.bulk_upload.failed","type":"long"},"google_workspace.admin.bulk_upload.total":{"category":"google_workspace","description":"Number of total records in bulk upload operation.","name":"google_workspace.admin.bulk_upload.total","type":"long"},"google_workspace.admin.group.allowed_list":{"category":"google_workspace","description":"Names of allow-listed groups.","name":"google_workspace.admin.group.allowed_list","type":"keyword"},"google_workspace.admin.email.quarantine_name":{"category":"google_workspace","description":"The name of the quarantine.","name":"google_workspace.admin.email.quarantine_name","type":"keyword"},"google_workspace.admin.email.log_search_filter.message_id":{"category":"google_workspace","description":"The log search filter's email message ID.","name":"google_workspace.admin.email.log_search_filter.message_id","type":"keyword"},"google_workspace.admin.email.log_search_filter.start_date":{"category":"google_workspace","description":"The log search filter's start date.","name":"google_workspace.admin.email.log_search_filter.start_date","type":"date"},"google_workspace.admin.email.log_search_filter.end_date":{"category":"google_workspace","description":"The log search filter's ending date.","name":"google_workspace.admin.email.log_search_filter.end_date","type":"date"},"google_workspace.admin.email.log_search_filter.recipient.value":{"category":"google_workspace","description":"The log search filter's email recipient.","name":"google_workspace.admin.email.log_search_filter.recipient.value","type":"keyword"},"google_workspace.admin.email.log_search_filter.sender.value":{"category":"google_workspace","description":"The log search filter's email sender.","name":"google_workspace.admin.email.log_search_filter.sender.value","type":"keyword"},"google_workspace.admin.email.log_search_filter.recipient.ip":{"category":"google_workspace","description":"The log search filter's email recipient's IP address.","name":"google_workspace.admin.email.log_search_filter.recipient.ip","type":"ip"},"google_workspace.admin.email.log_search_filter.sender.ip":{"category":"google_workspace","description":"The log search filter's email sender's IP address.","name":"google_workspace.admin.email.log_search_filter.sender.ip","type":"ip"},"google_workspace.admin.chrome_licenses.enabled":{"category":"google_workspace","description":"Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ","name":"google_workspace.admin.chrome_licenses.enabled","type":"keyword"},"google_workspace.admin.chrome_licenses.allowed":{"category":"google_workspace","description":"Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ","name":"google_workspace.admin.chrome_licenses.allowed","type":"keyword"},"google_workspace.admin.oauth2.service.name":{"category":"google_workspace","description":"OAuth2 service name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ","name":"google_workspace.admin.oauth2.service.name","type":"keyword"},"google_workspace.admin.oauth2.application.id":{"category":"google_workspace","description":"OAuth2 application ID.","name":"google_workspace.admin.oauth2.application.id","type":"keyword"},"google_workspace.admin.oauth2.application.name":{"category":"google_workspace","description":"OAuth2 application name.","name":"google_workspace.admin.oauth2.application.name","type":"keyword"},"google_workspace.admin.oauth2.application.type":{"category":"google_workspace","description":"OAuth2 application type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ","name":"google_workspace.admin.oauth2.application.type","type":"keyword"},"google_workspace.admin.verification_method":{"category":"google_workspace","description":"Related verification method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings and https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ","name":"google_workspace.admin.verification_method","type":"keyword"},"google_workspace.admin.alert.name":{"category":"google_workspace","description":"The alert name.","name":"google_workspace.admin.alert.name","type":"keyword"},"google_workspace.admin.rule.name":{"category":"google_workspace","description":"The rule name.","name":"google_workspace.admin.rule.name","type":"keyword"},"google_workspace.admin.api.client.name":{"category":"google_workspace","description":"The API client name.","name":"google_workspace.admin.api.client.name","type":"keyword"},"google_workspace.admin.api.scopes":{"category":"google_workspace","description":"The API scopes.","name":"google_workspace.admin.api.scopes","type":"keyword"},"google_workspace.admin.mdm.token":{"category":"google_workspace","description":"The MDM vendor enrollment token.","name":"google_workspace.admin.mdm.token","type":"keyword"},"google_workspace.admin.mdm.vendor":{"category":"google_workspace","description":"The MDM vendor's name.","name":"google_workspace.admin.mdm.vendor","type":"keyword"},"google_workspace.admin.info_type":{"category":"google_workspace","description":"This will be used to state what kind of information was changed. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ","name":"google_workspace.admin.info_type","type":"keyword"},"google_workspace.admin.email_monitor.dest_email":{"category":"google_workspace","description":"The destination address of the email monitor.","name":"google_workspace.admin.email_monitor.dest_email","type":"keyword"},"google_workspace.admin.email_monitor.level.chat":{"category":"google_workspace","description":"The chat email monitor level.","name":"google_workspace.admin.email_monitor.level.chat","type":"keyword"},"google_workspace.admin.email_monitor.level.draft":{"category":"google_workspace","description":"The draft email monitor level.","name":"google_workspace.admin.email_monitor.level.draft","type":"keyword"},"google_workspace.admin.email_monitor.level.incoming":{"category":"google_workspace","description":"The incoming email monitor level.","name":"google_workspace.admin.email_monitor.level.incoming","type":"keyword"},"google_workspace.admin.email_monitor.level.outgoing":{"category":"google_workspace","description":"The outgoing email monitor level.","name":"google_workspace.admin.email_monitor.level.outgoing","type":"keyword"},"google_workspace.admin.email_dump.include_deleted":{"category":"google_workspace","description":"Indicates if deleted emails are included in the export.","name":"google_workspace.admin.email_dump.include_deleted","type":"boolean"},"google_workspace.admin.email_dump.package_content":{"category":"google_workspace","description":"The contents of the mailbox package.","name":"google_workspace.admin.email_dump.package_content","type":"keyword"},"google_workspace.admin.email_dump.query":{"category":"google_workspace","description":"The search query used for the dump.","name":"google_workspace.admin.email_dump.query","type":"keyword"},"google_workspace.admin.request.id":{"category":"google_workspace","description":"The request ID.","name":"google_workspace.admin.request.id","type":"keyword"},"google_workspace.admin.mobile.action.id":{"category":"google_workspace","description":"The mobile device action's ID.","name":"google_workspace.admin.mobile.action.id","type":"keyword"},"google_workspace.admin.mobile.action.type":{"category":"google_workspace","description":"The mobile device action's type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ","name":"google_workspace.admin.mobile.action.type","type":"keyword"},"google_workspace.admin.mobile.certificate.name":{"category":"google_workspace","description":"The mobile certificate common name.","name":"google_workspace.admin.mobile.certificate.name","type":"keyword"},"google_workspace.admin.mobile.company_owned_devices":{"category":"google_workspace","description":"The number of devices a company owns.","name":"google_workspace.admin.mobile.company_owned_devices","type":"long"},"google_workspace.admin.distribution.entity.name":{"category":"google_workspace","description":"The distribution entity value, which can be a group name or an org-unit name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ","name":"google_workspace.admin.distribution.entity.name","type":"keyword"},"google_workspace.admin.distribution.entity.type":{"category":"google_workspace","description":"The distribution entity type, which can be a group or an org-unit. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ","name":"google_workspace.admin.distribution.entity.type","type":"keyword"},"google_workspace.drive.billable":{"category":"google_workspace","description":"Whether this activity is billable.","name":"google_workspace.drive.billable","type":"boolean"},"google_workspace.drive.source_folder_id":{"category":"google_workspace","name":"google_workspace.drive.source_folder_id","type":"keyword"},"google_workspace.drive.source_folder_title":{"category":"google_workspace","name":"google_workspace.drive.source_folder_title","type":"keyword"},"google_workspace.drive.destination_folder_id":{"category":"google_workspace","name":"google_workspace.drive.destination_folder_id","type":"keyword"},"google_workspace.drive.destination_folder_title":{"category":"google_workspace","name":"google_workspace.drive.destination_folder_title","type":"keyword"},"google_workspace.drive.file.id":{"category":"google_workspace","name":"google_workspace.drive.file.id","type":"keyword"},"google_workspace.drive.file.type":{"category":"google_workspace","description":"Document Drive type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ","name":"google_workspace.drive.file.type","type":"keyword"},"google_workspace.drive.originating_app_id":{"category":"google_workspace","description":"The Google Cloud Project ID of the application that performed the action. ","name":"google_workspace.drive.originating_app_id","type":"keyword"},"google_workspace.drive.file.owner.email":{"category":"google_workspace","name":"google_workspace.drive.file.owner.email","type":"keyword"},"google_workspace.drive.file.owner.is_shared_drive":{"category":"google_workspace","description":"Boolean flag denoting whether owner is a shared drive. ","name":"google_workspace.drive.file.owner.is_shared_drive","type":"boolean"},"google_workspace.drive.primary_event":{"category":"google_workspace","description":"Whether this is a primary event. A single user action in Drive may generate several events. ","name":"google_workspace.drive.primary_event","type":"boolean"},"google_workspace.drive.shared_drive_id":{"category":"google_workspace","description":"The unique identifier of the Team Drive. Only populated for for events relating to a Team Drive or item contained inside a Team Drive. ","name":"google_workspace.drive.shared_drive_id","type":"keyword"},"google_workspace.drive.visibility":{"category":"google_workspace","description":"Visibility of target file. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ","name":"google_workspace.drive.visibility","type":"keyword"},"google_workspace.drive.new_value":{"category":"google_workspace","description":"When a setting or property of the file changes, the new value for it will appear here. ","name":"google_workspace.drive.new_value","type":"keyword"},"google_workspace.drive.old_value":{"category":"google_workspace","description":"When a setting or property of the file changes, the old value for it will appear here. ","name":"google_workspace.drive.old_value","type":"keyword"},"google_workspace.drive.sheets_import_range_recipient_doc":{"category":"google_workspace","description":"Doc ID of the recipient of a sheets import range.","name":"google_workspace.drive.sheets_import_range_recipient_doc","type":"keyword"},"google_workspace.drive.old_visibility":{"category":"google_workspace","description":"When visibility changes, this holds the old value. ","name":"google_workspace.drive.old_visibility","type":"keyword"},"google_workspace.drive.visibility_change":{"category":"google_workspace","description":"When visibility changes, this holds the new overall visibility of the file. ","name":"google_workspace.drive.visibility_change","type":"keyword"},"google_workspace.drive.target_domain":{"category":"google_workspace","description":"The domain for which the acccess scope was changed. This can also be the alias all to indicate the access scope was changed for all domains that have visibility for this document. ","name":"google_workspace.drive.target_domain","type":"keyword"},"google_workspace.drive.added_role":{"category":"google_workspace","description":"Added membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ","name":"google_workspace.drive.added_role","type":"keyword"},"google_workspace.drive.membership_change_type":{"category":"google_workspace","description":"Type of change in Team Drive membership of a user/group. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ","name":"google_workspace.drive.membership_change_type","type":"keyword"},"google_workspace.drive.shared_drive_settings_change_type":{"category":"google_workspace","description":"Type of change in Team Drive settings. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ","name":"google_workspace.drive.shared_drive_settings_change_type","type":"keyword"},"google_workspace.drive.removed_role":{"category":"google_workspace","description":"Removed membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ","name":"google_workspace.drive.removed_role","type":"keyword"},"google_workspace.drive.target":{"category":"google_workspace","description":"Target user or group.","name":"google_workspace.drive.target","type":"keyword"},"google_workspace.groups.acl_permission":{"category":"google_workspace","description":"Group permission setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ","name":"google_workspace.groups.acl_permission","type":"keyword"},"google_workspace.groups.email":{"category":"google_workspace","description":"Group email. ","name":"google_workspace.groups.email","type":"keyword"},"google_workspace.groups.member.email":{"category":"google_workspace","description":"Member email. ","name":"google_workspace.groups.member.email","type":"keyword"},"google_workspace.groups.member.role":{"category":"google_workspace","description":"Member role. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ","name":"google_workspace.groups.member.role","type":"keyword"},"google_workspace.groups.setting":{"category":"google_workspace","description":"Group setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ","name":"google_workspace.groups.setting","type":"keyword"},"google_workspace.groups.new_value":{"category":"google_workspace","description":"New value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ","name":"google_workspace.groups.new_value","type":"keyword"},"google_workspace.groups.old_value":{"category":"google_workspace","description":"Old value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups","name":"google_workspace.groups.old_value","type":"keyword"},"google_workspace.groups.value":{"category":"google_workspace","description":"Value of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ","name":"google_workspace.groups.value","type":"keyword"},"google_workspace.groups.message.id":{"category":"google_workspace","description":"SMTP message Id of an email message. Present for moderation events. ","name":"google_workspace.groups.message.id","type":"keyword"},"google_workspace.groups.message.moderation_action":{"category":"google_workspace","description":"Message moderation action. Possible values are `approved` and `rejected`. ","name":"google_workspace.groups.message.moderation_action","type":"keyword"},"google_workspace.groups.status":{"category":"google_workspace","description":"A status describing the output of an operation. Possible values are `failed` and `succeeded`. ","name":"google_workspace.groups.status","type":"keyword"},"google_workspace.login.affected_email_address":{"category":"google_workspace","name":"google_workspace.login.affected_email_address","type":"keyword"},"google_workspace.login.challenge_method":{"category":"google_workspace","description":"Login challenge method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ","name":"google_workspace.login.challenge_method","type":"keyword"},"google_workspace.login.failure_type":{"category":"google_workspace","description":"Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ","name":"google_workspace.login.failure_type","type":"keyword"},"google_workspace.login.type":{"category":"google_workspace","description":"Login credentials type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ","name":"google_workspace.login.type","type":"keyword"},"google_workspace.login.is_second_factor":{"category":"google_workspace","name":"google_workspace.login.is_second_factor","type":"boolean"},"google_workspace.login.is_suspicious":{"category":"google_workspace","name":"google_workspace.login.is_suspicious","type":"boolean"},"google_workspace.saml.application_name":{"category":"google_workspace","description":"Saml SP application name. ","name":"google_workspace.saml.application_name","type":"keyword"},"google_workspace.saml.failure_type":{"category":"google_workspace","description":"Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/saml. ","name":"google_workspace.saml.failure_type","type":"keyword"},"google_workspace.saml.initiated_by":{"category":"google_workspace","description":"Requester of SAML authentication. ","name":"google_workspace.saml.initiated_by","type":"keyword"},"google_workspace.saml.orgunit_path":{"category":"google_workspace","description":"User orgunit. ","name":"google_workspace.saml.orgunit_path","type":"keyword"},"google_workspace.saml.status_code":{"category":"google_workspace","description":"SAML status code. ","name":"google_workspace.saml.status_code","type":"keyword"},"google_workspace.saml.second_level_status_code":{"category":"google_workspace","description":"SAML second level status code. ","name":"google_workspace.saml.second_level_status_code","type":"keyword"},"ibmmq.errorlog.installation":{"category":"ibmmq","description":"This is the installation name which can be given at installation time. Each installation of IBM MQ on UNIX, Linux, and Windows, has a unique identifier known as an installation name. The installation name is used to associate things such as queue managers and configuration files with an installation. ","name":"ibmmq.errorlog.installation","type":"keyword"},"ibmmq.errorlog.qmgr":{"category":"ibmmq","description":"Name of the queue manager. Queue managers provide queuing services to applications, and manages the queues that belong to them. ","name":"ibmmq.errorlog.qmgr","type":"keyword"},"ibmmq.errorlog.arithinsert":{"category":"ibmmq","description":"Changing content based on error.id","name":"ibmmq.errorlog.arithinsert","type":"keyword"},"ibmmq.errorlog.commentinsert":{"category":"ibmmq","description":"Changing content based on error.id","name":"ibmmq.errorlog.commentinsert","type":"keyword"},"ibmmq.errorlog.errordescription":{"category":"ibmmq","description":"Please add description","example":"Please add example","name":"ibmmq.errorlog.errordescription","type":"text"},"ibmmq.errorlog.explanation":{"category":"ibmmq","description":"Explaines the error in more detail","name":"ibmmq.errorlog.explanation","type":"keyword"},"ibmmq.errorlog.action":{"category":"ibmmq","description":"Defines what to do when the error occurs","name":"ibmmq.errorlog.action","type":"keyword"},"ibmmq.errorlog.code":{"category":"ibmmq","description":"Error code.","name":"ibmmq.errorlog.code","type":"keyword"},"iptables.ether_type":{"category":"iptables","description":"Value of the ethernet type field identifying the network layer protocol. ","name":"iptables.ether_type","type":"long"},"iptables.flow_label":{"category":"iptables","description":"IPv6 flow label. ","name":"iptables.flow_label","type":"integer"},"iptables.fragment_flags":{"category":"iptables","description":"IP fragment flags. A combination of CE, DF and MF. ","name":"iptables.fragment_flags","type":"keyword"},"iptables.fragment_offset":{"category":"iptables","description":"Offset of the current IP fragment. ","name":"iptables.fragment_offset","type":"long"},"iptables.icmp.code":{"category":"iptables","description":"ICMP code. ","name":"iptables.icmp.code","type":"long"},"iptables.icmp.id":{"category":"iptables","description":"ICMP ID. ","name":"iptables.icmp.id","type":"long"},"iptables.icmp.parameter":{"category":"iptables","description":"ICMP parameter. ","name":"iptables.icmp.parameter","type":"long"},"iptables.icmp.redirect":{"category":"iptables","description":"ICMP redirect address. ","name":"iptables.icmp.redirect","type":"ip"},"iptables.icmp.seq":{"category":"iptables","description":"ICMP sequence number. ","name":"iptables.icmp.seq","type":"long"},"iptables.icmp.type":{"category":"iptables","description":"ICMP type. ","name":"iptables.icmp.type","type":"long"},"iptables.id":{"category":"iptables","description":"Packet identifier. ","name":"iptables.id","type":"long"},"iptables.incomplete_bytes":{"category":"iptables","description":"Number of incomplete bytes. ","name":"iptables.incomplete_bytes","type":"long"},"iptables.input_device":{"category":"iptables","description":"Device that received the packet. ","name":"iptables.input_device","type":"keyword"},"iptables.precedence_bits":{"category":"iptables","description":"IP precedence bits. ","name":"iptables.precedence_bits","type":"short"},"iptables.tos":{"category":"iptables","description":"IP Type of Service field. ","name":"iptables.tos","type":"long"},"iptables.length":{"category":"iptables","description":"Packet length. ","name":"iptables.length","type":"long"},"iptables.output_device":{"category":"iptables","description":"Device that output the packet. ","name":"iptables.output_device","type":"keyword"},"iptables.tcp.flags":{"category":"iptables","description":"TCP flags. ","name":"iptables.tcp.flags","type":"keyword"},"iptables.tcp.reserved_bits":{"category":"iptables","description":"TCP reserved bits. ","name":"iptables.tcp.reserved_bits","type":"short"},"iptables.tcp.seq":{"category":"iptables","description":"TCP sequence number. ","name":"iptables.tcp.seq","type":"long"},"iptables.tcp.ack":{"category":"iptables","description":"TCP Acknowledgment number. ","name":"iptables.tcp.ack","type":"long"},"iptables.tcp.window":{"category":"iptables","description":"Advertised TCP window size. ","name":"iptables.tcp.window","type":"long"},"iptables.ttl":{"category":"iptables","description":"Time To Live field. ","name":"iptables.ttl","type":"integer"},"iptables.udp.length":{"category":"iptables","description":"Length of the UDP header and payload. ","name":"iptables.udp.length","type":"long"},"iptables.ubiquiti.input_zone":{"category":"iptables","description":"Input zone. ","name":"iptables.ubiquiti.input_zone","type":"keyword"},"iptables.ubiquiti.output_zone":{"category":"iptables","description":"Output zone. ","name":"iptables.ubiquiti.output_zone","type":"keyword"},"iptables.ubiquiti.rule_number":{"category":"iptables","description":"The rule number within the rule set.","name":"iptables.ubiquiti.rule_number","type":"keyword"},"iptables.ubiquiti.rule_set":{"category":"iptables","description":"The rule set name.","name":"iptables.ubiquiti.rule_set","type":"keyword"},"juniper.srx.reason":{"category":"juniper","description":"reason ","name":"juniper.srx.reason","type":"keyword"},"juniper.srx.connection_tag":{"category":"juniper","description":"connection tag ","name":"juniper.srx.connection_tag","type":"keyword"},"juniper.srx.service_name":{"category":"juniper","description":"service name ","name":"juniper.srx.service_name","type":"keyword"},"juniper.srx.nat_connection_tag":{"category":"juniper","description":"nat connection tag ","name":"juniper.srx.nat_connection_tag","type":"keyword"},"juniper.srx.src_nat_rule_type":{"category":"juniper","description":"src nat rule type ","name":"juniper.srx.src_nat_rule_type","type":"keyword"},"juniper.srx.src_nat_rule_name":{"category":"juniper","description":"src nat rule name ","name":"juniper.srx.src_nat_rule_name","type":"keyword"},"juniper.srx.dst_nat_rule_type":{"category":"juniper","description":"dst nat rule type ","name":"juniper.srx.dst_nat_rule_type","type":"keyword"},"juniper.srx.dst_nat_rule_name":{"category":"juniper","description":"dst nat rule name ","name":"juniper.srx.dst_nat_rule_name","type":"keyword"},"juniper.srx.protocol_id":{"category":"juniper","description":"protocol id ","name":"juniper.srx.protocol_id","type":"keyword"},"juniper.srx.policy_name":{"category":"juniper","description":"policy name ","name":"juniper.srx.policy_name","type":"keyword"},"juniper.srx.session_id_32":{"category":"juniper","description":"session id 32 ","name":"juniper.srx.session_id_32","type":"keyword"},"juniper.srx.session_id":{"category":"juniper","description":"session id ","name":"juniper.srx.session_id","type":"keyword"},"juniper.srx.outbound_packets":{"category":"juniper","description":"packets from client ","name":"juniper.srx.outbound_packets","type":"integer"},"juniper.srx.outbound_bytes":{"category":"juniper","description":"bytes from client ","name":"juniper.srx.outbound_bytes","type":"integer"},"juniper.srx.inbound_packets":{"category":"juniper","description":"packets from server ","name":"juniper.srx.inbound_packets","type":"integer"},"juniper.srx.inbound_bytes":{"category":"juniper","description":"bytes from server ","name":"juniper.srx.inbound_bytes","type":"integer"},"juniper.srx.elapsed_time":{"category":"juniper","description":"elapsed time ","name":"juniper.srx.elapsed_time","type":"date"},"juniper.srx.application":{"category":"juniper","description":"application ","name":"juniper.srx.application","type":"keyword"},"juniper.srx.nested_application":{"category":"juniper","description":"nested application ","name":"juniper.srx.nested_application","type":"keyword"},"juniper.srx.username":{"category":"juniper","description":"username ","name":"juniper.srx.username","type":"keyword"},"juniper.srx.roles":{"category":"juniper","description":"roles ","name":"juniper.srx.roles","type":"keyword"},"juniper.srx.encrypted":{"category":"juniper","description":"encrypted ","name":"juniper.srx.encrypted","type":"keyword"},"juniper.srx.application_category":{"category":"juniper","description":"application category ","name":"juniper.srx.application_category","type":"keyword"},"juniper.srx.application_sub_category":{"category":"juniper","description":"application sub category ","name":"juniper.srx.application_sub_category","type":"keyword"},"juniper.srx.application_characteristics":{"category":"juniper","description":"application characteristics ","name":"juniper.srx.application_characteristics","type":"keyword"},"juniper.srx.secure_web_proxy_session_type":{"category":"juniper","description":"secure web proxy session type ","name":"juniper.srx.secure_web_proxy_session_type","type":"keyword"},"juniper.srx.peer_session_id":{"category":"juniper","description":"peer session id ","name":"juniper.srx.peer_session_id","type":"keyword"},"juniper.srx.peer_source_address":{"category":"juniper","description":"peer source address ","name":"juniper.srx.peer_source_address","type":"ip"},"juniper.srx.peer_source_port":{"category":"juniper","description":"peer source port ","name":"juniper.srx.peer_source_port","type":"integer"},"juniper.srx.peer_destination_address":{"category":"juniper","description":"peer destination address ","name":"juniper.srx.peer_destination_address","type":"ip"},"juniper.srx.peer_destination_port":{"category":"juniper","description":"peer destination port ","name":"juniper.srx.peer_destination_port","type":"integer"},"juniper.srx.hostname":{"category":"juniper","description":"hostname ","name":"juniper.srx.hostname","type":"keyword"},"juniper.srx.src_vrf_grp":{"category":"juniper","description":"src_vrf_grp ","name":"juniper.srx.src_vrf_grp","type":"keyword"},"juniper.srx.dst_vrf_grp":{"category":"juniper","description":"dst_vrf_grp ","name":"juniper.srx.dst_vrf_grp","type":"keyword"},"juniper.srx.icmp_type":{"category":"juniper","description":"icmp type ","name":"juniper.srx.icmp_type","type":"integer"},"juniper.srx.process":{"category":"juniper","description":"process that generated the message ","name":"juniper.srx.process","type":"keyword"},"juniper.srx.apbr_rule_type":{"category":"juniper","description":"apbr rule type ","name":"juniper.srx.apbr_rule_type","type":"keyword"},"juniper.srx.dscp_value":{"category":"juniper","description":"apbr rule type ","name":"juniper.srx.dscp_value","type":"integer"},"juniper.srx.logical_system_name":{"category":"juniper","description":"logical system name ","name":"juniper.srx.logical_system_name","type":"keyword"},"juniper.srx.profile_name":{"category":"juniper","description":"profile name ","name":"juniper.srx.profile_name","type":"keyword"},"juniper.srx.routing_instance":{"category":"juniper","description":"routing instance ","name":"juniper.srx.routing_instance","type":"keyword"},"juniper.srx.rule_name":{"category":"juniper","description":"rule name ","name":"juniper.srx.rule_name","type":"keyword"},"juniper.srx.uplink_tx_bytes":{"category":"juniper","description":"uplink tx bytes ","name":"juniper.srx.uplink_tx_bytes","type":"integer"},"juniper.srx.uplink_rx_bytes":{"category":"juniper","description":"uplink rx bytes ","name":"juniper.srx.uplink_rx_bytes","type":"integer"},"juniper.srx.obj":{"category":"juniper","description":"url path ","name":"juniper.srx.obj","type":"keyword"},"juniper.srx.url":{"category":"juniper","description":"url domain ","name":"juniper.srx.url","type":"keyword"},"juniper.srx.profile":{"category":"juniper","description":"filter profile ","name":"juniper.srx.profile","type":"keyword"},"juniper.srx.category":{"category":"juniper","description":"filter category ","name":"juniper.srx.category","type":"keyword"},"juniper.srx.filename":{"category":"juniper","description":"filename ","name":"juniper.srx.filename","type":"keyword"},"juniper.srx.temporary_filename":{"category":"juniper","description":"temporary_filename ","name":"juniper.srx.temporary_filename","type":"keyword"},"juniper.srx.name":{"category":"juniper","description":"name ","name":"juniper.srx.name","type":"keyword"},"juniper.srx.error_message":{"category":"juniper","description":"error_message ","name":"juniper.srx.error_message","type":"keyword"},"juniper.srx.error_code":{"category":"juniper","description":"error_code ","name":"juniper.srx.error_code","type":"keyword"},"juniper.srx.action":{"category":"juniper","description":"action ","name":"juniper.srx.action","type":"keyword"},"juniper.srx.protocol":{"category":"juniper","description":"protocol ","name":"juniper.srx.protocol","type":"keyword"},"juniper.srx.protocol_name":{"category":"juniper","description":"protocol name ","name":"juniper.srx.protocol_name","type":"keyword"},"juniper.srx.type":{"category":"juniper","description":"type ","name":"juniper.srx.type","type":"keyword"},"juniper.srx.repeat_count":{"category":"juniper","description":"repeat count ","name":"juniper.srx.repeat_count","type":"integer"},"juniper.srx.alert":{"category":"juniper","description":"repeat alert ","name":"juniper.srx.alert","type":"keyword"},"juniper.srx.message_type":{"category":"juniper","description":"message type ","name":"juniper.srx.message_type","type":"keyword"},"juniper.srx.threat_severity":{"category":"juniper","description":"threat severity ","name":"juniper.srx.threat_severity","type":"keyword"},"juniper.srx.application_name":{"category":"juniper","description":"application name ","name":"juniper.srx.application_name","type":"keyword"},"juniper.srx.attack_name":{"category":"juniper","description":"attack name ","name":"juniper.srx.attack_name","type":"keyword"},"juniper.srx.index":{"category":"juniper","description":"index ","name":"juniper.srx.index","type":"keyword"},"juniper.srx.message":{"category":"juniper","description":"mesagge ","name":"juniper.srx.message","type":"keyword"},"juniper.srx.epoch_time":{"category":"juniper","description":"epoch time ","name":"juniper.srx.epoch_time","type":"date"},"juniper.srx.packet_log_id":{"category":"juniper","description":"packet log id ","name":"juniper.srx.packet_log_id","type":"integer"},"juniper.srx.export_id":{"category":"juniper","description":"packet log id ","name":"juniper.srx.export_id","type":"integer"},"juniper.srx.ddos_application_name":{"category":"juniper","description":"ddos application name ","name":"juniper.srx.ddos_application_name","type":"keyword"},"juniper.srx.connection_hit_rate":{"category":"juniper","description":"connection hit rate ","name":"juniper.srx.connection_hit_rate","type":"integer"},"juniper.srx.time_scope":{"category":"juniper","description":"time scope ","name":"juniper.srx.time_scope","type":"keyword"},"juniper.srx.context_hit_rate":{"category":"juniper","description":"context hit rate ","name":"juniper.srx.context_hit_rate","type":"integer"},"juniper.srx.context_value_hit_rate":{"category":"juniper","description":"context value hit rate ","name":"juniper.srx.context_value_hit_rate","type":"integer"},"juniper.srx.time_count":{"category":"juniper","description":"time count ","name":"juniper.srx.time_count","type":"integer"},"juniper.srx.time_period":{"category":"juniper","description":"time period ","name":"juniper.srx.time_period","type":"integer"},"juniper.srx.context_value":{"category":"juniper","description":"context value ","name":"juniper.srx.context_value","type":"keyword"},"juniper.srx.context_name":{"category":"juniper","description":"context name ","name":"juniper.srx.context_name","type":"keyword"},"juniper.srx.ruleebase_name":{"category":"juniper","description":"ruleebase name ","name":"juniper.srx.ruleebase_name","type":"keyword"},"juniper.srx.verdict_source":{"category":"juniper","description":"verdict source ","name":"juniper.srx.verdict_source","type":"keyword"},"juniper.srx.verdict_number":{"category":"juniper","description":"verdict number ","name":"juniper.srx.verdict_number","type":"integer"},"juniper.srx.file_category":{"category":"juniper","description":"file category ","name":"juniper.srx.file_category","type":"keyword"},"juniper.srx.sample_sha256":{"category":"juniper","description":"sample sha256 ","name":"juniper.srx.sample_sha256","type":"keyword"},"juniper.srx.malware_info":{"category":"juniper","description":"malware info ","name":"juniper.srx.malware_info","type":"keyword"},"juniper.srx.client_ip":{"category":"juniper","description":"client ip ","name":"juniper.srx.client_ip","type":"ip"},"juniper.srx.tenant_id":{"category":"juniper","description":"tenant id ","name":"juniper.srx.tenant_id","type":"keyword"},"juniper.srx.timestamp":{"category":"juniper","description":"timestamp ","name":"juniper.srx.timestamp","type":"date"},"juniper.srx.th":{"category":"juniper","description":"th ","name":"juniper.srx.th","type":"keyword"},"juniper.srx.status":{"category":"juniper","description":"status ","name":"juniper.srx.status","type":"keyword"},"juniper.srx.state":{"category":"juniper","description":"state ","name":"juniper.srx.state","type":"keyword"},"juniper.srx.file_hash_lookup":{"category":"juniper","description":"file hash lookup ","name":"juniper.srx.file_hash_lookup","type":"keyword"},"juniper.srx.file_name":{"category":"juniper","description":"file name ","name":"juniper.srx.file_name","type":"keyword"},"juniper.srx.action_detail":{"category":"juniper","description":"action detail ","name":"juniper.srx.action_detail","type":"keyword"},"juniper.srx.sub_category":{"category":"juniper","description":"sub category ","name":"juniper.srx.sub_category","type":"keyword"},"juniper.srx.feed_name":{"category":"juniper","description":"feed name ","name":"juniper.srx.feed_name","type":"keyword"},"juniper.srx.occur_count":{"category":"juniper","description":"occur count ","name":"juniper.srx.occur_count","type":"integer"},"juniper.srx.tag":{"category":"juniper","description":"system log message tag, which uniquely identifies the message. ","name":"juniper.srx.tag","type":"keyword"},"microsoft.defender_atp.lastUpdateTime":{"category":"microsoft","description":"The date and time (in UTC) the alert was last updated. ","name":"microsoft.defender_atp.lastUpdateTime","type":"date"},"microsoft.defender_atp.resolvedTime":{"category":"microsoft","description":"The date and time in which the status of the alert was changed to 'Resolved'. ","name":"microsoft.defender_atp.resolvedTime","type":"date"},"microsoft.defender_atp.incidentId":{"category":"microsoft","description":"The Incident ID of the Alert. ","name":"microsoft.defender_atp.incidentId","type":"keyword"},"microsoft.defender_atp.investigationId":{"category":"microsoft","description":"The Investigation ID related to the Alert. ","name":"microsoft.defender_atp.investigationId","type":"keyword"},"microsoft.defender_atp.investigationState":{"category":"microsoft","description":"The current state of the Investigation. ","name":"microsoft.defender_atp.investigationState","type":"keyword"},"microsoft.defender_atp.assignedTo":{"category":"microsoft","description":"Owner of the alert. ","name":"microsoft.defender_atp.assignedTo","type":"keyword"},"microsoft.defender_atp.status":{"category":"microsoft","description":"Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ","name":"microsoft.defender_atp.status","type":"keyword"},"microsoft.defender_atp.classification":{"category":"microsoft","description":"Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ","name":"microsoft.defender_atp.classification","type":"keyword"},"microsoft.defender_atp.determination":{"category":"microsoft","description":"Specifies the determination of the alert. Possible values are: 'NotAvailable', 'Apt', 'Malware', 'SecurityPersonnel', 'SecurityTesting', 'UnwantedSoftware', 'Other'. ","name":"microsoft.defender_atp.determination","type":"keyword"},"microsoft.defender_atp.threatFamilyName":{"category":"microsoft","description":"Threat family. ","name":"microsoft.defender_atp.threatFamilyName","type":"keyword"},"microsoft.defender_atp.rbacGroupName":{"category":"microsoft","description":"User group related to the alert ","name":"microsoft.defender_atp.rbacGroupName","type":"keyword"},"microsoft.defender_atp.evidence.domainName":{"category":"microsoft","description":"Domain name related to the alert ","name":"microsoft.defender_atp.evidence.domainName","type":"keyword"},"microsoft.defender_atp.evidence.ipAddress":{"category":"microsoft","description":"IP address involved in the alert ","name":"microsoft.defender_atp.evidence.ipAddress","type":"ip"},"microsoft.defender_atp.evidence.aadUserId":{"category":"microsoft","description":"ID of the user involved in the alert ","name":"microsoft.defender_atp.evidence.aadUserId","type":"keyword"},"microsoft.defender_atp.evidence.accountName":{"category":"microsoft","description":"Username of the user involved in the alert ","name":"microsoft.defender_atp.evidence.accountName","type":"keyword"},"microsoft.defender_atp.evidence.entityType":{"category":"microsoft","description":"The type of evidence ","name":"microsoft.defender_atp.evidence.entityType","type":"keyword"},"microsoft.defender_atp.evidence.userPrincipalName":{"category":"microsoft","description":"Principal name of the user involved in the alert ","name":"microsoft.defender_atp.evidence.userPrincipalName","type":"keyword"},"microsoft.m365_defender.incidentId":{"category":"microsoft","description":"Unique identifier to represent the incident. ","name":"microsoft.m365_defender.incidentId","type":"keyword"},"microsoft.m365_defender.redirectIncidentId":{"category":"microsoft","description":"Only populated in case an incident is being grouped together with another incident, as part of the incident processing logic. ","name":"microsoft.m365_defender.redirectIncidentId","type":"keyword"},"microsoft.m365_defender.incidentName":{"category":"microsoft","description":"Name of the Incident. ","name":"microsoft.m365_defender.incidentName","type":"keyword"},"microsoft.m365_defender.determination":{"category":"microsoft","description":"Specifies the determination of the incident. The property values are: NotAvailable, Apt, Malware, SecurityPersonnel, SecurityTesting, UnwantedSoftware, Other. ","name":"microsoft.m365_defender.determination","type":"keyword"},"microsoft.m365_defender.investigationState":{"category":"microsoft","description":"The current state of the Investigation. ","name":"microsoft.m365_defender.investigationState","type":"keyword"},"microsoft.m365_defender.assignedTo":{"category":"microsoft","description":"Owner of the alert. ","name":"microsoft.m365_defender.assignedTo","type":"keyword"},"microsoft.m365_defender.tags":{"category":"microsoft","description":"Array of custom tags associated with an incident, for example to flag a group of incidents with a common characteristic. ","name":"microsoft.m365_defender.tags","type":"keyword"},"microsoft.m365_defender.status":{"category":"microsoft","description":"Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ","name":"microsoft.m365_defender.status","type":"keyword"},"microsoft.m365_defender.classification":{"category":"microsoft","description":"Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ","name":"microsoft.m365_defender.classification","type":"keyword"},"microsoft.m365_defender.alerts.incidentId":{"category":"microsoft","description":"Unique identifier to represent the incident this alert is associated with. ","name":"microsoft.m365_defender.alerts.incidentId","type":"keyword"},"microsoft.m365_defender.alerts.resolvedTime":{"category":"microsoft","description":"Time when alert was resolved. ","name":"microsoft.m365_defender.alerts.resolvedTime","type":"date"},"microsoft.m365_defender.alerts.status":{"category":"microsoft","description":"Categorize alerts (as New, Active, or Resolved). ","name":"microsoft.m365_defender.alerts.status","type":"keyword"},"microsoft.m365_defender.alerts.severity":{"category":"microsoft","description":"The severity of the related alert. ","name":"microsoft.m365_defender.alerts.severity","type":"keyword"},"microsoft.m365_defender.alerts.creationTime":{"category":"microsoft","description":"Time when alert was first created. ","name":"microsoft.m365_defender.alerts.creationTime","type":"date"},"microsoft.m365_defender.alerts.lastUpdatedTime":{"category":"microsoft","description":"Time when alert was last updated. ","name":"microsoft.m365_defender.alerts.lastUpdatedTime","type":"date"},"microsoft.m365_defender.alerts.investigationId":{"category":"microsoft","description":"The automated investigation id triggered by this alert. ","name":"microsoft.m365_defender.alerts.investigationId","type":"keyword"},"microsoft.m365_defender.alerts.userSid":{"category":"microsoft","description":"The SID of the related user ","name":"microsoft.m365_defender.alerts.userSid","type":"keyword"},"microsoft.m365_defender.alerts.detectionSource":{"category":"microsoft","description":"The service that initially detected the threat. ","name":"microsoft.m365_defender.alerts.detectionSource","type":"keyword"},"microsoft.m365_defender.alerts.classification":{"category":"microsoft","description":"The specification for the incident. The property values are: Unknown, FalsePositive, TruePositive or null. ","name":"microsoft.m365_defender.alerts.classification","type":"keyword"},"microsoft.m365_defender.alerts.investigationState":{"category":"microsoft","description":"Information on the investigation's current status. ","name":"microsoft.m365_defender.alerts.investigationState","type":"keyword"},"microsoft.m365_defender.alerts.determination":{"category":"microsoft","description":"Specifies the determination of the incident. The property values are: NotAvailable, Apt, Malware, SecurityPersonnel, SecurityTesting, UnwantedSoftware, Other or null ","name":"microsoft.m365_defender.alerts.determination","type":"keyword"},"microsoft.m365_defender.alerts.assignedTo":{"category":"microsoft","description":"Owner of the incident, or null if no owner is assigned. ","name":"microsoft.m365_defender.alerts.assignedTo","type":"keyword"},"microsoft.m365_defender.alerts.actorName":{"category":"microsoft","description":"The activity group, if any, the associated with this alert. ","name":"microsoft.m365_defender.alerts.actorName","type":"keyword"},"microsoft.m365_defender.alerts.threatFamilyName":{"category":"microsoft","description":"Threat family associated with this alert. ","name":"microsoft.m365_defender.alerts.threatFamilyName","type":"keyword"},"microsoft.m365_defender.alerts.mitreTechniques":{"category":"microsoft","description":"The attack techniques, as aligned with the MITRE ATT&CK™ framework. ","name":"microsoft.m365_defender.alerts.mitreTechniques","type":"keyword"},"microsoft.m365_defender.alerts.entities.entityType":{"category":"microsoft","description":"Entities that have been identified to be part of, or related to, a given alert. The properties values are: User, Ip, Url, File, Process, MailBox, MailMessage, MailCluster, Registry. ","name":"microsoft.m365_defender.alerts.entities.entityType","type":"keyword"},"microsoft.m365_defender.alerts.entities.accountName":{"category":"microsoft","description":"Account name of the related user. ","name":"microsoft.m365_defender.alerts.entities.accountName","type":"keyword"},"microsoft.m365_defender.alerts.entities.mailboxDisplayName":{"category":"microsoft","description":"The display name of the related mailbox. ","name":"microsoft.m365_defender.alerts.entities.mailboxDisplayName","type":"keyword"},"microsoft.m365_defender.alerts.entities.mailboxAddress":{"category":"microsoft","description":"The mail address of the related mailbox. ","name":"microsoft.m365_defender.alerts.entities.mailboxAddress","type":"keyword"},"microsoft.m365_defender.alerts.entities.clusterBy":{"category":"microsoft","description":"A list of metadata if the entityType is MailCluster. ","name":"microsoft.m365_defender.alerts.entities.clusterBy","type":"keyword"},"microsoft.m365_defender.alerts.entities.sender":{"category":"microsoft","description":"The sender for the related email message. ","name":"microsoft.m365_defender.alerts.entities.sender","type":"keyword"},"microsoft.m365_defender.alerts.entities.recipient":{"category":"microsoft","description":"The recipient for the related email message. ","name":"microsoft.m365_defender.alerts.entities.recipient","type":"keyword"},"microsoft.m365_defender.alerts.entities.subject":{"category":"microsoft","description":"The subject for the related email message. ","name":"microsoft.m365_defender.alerts.entities.subject","type":"keyword"},"microsoft.m365_defender.alerts.entities.deliveryAction":{"category":"microsoft","description":"The delivery status for the related email message. ","name":"microsoft.m365_defender.alerts.entities.deliveryAction","type":"keyword"},"microsoft.m365_defender.alerts.entities.securityGroupId":{"category":"microsoft","description":"The Security Group ID for the user related to the email message. ","name":"microsoft.m365_defender.alerts.entities.securityGroupId","type":"keyword"},"microsoft.m365_defender.alerts.entities.securityGroupName":{"category":"microsoft","description":"The Security Group Name for the user related to the email message. ","name":"microsoft.m365_defender.alerts.entities.securityGroupName","type":"keyword"},"microsoft.m365_defender.alerts.entities.registryHive":{"category":"microsoft","description":"Reference to which Hive in registry the event is related to, if eventType is registry. Example: HKEY_LOCAL_MACHINE. ","name":"microsoft.m365_defender.alerts.entities.registryHive","type":"keyword"},"microsoft.m365_defender.alerts.entities.registryKey":{"category":"microsoft","description":"Reference to the related registry key to the event. ","name":"microsoft.m365_defender.alerts.entities.registryKey","type":"keyword"},"microsoft.m365_defender.alerts.entities.registryValueType":{"category":"microsoft","description":"Value type of the registry key/value pair related to the event. ","name":"microsoft.m365_defender.alerts.entities.registryValueType","type":"keyword"},"microsoft.m365_defender.alerts.entities.deviceId":{"category":"microsoft","description":"The unique ID of the device related to the event. ","name":"microsoft.m365_defender.alerts.entities.deviceId","type":"keyword"},"microsoft.m365_defender.alerts.entities.ipAddress":{"category":"microsoft","description":"The related IP address to the event. ","name":"microsoft.m365_defender.alerts.entities.ipAddress","type":"keyword"},"microsoft.m365_defender.alerts.devices":{"category":"microsoft","description":"The devices related to the investigation. ","name":"microsoft.m365_defender.alerts.devices","type":"flattened"},"misp.attack_pattern.id":{"category":"misp","description":"Identifier of the threat indicator. ","name":"misp.attack_pattern.id","type":"keyword"},"misp.attack_pattern.name":{"category":"misp","description":"Name of the attack pattern. ","name":"misp.attack_pattern.name","type":"keyword"},"misp.attack_pattern.description":{"category":"misp","description":"Description of the attack pattern. ","name":"misp.attack_pattern.description","type":"text"},"misp.attack_pattern.kill_chain_phases":{"category":"misp","description":"The kill chain phase(s) to which this attack pattern corresponds. ","name":"misp.attack_pattern.kill_chain_phases","type":"keyword"},"misp.campaign.id":{"category":"misp","description":"Identifier of the campaign. ","name":"misp.campaign.id","type":"keyword"},"misp.campaign.name":{"category":"misp","description":"Name of the campaign. ","name":"misp.campaign.name","type":"keyword"},"misp.campaign.description":{"category":"misp","description":"Description of the campaign. ","name":"misp.campaign.description","type":"text"},"misp.campaign.aliases":{"category":"misp","description":"Alternative names used to identify this campaign. ","name":"misp.campaign.aliases","type":"text"},"misp.campaign.first_seen":{"category":"misp","description":"The time that this Campaign was first seen, in RFC3339 format. ","name":"misp.campaign.first_seen","type":"date"},"misp.campaign.last_seen":{"category":"misp","description":"The time that this Campaign was last seen, in RFC3339 format. ","name":"misp.campaign.last_seen","type":"date"},"misp.campaign.objective":{"category":"misp","description":"This field defines the Campaign's primary goal, objective, desired outcome, or intended effect. ","name":"misp.campaign.objective","type":"keyword"},"misp.course_of_action.id":{"category":"misp","description":"Identifier of the Course of Action. ","name":"misp.course_of_action.id","type":"keyword"},"misp.course_of_action.name":{"category":"misp","description":"The name used to identify the Course of Action. ","name":"misp.course_of_action.name","type":"keyword"},"misp.course_of_action.description":{"category":"misp","description":"Description of the Course of Action. ","name":"misp.course_of_action.description","type":"text"},"misp.identity.id":{"category":"misp","description":"Identifier of the Identity. ","name":"misp.identity.id","type":"keyword"},"misp.identity.name":{"category":"misp","description":"The name used to identify the Identity. ","name":"misp.identity.name","type":"keyword"},"misp.identity.description":{"category":"misp","description":"Description of the Identity. ","name":"misp.identity.description","type":"text"},"misp.identity.identity_class":{"category":"misp","description":"The type of entity that this Identity describes, e.g., an individual or organization. Open Vocab - identity-class-ov ","name":"misp.identity.identity_class","type":"keyword"},"misp.identity.labels":{"category":"misp","description":"The list of roles that this Identity performs. ","example":"CEO\n","name":"misp.identity.labels","type":"keyword"},"misp.identity.sectors":{"category":"misp","description":"The list of sectors that this Identity belongs to. Open Vocab - industry-sector-ov ","name":"misp.identity.sectors","type":"keyword"},"misp.identity.contact_information":{"category":"misp","description":"The contact information (e-mail, phone number, etc.) for this Identity. ","name":"misp.identity.contact_information","type":"text"},"misp.intrusion_set.id":{"category":"misp","description":"Identifier of the Intrusion Set. ","name":"misp.intrusion_set.id","type":"keyword"},"misp.intrusion_set.name":{"category":"misp","description":"The name used to identify the Intrusion Set. ","name":"misp.intrusion_set.name","type":"keyword"},"misp.intrusion_set.description":{"category":"misp","description":"Description of the Intrusion Set. ","name":"misp.intrusion_set.description","type":"text"},"misp.intrusion_set.aliases":{"category":"misp","description":"Alternative names used to identify the Intrusion Set. ","name":"misp.intrusion_set.aliases","type":"text"},"misp.intrusion_set.first_seen":{"category":"misp","description":"The time that this Intrusion Set was first seen, in RFC3339 format. ","name":"misp.intrusion_set.first_seen","type":"date"},"misp.intrusion_set.last_seen":{"category":"misp","description":"The time that this Intrusion Set was last seen, in RFC3339 format. ","name":"misp.intrusion_set.last_seen","type":"date"},"misp.intrusion_set.goals":{"category":"misp","description":"The high level goals of this Intrusion Set, namely, what are they trying to do. ","name":"misp.intrusion_set.goals","type":"text"},"misp.intrusion_set.resource_level":{"category":"misp","description":"This defines the organizational level at which this Intrusion Set typically works. Open Vocab - attack-resource-level-ov ","name":"misp.intrusion_set.resource_level","type":"text"},"misp.intrusion_set.primary_motivation":{"category":"misp","description":"The primary reason, motivation, or purpose behind this Intrusion Set. Open Vocab - attack-motivation-ov ","name":"misp.intrusion_set.primary_motivation","type":"text"},"misp.intrusion_set.secondary_motivations":{"category":"misp","description":"The secondary reasons, motivations, or purposes behind this Intrusion Set. Open Vocab - attack-motivation-ov ","name":"misp.intrusion_set.secondary_motivations","type":"text"},"misp.malware.id":{"category":"misp","description":"Identifier of the Malware. ","name":"misp.malware.id","type":"keyword"},"misp.malware.name":{"category":"misp","description":"The name used to identify the Malware. ","name":"misp.malware.name","type":"keyword"},"misp.malware.description":{"category":"misp","description":"Description of the Malware. ","name":"misp.malware.description","type":"text"},"misp.malware.labels":{"category":"misp","description":"The type of malware being described. Open Vocab - malware-label-ov. adware,backdoor,bot,ddos,dropper,exploit-kit,keylogger,ransomware, remote-access-trojan,resource-exploitation,rogue-security-software,rootkit, screen-capture,spyware,trojan,virus,worm ","name":"misp.malware.labels","type":"keyword"},"misp.malware.kill_chain_phases":{"category":"misp","description":"The list of kill chain phases for which this Malware instance can be used. ","name":"misp.malware.kill_chain_phases","type":"keyword","format":"string"},"misp.note.id":{"category":"misp","description":"Identifier of the Note. ","name":"misp.note.id","type":"keyword"},"misp.note.summary":{"category":"misp","description":"A brief description used as a summary of the Note. ","name":"misp.note.summary","type":"keyword"},"misp.note.description":{"category":"misp","description":"The content of the Note. ","name":"misp.note.description","type":"text"},"misp.note.authors":{"category":"misp","description":"The name of the author(s) of this Note. ","name":"misp.note.authors","type":"keyword"},"misp.note.object_refs":{"category":"misp","description":"The STIX Objects (SDOs and SROs) that the note is being applied to. ","name":"misp.note.object_refs","type":"keyword"},"misp.threat_indicator.labels":{"category":"misp","description":"list of type open-vocab that specifies the type of indicator. ","example":"Domain Watchlist\n","name":"misp.threat_indicator.labels","type":"keyword"},"misp.threat_indicator.id":{"category":"misp","description":"Identifier of the threat indicator. ","name":"misp.threat_indicator.id","type":"keyword"},"misp.threat_indicator.version":{"category":"misp","description":"Version of the threat indicator. ","name":"misp.threat_indicator.version","type":"keyword"},"misp.threat_indicator.type":{"category":"misp","description":"Type of the threat indicator. ","name":"misp.threat_indicator.type","type":"keyword"},"misp.threat_indicator.description":{"category":"misp","description":"Description of the threat indicator. ","name":"misp.threat_indicator.description","type":"text"},"misp.threat_indicator.feed":{"category":"misp","description":"Name of the threat feed. ","name":"misp.threat_indicator.feed","type":"text"},"misp.threat_indicator.valid_from":{"category":"misp","description":"The time from which this Indicator should be considered valuable intelligence, in RFC3339 format. ","name":"misp.threat_indicator.valid_from","type":"date"},"misp.threat_indicator.valid_until":{"category":"misp","description":"The time at which this Indicator should no longer be considered valuable intelligence. If the valid_until property is omitted, then there is no constraint on the latest time for which the indicator should be used, in RFC3339 format. ","name":"misp.threat_indicator.valid_until","type":"date"},"misp.threat_indicator.severity":{"category":"misp","description":"Threat severity to which this indicator corresponds. ","example":"high","name":"misp.threat_indicator.severity","type":"keyword","format":"string"},"misp.threat_indicator.confidence":{"category":"misp","description":"Confidence level to which this indicator corresponds. ","example":"high","name":"misp.threat_indicator.confidence","type":"keyword"},"misp.threat_indicator.kill_chain_phases":{"category":"misp","description":"The kill chain phase(s) to which this indicator corresponds. ","name":"misp.threat_indicator.kill_chain_phases","type":"keyword","format":"string"},"misp.threat_indicator.mitre_tactic":{"category":"misp","description":"MITRE tactics to which this indicator corresponds. ","example":"Initial Access","name":"misp.threat_indicator.mitre_tactic","type":"keyword","format":"string"},"misp.threat_indicator.mitre_technique":{"category":"misp","description":"MITRE techniques to which this indicator corresponds. ","example":"Drive-by Compromise","name":"misp.threat_indicator.mitre_technique","type":"keyword","format":"string"},"misp.threat_indicator.attack_pattern":{"category":"misp","description":"The attack_pattern for this indicator is a STIX Pattern as specified in STIX Version 2.0 Part 5 - STIX Patterning. ","example":"[destination:ip = '91.219.29.188/32']\n","name":"misp.threat_indicator.attack_pattern","type":"keyword"},"misp.threat_indicator.attack_pattern_kql":{"category":"misp","description":"The attack_pattern for this indicator is KQL query that matches the attack_pattern specified in the STIX Pattern format. ","example":"destination.ip: \"91.219.29.188/32\"\n","name":"misp.threat_indicator.attack_pattern_kql","type":"keyword"},"misp.threat_indicator.negate":{"category":"misp","description":"When set to true, it specifies the absence of the attack_pattern. ","name":"misp.threat_indicator.negate","type":"boolean"},"misp.threat_indicator.intrusion_set":{"category":"misp","description":"Name of the intrusion set if known. ","name":"misp.threat_indicator.intrusion_set","type":"keyword"},"misp.threat_indicator.campaign":{"category":"misp","description":"Name of the attack campaign if known. ","name":"misp.threat_indicator.campaign","type":"keyword"},"misp.threat_indicator.threat_actor":{"category":"misp","description":"Name of the threat actor if known. ","name":"misp.threat_indicator.threat_actor","type":"keyword"},"misp.observed_data.id":{"category":"misp","description":"Identifier of the Observed Data. ","name":"misp.observed_data.id","type":"keyword"},"misp.observed_data.first_observed":{"category":"misp","description":"The beginning of the time window that the data was observed, in RFC3339 format. ","name":"misp.observed_data.first_observed","type":"date"},"misp.observed_data.last_observed":{"category":"misp","description":"The end of the time window that the data was observed, in RFC3339 format. ","name":"misp.observed_data.last_observed","type":"date"},"misp.observed_data.number_observed":{"category":"misp","description":"The number of times the data represented in the objects property was observed. This MUST be an integer between 1 and 999,999,999 inclusive. ","name":"misp.observed_data.number_observed","type":"integer"},"misp.observed_data.objects":{"category":"misp","description":"A dictionary of Cyber Observable Objects that describes the single fact that was observed. ","name":"misp.observed_data.objects","type":"keyword"},"misp.report.id":{"category":"misp","description":"Identifier of the Report. ","name":"misp.report.id","type":"keyword"},"misp.report.labels":{"category":"misp","description":"This field is an Open Vocabulary that specifies the primary subject of this report. Open Vocab - report-label-ov. threat-report,attack-pattern,campaign,identity,indicator,malware,observed-data,threat-actor,tool,vulnerability ","name":"misp.report.labels","type":"keyword"},"misp.report.name":{"category":"misp","description":"The name used to identify the Report. ","name":"misp.report.name","type":"keyword"},"misp.report.description":{"category":"misp","description":"A description that provides more details and context about Report. ","name":"misp.report.description","type":"text"},"misp.report.published":{"category":"misp","description":"The date that this report object was officially published by the creator of this report, in RFC3339 format. ","name":"misp.report.published","type":"date"},"misp.report.object_refs":{"category":"misp","description":"Specifies the STIX Objects that are referred to by this Report. ","name":"misp.report.object_refs","type":"text"},"misp.threat_actor.id":{"category":"misp","description":"Identifier of the Threat Actor. ","name":"misp.threat_actor.id","type":"keyword"},"misp.threat_actor.labels":{"category":"misp","description":"This field specifies the type of threat actor. Open Vocab - threat-actor-label-ov. activist,competitor,crime-syndicate,criminal,hacker,insider-accidental,insider-disgruntled,nation-state,sensationalist,spy,terrorist ","name":"misp.threat_actor.labels","type":"keyword"},"misp.threat_actor.name":{"category":"misp","description":"The name used to identify this Threat Actor or Threat Actor group. ","name":"misp.threat_actor.name","type":"keyword"},"misp.threat_actor.description":{"category":"misp","description":"A description that provides more details and context about the Threat Actor. ","name":"misp.threat_actor.description","type":"text"},"misp.threat_actor.aliases":{"category":"misp","description":"A list of other names that this Threat Actor is believed to use. ","name":"misp.threat_actor.aliases","type":"text"},"misp.threat_actor.roles":{"category":"misp","description":"This is a list of roles the Threat Actor plays. Open Vocab - threat-actor-role-ov. agent,director,independent,sponsor,infrastructure-operator,infrastructure-architect,malware-author ","name":"misp.threat_actor.roles","type":"text"},"misp.threat_actor.goals":{"category":"misp","description":"The high level goals of this Threat Actor, namely, what are they trying to do. ","name":"misp.threat_actor.goals","type":"text"},"misp.threat_actor.sophistication":{"category":"misp","description":"The skill, specific knowledge, special training, or expertise a Threat Actor must have to perform the attack. Open Vocab - threat-actor-sophistication-ov. none,minimal,intermediate,advanced,strategic,expert,innovator ","name":"misp.threat_actor.sophistication","type":"text"},"misp.threat_actor.resource_level":{"category":"misp","description":"This defines the organizational level at which this Threat Actor typically works. Open Vocab - attack-resource-level-ov. individual,club,contest,team,organization,government ","name":"misp.threat_actor.resource_level","type":"text"},"misp.threat_actor.primary_motivation":{"category":"misp","description":"The primary reason, motivation, or purpose behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ","name":"misp.threat_actor.primary_motivation","type":"text"},"misp.threat_actor.secondary_motivations":{"category":"misp","description":"The secondary reasons, motivations, or purposes behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ","name":"misp.threat_actor.secondary_motivations","type":"text"},"misp.threat_actor.personal_motivations":{"category":"misp","description":"The personal reasons, motivations, or purposes of the Threat Actor regardless of organizational goals. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ","name":"misp.threat_actor.personal_motivations","type":"text"},"misp.tool.id":{"category":"misp","description":"Identifier of the Tool. ","name":"misp.tool.id","type":"keyword"},"misp.tool.labels":{"category":"misp","description":"The kind(s) of tool(s) being described. Open Vocab - tool-label-ov. denial-of-service,exploitation,information-gathering,network-capture,credential-exploitation,remote-access,vulnerability-scanning ","name":"misp.tool.labels","type":"keyword"},"misp.tool.name":{"category":"misp","description":"The name used to identify the Tool. ","name":"misp.tool.name","type":"keyword"},"misp.tool.description":{"category":"misp","description":"A description that provides more details and context about the Tool. ","name":"misp.tool.description","type":"text"},"misp.tool.tool_version":{"category":"misp","description":"The version identifier associated with the Tool. ","name":"misp.tool.tool_version","type":"keyword"},"misp.tool.kill_chain_phases":{"category":"misp","description":"The list of kill chain phases for which this Tool instance can be used. ","name":"misp.tool.kill_chain_phases","type":"text"},"misp.vulnerability.id":{"category":"misp","description":"Identifier of the Vulnerability. ","name":"misp.vulnerability.id","type":"keyword"},"misp.vulnerability.name":{"category":"misp","description":"The name used to identify the Vulnerability. ","name":"misp.vulnerability.name","type":"keyword"},"misp.vulnerability.description":{"category":"misp","description":"A description that provides more details and context about the Vulnerability. ","name":"misp.vulnerability.description","type":"text"},"mssql.log.origin":{"category":"mssql","description":"Origin of the message, usually the server but it can also be a recovery process","name":"mssql.log.origin","type":"keyword"},"mysqlenterprise.audit.class":{"category":"mysqlenterprise","description":"A string representing the event class. The class defines the type of event, when taken together with the event item that specifies the event subclass. ","name":"mysqlenterprise.audit.class","type":"keyword"},"mysqlenterprise.audit.connection_id":{"category":"mysqlenterprise","description":"An integer representing the client connection identifier. This is the same as the value returned by the CONNECTION_ID() function within the session. ","name":"mysqlenterprise.audit.connection_id","type":"keyword"},"mysqlenterprise.audit.id":{"category":"mysqlenterprise","description":"An unsigned integer representing an event ID. ","name":"mysqlenterprise.audit.id","type":"keyword"},"mysqlenterprise.audit.connection_data.connection_type":{"category":"mysqlenterprise","description":"The security state of the connection to the server. Permitted values are tcp/ip (TCP/IP connection established without encryption), ssl (TCP/IP connection established with encryption), socket (Unix socket file connection), named_pipe (Windows named pipe connection), and shared_memory (Windows shared memory connection). ","name":"mysqlenterprise.audit.connection_data.connection_type","type":"keyword"},"mysqlenterprise.audit.connection_data.status":{"category":"mysqlenterprise","description":"An integer representing the command status: 0 for success, nonzero if an error occurred. ","name":"mysqlenterprise.audit.connection_data.status","type":"long"},"mysqlenterprise.audit.connection_data.db":{"category":"mysqlenterprise","description":"A string representing a database name. For connection_data, it is the default database. For table_access_data, it is the table database. ","name":"mysqlenterprise.audit.connection_data.db","type":"keyword"},"mysqlenterprise.audit.connection_data.connection_attributes":{"category":"mysqlenterprise","description":"Connection attributes that might be passed by different MySQL Clients. ","name":"mysqlenterprise.audit.connection_data.connection_attributes","type":"flattened"},"mysqlenterprise.audit.general_data.command":{"category":"mysqlenterprise","description":"A string representing the type of instruction that generated the audit event, such as a command that the server received from a client. ","name":"mysqlenterprise.audit.general_data.command","type":"keyword"},"mysqlenterprise.audit.general_data.sql_command":{"category":"mysqlenterprise","description":"A string that indicates the SQL statement type. ","name":"mysqlenterprise.audit.general_data.sql_command","type":"keyword"},"mysqlenterprise.audit.general_data.query":{"category":"mysqlenterprise","description":"A string representing the text of an SQL statement. The value can be empty. Long values may be truncated. The string, like the audit log file itself, is written using UTF-8 (up to 4 bytes per character), so the value may be the result of conversion. ","name":"mysqlenterprise.audit.general_data.query","type":"keyword"},"mysqlenterprise.audit.general_data.status":{"category":"mysqlenterprise","description":"An integer representing the command status: 0 for success, nonzero if an error occurred. This is the same as the value of the mysql_errno() C API function. ","name":"mysqlenterprise.audit.general_data.status","type":"long"},"mysqlenterprise.audit.login.user":{"category":"mysqlenterprise","description":"A string representing the information indicating how a client connected to the server. ","name":"mysqlenterprise.audit.login.user","type":"keyword"},"mysqlenterprise.audit.login.proxy":{"category":"mysqlenterprise","description":"A string representing the proxy user. The value is empty if user proxying is not in effect. ","name":"mysqlenterprise.audit.login.proxy","type":"keyword"},"mysqlenterprise.audit.shutdown_data.server_id":{"category":"mysqlenterprise","description":"An integer representing the server ID. This is the same as the value of the server_id system variable. ","name":"mysqlenterprise.audit.shutdown_data.server_id","type":"keyword"},"mysqlenterprise.audit.startup_data.server_id":{"category":"mysqlenterprise","description":"An integer representing the server ID. This is the same as the value of the server_id system variable. ","name":"mysqlenterprise.audit.startup_data.server_id","type":"keyword"},"mysqlenterprise.audit.startup_data.mysql_version":{"category":"mysqlenterprise","description":"An integer representing the server ID. This is the same as the value of the server_id system variable. ","name":"mysqlenterprise.audit.startup_data.mysql_version","type":"keyword"},"mysqlenterprise.audit.table_access_data.db":{"category":"mysqlenterprise","description":"A string representing a database name. For connection_data, it is the default database. For table_access_data, it is the table database. ","name":"mysqlenterprise.audit.table_access_data.db","type":"keyword"},"mysqlenterprise.audit.table_access_data.table":{"category":"mysqlenterprise","description":"A string representing a table name. ","name":"mysqlenterprise.audit.table_access_data.table","type":"keyword"},"mysqlenterprise.audit.table_access_data.query":{"category":"mysqlenterprise","description":"A string representing the text of an SQL statement. The value can be empty. Long values may be truncated. The string, like the audit log file itself, is written using UTF-8 (up to 4 bytes per character), so the value may be the result of conversion. ","name":"mysqlenterprise.audit.table_access_data.query","type":"keyword"},"mysqlenterprise.audit.table_access_data.sql_command":{"category":"mysqlenterprise","description":"A string that indicates the SQL statement type. ","name":"mysqlenterprise.audit.table_access_data.sql_command","type":"keyword"},"mysqlenterprise.audit.account.user":{"category":"mysqlenterprise","description":"A string representing the user that the server authenticated the client as. This is the user name that the server uses for privilege checking. ","name":"mysqlenterprise.audit.account.user","type":"keyword"},"mysqlenterprise.audit.account.host":{"category":"mysqlenterprise","description":"A string representing the client host name. ","name":"mysqlenterprise.audit.account.host","type":"keyword"},"mysqlenterprise.audit.login.os":{"category":"mysqlenterprise","description":"A string representing the external user name used during the authentication process, as set by the plugin used to authenticate the client. ","name":"mysqlenterprise.audit.login.os","type":"keyword"},"o365.audit.AADGroupId":{"category":"o365","name":"o365.audit.AADGroupId","type":"keyword"},"o365.audit.Actor.ID":{"category":"o365","name":"o365.audit.Actor.ID","type":"keyword"},"o365.audit.Actor.Type":{"category":"o365","name":"o365.audit.Actor.Type","type":"keyword"},"o365.audit.ActorContextId":{"category":"o365","name":"o365.audit.ActorContextId","type":"keyword"},"o365.audit.ActorIpAddress":{"category":"o365","name":"o365.audit.ActorIpAddress","type":"keyword"},"o365.audit.ActorUserId":{"category":"o365","name":"o365.audit.ActorUserId","type":"keyword"},"o365.audit.ActorYammerUserId":{"category":"o365","name":"o365.audit.ActorYammerUserId","type":"keyword"},"o365.audit.AlertEntityId":{"category":"o365","name":"o365.audit.AlertEntityId","type":"keyword"},"o365.audit.AlertId":{"category":"o365","name":"o365.audit.AlertId","type":"keyword"},"o365.audit.AlertLinks":{"category":"o365","name":"o365.audit.AlertLinks","type":"array"},"o365.audit.AlertType":{"category":"o365","name":"o365.audit.AlertType","type":"keyword"},"o365.audit.AppId":{"category":"o365","name":"o365.audit.AppId","type":"keyword"},"o365.audit.ApplicationDisplayName":{"category":"o365","name":"o365.audit.ApplicationDisplayName","type":"keyword"},"o365.audit.ApplicationId":{"category":"o365","name":"o365.audit.ApplicationId","type":"keyword"},"o365.audit.AzureActiveDirectoryEventType":{"category":"o365","name":"o365.audit.AzureActiveDirectoryEventType","type":"keyword"},"o365.audit.ExchangeMetaData.*":{"category":"o365","name":"o365.audit.ExchangeMetaData.*","type":"object"},"o365.audit.Category":{"category":"o365","name":"o365.audit.Category","type":"keyword"},"o365.audit.ClientAppId":{"category":"o365","name":"o365.audit.ClientAppId","type":"keyword"},"o365.audit.ClientInfoString":{"category":"o365","name":"o365.audit.ClientInfoString","type":"keyword"},"o365.audit.ClientIP":{"category":"o365","name":"o365.audit.ClientIP","type":"keyword"},"o365.audit.ClientIPAddress":{"category":"o365","name":"o365.audit.ClientIPAddress","type":"keyword"},"o365.audit.Comments":{"category":"o365","name":"o365.audit.Comments","type":"text"},"o365.audit.CommunicationType":{"category":"o365","name":"o365.audit.CommunicationType","type":"keyword"},"o365.audit.CorrelationId":{"category":"o365","name":"o365.audit.CorrelationId","type":"keyword"},"o365.audit.CreationTime":{"category":"o365","name":"o365.audit.CreationTime","type":"keyword"},"o365.audit.CustomUniqueId":{"category":"o365","name":"o365.audit.CustomUniqueId","type":"keyword"},"o365.audit.Data":{"category":"o365","name":"o365.audit.Data","type":"keyword"},"o365.audit.DataType":{"category":"o365","name":"o365.audit.DataType","type":"keyword"},"o365.audit.DoNotDistributeEvent":{"category":"o365","name":"o365.audit.DoNotDistributeEvent","type":"boolean"},"o365.audit.EntityType":{"category":"o365","name":"o365.audit.EntityType","type":"keyword"},"o365.audit.ErrorNumber":{"category":"o365","name":"o365.audit.ErrorNumber","type":"keyword"},"o365.audit.EventData":{"category":"o365","name":"o365.audit.EventData","type":"keyword"},"o365.audit.EventSource":{"category":"o365","name":"o365.audit.EventSource","type":"keyword"},"o365.audit.ExceptionInfo.*":{"category":"o365","name":"o365.audit.ExceptionInfo.*","type":"object"},"o365.audit.ExtendedProperties.*":{"category":"o365","name":"o365.audit.ExtendedProperties.*","type":"object"},"o365.audit.ExternalAccess":{"category":"o365","name":"o365.audit.ExternalAccess","type":"keyword"},"o365.audit.FromApp":{"category":"o365","name":"o365.audit.FromApp","type":"boolean"},"o365.audit.GroupName":{"category":"o365","name":"o365.audit.GroupName","type":"keyword"},"o365.audit.Id":{"category":"o365","name":"o365.audit.Id","type":"keyword"},"o365.audit.ImplicitShare":{"category":"o365","name":"o365.audit.ImplicitShare","type":"keyword"},"o365.audit.IncidentId":{"category":"o365","name":"o365.audit.IncidentId","type":"keyword"},"o365.audit.InternalLogonType":{"category":"o365","name":"o365.audit.InternalLogonType","type":"keyword"},"o365.audit.InterSystemsId":{"category":"o365","name":"o365.audit.InterSystemsId","type":"keyword"},"o365.audit.IntraSystemId":{"category":"o365","name":"o365.audit.IntraSystemId","type":"keyword"},"o365.audit.IsDocLib":{"category":"o365","name":"o365.audit.IsDocLib","type":"boolean"},"o365.audit.Item.*":{"category":"o365","name":"o365.audit.Item.*","type":"object"},"o365.audit.Item.*.*":{"category":"o365","name":"o365.audit.Item.*.*","type":"object"},"o365.audit.ItemCount":{"category":"o365","name":"o365.audit.ItemCount","type":"long"},"o365.audit.ItemName":{"category":"o365","name":"o365.audit.ItemName","type":"keyword"},"o365.audit.ItemType":{"category":"o365","name":"o365.audit.ItemType","type":"keyword"},"o365.audit.ListBaseTemplateType":{"category":"o365","name":"o365.audit.ListBaseTemplateType","type":"keyword"},"o365.audit.ListBaseType":{"category":"o365","name":"o365.audit.ListBaseType","type":"keyword"},"o365.audit.ListColor":{"category":"o365","name":"o365.audit.ListColor","type":"keyword"},"o365.audit.ListIcon":{"category":"o365","name":"o365.audit.ListIcon","type":"keyword"},"o365.audit.ListId":{"category":"o365","name":"o365.audit.ListId","type":"keyword"},"o365.audit.ListTitle":{"category":"o365","name":"o365.audit.ListTitle","type":"keyword"},"o365.audit.ListItemUniqueId":{"category":"o365","name":"o365.audit.ListItemUniqueId","type":"keyword"},"o365.audit.LogonError":{"category":"o365","name":"o365.audit.LogonError","type":"keyword"},"o365.audit.LogonType":{"category":"o365","name":"o365.audit.LogonType","type":"keyword"},"o365.audit.LogonUserSid":{"category":"o365","name":"o365.audit.LogonUserSid","type":"keyword"},"o365.audit.MailboxGuid":{"category":"o365","name":"o365.audit.MailboxGuid","type":"keyword"},"o365.audit.MailboxOwnerMasterAccountSid":{"category":"o365","name":"o365.audit.MailboxOwnerMasterAccountSid","type":"keyword"},"o365.audit.MailboxOwnerSid":{"category":"o365","name":"o365.audit.MailboxOwnerSid","type":"keyword"},"o365.audit.MailboxOwnerUPN":{"category":"o365","name":"o365.audit.MailboxOwnerUPN","type":"keyword"},"o365.audit.Members":{"category":"o365","name":"o365.audit.Members","type":"array"},"o365.audit.Members.*":{"category":"o365","name":"o365.audit.Members.*","type":"object"},"o365.audit.ModifiedProperties.*.*":{"category":"o365","name":"o365.audit.ModifiedProperties.*.*","type":"object"},"o365.audit.Name":{"category":"o365","name":"o365.audit.Name","type":"keyword"},"o365.audit.ObjectId":{"category":"o365","name":"o365.audit.ObjectId","type":"keyword"},"o365.audit.Operation":{"category":"o365","name":"o365.audit.Operation","type":"keyword"},"o365.audit.OrganizationId":{"category":"o365","name":"o365.audit.OrganizationId","type":"keyword"},"o365.audit.OrganizationName":{"category":"o365","name":"o365.audit.OrganizationName","type":"keyword"},"o365.audit.OriginatingServer":{"category":"o365","name":"o365.audit.OriginatingServer","type":"keyword"},"o365.audit.Parameters.*":{"category":"o365","name":"o365.audit.Parameters.*","type":"object"},"o365.audit.PolicyDetails":{"category":"o365","name":"o365.audit.PolicyDetails","type":"array"},"o365.audit.PolicyId":{"category":"o365","name":"o365.audit.PolicyId","type":"keyword"},"o365.audit.RecordType":{"category":"o365","name":"o365.audit.RecordType","type":"keyword"},"o365.audit.ResultStatus":{"category":"o365","name":"o365.audit.ResultStatus","type":"keyword"},"o365.audit.SensitiveInfoDetectionIsIncluded":{"category":"o365","name":"o365.audit.SensitiveInfoDetectionIsIncluded","type":"keyword"},"o365.audit.SharePointMetaData.*":{"category":"o365","name":"o365.audit.SharePointMetaData.*","type":"object"},"o365.audit.SessionId":{"category":"o365","name":"o365.audit.SessionId","type":"keyword"},"o365.audit.Severity":{"category":"o365","name":"o365.audit.Severity","type":"keyword"},"o365.audit.Site":{"category":"o365","name":"o365.audit.Site","type":"keyword"},"o365.audit.SiteUrl":{"category":"o365","name":"o365.audit.SiteUrl","type":"keyword"},"o365.audit.Source":{"category":"o365","name":"o365.audit.Source","type":"keyword"},"o365.audit.SourceFileExtension":{"category":"o365","name":"o365.audit.SourceFileExtension","type":"keyword"},"o365.audit.SourceFileName":{"category":"o365","name":"o365.audit.SourceFileName","type":"keyword"},"o365.audit.SourceRelativeUrl":{"category":"o365","name":"o365.audit.SourceRelativeUrl","type":"keyword"},"o365.audit.Status":{"category":"o365","name":"o365.audit.Status","type":"keyword"},"o365.audit.SupportTicketId":{"category":"o365","name":"o365.audit.SupportTicketId","type":"keyword"},"o365.audit.Target.ID":{"category":"o365","name":"o365.audit.Target.ID","type":"keyword"},"o365.audit.Target.Type":{"category":"o365","name":"o365.audit.Target.Type","type":"keyword"},"o365.audit.TargetContextId":{"category":"o365","name":"o365.audit.TargetContextId","type":"keyword"},"o365.audit.TargetUserOrGroupName":{"category":"o365","name":"o365.audit.TargetUserOrGroupName","type":"keyword"},"o365.audit.TargetUserOrGroupType":{"category":"o365","name":"o365.audit.TargetUserOrGroupType","type":"keyword"},"o365.audit.TeamName":{"category":"o365","name":"o365.audit.TeamName","type":"keyword"},"o365.audit.TeamGuid":{"category":"o365","name":"o365.audit.TeamGuid","type":"keyword"},"o365.audit.TemplateTypeId":{"category":"o365","name":"o365.audit.TemplateTypeId","type":"keyword"},"o365.audit.UniqueSharingId":{"category":"o365","name":"o365.audit.UniqueSharingId","type":"keyword"},"o365.audit.UserAgent":{"category":"o365","name":"o365.audit.UserAgent","type":"keyword"},"o365.audit.UserId":{"category":"o365","name":"o365.audit.UserId","type":"keyword"},"o365.audit.UserKey":{"category":"o365","name":"o365.audit.UserKey","type":"keyword"},"o365.audit.UserType":{"category":"o365","name":"o365.audit.UserType","type":"keyword"},"o365.audit.Version":{"category":"o365","name":"o365.audit.Version","type":"keyword"},"o365.audit.WebId":{"category":"o365","name":"o365.audit.WebId","type":"keyword"},"o365.audit.Workload":{"category":"o365","name":"o365.audit.Workload","type":"keyword"},"o365.audit.YammerNetworkId":{"category":"o365","name":"o365.audit.YammerNetworkId","type":"keyword"},"okta.uuid":{"category":"okta","description":"The unique identifier of the Okta LogEvent. ","name":"okta.uuid","type":"keyword"},"okta.event_type":{"category":"okta","description":"The type of the LogEvent. ","name":"okta.event_type","type":"keyword"},"okta.version":{"category":"okta","description":"The version of the LogEvent. ","name":"okta.version","type":"keyword"},"okta.severity":{"category":"okta","description":"The severity of the LogEvent. Must be one of DEBUG, INFO, WARN, or ERROR. ","name":"okta.severity","type":"keyword"},"okta.display_message":{"category":"okta","description":"The display message of the LogEvent. ","name":"okta.display_message","type":"keyword"},"okta.actor.id":{"category":"okta","description":"Identifier of the actor. ","name":"okta.actor.id","type":"keyword"},"okta.actor.type":{"category":"okta","description":"Type of the actor. ","name":"okta.actor.type","type":"keyword"},"okta.actor.alternate_id":{"category":"okta","description":"Alternate identifier of the actor. ","name":"okta.actor.alternate_id","type":"keyword"},"okta.actor.display_name":{"category":"okta","description":"Display name of the actor. ","name":"okta.actor.display_name","type":"keyword"},"okta.client.ip":{"category":"okta","description":"The IP address of the client. ","name":"okta.client.ip","type":"ip"},"okta.client.user_agent.raw_user_agent":{"category":"okta","description":"The raw informaton of the user agent. ","name":"okta.client.user_agent.raw_user_agent","type":"keyword"},"okta.client.user_agent.os":{"category":"okta","description":"The OS informaton. ","name":"okta.client.user_agent.os","type":"keyword"},"okta.client.user_agent.browser":{"category":"okta","description":"The browser informaton of the client. ","name":"okta.client.user_agent.browser","type":"keyword"},"okta.client.zone":{"category":"okta","description":"The zone information of the client. ","name":"okta.client.zone","type":"keyword"},"okta.client.device":{"category":"okta","description":"The information of the client device. ","name":"okta.client.device","type":"keyword"},"okta.client.id":{"category":"okta","description":"The identifier of the client. ","name":"okta.client.id","type":"keyword"},"okta.outcome.reason":{"category":"okta","description":"The reason of the outcome. ","name":"okta.outcome.reason","type":"keyword"},"okta.outcome.result":{"category":"okta","description":"The result of the outcome. Must be one of: SUCCESS, FAILURE, SKIPPED, ALLOW, DENY, CHALLENGE, UNKNOWN. ","name":"okta.outcome.result","type":"keyword"},"okta.target.id":{"category":"okta","description":"Identifier of the actor. ","name":"okta.target.id","type":"keyword"},"okta.target.type":{"category":"okta","description":"Type of the actor. ","name":"okta.target.type","type":"keyword"},"okta.target.alternate_id":{"category":"okta","description":"Alternate identifier of the actor. ","name":"okta.target.alternate_id","type":"keyword"},"okta.target.display_name":{"category":"okta","description":"Display name of the actor. ","name":"okta.target.display_name","type":"keyword"},"okta.transaction.id":{"category":"okta","description":"Identifier of the transaction. ","name":"okta.transaction.id","type":"keyword"},"okta.transaction.type":{"category":"okta","description":"The type of transaction. Must be one of \"WEB\", \"JOB\". ","name":"okta.transaction.type","type":"keyword"},"okta.debug_context.debug_data.device_fingerprint":{"category":"okta","description":"The fingerprint of the device. ","name":"okta.debug_context.debug_data.device_fingerprint","type":"keyword"},"okta.debug_context.debug_data.request_id":{"category":"okta","description":"The identifier of the request. ","name":"okta.debug_context.debug_data.request_id","type":"keyword"},"okta.debug_context.debug_data.request_uri":{"category":"okta","description":"The request URI. ","name":"okta.debug_context.debug_data.request_uri","type":"keyword"},"okta.debug_context.debug_data.threat_suspected":{"category":"okta","description":"Threat suspected. ","name":"okta.debug_context.debug_data.threat_suspected","type":"keyword"},"okta.debug_context.debug_data.url":{"category":"okta","description":"The URL. ","name":"okta.debug_context.debug_data.url","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.browser":{"category":"okta","description":"The browser used. ","name":"okta.debug_context.debug_data.suspicious_activity.browser","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.event_city":{"category":"okta","description":"The city where the suspicious activity took place. ","name":"okta.debug_context.debug_data.suspicious_activity.event_city","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.event_country":{"category":"okta","description":"The country where the suspicious activity took place. ","name":"okta.debug_context.debug_data.suspicious_activity.event_country","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.event_id":{"category":"okta","description":"The event ID. ","name":"okta.debug_context.debug_data.suspicious_activity.event_id","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.event_ip":{"category":"okta","description":"The IP of the suspicious event. ","name":"okta.debug_context.debug_data.suspicious_activity.event_ip","type":"ip"},"okta.debug_context.debug_data.suspicious_activity.event_latitude":{"category":"okta","description":"The latitude where the suspicious activity took place. ","name":"okta.debug_context.debug_data.suspicious_activity.event_latitude","type":"float"},"okta.debug_context.debug_data.suspicious_activity.event_longitude":{"category":"okta","description":"The longitude where the suspicious activity took place. ","name":"okta.debug_context.debug_data.suspicious_activity.event_longitude","type":"float"},"okta.debug_context.debug_data.suspicious_activity.event_state":{"category":"okta","description":"The state where the suspicious activity took place. ","name":"okta.debug_context.debug_data.suspicious_activity.event_state","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.event_transaction_id":{"category":"okta","description":"The event transaction ID. ","name":"okta.debug_context.debug_data.suspicious_activity.event_transaction_id","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.event_type":{"category":"okta","description":"The event type. ","name":"okta.debug_context.debug_data.suspicious_activity.event_type","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.os":{"category":"okta","description":"The OS of the system from where the suspicious activity occured. ","name":"okta.debug_context.debug_data.suspicious_activity.os","type":"keyword"},"okta.debug_context.debug_data.suspicious_activity.timestamp":{"category":"okta","description":"The timestamp of when the activity occurred. ","name":"okta.debug_context.debug_data.suspicious_activity.timestamp","type":"date"},"okta.authentication_context.authentication_provider":{"category":"okta","description":"The information about the authentication provider. Must be one of OKTA_AUTHENTICATION_PROVIDER, ACTIVE_DIRECTORY, LDAP, FEDERATION, SOCIAL, FACTOR_PROVIDER. ","name":"okta.authentication_context.authentication_provider","type":"keyword"},"okta.authentication_context.authentication_step":{"category":"okta","description":"The authentication step. ","name":"okta.authentication_context.authentication_step","type":"integer"},"okta.authentication_context.credential_provider":{"category":"okta","description":"The information about credential provider. Must be one of OKTA_CREDENTIAL_PROVIDER, RSA, SYMANTEC, GOOGLE, DUO, YUBIKEY. ","name":"okta.authentication_context.credential_provider","type":"keyword"},"okta.authentication_context.credential_type":{"category":"okta","description":"The information about credential type. Must be one of OTP, SMS, PASSWORD, ASSERTION, IWA, EMAIL, OAUTH2, JWT, CERTIFICATE, PRE_SHARED_SYMMETRIC_KEY, OKTA_CLIENT_SESSION, DEVICE_UDID. ","name":"okta.authentication_context.credential_type","type":"keyword"},"okta.authentication_context.issuer.id":{"category":"okta","description":"The identifier of the issuer. ","name":"okta.authentication_context.issuer.id","type":"keyword"},"okta.authentication_context.issuer.type":{"category":"okta","description":"The type of the issuer. ","name":"okta.authentication_context.issuer.type","type":"keyword"},"okta.authentication_context.external_session_id":{"category":"okta","description":"The session identifer of the external session if any. ","name":"okta.authentication_context.external_session_id","type":"keyword"},"okta.authentication_context.interface":{"category":"okta","description":"The interface used. e.g., Outlook, Office365, wsTrust ","name":"okta.authentication_context.interface","type":"keyword"},"okta.security_context.as.number":{"category":"okta","description":"The AS number. ","name":"okta.security_context.as.number","type":"integer"},"okta.security_context.as.organization.name":{"category":"okta","description":"The organization name. ","name":"okta.security_context.as.organization.name","type":"keyword"},"okta.security_context.isp":{"category":"okta","description":"The Internet Service Provider. ","name":"okta.security_context.isp","type":"keyword"},"okta.security_context.domain":{"category":"okta","description":"The domain name. ","name":"okta.security_context.domain","type":"keyword"},"okta.security_context.is_proxy":{"category":"okta","description":"Whether it is a proxy or not. ","name":"okta.security_context.is_proxy","type":"boolean"},"okta.request.ip_chain.ip":{"category":"okta","description":"IP address. ","name":"okta.request.ip_chain.ip","type":"ip"},"okta.request.ip_chain.version":{"category":"okta","description":"IP version. Must be one of V4, V6. ","name":"okta.request.ip_chain.version","type":"keyword"},"okta.request.ip_chain.source":{"category":"okta","description":"Source information. ","name":"okta.request.ip_chain.source","type":"keyword"},"okta.request.ip_chain.geographical_context.city":{"category":"okta","description":"The city.","name":"okta.request.ip_chain.geographical_context.city","type":"keyword"},"okta.request.ip_chain.geographical_context.state":{"category":"okta","description":"The state.","name":"okta.request.ip_chain.geographical_context.state","type":"keyword"},"okta.request.ip_chain.geographical_context.postal_code":{"category":"okta","description":"The postal code.","name":"okta.request.ip_chain.geographical_context.postal_code","type":"keyword"},"okta.request.ip_chain.geographical_context.country":{"category":"okta","description":"The country.","name":"okta.request.ip_chain.geographical_context.country","type":"keyword"},"okta.request.ip_chain.geographical_context.geolocation":{"category":"okta","description":"Geolocation information. ","name":"okta.request.ip_chain.geographical_context.geolocation","type":"geo_point"},"oracle.database_audit.status":{"category":"oracle","description":"Database Audit Status. ","name":"oracle.database_audit.status","type":"keyword"},"oracle.database_audit.session_id":{"category":"oracle","description":"Indicates the audit session ID number. ","name":"oracle.database_audit.session_id","type":"keyword"},"oracle.database_audit.client.terminal":{"category":"oracle","description":"If available, the client terminal type, for example \"pty\". ","name":"oracle.database_audit.client.terminal","type":"keyword"},"oracle.database_audit.client.address":{"category":"oracle","description":"The IP Address or Domain used by the client. ","name":"oracle.database_audit.client.address","type":"keyword"},"oracle.database_audit.client.user":{"category":"oracle","description":"The user running the client or connection to the database. ","name":"oracle.database_audit.client.user","type":"keyword"},"oracle.database_audit.database.user":{"category":"oracle","description":"The database user used to authenticate. ","name":"oracle.database_audit.database.user","type":"keyword"},"oracle.database_audit.privilege":{"category":"oracle","description":"The privilege group related to the database user. ","name":"oracle.database_audit.privilege","type":"keyword"},"oracle.database_audit.entry.id":{"category":"oracle","description":"Indicates the current audit entry number, assigned to each audit trail record. The audit entry.id sequence number is shared between fine-grained audit records and regular audit records. ","name":"oracle.database_audit.entry.id","type":"keyword"},"oracle.database_audit.database.host":{"category":"oracle","description":"Client host machine name. ","name":"oracle.database_audit.database.host","type":"keyword"},"oracle.database_audit.action":{"category":"oracle","description":"The action performed during the audit event. This could for example be the raw query. ","name":"oracle.database_audit.action","type":"keyword"},"oracle.database_audit.action_number":{"category":"oracle","description":"Action is a numeric value representing the action the user performed. The corresponding name of the action type is in the AUDIT_ACTIONS table. For example, action 100 refers to LOGON. ","name":"oracle.database_audit.action_number","type":"keyword"},"oracle.database_audit.database.id":{"category":"oracle","description":"Database identifier calculated when the database is created. It corresponds to the DBID column of the V$DATABASE data dictionary view. ","name":"oracle.database_audit.database.id","type":"keyword"},"oracle.database_audit.length":{"category":"oracle","description":"Refers to the total number of bytes used in this audit record. This number includes the trailing newline bytes (\\n), if any, at the end of the audit record. ","name":"oracle.database_audit.length","type":"long"},"panw.panos.ruleset":{"category":"panw","description":"Name of the rule that matched this session. ","name":"panw.panos.ruleset","type":"keyword"},"panw.panos.source.zone":{"category":"panw","description":"Source zone for this session. ","name":"panw.panos.source.zone","type":"keyword"},"panw.panos.source.interface":{"category":"panw","description":"Source interface for this session. ","name":"panw.panos.source.interface","type":"keyword"},"panw.panos.source.nat.ip":{"category":"panw","description":"Post-NAT source IP. ","name":"panw.panos.source.nat.ip","type":"ip"},"panw.panos.source.nat.port":{"category":"panw","description":"Post-NAT source port. ","name":"panw.panos.source.nat.port","type":"long"},"panw.panos.destination.zone":{"category":"panw","description":"Destination zone for this session. ","name":"panw.panos.destination.zone","type":"keyword"},"panw.panos.destination.interface":{"category":"panw","description":"Destination interface for this session. ","name":"panw.panos.destination.interface","type":"keyword"},"panw.panos.destination.nat.ip":{"category":"panw","description":"Post-NAT destination IP. ","name":"panw.panos.destination.nat.ip","type":"ip"},"panw.panos.destination.nat.port":{"category":"panw","description":"Post-NAT destination port. ","name":"panw.panos.destination.nat.port","type":"long"},"panw.panos.endreason":{"category":"panw","description":"The reason a session terminated. ","name":"panw.panos.endreason","type":"keyword"},"panw.panos.network.pcap_id":{"category":"panw","description":"Packet capture ID for a threat. ","name":"panw.panos.network.pcap_id","type":"keyword"},"panw.panos.network.nat.community_id":{"category":"panw","description":"Community ID flow-hash for the NAT 5-tuple. ","name":"panw.panos.network.nat.community_id","type":"keyword"},"panw.panos.file.hash":{"category":"panw","description":"Binary hash for a threat file sent to be analyzed by the WildFire service. ","name":"panw.panos.file.hash","type":"keyword"},"panw.panos.url.category":{"category":"panw","description":"For threat URLs, it's the URL category. For WildFire, the verdict on the file and is either 'malicious', 'grayware', or 'benign'. ","name":"panw.panos.url.category","type":"keyword"},"panw.panos.flow_id":{"category":"panw","description":"Internal numeric identifier for each session. ","name":"panw.panos.flow_id","type":"keyword"},"panw.panos.sequence_number":{"category":"panw","description":"Log entry identifier that is incremented sequentially. Unique for each log type. ","name":"panw.panos.sequence_number","type":"long"},"panw.panos.threat.resource":{"category":"panw","description":"URL or file name for a threat. ","name":"panw.panos.threat.resource","type":"keyword"},"panw.panos.threat.id":{"category":"panw","description":"Palo Alto Networks identifier for the threat. ","name":"panw.panos.threat.id","type":"keyword"},"panw.panos.threat.name":{"category":"panw","description":"Palo Alto Networks name for the threat. ","name":"panw.panos.threat.name","type":"keyword"},"panw.panos.action":{"category":"panw","description":"Action taken for the session.","name":"panw.panos.action","type":"keyword"},"panw.panos.type":{"category":"panw","description":"Specifies the type of the log","name":"panw.panos.type"},"panw.panos.sub_type":{"category":"panw","description":"Specifies the sub type of the log","name":"panw.panos.sub_type"},"panw.panos.virtual_sys":{"category":"panw","description":"Virtual system instance ","name":"panw.panos.virtual_sys","type":"keyword"},"panw.panos.client_os_ver":{"category":"panw","description":"The client device’s OS version. ","name":"panw.panos.client_os_ver","type":"keyword"},"panw.panos.client_os":{"category":"panw","description":"The client device’s OS version. ","name":"panw.panos.client_os","type":"keyword"},"panw.panos.client_ver":{"category":"panw","description":"The client’s GlobalProtect app version. ","name":"panw.panos.client_ver","type":"keyword"},"panw.panos.stage":{"category":"panw","description":"A string showing the stage of the connection ","example":"before-login","name":"panw.panos.stage","type":"keyword"},"panw.panos.actionflags":{"category":"panw","description":"A bit field indicating if the log was forwarded to Panorama. ","name":"panw.panos.actionflags","type":"keyword"},"panw.panos.error":{"category":"panw","description":"A string showing that error that has occurred in any event. ","name":"panw.panos.error","type":"keyword"},"panw.panos.error_code":{"category":"panw","description":"An integer associated with any errors that occurred. ","name":"panw.panos.error_code","type":"integer"},"panw.panos.repeatcnt":{"category":"panw","description":"The number of sessions with the same source IP address, destination IP address, application, and subtype that GlobalProtect has detected within the last five seconds.An integer associated with any errors that occurred. ","name":"panw.panos.repeatcnt","type":"integer"},"panw.panos.serial_number":{"category":"panw","description":"The serial number of the user’s machine or device. ","name":"panw.panos.serial_number","type":"keyword"},"panw.panos.auth_method":{"category":"panw","description":"A string showing the authentication type ","example":"LDAP","name":"panw.panos.auth_method","type":"keyword"},"panw.panos.datasource":{"category":"panw","description":"Source from which mapping information is collected. ","name":"panw.panos.datasource","type":"keyword"},"panw.panos.datasourcetype":{"category":"panw","description":"Mechanism used to identify the IP/User mappings within a data source. ","name":"panw.panos.datasourcetype","type":"keyword"},"panw.panos.datasourcename":{"category":"panw","description":"User-ID source that sends the IP (Port)-User Mapping. ","name":"panw.panos.datasourcename","type":"keyword"},"panw.panos.factorno":{"category":"panw","description":"Indicates the use of primary authentication (1) or additional factors (2, 3). ","name":"panw.panos.factorno","type":"integer"},"panw.panos.factortype":{"category":"panw","description":"Vendor used to authenticate a user when Multi Factor authentication is present. ","name":"panw.panos.factortype","type":"keyword"},"panw.panos.factorcompletiontime":{"category":"panw","description":"Time the authentication was completed. ","name":"panw.panos.factorcompletiontime","type":"date"},"panw.panos.ugflags":{"category":"panw","description":"Displays whether the user group that was found during user group mapping. Supported values are: User Group Found—Indicates whether the user could be mapped to a group. Duplicate User—Indicates whether duplicate users were found in a user group. Displays N/A if no user group is found. ","name":"panw.panos.ugflags","type":"keyword"},"panw.panos.device_group_hierarchy.level_1":{"category":"panw","description":"A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ","name":"panw.panos.device_group_hierarchy.level_1","type":"keyword"},"panw.panos.device_group_hierarchy.level_2":{"category":"panw","description":"A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ","name":"panw.panos.device_group_hierarchy.level_2","type":"keyword"},"panw.panos.device_group_hierarchy.level_3":{"category":"panw","description":"A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ","name":"panw.panos.device_group_hierarchy.level_3","type":"keyword"},"panw.panos.device_group_hierarchy.level_4":{"category":"panw","description":"A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ","name":"panw.panos.device_group_hierarchy.level_4","type":"keyword"},"panw.panos.timeout":{"category":"panw","description":"Timeout after which the IP/User Mappings are cleared. ","name":"panw.panos.timeout","type":"integer"},"panw.panos.vsys_id":{"category":"panw","description":"A unique identifier for a virtual system on a Palo Alto Networks firewall. ","name":"panw.panos.vsys_id","type":"keyword"},"panw.panos.vsys_name":{"category":"panw","description":"The name of the virtual system associated with the session; only valid on firewalls enabled for multiple virtual systems. ","name":"panw.panos.vsys_name","type":"keyword"},"panw.panos.description":{"category":"panw","description":"Additional information for any event that has occurred. ","name":"panw.panos.description","type":"keyword"},"panw.panos.tunnel_type":{"category":"panw","description":"The type of tunnel (either SSLVPN or IPSec). ","name":"panw.panos.tunnel_type","type":"keyword"},"panw.panos.connect_method":{"category":"panw","description":"A string showing the how the GlobalProtect app connects to Gateway ","name":"panw.panos.connect_method","type":"keyword"},"panw.panos.matchname":{"category":"panw","description":"Name of the HIP object or profile. ","name":"panw.panos.matchname","type":"keyword"},"panw.panos.matchtype":{"category":"panw","description":"Whether the hip field represents a HIP object or a HIP profile. ","name":"panw.panos.matchtype","type":"keyword"},"panw.panos.priority":{"category":"panw","description":"The priority order of the gateway that is based on highest (1), high (2), medium (3), low (4), or lowest (5) to which the GlobalProtect app can connect. ","name":"panw.panos.priority","type":"keyword"},"panw.panos.response_time":{"category":"panw","description":"The SSL response time of the selected gateway that is measured in milliseconds on the endpoint during tunnel setup. ","name":"panw.panos.response_time","type":"keyword"},"panw.panos.attempted_gateways":{"category":"panw","description":"The fields that are collected for each gateway connection attempt with the gateway name, SSL response time, and priority ","name":"panw.panos.attempted_gateways","type":"keyword"},"panw.panos.gateway":{"category":"panw","description":"The name of the gateway that is specified on the portal configuration. ","name":"panw.panos.gateway","type":"keyword"},"panw.panos.selection_type":{"category":"panw","description":"The connection method that is selected to connect to the gateway. ","name":"panw.panos.selection_type","type":"keyword"},"rabbitmq.log.pid":{"category":"rabbitmq","description":"The Erlang process id","example":"<0.222.0>","name":"rabbitmq.log.pid","type":"keyword"},"snyk.projects":{"category":"snyk","description":"Array with all related projects objects. ","name":"snyk.projects","type":"flattened"},"snyk.related.projects":{"category":"snyk","description":"Array of all the related project ID's. ","name":"snyk.related.projects","type":"keyword"},"snyk.audit.org_id":{"category":"snyk","description":"ID of the related Organization related to the event. ","name":"snyk.audit.org_id","type":"keyword"},"snyk.audit.project_id":{"category":"snyk","description":"ID of the project related to the event. ","name":"snyk.audit.project_id","type":"keyword"},"snyk.audit.content":{"category":"snyk","description":"Overview of the content that was changed, both old and new values. ","name":"snyk.audit.content","type":"flattened"},"snyk.vulnerabilities.cvss3":{"category":"snyk","description":"CSSv3 scores. ","name":"snyk.vulnerabilities.cvss3","type":"keyword"},"snyk.vulnerabilities.disclosure_time":{"category":"snyk","description":"The time this vulnerability was originally disclosed to the package maintainers. ","name":"snyk.vulnerabilities.disclosure_time","type":"date"},"snyk.vulnerabilities.exploit_maturity":{"category":"snyk","description":"The Snyk exploit maturity level. ","name":"snyk.vulnerabilities.exploit_maturity","type":"keyword"},"snyk.vulnerabilities.id":{"category":"snyk","description":"The vulnerability reference ID. ","name":"snyk.vulnerabilities.id","type":"keyword"},"snyk.vulnerabilities.is_ignored":{"category":"snyk","description":"If the vulnerability report has been ignored. ","name":"snyk.vulnerabilities.is_ignored","type":"boolean"},"snyk.vulnerabilities.is_patchable":{"category":"snyk","description":"If vulnerability is fixable by using a Snyk supplied patch. ","name":"snyk.vulnerabilities.is_patchable","type":"boolean"},"snyk.vulnerabilities.is_patched":{"category":"snyk","description":"If the vulnerability has been patched. ","name":"snyk.vulnerabilities.is_patched","type":"boolean"},"snyk.vulnerabilities.is_pinnable":{"category":"snyk","description":"If the vulnerability is fixable by pinning a transitive dependency. ","name":"snyk.vulnerabilities.is_pinnable","type":"boolean"},"snyk.vulnerabilities.is_upgradable":{"category":"snyk","description":"If the vulnerability fixable by upgrading a dependency. ","name":"snyk.vulnerabilities.is_upgradable","type":"boolean"},"snyk.vulnerabilities.language":{"category":"snyk","description":"The package's programming language. ","name":"snyk.vulnerabilities.language","type":"keyword"},"snyk.vulnerabilities.package":{"category":"snyk","description":"The package identifier according to its package manager. ","name":"snyk.vulnerabilities.package","type":"keyword"},"snyk.vulnerabilities.package_manager":{"category":"snyk","description":"The package manager. ","name":"snyk.vulnerabilities.package_manager","type":"keyword"},"snyk.vulnerabilities.patches":{"category":"snyk","description":"Patches required to resolve the issue created by Snyk. ","name":"snyk.vulnerabilities.patches","type":"flattened"},"snyk.vulnerabilities.priority_score":{"category":"snyk","description":"The CVS priority score. ","name":"snyk.vulnerabilities.priority_score","type":"long"},"snyk.vulnerabilities.publication_time":{"category":"snyk","description":"The vulnerability publication time. ","name":"snyk.vulnerabilities.publication_time","type":"date"},"snyk.vulnerabilities.jira_issue_url":{"category":"snyk","description":"Link to the related Jira issue. ","name":"snyk.vulnerabilities.jira_issue_url","type":"keyword"},"snyk.vulnerabilities.original_severity":{"category":"snyk","description":"The original severity of the vulnerability. ","name":"snyk.vulnerabilities.original_severity","type":"long"},"snyk.vulnerabilities.reachability":{"category":"snyk","description":"If the vulnerable function from the library is used in the code scanned. Can either be No Info, Potentially reachable and Reachable. ","name":"snyk.vulnerabilities.reachability","type":"keyword"},"snyk.vulnerabilities.title":{"category":"snyk","description":"The issue title. ","name":"snyk.vulnerabilities.title","type":"keyword"},"snyk.vulnerabilities.type":{"category":"snyk","description":"The issue type. Can be either \"license\" or \"vulnerability\". ","name":"snyk.vulnerabilities.type","type":"keyword"},"snyk.vulnerabilities.unique_severities_list":{"category":"snyk","description":"A list of related unique severities. ","name":"snyk.vulnerabilities.unique_severities_list","type":"keyword"},"snyk.vulnerabilities.version":{"category":"snyk","description":"The package version this issue is applicable to. ","name":"snyk.vulnerabilities.version","type":"keyword"},"snyk.vulnerabilities.introduced_date":{"category":"snyk","description":"The date the vulnerability was initially found. ","name":"snyk.vulnerabilities.introduced_date","type":"date"},"snyk.vulnerabilities.is_fixed":{"category":"snyk","description":"If the related vulnerability has been resolved. ","name":"snyk.vulnerabilities.is_fixed","type":"boolean"},"snyk.vulnerabilities.credit":{"category":"snyk","description":"Reference to the person that original found the vulnerability. ","name":"snyk.vulnerabilities.credit","type":"keyword"},"snyk.vulnerabilities.semver":{"category":"snyk","description":"One or more semver ranges this issue is applicable to. The format varies according to package manager. ","name":"snyk.vulnerabilities.semver","type":"flattened"},"snyk.vulnerabilities.identifiers.alternative":{"category":"snyk","description":"Additional vulnerability identifiers. ","name":"snyk.vulnerabilities.identifiers.alternative","type":"keyword"},"snyk.vulnerabilities.identifiers.cwe":{"category":"snyk","description":"CWE vulnerability identifiers. ","name":"snyk.vulnerabilities.identifiers.cwe","type":"keyword"},"sophos.xg.device":{"category":"sophos","description":"device ","name":"sophos.xg.device","type":"keyword"},"sophos.xg.date":{"category":"sophos","description":"Date (yyyy-mm-dd) when the event occurred ","name":"sophos.xg.date","type":"date"},"sophos.xg.timezone":{"category":"sophos","description":"Time (hh:mm:ss) when the event occurred ","name":"sophos.xg.timezone","type":"keyword"},"sophos.xg.device_name":{"category":"sophos","description":"Model number of the device ","name":"sophos.xg.device_name","type":"keyword"},"sophos.xg.device_id":{"category":"sophos","description":"Serial number of the device ","name":"sophos.xg.device_id","type":"keyword"},"sophos.xg.log_id":{"category":"sophos","description":"Unique 12 characters code (0101011) ","name":"sophos.xg.log_id","type":"keyword"},"sophos.xg.log_type":{"category":"sophos","description":"Type of event e.g. firewall event ","name":"sophos.xg.log_type","type":"keyword"},"sophos.xg.log_component":{"category":"sophos","description":"Component responsible for logging e.g. Firewall rule ","name":"sophos.xg.log_component","type":"keyword"},"sophos.xg.log_subtype":{"category":"sophos","description":"Sub type of event ","name":"sophos.xg.log_subtype","type":"keyword"},"sophos.xg.hb_health":{"category":"sophos","description":"Heartbeat status ","name":"sophos.xg.hb_health","type":"keyword"},"sophos.xg.priority":{"category":"sophos","description":"Severity level of traffic ","name":"sophos.xg.priority","type":"keyword"},"sophos.xg.status":{"category":"sophos","description":"Ultimate status of traffic – Allowed or Denied ","name":"sophos.xg.status","type":"keyword"},"sophos.xg.duration":{"category":"sophos","description":"Durability of traffic (seconds) ","name":"sophos.xg.duration","type":"long"},"sophos.xg.fw_rule_id":{"category":"sophos","description":"Firewall Rule ID which is applied on the traffic ","name":"sophos.xg.fw_rule_id","type":"integer"},"sophos.xg.user_name":{"category":"sophos","description":"user_name ","name":"sophos.xg.user_name","type":"keyword"},"sophos.xg.user_group":{"category":"sophos","description":"Group name to which the user belongs ","name":"sophos.xg.user_group","type":"keyword"},"sophos.xg.iap":{"category":"sophos","description":"Internet Access policy ID applied on the traffic ","name":"sophos.xg.iap","type":"keyword"},"sophos.xg.ips_policy_id":{"category":"sophos","description":"IPS policy ID applied on the traffic ","name":"sophos.xg.ips_policy_id","type":"integer"},"sophos.xg.policy_type":{"category":"sophos","description":"Policy type applied to the traffic ","name":"sophos.xg.policy_type","type":"keyword"},"sophos.xg.appfilter_policy_id":{"category":"sophos","description":"Application Filter policy applied on the traffic ","name":"sophos.xg.appfilter_policy_id","type":"integer"},"sophos.xg.application_filter_policy":{"category":"sophos","description":"Application Filter policy applied on the traffic ","name":"sophos.xg.application_filter_policy","type":"integer"},"sophos.xg.application":{"category":"sophos","description":"Application name ","name":"sophos.xg.application","type":"keyword"},"sophos.xg.application_name":{"category":"sophos","description":"Application name ","name":"sophos.xg.application_name","type":"keyword"},"sophos.xg.application_risk":{"category":"sophos","description":"Risk level assigned to the application ","name":"sophos.xg.application_risk","type":"keyword"},"sophos.xg.application_technology":{"category":"sophos","description":"Technology of the application ","name":"sophos.xg.application_technology","type":"keyword"},"sophos.xg.application_category":{"category":"sophos","description":"Application is resolved by signature or synchronized application ","name":"sophos.xg.application_category","type":"keyword"},"sophos.xg.appresolvedby":{"category":"sophos","description":"Technology of the application ","name":"sophos.xg.appresolvedby","type":"keyword"},"sophos.xg.app_is_cloud":{"category":"sophos","description":"Application is Cloud ","name":"sophos.xg.app_is_cloud","type":"keyword"},"sophos.xg.in_interface":{"category":"sophos","description":"Interface for incoming traffic, e.g., Port A ","name":"sophos.xg.in_interface","type":"keyword"},"sophos.xg.out_interface":{"category":"sophos","description":"Interface for outgoing traffic, e.g., Port B ","name":"sophos.xg.out_interface","type":"keyword"},"sophos.xg.src_ip":{"category":"sophos","description":"Original source IP address of traffic ","name":"sophos.xg.src_ip","type":"ip"},"sophos.xg.src_mac":{"category":"sophos","description":"Original source MAC address of traffic ","name":"sophos.xg.src_mac","type":"keyword"},"sophos.xg.src_country_code":{"category":"sophos","description":"Code of the country to which the source IP belongs ","name":"sophos.xg.src_country_code","type":"keyword"},"sophos.xg.dst_ip":{"category":"sophos","description":"Original destination IP address of traffic ","name":"sophos.xg.dst_ip","type":"ip"},"sophos.xg.dst_country_code":{"category":"sophos","description":"Code of the country to which the destination IP belongs ","name":"sophos.xg.dst_country_code","type":"keyword"},"sophos.xg.protocol":{"category":"sophos","description":"Protocol number of traffic ","name":"sophos.xg.protocol","type":"keyword"},"sophos.xg.src_port":{"category":"sophos","description":"Original source port of TCP and UDP traffic ","name":"sophos.xg.src_port","type":"integer"},"sophos.xg.dst_port":{"category":"sophos","description":"Original destination port of TCP and UDP traffic ","name":"sophos.xg.dst_port","type":"integer"},"sophos.xg.icmp_type":{"category":"sophos","description":"ICMP type of ICMP traffic ","name":"sophos.xg.icmp_type","type":"keyword"},"sophos.xg.icmp_code":{"category":"sophos","description":"ICMP code of ICMP traffic ","name":"sophos.xg.icmp_code","type":"keyword"},"sophos.xg.sent_pkts":{"category":"sophos","description":"Total number of packets sent ","name":"sophos.xg.sent_pkts","type":"long"},"sophos.xg.received_pkts":{"category":"sophos","description":"Total number of packets received ","name":"sophos.xg.received_pkts","type":"long"},"sophos.xg.sent_bytes":{"category":"sophos","description":"Total number of bytes sent ","name":"sophos.xg.sent_bytes","type":"long"},"sophos.xg.recv_bytes":{"category":"sophos","description":"Total number of bytes received ","name":"sophos.xg.recv_bytes","type":"long"},"sophos.xg.trans_src_ip":{"category":"sophos","description":"Translated source IP address for outgoing traffic ","name":"sophos.xg.trans_src_ip","type":"ip"},"sophos.xg.trans_src_port":{"category":"sophos","description":"Translated source port for outgoing traffic ","name":"sophos.xg.trans_src_port","type":"integer"},"sophos.xg.trans_dst_ip":{"category":"sophos","description":"Translated destination IP address for outgoing traffic ","name":"sophos.xg.trans_dst_ip","type":"ip"},"sophos.xg.trans_dst_port":{"category":"sophos","description":"Translated destination port for outgoing traffic ","name":"sophos.xg.trans_dst_port","type":"integer"},"sophos.xg.srczonetype":{"category":"sophos","description":"Type of source zone, e.g., LAN ","name":"sophos.xg.srczonetype","type":"keyword"},"sophos.xg.srczone":{"category":"sophos","description":"Name of source zone ","name":"sophos.xg.srczone","type":"keyword"},"sophos.xg.dstzonetype":{"category":"sophos","description":"Type of destination zone, e.g., WAN ","name":"sophos.xg.dstzonetype","type":"keyword"},"sophos.xg.dstzone":{"category":"sophos","description":"Name of destination zone ","name":"sophos.xg.dstzone","type":"keyword"},"sophos.xg.dir_disp":{"category":"sophos","description":"TPacket direction. Possible values:“org”, “reply”, “” ","name":"sophos.xg.dir_disp","type":"keyword"},"sophos.xg.connevent":{"category":"sophos","description":"Event on which this log is generated ","name":"sophos.xg.connevent","type":"keyword"},"sophos.xg.conn_id":{"category":"sophos","description":"Unique identifier of connection ","name":"sophos.xg.conn_id","type":"integer"},"sophos.xg.vconn_id":{"category":"sophos","description":"Connection ID of the master connection ","name":"sophos.xg.vconn_id","type":"integer"},"sophos.xg.idp_policy_id":{"category":"sophos","description":"IPS policy ID which is applied on the traffic ","name":"sophos.xg.idp_policy_id","type":"integer"},"sophos.xg.idp_policy_name":{"category":"sophos","description":"IPS policy name i.e. IPS policy name which is applied on the traffic ","name":"sophos.xg.idp_policy_name","type":"keyword"},"sophos.xg.signature_id":{"category":"sophos","description":"Signature ID ","name":"sophos.xg.signature_id","type":"keyword"},"sophos.xg.signature_msg":{"category":"sophos","description":"Signature messsage ","name":"sophos.xg.signature_msg","type":"keyword"},"sophos.xg.classification":{"category":"sophos","description":"Signature classification ","name":"sophos.xg.classification","type":"keyword"},"sophos.xg.rule_priority":{"category":"sophos","description":"Priority of IPS policy ","name":"sophos.xg.rule_priority","type":"keyword"},"sophos.xg.platform":{"category":"sophos","description":"Platform of the traffic. ","name":"sophos.xg.platform","type":"keyword"},"sophos.xg.category":{"category":"sophos","description":"IPS signature category. ","name":"sophos.xg.category","type":"keyword"},"sophos.xg.target":{"category":"sophos","description":"Platform of the traffic. ","name":"sophos.xg.target","type":"keyword"},"sophos.xg.eventid":{"category":"sophos","description":"ATP Evenet ID ","name":"sophos.xg.eventid","type":"keyword"},"sophos.xg.ep_uuid":{"category":"sophos","description":"Endpoint UUID ","name":"sophos.xg.ep_uuid","type":"keyword"},"sophos.xg.threatname":{"category":"sophos","description":"ATP threatname ","name":"sophos.xg.threatname","type":"keyword"},"sophos.xg.sourceip":{"category":"sophos","description":"Original source IP address of traffic ","name":"sophos.xg.sourceip","type":"ip"},"sophos.xg.destinationip":{"category":"sophos","description":"Original destination IP address of traffic ","name":"sophos.xg.destinationip","type":"ip"},"sophos.xg.login_user":{"category":"sophos","description":"ATP login user ","name":"sophos.xg.login_user","type":"keyword"},"sophos.xg.eventtype":{"category":"sophos","description":"ATP event type ","name":"sophos.xg.eventtype","type":"keyword"},"sophos.xg.execution_path":{"category":"sophos","description":"ATP execution path ","name":"sophos.xg.execution_path","type":"keyword"},"sophos.xg.av_policy_name":{"category":"sophos","description":"Malware scanning policy name which is applied on the traffic ","name":"sophos.xg.av_policy_name","type":"keyword"},"sophos.xg.from_email_address":{"category":"sophos","description":"Sender email address ","name":"sophos.xg.from_email_address","type":"keyword"},"sophos.xg.to_email_address":{"category":"sophos","description":"Receipeint email address ","name":"sophos.xg.to_email_address","type":"keyword"},"sophos.xg.subject":{"category":"sophos","description":"Email subject ","name":"sophos.xg.subject","type":"keyword"},"sophos.xg.mailsize":{"category":"sophos","description":"mailsize ","name":"sophos.xg.mailsize","type":"integer"},"sophos.xg.virus":{"category":"sophos","description":"virus name ","name":"sophos.xg.virus","type":"keyword"},"sophos.xg.ftp_url":{"category":"sophos","description":"FTP URL from which virus was downloaded ","name":"sophos.xg.ftp_url","type":"keyword"},"sophos.xg.ftp_direction":{"category":"sophos","description":"Direction of FTP transfer: Upload or Download ","name":"sophos.xg.ftp_direction","type":"keyword"},"sophos.xg.filesize":{"category":"sophos","description":"Size of the file that contained virus ","name":"sophos.xg.filesize","type":"integer"},"sophos.xg.filepath":{"category":"sophos","description":"Path of the file containing virus ","name":"sophos.xg.filepath","type":"keyword"},"sophos.xg.filename":{"category":"sophos","description":"File name associated with the event ","name":"sophos.xg.filename","type":"keyword"},"sophos.xg.ftpcommand":{"category":"sophos","description":"FTP command used when virus was found ","name":"sophos.xg.ftpcommand","type":"keyword"},"sophos.xg.url":{"category":"sophos","description":"URL from which virus was downloaded ","name":"sophos.xg.url","type":"keyword"},"sophos.xg.domainname":{"category":"sophos","description":"Domain from which virus was downloaded ","name":"sophos.xg.domainname","type":"keyword"},"sophos.xg.quarantine":{"category":"sophos","description":"Path and filename of the file quarantined ","name":"sophos.xg.quarantine","type":"keyword"},"sophos.xg.src_domainname":{"category":"sophos","description":"Sender domain name ","name":"sophos.xg.src_domainname","type":"keyword"},"sophos.xg.dst_domainname":{"category":"sophos","description":"Receiver domain name ","name":"sophos.xg.dst_domainname","type":"keyword"},"sophos.xg.reason":{"category":"sophos","description":"Reason why the record was detected as spam/malicious ","name":"sophos.xg.reason","type":"keyword"},"sophos.xg.referer":{"category":"sophos","description":"Referer ","name":"sophos.xg.referer","type":"keyword"},"sophos.xg.spamaction":{"category":"sophos","description":"Spam Action ","name":"sophos.xg.spamaction","type":"keyword"},"sophos.xg.mailid":{"category":"sophos","description":"mailid ","name":"sophos.xg.mailid","type":"keyword"},"sophos.xg.quarantine_reason":{"category":"sophos","description":"Quarantine reason ","name":"sophos.xg.quarantine_reason","type":"keyword"},"sophos.xg.status_code":{"category":"sophos","description":"Status code ","name":"sophos.xg.status_code","type":"keyword"},"sophos.xg.override_token":{"category":"sophos","description":"Override token ","name":"sophos.xg.override_token","type":"keyword"},"sophos.xg.con_id":{"category":"sophos","description":"Unique identifier of connection ","name":"sophos.xg.con_id","type":"integer"},"sophos.xg.override_authorizer":{"category":"sophos","description":"Override authorizer ","name":"sophos.xg.override_authorizer","type":"keyword"},"sophos.xg.transactionid":{"category":"sophos","description":"Transaction ID of the AV scan. ","name":"sophos.xg.transactionid","type":"keyword"},"sophos.xg.upload_file_type":{"category":"sophos","description":"Upload file type ","name":"sophos.xg.upload_file_type","type":"keyword"},"sophos.xg.upload_file_name":{"category":"sophos","description":"Upload file name ","name":"sophos.xg.upload_file_name","type":"keyword"},"sophos.xg.httpresponsecode":{"category":"sophos","description":"code of HTTP response ","name":"sophos.xg.httpresponsecode","type":"long"},"sophos.xg.user_gp":{"category":"sophos","description":"Group name to which the user belongs. ","name":"sophos.xg.user_gp","type":"keyword"},"sophos.xg.category_type":{"category":"sophos","description":"Type of category under which website falls ","name":"sophos.xg.category_type","type":"keyword"},"sophos.xg.download_file_type":{"category":"sophos","description":"Download file type ","name":"sophos.xg.download_file_type","type":"keyword"},"sophos.xg.exceptions":{"category":"sophos","description":"List of the checks excluded by web exceptions. ","name":"sophos.xg.exceptions","type":"keyword"},"sophos.xg.contenttype":{"category":"sophos","description":"Type of the content ","name":"sophos.xg.contenttype","type":"keyword"},"sophos.xg.override_name":{"category":"sophos","description":"Override name ","name":"sophos.xg.override_name","type":"keyword"},"sophos.xg.activityname":{"category":"sophos","description":"Web policy activity that matched and caused the policy result. ","name":"sophos.xg.activityname","type":"keyword"},"sophos.xg.download_file_name":{"category":"sophos","description":"Download file name ","name":"sophos.xg.download_file_name","type":"keyword"},"sophos.xg.sha1sum":{"category":"sophos","description":"SHA1 checksum of the item being analyzed ","name":"sophos.xg.sha1sum","type":"keyword"},"sophos.xg.message_id":{"category":"sophos","description":"Message ID ","name":"sophos.xg.message_id","type":"keyword"},"sophos.xg.connid":{"category":"sophos","description":"Connection ID ","name":"sophos.xg.connid","type":"keyword"},"sophos.xg.message":{"category":"sophos","description":"Message ","name":"sophos.xg.message","type":"keyword"},"sophos.xg.email_subject":{"category":"sophos","description":"Email Subject ","name":"sophos.xg.email_subject","type":"keyword"},"sophos.xg.file_path":{"category":"sophos","description":"File path ","name":"sophos.xg.file_path","type":"keyword"},"sophos.xg.dstdomain":{"category":"sophos","description":"Destination Domain ","name":"sophos.xg.dstdomain","type":"keyword"},"sophos.xg.file_size":{"category":"sophos","description":"File Size ","name":"sophos.xg.file_size","type":"integer"},"sophos.xg.transaction_id":{"category":"sophos","description":"Transaction ID ","name":"sophos.xg.transaction_id","type":"keyword"},"sophos.xg.website":{"category":"sophos","description":"Website ","name":"sophos.xg.website","type":"keyword"},"sophos.xg.file_name":{"category":"sophos","description":"Filename ","name":"sophos.xg.file_name","type":"keyword"},"sophos.xg.context_prefix":{"category":"sophos","description":"Content Prefix ","name":"sophos.xg.context_prefix","type":"keyword"},"sophos.xg.site_category":{"category":"sophos","description":"Site Category ","name":"sophos.xg.site_category","type":"keyword"},"sophos.xg.context_suffix":{"category":"sophos","description":"Context Suffix ","name":"sophos.xg.context_suffix","type":"keyword"},"sophos.xg.dictionary_name":{"category":"sophos","description":"Dictionary Name ","name":"sophos.xg.dictionary_name","type":"keyword"},"sophos.xg.action":{"category":"sophos","description":"Event Action ","name":"sophos.xg.action","type":"keyword"},"sophos.xg.user":{"category":"sophos","description":"User ","name":"sophos.xg.user","type":"keyword"},"sophos.xg.context_match":{"category":"sophos","description":"Context Match ","name":"sophos.xg.context_match","type":"keyword"},"sophos.xg.direction":{"category":"sophos","description":"Direction ","name":"sophos.xg.direction","type":"keyword"},"sophos.xg.auth_client":{"category":"sophos","description":"Auth Client ","name":"sophos.xg.auth_client","type":"keyword"},"sophos.xg.auth_mechanism":{"category":"sophos","description":"Auth mechanism ","name":"sophos.xg.auth_mechanism","type":"keyword"},"sophos.xg.connectionname":{"category":"sophos","description":"Connectionname ","name":"sophos.xg.connectionname","type":"keyword"},"sophos.xg.remotenetwork":{"category":"sophos","description":"remotenetwork ","name":"sophos.xg.remotenetwork","type":"keyword"},"sophos.xg.localgateway":{"category":"sophos","description":"Localgateway ","name":"sophos.xg.localgateway","type":"keyword"},"sophos.xg.localnetwork":{"category":"sophos","description":"Localnetwork ","name":"sophos.xg.localnetwork","type":"keyword"},"sophos.xg.connectiontype":{"category":"sophos","description":"Connectiontype ","name":"sophos.xg.connectiontype","type":"keyword"},"sophos.xg.oldversion":{"category":"sophos","description":"Oldversion ","name":"sophos.xg.oldversion","type":"keyword"},"sophos.xg.newversion":{"category":"sophos","description":"Newversion ","name":"sophos.xg.newversion","type":"keyword"},"sophos.xg.ipaddress":{"category":"sophos","description":"Ipaddress ","name":"sophos.xg.ipaddress","type":"keyword"},"sophos.xg.client_physical_address":{"category":"sophos","description":"Client physical address ","name":"sophos.xg.client_physical_address","type":"keyword"},"sophos.xg.client_host_name":{"category":"sophos","description":"Client host name ","name":"sophos.xg.client_host_name","type":"keyword"},"sophos.xg.raw_data":{"category":"sophos","description":"Raw data ","name":"sophos.xg.raw_data","type":"keyword"},"sophos.xg.Mode":{"category":"sophos","description":"Mode ","name":"sophos.xg.Mode","type":"keyword"},"sophos.xg.sessionid":{"category":"sophos","description":"Sessionid ","name":"sophos.xg.sessionid","type":"keyword"},"sophos.xg.starttime":{"category":"sophos","description":"Starttime ","name":"sophos.xg.starttime","type":"date"},"sophos.xg.remote_ip":{"category":"sophos","description":"Remote IP ","name":"sophos.xg.remote_ip","type":"ip"},"sophos.xg.timestamp":{"category":"sophos","description":"timestamp ","name":"sophos.xg.timestamp","type":"date"},"sophos.xg.SysLog_SERVER_NAME":{"category":"sophos","description":"SysLog SERVER NAME ","name":"sophos.xg.SysLog_SERVER_NAME","type":"keyword"},"sophos.xg.backup_mode":{"category":"sophos","description":"Backup mode ","name":"sophos.xg.backup_mode","type":"keyword"},"sophos.xg.source":{"category":"sophos","description":"Source ","name":"sophos.xg.source","type":"keyword"},"sophos.xg.server":{"category":"sophos","description":"Server ","name":"sophos.xg.server","type":"keyword"},"sophos.xg.host":{"category":"sophos","description":"Host ","name":"sophos.xg.host","type":"keyword"},"sophos.xg.responsetime":{"category":"sophos","description":"Responsetime ","name":"sophos.xg.responsetime","type":"long"},"sophos.xg.cookie":{"category":"sophos","description":"cookie ","name":"sophos.xg.cookie","type":"keyword"},"sophos.xg.querystring":{"category":"sophos","description":"querystring ","name":"sophos.xg.querystring","type":"keyword"},"sophos.xg.extra":{"category":"sophos","description":"extra ","name":"sophos.xg.extra","type":"keyword"},"sophos.xg.PHPSESSID":{"category":"sophos","description":"PHPSESSID ","name":"sophos.xg.PHPSESSID","type":"keyword"},"sophos.xg.start_time":{"category":"sophos","description":"Start time ","name":"sophos.xg.start_time","type":"date"},"sophos.xg.eventtime":{"category":"sophos","description":"Event time ","name":"sophos.xg.eventtime","type":"date"},"sophos.xg.red_id":{"category":"sophos","description":"RED ID ","name":"sophos.xg.red_id","type":"keyword"},"sophos.xg.branch_name":{"category":"sophos","description":"Branch Name ","name":"sophos.xg.branch_name","type":"keyword"},"sophos.xg.updatedip":{"category":"sophos","description":"updatedip ","name":"sophos.xg.updatedip","type":"ip"},"sophos.xg.idle_cpu":{"category":"sophos","description":"idle ## ","name":"sophos.xg.idle_cpu","type":"float"},"sophos.xg.system_cpu":{"category":"sophos","description":"system ","name":"sophos.xg.system_cpu","type":"float"},"sophos.xg.user_cpu":{"category":"sophos","description":"system ","name":"sophos.xg.user_cpu","type":"float"},"sophos.xg.used":{"category":"sophos","description":"used ","name":"sophos.xg.used","type":"integer"},"sophos.xg.unit":{"category":"sophos","description":"unit ","name":"sophos.xg.unit","type":"keyword"},"sophos.xg.total_memory":{"category":"sophos","description":"Total Memory ","name":"sophos.xg.total_memory","type":"integer"},"sophos.xg.free":{"category":"sophos","description":"free ","name":"sophos.xg.free","type":"integer"},"sophos.xg.transmittederrors":{"category":"sophos","description":"transmitted errors ","name":"sophos.xg.transmittederrors","type":"keyword"},"sophos.xg.receivederrors":{"category":"sophos","description":"received errors ","name":"sophos.xg.receivederrors","type":"keyword"},"sophos.xg.receivedkbits":{"category":"sophos","description":"received kbits ","name":"sophos.xg.receivedkbits","type":"long"},"sophos.xg.transmittedkbits":{"category":"sophos","description":"transmitted kbits ","name":"sophos.xg.transmittedkbits","type":"long"},"sophos.xg.transmitteddrops":{"category":"sophos","description":"transmitted drops ","name":"sophos.xg.transmitteddrops","type":"long"},"sophos.xg.receiveddrops":{"category":"sophos","description":"received drops ","name":"sophos.xg.receiveddrops","type":"long"},"sophos.xg.collisions":{"category":"sophos","description":"collisions ","name":"sophos.xg.collisions","type":"long"},"sophos.xg.interface":{"category":"sophos","description":"interface ","name":"sophos.xg.interface","type":"keyword"},"sophos.xg.Configuration":{"category":"sophos","description":"Configuration ","name":"sophos.xg.Configuration","type":"float"},"sophos.xg.Reports":{"category":"sophos","description":"Reports ","name":"sophos.xg.Reports","type":"float"},"sophos.xg.Signature":{"category":"sophos","description":"Signature ","name":"sophos.xg.Signature","type":"float"},"sophos.xg.Temp":{"category":"sophos","description":"Temp ","name":"sophos.xg.Temp","type":"float"},"sophos.xg.users":{"category":"sophos","description":"users ","name":"sophos.xg.users","type":"keyword"},"sophos.xg.ssid":{"category":"sophos","description":"ssid ","name":"sophos.xg.ssid","type":"keyword"},"sophos.xg.ap":{"category":"sophos","description":"ap ","name":"sophos.xg.ap","type":"keyword"},"sophos.xg.clients_conn_ssid":{"category":"sophos","description":"clients connection ssid ","name":"sophos.xg.clients_conn_ssid","type":"keyword"},"sophos.xg.sqli":{"category":"sophos","description":"The related SQLI caught by the WAF ","name":"sophos.xg.sqli","type":"keyword"},"sophos.xg.xss":{"category":"sophos","description":"The related XSS caught by the WAF ","name":"sophos.xg.xss","type":"keyword"},"sophos.xg.ether_type":{"category":"sophos","description":"The ethernet frame type ","name":"sophos.xg.ether_type","type":"keyword"},"suricata.eve.event_type":{"category":"suricata","name":"suricata.eve.event_type","type":"keyword"},"suricata.eve.app_proto_orig":{"category":"suricata","name":"suricata.eve.app_proto_orig","type":"keyword"},"suricata.eve.tcp.tcp_flags":{"category":"suricata","name":"suricata.eve.tcp.tcp_flags","type":"keyword"},"suricata.eve.tcp.psh":{"category":"suricata","name":"suricata.eve.tcp.psh","type":"boolean"},"suricata.eve.tcp.tcp_flags_tc":{"category":"suricata","name":"suricata.eve.tcp.tcp_flags_tc","type":"keyword"},"suricata.eve.tcp.ack":{"category":"suricata","name":"suricata.eve.tcp.ack","type":"boolean"},"suricata.eve.tcp.syn":{"category":"suricata","name":"suricata.eve.tcp.syn","type":"boolean"},"suricata.eve.tcp.state":{"category":"suricata","name":"suricata.eve.tcp.state","type":"keyword"},"suricata.eve.tcp.tcp_flags_ts":{"category":"suricata","name":"suricata.eve.tcp.tcp_flags_ts","type":"keyword"},"suricata.eve.tcp.rst":{"category":"suricata","name":"suricata.eve.tcp.rst","type":"boolean"},"suricata.eve.tcp.fin":{"category":"suricata","name":"suricata.eve.tcp.fin","type":"boolean"},"suricata.eve.fileinfo.sha1":{"category":"suricata","name":"suricata.eve.fileinfo.sha1","type":"keyword"},"suricata.eve.fileinfo.tx_id":{"category":"suricata","name":"suricata.eve.fileinfo.tx_id","type":"long"},"suricata.eve.fileinfo.state":{"category":"suricata","name":"suricata.eve.fileinfo.state","type":"keyword"},"suricata.eve.fileinfo.stored":{"category":"suricata","name":"suricata.eve.fileinfo.stored","type":"boolean"},"suricata.eve.fileinfo.gaps":{"category":"suricata","name":"suricata.eve.fileinfo.gaps","type":"boolean"},"suricata.eve.fileinfo.sha256":{"category":"suricata","name":"suricata.eve.fileinfo.sha256","type":"keyword"},"suricata.eve.fileinfo.md5":{"category":"suricata","name":"suricata.eve.fileinfo.md5","type":"keyword"},"suricata.eve.icmp_type":{"category":"suricata","name":"suricata.eve.icmp_type","type":"long"},"suricata.eve.pcap_cnt":{"category":"suricata","name":"suricata.eve.pcap_cnt","type":"long"},"suricata.eve.dns.type":{"category":"suricata","name":"suricata.eve.dns.type","type":"keyword"},"suricata.eve.dns.rrtype":{"category":"suricata","name":"suricata.eve.dns.rrtype","type":"keyword"},"suricata.eve.dns.rrname":{"category":"suricata","name":"suricata.eve.dns.rrname","type":"keyword"},"suricata.eve.dns.rdata":{"category":"suricata","name":"suricata.eve.dns.rdata","type":"keyword"},"suricata.eve.dns.tx_id":{"category":"suricata","name":"suricata.eve.dns.tx_id","type":"long"},"suricata.eve.dns.ttl":{"category":"suricata","name":"suricata.eve.dns.ttl","type":"long"},"suricata.eve.dns.rcode":{"category":"suricata","name":"suricata.eve.dns.rcode","type":"keyword"},"suricata.eve.dns.id":{"category":"suricata","name":"suricata.eve.dns.id","type":"long"},"suricata.eve.flow_id":{"category":"suricata","name":"suricata.eve.flow_id","type":"keyword"},"suricata.eve.email.status":{"category":"suricata","name":"suricata.eve.email.status","type":"keyword"},"suricata.eve.icmp_code":{"category":"suricata","name":"suricata.eve.icmp_code","type":"long"},"suricata.eve.http.redirect":{"category":"suricata","name":"suricata.eve.http.redirect","type":"keyword"},"suricata.eve.http.protocol":{"category":"suricata","name":"suricata.eve.http.protocol","type":"keyword"},"suricata.eve.http.http_content_type":{"category":"suricata","name":"suricata.eve.http.http_content_type","type":"keyword"},"suricata.eve.in_iface":{"category":"suricata","name":"suricata.eve.in_iface","type":"keyword"},"suricata.eve.alert.metadata":{"category":"suricata","description":"Metadata about the alert.","name":"suricata.eve.alert.metadata","type":"flattened"},"suricata.eve.alert.category":{"category":"suricata","name":"suricata.eve.alert.category","type":"keyword"},"suricata.eve.alert.rev":{"category":"suricata","name":"suricata.eve.alert.rev","type":"long"},"suricata.eve.alert.gid":{"category":"suricata","name":"suricata.eve.alert.gid","type":"long"},"suricata.eve.alert.signature":{"category":"suricata","name":"suricata.eve.alert.signature","type":"keyword"},"suricata.eve.alert.signature_id":{"category":"suricata","name":"suricata.eve.alert.signature_id","type":"long"},"suricata.eve.alert.protocols":{"category":"suricata","name":"suricata.eve.alert.protocols","type":"keyword"},"suricata.eve.alert.attack_target":{"category":"suricata","name":"suricata.eve.alert.attack_target","type":"keyword"},"suricata.eve.alert.capec_id":{"category":"suricata","name":"suricata.eve.alert.capec_id","type":"keyword"},"suricata.eve.alert.cwe_id":{"category":"suricata","name":"suricata.eve.alert.cwe_id","type":"keyword"},"suricata.eve.alert.malware":{"category":"suricata","name":"suricata.eve.alert.malware","type":"keyword"},"suricata.eve.alert.cve":{"category":"suricata","name":"suricata.eve.alert.cve","type":"keyword"},"suricata.eve.alert.cvss_v2_base":{"category":"suricata","name":"suricata.eve.alert.cvss_v2_base","type":"keyword"},"suricata.eve.alert.cvss_v2_temporal":{"category":"suricata","name":"suricata.eve.alert.cvss_v2_temporal","type":"keyword"},"suricata.eve.alert.cvss_v3_base":{"category":"suricata","name":"suricata.eve.alert.cvss_v3_base","type":"keyword"},"suricata.eve.alert.cvss_v3_temporal":{"category":"suricata","name":"suricata.eve.alert.cvss_v3_temporal","type":"keyword"},"suricata.eve.alert.priority":{"category":"suricata","name":"suricata.eve.alert.priority","type":"keyword"},"suricata.eve.alert.hostile":{"category":"suricata","name":"suricata.eve.alert.hostile","type":"keyword"},"suricata.eve.alert.infected":{"category":"suricata","name":"suricata.eve.alert.infected","type":"keyword"},"suricata.eve.alert.created_at":{"category":"suricata","name":"suricata.eve.alert.created_at","type":"date"},"suricata.eve.alert.updated_at":{"category":"suricata","name":"suricata.eve.alert.updated_at","type":"date"},"suricata.eve.alert.classtype":{"category":"suricata","name":"suricata.eve.alert.classtype","type":"keyword"},"suricata.eve.alert.rule_source":{"category":"suricata","name":"suricata.eve.alert.rule_source","type":"keyword"},"suricata.eve.alert.sid":{"category":"suricata","name":"suricata.eve.alert.sid","type":"keyword"},"suricata.eve.alert.affected_product":{"category":"suricata","name":"suricata.eve.alert.affected_product","type":"keyword"},"suricata.eve.alert.deployment":{"category":"suricata","name":"suricata.eve.alert.deployment","type":"keyword"},"suricata.eve.alert.former_category":{"category":"suricata","name":"suricata.eve.alert.former_category","type":"keyword"},"suricata.eve.alert.mitre_tool_id":{"category":"suricata","name":"suricata.eve.alert.mitre_tool_id","type":"keyword"},"suricata.eve.alert.performance_impact":{"category":"suricata","name":"suricata.eve.alert.performance_impact","type":"keyword"},"suricata.eve.alert.signature_severity":{"category":"suricata","name":"suricata.eve.alert.signature_severity","type":"keyword"},"suricata.eve.alert.tag":{"category":"suricata","name":"suricata.eve.alert.tag","type":"keyword"},"suricata.eve.ssh.client.proto_version":{"category":"suricata","name":"suricata.eve.ssh.client.proto_version","type":"keyword"},"suricata.eve.ssh.client.software_version":{"category":"suricata","name":"suricata.eve.ssh.client.software_version","type":"keyword"},"suricata.eve.ssh.server.proto_version":{"category":"suricata","name":"suricata.eve.ssh.server.proto_version","type":"keyword"},"suricata.eve.ssh.server.software_version":{"category":"suricata","name":"suricata.eve.ssh.server.software_version","type":"keyword"},"suricata.eve.stats.capture.kernel_packets":{"category":"suricata","name":"suricata.eve.stats.capture.kernel_packets","type":"long"},"suricata.eve.stats.capture.kernel_drops":{"category":"suricata","name":"suricata.eve.stats.capture.kernel_drops","type":"long"},"suricata.eve.stats.capture.kernel_ifdrops":{"category":"suricata","name":"suricata.eve.stats.capture.kernel_ifdrops","type":"long"},"suricata.eve.stats.uptime":{"category":"suricata","name":"suricata.eve.stats.uptime","type":"long"},"suricata.eve.stats.detect.alert":{"category":"suricata","name":"suricata.eve.stats.detect.alert","type":"long"},"suricata.eve.stats.http.memcap":{"category":"suricata","name":"suricata.eve.stats.http.memcap","type":"long"},"suricata.eve.stats.http.memuse":{"category":"suricata","name":"suricata.eve.stats.http.memuse","type":"long"},"suricata.eve.stats.file_store.open_files":{"category":"suricata","name":"suricata.eve.stats.file_store.open_files","type":"long"},"suricata.eve.stats.defrag.max_frag_hits":{"category":"suricata","name":"suricata.eve.stats.defrag.max_frag_hits","type":"long"},"suricata.eve.stats.defrag.ipv4.timeouts":{"category":"suricata","name":"suricata.eve.stats.defrag.ipv4.timeouts","type":"long"},"suricata.eve.stats.defrag.ipv4.fragments":{"category":"suricata","name":"suricata.eve.stats.defrag.ipv4.fragments","type":"long"},"suricata.eve.stats.defrag.ipv4.reassembled":{"category":"suricata","name":"suricata.eve.stats.defrag.ipv4.reassembled","type":"long"},"suricata.eve.stats.defrag.ipv6.timeouts":{"category":"suricata","name":"suricata.eve.stats.defrag.ipv6.timeouts","type":"long"},"suricata.eve.stats.defrag.ipv6.fragments":{"category":"suricata","name":"suricata.eve.stats.defrag.ipv6.fragments","type":"long"},"suricata.eve.stats.defrag.ipv6.reassembled":{"category":"suricata","name":"suricata.eve.stats.defrag.ipv6.reassembled","type":"long"},"suricata.eve.stats.flow.tcp_reuse":{"category":"suricata","name":"suricata.eve.stats.flow.tcp_reuse","type":"long"},"suricata.eve.stats.flow.udp":{"category":"suricata","name":"suricata.eve.stats.flow.udp","type":"long"},"suricata.eve.stats.flow.memcap":{"category":"suricata","name":"suricata.eve.stats.flow.memcap","type":"long"},"suricata.eve.stats.flow.emerg_mode_entered":{"category":"suricata","name":"suricata.eve.stats.flow.emerg_mode_entered","type":"long"},"suricata.eve.stats.flow.emerg_mode_over":{"category":"suricata","name":"suricata.eve.stats.flow.emerg_mode_over","type":"long"},"suricata.eve.stats.flow.tcp":{"category":"suricata","name":"suricata.eve.stats.flow.tcp","type":"long"},"suricata.eve.stats.flow.icmpv6":{"category":"suricata","name":"suricata.eve.stats.flow.icmpv6","type":"long"},"suricata.eve.stats.flow.icmpv4":{"category":"suricata","name":"suricata.eve.stats.flow.icmpv4","type":"long"},"suricata.eve.stats.flow.spare":{"category":"suricata","name":"suricata.eve.stats.flow.spare","type":"long"},"suricata.eve.stats.flow.memuse":{"category":"suricata","name":"suricata.eve.stats.flow.memuse","type":"long"},"suricata.eve.stats.tcp.pseudo_failed":{"category":"suricata","name":"suricata.eve.stats.tcp.pseudo_failed","type":"long"},"suricata.eve.stats.tcp.ssn_memcap_drop":{"category":"suricata","name":"suricata.eve.stats.tcp.ssn_memcap_drop","type":"long"},"suricata.eve.stats.tcp.insert_data_overlap_fail":{"category":"suricata","name":"suricata.eve.stats.tcp.insert_data_overlap_fail","type":"long"},"suricata.eve.stats.tcp.sessions":{"category":"suricata","name":"suricata.eve.stats.tcp.sessions","type":"long"},"suricata.eve.stats.tcp.pseudo":{"category":"suricata","name":"suricata.eve.stats.tcp.pseudo","type":"long"},"suricata.eve.stats.tcp.synack":{"category":"suricata","name":"suricata.eve.stats.tcp.synack","type":"long"},"suricata.eve.stats.tcp.insert_data_normal_fail":{"category":"suricata","name":"suricata.eve.stats.tcp.insert_data_normal_fail","type":"long"},"suricata.eve.stats.tcp.syn":{"category":"suricata","name":"suricata.eve.stats.tcp.syn","type":"long"},"suricata.eve.stats.tcp.memuse":{"category":"suricata","name":"suricata.eve.stats.tcp.memuse","type":"long"},"suricata.eve.stats.tcp.invalid_checksum":{"category":"suricata","name":"suricata.eve.stats.tcp.invalid_checksum","type":"long"},"suricata.eve.stats.tcp.segment_memcap_drop":{"category":"suricata","name":"suricata.eve.stats.tcp.segment_memcap_drop","type":"long"},"suricata.eve.stats.tcp.overlap":{"category":"suricata","name":"suricata.eve.stats.tcp.overlap","type":"long"},"suricata.eve.stats.tcp.insert_list_fail":{"category":"suricata","name":"suricata.eve.stats.tcp.insert_list_fail","type":"long"},"suricata.eve.stats.tcp.rst":{"category":"suricata","name":"suricata.eve.stats.tcp.rst","type":"long"},"suricata.eve.stats.tcp.stream_depth_reached":{"category":"suricata","name":"suricata.eve.stats.tcp.stream_depth_reached","type":"long"},"suricata.eve.stats.tcp.reassembly_memuse":{"category":"suricata","name":"suricata.eve.stats.tcp.reassembly_memuse","type":"long"},"suricata.eve.stats.tcp.reassembly_gap":{"category":"suricata","name":"suricata.eve.stats.tcp.reassembly_gap","type":"long"},"suricata.eve.stats.tcp.overlap_diff_data":{"category":"suricata","name":"suricata.eve.stats.tcp.overlap_diff_data","type":"long"},"suricata.eve.stats.tcp.no_flow":{"category":"suricata","name":"suricata.eve.stats.tcp.no_flow","type":"long"},"suricata.eve.stats.decoder.avg_pkt_size":{"category":"suricata","name":"suricata.eve.stats.decoder.avg_pkt_size","type":"long"},"suricata.eve.stats.decoder.bytes":{"category":"suricata","name":"suricata.eve.stats.decoder.bytes","type":"long"},"suricata.eve.stats.decoder.tcp":{"category":"suricata","name":"suricata.eve.stats.decoder.tcp","type":"long"},"suricata.eve.stats.decoder.raw":{"category":"suricata","name":"suricata.eve.stats.decoder.raw","type":"long"},"suricata.eve.stats.decoder.ppp":{"category":"suricata","name":"suricata.eve.stats.decoder.ppp","type":"long"},"suricata.eve.stats.decoder.vlan_qinq":{"category":"suricata","name":"suricata.eve.stats.decoder.vlan_qinq","type":"long"},"suricata.eve.stats.decoder.null":{"category":"suricata","name":"suricata.eve.stats.decoder.null","type":"long"},"suricata.eve.stats.decoder.ltnull.unsupported_type":{"category":"suricata","name":"suricata.eve.stats.decoder.ltnull.unsupported_type","type":"long"},"suricata.eve.stats.decoder.ltnull.pkt_too_small":{"category":"suricata","name":"suricata.eve.stats.decoder.ltnull.pkt_too_small","type":"long"},"suricata.eve.stats.decoder.invalid":{"category":"suricata","name":"suricata.eve.stats.decoder.invalid","type":"long"},"suricata.eve.stats.decoder.gre":{"category":"suricata","name":"suricata.eve.stats.decoder.gre","type":"long"},"suricata.eve.stats.decoder.ipv4":{"category":"suricata","name":"suricata.eve.stats.decoder.ipv4","type":"long"},"suricata.eve.stats.decoder.ipv6":{"category":"suricata","name":"suricata.eve.stats.decoder.ipv6","type":"long"},"suricata.eve.stats.decoder.pkts":{"category":"suricata","name":"suricata.eve.stats.decoder.pkts","type":"long"},"suricata.eve.stats.decoder.ipv6_in_ipv6":{"category":"suricata","name":"suricata.eve.stats.decoder.ipv6_in_ipv6","type":"long"},"suricata.eve.stats.decoder.ipraw.invalid_ip_version":{"category":"suricata","name":"suricata.eve.stats.decoder.ipraw.invalid_ip_version","type":"long"},"suricata.eve.stats.decoder.pppoe":{"category":"suricata","name":"suricata.eve.stats.decoder.pppoe","type":"long"},"suricata.eve.stats.decoder.udp":{"category":"suricata","name":"suricata.eve.stats.decoder.udp","type":"long"},"suricata.eve.stats.decoder.dce.pkt_too_small":{"category":"suricata","name":"suricata.eve.stats.decoder.dce.pkt_too_small","type":"long"},"suricata.eve.stats.decoder.vlan":{"category":"suricata","name":"suricata.eve.stats.decoder.vlan","type":"long"},"suricata.eve.stats.decoder.sctp":{"category":"suricata","name":"suricata.eve.stats.decoder.sctp","type":"long"},"suricata.eve.stats.decoder.max_pkt_size":{"category":"suricata","name":"suricata.eve.stats.decoder.max_pkt_size","type":"long"},"suricata.eve.stats.decoder.teredo":{"category":"suricata","name":"suricata.eve.stats.decoder.teredo","type":"long"},"suricata.eve.stats.decoder.mpls":{"category":"suricata","name":"suricata.eve.stats.decoder.mpls","type":"long"},"suricata.eve.stats.decoder.sll":{"category":"suricata","name":"suricata.eve.stats.decoder.sll","type":"long"},"suricata.eve.stats.decoder.icmpv6":{"category":"suricata","name":"suricata.eve.stats.decoder.icmpv6","type":"long"},"suricata.eve.stats.decoder.icmpv4":{"category":"suricata","name":"suricata.eve.stats.decoder.icmpv4","type":"long"},"suricata.eve.stats.decoder.erspan":{"category":"suricata","name":"suricata.eve.stats.decoder.erspan","type":"long"},"suricata.eve.stats.decoder.ethernet":{"category":"suricata","name":"suricata.eve.stats.decoder.ethernet","type":"long"},"suricata.eve.stats.decoder.ipv4_in_ipv6":{"category":"suricata","name":"suricata.eve.stats.decoder.ipv4_in_ipv6","type":"long"},"suricata.eve.stats.decoder.ieee8021ah":{"category":"suricata","name":"suricata.eve.stats.decoder.ieee8021ah","type":"long"},"suricata.eve.stats.dns.memcap_global":{"category":"suricata","name":"suricata.eve.stats.dns.memcap_global","type":"long"},"suricata.eve.stats.dns.memcap_state":{"category":"suricata","name":"suricata.eve.stats.dns.memcap_state","type":"long"},"suricata.eve.stats.dns.memuse":{"category":"suricata","name":"suricata.eve.stats.dns.memuse","type":"long"},"suricata.eve.stats.flow_mgr.rows_busy":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.rows_busy","type":"long"},"suricata.eve.stats.flow_mgr.flows_timeout":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.flows_timeout","type":"long"},"suricata.eve.stats.flow_mgr.flows_notimeout":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.flows_notimeout","type":"long"},"suricata.eve.stats.flow_mgr.rows_skipped":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.rows_skipped","type":"long"},"suricata.eve.stats.flow_mgr.closed_pruned":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.closed_pruned","type":"long"},"suricata.eve.stats.flow_mgr.new_pruned":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.new_pruned","type":"long"},"suricata.eve.stats.flow_mgr.flows_removed":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.flows_removed","type":"long"},"suricata.eve.stats.flow_mgr.bypassed_pruned":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.bypassed_pruned","type":"long"},"suricata.eve.stats.flow_mgr.est_pruned":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.est_pruned","type":"long"},"suricata.eve.stats.flow_mgr.flows_timeout_inuse":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.flows_timeout_inuse","type":"long"},"suricata.eve.stats.flow_mgr.flows_checked":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.flows_checked","type":"long"},"suricata.eve.stats.flow_mgr.rows_maxlen":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.rows_maxlen","type":"long"},"suricata.eve.stats.flow_mgr.rows_checked":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.rows_checked","type":"long"},"suricata.eve.stats.flow_mgr.rows_empty":{"category":"suricata","name":"suricata.eve.stats.flow_mgr.rows_empty","type":"long"},"suricata.eve.stats.app_layer.flow.tls":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.tls","type":"long"},"suricata.eve.stats.app_layer.flow.ftp":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.ftp","type":"long"},"suricata.eve.stats.app_layer.flow.http":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.http","type":"long"},"suricata.eve.stats.app_layer.flow.failed_udp":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.failed_udp","type":"long"},"suricata.eve.stats.app_layer.flow.dns_udp":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.dns_udp","type":"long"},"suricata.eve.stats.app_layer.flow.dns_tcp":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.dns_tcp","type":"long"},"suricata.eve.stats.app_layer.flow.smtp":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.smtp","type":"long"},"suricata.eve.stats.app_layer.flow.failed_tcp":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.failed_tcp","type":"long"},"suricata.eve.stats.app_layer.flow.msn":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.msn","type":"long"},"suricata.eve.stats.app_layer.flow.ssh":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.ssh","type":"long"},"suricata.eve.stats.app_layer.flow.imap":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.imap","type":"long"},"suricata.eve.stats.app_layer.flow.dcerpc_udp":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.dcerpc_udp","type":"long"},"suricata.eve.stats.app_layer.flow.dcerpc_tcp":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.dcerpc_tcp","type":"long"},"suricata.eve.stats.app_layer.flow.smb":{"category":"suricata","name":"suricata.eve.stats.app_layer.flow.smb","type":"long"},"suricata.eve.stats.app_layer.tx.tls":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.tls","type":"long"},"suricata.eve.stats.app_layer.tx.ftp":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.ftp","type":"long"},"suricata.eve.stats.app_layer.tx.http":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.http","type":"long"},"suricata.eve.stats.app_layer.tx.dns_udp":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.dns_udp","type":"long"},"suricata.eve.stats.app_layer.tx.dns_tcp":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.dns_tcp","type":"long"},"suricata.eve.stats.app_layer.tx.smtp":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.smtp","type":"long"},"suricata.eve.stats.app_layer.tx.ssh":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.ssh","type":"long"},"suricata.eve.stats.app_layer.tx.dcerpc_udp":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.dcerpc_udp","type":"long"},"suricata.eve.stats.app_layer.tx.dcerpc_tcp":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.dcerpc_tcp","type":"long"},"suricata.eve.stats.app_layer.tx.smb":{"category":"suricata","name":"suricata.eve.stats.app_layer.tx.smb","type":"long"},"suricata.eve.tls.notbefore":{"category":"suricata","name":"suricata.eve.tls.notbefore","type":"date"},"suricata.eve.tls.issuerdn":{"category":"suricata","name":"suricata.eve.tls.issuerdn","type":"keyword"},"suricata.eve.tls.sni":{"category":"suricata","name":"suricata.eve.tls.sni","type":"keyword"},"suricata.eve.tls.version":{"category":"suricata","name":"suricata.eve.tls.version","type":"keyword"},"suricata.eve.tls.session_resumed":{"category":"suricata","name":"suricata.eve.tls.session_resumed","type":"boolean"},"suricata.eve.tls.fingerprint":{"category":"suricata","name":"suricata.eve.tls.fingerprint","type":"keyword"},"suricata.eve.tls.serial":{"category":"suricata","name":"suricata.eve.tls.serial","type":"keyword"},"suricata.eve.tls.notafter":{"category":"suricata","name":"suricata.eve.tls.notafter","type":"date"},"suricata.eve.tls.subject":{"category":"suricata","name":"suricata.eve.tls.subject","type":"keyword"},"suricata.eve.tls.ja3s.string":{"category":"suricata","name":"suricata.eve.tls.ja3s.string","type":"keyword"},"suricata.eve.tls.ja3s.hash":{"category":"suricata","name":"suricata.eve.tls.ja3s.hash","type":"keyword"},"suricata.eve.tls.ja3.string":{"category":"suricata","name":"suricata.eve.tls.ja3.string","type":"keyword"},"suricata.eve.tls.ja3.hash":{"category":"suricata","name":"suricata.eve.tls.ja3.hash","type":"keyword"},"suricata.eve.app_proto_ts":{"category":"suricata","name":"suricata.eve.app_proto_ts","type":"keyword"},"suricata.eve.flow.age":{"category":"suricata","name":"suricata.eve.flow.age","type":"long"},"suricata.eve.flow.state":{"category":"suricata","name":"suricata.eve.flow.state","type":"keyword"},"suricata.eve.flow.reason":{"category":"suricata","name":"suricata.eve.flow.reason","type":"keyword"},"suricata.eve.flow.alerted":{"category":"suricata","name":"suricata.eve.flow.alerted","type":"boolean"},"suricata.eve.tx_id":{"category":"suricata","name":"suricata.eve.tx_id","type":"long"},"suricata.eve.app_proto_tc":{"category":"suricata","name":"suricata.eve.app_proto_tc","type":"keyword"},"suricata.eve.smtp.rcpt_to":{"category":"suricata","name":"suricata.eve.smtp.rcpt_to","type":"keyword"},"suricata.eve.smtp.mail_from":{"category":"suricata","name":"suricata.eve.smtp.mail_from","type":"keyword"},"suricata.eve.smtp.helo":{"category":"suricata","name":"suricata.eve.smtp.helo","type":"keyword"},"suricata.eve.app_proto_expected":{"category":"suricata","name":"suricata.eve.app_proto_expected","type":"keyword"},"suricata.eve.flags":{"category":"suricata","name":"suricata.eve.flags","type":"group"},"zeek.session_id":{"category":"zeek","description":"A unique identifier of the session ","name":"zeek.session_id","type":"keyword"},"zeek.capture_loss.ts_delta":{"category":"zeek","description":"The time delay between this measurement and the last. ","name":"zeek.capture_loss.ts_delta","type":"integer"},"zeek.capture_loss.peer":{"category":"zeek","description":"In the event that there are multiple Bro instances logging to the same host, this distinguishes each peer with its individual name. ","name":"zeek.capture_loss.peer","type":"keyword"},"zeek.capture_loss.gaps":{"category":"zeek","description":"Number of missed ACKs from the previous measurement interval. ","name":"zeek.capture_loss.gaps","type":"integer"},"zeek.capture_loss.acks":{"category":"zeek","description":"Total number of ACKs seen in the previous measurement interval. ","name":"zeek.capture_loss.acks","type":"integer"},"zeek.capture_loss.percent_lost":{"category":"zeek","description":"Percentage of ACKs seen where the data being ACKed wasn't seen. ","name":"zeek.capture_loss.percent_lost","type":"double"},"zeek.connection.local_orig":{"category":"zeek","description":"Indicates whether the session is originated locally. ","name":"zeek.connection.local_orig","type":"boolean"},"zeek.connection.local_resp":{"category":"zeek","description":"Indicates whether the session is responded locally. ","name":"zeek.connection.local_resp","type":"boolean"},"zeek.connection.missed_bytes":{"category":"zeek","description":"Missed bytes for the session. ","name":"zeek.connection.missed_bytes","type":"long"},"zeek.connection.state":{"category":"zeek","description":"Code indicating the state of the session. ","name":"zeek.connection.state","type":"keyword"},"zeek.connection.state_message":{"category":"zeek","description":"The state of the session. ","name":"zeek.connection.state_message","type":"keyword"},"zeek.connection.icmp.type":{"category":"zeek","description":"ICMP message type. ","name":"zeek.connection.icmp.type","type":"integer"},"zeek.connection.icmp.code":{"category":"zeek","description":"ICMP message code. ","name":"zeek.connection.icmp.code","type":"integer"},"zeek.connection.history":{"category":"zeek","description":"Flags indicating the history of the session. ","name":"zeek.connection.history","type":"keyword"},"zeek.connection.vlan":{"category":"zeek","description":"VLAN identifier. ","name":"zeek.connection.vlan","type":"integer"},"zeek.connection.inner_vlan":{"category":"zeek","description":"VLAN identifier. ","name":"zeek.connection.inner_vlan","type":"integer"},"zeek.dce_rpc.rtt":{"category":"zeek","description":"Round trip time from the request to the response. If either the request or response wasn't seen, this will be null. ","name":"zeek.dce_rpc.rtt","type":"integer"},"zeek.dce_rpc.named_pipe":{"category":"zeek","description":"Remote pipe name. ","name":"zeek.dce_rpc.named_pipe","type":"keyword"},"zeek.dce_rpc.endpoint":{"category":"zeek","description":"Endpoint name looked up from the uuid. ","name":"zeek.dce_rpc.endpoint","type":"keyword"},"zeek.dce_rpc.operation":{"category":"zeek","description":"Operation seen in the call. ","name":"zeek.dce_rpc.operation","type":"keyword"},"zeek.dhcp.domain":{"category":"zeek","description":"Domain given by the server in option 15. ","name":"zeek.dhcp.domain","type":"keyword"},"zeek.dhcp.duration":{"category":"zeek","description":"Duration of the DHCP session representing the time from the first message to the last, in seconds. ","name":"zeek.dhcp.duration","type":"double"},"zeek.dhcp.hostname":{"category":"zeek","description":"Name given by client in Hostname option 12. ","name":"zeek.dhcp.hostname","type":"keyword"},"zeek.dhcp.client_fqdn":{"category":"zeek","description":"FQDN given by client in Client FQDN option 81. ","name":"zeek.dhcp.client_fqdn","type":"keyword"},"zeek.dhcp.lease_time":{"category":"zeek","description":"IP address lease interval in seconds. ","name":"zeek.dhcp.lease_time","type":"integer"},"zeek.dhcp.address.assigned":{"category":"zeek","description":"IP address assigned by the server. ","name":"zeek.dhcp.address.assigned","type":"ip"},"zeek.dhcp.address.client":{"category":"zeek","description":"IP address of the client. If a transaction is only a client sending INFORM messages then there is no lease information exchanged so this is helpful to know who sent the messages. Getting an address in this field does require that the client sources at least one DHCP message using a non-broadcast address. ","name":"zeek.dhcp.address.client","type":"ip"},"zeek.dhcp.address.mac":{"category":"zeek","description":"Client's hardware address. ","name":"zeek.dhcp.address.mac","type":"keyword"},"zeek.dhcp.address.requested":{"category":"zeek","description":"IP address requested by the client. ","name":"zeek.dhcp.address.requested","type":"ip"},"zeek.dhcp.address.server":{"category":"zeek","description":"IP address of the DHCP server. ","name":"zeek.dhcp.address.server","type":"ip"},"zeek.dhcp.msg.types":{"category":"zeek","description":"List of DHCP message types seen in this exchange. ","name":"zeek.dhcp.msg.types","type":"keyword"},"zeek.dhcp.msg.origin":{"category":"zeek","description":"(present if policy/protocols/dhcp/msg-orig.bro is loaded) The address that originated each message from the msg.types field. ","name":"zeek.dhcp.msg.origin","type":"ip"},"zeek.dhcp.msg.client":{"category":"zeek","description":"Message typically accompanied with a DHCP_DECLINE so the client can tell the server why it rejected an address. ","name":"zeek.dhcp.msg.client","type":"keyword"},"zeek.dhcp.msg.server":{"category":"zeek","description":"Message typically accompanied with a DHCP_NAK to let the client know why it rejected the request. ","name":"zeek.dhcp.msg.server","type":"keyword"},"zeek.dhcp.software.client":{"category":"zeek","description":"(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ","name":"zeek.dhcp.software.client","type":"keyword"},"zeek.dhcp.software.server":{"category":"zeek","description":"(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ","name":"zeek.dhcp.software.server","type":"keyword"},"zeek.dhcp.id.circuit":{"category":"zeek","description":"(present if policy/protocols/dhcp/sub-opts.bro is loaded) Added by DHCP relay agents which terminate switched or permanent circuits. It encodes an agent-local identifier of the circuit from which a DHCP client-to-server packet was received. Typically it should represent a router or switch interface number. ","name":"zeek.dhcp.id.circuit","type":"keyword"},"zeek.dhcp.id.remote_agent":{"category":"zeek","description":"(present if policy/protocols/dhcp/sub-opts.bro is loaded) A globally unique identifier added by relay agents to identify the remote host end of the circuit. ","name":"zeek.dhcp.id.remote_agent","type":"keyword"},"zeek.dhcp.id.subscriber":{"category":"zeek","description":"(present if policy/protocols/dhcp/sub-opts.bro is loaded) The subscriber ID is a value independent of the physical network configuration so that a customer's DHCP configuration can be given to them correctly no matter where they are physically connected. ","name":"zeek.dhcp.id.subscriber","type":"keyword"},"zeek.dnp3.function.request":{"category":"zeek","description":"The name of the function message in the request. ","name":"zeek.dnp3.function.request","type":"keyword"},"zeek.dnp3.function.reply":{"category":"zeek","description":"The name of the function message in the reply. ","name":"zeek.dnp3.function.reply","type":"keyword"},"zeek.dnp3.id":{"category":"zeek","description":"The response's internal indication number. ","name":"zeek.dnp3.id","type":"integer"},"zeek.dns.trans_id":{"category":"zeek","description":"DNS transaction identifier. ","name":"zeek.dns.trans_id","type":"keyword"},"zeek.dns.rtt":{"category":"zeek","description":"Round trip time for the query and response. ","name":"zeek.dns.rtt","type":"double"},"zeek.dns.query":{"category":"zeek","description":"The domain name that is the subject of the DNS query. ","name":"zeek.dns.query","type":"keyword"},"zeek.dns.qclass":{"category":"zeek","description":"The QCLASS value specifying the class of the query. ","name":"zeek.dns.qclass","type":"long"},"zeek.dns.qclass_name":{"category":"zeek","description":"A descriptive name for the class of the query. ","name":"zeek.dns.qclass_name","type":"keyword"},"zeek.dns.qtype":{"category":"zeek","description":"A QTYPE value specifying the type of the query. ","name":"zeek.dns.qtype","type":"long"},"zeek.dns.qtype_name":{"category":"zeek","description":"A descriptive name for the type of the query. ","name":"zeek.dns.qtype_name","type":"keyword"},"zeek.dns.rcode":{"category":"zeek","description":"The response code value in DNS response messages. ","name":"zeek.dns.rcode","type":"long"},"zeek.dns.rcode_name":{"category":"zeek","description":"A descriptive name for the response code value. ","name":"zeek.dns.rcode_name","type":"keyword"},"zeek.dns.AA":{"category":"zeek","description":"The Authoritative Answer bit for response messages specifies that the responding name server is an authority for the domain name in the question section. ","name":"zeek.dns.AA","type":"boolean"},"zeek.dns.TC":{"category":"zeek","description":"The Truncation bit specifies that the message was truncated. ","name":"zeek.dns.TC","type":"boolean"},"zeek.dns.RD":{"category":"zeek","description":"The Recursion Desired bit in a request message indicates that the client wants recursive service for this query. ","name":"zeek.dns.RD","type":"boolean"},"zeek.dns.RA":{"category":"zeek","description":"The Recursion Available bit in a response message indicates that the name server supports recursive queries. ","name":"zeek.dns.RA","type":"boolean"},"zeek.dns.answers":{"category":"zeek","description":"The set of resource descriptions in the query answer. ","name":"zeek.dns.answers","type":"keyword"},"zeek.dns.TTLs":{"category":"zeek","description":"The caching intervals of the associated RRs described by the answers field. ","name":"zeek.dns.TTLs","type":"double"},"zeek.dns.rejected":{"category":"zeek","description":"Indicates whether the DNS query was rejected by the server. ","name":"zeek.dns.rejected","type":"boolean"},"zeek.dns.total_answers":{"category":"zeek","description":"The total number of resource records in the reply. ","name":"zeek.dns.total_answers","type":"integer"},"zeek.dns.total_replies":{"category":"zeek","description":"The total number of resource records in the reply message. ","name":"zeek.dns.total_replies","type":"integer"},"zeek.dns.saw_query":{"category":"zeek","description":"Whether the full DNS query has been seen. ","name":"zeek.dns.saw_query","type":"boolean"},"zeek.dns.saw_reply":{"category":"zeek","description":"Whether the full DNS reply has been seen. ","name":"zeek.dns.saw_reply","type":"boolean"},"zeek.dpd.analyzer":{"category":"zeek","description":"The analyzer that generated the violation. ","name":"zeek.dpd.analyzer","type":"keyword"},"zeek.dpd.failure_reason":{"category":"zeek","description":"The textual reason for the analysis failure. ","name":"zeek.dpd.failure_reason","type":"keyword"},"zeek.dpd.packet_segment":{"category":"zeek","description":"(present if policy/frameworks/dpd/packet-segment-logging.bro is loaded) A chunk of the payload that most likely resulted in the protocol violation. ","name":"zeek.dpd.packet_segment","type":"keyword"},"zeek.files.fuid":{"category":"zeek","description":"A file unique identifier. ","name":"zeek.files.fuid","type":"keyword"},"zeek.files.tx_host":{"category":"zeek","description":"The host that transferred the file. ","name":"zeek.files.tx_host","type":"ip"},"zeek.files.rx_host":{"category":"zeek","description":"The host that received the file. ","name":"zeek.files.rx_host","type":"ip"},"zeek.files.session_ids":{"category":"zeek","description":"The sessions that have this file. ","name":"zeek.files.session_ids","type":"keyword"},"zeek.files.source":{"category":"zeek","description":"An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ","name":"zeek.files.source","type":"keyword"},"zeek.files.depth":{"category":"zeek","description":"A value to represent the depth of this file in relation to its source. In SMTP, it is the depth of the MIME attachment on the message. In HTTP, it is the depth of the request within the TCP connection. ","name":"zeek.files.depth","type":"long"},"zeek.files.analyzers":{"category":"zeek","description":"A set of analysis types done during the file analysis. ","name":"zeek.files.analyzers","type":"keyword"},"zeek.files.mime_type":{"category":"zeek","description":"Mime type of the file. ","name":"zeek.files.mime_type","type":"keyword"},"zeek.files.filename":{"category":"zeek","description":"Name of the file if available. ","name":"zeek.files.filename","type":"keyword"},"zeek.files.local_orig":{"category":"zeek","description":"If the source of this file is a network connection, this field indicates if the data originated from the local network or not. ","name":"zeek.files.local_orig","type":"boolean"},"zeek.files.is_orig":{"category":"zeek","description":"If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ","name":"zeek.files.is_orig","type":"boolean"},"zeek.files.duration":{"category":"zeek","description":"The duration the file was analyzed for. Not the duration of the session. ","name":"zeek.files.duration","type":"double"},"zeek.files.seen_bytes":{"category":"zeek","description":"Number of bytes provided to the file analysis engine for the file. ","name":"zeek.files.seen_bytes","type":"long"},"zeek.files.total_bytes":{"category":"zeek","description":"Total number of bytes that are supposed to comprise the full file. ","name":"zeek.files.total_bytes","type":"long"},"zeek.files.missing_bytes":{"category":"zeek","description":"The number of bytes in the file stream that were completely missed during the process of analysis. ","name":"zeek.files.missing_bytes","type":"long"},"zeek.files.overflow_bytes":{"category":"zeek","description":"The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ","name":"zeek.files.overflow_bytes","type":"long"},"zeek.files.timedout":{"category":"zeek","description":"Whether the file analysis timed out at least once for the file. ","name":"zeek.files.timedout","type":"boolean"},"zeek.files.parent_fuid":{"category":"zeek","description":"Identifier associated with a container file from which this one was extracted as part of the file analysis. ","name":"zeek.files.parent_fuid","type":"keyword"},"zeek.files.md5":{"category":"zeek","description":"An MD5 digest of the file contents. ","name":"zeek.files.md5","type":"keyword"},"zeek.files.sha1":{"category":"zeek","description":"A SHA1 digest of the file contents. ","name":"zeek.files.sha1","type":"keyword"},"zeek.files.sha256":{"category":"zeek","description":"A SHA256 digest of the file contents. ","name":"zeek.files.sha256","type":"keyword"},"zeek.files.extracted":{"category":"zeek","description":"Local filename of extracted file. ","name":"zeek.files.extracted","type":"keyword"},"zeek.files.extracted_cutoff":{"category":"zeek","description":"Indicate whether the file being extracted was cut off hence not extracted completely. ","name":"zeek.files.extracted_cutoff","type":"boolean"},"zeek.files.extracted_size":{"category":"zeek","description":"The number of bytes extracted to disk. ","name":"zeek.files.extracted_size","type":"long"},"zeek.files.entropy":{"category":"zeek","description":"The information density of the contents of the file. ","name":"zeek.files.entropy","type":"double"},"zeek.ftp.user":{"category":"zeek","description":"User name for the current FTP session. ","name":"zeek.ftp.user","type":"keyword"},"zeek.ftp.password":{"category":"zeek","description":"Password for the current FTP session if captured. ","name":"zeek.ftp.password","type":"keyword"},"zeek.ftp.command":{"category":"zeek","description":"Command given by the client. ","name":"zeek.ftp.command","type":"keyword"},"zeek.ftp.arg":{"category":"zeek","description":"Argument for the command if one is given. ","name":"zeek.ftp.arg","type":"keyword"},"zeek.ftp.file.size":{"category":"zeek","description":"Size of the file if the command indicates a file transfer. ","name":"zeek.ftp.file.size","type":"long"},"zeek.ftp.file.mime_type":{"category":"zeek","description":"Sniffed mime type of file. ","name":"zeek.ftp.file.mime_type","type":"keyword"},"zeek.ftp.file.fuid":{"category":"zeek","description":"(present if base/protocols/ftp/files.bro is loaded) File unique ID. ","name":"zeek.ftp.file.fuid","type":"keyword"},"zeek.ftp.reply.code":{"category":"zeek","description":"Reply code from the server in response to the command. ","name":"zeek.ftp.reply.code","type":"integer"},"zeek.ftp.reply.msg":{"category":"zeek","description":"Reply message from the server in response to the command. ","name":"zeek.ftp.reply.msg","type":"keyword"},"zeek.ftp.data_channel.passive":{"category":"zeek","description":"Whether PASV mode is toggled for control channel. ","name":"zeek.ftp.data_channel.passive","type":"boolean"},"zeek.ftp.data_channel.originating_host":{"category":"zeek","description":"The host that will be initiating the data connection. ","name":"zeek.ftp.data_channel.originating_host","type":"ip"},"zeek.ftp.data_channel.response_host":{"category":"zeek","description":"The host that will be accepting the data connection. ","name":"zeek.ftp.data_channel.response_host","type":"ip"},"zeek.ftp.data_channel.response_port":{"category":"zeek","description":"The port at which the acceptor is listening for the data connection. ","name":"zeek.ftp.data_channel.response_port","type":"integer"},"zeek.ftp.cwd":{"category":"zeek","description":"Current working directory that this session is in. By making the default value '.', we can indicate that unless something more concrete is discovered that the existing but unknown directory is ok to use. ","name":"zeek.ftp.cwd","type":"keyword"},"zeek.ftp.cmdarg.cmd":{"category":"zeek","description":"Command. ","name":"zeek.ftp.cmdarg.cmd","type":"keyword"},"zeek.ftp.cmdarg.arg":{"category":"zeek","description":"Argument for the command if one was given. ","name":"zeek.ftp.cmdarg.arg","type":"keyword"},"zeek.ftp.cmdarg.seq":{"category":"zeek","description":"Counter to track how many commands have been executed. ","name":"zeek.ftp.cmdarg.seq","type":"integer"},"zeek.ftp.pending_commands":{"category":"zeek","description":"Queue for commands that have been sent but not yet responded to are tracked here. ","name":"zeek.ftp.pending_commands","type":"integer"},"zeek.ftp.passive":{"category":"zeek","description":"Indicates if the session is in active or passive mode. ","name":"zeek.ftp.passive","type":"boolean"},"zeek.ftp.capture_password":{"category":"zeek","description":"Determines if the password will be captured for this request. ","name":"zeek.ftp.capture_password","type":"boolean"},"zeek.ftp.last_auth_requested":{"category":"zeek","description":"present if base/protocols/ftp/gridftp.bro is loaded. Last authentication/security mechanism that was used. ","name":"zeek.ftp.last_auth_requested","type":"keyword"},"zeek.http.trans_depth":{"category":"zeek","description":"Represents the pipelined depth into the connection of this request/response transaction. ","name":"zeek.http.trans_depth","type":"integer"},"zeek.http.status_msg":{"category":"zeek","description":"Status message returned by the server. ","name":"zeek.http.status_msg","type":"keyword"},"zeek.http.info_code":{"category":"zeek","description":"Last seen 1xx informational reply code returned by the server. ","name":"zeek.http.info_code","type":"integer"},"zeek.http.info_msg":{"category":"zeek","description":"Last seen 1xx informational reply message returned by the server. ","name":"zeek.http.info_msg","type":"keyword"},"zeek.http.tags":{"category":"zeek","description":"A set of indicators of various attributes discovered and related to a particular request/response pair. ","name":"zeek.http.tags","type":"keyword"},"zeek.http.password":{"category":"zeek","description":"Password if basic-auth is performed for the request. ","name":"zeek.http.password","type":"keyword"},"zeek.http.captured_password":{"category":"zeek","description":"Determines if the password will be captured for this request. ","name":"zeek.http.captured_password","type":"boolean"},"zeek.http.proxied":{"category":"zeek","description":"All of the headers that may indicate if the HTTP request was proxied. ","name":"zeek.http.proxied","type":"keyword"},"zeek.http.range_request":{"category":"zeek","description":"Indicates if this request can assume 206 partial content in response. ","name":"zeek.http.range_request","type":"boolean"},"zeek.http.client_header_names":{"category":"zeek","description":"The vector of HTTP header names sent by the client. No header values are included here, just the header names. ","name":"zeek.http.client_header_names","type":"keyword"},"zeek.http.server_header_names":{"category":"zeek","description":"The vector of HTTP header names sent by the server. No header values are included here, just the header names. ","name":"zeek.http.server_header_names","type":"keyword"},"zeek.http.orig_fuids":{"category":"zeek","description":"An ordered vector of file unique IDs from the originator. ","name":"zeek.http.orig_fuids","type":"keyword"},"zeek.http.orig_mime_types":{"category":"zeek","description":"An ordered vector of mime types from the originator. ","name":"zeek.http.orig_mime_types","type":"keyword"},"zeek.http.orig_filenames":{"category":"zeek","description":"An ordered vector of filenames from the originator. ","name":"zeek.http.orig_filenames","type":"keyword"},"zeek.http.resp_fuids":{"category":"zeek","description":"An ordered vector of file unique IDs from the responder. ","name":"zeek.http.resp_fuids","type":"keyword"},"zeek.http.resp_mime_types":{"category":"zeek","description":"An ordered vector of mime types from the responder. ","name":"zeek.http.resp_mime_types","type":"keyword"},"zeek.http.resp_filenames":{"category":"zeek","description":"An ordered vector of filenames from the responder. ","name":"zeek.http.resp_filenames","type":"keyword"},"zeek.http.orig_mime_depth":{"category":"zeek","description":"Current number of MIME entities in the HTTP request message body. ","name":"zeek.http.orig_mime_depth","type":"integer"},"zeek.http.resp_mime_depth":{"category":"zeek","description":"Current number of MIME entities in the HTTP response message body. ","name":"zeek.http.resp_mime_depth","type":"integer"},"zeek.intel.seen.indicator":{"category":"zeek","description":"The intelligence indicator. ","name":"zeek.intel.seen.indicator","type":"keyword"},"zeek.intel.seen.indicator_type":{"category":"zeek","description":"The type of data the indicator represents. ","name":"zeek.intel.seen.indicator_type","type":"keyword"},"zeek.intel.seen.host":{"category":"zeek","description":"If the indicator type was Intel::ADDR, then this field will be present. ","name":"zeek.intel.seen.host","type":"keyword"},"zeek.intel.seen.conn":{"category":"zeek","description":"If the data was discovered within a connection, the connection record should go here to give context to the data. ","name":"zeek.intel.seen.conn","type":"keyword"},"zeek.intel.seen.where":{"category":"zeek","description":"Where the data was discovered. ","name":"zeek.intel.seen.where","type":"keyword"},"zeek.intel.seen.node":{"category":"zeek","description":"The name of the node where the match was discovered. ","name":"zeek.intel.seen.node","type":"keyword"},"zeek.intel.seen.uid":{"category":"zeek","description":"If the data was discovered within a connection, the connection uid should go here to give context to the data. If the conn field is provided, this will be automatically filled out. ","name":"zeek.intel.seen.uid","type":"keyword"},"zeek.intel.seen.f":{"category":"zeek","description":"If the data was discovered within a file, the file record should go here to provide context to the data. ","name":"zeek.intel.seen.f","type":"object"},"zeek.intel.seen.fuid":{"category":"zeek","description":"If the data was discovered within a file, the file uid should go here to provide context to the data. If the file record f is provided, this will be automatically filled out. ","name":"zeek.intel.seen.fuid","type":"keyword"},"zeek.intel.matched":{"category":"zeek","description":"Event to represent a match in the intelligence data from data that was seen. ","name":"zeek.intel.matched","type":"keyword"},"zeek.intel.sources":{"category":"zeek","description":"Sources which supplied data for this match. ","name":"zeek.intel.sources","type":"keyword"},"zeek.intel.fuid":{"category":"zeek","description":"If a file was associated with this intelligence hit, this is the uid for the file. ","name":"zeek.intel.fuid","type":"keyword"},"zeek.intel.file_mime_type":{"category":"zeek","description":"A mime type if the intelligence hit is related to a file. If the $f field is provided this will be automatically filled out. ","name":"zeek.intel.file_mime_type","type":"keyword"},"zeek.intel.file_desc":{"category":"zeek","description":"Frequently files can be described to give a bit more context. If the $f field is provided this field will be automatically filled out. ","name":"zeek.intel.file_desc","type":"keyword"},"zeek.irc.nick":{"category":"zeek","description":"Nickname given for the connection. ","name":"zeek.irc.nick","type":"keyword"},"zeek.irc.user":{"category":"zeek","description":"Username given for the connection. ","name":"zeek.irc.user","type":"keyword"},"zeek.irc.command":{"category":"zeek","description":"Command given by the client. ","name":"zeek.irc.command","type":"keyword"},"zeek.irc.value":{"category":"zeek","description":"Value for the command given by the client. ","name":"zeek.irc.value","type":"keyword"},"zeek.irc.addl":{"category":"zeek","description":"Any additional data for the command. ","name":"zeek.irc.addl","type":"keyword"},"zeek.irc.dcc.file.name":{"category":"zeek","description":"Present if base/protocols/irc/dcc-send.bro is loaded. DCC filename requested. ","name":"zeek.irc.dcc.file.name","type":"keyword"},"zeek.irc.dcc.file.size":{"category":"zeek","description":"Present if base/protocols/irc/dcc-send.bro is loaded. Size of the DCC transfer as indicated by the sender. ","name":"zeek.irc.dcc.file.size","type":"long"},"zeek.irc.dcc.mime_type":{"category":"zeek","description":"present if base/protocols/irc/dcc-send.bro is loaded. Sniffed mime type of the file. ","name":"zeek.irc.dcc.mime_type","type":"keyword"},"zeek.irc.fuid":{"category":"zeek","description":"present if base/protocols/irc/files.bro is loaded. File unique ID. ","name":"zeek.irc.fuid","type":"keyword"},"zeek.kerberos.request_type":{"category":"zeek","description":"Request type - Authentication Service (AS) or Ticket Granting Service (TGS). ","name":"zeek.kerberos.request_type","type":"keyword"},"zeek.kerberos.client":{"category":"zeek","description":"Client name. ","name":"zeek.kerberos.client","type":"keyword"},"zeek.kerberos.service":{"category":"zeek","description":"Service name. ","name":"zeek.kerberos.service","type":"keyword"},"zeek.kerberos.success":{"category":"zeek","description":"Request result. ","name":"zeek.kerberos.success","type":"boolean"},"zeek.kerberos.error.code":{"category":"zeek","description":"Error code. ","name":"zeek.kerberos.error.code","type":"integer"},"zeek.kerberos.error.msg":{"category":"zeek","description":"Error message. ","name":"zeek.kerberos.error.msg","type":"keyword"},"zeek.kerberos.valid.from":{"category":"zeek","description":"Ticket valid from. ","name":"zeek.kerberos.valid.from","type":"date"},"zeek.kerberos.valid.until":{"category":"zeek","description":"Ticket valid until. ","name":"zeek.kerberos.valid.until","type":"date"},"zeek.kerberos.valid.days":{"category":"zeek","description":"Number of days the ticket is valid for. ","name":"zeek.kerberos.valid.days","type":"integer"},"zeek.kerberos.cipher":{"category":"zeek","description":"Ticket encryption type. ","name":"zeek.kerberos.cipher","type":"keyword"},"zeek.kerberos.forwardable":{"category":"zeek","description":"Forwardable ticket requested. ","name":"zeek.kerberos.forwardable","type":"boolean"},"zeek.kerberos.renewable":{"category":"zeek","description":"Renewable ticket requested. ","name":"zeek.kerberos.renewable","type":"boolean"},"zeek.kerberos.ticket.auth":{"category":"zeek","description":"Hash of ticket used to authorize request/transaction. ","name":"zeek.kerberos.ticket.auth","type":"keyword"},"zeek.kerberos.ticket.new":{"category":"zeek","description":"Hash of ticket returned by the KDC. ","name":"zeek.kerberos.ticket.new","type":"keyword"},"zeek.kerberos.cert.client.value":{"category":"zeek","description":"Client certificate. ","name":"zeek.kerberos.cert.client.value","type":"keyword"},"zeek.kerberos.cert.client.fuid":{"category":"zeek","description":"File unique ID of client cert. ","name":"zeek.kerberos.cert.client.fuid","type":"keyword"},"zeek.kerberos.cert.client.subject":{"category":"zeek","description":"Subject of client certificate. ","name":"zeek.kerberos.cert.client.subject","type":"keyword"},"zeek.kerberos.cert.server.value":{"category":"zeek","description":"Server certificate. ","name":"zeek.kerberos.cert.server.value","type":"keyword"},"zeek.kerberos.cert.server.fuid":{"category":"zeek","description":"File unique ID of server certificate. ","name":"zeek.kerberos.cert.server.fuid","type":"keyword"},"zeek.kerberos.cert.server.subject":{"category":"zeek","description":"Subject of server certificate. ","name":"zeek.kerberos.cert.server.subject","type":"keyword"},"zeek.modbus.function":{"category":"zeek","description":"The name of the function message that was sent. ","name":"zeek.modbus.function","type":"keyword"},"zeek.modbus.exception":{"category":"zeek","description":"The exception if the response was a failure. ","name":"zeek.modbus.exception","type":"keyword"},"zeek.modbus.track_address":{"category":"zeek","description":"Present if policy/protocols/modbus/track-memmap.bro is loaded. Modbus track address. ","name":"zeek.modbus.track_address","type":"integer"},"zeek.mysql.cmd":{"category":"zeek","description":"The command that was issued. ","name":"zeek.mysql.cmd","type":"keyword"},"zeek.mysql.arg":{"category":"zeek","description":"The argument issued to the command. ","name":"zeek.mysql.arg","type":"keyword"},"zeek.mysql.success":{"category":"zeek","description":"Whether the command succeeded. ","name":"zeek.mysql.success","type":"boolean"},"zeek.mysql.rows":{"category":"zeek","description":"The number of affected rows, if any. ","name":"zeek.mysql.rows","type":"integer"},"zeek.mysql.response":{"category":"zeek","description":"Server message, if any. ","name":"zeek.mysql.response","type":"keyword"},"zeek.notice.connection_id":{"category":"zeek","description":"Identifier of the related connection session. ","name":"zeek.notice.connection_id","type":"keyword"},"zeek.notice.icmp_id":{"category":"zeek","description":"Identifier of the related ICMP session. ","name":"zeek.notice.icmp_id","type":"keyword"},"zeek.notice.file.id":{"category":"zeek","description":"An identifier associated with a single file that is related to this notice. ","name":"zeek.notice.file.id","type":"keyword"},"zeek.notice.file.parent_id":{"category":"zeek","description":"Identifier associated with a container file from which this one was extracted. ","name":"zeek.notice.file.parent_id","type":"keyword"},"zeek.notice.file.source":{"category":"zeek","description":"An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ","name":"zeek.notice.file.source","type":"keyword"},"zeek.notice.file.mime_type":{"category":"zeek","description":"A mime type if the notice is related to a file. ","name":"zeek.notice.file.mime_type","type":"keyword"},"zeek.notice.file.is_orig":{"category":"zeek","description":"If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ","name":"zeek.notice.file.is_orig","type":"boolean"},"zeek.notice.file.seen_bytes":{"category":"zeek","description":"Number of bytes provided to the file analysis engine for the file. ","name":"zeek.notice.file.seen_bytes","type":"long"},"zeek.notice.ffile.total_bytes":{"category":"zeek","description":"Total number of bytes that are supposed to comprise the full file. ","name":"zeek.notice.ffile.total_bytes","type":"long"},"zeek.notice.file.missing_bytes":{"category":"zeek","description":"The number of bytes in the file stream that were completely missed during the process of analysis. ","name":"zeek.notice.file.missing_bytes","type":"long"},"zeek.notice.file.overflow_bytes":{"category":"zeek","description":"The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ","name":"zeek.notice.file.overflow_bytes","type":"long"},"zeek.notice.fuid":{"category":"zeek","description":"A file unique ID if this notice is related to a file. ","name":"zeek.notice.fuid","type":"keyword"},"zeek.notice.note":{"category":"zeek","description":"The type of the notice. ","name":"zeek.notice.note","type":"keyword"},"zeek.notice.msg":{"category":"zeek","description":"The human readable message for the notice. ","name":"zeek.notice.msg","type":"keyword"},"zeek.notice.sub":{"category":"zeek","description":"The human readable sub-message. ","name":"zeek.notice.sub","type":"keyword"},"zeek.notice.n":{"category":"zeek","description":"Associated count, or a status code. ","name":"zeek.notice.n","type":"long"},"zeek.notice.peer_name":{"category":"zeek","description":"Name of remote peer that raised this notice. ","name":"zeek.notice.peer_name","type":"keyword"},"zeek.notice.peer_descr":{"category":"zeek","description":"Textual description for the peer that raised this notice. ","name":"zeek.notice.peer_descr","type":"text"},"zeek.notice.actions":{"category":"zeek","description":"The actions which have been applied to this notice. ","name":"zeek.notice.actions","type":"keyword"},"zeek.notice.email_body_sections":{"category":"zeek","description":"By adding chunks of text into this element, other scripts can expand on notices that are being emailed. ","name":"zeek.notice.email_body_sections","type":"text"},"zeek.notice.email_delay_tokens":{"category":"zeek","description":"Adding a string token to this set will cause the built-in emailing functionality to delay sending the email either the token has been removed or the email has been delayed for the specified time duration. ","name":"zeek.notice.email_delay_tokens","type":"keyword"},"zeek.notice.identifier":{"category":"zeek","description":"This field is provided when a notice is generated for the purpose of deduplicating notices. ","name":"zeek.notice.identifier","type":"keyword"},"zeek.notice.suppress_for":{"category":"zeek","description":"This field indicates the length of time that this unique notice should be suppressed. ","name":"zeek.notice.suppress_for","type":"double"},"zeek.notice.dropped":{"category":"zeek","description":"Indicate if the source IP address was dropped and denied network access. ","name":"zeek.notice.dropped","type":"boolean"},"zeek.ntlm.domain":{"category":"zeek","description":"Domain name given by the client. ","name":"zeek.ntlm.domain","type":"keyword"},"zeek.ntlm.hostname":{"category":"zeek","description":"Hostname given by the client. ","name":"zeek.ntlm.hostname","type":"keyword"},"zeek.ntlm.success":{"category":"zeek","description":"Indicate whether or not the authentication was successful. ","name":"zeek.ntlm.success","type":"boolean"},"zeek.ntlm.username":{"category":"zeek","description":"Username given by the client. ","name":"zeek.ntlm.username","type":"keyword"},"zeek.ntlm.server.name.dns":{"category":"zeek","description":"DNS name given by the server in a CHALLENGE. ","name":"zeek.ntlm.server.name.dns","type":"keyword"},"zeek.ntlm.server.name.netbios":{"category":"zeek","description":"NetBIOS name given by the server in a CHALLENGE. ","name":"zeek.ntlm.server.name.netbios","type":"keyword"},"zeek.ntlm.server.name.tree":{"category":"zeek","description":"Tree name given by the server in a CHALLENGE. ","name":"zeek.ntlm.server.name.tree","type":"keyword"},"zeek.ntp.version":{"category":"zeek","description":"The NTP version number (1, 2, 3, 4). ","name":"zeek.ntp.version","type":"integer"},"zeek.ntp.mode":{"category":"zeek","description":"The NTP mode being used. ","name":"zeek.ntp.mode","type":"integer"},"zeek.ntp.stratum":{"category":"zeek","description":"The stratum (primary server, secondary server, etc.). ","name":"zeek.ntp.stratum","type":"integer"},"zeek.ntp.poll":{"category":"zeek","description":"The maximum interval between successive messages in seconds. ","name":"zeek.ntp.poll","type":"double"},"zeek.ntp.precision":{"category":"zeek","description":"The precision of the system clock in seconds. ","name":"zeek.ntp.precision","type":"double"},"zeek.ntp.root_delay":{"category":"zeek","description":"Total round-trip delay to the reference clock in seconds. ","name":"zeek.ntp.root_delay","type":"double"},"zeek.ntp.root_disp":{"category":"zeek","description":"Total dispersion to the reference clock in seconds. ","name":"zeek.ntp.root_disp","type":"double"},"zeek.ntp.ref_id":{"category":"zeek","description":"For stratum 0, 4 character string used for debugging. For stratum 1, ID assigned to the reference clock by IANA. Above stratum 1, when using IPv4, the IP address of the reference clock. Note that the NTP protocol did not originally specify a large enough field to represent IPv6 addresses, so they use the first four bytes of the MD5 hash of the reference clock’s IPv6 address (i.e. an IPv4 address here is not necessarily IPv4). ","name":"zeek.ntp.ref_id","type":"keyword"},"zeek.ntp.ref_time":{"category":"zeek","description":"Time when the system clock was last set or correct. ","name":"zeek.ntp.ref_time","type":"date"},"zeek.ntp.org_time":{"category":"zeek","description":"Time at the client when the request departed for the NTP server. ","name":"zeek.ntp.org_time","type":"date"},"zeek.ntp.rec_time":{"category":"zeek","description":"Time at the server when the request arrived from the NTP client. ","name":"zeek.ntp.rec_time","type":"date"},"zeek.ntp.xmt_time":{"category":"zeek","description":"Time at the server when the response departed for the NTP client. ","name":"zeek.ntp.xmt_time","type":"date"},"zeek.ntp.num_exts":{"category":"zeek","description":"Number of extension fields (which are not currently parsed). ","name":"zeek.ntp.num_exts","type":"integer"},"zeek.ocsp.file_id":{"category":"zeek","description":"File id of the OCSP reply. ","name":"zeek.ocsp.file_id","type":"keyword"},"zeek.ocsp.hash.algorithm":{"category":"zeek","description":"Hash algorithm used to generate issuerNameHash and issuerKeyHash. ","name":"zeek.ocsp.hash.algorithm","type":"keyword"},"zeek.ocsp.hash.issuer.name":{"category":"zeek","description":"Hash of the issuer's distingueshed name. ","name":"zeek.ocsp.hash.issuer.name","type":"keyword"},"zeek.ocsp.hash.issuer.key":{"category":"zeek","description":"Hash of the issuer's public key. ","name":"zeek.ocsp.hash.issuer.key","type":"keyword"},"zeek.ocsp.serial_number":{"category":"zeek","description":"Serial number of the affected certificate. ","name":"zeek.ocsp.serial_number","type":"keyword"},"zeek.ocsp.status":{"category":"zeek","description":"Status of the affected certificate. ","name":"zeek.ocsp.status","type":"keyword"},"zeek.ocsp.revoke.time":{"category":"zeek","description":"Time at which the certificate was revoked. ","name":"zeek.ocsp.revoke.time","type":"date"},"zeek.ocsp.revoke.reason":{"category":"zeek","description":"Reason for which the certificate was revoked. ","name":"zeek.ocsp.revoke.reason","type":"keyword"},"zeek.ocsp.update.this":{"category":"zeek","description":"The time at which the status being shows is known to have been correct. ","name":"zeek.ocsp.update.this","type":"date"},"zeek.ocsp.update.next":{"category":"zeek","description":"The latest time at which new information about the status of the certificate will be available. ","name":"zeek.ocsp.update.next","type":"date"},"zeek.pe.client":{"category":"zeek","description":"The client's version string. ","name":"zeek.pe.client","type":"keyword"},"zeek.pe.id":{"category":"zeek","description":"File id of this portable executable file. ","name":"zeek.pe.id","type":"keyword"},"zeek.pe.machine":{"category":"zeek","description":"The target machine that the file was compiled for. ","name":"zeek.pe.machine","type":"keyword"},"zeek.pe.compile_time":{"category":"zeek","description":"The time that the file was created at. ","name":"zeek.pe.compile_time","type":"date"},"zeek.pe.os":{"category":"zeek","description":"The required operating system. ","name":"zeek.pe.os","type":"keyword"},"zeek.pe.subsystem":{"category":"zeek","description":"The subsystem that is required to run this file. ","name":"zeek.pe.subsystem","type":"keyword"},"zeek.pe.is_exe":{"category":"zeek","description":"Is the file an executable, or just an object file? ","name":"zeek.pe.is_exe","type":"boolean"},"zeek.pe.is_64bit":{"category":"zeek","description":"Is the file a 64-bit executable? ","name":"zeek.pe.is_64bit","type":"boolean"},"zeek.pe.uses_aslr":{"category":"zeek","description":"Does the file support Address Space Layout Randomization? ","name":"zeek.pe.uses_aslr","type":"boolean"},"zeek.pe.uses_dep":{"category":"zeek","description":"Does the file support Data Execution Prevention? ","name":"zeek.pe.uses_dep","type":"boolean"},"zeek.pe.uses_code_integrity":{"category":"zeek","description":"Does the file enforce code integrity checks? ","name":"zeek.pe.uses_code_integrity","type":"boolean"},"zeek.pe.uses_seh":{"category":"zeek","description":"Does the file use structured exception handing? ","name":"zeek.pe.uses_seh","type":"boolean"},"zeek.pe.has_import_table":{"category":"zeek","description":"Does the file have an import table? ","name":"zeek.pe.has_import_table","type":"boolean"},"zeek.pe.has_export_table":{"category":"zeek","description":"Does the file have an export table? ","name":"zeek.pe.has_export_table","type":"boolean"},"zeek.pe.has_cert_table":{"category":"zeek","description":"Does the file have an attribute certificate table? ","name":"zeek.pe.has_cert_table","type":"boolean"},"zeek.pe.has_debug_data":{"category":"zeek","description":"Does the file have a debug table? ","name":"zeek.pe.has_debug_data","type":"boolean"},"zeek.pe.section_names":{"category":"zeek","description":"The names of the sections, in order. ","name":"zeek.pe.section_names","type":"keyword"},"zeek.radius.username":{"category":"zeek","description":"The username, if present. ","name":"zeek.radius.username","type":"keyword"},"zeek.radius.mac":{"category":"zeek","description":"MAC address, if present. ","name":"zeek.radius.mac","type":"keyword"},"zeek.radius.framed_addr":{"category":"zeek","description":"The address given to the network access server, if present. This is only a hint from the RADIUS server and the network access server is not required to honor the address. ","name":"zeek.radius.framed_addr","type":"ip"},"zeek.radius.remote_ip":{"category":"zeek","description":"Remote IP address, if present. This is collected from the Tunnel-Client-Endpoint attribute. ","name":"zeek.radius.remote_ip","type":"ip"},"zeek.radius.connect_info":{"category":"zeek","description":"Connect info, if present. ","name":"zeek.radius.connect_info","type":"keyword"},"zeek.radius.reply_msg":{"category":"zeek","description":"Reply message from the server challenge. This is frequently shown to the user authenticating. ","name":"zeek.radius.reply_msg","type":"keyword"},"zeek.radius.result":{"category":"zeek","description":"Successful or failed authentication. ","name":"zeek.radius.result","type":"keyword"},"zeek.radius.ttl":{"category":"zeek","description":"The duration between the first request and either the \"Access-Accept\" message or an error. If the field is empty, it means that either the request or response was not seen. ","name":"zeek.radius.ttl","type":"integer"},"zeek.radius.logged":{"category":"zeek","description":"Whether this has already been logged and can be ignored. ","name":"zeek.radius.logged","type":"boolean"},"zeek.rdp.cookie":{"category":"zeek","description":"Cookie value used by the client machine. This is typically a username. ","name":"zeek.rdp.cookie","type":"keyword"},"zeek.rdp.result":{"category":"zeek","description":"Status result for the connection. It's a mix between RDP negotation failure messages and GCC server create response messages. ","name":"zeek.rdp.result","type":"keyword"},"zeek.rdp.security_protocol":{"category":"zeek","description":"Security protocol chosen by the server. ","name":"zeek.rdp.security_protocol","type":"keyword"},"zeek.rdp.keyboard_layout":{"category":"zeek","description":"Keyboard layout (language) of the client machine. ","name":"zeek.rdp.keyboard_layout","type":"keyword"},"zeek.rdp.client.build":{"category":"zeek","description":"RDP client version used by the client machine. ","name":"zeek.rdp.client.build","type":"keyword"},"zeek.rdp.client.client_name":{"category":"zeek","description":"Name of the client machine. ","name":"zeek.rdp.client.client_name","type":"keyword"},"zeek.rdp.client.product_id":{"category":"zeek","description":"Product ID of the client machine. ","name":"zeek.rdp.client.product_id","type":"keyword"},"zeek.rdp.desktop.width":{"category":"zeek","description":"Desktop width of the client machine. ","name":"zeek.rdp.desktop.width","type":"integer"},"zeek.rdp.desktop.height":{"category":"zeek","description":"Desktop height of the client machine. ","name":"zeek.rdp.desktop.height","type":"integer"},"zeek.rdp.desktop.color_depth":{"category":"zeek","description":"The color depth requested by the client in the high_color_depth field. ","name":"zeek.rdp.desktop.color_depth","type":"keyword"},"zeek.rdp.cert.type":{"category":"zeek","description":"If the connection is being encrypted with native RDP encryption, this is the type of cert being used. ","name":"zeek.rdp.cert.type","type":"keyword"},"zeek.rdp.cert.count":{"category":"zeek","description":"The number of certs seen. X.509 can transfer an entire certificate chain. ","name":"zeek.rdp.cert.count","type":"integer"},"zeek.rdp.cert.permanent":{"category":"zeek","description":"Indicates if the provided certificate or certificate chain is permanent or temporary. ","name":"zeek.rdp.cert.permanent","type":"boolean"},"zeek.rdp.encryption.level":{"category":"zeek","description":"Encryption level of the connection. ","name":"zeek.rdp.encryption.level","type":"keyword"},"zeek.rdp.encryption.method":{"category":"zeek","description":"Encryption method of the connection. ","name":"zeek.rdp.encryption.method","type":"keyword"},"zeek.rdp.done":{"category":"zeek","description":"Track status of logging RDP connections. ","name":"zeek.rdp.done","type":"boolean"},"zeek.rdp.ssl":{"category":"zeek","description":"(present if policy/protocols/rdp/indicate_ssl.bro is loaded) Flag the connection if it was seen over SSL. ","name":"zeek.rdp.ssl","type":"boolean"},"zeek.rfb.version.client.major":{"category":"zeek","description":"Major version of the client. ","name":"zeek.rfb.version.client.major","type":"keyword"},"zeek.rfb.version.client.minor":{"category":"zeek","description":"Minor version of the client. ","name":"zeek.rfb.version.client.minor","type":"keyword"},"zeek.rfb.version.server.major":{"category":"zeek","description":"Major version of the server. ","name":"zeek.rfb.version.server.major","type":"keyword"},"zeek.rfb.version.server.minor":{"category":"zeek","description":"Minor version of the server. ","name":"zeek.rfb.version.server.minor","type":"keyword"},"zeek.rfb.auth.success":{"category":"zeek","description":"Whether or not authentication was successful. ","name":"zeek.rfb.auth.success","type":"boolean"},"zeek.rfb.auth.method":{"category":"zeek","description":"Identifier of authentication method used. ","name":"zeek.rfb.auth.method","type":"keyword"},"zeek.rfb.share_flag":{"category":"zeek","description":"Whether the client has an exclusive or a shared session. ","name":"zeek.rfb.share_flag","type":"boolean"},"zeek.rfb.desktop_name":{"category":"zeek","description":"Name of the screen that is being shared. ","name":"zeek.rfb.desktop_name","type":"keyword"},"zeek.rfb.width":{"category":"zeek","description":"Width of the screen that is being shared. ","name":"zeek.rfb.width","type":"integer"},"zeek.rfb.height":{"category":"zeek","description":"Height of the screen that is being shared. ","name":"zeek.rfb.height","type":"integer"},"zeek.signature.note":{"category":"zeek","description":"Notice associated with signature event. ","name":"zeek.signature.note","type":"keyword"},"zeek.signature.sig_id":{"category":"zeek","description":"The name of the signature that matched. ","name":"zeek.signature.sig_id","type":"keyword"},"zeek.signature.event_msg":{"category":"zeek","description":"A more descriptive message of the signature-matching event. ","name":"zeek.signature.event_msg","type":"keyword"},"zeek.signature.sub_msg":{"category":"zeek","description":"Extracted payload data or extra message. ","name":"zeek.signature.sub_msg","type":"keyword"},"zeek.signature.sig_count":{"category":"zeek","description":"Number of sigs, usually from summary count. ","name":"zeek.signature.sig_count","type":"integer"},"zeek.signature.host_count":{"category":"zeek","description":"Number of hosts, from a summary count. ","name":"zeek.signature.host_count","type":"integer"},"zeek.sip.transaction_depth":{"category":"zeek","description":"Represents the pipelined depth into the connection of this request/response transaction. ","name":"zeek.sip.transaction_depth","type":"integer"},"zeek.sip.sequence.method":{"category":"zeek","description":"Verb used in the SIP request (INVITE, REGISTER etc.). ","name":"zeek.sip.sequence.method","type":"keyword"},"zeek.sip.sequence.number":{"category":"zeek","description":"Contents of the CSeq: header from the client. ","name":"zeek.sip.sequence.number","type":"keyword"},"zeek.sip.uri":{"category":"zeek","description":"URI used in the request. ","name":"zeek.sip.uri","type":"keyword"},"zeek.sip.date":{"category":"zeek","description":"Contents of the Date: header from the client. ","name":"zeek.sip.date","type":"keyword"},"zeek.sip.request.from":{"category":"zeek","description":"Contents of the request From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ","name":"zeek.sip.request.from","type":"keyword"},"zeek.sip.request.to":{"category":"zeek","description":"Contents of the To: header. ","name":"zeek.sip.request.to","type":"keyword"},"zeek.sip.request.path":{"category":"zeek","description":"The client message transmission path, as extracted from the headers. ","name":"zeek.sip.request.path","type":"keyword"},"zeek.sip.request.body_length":{"category":"zeek","description":"Contents of the Content-Length: header from the client. ","name":"zeek.sip.request.body_length","type":"long"},"zeek.sip.response.from":{"category":"zeek","description":"Contents of the response From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ","name":"zeek.sip.response.from","type":"keyword"},"zeek.sip.response.to":{"category":"zeek","description":"Contents of the response To: header. ","name":"zeek.sip.response.to","type":"keyword"},"zeek.sip.response.path":{"category":"zeek","description":"The server message transmission path, as extracted from the headers. ","name":"zeek.sip.response.path","type":"keyword"},"zeek.sip.response.body_length":{"category":"zeek","description":"Contents of the Content-Length: header from the server. ","name":"zeek.sip.response.body_length","type":"long"},"zeek.sip.reply_to":{"category":"zeek","description":"Contents of the Reply-To: header. ","name":"zeek.sip.reply_to","type":"keyword"},"zeek.sip.call_id":{"category":"zeek","description":"Contents of the Call-ID: header from the client. ","name":"zeek.sip.call_id","type":"keyword"},"zeek.sip.subject":{"category":"zeek","description":"Contents of the Subject: header from the client. ","name":"zeek.sip.subject","type":"keyword"},"zeek.sip.user_agent":{"category":"zeek","description":"Contents of the User-Agent: header from the client. ","name":"zeek.sip.user_agent","type":"keyword"},"zeek.sip.status.code":{"category":"zeek","description":"Status code returned by the server. ","name":"zeek.sip.status.code","type":"integer"},"zeek.sip.status.msg":{"category":"zeek","description":"Status message returned by the server. ","name":"zeek.sip.status.msg","type":"keyword"},"zeek.sip.warning":{"category":"zeek","description":"Contents of the Warning: header. ","name":"zeek.sip.warning","type":"keyword"},"zeek.sip.content_type":{"category":"zeek","description":"Contents of the Content-Type: header from the server. ","name":"zeek.sip.content_type","type":"keyword"},"zeek.smb_cmd.command":{"category":"zeek","description":"The command sent by the client. ","name":"zeek.smb_cmd.command","type":"keyword"},"zeek.smb_cmd.sub_command":{"category":"zeek","description":"The subcommand sent by the client, if present. ","name":"zeek.smb_cmd.sub_command","type":"keyword"},"zeek.smb_cmd.argument":{"category":"zeek","description":"Command argument sent by the client, if any. ","name":"zeek.smb_cmd.argument","type":"keyword"},"zeek.smb_cmd.status":{"category":"zeek","description":"Server reply to the client's command. ","name":"zeek.smb_cmd.status","type":"keyword"},"zeek.smb_cmd.rtt":{"category":"zeek","description":"Round trip time from the request to the response. ","name":"zeek.smb_cmd.rtt","type":"double"},"zeek.smb_cmd.version":{"category":"zeek","description":"Version of SMB for the command. ","name":"zeek.smb_cmd.version","type":"keyword"},"zeek.smb_cmd.username":{"category":"zeek","description":"Authenticated username, if available. ","name":"zeek.smb_cmd.username","type":"keyword"},"zeek.smb_cmd.tree":{"category":"zeek","description":"If this is related to a tree, this is the tree that was used for the current command. ","name":"zeek.smb_cmd.tree","type":"keyword"},"zeek.smb_cmd.tree_service":{"category":"zeek","description":"The type of tree (disk share, printer share, named pipe, etc.). ","name":"zeek.smb_cmd.tree_service","type":"keyword"},"zeek.smb_cmd.file.name":{"category":"zeek","description":"Filename if one was seen. ","name":"zeek.smb_cmd.file.name","type":"keyword"},"zeek.smb_cmd.file.action":{"category":"zeek","description":"Action this log record represents. ","name":"zeek.smb_cmd.file.action","type":"keyword"},"zeek.smb_cmd.file.uid":{"category":"zeek","description":"UID of the referenced file. ","name":"zeek.smb_cmd.file.uid","type":"keyword"},"zeek.smb_cmd.file.host.tx":{"category":"zeek","description":"Address of the transmitting host. ","name":"zeek.smb_cmd.file.host.tx","type":"ip"},"zeek.smb_cmd.file.host.rx":{"category":"zeek","description":"Address of the receiving host. ","name":"zeek.smb_cmd.file.host.rx","type":"ip"},"zeek.smb_cmd.smb1_offered_dialects":{"category":"zeek","description":"Present if base/protocols/smb/smb1-main.bro is loaded. Dialects offered by the client. ","name":"zeek.smb_cmd.smb1_offered_dialects","type":"keyword"},"zeek.smb_cmd.smb2_offered_dialects":{"category":"zeek","description":"Present if base/protocols/smb/smb2-main.bro is loaded. Dialects offered by the client. ","name":"zeek.smb_cmd.smb2_offered_dialects","type":"integer"},"zeek.smb_files.action":{"category":"zeek","description":"Action this log record represents. ","name":"zeek.smb_files.action","type":"keyword"},"zeek.smb_files.fid":{"category":"zeek","description":"ID referencing this file. ","name":"zeek.smb_files.fid","type":"integer"},"zeek.smb_files.name":{"category":"zeek","description":"Filename if one was seen. ","name":"zeek.smb_files.name","type":"keyword"},"zeek.smb_files.path":{"category":"zeek","description":"Path pulled from the tree this file was transferred to or from. ","name":"zeek.smb_files.path","type":"keyword"},"zeek.smb_files.previous_name":{"category":"zeek","description":"If the rename action was seen, this will be the file's previous name. ","name":"zeek.smb_files.previous_name","type":"keyword"},"zeek.smb_files.size":{"category":"zeek","description":"Byte size of the file. ","name":"zeek.smb_files.size","type":"long"},"zeek.smb_files.times.accessed":{"category":"zeek","description":"The file's access time. ","name":"zeek.smb_files.times.accessed","type":"date"},"zeek.smb_files.times.changed":{"category":"zeek","description":"The file's change time. ","name":"zeek.smb_files.times.changed","type":"date"},"zeek.smb_files.times.created":{"category":"zeek","description":"The file's create time. ","name":"zeek.smb_files.times.created","type":"date"},"zeek.smb_files.times.modified":{"category":"zeek","description":"The file's modify time. ","name":"zeek.smb_files.times.modified","type":"date"},"zeek.smb_files.uuid":{"category":"zeek","description":"UUID referencing this file if DCE/RPC. ","name":"zeek.smb_files.uuid","type":"keyword"},"zeek.smb_mapping.path":{"category":"zeek","description":"Name of the tree path. ","name":"zeek.smb_mapping.path","type":"keyword"},"zeek.smb_mapping.service":{"category":"zeek","description":"The type of resource of the tree (disk share, printer share, named pipe, etc.). ","name":"zeek.smb_mapping.service","type":"keyword"},"zeek.smb_mapping.native_file_system":{"category":"zeek","description":"File system of the tree. ","name":"zeek.smb_mapping.native_file_system","type":"keyword"},"zeek.smb_mapping.share_type":{"category":"zeek","description":"If this is SMB2, a share type will be included. For SMB1, the type of share will be deduced and included as well. ","name":"zeek.smb_mapping.share_type","type":"keyword"},"zeek.smtp.transaction_depth":{"category":"zeek","description":"A count to represent the depth of this message transaction in a single connection where multiple messages were transferred. ","name":"zeek.smtp.transaction_depth","type":"integer"},"zeek.smtp.helo":{"category":"zeek","description":"Contents of the Helo header. ","name":"zeek.smtp.helo","type":"keyword"},"zeek.smtp.mail_from":{"category":"zeek","description":"Email addresses found in the MAIL FROM header. ","name":"zeek.smtp.mail_from","type":"keyword"},"zeek.smtp.rcpt_to":{"category":"zeek","description":"Email addresses found in the RCPT TO header. ","name":"zeek.smtp.rcpt_to","type":"keyword"},"zeek.smtp.date":{"category":"zeek","description":"Contents of the Date header. ","name":"zeek.smtp.date","type":"date"},"zeek.smtp.from":{"category":"zeek","description":"Contents of the From header. ","name":"zeek.smtp.from","type":"keyword"},"zeek.smtp.to":{"category":"zeek","description":"Contents of the To header. ","name":"zeek.smtp.to","type":"keyword"},"zeek.smtp.cc":{"category":"zeek","description":"Contents of the CC header. ","name":"zeek.smtp.cc","type":"keyword"},"zeek.smtp.reply_to":{"category":"zeek","description":"Contents of the ReplyTo header. ","name":"zeek.smtp.reply_to","type":"keyword"},"zeek.smtp.msg_id":{"category":"zeek","description":"Contents of the MsgID header. ","name":"zeek.smtp.msg_id","type":"keyword"},"zeek.smtp.in_reply_to":{"category":"zeek","description":"Contents of the In-Reply-To header. ","name":"zeek.smtp.in_reply_to","type":"keyword"},"zeek.smtp.subject":{"category":"zeek","description":"Contents of the Subject header. ","name":"zeek.smtp.subject","type":"keyword"},"zeek.smtp.x_originating_ip":{"category":"zeek","description":"Contents of the X-Originating-IP header. ","name":"zeek.smtp.x_originating_ip","type":"keyword"},"zeek.smtp.first_received":{"category":"zeek","description":"Contents of the first Received header. ","name":"zeek.smtp.first_received","type":"keyword"},"zeek.smtp.second_received":{"category":"zeek","description":"Contents of the second Received header. ","name":"zeek.smtp.second_received","type":"keyword"},"zeek.smtp.last_reply":{"category":"zeek","description":"The last message that the server sent to the client. ","name":"zeek.smtp.last_reply","type":"keyword"},"zeek.smtp.path":{"category":"zeek","description":"The message transmission path, as extracted from the headers. ","name":"zeek.smtp.path","type":"ip"},"zeek.smtp.user_agent":{"category":"zeek","description":"Value of the User-Agent header from the client. ","name":"zeek.smtp.user_agent","type":"keyword"},"zeek.smtp.tls":{"category":"zeek","description":"Indicates that the connection has switched to using TLS. ","name":"zeek.smtp.tls","type":"boolean"},"zeek.smtp.process_received_from":{"category":"zeek","description":"Indicates if the \"Received: from\" headers should still be processed. ","name":"zeek.smtp.process_received_from","type":"boolean"},"zeek.smtp.has_client_activity":{"category":"zeek","description":"Indicates if client activity has been seen, but not yet logged. ","name":"zeek.smtp.has_client_activity","type":"boolean"},"zeek.smtp.fuids":{"category":"zeek","description":"(present if base/protocols/smtp/files.bro is loaded) An ordered vector of file unique IDs seen attached to the message. ","name":"zeek.smtp.fuids","type":"keyword"},"zeek.smtp.is_webmail":{"category":"zeek","description":"Indicates if the message was sent through a webmail interface. ","name":"zeek.smtp.is_webmail","type":"boolean"},"zeek.snmp.duration":{"category":"zeek","description":"The amount of time between the first packet beloning to the SNMP session and the latest one seen. ","name":"zeek.snmp.duration","type":"double"},"zeek.snmp.version":{"category":"zeek","description":"The version of SNMP being used. ","name":"zeek.snmp.version","type":"keyword"},"zeek.snmp.community":{"category":"zeek","description":"The community string of the first SNMP packet associated with the session. This is used as part of SNMP's (v1 and v2c) administrative/security framework. See RFC 1157 or RFC 1901. ","name":"zeek.snmp.community","type":"keyword"},"zeek.snmp.get.requests":{"category":"zeek","description":"The number of variable bindings in GetRequest/GetNextRequest PDUs seen for the session. ","name":"zeek.snmp.get.requests","type":"integer"},"zeek.snmp.get.bulk_requests":{"category":"zeek","description":"The number of variable bindings in GetBulkRequest PDUs seen for the session. ","name":"zeek.snmp.get.bulk_requests","type":"integer"},"zeek.snmp.get.responses":{"category":"zeek","description":"The number of variable bindings in GetResponse/Response PDUs seen for the session. ","name":"zeek.snmp.get.responses","type":"integer"},"zeek.snmp.set.requests":{"category":"zeek","description":"The number of variable bindings in SetRequest PDUs seen for the session. ","name":"zeek.snmp.set.requests","type":"integer"},"zeek.snmp.display_string":{"category":"zeek","description":"A system description of the SNMP responder endpoint. ","name":"zeek.snmp.display_string","type":"keyword"},"zeek.snmp.up_since":{"category":"zeek","description":"The time at which the SNMP responder endpoint claims it's been up since. ","name":"zeek.snmp.up_since","type":"date"},"zeek.socks.version":{"category":"zeek","description":"Protocol version of SOCKS. ","name":"zeek.socks.version","type":"integer"},"zeek.socks.user":{"category":"zeek","description":"Username used to request a login to the proxy. ","name":"zeek.socks.user","type":"keyword"},"zeek.socks.password":{"category":"zeek","description":"Password used to request a login to the proxy. ","name":"zeek.socks.password","type":"keyword"},"zeek.socks.status":{"category":"zeek","description":"Server status for the attempt at using the proxy. ","name":"zeek.socks.status","type":"keyword"},"zeek.socks.request.host":{"category":"zeek","description":"Client requested SOCKS address. Could be an address, a name or both. ","name":"zeek.socks.request.host","type":"keyword"},"zeek.socks.request.port":{"category":"zeek","description":"Client requested port. ","name":"zeek.socks.request.port","type":"integer"},"zeek.socks.bound.host":{"category":"zeek","description":"Server bound address. Could be an address, a name or both. ","name":"zeek.socks.bound.host","type":"keyword"},"zeek.socks.bound.port":{"category":"zeek","description":"Server bound port. ","name":"zeek.socks.bound.port","type":"integer"},"zeek.socks.capture_password":{"category":"zeek","description":"Determines if the password will be captured for this request. ","name":"zeek.socks.capture_password","type":"boolean"},"zeek.ssh.client":{"category":"zeek","description":"The client's version string. ","name":"zeek.ssh.client","type":"keyword"},"zeek.ssh.direction":{"category":"zeek","description":"Direction of the connection. If the client was a local host logging into an external host, this would be OUTBOUND. INBOUND would be set for the opposite situation. ","name":"zeek.ssh.direction","type":"keyword"},"zeek.ssh.host_key":{"category":"zeek","description":"The server's key thumbprint. ","name":"zeek.ssh.host_key","type":"keyword"},"zeek.ssh.server":{"category":"zeek","description":"The server's version string. ","name":"zeek.ssh.server","type":"keyword"},"zeek.ssh.version":{"category":"zeek","description":"SSH major version (1 or 2). ","name":"zeek.ssh.version","type":"integer"},"zeek.ssh.algorithm.cipher":{"category":"zeek","description":"The encryption algorithm in use. ","name":"zeek.ssh.algorithm.cipher","type":"keyword"},"zeek.ssh.algorithm.compression":{"category":"zeek","description":"The compression algorithm in use. ","name":"zeek.ssh.algorithm.compression","type":"keyword"},"zeek.ssh.algorithm.host_key":{"category":"zeek","description":"The server host key's algorithm. ","name":"zeek.ssh.algorithm.host_key","type":"keyword"},"zeek.ssh.algorithm.key_exchange":{"category":"zeek","description":"The key exchange algorithm in use. ","name":"zeek.ssh.algorithm.key_exchange","type":"keyword"},"zeek.ssh.algorithm.mac":{"category":"zeek","description":"The signing (MAC) algorithm in use. ","name":"zeek.ssh.algorithm.mac","type":"keyword"},"zeek.ssh.auth.attempts":{"category":"zeek","description":"The number of authentication attemps we observed. There's always at least one, since some servers might support no authentication at all. It's important to note that not all of these are failures, since some servers require two-factor auth (e.g. password AND pubkey). ","name":"zeek.ssh.auth.attempts","type":"integer"},"zeek.ssh.auth.success":{"category":"zeek","description":"Authentication result. ","name":"zeek.ssh.auth.success","type":"boolean"},"zeek.ssl.version":{"category":"zeek","description":"SSL/TLS version that was logged. ","name":"zeek.ssl.version","type":"keyword"},"zeek.ssl.cipher":{"category":"zeek","description":"SSL/TLS cipher suite that was logged. ","name":"zeek.ssl.cipher","type":"keyword"},"zeek.ssl.curve":{"category":"zeek","description":"Elliptic curve that was logged when using ECDH/ECDHE. ","name":"zeek.ssl.curve","type":"keyword"},"zeek.ssl.resumed":{"category":"zeek","description":"Flag to indicate if the session was resumed reusing the key material exchanged in an earlier connection. ","name":"zeek.ssl.resumed","type":"boolean"},"zeek.ssl.next_protocol":{"category":"zeek","description":"Next protocol the server chose using the application layer next protocol extension. ","name":"zeek.ssl.next_protocol","type":"keyword"},"zeek.ssl.established":{"category":"zeek","description":"Flag to indicate if this ssl session has been established successfully. ","name":"zeek.ssl.established","type":"boolean"},"zeek.ssl.validation.status":{"category":"zeek","description":"Result of certificate validation for this connection. ","name":"zeek.ssl.validation.status","type":"keyword"},"zeek.ssl.validation.code":{"category":"zeek","description":"Result of certificate validation for this connection, given as OpenSSL validation code. ","name":"zeek.ssl.validation.code","type":"keyword"},"zeek.ssl.last_alert":{"category":"zeek","description":"Last alert that was seen during the connection. ","name":"zeek.ssl.last_alert","type":"keyword"},"zeek.ssl.server.name":{"category":"zeek","description":"Value of the Server Name Indicator SSL/TLS extension. It indicates the server name that the client was requesting. ","name":"zeek.ssl.server.name","type":"keyword"},"zeek.ssl.server.cert_chain":{"category":"zeek","description":"Chain of certificates offered by the server to validate its complete signing chain. ","name":"zeek.ssl.server.cert_chain","type":"keyword"},"zeek.ssl.server.cert_chain_fuids":{"category":"zeek","description":"An ordered vector of certificate file identifiers for the certificates offered by the server. ","name":"zeek.ssl.server.cert_chain_fuids","type":"keyword"},"zeek.ssl.server.issuer.common_name":{"category":"zeek","description":"Common name of the signer of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.issuer.common_name","type":"keyword"},"zeek.ssl.server.issuer.country":{"category":"zeek","description":"Country code of the signer of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.issuer.country","type":"keyword"},"zeek.ssl.server.issuer.locality":{"category":"zeek","description":"Locality of the signer of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.issuer.locality","type":"keyword"},"zeek.ssl.server.issuer.organization":{"category":"zeek","description":"Organization of the signer of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.issuer.organization","type":"keyword"},"zeek.ssl.server.issuer.organizational_unit":{"category":"zeek","description":"Organizational unit of the signer of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.issuer.organizational_unit","type":"keyword"},"zeek.ssl.server.issuer.state":{"category":"zeek","description":"State or province name of the signer of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.issuer.state","type":"keyword"},"zeek.ssl.server.subject.common_name":{"category":"zeek","description":"Common name of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.subject.common_name","type":"keyword"},"zeek.ssl.server.subject.country":{"category":"zeek","description":"Country code of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.subject.country","type":"keyword"},"zeek.ssl.server.subject.locality":{"category":"zeek","description":"Locality of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.subject.locality","type":"keyword"},"zeek.ssl.server.subject.organization":{"category":"zeek","description":"Organization of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.subject.organization","type":"keyword"},"zeek.ssl.server.subject.organizational_unit":{"category":"zeek","description":"Organizational unit of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.subject.organizational_unit","type":"keyword"},"zeek.ssl.server.subject.state":{"category":"zeek","description":"State or province name of the X.509 certificate offered by the server. ","name":"zeek.ssl.server.subject.state","type":"keyword"},"zeek.ssl.client.cert_chain":{"category":"zeek","description":"Chain of certificates offered by the client to validate its complete signing chain. ","name":"zeek.ssl.client.cert_chain","type":"keyword"},"zeek.ssl.client.cert_chain_fuids":{"category":"zeek","description":"An ordered vector of certificate file identifiers for the certificates offered by the client. ","name":"zeek.ssl.client.cert_chain_fuids","type":"keyword"},"zeek.ssl.client.issuer.common_name":{"category":"zeek","description":"Common name of the signer of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.issuer.common_name","type":"keyword"},"zeek.ssl.client.issuer.country":{"category":"zeek","description":"Country code of the signer of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.issuer.country","type":"keyword"},"zeek.ssl.client.issuer.locality":{"category":"zeek","description":"Locality of the signer of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.issuer.locality","type":"keyword"},"zeek.ssl.client.issuer.organization":{"category":"zeek","description":"Organization of the signer of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.issuer.organization","type":"keyword"},"zeek.ssl.client.issuer.organizational_unit":{"category":"zeek","description":"Organizational unit of the signer of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.issuer.organizational_unit","type":"keyword"},"zeek.ssl.client.issuer.state":{"category":"zeek","description":"State or province name of the signer of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.issuer.state","type":"keyword"},"zeek.ssl.client.subject.common_name":{"category":"zeek","description":"Common name of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.subject.common_name","type":"keyword"},"zeek.ssl.client.subject.country":{"category":"zeek","description":"Country code of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.subject.country","type":"keyword"},"zeek.ssl.client.subject.locality":{"category":"zeek","description":"Locality of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.subject.locality","type":"keyword"},"zeek.ssl.client.subject.organization":{"category":"zeek","description":"Organization of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.subject.organization","type":"keyword"},"zeek.ssl.client.subject.organizational_unit":{"category":"zeek","description":"Organizational unit of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.subject.organizational_unit","type":"keyword"},"zeek.ssl.client.subject.state":{"category":"zeek","description":"State or province name of the X.509 certificate offered by the client. ","name":"zeek.ssl.client.subject.state","type":"keyword"},"zeek.stats.peer":{"category":"zeek","description":"Peer that generated this log. Mostly for clusters. ","name":"zeek.stats.peer","type":"keyword"},"zeek.stats.memory":{"category":"zeek","description":"Amount of memory currently in use in MB. ","name":"zeek.stats.memory","type":"integer"},"zeek.stats.packets.processed":{"category":"zeek","description":"Number of packets processed since the last stats interval. ","name":"zeek.stats.packets.processed","type":"long"},"zeek.stats.packets.dropped":{"category":"zeek","description":"Number of packets dropped since the last stats interval if reading live traffic. ","name":"zeek.stats.packets.dropped","type":"long"},"zeek.stats.packets.received":{"category":"zeek","description":"Number of packets seen on the link since the last stats interval if reading live traffic. ","name":"zeek.stats.packets.received","type":"long"},"zeek.stats.bytes.received":{"category":"zeek","description":"Number of bytes received since the last stats interval if reading live traffic. ","name":"zeek.stats.bytes.received","type":"long"},"zeek.stats.connections.tcp.active":{"category":"zeek","description":"TCP connections currently in memory. ","name":"zeek.stats.connections.tcp.active","type":"integer"},"zeek.stats.connections.tcp.count":{"category":"zeek","description":"TCP connections seen since last stats interval. ","name":"zeek.stats.connections.tcp.count","type":"integer"},"zeek.stats.connections.udp.active":{"category":"zeek","description":"UDP connections currently in memory. ","name":"zeek.stats.connections.udp.active","type":"integer"},"zeek.stats.connections.udp.count":{"category":"zeek","description":"UDP connections seen since last stats interval. ","name":"zeek.stats.connections.udp.count","type":"integer"},"zeek.stats.connections.icmp.active":{"category":"zeek","description":"ICMP connections currently in memory. ","name":"zeek.stats.connections.icmp.active","type":"integer"},"zeek.stats.connections.icmp.count":{"category":"zeek","description":"ICMP connections seen since last stats interval. ","name":"zeek.stats.connections.icmp.count","type":"integer"},"zeek.stats.events.processed":{"category":"zeek","description":"Number of events processed since the last stats interval. ","name":"zeek.stats.events.processed","type":"integer"},"zeek.stats.events.queued":{"category":"zeek","description":"Number of events that have been queued since the last stats interval. ","name":"zeek.stats.events.queued","type":"integer"},"zeek.stats.timers.count":{"category":"zeek","description":"Number of timers scheduled since last stats interval. ","name":"zeek.stats.timers.count","type":"integer"},"zeek.stats.timers.active":{"category":"zeek","description":"Current number of scheduled timers. ","name":"zeek.stats.timers.active","type":"integer"},"zeek.stats.files.count":{"category":"zeek","description":"Number of files seen since last stats interval. ","name":"zeek.stats.files.count","type":"integer"},"zeek.stats.files.active":{"category":"zeek","description":"Current number of files actively being seen. ","name":"zeek.stats.files.active","type":"integer"},"zeek.stats.dns_requests.count":{"category":"zeek","description":"Number of DNS requests seen since last stats interval. ","name":"zeek.stats.dns_requests.count","type":"integer"},"zeek.stats.dns_requests.active":{"category":"zeek","description":"Current number of DNS requests awaiting a reply. ","name":"zeek.stats.dns_requests.active","type":"integer"},"zeek.stats.reassembly_size.tcp":{"category":"zeek","description":"Current size of TCP data in reassembly. ","name":"zeek.stats.reassembly_size.tcp","type":"integer"},"zeek.stats.reassembly_size.file":{"category":"zeek","description":"Current size of File data in reassembly. ","name":"zeek.stats.reassembly_size.file","type":"integer"},"zeek.stats.reassembly_size.frag":{"category":"zeek","description":"Current size of packet fragment data in reassembly. ","name":"zeek.stats.reassembly_size.frag","type":"integer"},"zeek.stats.reassembly_size.unknown":{"category":"zeek","description":"Current size of unknown data in reassembly (this is only PIA buffer right now). ","name":"zeek.stats.reassembly_size.unknown","type":"integer"},"zeek.stats.timestamp_lag":{"category":"zeek","description":"Lag between the wall clock and packet timestamps if reading live traffic. ","name":"zeek.stats.timestamp_lag","type":"integer"},"zeek.syslog.facility":{"category":"zeek","description":"Syslog facility for the message. ","name":"zeek.syslog.facility","type":"keyword"},"zeek.syslog.severity":{"category":"zeek","description":"Syslog severity for the message. ","name":"zeek.syslog.severity","type":"keyword"},"zeek.syslog.message":{"category":"zeek","description":"The plain text message. ","name":"zeek.syslog.message","type":"keyword"},"zeek.tunnel.type":{"category":"zeek","description":"The type of tunnel. ","name":"zeek.tunnel.type","type":"keyword"},"zeek.tunnel.action":{"category":"zeek","description":"The type of activity that occurred. ","name":"zeek.tunnel.action","type":"keyword"},"zeek.weird.name":{"category":"zeek","description":"The name of the weird that occurred. ","name":"zeek.weird.name","type":"keyword"},"zeek.weird.additional_info":{"category":"zeek","description":"Additional information accompanying the weird if any. ","name":"zeek.weird.additional_info","type":"keyword"},"zeek.weird.notice":{"category":"zeek","description":"Indicate if this weird was also turned into a notice. ","name":"zeek.weird.notice","type":"boolean"},"zeek.weird.peer":{"category":"zeek","description":"The peer that originated this weird. This is helpful in cluster deployments if a particular cluster node is having trouble to help identify which node is having trouble. ","name":"zeek.weird.peer","type":"keyword"},"zeek.weird.identifier":{"category":"zeek","description":"This field is to be provided when a weird is generated for the purpose of deduplicating weirds. The identifier string should be unique for a single instance of the weird. This field is used to define when a weird is conceptually a duplicate of a previous weird. ","name":"zeek.weird.identifier","type":"keyword"},"zeek.x509.id":{"category":"zeek","description":"File id of this certificate. ","name":"zeek.x509.id","type":"keyword"},"zeek.x509.certificate.version":{"category":"zeek","description":"Version number. ","name":"zeek.x509.certificate.version","type":"integer"},"zeek.x509.certificate.serial":{"category":"zeek","description":"Serial number. ","name":"zeek.x509.certificate.serial","type":"keyword"},"zeek.x509.certificate.subject.country":{"category":"zeek","description":"Country provided in the certificate subject. ","name":"zeek.x509.certificate.subject.country","type":"keyword"},"zeek.x509.certificate.subject.common_name":{"category":"zeek","description":"Common name provided in the certificate subject. ","name":"zeek.x509.certificate.subject.common_name","type":"keyword"},"zeek.x509.certificate.subject.locality":{"category":"zeek","description":"Locality provided in the certificate subject. ","name":"zeek.x509.certificate.subject.locality","type":"keyword"},"zeek.x509.certificate.subject.organization":{"category":"zeek","description":"Organization provided in the certificate subject. ","name":"zeek.x509.certificate.subject.organization","type":"keyword"},"zeek.x509.certificate.subject.organizational_unit":{"category":"zeek","description":"Organizational unit provided in the certificate subject. ","name":"zeek.x509.certificate.subject.organizational_unit","type":"keyword"},"zeek.x509.certificate.subject.state":{"category":"zeek","description":"State or province provided in the certificate subject. ","name":"zeek.x509.certificate.subject.state","type":"keyword"},"zeek.x509.certificate.issuer.country":{"category":"zeek","description":"Country provided in the certificate issuer field. ","name":"zeek.x509.certificate.issuer.country","type":"keyword"},"zeek.x509.certificate.issuer.common_name":{"category":"zeek","description":"Common name provided in the certificate issuer field. ","name":"zeek.x509.certificate.issuer.common_name","type":"keyword"},"zeek.x509.certificate.issuer.locality":{"category":"zeek","description":"Locality provided in the certificate issuer field. ","name":"zeek.x509.certificate.issuer.locality","type":"keyword"},"zeek.x509.certificate.issuer.organization":{"category":"zeek","description":"Organization provided in the certificate issuer field. ","name":"zeek.x509.certificate.issuer.organization","type":"keyword"},"zeek.x509.certificate.issuer.organizational_unit":{"category":"zeek","description":"Organizational unit provided in the certificate issuer field. ","name":"zeek.x509.certificate.issuer.organizational_unit","type":"keyword"},"zeek.x509.certificate.issuer.state":{"category":"zeek","description":"State or province provided in the certificate issuer field. ","name":"zeek.x509.certificate.issuer.state","type":"keyword"},"zeek.x509.certificate.common_name":{"category":"zeek","description":"Last (most specific) common name. ","name":"zeek.x509.certificate.common_name","type":"keyword"},"zeek.x509.certificate.valid.from":{"category":"zeek","description":"Timestamp before when certificate is not valid. ","name":"zeek.x509.certificate.valid.from","type":"date"},"zeek.x509.certificate.valid.until":{"category":"zeek","description":"Timestamp after when certificate is not valid. ","name":"zeek.x509.certificate.valid.until","type":"date"},"zeek.x509.certificate.key.algorithm":{"category":"zeek","description":"Name of the key algorithm. ","name":"zeek.x509.certificate.key.algorithm","type":"keyword"},"zeek.x509.certificate.key.type":{"category":"zeek","description":"Key type, if key parseable by openssl (either rsa, dsa or ec). ","name":"zeek.x509.certificate.key.type","type":"keyword"},"zeek.x509.certificate.key.length":{"category":"zeek","description":"Key length in bits. ","name":"zeek.x509.certificate.key.length","type":"integer"},"zeek.x509.certificate.signature_algorithm":{"category":"zeek","description":"Name of the signature algorithm. ","name":"zeek.x509.certificate.signature_algorithm","type":"keyword"},"zeek.x509.certificate.exponent":{"category":"zeek","description":"Exponent, if RSA-certificate. ","name":"zeek.x509.certificate.exponent","type":"keyword"},"zeek.x509.certificate.curve":{"category":"zeek","description":"Curve, if EC-certificate. ","name":"zeek.x509.certificate.curve","type":"keyword"},"zeek.x509.san.dns":{"category":"zeek","description":"List of DNS entries in SAN. ","name":"zeek.x509.san.dns","type":"keyword"},"zeek.x509.san.uri":{"category":"zeek","description":"List of URI entries in SAN. ","name":"zeek.x509.san.uri","type":"keyword"},"zeek.x509.san.email":{"category":"zeek","description":"List of email entries in SAN. ","name":"zeek.x509.san.email","type":"keyword"},"zeek.x509.san.ip":{"category":"zeek","description":"List of IP entries in SAN. ","name":"zeek.x509.san.ip","type":"ip"},"zeek.x509.san.other_fields":{"category":"zeek","description":"True if the certificate contained other, not recognized or parsed name fields. ","name":"zeek.x509.san.other_fields","type":"boolean"},"zeek.x509.basic_constraints.certificate_authority":{"category":"zeek","description":"CA flag set or not. ","name":"zeek.x509.basic_constraints.certificate_authority","type":"boolean"},"zeek.x509.basic_constraints.path_length":{"category":"zeek","description":"Maximum path length. ","name":"zeek.x509.basic_constraints.path_length","type":"integer"},"zeek.x509.log_cert":{"category":"zeek","description":"Present if policy/protocols/ssl/log-hostcerts-only.bro is loaded Logging of certificate is suppressed if set to F. ","name":"zeek.x509.log_cert","type":"boolean"},"zookeeper.audit.session":{"category":"zookeeper","description":"Client session id ","name":"zookeeper.audit.session","type":"keyword"},"zookeeper.audit.znode":{"category":"zookeeper","description":"Path of the znode ","name":"zookeeper.audit.znode","type":"keyword"},"zookeeper.audit.znode_type":{"category":"zookeeper","description":"Type of znode in case of creation operation ","name":"zookeeper.audit.znode_type","type":"keyword"},"zookeeper.audit.acl":{"category":"zookeeper","description":"String representation of znode ACL like cdrwa(create, delete,read, write, admin). This is logged only for setAcl operation ","name":"zookeeper.audit.acl","type":"keyword"},"zookeeper.audit.result":{"category":"zookeeper","description":"Result of the operation. Possible values are (success/failure/invoked). Result \"invoked\" is used for serverStop operation because stop is logged before ensuring that server actually stopped. ","name":"zookeeper.audit.result","type":"keyword"},"zookeeper.audit.user":{"category":"zookeeper","description":"Comma separated list of users who are associate with a client session ","name":"zookeeper.audit.user","type":"keyword"},"zookeeper.log":{"category":"zookeeper","description":"ZooKeeper logs. ","name":"zookeeper.log","type":"group"},"zoom.master_account_id":{"category":"zoom","description":"Master Account related to a specific Sub Account ","name":"zoom.master_account_id","type":"keyword"},"zoom.sub_account_id":{"category":"zoom","description":"Related Sub Account ","name":"zoom.sub_account_id","type":"keyword"},"zoom.operator_id":{"category":"zoom","description":"UserID that triggered the event ","name":"zoom.operator_id","type":"keyword"},"zoom.operator":{"category":"zoom","description":"Username/Email related to the user that triggered the event ","name":"zoom.operator","type":"keyword"},"zoom.account_id":{"category":"zoom","description":"Related accountID to the event ","name":"zoom.account_id","type":"keyword"},"zoom.timestamp":{"category":"zoom","description":"Timestamp related to the event ","name":"zoom.timestamp","type":"date"},"zoom.creation_type":{"category":"zoom","description":"Creation type ","name":"zoom.creation_type","type":"keyword"},"zoom.account.owner_id":{"category":"zoom","description":"UserID of the user whose sub account was created/disassociated ","name":"zoom.account.owner_id","type":"keyword"},"zoom.account.email":{"category":"zoom","description":"Email related to the user the action was performed on ","name":"zoom.account.email","type":"keyword"},"zoom.account.owner_email":{"category":"zoom","description":"Email of the user whose sub account was created/disassociated ","name":"zoom.account.owner_email","type":"keyword"},"zoom.account.account_name":{"category":"zoom","description":"When an account name is updated, this is the new value set ","name":"zoom.account.account_name","type":"keyword"},"zoom.account.account_alias":{"category":"zoom","description":"When an account alias is updated, this is the new value set ","name":"zoom.account.account_alias","type":"keyword"},"zoom.account.account_support_name":{"category":"zoom","description":"When an account support_name is updated, this is the new value set ","name":"zoom.account.account_support_name","type":"keyword"},"zoom.account.account_support_email":{"category":"zoom","description":"When an account support_email is updated, this is the new value set ","name":"zoom.account.account_support_email","type":"keyword"},"zoom.chat_channel.name":{"category":"zoom","description":"The name of the channel that has been added/modified/deleted ","name":"zoom.chat_channel.name","type":"keyword"},"zoom.chat_channel.id":{"category":"zoom","description":"The ID of the channel that has been added/modified/deleted ","name":"zoom.chat_channel.id","type":"keyword"},"zoom.chat_channel.type":{"category":"zoom","description":"Type of channel related to the event. Can be 1(Invite-Only), 2(Private) or 3(Public) ","name":"zoom.chat_channel.type","type":"keyword"},"zoom.chat_message.id":{"category":"zoom","description":"Unique ID of the related chat message ","name":"zoom.chat_message.id","type":"keyword"},"zoom.chat_message.type":{"category":"zoom","description":"Type of message, can be either \"to_contact\" or \"to_channel\" ","name":"zoom.chat_message.type","type":"keyword"},"zoom.chat_message.session_id":{"category":"zoom","description":"SessionID for the channel related to the message ","name":"zoom.chat_message.session_id","type":"keyword"},"zoom.chat_message.contact_email":{"category":"zoom","description":"Email address related to the user sending the message ","name":"zoom.chat_message.contact_email","type":"keyword"},"zoom.chat_message.contact_id":{"category":"zoom","description":"UserID belonging to the user receiving a message ","name":"zoom.chat_message.contact_id","type":"keyword"},"zoom.chat_message.channel_id":{"category":"zoom","description":"ChannelID related to the message ","name":"zoom.chat_message.channel_id","type":"keyword"},"zoom.chat_message.channel_name":{"category":"zoom","description":"Channel name related to the message ","name":"zoom.chat_message.channel_name","type":"keyword"},"zoom.chat_message.message":{"category":"zoom","description":"A string containing the full message that was sent ","name":"zoom.chat_message.message","type":"keyword"},"zoom.meeting.id":{"category":"zoom","description":"Unique ID of the related meeting ","name":"zoom.meeting.id","type":"keyword"},"zoom.meeting.uuid":{"category":"zoom","description":"The UUID of the related meeting ","name":"zoom.meeting.uuid","type":"keyword"},"zoom.meeting.host_id":{"category":"zoom","description":"The UserID of the configured meeting host ","name":"zoom.meeting.host_id","type":"keyword"},"zoom.meeting.topic":{"category":"zoom","description":"Topic of the related meeting ","name":"zoom.meeting.topic","type":"keyword"},"zoom.meeting.type":{"category":"zoom","description":"Type of meeting created ","name":"zoom.meeting.type","type":"keyword"},"zoom.meeting.start_time":{"category":"zoom","description":"Date and time the meeting started ","name":"zoom.meeting.start_time","type":"date"},"zoom.meeting.timezone":{"category":"zoom","description":"Which timezone is used for the meeting timestamps ","name":"zoom.meeting.timezone","type":"keyword"},"zoom.meeting.duration":{"category":"zoom","description":"The duration of a meeting in minutes ","name":"zoom.meeting.duration","type":"long"},"zoom.meeting.issues":{"category":"zoom","description":"When a user reports an issue with the meeting, for example: \"Unstable audio quality\" ","name":"zoom.meeting.issues","type":"keyword"},"zoom.meeting.password":{"category":"zoom","description":"Password related to the meeting ","name":"zoom.meeting.password","type":"keyword"},"zoom.phone.id":{"category":"zoom","description":"Unique ID for the phone or conversation ","name":"zoom.phone.id","type":"keyword"},"zoom.phone.user_id":{"category":"zoom","description":"UserID for the phone owner related to a Call Log being completed ","name":"zoom.phone.user_id","type":"keyword"},"zoom.phone.download_url":{"category":"zoom","description":"Download URL for the voicemail ","name":"zoom.phone.download_url","type":"keyword"},"zoom.phone.ringing_start_time":{"category":"zoom","description":"The timestamp when a ringtone was established to the callee ","name":"zoom.phone.ringing_start_time","type":"date"},"zoom.phone.connected_start_time":{"category":"zoom","description":"The date and time when a ringtone was established to the callee ","name":"zoom.phone.connected_start_time","type":"date"},"zoom.phone.answer_start_time":{"category":"zoom","description":"The date and time when the call was answered ","name":"zoom.phone.answer_start_time","type":"date"},"zoom.phone.call_end_time":{"category":"zoom","description":"The date and time when the call ended ","name":"zoom.phone.call_end_time","type":"date"},"zoom.phone.call_id":{"category":"zoom","description":"Unique ID of the related call ","name":"zoom.phone.call_id","type":"keyword"},"zoom.phone.duration":{"category":"zoom","description":"Duration of a voicemail in minutes ","name":"zoom.phone.duration","type":"long"},"zoom.phone.caller.id":{"category":"zoom","description":"UserID of the caller related to the voicemail/call ","name":"zoom.phone.caller.id","type":"keyword"},"zoom.phone.caller.user_id":{"category":"zoom","description":"UserID of the person which initiated the call ","name":"zoom.phone.caller.user_id","type":"keyword"},"zoom.phone.caller.number_type":{"category":"zoom","description":"The type of number, can be 1(Internal) or 2(External) ","name":"zoom.phone.caller.number_type","type":"keyword"},"zoom.phone.caller.name":{"category":"zoom","description":"The name of the related callee ","name":"zoom.phone.caller.name","type":"keyword"},"zoom.phone.caller.phone_number":{"category":"zoom","description":"Phone Number of the caller related to the call ","name":"zoom.phone.caller.phone_number","type":"keyword"},"zoom.phone.caller.extension_type":{"category":"zoom","description":"Extension type of the caller number, can be user, callQueue, autoReceptionist or shareLineGroup ","name":"zoom.phone.caller.extension_type","type":"keyword"},"zoom.phone.caller.extension_number":{"category":"zoom","description":"Extension number of the caller ","name":"zoom.phone.caller.extension_number","type":"keyword"},"zoom.phone.caller.timezone":{"category":"zoom","description":"Timezone of the caller ","name":"zoom.phone.caller.timezone","type":"keyword"},"zoom.phone.caller.device_type":{"category":"zoom","description":"Device type used by the caller ","name":"zoom.phone.caller.device_type","type":"keyword"},"zoom.phone.callee.id":{"category":"zoom","description":"UserID of the callee related to the voicemail/call ","name":"zoom.phone.callee.id","type":"keyword"},"zoom.phone.callee.user_id":{"category":"zoom","description":"UserID of the related callee of a voicemail/call ","name":"zoom.phone.callee.user_id","type":"keyword"},"zoom.phone.callee.name":{"category":"zoom","description":"The name of the related callee ","name":"zoom.phone.callee.name","type":"keyword"},"zoom.phone.callee.number_type":{"category":"zoom","description":"The type of number, can be 1(Internal) or 2(External) ","name":"zoom.phone.callee.number_type","type":"keyword"},"zoom.phone.callee.phone_number":{"category":"zoom","description":"Phone Number of the callee related to the call ","name":"zoom.phone.callee.phone_number","type":"keyword"},"zoom.phone.callee.extension_type":{"category":"zoom","description":"Extension type of the callee number, can be user, callQueue, autoReceptionist or shareLineGroup ","name":"zoom.phone.callee.extension_type","type":"keyword"},"zoom.phone.callee.extension_number":{"category":"zoom","description":"Extension number of the callee related to the call ","name":"zoom.phone.callee.extension_number","type":"keyword"},"zoom.phone.callee.timezone":{"category":"zoom","description":"Timezone of the callee related to the call ","name":"zoom.phone.callee.timezone","type":"keyword"},"zoom.phone.callee.device_type":{"category":"zoom","description":"Device type used by the callee related to the call ","name":"zoom.phone.callee.device_type","type":"keyword"},"zoom.phone.date_time":{"category":"zoom","description":"Date and time of the related phone event ","name":"zoom.phone.date_time","type":"date"},"zoom.recording.id":{"category":"zoom","description":"Unique ID of the related recording ","name":"zoom.recording.id","type":"keyword"},"zoom.recording.uuid":{"category":"zoom","description":"UUID of the related recording ","name":"zoom.recording.uuid","type":"keyword"},"zoom.recording.host_id":{"category":"zoom","description":"UserID of the host of the meeting that was recorded ","name":"zoom.recording.host_id","type":"keyword"},"zoom.recording.topic":{"category":"zoom","description":"Topic of the meeting related to the recording ","name":"zoom.recording.topic","type":"keyword"},"zoom.recording.type":{"category":"zoom","description":"Type of recording, can be multiple type of values, please check Zoom documentation ","name":"zoom.recording.type","type":"keyword"},"zoom.recording.start_time":{"category":"zoom","description":"The date and time when the recording started ","name":"zoom.recording.start_time","type":"date"},"zoom.recording.timezone":{"category":"zoom","description":"The timezone used for the recording date ","name":"zoom.recording.timezone","type":"keyword"},"zoom.recording.duration":{"category":"zoom","description":"Duration of the recording in minutes ","name":"zoom.recording.duration","type":"long"},"zoom.recording.share_url":{"category":"zoom","description":"The URL to access the recording ","name":"zoom.recording.share_url","type":"keyword"},"zoom.recording.total_size":{"category":"zoom","description":"Total size of the recording in bytes ","name":"zoom.recording.total_size","type":"long"},"zoom.recording.recording_count":{"category":"zoom","description":"Number of recording files related to the recording ","name":"zoom.recording.recording_count","type":"long"},"zoom.recording.recording_file.recording_start":{"category":"zoom","description":"The date and time the recording started ","name":"zoom.recording.recording_file.recording_start","type":"date"},"zoom.recording.recording_file.recording_end":{"category":"zoom","description":"The date and time the recording finished ","name":"zoom.recording.recording_file.recording_end","type":"date"},"zoom.recording.host_email":{"category":"zoom","description":"Email address of the host related to the meeting that was recorded ","name":"zoom.recording.host_email","type":"keyword"},"zoom.user.id":{"category":"zoom","description":"UserID related to the user event ","name":"zoom.user.id","type":"keyword"},"zoom.user.first_name":{"category":"zoom","description":"User first name related to the user event ","name":"zoom.user.first_name","type":"keyword"},"zoom.user.last_name":{"category":"zoom","description":"User last name related to the user event ","name":"zoom.user.last_name","type":"keyword"},"zoom.user.email":{"category":"zoom","description":"User email related to the user event ","name":"zoom.user.email","type":"keyword"},"zoom.user.type":{"category":"zoom","description":"User type related to the user event ","name":"zoom.user.type","type":"keyword"},"zoom.user.phone_number":{"category":"zoom","description":"User phone number related to the user event ","name":"zoom.user.phone_number","type":"keyword"},"zoom.user.phone_country":{"category":"zoom","description":"User country code related to the user event ","name":"zoom.user.phone_country","type":"keyword"},"zoom.user.company":{"category":"zoom","description":"User company related to the user event ","name":"zoom.user.company","type":"keyword"},"zoom.user.pmi":{"category":"zoom","description":"User personal meeting ID related to the user event ","name":"zoom.user.pmi","type":"keyword"},"zoom.user.use_pmi":{"category":"zoom","description":"If a user has PMI enabled ","name":"zoom.user.use_pmi","type":"boolean"},"zoom.user.pic_url":{"category":"zoom","description":"Full URL to the profile picture used by the user ","name":"zoom.user.pic_url","type":"keyword"},"zoom.user.vanity_name":{"category":"zoom","description":"Name of the personal meeting room related to the user event ","name":"zoom.user.vanity_name","type":"keyword"},"zoom.user.timezone":{"category":"zoom","description":"Timezone configured for the user ","name":"zoom.user.timezone","type":"keyword"},"zoom.user.language":{"category":"zoom","description":"Language configured for the user ","name":"zoom.user.language","type":"keyword"},"zoom.user.host_key":{"category":"zoom","description":"Host key set for the user ","name":"zoom.user.host_key","type":"keyword"},"zoom.user.role":{"category":"zoom","description":"The configured role for the user ","name":"zoom.user.role","type":"keyword"},"zoom.user.dept":{"category":"zoom","description":"The configured departement for the user ","name":"zoom.user.dept","type":"keyword"},"zoom.user.presence_status":{"category":"zoom","description":"Current presence status of user ","name":"zoom.user.presence_status","type":"keyword"},"zoom.user.personal_notes":{"category":"zoom","description":"Personal notes for the User ","name":"zoom.user.personal_notes","type":"keyword"},"zoom.user.client_type":{"category":"zoom","description":"Type of client used by the user. Can be browser, mac, win, iphone or android ","name":"zoom.user.client_type","type":"keyword"},"zoom.user.version":{"category":"zoom","description":"Version of the client used by the user ","name":"zoom.user.version","type":"keyword"},"zoom.webinar.id":{"category":"zoom","description":"Unique ID for the related webinar ","name":"zoom.webinar.id","type":"keyword"},"zoom.webinar.join_url":{"category":"zoom","description":"The URL configured to join the webinar ","name":"zoom.webinar.join_url","type":"keyword"},"zoom.webinar.uuid":{"category":"zoom","description":"UUID for the related webinar ","name":"zoom.webinar.uuid","type":"keyword"},"zoom.webinar.host_id":{"category":"zoom","description":"UserID for the configured host of the webinar ","name":"zoom.webinar.host_id","type":"keyword"},"zoom.webinar.topic":{"category":"zoom","description":"Meeting topic of the related webinar ","name":"zoom.webinar.topic","type":"keyword"},"zoom.webinar.type":{"category":"zoom","description":"Type of webinar created. Can be either 5(Webinar), 6(Recurring webinar without fixed time) or 9(Recurring webinar with fixed time) ","name":"zoom.webinar.type","type":"keyword"},"zoom.webinar.start_time":{"category":"zoom","description":"The date and time when the webinar started ","name":"zoom.webinar.start_time","type":"date"},"zoom.webinar.timezone":{"category":"zoom","description":"Timezone used for the dates related to the webinar ","name":"zoom.webinar.timezone","type":"keyword"},"zoom.webinar.duration":{"category":"zoom","description":"Duration of the webinar in minutes ","name":"zoom.webinar.duration","type":"long"},"zoom.webinar.agenda":{"category":"zoom","description":"The configured agenda of the webinar ","name":"zoom.webinar.agenda","type":"keyword"},"zoom.webinar.password":{"category":"zoom","description":"Password configured to access the webinar ","name":"zoom.webinar.password","type":"keyword"},"zoom.webinar.issues":{"category":"zoom","description":"Any reported issues about a webinar is reported in this field ","name":"zoom.webinar.issues","type":"keyword"},"zoom.zoomroom.id":{"category":"zoom","description":"Unique ID of the Zoom room ","name":"zoom.zoomroom.id","type":"keyword"},"zoom.zoomroom.room_name":{"category":"zoom","description":"The configured name of the Zoom room ","name":"zoom.zoomroom.room_name","type":"keyword"},"zoom.zoomroom.calendar_name":{"category":"zoom","description":"Calendar name of the Zoom room ","name":"zoom.zoomroom.calendar_name","type":"keyword"},"zoom.zoomroom.calendar_id":{"category":"zoom","description":"Unique ID of the calendar used by the Zoom room ","name":"zoom.zoomroom.calendar_id","type":"keyword"},"zoom.zoomroom.event_id":{"category":"zoom","description":"Unique ID of the calendar event associated with the Zoom Room ","name":"zoom.zoomroom.event_id","type":"keyword"},"zoom.zoomroom.change_key":{"category":"zoom","description":"Key used by Microsoft products integration that represents a specific version of a calendar ","name":"zoom.zoomroom.change_key","type":"keyword"},"zoom.zoomroom.resource_email":{"category":"zoom","description":"Email address associated with the calendar in use by the Zoom room ","name":"zoom.zoomroom.resource_email","type":"keyword"},"zoom.zoomroom.email":{"category":"zoom","description":"Email address associated with the Zoom room itself ","name":"zoom.zoomroom.email","type":"keyword"},"zoom.zoomroom.issue":{"category":"zoom","description":"Any reported alerts or issues related to the Zoom room or its equipment ","name":"zoom.zoomroom.issue","type":"keyword"},"zoom.zoomroom.alert_type":{"category":"zoom","description":"An integer value representing the type of alert. The list of alert types can be found in the Zoom documentation ","name":"zoom.zoomroom.alert_type","type":"keyword"},"zoom.zoomroom.component":{"category":"zoom","description":"An integer value representing the type of equipment or component, The list of component types can be found in the Zoom documentation ","name":"zoom.zoomroom.component","type":"keyword"},"zoom.zoomroom.alert_kind":{"category":"zoom","description":"An integer value showing if the Zoom room alert has been either 1(Triggered) or 2(Cleared) ","name":"zoom.zoomroom.alert_kind","type":"keyword"},"zoom.registrant.id":{"category":"zoom","description":"Unique ID of the user registering to a meeting or webinar ","name":"zoom.registrant.id","type":"keyword"},"zoom.registrant.status":{"category":"zoom","description":"Status of the specific user registration ","name":"zoom.registrant.status","type":"keyword"},"zoom.registrant.email":{"category":"zoom","description":"Email of the user registering to a meeting or webinar ","name":"zoom.registrant.email","type":"keyword"},"zoom.registrant.first_name":{"category":"zoom","description":"First name of the user registering to a meeting or webinar ","name":"zoom.registrant.first_name","type":"keyword"},"zoom.registrant.last_name":{"category":"zoom","description":"Last name of the user registering to a meeting or webinar ","name":"zoom.registrant.last_name","type":"keyword"},"zoom.registrant.address":{"category":"zoom","description":"Address of the user registering to a meeting or webinar ","name":"zoom.registrant.address","type":"keyword"},"zoom.registrant.city":{"category":"zoom","description":"City of the user registering to a meeting or webinar ","name":"zoom.registrant.city","type":"keyword"},"zoom.registrant.country":{"category":"zoom","description":"Country of the user registering to a meeting or webinar ","name":"zoom.registrant.country","type":"keyword"},"zoom.registrant.zip":{"category":"zoom","description":"Zip code of the user registering to a meeting or webinar ","name":"zoom.registrant.zip","type":"keyword"},"zoom.registrant.state":{"category":"zoom","description":"State of the user registering to a meeting or webinar ","name":"zoom.registrant.state","type":"keyword"},"zoom.registrant.phone":{"category":"zoom","description":"Phone number of the user registering to a meeting or webinar ","name":"zoom.registrant.phone","type":"keyword"},"zoom.registrant.industry":{"category":"zoom","description":"Related industry of the user registering to a meeting or webinar ","name":"zoom.registrant.industry","type":"keyword"},"zoom.registrant.org":{"category":"zoom","description":"Organization related to the user registering to a meeting or webinar ","name":"zoom.registrant.org","type":"keyword"},"zoom.registrant.job_title":{"category":"zoom","description":"Job title of the user registering to a meeting or webinar ","name":"zoom.registrant.job_title","type":"keyword"},"zoom.registrant.purchasing_time_frame":{"category":"zoom","description":"Choosen purchase timeframe of the user registering to a meeting or webinar ","name":"zoom.registrant.purchasing_time_frame","type":"keyword"},"zoom.registrant.role_in_purchase_process":{"category":"zoom","description":"Choosen role in a purchase process related to the user registering to a meeting or webinar ","name":"zoom.registrant.role_in_purchase_process","type":"keyword"},"zoom.registrant.no_of_employees":{"category":"zoom","description":"Number of employees choosen by the user registering to a meeting or webinar ","name":"zoom.registrant.no_of_employees","type":"keyword"},"zoom.registrant.comments":{"category":"zoom","description":"Comments left by the user registering to a meeting or webinar ","name":"zoom.registrant.comments","type":"keyword"},"zoom.registrant.join_url":{"category":"zoom","description":"The URL that the registrant can use to join the webinar ","name":"zoom.registrant.join_url","type":"keyword"},"zoom.participant.id":{"category":"zoom","description":"Unique ID of the participant related to a meeting ","name":"zoom.participant.id","type":"keyword"},"zoom.participant.user_id":{"category":"zoom","description":"UserID of the participant related to a meeting ","name":"zoom.participant.user_id","type":"keyword"},"zoom.participant.user_name":{"category":"zoom","description":"Username of the participant related to a meeting ","name":"zoom.participant.user_name","type":"keyword"},"zoom.participant.join_time":{"category":"zoom","description":"The date and time a participant joined a meeting ","name":"zoom.participant.join_time","type":"date"},"zoom.participant.leave_time":{"category":"zoom","description":"The date and time a participant left a meeting ","name":"zoom.participant.leave_time","type":"date"},"zoom.participant.sharing_details.link_source":{"category":"zoom","description":"Method of sharing with dropbox integration ","name":"zoom.participant.sharing_details.link_source","type":"keyword"},"zoom.participant.sharing_details.content":{"category":"zoom","description":"Type of content that was shared ","name":"zoom.participant.sharing_details.content","type":"keyword"},"zoom.participant.sharing_details.file_link":{"category":"zoom","description":"The file link that was shared ","name":"zoom.participant.sharing_details.file_link","type":"keyword"},"zoom.participant.sharing_details.date_time":{"category":"zoom","description":"Timestamp the sharing started ","name":"zoom.participant.sharing_details.date_time","type":"keyword"},"zoom.participant.sharing_details.source":{"category":"zoom","description":"The file source that was share ","name":"zoom.participant.sharing_details.source","type":"keyword"},"zoom.old_values":{"category":"zoom","description":"Includes the old values when updating a object like user, meeting, account or webinar ","name":"zoom.old_values","type":"flattened"},"zoom.settings":{"category":"zoom","description":"The current active settings related to a object like user, meeting, account or webinar ","name":"zoom.settings","type":"flattened"},"aws-cloudwatch.log_group":{"category":"aws-cloudwatch","description":"The name of the log group to which this event belongs.","name":"aws-cloudwatch.log_group","type":"keyword"},"aws-cloudwatch.log_stream":{"category":"aws-cloudwatch","description":"The name of the log stream to which this event belongs.","name":"aws-cloudwatch.log_stream","type":"keyword"},"aws-cloudwatch.ingestion_time":{"category":"aws-cloudwatch","description":"The time the event was ingested in AWS CloudWatch.","name":"aws-cloudwatch.ingestion_time","type":"keyword"},"bucket.name":{"category":"bucket","description":"Name of the S3 bucket that this log retrieved from. ","name":"bucket.name","type":"keyword"},"bucket.arn":{"category":"bucket","description":"ARN of the S3 bucket that this log retrieved from. ","name":"bucket.arn","type":"keyword"},"object.key":{"category":"object","description":"Name of the S3 object that this log retrieved from. ","name":"object.key","type":"keyword"},"metadata":{"category":"base","description":"AWS S3 object metadata values.","name":"metadata","type":"flattened"},"netflow.type":{"category":"netflow","description":"The type of NetFlow record described by this event. ","name":"netflow.type","type":"keyword"},"netflow.exporter.address":{"category":"netflow","description":"Exporter's network address in IP:port format. ","name":"netflow.exporter.address","type":"keyword"},"netflow.exporter.source_id":{"category":"netflow","description":"Observation domain ID to which this record belongs. ","name":"netflow.exporter.source_id","type":"long"},"netflow.exporter.timestamp":{"category":"netflow","description":"Time and date of export. ","name":"netflow.exporter.timestamp","type":"date"},"netflow.exporter.uptime_millis":{"category":"netflow","description":"How long the exporter process has been running, in milliseconds. ","name":"netflow.exporter.uptime_millis","type":"long"},"netflow.exporter.version":{"category":"netflow","description":"NetFlow version used. ","name":"netflow.exporter.version","type":"integer"},"netflow.absolute_error":{"category":"netflow","name":"netflow.absolute_error","type":"double"},"netflow.address_pool_high_threshold":{"category":"netflow","name":"netflow.address_pool_high_threshold","type":"long"},"netflow.address_pool_low_threshold":{"category":"netflow","name":"netflow.address_pool_low_threshold","type":"long"},"netflow.address_port_mapping_high_threshold":{"category":"netflow","name":"netflow.address_port_mapping_high_threshold","type":"long"},"netflow.address_port_mapping_low_threshold":{"category":"netflow","name":"netflow.address_port_mapping_low_threshold","type":"long"},"netflow.address_port_mapping_per_user_high_threshold":{"category":"netflow","name":"netflow.address_port_mapping_per_user_high_threshold","type":"long"},"netflow.afc_protocol":{"category":"netflow","name":"netflow.afc_protocol","type":"integer"},"netflow.afc_protocol_name":{"category":"netflow","name":"netflow.afc_protocol_name","type":"keyword"},"netflow.anonymization_flags":{"category":"netflow","name":"netflow.anonymization_flags","type":"integer"},"netflow.anonymization_technique":{"category":"netflow","name":"netflow.anonymization_technique","type":"integer"},"netflow.application_business-relevance":{"category":"netflow","name":"netflow.application_business-relevance","type":"long"},"netflow.application_category_name":{"category":"netflow","name":"netflow.application_category_name","type":"keyword"},"netflow.application_description":{"category":"netflow","name":"netflow.application_description","type":"keyword"},"netflow.application_group_name":{"category":"netflow","name":"netflow.application_group_name","type":"keyword"},"netflow.application_http_uri_statistics":{"category":"netflow","name":"netflow.application_http_uri_statistics","type":"short"},"netflow.application_http_user-agent":{"category":"netflow","name":"netflow.application_http_user-agent","type":"short"},"netflow.application_id":{"category":"netflow","name":"netflow.application_id","type":"short"},"netflow.application_name":{"category":"netflow","name":"netflow.application_name","type":"keyword"},"netflow.application_sub_category_name":{"category":"netflow","name":"netflow.application_sub_category_name","type":"keyword"},"netflow.application_traffic-class":{"category":"netflow","name":"netflow.application_traffic-class","type":"long"},"netflow.art_client_network_time_maximum":{"category":"netflow","name":"netflow.art_client_network_time_maximum","type":"long"},"netflow.art_client_network_time_minimum":{"category":"netflow","name":"netflow.art_client_network_time_minimum","type":"long"},"netflow.art_client_network_time_sum":{"category":"netflow","name":"netflow.art_client_network_time_sum","type":"long"},"netflow.art_clientpackets":{"category":"netflow","name":"netflow.art_clientpackets","type":"long"},"netflow.art_count_late_responses":{"category":"netflow","name":"netflow.art_count_late_responses","type":"long"},"netflow.art_count_new_connections":{"category":"netflow","name":"netflow.art_count_new_connections","type":"long"},"netflow.art_count_responses":{"category":"netflow","name":"netflow.art_count_responses","type":"long"},"netflow.art_count_responses_histogram_bucket1":{"category":"netflow","name":"netflow.art_count_responses_histogram_bucket1","type":"long"},"netflow.art_count_responses_histogram_bucket2":{"category":"netflow","name":"netflow.art_count_responses_histogram_bucket2","type":"long"},"netflow.art_count_responses_histogram_bucket3":{"category":"netflow","name":"netflow.art_count_responses_histogram_bucket3","type":"long"},"netflow.art_count_responses_histogram_bucket4":{"category":"netflow","name":"netflow.art_count_responses_histogram_bucket4","type":"long"},"netflow.art_count_responses_histogram_bucket5":{"category":"netflow","name":"netflow.art_count_responses_histogram_bucket5","type":"long"},"netflow.art_count_responses_histogram_bucket6":{"category":"netflow","name":"netflow.art_count_responses_histogram_bucket6","type":"long"},"netflow.art_count_responses_histogram_bucket7":{"category":"netflow","name":"netflow.art_count_responses_histogram_bucket7","type":"long"},"netflow.art_count_retransmissions":{"category":"netflow","name":"netflow.art_count_retransmissions","type":"long"},"netflow.art_count_transactions":{"category":"netflow","name":"netflow.art_count_transactions","type":"long"},"netflow.art_network_time_maximum":{"category":"netflow","name":"netflow.art_network_time_maximum","type":"long"},"netflow.art_network_time_minimum":{"category":"netflow","name":"netflow.art_network_time_minimum","type":"long"},"netflow.art_network_time_sum":{"category":"netflow","name":"netflow.art_network_time_sum","type":"long"},"netflow.art_response_time_maximum":{"category":"netflow","name":"netflow.art_response_time_maximum","type":"long"},"netflow.art_response_time_minimum":{"category":"netflow","name":"netflow.art_response_time_minimum","type":"long"},"netflow.art_response_time_sum":{"category":"netflow","name":"netflow.art_response_time_sum","type":"long"},"netflow.art_server_network_time_maximum":{"category":"netflow","name":"netflow.art_server_network_time_maximum","type":"long"},"netflow.art_server_network_time_minimum":{"category":"netflow","name":"netflow.art_server_network_time_minimum","type":"long"},"netflow.art_server_network_time_sum":{"category":"netflow","name":"netflow.art_server_network_time_sum","type":"long"},"netflow.art_server_response_time_maximum":{"category":"netflow","name":"netflow.art_server_response_time_maximum","type":"long"},"netflow.art_server_response_time_minimum":{"category":"netflow","name":"netflow.art_server_response_time_minimum","type":"long"},"netflow.art_server_response_time_sum":{"category":"netflow","name":"netflow.art_server_response_time_sum","type":"long"},"netflow.art_serverpackets":{"category":"netflow","name":"netflow.art_serverpackets","type":"long"},"netflow.art_total_response_time_maximum":{"category":"netflow","name":"netflow.art_total_response_time_maximum","type":"long"},"netflow.art_total_response_time_minimum":{"category":"netflow","name":"netflow.art_total_response_time_minimum","type":"long"},"netflow.art_total_response_time_sum":{"category":"netflow","name":"netflow.art_total_response_time_sum","type":"long"},"netflow.art_total_transaction_time_maximum":{"category":"netflow","name":"netflow.art_total_transaction_time_maximum","type":"long"},"netflow.art_total_transaction_time_minimum":{"category":"netflow","name":"netflow.art_total_transaction_time_minimum","type":"long"},"netflow.art_total_transaction_time_sum":{"category":"netflow","name":"netflow.art_total_transaction_time_sum","type":"long"},"netflow.assembled_fragment_count":{"category":"netflow","name":"netflow.assembled_fragment_count","type":"long"},"netflow.audit_counter":{"category":"netflow","name":"netflow.audit_counter","type":"long"},"netflow.average_interarrival_time":{"category":"netflow","name":"netflow.average_interarrival_time","type":"long"},"netflow.bgp_destination_as_number":{"category":"netflow","name":"netflow.bgp_destination_as_number","type":"long"},"netflow.bgp_next_adjacent_as_number":{"category":"netflow","name":"netflow.bgp_next_adjacent_as_number","type":"long"},"netflow.bgp_next_hop_ipv4_address":{"category":"netflow","name":"netflow.bgp_next_hop_ipv4_address","type":"ip"},"netflow.bgp_next_hop_ipv6_address":{"category":"netflow","name":"netflow.bgp_next_hop_ipv6_address","type":"ip"},"netflow.bgp_prev_adjacent_as_number":{"category":"netflow","name":"netflow.bgp_prev_adjacent_as_number","type":"long"},"netflow.bgp_source_as_number":{"category":"netflow","name":"netflow.bgp_source_as_number","type":"long"},"netflow.bgp_validity_state":{"category":"netflow","name":"netflow.bgp_validity_state","type":"short"},"netflow.biflow_direction":{"category":"netflow","name":"netflow.biflow_direction","type":"short"},"netflow.bind_ipv4_address":{"category":"netflow","name":"netflow.bind_ipv4_address","type":"ip"},"netflow.bind_transport_port":{"category":"netflow","name":"netflow.bind_transport_port","type":"integer"},"netflow.class_id":{"category":"netflow","name":"netflow.class_id","type":"long"},"netflow.class_name":{"category":"netflow","name":"netflow.class_name","type":"keyword"},"netflow.classification_engine_id":{"category":"netflow","name":"netflow.classification_engine_id","type":"short"},"netflow.collection_time_milliseconds":{"category":"netflow","name":"netflow.collection_time_milliseconds","type":"date"},"netflow.collector_certificate":{"category":"netflow","name":"netflow.collector_certificate","type":"short"},"netflow.collector_ipv4_address":{"category":"netflow","name":"netflow.collector_ipv4_address","type":"ip"},"netflow.collector_ipv6_address":{"category":"netflow","name":"netflow.collector_ipv6_address","type":"ip"},"netflow.collector_transport_port":{"category":"netflow","name":"netflow.collector_transport_port","type":"integer"},"netflow.common_properties_id":{"category":"netflow","name":"netflow.common_properties_id","type":"long"},"netflow.confidence_level":{"category":"netflow","name":"netflow.confidence_level","type":"double"},"netflow.conn_ipv4_address":{"category":"netflow","name":"netflow.conn_ipv4_address","type":"ip"},"netflow.conn_transport_port":{"category":"netflow","name":"netflow.conn_transport_port","type":"integer"},"netflow.connection_sum_duration_seconds":{"category":"netflow","name":"netflow.connection_sum_duration_seconds","type":"long"},"netflow.connection_transaction_id":{"category":"netflow","name":"netflow.connection_transaction_id","type":"long"},"netflow.conntrack_id":{"category":"netflow","name":"netflow.conntrack_id","type":"long"},"netflow.data_byte_count":{"category":"netflow","name":"netflow.data_byte_count","type":"long"},"netflow.data_link_frame_section":{"category":"netflow","name":"netflow.data_link_frame_section","type":"short"},"netflow.data_link_frame_size":{"category":"netflow","name":"netflow.data_link_frame_size","type":"integer"},"netflow.data_link_frame_type":{"category":"netflow","name":"netflow.data_link_frame_type","type":"integer"},"netflow.data_records_reliability":{"category":"netflow","name":"netflow.data_records_reliability","type":"boolean"},"netflow.delta_flow_count":{"category":"netflow","name":"netflow.delta_flow_count","type":"long"},"netflow.destination_ipv4_address":{"category":"netflow","name":"netflow.destination_ipv4_address","type":"ip"},"netflow.destination_ipv4_prefix":{"category":"netflow","name":"netflow.destination_ipv4_prefix","type":"ip"},"netflow.destination_ipv4_prefix_length":{"category":"netflow","name":"netflow.destination_ipv4_prefix_length","type":"short"},"netflow.destination_ipv6_address":{"category":"netflow","name":"netflow.destination_ipv6_address","type":"ip"},"netflow.destination_ipv6_prefix":{"category":"netflow","name":"netflow.destination_ipv6_prefix","type":"ip"},"netflow.destination_ipv6_prefix_length":{"category":"netflow","name":"netflow.destination_ipv6_prefix_length","type":"short"},"netflow.destination_mac_address":{"category":"netflow","name":"netflow.destination_mac_address","type":"keyword"},"netflow.destination_transport_port":{"category":"netflow","name":"netflow.destination_transport_port","type":"integer"},"netflow.digest_hash_value":{"category":"netflow","name":"netflow.digest_hash_value","type":"long"},"netflow.distinct_count_of_destination_ip_address":{"category":"netflow","name":"netflow.distinct_count_of_destination_ip_address","type":"long"},"netflow.distinct_count_of_destination_ipv4_address":{"category":"netflow","name":"netflow.distinct_count_of_destination_ipv4_address","type":"long"},"netflow.distinct_count_of_destination_ipv6_address":{"category":"netflow","name":"netflow.distinct_count_of_destination_ipv6_address","type":"long"},"netflow.distinct_count_of_source_ip_address":{"category":"netflow","name":"netflow.distinct_count_of_source_ip_address","type":"long"},"netflow.distinct_count_of_source_ipv4_address":{"category":"netflow","name":"netflow.distinct_count_of_source_ipv4_address","type":"long"},"netflow.distinct_count_of_source_ipv6_address":{"category":"netflow","name":"netflow.distinct_count_of_source_ipv6_address","type":"long"},"netflow.dns_authoritative":{"category":"netflow","name":"netflow.dns_authoritative","type":"short"},"netflow.dns_cname":{"category":"netflow","name":"netflow.dns_cname","type":"keyword"},"netflow.dns_id":{"category":"netflow","name":"netflow.dns_id","type":"integer"},"netflow.dns_mx_exchange":{"category":"netflow","name":"netflow.dns_mx_exchange","type":"keyword"},"netflow.dns_mx_preference":{"category":"netflow","name":"netflow.dns_mx_preference","type":"integer"},"netflow.dns_nsd_name":{"category":"netflow","name":"netflow.dns_nsd_name","type":"keyword"},"netflow.dns_nx_domain":{"category":"netflow","name":"netflow.dns_nx_domain","type":"short"},"netflow.dns_ptrd_name":{"category":"netflow","name":"netflow.dns_ptrd_name","type":"keyword"},"netflow.dns_qname":{"category":"netflow","name":"netflow.dns_qname","type":"keyword"},"netflow.dns_qr_type":{"category":"netflow","name":"netflow.dns_qr_type","type":"integer"},"netflow.dns_query_response":{"category":"netflow","name":"netflow.dns_query_response","type":"short"},"netflow.dns_rr_section":{"category":"netflow","name":"netflow.dns_rr_section","type":"short"},"netflow.dns_soa_expire":{"category":"netflow","name":"netflow.dns_soa_expire","type":"long"},"netflow.dns_soa_minimum":{"category":"netflow","name":"netflow.dns_soa_minimum","type":"long"},"netflow.dns_soa_refresh":{"category":"netflow","name":"netflow.dns_soa_refresh","type":"long"},"netflow.dns_soa_retry":{"category":"netflow","name":"netflow.dns_soa_retry","type":"long"},"netflow.dns_soa_serial":{"category":"netflow","name":"netflow.dns_soa_serial","type":"long"},"netflow.dns_soam_name":{"category":"netflow","name":"netflow.dns_soam_name","type":"keyword"},"netflow.dns_soar_name":{"category":"netflow","name":"netflow.dns_soar_name","type":"keyword"},"netflow.dns_srv_port":{"category":"netflow","name":"netflow.dns_srv_port","type":"integer"},"netflow.dns_srv_priority":{"category":"netflow","name":"netflow.dns_srv_priority","type":"integer"},"netflow.dns_srv_target":{"category":"netflow","name":"netflow.dns_srv_target","type":"integer"},"netflow.dns_srv_weight":{"category":"netflow","name":"netflow.dns_srv_weight","type":"integer"},"netflow.dns_ttl":{"category":"netflow","name":"netflow.dns_ttl","type":"long"},"netflow.dns_txt_data":{"category":"netflow","name":"netflow.dns_txt_data","type":"keyword"},"netflow.dot1q_customer_dei":{"category":"netflow","name":"netflow.dot1q_customer_dei","type":"boolean"},"netflow.dot1q_customer_destination_mac_address":{"category":"netflow","name":"netflow.dot1q_customer_destination_mac_address","type":"keyword"},"netflow.dot1q_customer_priority":{"category":"netflow","name":"netflow.dot1q_customer_priority","type":"short"},"netflow.dot1q_customer_source_mac_address":{"category":"netflow","name":"netflow.dot1q_customer_source_mac_address","type":"keyword"},"netflow.dot1q_customer_vlan_id":{"category":"netflow","name":"netflow.dot1q_customer_vlan_id","type":"integer"},"netflow.dot1q_dei":{"category":"netflow","name":"netflow.dot1q_dei","type":"boolean"},"netflow.dot1q_priority":{"category":"netflow","name":"netflow.dot1q_priority","type":"short"},"netflow.dot1q_service_instance_id":{"category":"netflow","name":"netflow.dot1q_service_instance_id","type":"long"},"netflow.dot1q_service_instance_priority":{"category":"netflow","name":"netflow.dot1q_service_instance_priority","type":"short"},"netflow.dot1q_service_instance_tag":{"category":"netflow","name":"netflow.dot1q_service_instance_tag","type":"short"},"netflow.dot1q_vlan_id":{"category":"netflow","name":"netflow.dot1q_vlan_id","type":"integer"},"netflow.dropped_layer2_octet_delta_count":{"category":"netflow","name":"netflow.dropped_layer2_octet_delta_count","type":"long"},"netflow.dropped_layer2_octet_total_count":{"category":"netflow","name":"netflow.dropped_layer2_octet_total_count","type":"long"},"netflow.dropped_octet_delta_count":{"category":"netflow","name":"netflow.dropped_octet_delta_count","type":"long"},"netflow.dropped_octet_total_count":{"category":"netflow","name":"netflow.dropped_octet_total_count","type":"long"},"netflow.dropped_packet_delta_count":{"category":"netflow","name":"netflow.dropped_packet_delta_count","type":"long"},"netflow.dropped_packet_total_count":{"category":"netflow","name":"netflow.dropped_packet_total_count","type":"long"},"netflow.dst_traffic_index":{"category":"netflow","name":"netflow.dst_traffic_index","type":"long"},"netflow.egress_broadcast_packet_total_count":{"category":"netflow","name":"netflow.egress_broadcast_packet_total_count","type":"long"},"netflow.egress_interface":{"category":"netflow","name":"netflow.egress_interface","type":"long"},"netflow.egress_interface_type":{"category":"netflow","name":"netflow.egress_interface_type","type":"long"},"netflow.egress_physical_interface":{"category":"netflow","name":"netflow.egress_physical_interface","type":"long"},"netflow.egress_unicast_packet_total_count":{"category":"netflow","name":"netflow.egress_unicast_packet_total_count","type":"long"},"netflow.egress_vrfid":{"category":"netflow","name":"netflow.egress_vrfid","type":"long"},"netflow.encrypted_technology":{"category":"netflow","name":"netflow.encrypted_technology","type":"keyword"},"netflow.engine_id":{"category":"netflow","name":"netflow.engine_id","type":"short"},"netflow.engine_type":{"category":"netflow","name":"netflow.engine_type","type":"short"},"netflow.ethernet_header_length":{"category":"netflow","name":"netflow.ethernet_header_length","type":"short"},"netflow.ethernet_payload_length":{"category":"netflow","name":"netflow.ethernet_payload_length","type":"integer"},"netflow.ethernet_total_length":{"category":"netflow","name":"netflow.ethernet_total_length","type":"integer"},"netflow.ethernet_type":{"category":"netflow","name":"netflow.ethernet_type","type":"integer"},"netflow.expired_fragment_count":{"category":"netflow","name":"netflow.expired_fragment_count","type":"long"},"netflow.export_interface":{"category":"netflow","name":"netflow.export_interface","type":"long"},"netflow.export_protocol_version":{"category":"netflow","name":"netflow.export_protocol_version","type":"short"},"netflow.export_sctp_stream_id":{"category":"netflow","name":"netflow.export_sctp_stream_id","type":"integer"},"netflow.export_transport_protocol":{"category":"netflow","name":"netflow.export_transport_protocol","type":"short"},"netflow.exported_flow_record_total_count":{"category":"netflow","name":"netflow.exported_flow_record_total_count","type":"long"},"netflow.exported_message_total_count":{"category":"netflow","name":"netflow.exported_message_total_count","type":"long"},"netflow.exported_octet_total_count":{"category":"netflow","name":"netflow.exported_octet_total_count","type":"long"},"netflow.exporter_certificate":{"category":"netflow","name":"netflow.exporter_certificate","type":"short"},"netflow.exporter_ipv4_address":{"category":"netflow","name":"netflow.exporter_ipv4_address","type":"ip"},"netflow.exporter_ipv6_address":{"category":"netflow","name":"netflow.exporter_ipv6_address","type":"ip"},"netflow.exporter_transport_port":{"category":"netflow","name":"netflow.exporter_transport_port","type":"integer"},"netflow.exporting_process_id":{"category":"netflow","name":"netflow.exporting_process_id","type":"long"},"netflow.external_address_realm":{"category":"netflow","name":"netflow.external_address_realm","type":"short"},"netflow.firewall_event":{"category":"netflow","name":"netflow.firewall_event","type":"short"},"netflow.first_eight_non_empty_packet_directions":{"category":"netflow","name":"netflow.first_eight_non_empty_packet_directions","type":"short"},"netflow.first_non_empty_packet_size":{"category":"netflow","name":"netflow.first_non_empty_packet_size","type":"integer"},"netflow.first_packet_banner":{"category":"netflow","name":"netflow.first_packet_banner","type":"keyword"},"netflow.flags_and_sampler_id":{"category":"netflow","name":"netflow.flags_and_sampler_id","type":"long"},"netflow.flow_active_timeout":{"category":"netflow","name":"netflow.flow_active_timeout","type":"integer"},"netflow.flow_attributes":{"category":"netflow","name":"netflow.flow_attributes","type":"integer"},"netflow.flow_direction":{"category":"netflow","name":"netflow.flow_direction","type":"short"},"netflow.flow_duration_microseconds":{"category":"netflow","name":"netflow.flow_duration_microseconds","type":"long"},"netflow.flow_duration_milliseconds":{"category":"netflow","name":"netflow.flow_duration_milliseconds","type":"long"},"netflow.flow_end_delta_microseconds":{"category":"netflow","name":"netflow.flow_end_delta_microseconds","type":"long"},"netflow.flow_end_microseconds":{"category":"netflow","name":"netflow.flow_end_microseconds","type":"date"},"netflow.flow_end_milliseconds":{"category":"netflow","name":"netflow.flow_end_milliseconds","type":"date"},"netflow.flow_end_nanoseconds":{"category":"netflow","name":"netflow.flow_end_nanoseconds","type":"date"},"netflow.flow_end_reason":{"category":"netflow","name":"netflow.flow_end_reason","type":"short"},"netflow.flow_end_seconds":{"category":"netflow","name":"netflow.flow_end_seconds","type":"date"},"netflow.flow_end_sys_up_time":{"category":"netflow","name":"netflow.flow_end_sys_up_time","type":"long"},"netflow.flow_id":{"category":"netflow","name":"netflow.flow_id","type":"long"},"netflow.flow_idle_timeout":{"category":"netflow","name":"netflow.flow_idle_timeout","type":"integer"},"netflow.flow_key_indicator":{"category":"netflow","name":"netflow.flow_key_indicator","type":"long"},"netflow.flow_label_ipv6":{"category":"netflow","name":"netflow.flow_label_ipv6","type":"long"},"netflow.flow_sampling_time_interval":{"category":"netflow","name":"netflow.flow_sampling_time_interval","type":"long"},"netflow.flow_sampling_time_spacing":{"category":"netflow","name":"netflow.flow_sampling_time_spacing","type":"long"},"netflow.flow_selected_flow_delta_count":{"category":"netflow","name":"netflow.flow_selected_flow_delta_count","type":"long"},"netflow.flow_selected_octet_delta_count":{"category":"netflow","name":"netflow.flow_selected_octet_delta_count","type":"long"},"netflow.flow_selected_packet_delta_count":{"category":"netflow","name":"netflow.flow_selected_packet_delta_count","type":"long"},"netflow.flow_selector_algorithm":{"category":"netflow","name":"netflow.flow_selector_algorithm","type":"integer"},"netflow.flow_start_delta_microseconds":{"category":"netflow","name":"netflow.flow_start_delta_microseconds","type":"long"},"netflow.flow_start_microseconds":{"category":"netflow","name":"netflow.flow_start_microseconds","type":"date"},"netflow.flow_start_milliseconds":{"category":"netflow","name":"netflow.flow_start_milliseconds","type":"date"},"netflow.flow_start_nanoseconds":{"category":"netflow","name":"netflow.flow_start_nanoseconds","type":"date"},"netflow.flow_start_seconds":{"category":"netflow","name":"netflow.flow_start_seconds","type":"date"},"netflow.flow_start_sys_up_time":{"category":"netflow","name":"netflow.flow_start_sys_up_time","type":"long"},"netflow.flow_table_flush_event_count":{"category":"netflow","name":"netflow.flow_table_flush_event_count","type":"long"},"netflow.flow_table_peak_count":{"category":"netflow","name":"netflow.flow_table_peak_count","type":"long"},"netflow.forwarding_status":{"category":"netflow","name":"netflow.forwarding_status","type":"short"},"netflow.fragment_flags":{"category":"netflow","name":"netflow.fragment_flags","type":"short"},"netflow.fragment_identification":{"category":"netflow","name":"netflow.fragment_identification","type":"long"},"netflow.fragment_offset":{"category":"netflow","name":"netflow.fragment_offset","type":"integer"},"netflow.fw_blackout_secs":{"category":"netflow","name":"netflow.fw_blackout_secs","type":"long"},"netflow.fw_configured_value":{"category":"netflow","name":"netflow.fw_configured_value","type":"long"},"netflow.fw_cts_src_sgt":{"category":"netflow","name":"netflow.fw_cts_src_sgt","type":"long"},"netflow.fw_event_level":{"category":"netflow","name":"netflow.fw_event_level","type":"long"},"netflow.fw_event_level_id":{"category":"netflow","name":"netflow.fw_event_level_id","type":"long"},"netflow.fw_ext_event":{"category":"netflow","name":"netflow.fw_ext_event","type":"integer"},"netflow.fw_ext_event_alt":{"category":"netflow","name":"netflow.fw_ext_event_alt","type":"long"},"netflow.fw_ext_event_desc":{"category":"netflow","name":"netflow.fw_ext_event_desc","type":"keyword"},"netflow.fw_half_open_count":{"category":"netflow","name":"netflow.fw_half_open_count","type":"long"},"netflow.fw_half_open_high":{"category":"netflow","name":"netflow.fw_half_open_high","type":"long"},"netflow.fw_half_open_rate":{"category":"netflow","name":"netflow.fw_half_open_rate","type":"long"},"netflow.fw_max_sessions":{"category":"netflow","name":"netflow.fw_max_sessions","type":"long"},"netflow.fw_rule":{"category":"netflow","name":"netflow.fw_rule","type":"keyword"},"netflow.fw_summary_pkt_count":{"category":"netflow","name":"netflow.fw_summary_pkt_count","type":"long"},"netflow.fw_zone_pair_id":{"category":"netflow","name":"netflow.fw_zone_pair_id","type":"long"},"netflow.fw_zone_pair_name":{"category":"netflow","name":"netflow.fw_zone_pair_name","type":"long"},"netflow.global_address_mapping_high_threshold":{"category":"netflow","name":"netflow.global_address_mapping_high_threshold","type":"long"},"netflow.gre_key":{"category":"netflow","name":"netflow.gre_key","type":"long"},"netflow.hash_digest_output":{"category":"netflow","name":"netflow.hash_digest_output","type":"boolean"},"netflow.hash_flow_domain":{"category":"netflow","name":"netflow.hash_flow_domain","type":"integer"},"netflow.hash_initialiser_value":{"category":"netflow","name":"netflow.hash_initialiser_value","type":"long"},"netflow.hash_ip_payload_offset":{"category":"netflow","name":"netflow.hash_ip_payload_offset","type":"long"},"netflow.hash_ip_payload_size":{"category":"netflow","name":"netflow.hash_ip_payload_size","type":"long"},"netflow.hash_output_range_max":{"category":"netflow","name":"netflow.hash_output_range_max","type":"long"},"netflow.hash_output_range_min":{"category":"netflow","name":"netflow.hash_output_range_min","type":"long"},"netflow.hash_selected_range_max":{"category":"netflow","name":"netflow.hash_selected_range_max","type":"long"},"netflow.hash_selected_range_min":{"category":"netflow","name":"netflow.hash_selected_range_min","type":"long"},"netflow.http_content_type":{"category":"netflow","name":"netflow.http_content_type","type":"keyword"},"netflow.http_message_version":{"category":"netflow","name":"netflow.http_message_version","type":"keyword"},"netflow.http_reason_phrase":{"category":"netflow","name":"netflow.http_reason_phrase","type":"keyword"},"netflow.http_request_host":{"category":"netflow","name":"netflow.http_request_host","type":"keyword"},"netflow.http_request_method":{"category":"netflow","name":"netflow.http_request_method","type":"keyword"},"netflow.http_request_target":{"category":"netflow","name":"netflow.http_request_target","type":"keyword"},"netflow.http_status_code":{"category":"netflow","name":"netflow.http_status_code","type":"integer"},"netflow.http_user_agent":{"category":"netflow","name":"netflow.http_user_agent","type":"keyword"},"netflow.icmp_code_ipv4":{"category":"netflow","name":"netflow.icmp_code_ipv4","type":"short"},"netflow.icmp_code_ipv6":{"category":"netflow","name":"netflow.icmp_code_ipv6","type":"short"},"netflow.icmp_type_code_ipv4":{"category":"netflow","name":"netflow.icmp_type_code_ipv4","type":"integer"},"netflow.icmp_type_code_ipv6":{"category":"netflow","name":"netflow.icmp_type_code_ipv6","type":"integer"},"netflow.icmp_type_ipv4":{"category":"netflow","name":"netflow.icmp_type_ipv4","type":"short"},"netflow.icmp_type_ipv6":{"category":"netflow","name":"netflow.icmp_type_ipv6","type":"short"},"netflow.igmp_type":{"category":"netflow","name":"netflow.igmp_type","type":"short"},"netflow.ignored_data_record_total_count":{"category":"netflow","name":"netflow.ignored_data_record_total_count","type":"long"},"netflow.ignored_layer2_frame_total_count":{"category":"netflow","name":"netflow.ignored_layer2_frame_total_count","type":"long"},"netflow.ignored_layer2_octet_total_count":{"category":"netflow","name":"netflow.ignored_layer2_octet_total_count","type":"long"},"netflow.ignored_octet_total_count":{"category":"netflow","name":"netflow.ignored_octet_total_count","type":"long"},"netflow.ignored_packet_total_count":{"category":"netflow","name":"netflow.ignored_packet_total_count","type":"long"},"netflow.information_element_data_type":{"category":"netflow","name":"netflow.information_element_data_type","type":"short"},"netflow.information_element_description":{"category":"netflow","name":"netflow.information_element_description","type":"keyword"},"netflow.information_element_id":{"category":"netflow","name":"netflow.information_element_id","type":"integer"},"netflow.information_element_index":{"category":"netflow","name":"netflow.information_element_index","type":"integer"},"netflow.information_element_name":{"category":"netflow","name":"netflow.information_element_name","type":"keyword"},"netflow.information_element_range_begin":{"category":"netflow","name":"netflow.information_element_range_begin","type":"long"},"netflow.information_element_range_end":{"category":"netflow","name":"netflow.information_element_range_end","type":"long"},"netflow.information_element_semantics":{"category":"netflow","name":"netflow.information_element_semantics","type":"short"},"netflow.information_element_units":{"category":"netflow","name":"netflow.information_element_units","type":"integer"},"netflow.ingress_broadcast_packet_total_count":{"category":"netflow","name":"netflow.ingress_broadcast_packet_total_count","type":"long"},"netflow.ingress_interface":{"category":"netflow","name":"netflow.ingress_interface","type":"long"},"netflow.ingress_interface_type":{"category":"netflow","name":"netflow.ingress_interface_type","type":"long"},"netflow.ingress_multicast_packet_total_count":{"category":"netflow","name":"netflow.ingress_multicast_packet_total_count","type":"long"},"netflow.ingress_physical_interface":{"category":"netflow","name":"netflow.ingress_physical_interface","type":"long"},"netflow.ingress_unicast_packet_total_count":{"category":"netflow","name":"netflow.ingress_unicast_packet_total_count","type":"long"},"netflow.ingress_vrfid":{"category":"netflow","name":"netflow.ingress_vrfid","type":"long"},"netflow.initial_tcp_flags":{"category":"netflow","name":"netflow.initial_tcp_flags","type":"short"},"netflow.initiator_octets":{"category":"netflow","name":"netflow.initiator_octets","type":"long"},"netflow.initiator_packets":{"category":"netflow","name":"netflow.initiator_packets","type":"long"},"netflow.interface_description":{"category":"netflow","name":"netflow.interface_description","type":"keyword"},"netflow.interface_name":{"category":"netflow","name":"netflow.interface_name","type":"keyword"},"netflow.intermediate_process_id":{"category":"netflow","name":"netflow.intermediate_process_id","type":"long"},"netflow.internal_address_realm":{"category":"netflow","name":"netflow.internal_address_realm","type":"short"},"netflow.ip_class_of_service":{"category":"netflow","name":"netflow.ip_class_of_service","type":"short"},"netflow.ip_diff_serv_code_point":{"category":"netflow","name":"netflow.ip_diff_serv_code_point","type":"short"},"netflow.ip_header_length":{"category":"netflow","name":"netflow.ip_header_length","type":"short"},"netflow.ip_header_packet_section":{"category":"netflow","name":"netflow.ip_header_packet_section","type":"short"},"netflow.ip_next_hop_ipv4_address":{"category":"netflow","name":"netflow.ip_next_hop_ipv4_address","type":"ip"},"netflow.ip_next_hop_ipv6_address":{"category":"netflow","name":"netflow.ip_next_hop_ipv6_address","type":"ip"},"netflow.ip_payload_length":{"category":"netflow","name":"netflow.ip_payload_length","type":"long"},"netflow.ip_payload_packet_section":{"category":"netflow","name":"netflow.ip_payload_packet_section","type":"short"},"netflow.ip_precedence":{"category":"netflow","name":"netflow.ip_precedence","type":"short"},"netflow.ip_sec_spi":{"category":"netflow","name":"netflow.ip_sec_spi","type":"long"},"netflow.ip_total_length":{"category":"netflow","name":"netflow.ip_total_length","type":"long"},"netflow.ip_ttl":{"category":"netflow","name":"netflow.ip_ttl","type":"short"},"netflow.ip_version":{"category":"netflow","name":"netflow.ip_version","type":"short"},"netflow.ipv4_ihl":{"category":"netflow","name":"netflow.ipv4_ihl","type":"short"},"netflow.ipv4_options":{"category":"netflow","name":"netflow.ipv4_options","type":"long"},"netflow.ipv4_router_sc":{"category":"netflow","name":"netflow.ipv4_router_sc","type":"ip"},"netflow.ipv6_extension_headers":{"category":"netflow","name":"netflow.ipv6_extension_headers","type":"long"},"netflow.is_multicast":{"category":"netflow","name":"netflow.is_multicast","type":"short"},"netflow.ixia_browser_id":{"category":"netflow","name":"netflow.ixia_browser_id","type":"short"},"netflow.ixia_browser_name":{"category":"netflow","name":"netflow.ixia_browser_name","type":"keyword"},"netflow.ixia_device_id":{"category":"netflow","name":"netflow.ixia_device_id","type":"short"},"netflow.ixia_device_name":{"category":"netflow","name":"netflow.ixia_device_name","type":"keyword"},"netflow.ixia_dns_answer":{"category":"netflow","name":"netflow.ixia_dns_answer","type":"keyword"},"netflow.ixia_dns_classes":{"category":"netflow","name":"netflow.ixia_dns_classes","type":"keyword"},"netflow.ixia_dns_query":{"category":"netflow","name":"netflow.ixia_dns_query","type":"keyword"},"netflow.ixia_dns_record_txt":{"category":"netflow","name":"netflow.ixia_dns_record_txt","type":"keyword"},"netflow.ixia_dst_as_name":{"category":"netflow","name":"netflow.ixia_dst_as_name","type":"keyword"},"netflow.ixia_dst_city_name":{"category":"netflow","name":"netflow.ixia_dst_city_name","type":"keyword"},"netflow.ixia_dst_country_code":{"category":"netflow","name":"netflow.ixia_dst_country_code","type":"keyword"},"netflow.ixia_dst_country_name":{"category":"netflow","name":"netflow.ixia_dst_country_name","type":"keyword"},"netflow.ixia_dst_latitude":{"category":"netflow","name":"netflow.ixia_dst_latitude","type":"float"},"netflow.ixia_dst_longitude":{"category":"netflow","name":"netflow.ixia_dst_longitude","type":"float"},"netflow.ixia_dst_region_code":{"category":"netflow","name":"netflow.ixia_dst_region_code","type":"keyword"},"netflow.ixia_dst_region_node":{"category":"netflow","name":"netflow.ixia_dst_region_node","type":"keyword"},"netflow.ixia_encrypt_cipher":{"category":"netflow","name":"netflow.ixia_encrypt_cipher","type":"keyword"},"netflow.ixia_encrypt_key_length":{"category":"netflow","name":"netflow.ixia_encrypt_key_length","type":"integer"},"netflow.ixia_encrypt_type":{"category":"netflow","name":"netflow.ixia_encrypt_type","type":"keyword"},"netflow.ixia_http_host_name":{"category":"netflow","name":"netflow.ixia_http_host_name","type":"keyword"},"netflow.ixia_http_uri":{"category":"netflow","name":"netflow.ixia_http_uri","type":"keyword"},"netflow.ixia_http_user_agent":{"category":"netflow","name":"netflow.ixia_http_user_agent","type":"keyword"},"netflow.ixia_imsi_subscriber":{"category":"netflow","name":"netflow.ixia_imsi_subscriber","type":"keyword"},"netflow.ixia_l7_app_id":{"category":"netflow","name":"netflow.ixia_l7_app_id","type":"long"},"netflow.ixia_l7_app_name":{"category":"netflow","name":"netflow.ixia_l7_app_name","type":"keyword"},"netflow.ixia_latency":{"category":"netflow","name":"netflow.ixia_latency","type":"long"},"netflow.ixia_rev_octet_delta_count":{"category":"netflow","name":"netflow.ixia_rev_octet_delta_count","type":"long"},"netflow.ixia_rev_packet_delta_count":{"category":"netflow","name":"netflow.ixia_rev_packet_delta_count","type":"long"},"netflow.ixia_src_as_name":{"category":"netflow","name":"netflow.ixia_src_as_name","type":"keyword"},"netflow.ixia_src_city_name":{"category":"netflow","name":"netflow.ixia_src_city_name","type":"keyword"},"netflow.ixia_src_country_code":{"category":"netflow","name":"netflow.ixia_src_country_code","type":"keyword"},"netflow.ixia_src_country_name":{"category":"netflow","name":"netflow.ixia_src_country_name","type":"keyword"},"netflow.ixia_src_latitude":{"category":"netflow","name":"netflow.ixia_src_latitude","type":"float"},"netflow.ixia_src_longitude":{"category":"netflow","name":"netflow.ixia_src_longitude","type":"float"},"netflow.ixia_src_region_code":{"category":"netflow","name":"netflow.ixia_src_region_code","type":"keyword"},"netflow.ixia_src_region_name":{"category":"netflow","name":"netflow.ixia_src_region_name","type":"keyword"},"netflow.ixia_threat_ipv4":{"category":"netflow","name":"netflow.ixia_threat_ipv4","type":"ip"},"netflow.ixia_threat_ipv6":{"category":"netflow","name":"netflow.ixia_threat_ipv6","type":"ip"},"netflow.ixia_threat_type":{"category":"netflow","name":"netflow.ixia_threat_type","type":"keyword"},"netflow.large_packet_count":{"category":"netflow","name":"netflow.large_packet_count","type":"long"},"netflow.layer2_frame_delta_count":{"category":"netflow","name":"netflow.layer2_frame_delta_count","type":"long"},"netflow.layer2_frame_total_count":{"category":"netflow","name":"netflow.layer2_frame_total_count","type":"long"},"netflow.layer2_octet_delta_count":{"category":"netflow","name":"netflow.layer2_octet_delta_count","type":"long"},"netflow.layer2_octet_delta_sum_of_squares":{"category":"netflow","name":"netflow.layer2_octet_delta_sum_of_squares","type":"long"},"netflow.layer2_octet_total_count":{"category":"netflow","name":"netflow.layer2_octet_total_count","type":"long"},"netflow.layer2_octet_total_sum_of_squares":{"category":"netflow","name":"netflow.layer2_octet_total_sum_of_squares","type":"long"},"netflow.layer2_segment_id":{"category":"netflow","name":"netflow.layer2_segment_id","type":"long"},"netflow.layer2packet_section_data":{"category":"netflow","name":"netflow.layer2packet_section_data","type":"short"},"netflow.layer2packet_section_offset":{"category":"netflow","name":"netflow.layer2packet_section_offset","type":"integer"},"netflow.layer2packet_section_size":{"category":"netflow","name":"netflow.layer2packet_section_size","type":"integer"},"netflow.line_card_id":{"category":"netflow","name":"netflow.line_card_id","type":"long"},"netflow.log_op":{"category":"netflow","name":"netflow.log_op","type":"short"},"netflow.lower_ci_limit":{"category":"netflow","name":"netflow.lower_ci_limit","type":"double"},"netflow.mark":{"category":"netflow","name":"netflow.mark","type":"long"},"netflow.max_bib_entries":{"category":"netflow","name":"netflow.max_bib_entries","type":"long"},"netflow.max_entries_per_user":{"category":"netflow","name":"netflow.max_entries_per_user","type":"long"},"netflow.max_export_seconds":{"category":"netflow","name":"netflow.max_export_seconds","type":"date"},"netflow.max_flow_end_microseconds":{"category":"netflow","name":"netflow.max_flow_end_microseconds","type":"date"},"netflow.max_flow_end_milliseconds":{"category":"netflow","name":"netflow.max_flow_end_milliseconds","type":"date"},"netflow.max_flow_end_nanoseconds":{"category":"netflow","name":"netflow.max_flow_end_nanoseconds","type":"date"},"netflow.max_flow_end_seconds":{"category":"netflow","name":"netflow.max_flow_end_seconds","type":"date"},"netflow.max_fragments_pending_reassembly":{"category":"netflow","name":"netflow.max_fragments_pending_reassembly","type":"long"},"netflow.max_packet_size":{"category":"netflow","name":"netflow.max_packet_size","type":"integer"},"netflow.max_session_entries":{"category":"netflow","name":"netflow.max_session_entries","type":"long"},"netflow.max_subscribers":{"category":"netflow","name":"netflow.max_subscribers","type":"long"},"netflow.maximum_ip_total_length":{"category":"netflow","name":"netflow.maximum_ip_total_length","type":"long"},"netflow.maximum_layer2_total_length":{"category":"netflow","name":"netflow.maximum_layer2_total_length","type":"long"},"netflow.maximum_ttl":{"category":"netflow","name":"netflow.maximum_ttl","type":"short"},"netflow.mean_flow_rate":{"category":"netflow","name":"netflow.mean_flow_rate","type":"long"},"netflow.mean_packet_rate":{"category":"netflow","name":"netflow.mean_packet_rate","type":"long"},"netflow.message_md5_checksum":{"category":"netflow","name":"netflow.message_md5_checksum","type":"short"},"netflow.message_scope":{"category":"netflow","name":"netflow.message_scope","type":"short"},"netflow.metering_process_id":{"category":"netflow","name":"netflow.metering_process_id","type":"long"},"netflow.metro_evc_id":{"category":"netflow","name":"netflow.metro_evc_id","type":"keyword"},"netflow.metro_evc_type":{"category":"netflow","name":"netflow.metro_evc_type","type":"short"},"netflow.mib_capture_time_semantics":{"category":"netflow","name":"netflow.mib_capture_time_semantics","type":"short"},"netflow.mib_context_engine_id":{"category":"netflow","name":"netflow.mib_context_engine_id","type":"short"},"netflow.mib_context_name":{"category":"netflow","name":"netflow.mib_context_name","type":"keyword"},"netflow.mib_index_indicator":{"category":"netflow","name":"netflow.mib_index_indicator","type":"long"},"netflow.mib_module_name":{"category":"netflow","name":"netflow.mib_module_name","type":"keyword"},"netflow.mib_object_description":{"category":"netflow","name":"netflow.mib_object_description","type":"keyword"},"netflow.mib_object_identifier":{"category":"netflow","name":"netflow.mib_object_identifier","type":"short"},"netflow.mib_object_name":{"category":"netflow","name":"netflow.mib_object_name","type":"keyword"},"netflow.mib_object_syntax":{"category":"netflow","name":"netflow.mib_object_syntax","type":"keyword"},"netflow.mib_object_value_bits":{"category":"netflow","name":"netflow.mib_object_value_bits","type":"short"},"netflow.mib_object_value_counter":{"category":"netflow","name":"netflow.mib_object_value_counter","type":"long"},"netflow.mib_object_value_gauge":{"category":"netflow","name":"netflow.mib_object_value_gauge","type":"long"},"netflow.mib_object_value_integer":{"category":"netflow","name":"netflow.mib_object_value_integer","type":"integer"},"netflow.mib_object_value_ip_address":{"category":"netflow","name":"netflow.mib_object_value_ip_address","type":"ip"},"netflow.mib_object_value_octet_string":{"category":"netflow","name":"netflow.mib_object_value_octet_string","type":"short"},"netflow.mib_object_value_oid":{"category":"netflow","name":"netflow.mib_object_value_oid","type":"short"},"netflow.mib_object_value_time_ticks":{"category":"netflow","name":"netflow.mib_object_value_time_ticks","type":"long"},"netflow.mib_object_value_unsigned":{"category":"netflow","name":"netflow.mib_object_value_unsigned","type":"long"},"netflow.mib_sub_identifier":{"category":"netflow","name":"netflow.mib_sub_identifier","type":"long"},"netflow.min_export_seconds":{"category":"netflow","name":"netflow.min_export_seconds","type":"date"},"netflow.min_flow_start_microseconds":{"category":"netflow","name":"netflow.min_flow_start_microseconds","type":"date"},"netflow.min_flow_start_milliseconds":{"category":"netflow","name":"netflow.min_flow_start_milliseconds","type":"date"},"netflow.min_flow_start_nanoseconds":{"category":"netflow","name":"netflow.min_flow_start_nanoseconds","type":"date"},"netflow.min_flow_start_seconds":{"category":"netflow","name":"netflow.min_flow_start_seconds","type":"date"},"netflow.minimum_ip_total_length":{"category":"netflow","name":"netflow.minimum_ip_total_length","type":"long"},"netflow.minimum_layer2_total_length":{"category":"netflow","name":"netflow.minimum_layer2_total_length","type":"long"},"netflow.minimum_ttl":{"category":"netflow","name":"netflow.minimum_ttl","type":"short"},"netflow.mobile_imsi":{"category":"netflow","name":"netflow.mobile_imsi","type":"keyword"},"netflow.mobile_msisdn":{"category":"netflow","name":"netflow.mobile_msisdn","type":"keyword"},"netflow.monitoring_interval_end_milli_seconds":{"category":"netflow","name":"netflow.monitoring_interval_end_milli_seconds","type":"date"},"netflow.monitoring_interval_start_milli_seconds":{"category":"netflow","name":"netflow.monitoring_interval_start_milli_seconds","type":"date"},"netflow.mpls_label_stack_depth":{"category":"netflow","name":"netflow.mpls_label_stack_depth","type":"long"},"netflow.mpls_label_stack_length":{"category":"netflow","name":"netflow.mpls_label_stack_length","type":"long"},"netflow.mpls_label_stack_section":{"category":"netflow","name":"netflow.mpls_label_stack_section","type":"short"},"netflow.mpls_label_stack_section10":{"category":"netflow","name":"netflow.mpls_label_stack_section10","type":"short"},"netflow.mpls_label_stack_section2":{"category":"netflow","name":"netflow.mpls_label_stack_section2","type":"short"},"netflow.mpls_label_stack_section3":{"category":"netflow","name":"netflow.mpls_label_stack_section3","type":"short"},"netflow.mpls_label_stack_section4":{"category":"netflow","name":"netflow.mpls_label_stack_section4","type":"short"},"netflow.mpls_label_stack_section5":{"category":"netflow","name":"netflow.mpls_label_stack_section5","type":"short"},"netflow.mpls_label_stack_section6":{"category":"netflow","name":"netflow.mpls_label_stack_section6","type":"short"},"netflow.mpls_label_stack_section7":{"category":"netflow","name":"netflow.mpls_label_stack_section7","type":"short"},"netflow.mpls_label_stack_section8":{"category":"netflow","name":"netflow.mpls_label_stack_section8","type":"short"},"netflow.mpls_label_stack_section9":{"category":"netflow","name":"netflow.mpls_label_stack_section9","type":"short"},"netflow.mpls_payload_length":{"category":"netflow","name":"netflow.mpls_payload_length","type":"long"},"netflow.mpls_payload_packet_section":{"category":"netflow","name":"netflow.mpls_payload_packet_section","type":"short"},"netflow.mpls_top_label_exp":{"category":"netflow","name":"netflow.mpls_top_label_exp","type":"short"},"netflow.mpls_top_label_ipv4_address":{"category":"netflow","name":"netflow.mpls_top_label_ipv4_address","type":"ip"},"netflow.mpls_top_label_ipv6_address":{"category":"netflow","name":"netflow.mpls_top_label_ipv6_address","type":"ip"},"netflow.mpls_top_label_prefix_length":{"category":"netflow","name":"netflow.mpls_top_label_prefix_length","type":"short"},"netflow.mpls_top_label_stack_section":{"category":"netflow","name":"netflow.mpls_top_label_stack_section","type":"short"},"netflow.mpls_top_label_ttl":{"category":"netflow","name":"netflow.mpls_top_label_ttl","type":"short"},"netflow.mpls_top_label_type":{"category":"netflow","name":"netflow.mpls_top_label_type","type":"short"},"netflow.mpls_vpn_route_distinguisher":{"category":"netflow","name":"netflow.mpls_vpn_route_distinguisher","type":"short"},"netflow.mptcp_address_id":{"category":"netflow","name":"netflow.mptcp_address_id","type":"short"},"netflow.mptcp_flags":{"category":"netflow","name":"netflow.mptcp_flags","type":"short"},"netflow.mptcp_initial_data_sequence_number":{"category":"netflow","name":"netflow.mptcp_initial_data_sequence_number","type":"long"},"netflow.mptcp_maximum_segment_size":{"category":"netflow","name":"netflow.mptcp_maximum_segment_size","type":"integer"},"netflow.mptcp_receiver_token":{"category":"netflow","name":"netflow.mptcp_receiver_token","type":"long"},"netflow.multicast_replication_factor":{"category":"netflow","name":"netflow.multicast_replication_factor","type":"long"},"netflow.nat_event":{"category":"netflow","name":"netflow.nat_event","type":"short"},"netflow.nat_inside_svcid":{"category":"netflow","name":"netflow.nat_inside_svcid","type":"integer"},"netflow.nat_instance_id":{"category":"netflow","name":"netflow.nat_instance_id","type":"long"},"netflow.nat_originating_address_realm":{"category":"netflow","name":"netflow.nat_originating_address_realm","type":"short"},"netflow.nat_outside_svcid":{"category":"netflow","name":"netflow.nat_outside_svcid","type":"integer"},"netflow.nat_pool_id":{"category":"netflow","name":"netflow.nat_pool_id","type":"long"},"netflow.nat_pool_name":{"category":"netflow","name":"netflow.nat_pool_name","type":"keyword"},"netflow.nat_quota_exceeded_event":{"category":"netflow","name":"netflow.nat_quota_exceeded_event","type":"long"},"netflow.nat_sub_string":{"category":"netflow","name":"netflow.nat_sub_string","type":"keyword"},"netflow.nat_threshold_event":{"category":"netflow","name":"netflow.nat_threshold_event","type":"long"},"netflow.nat_type":{"category":"netflow","name":"netflow.nat_type","type":"short"},"netflow.netscale_ica_client_version":{"category":"netflow","name":"netflow.netscale_ica_client_version","type":"keyword"},"netflow.netscaler_aaa_username":{"category":"netflow","name":"netflow.netscaler_aaa_username","type":"keyword"},"netflow.netscaler_app_name":{"category":"netflow","name":"netflow.netscaler_app_name","type":"keyword"},"netflow.netscaler_app_name_app_id":{"category":"netflow","name":"netflow.netscaler_app_name_app_id","type":"long"},"netflow.netscaler_app_name_incarnation_number":{"category":"netflow","name":"netflow.netscaler_app_name_incarnation_number","type":"long"},"netflow.netscaler_app_template_name":{"category":"netflow","name":"netflow.netscaler_app_template_name","type":"keyword"},"netflow.netscaler_app_unit_name_app_id":{"category":"netflow","name":"netflow.netscaler_app_unit_name_app_id","type":"long"},"netflow.netscaler_application_startup_duration":{"category":"netflow","name":"netflow.netscaler_application_startup_duration","type":"long"},"netflow.netscaler_application_startup_time":{"category":"netflow","name":"netflow.netscaler_application_startup_time","type":"long"},"netflow.netscaler_cache_redir_client_connection_core_id":{"category":"netflow","name":"netflow.netscaler_cache_redir_client_connection_core_id","type":"long"},"netflow.netscaler_cache_redir_client_connection_transaction_id":{"category":"netflow","name":"netflow.netscaler_cache_redir_client_connection_transaction_id","type":"long"},"netflow.netscaler_client_rtt":{"category":"netflow","name":"netflow.netscaler_client_rtt","type":"long"},"netflow.netscaler_connection_chain_hop_count":{"category":"netflow","name":"netflow.netscaler_connection_chain_hop_count","type":"long"},"netflow.netscaler_connection_chain_id":{"category":"netflow","name":"netflow.netscaler_connection_chain_id","type":"short"},"netflow.netscaler_connection_id":{"category":"netflow","name":"netflow.netscaler_connection_id","type":"long"},"netflow.netscaler_current_license_consumed":{"category":"netflow","name":"netflow.netscaler_current_license_consumed","type":"long"},"netflow.netscaler_db_clt_host_name":{"category":"netflow","name":"netflow.netscaler_db_clt_host_name","type":"keyword"},"netflow.netscaler_db_database_name":{"category":"netflow","name":"netflow.netscaler_db_database_name","type":"keyword"},"netflow.netscaler_db_login_flags":{"category":"netflow","name":"netflow.netscaler_db_login_flags","type":"long"},"netflow.netscaler_db_protocol_name":{"category":"netflow","name":"netflow.netscaler_db_protocol_name","type":"short"},"netflow.netscaler_db_req_string":{"category":"netflow","name":"netflow.netscaler_db_req_string","type":"keyword"},"netflow.netscaler_db_req_type":{"category":"netflow","name":"netflow.netscaler_db_req_type","type":"short"},"netflow.netscaler_db_resp_length":{"category":"netflow","name":"netflow.netscaler_db_resp_length","type":"long"},"netflow.netscaler_db_resp_status":{"category":"netflow","name":"netflow.netscaler_db_resp_status","type":"long"},"netflow.netscaler_db_resp_status_string":{"category":"netflow","name":"netflow.netscaler_db_resp_status_string","type":"keyword"},"netflow.netscaler_db_user_name":{"category":"netflow","name":"netflow.netscaler_db_user_name","type":"keyword"},"netflow.netscaler_flow_flags":{"category":"netflow","name":"netflow.netscaler_flow_flags","type":"long"},"netflow.netscaler_http_client_interaction_end_time":{"category":"netflow","name":"netflow.netscaler_http_client_interaction_end_time","type":"keyword"},"netflow.netscaler_http_client_interaction_start_time":{"category":"netflow","name":"netflow.netscaler_http_client_interaction_start_time","type":"keyword"},"netflow.netscaler_http_client_render_end_time":{"category":"netflow","name":"netflow.netscaler_http_client_render_end_time","type":"keyword"},"netflow.netscaler_http_client_render_start_time":{"category":"netflow","name":"netflow.netscaler_http_client_render_start_time","type":"keyword"},"netflow.netscaler_http_content_type":{"category":"netflow","name":"netflow.netscaler_http_content_type","type":"keyword"},"netflow.netscaler_http_domain_name":{"category":"netflow","name":"netflow.netscaler_http_domain_name","type":"keyword"},"netflow.netscaler_http_req_authorization":{"category":"netflow","name":"netflow.netscaler_http_req_authorization","type":"keyword"},"netflow.netscaler_http_req_cookie":{"category":"netflow","name":"netflow.netscaler_http_req_cookie","type":"keyword"},"netflow.netscaler_http_req_forw_fb":{"category":"netflow","name":"netflow.netscaler_http_req_forw_fb","type":"long"},"netflow.netscaler_http_req_forw_lb":{"category":"netflow","name":"netflow.netscaler_http_req_forw_lb","type":"long"},"netflow.netscaler_http_req_host":{"category":"netflow","name":"netflow.netscaler_http_req_host","type":"keyword"},"netflow.netscaler_http_req_method":{"category":"netflow","name":"netflow.netscaler_http_req_method","type":"keyword"},"netflow.netscaler_http_req_rcv_fb":{"category":"netflow","name":"netflow.netscaler_http_req_rcv_fb","type":"long"},"netflow.netscaler_http_req_rcv_lb":{"category":"netflow","name":"netflow.netscaler_http_req_rcv_lb","type":"long"},"netflow.netscaler_http_req_referer":{"category":"netflow","name":"netflow.netscaler_http_req_referer","type":"keyword"},"netflow.netscaler_http_req_url":{"category":"netflow","name":"netflow.netscaler_http_req_url","type":"keyword"},"netflow.netscaler_http_req_user_agent":{"category":"netflow","name":"netflow.netscaler_http_req_user_agent","type":"keyword"},"netflow.netscaler_http_req_via":{"category":"netflow","name":"netflow.netscaler_http_req_via","type":"keyword"},"netflow.netscaler_http_req_xforwarded_for":{"category":"netflow","name":"netflow.netscaler_http_req_xforwarded_for","type":"keyword"},"netflow.netscaler_http_res_forw_fb":{"category":"netflow","name":"netflow.netscaler_http_res_forw_fb","type":"long"},"netflow.netscaler_http_res_forw_lb":{"category":"netflow","name":"netflow.netscaler_http_res_forw_lb","type":"long"},"netflow.netscaler_http_res_location":{"category":"netflow","name":"netflow.netscaler_http_res_location","type":"keyword"},"netflow.netscaler_http_res_rcv_fb":{"category":"netflow","name":"netflow.netscaler_http_res_rcv_fb","type":"long"},"netflow.netscaler_http_res_rcv_lb":{"category":"netflow","name":"netflow.netscaler_http_res_rcv_lb","type":"long"},"netflow.netscaler_http_res_set_cookie":{"category":"netflow","name":"netflow.netscaler_http_res_set_cookie","type":"keyword"},"netflow.netscaler_http_res_set_cookie2":{"category":"netflow","name":"netflow.netscaler_http_res_set_cookie2","type":"keyword"},"netflow.netscaler_http_rsp_len":{"category":"netflow","name":"netflow.netscaler_http_rsp_len","type":"long"},"netflow.netscaler_http_rsp_status":{"category":"netflow","name":"netflow.netscaler_http_rsp_status","type":"integer"},"netflow.netscaler_ica_app_module_path":{"category":"netflow","name":"netflow.netscaler_ica_app_module_path","type":"keyword"},"netflow.netscaler_ica_app_process_id":{"category":"netflow","name":"netflow.netscaler_ica_app_process_id","type":"long"},"netflow.netscaler_ica_application_name":{"category":"netflow","name":"netflow.netscaler_ica_application_name","type":"keyword"},"netflow.netscaler_ica_application_termination_time":{"category":"netflow","name":"netflow.netscaler_ica_application_termination_time","type":"long"},"netflow.netscaler_ica_application_termination_type":{"category":"netflow","name":"netflow.netscaler_ica_application_termination_type","type":"integer"},"netflow.netscaler_ica_channel_id1":{"category":"netflow","name":"netflow.netscaler_ica_channel_id1","type":"long"},"netflow.netscaler_ica_channel_id1_bytes":{"category":"netflow","name":"netflow.netscaler_ica_channel_id1_bytes","type":"long"},"netflow.netscaler_ica_channel_id2":{"category":"netflow","name":"netflow.netscaler_ica_channel_id2","type":"long"},"netflow.netscaler_ica_channel_id2_bytes":{"category":"netflow","name":"netflow.netscaler_ica_channel_id2_bytes","type":"long"},"netflow.netscaler_ica_channel_id3":{"category":"netflow","name":"netflow.netscaler_ica_channel_id3","type":"long"},"netflow.netscaler_ica_channel_id3_bytes":{"category":"netflow","name":"netflow.netscaler_ica_channel_id3_bytes","type":"long"},"netflow.netscaler_ica_channel_id4":{"category":"netflow","name":"netflow.netscaler_ica_channel_id4","type":"long"},"netflow.netscaler_ica_channel_id4_bytes":{"category":"netflow","name":"netflow.netscaler_ica_channel_id4_bytes","type":"long"},"netflow.netscaler_ica_channel_id5":{"category":"netflow","name":"netflow.netscaler_ica_channel_id5","type":"long"},"netflow.netscaler_ica_channel_id5_bytes":{"category":"netflow","name":"netflow.netscaler_ica_channel_id5_bytes","type":"long"},"netflow.netscaler_ica_client_host_name":{"category":"netflow","name":"netflow.netscaler_ica_client_host_name","type":"keyword"},"netflow.netscaler_ica_client_ip":{"category":"netflow","name":"netflow.netscaler_ica_client_ip","type":"ip"},"netflow.netscaler_ica_client_launcher":{"category":"netflow","name":"netflow.netscaler_ica_client_launcher","type":"integer"},"netflow.netscaler_ica_client_side_rto_count":{"category":"netflow","name":"netflow.netscaler_ica_client_side_rto_count","type":"integer"},"netflow.netscaler_ica_client_side_window_size":{"category":"netflow","name":"netflow.netscaler_ica_client_side_window_size","type":"integer"},"netflow.netscaler_ica_client_type":{"category":"netflow","name":"netflow.netscaler_ica_client_type","type":"integer"},"netflow.netscaler_ica_clientside_delay":{"category":"netflow","name":"netflow.netscaler_ica_clientside_delay","type":"long"},"netflow.netscaler_ica_clientside_jitter":{"category":"netflow","name":"netflow.netscaler_ica_clientside_jitter","type":"long"},"netflow.netscaler_ica_clientside_packets_retransmit":{"category":"netflow","name":"netflow.netscaler_ica_clientside_packets_retransmit","type":"integer"},"netflow.netscaler_ica_clientside_rtt":{"category":"netflow","name":"netflow.netscaler_ica_clientside_rtt","type":"long"},"netflow.netscaler_ica_clientside_rx_bytes":{"category":"netflow","name":"netflow.netscaler_ica_clientside_rx_bytes","type":"long"},"netflow.netscaler_ica_clientside_srtt":{"category":"netflow","name":"netflow.netscaler_ica_clientside_srtt","type":"long"},"netflow.netscaler_ica_clientside_tx_bytes":{"category":"netflow","name":"netflow.netscaler_ica_clientside_tx_bytes","type":"long"},"netflow.netscaler_ica_connection_priority":{"category":"netflow","name":"netflow.netscaler_ica_connection_priority","type":"integer"},"netflow.netscaler_ica_device_serial_no":{"category":"netflow","name":"netflow.netscaler_ica_device_serial_no","type":"long"},"netflow.netscaler_ica_domain_name":{"category":"netflow","name":"netflow.netscaler_ica_domain_name","type":"keyword"},"netflow.netscaler_ica_flags":{"category":"netflow","name":"netflow.netscaler_ica_flags","type":"long"},"netflow.netscaler_ica_host_delay":{"category":"netflow","name":"netflow.netscaler_ica_host_delay","type":"long"},"netflow.netscaler_ica_l7_client_latency":{"category":"netflow","name":"netflow.netscaler_ica_l7_client_latency","type":"long"},"netflow.netscaler_ica_l7_server_latency":{"category":"netflow","name":"netflow.netscaler_ica_l7_server_latency","type":"long"},"netflow.netscaler_ica_launch_mechanism":{"category":"netflow","name":"netflow.netscaler_ica_launch_mechanism","type":"integer"},"netflow.netscaler_ica_network_update_end_time":{"category":"netflow","name":"netflow.netscaler_ica_network_update_end_time","type":"long"},"netflow.netscaler_ica_network_update_start_time":{"category":"netflow","name":"netflow.netscaler_ica_network_update_start_time","type":"long"},"netflow.netscaler_ica_rtt":{"category":"netflow","name":"netflow.netscaler_ica_rtt","type":"long"},"netflow.netscaler_ica_server_name":{"category":"netflow","name":"netflow.netscaler_ica_server_name","type":"keyword"},"netflow.netscaler_ica_server_side_rto_count":{"category":"netflow","name":"netflow.netscaler_ica_server_side_rto_count","type":"integer"},"netflow.netscaler_ica_server_side_window_size":{"category":"netflow","name":"netflow.netscaler_ica_server_side_window_size","type":"integer"},"netflow.netscaler_ica_serverside_delay":{"category":"netflow","name":"netflow.netscaler_ica_serverside_delay","type":"long"},"netflow.netscaler_ica_serverside_jitter":{"category":"netflow","name":"netflow.netscaler_ica_serverside_jitter","type":"long"},"netflow.netscaler_ica_serverside_packets_retransmit":{"category":"netflow","name":"netflow.netscaler_ica_serverside_packets_retransmit","type":"integer"},"netflow.netscaler_ica_serverside_rtt":{"category":"netflow","name":"netflow.netscaler_ica_serverside_rtt","type":"long"},"netflow.netscaler_ica_serverside_srtt":{"category":"netflow","name":"netflow.netscaler_ica_serverside_srtt","type":"long"},"netflow.netscaler_ica_session_end_time":{"category":"netflow","name":"netflow.netscaler_ica_session_end_time","type":"long"},"netflow.netscaler_ica_session_guid":{"category":"netflow","name":"netflow.netscaler_ica_session_guid","type":"short"},"netflow.netscaler_ica_session_reconnects":{"category":"netflow","name":"netflow.netscaler_ica_session_reconnects","type":"short"},"netflow.netscaler_ica_session_setup_time":{"category":"netflow","name":"netflow.netscaler_ica_session_setup_time","type":"long"},"netflow.netscaler_ica_session_update_begin_sec":{"category":"netflow","name":"netflow.netscaler_ica_session_update_begin_sec","type":"long"},"netflow.netscaler_ica_session_update_end_sec":{"category":"netflow","name":"netflow.netscaler_ica_session_update_end_sec","type":"long"},"netflow.netscaler_ica_username":{"category":"netflow","name":"netflow.netscaler_ica_username","type":"keyword"},"netflow.netscaler_license_type":{"category":"netflow","name":"netflow.netscaler_license_type","type":"short"},"netflow.netscaler_main_page_core_id":{"category":"netflow","name":"netflow.netscaler_main_page_core_id","type":"long"},"netflow.netscaler_main_page_id":{"category":"netflow","name":"netflow.netscaler_main_page_id","type":"long"},"netflow.netscaler_max_license_count":{"category":"netflow","name":"netflow.netscaler_max_license_count","type":"long"},"netflow.netscaler_msi_client_cookie":{"category":"netflow","name":"netflow.netscaler_msi_client_cookie","type":"short"},"netflow.netscaler_round_trip_time":{"category":"netflow","name":"netflow.netscaler_round_trip_time","type":"long"},"netflow.netscaler_server_ttfb":{"category":"netflow","name":"netflow.netscaler_server_ttfb","type":"long"},"netflow.netscaler_server_ttlb":{"category":"netflow","name":"netflow.netscaler_server_ttlb","type":"long"},"netflow.netscaler_syslog_message":{"category":"netflow","name":"netflow.netscaler_syslog_message","type":"keyword"},"netflow.netscaler_syslog_priority":{"category":"netflow","name":"netflow.netscaler_syslog_priority","type":"short"},"netflow.netscaler_syslog_timestamp":{"category":"netflow","name":"netflow.netscaler_syslog_timestamp","type":"long"},"netflow.netscaler_transaction_id":{"category":"netflow","name":"netflow.netscaler_transaction_id","type":"long"},"netflow.netscaler_unknown270":{"category":"netflow","name":"netflow.netscaler_unknown270","type":"long"},"netflow.netscaler_unknown271":{"category":"netflow","name":"netflow.netscaler_unknown271","type":"long"},"netflow.netscaler_unknown272":{"category":"netflow","name":"netflow.netscaler_unknown272","type":"long"},"netflow.netscaler_unknown273":{"category":"netflow","name":"netflow.netscaler_unknown273","type":"long"},"netflow.netscaler_unknown274":{"category":"netflow","name":"netflow.netscaler_unknown274","type":"long"},"netflow.netscaler_unknown275":{"category":"netflow","name":"netflow.netscaler_unknown275","type":"long"},"netflow.netscaler_unknown276":{"category":"netflow","name":"netflow.netscaler_unknown276","type":"long"},"netflow.netscaler_unknown277":{"category":"netflow","name":"netflow.netscaler_unknown277","type":"long"},"netflow.netscaler_unknown278":{"category":"netflow","name":"netflow.netscaler_unknown278","type":"long"},"netflow.netscaler_unknown279":{"category":"netflow","name":"netflow.netscaler_unknown279","type":"long"},"netflow.netscaler_unknown280":{"category":"netflow","name":"netflow.netscaler_unknown280","type":"long"},"netflow.netscaler_unknown281":{"category":"netflow","name":"netflow.netscaler_unknown281","type":"long"},"netflow.netscaler_unknown282":{"category":"netflow","name":"netflow.netscaler_unknown282","type":"long"},"netflow.netscaler_unknown283":{"category":"netflow","name":"netflow.netscaler_unknown283","type":"long"},"netflow.netscaler_unknown284":{"category":"netflow","name":"netflow.netscaler_unknown284","type":"long"},"netflow.netscaler_unknown285":{"category":"netflow","name":"netflow.netscaler_unknown285","type":"long"},"netflow.netscaler_unknown286":{"category":"netflow","name":"netflow.netscaler_unknown286","type":"long"},"netflow.netscaler_unknown287":{"category":"netflow","name":"netflow.netscaler_unknown287","type":"long"},"netflow.netscaler_unknown288":{"category":"netflow","name":"netflow.netscaler_unknown288","type":"long"},"netflow.netscaler_unknown289":{"category":"netflow","name":"netflow.netscaler_unknown289","type":"long"},"netflow.netscaler_unknown290":{"category":"netflow","name":"netflow.netscaler_unknown290","type":"long"},"netflow.netscaler_unknown291":{"category":"netflow","name":"netflow.netscaler_unknown291","type":"long"},"netflow.netscaler_unknown292":{"category":"netflow","name":"netflow.netscaler_unknown292","type":"long"},"netflow.netscaler_unknown293":{"category":"netflow","name":"netflow.netscaler_unknown293","type":"long"},"netflow.netscaler_unknown294":{"category":"netflow","name":"netflow.netscaler_unknown294","type":"long"},"netflow.netscaler_unknown295":{"category":"netflow","name":"netflow.netscaler_unknown295","type":"long"},"netflow.netscaler_unknown296":{"category":"netflow","name":"netflow.netscaler_unknown296","type":"long"},"netflow.netscaler_unknown297":{"category":"netflow","name":"netflow.netscaler_unknown297","type":"long"},"netflow.netscaler_unknown298":{"category":"netflow","name":"netflow.netscaler_unknown298","type":"long"},"netflow.netscaler_unknown299":{"category":"netflow","name":"netflow.netscaler_unknown299","type":"long"},"netflow.netscaler_unknown300":{"category":"netflow","name":"netflow.netscaler_unknown300","type":"long"},"netflow.netscaler_unknown301":{"category":"netflow","name":"netflow.netscaler_unknown301","type":"long"},"netflow.netscaler_unknown302":{"category":"netflow","name":"netflow.netscaler_unknown302","type":"long"},"netflow.netscaler_unknown303":{"category":"netflow","name":"netflow.netscaler_unknown303","type":"long"},"netflow.netscaler_unknown304":{"category":"netflow","name":"netflow.netscaler_unknown304","type":"long"},"netflow.netscaler_unknown305":{"category":"netflow","name":"netflow.netscaler_unknown305","type":"long"},"netflow.netscaler_unknown306":{"category":"netflow","name":"netflow.netscaler_unknown306","type":"long"},"netflow.netscaler_unknown307":{"category":"netflow","name":"netflow.netscaler_unknown307","type":"long"},"netflow.netscaler_unknown308":{"category":"netflow","name":"netflow.netscaler_unknown308","type":"long"},"netflow.netscaler_unknown309":{"category":"netflow","name":"netflow.netscaler_unknown309","type":"long"},"netflow.netscaler_unknown310":{"category":"netflow","name":"netflow.netscaler_unknown310","type":"long"},"netflow.netscaler_unknown311":{"category":"netflow","name":"netflow.netscaler_unknown311","type":"long"},"netflow.netscaler_unknown312":{"category":"netflow","name":"netflow.netscaler_unknown312","type":"long"},"netflow.netscaler_unknown313":{"category":"netflow","name":"netflow.netscaler_unknown313","type":"long"},"netflow.netscaler_unknown314":{"category":"netflow","name":"netflow.netscaler_unknown314","type":"long"},"netflow.netscaler_unknown315":{"category":"netflow","name":"netflow.netscaler_unknown315","type":"long"},"netflow.netscaler_unknown316":{"category":"netflow","name":"netflow.netscaler_unknown316","type":"keyword"},"netflow.netscaler_unknown317":{"category":"netflow","name":"netflow.netscaler_unknown317","type":"long"},"netflow.netscaler_unknown318":{"category":"netflow","name":"netflow.netscaler_unknown318","type":"long"},"netflow.netscaler_unknown319":{"category":"netflow","name":"netflow.netscaler_unknown319","type":"keyword"},"netflow.netscaler_unknown320":{"category":"netflow","name":"netflow.netscaler_unknown320","type":"integer"},"netflow.netscaler_unknown321":{"category":"netflow","name":"netflow.netscaler_unknown321","type":"long"},"netflow.netscaler_unknown322":{"category":"netflow","name":"netflow.netscaler_unknown322","type":"long"},"netflow.netscaler_unknown323":{"category":"netflow","name":"netflow.netscaler_unknown323","type":"integer"},"netflow.netscaler_unknown324":{"category":"netflow","name":"netflow.netscaler_unknown324","type":"integer"},"netflow.netscaler_unknown325":{"category":"netflow","name":"netflow.netscaler_unknown325","type":"integer"},"netflow.netscaler_unknown326":{"category":"netflow","name":"netflow.netscaler_unknown326","type":"integer"},"netflow.netscaler_unknown327":{"category":"netflow","name":"netflow.netscaler_unknown327","type":"long"},"netflow.netscaler_unknown328":{"category":"netflow","name":"netflow.netscaler_unknown328","type":"integer"},"netflow.netscaler_unknown329":{"category":"netflow","name":"netflow.netscaler_unknown329","type":"integer"},"netflow.netscaler_unknown330":{"category":"netflow","name":"netflow.netscaler_unknown330","type":"integer"},"netflow.netscaler_unknown331":{"category":"netflow","name":"netflow.netscaler_unknown331","type":"integer"},"netflow.netscaler_unknown332":{"category":"netflow","name":"netflow.netscaler_unknown332","type":"long"},"netflow.netscaler_unknown333":{"category":"netflow","name":"netflow.netscaler_unknown333","type":"keyword"},"netflow.netscaler_unknown334":{"category":"netflow","name":"netflow.netscaler_unknown334","type":"keyword"},"netflow.netscaler_unknown335":{"category":"netflow","name":"netflow.netscaler_unknown335","type":"long"},"netflow.netscaler_unknown336":{"category":"netflow","name":"netflow.netscaler_unknown336","type":"long"},"netflow.netscaler_unknown337":{"category":"netflow","name":"netflow.netscaler_unknown337","type":"long"},"netflow.netscaler_unknown338":{"category":"netflow","name":"netflow.netscaler_unknown338","type":"long"},"netflow.netscaler_unknown339":{"category":"netflow","name":"netflow.netscaler_unknown339","type":"long"},"netflow.netscaler_unknown340":{"category":"netflow","name":"netflow.netscaler_unknown340","type":"long"},"netflow.netscaler_unknown341":{"category":"netflow","name":"netflow.netscaler_unknown341","type":"long"},"netflow.netscaler_unknown342":{"category":"netflow","name":"netflow.netscaler_unknown342","type":"long"},"netflow.netscaler_unknown343":{"category":"netflow","name":"netflow.netscaler_unknown343","type":"long"},"netflow.netscaler_unknown344":{"category":"netflow","name":"netflow.netscaler_unknown344","type":"long"},"netflow.netscaler_unknown345":{"category":"netflow","name":"netflow.netscaler_unknown345","type":"long"},"netflow.netscaler_unknown346":{"category":"netflow","name":"netflow.netscaler_unknown346","type":"long"},"netflow.netscaler_unknown347":{"category":"netflow","name":"netflow.netscaler_unknown347","type":"long"},"netflow.netscaler_unknown348":{"category":"netflow","name":"netflow.netscaler_unknown348","type":"integer"},"netflow.netscaler_unknown349":{"category":"netflow","name":"netflow.netscaler_unknown349","type":"keyword"},"netflow.netscaler_unknown350":{"category":"netflow","name":"netflow.netscaler_unknown350","type":"keyword"},"netflow.netscaler_unknown351":{"category":"netflow","name":"netflow.netscaler_unknown351","type":"keyword"},"netflow.netscaler_unknown352":{"category":"netflow","name":"netflow.netscaler_unknown352","type":"integer"},"netflow.netscaler_unknown353":{"category":"netflow","name":"netflow.netscaler_unknown353","type":"long"},"netflow.netscaler_unknown354":{"category":"netflow","name":"netflow.netscaler_unknown354","type":"long"},"netflow.netscaler_unknown355":{"category":"netflow","name":"netflow.netscaler_unknown355","type":"long"},"netflow.netscaler_unknown356":{"category":"netflow","name":"netflow.netscaler_unknown356","type":"long"},"netflow.netscaler_unknown357":{"category":"netflow","name":"netflow.netscaler_unknown357","type":"long"},"netflow.netscaler_unknown363":{"category":"netflow","name":"netflow.netscaler_unknown363","type":"short"},"netflow.netscaler_unknown383":{"category":"netflow","name":"netflow.netscaler_unknown383","type":"short"},"netflow.netscaler_unknown391":{"category":"netflow","name":"netflow.netscaler_unknown391","type":"long"},"netflow.netscaler_unknown398":{"category":"netflow","name":"netflow.netscaler_unknown398","type":"long"},"netflow.netscaler_unknown404":{"category":"netflow","name":"netflow.netscaler_unknown404","type":"long"},"netflow.netscaler_unknown405":{"category":"netflow","name":"netflow.netscaler_unknown405","type":"long"},"netflow.netscaler_unknown427":{"category":"netflow","name":"netflow.netscaler_unknown427","type":"long"},"netflow.netscaler_unknown429":{"category":"netflow","name":"netflow.netscaler_unknown429","type":"short"},"netflow.netscaler_unknown432":{"category":"netflow","name":"netflow.netscaler_unknown432","type":"short"},"netflow.netscaler_unknown433":{"category":"netflow","name":"netflow.netscaler_unknown433","type":"short"},"netflow.netscaler_unknown453":{"category":"netflow","name":"netflow.netscaler_unknown453","type":"long"},"netflow.netscaler_unknown465":{"category":"netflow","name":"netflow.netscaler_unknown465","type":"long"},"netflow.new_connection_delta_count":{"category":"netflow","name":"netflow.new_connection_delta_count","type":"long"},"netflow.next_header_ipv6":{"category":"netflow","name":"netflow.next_header_ipv6","type":"short"},"netflow.non_empty_packet_count":{"category":"netflow","name":"netflow.non_empty_packet_count","type":"long"},"netflow.not_sent_flow_total_count":{"category":"netflow","name":"netflow.not_sent_flow_total_count","type":"long"},"netflow.not_sent_layer2_octet_total_count":{"category":"netflow","name":"netflow.not_sent_layer2_octet_total_count","type":"long"},"netflow.not_sent_octet_total_count":{"category":"netflow","name":"netflow.not_sent_octet_total_count","type":"long"},"netflow.not_sent_packet_total_count":{"category":"netflow","name":"netflow.not_sent_packet_total_count","type":"long"},"netflow.observation_domain_id":{"category":"netflow","name":"netflow.observation_domain_id","type":"long"},"netflow.observation_domain_name":{"category":"netflow","name":"netflow.observation_domain_name","type":"keyword"},"netflow.observation_point_id":{"category":"netflow","name":"netflow.observation_point_id","type":"long"},"netflow.observation_point_type":{"category":"netflow","name":"netflow.observation_point_type","type":"short"},"netflow.observation_time_microseconds":{"category":"netflow","name":"netflow.observation_time_microseconds","type":"date"},"netflow.observation_time_milliseconds":{"category":"netflow","name":"netflow.observation_time_milliseconds","type":"date"},"netflow.observation_time_nanoseconds":{"category":"netflow","name":"netflow.observation_time_nanoseconds","type":"date"},"netflow.observation_time_seconds":{"category":"netflow","name":"netflow.observation_time_seconds","type":"date"},"netflow.observed_flow_total_count":{"category":"netflow","name":"netflow.observed_flow_total_count","type":"long"},"netflow.octet_delta_count":{"category":"netflow","name":"netflow.octet_delta_count","type":"long"},"netflow.octet_delta_sum_of_squares":{"category":"netflow","name":"netflow.octet_delta_sum_of_squares","type":"long"},"netflow.octet_total_count":{"category":"netflow","name":"netflow.octet_total_count","type":"long"},"netflow.octet_total_sum_of_squares":{"category":"netflow","name":"netflow.octet_total_sum_of_squares","type":"long"},"netflow.opaque_octets":{"category":"netflow","name":"netflow.opaque_octets","type":"short"},"netflow.original_exporter_ipv4_address":{"category":"netflow","name":"netflow.original_exporter_ipv4_address","type":"ip"},"netflow.original_exporter_ipv6_address":{"category":"netflow","name":"netflow.original_exporter_ipv6_address","type":"ip"},"netflow.original_flows_completed":{"category":"netflow","name":"netflow.original_flows_completed","type":"long"},"netflow.original_flows_initiated":{"category":"netflow","name":"netflow.original_flows_initiated","type":"long"},"netflow.original_flows_present":{"category":"netflow","name":"netflow.original_flows_present","type":"long"},"netflow.original_observation_domain_id":{"category":"netflow","name":"netflow.original_observation_domain_id","type":"long"},"netflow.os_finger_print":{"category":"netflow","name":"netflow.os_finger_print","type":"keyword"},"netflow.os_name":{"category":"netflow","name":"netflow.os_name","type":"keyword"},"netflow.os_version":{"category":"netflow","name":"netflow.os_version","type":"keyword"},"netflow.p2p_technology":{"category":"netflow","name":"netflow.p2p_technology","type":"keyword"},"netflow.packet_delta_count":{"category":"netflow","name":"netflow.packet_delta_count","type":"long"},"netflow.packet_total_count":{"category":"netflow","name":"netflow.packet_total_count","type":"long"},"netflow.padding_octets":{"category":"netflow","name":"netflow.padding_octets","type":"short"},"netflow.payload":{"category":"netflow","name":"netflow.payload","type":"keyword"},"netflow.payload_entropy":{"category":"netflow","name":"netflow.payload_entropy","type":"short"},"netflow.payload_length_ipv6":{"category":"netflow","name":"netflow.payload_length_ipv6","type":"integer"},"netflow.policy_qos_classification_hierarchy":{"category":"netflow","name":"netflow.policy_qos_classification_hierarchy","type":"long"},"netflow.policy_qos_queue_index":{"category":"netflow","name":"netflow.policy_qos_queue_index","type":"long"},"netflow.policy_qos_queuedrops":{"category":"netflow","name":"netflow.policy_qos_queuedrops","type":"long"},"netflow.policy_qos_queueindex":{"category":"netflow","name":"netflow.policy_qos_queueindex","type":"long"},"netflow.port_id":{"category":"netflow","name":"netflow.port_id","type":"long"},"netflow.port_range_end":{"category":"netflow","name":"netflow.port_range_end","type":"integer"},"netflow.port_range_num_ports":{"category":"netflow","name":"netflow.port_range_num_ports","type":"integer"},"netflow.port_range_start":{"category":"netflow","name":"netflow.port_range_start","type":"integer"},"netflow.port_range_step_size":{"category":"netflow","name":"netflow.port_range_step_size","type":"integer"},"netflow.post_destination_mac_address":{"category":"netflow","name":"netflow.post_destination_mac_address","type":"keyword"},"netflow.post_dot1q_customer_vlan_id":{"category":"netflow","name":"netflow.post_dot1q_customer_vlan_id","type":"integer"},"netflow.post_dot1q_vlan_id":{"category":"netflow","name":"netflow.post_dot1q_vlan_id","type":"integer"},"netflow.post_ip_class_of_service":{"category":"netflow","name":"netflow.post_ip_class_of_service","type":"short"},"netflow.post_ip_diff_serv_code_point":{"category":"netflow","name":"netflow.post_ip_diff_serv_code_point","type":"short"},"netflow.post_ip_precedence":{"category":"netflow","name":"netflow.post_ip_precedence","type":"short"},"netflow.post_layer2_octet_delta_count":{"category":"netflow","name":"netflow.post_layer2_octet_delta_count","type":"long"},"netflow.post_layer2_octet_total_count":{"category":"netflow","name":"netflow.post_layer2_octet_total_count","type":"long"},"netflow.post_mcast_layer2_octet_delta_count":{"category":"netflow","name":"netflow.post_mcast_layer2_octet_delta_count","type":"long"},"netflow.post_mcast_layer2_octet_total_count":{"category":"netflow","name":"netflow.post_mcast_layer2_octet_total_count","type":"long"},"netflow.post_mcast_octet_delta_count":{"category":"netflow","name":"netflow.post_mcast_octet_delta_count","type":"long"},"netflow.post_mcast_octet_total_count":{"category":"netflow","name":"netflow.post_mcast_octet_total_count","type":"long"},"netflow.post_mcast_packet_delta_count":{"category":"netflow","name":"netflow.post_mcast_packet_delta_count","type":"long"},"netflow.post_mcast_packet_total_count":{"category":"netflow","name":"netflow.post_mcast_packet_total_count","type":"long"},"netflow.post_mpls_top_label_exp":{"category":"netflow","name":"netflow.post_mpls_top_label_exp","type":"short"},"netflow.post_napt_destination_transport_port":{"category":"netflow","name":"netflow.post_napt_destination_transport_port","type":"integer"},"netflow.post_napt_source_transport_port":{"category":"netflow","name":"netflow.post_napt_source_transport_port","type":"integer"},"netflow.post_nat_destination_ipv4_address":{"category":"netflow","name":"netflow.post_nat_destination_ipv4_address","type":"ip"},"netflow.post_nat_destination_ipv6_address":{"category":"netflow","name":"netflow.post_nat_destination_ipv6_address","type":"ip"},"netflow.post_nat_source_ipv4_address":{"category":"netflow","name":"netflow.post_nat_source_ipv4_address","type":"ip"},"netflow.post_nat_source_ipv6_address":{"category":"netflow","name":"netflow.post_nat_source_ipv6_address","type":"ip"},"netflow.post_octet_delta_count":{"category":"netflow","name":"netflow.post_octet_delta_count","type":"long"},"netflow.post_octet_total_count":{"category":"netflow","name":"netflow.post_octet_total_count","type":"long"},"netflow.post_packet_delta_count":{"category":"netflow","name":"netflow.post_packet_delta_count","type":"long"},"netflow.post_packet_total_count":{"category":"netflow","name":"netflow.post_packet_total_count","type":"long"},"netflow.post_source_mac_address":{"category":"netflow","name":"netflow.post_source_mac_address","type":"keyword"},"netflow.post_vlan_id":{"category":"netflow","name":"netflow.post_vlan_id","type":"integer"},"netflow.private_enterprise_number":{"category":"netflow","name":"netflow.private_enterprise_number","type":"long"},"netflow.procera_apn":{"category":"netflow","name":"netflow.procera_apn","type":"keyword"},"netflow.procera_base_service":{"category":"netflow","name":"netflow.procera_base_service","type":"keyword"},"netflow.procera_content_categories":{"category":"netflow","name":"netflow.procera_content_categories","type":"keyword"},"netflow.procera_device_id":{"category":"netflow","name":"netflow.procera_device_id","type":"long"},"netflow.procera_external_rtt":{"category":"netflow","name":"netflow.procera_external_rtt","type":"integer"},"netflow.procera_flow_behavior":{"category":"netflow","name":"netflow.procera_flow_behavior","type":"keyword"},"netflow.procera_ggsn":{"category":"netflow","name":"netflow.procera_ggsn","type":"keyword"},"netflow.procera_http_content_type":{"category":"netflow","name":"netflow.procera_http_content_type","type":"keyword"},"netflow.procera_http_file_length":{"category":"netflow","name":"netflow.procera_http_file_length","type":"long"},"netflow.procera_http_language":{"category":"netflow","name":"netflow.procera_http_language","type":"keyword"},"netflow.procera_http_location":{"category":"netflow","name":"netflow.procera_http_location","type":"keyword"},"netflow.procera_http_referer":{"category":"netflow","name":"netflow.procera_http_referer","type":"keyword"},"netflow.procera_http_request_method":{"category":"netflow","name":"netflow.procera_http_request_method","type":"keyword"},"netflow.procera_http_request_version":{"category":"netflow","name":"netflow.procera_http_request_version","type":"keyword"},"netflow.procera_http_response_status":{"category":"netflow","name":"netflow.procera_http_response_status","type":"integer"},"netflow.procera_http_url":{"category":"netflow","name":"netflow.procera_http_url","type":"keyword"},"netflow.procera_http_user_agent":{"category":"netflow","name":"netflow.procera_http_user_agent","type":"keyword"},"netflow.procera_imsi":{"category":"netflow","name":"netflow.procera_imsi","type":"long"},"netflow.procera_incoming_octets":{"category":"netflow","name":"netflow.procera_incoming_octets","type":"long"},"netflow.procera_incoming_packets":{"category":"netflow","name":"netflow.procera_incoming_packets","type":"long"},"netflow.procera_incoming_shaping_drops":{"category":"netflow","name":"netflow.procera_incoming_shaping_drops","type":"long"},"netflow.procera_incoming_shaping_latency":{"category":"netflow","name":"netflow.procera_incoming_shaping_latency","type":"integer"},"netflow.procera_internal_rtt":{"category":"netflow","name":"netflow.procera_internal_rtt","type":"integer"},"netflow.procera_local_ipv4_host":{"category":"netflow","name":"netflow.procera_local_ipv4_host","type":"ip"},"netflow.procera_local_ipv6_host":{"category":"netflow","name":"netflow.procera_local_ipv6_host","type":"ip"},"netflow.procera_msisdn":{"category":"netflow","name":"netflow.procera_msisdn","type":"long"},"netflow.procera_outgoing_octets":{"category":"netflow","name":"netflow.procera_outgoing_octets","type":"long"},"netflow.procera_outgoing_packets":{"category":"netflow","name":"netflow.procera_outgoing_packets","type":"long"},"netflow.procera_outgoing_shaping_drops":{"category":"netflow","name":"netflow.procera_outgoing_shaping_drops","type":"long"},"netflow.procera_outgoing_shaping_latency":{"category":"netflow","name":"netflow.procera_outgoing_shaping_latency","type":"integer"},"netflow.procera_property":{"category":"netflow","name":"netflow.procera_property","type":"keyword"},"netflow.procera_qoe_incoming_external":{"category":"netflow","name":"netflow.procera_qoe_incoming_external","type":"float"},"netflow.procera_qoe_incoming_internal":{"category":"netflow","name":"netflow.procera_qoe_incoming_internal","type":"float"},"netflow.procera_qoe_outgoing_external":{"category":"netflow","name":"netflow.procera_qoe_outgoing_external","type":"float"},"netflow.procera_qoe_outgoing_internal":{"category":"netflow","name":"netflow.procera_qoe_outgoing_internal","type":"float"},"netflow.procera_rat":{"category":"netflow","name":"netflow.procera_rat","type":"keyword"},"netflow.procera_remote_ipv4_host":{"category":"netflow","name":"netflow.procera_remote_ipv4_host","type":"ip"},"netflow.procera_remote_ipv6_host":{"category":"netflow","name":"netflow.procera_remote_ipv6_host","type":"ip"},"netflow.procera_rnc":{"category":"netflow","name":"netflow.procera_rnc","type":"integer"},"netflow.procera_server_hostname":{"category":"netflow","name":"netflow.procera_server_hostname","type":"keyword"},"netflow.procera_service":{"category":"netflow","name":"netflow.procera_service","type":"keyword"},"netflow.procera_sgsn":{"category":"netflow","name":"netflow.procera_sgsn","type":"keyword"},"netflow.procera_subscriber_identifier":{"category":"netflow","name":"netflow.procera_subscriber_identifier","type":"keyword"},"netflow.procera_template_name":{"category":"netflow","name":"netflow.procera_template_name","type":"keyword"},"netflow.procera_user_location_information":{"category":"netflow","name":"netflow.procera_user_location_information","type":"keyword"},"netflow.protocol_identifier":{"category":"netflow","name":"netflow.protocol_identifier","type":"short"},"netflow.pseudo_wire_control_word":{"category":"netflow","name":"netflow.pseudo_wire_control_word","type":"long"},"netflow.pseudo_wire_destination_ipv4_address":{"category":"netflow","name":"netflow.pseudo_wire_destination_ipv4_address","type":"ip"},"netflow.pseudo_wire_id":{"category":"netflow","name":"netflow.pseudo_wire_id","type":"long"},"netflow.pseudo_wire_type":{"category":"netflow","name":"netflow.pseudo_wire_type","type":"integer"},"netflow.reason":{"category":"netflow","name":"netflow.reason","type":"long"},"netflow.reason_text":{"category":"netflow","name":"netflow.reason_text","type":"keyword"},"netflow.relative_error":{"category":"netflow","name":"netflow.relative_error","type":"double"},"netflow.responder_octets":{"category":"netflow","name":"netflow.responder_octets","type":"long"},"netflow.responder_packets":{"category":"netflow","name":"netflow.responder_packets","type":"long"},"netflow.reverse_absolute_error":{"category":"netflow","name":"netflow.reverse_absolute_error","type":"double"},"netflow.reverse_anonymization_flags":{"category":"netflow","name":"netflow.reverse_anonymization_flags","type":"integer"},"netflow.reverse_anonymization_technique":{"category":"netflow","name":"netflow.reverse_anonymization_technique","type":"integer"},"netflow.reverse_application_category_name":{"category":"netflow","name":"netflow.reverse_application_category_name","type":"keyword"},"netflow.reverse_application_description":{"category":"netflow","name":"netflow.reverse_application_description","type":"keyword"},"netflow.reverse_application_group_name":{"category":"netflow","name":"netflow.reverse_application_group_name","type":"keyword"},"netflow.reverse_application_id":{"category":"netflow","name":"netflow.reverse_application_id","type":"keyword"},"netflow.reverse_application_name":{"category":"netflow","name":"netflow.reverse_application_name","type":"keyword"},"netflow.reverse_application_sub_category_name":{"category":"netflow","name":"netflow.reverse_application_sub_category_name","type":"keyword"},"netflow.reverse_average_interarrival_time":{"category":"netflow","name":"netflow.reverse_average_interarrival_time","type":"long"},"netflow.reverse_bgp_destination_as_number":{"category":"netflow","name":"netflow.reverse_bgp_destination_as_number","type":"long"},"netflow.reverse_bgp_next_adjacent_as_number":{"category":"netflow","name":"netflow.reverse_bgp_next_adjacent_as_number","type":"long"},"netflow.reverse_bgp_next_hop_ipv4_address":{"category":"netflow","name":"netflow.reverse_bgp_next_hop_ipv4_address","type":"ip"},"netflow.reverse_bgp_next_hop_ipv6_address":{"category":"netflow","name":"netflow.reverse_bgp_next_hop_ipv6_address","type":"ip"},"netflow.reverse_bgp_prev_adjacent_as_number":{"category":"netflow","name":"netflow.reverse_bgp_prev_adjacent_as_number","type":"long"},"netflow.reverse_bgp_source_as_number":{"category":"netflow","name":"netflow.reverse_bgp_source_as_number","type":"long"},"netflow.reverse_bgp_validity_state":{"category":"netflow","name":"netflow.reverse_bgp_validity_state","type":"short"},"netflow.reverse_class_id":{"category":"netflow","name":"netflow.reverse_class_id","type":"short"},"netflow.reverse_class_name":{"category":"netflow","name":"netflow.reverse_class_name","type":"keyword"},"netflow.reverse_classification_engine_id":{"category":"netflow","name":"netflow.reverse_classification_engine_id","type":"short"},"netflow.reverse_collection_time_milliseconds":{"category":"netflow","name":"netflow.reverse_collection_time_milliseconds","type":"long"},"netflow.reverse_collector_certificate":{"category":"netflow","name":"netflow.reverse_collector_certificate","type":"keyword"},"netflow.reverse_confidence_level":{"category":"netflow","name":"netflow.reverse_confidence_level","type":"double"},"netflow.reverse_connection_sum_duration_seconds":{"category":"netflow","name":"netflow.reverse_connection_sum_duration_seconds","type":"long"},"netflow.reverse_connection_transaction_id":{"category":"netflow","name":"netflow.reverse_connection_transaction_id","type":"long"},"netflow.reverse_data_byte_count":{"category":"netflow","name":"netflow.reverse_data_byte_count","type":"long"},"netflow.reverse_data_link_frame_section":{"category":"netflow","name":"netflow.reverse_data_link_frame_section","type":"keyword"},"netflow.reverse_data_link_frame_size":{"category":"netflow","name":"netflow.reverse_data_link_frame_size","type":"integer"},"netflow.reverse_data_link_frame_type":{"category":"netflow","name":"netflow.reverse_data_link_frame_type","type":"integer"},"netflow.reverse_data_records_reliability":{"category":"netflow","name":"netflow.reverse_data_records_reliability","type":"short"},"netflow.reverse_delta_flow_count":{"category":"netflow","name":"netflow.reverse_delta_flow_count","type":"long"},"netflow.reverse_destination_ipv4_address":{"category":"netflow","name":"netflow.reverse_destination_ipv4_address","type":"ip"},"netflow.reverse_destination_ipv4_prefix":{"category":"netflow","name":"netflow.reverse_destination_ipv4_prefix","type":"ip"},"netflow.reverse_destination_ipv4_prefix_length":{"category":"netflow","name":"netflow.reverse_destination_ipv4_prefix_length","type":"short"},"netflow.reverse_destination_ipv6_address":{"category":"netflow","name":"netflow.reverse_destination_ipv6_address","type":"ip"},"netflow.reverse_destination_ipv6_prefix":{"category":"netflow","name":"netflow.reverse_destination_ipv6_prefix","type":"ip"},"netflow.reverse_destination_ipv6_prefix_length":{"category":"netflow","name":"netflow.reverse_destination_ipv6_prefix_length","type":"short"},"netflow.reverse_destination_mac_address":{"category":"netflow","name":"netflow.reverse_destination_mac_address","type":"keyword"},"netflow.reverse_destination_transport_port":{"category":"netflow","name":"netflow.reverse_destination_transport_port","type":"integer"},"netflow.reverse_digest_hash_value":{"category":"netflow","name":"netflow.reverse_digest_hash_value","type":"long"},"netflow.reverse_distinct_count_of_destination_ip_address":{"category":"netflow","name":"netflow.reverse_distinct_count_of_destination_ip_address","type":"long"},"netflow.reverse_distinct_count_of_destination_ipv4_address":{"category":"netflow","name":"netflow.reverse_distinct_count_of_destination_ipv4_address","type":"long"},"netflow.reverse_distinct_count_of_destination_ipv6_address":{"category":"netflow","name":"netflow.reverse_distinct_count_of_destination_ipv6_address","type":"long"},"netflow.reverse_distinct_count_of_source_ip_address":{"category":"netflow","name":"netflow.reverse_distinct_count_of_source_ip_address","type":"long"},"netflow.reverse_distinct_count_of_source_ipv4_address":{"category":"netflow","name":"netflow.reverse_distinct_count_of_source_ipv4_address","type":"long"},"netflow.reverse_distinct_count_of_source_ipv6_address":{"category":"netflow","name":"netflow.reverse_distinct_count_of_source_ipv6_address","type":"long"},"netflow.reverse_dot1q_customer_dei":{"category":"netflow","name":"netflow.reverse_dot1q_customer_dei","type":"short"},"netflow.reverse_dot1q_customer_destination_mac_address":{"category":"netflow","name":"netflow.reverse_dot1q_customer_destination_mac_address","type":"keyword"},"netflow.reverse_dot1q_customer_priority":{"category":"netflow","name":"netflow.reverse_dot1q_customer_priority","type":"short"},"netflow.reverse_dot1q_customer_source_mac_address":{"category":"netflow","name":"netflow.reverse_dot1q_customer_source_mac_address","type":"keyword"},"netflow.reverse_dot1q_customer_vlan_id":{"category":"netflow","name":"netflow.reverse_dot1q_customer_vlan_id","type":"integer"},"netflow.reverse_dot1q_dei":{"category":"netflow","name":"netflow.reverse_dot1q_dei","type":"short"},"netflow.reverse_dot1q_priority":{"category":"netflow","name":"netflow.reverse_dot1q_priority","type":"short"},"netflow.reverse_dot1q_service_instance_id":{"category":"netflow","name":"netflow.reverse_dot1q_service_instance_id","type":"long"},"netflow.reverse_dot1q_service_instance_priority":{"category":"netflow","name":"netflow.reverse_dot1q_service_instance_priority","type":"short"},"netflow.reverse_dot1q_service_instance_tag":{"category":"netflow","name":"netflow.reverse_dot1q_service_instance_tag","type":"keyword"},"netflow.reverse_dot1q_vlan_id":{"category":"netflow","name":"netflow.reverse_dot1q_vlan_id","type":"integer"},"netflow.reverse_dropped_layer2_octet_delta_count":{"category":"netflow","name":"netflow.reverse_dropped_layer2_octet_delta_count","type":"long"},"netflow.reverse_dropped_layer2_octet_total_count":{"category":"netflow","name":"netflow.reverse_dropped_layer2_octet_total_count","type":"long"},"netflow.reverse_dropped_octet_delta_count":{"category":"netflow","name":"netflow.reverse_dropped_octet_delta_count","type":"long"},"netflow.reverse_dropped_octet_total_count":{"category":"netflow","name":"netflow.reverse_dropped_octet_total_count","type":"long"},"netflow.reverse_dropped_packet_delta_count":{"category":"netflow","name":"netflow.reverse_dropped_packet_delta_count","type":"long"},"netflow.reverse_dropped_packet_total_count":{"category":"netflow","name":"netflow.reverse_dropped_packet_total_count","type":"long"},"netflow.reverse_dst_traffic_index":{"category":"netflow","name":"netflow.reverse_dst_traffic_index","type":"long"},"netflow.reverse_egress_broadcast_packet_total_count":{"category":"netflow","name":"netflow.reverse_egress_broadcast_packet_total_count","type":"long"},"netflow.reverse_egress_interface":{"category":"netflow","name":"netflow.reverse_egress_interface","type":"long"},"netflow.reverse_egress_interface_type":{"category":"netflow","name":"netflow.reverse_egress_interface_type","type":"long"},"netflow.reverse_egress_physical_interface":{"category":"netflow","name":"netflow.reverse_egress_physical_interface","type":"long"},"netflow.reverse_egress_unicast_packet_total_count":{"category":"netflow","name":"netflow.reverse_egress_unicast_packet_total_count","type":"long"},"netflow.reverse_egress_vrfid":{"category":"netflow","name":"netflow.reverse_egress_vrfid","type":"long"},"netflow.reverse_encrypted_technology":{"category":"netflow","name":"netflow.reverse_encrypted_technology","type":"keyword"},"netflow.reverse_engine_id":{"category":"netflow","name":"netflow.reverse_engine_id","type":"short"},"netflow.reverse_engine_type":{"category":"netflow","name":"netflow.reverse_engine_type","type":"short"},"netflow.reverse_ethernet_header_length":{"category":"netflow","name":"netflow.reverse_ethernet_header_length","type":"short"},"netflow.reverse_ethernet_payload_length":{"category":"netflow","name":"netflow.reverse_ethernet_payload_length","type":"integer"},"netflow.reverse_ethernet_total_length":{"category":"netflow","name":"netflow.reverse_ethernet_total_length","type":"integer"},"netflow.reverse_ethernet_type":{"category":"netflow","name":"netflow.reverse_ethernet_type","type":"integer"},"netflow.reverse_export_sctp_stream_id":{"category":"netflow","name":"netflow.reverse_export_sctp_stream_id","type":"integer"},"netflow.reverse_exporter_certificate":{"category":"netflow","name":"netflow.reverse_exporter_certificate","type":"keyword"},"netflow.reverse_exporting_process_id":{"category":"netflow","name":"netflow.reverse_exporting_process_id","type":"long"},"netflow.reverse_firewall_event":{"category":"netflow","name":"netflow.reverse_firewall_event","type":"short"},"netflow.reverse_first_non_empty_packet_size":{"category":"netflow","name":"netflow.reverse_first_non_empty_packet_size","type":"integer"},"netflow.reverse_first_packet_banner":{"category":"netflow","name":"netflow.reverse_first_packet_banner","type":"keyword"},"netflow.reverse_flags_and_sampler_id":{"category":"netflow","name":"netflow.reverse_flags_and_sampler_id","type":"long"},"netflow.reverse_flow_active_timeout":{"category":"netflow","name":"netflow.reverse_flow_active_timeout","type":"integer"},"netflow.reverse_flow_attributes":{"category":"netflow","name":"netflow.reverse_flow_attributes","type":"integer"},"netflow.reverse_flow_delta_milliseconds":{"category":"netflow","name":"netflow.reverse_flow_delta_milliseconds","type":"long"},"netflow.reverse_flow_direction":{"category":"netflow","name":"netflow.reverse_flow_direction","type":"short"},"netflow.reverse_flow_duration_microseconds":{"category":"netflow","name":"netflow.reverse_flow_duration_microseconds","type":"long"},"netflow.reverse_flow_duration_milliseconds":{"category":"netflow","name":"netflow.reverse_flow_duration_milliseconds","type":"long"},"netflow.reverse_flow_end_delta_microseconds":{"category":"netflow","name":"netflow.reverse_flow_end_delta_microseconds","type":"long"},"netflow.reverse_flow_end_microseconds":{"category":"netflow","name":"netflow.reverse_flow_end_microseconds","type":"long"},"netflow.reverse_flow_end_milliseconds":{"category":"netflow","name":"netflow.reverse_flow_end_milliseconds","type":"long"},"netflow.reverse_flow_end_nanoseconds":{"category":"netflow","name":"netflow.reverse_flow_end_nanoseconds","type":"long"},"netflow.reverse_flow_end_reason":{"category":"netflow","name":"netflow.reverse_flow_end_reason","type":"short"},"netflow.reverse_flow_end_seconds":{"category":"netflow","name":"netflow.reverse_flow_end_seconds","type":"long"},"netflow.reverse_flow_end_sys_up_time":{"category":"netflow","name":"netflow.reverse_flow_end_sys_up_time","type":"long"},"netflow.reverse_flow_idle_timeout":{"category":"netflow","name":"netflow.reverse_flow_idle_timeout","type":"integer"},"netflow.reverse_flow_label_ipv6":{"category":"netflow","name":"netflow.reverse_flow_label_ipv6","type":"long"},"netflow.reverse_flow_sampling_time_interval":{"category":"netflow","name":"netflow.reverse_flow_sampling_time_interval","type":"long"},"netflow.reverse_flow_sampling_time_spacing":{"category":"netflow","name":"netflow.reverse_flow_sampling_time_spacing","type":"long"},"netflow.reverse_flow_selected_flow_delta_count":{"category":"netflow","name":"netflow.reverse_flow_selected_flow_delta_count","type":"long"},"netflow.reverse_flow_selected_octet_delta_count":{"category":"netflow","name":"netflow.reverse_flow_selected_octet_delta_count","type":"long"},"netflow.reverse_flow_selected_packet_delta_count":{"category":"netflow","name":"netflow.reverse_flow_selected_packet_delta_count","type":"long"},"netflow.reverse_flow_selector_algorithm":{"category":"netflow","name":"netflow.reverse_flow_selector_algorithm","type":"integer"},"netflow.reverse_flow_start_delta_microseconds":{"category":"netflow","name":"netflow.reverse_flow_start_delta_microseconds","type":"long"},"netflow.reverse_flow_start_microseconds":{"category":"netflow","name":"netflow.reverse_flow_start_microseconds","type":"long"},"netflow.reverse_flow_start_milliseconds":{"category":"netflow","name":"netflow.reverse_flow_start_milliseconds","type":"long"},"netflow.reverse_flow_start_nanoseconds":{"category":"netflow","name":"netflow.reverse_flow_start_nanoseconds","type":"long"},"netflow.reverse_flow_start_seconds":{"category":"netflow","name":"netflow.reverse_flow_start_seconds","type":"long"},"netflow.reverse_flow_start_sys_up_time":{"category":"netflow","name":"netflow.reverse_flow_start_sys_up_time","type":"long"},"netflow.reverse_forwarding_status":{"category":"netflow","name":"netflow.reverse_forwarding_status","type":"long"},"netflow.reverse_fragment_flags":{"category":"netflow","name":"netflow.reverse_fragment_flags","type":"short"},"netflow.reverse_fragment_identification":{"category":"netflow","name":"netflow.reverse_fragment_identification","type":"long"},"netflow.reverse_fragment_offset":{"category":"netflow","name":"netflow.reverse_fragment_offset","type":"integer"},"netflow.reverse_gre_key":{"category":"netflow","name":"netflow.reverse_gre_key","type":"long"},"netflow.reverse_hash_digest_output":{"category":"netflow","name":"netflow.reverse_hash_digest_output","type":"short"},"netflow.reverse_hash_flow_domain":{"category":"netflow","name":"netflow.reverse_hash_flow_domain","type":"integer"},"netflow.reverse_hash_initialiser_value":{"category":"netflow","name":"netflow.reverse_hash_initialiser_value","type":"long"},"netflow.reverse_hash_ip_payload_offset":{"category":"netflow","name":"netflow.reverse_hash_ip_payload_offset","type":"long"},"netflow.reverse_hash_ip_payload_size":{"category":"netflow","name":"netflow.reverse_hash_ip_payload_size","type":"long"},"netflow.reverse_hash_output_range_max":{"category":"netflow","name":"netflow.reverse_hash_output_range_max","type":"long"},"netflow.reverse_hash_output_range_min":{"category":"netflow","name":"netflow.reverse_hash_output_range_min","type":"long"},"netflow.reverse_hash_selected_range_max":{"category":"netflow","name":"netflow.reverse_hash_selected_range_max","type":"long"},"netflow.reverse_hash_selected_range_min":{"category":"netflow","name":"netflow.reverse_hash_selected_range_min","type":"long"},"netflow.reverse_icmp_code_ipv4":{"category":"netflow","name":"netflow.reverse_icmp_code_ipv4","type":"short"},"netflow.reverse_icmp_code_ipv6":{"category":"netflow","name":"netflow.reverse_icmp_code_ipv6","type":"short"},"netflow.reverse_icmp_type_code_ipv4":{"category":"netflow","name":"netflow.reverse_icmp_type_code_ipv4","type":"integer"},"netflow.reverse_icmp_type_code_ipv6":{"category":"netflow","name":"netflow.reverse_icmp_type_code_ipv6","type":"integer"},"netflow.reverse_icmp_type_ipv4":{"category":"netflow","name":"netflow.reverse_icmp_type_ipv4","type":"short"},"netflow.reverse_icmp_type_ipv6":{"category":"netflow","name":"netflow.reverse_icmp_type_ipv6","type":"short"},"netflow.reverse_igmp_type":{"category":"netflow","name":"netflow.reverse_igmp_type","type":"short"},"netflow.reverse_ignored_data_record_total_count":{"category":"netflow","name":"netflow.reverse_ignored_data_record_total_count","type":"long"},"netflow.reverse_ignored_layer2_frame_total_count":{"category":"netflow","name":"netflow.reverse_ignored_layer2_frame_total_count","type":"long"},"netflow.reverse_ignored_layer2_octet_total_count":{"category":"netflow","name":"netflow.reverse_ignored_layer2_octet_total_count","type":"long"},"netflow.reverse_information_element_data_type":{"category":"netflow","name":"netflow.reverse_information_element_data_type","type":"short"},"netflow.reverse_information_element_description":{"category":"netflow","name":"netflow.reverse_information_element_description","type":"keyword"},"netflow.reverse_information_element_id":{"category":"netflow","name":"netflow.reverse_information_element_id","type":"integer"},"netflow.reverse_information_element_index":{"category":"netflow","name":"netflow.reverse_information_element_index","type":"integer"},"netflow.reverse_information_element_name":{"category":"netflow","name":"netflow.reverse_information_element_name","type":"keyword"},"netflow.reverse_information_element_range_begin":{"category":"netflow","name":"netflow.reverse_information_element_range_begin","type":"long"},"netflow.reverse_information_element_range_end":{"category":"netflow","name":"netflow.reverse_information_element_range_end","type":"long"},"netflow.reverse_information_element_semantics":{"category":"netflow","name":"netflow.reverse_information_element_semantics","type":"short"},"netflow.reverse_information_element_units":{"category":"netflow","name":"netflow.reverse_information_element_units","type":"integer"},"netflow.reverse_ingress_broadcast_packet_total_count":{"category":"netflow","name":"netflow.reverse_ingress_broadcast_packet_total_count","type":"long"},"netflow.reverse_ingress_interface":{"category":"netflow","name":"netflow.reverse_ingress_interface","type":"long"},"netflow.reverse_ingress_interface_type":{"category":"netflow","name":"netflow.reverse_ingress_interface_type","type":"long"},"netflow.reverse_ingress_multicast_packet_total_count":{"category":"netflow","name":"netflow.reverse_ingress_multicast_packet_total_count","type":"long"},"netflow.reverse_ingress_physical_interface":{"category":"netflow","name":"netflow.reverse_ingress_physical_interface","type":"long"},"netflow.reverse_ingress_unicast_packet_total_count":{"category":"netflow","name":"netflow.reverse_ingress_unicast_packet_total_count","type":"long"},"netflow.reverse_ingress_vrfid":{"category":"netflow","name":"netflow.reverse_ingress_vrfid","type":"long"},"netflow.reverse_initial_tcp_flags":{"category":"netflow","name":"netflow.reverse_initial_tcp_flags","type":"short"},"netflow.reverse_initiator_octets":{"category":"netflow","name":"netflow.reverse_initiator_octets","type":"long"},"netflow.reverse_initiator_packets":{"category":"netflow","name":"netflow.reverse_initiator_packets","type":"long"},"netflow.reverse_interface_description":{"category":"netflow","name":"netflow.reverse_interface_description","type":"keyword"},"netflow.reverse_interface_name":{"category":"netflow","name":"netflow.reverse_interface_name","type":"keyword"},"netflow.reverse_intermediate_process_id":{"category":"netflow","name":"netflow.reverse_intermediate_process_id","type":"long"},"netflow.reverse_ip_class_of_service":{"category":"netflow","name":"netflow.reverse_ip_class_of_service","type":"short"},"netflow.reverse_ip_diff_serv_code_point":{"category":"netflow","name":"netflow.reverse_ip_diff_serv_code_point","type":"short"},"netflow.reverse_ip_header_length":{"category":"netflow","name":"netflow.reverse_ip_header_length","type":"short"},"netflow.reverse_ip_header_packet_section":{"category":"netflow","name":"netflow.reverse_ip_header_packet_section","type":"keyword"},"netflow.reverse_ip_next_hop_ipv4_address":{"category":"netflow","name":"netflow.reverse_ip_next_hop_ipv4_address","type":"ip"},"netflow.reverse_ip_next_hop_ipv6_address":{"category":"netflow","name":"netflow.reverse_ip_next_hop_ipv6_address","type":"ip"},"netflow.reverse_ip_payload_length":{"category":"netflow","name":"netflow.reverse_ip_payload_length","type":"long"},"netflow.reverse_ip_payload_packet_section":{"category":"netflow","name":"netflow.reverse_ip_payload_packet_section","type":"keyword"},"netflow.reverse_ip_precedence":{"category":"netflow","name":"netflow.reverse_ip_precedence","type":"short"},"netflow.reverse_ip_sec_spi":{"category":"netflow","name":"netflow.reverse_ip_sec_spi","type":"long"},"netflow.reverse_ip_total_length":{"category":"netflow","name":"netflow.reverse_ip_total_length","type":"long"},"netflow.reverse_ip_ttl":{"category":"netflow","name":"netflow.reverse_ip_ttl","type":"short"},"netflow.reverse_ip_version":{"category":"netflow","name":"netflow.reverse_ip_version","type":"short"},"netflow.reverse_ipv4_ihl":{"category":"netflow","name":"netflow.reverse_ipv4_ihl","type":"short"},"netflow.reverse_ipv4_options":{"category":"netflow","name":"netflow.reverse_ipv4_options","type":"long"},"netflow.reverse_ipv4_router_sc":{"category":"netflow","name":"netflow.reverse_ipv4_router_sc","type":"ip"},"netflow.reverse_ipv6_extension_headers":{"category":"netflow","name":"netflow.reverse_ipv6_extension_headers","type":"long"},"netflow.reverse_is_multicast":{"category":"netflow","name":"netflow.reverse_is_multicast","type":"short"},"netflow.reverse_large_packet_count":{"category":"netflow","name":"netflow.reverse_large_packet_count","type":"long"},"netflow.reverse_layer2_frame_delta_count":{"category":"netflow","name":"netflow.reverse_layer2_frame_delta_count","type":"long"},"netflow.reverse_layer2_frame_total_count":{"category":"netflow","name":"netflow.reverse_layer2_frame_total_count","type":"long"},"netflow.reverse_layer2_octet_delta_count":{"category":"netflow","name":"netflow.reverse_layer2_octet_delta_count","type":"long"},"netflow.reverse_layer2_octet_delta_sum_of_squares":{"category":"netflow","name":"netflow.reverse_layer2_octet_delta_sum_of_squares","type":"long"},"netflow.reverse_layer2_octet_total_count":{"category":"netflow","name":"netflow.reverse_layer2_octet_total_count","type":"long"},"netflow.reverse_layer2_octet_total_sum_of_squares":{"category":"netflow","name":"netflow.reverse_layer2_octet_total_sum_of_squares","type":"long"},"netflow.reverse_layer2_segment_id":{"category":"netflow","name":"netflow.reverse_layer2_segment_id","type":"long"},"netflow.reverse_layer2packet_section_data":{"category":"netflow","name":"netflow.reverse_layer2packet_section_data","type":"keyword"},"netflow.reverse_layer2packet_section_offset":{"category":"netflow","name":"netflow.reverse_layer2packet_section_offset","type":"integer"},"netflow.reverse_layer2packet_section_size":{"category":"netflow","name":"netflow.reverse_layer2packet_section_size","type":"integer"},"netflow.reverse_line_card_id":{"category":"netflow","name":"netflow.reverse_line_card_id","type":"long"},"netflow.reverse_lower_ci_limit":{"category":"netflow","name":"netflow.reverse_lower_ci_limit","type":"double"},"netflow.reverse_max_export_seconds":{"category":"netflow","name":"netflow.reverse_max_export_seconds","type":"long"},"netflow.reverse_max_flow_end_microseconds":{"category":"netflow","name":"netflow.reverse_max_flow_end_microseconds","type":"long"},"netflow.reverse_max_flow_end_milliseconds":{"category":"netflow","name":"netflow.reverse_max_flow_end_milliseconds","type":"long"},"netflow.reverse_max_flow_end_nanoseconds":{"category":"netflow","name":"netflow.reverse_max_flow_end_nanoseconds","type":"long"},"netflow.reverse_max_flow_end_seconds":{"category":"netflow","name":"netflow.reverse_max_flow_end_seconds","type":"long"},"netflow.reverse_max_packet_size":{"category":"netflow","name":"netflow.reverse_max_packet_size","type":"integer"},"netflow.reverse_maximum_ip_total_length":{"category":"netflow","name":"netflow.reverse_maximum_ip_total_length","type":"long"},"netflow.reverse_maximum_layer2_total_length":{"category":"netflow","name":"netflow.reverse_maximum_layer2_total_length","type":"long"},"netflow.reverse_maximum_ttl":{"category":"netflow","name":"netflow.reverse_maximum_ttl","type":"short"},"netflow.reverse_message_md5_checksum":{"category":"netflow","name":"netflow.reverse_message_md5_checksum","type":"keyword"},"netflow.reverse_message_scope":{"category":"netflow","name":"netflow.reverse_message_scope","type":"short"},"netflow.reverse_metering_process_id":{"category":"netflow","name":"netflow.reverse_metering_process_id","type":"long"},"netflow.reverse_metro_evc_id":{"category":"netflow","name":"netflow.reverse_metro_evc_id","type":"keyword"},"netflow.reverse_metro_evc_type":{"category":"netflow","name":"netflow.reverse_metro_evc_type","type":"short"},"netflow.reverse_min_export_seconds":{"category":"netflow","name":"netflow.reverse_min_export_seconds","type":"long"},"netflow.reverse_min_flow_start_microseconds":{"category":"netflow","name":"netflow.reverse_min_flow_start_microseconds","type":"long"},"netflow.reverse_min_flow_start_milliseconds":{"category":"netflow","name":"netflow.reverse_min_flow_start_milliseconds","type":"long"},"netflow.reverse_min_flow_start_nanoseconds":{"category":"netflow","name":"netflow.reverse_min_flow_start_nanoseconds","type":"long"},"netflow.reverse_min_flow_start_seconds":{"category":"netflow","name":"netflow.reverse_min_flow_start_seconds","type":"long"},"netflow.reverse_minimum_ip_total_length":{"category":"netflow","name":"netflow.reverse_minimum_ip_total_length","type":"long"},"netflow.reverse_minimum_layer2_total_length":{"category":"netflow","name":"netflow.reverse_minimum_layer2_total_length","type":"long"},"netflow.reverse_minimum_ttl":{"category":"netflow","name":"netflow.reverse_minimum_ttl","type":"short"},"netflow.reverse_monitoring_interval_end_milli_seconds":{"category":"netflow","name":"netflow.reverse_monitoring_interval_end_milli_seconds","type":"long"},"netflow.reverse_monitoring_interval_start_milli_seconds":{"category":"netflow","name":"netflow.reverse_monitoring_interval_start_milli_seconds","type":"long"},"netflow.reverse_mpls_label_stack_depth":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_depth","type":"long"},"netflow.reverse_mpls_label_stack_length":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_length","type":"long"},"netflow.reverse_mpls_label_stack_section":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section","type":"keyword"},"netflow.reverse_mpls_label_stack_section10":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section10","type":"keyword"},"netflow.reverse_mpls_label_stack_section2":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section2","type":"keyword"},"netflow.reverse_mpls_label_stack_section3":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section3","type":"keyword"},"netflow.reverse_mpls_label_stack_section4":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section4","type":"keyword"},"netflow.reverse_mpls_label_stack_section5":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section5","type":"keyword"},"netflow.reverse_mpls_label_stack_section6":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section6","type":"keyword"},"netflow.reverse_mpls_label_stack_section7":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section7","type":"keyword"},"netflow.reverse_mpls_label_stack_section8":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section8","type":"keyword"},"netflow.reverse_mpls_label_stack_section9":{"category":"netflow","name":"netflow.reverse_mpls_label_stack_section9","type":"keyword"},"netflow.reverse_mpls_payload_length":{"category":"netflow","name":"netflow.reverse_mpls_payload_length","type":"long"},"netflow.reverse_mpls_payload_packet_section":{"category":"netflow","name":"netflow.reverse_mpls_payload_packet_section","type":"keyword"},"netflow.reverse_mpls_top_label_exp":{"category":"netflow","name":"netflow.reverse_mpls_top_label_exp","type":"short"},"netflow.reverse_mpls_top_label_ipv4_address":{"category":"netflow","name":"netflow.reverse_mpls_top_label_ipv4_address","type":"ip"},"netflow.reverse_mpls_top_label_ipv6_address":{"category":"netflow","name":"netflow.reverse_mpls_top_label_ipv6_address","type":"ip"},"netflow.reverse_mpls_top_label_prefix_length":{"category":"netflow","name":"netflow.reverse_mpls_top_label_prefix_length","type":"short"},"netflow.reverse_mpls_top_label_stack_section":{"category":"netflow","name":"netflow.reverse_mpls_top_label_stack_section","type":"keyword"},"netflow.reverse_mpls_top_label_ttl":{"category":"netflow","name":"netflow.reverse_mpls_top_label_ttl","type":"short"},"netflow.reverse_mpls_top_label_type":{"category":"netflow","name":"netflow.reverse_mpls_top_label_type","type":"short"},"netflow.reverse_mpls_vpn_route_distinguisher":{"category":"netflow","name":"netflow.reverse_mpls_vpn_route_distinguisher","type":"keyword"},"netflow.reverse_multicast_replication_factor":{"category":"netflow","name":"netflow.reverse_multicast_replication_factor","type":"long"},"netflow.reverse_nat_event":{"category":"netflow","name":"netflow.reverse_nat_event","type":"short"},"netflow.reverse_nat_originating_address_realm":{"category":"netflow","name":"netflow.reverse_nat_originating_address_realm","type":"short"},"netflow.reverse_nat_pool_id":{"category":"netflow","name":"netflow.reverse_nat_pool_id","type":"long"},"netflow.reverse_nat_pool_name":{"category":"netflow","name":"netflow.reverse_nat_pool_name","type":"keyword"},"netflow.reverse_nat_type":{"category":"netflow","name":"netflow.reverse_nat_type","type":"short"},"netflow.reverse_new_connection_delta_count":{"category":"netflow","name":"netflow.reverse_new_connection_delta_count","type":"long"},"netflow.reverse_next_header_ipv6":{"category":"netflow","name":"netflow.reverse_next_header_ipv6","type":"short"},"netflow.reverse_non_empty_packet_count":{"category":"netflow","name":"netflow.reverse_non_empty_packet_count","type":"long"},"netflow.reverse_not_sent_layer2_octet_total_count":{"category":"netflow","name":"netflow.reverse_not_sent_layer2_octet_total_count","type":"long"},"netflow.reverse_observation_domain_name":{"category":"netflow","name":"netflow.reverse_observation_domain_name","type":"keyword"},"netflow.reverse_observation_point_id":{"category":"netflow","name":"netflow.reverse_observation_point_id","type":"long"},"netflow.reverse_observation_point_type":{"category":"netflow","name":"netflow.reverse_observation_point_type","type":"short"},"netflow.reverse_observation_time_microseconds":{"category":"netflow","name":"netflow.reverse_observation_time_microseconds","type":"long"},"netflow.reverse_observation_time_milliseconds":{"category":"netflow","name":"netflow.reverse_observation_time_milliseconds","type":"long"},"netflow.reverse_observation_time_nanoseconds":{"category":"netflow","name":"netflow.reverse_observation_time_nanoseconds","type":"long"},"netflow.reverse_observation_time_seconds":{"category":"netflow","name":"netflow.reverse_observation_time_seconds","type":"long"},"netflow.reverse_octet_delta_count":{"category":"netflow","name":"netflow.reverse_octet_delta_count","type":"long"},"netflow.reverse_octet_delta_sum_of_squares":{"category":"netflow","name":"netflow.reverse_octet_delta_sum_of_squares","type":"long"},"netflow.reverse_octet_total_count":{"category":"netflow","name":"netflow.reverse_octet_total_count","type":"long"},"netflow.reverse_octet_total_sum_of_squares":{"category":"netflow","name":"netflow.reverse_octet_total_sum_of_squares","type":"long"},"netflow.reverse_opaque_octets":{"category":"netflow","name":"netflow.reverse_opaque_octets","type":"keyword"},"netflow.reverse_original_exporter_ipv4_address":{"category":"netflow","name":"netflow.reverse_original_exporter_ipv4_address","type":"ip"},"netflow.reverse_original_exporter_ipv6_address":{"category":"netflow","name":"netflow.reverse_original_exporter_ipv6_address","type":"ip"},"netflow.reverse_original_flows_completed":{"category":"netflow","name":"netflow.reverse_original_flows_completed","type":"long"},"netflow.reverse_original_flows_initiated":{"category":"netflow","name":"netflow.reverse_original_flows_initiated","type":"long"},"netflow.reverse_original_flows_present":{"category":"netflow","name":"netflow.reverse_original_flows_present","type":"long"},"netflow.reverse_original_observation_domain_id":{"category":"netflow","name":"netflow.reverse_original_observation_domain_id","type":"long"},"netflow.reverse_os_finger_print":{"category":"netflow","name":"netflow.reverse_os_finger_print","type":"keyword"},"netflow.reverse_os_name":{"category":"netflow","name":"netflow.reverse_os_name","type":"keyword"},"netflow.reverse_os_version":{"category":"netflow","name":"netflow.reverse_os_version","type":"keyword"},"netflow.reverse_p2p_technology":{"category":"netflow","name":"netflow.reverse_p2p_technology","type":"keyword"},"netflow.reverse_packet_delta_count":{"category":"netflow","name":"netflow.reverse_packet_delta_count","type":"long"},"netflow.reverse_packet_total_count":{"category":"netflow","name":"netflow.reverse_packet_total_count","type":"long"},"netflow.reverse_payload":{"category":"netflow","name":"netflow.reverse_payload","type":"keyword"},"netflow.reverse_payload_entropy":{"category":"netflow","name":"netflow.reverse_payload_entropy","type":"short"},"netflow.reverse_payload_length_ipv6":{"category":"netflow","name":"netflow.reverse_payload_length_ipv6","type":"integer"},"netflow.reverse_port_id":{"category":"netflow","name":"netflow.reverse_port_id","type":"long"},"netflow.reverse_port_range_end":{"category":"netflow","name":"netflow.reverse_port_range_end","type":"integer"},"netflow.reverse_port_range_num_ports":{"category":"netflow","name":"netflow.reverse_port_range_num_ports","type":"integer"},"netflow.reverse_port_range_start":{"category":"netflow","name":"netflow.reverse_port_range_start","type":"integer"},"netflow.reverse_port_range_step_size":{"category":"netflow","name":"netflow.reverse_port_range_step_size","type":"integer"},"netflow.reverse_post_destination_mac_address":{"category":"netflow","name":"netflow.reverse_post_destination_mac_address","type":"keyword"},"netflow.reverse_post_dot1q_customer_vlan_id":{"category":"netflow","name":"netflow.reverse_post_dot1q_customer_vlan_id","type":"integer"},"netflow.reverse_post_dot1q_vlan_id":{"category":"netflow","name":"netflow.reverse_post_dot1q_vlan_id","type":"integer"},"netflow.reverse_post_ip_class_of_service":{"category":"netflow","name":"netflow.reverse_post_ip_class_of_service","type":"short"},"netflow.reverse_post_ip_diff_serv_code_point":{"category":"netflow","name":"netflow.reverse_post_ip_diff_serv_code_point","type":"short"},"netflow.reverse_post_ip_precedence":{"category":"netflow","name":"netflow.reverse_post_ip_precedence","type":"short"},"netflow.reverse_post_layer2_octet_delta_count":{"category":"netflow","name":"netflow.reverse_post_layer2_octet_delta_count","type":"long"},"netflow.reverse_post_layer2_octet_total_count":{"category":"netflow","name":"netflow.reverse_post_layer2_octet_total_count","type":"long"},"netflow.reverse_post_mcast_layer2_octet_delta_count":{"category":"netflow","name":"netflow.reverse_post_mcast_layer2_octet_delta_count","type":"long"},"netflow.reverse_post_mcast_layer2_octet_total_count":{"category":"netflow","name":"netflow.reverse_post_mcast_layer2_octet_total_count","type":"long"},"netflow.reverse_post_mcast_octet_delta_count":{"category":"netflow","name":"netflow.reverse_post_mcast_octet_delta_count","type":"long"},"netflow.reverse_post_mcast_octet_total_count":{"category":"netflow","name":"netflow.reverse_post_mcast_octet_total_count","type":"long"},"netflow.reverse_post_mcast_packet_delta_count":{"category":"netflow","name":"netflow.reverse_post_mcast_packet_delta_count","type":"long"},"netflow.reverse_post_mcast_packet_total_count":{"category":"netflow","name":"netflow.reverse_post_mcast_packet_total_count","type":"long"},"netflow.reverse_post_mpls_top_label_exp":{"category":"netflow","name":"netflow.reverse_post_mpls_top_label_exp","type":"short"},"netflow.reverse_post_napt_destination_transport_port":{"category":"netflow","name":"netflow.reverse_post_napt_destination_transport_port","type":"integer"},"netflow.reverse_post_napt_source_transport_port":{"category":"netflow","name":"netflow.reverse_post_napt_source_transport_port","type":"integer"},"netflow.reverse_post_nat_destination_ipv4_address":{"category":"netflow","name":"netflow.reverse_post_nat_destination_ipv4_address","type":"ip"},"netflow.reverse_post_nat_destination_ipv6_address":{"category":"netflow","name":"netflow.reverse_post_nat_destination_ipv6_address","type":"ip"},"netflow.reverse_post_nat_source_ipv4_address":{"category":"netflow","name":"netflow.reverse_post_nat_source_ipv4_address","type":"ip"},"netflow.reverse_post_nat_source_ipv6_address":{"category":"netflow","name":"netflow.reverse_post_nat_source_ipv6_address","type":"ip"},"netflow.reverse_post_octet_delta_count":{"category":"netflow","name":"netflow.reverse_post_octet_delta_count","type":"long"},"netflow.reverse_post_octet_total_count":{"category":"netflow","name":"netflow.reverse_post_octet_total_count","type":"long"},"netflow.reverse_post_packet_delta_count":{"category":"netflow","name":"netflow.reverse_post_packet_delta_count","type":"long"},"netflow.reverse_post_packet_total_count":{"category":"netflow","name":"netflow.reverse_post_packet_total_count","type":"long"},"netflow.reverse_post_source_mac_address":{"category":"netflow","name":"netflow.reverse_post_source_mac_address","type":"keyword"},"netflow.reverse_post_vlan_id":{"category":"netflow","name":"netflow.reverse_post_vlan_id","type":"integer"},"netflow.reverse_private_enterprise_number":{"category":"netflow","name":"netflow.reverse_private_enterprise_number","type":"long"},"netflow.reverse_protocol_identifier":{"category":"netflow","name":"netflow.reverse_protocol_identifier","type":"short"},"netflow.reverse_pseudo_wire_control_word":{"category":"netflow","name":"netflow.reverse_pseudo_wire_control_word","type":"long"},"netflow.reverse_pseudo_wire_destination_ipv4_address":{"category":"netflow","name":"netflow.reverse_pseudo_wire_destination_ipv4_address","type":"ip"},"netflow.reverse_pseudo_wire_id":{"category":"netflow","name":"netflow.reverse_pseudo_wire_id","type":"long"},"netflow.reverse_pseudo_wire_type":{"category":"netflow","name":"netflow.reverse_pseudo_wire_type","type":"integer"},"netflow.reverse_relative_error":{"category":"netflow","name":"netflow.reverse_relative_error","type":"double"},"netflow.reverse_responder_octets":{"category":"netflow","name":"netflow.reverse_responder_octets","type":"long"},"netflow.reverse_responder_packets":{"category":"netflow","name":"netflow.reverse_responder_packets","type":"long"},"netflow.reverse_rfc3550_jitter_microseconds":{"category":"netflow","name":"netflow.reverse_rfc3550_jitter_microseconds","type":"long"},"netflow.reverse_rfc3550_jitter_milliseconds":{"category":"netflow","name":"netflow.reverse_rfc3550_jitter_milliseconds","type":"long"},"netflow.reverse_rfc3550_jitter_nanoseconds":{"category":"netflow","name":"netflow.reverse_rfc3550_jitter_nanoseconds","type":"long"},"netflow.reverse_rtp_payload_type":{"category":"netflow","name":"netflow.reverse_rtp_payload_type","type":"short"},"netflow.reverse_rtp_sequence_number":{"category":"netflow","name":"netflow.reverse_rtp_sequence_number","type":"integer"},"netflow.reverse_sampler_id":{"category":"netflow","name":"netflow.reverse_sampler_id","type":"short"},"netflow.reverse_sampler_mode":{"category":"netflow","name":"netflow.reverse_sampler_mode","type":"short"},"netflow.reverse_sampler_name":{"category":"netflow","name":"netflow.reverse_sampler_name","type":"keyword"},"netflow.reverse_sampler_random_interval":{"category":"netflow","name":"netflow.reverse_sampler_random_interval","type":"long"},"netflow.reverse_sampling_algorithm":{"category":"netflow","name":"netflow.reverse_sampling_algorithm","type":"short"},"netflow.reverse_sampling_flow_interval":{"category":"netflow","name":"netflow.reverse_sampling_flow_interval","type":"long"},"netflow.reverse_sampling_flow_spacing":{"category":"netflow","name":"netflow.reverse_sampling_flow_spacing","type":"long"},"netflow.reverse_sampling_interval":{"category":"netflow","name":"netflow.reverse_sampling_interval","type":"long"},"netflow.reverse_sampling_packet_interval":{"category":"netflow","name":"netflow.reverse_sampling_packet_interval","type":"long"},"netflow.reverse_sampling_packet_space":{"category":"netflow","name":"netflow.reverse_sampling_packet_space","type":"long"},"netflow.reverse_sampling_population":{"category":"netflow","name":"netflow.reverse_sampling_population","type":"long"},"netflow.reverse_sampling_probability":{"category":"netflow","name":"netflow.reverse_sampling_probability","type":"double"},"netflow.reverse_sampling_size":{"category":"netflow","name":"netflow.reverse_sampling_size","type":"long"},"netflow.reverse_sampling_time_interval":{"category":"netflow","name":"netflow.reverse_sampling_time_interval","type":"long"},"netflow.reverse_sampling_time_space":{"category":"netflow","name":"netflow.reverse_sampling_time_space","type":"long"},"netflow.reverse_second_packet_banner":{"category":"netflow","name":"netflow.reverse_second_packet_banner","type":"keyword"},"netflow.reverse_section_exported_octets":{"category":"netflow","name":"netflow.reverse_section_exported_octets","type":"integer"},"netflow.reverse_section_offset":{"category":"netflow","name":"netflow.reverse_section_offset","type":"integer"},"netflow.reverse_selection_sequence_id":{"category":"netflow","name":"netflow.reverse_selection_sequence_id","type":"long"},"netflow.reverse_selector_algorithm":{"category":"netflow","name":"netflow.reverse_selector_algorithm","type":"integer"},"netflow.reverse_selector_id":{"category":"netflow","name":"netflow.reverse_selector_id","type":"long"},"netflow.reverse_selector_id_total_flows_observed":{"category":"netflow","name":"netflow.reverse_selector_id_total_flows_observed","type":"long"},"netflow.reverse_selector_id_total_flows_selected":{"category":"netflow","name":"netflow.reverse_selector_id_total_flows_selected","type":"long"},"netflow.reverse_selector_id_total_pkts_observed":{"category":"netflow","name":"netflow.reverse_selector_id_total_pkts_observed","type":"long"},"netflow.reverse_selector_id_total_pkts_selected":{"category":"netflow","name":"netflow.reverse_selector_id_total_pkts_selected","type":"long"},"netflow.reverse_selector_name":{"category":"netflow","name":"netflow.reverse_selector_name","type":"keyword"},"netflow.reverse_session_scope":{"category":"netflow","name":"netflow.reverse_session_scope","type":"short"},"netflow.reverse_small_packet_count":{"category":"netflow","name":"netflow.reverse_small_packet_count","type":"long"},"netflow.reverse_source_ipv4_address":{"category":"netflow","name":"netflow.reverse_source_ipv4_address","type":"ip"},"netflow.reverse_source_ipv4_prefix":{"category":"netflow","name":"netflow.reverse_source_ipv4_prefix","type":"ip"},"netflow.reverse_source_ipv4_prefix_length":{"category":"netflow","name":"netflow.reverse_source_ipv4_prefix_length","type":"short"},"netflow.reverse_source_ipv6_address":{"category":"netflow","name":"netflow.reverse_source_ipv6_address","type":"ip"},"netflow.reverse_source_ipv6_prefix":{"category":"netflow","name":"netflow.reverse_source_ipv6_prefix","type":"ip"},"netflow.reverse_source_ipv6_prefix_length":{"category":"netflow","name":"netflow.reverse_source_ipv6_prefix_length","type":"short"},"netflow.reverse_source_mac_address":{"category":"netflow","name":"netflow.reverse_source_mac_address","type":"keyword"},"netflow.reverse_source_transport_port":{"category":"netflow","name":"netflow.reverse_source_transport_port","type":"integer"},"netflow.reverse_src_traffic_index":{"category":"netflow","name":"netflow.reverse_src_traffic_index","type":"long"},"netflow.reverse_sta_ipv4_address":{"category":"netflow","name":"netflow.reverse_sta_ipv4_address","type":"ip"},"netflow.reverse_sta_mac_address":{"category":"netflow","name":"netflow.reverse_sta_mac_address","type":"keyword"},"netflow.reverse_standard_deviation_interarrival_time":{"category":"netflow","name":"netflow.reverse_standard_deviation_interarrival_time","type":"long"},"netflow.reverse_standard_deviation_payload_length":{"category":"netflow","name":"netflow.reverse_standard_deviation_payload_length","type":"integer"},"netflow.reverse_system_init_time_milliseconds":{"category":"netflow","name":"netflow.reverse_system_init_time_milliseconds","type":"long"},"netflow.reverse_tcp_ack_total_count":{"category":"netflow","name":"netflow.reverse_tcp_ack_total_count","type":"long"},"netflow.reverse_tcp_acknowledgement_number":{"category":"netflow","name":"netflow.reverse_tcp_acknowledgement_number","type":"long"},"netflow.reverse_tcp_control_bits":{"category":"netflow","name":"netflow.reverse_tcp_control_bits","type":"integer"},"netflow.reverse_tcp_destination_port":{"category":"netflow","name":"netflow.reverse_tcp_destination_port","type":"integer"},"netflow.reverse_tcp_fin_total_count":{"category":"netflow","name":"netflow.reverse_tcp_fin_total_count","type":"long"},"netflow.reverse_tcp_header_length":{"category":"netflow","name":"netflow.reverse_tcp_header_length","type":"short"},"netflow.reverse_tcp_options":{"category":"netflow","name":"netflow.reverse_tcp_options","type":"long"},"netflow.reverse_tcp_psh_total_count":{"category":"netflow","name":"netflow.reverse_tcp_psh_total_count","type":"long"},"netflow.reverse_tcp_rst_total_count":{"category":"netflow","name":"netflow.reverse_tcp_rst_total_count","type":"long"},"netflow.reverse_tcp_sequence_number":{"category":"netflow","name":"netflow.reverse_tcp_sequence_number","type":"long"},"netflow.reverse_tcp_source_port":{"category":"netflow","name":"netflow.reverse_tcp_source_port","type":"integer"},"netflow.reverse_tcp_syn_total_count":{"category":"netflow","name":"netflow.reverse_tcp_syn_total_count","type":"long"},"netflow.reverse_tcp_urg_total_count":{"category":"netflow","name":"netflow.reverse_tcp_urg_total_count","type":"long"},"netflow.reverse_tcp_urgent_pointer":{"category":"netflow","name":"netflow.reverse_tcp_urgent_pointer","type":"integer"},"netflow.reverse_tcp_window_scale":{"category":"netflow","name":"netflow.reverse_tcp_window_scale","type":"integer"},"netflow.reverse_tcp_window_size":{"category":"netflow","name":"netflow.reverse_tcp_window_size","type":"integer"},"netflow.reverse_total_length_ipv4":{"category":"netflow","name":"netflow.reverse_total_length_ipv4","type":"integer"},"netflow.reverse_transport_octet_delta_count":{"category":"netflow","name":"netflow.reverse_transport_octet_delta_count","type":"long"},"netflow.reverse_transport_packet_delta_count":{"category":"netflow","name":"netflow.reverse_transport_packet_delta_count","type":"long"},"netflow.reverse_tunnel_technology":{"category":"netflow","name":"netflow.reverse_tunnel_technology","type":"keyword"},"netflow.reverse_udp_destination_port":{"category":"netflow","name":"netflow.reverse_udp_destination_port","type":"integer"},"netflow.reverse_udp_message_length":{"category":"netflow","name":"netflow.reverse_udp_message_length","type":"integer"},"netflow.reverse_udp_source_port":{"category":"netflow","name":"netflow.reverse_udp_source_port","type":"integer"},"netflow.reverse_union_tcp_flags":{"category":"netflow","name":"netflow.reverse_union_tcp_flags","type":"short"},"netflow.reverse_upper_ci_limit":{"category":"netflow","name":"netflow.reverse_upper_ci_limit","type":"double"},"netflow.reverse_user_name":{"category":"netflow","name":"netflow.reverse_user_name","type":"keyword"},"netflow.reverse_value_distribution_method":{"category":"netflow","name":"netflow.reverse_value_distribution_method","type":"short"},"netflow.reverse_virtual_station_interface_id":{"category":"netflow","name":"netflow.reverse_virtual_station_interface_id","type":"keyword"},"netflow.reverse_virtual_station_interface_name":{"category":"netflow","name":"netflow.reverse_virtual_station_interface_name","type":"keyword"},"netflow.reverse_virtual_station_name":{"category":"netflow","name":"netflow.reverse_virtual_station_name","type":"keyword"},"netflow.reverse_virtual_station_uuid":{"category":"netflow","name":"netflow.reverse_virtual_station_uuid","type":"keyword"},"netflow.reverse_vlan_id":{"category":"netflow","name":"netflow.reverse_vlan_id","type":"integer"},"netflow.reverse_vr_fname":{"category":"netflow","name":"netflow.reverse_vr_fname","type":"keyword"},"netflow.reverse_wlan_channel_id":{"category":"netflow","name":"netflow.reverse_wlan_channel_id","type":"short"},"netflow.reverse_wlan_ssid":{"category":"netflow","name":"netflow.reverse_wlan_ssid","type":"keyword"},"netflow.reverse_wtp_mac_address":{"category":"netflow","name":"netflow.reverse_wtp_mac_address","type":"keyword"},"netflow.rfc3550_jitter_microseconds":{"category":"netflow","name":"netflow.rfc3550_jitter_microseconds","type":"long"},"netflow.rfc3550_jitter_milliseconds":{"category":"netflow","name":"netflow.rfc3550_jitter_milliseconds","type":"long"},"netflow.rfc3550_jitter_nanoseconds":{"category":"netflow","name":"netflow.rfc3550_jitter_nanoseconds","type":"long"},"netflow.rtp_payload_type":{"category":"netflow","name":"netflow.rtp_payload_type","type":"short"},"netflow.rtp_sequence_number":{"category":"netflow","name":"netflow.rtp_sequence_number","type":"integer"},"netflow.sampler_id":{"category":"netflow","name":"netflow.sampler_id","type":"short"},"netflow.sampler_mode":{"category":"netflow","name":"netflow.sampler_mode","type":"short"},"netflow.sampler_name":{"category":"netflow","name":"netflow.sampler_name","type":"keyword"},"netflow.sampler_random_interval":{"category":"netflow","name":"netflow.sampler_random_interval","type":"long"},"netflow.sampling_algorithm":{"category":"netflow","name":"netflow.sampling_algorithm","type":"short"},"netflow.sampling_flow_interval":{"category":"netflow","name":"netflow.sampling_flow_interval","type":"long"},"netflow.sampling_flow_spacing":{"category":"netflow","name":"netflow.sampling_flow_spacing","type":"long"},"netflow.sampling_interval":{"category":"netflow","name":"netflow.sampling_interval","type":"long"},"netflow.sampling_packet_interval":{"category":"netflow","name":"netflow.sampling_packet_interval","type":"long"},"netflow.sampling_packet_space":{"category":"netflow","name":"netflow.sampling_packet_space","type":"long"},"netflow.sampling_population":{"category":"netflow","name":"netflow.sampling_population","type":"long"},"netflow.sampling_probability":{"category":"netflow","name":"netflow.sampling_probability","type":"double"},"netflow.sampling_size":{"category":"netflow","name":"netflow.sampling_size","type":"long"},"netflow.sampling_time_interval":{"category":"netflow","name":"netflow.sampling_time_interval","type":"long"},"netflow.sampling_time_space":{"category":"netflow","name":"netflow.sampling_time_space","type":"long"},"netflow.second_packet_banner":{"category":"netflow","name":"netflow.second_packet_banner","type":"keyword"},"netflow.section_exported_octets":{"category":"netflow","name":"netflow.section_exported_octets","type":"integer"},"netflow.section_offset":{"category":"netflow","name":"netflow.section_offset","type":"integer"},"netflow.selection_sequence_id":{"category":"netflow","name":"netflow.selection_sequence_id","type":"long"},"netflow.selector_algorithm":{"category":"netflow","name":"netflow.selector_algorithm","type":"integer"},"netflow.selector_id":{"category":"netflow","name":"netflow.selector_id","type":"long"},"netflow.selector_id_total_flows_observed":{"category":"netflow","name":"netflow.selector_id_total_flows_observed","type":"long"},"netflow.selector_id_total_flows_selected":{"category":"netflow","name":"netflow.selector_id_total_flows_selected","type":"long"},"netflow.selector_id_total_pkts_observed":{"category":"netflow","name":"netflow.selector_id_total_pkts_observed","type":"long"},"netflow.selector_id_total_pkts_selected":{"category":"netflow","name":"netflow.selector_id_total_pkts_selected","type":"long"},"netflow.selector_name":{"category":"netflow","name":"netflow.selector_name","type":"keyword"},"netflow.service_name":{"category":"netflow","name":"netflow.service_name","type":"keyword"},"netflow.session_scope":{"category":"netflow","name":"netflow.session_scope","type":"short"},"netflow.silk_app_label":{"category":"netflow","name":"netflow.silk_app_label","type":"integer"},"netflow.small_packet_count":{"category":"netflow","name":"netflow.small_packet_count","type":"long"},"netflow.source_ipv4_address":{"category":"netflow","name":"netflow.source_ipv4_address","type":"ip"},"netflow.source_ipv4_prefix":{"category":"netflow","name":"netflow.source_ipv4_prefix","type":"ip"},"netflow.source_ipv4_prefix_length":{"category":"netflow","name":"netflow.source_ipv4_prefix_length","type":"short"},"netflow.source_ipv6_address":{"category":"netflow","name":"netflow.source_ipv6_address","type":"ip"},"netflow.source_ipv6_prefix":{"category":"netflow","name":"netflow.source_ipv6_prefix","type":"ip"},"netflow.source_ipv6_prefix_length":{"category":"netflow","name":"netflow.source_ipv6_prefix_length","type":"short"},"netflow.source_mac_address":{"category":"netflow","name":"netflow.source_mac_address","type":"keyword"},"netflow.source_transport_port":{"category":"netflow","name":"netflow.source_transport_port","type":"integer"},"netflow.source_transport_ports_limit":{"category":"netflow","name":"netflow.source_transport_ports_limit","type":"integer"},"netflow.src_traffic_index":{"category":"netflow","name":"netflow.src_traffic_index","type":"long"},"netflow.ssl_cert_serial_number":{"category":"netflow","name":"netflow.ssl_cert_serial_number","type":"keyword"},"netflow.ssl_cert_signature":{"category":"netflow","name":"netflow.ssl_cert_signature","type":"keyword"},"netflow.ssl_cert_validity_not_after":{"category":"netflow","name":"netflow.ssl_cert_validity_not_after","type":"keyword"},"netflow.ssl_cert_validity_not_before":{"category":"netflow","name":"netflow.ssl_cert_validity_not_before","type":"keyword"},"netflow.ssl_cert_version":{"category":"netflow","name":"netflow.ssl_cert_version","type":"short"},"netflow.ssl_certificate_hash":{"category":"netflow","name":"netflow.ssl_certificate_hash","type":"keyword"},"netflow.ssl_cipher":{"category":"netflow","name":"netflow.ssl_cipher","type":"keyword"},"netflow.ssl_client_version":{"category":"netflow","name":"netflow.ssl_client_version","type":"short"},"netflow.ssl_compression_method":{"category":"netflow","name":"netflow.ssl_compression_method","type":"short"},"netflow.ssl_object_type":{"category":"netflow","name":"netflow.ssl_object_type","type":"keyword"},"netflow.ssl_object_value":{"category":"netflow","name":"netflow.ssl_object_value","type":"keyword"},"netflow.ssl_public_key_algorithm":{"category":"netflow","name":"netflow.ssl_public_key_algorithm","type":"keyword"},"netflow.ssl_public_key_length":{"category":"netflow","name":"netflow.ssl_public_key_length","type":"keyword"},"netflow.ssl_server_cipher":{"category":"netflow","name":"netflow.ssl_server_cipher","type":"long"},"netflow.ssl_server_name":{"category":"netflow","name":"netflow.ssl_server_name","type":"keyword"},"netflow.sta_ipv4_address":{"category":"netflow","name":"netflow.sta_ipv4_address","type":"ip"},"netflow.sta_mac_address":{"category":"netflow","name":"netflow.sta_mac_address","type":"keyword"},"netflow.standard_deviation_interarrival_time":{"category":"netflow","name":"netflow.standard_deviation_interarrival_time","type":"long"},"netflow.standard_deviation_payload_length":{"category":"netflow","name":"netflow.standard_deviation_payload_length","type":"short"},"netflow.system_init_time_milliseconds":{"category":"netflow","name":"netflow.system_init_time_milliseconds","type":"date"},"netflow.tcp_ack_total_count":{"category":"netflow","name":"netflow.tcp_ack_total_count","type":"long"},"netflow.tcp_acknowledgement_number":{"category":"netflow","name":"netflow.tcp_acknowledgement_number","type":"long"},"netflow.tcp_control_bits":{"category":"netflow","name":"netflow.tcp_control_bits","type":"integer"},"netflow.tcp_destination_port":{"category":"netflow","name":"netflow.tcp_destination_port","type":"integer"},"netflow.tcp_fin_total_count":{"category":"netflow","name":"netflow.tcp_fin_total_count","type":"long"},"netflow.tcp_header_length":{"category":"netflow","name":"netflow.tcp_header_length","type":"short"},"netflow.tcp_options":{"category":"netflow","name":"netflow.tcp_options","type":"long"},"netflow.tcp_psh_total_count":{"category":"netflow","name":"netflow.tcp_psh_total_count","type":"long"},"netflow.tcp_rst_total_count":{"category":"netflow","name":"netflow.tcp_rst_total_count","type":"long"},"netflow.tcp_sequence_number":{"category":"netflow","name":"netflow.tcp_sequence_number","type":"long"},"netflow.tcp_source_port":{"category":"netflow","name":"netflow.tcp_source_port","type":"integer"},"netflow.tcp_syn_total_count":{"category":"netflow","name":"netflow.tcp_syn_total_count","type":"long"},"netflow.tcp_urg_total_count":{"category":"netflow","name":"netflow.tcp_urg_total_count","type":"long"},"netflow.tcp_urgent_pointer":{"category":"netflow","name":"netflow.tcp_urgent_pointer","type":"integer"},"netflow.tcp_window_scale":{"category":"netflow","name":"netflow.tcp_window_scale","type":"integer"},"netflow.tcp_window_size":{"category":"netflow","name":"netflow.tcp_window_size","type":"integer"},"netflow.template_id":{"category":"netflow","name":"netflow.template_id","type":"integer"},"netflow.tftp_filename":{"category":"netflow","name":"netflow.tftp_filename","type":"keyword"},"netflow.tftp_mode":{"category":"netflow","name":"netflow.tftp_mode","type":"keyword"},"netflow.timestamp":{"category":"netflow","name":"netflow.timestamp","type":"long"},"netflow.timestamp_absolute_monitoring-interval":{"category":"netflow","name":"netflow.timestamp_absolute_monitoring-interval","type":"long"},"netflow.total_length_ipv4":{"category":"netflow","name":"netflow.total_length_ipv4","type":"integer"},"netflow.traffic_type":{"category":"netflow","name":"netflow.traffic_type","type":"short"},"netflow.transport_octet_delta_count":{"category":"netflow","name":"netflow.transport_octet_delta_count","type":"long"},"netflow.transport_packet_delta_count":{"category":"netflow","name":"netflow.transport_packet_delta_count","type":"long"},"netflow.tunnel_technology":{"category":"netflow","name":"netflow.tunnel_technology","type":"keyword"},"netflow.udp_destination_port":{"category":"netflow","name":"netflow.udp_destination_port","type":"integer"},"netflow.udp_message_length":{"category":"netflow","name":"netflow.udp_message_length","type":"integer"},"netflow.udp_source_port":{"category":"netflow","name":"netflow.udp_source_port","type":"integer"},"netflow.union_tcp_flags":{"category":"netflow","name":"netflow.union_tcp_flags","type":"short"},"netflow.upper_ci_limit":{"category":"netflow","name":"netflow.upper_ci_limit","type":"double"},"netflow.user_name":{"category":"netflow","name":"netflow.user_name","type":"keyword"},"netflow.username":{"category":"netflow","name":"netflow.username","type":"keyword"},"netflow.value_distribution_method":{"category":"netflow","name":"netflow.value_distribution_method","type":"short"},"netflow.viptela_vpn_id":{"category":"netflow","name":"netflow.viptela_vpn_id","type":"long"},"netflow.virtual_station_interface_id":{"category":"netflow","name":"netflow.virtual_station_interface_id","type":"short"},"netflow.virtual_station_interface_name":{"category":"netflow","name":"netflow.virtual_station_interface_name","type":"keyword"},"netflow.virtual_station_name":{"category":"netflow","name":"netflow.virtual_station_name","type":"keyword"},"netflow.virtual_station_uuid":{"category":"netflow","name":"netflow.virtual_station_uuid","type":"short"},"netflow.vlan_id":{"category":"netflow","name":"netflow.vlan_id","type":"integer"},"netflow.vmware_egress_interface_attr":{"category":"netflow","name":"netflow.vmware_egress_interface_attr","type":"integer"},"netflow.vmware_ingress_interface_attr":{"category":"netflow","name":"netflow.vmware_ingress_interface_attr","type":"integer"},"netflow.vmware_tenant_dest_ipv4":{"category":"netflow","name":"netflow.vmware_tenant_dest_ipv4","type":"ip"},"netflow.vmware_tenant_dest_ipv6":{"category":"netflow","name":"netflow.vmware_tenant_dest_ipv6","type":"ip"},"netflow.vmware_tenant_dest_port":{"category":"netflow","name":"netflow.vmware_tenant_dest_port","type":"integer"},"netflow.vmware_tenant_protocol":{"category":"netflow","name":"netflow.vmware_tenant_protocol","type":"short"},"netflow.vmware_tenant_source_ipv4":{"category":"netflow","name":"netflow.vmware_tenant_source_ipv4","type":"ip"},"netflow.vmware_tenant_source_ipv6":{"category":"netflow","name":"netflow.vmware_tenant_source_ipv6","type":"ip"},"netflow.vmware_tenant_source_port":{"category":"netflow","name":"netflow.vmware_tenant_source_port","type":"integer"},"netflow.vmware_vxlan_export_role":{"category":"netflow","name":"netflow.vmware_vxlan_export_role","type":"short"},"netflow.vpn_identifier":{"category":"netflow","name":"netflow.vpn_identifier","type":"short"},"netflow.vr_fname":{"category":"netflow","name":"netflow.vr_fname","type":"keyword"},"netflow.waasoptimization_segment":{"category":"netflow","name":"netflow.waasoptimization_segment","type":"short"},"netflow.wlan_channel_id":{"category":"netflow","name":"netflow.wlan_channel_id","type":"short"},"netflow.wlan_ssid":{"category":"netflow","name":"netflow.wlan_ssid","type":"keyword"},"netflow.wtp_mac_address":{"category":"netflow","name":"netflow.wtp_mac_address","type":"keyword"},"netflow.xlate_destination_address_ip_v4":{"category":"netflow","name":"netflow.xlate_destination_address_ip_v4","type":"ip"},"netflow.xlate_destination_port":{"category":"netflow","name":"netflow.xlate_destination_port","type":"integer"},"netflow.xlate_source_address_ip_v4":{"category":"netflow","name":"netflow.xlate_source_address_ip_v4","type":"ip"},"netflow.xlate_source_port":{"category":"netflow","name":"netflow.xlate_source_port","type":"integer"},"cef.version":{"category":"cef","description":"Version of the CEF specification used by the message. ","name":"cef.version","type":"keyword"},"cef.device.vendor":{"category":"cef","description":"Vendor of the device that produced the message. ","name":"cef.device.vendor","type":"keyword"},"cef.device.product":{"category":"cef","description":"Product of the device that produced the message. ","name":"cef.device.product","type":"keyword"},"cef.device.version":{"category":"cef","description":"Version of the product that produced the message. ","name":"cef.device.version","type":"keyword"},"cef.device.event_class_id":{"category":"cef","description":"Unique identifier of the event type. ","name":"cef.device.event_class_id","type":"keyword"},"cef.severity":{"category":"cef","description":"Importance of the event. The valid string values are Unknown, Low, Medium, High, and Very-High. The valid integer values are 0-3=Low, 4-6=Medium, 7- 8=High, and 9-10=Very-High. ","example":"Very-High","name":"cef.severity","type":"keyword"},"cef.name":{"category":"cef","description":"Short description of the event. ","name":"cef.name","type":"keyword"},"cef.extensions.agentAddress":{"category":"cef","description":"The IP address of the ArcSight connector that processed the event.","name":"cef.extensions.agentAddress","type":"ip"},"cef.extensions.agentDnsDomain":{"category":"cef","description":"The DNS domain name of the ArcSight connector that processed the event.","name":"cef.extensions.agentDnsDomain","type":"keyword"},"cef.extensions.agentHostName":{"category":"cef","description":"The hostname of the ArcSight connector that processed the event.","name":"cef.extensions.agentHostName","type":"keyword"},"cef.extensions.agentId":{"category":"cef","description":"The agent ID of the ArcSight connector that processed the event.","name":"cef.extensions.agentId","type":"keyword"},"cef.extensions.agentMacAddress":{"category":"cef","description":"The MAC address of the ArcSight connector that processed the event.","name":"cef.extensions.agentMacAddress","type":"keyword"},"cef.extensions.agentNtDomain":{"category":"cef","description":"null","name":"cef.extensions.agentNtDomain","type":"keyword"},"cef.extensions.agentReceiptTime":{"category":"cef","description":"The time at which information about the event was received by the ArcSight connector.","name":"cef.extensions.agentReceiptTime","type":"date"},"cef.extensions.agentTimeZone":{"category":"cef","description":"The agent time zone of the ArcSight connector that processed the event.","name":"cef.extensions.agentTimeZone","type":"keyword"},"cef.extensions.agentTranslatedAddress":{"category":"cef","description":"null","name":"cef.extensions.agentTranslatedAddress","type":"ip"},"cef.extensions.agentTranslatedZoneExternalID":{"category":"cef","description":"null","name":"cef.extensions.agentTranslatedZoneExternalID","type":"keyword"},"cef.extensions.agentTranslatedZoneURI":{"category":"cef","description":"null","name":"cef.extensions.agentTranslatedZoneURI","type":"keyword"},"cef.extensions.agentType":{"category":"cef","description":"The agent type of the ArcSight connector that processed the event","name":"cef.extensions.agentType","type":"keyword"},"cef.extensions.agentVersion":{"category":"cef","description":"The version of the ArcSight connector that processed the event.","name":"cef.extensions.agentVersion","type":"keyword"},"cef.extensions.agentZoneExternalID":{"category":"cef","description":"null","name":"cef.extensions.agentZoneExternalID","type":"keyword"},"cef.extensions.agentZoneURI":{"category":"cef","description":"null","name":"cef.extensions.agentZoneURI","type":"keyword"},"cef.extensions.applicationProtocol":{"category":"cef","description":"Application level protocol, example values are HTTP, HTTPS, SSHv2, Telnet, POP, IMPA, IMAPS, and so on.","name":"cef.extensions.applicationProtocol","type":"keyword"},"cef.extensions.baseEventCount":{"category":"cef","description":"A count associated with this event. How many times was this same event observed? Count can be omitted if it is 1.","name":"cef.extensions.baseEventCount","type":"long"},"cef.extensions.bytesIn":{"category":"cef","description":"Number of bytes transferred inbound, relative to the source to destination relationship, meaning that data was flowing from source to destination.","name":"cef.extensions.bytesIn","type":"long"},"cef.extensions.bytesOut":{"category":"cef","description":"Number of bytes transferred outbound relative to the source to destination relationship. For example, the byte number of data flowing from the destination to the source.","name":"cef.extensions.bytesOut","type":"long"},"cef.extensions.customerExternalID":{"category":"cef","description":"null","name":"cef.extensions.customerExternalID","type":"keyword"},"cef.extensions.customerURI":{"category":"cef","description":"null","name":"cef.extensions.customerURI","type":"keyword"},"cef.extensions.destinationAddress":{"category":"cef","description":"Identifies the destination address that the event refers to in an IP network. The format is an IPv4 address.","name":"cef.extensions.destinationAddress","type":"ip"},"cef.extensions.destinationDnsDomain":{"category":"cef","description":"The DNS domain part of the complete fully qualified domain name (FQDN).","name":"cef.extensions.destinationDnsDomain","type":"keyword"},"cef.extensions.destinationGeoLatitude":{"category":"cef","description":"The latitudinal value from which the destination's IP address belongs.","name":"cef.extensions.destinationGeoLatitude","type":"double"},"cef.extensions.destinationGeoLongitude":{"category":"cef","description":"The longitudinal value from which the destination's IP address belongs.","name":"cef.extensions.destinationGeoLongitude","type":"double"},"cef.extensions.destinationHostName":{"category":"cef","description":"Identifies the destination that an event refers to in an IP network. The format should be a fully qualified domain name (FQDN) associated with the destination node, when a node is available.","name":"cef.extensions.destinationHostName","type":"keyword"},"cef.extensions.destinationMacAddress":{"category":"cef","description":"Six colon-seperated hexadecimal numbers.","name":"cef.extensions.destinationMacAddress","type":"keyword"},"cef.extensions.destinationNtDomain":{"category":"cef","description":"The Windows domain name of the destination address.","name":"cef.extensions.destinationNtDomain","type":"keyword"},"cef.extensions.destinationPort":{"category":"cef","description":"The valid port numbers are between 0 and 65535.","name":"cef.extensions.destinationPort","type":"long"},"cef.extensions.destinationProcessId":{"category":"cef","description":"Provides the ID of the destination process associated with the event. For example, if an event contains process ID 105, \"105\" is the process ID.","name":"cef.extensions.destinationProcessId","type":"long"},"cef.extensions.destinationProcessName":{"category":"cef","description":"The name of the event's destination process.","name":"cef.extensions.destinationProcessName","type":"keyword"},"cef.extensions.destinationServiceName":{"category":"cef","description":"The service targeted by this event.","name":"cef.extensions.destinationServiceName","type":"keyword"},"cef.extensions.destinationTranslatedAddress":{"category":"cef","description":"Identifies the translated destination that the event refers to in an IP network.","name":"cef.extensions.destinationTranslatedAddress","type":"ip"},"cef.extensions.destinationTranslatedPort":{"category":"cef","description":"Port after it was translated; for example, a firewall. Valid port numbers are 0 to 65535.","name":"cef.extensions.destinationTranslatedPort","type":"long"},"cef.extensions.destinationTranslatedZoneExternalID":{"category":"cef","description":"null","name":"cef.extensions.destinationTranslatedZoneExternalID","type":"keyword"},"cef.extensions.destinationTranslatedZoneURI":{"category":"cef","description":"The URI for the Translated Zone that the destination asset has been assigned to in ArcSight.","name":"cef.extensions.destinationTranslatedZoneURI","type":"keyword"},"cef.extensions.destinationUserId":{"category":"cef","description":"Identifies the destination user by ID. For example, in UNIX, the root user is generally associated with user ID 0.","name":"cef.extensions.destinationUserId","type":"keyword"},"cef.extensions.destinationUserName":{"category":"cef","description":"Identifies the destination user by name. This is the user associated with the event's destination. Email addresses are often mapped into the UserName fields. The recipient is a candidate to put into this field.","name":"cef.extensions.destinationUserName","type":"keyword"},"cef.extensions.destinationUserPrivileges":{"category":"cef","description":"The typical values are \"Administrator\", \"User\", and \"Guest\". This identifies the destination user's privileges. In UNIX, for example, activity executed on the root user would be identified with destinationUser Privileges of \"Administrator\".","name":"cef.extensions.destinationUserPrivileges","type":"keyword"},"cef.extensions.destinationZoneExternalID":{"category":"cef","description":"null","name":"cef.extensions.destinationZoneExternalID","type":"keyword"},"cef.extensions.destinationZoneURI":{"category":"cef","description":"The URI for the Zone that the destination asset has been assigned to in ArcSight.","name":"cef.extensions.destinationZoneURI","type":"keyword"},"cef.extensions.deviceAction":{"category":"cef","description":"Action taken by the device.","name":"cef.extensions.deviceAction","type":"keyword"},"cef.extensions.deviceAddress":{"category":"cef","description":"Identifies the device address that an event refers to in an IP network.","name":"cef.extensions.deviceAddress","type":"ip"},"cef.extensions.deviceCustomFloatingPoint1Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomFloatingPoint1Label","type":"keyword"},"cef.extensions.deviceCustomFloatingPoint3Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomFloatingPoint3Label","type":"keyword"},"cef.extensions.deviceCustomFloatingPoint4Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomFloatingPoint4Label","type":"keyword"},"cef.extensions.deviceCustomDate1":{"category":"cef","description":"One of two timestamp fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomDate1","type":"date"},"cef.extensions.deviceCustomDate1Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomDate1Label","type":"keyword"},"cef.extensions.deviceCustomDate2":{"category":"cef","description":"One of two timestamp fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomDate2","type":"date"},"cef.extensions.deviceCustomDate2Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomDate2Label","type":"keyword"},"cef.extensions.deviceCustomFloatingPoint1":{"category":"cef","description":"One of four floating point fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomFloatingPoint1","type":"double"},"cef.extensions.deviceCustomFloatingPoint2":{"category":"cef","description":"One of four floating point fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomFloatingPoint2","type":"double"},"cef.extensions.deviceCustomFloatingPoint2Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomFloatingPoint2Label","type":"keyword"},"cef.extensions.deviceCustomFloatingPoint3":{"category":"cef","description":"One of four floating point fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomFloatingPoint3","type":"double"},"cef.extensions.deviceCustomFloatingPoint4":{"category":"cef","description":"One of four floating point fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomFloatingPoint4","type":"double"},"cef.extensions.deviceCustomIPv6Address1":{"category":"cef","description":"One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomIPv6Address1","type":"ip"},"cef.extensions.deviceCustomIPv6Address1Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomIPv6Address1Label","type":"keyword"},"cef.extensions.deviceCustomIPv6Address2":{"category":"cef","description":"One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomIPv6Address2","type":"ip"},"cef.extensions.deviceCustomIPv6Address2Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomIPv6Address2Label","type":"keyword"},"cef.extensions.deviceCustomIPv6Address3":{"category":"cef","description":"One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomIPv6Address3","type":"ip"},"cef.extensions.deviceCustomIPv6Address3Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomIPv6Address3Label","type":"keyword"},"cef.extensions.deviceCustomIPv6Address4":{"category":"cef","description":"One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.","name":"cef.extensions.deviceCustomIPv6Address4","type":"ip"},"cef.extensions.deviceCustomIPv6Address4Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomIPv6Address4Label","type":"keyword"},"cef.extensions.deviceCustomNumber1":{"category":"cef","description":"One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomNumber1","type":"long"},"cef.extensions.deviceCustomNumber1Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomNumber1Label","type":"keyword"},"cef.extensions.deviceCustomNumber2":{"category":"cef","description":"One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomNumber2","type":"long"},"cef.extensions.deviceCustomNumber2Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomNumber2Label","type":"keyword"},"cef.extensions.deviceCustomNumber3":{"category":"cef","description":"One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomNumber3","type":"long"},"cef.extensions.deviceCustomNumber3Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomNumber3Label","type":"keyword"},"cef.extensions.deviceCustomString1":{"category":"cef","description":"One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomString1","type":"keyword"},"cef.extensions.deviceCustomString1Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomString1Label","type":"keyword"},"cef.extensions.deviceCustomString2":{"category":"cef","description":"One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomString2","type":"keyword"},"cef.extensions.deviceCustomString2Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomString2Label","type":"keyword"},"cef.extensions.deviceCustomString3":{"category":"cef","description":"One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomString3","type":"keyword"},"cef.extensions.deviceCustomString3Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomString3Label","type":"keyword"},"cef.extensions.deviceCustomString4":{"category":"cef","description":"One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomString4","type":"keyword"},"cef.extensions.deviceCustomString4Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomString4Label","type":"keyword"},"cef.extensions.deviceCustomString5":{"category":"cef","description":"One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomString5","type":"keyword"},"cef.extensions.deviceCustomString5Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomString5Label","type":"keyword"},"cef.extensions.deviceCustomString6":{"category":"cef","description":"One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceCustomString6","type":"keyword"},"cef.extensions.deviceCustomString6Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceCustomString6Label","type":"keyword"},"cef.extensions.deviceDirection":{"category":"cef","description":"Any information about what direction the observed communication has taken. The following values are supported - \"0\" for inbound or \"1\" for outbound.","name":"cef.extensions.deviceDirection","type":"long"},"cef.extensions.deviceDnsDomain":{"category":"cef","description":"The DNS domain part of the complete fully qualified domain name (FQDN).","name":"cef.extensions.deviceDnsDomain","type":"keyword"},"cef.extensions.deviceEventCategory":{"category":"cef","description":"Represents the category assigned by the originating device. Devices often use their own categorization schema to classify event. Example \"/Monitor/Disk/Read\".","name":"cef.extensions.deviceEventCategory","type":"keyword"},"cef.extensions.deviceExternalId":{"category":"cef","description":"A name that uniquely identifies the device generating this event.","name":"cef.extensions.deviceExternalId","type":"keyword"},"cef.extensions.deviceFacility":{"category":"cef","description":"The facility generating this event. For example, Syslog has an explicit facility associated with every event.","name":"cef.extensions.deviceFacility","type":"keyword"},"cef.extensions.deviceFlexNumber1":{"category":"cef","description":"One of two alternative number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceFlexNumber1","type":"long"},"cef.extensions.deviceFlexNumber1Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceFlexNumber1Label","type":"keyword"},"cef.extensions.deviceFlexNumber2":{"category":"cef","description":"One of two alternative number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.","name":"cef.extensions.deviceFlexNumber2","type":"long"},"cef.extensions.deviceFlexNumber2Label":{"category":"cef","description":"All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.","name":"cef.extensions.deviceFlexNumber2Label","type":"keyword"},"cef.extensions.deviceHostName":{"category":"cef","description":"The format should be a fully qualified domain name (FQDN) associated with the device node, when a node is available.","name":"cef.extensions.deviceHostName","type":"keyword"},"cef.extensions.deviceInboundInterface":{"category":"cef","description":"Interface on which the packet or data entered the device.","name":"cef.extensions.deviceInboundInterface","type":"keyword"},"cef.extensions.deviceMacAddress":{"category":"cef","description":"Six colon-separated hexadecimal numbers.","name":"cef.extensions.deviceMacAddress","type":"keyword"},"cef.extensions.deviceNtDomain":{"category":"cef","description":"The Windows domain name of the device address.","name":"cef.extensions.deviceNtDomain","type":"keyword"},"cef.extensions.deviceOutboundInterface":{"category":"cef","description":"Interface on which the packet or data left the device.","name":"cef.extensions.deviceOutboundInterface","type":"keyword"},"cef.extensions.devicePayloadId":{"category":"cef","description":"Unique identifier for the payload associated with the event.","name":"cef.extensions.devicePayloadId","type":"keyword"},"cef.extensions.deviceProcessId":{"category":"cef","description":"Provides the ID of the process on the device generating the event.","name":"cef.extensions.deviceProcessId","type":"long"},"cef.extensions.deviceProcessName":{"category":"cef","description":"Process name associated with the event. An example might be the process generating the syslog entry in UNIX.","name":"cef.extensions.deviceProcessName","type":"keyword"},"cef.extensions.deviceReceiptTime":{"category":"cef","description":"The time at which the event related to the activity was received. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st 1970)","name":"cef.extensions.deviceReceiptTime","type":"date"},"cef.extensions.deviceTimeZone":{"category":"cef","description":"The time zone for the device generating the event.","name":"cef.extensions.deviceTimeZone","type":"keyword"},"cef.extensions.deviceTranslatedAddress":{"category":"cef","description":"Identifies the translated device address that the event refers to in an IP network.","name":"cef.extensions.deviceTranslatedAddress","type":"ip"},"cef.extensions.deviceTranslatedZoneExternalID":{"category":"cef","description":"null","name":"cef.extensions.deviceTranslatedZoneExternalID","type":"keyword"},"cef.extensions.deviceTranslatedZoneURI":{"category":"cef","description":"The URI for the Translated Zone that the device asset has been assigned to in ArcSight.","name":"cef.extensions.deviceTranslatedZoneURI","type":"keyword"},"cef.extensions.deviceZoneExternalID":{"category":"cef","description":"null","name":"cef.extensions.deviceZoneExternalID","type":"keyword"},"cef.extensions.deviceZoneURI":{"category":"cef","description":"Thee URI for the Zone that the device asset has been assigned to in ArcSight.","name":"cef.extensions.deviceZoneURI","type":"keyword"},"cef.extensions.endTime":{"category":"cef","description":"The time at which the activity related to the event ended. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st1970). An example would be reporting the end of a session.","name":"cef.extensions.endTime","type":"date"},"cef.extensions.eventId":{"category":"cef","description":"This is a unique ID that ArcSight assigns to each event.","name":"cef.extensions.eventId","type":"long"},"cef.extensions.eventOutcome":{"category":"cef","description":"Displays the outcome, usually as 'success' or 'failure'.","name":"cef.extensions.eventOutcome","type":"keyword"},"cef.extensions.externalId":{"category":"cef","description":"The ID used by an originating device. They are usually increasing numbers, associated with events.","name":"cef.extensions.externalId","type":"keyword"},"cef.extensions.fileCreateTime":{"category":"cef","description":"Time when the file was created.","name":"cef.extensions.fileCreateTime","type":"date"},"cef.extensions.fileHash":{"category":"cef","description":"Hash of a file.","name":"cef.extensions.fileHash","type":"keyword"},"cef.extensions.fileId":{"category":"cef","description":"An ID associated with a file could be the inode.","name":"cef.extensions.fileId","type":"keyword"},"cef.extensions.fileModificationTime":{"category":"cef","description":"Time when the file was last modified.","name":"cef.extensions.fileModificationTime","type":"date"},"cef.extensions.filename":{"category":"cef","description":"Name of the file only (without its path).","name":"cef.extensions.filename","type":"keyword"},"cef.extensions.filePath":{"category":"cef","description":"Full path to the file, including file name itself.","name":"cef.extensions.filePath","type":"keyword"},"cef.extensions.filePermission":{"category":"cef","description":"Permissions of the file.","name":"cef.extensions.filePermission","type":"keyword"},"cef.extensions.fileSize":{"category":"cef","description":"Size of the file.","name":"cef.extensions.fileSize","type":"long"},"cef.extensions.fileType":{"category":"cef","description":"Type of file (pipe, socket, etc.)","name":"cef.extensions.fileType","type":"keyword"},"cef.extensions.flexDate1":{"category":"cef","description":"A timestamp field available to map a timestamp that does not apply to any other defined timestamp field in this dictionary. Use all flex fields sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.","name":"cef.extensions.flexDate1","type":"date"},"cef.extensions.flexDate1Label":{"category":"cef","description":"The label field is a string and describes the purpose of the flex field.","name":"cef.extensions.flexDate1Label","type":"keyword"},"cef.extensions.flexString1":{"category":"cef","description":"One of four floating point fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.","name":"cef.extensions.flexString1","type":"keyword"},"cef.extensions.flexString2":{"category":"cef","description":"One of four floating point fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.","name":"cef.extensions.flexString2","type":"keyword"},"cef.extensions.flexString1Label":{"category":"cef","description":"The label field is a string and describes the purpose of the flex field.","name":"cef.extensions.flexString1Label","type":"keyword"},"cef.extensions.flexString2Label":{"category":"cef","description":"The label field is a string and describes the purpose of the flex field.","name":"cef.extensions.flexString2Label","type":"keyword"},"cef.extensions.message":{"category":"cef","description":"An arbitrary message giving more details about the event. Multi-line entries can be produced by using \\n as the new line separator.","name":"cef.extensions.message","type":"keyword"},"cef.extensions.oldFileCreateTime":{"category":"cef","description":"Time when old file was created.","name":"cef.extensions.oldFileCreateTime","type":"date"},"cef.extensions.oldFileHash":{"category":"cef","description":"Hash of the old file.","name":"cef.extensions.oldFileHash","type":"keyword"},"cef.extensions.oldFileId":{"category":"cef","description":"An ID associated with the old file could be the inode.","name":"cef.extensions.oldFileId","type":"keyword"},"cef.extensions.oldFileModificationTime":{"category":"cef","description":"Time when old file was last modified.","name":"cef.extensions.oldFileModificationTime","type":"date"},"cef.extensions.oldFileName":{"category":"cef","description":"Name of the old file.","name":"cef.extensions.oldFileName","type":"keyword"},"cef.extensions.oldFilePath":{"category":"cef","description":"Full path to the old file, including the file name itself.","name":"cef.extensions.oldFilePath","type":"keyword"},"cef.extensions.oldFilePermission":{"category":"cef","description":"Permissions of the old file.","name":"cef.extensions.oldFilePermission","type":"keyword"},"cef.extensions.oldFileSize":{"category":"cef","description":"Size of the old file.","name":"cef.extensions.oldFileSize","type":"long"},"cef.extensions.oldFileType":{"category":"cef","description":"Type of the old file (pipe, socket, etc.)","name":"cef.extensions.oldFileType","type":"keyword"},"cef.extensions.rawEvent":{"category":"cef","description":"null","name":"cef.extensions.rawEvent","type":"keyword"},"cef.extensions.Reason":{"category":"cef","description":"The reason an audit event was generated. For example \"bad password\" or \"unknown user\". This could also be an error or return code. Example \"0x1234\".","name":"cef.extensions.Reason","type":"keyword"},"cef.extensions.requestClientApplication":{"category":"cef","description":"The User-Agent associated with the request.","name":"cef.extensions.requestClientApplication","type":"keyword"},"cef.extensions.requestContext":{"category":"cef","description":"Description of the content from which the request originated (for example, HTTP Referrer)","name":"cef.extensions.requestContext","type":"keyword"},"cef.extensions.requestCookies":{"category":"cef","description":"Cookies associated with the request.","name":"cef.extensions.requestCookies","type":"keyword"},"cef.extensions.requestMethod":{"category":"cef","description":"The HTTP method used to access a URL.","name":"cef.extensions.requestMethod","type":"keyword"},"cef.extensions.requestUrl":{"category":"cef","description":"In the case of an HTTP request, this field contains the URL accessed. The URL should contain the protocol as well.","name":"cef.extensions.requestUrl","type":"keyword"},"cef.extensions.sourceAddress":{"category":"cef","description":"Identifies the source that an event refers to in an IP network.","name":"cef.extensions.sourceAddress","type":"ip"},"cef.extensions.sourceDnsDomain":{"category":"cef","description":"The DNS domain part of the complete fully qualified domain name (FQDN).","name":"cef.extensions.sourceDnsDomain","type":"keyword"},"cef.extensions.sourceGeoLatitude":{"category":"cef","description":"null","name":"cef.extensions.sourceGeoLatitude","type":"double"},"cef.extensions.sourceGeoLongitude":{"category":"cef","description":"null","name":"cef.extensions.sourceGeoLongitude","type":"double"},"cef.extensions.sourceHostName":{"category":"cef","description":"Identifies the source that an event refers to in an IP network. The format should be a fully qualified domain name (FQDN) associated with the source node, when a mode is available. Examples: 'host' or 'host.domain.com'. ","name":"cef.extensions.sourceHostName","type":"keyword"},"cef.extensions.sourceMacAddress":{"category":"cef","description":"Six colon-separated hexadecimal numbers.","example":"00:0d:60:af:1b:61","name":"cef.extensions.sourceMacAddress","type":"keyword"},"cef.extensions.sourceNtDomain":{"category":"cef","description":"The Windows domain name for the source address.","name":"cef.extensions.sourceNtDomain","type":"keyword"},"cef.extensions.sourcePort":{"category":"cef","description":"The valid port numbers are 0 to 65535.","name":"cef.extensions.sourcePort","type":"long"},"cef.extensions.sourceProcessId":{"category":"cef","description":"The ID of the source process associated with the event.","name":"cef.extensions.sourceProcessId","type":"long"},"cef.extensions.sourceProcessName":{"category":"cef","description":"The name of the event's source process.","name":"cef.extensions.sourceProcessName","type":"keyword"},"cef.extensions.sourceServiceName":{"category":"cef","description":"The service that is responsible for generating this event.","name":"cef.extensions.sourceServiceName","type":"keyword"},"cef.extensions.sourceTranslatedAddress":{"category":"cef","description":"Identifies the translated source that the event refers to in an IP network.","name":"cef.extensions.sourceTranslatedAddress","type":"ip"},"cef.extensions.sourceTranslatedPort":{"category":"cef","description":"A port number after being translated by, for example, a firewall. Valid port numbers are 0 to 65535.","name":"cef.extensions.sourceTranslatedPort","type":"long"},"cef.extensions.sourceTranslatedZoneExternalID":{"category":"cef","description":"null","name":"cef.extensions.sourceTranslatedZoneExternalID","type":"keyword"},"cef.extensions.sourceTranslatedZoneURI":{"category":"cef","description":"The URI for the Translated Zone that the destination asset has been assigned to in ArcSight.","name":"cef.extensions.sourceTranslatedZoneURI","type":"keyword"},"cef.extensions.sourceUserId":{"category":"cef","description":"Identifies the source user by ID. This is the user associated with the source of the event. For example, in UNIX, the root user is generally associated with user ID 0.","name":"cef.extensions.sourceUserId","type":"keyword"},"cef.extensions.sourceUserName":{"category":"cef","description":"Identifies the source user by name. Email addresses are also mapped into the UserName fields. The sender is a candidate to put into this field.","name":"cef.extensions.sourceUserName","type":"keyword"},"cef.extensions.sourceUserPrivileges":{"category":"cef","description":"The typical values are \"Administrator\", \"User\", and \"Guest\". It identifies the source user's privileges. In UNIX, for example, activity executed by the root user would be identified with \"Administrator\".","name":"cef.extensions.sourceUserPrivileges","type":"keyword"},"cef.extensions.sourceZoneExternalID":{"category":"cef","description":"null","name":"cef.extensions.sourceZoneExternalID","type":"keyword"},"cef.extensions.sourceZoneURI":{"category":"cef","description":"The URI for the Zone that the source asset has been assigned to in ArcSight.","name":"cef.extensions.sourceZoneURI","type":"keyword"},"cef.extensions.startTime":{"category":"cef","description":"The time when the activity the event referred to started. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st 1970)","name":"cef.extensions.startTime","type":"date"},"cef.extensions.transportProtocol":{"category":"cef","description":"Identifies the Layer-4 protocol used. The possible values are protocols such as TCP or UDP.","name":"cef.extensions.transportProtocol","type":"keyword"},"cef.extensions.type":{"category":"cef","description":"0 means base event, 1 means aggregated, 2 means correlation, and 3 means action. This field can be omitted for base events (type 0).","name":"cef.extensions.type","type":"long"},"cef.extensions.categoryDeviceType":{"category":"cef","description":"Device type. Examples - Proxy, IDS, Web Server","name":"cef.extensions.categoryDeviceType","type":"keyword"},"cef.extensions.categoryObject":{"category":"cef","description":"Object that the event is about. For example it can be an operating sytem, database, file, etc.","name":"cef.extensions.categoryObject","type":"keyword"},"cef.extensions.categoryBehavior":{"category":"cef","description":"Action or a behavior associated with an event. It's what is being done to the object.","name":"cef.extensions.categoryBehavior","type":"keyword"},"cef.extensions.categoryTechnique":{"category":"cef","description":"Technique being used (e.g. /DoS).","name":"cef.extensions.categoryTechnique","type":"keyword"},"cef.extensions.categoryDeviceGroup":{"category":"cef","description":"General device group like Firewall.","name":"cef.extensions.categoryDeviceGroup","type":"keyword"},"cef.extensions.categorySignificance":{"category":"cef","description":"Characterization of the importance of the event.","name":"cef.extensions.categorySignificance","type":"keyword"},"cef.extensions.categoryOutcome":{"category":"cef","description":"Outcome of the event (e.g. sucess, failure, or attempt).","name":"cef.extensions.categoryOutcome","type":"keyword"},"cef.extensions.managerReceiptTime":{"category":"cef","description":"When the Arcsight ESM received the event.","name":"cef.extensions.managerReceiptTime","type":"date"},"source.service.name":{"category":"source","description":"Service that is the source of the event.","name":"source.service.name","type":"keyword"},"destination.service.name":{"category":"destination","description":"Service that is the target of the event.","name":"destination.service.name","type":"keyword"},"type":{"category":"base","description":"The type of the transaction (for example, HTTP, MySQL, Redis, or RUM) or \"flow\" in case of flows. ","name":"type"},"server.process.name":{"category":"server","description":"The name of the process that served the transaction. ","name":"server.process.name"},"server.process.args":{"category":"server","description":"The command-line of the process that served the transaction. ","name":"server.process.args"},"server.process.executable":{"category":"server","description":"Absolute path to the server process executable. ","name":"server.process.executable"},"server.process.working_directory":{"category":"server","description":"The working directory of the server process. ","name":"server.process.working_directory"},"server.process.start":{"category":"server","description":"The time the server process started. ","name":"server.process.start"},"client.process.name":{"category":"client","description":"The name of the process that initiated the transaction. ","name":"client.process.name"},"client.process.args":{"category":"client","description":"The command-line of the process that initiated the transaction. ","name":"client.process.args"},"client.process.executable":{"category":"client","description":"Absolute path to the client process executable. ","name":"client.process.executable"},"client.process.working_directory":{"category":"client","description":"The working directory of the client process. ","name":"client.process.working_directory"},"client.process.start":{"category":"client","description":"The time the client process started. ","name":"client.process.start"},"real_ip":{"category":"base","description":"If the server initiating the transaction is a proxy, this field contains the original client IP address. For HTTP, for example, the IP address extracted from a configurable HTTP header, by default `X-Forwarded-For`. Unless this field is disabled, it always has a value, and it matches the `client_ip` for non proxy clients. ","name":"real_ip","type":"alias"},"transport":{"category":"base","description":"The transport protocol used for the transaction. If not specified, then tcp is assumed. ","name":"transport","type":"alias"},"flow.final":{"category":"flow","description":"Indicates if event is last event in flow. If final is false, the event reports an intermediate flow state only. ","name":"flow.final","type":"boolean"},"flow.id":{"category":"flow","description":"Internal flow ID based on connection meta data and address. ","name":"flow.id"},"flow.vlan":{"category":"flow","description":"VLAN identifier from the 802.1q frame. In case of a multi-tagged frame this field will be an array with the outer tag's VLAN identifier listed first. ","name":"flow.vlan","type":"long"},"flow_id":{"category":"base","name":"flow_id","type":"alias"},"final":{"category":"base","name":"final","type":"alias"},"vlan":{"category":"base","name":"vlan","type":"alias"},"source.stats.net_bytes_total":{"category":"source","name":"source.stats.net_bytes_total","type":"alias"},"source.stats.net_packets_total":{"category":"source","name":"source.stats.net_packets_total","type":"alias"},"dest.stats.net_bytes_total":{"category":"dest","name":"dest.stats.net_bytes_total","type":"alias"},"dest.stats.net_packets_total":{"category":"dest","name":"dest.stats.net_packets_total","type":"alias"},"status":{"category":"base","description":"The high level status of the transaction. The way to compute this value depends on the protocol, but the result has a meaning independent of the protocol. ","name":"status"},"method":{"category":"base","description":"The command/verb/method of the transaction. For HTTP, this is the method name (GET, POST, PUT, and so on), for SQL this is the verb (SELECT, UPDATE, DELETE, and so on). ","name":"method"},"resource":{"category":"base","description":"The logical resource that this transaction refers to. For HTTP, this is the URL path up to the last slash (/). For example, if the URL is `/users/1`, the resource is `/users`. For databases, the resource is typically the table name. The field is not filled for all transaction types. ","name":"resource"},"path":{"category":"base","description":"The path the transaction refers to. For HTTP, this is the URL. For SQL databases, this is the table name. For key-value stores, this is the key. ","name":"path"},"query":{"category":"base","description":"The query in a human readable format. For HTTP, it will typically be something like `GET /users/_search?name=test`. For MySQL, it is something like `SELECT id from users where name=test`. ","name":"query","type":"keyword"},"params":{"category":"base","description":"The request parameters. For HTTP, these are the POST or GET parameters. For Thrift-RPC, these are the parameters from the request. ","name":"params","type":"text"},"notes":{"category":"base","description":"Messages from Packetbeat itself. This field usually contains error messages for interpreting the raw data. This information can be helpful for troubleshooting. ","name":"notes","type":"alias"},"request":{"category":"base","description":"For text protocols, this is the request as seen on the wire (application layer only). For binary protocols this is our representation of the request. ","name":"request","type":"text"},"response":{"category":"base","description":"For text protocols, this is the response as seen on the wire (application layer only). For binary protocols this is our representation of the request. ","name":"response","type":"text"},"bytes_in":{"category":"base","description":"The number of bytes of the request. Note that this size is the application layer message length, without the length of the IP or TCP headers. ","name":"bytes_in","type":"alias"},"bytes_out":{"category":"base","description":"The number of bytes of the response. Note that this size is the application layer message length, without the length of the IP or TCP headers. ","name":"bytes_out","type":"alias"},"amqp.reply-code":{"category":"amqp","description":"AMQP reply code to an error, similar to http reply-code ","example":404,"name":"amqp.reply-code","type":"long"},"amqp.reply-text":{"category":"amqp","description":"Text explaining the error. ","name":"amqp.reply-text","type":"keyword"},"amqp.class-id":{"category":"amqp","description":"Failing method class. ","name":"amqp.class-id","type":"long"},"amqp.method-id":{"category":"amqp","description":"Failing method ID. ","name":"amqp.method-id","type":"long"},"amqp.exchange":{"category":"amqp","description":"Name of the exchange. ","name":"amqp.exchange","type":"keyword"},"amqp.exchange-type":{"category":"amqp","description":"Exchange type. ","example":"fanout","name":"amqp.exchange-type","type":"keyword"},"amqp.passive":{"category":"amqp","description":"If set, do not create exchange/queue. ","name":"amqp.passive","type":"boolean"},"amqp.durable":{"category":"amqp","description":"If set, request a durable exchange/queue. ","name":"amqp.durable","type":"boolean"},"amqp.exclusive":{"category":"amqp","description":"If set, request an exclusive queue. ","name":"amqp.exclusive","type":"boolean"},"amqp.auto-delete":{"category":"amqp","description":"If set, auto-delete queue when unused. ","name":"amqp.auto-delete","type":"boolean"},"amqp.no-wait":{"category":"amqp","description":"If set, the server will not respond to the method. ","name":"amqp.no-wait","type":"boolean"},"amqp.consumer-tag":{"category":"amqp","description":"Identifier for the consumer, valid within the current channel. ","name":"amqp.consumer-tag"},"amqp.delivery-tag":{"category":"amqp","description":"The server-assigned and channel-specific delivery tag. ","name":"amqp.delivery-tag","type":"long"},"amqp.message-count":{"category":"amqp","description":"The number of messages in the queue, which will be zero for newly-declared queues. ","name":"amqp.message-count","type":"long"},"amqp.consumer-count":{"category":"amqp","description":"The number of consumers of a queue. ","name":"amqp.consumer-count","type":"long"},"amqp.routing-key":{"category":"amqp","description":"Message routing key. ","name":"amqp.routing-key","type":"keyword"},"amqp.no-ack":{"category":"amqp","description":"If set, the server does not expect acknowledgements for messages. ","name":"amqp.no-ack","type":"boolean"},"amqp.no-local":{"category":"amqp","description":"If set, the server will not send messages to the connection that published them. ","name":"amqp.no-local","type":"boolean"},"amqp.if-unused":{"category":"amqp","description":"Delete only if unused. ","name":"amqp.if-unused","type":"boolean"},"amqp.if-empty":{"category":"amqp","description":"Delete only if empty. ","name":"amqp.if-empty","type":"boolean"},"amqp.queue":{"category":"amqp","description":"The queue name identifies the queue within the vhost. ","name":"amqp.queue","type":"keyword"},"amqp.redelivered":{"category":"amqp","description":"Indicates that the message has been previously delivered to this or another client. ","name":"amqp.redelivered","type":"boolean"},"amqp.multiple":{"category":"amqp","description":"Acknowledge multiple messages. ","name":"amqp.multiple","type":"boolean"},"amqp.arguments":{"category":"amqp","description":"Optional additional arguments passed to some methods. Can be of various types. ","name":"amqp.arguments","type":"object"},"amqp.mandatory":{"category":"amqp","description":"Indicates mandatory routing. ","name":"amqp.mandatory","type":"boolean"},"amqp.immediate":{"category":"amqp","description":"Request immediate delivery. ","name":"amqp.immediate","type":"boolean"},"amqp.content-type":{"category":"amqp","description":"MIME content type. ","example":"text/plain","name":"amqp.content-type","type":"keyword"},"amqp.content-encoding":{"category":"amqp","description":"MIME content encoding. ","name":"amqp.content-encoding","type":"keyword"},"amqp.headers":{"category":"amqp","description":"Message header field table. ","name":"amqp.headers","type":"object"},"amqp.delivery-mode":{"category":"amqp","description":"Non-persistent (1) or persistent (2). ","name":"amqp.delivery-mode","type":"keyword"},"amqp.priority":{"category":"amqp","description":"Message priority, 0 to 9. ","name":"amqp.priority","type":"long"},"amqp.correlation-id":{"category":"amqp","description":"Application correlation identifier. ","name":"amqp.correlation-id","type":"keyword"},"amqp.reply-to":{"category":"amqp","description":"Address to reply to. ","name":"amqp.reply-to","type":"keyword"},"amqp.expiration":{"category":"amqp","description":"Message expiration specification. ","name":"amqp.expiration","type":"keyword"},"amqp.message-id":{"category":"amqp","description":"Application message identifier. ","name":"amqp.message-id","type":"keyword"},"amqp.timestamp":{"category":"amqp","description":"Message timestamp. ","name":"amqp.timestamp","type":"keyword"},"amqp.type":{"category":"amqp","description":"Message type name. ","name":"amqp.type","type":"keyword"},"amqp.user-id":{"category":"amqp","description":"Creating user id. ","name":"amqp.user-id","type":"keyword"},"amqp.app-id":{"category":"amqp","description":"Creating application id. ","name":"amqp.app-id","type":"keyword"},"no_request":{"category":"base","name":"no_request","type":"alias"},"cassandra.no_request":{"category":"cassandra","description":"Indicates that there is no request because this is a PUSH message. ","name":"cassandra.no_request","type":"boolean"},"cassandra.request.headers.version":{"category":"cassandra","description":"The version of the protocol.","name":"cassandra.request.headers.version","type":"long"},"cassandra.request.headers.flags":{"category":"cassandra","description":"Flags applying to this frame.","name":"cassandra.request.headers.flags","type":"keyword"},"cassandra.request.headers.stream":{"category":"cassandra","description":"A frame has a stream id. If a client sends a request message with the stream id X, it is guaranteed that the stream id of the response to that message will be X.","name":"cassandra.request.headers.stream","type":"keyword"},"cassandra.request.headers.op":{"category":"cassandra","description":"An operation type that distinguishes the actual message.","name":"cassandra.request.headers.op","type":"keyword"},"cassandra.request.headers.length":{"category":"cassandra","description":"A integer representing the length of the body of the frame (a frame is limited to 256MB in length).","name":"cassandra.request.headers.length","type":"long"},"cassandra.request.query":{"category":"cassandra","description":"The CQL query which client send to cassandra.","name":"cassandra.request.query","type":"keyword"},"cassandra.response.headers.version":{"category":"cassandra","description":"The version of the protocol.","name":"cassandra.response.headers.version","type":"long"},"cassandra.response.headers.flags":{"category":"cassandra","description":"Flags applying to this frame.","name":"cassandra.response.headers.flags","type":"keyword"},"cassandra.response.headers.stream":{"category":"cassandra","description":"A frame has a stream id. If a client sends a request message with the stream id X, it is guaranteed that the stream id of the response to that message will be X.","name":"cassandra.response.headers.stream","type":"keyword"},"cassandra.response.headers.op":{"category":"cassandra","description":"An operation type that distinguishes the actual message.","name":"cassandra.response.headers.op","type":"keyword"},"cassandra.response.headers.length":{"category":"cassandra","description":"A integer representing the length of the body of the frame (a frame is limited to 256MB in length).","name":"cassandra.response.headers.length","type":"long"},"cassandra.response.result.type":{"category":"cassandra","description":"Cassandra result type.","name":"cassandra.response.result.type","type":"keyword"},"cassandra.response.result.rows.num_rows":{"category":"cassandra","description":"Representing the number of rows present in this result.","name":"cassandra.response.result.rows.num_rows","type":"long"},"cassandra.response.result.rows.meta.keyspace":{"category":"cassandra","description":"Only present after set Global_tables_spec, the keyspace name.","name":"cassandra.response.result.rows.meta.keyspace","type":"keyword"},"cassandra.response.result.rows.meta.table":{"category":"cassandra","description":"Only present after set Global_tables_spec, the table name.","name":"cassandra.response.result.rows.meta.table","type":"keyword"},"cassandra.response.result.rows.meta.flags":{"category":"cassandra","description":"Provides information on the formatting of the remaining information.","name":"cassandra.response.result.rows.meta.flags","type":"keyword"},"cassandra.response.result.rows.meta.col_count":{"category":"cassandra","description":"Representing the number of columns selected by the query that produced this result.","name":"cassandra.response.result.rows.meta.col_count","type":"long"},"cassandra.response.result.rows.meta.pkey_columns":{"category":"cassandra","description":"Representing the PK columns index and counts.","name":"cassandra.response.result.rows.meta.pkey_columns","type":"long"},"cassandra.response.result.rows.meta.paging_state":{"category":"cassandra","description":"The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.","name":"cassandra.response.result.rows.meta.paging_state","type":"keyword"},"cassandra.response.result.keyspace":{"category":"cassandra","description":"Indicating the name of the keyspace that has been set.","name":"cassandra.response.result.keyspace","type":"keyword"},"cassandra.response.result.schema_change.change":{"category":"cassandra","description":"Representing the type of changed involved.","name":"cassandra.response.result.schema_change.change","type":"keyword"},"cassandra.response.result.schema_change.keyspace":{"category":"cassandra","description":"This describes which keyspace has changed.","name":"cassandra.response.result.schema_change.keyspace","type":"keyword"},"cassandra.response.result.schema_change.table":{"category":"cassandra","description":"This describes which table has changed.","name":"cassandra.response.result.schema_change.table","type":"keyword"},"cassandra.response.result.schema_change.object":{"category":"cassandra","description":"This describes the name of said affected object (either the table, user type, function, or aggregate name).","name":"cassandra.response.result.schema_change.object","type":"keyword"},"cassandra.response.result.schema_change.target":{"category":"cassandra","description":"Target could be \"FUNCTION\" or \"AGGREGATE\", multiple arguments.","name":"cassandra.response.result.schema_change.target","type":"keyword"},"cassandra.response.result.schema_change.name":{"category":"cassandra","description":"The function/aggregate name.","name":"cassandra.response.result.schema_change.name","type":"keyword"},"cassandra.response.result.schema_change.args":{"category":"cassandra","description":"One string for each argument type (as CQL type).","name":"cassandra.response.result.schema_change.args","type":"keyword"},"cassandra.response.result.prepared.prepared_id":{"category":"cassandra","description":"Representing the prepared query ID.","name":"cassandra.response.result.prepared.prepared_id","type":"keyword"},"cassandra.response.result.prepared.req_meta.keyspace":{"category":"cassandra","description":"Only present after set Global_tables_spec, the keyspace name.","name":"cassandra.response.result.prepared.req_meta.keyspace","type":"keyword"},"cassandra.response.result.prepared.req_meta.table":{"category":"cassandra","description":"Only present after set Global_tables_spec, the table name.","name":"cassandra.response.result.prepared.req_meta.table","type":"keyword"},"cassandra.response.result.prepared.req_meta.flags":{"category":"cassandra","description":"Provides information on the formatting of the remaining information.","name":"cassandra.response.result.prepared.req_meta.flags","type":"keyword"},"cassandra.response.result.prepared.req_meta.col_count":{"category":"cassandra","description":"Representing the number of columns selected by the query that produced this result.","name":"cassandra.response.result.prepared.req_meta.col_count","type":"long"},"cassandra.response.result.prepared.req_meta.pkey_columns":{"category":"cassandra","description":"Representing the PK columns index and counts.","name":"cassandra.response.result.prepared.req_meta.pkey_columns","type":"long"},"cassandra.response.result.prepared.req_meta.paging_state":{"category":"cassandra","description":"The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.","name":"cassandra.response.result.prepared.req_meta.paging_state","type":"keyword"},"cassandra.response.result.prepared.resp_meta.keyspace":{"category":"cassandra","description":"Only present after set Global_tables_spec, the keyspace name.","name":"cassandra.response.result.prepared.resp_meta.keyspace","type":"keyword"},"cassandra.response.result.prepared.resp_meta.table":{"category":"cassandra","description":"Only present after set Global_tables_spec, the table name.","name":"cassandra.response.result.prepared.resp_meta.table","type":"keyword"},"cassandra.response.result.prepared.resp_meta.flags":{"category":"cassandra","description":"Provides information on the formatting of the remaining information.","name":"cassandra.response.result.prepared.resp_meta.flags","type":"keyword"},"cassandra.response.result.prepared.resp_meta.col_count":{"category":"cassandra","description":"Representing the number of columns selected by the query that produced this result.","name":"cassandra.response.result.prepared.resp_meta.col_count","type":"long"},"cassandra.response.result.prepared.resp_meta.pkey_columns":{"category":"cassandra","description":"Representing the PK columns index and counts.","name":"cassandra.response.result.prepared.resp_meta.pkey_columns","type":"long"},"cassandra.response.result.prepared.resp_meta.paging_state":{"category":"cassandra","description":"The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.","name":"cassandra.response.result.prepared.resp_meta.paging_state","type":"keyword"},"cassandra.response.supported":{"category":"cassandra","description":"Indicates which startup options are supported by the server. This message comes as a response to an OPTIONS message.","name":"cassandra.response.supported","type":"object"},"cassandra.response.authentication.class":{"category":"cassandra","description":"Indicates the full class name of the IAuthenticator in use","name":"cassandra.response.authentication.class","type":"keyword"},"cassandra.response.warnings":{"category":"cassandra","description":"The text of the warnings, only occur when Warning flag was set.","name":"cassandra.response.warnings","type":"keyword"},"cassandra.response.event.type":{"category":"cassandra","description":"Representing the event type.","name":"cassandra.response.event.type","type":"keyword"},"cassandra.response.event.change":{"category":"cassandra","description":"The message corresponding respectively to the type of change followed by the address of the new/removed node.","name":"cassandra.response.event.change","type":"keyword"},"cassandra.response.event.host":{"category":"cassandra","description":"Representing the node ip.","name":"cassandra.response.event.host","type":"keyword"},"cassandra.response.event.port":{"category":"cassandra","description":"Representing the node port.","name":"cassandra.response.event.port","type":"long"},"cassandra.response.event.schema_change.change":{"category":"cassandra","description":"Representing the type of changed involved.","name":"cassandra.response.event.schema_change.change","type":"keyword"},"cassandra.response.event.schema_change.keyspace":{"category":"cassandra","description":"This describes which keyspace has changed.","name":"cassandra.response.event.schema_change.keyspace","type":"keyword"},"cassandra.response.event.schema_change.table":{"category":"cassandra","description":"This describes which table has changed.","name":"cassandra.response.event.schema_change.table","type":"keyword"},"cassandra.response.event.schema_change.object":{"category":"cassandra","description":"This describes the name of said affected object (either the table, user type, function, or aggregate name).","name":"cassandra.response.event.schema_change.object","type":"keyword"},"cassandra.response.event.schema_change.target":{"category":"cassandra","description":"Target could be \"FUNCTION\" or \"AGGREGATE\", multiple arguments.","name":"cassandra.response.event.schema_change.target","type":"keyword"},"cassandra.response.event.schema_change.name":{"category":"cassandra","description":"The function/aggregate name.","name":"cassandra.response.event.schema_change.name","type":"keyword"},"cassandra.response.event.schema_change.args":{"category":"cassandra","description":"One string for each argument type (as CQL type).","name":"cassandra.response.event.schema_change.args","type":"keyword"},"cassandra.response.error.code":{"category":"cassandra","description":"The error code of the Cassandra response.","name":"cassandra.response.error.code","type":"long"},"cassandra.response.error.msg":{"category":"cassandra","description":"The error message of the Cassandra response.","name":"cassandra.response.error.msg","type":"keyword"},"cassandra.response.error.type":{"category":"cassandra","description":"The error type of the Cassandra response.","name":"cassandra.response.error.type","type":"keyword"},"cassandra.response.error.details.read_consistency":{"category":"cassandra","description":"Representing the consistency level of the query that triggered the exception.","name":"cassandra.response.error.details.read_consistency","type":"keyword"},"cassandra.response.error.details.required":{"category":"cassandra","description":"Representing the number of nodes that should be alive to respect consistency level.","name":"cassandra.response.error.details.required","type":"long"},"cassandra.response.error.details.alive":{"category":"cassandra","description":"Representing the number of replicas that were known to be alive when the request had been processed (since an unavailable exception has been triggered).","name":"cassandra.response.error.details.alive","type":"long"},"cassandra.response.error.details.received":{"category":"cassandra","description":"Representing the number of nodes having acknowledged the request.","name":"cassandra.response.error.details.received","type":"long"},"cassandra.response.error.details.blockfor":{"category":"cassandra","description":"Representing the number of replicas whose acknowledgement is required to achieve consistency level.","name":"cassandra.response.error.details.blockfor","type":"long"},"cassandra.response.error.details.write_type":{"category":"cassandra","description":"Describe the type of the write that timed out.","name":"cassandra.response.error.details.write_type","type":"keyword"},"cassandra.response.error.details.data_present":{"category":"cassandra","description":"It means the replica that was asked for data had responded.","name":"cassandra.response.error.details.data_present","type":"boolean"},"cassandra.response.error.details.keyspace":{"category":"cassandra","description":"The keyspace of the failed function.","name":"cassandra.response.error.details.keyspace","type":"keyword"},"cassandra.response.error.details.table":{"category":"cassandra","description":"The keyspace of the failed function.","name":"cassandra.response.error.details.table","type":"keyword"},"cassandra.response.error.details.stmt_id":{"category":"cassandra","description":"Representing the unknown ID.","name":"cassandra.response.error.details.stmt_id","type":"keyword"},"cassandra.response.error.details.num_failures":{"category":"cassandra","description":"Representing the number of nodes that experience a failure while executing the request.","name":"cassandra.response.error.details.num_failures","type":"keyword"},"cassandra.response.error.details.function":{"category":"cassandra","description":"The name of the failed function.","name":"cassandra.response.error.details.function","type":"keyword"},"cassandra.response.error.details.arg_types":{"category":"cassandra","description":"One string for each argument type (as CQL type) of the failed function.","name":"cassandra.response.error.details.arg_types","type":"keyword"},"dhcpv4.transaction_id":{"category":"dhcpv4","description":"Transaction ID, a random number chosen by the client, used by the client and server to associate messages and responses between a client and a server. ","name":"dhcpv4.transaction_id","type":"keyword"},"dhcpv4.seconds":{"category":"dhcpv4","description":"Number of seconds elapsed since client began address acquisition or renewal process. ","name":"dhcpv4.seconds","type":"long"},"dhcpv4.flags":{"category":"dhcpv4","description":"Flags are set by the client to indicate how the DHCP server should its reply -- either unicast or broadcast. ","name":"dhcpv4.flags","type":"keyword"},"dhcpv4.client_ip":{"category":"dhcpv4","description":"The current IP address of the client.","name":"dhcpv4.client_ip","type":"ip"},"dhcpv4.assigned_ip":{"category":"dhcpv4","description":"The IP address that the DHCP server is assigning to the client. This field is also known as \"your\" IP address. ","name":"dhcpv4.assigned_ip","type":"ip"},"dhcpv4.server_ip":{"category":"dhcpv4","description":"The IP address of the DHCP server that the client should use for the next step in the bootstrap process. ","name":"dhcpv4.server_ip","type":"ip"},"dhcpv4.relay_ip":{"category":"dhcpv4","description":"The relay IP address used by the client to contact the server (i.e. a DHCP relay server). ","name":"dhcpv4.relay_ip","type":"ip"},"dhcpv4.client_mac":{"category":"dhcpv4","description":"The client's MAC address (layer two).","name":"dhcpv4.client_mac","type":"keyword"},"dhcpv4.server_name":{"category":"dhcpv4","description":"The name of the server sending the message. Optional. Used in DHCPOFFER or DHCPACK messages. ","name":"dhcpv4.server_name","type":"keyword"},"dhcpv4.op_code":{"category":"dhcpv4","description":"The message op code (bootrequest or bootreply). ","example":"bootreply","name":"dhcpv4.op_code","type":"keyword"},"dhcpv4.hops":{"category":"dhcpv4","description":"The number of hops the DHCP message went through.","name":"dhcpv4.hops","type":"long"},"dhcpv4.hardware_type":{"category":"dhcpv4","description":"The type of hardware used for the local network (Ethernet, LocalTalk, etc). ","name":"dhcpv4.hardware_type","type":"keyword"},"dhcpv4.option.message_type":{"category":"dhcpv4","description":"The specific type of DHCP message being sent (e.g. discover, offer, request, decline, ack, nak, release, inform). ","example":"ack","name":"dhcpv4.option.message_type","type":"keyword"},"dhcpv4.option.parameter_request_list":{"category":"dhcpv4","description":"This option is used by a DHCP client to request values for specified configuration parameters. ","name":"dhcpv4.option.parameter_request_list","type":"keyword"},"dhcpv4.option.requested_ip_address":{"category":"dhcpv4","description":"This option is used in a client request (DHCPDISCOVER) to allow the client to request that a particular IP address be assigned. ","name":"dhcpv4.option.requested_ip_address","type":"ip"},"dhcpv4.option.server_identifier":{"category":"dhcpv4","description":"IP address of the individual DHCP server which handled this message. ","name":"dhcpv4.option.server_identifier","type":"ip"},"dhcpv4.option.broadcast_address":{"category":"dhcpv4","description":"This option specifies the broadcast address in use on the client's subnet. ","name":"dhcpv4.option.broadcast_address","type":"ip"},"dhcpv4.option.max_dhcp_message_size":{"category":"dhcpv4","description":"This option specifies the maximum length DHCP message that the client is willing to accept. ","name":"dhcpv4.option.max_dhcp_message_size","type":"long"},"dhcpv4.option.class_identifier":{"category":"dhcpv4","description":"This option is used by DHCP clients to optionally identify the vendor type and configuration of a DHCP client. Vendors may choose to define specific vendor class identifiers to convey particular configuration or other identification information about a client. For example, the identifier may encode the client's hardware configuration. ","name":"dhcpv4.option.class_identifier","type":"keyword"},"dhcpv4.option.domain_name":{"category":"dhcpv4","description":"This option specifies the domain name that client should use when resolving hostnames via the Domain Name System. ","name":"dhcpv4.option.domain_name","type":"keyword"},"dhcpv4.option.dns_servers":{"category":"dhcpv4","description":"The domain name server option specifies a list of Domain Name System servers available to the client. ","name":"dhcpv4.option.dns_servers","type":"ip"},"dhcpv4.option.vendor_identifying_options":{"category":"dhcpv4","description":"A DHCP client may use this option to unambiguously identify the vendor that manufactured the hardware on which the client is running, the software in use, or an industry consortium to which the vendor belongs. This field is described in RFC 3925. ","name":"dhcpv4.option.vendor_identifying_options","type":"object"},"dhcpv4.option.subnet_mask":{"category":"dhcpv4","description":"The subnet mask that the client should use on the currnet network. ","name":"dhcpv4.option.subnet_mask","type":"ip"},"dhcpv4.option.utc_time_offset_sec":{"category":"dhcpv4","description":"The time offset field specifies the offset of the client's subnet in seconds from Coordinated Universal Time (UTC). ","name":"dhcpv4.option.utc_time_offset_sec","type":"long"},"dhcpv4.option.router":{"category":"dhcpv4","description":"The router option specifies a list of IP addresses for routers on the client's subnet. ","name":"dhcpv4.option.router","type":"ip"},"dhcpv4.option.time_servers":{"category":"dhcpv4","description":"The time server option specifies a list of RFC 868 time servers available to the client. ","name":"dhcpv4.option.time_servers","type":"ip"},"dhcpv4.option.ntp_servers":{"category":"dhcpv4","description":"This option specifies a list of IP addresses indicating NTP servers available to the client. ","name":"dhcpv4.option.ntp_servers","type":"ip"},"dhcpv4.option.hostname":{"category":"dhcpv4","description":"This option specifies the name of the client. ","name":"dhcpv4.option.hostname","type":"keyword"},"dhcpv4.option.ip_address_lease_time_sec":{"category":"dhcpv4","description":"This option is used in a client request (DHCPDISCOVER or DHCPREQUEST) to allow the client to request a lease time for the IP address. In a server reply (DHCPOFFER), a DHCP server uses this option to specify the lease time it is willing to offer. ","name":"dhcpv4.option.ip_address_lease_time_sec","type":"long"},"dhcpv4.option.message":{"category":"dhcpv4","description":"This option is used by a DHCP server to provide an error message to a DHCP client in a DHCPNAK message in the event of a failure. A client may use this option in a DHCPDECLINE message to indicate the why the client declined the offered parameters. ","name":"dhcpv4.option.message","type":"text"},"dhcpv4.option.renewal_time_sec":{"category":"dhcpv4","description":"This option specifies the time interval from address assignment until the client transitions to the RENEWING state. ","name":"dhcpv4.option.renewal_time_sec","type":"long"},"dhcpv4.option.rebinding_time_sec":{"category":"dhcpv4","description":"This option specifies the time interval from address assignment until the client transitions to the REBINDING state. ","name":"dhcpv4.option.rebinding_time_sec","type":"long"},"dhcpv4.option.boot_file_name":{"category":"dhcpv4","description":"This option is used to identify a bootfile when the 'file' field in the DHCP header has been used for DHCP options. ","name":"dhcpv4.option.boot_file_name","type":"keyword"},"dns.flags.authoritative":{"category":"dns","description":"A DNS flag specifying that the responding server is an authority for the domain name used in the question. ","name":"dns.flags.authoritative","type":"boolean"},"dns.flags.recursion_available":{"category":"dns","description":"A DNS flag specifying whether recursive query support is available in the name server. ","name":"dns.flags.recursion_available","type":"boolean"},"dns.flags.recursion_desired":{"category":"dns","description":"A DNS flag specifying that the client directs the server to pursue a query recursively. Recursive query support is optional. ","name":"dns.flags.recursion_desired","type":"boolean"},"dns.flags.authentic_data":{"category":"dns","description":"A DNS flag specifying that the recursive server considers the response authentic. ","name":"dns.flags.authentic_data","type":"boolean"},"dns.flags.checking_disabled":{"category":"dns","description":"A DNS flag specifying that the client disables the server signature validation of the query. ","name":"dns.flags.checking_disabled","type":"boolean"},"dns.flags.truncated_response":{"category":"dns","description":"A DNS flag specifying that only the first 512 bytes of the reply were returned. ","name":"dns.flags.truncated_response","type":"boolean"},"dns.question.etld_plus_one":{"category":"dns","description":"The effective top-level domain (eTLD) plus one more label. For example, the eTLD+1 for \"foo.bar.golang.org.\" is \"golang.org.\". The data for determining the eTLD comes from an embedded copy of the data from http://publicsuffix.org.","example":"amazon.co.uk.","name":"dns.question.etld_plus_one"},"dns.answers_count":{"category":"dns","description":"The number of resource records contained in the `dns.answers` field. ","name":"dns.answers_count","type":"long"},"dns.authorities":{"category":"dns","description":"An array containing a dictionary for each authority section from the answer. ","name":"dns.authorities","type":"object"},"dns.authorities_count":{"category":"dns","description":"The number of resource records contained in the `dns.authorities` field. The `dns.authorities` field may or may not be included depending on the configuration of Packetbeat. ","name":"dns.authorities_count","type":"long"},"dns.authorities.name":{"category":"dns","description":"The domain name to which this resource record pertains.","example":"example.com.","name":"dns.authorities.name"},"dns.authorities.type":{"category":"dns","description":"The type of data contained in this resource record.","example":"NS","name":"dns.authorities.type"},"dns.authorities.class":{"category":"dns","description":"The class of DNS data contained in this resource record.","example":"IN","name":"dns.authorities.class"},"dns.additionals":{"category":"dns","description":"An array containing a dictionary for each additional section from the answer. ","name":"dns.additionals","type":"object"},"dns.additionals_count":{"category":"dns","description":"The number of resource records contained in the `dns.additionals` field. The `dns.additionals` field may or may not be included depending on the configuration of Packetbeat. ","name":"dns.additionals_count","type":"long"},"dns.additionals.name":{"category":"dns","description":"The domain name to which this resource record pertains.","example":"example.com.","name":"dns.additionals.name"},"dns.additionals.type":{"category":"dns","description":"The type of data contained in this resource record.","example":"NS","name":"dns.additionals.type"},"dns.additionals.class":{"category":"dns","description":"The class of DNS data contained in this resource record.","example":"IN","name":"dns.additionals.class"},"dns.additionals.ttl":{"category":"dns","description":"The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached. ","name":"dns.additionals.ttl","type":"long"},"dns.additionals.data":{"category":"dns","description":"The data describing the resource. The meaning of this data depends on the type and class of the resource record. ","name":"dns.additionals.data"},"dns.opt.version":{"category":"dns","description":"The EDNS version.","example":"0","name":"dns.opt.version"},"dns.opt.do":{"category":"dns","description":"If set, the transaction uses DNSSEC.","name":"dns.opt.do","type":"boolean"},"dns.opt.ext_rcode":{"category":"dns","description":"Extended response code field.","example":"BADVERS","name":"dns.opt.ext_rcode"},"dns.opt.udp_size":{"category":"dns","description":"Requestor's UDP payload size (in bytes).","name":"dns.opt.udp_size","type":"long"},"http.request.headers":{"category":"http","description":"A map containing the captured header fields from the request. Which headers to capture is configurable. If headers with the same header name are present in the message, they will be separated by commas. ","name":"http.request.headers","type":"object"},"http.request.params":{"category":"http","name":"http.request.params","type":"alias"},"http.response.status_phrase":{"category":"http","description":"The HTTP status phrase.","example":"Not Found","name":"http.response.status_phrase"},"http.response.headers":{"category":"http","description":"A map containing the captured header fields from the response. Which headers to capture is configurable. If headers with the same header name are present in the message, they will be separated by commas. ","name":"http.response.headers","type":"object"},"http.response.code":{"category":"http","name":"http.response.code","type":"alias"},"http.response.phrase":{"category":"http","name":"http.response.phrase","type":"alias"},"icmp.version":{"category":"icmp","description":"The version of the ICMP protocol.","name":"icmp.version"},"icmp.request.message":{"category":"icmp","description":"A human readable form of the request.","name":"icmp.request.message","type":"keyword"},"icmp.request.type":{"category":"icmp","description":"The request type.","name":"icmp.request.type","type":"long"},"icmp.request.code":{"category":"icmp","description":"The request code.","name":"icmp.request.code","type":"long"},"icmp.response.message":{"category":"icmp","description":"A human readable form of the response.","name":"icmp.response.message","type":"keyword"},"icmp.response.type":{"category":"icmp","description":"The response type.","name":"icmp.response.type","type":"long"},"icmp.response.code":{"category":"icmp","description":"The response code.","name":"icmp.response.code","type":"long"},"memcache.protocol_type":{"category":"memcache","description":"The memcache protocol implementation. The value can be \"binary\" for binary-based, \"text\" for text-based, or \"unknown\" for an unknown memcache protocol type. ","name":"memcache.protocol_type","type":"keyword"},"memcache.request.line":{"category":"memcache","description":"The raw command line for unknown commands ONLY. ","name":"memcache.request.line","type":"keyword"},"memcache.request.command":{"category":"memcache","description":"The memcache command being requested in the memcache text protocol. For example \"set\" or \"get\". The binary protocol opcodes are translated into memcache text protocol commands. ","name":"memcache.request.command","type":"keyword"},"memcache.response.command":{"category":"memcache","description":"Either the text based protocol response message type or the name of the originating request if binary protocol is used. ","name":"memcache.response.command","type":"keyword"},"memcache.request.type":{"category":"memcache","description":"The memcache command classification. This value can be \"UNKNOWN\", \"Load\", \"Store\", \"Delete\", \"Counter\", \"Info\", \"SlabCtrl\", \"LRUCrawler\", \"Stats\", \"Success\", \"Fail\", or \"Auth\". ","name":"memcache.request.type","type":"keyword"},"memcache.response.type":{"category":"memcache","description":"The memcache command classification. This value can be \"UNKNOWN\", \"Load\", \"Store\", \"Delete\", \"Counter\", \"Info\", \"SlabCtrl\", \"LRUCrawler\", \"Stats\", \"Success\", \"Fail\", or \"Auth\". The text based protocol will employ any of these, whereas the binary based protocol will mirror the request commands only (see `memcache.response.status` for binary protocol). ","name":"memcache.response.type","type":"keyword"},"memcache.response.error_msg":{"category":"memcache","description":"The optional error message in the memcache response (text based protocol only). ","name":"memcache.response.error_msg","type":"keyword"},"memcache.request.opcode":{"category":"memcache","description":"The binary protocol message opcode name. ","name":"memcache.request.opcode","type":"keyword"},"memcache.response.opcode":{"category":"memcache","description":"The binary protocol message opcode name. ","name":"memcache.response.opcode","type":"keyword"},"memcache.request.opcode_value":{"category":"memcache","description":"The binary protocol message opcode value. ","name":"memcache.request.opcode_value","type":"long"},"memcache.response.opcode_value":{"category":"memcache","description":"The binary protocol message opcode value. ","name":"memcache.response.opcode_value","type":"long"},"memcache.request.opaque":{"category":"memcache","description":"The binary protocol opaque header value used for correlating request with response messages. ","name":"memcache.request.opaque","type":"long"},"memcache.response.opaque":{"category":"memcache","description":"The binary protocol opaque header value used for correlating request with response messages. ","name":"memcache.response.opaque","type":"long"},"memcache.request.vbucket":{"category":"memcache","description":"The vbucket index sent in the binary message. ","name":"memcache.request.vbucket","type":"long"},"memcache.response.status":{"category":"memcache","description":"The textual representation of the response error code (binary protocol only). ","name":"memcache.response.status","type":"keyword"},"memcache.response.status_code":{"category":"memcache","description":"The status code value returned in the response (binary protocol only). ","name":"memcache.response.status_code","type":"long"},"memcache.request.keys":{"category":"memcache","description":"The list of keys sent in the store or load commands. ","name":"memcache.request.keys","type":"array"},"memcache.response.keys":{"category":"memcache","description":"The list of keys returned for the load command (if present). ","name":"memcache.response.keys","type":"array"},"memcache.request.count_values":{"category":"memcache","description":"The number of values found in the memcache request message. If the command does not send any data, this field is missing. ","name":"memcache.request.count_values","type":"long"},"memcache.response.count_values":{"category":"memcache","description":"The number of values found in the memcache response message. If the command does not send any data, this field is missing. ","name":"memcache.response.count_values","type":"long"},"memcache.request.values":{"category":"memcache","description":"The list of base64 encoded values sent with the request (if present). ","name":"memcache.request.values","type":"array"},"memcache.response.values":{"category":"memcache","description":"The list of base64 encoded values sent with the response (if present). ","name":"memcache.response.values","type":"array"},"memcache.request.bytes":{"category":"memcache","description":"The byte count of the values being transferred. ","name":"memcache.request.bytes","type":"long","format":"bytes"},"memcache.response.bytes":{"category":"memcache","description":"The byte count of the values being transferred. ","name":"memcache.response.bytes","type":"long","format":"bytes"},"memcache.request.delta":{"category":"memcache","description":"The counter increment/decrement delta value. ","name":"memcache.request.delta","type":"long"},"memcache.request.initial":{"category":"memcache","description":"The counter increment/decrement initial value parameter (binary protocol only). ","name":"memcache.request.initial","type":"long"},"memcache.request.verbosity":{"category":"memcache","description":"The value of the memcache \"verbosity\" command. ","name":"memcache.request.verbosity","type":"long"},"memcache.request.raw_args":{"category":"memcache","description":"The text protocol raw arguments for the \"stats ...\" and \"lru crawl ...\" commands. ","name":"memcache.request.raw_args","type":"keyword"},"memcache.request.source_class":{"category":"memcache","description":"The source class id in 'slab reassign' command. ","name":"memcache.request.source_class","type":"long"},"memcache.request.dest_class":{"category":"memcache","description":"The destination class id in 'slab reassign' command. ","name":"memcache.request.dest_class","type":"long"},"memcache.request.automove":{"category":"memcache","description":"The automove mode in the 'slab automove' command expressed as a string. This value can be \"standby\"(=0), \"slow\"(=1), \"aggressive\"(=2), or the raw value if the value is unknown. ","name":"memcache.request.automove","type":"keyword"},"memcache.request.flags":{"category":"memcache","description":"The memcache command flags sent in the request (if present). ","name":"memcache.request.flags","type":"long"},"memcache.response.flags":{"category":"memcache","description":"The memcache message flags sent in the response (if present). ","name":"memcache.response.flags","type":"long"},"memcache.request.exptime":{"category":"memcache","description":"The data expiry time in seconds sent with the memcache command (if present). If the value is <30 days, the expiry time is relative to \"now\", or else it is an absolute Unix time in seconds (32-bit). ","name":"memcache.request.exptime","type":"long"},"memcache.request.sleep_us":{"category":"memcache","description":"The sleep setting in microseconds for the 'lru_crawler sleep' command. ","name":"memcache.request.sleep_us","type":"long"},"memcache.response.value":{"category":"memcache","description":"The counter value returned by a counter operation. ","name":"memcache.response.value","type":"long"},"memcache.request.noreply":{"category":"memcache","description":"Set to true if noreply was set in the request. The `memcache.response` field will be missing. ","name":"memcache.request.noreply","type":"boolean"},"memcache.request.quiet":{"category":"memcache","description":"Set to true if the binary protocol message is to be treated as a quiet message. ","name":"memcache.request.quiet","type":"boolean"},"memcache.request.cas_unique":{"category":"memcache","description":"The CAS (compare-and-swap) identifier if present. ","name":"memcache.request.cas_unique","type":"long"},"memcache.response.cas_unique":{"category":"memcache","description":"The CAS (compare-and-swap) identifier to be used with CAS-based updates (if present). ","name":"memcache.response.cas_unique","type":"long"},"memcache.response.stats":{"category":"memcache","description":"The list of statistic values returned. Each entry is a dictionary with the fields \"name\" and \"value\". ","name":"memcache.response.stats","type":"array"},"memcache.response.version":{"category":"memcache","description":"The returned memcache version string. ","name":"memcache.response.version","type":"keyword"},"mongodb.error":{"category":"mongodb","description":"If the MongoDB request has resulted in an error, this field contains the error message returned by the server. ","name":"mongodb.error"},"mongodb.fullCollectionName":{"category":"mongodb","description":"The full collection name. The full collection name is the concatenation of the database name with the collection name, using a dot (.) for the concatenation. For example, for the database foo and the collection bar, the full collection name is foo.bar. ","name":"mongodb.fullCollectionName"},"mongodb.numberToSkip":{"category":"mongodb","description":"Sets the number of documents to omit - starting from the first document in the resulting dataset - when returning the result of the query. ","name":"mongodb.numberToSkip","type":"long"},"mongodb.numberToReturn":{"category":"mongodb","description":"The requested maximum number of documents to be returned. ","name":"mongodb.numberToReturn","type":"long"},"mongodb.numberReturned":{"category":"mongodb","description":"The number of documents in the reply. ","name":"mongodb.numberReturned","type":"long"},"mongodb.startingFrom":{"category":"mongodb","description":"Where in the cursor this reply is starting. ","name":"mongodb.startingFrom"},"mongodb.query":{"category":"mongodb","description":"A JSON document that represents the query. The query will contain one or more elements, all of which must match for a document to be included in the result set. Possible elements include $query, $orderby, $hint, $explain, and $snapshot. ","name":"mongodb.query"},"mongodb.returnFieldsSelector":{"category":"mongodb","description":"A JSON document that limits the fields in the returned documents. The returnFieldsSelector contains one or more elements, each of which is the name of a field that should be returned, and the integer value 1. ","name":"mongodb.returnFieldsSelector"},"mongodb.selector":{"category":"mongodb","description":"A BSON document that specifies the query for selecting the document to update or delete. ","name":"mongodb.selector"},"mongodb.update":{"category":"mongodb","description":"A BSON document that specifies the update to be performed. For information on specifying updates, see the Update Operations documentation from the MongoDB Manual. ","name":"mongodb.update"},"mongodb.cursorId":{"category":"mongodb","description":"The cursor identifier returned in the OP_REPLY. This must be the value that was returned from the database. ","name":"mongodb.cursorId"},"mysql.affected_rows":{"category":"mysql","description":"If the MySQL command is successful, this field contains the affected number of rows of the last statement. ","name":"mysql.affected_rows","type":"long"},"mysql.insert_id":{"category":"mysql","description":"If the INSERT query is successful, this field contains the id of the newly inserted row. ","name":"mysql.insert_id"},"mysql.num_fields":{"category":"mysql","description":"If the SELECT query is successful, this field is set to the number of fields returned. ","name":"mysql.num_fields"},"mysql.num_rows":{"category":"mysql","description":"If the SELECT query is successful, this field is set to the number of rows returned. ","name":"mysql.num_rows"},"mysql.query":{"category":"mysql","description":"The row mysql query as read from the transaction's request. ","name":"mysql.query"},"mysql.error_code":{"category":"mysql","description":"The error code returned by MySQL. ","name":"mysql.error_code","type":"long"},"mysql.error_message":{"category":"mysql","description":"The error info message returned by MySQL. ","name":"mysql.error_message"},"nfs.version":{"category":"nfs","description":"NFS protocol version number.","name":"nfs.version","type":"long"},"nfs.minor_version":{"category":"nfs","description":"NFS protocol minor version number.","name":"nfs.minor_version","type":"long"},"nfs.tag":{"category":"nfs","description":"NFS v4 COMPOUND operation tag.","name":"nfs.tag"},"nfs.opcode":{"category":"nfs","description":"NFS operation name, or main operation name, in case of COMPOUND calls. ","name":"nfs.opcode"},"nfs.status":{"category":"nfs","description":"NFS operation reply status.","name":"nfs.status"},"rpc.xid":{"category":"rpc","description":"RPC message transaction identifier.","name":"rpc.xid"},"rpc.status":{"category":"rpc","description":"RPC message reply status.","name":"rpc.status"},"rpc.auth_flavor":{"category":"rpc","description":"RPC authentication flavor.","name":"rpc.auth_flavor"},"rpc.cred.uid":{"category":"rpc","description":"RPC caller's user id, in case of auth-unix.","name":"rpc.cred.uid","type":"long"},"rpc.cred.gid":{"category":"rpc","description":"RPC caller's group id, in case of auth-unix.","name":"rpc.cred.gid","type":"long"},"rpc.cred.gids":{"category":"rpc","description":"RPC caller's secondary group ids, in case of auth-unix.","name":"rpc.cred.gids"},"rpc.cred.stamp":{"category":"rpc","description":"Arbitrary ID which the caller machine may generate.","name":"rpc.cred.stamp","type":"long"},"rpc.cred.machinename":{"category":"rpc","description":"The name of the caller's machine.","name":"rpc.cred.machinename"},"rpc.call_size":{"category":"rpc","description":"RPC call size with argument.","name":"rpc.call_size","type":"alias"},"rpc.reply_size":{"category":"rpc","description":"RPC reply size with argument.","name":"rpc.reply_size","type":"alias"},"pgsql.error_code":{"category":"pgsql","description":"The PostgreSQL error code.","name":"pgsql.error_code","type":"long"},"pgsql.error_message":{"category":"pgsql","description":"The PostgreSQL error message.","name":"pgsql.error_message"},"pgsql.error_severity":{"category":"pgsql","description":"The PostgreSQL error severity.","name":"pgsql.error_severity"},"pgsql.num_fields":{"category":"pgsql","description":"If the SELECT query if successful, this field is set to the number of fields returned. ","name":"pgsql.num_fields"},"pgsql.num_rows":{"category":"pgsql","description":"If the SELECT query if successful, this field is set to the number of rows returned. ","name":"pgsql.num_rows"},"redis.return_value":{"category":"redis","description":"The return value of the Redis command in a human readable format. ","name":"redis.return_value"},"redis.error":{"category":"redis","description":"If the Redis command has resulted in an error, this field contains the error message returned by the Redis server. ","name":"redis.error"},"sip.code":{"category":"sip","description":"Response status code.","name":"sip.code","type":"keyword"},"sip.method":{"category":"sip","description":"Request method.","name":"sip.method","type":"keyword"},"sip.status":{"category":"sip","description":"Response status phrase.","name":"sip.status","type":"keyword"},"sip.type":{"category":"sip","description":"Either request or response.","name":"sip.type","type":"keyword"},"sip.version":{"category":"sip","description":"SIP protocol version.","name":"sip.version","type":"keyword"},"sip.uri.original":{"category":"sip","description":"The original URI.","name":"sip.uri.original","type":"keyword"},"sip.uri.scheme":{"category":"sip","description":"The URI scheme.","name":"sip.uri.scheme","type":"keyword"},"sip.uri.username":{"category":"sip","description":"The URI user name.","name":"sip.uri.username","type":"keyword"},"sip.uri.host":{"category":"sip","description":"The URI host.","name":"sip.uri.host","type":"keyword"},"sip.uri.port":{"category":"sip","description":"The URI port.","name":"sip.uri.port","type":"keyword"},"sip.accept":{"category":"sip","description":"Accept header value.","name":"sip.accept","type":"keyword"},"sip.allow":{"category":"sip","description":"Allowed methods.","name":"sip.allow","type":"keyword"},"sip.call_id":{"category":"sip","description":"Call ID.","name":"sip.call_id","type":"keyword"},"sip.content_length":{"category":"sip","name":"sip.content_length","type":"long"},"sip.content_type":{"category":"sip","name":"sip.content_type","type":"keyword"},"sip.max_forwards":{"category":"sip","name":"sip.max_forwards","type":"long"},"sip.supported":{"category":"sip","description":"Supported methods.","name":"sip.supported","type":"keyword"},"sip.user_agent.original":{"category":"sip","name":"sip.user_agent.original","type":"keyword"},"sip.private.uri.original":{"category":"sip","description":"Private original URI.","name":"sip.private.uri.original","type":"keyword"},"sip.private.uri.scheme":{"category":"sip","description":"Private URI scheme.","name":"sip.private.uri.scheme","type":"keyword"},"sip.private.uri.username":{"category":"sip","description":"Private URI user name.","name":"sip.private.uri.username","type":"keyword"},"sip.private.uri.host":{"category":"sip","description":"Private URI host.","name":"sip.private.uri.host","type":"keyword"},"sip.private.uri.port":{"category":"sip","description":"Private URI port.","name":"sip.private.uri.port","type":"keyword"},"sip.cseq.code":{"category":"sip","description":"Sequence code.","name":"sip.cseq.code","type":"keyword"},"sip.cseq.method":{"category":"sip","description":"Sequence method.","name":"sip.cseq.method","type":"keyword"},"sip.via.original":{"category":"sip","description":"The original Via value.","name":"sip.via.original","type":"keyword"},"sip.to.display_info":{"category":"sip","description":"To display info","name":"sip.to.display_info","type":"keyword"},"sip.to.uri.original":{"category":"sip","description":"To original URI","name":"sip.to.uri.original","type":"keyword"},"sip.to.uri.scheme":{"category":"sip","description":"To URI scheme","name":"sip.to.uri.scheme","type":"keyword"},"sip.to.uri.username":{"category":"sip","description":"To URI user name","name":"sip.to.uri.username","type":"keyword"},"sip.to.uri.host":{"category":"sip","description":"To URI host","name":"sip.to.uri.host","type":"keyword"},"sip.to.uri.port":{"category":"sip","description":"To URI port","name":"sip.to.uri.port","type":"keyword"},"sip.to.tag":{"category":"sip","description":"To tag","name":"sip.to.tag","type":"keyword"},"sip.from.display_info":{"category":"sip","description":"From display info","name":"sip.from.display_info","type":"keyword"},"sip.from.uri.original":{"category":"sip","description":"From original URI","name":"sip.from.uri.original","type":"keyword"},"sip.from.uri.scheme":{"category":"sip","description":"From URI scheme","name":"sip.from.uri.scheme","type":"keyword"},"sip.from.uri.username":{"category":"sip","description":"From URI user name","name":"sip.from.uri.username","type":"keyword"},"sip.from.uri.host":{"category":"sip","description":"From URI host","name":"sip.from.uri.host","type":"keyword"},"sip.from.uri.port":{"category":"sip","description":"From URI port","name":"sip.from.uri.port","type":"keyword"},"sip.from.tag":{"category":"sip","description":"From tag","name":"sip.from.tag","type":"keyword"},"sip.contact.display_info":{"category":"sip","description":"Contact display info","name":"sip.contact.display_info","type":"keyword"},"sip.contact.uri.original":{"category":"sip","description":"Contact original URI","name":"sip.contact.uri.original","type":"keyword"},"sip.contact.uri.scheme":{"category":"sip","description":"Contat URI scheme","name":"sip.contact.uri.scheme","type":"keyword"},"sip.contact.uri.username":{"category":"sip","description":"Contact URI user name","name":"sip.contact.uri.username","type":"keyword"},"sip.contact.uri.host":{"category":"sip","description":"Contact URI host","name":"sip.contact.uri.host","type":"keyword"},"sip.contact.uri.port":{"category":"sip","description":"Contact URI port","name":"sip.contact.uri.port","type":"keyword"},"sip.contact.transport":{"category":"sip","description":"Contact transport","name":"sip.contact.transport","type":"keyword"},"sip.contact.line":{"category":"sip","description":"Contact line","name":"sip.contact.line","type":"keyword"},"sip.contact.expires":{"category":"sip","description":"Contact expires","name":"sip.contact.expires","type":"keyword"},"sip.contact.q":{"category":"sip","description":"Contact Q","name":"sip.contact.q","type":"keyword"},"sip.auth.scheme":{"category":"sip","description":"Auth scheme","name":"sip.auth.scheme","type":"keyword"},"sip.auth.realm":{"category":"sip","description":"Auth realm","name":"sip.auth.realm","type":"keyword"},"sip.auth.uri.original":{"category":"sip","description":"Auth original URI","name":"sip.auth.uri.original","type":"keyword"},"sip.auth.uri.scheme":{"category":"sip","description":"Auth URI scheme","name":"sip.auth.uri.scheme","type":"keyword"},"sip.auth.uri.host":{"category":"sip","description":"Auth URI host","name":"sip.auth.uri.host","type":"keyword"},"sip.auth.uri.port":{"category":"sip","description":"Auth URI port","name":"sip.auth.uri.port","type":"keyword"},"sip.sdp.version":{"category":"sip","description":"SDP version","name":"sip.sdp.version","type":"keyword"},"sip.sdp.owner.username":{"category":"sip","description":"SDP owner user name","name":"sip.sdp.owner.username","type":"keyword"},"sip.sdp.owner.session_id":{"category":"sip","description":"SDP owner session ID","name":"sip.sdp.owner.session_id","type":"keyword"},"sip.sdp.owner.version":{"category":"sip","description":"SDP owner version","name":"sip.sdp.owner.version","type":"keyword"},"sip.sdp.owner.ip":{"category":"sip","description":"SDP owner IP","name":"sip.sdp.owner.ip","type":"ip"},"sip.sdp.session.name":{"category":"sip","description":"SDP session name","name":"sip.sdp.session.name","type":"keyword"},"sip.sdp.connection.info":{"category":"sip","description":"SDP connection info","name":"sip.sdp.connection.info","type":"keyword"},"sip.sdp.connection.address":{"category":"sip","description":"SDP connection address","name":"sip.sdp.connection.address","type":"keyword"},"sip.sdp.body.original":{"category":"sip","description":"SDP original body","name":"sip.sdp.body.original","type":"keyword"},"thrift.params":{"category":"thrift","description":"The RPC method call parameters in a human readable format. If the IDL files are available, the parameters use names whenever possible. Otherwise, the IDs from the message are used. ","name":"thrift.params"},"thrift.service":{"category":"thrift","description":"The name of the Thrift-RPC service as defined in the IDL files. ","name":"thrift.service"},"thrift.return_value":{"category":"thrift","description":"The value returned by the Thrift-RPC call. This is encoded in a human readable format. ","name":"thrift.return_value"},"thrift.exceptions":{"category":"thrift","description":"If the call resulted in exceptions, this field contains the exceptions in a human readable format. ","name":"thrift.exceptions"},"tls.client.x509.version":{"category":"tls","description":"Version of x509 format.","example":3,"name":"tls.client.x509.version","type":"keyword"},"tls.client.x509.issuer.province":{"category":"tls","description":"Province or region within country.","name":"tls.client.x509.issuer.province","type":"keyword"},"tls.client.x509.subject.province":{"category":"tls","description":"Province or region within country.","name":"tls.client.x509.subject.province","type":"keyword"},"tls.server.x509.version":{"category":"tls","description":"Version of x509 format.","example":3,"name":"tls.server.x509.version","type":"keyword"},"tls.server.x509.issuer.province":{"category":"tls","description":"Province or region within country.","name":"tls.server.x509.issuer.province","type":"keyword"},"tls.server.x509.subject.province":{"category":"tls","description":"Province or region within country.","name":"tls.server.x509.subject.province","type":"keyword"},"tls.detailed.version":{"category":"tls","description":"The version of the TLS protocol used. ","example":"TLS 1.3","name":"tls.detailed.version","type":"keyword"},"tls.detailed.resumption_method":{"category":"tls","description":"If the session has been resumed, the underlying method used. One of \"id\" for TLS session ID or \"ticket\" for TLS ticket extension. ","name":"tls.detailed.resumption_method","type":"keyword"},"tls.detailed.client_certificate_requested":{"category":"tls","description":"Whether the server has requested the client to authenticate itself using a client certificate. ","name":"tls.detailed.client_certificate_requested","type":"boolean"},"tls.detailed.client_hello.version":{"category":"tls","description":"The version of the TLS protocol by which the client wishes to communicate during this session. ","name":"tls.detailed.client_hello.version","type":"keyword"},"tls.detailed.client_hello.session_id":{"category":"tls","description":"Unique number to identify the session for the corresponding connection with the client. ","name":"tls.detailed.client_hello.session_id","type":"keyword"},"tls.detailed.client_hello.supported_compression_methods":{"category":"tls","description":"The list of compression methods the client supports. See https://www.iana.org/assignments/comp-meth-ids/comp-meth-ids.xhtml ","name":"tls.detailed.client_hello.supported_compression_methods","type":"keyword"},"tls.detailed.client_hello.extensions.server_name_indication":{"category":"tls","description":"List of hostnames","name":"tls.detailed.client_hello.extensions.server_name_indication","type":"keyword"},"tls.detailed.client_hello.extensions.application_layer_protocol_negotiation":{"category":"tls","description":"List of application-layer protocols the client is willing to use. ","name":"tls.detailed.client_hello.extensions.application_layer_protocol_negotiation","type":"keyword"},"tls.detailed.client_hello.extensions.session_ticket":{"category":"tls","description":"Length of the session ticket, if provided, or an empty string to advertise support for tickets. ","name":"tls.detailed.client_hello.extensions.session_ticket","type":"keyword"},"tls.detailed.client_hello.extensions.supported_versions":{"category":"tls","description":"List of TLS versions that the client is willing to use. ","name":"tls.detailed.client_hello.extensions.supported_versions","type":"keyword"},"tls.detailed.client_hello.extensions.supported_groups":{"category":"tls","description":"List of Elliptic Curve Cryptography (ECC) curve groups supported by the client. ","name":"tls.detailed.client_hello.extensions.supported_groups","type":"keyword"},"tls.detailed.client_hello.extensions.signature_algorithms":{"category":"tls","description":"List of signature algorithms that may be use in digital signatures. ","name":"tls.detailed.client_hello.extensions.signature_algorithms","type":"keyword"},"tls.detailed.client_hello.extensions.ec_points_formats":{"category":"tls","description":"List of Elliptic Curve (EC) point formats. Indicates the set of point formats that the client can parse. ","name":"tls.detailed.client_hello.extensions.ec_points_formats","type":"keyword"},"tls.detailed.client_hello.extensions._unparsed_":{"category":"tls","description":"List of extensions that were left unparsed by Packetbeat. ","name":"tls.detailed.client_hello.extensions._unparsed_","type":"keyword"},"tls.detailed.server_hello.version":{"category":"tls","description":"The version of the TLS protocol that is used for this session. It is the highest version supported by the server not exceeding the version requested in the client hello. ","name":"tls.detailed.server_hello.version","type":"keyword"},"tls.detailed.server_hello.selected_compression_method":{"category":"tls","description":"The compression method selected by the server from the list provided in the client hello. ","name":"tls.detailed.server_hello.selected_compression_method","type":"keyword"},"tls.detailed.server_hello.session_id":{"category":"tls","description":"Unique number to identify the session for the corresponding connection with the client. ","name":"tls.detailed.server_hello.session_id","type":"keyword"},"tls.detailed.server_hello.extensions.application_layer_protocol_negotiation":{"category":"tls","description":"Negotiated application layer protocol","name":"tls.detailed.server_hello.extensions.application_layer_protocol_negotiation","type":"keyword"},"tls.detailed.server_hello.extensions.session_ticket":{"category":"tls","description":"Used to announce that a session ticket will be provided by the server. Always an empty string. ","name":"tls.detailed.server_hello.extensions.session_ticket","type":"keyword"},"tls.detailed.server_hello.extensions.supported_versions":{"category":"tls","description":"Negotiated TLS version to be used. ","name":"tls.detailed.server_hello.extensions.supported_versions","type":"keyword"},"tls.detailed.server_hello.extensions.ec_points_formats":{"category":"tls","description":"List of Elliptic Curve (EC) point formats. Indicates the set of point formats that the server can parse. ","name":"tls.detailed.server_hello.extensions.ec_points_formats","type":"keyword"},"tls.detailed.server_hello.extensions._unparsed_":{"category":"tls","description":"List of extensions that were left unparsed by Packetbeat. ","name":"tls.detailed.server_hello.extensions._unparsed_","type":"keyword"},"tls.detailed.server_certificate_chain":{"category":"tls","description":"Chain of trust for the server certificate.","name":"tls.detailed.server_certificate_chain","type":"array"},"tls.detailed.client_certificate_chain":{"category":"tls","description":"Chain of trust for the client certificate.","name":"tls.detailed.client_certificate_chain","type":"array"},"tls.detailed.alert_types":{"category":"tls","description":"An array containing the TLS alert type for every alert received. ","name":"tls.detailed.alert_types","type":"keyword"},"winlog.api":{"category":"winlog","description":"The event log API type used to read the record. The possible values are \"wineventlog\" for the Windows Event Log API or \"wineventlog-experimental\" for its experimental implementation. ","name":"winlog.api"},"winlog.activity_id":{"category":"winlog","description":"A globally unique identifier that identifies the current activity. The events that are published with this identifier are part of the same activity. ","name":"winlog.activity_id","type":"keyword"},"winlog.computer_name":{"category":"winlog","description":"The name of the computer that generated the record. When using Windows event forwarding, this name can differ from `agent.hostname`. ","name":"winlog.computer_name","type":"keyword"},"winlog.event_data":{"category":"winlog","description":"The event-specific data. This field is mutually exclusive with `user_data`. If you are capturing event data on versions prior to Windows Vista, the parameters in `event_data` are named `param1`, `param2`, and so on, because event log parameters are unnamed in earlier versions of Windows. ","name":"winlog.event_data","type":"object"},"winlog.event_data.AuthenticationPackageName":{"category":"winlog","name":"winlog.event_data.AuthenticationPackageName","type":"keyword"},"winlog.event_data.Binary":{"category":"winlog","name":"winlog.event_data.Binary","type":"keyword"},"winlog.event_data.BitlockerUserInputTime":{"category":"winlog","name":"winlog.event_data.BitlockerUserInputTime","type":"keyword"},"winlog.event_data.BootMode":{"category":"winlog","name":"winlog.event_data.BootMode","type":"keyword"},"winlog.event_data.BootType":{"category":"winlog","name":"winlog.event_data.BootType","type":"keyword"},"winlog.event_data.BuildVersion":{"category":"winlog","name":"winlog.event_data.BuildVersion","type":"keyword"},"winlog.event_data.Company":{"category":"winlog","name":"winlog.event_data.Company","type":"keyword"},"winlog.event_data.CorruptionActionState":{"category":"winlog","name":"winlog.event_data.CorruptionActionState","type":"keyword"},"winlog.event_data.CreationUtcTime":{"category":"winlog","name":"winlog.event_data.CreationUtcTime","type":"keyword"},"winlog.event_data.Description":{"category":"winlog","name":"winlog.event_data.Description","type":"keyword"},"winlog.event_data.Detail":{"category":"winlog","name":"winlog.event_data.Detail","type":"keyword"},"winlog.event_data.DeviceName":{"category":"winlog","name":"winlog.event_data.DeviceName","type":"keyword"},"winlog.event_data.DeviceNameLength":{"category":"winlog","name":"winlog.event_data.DeviceNameLength","type":"keyword"},"winlog.event_data.DeviceTime":{"category":"winlog","name":"winlog.event_data.DeviceTime","type":"keyword"},"winlog.event_data.DeviceVersionMajor":{"category":"winlog","name":"winlog.event_data.DeviceVersionMajor","type":"keyword"},"winlog.event_data.DeviceVersionMinor":{"category":"winlog","name":"winlog.event_data.DeviceVersionMinor","type":"keyword"},"winlog.event_data.DriveName":{"category":"winlog","name":"winlog.event_data.DriveName","type":"keyword"},"winlog.event_data.DriverName":{"category":"winlog","name":"winlog.event_data.DriverName","type":"keyword"},"winlog.event_data.DriverNameLength":{"category":"winlog","name":"winlog.event_data.DriverNameLength","type":"keyword"},"winlog.event_data.DwordVal":{"category":"winlog","name":"winlog.event_data.DwordVal","type":"keyword"},"winlog.event_data.EntryCount":{"category":"winlog","name":"winlog.event_data.EntryCount","type":"keyword"},"winlog.event_data.ExtraInfo":{"category":"winlog","name":"winlog.event_data.ExtraInfo","type":"keyword"},"winlog.event_data.FailureName":{"category":"winlog","name":"winlog.event_data.FailureName","type":"keyword"},"winlog.event_data.FailureNameLength":{"category":"winlog","name":"winlog.event_data.FailureNameLength","type":"keyword"},"winlog.event_data.FileVersion":{"category":"winlog","name":"winlog.event_data.FileVersion","type":"keyword"},"winlog.event_data.FinalStatus":{"category":"winlog","name":"winlog.event_data.FinalStatus","type":"keyword"},"winlog.event_data.Group":{"category":"winlog","name":"winlog.event_data.Group","type":"keyword"},"winlog.event_data.IdleImplementation":{"category":"winlog","name":"winlog.event_data.IdleImplementation","type":"keyword"},"winlog.event_data.IdleStateCount":{"category":"winlog","name":"winlog.event_data.IdleStateCount","type":"keyword"},"winlog.event_data.ImpersonationLevel":{"category":"winlog","name":"winlog.event_data.ImpersonationLevel","type":"keyword"},"winlog.event_data.IntegrityLevel":{"category":"winlog","name":"winlog.event_data.IntegrityLevel","type":"keyword"},"winlog.event_data.IpAddress":{"category":"winlog","name":"winlog.event_data.IpAddress","type":"keyword"},"winlog.event_data.IpPort":{"category":"winlog","name":"winlog.event_data.IpPort","type":"keyword"},"winlog.event_data.KeyLength":{"category":"winlog","name":"winlog.event_data.KeyLength","type":"keyword"},"winlog.event_data.LastBootGood":{"category":"winlog","name":"winlog.event_data.LastBootGood","type":"keyword"},"winlog.event_data.LastShutdownGood":{"category":"winlog","name":"winlog.event_data.LastShutdownGood","type":"keyword"},"winlog.event_data.LmPackageName":{"category":"winlog","name":"winlog.event_data.LmPackageName","type":"keyword"},"winlog.event_data.LogonGuid":{"category":"winlog","name":"winlog.event_data.LogonGuid","type":"keyword"},"winlog.event_data.LogonId":{"category":"winlog","name":"winlog.event_data.LogonId","type":"keyword"},"winlog.event_data.LogonProcessName":{"category":"winlog","name":"winlog.event_data.LogonProcessName","type":"keyword"},"winlog.event_data.LogonType":{"category":"winlog","name":"winlog.event_data.LogonType","type":"keyword"},"winlog.event_data.MajorVersion":{"category":"winlog","name":"winlog.event_data.MajorVersion","type":"keyword"},"winlog.event_data.MaximumPerformancePercent":{"category":"winlog","name":"winlog.event_data.MaximumPerformancePercent","type":"keyword"},"winlog.event_data.MemberName":{"category":"winlog","name":"winlog.event_data.MemberName","type":"keyword"},"winlog.event_data.MemberSid":{"category":"winlog","name":"winlog.event_data.MemberSid","type":"keyword"},"winlog.event_data.MinimumPerformancePercent":{"category":"winlog","name":"winlog.event_data.MinimumPerformancePercent","type":"keyword"},"winlog.event_data.MinimumThrottlePercent":{"category":"winlog","name":"winlog.event_data.MinimumThrottlePercent","type":"keyword"},"winlog.event_data.MinorVersion":{"category":"winlog","name":"winlog.event_data.MinorVersion","type":"keyword"},"winlog.event_data.NewProcessId":{"category":"winlog","name":"winlog.event_data.NewProcessId","type":"keyword"},"winlog.event_data.NewProcessName":{"category":"winlog","name":"winlog.event_data.NewProcessName","type":"keyword"},"winlog.event_data.NewSchemeGuid":{"category":"winlog","name":"winlog.event_data.NewSchemeGuid","type":"keyword"},"winlog.event_data.NewTime":{"category":"winlog","name":"winlog.event_data.NewTime","type":"keyword"},"winlog.event_data.NominalFrequency":{"category":"winlog","name":"winlog.event_data.NominalFrequency","type":"keyword"},"winlog.event_data.Number":{"category":"winlog","name":"winlog.event_data.Number","type":"keyword"},"winlog.event_data.OldSchemeGuid":{"category":"winlog","name":"winlog.event_data.OldSchemeGuid","type":"keyword"},"winlog.event_data.OldTime":{"category":"winlog","name":"winlog.event_data.OldTime","type":"keyword"},"winlog.event_data.OriginalFileName":{"category":"winlog","name":"winlog.event_data.OriginalFileName","type":"keyword"},"winlog.event_data.Path":{"category":"winlog","name":"winlog.event_data.Path","type":"keyword"},"winlog.event_data.PerformanceImplementation":{"category":"winlog","name":"winlog.event_data.PerformanceImplementation","type":"keyword"},"winlog.event_data.PreviousCreationUtcTime":{"category":"winlog","name":"winlog.event_data.PreviousCreationUtcTime","type":"keyword"},"winlog.event_data.PreviousTime":{"category":"winlog","name":"winlog.event_data.PreviousTime","type":"keyword"},"winlog.event_data.PrivilegeList":{"category":"winlog","name":"winlog.event_data.PrivilegeList","type":"keyword"},"winlog.event_data.ProcessId":{"category":"winlog","name":"winlog.event_data.ProcessId","type":"keyword"},"winlog.event_data.ProcessName":{"category":"winlog","name":"winlog.event_data.ProcessName","type":"keyword"},"winlog.event_data.ProcessPath":{"category":"winlog","name":"winlog.event_data.ProcessPath","type":"keyword"},"winlog.event_data.ProcessPid":{"category":"winlog","name":"winlog.event_data.ProcessPid","type":"keyword"},"winlog.event_data.Product":{"category":"winlog","name":"winlog.event_data.Product","type":"keyword"},"winlog.event_data.PuaCount":{"category":"winlog","name":"winlog.event_data.PuaCount","type":"keyword"},"winlog.event_data.PuaPolicyId":{"category":"winlog","name":"winlog.event_data.PuaPolicyId","type":"keyword"},"winlog.event_data.QfeVersion":{"category":"winlog","name":"winlog.event_data.QfeVersion","type":"keyword"},"winlog.event_data.Reason":{"category":"winlog","name":"winlog.event_data.Reason","type":"keyword"},"winlog.event_data.SchemaVersion":{"category":"winlog","name":"winlog.event_data.SchemaVersion","type":"keyword"},"winlog.event_data.ScriptBlockText":{"category":"winlog","name":"winlog.event_data.ScriptBlockText","type":"keyword"},"winlog.event_data.ServiceName":{"category":"winlog","name":"winlog.event_data.ServiceName","type":"keyword"},"winlog.event_data.ServiceVersion":{"category":"winlog","name":"winlog.event_data.ServiceVersion","type":"keyword"},"winlog.event_data.ShutdownActionType":{"category":"winlog","name":"winlog.event_data.ShutdownActionType","type":"keyword"},"winlog.event_data.ShutdownEventCode":{"category":"winlog","name":"winlog.event_data.ShutdownEventCode","type":"keyword"},"winlog.event_data.ShutdownReason":{"category":"winlog","name":"winlog.event_data.ShutdownReason","type":"keyword"},"winlog.event_data.Signature":{"category":"winlog","name":"winlog.event_data.Signature","type":"keyword"},"winlog.event_data.SignatureStatus":{"category":"winlog","name":"winlog.event_data.SignatureStatus","type":"keyword"},"winlog.event_data.Signed":{"category":"winlog","name":"winlog.event_data.Signed","type":"keyword"},"winlog.event_data.StartTime":{"category":"winlog","name":"winlog.event_data.StartTime","type":"keyword"},"winlog.event_data.State":{"category":"winlog","name":"winlog.event_data.State","type":"keyword"},"winlog.event_data.Status":{"category":"winlog","name":"winlog.event_data.Status","type":"keyword"},"winlog.event_data.StopTime":{"category":"winlog","name":"winlog.event_data.StopTime","type":"keyword"},"winlog.event_data.SubjectDomainName":{"category":"winlog","name":"winlog.event_data.SubjectDomainName","type":"keyword"},"winlog.event_data.SubjectLogonId":{"category":"winlog","name":"winlog.event_data.SubjectLogonId","type":"keyword"},"winlog.event_data.SubjectUserName":{"category":"winlog","name":"winlog.event_data.SubjectUserName","type":"keyword"},"winlog.event_data.SubjectUserSid":{"category":"winlog","name":"winlog.event_data.SubjectUserSid","type":"keyword"},"winlog.event_data.TSId":{"category":"winlog","name":"winlog.event_data.TSId","type":"keyword"},"winlog.event_data.TargetDomainName":{"category":"winlog","name":"winlog.event_data.TargetDomainName","type":"keyword"},"winlog.event_data.TargetInfo":{"category":"winlog","name":"winlog.event_data.TargetInfo","type":"keyword"},"winlog.event_data.TargetLogonGuid":{"category":"winlog","name":"winlog.event_data.TargetLogonGuid","type":"keyword"},"winlog.event_data.TargetLogonId":{"category":"winlog","name":"winlog.event_data.TargetLogonId","type":"keyword"},"winlog.event_data.TargetServerName":{"category":"winlog","name":"winlog.event_data.TargetServerName","type":"keyword"},"winlog.event_data.TargetUserName":{"category":"winlog","name":"winlog.event_data.TargetUserName","type":"keyword"},"winlog.event_data.TargetUserSid":{"category":"winlog","name":"winlog.event_data.TargetUserSid","type":"keyword"},"winlog.event_data.TerminalSessionId":{"category":"winlog","name":"winlog.event_data.TerminalSessionId","type":"keyword"},"winlog.event_data.TokenElevationType":{"category":"winlog","name":"winlog.event_data.TokenElevationType","type":"keyword"},"winlog.event_data.TransmittedServices":{"category":"winlog","name":"winlog.event_data.TransmittedServices","type":"keyword"},"winlog.event_data.UserSid":{"category":"winlog","name":"winlog.event_data.UserSid","type":"keyword"},"winlog.event_data.Version":{"category":"winlog","name":"winlog.event_data.Version","type":"keyword"},"winlog.event_data.Workstation":{"category":"winlog","name":"winlog.event_data.Workstation","type":"keyword"},"winlog.event_data.param1":{"category":"winlog","name":"winlog.event_data.param1","type":"keyword"},"winlog.event_data.param2":{"category":"winlog","name":"winlog.event_data.param2","type":"keyword"},"winlog.event_data.param3":{"category":"winlog","name":"winlog.event_data.param3","type":"keyword"},"winlog.event_data.param4":{"category":"winlog","name":"winlog.event_data.param4","type":"keyword"},"winlog.event_data.param5":{"category":"winlog","name":"winlog.event_data.param5","type":"keyword"},"winlog.event_data.param6":{"category":"winlog","name":"winlog.event_data.param6","type":"keyword"},"winlog.event_data.param7":{"category":"winlog","name":"winlog.event_data.param7","type":"keyword"},"winlog.event_data.param8":{"category":"winlog","name":"winlog.event_data.param8","type":"keyword"},"winlog.event_id":{"category":"winlog","description":"The event identifier. The value is specific to the source of the event. ","name":"winlog.event_id","type":"keyword"},"winlog.keywords":{"category":"winlog","description":"The keywords are used to classify an event. ","name":"winlog.keywords","type":"keyword"},"winlog.channel":{"category":"winlog","description":"The name of the channel from which this record was read. This value is one of the names from the `event_logs` collection in the configuration. ","name":"winlog.channel","type":"keyword"},"winlog.record_id":{"category":"winlog","description":"The record ID of the event log record. The first record written to an event log is record number 1, and other records are numbered sequentially. If the record number reaches the maximum value (2^32^ for the Event Logging API and 2^64^ for the Windows Event Log API), the next record number will be 0. ","name":"winlog.record_id","type":"keyword"},"winlog.related_activity_id":{"category":"winlog","description":"A globally unique identifier that identifies the activity to which control was transferred to. The related events would then have this identifier as their `activity_id` identifier. ","name":"winlog.related_activity_id","type":"keyword"},"winlog.opcode":{"category":"winlog","description":"The opcode defined in the event. Task and opcode are typically used to identify the location in the application from where the event was logged. ","name":"winlog.opcode","type":"keyword"},"winlog.provider_guid":{"category":"winlog","description":"A globally unique identifier that identifies the provider that logged the event. ","name":"winlog.provider_guid","type":"keyword"},"winlog.process.pid":{"category":"winlog","description":"The process_id of the Client Server Runtime Process. ","name":"winlog.process.pid","type":"long"},"winlog.provider_name":{"category":"winlog","description":"The source of the event log record (the application or service that logged the record). ","name":"winlog.provider_name","type":"keyword"},"winlog.task":{"category":"winlog","description":"The task defined in the event. Task and opcode are typically used to identify the location in the application from where the event was logged. The category used by the Event Logging API (on pre Windows Vista operating systems) is written to this field. ","name":"winlog.task","type":"keyword"},"winlog.time_created":{"category":"winlog","description":"The event creation time. ","name":"winlog.time_created","type":"date"},"winlog.process.thread.id":{"category":"winlog","name":"winlog.process.thread.id","type":"long"},"winlog.user_data":{"category":"winlog","description":"The event specific data. This field is mutually exclusive with `event_data`. ","name":"winlog.user_data","type":"object"},"winlog.user.identifier":{"category":"winlog","description":"The Windows security identifier (SID) of the account associated with this event. If Winlogbeat cannot resolve the SID to a name, then the `user.name`, `user.domain`, and `user.type` fields will be omitted from the event. If you discover Winlogbeat not resolving SIDs, review the log for clues as to what the problem may be. ","example":"S-1-5-21-3541430928-2051711210-1391384369-1001","name":"winlog.user.identifier","type":"keyword"},"winlog.user.name":{"category":"winlog","description":"Name of the user associated with this event. ","name":"winlog.user.name","type":"keyword"},"winlog.user.domain":{"category":"winlog","description":"The domain that the account associated with this event is a member of. ","name":"winlog.user.domain","type":"keyword"},"winlog.user.type":{"category":"winlog","description":"The type of account associated with this event. ","name":"winlog.user.type","type":"keyword"},"winlog.version":{"category":"winlog","description":"The version number of the event's definition.","name":"winlog.version","type":"long"},"activity_id":{"category":"base","name":"activity_id","type":"alias"},"computer_name":{"category":"base","name":"computer_name","type":"alias"},"event_id":{"category":"base","name":"event_id","type":"alias"},"keywords":{"category":"base","name":"keywords","type":"alias"},"log_name":{"category":"base","name":"log_name","type":"alias"},"message_error":{"category":"base","name":"message_error","type":"alias"},"record_number":{"category":"base","name":"record_number","type":"alias"},"related_activity_id":{"category":"base","name":"related_activity_id","type":"alias"},"opcode":{"category":"base","name":"opcode","type":"alias"},"provider_guid":{"category":"base","name":"provider_guid","type":"alias"},"process_id":{"category":"base","name":"process_id","type":"alias"},"source_name":{"category":"base","name":"source_name","type":"alias"},"task":{"category":"base","name":"task","type":"alias"},"thread_id":{"category":"base","name":"thread_id","type":"alias"},"user.identifier":{"category":"user","name":"user.identifier","type":"alias"},"user.type":{"category":"user","name":"user.type","type":"alias"},"version":{"category":"base","name":"version","type":"alias"},"xml":{"category":"base","name":"xml","type":"alias"},"powershell.id":{"category":"powershell","description":"Shell Id.","example":"Microsoft Powershell","name":"powershell.id","type":"keyword"},"powershell.pipeline_id":{"category":"powershell","description":"Pipeline id.","example":"1","name":"powershell.pipeline_id","type":"keyword"},"powershell.runspace_id":{"category":"powershell","description":"Runspace id.","example":"4fa9074d-45ab-4e53-9195-e91981ac2bbb","name":"powershell.runspace_id","type":"keyword"},"powershell.sequence":{"category":"powershell","description":"Sequence number of the powershell execution.","example":1,"name":"powershell.sequence","type":"long"},"powershell.total":{"category":"powershell","description":"Total number of messages in the sequence.","example":10,"name":"powershell.total","type":"long"},"powershell.command.path":{"category":"powershell","description":"Path of the executed command.","example":"C:\\Windows\\system32\\cmd.exe","name":"powershell.command.path","type":"keyword"},"powershell.command.name":{"category":"powershell","description":"Name of the executed command.","example":"cmd.exe","name":"powershell.command.name","type":"keyword"},"powershell.command.type":{"category":"powershell","description":"Type of the executed command.","example":"Application","name":"powershell.command.type","type":"keyword"},"powershell.command.value":{"category":"powershell","description":"The invoked command.","example":"Import-LocalizedData LocalizedData -filename ArchiveResources","name":"powershell.command.value","type":"text"},"powershell.command.invocation_details":{"category":"powershell","description":"An array of objects containing detailed information of the executed command. ","name":"powershell.command.invocation_details","type":"array"},"powershell.command.invocation_details.type":{"category":"powershell","description":"The type of detail.","example":"CommandInvocation","name":"powershell.command.invocation_details.type","type":"keyword"},"powershell.command.invocation_details.related_command":{"category":"powershell","description":"The command to which the detail is related to.","example":"Add-Type","name":"powershell.command.invocation_details.related_command","type":"keyword"},"powershell.command.invocation_details.name":{"category":"powershell","description":"Only used for ParameterBinding detail type. Indicates the parameter name. ","example":"AssemblyName","name":"powershell.command.invocation_details.name","type":"keyword"},"powershell.command.invocation_details.value":{"category":"powershell","description":"The value of the detail. The meaning of it will depend on the detail type. ","example":"System.IO.Compression.FileSystem","name":"powershell.command.invocation_details.value","type":"text"},"powershell.connected_user.domain":{"category":"powershell","description":"User domain.","example":"VAGRANT","name":"powershell.connected_user.domain","type":"keyword"},"powershell.connected_user.name":{"category":"powershell","description":"User name.","example":"vagrant","name":"powershell.connected_user.name","type":"keyword"},"powershell.engine.version":{"category":"powershell","description":"Version of the PowerShell engine version used to execute the command.","example":"5.1.17763.1007","name":"powershell.engine.version","type":"keyword"},"powershell.engine.previous_state":{"category":"powershell","description":"Previous state of the PowerShell engine. ","example":"Available","name":"powershell.engine.previous_state","type":"keyword"},"powershell.engine.new_state":{"category":"powershell","description":"New state of the PowerShell engine. ","example":"Stopped","name":"powershell.engine.new_state","type":"keyword"},"powershell.file.script_block_id":{"category":"powershell","description":"Id of the executed script block.","example":"50d2dbda-7361-4926-a94d-d9eadfdb43fa","name":"powershell.file.script_block_id","type":"keyword"},"powershell.file.script_block_text":{"category":"powershell","description":"Text of the executed script block. ","example":".\\a_script.ps1","name":"powershell.file.script_block_text","type":"text"},"powershell.process.executable_version":{"category":"powershell","description":"Version of the engine hosting process executable.","example":"5.1.17763.1007","name":"powershell.process.executable_version","type":"keyword"},"powershell.provider.new_state":{"category":"powershell","description":"New state of the PowerShell provider. ","example":"Active","name":"powershell.provider.new_state","type":"keyword"},"powershell.provider.name":{"category":"powershell","description":"Provider name. ","example":"Variable","name":"powershell.provider.name","type":"keyword"},"winlog.logon.type":{"category":"winlog","description":"Logon type name. This is the descriptive version of the `winlog.event_data.LogonType` ordinal. This is an enrichment added by the Security module. ","example":"RemoteInteractive","name":"winlog.logon.type","type":"keyword"},"winlog.logon.id":{"category":"winlog","description":"Logon ID that can be used to associate this logon with other events related to the same logon session. ","name":"winlog.logon.id","type":"keyword"},"winlog.logon.failure.reason":{"category":"winlog","description":"The reason the logon failed. ","name":"winlog.logon.failure.reason","type":"keyword"},"winlog.logon.failure.status":{"category":"winlog","description":"The reason the logon failed. This is textual description based on the value of the hexadecimal `Status` field. ","name":"winlog.logon.failure.status","type":"keyword"},"winlog.logon.failure.sub_status":{"category":"winlog","description":"Additional information about the logon failure. This is a textual description based on the value of the hexidecimal `SubStatus` field. ","name":"winlog.logon.failure.sub_status","type":"keyword"},"sysmon.dns.status":{"category":"sysmon","description":"Windows status code returned for the DNS query.","name":"sysmon.dns.status","type":"keyword"},"sysmon.file.archived":{"category":"sysmon","description":"Indicates if the deleted file was archived.","name":"sysmon.file.archived","type":"boolean"},"sysmon.file.is_executable":{"category":"sysmon","description":"Indicates if the deleted file was an executable.","name":"sysmon.file.is_executable","type":"boolean"}}} \ No newline at end of file diff --git a/x-pack/plugins/timelines/server/utils/beat_schema/fields.json.d.ts b/x-pack/plugins/timelines/server/utils/beat_schema/fields.json.d.ts new file mode 100644 index 0000000000000..26b116551b371 --- /dev/null +++ b/x-pack/plugins/timelines/server/utils/beat_schema/fields.json.d.ts @@ -0,0 +1,10 @@ +/* + * 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 { BeatFields } from '../../../common/search_strategy/index_fields'; + +export const fieldsBeat: BeatFields; diff --git a/x-pack/plugins/timelines/server/utils/beat_schema/fields.ts b/x-pack/plugins/timelines/server/utils/beat_schema/fields.ts deleted file mode 100644 index 55bb4fbabad09..0000000000000 --- a/x-pack/plugins/timelines/server/utils/beat_schema/fields.ts +++ /dev/null @@ -1,49317 +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 { BeatFields } from '../../../common/search_strategy/index_fields'; - -export const fieldsBeat: BeatFields = { - _id: { - category: 'base', - description: 'Each document has an _id that uniquely identifies it', - example: 'Y-6TfmcB0WOhS6qyMv3s', - name: '_id', - type: 'keyword', - }, - _index: { - category: 'base', - description: - 'An index is like a ‘database’ in a relational database. It has a mapping which defines multiple types. An index is a logical namespace which maps to one or more primary shards and can have zero or more replica shards.', - example: 'auditbeat-8.0.0-2019.02.19-000001', - name: '_index', - type: 'keyword', - }, - '@timestamp': { - category: 'base', - description: - 'Date/time when the event originated. This is the date/time extracted from the event, typically representing when the event was generated by the source. If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. Required field for all events.', - example: '2016-05-23T08:05:34.853Z', - name: '@timestamp', - type: 'date', - }, - labels: { - category: 'base', - description: - 'Custom key/value pairs. Can be used to add meta information to events. Should not contain nested objects. All values are stored as keyword. Example: `docker` and `k8s` labels.', - example: '{"application": "foo-bar", "env": "production"}', - name: 'labels', - type: 'object', - }, - message: { - category: 'base', - description: - 'For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message.', - example: 'Hello World', - name: 'message', - type: 'match_only_text', - }, - tags: { - category: 'base', - description: 'List of keywords used to tag each event.', - example: '["production", "env2"]', - name: 'tags', - type: 'keyword', - }, - 'agent.build.original': { - category: 'agent', - description: - 'Extended build information for the agent. This field is intended to contain any build information that a data source may provide, no specific formatting is required.', - example: - 'metricbeat version 7.6.0 (amd64), libbeat 7.6.0 [6a23e8f8f30f5001ba344e4e54d8d9cb82cb107c built 2020-02-05 23:10:10 +0000 UTC]', - name: 'agent.build.original', - type: 'keyword', - }, - 'agent.ephemeral_id': { - category: 'agent', - description: - 'Ephemeral identifier of this agent (if one exists). This id normally changes across restarts, but `agent.id` does not.', - example: '8a4f500f', - name: 'agent.ephemeral_id', - type: 'keyword', - }, - 'agent.id': { - category: 'agent', - description: - 'Unique identifier of this agent (if one exists). Example: For Beats this would be beat.id.', - example: '8a4f500d', - name: 'agent.id', - type: 'keyword', - }, - 'agent.name': { - category: 'agent', - description: - 'Custom name of the agent. This is a name that can be given to an agent. This can be helpful if for example two Filebeat instances are running on the same host but a human readable separation is needed on which Filebeat instance data is coming from. If no name is given, the name is often left empty.', - example: 'foo', - name: 'agent.name', - type: 'keyword', - }, - 'agent.type': { - category: 'agent', - description: - 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', - example: 'filebeat', - name: 'agent.type', - type: 'keyword', - }, - 'agent.version': { - category: 'agent', - description: 'Version of the agent.', - example: '6.0.0-rc2', - name: 'agent.version', - type: 'keyword', - }, - 'as.number': { - category: 'as', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'as.number', - type: 'long', - }, - 'as.organization.name': { - category: 'as', - description: 'Organization name.', - example: 'Google LLC', - name: 'as.organization.name', - type: 'keyword', - }, - 'client.address': { - category: 'client', - description: - 'Some event client addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.', - name: 'client.address', - type: 'keyword', - }, - 'client.as.number': { - category: 'client', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'client.as.number', - type: 'long', - }, - 'client.as.organization.name': { - category: 'client', - description: 'Organization name.', - example: 'Google LLC', - name: 'client.as.organization.name', - type: 'keyword', - }, - 'client.bytes': { - category: 'client', - description: 'Bytes sent from the client to the server.', - example: 184, - name: 'client.bytes', - type: 'long', - format: 'bytes', - }, - 'client.domain': { - category: 'client', - description: 'Client domain.', - name: 'client.domain', - type: 'keyword', - }, - 'client.geo.city_name': { - category: 'client', - description: 'City name.', - example: 'Montreal', - name: 'client.geo.city_name', - type: 'keyword', - }, - 'client.geo.continent_code': { - category: 'client', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'client.geo.continent_code', - type: 'keyword', - }, - 'client.geo.continent_name': { - category: 'client', - description: 'Name of the continent.', - example: 'North America', - name: 'client.geo.continent_name', - type: 'keyword', - }, - 'client.geo.country_iso_code': { - category: 'client', - description: 'Country ISO code.', - example: 'CA', - name: 'client.geo.country_iso_code', - type: 'keyword', - }, - 'client.geo.country_name': { - category: 'client', - description: 'Country name.', - example: 'Canada', - name: 'client.geo.country_name', - type: 'keyword', - }, - 'client.geo.location': { - category: 'client', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'client.geo.location', - type: 'geo_point', - }, - 'client.geo.name': { - category: 'client', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'client.geo.name', - type: 'keyword', - }, - 'client.geo.postal_code': { - category: 'client', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'client.geo.postal_code', - type: 'keyword', - }, - 'client.geo.region_iso_code': { - category: 'client', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'client.geo.region_iso_code', - type: 'keyword', - }, - 'client.geo.region_name': { - category: 'client', - description: 'Region name.', - example: 'Quebec', - name: 'client.geo.region_name', - type: 'keyword', - }, - 'client.geo.timezone': { - category: 'client', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'client.geo.timezone', - type: 'keyword', - }, - 'client.ip': { - category: 'client', - description: 'IP address of the client (IPv4 or IPv6).', - name: 'client.ip', - type: 'ip', - }, - 'client.mac': { - category: 'client', - description: - 'MAC address of the client. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '00-00-5E-00-53-23', - name: 'client.mac', - type: 'keyword', - }, - 'client.nat.ip': { - category: 'client', - description: - 'Translated IP of source based NAT sessions (e.g. internal client to internet). Typically connections traversing load balancers, firewalls, or routers.', - name: 'client.nat.ip', - type: 'ip', - }, - 'client.nat.port': { - category: 'client', - description: - 'Translated port of source based NAT sessions (e.g. internal client to internet). Typically connections traversing load balancers, firewalls, or routers.', - name: 'client.nat.port', - type: 'long', - format: 'string', - }, - 'client.packets': { - category: 'client', - description: 'Packets sent from the client to the server.', - example: 12, - name: 'client.packets', - type: 'long', - }, - 'client.port': { - category: 'client', - description: 'Port of the client.', - name: 'client.port', - type: 'long', - format: 'string', - }, - 'client.registered_domain': { - category: 'client', - description: - 'The highest registered client domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'client.registered_domain', - type: 'keyword', - }, - 'client.subdomain': { - category: 'client', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'client.subdomain', - type: 'keyword', - }, - 'client.top_level_domain': { - category: 'client', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'client.top_level_domain', - type: 'keyword', - }, - 'client.user.domain': { - category: 'client', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'client.user.domain', - type: 'keyword', - }, - 'client.user.email': { - category: 'client', - description: 'User email address.', - name: 'client.user.email', - type: 'keyword', - }, - 'client.user.full_name': { - category: 'client', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'client.user.full_name', - type: 'keyword', - }, - 'client.user.group.domain': { - category: 'client', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'client.user.group.domain', - type: 'keyword', - }, - 'client.user.group.id': { - category: 'client', - description: 'Unique identifier for the group on the system/platform.', - name: 'client.user.group.id', - type: 'keyword', - }, - 'client.user.group.name': { - category: 'client', - description: 'Name of the group.', - name: 'client.user.group.name', - type: 'keyword', - }, - 'client.user.hash': { - category: 'client', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'client.user.hash', - type: 'keyword', - }, - 'client.user.id': { - category: 'client', - description: 'Unique identifier of the user.', - example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', - name: 'client.user.id', - type: 'keyword', - }, - 'client.user.name': { - category: 'client', - description: 'Short name or login of the user.', - example: 'a.einstein', - name: 'client.user.name', - type: 'keyword', - }, - 'client.user.roles': { - category: 'client', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'client.user.roles', - type: 'keyword', - }, - 'cloud.account.id': { - category: 'cloud', - description: - 'The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.', - example: 666777888999, - name: 'cloud.account.id', - type: 'keyword', - }, - 'cloud.account.name': { - category: 'cloud', - description: - 'The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.', - example: 'elastic-dev', - name: 'cloud.account.name', - type: 'keyword', - }, - 'cloud.availability_zone': { - category: 'cloud', - description: 'Availability zone in which this host, resource, or service is located.', - example: 'us-east-1c', - name: 'cloud.availability_zone', - type: 'keyword', - }, - 'cloud.instance.id': { - category: 'cloud', - description: 'Instance ID of the host machine.', - example: 'i-1234567890abcdef0', - name: 'cloud.instance.id', - type: 'keyword', - }, - 'cloud.instance.name': { - category: 'cloud', - description: 'Instance name of the host machine.', - name: 'cloud.instance.name', - type: 'keyword', - }, - 'cloud.machine.type': { - category: 'cloud', - description: 'Machine type of the host machine.', - example: 't2.medium', - name: 'cloud.machine.type', - type: 'keyword', - }, - 'cloud.origin.account.id': { - category: 'cloud', - description: - 'The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.', - example: 666777888999, - name: 'cloud.origin.account.id', - type: 'keyword', - }, - 'cloud.origin.account.name': { - category: 'cloud', - description: - 'The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.', - example: 'elastic-dev', - name: 'cloud.origin.account.name', - type: 'keyword', - }, - 'cloud.origin.availability_zone': { - category: 'cloud', - description: 'Availability zone in which this host, resource, or service is located.', - example: 'us-east-1c', - name: 'cloud.origin.availability_zone', - type: 'keyword', - }, - 'cloud.origin.instance.id': { - category: 'cloud', - description: 'Instance ID of the host machine.', - example: 'i-1234567890abcdef0', - name: 'cloud.origin.instance.id', - type: 'keyword', - }, - 'cloud.origin.instance.name': { - category: 'cloud', - description: 'Instance name of the host machine.', - name: 'cloud.origin.instance.name', - type: 'keyword', - }, - 'cloud.origin.machine.type': { - category: 'cloud', - description: 'Machine type of the host machine.', - example: 't2.medium', - name: 'cloud.origin.machine.type', - type: 'keyword', - }, - 'cloud.origin.project.id': { - category: 'cloud', - description: - 'The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.', - example: 'my-project', - name: 'cloud.origin.project.id', - type: 'keyword', - }, - 'cloud.origin.project.name': { - category: 'cloud', - description: 'The cloud project name. Examples: Google Cloud Project name, Azure Project name.', - example: 'my project', - name: 'cloud.origin.project.name', - type: 'keyword', - }, - 'cloud.origin.provider': { - category: 'cloud', - description: 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', - example: 'aws', - name: 'cloud.origin.provider', - type: 'keyword', - }, - 'cloud.origin.region': { - category: 'cloud', - description: 'Region in which this host, resource, or service is located.', - example: 'us-east-1', - name: 'cloud.origin.region', - type: 'keyword', - }, - 'cloud.origin.service.name': { - category: 'cloud', - description: - 'The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.', - example: 'lambda', - name: 'cloud.origin.service.name', - type: 'keyword', - }, - 'cloud.project.id': { - category: 'cloud', - description: - 'The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.', - example: 'my-project', - name: 'cloud.project.id', - type: 'keyword', - }, - 'cloud.project.name': { - category: 'cloud', - description: 'The cloud project name. Examples: Google Cloud Project name, Azure Project name.', - example: 'my project', - name: 'cloud.project.name', - type: 'keyword', - }, - 'cloud.provider': { - category: 'cloud', - description: 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', - example: 'aws', - name: 'cloud.provider', - type: 'keyword', - }, - 'cloud.region': { - category: 'cloud', - description: 'Region in which this host, resource, or service is located.', - example: 'us-east-1', - name: 'cloud.region', - type: 'keyword', - }, - 'cloud.service.name': { - category: 'cloud', - description: - 'The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.', - example: 'lambda', - name: 'cloud.service.name', - type: 'keyword', - }, - 'cloud.target.account.id': { - category: 'cloud', - description: - 'The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.', - example: 666777888999, - name: 'cloud.target.account.id', - type: 'keyword', - }, - 'cloud.target.account.name': { - category: 'cloud', - description: - 'The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.', - example: 'elastic-dev', - name: 'cloud.target.account.name', - type: 'keyword', - }, - 'cloud.target.availability_zone': { - category: 'cloud', - description: 'Availability zone in which this host, resource, or service is located.', - example: 'us-east-1c', - name: 'cloud.target.availability_zone', - type: 'keyword', - }, - 'cloud.target.instance.id': { - category: 'cloud', - description: 'Instance ID of the host machine.', - example: 'i-1234567890abcdef0', - name: 'cloud.target.instance.id', - type: 'keyword', - }, - 'cloud.target.instance.name': { - category: 'cloud', - description: 'Instance name of the host machine.', - name: 'cloud.target.instance.name', - type: 'keyword', - }, - 'cloud.target.machine.type': { - category: 'cloud', - description: 'Machine type of the host machine.', - example: 't2.medium', - name: 'cloud.target.machine.type', - type: 'keyword', - }, - 'cloud.target.project.id': { - category: 'cloud', - description: - 'The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.', - example: 'my-project', - name: 'cloud.target.project.id', - type: 'keyword', - }, - 'cloud.target.project.name': { - category: 'cloud', - description: 'The cloud project name. Examples: Google Cloud Project name, Azure Project name.', - example: 'my project', - name: 'cloud.target.project.name', - type: 'keyword', - }, - 'cloud.target.provider': { - category: 'cloud', - description: 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', - example: 'aws', - name: 'cloud.target.provider', - type: 'keyword', - }, - 'cloud.target.region': { - category: 'cloud', - description: 'Region in which this host, resource, or service is located.', - example: 'us-east-1', - name: 'cloud.target.region', - type: 'keyword', - }, - 'cloud.target.service.name': { - category: 'cloud', - description: - 'The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.', - example: 'lambda', - name: 'cloud.target.service.name', - type: 'keyword', - }, - 'code_signature.digest_algorithm': { - category: 'code_signature', - description: - 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', - example: 'sha256', - name: 'code_signature.digest_algorithm', - type: 'keyword', - }, - 'code_signature.exists': { - category: 'code_signature', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'code_signature.exists', - type: 'boolean', - }, - 'code_signature.signing_id': { - category: 'code_signature', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'code_signature.signing_id', - type: 'keyword', - }, - 'code_signature.status': { - category: 'code_signature', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'code_signature.status', - type: 'keyword', - }, - 'code_signature.subject_name': { - category: 'code_signature', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'code_signature.subject_name', - type: 'keyword', - }, - 'code_signature.team_id': { - category: 'code_signature', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'code_signature.team_id', - type: 'keyword', - }, - 'code_signature.timestamp': { - category: 'code_signature', - description: 'Date and time when the code signature was generated and signed.', - example: '2021-01-01T12:10:30Z', - name: 'code_signature.timestamp', - type: 'date', - }, - 'code_signature.trusted': { - category: 'code_signature', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'code_signature.trusted', - type: 'boolean', - }, - 'code_signature.valid': { - category: 'code_signature', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'code_signature.valid', - type: 'boolean', - }, - 'container.id': { - category: 'container', - description: 'Unique container id.', - name: 'container.id', - type: 'keyword', - }, - 'container.image.name': { - category: 'container', - description: 'Name of the image the container was built on.', - name: 'container.image.name', - type: 'keyword', - }, - 'container.image.tag': { - category: 'container', - description: 'Container image tags.', - name: 'container.image.tag', - type: 'keyword', - }, - 'container.labels': { - category: 'container', - description: 'Image labels.', - name: 'container.labels', - type: 'object', - }, - 'container.name': { - category: 'container', - description: 'Container name.', - name: 'container.name', - type: 'keyword', - }, - 'container.runtime': { - category: 'container', - description: 'Runtime managing this container.', - example: 'docker', - name: 'container.runtime', - type: 'keyword', - }, - 'data_stream.dataset': { - category: 'data_stream', - description: - 'The field can contain anything that makes sense to signify the source of the data. Examples include `nginx.access`, `prometheus`, `endpoint` etc. For data streams that otherwise fit, but that do not have dataset set we use the value "generic" for the dataset value. `event.dataset` should have the same value as `data_stream.dataset`. Beyond the Elasticsearch data stream naming criteria noted above, the `dataset` value has additional restrictions: * Must not contain `-` * No longer than 100 characters', - example: 'nginx.access', - name: 'data_stream.dataset', - type: 'constant_keyword', - }, - 'data_stream.namespace': { - category: 'data_stream', - description: - 'A user defined namespace. Namespaces are useful to allow grouping of data. Many users already organize their indices this way, and the data stream naming scheme now provides this best practice as a default. Many users will populate this field with `default`. If no value is used, it falls back to `default`. Beyond the Elasticsearch index naming criteria noted above, `namespace` value has the additional restrictions: * Must not contain `-` * No longer than 100 characters', - example: 'production', - name: 'data_stream.namespace', - type: 'constant_keyword', - }, - 'data_stream.type': { - category: 'data_stream', - description: - 'An overarching type for the data stream. Currently allowed values are "logs" and "metrics". We expect to also add "traces" and "synthetics" in the near future.', - example: 'logs', - name: 'data_stream.type', - type: 'constant_keyword', - }, - 'destination.address': { - category: 'destination', - description: - 'Some event destination addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.', - name: 'destination.address', - type: 'keyword', - }, - 'destination.as.number': { - category: 'destination', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'destination.as.number', - type: 'long', - }, - 'destination.as.organization.name': { - category: 'destination', - description: 'Organization name.', - example: 'Google LLC', - name: 'destination.as.organization.name', - type: 'keyword', - }, - 'destination.bytes': { - category: 'destination', - description: 'Bytes sent from the destination to the source.', - example: 184, - name: 'destination.bytes', - type: 'long', - format: 'bytes', - }, - 'destination.domain': { - category: 'destination', - description: 'Destination domain.', - name: 'destination.domain', - type: 'keyword', - }, - 'destination.geo.city_name': { - category: 'destination', - description: 'City name.', - example: 'Montreal', - name: 'destination.geo.city_name', - type: 'keyword', - }, - 'destination.geo.continent_code': { - category: 'destination', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'destination.geo.continent_code', - type: 'keyword', - }, - 'destination.geo.continent_name': { - category: 'destination', - description: 'Name of the continent.', - example: 'North America', - name: 'destination.geo.continent_name', - type: 'keyword', - }, - 'destination.geo.country_iso_code': { - category: 'destination', - description: 'Country ISO code.', - example: 'CA', - name: 'destination.geo.country_iso_code', - type: 'keyword', - }, - 'destination.geo.country_name': { - category: 'destination', - description: 'Country name.', - example: 'Canada', - name: 'destination.geo.country_name', - type: 'keyword', - }, - 'destination.geo.location': { - category: 'destination', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'destination.geo.location', - type: 'geo_point', - }, - 'destination.geo.name': { - category: 'destination', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'destination.geo.name', - type: 'keyword', - }, - 'destination.geo.postal_code': { - category: 'destination', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'destination.geo.postal_code', - type: 'keyword', - }, - 'destination.geo.region_iso_code': { - category: 'destination', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'destination.geo.region_iso_code', - type: 'keyword', - }, - 'destination.geo.region_name': { - category: 'destination', - description: 'Region name.', - example: 'Quebec', - name: 'destination.geo.region_name', - type: 'keyword', - }, - 'destination.geo.timezone': { - category: 'destination', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'destination.geo.timezone', - type: 'keyword', - }, - 'destination.ip': { - category: 'destination', - description: 'IP address of the destination (IPv4 or IPv6).', - name: 'destination.ip', - type: 'ip', - }, - 'destination.mac': { - category: 'destination', - description: - 'MAC address of the destination. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '00-00-5E-00-53-23', - name: 'destination.mac', - type: 'keyword', - }, - 'destination.nat.ip': { - category: 'destination', - description: - 'Translated ip of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.', - name: 'destination.nat.ip', - type: 'ip', - }, - 'destination.nat.port': { - category: 'destination', - description: - 'Port the source session is translated to by NAT Device. Typically used with load balancers, firewalls, or routers.', - name: 'destination.nat.port', - type: 'long', - format: 'string', - }, - 'destination.packets': { - category: 'destination', - description: 'Packets sent from the destination to the source.', - example: 12, - name: 'destination.packets', - type: 'long', - }, - 'destination.port': { - category: 'destination', - description: 'Port of the destination.', - name: 'destination.port', - type: 'long', - format: 'string', - }, - 'destination.registered_domain': { - category: 'destination', - description: - 'The highest registered destination domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'destination.registered_domain', - type: 'keyword', - }, - 'destination.subdomain': { - category: 'destination', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'destination.subdomain', - type: 'keyword', - }, - 'destination.top_level_domain': { - category: 'destination', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'destination.top_level_domain', - type: 'keyword', - }, - 'destination.user.domain': { - category: 'destination', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'destination.user.domain', - type: 'keyword', - }, - 'destination.user.email': { - category: 'destination', - description: 'User email address.', - name: 'destination.user.email', - type: 'keyword', - }, - 'destination.user.full_name': { - category: 'destination', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'destination.user.full_name', - type: 'keyword', - }, - 'destination.user.group.domain': { - category: 'destination', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'destination.user.group.domain', - type: 'keyword', - }, - 'destination.user.group.id': { - category: 'destination', - description: 'Unique identifier for the group on the system/platform.', - name: 'destination.user.group.id', - type: 'keyword', - }, - 'destination.user.group.name': { - category: 'destination', - description: 'Name of the group.', - name: 'destination.user.group.name', - type: 'keyword', - }, - 'destination.user.hash': { - category: 'destination', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'destination.user.hash', - type: 'keyword', - }, - 'destination.user.id': { - category: 'destination', - description: 'Unique identifier of the user.', - example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', - name: 'destination.user.id', - type: 'keyword', - }, - 'destination.user.name': { - category: 'destination', - description: 'Short name or login of the user.', - example: 'a.einstein', - name: 'destination.user.name', - type: 'keyword', - }, - 'destination.user.roles': { - category: 'destination', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'destination.user.roles', - type: 'keyword', - }, - 'dll.code_signature.digest_algorithm': { - category: 'dll', - description: - 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', - example: 'sha256', - name: 'dll.code_signature.digest_algorithm', - type: 'keyword', - }, - 'dll.code_signature.exists': { - category: 'dll', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'dll.code_signature.exists', - type: 'boolean', - }, - 'dll.code_signature.signing_id': { - category: 'dll', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'dll.code_signature.signing_id', - type: 'keyword', - }, - 'dll.code_signature.status': { - category: 'dll', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'dll.code_signature.status', - type: 'keyword', - }, - 'dll.code_signature.subject_name': { - category: 'dll', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'dll.code_signature.subject_name', - type: 'keyword', - }, - 'dll.code_signature.team_id': { - category: 'dll', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'dll.code_signature.team_id', - type: 'keyword', - }, - 'dll.code_signature.timestamp': { - category: 'dll', - description: 'Date and time when the code signature was generated and signed.', - example: '2021-01-01T12:10:30Z', - name: 'dll.code_signature.timestamp', - type: 'date', - }, - 'dll.code_signature.trusted': { - category: 'dll', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'dll.code_signature.trusted', - type: 'boolean', - }, - 'dll.code_signature.valid': { - category: 'dll', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'dll.code_signature.valid', - type: 'boolean', - }, - 'dll.hash.md5': { - category: 'dll', - description: 'MD5 hash.', - name: 'dll.hash.md5', - type: 'keyword', - }, - 'dll.hash.sha1': { - category: 'dll', - description: 'SHA1 hash.', - name: 'dll.hash.sha1', - type: 'keyword', - }, - 'dll.hash.sha256': { - category: 'dll', - description: 'SHA256 hash.', - name: 'dll.hash.sha256', - type: 'keyword', - }, - 'dll.hash.sha512': { - category: 'dll', - description: 'SHA512 hash.', - name: 'dll.hash.sha512', - type: 'keyword', - }, - 'dll.hash.ssdeep': { - category: 'dll', - description: 'SSDEEP hash.', - name: 'dll.hash.ssdeep', - type: 'keyword', - }, - 'dll.name': { - category: 'dll', - description: 'Name of the library. This generally maps to the name of the file on disk.', - example: 'kernel32.dll', - name: 'dll.name', - type: 'keyword', - }, - 'dll.path': { - category: 'dll', - description: 'Full file path of the library.', - example: 'C:\\Windows\\System32\\kernel32.dll', - name: 'dll.path', - type: 'keyword', - }, - 'dll.pe.architecture': { - category: 'dll', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'dll.pe.architecture', - type: 'keyword', - }, - 'dll.pe.company': { - category: 'dll', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'dll.pe.company', - type: 'keyword', - }, - 'dll.pe.description': { - category: 'dll', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'dll.pe.description', - type: 'keyword', - }, - 'dll.pe.file_version': { - category: 'dll', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'dll.pe.file_version', - type: 'keyword', - }, - 'dll.pe.imphash': { - category: 'dll', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'dll.pe.imphash', - type: 'keyword', - }, - 'dll.pe.original_file_name': { - category: 'dll', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'dll.pe.original_file_name', - type: 'keyword', - }, - 'dll.pe.product': { - category: 'dll', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'dll.pe.product', - type: 'keyword', - }, - 'dns.answers': { - category: 'dns', - description: - 'An array containing an object for each answer section returned by the server. The main keys that should be present in these objects are defined by ECS. Records that have more information may contain more keys than what ECS defines. Not all DNS data sources give all details about DNS answers. At minimum, answer objects must contain the `data` key. If more information is available, map as much of it to ECS as possible, and add any additional fields to the answer objects as custom fields.', - name: 'dns.answers', - type: 'object', - }, - 'dns.answers.class': { - category: 'dns', - description: 'The class of DNS data contained in this resource record.', - example: 'IN', - name: 'dns.answers.class', - type: 'keyword', - }, - 'dns.answers.data': { - category: 'dns', - description: - 'The data describing the resource. The meaning of this data depends on the type and class of the resource record.', - example: '10.10.10.10', - name: 'dns.answers.data', - type: 'keyword', - }, - 'dns.answers.name': { - category: 'dns', - description: - "The domain name to which this resource record pertains. If a chain of CNAME is being resolved, each answer's `name` should be the one that corresponds with the answer's `data`. It should not simply be the original `question.name` repeated.", - example: 'www.example.com', - name: 'dns.answers.name', - type: 'keyword', - }, - 'dns.answers.ttl': { - category: 'dns', - description: - 'The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached.', - example: 180, - name: 'dns.answers.ttl', - type: 'long', - }, - 'dns.answers.type': { - category: 'dns', - description: 'The type of data contained in this resource record.', - example: 'CNAME', - name: 'dns.answers.type', - type: 'keyword', - }, - 'dns.header_flags': { - category: 'dns', - description: - 'Array of 2 letter DNS header flags. Expected values are: AA, TC, RD, RA, AD, CD, DO.', - example: '["RD", "RA"]', - name: 'dns.header_flags', - type: 'keyword', - }, - 'dns.id': { - category: 'dns', - description: - 'The DNS packet identifier assigned by the program that generated the query. The identifier is copied to the response.', - example: 62111, - name: 'dns.id', - type: 'keyword', - }, - 'dns.op_code': { - category: 'dns', - description: - 'The DNS operation code that specifies the kind of query in the message. This value is set by the originator of a query and copied into the response.', - example: 'QUERY', - name: 'dns.op_code', - type: 'keyword', - }, - 'dns.question.class': { - category: 'dns', - description: 'The class of records being queried.', - example: 'IN', - name: 'dns.question.class', - type: 'keyword', - }, - 'dns.question.name': { - category: 'dns', - description: - 'The name being queried. If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \\t, \\r, and \\n respectively.', - example: 'www.example.com', - name: 'dns.question.name', - type: 'keyword', - }, - 'dns.question.registered_domain': { - category: 'dns', - description: - 'The highest registered domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'dns.question.registered_domain', - type: 'keyword', - }, - 'dns.question.subdomain': { - category: 'dns', - description: - 'The subdomain is all of the labels under the registered_domain. If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'www', - name: 'dns.question.subdomain', - type: 'keyword', - }, - 'dns.question.top_level_domain': { - category: 'dns', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'dns.question.top_level_domain', - type: 'keyword', - }, - 'dns.question.type': { - category: 'dns', - description: 'The type of record being queried.', - example: 'AAAA', - name: 'dns.question.type', - type: 'keyword', - }, - 'dns.resolved_ip': { - category: 'dns', - description: - 'Array containing all IPs seen in `answers.data`. The `answers` array can be difficult to use, because of the variety of data formats it can contain. Extracting all IP addresses seen in there to `dns.resolved_ip` makes it possible to index them as IP addresses, and makes them easier to visualize and query for.', - example: '["10.10.10.10", "10.10.10.11"]', - name: 'dns.resolved_ip', - type: 'ip', - }, - 'dns.response_code': { - category: 'dns', - description: 'The DNS response code.', - example: 'NOERROR', - name: 'dns.response_code', - type: 'keyword', - }, - 'dns.type': { - category: 'dns', - description: - 'The type of DNS event captured, query or answer. If your source of DNS events only gives you DNS queries, you should only create dns events of type `dns.type:query`. If your source of DNS events gives you answers as well, you should create one event per query (optionally as soon as the query is seen). And a second event containing all query details as well as an array of answers.', - example: 'answer', - name: 'dns.type', - type: 'keyword', - }, - 'ecs.version': { - category: 'ecs', - description: - 'ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events.', - example: '1.0.0', - name: 'ecs.version', - type: 'keyword', - }, - 'elf.architecture': { - category: 'elf', - description: 'Machine architecture of the ELF file.', - example: 'x86-64', - name: 'elf.architecture', - type: 'keyword', - }, - 'elf.byte_order': { - category: 'elf', - description: 'Byte sequence of ELF file.', - example: 'Little Endian', - name: 'elf.byte_order', - type: 'keyword', - }, - 'elf.cpu_type': { - category: 'elf', - description: 'CPU type of the ELF file.', - example: 'Intel', - name: 'elf.cpu_type', - type: 'keyword', - }, - 'elf.creation_date': { - category: 'elf', - description: - "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", - name: 'elf.creation_date', - type: 'date', - }, - 'elf.exports': { - category: 'elf', - description: 'List of exported element names and types.', - name: 'elf.exports', - type: 'flattened', - }, - 'elf.header.abi_version': { - category: 'elf', - description: 'Version of the ELF Application Binary Interface (ABI).', - name: 'elf.header.abi_version', - type: 'keyword', - }, - 'elf.header.class': { - category: 'elf', - description: 'Header class of the ELF file.', - name: 'elf.header.class', - type: 'keyword', - }, - 'elf.header.data': { - category: 'elf', - description: 'Data table of the ELF header.', - name: 'elf.header.data', - type: 'keyword', - }, - 'elf.header.entrypoint': { - category: 'elf', - description: 'Header entrypoint of the ELF file.', - name: 'elf.header.entrypoint', - type: 'long', - format: 'string', - }, - 'elf.header.object_version': { - category: 'elf', - description: '"0x1" for original ELF files.', - name: 'elf.header.object_version', - type: 'keyword', - }, - 'elf.header.os_abi': { - category: 'elf', - description: 'Application Binary Interface (ABI) of the Linux OS.', - name: 'elf.header.os_abi', - type: 'keyword', - }, - 'elf.header.type': { - category: 'elf', - description: 'Header type of the ELF file.', - name: 'elf.header.type', - type: 'keyword', - }, - 'elf.header.version': { - category: 'elf', - description: 'Version of the ELF header.', - name: 'elf.header.version', - type: 'keyword', - }, - 'elf.imports': { - category: 'elf', - description: 'List of imported element names and types.', - name: 'elf.imports', - type: 'flattened', - }, - 'elf.sections': { - category: 'elf', - description: - 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', - name: 'elf.sections', - type: 'nested', - }, - 'elf.sections.chi2': { - category: 'elf', - description: 'Chi-square probability distribution of the section.', - name: 'elf.sections.chi2', - type: 'long', - format: 'number', - }, - 'elf.sections.entropy': { - category: 'elf', - description: 'Shannon entropy calculation from the section.', - name: 'elf.sections.entropy', - type: 'long', - format: 'number', - }, - 'elf.sections.flags': { - category: 'elf', - description: 'ELF Section List flags.', - name: 'elf.sections.flags', - type: 'keyword', - }, - 'elf.sections.name': { - category: 'elf', - description: 'ELF Section List name.', - name: 'elf.sections.name', - type: 'keyword', - }, - 'elf.sections.physical_offset': { - category: 'elf', - description: 'ELF Section List offset.', - name: 'elf.sections.physical_offset', - type: 'keyword', - }, - 'elf.sections.physical_size': { - category: 'elf', - description: 'ELF Section List physical size.', - name: 'elf.sections.physical_size', - type: 'long', - format: 'bytes', - }, - 'elf.sections.type': { - category: 'elf', - description: 'ELF Section List type.', - name: 'elf.sections.type', - type: 'keyword', - }, - 'elf.sections.virtual_address': { - category: 'elf', - description: 'ELF Section List virtual address.', - name: 'elf.sections.virtual_address', - type: 'long', - format: 'string', - }, - 'elf.sections.virtual_size': { - category: 'elf', - description: 'ELF Section List virtual size.', - name: 'elf.sections.virtual_size', - type: 'long', - format: 'string', - }, - 'elf.segments': { - category: 'elf', - description: - 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', - name: 'elf.segments', - type: 'nested', - }, - 'elf.segments.sections': { - category: 'elf', - description: 'ELF object segment sections.', - name: 'elf.segments.sections', - type: 'keyword', - }, - 'elf.segments.type': { - category: 'elf', - description: 'ELF object segment type.', - name: 'elf.segments.type', - type: 'keyword', - }, - 'elf.shared_libraries': { - category: 'elf', - description: 'List of shared libraries used by this ELF object.', - name: 'elf.shared_libraries', - type: 'keyword', - }, - 'elf.telfhash': { - category: 'elf', - description: 'telfhash symbol hash for ELF file.', - name: 'elf.telfhash', - type: 'keyword', - }, - 'error.code': { - category: 'error', - description: 'Error code describing the error.', - name: 'error.code', - type: 'keyword', - }, - 'error.id': { - category: 'error', - description: 'Unique identifier for the error.', - name: 'error.id', - type: 'keyword', - }, - 'error.message': { - category: 'error', - description: 'Error message.', - name: 'error.message', - type: 'match_only_text', - }, - 'error.stack_trace': { - category: 'error', - description: 'The stack trace of this error in plain text.', - name: 'error.stack_trace', - type: 'wildcard', - }, - 'error.type': { - category: 'error', - description: 'The type of the error, for example the class name of the exception.', - example: 'java.lang.NullPointerException', - name: 'error.type', - type: 'keyword', - }, - 'event.action': { - category: 'event', - description: - 'The action captured by the event. This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer.', - example: 'user-password-change', - name: 'event.action', - type: 'keyword', - }, - 'event.agent_id_status': { - category: 'event', - description: - "Agents are normally responsible for populating the `agent.id` field value. If the system receiving events is capable of validating the value based on authentication information for the client then this field can be used to reflect the outcome of that validation. For example if the agent's connection is authenticated with mTLS and the client cert contains the ID of the agent to which the cert was issued then the `agent.id` value in events can be checked against the certificate. If the values match then `event.agent_id_status: verified` is added to the event, otherwise one of the other allowed values should be used. If no validation is performed then the field should be omitted. The allowed values are: `verified` - The `agent.id` field value matches expected value obtained from auth metadata. `mismatch` - The `agent.id` field value does not match the expected value obtained from auth metadata. `missing` - There was no `agent.id` field in the event to validate. `auth_metadata_missing` - There was no auth metadata or it was missing information about the agent ID.", - example: 'verified', - name: 'event.agent_id_status', - type: 'keyword', - }, - 'event.category': { - category: 'event', - description: - 'This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories.', - example: 'authentication', - name: 'event.category', - type: 'keyword', - }, - 'event.code': { - category: 'event', - description: - 'Identification code for this event, if one exists. Some event sources use event codes to identify messages unambiguously, regardless of message language or wording adjustments over time. An example of this is the Windows Event ID.', - example: 4648, - name: 'event.code', - type: 'keyword', - }, - 'event.created': { - category: 'event', - description: - "event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used.", - example: '2016-05-23T08:05:34.857Z', - name: 'event.created', - type: 'date', - }, - 'event.dataset': { - category: 'event', - description: - "Name of the dataset. If an event source publishes more than one type of log or events (e.g. access log, error log), the dataset is used to specify which one the event comes from. It's recommended but not required to start the dataset name with the module name, followed by a dot, then the dataset name.", - example: 'apache.access', - name: 'event.dataset', - type: 'keyword', - }, - 'event.duration': { - category: 'event', - description: - 'Duration of the event in nanoseconds. If event.start and event.end are known this value should be the difference between the end and start time.', - name: 'event.duration', - type: 'long', - format: 'duration', - }, - 'event.end': { - category: 'event', - description: - 'event.end contains the date when the event ended or when the activity was last observed.', - name: 'event.end', - type: 'date', - }, - 'event.hash': { - category: 'event', - description: - 'Hash (perhaps logstash fingerprint) of raw field to be able to demonstrate log integrity.', - example: '123456789012345678901234567890ABCD', - name: 'event.hash', - type: 'keyword', - }, - 'event.id': { - category: 'event', - description: 'Unique ID to describe the event.', - example: '8a4f500d', - name: 'event.id', - type: 'keyword', - }, - 'event.ingested': { - category: 'event', - description: - "Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`.", - example: '2016-05-23T08:05:35.101Z', - name: 'event.ingested', - type: 'date', - }, - 'event.kind': { - category: 'event', - description: - 'This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not.', - example: 'alert', - name: 'event.kind', - type: 'keyword', - }, - 'event.module': { - category: 'event', - description: - 'Name of the module this data is coming from. If your monitoring agent supports the concept of modules or plugins to process events of a given source (e.g. Apache logs), `event.module` should contain the name of this module.', - example: 'apache', - name: 'event.module', - type: 'keyword', - }, - 'event.original': { - category: 'event', - description: - 'Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`.', - example: - 'Sep 19 08:26:10 host CEF:0|Security| threatmanager|1.0|100| worm successfully stopped|10|src=10.0.0.1 dst=2.1.2.2spt=1232', - name: 'event.original', - type: 'keyword', - }, - 'event.outcome': { - category: 'event', - description: - 'This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense.', - example: 'success', - name: 'event.outcome', - type: 'keyword', - }, - 'event.provider': { - category: 'event', - description: - 'Source of the event. Event transports such as Syslog or the Windows Event Log typically mention the source of an event. It can be the name of the software that generated the event (e.g. Sysmon, httpd), or of a subsystem of the operating system (kernel, Microsoft-Windows-Security-Auditing).', - example: 'kernel', - name: 'event.provider', - type: 'keyword', - }, - 'event.reason': { - category: 'event', - description: - 'Reason why this event happened, according to the source. This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`).', - example: 'Terminated an unexpected process', - name: 'event.reason', - type: 'keyword', - }, - 'event.reference': { - category: 'event', - description: - 'Reference URL linking to additional information about this event. This URL links to a static definition of this event. Alert events, indicated by `event.kind:alert`, are a common use case for this field.', - example: 'https://system.example.com/event/#0001234', - name: 'event.reference', - type: 'keyword', - }, - 'event.risk_score': { - category: 'event', - description: - "Risk score or priority of the event (e.g. security solutions). Use your system's original value here.", - name: 'event.risk_score', - type: 'float', - }, - 'event.risk_score_norm': { - category: 'event', - description: - 'Normalized risk score or priority of the event, on a scale of 0 to 100. This is mainly useful if you use more than one system that assigns risk scores, and you want to see a normalized value across all systems.', - name: 'event.risk_score_norm', - type: 'float', - }, - 'event.sequence': { - category: 'event', - description: - 'Sequence number of the event. The sequence number is a value published by some event sources, to make the exact ordering of events unambiguous, regardless of the timestamp precision.', - name: 'event.sequence', - type: 'long', - format: 'string', - }, - 'event.severity': { - category: 'event', - description: - "The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`.", - example: 7, - name: 'event.severity', - type: 'long', - format: 'string', - }, - 'event.start': { - category: 'event', - description: - 'event.start contains the date when the event started or when the activity was first observed.', - name: 'event.start', - type: 'date', - }, - 'event.timezone': { - category: 'event', - description: - 'This field should be populated when the event\'s timestamp does not include timezone information already (e.g. default Syslog timestamps). It\'s optional otherwise. Acceptable timezone formats are: a canonical ID (e.g. "Europe/Amsterdam"), abbreviated (e.g. "EST") or an HH:mm differential (e.g. "-05:00").', - name: 'event.timezone', - type: 'keyword', - }, - 'event.type': { - category: 'event', - description: - 'This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types.', - name: 'event.type', - type: 'keyword', - }, - 'event.url': { - category: 'event', - description: - 'URL linking to an external system to continue investigation of this event. This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field.', - example: 'https://mysystem.example.com/alert/5271dedb-f5b0-4218-87f0-4ac4870a38fe', - name: 'event.url', - type: 'keyword', - }, - 'faas.coldstart': { - category: 'faas', - description: 'Boolean value indicating a cold start of a function.', - name: 'faas.coldstart', - type: 'boolean', - }, - 'faas.execution': { - category: 'faas', - description: 'The execution ID of the current function execution.', - example: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28', - name: 'faas.execution', - type: 'keyword', - }, - 'faas.trigger': { - category: 'faas', - description: 'Details about the function trigger.', - name: 'faas.trigger', - type: 'nested', - }, - 'faas.trigger.request_id': { - category: 'faas', - description: 'The ID of the trigger request , message, event, etc.', - example: 123456789, - name: 'faas.trigger.request_id', - type: 'keyword', - }, - 'faas.trigger.type': { - category: 'faas', - description: - 'The trigger for the function execution. Expected values are: * http * pubsub * datasource * timer * other', - example: 'http', - name: 'faas.trigger.type', - type: 'keyword', - }, - 'file.accessed': { - category: 'file', - description: - 'Last time the file was accessed. Note that not all filesystems keep track of access time.', - name: 'file.accessed', - type: 'date', - }, - 'file.attributes': { - category: 'file', - description: - "Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.", - example: '["readonly", "system"]', - name: 'file.attributes', - type: 'keyword', - }, - 'file.code_signature.digest_algorithm': { - category: 'file', - description: - 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', - example: 'sha256', - name: 'file.code_signature.digest_algorithm', - type: 'keyword', - }, - 'file.code_signature.exists': { - category: 'file', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'file.code_signature.exists', - type: 'boolean', - }, - 'file.code_signature.signing_id': { - category: 'file', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'file.code_signature.signing_id', - type: 'keyword', - }, - 'file.code_signature.status': { - category: 'file', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'file.code_signature.status', - type: 'keyword', - }, - 'file.code_signature.subject_name': { - category: 'file', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'file.code_signature.subject_name', - type: 'keyword', - }, - 'file.code_signature.team_id': { - category: 'file', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'file.code_signature.team_id', - type: 'keyword', - }, - 'file.code_signature.timestamp': { - category: 'file', - description: 'Date and time when the code signature was generated and signed.', - example: '2021-01-01T12:10:30Z', - name: 'file.code_signature.timestamp', - type: 'date', - }, - 'file.code_signature.trusted': { - category: 'file', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'file.code_signature.trusted', - type: 'boolean', - }, - 'file.code_signature.valid': { - category: 'file', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'file.code_signature.valid', - type: 'boolean', - }, - 'file.created': { - category: 'file', - description: 'File creation time. Note that not all filesystems store the creation time.', - name: 'file.created', - type: 'date', - }, - 'file.ctime': { - category: 'file', - description: - 'Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.', - name: 'file.ctime', - type: 'date', - }, - 'file.device': { - category: 'file', - description: 'Device that is the source of the file.', - example: 'sda', - name: 'file.device', - type: 'keyword', - }, - 'file.directory': { - category: 'file', - description: - 'Directory where the file is located. It should include the drive letter, when appropriate.', - example: '/home/alice', - name: 'file.directory', - type: 'keyword', - }, - 'file.drive_letter': { - category: 'file', - description: - 'Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.', - example: 'C', - name: 'file.drive_letter', - type: 'keyword', - }, - 'file.elf.architecture': { - category: 'file', - description: 'Machine architecture of the ELF file.', - example: 'x86-64', - name: 'file.elf.architecture', - type: 'keyword', - }, - 'file.elf.byte_order': { - category: 'file', - description: 'Byte sequence of ELF file.', - example: 'Little Endian', - name: 'file.elf.byte_order', - type: 'keyword', - }, - 'file.elf.cpu_type': { - category: 'file', - description: 'CPU type of the ELF file.', - example: 'Intel', - name: 'file.elf.cpu_type', - type: 'keyword', - }, - 'file.elf.creation_date': { - category: 'file', - description: - "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", - name: 'file.elf.creation_date', - type: 'date', - }, - 'file.elf.exports': { - category: 'file', - description: 'List of exported element names and types.', - name: 'file.elf.exports', - type: 'flattened', - }, - 'file.elf.header.abi_version': { - category: 'file', - description: 'Version of the ELF Application Binary Interface (ABI).', - name: 'file.elf.header.abi_version', - type: 'keyword', - }, - 'file.elf.header.class': { - category: 'file', - description: 'Header class of the ELF file.', - name: 'file.elf.header.class', - type: 'keyword', - }, - 'file.elf.header.data': { - category: 'file', - description: 'Data table of the ELF header.', - name: 'file.elf.header.data', - type: 'keyword', - }, - 'file.elf.header.entrypoint': { - category: 'file', - description: 'Header entrypoint of the ELF file.', - name: 'file.elf.header.entrypoint', - type: 'long', - format: 'string', - }, - 'file.elf.header.object_version': { - category: 'file', - description: '"0x1" for original ELF files.', - name: 'file.elf.header.object_version', - type: 'keyword', - }, - 'file.elf.header.os_abi': { - category: 'file', - description: 'Application Binary Interface (ABI) of the Linux OS.', - name: 'file.elf.header.os_abi', - type: 'keyword', - }, - 'file.elf.header.type': { - category: 'file', - description: 'Header type of the ELF file.', - name: 'file.elf.header.type', - type: 'keyword', - }, - 'file.elf.header.version': { - category: 'file', - description: 'Version of the ELF header.', - name: 'file.elf.header.version', - type: 'keyword', - }, - 'file.elf.imports': { - category: 'file', - description: 'List of imported element names and types.', - name: 'file.elf.imports', - type: 'flattened', - }, - 'file.elf.sections': { - category: 'file', - description: - 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', - name: 'file.elf.sections', - type: 'nested', - }, - 'file.elf.sections.chi2': { - category: 'file', - description: 'Chi-square probability distribution of the section.', - name: 'file.elf.sections.chi2', - type: 'long', - format: 'number', - }, - 'file.elf.sections.entropy': { - category: 'file', - description: 'Shannon entropy calculation from the section.', - name: 'file.elf.sections.entropy', - type: 'long', - format: 'number', - }, - 'file.elf.sections.flags': { - category: 'file', - description: 'ELF Section List flags.', - name: 'file.elf.sections.flags', - type: 'keyword', - }, - 'file.elf.sections.name': { - category: 'file', - description: 'ELF Section List name.', - name: 'file.elf.sections.name', - type: 'keyword', - }, - 'file.elf.sections.physical_offset': { - category: 'file', - description: 'ELF Section List offset.', - name: 'file.elf.sections.physical_offset', - type: 'keyword', - }, - 'file.elf.sections.physical_size': { - category: 'file', - description: 'ELF Section List physical size.', - name: 'file.elf.sections.physical_size', - type: 'long', - format: 'bytes', - }, - 'file.elf.sections.type': { - category: 'file', - description: 'ELF Section List type.', - name: 'file.elf.sections.type', - type: 'keyword', - }, - 'file.elf.sections.virtual_address': { - category: 'file', - description: 'ELF Section List virtual address.', - name: 'file.elf.sections.virtual_address', - type: 'long', - format: 'string', - }, - 'file.elf.sections.virtual_size': { - category: 'file', - description: 'ELF Section List virtual size.', - name: 'file.elf.sections.virtual_size', - type: 'long', - format: 'string', - }, - 'file.elf.segments': { - category: 'file', - description: - 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', - name: 'file.elf.segments', - type: 'nested', - }, - 'file.elf.segments.sections': { - category: 'file', - description: 'ELF object segment sections.', - name: 'file.elf.segments.sections', - type: 'keyword', - }, - 'file.elf.segments.type': { - category: 'file', - description: 'ELF object segment type.', - name: 'file.elf.segments.type', - type: 'keyword', - }, - 'file.elf.shared_libraries': { - category: 'file', - description: 'List of shared libraries used by this ELF object.', - name: 'file.elf.shared_libraries', - type: 'keyword', - }, - 'file.elf.telfhash': { - category: 'file', - description: 'telfhash symbol hash for ELF file.', - name: 'file.elf.telfhash', - type: 'keyword', - }, - 'file.extension': { - category: 'file', - description: - 'File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', - example: 'png', - name: 'file.extension', - type: 'keyword', - }, - 'file.fork_name': { - category: 'file', - description: - 'A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.', - example: 'Zone.Identifer', - name: 'file.fork_name', - type: 'keyword', - }, - 'file.gid': { - category: 'file', - description: 'Primary group ID (GID) of the file.', - example: '1001', - name: 'file.gid', - type: 'keyword', - }, - 'file.group': { - category: 'file', - description: 'Primary group name of the file.', - example: 'alice', - name: 'file.group', - type: 'keyword', - }, - 'file.hash.md5': { - category: 'file', - description: 'MD5 hash.', - name: 'file.hash.md5', - type: 'keyword', - }, - 'file.hash.sha1': { - category: 'file', - description: 'SHA1 hash.', - name: 'file.hash.sha1', - type: 'keyword', - }, - 'file.hash.sha256': { - category: 'file', - description: 'SHA256 hash.', - name: 'file.hash.sha256', - type: 'keyword', - }, - 'file.hash.sha512': { - category: 'file', - description: 'SHA512 hash.', - name: 'file.hash.sha512', - type: 'keyword', - }, - 'file.hash.ssdeep': { - category: 'file', - description: 'SSDEEP hash.', - name: 'file.hash.ssdeep', - type: 'keyword', - }, - 'file.inode': { - category: 'file', - description: 'Inode representing the file in the filesystem.', - example: '256383', - name: 'file.inode', - type: 'keyword', - }, - 'file.mime_type': { - category: 'file', - description: - 'MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.', - name: 'file.mime_type', - type: 'keyword', - }, - 'file.mode': { - category: 'file', - description: 'Mode of the file in octal representation.', - example: '0640', - name: 'file.mode', - type: 'keyword', - }, - 'file.mtime': { - category: 'file', - description: 'Last time the file content was modified.', - name: 'file.mtime', - type: 'date', - }, - 'file.name': { - category: 'file', - description: 'Name of the file including the extension, without the directory.', - example: 'example.png', - name: 'file.name', - type: 'keyword', - }, - 'file.owner': { - category: 'file', - description: "File owner's username.", - example: 'alice', - name: 'file.owner', - type: 'keyword', - }, - 'file.path': { - category: 'file', - description: - 'Full path to the file, including the file name. It should include the drive letter, when appropriate.', - example: '/home/alice/example.png', - name: 'file.path', - type: 'keyword', - }, - 'file.pe.architecture': { - category: 'file', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'file.pe.architecture', - type: 'keyword', - }, - 'file.pe.company': { - category: 'file', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'file.pe.company', - type: 'keyword', - }, - 'file.pe.description': { - category: 'file', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'file.pe.description', - type: 'keyword', - }, - 'file.pe.file_version': { - category: 'file', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'file.pe.file_version', - type: 'keyword', - }, - 'file.pe.imphash': { - category: 'file', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'file.pe.imphash', - type: 'keyword', - }, - 'file.pe.original_file_name': { - category: 'file', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'file.pe.original_file_name', - type: 'keyword', - }, - 'file.pe.product': { - category: 'file', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'file.pe.product', - type: 'keyword', - }, - 'file.size': { - category: 'file', - description: 'File size in bytes. Only relevant when `file.type` is "file".', - example: 16384, - name: 'file.size', - type: 'long', - }, - 'file.target_path': { - category: 'file', - description: 'Target path for symlinks.', - name: 'file.target_path', - type: 'keyword', - }, - 'file.type': { - category: 'file', - description: 'File type (file, dir, or symlink).', - example: 'file', - name: 'file.type', - type: 'keyword', - }, - 'file.uid': { - category: 'file', - description: 'The user ID (UID) or security identifier (SID) of the file owner.', - example: '1001', - name: 'file.uid', - type: 'keyword', - }, - 'file.x509.alternative_names': { - category: 'file', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'file.x509.alternative_names', - type: 'keyword', - }, - 'file.x509.issuer.common_name': { - category: 'file', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'file.x509.issuer.common_name', - type: 'keyword', - }, - 'file.x509.issuer.country': { - category: 'file', - description: 'List of country (C) codes', - example: 'US', - name: 'file.x509.issuer.country', - type: 'keyword', - }, - 'file.x509.issuer.distinguished_name': { - category: 'file', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'file.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'file.x509.issuer.locality': { - category: 'file', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'file.x509.issuer.locality', - type: 'keyword', - }, - 'file.x509.issuer.organization': { - category: 'file', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'file.x509.issuer.organization', - type: 'keyword', - }, - 'file.x509.issuer.organizational_unit': { - category: 'file', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'file.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'file.x509.issuer.state_or_province': { - category: 'file', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'file.x509.issuer.state_or_province', - type: 'keyword', - }, - 'file.x509.not_after': { - category: 'file', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'file.x509.not_after', - type: 'date', - }, - 'file.x509.not_before': { - category: 'file', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'file.x509.not_before', - type: 'date', - }, - 'file.x509.public_key_algorithm': { - category: 'file', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'file.x509.public_key_algorithm', - type: 'keyword', - }, - 'file.x509.public_key_curve': { - category: 'file', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'file.x509.public_key_curve', - type: 'keyword', - }, - 'file.x509.public_key_exponent': { - category: 'file', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'file.x509.public_key_exponent', - type: 'long', - }, - 'file.x509.public_key_size': { - category: 'file', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'file.x509.public_key_size', - type: 'long', - }, - 'file.x509.serial_number': { - category: 'file', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'file.x509.serial_number', - type: 'keyword', - }, - 'file.x509.signature_algorithm': { - category: 'file', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'file.x509.signature_algorithm', - type: 'keyword', - }, - 'file.x509.subject.common_name': { - category: 'file', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'file.x509.subject.common_name', - type: 'keyword', - }, - 'file.x509.subject.country': { - category: 'file', - description: 'List of country (C) code', - example: 'US', - name: 'file.x509.subject.country', - type: 'keyword', - }, - 'file.x509.subject.distinguished_name': { - category: 'file', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'file.x509.subject.distinguished_name', - type: 'keyword', - }, - 'file.x509.subject.locality': { - category: 'file', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'file.x509.subject.locality', - type: 'keyword', - }, - 'file.x509.subject.organization': { - category: 'file', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'file.x509.subject.organization', - type: 'keyword', - }, - 'file.x509.subject.organizational_unit': { - category: 'file', - description: 'List of organizational units (OU) of subject.', - name: 'file.x509.subject.organizational_unit', - type: 'keyword', - }, - 'file.x509.subject.state_or_province': { - category: 'file', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'file.x509.subject.state_or_province', - type: 'keyword', - }, - 'file.x509.version_number': { - category: 'file', - description: 'Version of x509 format.', - example: 3, - name: 'file.x509.version_number', - type: 'keyword', - }, - 'geo.city_name': { - category: 'geo', - description: 'City name.', - example: 'Montreal', - name: 'geo.city_name', - type: 'keyword', - }, - 'geo.continent_code': { - category: 'geo', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'geo.continent_code', - type: 'keyword', - }, - 'geo.continent_name': { - category: 'geo', - description: 'Name of the continent.', - example: 'North America', - name: 'geo.continent_name', - type: 'keyword', - }, - 'geo.country_iso_code': { - category: 'geo', - description: 'Country ISO code.', - example: 'CA', - name: 'geo.country_iso_code', - type: 'keyword', - }, - 'geo.country_name': { - category: 'geo', - description: 'Country name.', - example: 'Canada', - name: 'geo.country_name', - type: 'keyword', - }, - 'geo.location': { - category: 'geo', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'geo.location', - type: 'geo_point', - }, - 'geo.name': { - category: 'geo', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'geo.name', - type: 'keyword', - }, - 'geo.postal_code': { - category: 'geo', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'geo.postal_code', - type: 'keyword', - }, - 'geo.region_iso_code': { - category: 'geo', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'geo.region_iso_code', - type: 'keyword', - }, - 'geo.region_name': { - category: 'geo', - description: 'Region name.', - example: 'Quebec', - name: 'geo.region_name', - type: 'keyword', - }, - 'geo.timezone': { - category: 'geo', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'geo.timezone', - type: 'keyword', - }, - 'group.domain': { - category: 'group', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'group.domain', - type: 'keyword', - }, - 'group.id': { - category: 'group', - description: 'Unique identifier for the group on the system/platform.', - name: 'group.id', - type: 'keyword', - }, - 'group.name': { - category: 'group', - description: 'Name of the group.', - name: 'group.name', - type: 'keyword', - }, - 'hash.md5': { - category: 'hash', - description: 'MD5 hash.', - name: 'hash.md5', - type: 'keyword', - }, - 'hash.sha1': { - category: 'hash', - description: 'SHA1 hash.', - name: 'hash.sha1', - type: 'keyword', - }, - 'hash.sha256': { - category: 'hash', - description: 'SHA256 hash.', - name: 'hash.sha256', - type: 'keyword', - }, - 'hash.sha512': { - category: 'hash', - description: 'SHA512 hash.', - name: 'hash.sha512', - type: 'keyword', - }, - 'hash.ssdeep': { - category: 'hash', - description: 'SSDEEP hash.', - name: 'hash.ssdeep', - type: 'keyword', - }, - 'host.architecture': { - category: 'host', - description: 'Operating system architecture.', - example: 'x86_64', - name: 'host.architecture', - type: 'keyword', - }, - 'host.cpu.usage': { - category: 'host', - description: - 'Percent CPU used which is normalized by the number of CPU cores and it ranges from 0 to 1. Scaling factor: 1000. For example: For a two core host, this value should be the average of the two cores, between 0 and 1.', - name: 'host.cpu.usage', - type: 'scaled_float', - }, - 'host.disk.read.bytes': { - category: 'host', - description: - 'The total number of bytes (gauge) read successfully (aggregated from all disks) since the last metric collection.', - name: 'host.disk.read.bytes', - type: 'long', - }, - 'host.disk.write.bytes': { - category: 'host', - description: - 'The total number of bytes (gauge) written successfully (aggregated from all disks) since the last metric collection.', - name: 'host.disk.write.bytes', - type: 'long', - }, - 'host.domain': { - category: 'host', - description: - "Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider.", - example: 'CONTOSO', - name: 'host.domain', - type: 'keyword', - }, - 'host.geo.city_name': { - category: 'host', - description: 'City name.', - example: 'Montreal', - name: 'host.geo.city_name', - type: 'keyword', - }, - 'host.geo.continent_code': { - category: 'host', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'host.geo.continent_code', - type: 'keyword', - }, - 'host.geo.continent_name': { - category: 'host', - description: 'Name of the continent.', - example: 'North America', - name: 'host.geo.continent_name', - type: 'keyword', - }, - 'host.geo.country_iso_code': { - category: 'host', - description: 'Country ISO code.', - example: 'CA', - name: 'host.geo.country_iso_code', - type: 'keyword', - }, - 'host.geo.country_name': { - category: 'host', - description: 'Country name.', - example: 'Canada', - name: 'host.geo.country_name', - type: 'keyword', - }, - 'host.geo.location': { - category: 'host', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'host.geo.location', - type: 'geo_point', - }, - 'host.geo.name': { - category: 'host', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'host.geo.name', - type: 'keyword', - }, - 'host.geo.postal_code': { - category: 'host', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'host.geo.postal_code', - type: 'keyword', - }, - 'host.geo.region_iso_code': { - category: 'host', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'host.geo.region_iso_code', - type: 'keyword', - }, - 'host.geo.region_name': { - category: 'host', - description: 'Region name.', - example: 'Quebec', - name: 'host.geo.region_name', - type: 'keyword', - }, - 'host.geo.timezone': { - category: 'host', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'host.geo.timezone', - type: 'keyword', - }, - 'host.hostname': { - category: 'host', - description: - 'Hostname of the host. It normally contains what the `hostname` command returns on the host machine.', - name: 'host.hostname', - type: 'keyword', - }, - 'host.id': { - category: 'host', - description: - 'Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`.', - name: 'host.id', - type: 'keyword', - }, - 'host.ip': { - category: 'host', - description: 'Host ip addresses.', - name: 'host.ip', - type: 'ip', - }, - 'host.mac': { - category: 'host', - description: - 'Host MAC addresses. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '["00-00-5E-00-53-23", "00-00-5E-00-53-24"]', - name: 'host.mac', - type: 'keyword', - }, - 'host.name': { - category: 'host', - description: - 'Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.', - name: 'host.name', - type: 'keyword', - }, - 'host.network.egress.bytes': { - category: 'host', - description: - 'The number of bytes (gauge) sent out on all network interfaces by the host since the last metric collection.', - name: 'host.network.egress.bytes', - type: 'long', - }, - 'host.network.egress.packets': { - category: 'host', - description: - 'The number of packets (gauge) sent out on all network interfaces by the host since the last metric collection.', - name: 'host.network.egress.packets', - type: 'long', - }, - 'host.network.ingress.bytes': { - category: 'host', - description: - 'The number of bytes received (gauge) on all network interfaces by the host since the last metric collection.', - name: 'host.network.ingress.bytes', - type: 'long', - }, - 'host.network.ingress.packets': { - category: 'host', - description: - 'The number of packets (gauge) received on all network interfaces by the host since the last metric collection.', - name: 'host.network.ingress.packets', - type: 'long', - }, - 'host.os.family': { - category: 'host', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'host.os.family', - type: 'keyword', - }, - 'host.os.full': { - category: 'host', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'host.os.full', - type: 'keyword', - }, - 'host.os.kernel': { - category: 'host', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'host.os.kernel', - type: 'keyword', - }, - 'host.os.name': { - category: 'host', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'host.os.name', - type: 'keyword', - }, - 'host.os.platform': { - category: 'host', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'host.os.platform', - type: 'keyword', - }, - 'host.os.type': { - category: 'host', - description: - "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", - example: 'macos', - name: 'host.os.type', - type: 'keyword', - }, - 'host.os.version': { - category: 'host', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'host.os.version', - type: 'keyword', - }, - 'host.type': { - category: 'host', - description: - 'Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.', - name: 'host.type', - type: 'keyword', - }, - 'host.uptime': { - category: 'host', - description: 'Seconds the host has been up.', - example: 1325, - name: 'host.uptime', - type: 'long', - }, - 'http.request.body.bytes': { - category: 'http', - description: 'Size in bytes of the request body.', - example: 887, - name: 'http.request.body.bytes', - type: 'long', - format: 'bytes', - }, - 'http.request.body.content': { - category: 'http', - description: 'The full HTTP request body.', - example: 'Hello world', - name: 'http.request.body.content', - type: 'wildcard', - }, - 'http.request.bytes': { - category: 'http', - description: 'Total size in bytes of the request (body and headers).', - example: 1437, - name: 'http.request.bytes', - type: 'long', - format: 'bytes', - }, - 'http.request.id': { - category: 'http', - description: - 'A unique identifier for each HTTP request to correlate logs between clients and servers in transactions. The id may be contained in a non-standard HTTP header, such as `X-Request-ID` or `X-Correlation-ID`.', - example: '123e4567-e89b-12d3-a456-426614174000', - name: 'http.request.id', - type: 'keyword', - }, - 'http.request.method': { - category: 'http', - description: - 'HTTP request method. The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field.', - example: 'POST', - name: 'http.request.method', - type: 'keyword', - }, - 'http.request.mime_type': { - category: 'http', - description: - "Mime type of the body of the request. This value must only be populated based on the content of the request body, not on the `Content-Type` header. Comparing the mime type of a request with the request's Content-Type header can be helpful in detecting threats or misconfigured clients.", - example: 'image/gif', - name: 'http.request.mime_type', - type: 'keyword', - }, - 'http.request.referrer': { - category: 'http', - description: 'Referrer for this HTTP request.', - example: 'https://blog.example.com/', - name: 'http.request.referrer', - type: 'keyword', - }, - 'http.response.body.bytes': { - category: 'http', - description: 'Size in bytes of the response body.', - example: 887, - name: 'http.response.body.bytes', - type: 'long', - format: 'bytes', - }, - 'http.response.body.content': { - category: 'http', - description: 'The full HTTP response body.', - example: 'Hello world', - name: 'http.response.body.content', - type: 'wildcard', - }, - 'http.response.bytes': { - category: 'http', - description: 'Total size in bytes of the response (body and headers).', - example: 1437, - name: 'http.response.bytes', - type: 'long', - format: 'bytes', - }, - 'http.response.mime_type': { - category: 'http', - description: - "Mime type of the body of the response. This value must only be populated based on the content of the response body, not on the `Content-Type` header. Comparing the mime type of a response with the response's Content-Type header can be helpful in detecting misconfigured servers.", - example: 'image/gif', - name: 'http.response.mime_type', - type: 'keyword', - }, - 'http.response.status_code': { - category: 'http', - description: 'HTTP response status code.', - example: 404, - name: 'http.response.status_code', - type: 'long', - format: 'string', - }, - 'http.version': { - category: 'http', - description: 'HTTP version.', - example: 1.1, - name: 'http.version', - type: 'keyword', - }, - 'interface.alias': { - category: 'interface', - description: - 'Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.', - example: 'outside', - name: 'interface.alias', - type: 'keyword', - }, - 'interface.id': { - category: 'interface', - description: 'Interface ID as reported by an observer (typically SNMP interface ID).', - example: 10, - name: 'interface.id', - type: 'keyword', - }, - 'interface.name': { - category: 'interface', - description: 'Interface name as reported by the system.', - example: 'eth0', - name: 'interface.name', - type: 'keyword', - }, - 'log.file.path': { - category: 'log', - description: - "Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. If the event wasn't read from a log file, do not populate this field.", - example: '/var/log/fun-times.log', - name: 'log.file.path', - type: 'keyword', - }, - 'log.level': { - category: 'log', - description: - "Original log level of the log event. If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). Some examples are `warn`, `err`, `i`, `informational`.", - example: 'error', - name: 'log.level', - type: 'keyword', - }, - 'log.logger': { - category: 'log', - description: - 'The name of the logger inside an application. This is usually the name of the class which initialized the logger, or can be a custom name.', - example: 'org.elasticsearch.bootstrap.Bootstrap', - name: 'log.logger', - type: 'keyword', - }, - 'log.origin.file.line': { - category: 'log', - description: - 'The line number of the file containing the source code which originated the log event.', - example: 42, - name: 'log.origin.file.line', - type: 'long', - }, - 'log.origin.file.name': { - category: 'log', - description: - 'The name of the file containing the source code which originated the log event. Note that this field is not meant to capture the log file. The correct field to capture the log file is `log.file.path`.', - example: 'Bootstrap.java', - name: 'log.origin.file.name', - type: 'keyword', - }, - 'log.origin.function': { - category: 'log', - description: 'The name of the function or method which originated the log event.', - example: 'init', - name: 'log.origin.function', - type: 'keyword', - }, - 'log.syslog': { - category: 'log', - description: - 'The Syslog metadata of the event, if the event was transmitted via Syslog. Please see RFCs 5424 or 3164.', - name: 'log.syslog', - type: 'object', - }, - 'log.syslog.facility.code': { - category: 'log', - description: - 'The Syslog numeric facility of the log event, if available. According to RFCs 5424 and 3164, this value should be an integer between 0 and 23.', - example: 23, - name: 'log.syslog.facility.code', - type: 'long', - format: 'string', - }, - 'log.syslog.facility.name': { - category: 'log', - description: 'The Syslog text-based facility of the log event, if available.', - example: 'local7', - name: 'log.syslog.facility.name', - type: 'keyword', - }, - 'log.syslog.priority': { - category: 'log', - description: - 'Syslog numeric priority of the event, if available. According to RFCs 5424 and 3164, the priority is 8 * facility + severity. This number is therefore expected to contain a value between 0 and 191.', - example: 135, - name: 'log.syslog.priority', - type: 'long', - format: 'string', - }, - 'log.syslog.severity.code': { - category: 'log', - description: - "The Syslog numeric severity of the log event, if available. If the event source publishing via Syslog provides a different numeric severity value (e.g. firewall, IDS), your source's numeric severity should go to `event.severity`. If the event source does not specify a distinct severity, you can optionally copy the Syslog severity to `event.severity`.", - example: 3, - name: 'log.syslog.severity.code', - type: 'long', - }, - 'log.syslog.severity.name': { - category: 'log', - description: - "The Syslog numeric severity of the log event, if available. If the event source publishing via Syslog provides a different severity value (e.g. firewall, IDS), your source's text severity should go to `log.level`. If the event source does not specify a distinct severity, you can optionally copy the Syslog severity to `log.level`.", - example: 'Error', - name: 'log.syslog.severity.name', - type: 'keyword', - }, - 'network.application': { - category: 'network', - description: - "When a specific application or service is identified from network connection details (source/dest IPs, ports, certificates, or wire format), this field captures the application's or service's name. For example, the original event identifies the network connection being from a specific web service in a `https` network connection, like `facebook` or `twitter`. The field value must be normalized to lowercase for querying.", - example: 'aim', - name: 'network.application', - type: 'keyword', - }, - 'network.bytes': { - category: 'network', - description: - 'Total bytes transferred in both directions. If `source.bytes` and `destination.bytes` are known, `network.bytes` is their sum.', - example: 368, - name: 'network.bytes', - type: 'long', - format: 'bytes', - }, - 'network.community_id': { - category: 'network', - description: - 'A hash of source and destination IPs and ports, as well as the protocol used in a communication. This is a tool-agnostic standard to identify flows. Learn more at https://github.com/corelight/community-id-spec.', - example: '1:hO+sN4H+MG5MY/8hIrXPqc4ZQz0=', - name: 'network.community_id', - type: 'keyword', - }, - 'network.direction': { - category: 'network', - description: - 'Direction of the network traffic. Recommended values are: * ingress * egress * inbound * outbound * internal * external * unknown When mapping events from a host-based monitoring context, populate this field from the host\'s point of view, using the values "ingress" or "egress". When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers.', - example: 'inbound', - name: 'network.direction', - type: 'keyword', - }, - 'network.forwarded_ip': { - category: 'network', - description: 'Host IP address when the source IP address is the proxy.', - example: '192.1.1.2', - name: 'network.forwarded_ip', - type: 'ip', - }, - 'network.iana_number': { - category: 'network', - description: - 'IANA Protocol Number (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Standardized list of protocols. This aligns well with NetFlow and sFlow related logs which use the IANA Protocol Number.', - example: 6, - name: 'network.iana_number', - type: 'keyword', - }, - 'network.inner': { - category: 'network', - description: - 'Network.inner fields are added in addition to network.vlan fields to describe the innermost VLAN when q-in-q VLAN tagging is present. Allowed fields include vlan.id and vlan.name. Inner vlan fields are typically used when sending traffic with multiple 802.1q encapsulations to a network sensor (e.g. Zeek, Wireshark.)', - name: 'network.inner', - type: 'object', - }, - 'network.inner.vlan.id': { - category: 'network', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'network.inner.vlan.id', - type: 'keyword', - }, - 'network.inner.vlan.name': { - category: 'network', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'network.inner.vlan.name', - type: 'keyword', - }, - 'network.name': { - category: 'network', - description: 'Name given by operators to sections of their network.', - example: 'Guest Wifi', - name: 'network.name', - type: 'keyword', - }, - 'network.packets': { - category: 'network', - description: - 'Total packets transferred in both directions. If `source.packets` and `destination.packets` are known, `network.packets` is their sum.', - example: 24, - name: 'network.packets', - type: 'long', - }, - 'network.protocol': { - category: 'network', - description: - 'In the OSI Model this would be the Application Layer protocol. For example, `http`, `dns`, or `ssh`. The field value must be normalized to lowercase for querying.', - example: 'http', - name: 'network.protocol', - type: 'keyword', - }, - 'network.transport': { - category: 'network', - description: - 'Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) The field value must be normalized to lowercase for querying.', - example: 'tcp', - name: 'network.transport', - type: 'keyword', - }, - 'network.type': { - category: 'network', - description: - 'In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc The field value must be normalized to lowercase for querying.', - example: 'ipv4', - name: 'network.type', - type: 'keyword', - }, - 'network.vlan.id': { - category: 'network', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'network.vlan.id', - type: 'keyword', - }, - 'network.vlan.name': { - category: 'network', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'network.vlan.name', - type: 'keyword', - }, - 'observer.egress': { - category: 'observer', - description: - 'Observer.egress holds information like interface number and name, vlan, and zone information to classify egress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.', - name: 'observer.egress', - type: 'object', - }, - 'observer.egress.interface.alias': { - category: 'observer', - description: - 'Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.', - example: 'outside', - name: 'observer.egress.interface.alias', - type: 'keyword', - }, - 'observer.egress.interface.id': { - category: 'observer', - description: 'Interface ID as reported by an observer (typically SNMP interface ID).', - example: 10, - name: 'observer.egress.interface.id', - type: 'keyword', - }, - 'observer.egress.interface.name': { - category: 'observer', - description: 'Interface name as reported by the system.', - example: 'eth0', - name: 'observer.egress.interface.name', - type: 'keyword', - }, - 'observer.egress.vlan.id': { - category: 'observer', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'observer.egress.vlan.id', - type: 'keyword', - }, - 'observer.egress.vlan.name': { - category: 'observer', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'observer.egress.vlan.name', - type: 'keyword', - }, - 'observer.egress.zone': { - category: 'observer', - description: - 'Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc.', - example: 'Public_Internet', - name: 'observer.egress.zone', - type: 'keyword', - }, - 'observer.geo.city_name': { - category: 'observer', - description: 'City name.', - example: 'Montreal', - name: 'observer.geo.city_name', - type: 'keyword', - }, - 'observer.geo.continent_code': { - category: 'observer', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'observer.geo.continent_code', - type: 'keyword', - }, - 'observer.geo.continent_name': { - category: 'observer', - description: 'Name of the continent.', - example: 'North America', - name: 'observer.geo.continent_name', - type: 'keyword', - }, - 'observer.geo.country_iso_code': { - category: 'observer', - description: 'Country ISO code.', - example: 'CA', - name: 'observer.geo.country_iso_code', - type: 'keyword', - }, - 'observer.geo.country_name': { - category: 'observer', - description: 'Country name.', - example: 'Canada', - name: 'observer.geo.country_name', - type: 'keyword', - }, - 'observer.geo.location': { - category: 'observer', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'observer.geo.location', - type: 'geo_point', - }, - 'observer.geo.name': { - category: 'observer', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'observer.geo.name', - type: 'keyword', - }, - 'observer.geo.postal_code': { - category: 'observer', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'observer.geo.postal_code', - type: 'keyword', - }, - 'observer.geo.region_iso_code': { - category: 'observer', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'observer.geo.region_iso_code', - type: 'keyword', - }, - 'observer.geo.region_name': { - category: 'observer', - description: 'Region name.', - example: 'Quebec', - name: 'observer.geo.region_name', - type: 'keyword', - }, - 'observer.geo.timezone': { - category: 'observer', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'observer.geo.timezone', - type: 'keyword', - }, - 'observer.hostname': { - category: 'observer', - description: 'Hostname of the observer.', - name: 'observer.hostname', - type: 'keyword', - }, - 'observer.ingress': { - category: 'observer', - description: - 'Observer.ingress holds information like interface number and name, vlan, and zone information to classify ingress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.', - name: 'observer.ingress', - type: 'object', - }, - 'observer.ingress.interface.alias': { - category: 'observer', - description: - 'Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.', - example: 'outside', - name: 'observer.ingress.interface.alias', - type: 'keyword', - }, - 'observer.ingress.interface.id': { - category: 'observer', - description: 'Interface ID as reported by an observer (typically SNMP interface ID).', - example: 10, - name: 'observer.ingress.interface.id', - type: 'keyword', - }, - 'observer.ingress.interface.name': { - category: 'observer', - description: 'Interface name as reported by the system.', - example: 'eth0', - name: 'observer.ingress.interface.name', - type: 'keyword', - }, - 'observer.ingress.vlan.id': { - category: 'observer', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'observer.ingress.vlan.id', - type: 'keyword', - }, - 'observer.ingress.vlan.name': { - category: 'observer', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'observer.ingress.vlan.name', - type: 'keyword', - }, - 'observer.ingress.zone': { - category: 'observer', - description: - 'Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc.', - example: 'DMZ', - name: 'observer.ingress.zone', - type: 'keyword', - }, - 'observer.ip': { - category: 'observer', - description: 'IP addresses of the observer.', - name: 'observer.ip', - type: 'ip', - }, - 'observer.mac': { - category: 'observer', - description: - 'MAC addresses of the observer. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '["00-00-5E-00-53-23", "00-00-5E-00-53-24"]', - name: 'observer.mac', - type: 'keyword', - }, - 'observer.name': { - category: 'observer', - description: - 'Custom name of the observer. This is a name that can be given to an observer. This can be helpful for example if multiple firewalls of the same model are used in an organization. If no custom name is needed, the field can be left empty.', - example: '1_proxySG', - name: 'observer.name', - type: 'keyword', - }, - 'observer.os.family': { - category: 'observer', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'observer.os.family', - type: 'keyword', - }, - 'observer.os.full': { - category: 'observer', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'observer.os.full', - type: 'keyword', - }, - 'observer.os.kernel': { - category: 'observer', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'observer.os.kernel', - type: 'keyword', - }, - 'observer.os.name': { - category: 'observer', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'observer.os.name', - type: 'keyword', - }, - 'observer.os.platform': { - category: 'observer', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'observer.os.platform', - type: 'keyword', - }, - 'observer.os.type': { - category: 'observer', - description: - "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", - example: 'macos', - name: 'observer.os.type', - type: 'keyword', - }, - 'observer.os.version': { - category: 'observer', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'observer.os.version', - type: 'keyword', - }, - 'observer.product': { - category: 'observer', - description: 'The product name of the observer.', - example: 's200', - name: 'observer.product', - type: 'keyword', - }, - 'observer.serial_number': { - category: 'observer', - description: 'Observer serial number.', - name: 'observer.serial_number', - type: 'keyword', - }, - 'observer.type': { - category: 'observer', - description: - 'The type of the observer the data is coming from. There is no predefined list of observer types. Some examples are `forwarder`, `firewall`, `ids`, `ips`, `proxy`, `poller`, `sensor`, `APM server`.', - example: 'firewall', - name: 'observer.type', - type: 'keyword', - }, - 'observer.vendor': { - category: 'observer', - description: 'Vendor name of the observer.', - example: 'Symantec', - name: 'observer.vendor', - type: 'keyword', - }, - 'observer.version': { - category: 'observer', - description: 'Observer version.', - name: 'observer.version', - type: 'keyword', - }, - 'orchestrator.api_version': { - category: 'orchestrator', - description: 'API version being used to carry out the action', - example: 'v1beta1', - name: 'orchestrator.api_version', - type: 'keyword', - }, - 'orchestrator.cluster.name': { - category: 'orchestrator', - description: 'Name of the cluster.', - name: 'orchestrator.cluster.name', - type: 'keyword', - }, - 'orchestrator.cluster.url': { - category: 'orchestrator', - description: 'URL of the API used to manage the cluster.', - name: 'orchestrator.cluster.url', - type: 'keyword', - }, - 'orchestrator.cluster.version': { - category: 'orchestrator', - description: 'The version of the cluster.', - name: 'orchestrator.cluster.version', - type: 'keyword', - }, - 'orchestrator.namespace': { - category: 'orchestrator', - description: 'Namespace in which the action is taking place.', - example: 'kube-system', - name: 'orchestrator.namespace', - type: 'keyword', - }, - 'orchestrator.organization': { - category: 'orchestrator', - description: 'Organization affected by the event (for multi-tenant orchestrator setups).', - example: 'elastic', - name: 'orchestrator.organization', - type: 'keyword', - }, - 'orchestrator.resource.name': { - category: 'orchestrator', - description: 'Name of the resource being acted upon.', - example: 'test-pod-cdcws', - name: 'orchestrator.resource.name', - type: 'keyword', - }, - 'orchestrator.resource.type': { - category: 'orchestrator', - description: 'Type of resource being acted upon.', - example: 'service', - name: 'orchestrator.resource.type', - type: 'keyword', - }, - 'orchestrator.type': { - category: 'orchestrator', - description: 'Orchestrator cluster type (e.g. kubernetes, nomad or cloudfoundry).', - example: 'kubernetes', - name: 'orchestrator.type', - type: 'keyword', - }, - 'organization.id': { - category: 'organization', - description: 'Unique identifier for the organization.', - name: 'organization.id', - type: 'keyword', - }, - 'organization.name': { - category: 'organization', - description: 'Organization name.', - name: 'organization.name', - type: 'keyword', - }, - 'os.family': { - category: 'os', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'os.family', - type: 'keyword', - }, - 'os.full': { - category: 'os', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'os.full', - type: 'keyword', - }, - 'os.kernel': { - category: 'os', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'os.kernel', - type: 'keyword', - }, - 'os.name': { - category: 'os', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'os.name', - type: 'keyword', - }, - 'os.platform': { - category: 'os', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'os.platform', - type: 'keyword', - }, - 'os.type': { - category: 'os', - description: - "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", - example: 'macos', - name: 'os.type', - type: 'keyword', - }, - 'os.version': { - category: 'os', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'os.version', - type: 'keyword', - }, - 'package.architecture': { - category: 'package', - description: 'Package architecture.', - example: 'x86_64', - name: 'package.architecture', - type: 'keyword', - }, - 'package.build_version': { - category: 'package', - description: - 'Additional information about the build version of the installed package. For example use the commit SHA of a non-released package.', - example: '36f4f7e89dd61b0988b12ee000b98966867710cd', - name: 'package.build_version', - type: 'keyword', - }, - 'package.checksum': { - category: 'package', - description: 'Checksum of the installed package for verification.', - example: '68b329da9893e34099c7d8ad5cb9c940', - name: 'package.checksum', - type: 'keyword', - }, - 'package.description': { - category: 'package', - description: 'Description of the package.', - example: 'Open source programming language to build simple/reliable/efficient software.', - name: 'package.description', - type: 'keyword', - }, - 'package.install_scope': { - category: 'package', - description: 'Indicating how the package was installed, e.g. user-local, global.', - example: 'global', - name: 'package.install_scope', - type: 'keyword', - }, - 'package.installed': { - category: 'package', - description: 'Time when package was installed.', - name: 'package.installed', - type: 'date', - }, - 'package.license': { - category: 'package', - description: - 'License under which the package was released. Use a short name, e.g. the license identifier from SPDX License List where possible (https://spdx.org/licenses/).', - example: 'Apache License 2.0', - name: 'package.license', - type: 'keyword', - }, - 'package.name': { - category: 'package', - description: 'Package name', - example: 'go', - name: 'package.name', - type: 'keyword', - }, - 'package.path': { - category: 'package', - description: 'Path where the package is installed.', - example: '/usr/local/Cellar/go/1.12.9/', - name: 'package.path', - type: 'keyword', - }, - 'package.reference': { - category: 'package', - description: 'Home page or reference URL of the software in this package, if available.', - example: 'https://golang.org', - name: 'package.reference', - type: 'keyword', - }, - 'package.size': { - category: 'package', - description: 'Package size in bytes.', - example: 62231, - name: 'package.size', - type: 'long', - format: 'string', - }, - 'package.type': { - category: 'package', - description: - 'Type of package. This should contain the package file type, rather than the package manager name. Examples: rpm, dpkg, brew, npm, gem, nupkg, jar.', - example: 'rpm', - name: 'package.type', - type: 'keyword', - }, - 'package.version': { - category: 'package', - description: 'Package version', - example: '1.12.9', - name: 'package.version', - type: 'keyword', - }, - 'pe.architecture': { - category: 'pe', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'pe.architecture', - type: 'keyword', - }, - 'pe.company': { - category: 'pe', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'pe.company', - type: 'keyword', - }, - 'pe.description': { - category: 'pe', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'pe.description', - type: 'keyword', - }, - 'pe.file_version': { - category: 'pe', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'pe.file_version', - type: 'keyword', - }, - 'pe.imphash': { - category: 'pe', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'pe.imphash', - type: 'keyword', - }, - 'pe.original_file_name': { - category: 'pe', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'pe.original_file_name', - type: 'keyword', - }, - 'pe.product': { - category: 'pe', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'pe.product', - type: 'keyword', - }, - 'process.args': { - category: 'process', - description: - 'Array of process arguments, starting with the absolute path to the executable. May be filtered to protect sensitive information.', - example: '["/usr/bin/ssh", "-l", "user", "10.0.0.16"]', - name: 'process.args', - type: 'keyword', - }, - 'process.args_count': { - category: 'process', - description: - 'Length of the process.args array. This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity.', - example: 4, - name: 'process.args_count', - type: 'long', - }, - 'process.code_signature.digest_algorithm': { - category: 'process', - description: - 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', - example: 'sha256', - name: 'process.code_signature.digest_algorithm', - type: 'keyword', - }, - 'process.code_signature.exists': { - category: 'process', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'process.code_signature.exists', - type: 'boolean', - }, - 'process.code_signature.signing_id': { - category: 'process', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'process.code_signature.signing_id', - type: 'keyword', - }, - 'process.code_signature.status': { - category: 'process', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'process.code_signature.status', - type: 'keyword', - }, - 'process.code_signature.subject_name': { - category: 'process', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'process.code_signature.subject_name', - type: 'keyword', - }, - 'process.code_signature.team_id': { - category: 'process', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'process.code_signature.team_id', - type: 'keyword', - }, - 'process.code_signature.timestamp': { - category: 'process', - description: 'Date and time when the code signature was generated and signed.', - example: '2021-01-01T12:10:30Z', - name: 'process.code_signature.timestamp', - type: 'date', - }, - 'process.code_signature.trusted': { - category: 'process', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'process.code_signature.trusted', - type: 'boolean', - }, - 'process.code_signature.valid': { - category: 'process', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'process.code_signature.valid', - type: 'boolean', - }, - 'process.command_line': { - category: 'process', - description: - 'Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information.', - example: '/usr/bin/ssh -l user 10.0.0.16', - name: 'process.command_line', - type: 'wildcard', - }, - 'process.elf.architecture': { - category: 'process', - description: 'Machine architecture of the ELF file.', - example: 'x86-64', - name: 'process.elf.architecture', - type: 'keyword', - }, - 'process.elf.byte_order': { - category: 'process', - description: 'Byte sequence of ELF file.', - example: 'Little Endian', - name: 'process.elf.byte_order', - type: 'keyword', - }, - 'process.elf.cpu_type': { - category: 'process', - description: 'CPU type of the ELF file.', - example: 'Intel', - name: 'process.elf.cpu_type', - type: 'keyword', - }, - 'process.elf.creation_date': { - category: 'process', - description: - "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", - name: 'process.elf.creation_date', - type: 'date', - }, - 'process.elf.exports': { - category: 'process', - description: 'List of exported element names and types.', - name: 'process.elf.exports', - type: 'flattened', - }, - 'process.elf.header.abi_version': { - category: 'process', - description: 'Version of the ELF Application Binary Interface (ABI).', - name: 'process.elf.header.abi_version', - type: 'keyword', - }, - 'process.elf.header.class': { - category: 'process', - description: 'Header class of the ELF file.', - name: 'process.elf.header.class', - type: 'keyword', - }, - 'process.elf.header.data': { - category: 'process', - description: 'Data table of the ELF header.', - name: 'process.elf.header.data', - type: 'keyword', - }, - 'process.elf.header.entrypoint': { - category: 'process', - description: 'Header entrypoint of the ELF file.', - name: 'process.elf.header.entrypoint', - type: 'long', - format: 'string', - }, - 'process.elf.header.object_version': { - category: 'process', - description: '"0x1" for original ELF files.', - name: 'process.elf.header.object_version', - type: 'keyword', - }, - 'process.elf.header.os_abi': { - category: 'process', - description: 'Application Binary Interface (ABI) of the Linux OS.', - name: 'process.elf.header.os_abi', - type: 'keyword', - }, - 'process.elf.header.type': { - category: 'process', - description: 'Header type of the ELF file.', - name: 'process.elf.header.type', - type: 'keyword', - }, - 'process.elf.header.version': { - category: 'process', - description: 'Version of the ELF header.', - name: 'process.elf.header.version', - type: 'keyword', - }, - 'process.elf.imports': { - category: 'process', - description: 'List of imported element names and types.', - name: 'process.elf.imports', - type: 'flattened', - }, - 'process.elf.sections': { - category: 'process', - description: - 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', - name: 'process.elf.sections', - type: 'nested', - }, - 'process.elf.sections.chi2': { - category: 'process', - description: 'Chi-square probability distribution of the section.', - name: 'process.elf.sections.chi2', - type: 'long', - format: 'number', - }, - 'process.elf.sections.entropy': { - category: 'process', - description: 'Shannon entropy calculation from the section.', - name: 'process.elf.sections.entropy', - type: 'long', - format: 'number', - }, - 'process.elf.sections.flags': { - category: 'process', - description: 'ELF Section List flags.', - name: 'process.elf.sections.flags', - type: 'keyword', - }, - 'process.elf.sections.name': { - category: 'process', - description: 'ELF Section List name.', - name: 'process.elf.sections.name', - type: 'keyword', - }, - 'process.elf.sections.physical_offset': { - category: 'process', - description: 'ELF Section List offset.', - name: 'process.elf.sections.physical_offset', - type: 'keyword', - }, - 'process.elf.sections.physical_size': { - category: 'process', - description: 'ELF Section List physical size.', - name: 'process.elf.sections.physical_size', - type: 'long', - format: 'bytes', - }, - 'process.elf.sections.type': { - category: 'process', - description: 'ELF Section List type.', - name: 'process.elf.sections.type', - type: 'keyword', - }, - 'process.elf.sections.virtual_address': { - category: 'process', - description: 'ELF Section List virtual address.', - name: 'process.elf.sections.virtual_address', - type: 'long', - format: 'string', - }, - 'process.elf.sections.virtual_size': { - category: 'process', - description: 'ELF Section List virtual size.', - name: 'process.elf.sections.virtual_size', - type: 'long', - format: 'string', - }, - 'process.elf.segments': { - category: 'process', - description: - 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', - name: 'process.elf.segments', - type: 'nested', - }, - 'process.elf.segments.sections': { - category: 'process', - description: 'ELF object segment sections.', - name: 'process.elf.segments.sections', - type: 'keyword', - }, - 'process.elf.segments.type': { - category: 'process', - description: 'ELF object segment type.', - name: 'process.elf.segments.type', - type: 'keyword', - }, - 'process.elf.shared_libraries': { - category: 'process', - description: 'List of shared libraries used by this ELF object.', - name: 'process.elf.shared_libraries', - type: 'keyword', - }, - 'process.elf.telfhash': { - category: 'process', - description: 'telfhash symbol hash for ELF file.', - name: 'process.elf.telfhash', - type: 'keyword', - }, - 'process.end': { - category: 'process', - description: 'The time the process ended.', - example: '2016-05-23T08:05:34.853Z', - name: 'process.end', - type: 'date', - }, - 'process.entity_id': { - category: 'process', - description: - 'Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts.', - example: 'c2c455d9f99375d', - name: 'process.entity_id', - type: 'keyword', - }, - 'process.executable': { - category: 'process', - description: 'Absolute path to the process executable.', - example: '/usr/bin/ssh', - name: 'process.executable', - type: 'keyword', - }, - 'process.exit_code': { - category: 'process', - description: - 'The exit code of the process, if this is a termination event. The field should be absent if there is no exit code for the event (e.g. process start).', - example: 137, - name: 'process.exit_code', - type: 'long', - }, - 'process.hash.md5': { - category: 'process', - description: 'MD5 hash.', - name: 'process.hash.md5', - type: 'keyword', - }, - 'process.hash.sha1': { - category: 'process', - description: 'SHA1 hash.', - name: 'process.hash.sha1', - type: 'keyword', - }, - 'process.hash.sha256': { - category: 'process', - description: 'SHA256 hash.', - name: 'process.hash.sha256', - type: 'keyword', - }, - 'process.hash.sha512': { - category: 'process', - description: 'SHA512 hash.', - name: 'process.hash.sha512', - type: 'keyword', - }, - 'process.hash.ssdeep': { - category: 'process', - description: 'SSDEEP hash.', - name: 'process.hash.ssdeep', - type: 'keyword', - }, - 'process.name': { - category: 'process', - description: 'Process name. Sometimes called program name or similar.', - example: 'ssh', - name: 'process.name', - type: 'keyword', - }, - 'process.parent.args': { - category: 'process', - description: - 'Array of process arguments, starting with the absolute path to the executable. May be filtered to protect sensitive information.', - example: '["/usr/bin/ssh", "-l", "user", "10.0.0.16"]', - name: 'process.parent.args', - type: 'keyword', - }, - 'process.parent.args_count': { - category: 'process', - description: - 'Length of the process.args array. This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity.', - example: 4, - name: 'process.parent.args_count', - type: 'long', - }, - 'process.parent.code_signature.digest_algorithm': { - category: 'process', - description: - 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', - example: 'sha256', - name: 'process.parent.code_signature.digest_algorithm', - type: 'keyword', - }, - 'process.parent.code_signature.exists': { - category: 'process', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'process.parent.code_signature.exists', - type: 'boolean', - }, - 'process.parent.code_signature.signing_id': { - category: 'process', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'process.parent.code_signature.signing_id', - type: 'keyword', - }, - 'process.parent.code_signature.status': { - category: 'process', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'process.parent.code_signature.status', - type: 'keyword', - }, - 'process.parent.code_signature.subject_name': { - category: 'process', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'process.parent.code_signature.subject_name', - type: 'keyword', - }, - 'process.parent.code_signature.team_id': { - category: 'process', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'process.parent.code_signature.team_id', - type: 'keyword', - }, - 'process.parent.code_signature.timestamp': { - category: 'process', - description: 'Date and time when the code signature was generated and signed.', - example: '2021-01-01T12:10:30Z', - name: 'process.parent.code_signature.timestamp', - type: 'date', - }, - 'process.parent.code_signature.trusted': { - category: 'process', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'process.parent.code_signature.trusted', - type: 'boolean', - }, - 'process.parent.code_signature.valid': { - category: 'process', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'process.parent.code_signature.valid', - type: 'boolean', - }, - 'process.parent.command_line': { - category: 'process', - description: - 'Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information.', - example: '/usr/bin/ssh -l user 10.0.0.16', - name: 'process.parent.command_line', - type: 'wildcard', - }, - 'process.parent.elf.architecture': { - category: 'process', - description: 'Machine architecture of the ELF file.', - example: 'x86-64', - name: 'process.parent.elf.architecture', - type: 'keyword', - }, - 'process.parent.elf.byte_order': { - category: 'process', - description: 'Byte sequence of ELF file.', - example: 'Little Endian', - name: 'process.parent.elf.byte_order', - type: 'keyword', - }, - 'process.parent.elf.cpu_type': { - category: 'process', - description: 'CPU type of the ELF file.', - example: 'Intel', - name: 'process.parent.elf.cpu_type', - type: 'keyword', - }, - 'process.parent.elf.creation_date': { - category: 'process', - description: - "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", - name: 'process.parent.elf.creation_date', - type: 'date', - }, - 'process.parent.elf.exports': { - category: 'process', - description: 'List of exported element names and types.', - name: 'process.parent.elf.exports', - type: 'flattened', - }, - 'process.parent.elf.header.abi_version': { - category: 'process', - description: 'Version of the ELF Application Binary Interface (ABI).', - name: 'process.parent.elf.header.abi_version', - type: 'keyword', - }, - 'process.parent.elf.header.class': { - category: 'process', - description: 'Header class of the ELF file.', - name: 'process.parent.elf.header.class', - type: 'keyword', - }, - 'process.parent.elf.header.data': { - category: 'process', - description: 'Data table of the ELF header.', - name: 'process.parent.elf.header.data', - type: 'keyword', - }, - 'process.parent.elf.header.entrypoint': { - category: 'process', - description: 'Header entrypoint of the ELF file.', - name: 'process.parent.elf.header.entrypoint', - type: 'long', - format: 'string', - }, - 'process.parent.elf.header.object_version': { - category: 'process', - description: '"0x1" for original ELF files.', - name: 'process.parent.elf.header.object_version', - type: 'keyword', - }, - 'process.parent.elf.header.os_abi': { - category: 'process', - description: 'Application Binary Interface (ABI) of the Linux OS.', - name: 'process.parent.elf.header.os_abi', - type: 'keyword', - }, - 'process.parent.elf.header.type': { - category: 'process', - description: 'Header type of the ELF file.', - name: 'process.parent.elf.header.type', - type: 'keyword', - }, - 'process.parent.elf.header.version': { - category: 'process', - description: 'Version of the ELF header.', - name: 'process.parent.elf.header.version', - type: 'keyword', - }, - 'process.parent.elf.imports': { - category: 'process', - description: 'List of imported element names and types.', - name: 'process.parent.elf.imports', - type: 'flattened', - }, - 'process.parent.elf.sections': { - category: 'process', - description: - 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', - name: 'process.parent.elf.sections', - type: 'nested', - }, - 'process.parent.elf.sections.chi2': { - category: 'process', - description: 'Chi-square probability distribution of the section.', - name: 'process.parent.elf.sections.chi2', - type: 'long', - format: 'number', - }, - 'process.parent.elf.sections.entropy': { - category: 'process', - description: 'Shannon entropy calculation from the section.', - name: 'process.parent.elf.sections.entropy', - type: 'long', - format: 'number', - }, - 'process.parent.elf.sections.flags': { - category: 'process', - description: 'ELF Section List flags.', - name: 'process.parent.elf.sections.flags', - type: 'keyword', - }, - 'process.parent.elf.sections.name': { - category: 'process', - description: 'ELF Section List name.', - name: 'process.parent.elf.sections.name', - type: 'keyword', - }, - 'process.parent.elf.sections.physical_offset': { - category: 'process', - description: 'ELF Section List offset.', - name: 'process.parent.elf.sections.physical_offset', - type: 'keyword', - }, - 'process.parent.elf.sections.physical_size': { - category: 'process', - description: 'ELF Section List physical size.', - name: 'process.parent.elf.sections.physical_size', - type: 'long', - format: 'bytes', - }, - 'process.parent.elf.sections.type': { - category: 'process', - description: 'ELF Section List type.', - name: 'process.parent.elf.sections.type', - type: 'keyword', - }, - 'process.parent.elf.sections.virtual_address': { - category: 'process', - description: 'ELF Section List virtual address.', - name: 'process.parent.elf.sections.virtual_address', - type: 'long', - format: 'string', - }, - 'process.parent.elf.sections.virtual_size': { - category: 'process', - description: 'ELF Section List virtual size.', - name: 'process.parent.elf.sections.virtual_size', - type: 'long', - format: 'string', - }, - 'process.parent.elf.segments': { - category: 'process', - description: - 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', - name: 'process.parent.elf.segments', - type: 'nested', - }, - 'process.parent.elf.segments.sections': { - category: 'process', - description: 'ELF object segment sections.', - name: 'process.parent.elf.segments.sections', - type: 'keyword', - }, - 'process.parent.elf.segments.type': { - category: 'process', - description: 'ELF object segment type.', - name: 'process.parent.elf.segments.type', - type: 'keyword', - }, - 'process.parent.elf.shared_libraries': { - category: 'process', - description: 'List of shared libraries used by this ELF object.', - name: 'process.parent.elf.shared_libraries', - type: 'keyword', - }, - 'process.parent.elf.telfhash': { - category: 'process', - description: 'telfhash symbol hash for ELF file.', - name: 'process.parent.elf.telfhash', - type: 'keyword', - }, - 'process.parent.end': { - category: 'process', - description: 'The time the process ended.', - example: '2016-05-23T08:05:34.853Z', - name: 'process.parent.end', - type: 'date', - }, - 'process.parent.entity_id': { - category: 'process', - description: - 'Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts.', - example: 'c2c455d9f99375d', - name: 'process.parent.entity_id', - type: 'keyword', - }, - 'process.parent.executable': { - category: 'process', - description: 'Absolute path to the process executable.', - example: '/usr/bin/ssh', - name: 'process.parent.executable', - type: 'keyword', - }, - 'process.parent.exit_code': { - category: 'process', - description: - 'The exit code of the process, if this is a termination event. The field should be absent if there is no exit code for the event (e.g. process start).', - example: 137, - name: 'process.parent.exit_code', - type: 'long', - }, - 'process.parent.hash.md5': { - category: 'process', - description: 'MD5 hash.', - name: 'process.parent.hash.md5', - type: 'keyword', - }, - 'process.parent.hash.sha1': { - category: 'process', - description: 'SHA1 hash.', - name: 'process.parent.hash.sha1', - type: 'keyword', - }, - 'process.parent.hash.sha256': { - category: 'process', - description: 'SHA256 hash.', - name: 'process.parent.hash.sha256', - type: 'keyword', - }, - 'process.parent.hash.sha512': { - category: 'process', - description: 'SHA512 hash.', - name: 'process.parent.hash.sha512', - type: 'keyword', - }, - 'process.parent.hash.ssdeep': { - category: 'process', - description: 'SSDEEP hash.', - name: 'process.parent.hash.ssdeep', - type: 'keyword', - }, - 'process.parent.name': { - category: 'process', - description: 'Process name. Sometimes called program name or similar.', - example: 'ssh', - name: 'process.parent.name', - type: 'keyword', - }, - 'process.parent.pe.architecture': { - category: 'process', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'process.parent.pe.architecture', - type: 'keyword', - }, - 'process.parent.pe.company': { - category: 'process', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'process.parent.pe.company', - type: 'keyword', - }, - 'process.parent.pe.description': { - category: 'process', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'process.parent.pe.description', - type: 'keyword', - }, - 'process.parent.pe.file_version': { - category: 'process', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'process.parent.pe.file_version', - type: 'keyword', - }, - 'process.parent.pe.imphash': { - category: 'process', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'process.parent.pe.imphash', - type: 'keyword', - }, - 'process.parent.pe.original_file_name': { - category: 'process', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'process.parent.pe.original_file_name', - type: 'keyword', - }, - 'process.parent.pe.product': { - category: 'process', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'process.parent.pe.product', - type: 'keyword', - }, - 'process.parent.pgid': { - category: 'process', - description: 'Identifier of the group of processes the process belongs to.', - name: 'process.parent.pgid', - type: 'long', - format: 'string', - }, - 'process.parent.pid': { - category: 'process', - description: 'Process id.', - example: 4242, - name: 'process.parent.pid', - type: 'long', - format: 'string', - }, - 'process.parent.start': { - category: 'process', - description: 'The time the process started.', - example: '2016-05-23T08:05:34.853Z', - name: 'process.parent.start', - type: 'date', - }, - 'process.parent.thread.id': { - category: 'process', - description: 'Thread ID.', - example: 4242, - name: 'process.parent.thread.id', - type: 'long', - format: 'string', - }, - 'process.parent.thread.name': { - category: 'process', - description: 'Thread name.', - example: 'thread-0', - name: 'process.parent.thread.name', - type: 'keyword', - }, - 'process.parent.title': { - category: 'process', - description: - 'Process title. The proctitle, some times the same as process name. Can also be different: for example a browser setting its title to the web page currently opened.', - name: 'process.parent.title', - type: 'keyword', - }, - 'process.parent.uptime': { - category: 'process', - description: 'Seconds the process has been up.', - example: 1325, - name: 'process.parent.uptime', - type: 'long', - }, - 'process.parent.working_directory': { - category: 'process', - description: 'The working directory of the process.', - example: '/home/alice', - name: 'process.parent.working_directory', - type: 'keyword', - }, - 'process.pe.architecture': { - category: 'process', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'process.pe.architecture', - type: 'keyword', - }, - 'process.pe.company': { - category: 'process', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'process.pe.company', - type: 'keyword', - }, - 'process.pe.description': { - category: 'process', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'process.pe.description', - type: 'keyword', - }, - 'process.pe.file_version': { - category: 'process', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'process.pe.file_version', - type: 'keyword', - }, - 'process.pe.imphash': { - category: 'process', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'process.pe.imphash', - type: 'keyword', - }, - 'process.pe.original_file_name': { - category: 'process', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'process.pe.original_file_name', - type: 'keyword', - }, - 'process.pe.product': { - category: 'process', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'process.pe.product', - type: 'keyword', - }, - 'process.pgid': { - category: 'process', - description: 'Identifier of the group of processes the process belongs to.', - name: 'process.pgid', - type: 'long', - format: 'string', - }, - 'process.pid': { - category: 'process', - description: 'Process id.', - example: 4242, - name: 'process.pid', - type: 'long', - format: 'string', - }, - 'process.start': { - category: 'process', - description: 'The time the process started.', - example: '2016-05-23T08:05:34.853Z', - name: 'process.start', - type: 'date', - }, - 'process.thread.id': { - category: 'process', - description: 'Thread ID.', - example: 4242, - name: 'process.thread.id', - type: 'long', - format: 'string', - }, - 'process.thread.name': { - category: 'process', - description: 'Thread name.', - example: 'thread-0', - name: 'process.thread.name', - type: 'keyword', - }, - 'process.title': { - category: 'process', - description: - 'Process title. The proctitle, some times the same as process name. Can also be different: for example a browser setting its title to the web page currently opened.', - name: 'process.title', - type: 'keyword', - }, - 'process.uptime': { - category: 'process', - description: 'Seconds the process has been up.', - example: 1325, - name: 'process.uptime', - type: 'long', - }, - 'process.working_directory': { - category: 'process', - description: 'The working directory of the process.', - example: '/home/alice', - name: 'process.working_directory', - type: 'keyword', - }, - 'registry.data.bytes': { - category: 'registry', - description: - 'Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.', - example: 'ZQBuAC0AVQBTAAAAZQBuAAAAAAA=', - name: 'registry.data.bytes', - type: 'keyword', - }, - 'registry.data.strings': { - category: 'registry', - description: - 'Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`).', - example: '["C:\\rta\\red_ttp\\bin\\myapp.exe"]', - name: 'registry.data.strings', - type: 'wildcard', - }, - 'registry.data.type': { - category: 'registry', - description: 'Standard registry type for encoding contents', - example: 'REG_SZ', - name: 'registry.data.type', - type: 'keyword', - }, - 'registry.hive': { - category: 'registry', - description: 'Abbreviated name for the hive.', - example: 'HKLM', - name: 'registry.hive', - type: 'keyword', - }, - 'registry.key': { - category: 'registry', - description: 'Hive-relative path of keys.', - example: - 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe', - name: 'registry.key', - type: 'keyword', - }, - 'registry.path': { - category: 'registry', - description: 'Full path, including hive, key and value', - example: - 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger', - name: 'registry.path', - type: 'keyword', - }, - 'registry.value': { - category: 'registry', - description: 'Name of the value written.', - example: 'Debugger', - name: 'registry.value', - type: 'keyword', - }, - 'related.hash': { - category: 'related', - description: - "All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search).", - name: 'related.hash', - type: 'keyword', - }, - 'related.hosts': { - category: 'related', - description: - 'All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases.', - name: 'related.hosts', - type: 'keyword', - }, - 'related.ip': { - category: 'related', - description: 'All of the IPs seen on your event.', - name: 'related.ip', - type: 'ip', - }, - 'related.user': { - category: 'related', - description: 'All the user names or other user identifiers seen on the event.', - name: 'related.user', - type: 'keyword', - }, - 'rule.author': { - category: 'rule', - description: - 'Name, organization, or pseudonym of the author or authors who created the rule used to generate this event.', - example: '["Star-Lord"]', - name: 'rule.author', - type: 'keyword', - }, - 'rule.category': { - category: 'rule', - description: - 'A categorization value keyword used by the entity using the rule for detection of this event.', - example: 'Attempted Information Leak', - name: 'rule.category', - type: 'keyword', - }, - 'rule.description': { - category: 'rule', - description: 'The description of the rule generating the event.', - example: 'Block requests to public DNS over HTTPS / TLS protocols', - name: 'rule.description', - type: 'keyword', - }, - 'rule.id': { - category: 'rule', - description: - 'A rule ID that is unique within the scope of an agent, observer, or other entity using the rule for detection of this event.', - example: 101, - name: 'rule.id', - type: 'keyword', - }, - 'rule.license': { - category: 'rule', - description: - 'Name of the license under which the rule used to generate this event is made available.', - example: 'Apache 2.0', - name: 'rule.license', - type: 'keyword', - }, - 'rule.name': { - category: 'rule', - description: 'The name of the rule or signature generating the event.', - example: 'BLOCK_DNS_over_TLS', - name: 'rule.name', - type: 'keyword', - }, - 'rule.reference': { - category: 'rule', - description: - "Reference URL to additional information about the rule used to generate this event. The URL can point to the vendor's documentation about the rule. If that's not available, it can also be a link to a more general page describing this type of alert.", - example: 'https://en.wikipedia.org/wiki/DNS_over_TLS', - name: 'rule.reference', - type: 'keyword', - }, - 'rule.ruleset': { - category: 'rule', - description: - 'Name of the ruleset, policy, group, or parent category in which the rule used to generate this event is a member.', - example: 'Standard_Protocol_Filters', - name: 'rule.ruleset', - type: 'keyword', - }, - 'rule.uuid': { - category: 'rule', - description: - 'A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event.', - example: 1100110011, - name: 'rule.uuid', - type: 'keyword', - }, - 'rule.version': { - category: 'rule', - description: 'The version / revision of the rule being used for analysis.', - example: 1.1, - name: 'rule.version', - type: 'keyword', - }, - 'server.address': { - category: 'server', - description: - 'Some event server addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.', - name: 'server.address', - type: 'keyword', - }, - 'server.as.number': { - category: 'server', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'server.as.number', - type: 'long', - }, - 'server.as.organization.name': { - category: 'server', - description: 'Organization name.', - example: 'Google LLC', - name: 'server.as.organization.name', - type: 'keyword', - }, - 'server.bytes': { - category: 'server', - description: 'Bytes sent from the server to the client.', - example: 184, - name: 'server.bytes', - type: 'long', - format: 'bytes', - }, - 'server.domain': { - category: 'server', - description: 'Server domain.', - name: 'server.domain', - type: 'keyword', - }, - 'server.geo.city_name': { - category: 'server', - description: 'City name.', - example: 'Montreal', - name: 'server.geo.city_name', - type: 'keyword', - }, - 'server.geo.continent_code': { - category: 'server', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'server.geo.continent_code', - type: 'keyword', - }, - 'server.geo.continent_name': { - category: 'server', - description: 'Name of the continent.', - example: 'North America', - name: 'server.geo.continent_name', - type: 'keyword', - }, - 'server.geo.country_iso_code': { - category: 'server', - description: 'Country ISO code.', - example: 'CA', - name: 'server.geo.country_iso_code', - type: 'keyword', - }, - 'server.geo.country_name': { - category: 'server', - description: 'Country name.', - example: 'Canada', - name: 'server.geo.country_name', - type: 'keyword', - }, - 'server.geo.location': { - category: 'server', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'server.geo.location', - type: 'geo_point', - }, - 'server.geo.name': { - category: 'server', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'server.geo.name', - type: 'keyword', - }, - 'server.geo.postal_code': { - category: 'server', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'server.geo.postal_code', - type: 'keyword', - }, - 'server.geo.region_iso_code': { - category: 'server', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'server.geo.region_iso_code', - type: 'keyword', - }, - 'server.geo.region_name': { - category: 'server', - description: 'Region name.', - example: 'Quebec', - name: 'server.geo.region_name', - type: 'keyword', - }, - 'server.geo.timezone': { - category: 'server', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'server.geo.timezone', - type: 'keyword', - }, - 'server.ip': { - category: 'server', - description: 'IP address of the server (IPv4 or IPv6).', - name: 'server.ip', - type: 'ip', - }, - 'server.mac': { - category: 'server', - description: - 'MAC address of the server. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '00-00-5E-00-53-23', - name: 'server.mac', - type: 'keyword', - }, - 'server.nat.ip': { - category: 'server', - description: - 'Translated ip of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.', - name: 'server.nat.ip', - type: 'ip', - }, - 'server.nat.port': { - category: 'server', - description: - 'Translated port of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.', - name: 'server.nat.port', - type: 'long', - format: 'string', - }, - 'server.packets': { - category: 'server', - description: 'Packets sent from the server to the client.', - example: 12, - name: 'server.packets', - type: 'long', - }, - 'server.port': { - category: 'server', - description: 'Port of the server.', - name: 'server.port', - type: 'long', - format: 'string', - }, - 'server.registered_domain': { - category: 'server', - description: - 'The highest registered server domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'server.registered_domain', - type: 'keyword', - }, - 'server.subdomain': { - category: 'server', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'server.subdomain', - type: 'keyword', - }, - 'server.top_level_domain': { - category: 'server', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'server.top_level_domain', - type: 'keyword', - }, - 'server.user.domain': { - category: 'server', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'server.user.domain', - type: 'keyword', - }, - 'server.user.email': { - category: 'server', - description: 'User email address.', - name: 'server.user.email', - type: 'keyword', - }, - 'server.user.full_name': { - category: 'server', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'server.user.full_name', - type: 'keyword', - }, - 'server.user.group.domain': { - category: 'server', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'server.user.group.domain', - type: 'keyword', - }, - 'server.user.group.id': { - category: 'server', - description: 'Unique identifier for the group on the system/platform.', - name: 'server.user.group.id', - type: 'keyword', - }, - 'server.user.group.name': { - category: 'server', - description: 'Name of the group.', - name: 'server.user.group.name', - type: 'keyword', - }, - 'server.user.hash': { - category: 'server', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'server.user.hash', - type: 'keyword', - }, - 'server.user.id': { - category: 'server', - description: 'Unique identifier of the user.', - example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', - name: 'server.user.id', - type: 'keyword', - }, - 'server.user.name': { - category: 'server', - description: 'Short name or login of the user.', - example: 'a.einstein', - name: 'server.user.name', - type: 'keyword', - }, - 'server.user.roles': { - category: 'server', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'server.user.roles', - type: 'keyword', - }, - 'service.address': { - category: 'service', - description: - 'Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).', - example: '172.26.0.2:5432', - name: 'service.address', - type: 'keyword', - }, - 'service.environment': { - category: 'service', - description: - 'Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.', - example: 'production', - name: 'service.environment', - type: 'keyword', - }, - 'service.ephemeral_id': { - category: 'service', - description: - 'Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.', - example: '8a4f500f', - name: 'service.ephemeral_id', - type: 'keyword', - }, - 'service.id': { - category: 'service', - description: - 'Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.', - example: 'd37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6', - name: 'service.id', - type: 'keyword', - }, - 'service.name': { - category: 'service', - description: - 'Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.', - example: 'elasticsearch-metrics', - name: 'service.name', - type: 'keyword', - }, - 'service.node.name': { - category: 'service', - description: - "Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.", - example: 'instance-0000000016', - name: 'service.node.name', - type: 'keyword', - }, - 'service.origin.address': { - category: 'service', - description: - 'Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).', - example: '172.26.0.2:5432', - name: 'service.origin.address', - type: 'keyword', - }, - 'service.origin.environment': { - category: 'service', - description: - 'Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.', - example: 'production', - name: 'service.origin.environment', - type: 'keyword', - }, - 'service.origin.ephemeral_id': { - category: 'service', - description: - 'Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.', - example: '8a4f500f', - name: 'service.origin.ephemeral_id', - type: 'keyword', - }, - 'service.origin.id': { - category: 'service', - description: - 'Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.', - example: 'd37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6', - name: 'service.origin.id', - type: 'keyword', - }, - 'service.origin.name': { - category: 'service', - description: - 'Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.', - example: 'elasticsearch-metrics', - name: 'service.origin.name', - type: 'keyword', - }, - 'service.origin.node.name': { - category: 'service', - description: - "Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.", - example: 'instance-0000000016', - name: 'service.origin.node.name', - type: 'keyword', - }, - 'service.origin.state': { - category: 'service', - description: 'Current state of the service.', - name: 'service.origin.state', - type: 'keyword', - }, - 'service.origin.type': { - category: 'service', - description: - 'The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.', - example: 'elasticsearch', - name: 'service.origin.type', - type: 'keyword', - }, - 'service.origin.version': { - category: 'service', - description: - 'Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.', - example: '3.2.4', - name: 'service.origin.version', - type: 'keyword', - }, - 'service.state': { - category: 'service', - description: 'Current state of the service.', - name: 'service.state', - type: 'keyword', - }, - 'service.target.address': { - category: 'service', - description: - 'Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).', - example: '172.26.0.2:5432', - name: 'service.target.address', - type: 'keyword', - }, - 'service.target.environment': { - category: 'service', - description: - 'Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.', - example: 'production', - name: 'service.target.environment', - type: 'keyword', - }, - 'service.target.ephemeral_id': { - category: 'service', - description: - 'Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.', - example: '8a4f500f', - name: 'service.target.ephemeral_id', - type: 'keyword', - }, - 'service.target.id': { - category: 'service', - description: - 'Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.', - example: 'd37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6', - name: 'service.target.id', - type: 'keyword', - }, - 'service.target.name': { - category: 'service', - description: - 'Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.', - example: 'elasticsearch-metrics', - name: 'service.target.name', - type: 'keyword', - }, - 'service.target.node.name': { - category: 'service', - description: - "Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.", - example: 'instance-0000000016', - name: 'service.target.node.name', - type: 'keyword', - }, - 'service.target.state': { - category: 'service', - description: 'Current state of the service.', - name: 'service.target.state', - type: 'keyword', - }, - 'service.target.type': { - category: 'service', - description: - 'The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.', - example: 'elasticsearch', - name: 'service.target.type', - type: 'keyword', - }, - 'service.target.version': { - category: 'service', - description: - 'Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.', - example: '3.2.4', - name: 'service.target.version', - type: 'keyword', - }, - 'service.type': { - category: 'service', - description: - 'The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.', - example: 'elasticsearch', - name: 'service.type', - type: 'keyword', - }, - 'service.version': { - category: 'service', - description: - 'Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.', - example: '3.2.4', - name: 'service.version', - type: 'keyword', - }, - 'source.address': { - category: 'source', - description: - 'Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.', - name: 'source.address', - type: 'keyword', - }, - 'source.as.number': { - category: 'source', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'source.as.number', - type: 'long', - }, - 'source.as.organization.name': { - category: 'source', - description: 'Organization name.', - example: 'Google LLC', - name: 'source.as.organization.name', - type: 'keyword', - }, - 'source.bytes': { - category: 'source', - description: 'Bytes sent from the source to the destination.', - example: 184, - name: 'source.bytes', - type: 'long', - format: 'bytes', - }, - 'source.domain': { - category: 'source', - description: 'Source domain.', - name: 'source.domain', - type: 'keyword', - }, - 'source.geo.city_name': { - category: 'source', - description: 'City name.', - example: 'Montreal', - name: 'source.geo.city_name', - type: 'keyword', - }, - 'source.geo.continent_code': { - category: 'source', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'source.geo.continent_code', - type: 'keyword', - }, - 'source.geo.continent_name': { - category: 'source', - description: 'Name of the continent.', - example: 'North America', - name: 'source.geo.continent_name', - type: 'keyword', - }, - 'source.geo.country_iso_code': { - category: 'source', - description: 'Country ISO code.', - example: 'CA', - name: 'source.geo.country_iso_code', - type: 'keyword', - }, - 'source.geo.country_name': { - category: 'source', - description: 'Country name.', - example: 'Canada', - name: 'source.geo.country_name', - type: 'keyword', - }, - 'source.geo.location': { - category: 'source', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'source.geo.location', - type: 'geo_point', - }, - 'source.geo.name': { - category: 'source', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'source.geo.name', - type: 'keyword', - }, - 'source.geo.postal_code': { - category: 'source', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'source.geo.postal_code', - type: 'keyword', - }, - 'source.geo.region_iso_code': { - category: 'source', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'source.geo.region_iso_code', - type: 'keyword', - }, - 'source.geo.region_name': { - category: 'source', - description: 'Region name.', - example: 'Quebec', - name: 'source.geo.region_name', - type: 'keyword', - }, - 'source.geo.timezone': { - category: 'source', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'source.geo.timezone', - type: 'keyword', - }, - 'source.ip': { - category: 'source', - description: 'IP address of the source (IPv4 or IPv6).', - name: 'source.ip', - type: 'ip', - }, - 'source.mac': { - category: 'source', - description: - 'MAC address of the source. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '00-00-5E-00-53-23', - name: 'source.mac', - type: 'keyword', - }, - 'source.nat.ip': { - category: 'source', - description: - 'Translated ip of source based NAT sessions (e.g. internal client to internet) Typically connections traversing load balancers, firewalls, or routers.', - name: 'source.nat.ip', - type: 'ip', - }, - 'source.nat.port': { - category: 'source', - description: - 'Translated port of source based NAT sessions. (e.g. internal client to internet) Typically used with load balancers, firewalls, or routers.', - name: 'source.nat.port', - type: 'long', - format: 'string', - }, - 'source.packets': { - category: 'source', - description: 'Packets sent from the source to the destination.', - example: 12, - name: 'source.packets', - type: 'long', - }, - 'source.port': { - category: 'source', - description: 'Port of the source.', - name: 'source.port', - type: 'long', - format: 'string', - }, - 'source.registered_domain': { - category: 'source', - description: - 'The highest registered source domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'source.registered_domain', - type: 'keyword', - }, - 'source.subdomain': { - category: 'source', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'source.subdomain', - type: 'keyword', - }, - 'source.top_level_domain': { - category: 'source', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'source.top_level_domain', - type: 'keyword', - }, - 'source.user.domain': { - category: 'source', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'source.user.domain', - type: 'keyword', - }, - 'source.user.email': { - category: 'source', - description: 'User email address.', - name: 'source.user.email', - type: 'keyword', - }, - 'source.user.full_name': { - category: 'source', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'source.user.full_name', - type: 'keyword', - }, - 'source.user.group.domain': { - category: 'source', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'source.user.group.domain', - type: 'keyword', - }, - 'source.user.group.id': { - category: 'source', - description: 'Unique identifier for the group on the system/platform.', - name: 'source.user.group.id', - type: 'keyword', - }, - 'source.user.group.name': { - category: 'source', - description: 'Name of the group.', - name: 'source.user.group.name', - type: 'keyword', - }, - 'source.user.hash': { - category: 'source', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'source.user.hash', - type: 'keyword', - }, - 'source.user.id': { - category: 'source', - description: 'Unique identifier of the user.', - example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', - name: 'source.user.id', - type: 'keyword', - }, - 'source.user.name': { - category: 'source', - description: 'Short name or login of the user.', - example: 'a.einstein', - name: 'source.user.name', - type: 'keyword', - }, - 'source.user.roles': { - category: 'source', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'source.user.roles', - type: 'keyword', - }, - 'threat.enrichments': { - category: 'threat', - description: - 'A list of associated indicators objects enriching the event, and the context of that association/enrichment.', - name: 'threat.enrichments', - type: 'nested', - }, - 'threat.enrichments.indicator': { - category: 'threat', - description: 'Object containing associated indicators enriching the event.', - name: 'threat.enrichments.indicator', - type: 'object', - }, - 'threat.enrichments.indicator.as.number': { - category: 'threat', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'threat.enrichments.indicator.as.number', - type: 'long', - }, - 'threat.enrichments.indicator.as.organization.name': { - category: 'threat', - description: 'Organization name.', - example: 'Google LLC', - name: 'threat.enrichments.indicator.as.organization.name', - type: 'keyword', - }, - 'threat.enrichments.indicator.confidence': { - category: 'threat', - description: - 'Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: * Not Specified * None * Low * Medium * High', - example: 'Medium', - name: 'threat.enrichments.indicator.confidence', - type: 'keyword', - }, - 'threat.enrichments.indicator.description': { - category: 'threat', - description: 'Describes the type of action conducted by the threat.', - example: 'IP x.x.x.x was observed delivering the Angler EK.', - name: 'threat.enrichments.indicator.description', - type: 'keyword', - }, - 'threat.enrichments.indicator.email.address': { - category: 'threat', - description: 'Identifies a threat indicator as an email address (irrespective of direction).', - example: 'phish@example.com', - name: 'threat.enrichments.indicator.email.address', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.accessed': { - category: 'threat', - description: - 'Last time the file was accessed. Note that not all filesystems keep track of access time.', - name: 'threat.enrichments.indicator.file.accessed', - type: 'date', - }, - 'threat.enrichments.indicator.file.attributes': { - category: 'threat', - description: - "Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.", - example: '["readonly", "system"]', - name: 'threat.enrichments.indicator.file.attributes', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.code_signature.digest_algorithm': { - category: 'threat', - description: - 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', - example: 'sha256', - name: 'threat.enrichments.indicator.file.code_signature.digest_algorithm', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.code_signature.exists': { - category: 'threat', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'threat.enrichments.indicator.file.code_signature.exists', - type: 'boolean', - }, - 'threat.enrichments.indicator.file.code_signature.signing_id': { - category: 'threat', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'threat.enrichments.indicator.file.code_signature.signing_id', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.code_signature.status': { - category: 'threat', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'threat.enrichments.indicator.file.code_signature.status', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.code_signature.subject_name': { - category: 'threat', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'threat.enrichments.indicator.file.code_signature.subject_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.code_signature.team_id': { - category: 'threat', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'threat.enrichments.indicator.file.code_signature.team_id', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.code_signature.timestamp': { - category: 'threat', - description: 'Date and time when the code signature was generated and signed.', - example: '2021-01-01T12:10:30Z', - name: 'threat.enrichments.indicator.file.code_signature.timestamp', - type: 'date', - }, - 'threat.enrichments.indicator.file.code_signature.trusted': { - category: 'threat', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'threat.enrichments.indicator.file.code_signature.trusted', - type: 'boolean', - }, - 'threat.enrichments.indicator.file.code_signature.valid': { - category: 'threat', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'threat.enrichments.indicator.file.code_signature.valid', - type: 'boolean', - }, - 'threat.enrichments.indicator.file.created': { - category: 'threat', - description: 'File creation time. Note that not all filesystems store the creation time.', - name: 'threat.enrichments.indicator.file.created', - type: 'date', - }, - 'threat.enrichments.indicator.file.ctime': { - category: 'threat', - description: - 'Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.', - name: 'threat.enrichments.indicator.file.ctime', - type: 'date', - }, - 'threat.enrichments.indicator.file.device': { - category: 'threat', - description: 'Device that is the source of the file.', - example: 'sda', - name: 'threat.enrichments.indicator.file.device', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.directory': { - category: 'threat', - description: - 'Directory where the file is located. It should include the drive letter, when appropriate.', - example: '/home/alice', - name: 'threat.enrichments.indicator.file.directory', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.drive_letter': { - category: 'threat', - description: - 'Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.', - example: 'C', - name: 'threat.enrichments.indicator.file.drive_letter', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.architecture': { - category: 'threat', - description: 'Machine architecture of the ELF file.', - example: 'x86-64', - name: 'threat.enrichments.indicator.file.elf.architecture', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.byte_order': { - category: 'threat', - description: 'Byte sequence of ELF file.', - example: 'Little Endian', - name: 'threat.enrichments.indicator.file.elf.byte_order', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.cpu_type': { - category: 'threat', - description: 'CPU type of the ELF file.', - example: 'Intel', - name: 'threat.enrichments.indicator.file.elf.cpu_type', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.creation_date': { - category: 'threat', - description: - "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", - name: 'threat.enrichments.indicator.file.elf.creation_date', - type: 'date', - }, - 'threat.enrichments.indicator.file.elf.exports': { - category: 'threat', - description: 'List of exported element names and types.', - name: 'threat.enrichments.indicator.file.elf.exports', - type: 'flattened', - }, - 'threat.enrichments.indicator.file.elf.header.abi_version': { - category: 'threat', - description: 'Version of the ELF Application Binary Interface (ABI).', - name: 'threat.enrichments.indicator.file.elf.header.abi_version', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.header.class': { - category: 'threat', - description: 'Header class of the ELF file.', - name: 'threat.enrichments.indicator.file.elf.header.class', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.header.data': { - category: 'threat', - description: 'Data table of the ELF header.', - name: 'threat.enrichments.indicator.file.elf.header.data', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.header.entrypoint': { - category: 'threat', - description: 'Header entrypoint of the ELF file.', - name: 'threat.enrichments.indicator.file.elf.header.entrypoint', - type: 'long', - format: 'string', - }, - 'threat.enrichments.indicator.file.elf.header.object_version': { - category: 'threat', - description: '"0x1" for original ELF files.', - name: 'threat.enrichments.indicator.file.elf.header.object_version', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.header.os_abi': { - category: 'threat', - description: 'Application Binary Interface (ABI) of the Linux OS.', - name: 'threat.enrichments.indicator.file.elf.header.os_abi', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.header.type': { - category: 'threat', - description: 'Header type of the ELF file.', - name: 'threat.enrichments.indicator.file.elf.header.type', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.header.version': { - category: 'threat', - description: 'Version of the ELF header.', - name: 'threat.enrichments.indicator.file.elf.header.version', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.imports': { - category: 'threat', - description: 'List of imported element names and types.', - name: 'threat.enrichments.indicator.file.elf.imports', - type: 'flattened', - }, - 'threat.enrichments.indicator.file.elf.sections': { - category: 'threat', - description: - 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', - name: 'threat.enrichments.indicator.file.elf.sections', - type: 'nested', - }, - 'threat.enrichments.indicator.file.elf.sections.chi2': { - category: 'threat', - description: 'Chi-square probability distribution of the section.', - name: 'threat.enrichments.indicator.file.elf.sections.chi2', - type: 'long', - format: 'number', - }, - 'threat.enrichments.indicator.file.elf.sections.entropy': { - category: 'threat', - description: 'Shannon entropy calculation from the section.', - name: 'threat.enrichments.indicator.file.elf.sections.entropy', - type: 'long', - format: 'number', - }, - 'threat.enrichments.indicator.file.elf.sections.flags': { - category: 'threat', - description: 'ELF Section List flags.', - name: 'threat.enrichments.indicator.file.elf.sections.flags', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.sections.name': { - category: 'threat', - description: 'ELF Section List name.', - name: 'threat.enrichments.indicator.file.elf.sections.name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.sections.physical_offset': { - category: 'threat', - description: 'ELF Section List offset.', - name: 'threat.enrichments.indicator.file.elf.sections.physical_offset', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.sections.physical_size': { - category: 'threat', - description: 'ELF Section List physical size.', - name: 'threat.enrichments.indicator.file.elf.sections.physical_size', - type: 'long', - format: 'bytes', - }, - 'threat.enrichments.indicator.file.elf.sections.type': { - category: 'threat', - description: 'ELF Section List type.', - name: 'threat.enrichments.indicator.file.elf.sections.type', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.sections.virtual_address': { - category: 'threat', - description: 'ELF Section List virtual address.', - name: 'threat.enrichments.indicator.file.elf.sections.virtual_address', - type: 'long', - format: 'string', - }, - 'threat.enrichments.indicator.file.elf.sections.virtual_size': { - category: 'threat', - description: 'ELF Section List virtual size.', - name: 'threat.enrichments.indicator.file.elf.sections.virtual_size', - type: 'long', - format: 'string', - }, - 'threat.enrichments.indicator.file.elf.segments': { - category: 'threat', - description: - 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', - name: 'threat.enrichments.indicator.file.elf.segments', - type: 'nested', - }, - 'threat.enrichments.indicator.file.elf.segments.sections': { - category: 'threat', - description: 'ELF object segment sections.', - name: 'threat.enrichments.indicator.file.elf.segments.sections', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.segments.type': { - category: 'threat', - description: 'ELF object segment type.', - name: 'threat.enrichments.indicator.file.elf.segments.type', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.shared_libraries': { - category: 'threat', - description: 'List of shared libraries used by this ELF object.', - name: 'threat.enrichments.indicator.file.elf.shared_libraries', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.elf.telfhash': { - category: 'threat', - description: 'telfhash symbol hash for ELF file.', - name: 'threat.enrichments.indicator.file.elf.telfhash', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.extension': { - category: 'threat', - description: - 'File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', - example: 'png', - name: 'threat.enrichments.indicator.file.extension', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.fork_name': { - category: 'threat', - description: - 'A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.', - example: 'Zone.Identifer', - name: 'threat.enrichments.indicator.file.fork_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.gid': { - category: 'threat', - description: 'Primary group ID (GID) of the file.', - example: '1001', - name: 'threat.enrichments.indicator.file.gid', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.group': { - category: 'threat', - description: 'Primary group name of the file.', - example: 'alice', - name: 'threat.enrichments.indicator.file.group', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.hash.md5': { - category: 'threat', - description: 'MD5 hash.', - name: 'threat.enrichments.indicator.file.hash.md5', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.hash.sha1': { - category: 'threat', - description: 'SHA1 hash.', - name: 'threat.enrichments.indicator.file.hash.sha1', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.hash.sha256': { - category: 'threat', - description: 'SHA256 hash.', - name: 'threat.enrichments.indicator.file.hash.sha256', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.hash.sha512': { - category: 'threat', - description: 'SHA512 hash.', - name: 'threat.enrichments.indicator.file.hash.sha512', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.hash.ssdeep': { - category: 'threat', - description: 'SSDEEP hash.', - name: 'threat.enrichments.indicator.file.hash.ssdeep', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.inode': { - category: 'threat', - description: 'Inode representing the file in the filesystem.', - example: '256383', - name: 'threat.enrichments.indicator.file.inode', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.mime_type': { - category: 'threat', - description: - 'MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.', - name: 'threat.enrichments.indicator.file.mime_type', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.mode': { - category: 'threat', - description: 'Mode of the file in octal representation.', - example: '0640', - name: 'threat.enrichments.indicator.file.mode', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.mtime': { - category: 'threat', - description: 'Last time the file content was modified.', - name: 'threat.enrichments.indicator.file.mtime', - type: 'date', - }, - 'threat.enrichments.indicator.file.name': { - category: 'threat', - description: 'Name of the file including the extension, without the directory.', - example: 'example.png', - name: 'threat.enrichments.indicator.file.name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.owner': { - category: 'threat', - description: "File owner's username.", - example: 'alice', - name: 'threat.enrichments.indicator.file.owner', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.path': { - category: 'threat', - description: - 'Full path to the file, including the file name. It should include the drive letter, when appropriate.', - example: '/home/alice/example.png', - name: 'threat.enrichments.indicator.file.path', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.pe.architecture': { - category: 'threat', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'threat.enrichments.indicator.file.pe.architecture', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.pe.company': { - category: 'threat', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'threat.enrichments.indicator.file.pe.company', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.pe.description': { - category: 'threat', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'threat.enrichments.indicator.file.pe.description', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.pe.file_version': { - category: 'threat', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'threat.enrichments.indicator.file.pe.file_version', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.pe.imphash': { - category: 'threat', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'threat.enrichments.indicator.file.pe.imphash', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.pe.original_file_name': { - category: 'threat', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'threat.enrichments.indicator.file.pe.original_file_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.pe.product': { - category: 'threat', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'threat.enrichments.indicator.file.pe.product', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.size': { - category: 'threat', - description: 'File size in bytes. Only relevant when `file.type` is "file".', - example: 16384, - name: 'threat.enrichments.indicator.file.size', - type: 'long', - }, - 'threat.enrichments.indicator.file.target_path': { - category: 'threat', - description: 'Target path for symlinks.', - name: 'threat.enrichments.indicator.file.target_path', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.type': { - category: 'threat', - description: 'File type (file, dir, or symlink).', - example: 'file', - name: 'threat.enrichments.indicator.file.type', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.uid': { - category: 'threat', - description: 'The user ID (UID) or security identifier (SID) of the file owner.', - example: '1001', - name: 'threat.enrichments.indicator.file.uid', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.alternative_names': { - category: 'threat', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'threat.enrichments.indicator.file.x509.alternative_names', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.issuer.common_name': { - category: 'threat', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'threat.enrichments.indicator.file.x509.issuer.common_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.issuer.country': { - category: 'threat', - description: 'List of country (C) codes', - example: 'US', - name: 'threat.enrichments.indicator.file.x509.issuer.country', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.issuer.distinguished_name': { - category: 'threat', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'threat.enrichments.indicator.file.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.issuer.locality': { - category: 'threat', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'threat.enrichments.indicator.file.x509.issuer.locality', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.issuer.organization': { - category: 'threat', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'threat.enrichments.indicator.file.x509.issuer.organization', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.issuer.organizational_unit': { - category: 'threat', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'threat.enrichments.indicator.file.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.issuer.state_or_province': { - category: 'threat', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'threat.enrichments.indicator.file.x509.issuer.state_or_province', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.not_after': { - category: 'threat', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'threat.enrichments.indicator.file.x509.not_after', - type: 'date', - }, - 'threat.enrichments.indicator.file.x509.not_before': { - category: 'threat', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'threat.enrichments.indicator.file.x509.not_before', - type: 'date', - }, - 'threat.enrichments.indicator.file.x509.public_key_algorithm': { - category: 'threat', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'threat.enrichments.indicator.file.x509.public_key_algorithm', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.public_key_curve': { - category: 'threat', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'threat.enrichments.indicator.file.x509.public_key_curve', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.public_key_exponent': { - category: 'threat', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'threat.enrichments.indicator.file.x509.public_key_exponent', - type: 'long', - }, - 'threat.enrichments.indicator.file.x509.public_key_size': { - category: 'threat', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'threat.enrichments.indicator.file.x509.public_key_size', - type: 'long', - }, - 'threat.enrichments.indicator.file.x509.serial_number': { - category: 'threat', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'threat.enrichments.indicator.file.x509.serial_number', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.signature_algorithm': { - category: 'threat', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'threat.enrichments.indicator.file.x509.signature_algorithm', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.subject.common_name': { - category: 'threat', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'threat.enrichments.indicator.file.x509.subject.common_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.subject.country': { - category: 'threat', - description: 'List of country (C) code', - example: 'US', - name: 'threat.enrichments.indicator.file.x509.subject.country', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.subject.distinguished_name': { - category: 'threat', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'threat.enrichments.indicator.file.x509.subject.distinguished_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.subject.locality': { - category: 'threat', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'threat.enrichments.indicator.file.x509.subject.locality', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.subject.organization': { - category: 'threat', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'threat.enrichments.indicator.file.x509.subject.organization', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.subject.organizational_unit': { - category: 'threat', - description: 'List of organizational units (OU) of subject.', - name: 'threat.enrichments.indicator.file.x509.subject.organizational_unit', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.subject.state_or_province': { - category: 'threat', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'threat.enrichments.indicator.file.x509.subject.state_or_province', - type: 'keyword', - }, - 'threat.enrichments.indicator.file.x509.version_number': { - category: 'threat', - description: 'Version of x509 format.', - example: 3, - name: 'threat.enrichments.indicator.file.x509.version_number', - type: 'keyword', - }, - 'threat.enrichments.indicator.first_seen': { - category: 'threat', - description: - 'The date and time when intelligence source first reported sighting this indicator.', - example: '2020-11-05T17:25:47.000Z', - name: 'threat.enrichments.indicator.first_seen', - type: 'date', - }, - 'threat.enrichments.indicator.geo.city_name': { - category: 'threat', - description: 'City name.', - example: 'Montreal', - name: 'threat.enrichments.indicator.geo.city_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.continent_code': { - category: 'threat', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'threat.enrichments.indicator.geo.continent_code', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.continent_name': { - category: 'threat', - description: 'Name of the continent.', - example: 'North America', - name: 'threat.enrichments.indicator.geo.continent_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.country_iso_code': { - category: 'threat', - description: 'Country ISO code.', - example: 'CA', - name: 'threat.enrichments.indicator.geo.country_iso_code', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.country_name': { - category: 'threat', - description: 'Country name.', - example: 'Canada', - name: 'threat.enrichments.indicator.geo.country_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.location': { - category: 'threat', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'threat.enrichments.indicator.geo.location', - type: 'geo_point', - }, - 'threat.enrichments.indicator.geo.name': { - category: 'threat', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'threat.enrichments.indicator.geo.name', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.postal_code': { - category: 'threat', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'threat.enrichments.indicator.geo.postal_code', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.region_iso_code': { - category: 'threat', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'threat.enrichments.indicator.geo.region_iso_code', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.region_name': { - category: 'threat', - description: 'Region name.', - example: 'Quebec', - name: 'threat.enrichments.indicator.geo.region_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.geo.timezone': { - category: 'threat', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'threat.enrichments.indicator.geo.timezone', - type: 'keyword', - }, - 'threat.enrichments.indicator.ip': { - category: 'threat', - description: 'Identifies a threat indicator as an IP address (irrespective of direction).', - example: '1.2.3.4', - name: 'threat.enrichments.indicator.ip', - type: 'ip', - }, - 'threat.enrichments.indicator.last_seen': { - category: 'threat', - description: - 'The date and time when intelligence source last reported sighting this indicator.', - example: '2020-11-05T17:25:47.000Z', - name: 'threat.enrichments.indicator.last_seen', - type: 'date', - }, - 'threat.enrichments.indicator.marking.tlp': { - category: 'threat', - description: - 'Traffic Light Protocol sharing markings. Recommended values are: * WHITE * GREEN * AMBER * RED', - example: 'White', - name: 'threat.enrichments.indicator.marking.tlp', - type: 'keyword', - }, - 'threat.enrichments.indicator.modified_at': { - category: 'threat', - description: - 'The date and time when intelligence source last modified information for this indicator.', - example: '2020-11-05T17:25:47.000Z', - name: 'threat.enrichments.indicator.modified_at', - type: 'date', - }, - 'threat.enrichments.indicator.port': { - category: 'threat', - description: 'Identifies a threat indicator as a port number (irrespective of direction).', - example: 443, - name: 'threat.enrichments.indicator.port', - type: 'long', - }, - 'threat.enrichments.indicator.provider': { - category: 'threat', - description: "The name of the indicator's provider.", - example: 'lrz_urlhaus', - name: 'threat.enrichments.indicator.provider', - type: 'keyword', - }, - 'threat.enrichments.indicator.reference': { - category: 'threat', - description: 'Reference URL linking to additional information about this indicator.', - example: 'https://system.example.com/indicator/0001234', - name: 'threat.enrichments.indicator.reference', - type: 'keyword', - }, - 'threat.enrichments.indicator.registry.data.bytes': { - category: 'threat', - description: - 'Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.', - example: 'ZQBuAC0AVQBTAAAAZQBuAAAAAAA=', - name: 'threat.enrichments.indicator.registry.data.bytes', - type: 'keyword', - }, - 'threat.enrichments.indicator.registry.data.strings': { - category: 'threat', - description: - 'Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`).', - example: '["C:\\rta\\red_ttp\\bin\\myapp.exe"]', - name: 'threat.enrichments.indicator.registry.data.strings', - type: 'wildcard', - }, - 'threat.enrichments.indicator.registry.data.type': { - category: 'threat', - description: 'Standard registry type for encoding contents', - example: 'REG_SZ', - name: 'threat.enrichments.indicator.registry.data.type', - type: 'keyword', - }, - 'threat.enrichments.indicator.registry.hive': { - category: 'threat', - description: 'Abbreviated name for the hive.', - example: 'HKLM', - name: 'threat.enrichments.indicator.registry.hive', - type: 'keyword', - }, - 'threat.enrichments.indicator.registry.key': { - category: 'threat', - description: 'Hive-relative path of keys.', - example: - 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe', - name: 'threat.enrichments.indicator.registry.key', - type: 'keyword', - }, - 'threat.enrichments.indicator.registry.path': { - category: 'threat', - description: 'Full path, including hive, key and value', - example: - 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger', - name: 'threat.enrichments.indicator.registry.path', - type: 'keyword', - }, - 'threat.enrichments.indicator.registry.value': { - category: 'threat', - description: 'Name of the value written.', - example: 'Debugger', - name: 'threat.enrichments.indicator.registry.value', - type: 'keyword', - }, - 'threat.enrichments.indicator.scanner_stats': { - category: 'threat', - description: 'Count of AV/EDR vendors that successfully detected malicious file or URL.', - example: 4, - name: 'threat.enrichments.indicator.scanner_stats', - type: 'long', - }, - 'threat.enrichments.indicator.sightings': { - category: 'threat', - description: 'Number of times this indicator was observed conducting threat activity.', - example: 20, - name: 'threat.enrichments.indicator.sightings', - type: 'long', - }, - 'threat.enrichments.indicator.type': { - category: 'threat', - description: - 'Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: * autonomous-system * artifact * directory * domain-name * email-addr * file * ipv4-addr * ipv6-addr * mac-addr * mutex * port * process * software * url * user-account * windows-registry-key * x509-certificate', - example: 'ipv4-addr', - name: 'threat.enrichments.indicator.type', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.domain': { - category: 'threat', - description: - 'Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.', - example: 'www.elastic.co', - name: 'threat.enrichments.indicator.url.domain', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.extension': { - category: 'threat', - description: - 'The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', - example: 'png', - name: 'threat.enrichments.indicator.url.extension', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.fragment': { - category: 'threat', - description: - 'Portion of the url after the `#`, such as "top". The `#` is not part of the fragment.', - name: 'threat.enrichments.indicator.url.fragment', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.full': { - category: 'threat', - description: - 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top', - name: 'threat.enrichments.indicator.url.full', - type: 'wildcard', - }, - 'threat.enrichments.indicator.url.original': { - category: 'threat', - description: - 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch', - name: 'threat.enrichments.indicator.url.original', - type: 'wildcard', - }, - 'threat.enrichments.indicator.url.password': { - category: 'threat', - description: 'Password of the request.', - name: 'threat.enrichments.indicator.url.password', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.path': { - category: 'threat', - description: 'Path of the request, such as "/search".', - name: 'threat.enrichments.indicator.url.path', - type: 'wildcard', - }, - 'threat.enrichments.indicator.url.port': { - category: 'threat', - description: 'Port of the request, such as 443.', - example: 443, - name: 'threat.enrichments.indicator.url.port', - type: 'long', - format: 'string', - }, - 'threat.enrichments.indicator.url.query': { - category: 'threat', - description: - 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.', - name: 'threat.enrichments.indicator.url.query', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.registered_domain': { - category: 'threat', - description: - 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'threat.enrichments.indicator.url.registered_domain', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.scheme': { - category: 'threat', - description: 'Scheme of the request, such as "https". Note: The `:` is not part of the scheme.', - example: 'https', - name: 'threat.enrichments.indicator.url.scheme', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.subdomain': { - category: 'threat', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'threat.enrichments.indicator.url.subdomain', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.top_level_domain': { - category: 'threat', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'threat.enrichments.indicator.url.top_level_domain', - type: 'keyword', - }, - 'threat.enrichments.indicator.url.username': { - category: 'threat', - description: 'Username of the request.', - name: 'threat.enrichments.indicator.url.username', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.alternative_names': { - category: 'threat', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'threat.enrichments.indicator.x509.alternative_names', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.issuer.common_name': { - category: 'threat', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'threat.enrichments.indicator.x509.issuer.common_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.issuer.country': { - category: 'threat', - description: 'List of country (C) codes', - example: 'US', - name: 'threat.enrichments.indicator.x509.issuer.country', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.issuer.distinguished_name': { - category: 'threat', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'threat.enrichments.indicator.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.issuer.locality': { - category: 'threat', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'threat.enrichments.indicator.x509.issuer.locality', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.issuer.organization': { - category: 'threat', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'threat.enrichments.indicator.x509.issuer.organization', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.issuer.organizational_unit': { - category: 'threat', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'threat.enrichments.indicator.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.issuer.state_or_province': { - category: 'threat', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'threat.enrichments.indicator.x509.issuer.state_or_province', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.not_after': { - category: 'threat', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'threat.enrichments.indicator.x509.not_after', - type: 'date', - }, - 'threat.enrichments.indicator.x509.not_before': { - category: 'threat', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'threat.enrichments.indicator.x509.not_before', - type: 'date', - }, - 'threat.enrichments.indicator.x509.public_key_algorithm': { - category: 'threat', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'threat.enrichments.indicator.x509.public_key_algorithm', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.public_key_curve': { - category: 'threat', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'threat.enrichments.indicator.x509.public_key_curve', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.public_key_exponent': { - category: 'threat', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'threat.enrichments.indicator.x509.public_key_exponent', - type: 'long', - }, - 'threat.enrichments.indicator.x509.public_key_size': { - category: 'threat', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'threat.enrichments.indicator.x509.public_key_size', - type: 'long', - }, - 'threat.enrichments.indicator.x509.serial_number': { - category: 'threat', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'threat.enrichments.indicator.x509.serial_number', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.signature_algorithm': { - category: 'threat', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'threat.enrichments.indicator.x509.signature_algorithm', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.subject.common_name': { - category: 'threat', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'threat.enrichments.indicator.x509.subject.common_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.subject.country': { - category: 'threat', - description: 'List of country (C) code', - example: 'US', - name: 'threat.enrichments.indicator.x509.subject.country', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.subject.distinguished_name': { - category: 'threat', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'threat.enrichments.indicator.x509.subject.distinguished_name', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.subject.locality': { - category: 'threat', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'threat.enrichments.indicator.x509.subject.locality', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.subject.organization': { - category: 'threat', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'threat.enrichments.indicator.x509.subject.organization', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.subject.organizational_unit': { - category: 'threat', - description: 'List of organizational units (OU) of subject.', - name: 'threat.enrichments.indicator.x509.subject.organizational_unit', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.subject.state_or_province': { - category: 'threat', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'threat.enrichments.indicator.x509.subject.state_or_province', - type: 'keyword', - }, - 'threat.enrichments.indicator.x509.version_number': { - category: 'threat', - description: 'Version of x509 format.', - example: 3, - name: 'threat.enrichments.indicator.x509.version_number', - type: 'keyword', - }, - 'threat.enrichments.matched.atomic': { - category: 'threat', - description: - 'Identifies the atomic indicator value that matched a local environment endpoint or network event.', - example: 'bad-domain.com', - name: 'threat.enrichments.matched.atomic', - type: 'keyword', - }, - 'threat.enrichments.matched.field': { - category: 'threat', - description: - 'Identifies the field of the atomic indicator that matched a local environment endpoint or network event.', - example: 'file.hash.sha256', - name: 'threat.enrichments.matched.field', - type: 'keyword', - }, - 'threat.enrichments.matched.id': { - category: 'threat', - description: 'Identifies the _id of the indicator document enriching the event.', - example: 'ff93aee5-86a1-4a61-b0e6-0cdc313d01b5', - name: 'threat.enrichments.matched.id', - type: 'keyword', - }, - 'threat.enrichments.matched.index': { - category: 'threat', - description: 'Identifies the _index of the indicator document enriching the event.', - example: 'filebeat-8.0.0-2021.05.23-000011', - name: 'threat.enrichments.matched.index', - type: 'keyword', - }, - 'threat.enrichments.matched.type': { - category: 'threat', - description: - 'Identifies the type of match that caused the event to be enriched with the given indicator', - example: 'indicator_match_rule', - name: 'threat.enrichments.matched.type', - type: 'keyword', - }, - 'threat.framework': { - category: 'threat', - description: - 'Name of the threat framework used to further categorize and classify the tactic and technique of the reported threat. Framework classification can be provided by detecting systems, evaluated at ingest time, or retrospectively tagged to events.', - example: 'MITRE ATT&CK', - name: 'threat.framework', - type: 'keyword', - }, - 'threat.group.alias': { - category: 'threat', - description: - 'The alias(es) of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group alias(es).', - example: '[ "Magecart Group 6" ]', - name: 'threat.group.alias', - type: 'keyword', - }, - 'threat.group.id': { - category: 'threat', - description: - 'The id of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group id.', - example: 'G0037', - name: 'threat.group.id', - type: 'keyword', - }, - 'threat.group.name': { - category: 'threat', - description: - 'The name of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group name.', - example: 'FIN6', - name: 'threat.group.name', - type: 'keyword', - }, - 'threat.group.reference': { - category: 'threat', - description: - 'The reference URL of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group reference URL.', - example: 'https://attack.mitre.org/groups/G0037/', - name: 'threat.group.reference', - type: 'keyword', - }, - 'threat.indicator.as.number': { - category: 'threat', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'threat.indicator.as.number', - type: 'long', - }, - 'threat.indicator.as.organization.name': { - category: 'threat', - description: 'Organization name.', - example: 'Google LLC', - name: 'threat.indicator.as.organization.name', - type: 'keyword', - }, - 'threat.indicator.confidence': { - category: 'threat', - description: - 'Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: * Not Specified * None * Low * Medium * High', - example: 'Medium', - name: 'threat.indicator.confidence', - type: 'keyword', - }, - 'threat.indicator.description': { - category: 'threat', - description: 'Describes the type of action conducted by the threat.', - example: 'IP x.x.x.x was observed delivering the Angler EK.', - name: 'threat.indicator.description', - type: 'keyword', - }, - 'threat.indicator.email.address': { - category: 'threat', - description: 'Identifies a threat indicator as an email address (irrespective of direction).', - example: 'phish@example.com', - name: 'threat.indicator.email.address', - type: 'keyword', - }, - 'threat.indicator.file.accessed': { - category: 'threat', - description: - 'Last time the file was accessed. Note that not all filesystems keep track of access time.', - name: 'threat.indicator.file.accessed', - type: 'date', - }, - 'threat.indicator.file.attributes': { - category: 'threat', - description: - "Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.", - example: '["readonly", "system"]', - name: 'threat.indicator.file.attributes', - type: 'keyword', - }, - 'threat.indicator.file.code_signature.digest_algorithm': { - category: 'threat', - description: - 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', - example: 'sha256', - name: 'threat.indicator.file.code_signature.digest_algorithm', - type: 'keyword', - }, - 'threat.indicator.file.code_signature.exists': { - category: 'threat', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'threat.indicator.file.code_signature.exists', - type: 'boolean', - }, - 'threat.indicator.file.code_signature.signing_id': { - category: 'threat', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'threat.indicator.file.code_signature.signing_id', - type: 'keyword', - }, - 'threat.indicator.file.code_signature.status': { - category: 'threat', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'threat.indicator.file.code_signature.status', - type: 'keyword', - }, - 'threat.indicator.file.code_signature.subject_name': { - category: 'threat', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'threat.indicator.file.code_signature.subject_name', - type: 'keyword', - }, - 'threat.indicator.file.code_signature.team_id': { - category: 'threat', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'threat.indicator.file.code_signature.team_id', - type: 'keyword', - }, - 'threat.indicator.file.code_signature.timestamp': { - category: 'threat', - description: 'Date and time when the code signature was generated and signed.', - example: '2021-01-01T12:10:30Z', - name: 'threat.indicator.file.code_signature.timestamp', - type: 'date', - }, - 'threat.indicator.file.code_signature.trusted': { - category: 'threat', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'threat.indicator.file.code_signature.trusted', - type: 'boolean', - }, - 'threat.indicator.file.code_signature.valid': { - category: 'threat', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'threat.indicator.file.code_signature.valid', - type: 'boolean', - }, - 'threat.indicator.file.created': { - category: 'threat', - description: 'File creation time. Note that not all filesystems store the creation time.', - name: 'threat.indicator.file.created', - type: 'date', - }, - 'threat.indicator.file.ctime': { - category: 'threat', - description: - 'Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.', - name: 'threat.indicator.file.ctime', - type: 'date', - }, - 'threat.indicator.file.device': { - category: 'threat', - description: 'Device that is the source of the file.', - example: 'sda', - name: 'threat.indicator.file.device', - type: 'keyword', - }, - 'threat.indicator.file.directory': { - category: 'threat', - description: - 'Directory where the file is located. It should include the drive letter, when appropriate.', - example: '/home/alice', - name: 'threat.indicator.file.directory', - type: 'keyword', - }, - 'threat.indicator.file.drive_letter': { - category: 'threat', - description: - 'Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.', - example: 'C', - name: 'threat.indicator.file.drive_letter', - type: 'keyword', - }, - 'threat.indicator.file.elf.architecture': { - category: 'threat', - description: 'Machine architecture of the ELF file.', - example: 'x86-64', - name: 'threat.indicator.file.elf.architecture', - type: 'keyword', - }, - 'threat.indicator.file.elf.byte_order': { - category: 'threat', - description: 'Byte sequence of ELF file.', - example: 'Little Endian', - name: 'threat.indicator.file.elf.byte_order', - type: 'keyword', - }, - 'threat.indicator.file.elf.cpu_type': { - category: 'threat', - description: 'CPU type of the ELF file.', - example: 'Intel', - name: 'threat.indicator.file.elf.cpu_type', - type: 'keyword', - }, - 'threat.indicator.file.elf.creation_date': { - category: 'threat', - description: - "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", - name: 'threat.indicator.file.elf.creation_date', - type: 'date', - }, - 'threat.indicator.file.elf.exports': { - category: 'threat', - description: 'List of exported element names and types.', - name: 'threat.indicator.file.elf.exports', - type: 'flattened', - }, - 'threat.indicator.file.elf.header.abi_version': { - category: 'threat', - description: 'Version of the ELF Application Binary Interface (ABI).', - name: 'threat.indicator.file.elf.header.abi_version', - type: 'keyword', - }, - 'threat.indicator.file.elf.header.class': { - category: 'threat', - description: 'Header class of the ELF file.', - name: 'threat.indicator.file.elf.header.class', - type: 'keyword', - }, - 'threat.indicator.file.elf.header.data': { - category: 'threat', - description: 'Data table of the ELF header.', - name: 'threat.indicator.file.elf.header.data', - type: 'keyword', - }, - 'threat.indicator.file.elf.header.entrypoint': { - category: 'threat', - description: 'Header entrypoint of the ELF file.', - name: 'threat.indicator.file.elf.header.entrypoint', - type: 'long', - format: 'string', - }, - 'threat.indicator.file.elf.header.object_version': { - category: 'threat', - description: '"0x1" for original ELF files.', - name: 'threat.indicator.file.elf.header.object_version', - type: 'keyword', - }, - 'threat.indicator.file.elf.header.os_abi': { - category: 'threat', - description: 'Application Binary Interface (ABI) of the Linux OS.', - name: 'threat.indicator.file.elf.header.os_abi', - type: 'keyword', - }, - 'threat.indicator.file.elf.header.type': { - category: 'threat', - description: 'Header type of the ELF file.', - name: 'threat.indicator.file.elf.header.type', - type: 'keyword', - }, - 'threat.indicator.file.elf.header.version': { - category: 'threat', - description: 'Version of the ELF header.', - name: 'threat.indicator.file.elf.header.version', - type: 'keyword', - }, - 'threat.indicator.file.elf.imports': { - category: 'threat', - description: 'List of imported element names and types.', - name: 'threat.indicator.file.elf.imports', - type: 'flattened', - }, - 'threat.indicator.file.elf.sections': { - category: 'threat', - description: - 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', - name: 'threat.indicator.file.elf.sections', - type: 'nested', - }, - 'threat.indicator.file.elf.sections.chi2': { - category: 'threat', - description: 'Chi-square probability distribution of the section.', - name: 'threat.indicator.file.elf.sections.chi2', - type: 'long', - format: 'number', - }, - 'threat.indicator.file.elf.sections.entropy': { - category: 'threat', - description: 'Shannon entropy calculation from the section.', - name: 'threat.indicator.file.elf.sections.entropy', - type: 'long', - format: 'number', - }, - 'threat.indicator.file.elf.sections.flags': { - category: 'threat', - description: 'ELF Section List flags.', - name: 'threat.indicator.file.elf.sections.flags', - type: 'keyword', - }, - 'threat.indicator.file.elf.sections.name': { - category: 'threat', - description: 'ELF Section List name.', - name: 'threat.indicator.file.elf.sections.name', - type: 'keyword', - }, - 'threat.indicator.file.elf.sections.physical_offset': { - category: 'threat', - description: 'ELF Section List offset.', - name: 'threat.indicator.file.elf.sections.physical_offset', - type: 'keyword', - }, - 'threat.indicator.file.elf.sections.physical_size': { - category: 'threat', - description: 'ELF Section List physical size.', - name: 'threat.indicator.file.elf.sections.physical_size', - type: 'long', - format: 'bytes', - }, - 'threat.indicator.file.elf.sections.type': { - category: 'threat', - description: 'ELF Section List type.', - name: 'threat.indicator.file.elf.sections.type', - type: 'keyword', - }, - 'threat.indicator.file.elf.sections.virtual_address': { - category: 'threat', - description: 'ELF Section List virtual address.', - name: 'threat.indicator.file.elf.sections.virtual_address', - type: 'long', - format: 'string', - }, - 'threat.indicator.file.elf.sections.virtual_size': { - category: 'threat', - description: 'ELF Section List virtual size.', - name: 'threat.indicator.file.elf.sections.virtual_size', - type: 'long', - format: 'string', - }, - 'threat.indicator.file.elf.segments': { - category: 'threat', - description: - 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', - name: 'threat.indicator.file.elf.segments', - type: 'nested', - }, - 'threat.indicator.file.elf.segments.sections': { - category: 'threat', - description: 'ELF object segment sections.', - name: 'threat.indicator.file.elf.segments.sections', - type: 'keyword', - }, - 'threat.indicator.file.elf.segments.type': { - category: 'threat', - description: 'ELF object segment type.', - name: 'threat.indicator.file.elf.segments.type', - type: 'keyword', - }, - 'threat.indicator.file.elf.shared_libraries': { - category: 'threat', - description: 'List of shared libraries used by this ELF object.', - name: 'threat.indicator.file.elf.shared_libraries', - type: 'keyword', - }, - 'threat.indicator.file.elf.telfhash': { - category: 'threat', - description: 'telfhash symbol hash for ELF file.', - name: 'threat.indicator.file.elf.telfhash', - type: 'keyword', - }, - 'threat.indicator.file.extension': { - category: 'threat', - description: - 'File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', - example: 'png', - name: 'threat.indicator.file.extension', - type: 'keyword', - }, - 'threat.indicator.file.fork_name': { - category: 'threat', - description: - 'A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.', - example: 'Zone.Identifer', - name: 'threat.indicator.file.fork_name', - type: 'keyword', - }, - 'threat.indicator.file.gid': { - category: 'threat', - description: 'Primary group ID (GID) of the file.', - example: '1001', - name: 'threat.indicator.file.gid', - type: 'keyword', - }, - 'threat.indicator.file.group': { - category: 'threat', - description: 'Primary group name of the file.', - example: 'alice', - name: 'threat.indicator.file.group', - type: 'keyword', - }, - 'threat.indicator.file.hash.md5': { - category: 'threat', - description: 'MD5 hash.', - name: 'threat.indicator.file.hash.md5', - type: 'keyword', - }, - 'threat.indicator.file.hash.sha1': { - category: 'threat', - description: 'SHA1 hash.', - name: 'threat.indicator.file.hash.sha1', - type: 'keyword', - }, - 'threat.indicator.file.hash.sha256': { - category: 'threat', - description: 'SHA256 hash.', - name: 'threat.indicator.file.hash.sha256', - type: 'keyword', - }, - 'threat.indicator.file.hash.sha512': { - category: 'threat', - description: 'SHA512 hash.', - name: 'threat.indicator.file.hash.sha512', - type: 'keyword', - }, - 'threat.indicator.file.hash.ssdeep': { - category: 'threat', - description: 'SSDEEP hash.', - name: 'threat.indicator.file.hash.ssdeep', - type: 'keyword', - }, - 'threat.indicator.file.inode': { - category: 'threat', - description: 'Inode representing the file in the filesystem.', - example: '256383', - name: 'threat.indicator.file.inode', - type: 'keyword', - }, - 'threat.indicator.file.mime_type': { - category: 'threat', - description: - 'MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.', - name: 'threat.indicator.file.mime_type', - type: 'keyword', - }, - 'threat.indicator.file.mode': { - category: 'threat', - description: 'Mode of the file in octal representation.', - example: '0640', - name: 'threat.indicator.file.mode', - type: 'keyword', - }, - 'threat.indicator.file.mtime': { - category: 'threat', - description: 'Last time the file content was modified.', - name: 'threat.indicator.file.mtime', - type: 'date', - }, - 'threat.indicator.file.name': { - category: 'threat', - description: 'Name of the file including the extension, without the directory.', - example: 'example.png', - name: 'threat.indicator.file.name', - type: 'keyword', - }, - 'threat.indicator.file.owner': { - category: 'threat', - description: "File owner's username.", - example: 'alice', - name: 'threat.indicator.file.owner', - type: 'keyword', - }, - 'threat.indicator.file.path': { - category: 'threat', - description: - 'Full path to the file, including the file name. It should include the drive letter, when appropriate.', - example: '/home/alice/example.png', - name: 'threat.indicator.file.path', - type: 'keyword', - }, - 'threat.indicator.file.pe.architecture': { - category: 'threat', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'threat.indicator.file.pe.architecture', - type: 'keyword', - }, - 'threat.indicator.file.pe.company': { - category: 'threat', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'threat.indicator.file.pe.company', - type: 'keyword', - }, - 'threat.indicator.file.pe.description': { - category: 'threat', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'threat.indicator.file.pe.description', - type: 'keyword', - }, - 'threat.indicator.file.pe.file_version': { - category: 'threat', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'threat.indicator.file.pe.file_version', - type: 'keyword', - }, - 'threat.indicator.file.pe.imphash': { - category: 'threat', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'threat.indicator.file.pe.imphash', - type: 'keyword', - }, - 'threat.indicator.file.pe.original_file_name': { - category: 'threat', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'threat.indicator.file.pe.original_file_name', - type: 'keyword', - }, - 'threat.indicator.file.pe.product': { - category: 'threat', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'threat.indicator.file.pe.product', - type: 'keyword', - }, - 'threat.indicator.file.size': { - category: 'threat', - description: 'File size in bytes. Only relevant when `file.type` is "file".', - example: 16384, - name: 'threat.indicator.file.size', - type: 'long', - }, - 'threat.indicator.file.target_path': { - category: 'threat', - description: 'Target path for symlinks.', - name: 'threat.indicator.file.target_path', - type: 'keyword', - }, - 'threat.indicator.file.type': { - category: 'threat', - description: 'File type (file, dir, or symlink).', - example: 'file', - name: 'threat.indicator.file.type', - type: 'keyword', - }, - 'threat.indicator.file.uid': { - category: 'threat', - description: 'The user ID (UID) or security identifier (SID) of the file owner.', - example: '1001', - name: 'threat.indicator.file.uid', - type: 'keyword', - }, - 'threat.indicator.file.x509.alternative_names': { - category: 'threat', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'threat.indicator.file.x509.alternative_names', - type: 'keyword', - }, - 'threat.indicator.file.x509.issuer.common_name': { - category: 'threat', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'threat.indicator.file.x509.issuer.common_name', - type: 'keyword', - }, - 'threat.indicator.file.x509.issuer.country': { - category: 'threat', - description: 'List of country (C) codes', - example: 'US', - name: 'threat.indicator.file.x509.issuer.country', - type: 'keyword', - }, - 'threat.indicator.file.x509.issuer.distinguished_name': { - category: 'threat', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'threat.indicator.file.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'threat.indicator.file.x509.issuer.locality': { - category: 'threat', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'threat.indicator.file.x509.issuer.locality', - type: 'keyword', - }, - 'threat.indicator.file.x509.issuer.organization': { - category: 'threat', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'threat.indicator.file.x509.issuer.organization', - type: 'keyword', - }, - 'threat.indicator.file.x509.issuer.organizational_unit': { - category: 'threat', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'threat.indicator.file.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'threat.indicator.file.x509.issuer.state_or_province': { - category: 'threat', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'threat.indicator.file.x509.issuer.state_or_province', - type: 'keyword', - }, - 'threat.indicator.file.x509.not_after': { - category: 'threat', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'threat.indicator.file.x509.not_after', - type: 'date', - }, - 'threat.indicator.file.x509.not_before': { - category: 'threat', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'threat.indicator.file.x509.not_before', - type: 'date', - }, - 'threat.indicator.file.x509.public_key_algorithm': { - category: 'threat', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'threat.indicator.file.x509.public_key_algorithm', - type: 'keyword', - }, - 'threat.indicator.file.x509.public_key_curve': { - category: 'threat', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'threat.indicator.file.x509.public_key_curve', - type: 'keyword', - }, - 'threat.indicator.file.x509.public_key_exponent': { - category: 'threat', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'threat.indicator.file.x509.public_key_exponent', - type: 'long', - }, - 'threat.indicator.file.x509.public_key_size': { - category: 'threat', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'threat.indicator.file.x509.public_key_size', - type: 'long', - }, - 'threat.indicator.file.x509.serial_number': { - category: 'threat', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'threat.indicator.file.x509.serial_number', - type: 'keyword', - }, - 'threat.indicator.file.x509.signature_algorithm': { - category: 'threat', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'threat.indicator.file.x509.signature_algorithm', - type: 'keyword', - }, - 'threat.indicator.file.x509.subject.common_name': { - category: 'threat', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'threat.indicator.file.x509.subject.common_name', - type: 'keyword', - }, - 'threat.indicator.file.x509.subject.country': { - category: 'threat', - description: 'List of country (C) code', - example: 'US', - name: 'threat.indicator.file.x509.subject.country', - type: 'keyword', - }, - 'threat.indicator.file.x509.subject.distinguished_name': { - category: 'threat', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'threat.indicator.file.x509.subject.distinguished_name', - type: 'keyword', - }, - 'threat.indicator.file.x509.subject.locality': { - category: 'threat', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'threat.indicator.file.x509.subject.locality', - type: 'keyword', - }, - 'threat.indicator.file.x509.subject.organization': { - category: 'threat', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'threat.indicator.file.x509.subject.organization', - type: 'keyword', - }, - 'threat.indicator.file.x509.subject.organizational_unit': { - category: 'threat', - description: 'List of organizational units (OU) of subject.', - name: 'threat.indicator.file.x509.subject.organizational_unit', - type: 'keyword', - }, - 'threat.indicator.file.x509.subject.state_or_province': { - category: 'threat', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'threat.indicator.file.x509.subject.state_or_province', - type: 'keyword', - }, - 'threat.indicator.file.x509.version_number': { - category: 'threat', - description: 'Version of x509 format.', - example: 3, - name: 'threat.indicator.file.x509.version_number', - type: 'keyword', - }, - 'threat.indicator.first_seen': { - category: 'threat', - description: - 'The date and time when intelligence source first reported sighting this indicator.', - example: '2020-11-05T17:25:47.000Z', - name: 'threat.indicator.first_seen', - type: 'date', - }, - 'threat.indicator.geo.city_name': { - category: 'threat', - description: 'City name.', - example: 'Montreal', - name: 'threat.indicator.geo.city_name', - type: 'keyword', - }, - 'threat.indicator.geo.continent_code': { - category: 'threat', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'threat.indicator.geo.continent_code', - type: 'keyword', - }, - 'threat.indicator.geo.continent_name': { - category: 'threat', - description: 'Name of the continent.', - example: 'North America', - name: 'threat.indicator.geo.continent_name', - type: 'keyword', - }, - 'threat.indicator.geo.country_iso_code': { - category: 'threat', - description: 'Country ISO code.', - example: 'CA', - name: 'threat.indicator.geo.country_iso_code', - type: 'keyword', - }, - 'threat.indicator.geo.country_name': { - category: 'threat', - description: 'Country name.', - example: 'Canada', - name: 'threat.indicator.geo.country_name', - type: 'keyword', - }, - 'threat.indicator.geo.location': { - category: 'threat', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'threat.indicator.geo.location', - type: 'geo_point', - }, - 'threat.indicator.geo.name': { - category: 'threat', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'threat.indicator.geo.name', - type: 'keyword', - }, - 'threat.indicator.geo.postal_code': { - category: 'threat', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'threat.indicator.geo.postal_code', - type: 'keyword', - }, - 'threat.indicator.geo.region_iso_code': { - category: 'threat', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'threat.indicator.geo.region_iso_code', - type: 'keyword', - }, - 'threat.indicator.geo.region_name': { - category: 'threat', - description: 'Region name.', - example: 'Quebec', - name: 'threat.indicator.geo.region_name', - type: 'keyword', - }, - 'threat.indicator.geo.timezone': { - category: 'threat', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'threat.indicator.geo.timezone', - type: 'keyword', - }, - 'threat.indicator.ip': { - category: 'threat', - description: 'Identifies a threat indicator as an IP address (irrespective of direction).', - example: '1.2.3.4', - name: 'threat.indicator.ip', - type: 'ip', - }, - 'threat.indicator.last_seen': { - category: 'threat', - description: - 'The date and time when intelligence source last reported sighting this indicator.', - example: '2020-11-05T17:25:47.000Z', - name: 'threat.indicator.last_seen', - type: 'date', - }, - 'threat.indicator.marking.tlp': { - category: 'threat', - description: - 'Traffic Light Protocol sharing markings. Recommended values are: * WHITE * GREEN * AMBER * RED', - example: 'WHITE', - name: 'threat.indicator.marking.tlp', - type: 'keyword', - }, - 'threat.indicator.modified_at': { - category: 'threat', - description: - 'The date and time when intelligence source last modified information for this indicator.', - example: '2020-11-05T17:25:47.000Z', - name: 'threat.indicator.modified_at', - type: 'date', - }, - 'threat.indicator.port': { - category: 'threat', - description: 'Identifies a threat indicator as a port number (irrespective of direction).', - example: 443, - name: 'threat.indicator.port', - type: 'long', - }, - 'threat.indicator.provider': { - category: 'threat', - description: "The name of the indicator's provider.", - example: 'lrz_urlhaus', - name: 'threat.indicator.provider', - type: 'keyword', - }, - 'threat.indicator.reference': { - category: 'threat', - description: 'Reference URL linking to additional information about this indicator.', - example: 'https://system.example.com/indicator/0001234', - name: 'threat.indicator.reference', - type: 'keyword', - }, - 'threat.indicator.registry.data.bytes': { - category: 'threat', - description: - 'Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.', - example: 'ZQBuAC0AVQBTAAAAZQBuAAAAAAA=', - name: 'threat.indicator.registry.data.bytes', - type: 'keyword', - }, - 'threat.indicator.registry.data.strings': { - category: 'threat', - description: - 'Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`).', - example: '["C:\\rta\\red_ttp\\bin\\myapp.exe"]', - name: 'threat.indicator.registry.data.strings', - type: 'wildcard', - }, - 'threat.indicator.registry.data.type': { - category: 'threat', - description: 'Standard registry type for encoding contents', - example: 'REG_SZ', - name: 'threat.indicator.registry.data.type', - type: 'keyword', - }, - 'threat.indicator.registry.hive': { - category: 'threat', - description: 'Abbreviated name for the hive.', - example: 'HKLM', - name: 'threat.indicator.registry.hive', - type: 'keyword', - }, - 'threat.indicator.registry.key': { - category: 'threat', - description: 'Hive-relative path of keys.', - example: - 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe', - name: 'threat.indicator.registry.key', - type: 'keyword', - }, - 'threat.indicator.registry.path': { - category: 'threat', - description: 'Full path, including hive, key and value', - example: - 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger', - name: 'threat.indicator.registry.path', - type: 'keyword', - }, - 'threat.indicator.registry.value': { - category: 'threat', - description: 'Name of the value written.', - example: 'Debugger', - name: 'threat.indicator.registry.value', - type: 'keyword', - }, - 'threat.indicator.scanner_stats': { - category: 'threat', - description: 'Count of AV/EDR vendors that successfully detected malicious file or URL.', - example: 4, - name: 'threat.indicator.scanner_stats', - type: 'long', - }, - 'threat.indicator.sightings': { - category: 'threat', - description: 'Number of times this indicator was observed conducting threat activity.', - example: 20, - name: 'threat.indicator.sightings', - type: 'long', - }, - 'threat.indicator.type': { - category: 'threat', - description: - 'Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: * autonomous-system * artifact * directory * domain-name * email-addr * file * ipv4-addr * ipv6-addr * mac-addr * mutex * port * process * software * url * user-account * windows-registry-key * x509-certificate', - example: 'ipv4-addr', - name: 'threat.indicator.type', - type: 'keyword', - }, - 'threat.indicator.url.domain': { - category: 'threat', - description: - 'Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.', - example: 'www.elastic.co', - name: 'threat.indicator.url.domain', - type: 'keyword', - }, - 'threat.indicator.url.extension': { - category: 'threat', - description: - 'The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', - example: 'png', - name: 'threat.indicator.url.extension', - type: 'keyword', - }, - 'threat.indicator.url.fragment': { - category: 'threat', - description: - 'Portion of the url after the `#`, such as "top". The `#` is not part of the fragment.', - name: 'threat.indicator.url.fragment', - type: 'keyword', - }, - 'threat.indicator.url.full': { - category: 'threat', - description: - 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top', - name: 'threat.indicator.url.full', - type: 'wildcard', - }, - 'threat.indicator.url.original': { - category: 'threat', - description: - 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch', - name: 'threat.indicator.url.original', - type: 'wildcard', - }, - 'threat.indicator.url.password': { - category: 'threat', - description: 'Password of the request.', - name: 'threat.indicator.url.password', - type: 'keyword', - }, - 'threat.indicator.url.path': { - category: 'threat', - description: 'Path of the request, such as "/search".', - name: 'threat.indicator.url.path', - type: 'wildcard', - }, - 'threat.indicator.url.port': { - category: 'threat', - description: 'Port of the request, such as 443.', - example: 443, - name: 'threat.indicator.url.port', - type: 'long', - format: 'string', - }, - 'threat.indicator.url.query': { - category: 'threat', - description: - 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.', - name: 'threat.indicator.url.query', - type: 'keyword', - }, - 'threat.indicator.url.registered_domain': { - category: 'threat', - description: - 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'threat.indicator.url.registered_domain', - type: 'keyword', - }, - 'threat.indicator.url.scheme': { - category: 'threat', - description: 'Scheme of the request, such as "https". Note: The `:` is not part of the scheme.', - example: 'https', - name: 'threat.indicator.url.scheme', - type: 'keyword', - }, - 'threat.indicator.url.subdomain': { - category: 'threat', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'threat.indicator.url.subdomain', - type: 'keyword', - }, - 'threat.indicator.url.top_level_domain': { - category: 'threat', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'threat.indicator.url.top_level_domain', - type: 'keyword', - }, - 'threat.indicator.url.username': { - category: 'threat', - description: 'Username of the request.', - name: 'threat.indicator.url.username', - type: 'keyword', - }, - 'threat.indicator.x509.alternative_names': { - category: 'threat', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'threat.indicator.x509.alternative_names', - type: 'keyword', - }, - 'threat.indicator.x509.issuer.common_name': { - category: 'threat', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'threat.indicator.x509.issuer.common_name', - type: 'keyword', - }, - 'threat.indicator.x509.issuer.country': { - category: 'threat', - description: 'List of country (C) codes', - example: 'US', - name: 'threat.indicator.x509.issuer.country', - type: 'keyword', - }, - 'threat.indicator.x509.issuer.distinguished_name': { - category: 'threat', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'threat.indicator.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'threat.indicator.x509.issuer.locality': { - category: 'threat', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'threat.indicator.x509.issuer.locality', - type: 'keyword', - }, - 'threat.indicator.x509.issuer.organization': { - category: 'threat', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'threat.indicator.x509.issuer.organization', - type: 'keyword', - }, - 'threat.indicator.x509.issuer.organizational_unit': { - category: 'threat', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'threat.indicator.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'threat.indicator.x509.issuer.state_or_province': { - category: 'threat', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'threat.indicator.x509.issuer.state_or_province', - type: 'keyword', - }, - 'threat.indicator.x509.not_after': { - category: 'threat', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'threat.indicator.x509.not_after', - type: 'date', - }, - 'threat.indicator.x509.not_before': { - category: 'threat', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'threat.indicator.x509.not_before', - type: 'date', - }, - 'threat.indicator.x509.public_key_algorithm': { - category: 'threat', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'threat.indicator.x509.public_key_algorithm', - type: 'keyword', - }, - 'threat.indicator.x509.public_key_curve': { - category: 'threat', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'threat.indicator.x509.public_key_curve', - type: 'keyword', - }, - 'threat.indicator.x509.public_key_exponent': { - category: 'threat', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'threat.indicator.x509.public_key_exponent', - type: 'long', - }, - 'threat.indicator.x509.public_key_size': { - category: 'threat', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'threat.indicator.x509.public_key_size', - type: 'long', - }, - 'threat.indicator.x509.serial_number': { - category: 'threat', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'threat.indicator.x509.serial_number', - type: 'keyword', - }, - 'threat.indicator.x509.signature_algorithm': { - category: 'threat', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'threat.indicator.x509.signature_algorithm', - type: 'keyword', - }, - 'threat.indicator.x509.subject.common_name': { - category: 'threat', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'threat.indicator.x509.subject.common_name', - type: 'keyword', - }, - 'threat.indicator.x509.subject.country': { - category: 'threat', - description: 'List of country (C) code', - example: 'US', - name: 'threat.indicator.x509.subject.country', - type: 'keyword', - }, - 'threat.indicator.x509.subject.distinguished_name': { - category: 'threat', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'threat.indicator.x509.subject.distinguished_name', - type: 'keyword', - }, - 'threat.indicator.x509.subject.locality': { - category: 'threat', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'threat.indicator.x509.subject.locality', - type: 'keyword', - }, - 'threat.indicator.x509.subject.organization': { - category: 'threat', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'threat.indicator.x509.subject.organization', - type: 'keyword', - }, - 'threat.indicator.x509.subject.organizational_unit': { - category: 'threat', - description: 'List of organizational units (OU) of subject.', - name: 'threat.indicator.x509.subject.organizational_unit', - type: 'keyword', - }, - 'threat.indicator.x509.subject.state_or_province': { - category: 'threat', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'threat.indicator.x509.subject.state_or_province', - type: 'keyword', - }, - 'threat.indicator.x509.version_number': { - category: 'threat', - description: 'Version of x509 format.', - example: 3, - name: 'threat.indicator.x509.version_number', - type: 'keyword', - }, - 'threat.software.alias': { - category: 'threat', - description: - 'The alias(es) of the software for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® associated software description.', - example: '[ "X-Agent" ]', - name: 'threat.software.alias', - type: 'keyword', - }, - 'threat.software.id': { - category: 'threat', - description: - 'The id of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software id.', - example: 'S0552', - name: 'threat.software.id', - type: 'keyword', - }, - 'threat.software.name': { - category: 'threat', - description: - 'The name of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software name.', - example: 'AdFind', - name: 'threat.software.name', - type: 'keyword', - }, - 'threat.software.platforms': { - category: 'threat', - description: - 'The platforms of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. Recommended Values: * AWS * Azure * Azure AD * GCP * Linux * macOS * Network * Office 365 * SaaS * Windows While not required, you can use a MITRE ATT&CK® software platforms.', - example: '[ "Windows" ]', - name: 'threat.software.platforms', - type: 'keyword', - }, - 'threat.software.reference': { - category: 'threat', - description: - 'The reference URL of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software reference URL.', - example: 'https://attack.mitre.org/software/S0552/', - name: 'threat.software.reference', - type: 'keyword', - }, - 'threat.software.type': { - category: 'threat', - description: - 'The type of software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. Recommended values * Malware * Tool While not required, you can use a MITRE ATT&CK® software type.', - example: 'Tool', - name: 'threat.software.type', - type: 'keyword', - }, - 'threat.tactic.id': { - category: 'threat', - description: - 'The id of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ )', - example: 'TA0002', - name: 'threat.tactic.id', - type: 'keyword', - }, - 'threat.tactic.name': { - category: 'threat', - description: - 'Name of the type of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/)', - example: 'Execution', - name: 'threat.tactic.name', - type: 'keyword', - }, - 'threat.tactic.reference': { - category: 'threat', - description: - 'The reference url of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ )', - example: 'https://attack.mitre.org/tactics/TA0002/', - name: 'threat.tactic.reference', - type: 'keyword', - }, - 'threat.technique.id': { - category: 'threat', - description: - 'The id of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', - example: 'T1059', - name: 'threat.technique.id', - type: 'keyword', - }, - 'threat.technique.name': { - category: 'threat', - description: - 'The name of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', - example: 'Command and Scripting Interpreter', - name: 'threat.technique.name', - type: 'keyword', - }, - 'threat.technique.reference': { - category: 'threat', - description: - 'The reference url of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', - example: 'https://attack.mitre.org/techniques/T1059/', - name: 'threat.technique.reference', - type: 'keyword', - }, - 'threat.technique.subtechnique.id': { - category: 'threat', - description: - 'The full id of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', - example: 'T1059.001', - name: 'threat.technique.subtechnique.id', - type: 'keyword', - }, - 'threat.technique.subtechnique.name': { - category: 'threat', - description: - 'The name of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', - example: 'PowerShell', - name: 'threat.technique.subtechnique.name', - type: 'keyword', - }, - 'threat.technique.subtechnique.reference': { - category: 'threat', - description: - 'The reference url of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', - example: 'https://attack.mitre.org/techniques/T1059/001/', - name: 'threat.technique.subtechnique.reference', - type: 'keyword', - }, - 'tls.cipher': { - category: 'tls', - description: 'String indicating the cipher used during the current connection.', - example: 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', - name: 'tls.cipher', - type: 'keyword', - }, - 'tls.client.certificate': { - category: 'tls', - description: - 'PEM-encoded stand-alone certificate offered by the client. This is usually mutually-exclusive of `client.certificate_chain` since this value also exists in that list.', - example: 'MII...', - name: 'tls.client.certificate', - type: 'keyword', - }, - 'tls.client.certificate_chain': { - category: 'tls', - description: - 'Array of PEM-encoded certificates that make up the certificate chain offered by the client. This is usually mutually-exclusive of `client.certificate` since that value should be the first certificate in the chain.', - example: '["MII...", "MII..."]', - name: 'tls.client.certificate_chain', - type: 'keyword', - }, - 'tls.client.hash.md5': { - category: 'tls', - description: - 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC', - name: 'tls.client.hash.md5', - type: 'keyword', - }, - 'tls.client.hash.sha1': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '9E393D93138888D288266C2D915214D1D1CCEB2A', - name: 'tls.client.hash.sha1', - type: 'keyword', - }, - 'tls.client.hash.sha256': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0', - name: 'tls.client.hash.sha256', - type: 'keyword', - }, - 'tls.client.issuer': { - category: 'tls', - description: - 'Distinguished name of subject of the issuer of the x.509 certificate presented by the client.', - example: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com', - name: 'tls.client.issuer', - type: 'keyword', - }, - 'tls.client.ja3': { - category: 'tls', - description: 'A hash that identifies clients based on how they perform an SSL/TLS handshake.', - example: 'd4e5b18d6b55c71272893221c96ba240', - name: 'tls.client.ja3', - type: 'keyword', - }, - 'tls.client.not_after': { - category: 'tls', - description: 'Date/Time indicating when client certificate is no longer considered valid.', - example: '2021-01-01T00:00:00.000Z', - name: 'tls.client.not_after', - type: 'date', - }, - 'tls.client.not_before': { - category: 'tls', - description: 'Date/Time indicating when client certificate is first considered valid.', - example: '1970-01-01T00:00:00.000Z', - name: 'tls.client.not_before', - type: 'date', - }, - 'tls.client.server_name': { - category: 'tls', - description: - 'Also called an SNI, this tells the server which hostname to which the client is attempting to connect to. When this value is available, it should get copied to `destination.domain`.', - example: 'www.elastic.co', - name: 'tls.client.server_name', - type: 'keyword', - }, - 'tls.client.subject': { - category: 'tls', - description: 'Distinguished name of subject of the x.509 certificate presented by the client.', - example: 'CN=myclient, OU=Documentation Team, DC=example, DC=com', - name: 'tls.client.subject', - type: 'keyword', - }, - 'tls.client.supported_ciphers': { - category: 'tls', - description: 'Array of ciphers offered by the client during the client hello.', - example: - '["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "..."]', - name: 'tls.client.supported_ciphers', - type: 'keyword', - }, - 'tls.client.x509.alternative_names': { - category: 'tls', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'tls.client.x509.alternative_names', - type: 'keyword', - }, - 'tls.client.x509.issuer.common_name': { - category: 'tls', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'tls.client.x509.issuer.common_name', - type: 'keyword', - }, - 'tls.client.x509.issuer.country': { - category: 'tls', - description: 'List of country (C) codes', - example: 'US', - name: 'tls.client.x509.issuer.country', - type: 'keyword', - }, - 'tls.client.x509.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'tls.client.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'tls.client.x509.issuer.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'tls.client.x509.issuer.locality', - type: 'keyword', - }, - 'tls.client.x509.issuer.organization': { - category: 'tls', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'tls.client.x509.issuer.organization', - type: 'keyword', - }, - 'tls.client.x509.issuer.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'tls.client.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'tls.client.x509.issuer.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.client.x509.issuer.state_or_province', - type: 'keyword', - }, - 'tls.client.x509.not_after': { - category: 'tls', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'tls.client.x509.not_after', - type: 'date', - }, - 'tls.client.x509.not_before': { - category: 'tls', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'tls.client.x509.not_before', - type: 'date', - }, - 'tls.client.x509.public_key_algorithm': { - category: 'tls', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'tls.client.x509.public_key_algorithm', - type: 'keyword', - }, - 'tls.client.x509.public_key_curve': { - category: 'tls', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'tls.client.x509.public_key_curve', - type: 'keyword', - }, - 'tls.client.x509.public_key_exponent': { - category: 'tls', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'tls.client.x509.public_key_exponent', - type: 'long', - }, - 'tls.client.x509.public_key_size': { - category: 'tls', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'tls.client.x509.public_key_size', - type: 'long', - }, - 'tls.client.x509.serial_number': { - category: 'tls', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'tls.client.x509.serial_number', - type: 'keyword', - }, - 'tls.client.x509.signature_algorithm': { - category: 'tls', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'tls.client.x509.signature_algorithm', - type: 'keyword', - }, - 'tls.client.x509.subject.common_name': { - category: 'tls', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'tls.client.x509.subject.common_name', - type: 'keyword', - }, - 'tls.client.x509.subject.country': { - category: 'tls', - description: 'List of country (C) code', - example: 'US', - name: 'tls.client.x509.subject.country', - type: 'keyword', - }, - 'tls.client.x509.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'tls.client.x509.subject.distinguished_name', - type: 'keyword', - }, - 'tls.client.x509.subject.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'tls.client.x509.subject.locality', - type: 'keyword', - }, - 'tls.client.x509.subject.organization': { - category: 'tls', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'tls.client.x509.subject.organization', - type: 'keyword', - }, - 'tls.client.x509.subject.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of subject.', - name: 'tls.client.x509.subject.organizational_unit', - type: 'keyword', - }, - 'tls.client.x509.subject.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.client.x509.subject.state_or_province', - type: 'keyword', - }, - 'tls.client.x509.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.client.x509.version_number', - type: 'keyword', - }, - 'tls.curve': { - category: 'tls', - description: 'String indicating the curve used for the given cipher, when applicable.', - example: 'secp256r1', - name: 'tls.curve', - type: 'keyword', - }, - 'tls.established': { - category: 'tls', - description: - 'Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel.', - name: 'tls.established', - type: 'boolean', - }, - 'tls.next_protocol': { - category: 'tls', - description: - 'String indicating the protocol being tunneled. Per the values in the IANA registry (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), this string should be lower case.', - example: 'http/1.1', - name: 'tls.next_protocol', - type: 'keyword', - }, - 'tls.resumed': { - category: 'tls', - description: - 'Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation.', - name: 'tls.resumed', - type: 'boolean', - }, - 'tls.server.certificate': { - category: 'tls', - description: - 'PEM-encoded stand-alone certificate offered by the server. This is usually mutually-exclusive of `server.certificate_chain` since this value also exists in that list.', - example: 'MII...', - name: 'tls.server.certificate', - type: 'keyword', - }, - 'tls.server.certificate_chain': { - category: 'tls', - description: - 'Array of PEM-encoded certificates that make up the certificate chain offered by the server. This is usually mutually-exclusive of `server.certificate` since that value should be the first certificate in the chain.', - example: '["MII...", "MII..."]', - name: 'tls.server.certificate_chain', - type: 'keyword', - }, - 'tls.server.hash.md5': { - category: 'tls', - description: - 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC', - name: 'tls.server.hash.md5', - type: 'keyword', - }, - 'tls.server.hash.sha1': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '9E393D93138888D288266C2D915214D1D1CCEB2A', - name: 'tls.server.hash.sha1', - type: 'keyword', - }, - 'tls.server.hash.sha256': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0', - name: 'tls.server.hash.sha256', - type: 'keyword', - }, - 'tls.server.issuer': { - category: 'tls', - description: 'Subject of the issuer of the x.509 certificate presented by the server.', - example: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com', - name: 'tls.server.issuer', - type: 'keyword', - }, - 'tls.server.ja3s': { - category: 'tls', - description: 'A hash that identifies servers based on how they perform an SSL/TLS handshake.', - example: '394441ab65754e2207b1e1b457b3641d', - name: 'tls.server.ja3s', - type: 'keyword', - }, - 'tls.server.not_after': { - category: 'tls', - description: 'Timestamp indicating when server certificate is no longer considered valid.', - example: '2021-01-01T00:00:00.000Z', - name: 'tls.server.not_after', - type: 'date', - }, - 'tls.server.not_before': { - category: 'tls', - description: 'Timestamp indicating when server certificate is first considered valid.', - example: '1970-01-01T00:00:00.000Z', - name: 'tls.server.not_before', - type: 'date', - }, - 'tls.server.subject': { - category: 'tls', - description: 'Subject of the x.509 certificate presented by the server.', - example: 'CN=www.example.com, OU=Infrastructure Team, DC=example, DC=com', - name: 'tls.server.subject', - type: 'keyword', - }, - 'tls.server.x509.alternative_names': { - category: 'tls', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'tls.server.x509.alternative_names', - type: 'keyword', - }, - 'tls.server.x509.issuer.common_name': { - category: 'tls', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'tls.server.x509.issuer.common_name', - type: 'keyword', - }, - 'tls.server.x509.issuer.country': { - category: 'tls', - description: 'List of country (C) codes', - example: 'US', - name: 'tls.server.x509.issuer.country', - type: 'keyword', - }, - 'tls.server.x509.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'tls.server.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'tls.server.x509.issuer.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'tls.server.x509.issuer.locality', - type: 'keyword', - }, - 'tls.server.x509.issuer.organization': { - category: 'tls', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'tls.server.x509.issuer.organization', - type: 'keyword', - }, - 'tls.server.x509.issuer.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'tls.server.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'tls.server.x509.issuer.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.server.x509.issuer.state_or_province', - type: 'keyword', - }, - 'tls.server.x509.not_after': { - category: 'tls', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'tls.server.x509.not_after', - type: 'date', - }, - 'tls.server.x509.not_before': { - category: 'tls', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'tls.server.x509.not_before', - type: 'date', - }, - 'tls.server.x509.public_key_algorithm': { - category: 'tls', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'tls.server.x509.public_key_algorithm', - type: 'keyword', - }, - 'tls.server.x509.public_key_curve': { - category: 'tls', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'tls.server.x509.public_key_curve', - type: 'keyword', - }, - 'tls.server.x509.public_key_exponent': { - category: 'tls', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'tls.server.x509.public_key_exponent', - type: 'long', - }, - 'tls.server.x509.public_key_size': { - category: 'tls', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'tls.server.x509.public_key_size', - type: 'long', - }, - 'tls.server.x509.serial_number': { - category: 'tls', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'tls.server.x509.serial_number', - type: 'keyword', - }, - 'tls.server.x509.signature_algorithm': { - category: 'tls', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'tls.server.x509.signature_algorithm', - type: 'keyword', - }, - 'tls.server.x509.subject.common_name': { - category: 'tls', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'tls.server.x509.subject.common_name', - type: 'keyword', - }, - 'tls.server.x509.subject.country': { - category: 'tls', - description: 'List of country (C) code', - example: 'US', - name: 'tls.server.x509.subject.country', - type: 'keyword', - }, - 'tls.server.x509.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'tls.server.x509.subject.distinguished_name', - type: 'keyword', - }, - 'tls.server.x509.subject.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'tls.server.x509.subject.locality', - type: 'keyword', - }, - 'tls.server.x509.subject.organization': { - category: 'tls', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'tls.server.x509.subject.organization', - type: 'keyword', - }, - 'tls.server.x509.subject.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of subject.', - name: 'tls.server.x509.subject.organizational_unit', - type: 'keyword', - }, - 'tls.server.x509.subject.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.server.x509.subject.state_or_province', - type: 'keyword', - }, - 'tls.server.x509.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.server.x509.version_number', - type: 'keyword', - }, - 'tls.version': { - category: 'tls', - description: 'Numeric part of the version parsed from the original string.', - example: '1.2', - name: 'tls.version', - type: 'keyword', - }, - 'tls.version_protocol': { - category: 'tls', - description: 'Normalized lowercase protocol name parsed from original string.', - example: 'tls', - name: 'tls.version_protocol', - type: 'keyword', - }, - 'span.id': { - category: 'span', - description: - 'Unique identifier of the span within the scope of its trace. A span represents an operation within a transaction, such as a request to another service, or a database query.', - example: '3ff9a8981b7ccd5a', - name: 'span.id', - type: 'keyword', - }, - 'trace.id': { - category: 'trace', - description: - 'Unique identifier of the trace. A trace groups multiple events like transactions that belong together. For example, a user request handled by multiple inter-connected services.', - example: '4bf92f3577b34da6a3ce929d0e0e4736', - name: 'trace.id', - type: 'keyword', - }, - 'transaction.id': { - category: 'transaction', - description: - 'Unique identifier of the transaction within the scope of its trace. A transaction is the highest level of work measured within a service, such as a request to a server.', - example: '00f067aa0ba902b7', - name: 'transaction.id', - type: 'keyword', - }, - 'url.domain': { - category: 'url', - description: - 'Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.', - example: 'www.elastic.co', - name: 'url.domain', - type: 'keyword', - }, - 'url.extension': { - category: 'url', - description: - 'The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', - example: 'png', - name: 'url.extension', - type: 'keyword', - }, - 'url.fragment': { - category: 'url', - description: - 'Portion of the url after the `#`, such as "top". The `#` is not part of the fragment.', - name: 'url.fragment', - type: 'keyword', - }, - 'url.full': { - category: 'url', - description: - 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top', - name: 'url.full', - type: 'wildcard', - }, - 'url.original': { - category: 'url', - description: - 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch', - name: 'url.original', - type: 'wildcard', - }, - 'url.password': { - category: 'url', - description: 'Password of the request.', - name: 'url.password', - type: 'keyword', - }, - 'url.path': { - category: 'url', - description: 'Path of the request, such as "/search".', - name: 'url.path', - type: 'wildcard', - }, - 'url.port': { - category: 'url', - description: 'Port of the request, such as 443.', - example: 443, - name: 'url.port', - type: 'long', - format: 'string', - }, - 'url.query': { - category: 'url', - description: - 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.', - name: 'url.query', - type: 'keyword', - }, - 'url.registered_domain': { - category: 'url', - description: - 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'url.registered_domain', - type: 'keyword', - }, - 'url.scheme': { - category: 'url', - description: 'Scheme of the request, such as "https". Note: The `:` is not part of the scheme.', - example: 'https', - name: 'url.scheme', - type: 'keyword', - }, - 'url.subdomain': { - category: 'url', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'url.subdomain', - type: 'keyword', - }, - 'url.top_level_domain': { - category: 'url', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'url.top_level_domain', - type: 'keyword', - }, - 'url.username': { - category: 'url', - description: 'Username of the request.', - name: 'url.username', - type: 'keyword', - }, - 'user.changes.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.changes.domain', - type: 'keyword', - }, - 'user.changes.email': { - category: 'user', - description: 'User email address.', - name: 'user.changes.email', - type: 'keyword', - }, - 'user.changes.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.changes.full_name', - type: 'keyword', - }, - 'user.changes.group.domain': { - category: 'user', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.changes.group.domain', - type: 'keyword', - }, - 'user.changes.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.changes.group.id', - type: 'keyword', - }, - 'user.changes.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.changes.group.name', - type: 'keyword', - }, - 'user.changes.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.changes.hash', - type: 'keyword', - }, - 'user.changes.id': { - category: 'user', - description: 'Unique identifier of the user.', - example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', - name: 'user.changes.id', - type: 'keyword', - }, - 'user.changes.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'a.einstein', - name: 'user.changes.name', - type: 'keyword', - }, - 'user.changes.roles': { - category: 'user', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'user.changes.roles', - type: 'keyword', - }, - 'user.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.domain', - type: 'keyword', - }, - 'user.effective.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.effective.domain', - type: 'keyword', - }, - 'user.effective.email': { - category: 'user', - description: 'User email address.', - name: 'user.effective.email', - type: 'keyword', - }, - 'user.effective.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.effective.full_name', - type: 'keyword', - }, - 'user.effective.group.domain': { - category: 'user', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.effective.group.domain', - type: 'keyword', - }, - 'user.effective.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.effective.group.id', - type: 'keyword', - }, - 'user.effective.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.effective.group.name', - type: 'keyword', - }, - 'user.effective.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.effective.hash', - type: 'keyword', - }, - 'user.effective.id': { - category: 'user', - description: 'Unique identifier of the user.', - example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', - name: 'user.effective.id', - type: 'keyword', - }, - 'user.effective.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'a.einstein', - name: 'user.effective.name', - type: 'keyword', - }, - 'user.effective.roles': { - category: 'user', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'user.effective.roles', - type: 'keyword', - }, - 'user.email': { - category: 'user', - description: 'User email address.', - name: 'user.email', - type: 'keyword', - }, - 'user.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.full_name', - type: 'keyword', - }, - 'user.group.domain': { - category: 'user', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.group.domain', - type: 'keyword', - }, - 'user.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.group.id', - type: 'keyword', - }, - 'user.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.group.name', - type: 'keyword', - }, - 'user.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.hash', - type: 'keyword', - }, - 'user.id': { - category: 'user', - description: 'Unique identifier of the user.', - example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', - name: 'user.id', - type: 'keyword', - }, - 'user.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'a.einstein', - name: 'user.name', - type: 'keyword', - }, - 'user.roles': { - category: 'user', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'user.roles', - type: 'keyword', - }, - 'user.target.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.target.domain', - type: 'keyword', - }, - 'user.target.email': { - category: 'user', - description: 'User email address.', - name: 'user.target.email', - type: 'keyword', - }, - 'user.target.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.target.full_name', - type: 'keyword', - }, - 'user.target.group.domain': { - category: 'user', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.target.group.domain', - type: 'keyword', - }, - 'user.target.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.target.group.id', - type: 'keyword', - }, - 'user.target.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.target.group.name', - type: 'keyword', - }, - 'user.target.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.target.hash', - type: 'keyword', - }, - 'user.target.id': { - category: 'user', - description: 'Unique identifier of the user.', - example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', - name: 'user.target.id', - type: 'keyword', - }, - 'user.target.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'a.einstein', - name: 'user.target.name', - type: 'keyword', - }, - 'user.target.roles': { - category: 'user', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'user.target.roles', - type: 'keyword', - }, - 'user_agent.device.name': { - category: 'user_agent', - description: 'Name of the device.', - example: 'iPhone', - name: 'user_agent.device.name', - type: 'keyword', - }, - 'user_agent.name': { - category: 'user_agent', - description: 'Name of the user agent.', - example: 'Safari', - name: 'user_agent.name', - type: 'keyword', - }, - 'user_agent.original': { - category: 'user_agent', - description: 'Unparsed user_agent string.', - example: - 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1', - name: 'user_agent.original', - type: 'keyword', - }, - 'user_agent.os.family': { - category: 'user_agent', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'user_agent.os.family', - type: 'keyword', - }, - 'user_agent.os.full': { - category: 'user_agent', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'user_agent.os.full', - type: 'keyword', - }, - 'user_agent.os.kernel': { - category: 'user_agent', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'user_agent.os.kernel', - type: 'keyword', - }, - 'user_agent.os.name': { - category: 'user_agent', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'user_agent.os.name', - type: 'keyword', - }, - 'user_agent.os.platform': { - category: 'user_agent', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'user_agent.os.platform', - type: 'keyword', - }, - 'user_agent.os.type': { - category: 'user_agent', - description: - "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", - example: 'macos', - name: 'user_agent.os.type', - type: 'keyword', - }, - 'user_agent.os.version': { - category: 'user_agent', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'user_agent.os.version', - type: 'keyword', - }, - 'user_agent.version': { - category: 'user_agent', - description: 'Version of the user agent.', - example: 12, - name: 'user_agent.version', - type: 'keyword', - }, - 'vlan.id': { - category: 'vlan', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'vlan.id', - type: 'keyword', - }, - 'vlan.name': { - category: 'vlan', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'vlan.name', - type: 'keyword', - }, - 'vulnerability.category': { - category: 'vulnerability', - description: - 'The type of system or architecture that the vulnerability affects. These may be platform-specific (for example, Debian or SUSE) or general (for example, Database or Firewall). For example (https://qualysguard.qualys.com/qwebhelp/fo_portal/knowledgebase/vulnerability_categories.htm[Qualys vulnerability categories]) This field must be an array.', - example: '["Firewall"]', - name: 'vulnerability.category', - type: 'keyword', - }, - 'vulnerability.classification': { - category: 'vulnerability', - description: - 'The classification of the vulnerability scoring system. For example (https://www.first.org/cvss/)', - example: 'CVSS', - name: 'vulnerability.classification', - type: 'keyword', - }, - 'vulnerability.description': { - category: 'vulnerability', - description: - 'The description of the vulnerability that provides additional context of the vulnerability. For example (https://cve.mitre.org/about/faqs.html#cve_entry_descriptions_created[Common Vulnerabilities and Exposure CVE description])', - example: 'In macOS before 2.12.6, there is a vulnerability in the RPC...', - name: 'vulnerability.description', - type: 'keyword', - }, - 'vulnerability.enumeration': { - category: 'vulnerability', - description: - 'The type of identifier used for this vulnerability. For example (https://cve.mitre.org/about/)', - example: 'CVE', - name: 'vulnerability.enumeration', - type: 'keyword', - }, - 'vulnerability.id': { - category: 'vulnerability', - description: - 'The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id)[Common Vulnerabilities and Exposure CVE ID]', - example: 'CVE-2019-00001', - name: 'vulnerability.id', - type: 'keyword', - }, - 'vulnerability.reference': { - category: 'vulnerability', - description: - 'A resource that provides additional information, context, and mitigations for the identified vulnerability.', - example: 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6111', - name: 'vulnerability.reference', - type: 'keyword', - }, - 'vulnerability.report_id': { - category: 'vulnerability', - description: 'The report or scan identification number.', - example: 20191018.0001, - name: 'vulnerability.report_id', - type: 'keyword', - }, - 'vulnerability.scanner.vendor': { - category: 'vulnerability', - description: 'The name of the vulnerability scanner vendor.', - example: 'Tenable', - name: 'vulnerability.scanner.vendor', - type: 'keyword', - }, - 'vulnerability.score.base': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Base scores cover an assessment for exploitability metrics (attack vector, complexity, privileges, and user interaction), impact metrics (confidentiality, integrity, and availability), and scope. For example (https://www.first.org/cvss/specification-document)', - example: 5.5, - name: 'vulnerability.score.base', - type: 'float', - }, - 'vulnerability.score.environmental': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Environmental scores cover an assessment for any modified Base metrics, confidentiality, integrity, and availability requirements. For example (https://www.first.org/cvss/specification-document)', - example: 5.5, - name: 'vulnerability.score.environmental', - type: 'float', - }, - 'vulnerability.score.temporal': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Temporal scores cover an assessment for code maturity, remediation level, and confidence. For example (https://www.first.org/cvss/specification-document)', - name: 'vulnerability.score.temporal', - type: 'float', - }, - 'vulnerability.score.version': { - category: 'vulnerability', - description: - 'The National Vulnerability Database (NVD) provides qualitative severity rankings of "Low", "Medium", and "High" for CVSS v2.0 base score ranges in addition to the severity ratings for CVSS v3.0 as they are defined in the CVSS v3.0 specification. CVSS is owned and managed by FIRST.Org, Inc. (FIRST), a US-based non-profit organization, whose mission is to help computer security incident response teams across the world. For example (https://nvd.nist.gov/vuln-metrics/cvss)', - example: 2, - name: 'vulnerability.score.version', - type: 'keyword', - }, - 'vulnerability.severity': { - category: 'vulnerability', - description: - 'The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss)', - example: 'Critical', - name: 'vulnerability.severity', - type: 'keyword', - }, - 'x509.alternative_names': { - category: 'x509', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'x509.alternative_names', - type: 'keyword', - }, - 'x509.issuer.common_name': { - category: 'x509', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'x509.issuer.common_name', - type: 'keyword', - }, - 'x509.issuer.country': { - category: 'x509', - description: 'List of country (C) codes', - example: 'US', - name: 'x509.issuer.country', - type: 'keyword', - }, - 'x509.issuer.distinguished_name': { - category: 'x509', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'x509.issuer.distinguished_name', - type: 'keyword', - }, - 'x509.issuer.locality': { - category: 'x509', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'x509.issuer.locality', - type: 'keyword', - }, - 'x509.issuer.organization': { - category: 'x509', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'x509.issuer.organization', - type: 'keyword', - }, - 'x509.issuer.organizational_unit': { - category: 'x509', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'x509.issuer.organizational_unit', - type: 'keyword', - }, - 'x509.issuer.state_or_province': { - category: 'x509', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'x509.issuer.state_or_province', - type: 'keyword', - }, - 'x509.not_after': { - category: 'x509', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'x509.not_after', - type: 'date', - }, - 'x509.not_before': { - category: 'x509', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'x509.not_before', - type: 'date', - }, - 'x509.public_key_algorithm': { - category: 'x509', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'x509.public_key_algorithm', - type: 'keyword', - }, - 'x509.public_key_curve': { - category: 'x509', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'x509.public_key_curve', - type: 'keyword', - }, - 'x509.public_key_exponent': { - category: 'x509', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'x509.public_key_exponent', - type: 'long', - }, - 'x509.public_key_size': { - category: 'x509', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'x509.public_key_size', - type: 'long', - }, - 'x509.serial_number': { - category: 'x509', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'x509.serial_number', - type: 'keyword', - }, - 'x509.signature_algorithm': { - category: 'x509', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'x509.signature_algorithm', - type: 'keyword', - }, - 'x509.subject.common_name': { - category: 'x509', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'x509.subject.common_name', - type: 'keyword', - }, - 'x509.subject.country': { - category: 'x509', - description: 'List of country (C) code', - example: 'US', - name: 'x509.subject.country', - type: 'keyword', - }, - 'x509.subject.distinguished_name': { - category: 'x509', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'x509.subject.distinguished_name', - type: 'keyword', - }, - 'x509.subject.locality': { - category: 'x509', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'x509.subject.locality', - type: 'keyword', - }, - 'x509.subject.organization': { - category: 'x509', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'x509.subject.organization', - type: 'keyword', - }, - 'x509.subject.organizational_unit': { - category: 'x509', - description: 'List of organizational units (OU) of subject.', - name: 'x509.subject.organizational_unit', - type: 'keyword', - }, - 'x509.subject.state_or_province': { - category: 'x509', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'x509.subject.state_or_province', - type: 'keyword', - }, - 'x509.version_number': { - category: 'x509', - description: 'Version of x509 format.', - example: 3, - name: 'x509.version_number', - type: 'keyword', - }, - 'agent.hostname': { - category: 'agent', - description: 'Deprecated - use agent.name or agent.id to identify an agent. ', - name: 'agent.hostname', - type: 'alias', - }, - 'beat.timezone': { - category: 'beat', - name: 'beat.timezone', - type: 'alias', - }, - fields: { - category: 'base', - description: 'Contains user configurable fields. ', - name: 'fields', - type: 'object', - }, - 'beat.name': { - category: 'beat', - name: 'beat.name', - type: 'alias', - }, - 'beat.hostname': { - category: 'beat', - name: 'beat.hostname', - type: 'alias', - }, - 'timeseries.instance': { - category: 'timeseries', - description: 'Time series instance id', - name: 'timeseries.instance', - type: 'keyword', - }, - 'cloud.image.id': { - category: 'cloud', - description: 'Image ID for the cloud instance. ', - example: 'ami-abcd1234', - name: 'cloud.image.id', - }, - 'meta.cloud.provider': { - category: 'meta', - name: 'meta.cloud.provider', - type: 'alias', - }, - 'meta.cloud.instance_id': { - category: 'meta', - name: 'meta.cloud.instance_id', - type: 'alias', - }, - 'meta.cloud.instance_name': { - category: 'meta', - name: 'meta.cloud.instance_name', - type: 'alias', - }, - 'meta.cloud.machine_type': { - category: 'meta', - name: 'meta.cloud.machine_type', - type: 'alias', - }, - 'meta.cloud.availability_zone': { - category: 'meta', - name: 'meta.cloud.availability_zone', - type: 'alias', - }, - 'meta.cloud.project_id': { - category: 'meta', - name: 'meta.cloud.project_id', - type: 'alias', - }, - 'meta.cloud.region': { - category: 'meta', - name: 'meta.cloud.region', - type: 'alias', - }, - 'docker.container.id': { - category: 'docker', - name: 'docker.container.id', - type: 'alias', - }, - 'docker.container.image': { - category: 'docker', - name: 'docker.container.image', - type: 'alias', - }, - 'docker.container.name': { - category: 'docker', - name: 'docker.container.name', - type: 'alias', - }, - 'docker.container.labels': { - category: 'docker', - description: 'Image labels. ', - name: 'docker.container.labels', - type: 'object', - }, - 'host.containerized': { - category: 'host', - description: 'If the host is a container. ', - name: 'host.containerized', - type: 'boolean', - }, - 'host.os.build': { - category: 'host', - description: 'OS build information. ', - example: '18D109', - name: 'host.os.build', - type: 'keyword', - }, - 'host.os.codename': { - category: 'host', - description: 'OS codename, if any. ', - example: 'stretch', - name: 'host.os.codename', - type: 'keyword', - }, - 'kubernetes.pod.name': { - category: 'kubernetes', - description: 'Kubernetes pod name ', - name: 'kubernetes.pod.name', - type: 'keyword', - }, - 'kubernetes.pod.uid': { - category: 'kubernetes', - description: 'Kubernetes Pod UID ', - name: 'kubernetes.pod.uid', - type: 'keyword', - }, - 'kubernetes.pod.ip': { - category: 'kubernetes', - description: 'Kubernetes Pod IP ', - name: 'kubernetes.pod.ip', - type: 'ip', - }, - 'kubernetes.namespace': { - category: 'kubernetes', - description: 'Kubernetes namespace ', - name: 'kubernetes.namespace', - type: 'keyword', - }, - 'kubernetes.node.name': { - category: 'kubernetes', - description: 'Kubernetes node name ', - name: 'kubernetes.node.name', - type: 'keyword', - }, - 'kubernetes.node.hostname': { - category: 'kubernetes', - description: 'Kubernetes hostname as reported by the node’s kernel ', - name: 'kubernetes.node.hostname', - type: 'keyword', - }, - 'kubernetes.labels.*': { - category: 'kubernetes', - description: 'Kubernetes labels map ', - name: 'kubernetes.labels.*', - type: 'object', - }, - 'kubernetes.annotations.*': { - category: 'kubernetes', - description: 'Kubernetes annotations map ', - name: 'kubernetes.annotations.*', - type: 'object', - }, - 'kubernetes.selectors.*': { - category: 'kubernetes', - description: 'Kubernetes selectors map ', - name: 'kubernetes.selectors.*', - type: 'object', - }, - 'kubernetes.replicaset.name': { - category: 'kubernetes', - description: 'Kubernetes replicaset name ', - name: 'kubernetes.replicaset.name', - type: 'keyword', - }, - 'kubernetes.deployment.name': { - category: 'kubernetes', - description: 'Kubernetes deployment name ', - name: 'kubernetes.deployment.name', - type: 'keyword', - }, - 'kubernetes.statefulset.name': { - category: 'kubernetes', - description: 'Kubernetes statefulset name ', - name: 'kubernetes.statefulset.name', - type: 'keyword', - }, - 'kubernetes.container.name': { - category: 'kubernetes', - description: 'Kubernetes container name (different than the name from the runtime) ', - name: 'kubernetes.container.name', - type: 'keyword', - }, - 'process.exe': { - category: 'process', - name: 'process.exe', - type: 'alias', - }, - 'process.owner.id': { - category: 'process', - description: 'Unique identifier of the user.', - name: 'process.owner.id', - type: 'keyword', - }, - 'process.owner.name': { - category: 'process', - description: 'Short name or login of the user.', - example: 'albert', - name: 'process.owner.name', - type: 'keyword', - }, - 'jolokia.agent.version': { - category: 'jolokia', - description: 'Version number of jolokia agent. ', - name: 'jolokia.agent.version', - type: 'keyword', - }, - 'jolokia.agent.id': { - category: 'jolokia', - description: - 'Each agent has a unique id which can be either provided during startup of the agent in form of a configuration parameter or being autodetected. If autodected, the id has several parts: The IP, the process id, hashcode of the agent and its type. ', - name: 'jolokia.agent.id', - type: 'keyword', - }, - 'jolokia.server.product': { - category: 'jolokia', - description: 'The container product if detected. ', - name: 'jolokia.server.product', - type: 'keyword', - }, - 'jolokia.server.version': { - category: 'jolokia', - description: "The container's version (if detected). ", - name: 'jolokia.server.version', - type: 'keyword', - }, - 'jolokia.server.vendor': { - category: 'jolokia', - description: 'The vendor of the container the agent is running in. ', - name: 'jolokia.server.vendor', - type: 'keyword', - }, - 'jolokia.url': { - category: 'jolokia', - description: 'The URL how this agent can be contacted. ', - name: 'jolokia.url', - type: 'keyword', - }, - 'jolokia.secured': { - category: 'jolokia', - description: 'Whether the agent was configured for authentication or not. ', - name: 'jolokia.secured', - type: 'boolean', - }, - 'file.setuid': { - category: 'file', - description: 'Set if the file has the `setuid` bit set. Omitted otherwise.', - example: 'true', - name: 'file.setuid', - type: 'boolean', - }, - 'file.setgid': { - category: 'file', - description: 'Set if the file has the `setgid` bit set. Omitted otherwise.', - example: 'true', - name: 'file.setgid', - type: 'boolean', - }, - 'file.origin': { - category: 'file', - description: - 'An array of strings describing a possible external origin for this file. For example, the URL it was downloaded from. Only supported in macOS, via the kMDItemWhereFroms attribute. Omitted if origin information is not available. ', - name: 'file.origin', - type: 'keyword', - }, - 'file.selinux.user': { - category: 'file', - description: 'The owner of the object.', - name: 'file.selinux.user', - type: 'keyword', - }, - 'file.selinux.role': { - category: 'file', - description: "The object's SELinux role.", - name: 'file.selinux.role', - type: 'keyword', - }, - 'file.selinux.domain': { - category: 'file', - description: "The object's SELinux domain or type.", - name: 'file.selinux.domain', - type: 'keyword', - }, - 'file.selinux.level': { - category: 'file', - description: "The object's SELinux level.", - example: 's0', - name: 'file.selinux.level', - type: 'keyword', - }, - 'user.audit.id': { - category: 'user', - description: 'Audit user ID.', - name: 'user.audit.id', - type: 'keyword', - }, - 'user.audit.name': { - category: 'user', - description: 'Audit user name.', - name: 'user.audit.name', - type: 'keyword', - }, - 'user.filesystem.id': { - category: 'user', - description: 'Filesystem user ID.', - name: 'user.filesystem.id', - type: 'keyword', - }, - 'user.filesystem.name': { - category: 'user', - description: 'Filesystem user name.', - name: 'user.filesystem.name', - type: 'keyword', - }, - 'user.filesystem.group.id': { - category: 'user', - description: 'Filesystem group ID.', - name: 'user.filesystem.group.id', - type: 'keyword', - }, - 'user.filesystem.group.name': { - category: 'user', - description: 'Filesystem group name.', - name: 'user.filesystem.group.name', - type: 'keyword', - }, - 'user.saved.id': { - category: 'user', - description: 'Saved user ID.', - name: 'user.saved.id', - type: 'keyword', - }, - 'user.saved.name': { - category: 'user', - description: 'Saved user name.', - name: 'user.saved.name', - type: 'keyword', - }, - 'user.saved.group.id': { - category: 'user', - description: 'Saved group ID.', - name: 'user.saved.group.id', - type: 'keyword', - }, - 'user.saved.group.name': { - category: 'user', - description: 'Saved group name.', - name: 'user.saved.group.name', - type: 'keyword', - }, - 'user.auid': { - category: 'user', - name: 'user.auid', - type: 'alias', - }, - 'user.uid': { - category: 'user', - name: 'user.uid', - type: 'alias', - }, - 'user.fsuid': { - category: 'user', - name: 'user.fsuid', - type: 'alias', - }, - 'user.suid': { - category: 'user', - name: 'user.suid', - type: 'alias', - }, - 'user.gid': { - category: 'user', - name: 'user.gid', - type: 'alias', - }, - 'user.sgid': { - category: 'user', - name: 'user.sgid', - type: 'alias', - }, - 'user.fsgid': { - category: 'user', - name: 'user.fsgid', - type: 'alias', - }, - 'user.name_map.auid': { - category: 'user', - name: 'user.name_map.auid', - type: 'alias', - }, - 'user.name_map.uid': { - category: 'user', - name: 'user.name_map.uid', - type: 'alias', - }, - 'user.name_map.fsuid': { - category: 'user', - name: 'user.name_map.fsuid', - type: 'alias', - }, - 'user.name_map.suid': { - category: 'user', - name: 'user.name_map.suid', - type: 'alias', - }, - 'user.name_map.gid': { - category: 'user', - name: 'user.name_map.gid', - type: 'alias', - }, - 'user.name_map.sgid': { - category: 'user', - name: 'user.name_map.sgid', - type: 'alias', - }, - 'user.name_map.fsgid': { - category: 'user', - name: 'user.name_map.fsgid', - type: 'alias', - }, - 'user.selinux.user': { - category: 'user', - description: 'account submitted for authentication', - name: 'user.selinux.user', - type: 'keyword', - }, - 'user.selinux.role': { - category: 'user', - description: "user's SELinux role", - name: 'user.selinux.role', - type: 'keyword', - }, - 'user.selinux.domain': { - category: 'user', - description: "The actor's SELinux domain or type.", - name: 'user.selinux.domain', - type: 'keyword', - }, - 'user.selinux.level': { - category: 'user', - description: "The actor's SELinux level.", - example: 's0', - name: 'user.selinux.level', - type: 'keyword', - }, - 'user.selinux.category': { - category: 'user', - description: "The actor's SELinux category or compartments.", - name: 'user.selinux.category', - type: 'keyword', - }, - 'process.cwd': { - category: 'process', - description: 'The current working directory.', - name: 'process.cwd', - type: 'alias', - }, - 'source.path': { - category: 'source', - description: 'This is the path associated with a unix socket.', - name: 'source.path', - type: 'keyword', - }, - 'destination.path': { - category: 'destination', - description: 'This is the path associated with a unix socket.', - name: 'destination.path', - type: 'keyword', - }, - 'auditd.message_type': { - category: 'auditd', - description: 'The audit message type (e.g. syscall or apparmor_denied). ', - example: 'syscall', - name: 'auditd.message_type', - type: 'keyword', - }, - 'auditd.sequence': { - category: 'auditd', - description: - 'The sequence number of the event as assigned by the kernel. Sequence numbers are stored as a uint32 in the kernel and can rollover. ', - name: 'auditd.sequence', - type: 'long', - }, - 'auditd.session': { - category: 'auditd', - description: - 'The session ID assigned to a login. All events related to a login session will have the same value. ', - name: 'auditd.session', - type: 'keyword', - }, - 'auditd.result': { - category: 'auditd', - description: 'The result of the audited operation (success/fail).', - example: 'success or fail', - name: 'auditd.result', - type: 'keyword', - }, - 'auditd.summary.actor.primary': { - category: 'auditd', - description: - "The primary identity of the actor. This is the actor's original login ID. It will not change even if the user changes to another account. ", - name: 'auditd.summary.actor.primary', - type: 'keyword', - }, - 'auditd.summary.actor.secondary': { - category: 'auditd', - description: - 'The secondary identity of the actor. This is typically the same as the primary, except for when the user has used `su`.', - name: 'auditd.summary.actor.secondary', - type: 'keyword', - }, - 'auditd.summary.object.type': { - category: 'auditd', - description: 'A description of the what the "thing" is (e.g. file, socket, user-session). ', - name: 'auditd.summary.object.type', - type: 'keyword', - }, - 'auditd.summary.object.primary': { - category: 'auditd', - description: '', - name: 'auditd.summary.object.primary', - type: 'keyword', - }, - 'auditd.summary.object.secondary': { - category: 'auditd', - description: '', - name: 'auditd.summary.object.secondary', - type: 'keyword', - }, - 'auditd.summary.how': { - category: 'auditd', - description: - 'This describes how the action was performed. Usually this is the exe or command that was being executed that triggered the event. ', - name: 'auditd.summary.how', - type: 'keyword', - }, - 'auditd.paths.inode': { - category: 'auditd', - description: 'inode number', - name: 'auditd.paths.inode', - type: 'keyword', - }, - 'auditd.paths.dev': { - category: 'auditd', - description: 'device name as found in /dev', - name: 'auditd.paths.dev', - type: 'keyword', - }, - 'auditd.paths.obj_user': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_user', - type: 'keyword', - }, - 'auditd.paths.obj_role': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_role', - type: 'keyword', - }, - 'auditd.paths.obj_domain': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_domain', - type: 'keyword', - }, - 'auditd.paths.obj_level': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_level', - type: 'keyword', - }, - 'auditd.paths.objtype': { - category: 'auditd', - description: '', - name: 'auditd.paths.objtype', - type: 'keyword', - }, - 'auditd.paths.ouid': { - category: 'auditd', - description: 'file owner user ID', - name: 'auditd.paths.ouid', - type: 'keyword', - }, - 'auditd.paths.rdev': { - category: 'auditd', - description: 'the device identifier (special files only)', - name: 'auditd.paths.rdev', - type: 'keyword', - }, - 'auditd.paths.nametype': { - category: 'auditd', - description: 'kind of file operation being referenced', - name: 'auditd.paths.nametype', - type: 'keyword', - }, - 'auditd.paths.ogid': { - category: 'auditd', - description: 'file owner group ID', - name: 'auditd.paths.ogid', - type: 'keyword', - }, - 'auditd.paths.item': { - category: 'auditd', - description: 'which item is being recorded', - name: 'auditd.paths.item', - type: 'keyword', - }, - 'auditd.paths.mode': { - category: 'auditd', - description: 'mode flags on a file', - name: 'auditd.paths.mode', - type: 'keyword', - }, - 'auditd.paths.name': { - category: 'auditd', - description: 'file name in avcs', - name: 'auditd.paths.name', - type: 'keyword', - }, - 'auditd.data.action': { - category: 'auditd', - description: 'netfilter packet disposition', - name: 'auditd.data.action', - type: 'keyword', - }, - 'auditd.data.minor': { - category: 'auditd', - description: 'device minor number', - name: 'auditd.data.minor', - type: 'keyword', - }, - 'auditd.data.acct': { - category: 'auditd', - description: "a user's account name", - name: 'auditd.data.acct', - type: 'keyword', - }, - 'auditd.data.addr': { - category: 'auditd', - description: 'the remote address that the user is connecting from', - name: 'auditd.data.addr', - type: 'keyword', - }, - 'auditd.data.cipher': { - category: 'auditd', - description: 'name of crypto cipher selected', - name: 'auditd.data.cipher', - type: 'keyword', - }, - 'auditd.data.id': { - category: 'auditd', - description: 'during account changes', - name: 'auditd.data.id', - type: 'keyword', - }, - 'auditd.data.entries': { - category: 'auditd', - description: 'number of entries in the netfilter table', - name: 'auditd.data.entries', - type: 'keyword', - }, - 'auditd.data.kind': { - category: 'auditd', - description: 'server or client in crypto operation', - name: 'auditd.data.kind', - type: 'keyword', - }, - 'auditd.data.ksize': { - category: 'auditd', - description: 'key size for crypto operation', - name: 'auditd.data.ksize', - type: 'keyword', - }, - 'auditd.data.spid': { - category: 'auditd', - description: 'sent process ID', - name: 'auditd.data.spid', - type: 'keyword', - }, - 'auditd.data.arch': { - category: 'auditd', - description: 'the elf architecture flags', - name: 'auditd.data.arch', - type: 'keyword', - }, - 'auditd.data.argc': { - category: 'auditd', - description: 'the number of arguments to an execve syscall', - name: 'auditd.data.argc', - type: 'keyword', - }, - 'auditd.data.major': { - category: 'auditd', - description: 'device major number', - name: 'auditd.data.major', - type: 'keyword', - }, - 'auditd.data.unit': { - category: 'auditd', - description: 'systemd unit', - name: 'auditd.data.unit', - type: 'keyword', - }, - 'auditd.data.table': { - category: 'auditd', - description: 'netfilter table name', - name: 'auditd.data.table', - type: 'keyword', - }, - 'auditd.data.terminal': { - category: 'auditd', - description: 'terminal name the user is running programs on', - name: 'auditd.data.terminal', - type: 'keyword', - }, - 'auditd.data.grantors': { - category: 'auditd', - description: 'pam modules approving the action', - name: 'auditd.data.grantors', - type: 'keyword', - }, - 'auditd.data.direction': { - category: 'auditd', - description: 'direction of crypto operation', - name: 'auditd.data.direction', - type: 'keyword', - }, - 'auditd.data.op': { - category: 'auditd', - description: 'the operation being performed that is audited', - name: 'auditd.data.op', - type: 'keyword', - }, - 'auditd.data.tty': { - category: 'auditd', - description: 'tty udevice the user is running programs on', - name: 'auditd.data.tty', - type: 'keyword', - }, - 'auditd.data.syscall': { - category: 'auditd', - description: 'syscall number in effect when the event occurred', - name: 'auditd.data.syscall', - type: 'keyword', - }, - 'auditd.data.data': { - category: 'auditd', - description: 'TTY text', - name: 'auditd.data.data', - type: 'keyword', - }, - 'auditd.data.family': { - category: 'auditd', - description: 'netfilter protocol', - name: 'auditd.data.family', - type: 'keyword', - }, - 'auditd.data.mac': { - category: 'auditd', - description: 'crypto MAC algorithm selected', - name: 'auditd.data.mac', - type: 'keyword', - }, - 'auditd.data.pfs': { - category: 'auditd', - description: 'perfect forward secrecy method', - name: 'auditd.data.pfs', - type: 'keyword', - }, - 'auditd.data.items': { - category: 'auditd', - description: 'the number of path records in the event', - name: 'auditd.data.items', - type: 'keyword', - }, - 'auditd.data.a0': { - category: 'auditd', - description: '', - name: 'auditd.data.a0', - type: 'keyword', - }, - 'auditd.data.a1': { - category: 'auditd', - description: '', - name: 'auditd.data.a1', - type: 'keyword', - }, - 'auditd.data.a2': { - category: 'auditd', - description: '', - name: 'auditd.data.a2', - type: 'keyword', - }, - 'auditd.data.a3': { - category: 'auditd', - description: '', - name: 'auditd.data.a3', - type: 'keyword', - }, - 'auditd.data.hostname': { - category: 'auditd', - description: 'the hostname that the user is connecting from', - name: 'auditd.data.hostname', - type: 'keyword', - }, - 'auditd.data.lport': { - category: 'auditd', - description: 'local network port', - name: 'auditd.data.lport', - type: 'keyword', - }, - 'auditd.data.rport': { - category: 'auditd', - description: 'remote port number', - name: 'auditd.data.rport', - type: 'keyword', - }, - 'auditd.data.exit': { - category: 'auditd', - description: 'syscall exit code', - name: 'auditd.data.exit', - type: 'keyword', - }, - 'auditd.data.fp': { - category: 'auditd', - description: 'crypto key finger print', - name: 'auditd.data.fp', - type: 'keyword', - }, - 'auditd.data.laddr': { - category: 'auditd', - description: 'local network address', - name: 'auditd.data.laddr', - type: 'keyword', - }, - 'auditd.data.sport': { - category: 'auditd', - description: 'local port number', - name: 'auditd.data.sport', - type: 'keyword', - }, - 'auditd.data.capability': { - category: 'auditd', - description: 'posix capabilities', - name: 'auditd.data.capability', - type: 'keyword', - }, - 'auditd.data.nargs': { - category: 'auditd', - description: 'the number of arguments to a socket call', - name: 'auditd.data.nargs', - type: 'keyword', - }, - 'auditd.data.new-enabled': { - category: 'auditd', - description: 'new TTY audit enabled setting', - name: 'auditd.data.new-enabled', - type: 'keyword', - }, - 'auditd.data.audit_backlog_limit': { - category: 'auditd', - description: "audit system's backlog queue size", - name: 'auditd.data.audit_backlog_limit', - type: 'keyword', - }, - 'auditd.data.dir': { - category: 'auditd', - description: 'directory name', - name: 'auditd.data.dir', - type: 'keyword', - }, - 'auditd.data.cap_pe': { - category: 'auditd', - description: 'process effective capability map', - name: 'auditd.data.cap_pe', - type: 'keyword', - }, - 'auditd.data.model': { - category: 'auditd', - description: 'security model being used for virt', - name: 'auditd.data.model', - type: 'keyword', - }, - 'auditd.data.new_pp': { - category: 'auditd', - description: 'new process permitted capability map', - name: 'auditd.data.new_pp', - type: 'keyword', - }, - 'auditd.data.old-enabled': { - category: 'auditd', - description: 'present TTY audit enabled setting', - name: 'auditd.data.old-enabled', - type: 'keyword', - }, - 'auditd.data.oauid': { - category: 'auditd', - description: "object's login user ID", - name: 'auditd.data.oauid', - type: 'keyword', - }, - 'auditd.data.old': { - category: 'auditd', - description: 'old value', - name: 'auditd.data.old', - type: 'keyword', - }, - 'auditd.data.banners': { - category: 'auditd', - description: 'banners used on printed page', - name: 'auditd.data.banners', - type: 'keyword', - }, - 'auditd.data.feature': { - category: 'auditd', - description: 'kernel feature being changed', - name: 'auditd.data.feature', - type: 'keyword', - }, - 'auditd.data.vm-ctx': { - category: 'auditd', - description: "the vm's context string", - name: 'auditd.data.vm-ctx', - type: 'keyword', - }, - 'auditd.data.opid': { - category: 'auditd', - description: "object's process ID", - name: 'auditd.data.opid', - type: 'keyword', - }, - 'auditd.data.seperms': { - category: 'auditd', - description: 'SELinux permissions being used', - name: 'auditd.data.seperms', - type: 'keyword', - }, - 'auditd.data.seresult': { - category: 'auditd', - description: 'SELinux AVC decision granted/denied', - name: 'auditd.data.seresult', - type: 'keyword', - }, - 'auditd.data.new-rng': { - category: 'auditd', - description: 'device name of rng being added from a vm', - name: 'auditd.data.new-rng', - type: 'keyword', - }, - 'auditd.data.old-net': { - category: 'auditd', - description: 'present MAC address assigned to vm', - name: 'auditd.data.old-net', - type: 'keyword', - }, - 'auditd.data.sigev_signo': { - category: 'auditd', - description: 'signal number', - name: 'auditd.data.sigev_signo', - type: 'keyword', - }, - 'auditd.data.ino': { - category: 'auditd', - description: 'inode number', - name: 'auditd.data.ino', - type: 'keyword', - }, - 'auditd.data.old_enforcing': { - category: 'auditd', - description: 'old MAC enforcement status', - name: 'auditd.data.old_enforcing', - type: 'keyword', - }, - 'auditd.data.old-vcpu': { - category: 'auditd', - description: 'present number of CPU cores', - name: 'auditd.data.old-vcpu', - type: 'keyword', - }, - 'auditd.data.range': { - category: 'auditd', - description: "user's SE Linux range", - name: 'auditd.data.range', - type: 'keyword', - }, - 'auditd.data.res': { - category: 'auditd', - description: 'result of the audited operation(success/fail)', - name: 'auditd.data.res', - type: 'keyword', - }, - 'auditd.data.added': { - category: 'auditd', - description: 'number of new files detected', - name: 'auditd.data.added', - type: 'keyword', - }, - 'auditd.data.fam': { - category: 'auditd', - description: 'socket address family', - name: 'auditd.data.fam', - type: 'keyword', - }, - 'auditd.data.nlnk-pid': { - category: 'auditd', - description: 'pid of netlink packet sender', - name: 'auditd.data.nlnk-pid', - type: 'keyword', - }, - 'auditd.data.subj': { - category: 'auditd', - description: "lspp subject's context string", - name: 'auditd.data.subj', - type: 'keyword', - }, - 'auditd.data.a[0-3]': { - category: 'auditd', - description: 'the arguments to a syscall', - name: 'auditd.data.a[0-3]', - type: 'keyword', - }, - 'auditd.data.cgroup': { - category: 'auditd', - description: 'path to cgroup in sysfs', - name: 'auditd.data.cgroup', - type: 'keyword', - }, - 'auditd.data.kernel': { - category: 'auditd', - description: "kernel's version number", - name: 'auditd.data.kernel', - type: 'keyword', - }, - 'auditd.data.ocomm': { - category: 'auditd', - description: "object's command line name", - name: 'auditd.data.ocomm', - type: 'keyword', - }, - 'auditd.data.new-net': { - category: 'auditd', - description: 'MAC address being assigned to vm', - name: 'auditd.data.new-net', - type: 'keyword', - }, - 'auditd.data.permissive': { - category: 'auditd', - description: 'SELinux is in permissive mode', - name: 'auditd.data.permissive', - type: 'keyword', - }, - 'auditd.data.class': { - category: 'auditd', - description: 'resource class assigned to vm', - name: 'auditd.data.class', - type: 'keyword', - }, - 'auditd.data.compat': { - category: 'auditd', - description: 'is_compat_task result', - name: 'auditd.data.compat', - type: 'keyword', - }, - 'auditd.data.fi': { - category: 'auditd', - description: 'file assigned inherited capability map', - name: 'auditd.data.fi', - type: 'keyword', - }, - 'auditd.data.changed': { - category: 'auditd', - description: 'number of changed files', - name: 'auditd.data.changed', - type: 'keyword', - }, - 'auditd.data.msg': { - category: 'auditd', - description: 'the payload of the audit record', - name: 'auditd.data.msg', - type: 'keyword', - }, - 'auditd.data.dport': { - category: 'auditd', - description: 'remote port number', - name: 'auditd.data.dport', - type: 'keyword', - }, - 'auditd.data.new-seuser': { - category: 'auditd', - description: 'new SELinux user', - name: 'auditd.data.new-seuser', - type: 'keyword', - }, - 'auditd.data.invalid_context': { - category: 'auditd', - description: 'SELinux context', - name: 'auditd.data.invalid_context', - type: 'keyword', - }, - 'auditd.data.dmac': { - category: 'auditd', - description: 'remote MAC address', - name: 'auditd.data.dmac', - type: 'keyword', - }, - 'auditd.data.ipx-net': { - category: 'auditd', - description: 'IPX network number', - name: 'auditd.data.ipx-net', - type: 'keyword', - }, - 'auditd.data.iuid': { - category: 'auditd', - description: "ipc object's user ID", - name: 'auditd.data.iuid', - type: 'keyword', - }, - 'auditd.data.macproto': { - category: 'auditd', - description: 'ethernet packet type ID field', - name: 'auditd.data.macproto', - type: 'keyword', - }, - 'auditd.data.obj': { - category: 'auditd', - description: 'lspp object context string', - name: 'auditd.data.obj', - type: 'keyword', - }, - 'auditd.data.ipid': { - category: 'auditd', - description: 'IP datagram fragment identifier', - name: 'auditd.data.ipid', - type: 'keyword', - }, - 'auditd.data.new-fs': { - category: 'auditd', - description: 'file system being added to vm', - name: 'auditd.data.new-fs', - type: 'keyword', - }, - 'auditd.data.vm-pid': { - category: 'auditd', - description: "vm's process ID", - name: 'auditd.data.vm-pid', - type: 'keyword', - }, - 'auditd.data.cap_pi': { - category: 'auditd', - description: 'process inherited capability map', - name: 'auditd.data.cap_pi', - type: 'keyword', - }, - 'auditd.data.old-auid': { - category: 'auditd', - description: 'previous auid value', - name: 'auditd.data.old-auid', - type: 'keyword', - }, - 'auditd.data.oses': { - category: 'auditd', - description: "object's session ID", - name: 'auditd.data.oses', - type: 'keyword', - }, - 'auditd.data.fd': { - category: 'auditd', - description: 'file descriptor number', - name: 'auditd.data.fd', - type: 'keyword', - }, - 'auditd.data.igid': { - category: 'auditd', - description: "ipc object's group ID", - name: 'auditd.data.igid', - type: 'keyword', - }, - 'auditd.data.new-disk': { - category: 'auditd', - description: 'disk being added to vm', - name: 'auditd.data.new-disk', - type: 'keyword', - }, - 'auditd.data.parent': { - category: 'auditd', - description: 'the inode number of the parent file', - name: 'auditd.data.parent', - type: 'keyword', - }, - 'auditd.data.len': { - category: 'auditd', - description: 'length', - name: 'auditd.data.len', - type: 'keyword', - }, - 'auditd.data.oflag': { - category: 'auditd', - description: 'open syscall flags', - name: 'auditd.data.oflag', - type: 'keyword', - }, - 'auditd.data.uuid': { - category: 'auditd', - description: 'a UUID', - name: 'auditd.data.uuid', - type: 'keyword', - }, - 'auditd.data.code': { - category: 'auditd', - description: 'seccomp action code', - name: 'auditd.data.code', - type: 'keyword', - }, - 'auditd.data.nlnk-grp': { - category: 'auditd', - description: 'netlink group number', - name: 'auditd.data.nlnk-grp', - type: 'keyword', - }, - 'auditd.data.cap_fp': { - category: 'auditd', - description: 'file permitted capability map', - name: 'auditd.data.cap_fp', - type: 'keyword', - }, - 'auditd.data.new-mem': { - category: 'auditd', - description: 'new amount of memory in KB', - name: 'auditd.data.new-mem', - type: 'keyword', - }, - 'auditd.data.seperm': { - category: 'auditd', - description: 'SELinux permission being decided on', - name: 'auditd.data.seperm', - type: 'keyword', - }, - 'auditd.data.enforcing': { - category: 'auditd', - description: 'new MAC enforcement status', - name: 'auditd.data.enforcing', - type: 'keyword', - }, - 'auditd.data.new-chardev': { - category: 'auditd', - description: 'new character device being assigned to vm', - name: 'auditd.data.new-chardev', - type: 'keyword', - }, - 'auditd.data.old-rng': { - category: 'auditd', - description: 'device name of rng being removed from a vm', - name: 'auditd.data.old-rng', - type: 'keyword', - }, - 'auditd.data.outif': { - category: 'auditd', - description: 'out interface number', - name: 'auditd.data.outif', - type: 'keyword', - }, - 'auditd.data.cmd': { - category: 'auditd', - description: 'command being executed', - name: 'auditd.data.cmd', - type: 'keyword', - }, - 'auditd.data.hook': { - category: 'auditd', - description: 'netfilter hook that packet came from', - name: 'auditd.data.hook', - type: 'keyword', - }, - 'auditd.data.new-level': { - category: 'auditd', - description: 'new run level', - name: 'auditd.data.new-level', - type: 'keyword', - }, - 'auditd.data.sauid': { - category: 'auditd', - description: 'sent login user ID', - name: 'auditd.data.sauid', - type: 'keyword', - }, - 'auditd.data.sig': { - category: 'auditd', - description: 'signal number', - name: 'auditd.data.sig', - type: 'keyword', - }, - 'auditd.data.audit_backlog_wait_time': { - category: 'auditd', - description: "audit system's backlog wait time", - name: 'auditd.data.audit_backlog_wait_time', - type: 'keyword', - }, - 'auditd.data.printer': { - category: 'auditd', - description: 'printer name', - name: 'auditd.data.printer', - type: 'keyword', - }, - 'auditd.data.old-mem': { - category: 'auditd', - description: 'present amount of memory in KB', - name: 'auditd.data.old-mem', - type: 'keyword', - }, - 'auditd.data.perm': { - category: 'auditd', - description: 'the file permission being used', - name: 'auditd.data.perm', - type: 'keyword', - }, - 'auditd.data.old_pi': { - category: 'auditd', - description: 'old process inherited capability map', - name: 'auditd.data.old_pi', - type: 'keyword', - }, - 'auditd.data.state': { - category: 'auditd', - description: 'audit daemon configuration resulting state', - name: 'auditd.data.state', - type: 'keyword', - }, - 'auditd.data.format': { - category: 'auditd', - description: "audit log's format", - name: 'auditd.data.format', - type: 'keyword', - }, - 'auditd.data.new_gid': { - category: 'auditd', - description: 'new group ID being assigned', - name: 'auditd.data.new_gid', - type: 'keyword', - }, - 'auditd.data.tcontext': { - category: 'auditd', - description: "the target's or object's context string", - name: 'auditd.data.tcontext', - type: 'keyword', - }, - 'auditd.data.maj': { - category: 'auditd', - description: 'device major number', - name: 'auditd.data.maj', - type: 'keyword', - }, - 'auditd.data.watch': { - category: 'auditd', - description: 'file name in a watch record', - name: 'auditd.data.watch', - type: 'keyword', - }, - 'auditd.data.device': { - category: 'auditd', - description: 'device name', - name: 'auditd.data.device', - type: 'keyword', - }, - 'auditd.data.grp': { - category: 'auditd', - description: 'group name', - name: 'auditd.data.grp', - type: 'keyword', - }, - 'auditd.data.bool': { - category: 'auditd', - description: 'name of SELinux boolean', - name: 'auditd.data.bool', - type: 'keyword', - }, - 'auditd.data.icmp_type': { - category: 'auditd', - description: 'type of icmp message', - name: 'auditd.data.icmp_type', - type: 'keyword', - }, - 'auditd.data.new_lock': { - category: 'auditd', - description: 'new value of feature lock', - name: 'auditd.data.new_lock', - type: 'keyword', - }, - 'auditd.data.old_prom': { - category: 'auditd', - description: 'network promiscuity flag', - name: 'auditd.data.old_prom', - type: 'keyword', - }, - 'auditd.data.acl': { - category: 'auditd', - description: 'access mode of resource assigned to vm', - name: 'auditd.data.acl', - type: 'keyword', - }, - 'auditd.data.ip': { - category: 'auditd', - description: 'network address of a printer', - name: 'auditd.data.ip', - type: 'keyword', - }, - 'auditd.data.new_pi': { - category: 'auditd', - description: 'new process inherited capability map', - name: 'auditd.data.new_pi', - type: 'keyword', - }, - 'auditd.data.default-context': { - category: 'auditd', - description: 'default MAC context', - name: 'auditd.data.default-context', - type: 'keyword', - }, - 'auditd.data.inode_gid': { - category: 'auditd', - description: "group ID of the inode's owner", - name: 'auditd.data.inode_gid', - type: 'keyword', - }, - 'auditd.data.new-log_passwd': { - category: 'auditd', - description: 'new value for TTY password logging', - name: 'auditd.data.new-log_passwd', - type: 'keyword', - }, - 'auditd.data.new_pe': { - category: 'auditd', - description: 'new process effective capability map', - name: 'auditd.data.new_pe', - type: 'keyword', - }, - 'auditd.data.selected-context': { - category: 'auditd', - description: 'new MAC context assigned to session', - name: 'auditd.data.selected-context', - type: 'keyword', - }, - 'auditd.data.cap_fver': { - category: 'auditd', - description: 'file system capabilities version number', - name: 'auditd.data.cap_fver', - type: 'keyword', - }, - 'auditd.data.file': { - category: 'auditd', - description: 'file name', - name: 'auditd.data.file', - type: 'keyword', - }, - 'auditd.data.net': { - category: 'auditd', - description: 'network MAC address', - name: 'auditd.data.net', - type: 'keyword', - }, - 'auditd.data.virt': { - category: 'auditd', - description: 'kind of virtualization being referenced', - name: 'auditd.data.virt', - type: 'keyword', - }, - 'auditd.data.cap_pp': { - category: 'auditd', - description: 'process permitted capability map', - name: 'auditd.data.cap_pp', - type: 'keyword', - }, - 'auditd.data.old-range': { - category: 'auditd', - description: 'present SELinux range', - name: 'auditd.data.old-range', - type: 'keyword', - }, - 'auditd.data.resrc': { - category: 'auditd', - description: 'resource being assigned', - name: 'auditd.data.resrc', - type: 'keyword', - }, - 'auditd.data.new-range': { - category: 'auditd', - description: 'new SELinux range', - name: 'auditd.data.new-range', - type: 'keyword', - }, - 'auditd.data.obj_gid': { - category: 'auditd', - description: 'group ID of object', - name: 'auditd.data.obj_gid', - type: 'keyword', - }, - 'auditd.data.proto': { - category: 'auditd', - description: 'network protocol', - name: 'auditd.data.proto', - type: 'keyword', - }, - 'auditd.data.old-disk': { - category: 'auditd', - description: 'disk being removed from vm', - name: 'auditd.data.old-disk', - type: 'keyword', - }, - 'auditd.data.audit_failure': { - category: 'auditd', - description: "audit system's failure mode", - name: 'auditd.data.audit_failure', - type: 'keyword', - }, - 'auditd.data.inif': { - category: 'auditd', - description: 'in interface number', - name: 'auditd.data.inif', - type: 'keyword', - }, - 'auditd.data.vm': { - category: 'auditd', - description: 'virtual machine name', - name: 'auditd.data.vm', - type: 'keyword', - }, - 'auditd.data.flags': { - category: 'auditd', - description: 'mmap syscall flags', - name: 'auditd.data.flags', - type: 'keyword', - }, - 'auditd.data.nlnk-fam': { - category: 'auditd', - description: 'netlink protocol number', - name: 'auditd.data.nlnk-fam', - type: 'keyword', - }, - 'auditd.data.old-fs': { - category: 'auditd', - description: 'file system being removed from vm', - name: 'auditd.data.old-fs', - type: 'keyword', - }, - 'auditd.data.old-ses': { - category: 'auditd', - description: 'previous ses value', - name: 'auditd.data.old-ses', - type: 'keyword', - }, - 'auditd.data.seqno': { - category: 'auditd', - description: 'sequence number', - name: 'auditd.data.seqno', - type: 'keyword', - }, - 'auditd.data.fver': { - category: 'auditd', - description: 'file system capabilities version number', - name: 'auditd.data.fver', - type: 'keyword', - }, - 'auditd.data.qbytes': { - category: 'auditd', - description: 'ipc objects quantity of bytes', - name: 'auditd.data.qbytes', - type: 'keyword', - }, - 'auditd.data.seuser': { - category: 'auditd', - description: "user's SE Linux user acct", - name: 'auditd.data.seuser', - type: 'keyword', - }, - 'auditd.data.cap_fe': { - category: 'auditd', - description: 'file assigned effective capability map', - name: 'auditd.data.cap_fe', - type: 'keyword', - }, - 'auditd.data.new-vcpu': { - category: 'auditd', - description: 'new number of CPU cores', - name: 'auditd.data.new-vcpu', - type: 'keyword', - }, - 'auditd.data.old-level': { - category: 'auditd', - description: 'old run level', - name: 'auditd.data.old-level', - type: 'keyword', - }, - 'auditd.data.old_pp': { - category: 'auditd', - description: 'old process permitted capability map', - name: 'auditd.data.old_pp', - type: 'keyword', - }, - 'auditd.data.daddr': { - category: 'auditd', - description: 'remote IP address', - name: 'auditd.data.daddr', - type: 'keyword', - }, - 'auditd.data.old-role': { - category: 'auditd', - description: 'present SELinux role', - name: 'auditd.data.old-role', - type: 'keyword', - }, - 'auditd.data.ioctlcmd': { - category: 'auditd', - description: 'The request argument to the ioctl syscall', - name: 'auditd.data.ioctlcmd', - type: 'keyword', - }, - 'auditd.data.smac': { - category: 'auditd', - description: 'local MAC address', - name: 'auditd.data.smac', - type: 'keyword', - }, - 'auditd.data.apparmor': { - category: 'auditd', - description: 'apparmor event information', - name: 'auditd.data.apparmor', - type: 'keyword', - }, - 'auditd.data.fe': { - category: 'auditd', - description: 'file assigned effective capability map', - name: 'auditd.data.fe', - type: 'keyword', - }, - 'auditd.data.perm_mask': { - category: 'auditd', - description: 'file permission mask that triggered a watch event', - name: 'auditd.data.perm_mask', - type: 'keyword', - }, - 'auditd.data.ses': { - category: 'auditd', - description: 'login session ID', - name: 'auditd.data.ses', - type: 'keyword', - }, - 'auditd.data.cap_fi': { - category: 'auditd', - description: 'file inherited capability map', - name: 'auditd.data.cap_fi', - type: 'keyword', - }, - 'auditd.data.obj_uid': { - category: 'auditd', - description: 'user ID of object', - name: 'auditd.data.obj_uid', - type: 'keyword', - }, - 'auditd.data.reason': { - category: 'auditd', - description: 'text string denoting a reason for the action', - name: 'auditd.data.reason', - type: 'keyword', - }, - 'auditd.data.list': { - category: 'auditd', - description: "the audit system's filter list number", - name: 'auditd.data.list', - type: 'keyword', - }, - 'auditd.data.old_lock': { - category: 'auditd', - description: 'present value of feature lock', - name: 'auditd.data.old_lock', - type: 'keyword', - }, - 'auditd.data.bus': { - category: 'auditd', - description: 'name of subsystem bus a vm resource belongs to', - name: 'auditd.data.bus', - type: 'keyword', - }, - 'auditd.data.old_pe': { - category: 'auditd', - description: 'old process effective capability map', - name: 'auditd.data.old_pe', - type: 'keyword', - }, - 'auditd.data.new-role': { - category: 'auditd', - description: 'new SELinux role', - name: 'auditd.data.new-role', - type: 'keyword', - }, - 'auditd.data.prom': { - category: 'auditd', - description: 'network promiscuity flag', - name: 'auditd.data.prom', - type: 'keyword', - }, - 'auditd.data.uri': { - category: 'auditd', - description: 'URI pointing to a printer', - name: 'auditd.data.uri', - type: 'keyword', - }, - 'auditd.data.audit_enabled': { - category: 'auditd', - description: "audit systems's enable/disable status", - name: 'auditd.data.audit_enabled', - type: 'keyword', - }, - 'auditd.data.old-log_passwd': { - category: 'auditd', - description: 'present value for TTY password logging', - name: 'auditd.data.old-log_passwd', - type: 'keyword', - }, - 'auditd.data.old-seuser': { - category: 'auditd', - description: 'present SELinux user', - name: 'auditd.data.old-seuser', - type: 'keyword', - }, - 'auditd.data.per': { - category: 'auditd', - description: 'linux personality', - name: 'auditd.data.per', - type: 'keyword', - }, - 'auditd.data.scontext': { - category: 'auditd', - description: "the subject's context string", - name: 'auditd.data.scontext', - type: 'keyword', - }, - 'auditd.data.tclass': { - category: 'auditd', - description: "target's object classification", - name: 'auditd.data.tclass', - type: 'keyword', - }, - 'auditd.data.ver': { - category: 'auditd', - description: "audit daemon's version number", - name: 'auditd.data.ver', - type: 'keyword', - }, - 'auditd.data.new': { - category: 'auditd', - description: 'value being set in feature', - name: 'auditd.data.new', - type: 'keyword', - }, - 'auditd.data.val': { - category: 'auditd', - description: 'generic value associated with the operation', - name: 'auditd.data.val', - type: 'keyword', - }, - 'auditd.data.img-ctx': { - category: 'auditd', - description: "the vm's disk image context string", - name: 'auditd.data.img-ctx', - type: 'keyword', - }, - 'auditd.data.old-chardev': { - category: 'auditd', - description: 'present character device assigned to vm', - name: 'auditd.data.old-chardev', - type: 'keyword', - }, - 'auditd.data.old_val': { - category: 'auditd', - description: 'current value of SELinux boolean', - name: 'auditd.data.old_val', - type: 'keyword', - }, - 'auditd.data.success': { - category: 'auditd', - description: 'whether the syscall was successful or not', - name: 'auditd.data.success', - type: 'keyword', - }, - 'auditd.data.inode_uid': { - category: 'auditd', - description: "user ID of the inode's owner", - name: 'auditd.data.inode_uid', - type: 'keyword', - }, - 'auditd.data.removed': { - category: 'auditd', - description: 'number of deleted files', - name: 'auditd.data.removed', - type: 'keyword', - }, - 'auditd.data.socket.port': { - category: 'auditd', - description: 'The port number.', - name: 'auditd.data.socket.port', - type: 'keyword', - }, - 'auditd.data.socket.saddr': { - category: 'auditd', - description: 'The raw socket address structure.', - name: 'auditd.data.socket.saddr', - type: 'keyword', - }, - 'auditd.data.socket.addr': { - category: 'auditd', - description: 'The remote address.', - name: 'auditd.data.socket.addr', - type: 'keyword', - }, - 'auditd.data.socket.family': { - category: 'auditd', - description: 'The socket family (unix, ipv4, ipv6, netlink).', - example: 'unix', - name: 'auditd.data.socket.family', - type: 'keyword', - }, - 'auditd.data.socket.path': { - category: 'auditd', - description: 'This is the path associated with a unix socket.', - name: 'auditd.data.socket.path', - type: 'keyword', - }, - 'auditd.messages': { - category: 'auditd', - description: - 'An ordered list of the raw messages received from the kernel that were used to construct this document. This field is present if an error occurred processing the data or if `include_raw_message` is set in the config. ', - name: 'auditd.messages', - type: 'alias', - }, - 'auditd.warnings': { - category: 'auditd', - description: - 'The warnings generated by the Beat during the construction of the event. These are disabled by default and are used for development and debug purposes only. ', - name: 'auditd.warnings', - type: 'alias', - }, - 'geoip.continent_name': { - category: 'geoip', - description: 'The name of the continent. ', - name: 'geoip.continent_name', - type: 'keyword', - }, - 'geoip.city_name': { - category: 'geoip', - description: 'The name of the city. ', - name: 'geoip.city_name', - type: 'keyword', - }, - 'geoip.region_name': { - category: 'geoip', - description: 'The name of the region. ', - name: 'geoip.region_name', - type: 'keyword', - }, - 'geoip.country_iso_code': { - category: 'geoip', - description: 'Country ISO code. ', - name: 'geoip.country_iso_code', - type: 'keyword', - }, - 'geoip.location': { - category: 'geoip', - description: 'The longitude and latitude. ', - name: 'geoip.location', - type: 'geo_point', - }, - 'hash.blake2b_256': { - category: 'hash', - description: 'BLAKE2b-256 hash of the file.', - name: 'hash.blake2b_256', - type: 'keyword', - }, - 'hash.blake2b_384': { - category: 'hash', - description: 'BLAKE2b-384 hash of the file.', - name: 'hash.blake2b_384', - type: 'keyword', - }, - 'hash.blake2b_512': { - category: 'hash', - description: 'BLAKE2b-512 hash of the file.', - name: 'hash.blake2b_512', - type: 'keyword', - }, - 'hash.sha224': { - category: 'hash', - description: 'SHA224 hash of the file.', - name: 'hash.sha224', - type: 'keyword', - }, - 'hash.sha384': { - category: 'hash', - description: 'SHA384 hash of the file.', - name: 'hash.sha384', - type: 'keyword', - }, - 'hash.sha3_224': { - category: 'hash', - description: 'SHA3_224 hash of the file.', - name: 'hash.sha3_224', - type: 'keyword', - }, - 'hash.sha3_256': { - category: 'hash', - description: 'SHA3_256 hash of the file.', - name: 'hash.sha3_256', - type: 'keyword', - }, - 'hash.sha3_384': { - category: 'hash', - description: 'SHA3_384 hash of the file.', - name: 'hash.sha3_384', - type: 'keyword', - }, - 'hash.sha3_512': { - category: 'hash', - description: 'SHA3_512 hash of the file.', - name: 'hash.sha3_512', - type: 'keyword', - }, - 'hash.sha512_224': { - category: 'hash', - description: 'SHA512/224 hash of the file.', - name: 'hash.sha512_224', - type: 'keyword', - }, - 'hash.sha512_256': { - category: 'hash', - description: 'SHA512/256 hash of the file.', - name: 'hash.sha512_256', - type: 'keyword', - }, - 'hash.xxh64': { - category: 'hash', - description: 'XX64 hash of the file.', - name: 'hash.xxh64', - type: 'keyword', - }, - 'event.origin': { - category: 'event', - description: - 'Origin of the event. This can be a file path (e.g. `/var/log/log.1`), or the name of the system component that supplied the data (e.g. `netlink`). ', - name: 'event.origin', - type: 'keyword', - }, - 'user.entity_id': { - category: 'user', - description: - 'ID uniquely identifying the user on a host. It is computed as a SHA-256 hash of the host ID, user ID, and user name. ', - name: 'user.entity_id', - type: 'keyword', - }, - 'user.terminal': { - category: 'user', - description: 'Terminal of the user. ', - name: 'user.terminal', - type: 'keyword', - }, - 'process.hash.blake2b_256': { - category: 'process', - description: 'BLAKE2b-256 hash of the executable.', - name: 'process.hash.blake2b_256', - type: 'keyword', - }, - 'process.hash.blake2b_384': { - category: 'process', - description: 'BLAKE2b-384 hash of the executable.', - name: 'process.hash.blake2b_384', - type: 'keyword', - }, - 'process.hash.blake2b_512': { - category: 'process', - description: 'BLAKE2b-512 hash of the executable.', - name: 'process.hash.blake2b_512', - type: 'keyword', - }, - 'process.hash.sha224': { - category: 'process', - description: 'SHA224 hash of the executable.', - name: 'process.hash.sha224', - type: 'keyword', - }, - 'process.hash.sha384': { - category: 'process', - description: 'SHA384 hash of the executable.', - name: 'process.hash.sha384', - type: 'keyword', - }, - 'process.hash.sha3_224': { - category: 'process', - description: 'SHA3_224 hash of the executable.', - name: 'process.hash.sha3_224', - type: 'keyword', - }, - 'process.hash.sha3_256': { - category: 'process', - description: 'SHA3_256 hash of the executable.', - name: 'process.hash.sha3_256', - type: 'keyword', - }, - 'process.hash.sha3_384': { - category: 'process', - description: 'SHA3_384 hash of the executable.', - name: 'process.hash.sha3_384', - type: 'keyword', - }, - 'process.hash.sha3_512': { - category: 'process', - description: 'SHA3_512 hash of the executable.', - name: 'process.hash.sha3_512', - type: 'keyword', - }, - 'process.hash.sha512_224': { - category: 'process', - description: 'SHA512/224 hash of the executable.', - name: 'process.hash.sha512_224', - type: 'keyword', - }, - 'process.hash.sha512_256': { - category: 'process', - description: 'SHA512/256 hash of the executable.', - name: 'process.hash.sha512_256', - type: 'keyword', - }, - 'process.hash.xxh64': { - category: 'process', - description: 'XX64 hash of the executable.', - name: 'process.hash.xxh64', - type: 'keyword', - }, - 'socket.entity_id': { - category: 'socket', - description: - 'ID uniquely identifying the socket. It is computed as a SHA-256 hash of the host ID, socket inode, local IP, local port, remote IP, and remote port. ', - name: 'socket.entity_id', - type: 'keyword', - }, - 'system.audit.host.uptime': { - category: 'system', - description: 'Uptime in nanoseconds. ', - name: 'system.audit.host.uptime', - type: 'long', - format: 'duration', - }, - 'system.audit.host.boottime': { - category: 'system', - description: 'Boot time. ', - name: 'system.audit.host.boottime', - type: 'date', - }, - 'system.audit.host.containerized': { - category: 'system', - description: 'Set if host is a container. ', - name: 'system.audit.host.containerized', - type: 'boolean', - }, - 'system.audit.host.timezone.name': { - category: 'system', - description: 'Name of the timezone of the host, e.g. BST. ', - name: 'system.audit.host.timezone.name', - type: 'keyword', - }, - 'system.audit.host.timezone.offset.sec': { - category: 'system', - description: 'Timezone offset in seconds. ', - name: 'system.audit.host.timezone.offset.sec', - type: 'long', - }, - 'system.audit.host.hostname': { - category: 'system', - description: 'Hostname. ', - name: 'system.audit.host.hostname', - type: 'keyword', - }, - 'system.audit.host.id': { - category: 'system', - description: 'Host ID. ', - name: 'system.audit.host.id', - type: 'keyword', - }, - 'system.audit.host.architecture': { - category: 'system', - description: 'Host architecture (e.g. x86_64). ', - name: 'system.audit.host.architecture', - type: 'keyword', - }, - 'system.audit.host.mac': { - category: 'system', - description: 'MAC addresses. ', - name: 'system.audit.host.mac', - type: 'keyword', - }, - 'system.audit.host.ip': { - category: 'system', - description: 'IP addresses. ', - name: 'system.audit.host.ip', - type: 'ip', - }, - 'system.audit.host.os.codename': { - category: 'system', - description: 'OS codename, if any (e.g. stretch). ', - name: 'system.audit.host.os.codename', - type: 'keyword', - }, - 'system.audit.host.os.platform': { - category: 'system', - description: 'OS platform (e.g. centos, ubuntu, windows). ', - name: 'system.audit.host.os.platform', - type: 'keyword', - }, - 'system.audit.host.os.name': { - category: 'system', - description: 'OS name (e.g. Mac OS X). ', - name: 'system.audit.host.os.name', - type: 'keyword', - }, - 'system.audit.host.os.family': { - category: 'system', - description: 'OS family (e.g. redhat, debian, freebsd, windows). ', - name: 'system.audit.host.os.family', - type: 'keyword', - }, - 'system.audit.host.os.version': { - category: 'system', - description: 'OS version. ', - name: 'system.audit.host.os.version', - type: 'keyword', - }, - 'system.audit.host.os.kernel': { - category: 'system', - description: "The operating system's kernel version. ", - name: 'system.audit.host.os.kernel', - type: 'keyword', - }, - 'system.audit.host.os.type': { - category: 'system', - description: 'OS type (see ECS os.type). ', - name: 'system.audit.host.os.type', - type: 'keyword', - }, - 'system.audit.package.entity_id': { - category: 'system', - description: - 'ID uniquely identifying the package. It is computed as a SHA-256 hash of the host ID, package name, and package version. ', - name: 'system.audit.package.entity_id', - type: 'keyword', - }, - 'system.audit.package.name': { - category: 'system', - description: 'Package name. ', - name: 'system.audit.package.name', - type: 'keyword', - }, - 'system.audit.package.version': { - category: 'system', - description: 'Package version. ', - name: 'system.audit.package.version', - type: 'keyword', - }, - 'system.audit.package.release': { - category: 'system', - description: 'Package release. ', - name: 'system.audit.package.release', - type: 'keyword', - }, - 'system.audit.package.arch': { - category: 'system', - description: 'Package architecture. ', - name: 'system.audit.package.arch', - type: 'keyword', - }, - 'system.audit.package.license': { - category: 'system', - description: 'Package license. ', - name: 'system.audit.package.license', - type: 'keyword', - }, - 'system.audit.package.installtime': { - category: 'system', - description: 'Package install time. ', - name: 'system.audit.package.installtime', - type: 'date', - }, - 'system.audit.package.size': { - category: 'system', - description: 'Package size. ', - name: 'system.audit.package.size', - type: 'long', - }, - 'system.audit.package.summary': { - category: 'system', - description: 'Package summary. ', - name: 'system.audit.package.summary', - }, - 'system.audit.package.url': { - category: 'system', - description: 'Package URL. ', - name: 'system.audit.package.url', - type: 'keyword', - }, - 'system.audit.user.name': { - category: 'system', - description: 'User name. ', - name: 'system.audit.user.name', - type: 'keyword', - }, - 'system.audit.user.uid': { - category: 'system', - description: 'User ID. ', - name: 'system.audit.user.uid', - type: 'keyword', - }, - 'system.audit.user.gid': { - category: 'system', - description: 'Group ID. ', - name: 'system.audit.user.gid', - type: 'keyword', - }, - 'system.audit.user.dir': { - category: 'system', - description: "User's home directory. ", - name: 'system.audit.user.dir', - type: 'keyword', - }, - 'system.audit.user.shell': { - category: 'system', - description: 'Program to run at login. ', - name: 'system.audit.user.shell', - type: 'keyword', - }, - 'system.audit.user.user_information': { - category: 'system', - description: 'General user information. On Linux, this is the gecos field. ', - name: 'system.audit.user.user_information', - type: 'keyword', - }, - 'system.audit.user.group.name': { - category: 'system', - description: 'Group name. ', - name: 'system.audit.user.group.name', - type: 'keyword', - }, - 'system.audit.user.group.gid': { - category: 'system', - description: 'Group ID. ', - name: 'system.audit.user.group.gid', - type: 'integer', - }, - 'system.audit.user.password.type': { - category: 'system', - description: - "A user's password type. Possible values are `shadow_password` (the password hash is in the shadow file), `password_disabled`, `no_password` (this is dangerous as anyone can log in), and `crypt_password` (when the password field in /etc/passwd seems to contain an encrypted password). ", - name: 'system.audit.user.password.type', - type: 'keyword', - }, - 'system.audit.user.password.last_changed': { - category: 'system', - description: "The day the user's password was last changed. ", - name: 'system.audit.user.password.last_changed', - type: 'date', - }, - 'log.source.address': { - category: 'log', - description: 'Source address from which the log event was read / sent from. ', - name: 'log.source.address', - type: 'keyword', - }, - 'log.offset': { - category: 'log', - description: 'The file offset the reported line starts at. ', - name: 'log.offset', - type: 'long', - }, - stream: { - category: 'base', - description: "Log stream when reading container logs, can be 'stdout' or 'stderr' ", - name: 'stream', - type: 'keyword', - }, - 'input.type': { - category: 'input', - description: - 'The input type from which the event was generated. This field is set to the value specified for the `type` option in the input section of the Filebeat config file. ', - name: 'input.type', - }, - 'syslog.facility': { - category: 'syslog', - description: 'The facility extracted from the priority. ', - name: 'syslog.facility', - type: 'long', - }, - 'syslog.priority': { - category: 'syslog', - description: 'The priority of the syslog event. ', - name: 'syslog.priority', - type: 'long', - }, - 'syslog.severity_label': { - category: 'syslog', - description: 'The human readable severity. ', - name: 'syslog.severity_label', - type: 'keyword', - }, - 'syslog.facility_label': { - category: 'syslog', - description: 'The human readable facility. ', - name: 'syslog.facility_label', - type: 'keyword', - }, - 'process.program': { - category: 'process', - description: 'The name of the program. ', - name: 'process.program', - type: 'keyword', - }, - 'log.flags': { - category: 'log', - description: 'This field contains the flags of the event. ', - name: 'log.flags', - }, - 'http.response.content_length': { - category: 'http', - name: 'http.response.content_length', - type: 'alias', - }, - 'user_agent.os.full_name': { - category: 'user_agent', - name: 'user_agent.os.full_name', - type: 'keyword', - }, - 'fileset.name': { - category: 'fileset', - description: 'The Filebeat fileset that generated this event. ', - name: 'fileset.name', - type: 'keyword', - }, - 'fileset.module': { - category: 'fileset', - name: 'fileset.module', - type: 'alias', - }, - read_timestamp: { - category: 'base', - name: 'read_timestamp', - type: 'alias', - }, - 'docker.attrs': { - category: 'docker', - description: - "docker.attrs contains labels and environment variables written by docker's JSON File logging driver. These fields are only available when they are configured in the logging driver options. ", - name: 'docker.attrs', - type: 'object', - }, - 'icmp.code': { - category: 'icmp', - description: 'ICMP code. ', - name: 'icmp.code', - type: 'keyword', - }, - 'icmp.type': { - category: 'icmp', - description: 'ICMP type. ', - name: 'icmp.type', - type: 'keyword', - }, - 'igmp.type': { - category: 'igmp', - description: 'IGMP type. ', - name: 'igmp.type', - type: 'keyword', - }, - 'azure.eventhub': { - category: 'azure', - description: 'Name of the eventhub. ', - name: 'azure.eventhub', - type: 'keyword', - }, - 'azure.offset': { - category: 'azure', - description: 'The offset. ', - name: 'azure.offset', - type: 'long', - }, - 'azure.enqueued_time': { - category: 'azure', - description: 'The enqueued time. ', - name: 'azure.enqueued_time', - type: 'date', - }, - 'azure.partition_id': { - category: 'azure', - description: 'The partition id. ', - name: 'azure.partition_id', - type: 'long', - }, - 'azure.consumer_group': { - category: 'azure', - description: 'The consumer group. ', - name: 'azure.consumer_group', - type: 'keyword', - }, - 'azure.sequence_number': { - category: 'azure', - description: 'The sequence number. ', - name: 'azure.sequence_number', - type: 'long', - }, - 'kafka.topic': { - category: 'kafka', - description: 'Kafka topic ', - name: 'kafka.topic', - type: 'keyword', - }, - 'kafka.partition': { - category: 'kafka', - description: 'Kafka partition number ', - name: 'kafka.partition', - type: 'long', - }, - 'kafka.offset': { - category: 'kafka', - description: 'Kafka offset of this message ', - name: 'kafka.offset', - type: 'long', - }, - 'kafka.key': { - category: 'kafka', - description: 'Kafka key, corresponding to the Kafka value stored in the message ', - name: 'kafka.key', - type: 'keyword', - }, - 'kafka.block_timestamp': { - category: 'kafka', - description: 'Kafka outer (compressed) block timestamp ', - name: 'kafka.block_timestamp', - type: 'date', - }, - 'kafka.headers': { - category: 'kafka', - description: - 'An array of Kafka header strings for this message, in the form ": ". ', - name: 'kafka.headers', - type: 'array', - }, - 'apache.access.ssl.protocol': { - category: 'apache', - description: 'SSL protocol version. ', - name: 'apache.access.ssl.protocol', - type: 'keyword', - }, - 'apache.access.ssl.cipher': { - category: 'apache', - description: 'SSL cipher name. ', - name: 'apache.access.ssl.cipher', - type: 'keyword', - }, - 'apache.error.module': { - category: 'apache', - description: 'The module producing the logged message. ', - name: 'apache.error.module', - type: 'keyword', - }, - 'user.audit.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform. ', - name: 'user.audit.group.id', - type: 'keyword', - }, - 'user.audit.group.name': { - category: 'user', - description: 'Name of the group. ', - name: 'user.audit.group.name', - type: 'keyword', - }, - 'user.owner.id': { - category: 'user', - description: 'One or multiple unique identifiers of the user. ', - name: 'user.owner.id', - type: 'keyword', - }, - 'user.owner.name': { - category: 'user', - description: 'Short name or login of the user. ', - example: 'albert', - name: 'user.owner.name', - type: 'keyword', - }, - 'user.owner.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform. ', - name: 'user.owner.group.id', - type: 'keyword', - }, - 'user.owner.group.name': { - category: 'user', - description: 'Name of the group. ', - name: 'user.owner.group.name', - type: 'keyword', - }, - 'auditd.log.old_auid': { - category: 'auditd', - description: - 'For login events this is the old audit ID used for the user prior to this login. ', - name: 'auditd.log.old_auid', - }, - 'auditd.log.new_auid': { - category: 'auditd', - description: - 'For login events this is the new audit ID. The audit ID can be used to trace future events to the user even if their identity changes (like becoming root). ', - name: 'auditd.log.new_auid', - }, - 'auditd.log.old_ses': { - category: 'auditd', - description: - 'For login events this is the old session ID used for the user prior to this login. ', - name: 'auditd.log.old_ses', - }, - 'auditd.log.new_ses': { - category: 'auditd', - description: - 'For login events this is the new session ID. It can be used to tie a user to future events by session ID. ', - name: 'auditd.log.new_ses', - }, - 'auditd.log.sequence': { - category: 'auditd', - description: 'The audit event sequence number. ', - name: 'auditd.log.sequence', - type: 'long', - }, - 'auditd.log.items': { - category: 'auditd', - description: 'The number of items in an event. ', - name: 'auditd.log.items', - }, - 'auditd.log.item': { - category: 'auditd', - description: - 'The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. ', - name: 'auditd.log.item', - }, - 'auditd.log.tty': { - category: 'auditd', - name: 'auditd.log.tty', - type: 'keyword', - }, - 'auditd.log.a0': { - category: 'auditd', - description: 'The first argument to the system call. ', - name: 'auditd.log.a0', - }, - 'auditd.log.addr': { - category: 'auditd', - name: 'auditd.log.addr', - type: 'ip', - }, - 'auditd.log.rport': { - category: 'auditd', - name: 'auditd.log.rport', - type: 'long', - }, - 'auditd.log.laddr': { - category: 'auditd', - name: 'auditd.log.laddr', - type: 'ip', - }, - 'auditd.log.lport': { - category: 'auditd', - name: 'auditd.log.lport', - type: 'long', - }, - 'auditd.log.acct': { - category: 'auditd', - name: 'auditd.log.acct', - type: 'alias', - }, - 'auditd.log.pid': { - category: 'auditd', - name: 'auditd.log.pid', - type: 'alias', - }, - 'auditd.log.ppid': { - category: 'auditd', - name: 'auditd.log.ppid', - type: 'alias', - }, - 'auditd.log.res': { - category: 'auditd', - name: 'auditd.log.res', - type: 'alias', - }, - 'auditd.log.record_type': { - category: 'auditd', - name: 'auditd.log.record_type', - type: 'alias', - }, - 'auditd.log.geoip.continent_name': { - category: 'auditd', - name: 'auditd.log.geoip.continent_name', - type: 'alias', - }, - 'auditd.log.geoip.country_iso_code': { - category: 'auditd', - name: 'auditd.log.geoip.country_iso_code', - type: 'alias', - }, - 'auditd.log.geoip.location': { - category: 'auditd', - name: 'auditd.log.geoip.location', - type: 'alias', - }, - 'auditd.log.geoip.region_name': { - category: 'auditd', - name: 'auditd.log.geoip.region_name', - type: 'alias', - }, - 'auditd.log.geoip.city_name': { - category: 'auditd', - name: 'auditd.log.geoip.city_name', - type: 'alias', - }, - 'auditd.log.geoip.region_iso_code': { - category: 'auditd', - name: 'auditd.log.geoip.region_iso_code', - type: 'alias', - }, - 'auditd.log.arch': { - category: 'auditd', - name: 'auditd.log.arch', - type: 'alias', - }, - 'auditd.log.gid': { - category: 'auditd', - name: 'auditd.log.gid', - type: 'alias', - }, - 'auditd.log.uid': { - category: 'auditd', - name: 'auditd.log.uid', - type: 'alias', - }, - 'auditd.log.agid': { - category: 'auditd', - name: 'auditd.log.agid', - type: 'alias', - }, - 'auditd.log.auid': { - category: 'auditd', - name: 'auditd.log.auid', - type: 'alias', - }, - 'auditd.log.fsgid': { - category: 'auditd', - name: 'auditd.log.fsgid', - type: 'alias', - }, - 'auditd.log.fsuid': { - category: 'auditd', - name: 'auditd.log.fsuid', - type: 'alias', - }, - 'auditd.log.egid': { - category: 'auditd', - name: 'auditd.log.egid', - type: 'alias', - }, - 'auditd.log.euid': { - category: 'auditd', - name: 'auditd.log.euid', - type: 'alias', - }, - 'auditd.log.sgid': { - category: 'auditd', - name: 'auditd.log.sgid', - type: 'alias', - }, - 'auditd.log.suid': { - category: 'auditd', - name: 'auditd.log.suid', - type: 'alias', - }, - 'auditd.log.ogid': { - category: 'auditd', - name: 'auditd.log.ogid', - type: 'alias', - }, - 'auditd.log.ouid': { - category: 'auditd', - name: 'auditd.log.ouid', - type: 'alias', - }, - 'auditd.log.comm': { - category: 'auditd', - name: 'auditd.log.comm', - type: 'alias', - }, - 'auditd.log.exe': { - category: 'auditd', - name: 'auditd.log.exe', - type: 'alias', - }, - 'auditd.log.terminal': { - category: 'auditd', - name: 'auditd.log.terminal', - type: 'alias', - }, - 'auditd.log.msg': { - category: 'auditd', - name: 'auditd.log.msg', - type: 'alias', - }, - 'auditd.log.src': { - category: 'auditd', - name: 'auditd.log.src', - type: 'alias', - }, - 'auditd.log.dst': { - category: 'auditd', - name: 'auditd.log.dst', - type: 'alias', - }, - 'elasticsearch.component': { - category: 'elasticsearch', - description: 'Elasticsearch component from where the log event originated', - example: 'o.e.c.m.MetaDataCreateIndexService', - name: 'elasticsearch.component', - type: 'keyword', - }, - 'elasticsearch.cluster.uuid': { - category: 'elasticsearch', - description: 'UUID of the cluster', - example: 'GmvrbHlNTiSVYiPf8kxg9g', - name: 'elasticsearch.cluster.uuid', - type: 'keyword', - }, - 'elasticsearch.cluster.name': { - category: 'elasticsearch', - description: 'Name of the cluster', - example: 'docker-cluster', - name: 'elasticsearch.cluster.name', - type: 'keyword', - }, - 'elasticsearch.node.id': { - category: 'elasticsearch', - description: 'ID of the node', - example: 'DSiWcTyeThWtUXLB9J0BMw', - name: 'elasticsearch.node.id', - type: 'keyword', - }, - 'elasticsearch.node.name': { - category: 'elasticsearch', - description: 'Name of the node', - example: 'vWNJsZ3', - name: 'elasticsearch.node.name', - type: 'keyword', - }, - 'elasticsearch.index.name': { - category: 'elasticsearch', - description: 'Index name', - example: 'filebeat-test-input', - name: 'elasticsearch.index.name', - type: 'keyword', - }, - 'elasticsearch.index.id': { - category: 'elasticsearch', - description: 'Index id', - example: 'aOGgDwbURfCV57AScqbCgw', - name: 'elasticsearch.index.id', - type: 'keyword', - }, - 'elasticsearch.shard.id': { - category: 'elasticsearch', - description: 'Id of the shard', - example: '0', - name: 'elasticsearch.shard.id', - type: 'keyword', - }, - 'elasticsearch.audit.layer': { - category: 'elasticsearch', - description: 'The layer from which this event originated: rest, transport or ip_filter', - example: 'rest', - name: 'elasticsearch.audit.layer', - type: 'keyword', - }, - 'elasticsearch.audit.event_type': { - category: 'elasticsearch', - description: - 'The type of event that occurred: anonymous_access_denied, authentication_failed, access_denied, access_granted, connection_granted, connection_denied, tampered_request, run_as_granted, run_as_denied', - example: 'access_granted', - name: 'elasticsearch.audit.event_type', - type: 'keyword', - }, - 'elasticsearch.audit.origin.type': { - category: 'elasticsearch', - description: - 'Where the request originated: rest (request originated from a REST API request), transport (request was received on the transport channel), local_node (the local node issued the request)', - example: 'local_node', - name: 'elasticsearch.audit.origin.type', - type: 'keyword', - }, - 'elasticsearch.audit.realm': { - category: 'elasticsearch', - description: 'The authentication realm the authentication was validated against', - name: 'elasticsearch.audit.realm', - type: 'keyword', - }, - 'elasticsearch.audit.user.realm': { - category: 'elasticsearch', - description: "The user's authentication realm, if authenticated", - name: 'elasticsearch.audit.user.realm', - type: 'keyword', - }, - 'elasticsearch.audit.user.roles': { - category: 'elasticsearch', - description: 'Roles to which the principal belongs', - example: '["kibana_admin","beats_admin"]', - name: 'elasticsearch.audit.user.roles', - type: 'keyword', - }, - 'elasticsearch.audit.user.run_as.name': { - category: 'elasticsearch', - name: 'elasticsearch.audit.user.run_as.name', - type: 'keyword', - }, - 'elasticsearch.audit.user.run_as.realm': { - category: 'elasticsearch', - name: 'elasticsearch.audit.user.run_as.realm', - type: 'keyword', - }, - 'elasticsearch.audit.component': { - category: 'elasticsearch', - name: 'elasticsearch.audit.component', - type: 'keyword', - }, - 'elasticsearch.audit.action': { - category: 'elasticsearch', - description: 'The name of the action that was executed', - example: 'cluster:monitor/main', - name: 'elasticsearch.audit.action', - type: 'keyword', - }, - 'elasticsearch.audit.url.params': { - category: 'elasticsearch', - description: 'REST URI parameters', - example: '{username=jacknich2}', - name: 'elasticsearch.audit.url.params', - }, - 'elasticsearch.audit.indices': { - category: 'elasticsearch', - description: 'Indices accessed by action', - example: '["foo-2019.01.04","foo-2019.01.03","foo-2019.01.06"]', - name: 'elasticsearch.audit.indices', - type: 'keyword', - }, - 'elasticsearch.audit.request.id': { - category: 'elasticsearch', - description: 'Unique ID of request', - example: 'WzL_kb6VSvOhAq0twPvHOQ', - name: 'elasticsearch.audit.request.id', - type: 'keyword', - }, - 'elasticsearch.audit.request.name': { - category: 'elasticsearch', - description: 'The type of request that was executed', - example: 'ClearScrollRequest', - name: 'elasticsearch.audit.request.name', - type: 'keyword', - }, - 'elasticsearch.audit.request_body': { - category: 'elasticsearch', - name: 'elasticsearch.audit.request_body', - type: 'alias', - }, - 'elasticsearch.audit.origin_address': { - category: 'elasticsearch', - name: 'elasticsearch.audit.origin_address', - type: 'alias', - }, - 'elasticsearch.audit.uri': { - category: 'elasticsearch', - name: 'elasticsearch.audit.uri', - type: 'alias', - }, - 'elasticsearch.audit.principal': { - category: 'elasticsearch', - name: 'elasticsearch.audit.principal', - type: 'alias', - }, - 'elasticsearch.audit.message': { - category: 'elasticsearch', - name: 'elasticsearch.audit.message', - type: 'text', - }, - 'elasticsearch.audit.invalidate.apikeys.owned_by_authenticated_user': { - category: 'elasticsearch', - name: 'elasticsearch.audit.invalidate.apikeys.owned_by_authenticated_user', - type: 'boolean', - }, - 'elasticsearch.deprecation': { - category: 'elasticsearch', - description: '', - name: 'elasticsearch.deprecation', - type: 'group', - }, - 'elasticsearch.gc.phase.name': { - category: 'elasticsearch', - description: 'Name of the GC collection phase. ', - name: 'elasticsearch.gc.phase.name', - type: 'keyword', - }, - 'elasticsearch.gc.phase.duration_sec': { - category: 'elasticsearch', - description: 'Collection phase duration according to the Java virtual machine. ', - name: 'elasticsearch.gc.phase.duration_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.scrub_symbol_table_time_sec': { - category: 'elasticsearch', - description: 'Pause time in seconds cleaning up symbol tables. ', - name: 'elasticsearch.gc.phase.scrub_symbol_table_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.scrub_string_table_time_sec': { - category: 'elasticsearch', - description: 'Pause time in seconds cleaning up string tables. ', - name: 'elasticsearch.gc.phase.scrub_string_table_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.weak_refs_processing_time_sec': { - category: 'elasticsearch', - description: 'Time spent processing weak references in seconds. ', - name: 'elasticsearch.gc.phase.weak_refs_processing_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.parallel_rescan_time_sec': { - category: 'elasticsearch', - description: 'Time spent in seconds marking live objects while application is stopped. ', - name: 'elasticsearch.gc.phase.parallel_rescan_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.class_unload_time_sec': { - category: 'elasticsearch', - description: 'Time spent unloading unused classes in seconds. ', - name: 'elasticsearch.gc.phase.class_unload_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.cpu_time.user_sec': { - category: 'elasticsearch', - description: 'CPU time spent outside the kernel. ', - name: 'elasticsearch.gc.phase.cpu_time.user_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.cpu_time.sys_sec': { - category: 'elasticsearch', - description: 'CPU time spent inside the kernel. ', - name: 'elasticsearch.gc.phase.cpu_time.sys_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.cpu_time.real_sec': { - category: 'elasticsearch', - description: 'Total elapsed CPU time spent to complete the collection from start to finish. ', - name: 'elasticsearch.gc.phase.cpu_time.real_sec', - type: 'float', - }, - 'elasticsearch.gc.jvm_runtime_sec': { - category: 'elasticsearch', - description: 'The time from JVM start up in seconds, as a floating point number. ', - name: 'elasticsearch.gc.jvm_runtime_sec', - type: 'float', - }, - 'elasticsearch.gc.threads_total_stop_time_sec': { - category: 'elasticsearch', - description: 'Garbage collection threads total stop time seconds. ', - name: 'elasticsearch.gc.threads_total_stop_time_sec', - type: 'float', - }, - 'elasticsearch.gc.stopping_threads_time_sec': { - category: 'elasticsearch', - description: 'Time took to stop threads seconds. ', - name: 'elasticsearch.gc.stopping_threads_time_sec', - type: 'float', - }, - 'elasticsearch.gc.tags': { - category: 'elasticsearch', - description: 'GC logging tags. ', - name: 'elasticsearch.gc.tags', - type: 'keyword', - }, - 'elasticsearch.gc.heap.size_kb': { - category: 'elasticsearch', - description: 'Total heap size in kilobytes. ', - name: 'elasticsearch.gc.heap.size_kb', - type: 'integer', - }, - 'elasticsearch.gc.heap.used_kb': { - category: 'elasticsearch', - description: 'Used heap in kilobytes. ', - name: 'elasticsearch.gc.heap.used_kb', - type: 'integer', - }, - 'elasticsearch.gc.old_gen.size_kb': { - category: 'elasticsearch', - description: 'Total size of old generation in kilobytes. ', - name: 'elasticsearch.gc.old_gen.size_kb', - type: 'integer', - }, - 'elasticsearch.gc.old_gen.used_kb': { - category: 'elasticsearch', - description: 'Old generation occupancy in kilobytes. ', - name: 'elasticsearch.gc.old_gen.used_kb', - type: 'integer', - }, - 'elasticsearch.gc.young_gen.size_kb': { - category: 'elasticsearch', - description: 'Total size of young generation in kilobytes. ', - name: 'elasticsearch.gc.young_gen.size_kb', - type: 'integer', - }, - 'elasticsearch.gc.young_gen.used_kb': { - category: 'elasticsearch', - description: 'Young generation occupancy in kilobytes. ', - name: 'elasticsearch.gc.young_gen.used_kb', - type: 'integer', - }, - 'elasticsearch.server.stacktrace': { - category: 'elasticsearch', - name: 'elasticsearch.server.stacktrace', - }, - 'elasticsearch.server.gc.young.one': { - category: 'elasticsearch', - description: '', - example: '', - name: 'elasticsearch.server.gc.young.one', - type: 'long', - }, - 'elasticsearch.server.gc.young.two': { - category: 'elasticsearch', - description: '', - example: '', - name: 'elasticsearch.server.gc.young.two', - type: 'long', - }, - 'elasticsearch.server.gc.overhead_seq': { - category: 'elasticsearch', - description: 'Sequence number', - example: 3449992, - name: 'elasticsearch.server.gc.overhead_seq', - type: 'long', - }, - 'elasticsearch.server.gc.collection_duration.ms': { - category: 'elasticsearch', - description: 'Time spent in GC, in milliseconds', - example: 1600, - name: 'elasticsearch.server.gc.collection_duration.ms', - type: 'float', - }, - 'elasticsearch.server.gc.observation_duration.ms': { - category: 'elasticsearch', - description: 'Total time over which collection was observed, in milliseconds', - example: 1800, - name: 'elasticsearch.server.gc.observation_duration.ms', - type: 'float', - }, - 'elasticsearch.slowlog.logger': { - category: 'elasticsearch', - description: 'Logger name', - example: 'index.search.slowlog.fetch', - name: 'elasticsearch.slowlog.logger', - type: 'keyword', - }, - 'elasticsearch.slowlog.took': { - category: 'elasticsearch', - description: 'Time it took to execute the query', - example: '300ms', - name: 'elasticsearch.slowlog.took', - type: 'keyword', - }, - 'elasticsearch.slowlog.types': { - category: 'elasticsearch', - description: 'Types', - example: '', - name: 'elasticsearch.slowlog.types', - type: 'keyword', - }, - 'elasticsearch.slowlog.stats': { - category: 'elasticsearch', - description: 'Stats groups', - example: 'group1', - name: 'elasticsearch.slowlog.stats', - type: 'keyword', - }, - 'elasticsearch.slowlog.search_type': { - category: 'elasticsearch', - description: 'Search type', - example: 'QUERY_THEN_FETCH', - name: 'elasticsearch.slowlog.search_type', - type: 'keyword', - }, - 'elasticsearch.slowlog.source_query': { - category: 'elasticsearch', - description: 'Slow query', - example: '{"query":{"match_all":{"boost":1.0}}}', - name: 'elasticsearch.slowlog.source_query', - type: 'keyword', - }, - 'elasticsearch.slowlog.extra_source': { - category: 'elasticsearch', - description: 'Extra source information', - example: '', - name: 'elasticsearch.slowlog.extra_source', - type: 'keyword', - }, - 'elasticsearch.slowlog.total_hits': { - category: 'elasticsearch', - description: 'Total hits', - example: 42, - name: 'elasticsearch.slowlog.total_hits', - type: 'keyword', - }, - 'elasticsearch.slowlog.total_shards': { - category: 'elasticsearch', - description: 'Total queried shards', - example: 22, - name: 'elasticsearch.slowlog.total_shards', - type: 'keyword', - }, - 'elasticsearch.slowlog.routing': { - category: 'elasticsearch', - description: 'Routing', - example: 's01HZ2QBk9jw4gtgaFtn', - name: 'elasticsearch.slowlog.routing', - type: 'keyword', - }, - 'elasticsearch.slowlog.id': { - category: 'elasticsearch', - description: 'Id', - example: '', - name: 'elasticsearch.slowlog.id', - type: 'keyword', - }, - 'elasticsearch.slowlog.type': { - category: 'elasticsearch', - description: 'Type', - example: 'doc', - name: 'elasticsearch.slowlog.type', - type: 'keyword', - }, - 'elasticsearch.slowlog.source': { - category: 'elasticsearch', - description: 'Source of document that was indexed', - name: 'elasticsearch.slowlog.source', - type: 'keyword', - }, - 'haproxy.frontend_name': { - category: 'haproxy', - description: 'Name of the frontend (or listener) which received and processed the connection.', - name: 'haproxy.frontend_name', - }, - 'haproxy.backend_name': { - category: 'haproxy', - description: - 'Name of the backend (or listener) which was selected to manage the connection to the server.', - name: 'haproxy.backend_name', - }, - 'haproxy.server_name': { - category: 'haproxy', - description: 'Name of the last server to which the connection was sent.', - name: 'haproxy.server_name', - }, - 'haproxy.total_waiting_time_ms': { - category: 'haproxy', - description: 'Total time in milliseconds spent waiting in the various queues', - name: 'haproxy.total_waiting_time_ms', - type: 'long', - }, - 'haproxy.connection_wait_time_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the connection to establish to the final server', - name: 'haproxy.connection_wait_time_ms', - type: 'long', - }, - 'haproxy.bytes_read': { - category: 'haproxy', - description: 'Total number of bytes transmitted to the client when the log is emitted.', - name: 'haproxy.bytes_read', - type: 'long', - }, - 'haproxy.time_queue': { - category: 'haproxy', - description: 'Total time in milliseconds spent waiting in the various queues.', - name: 'haproxy.time_queue', - type: 'long', - }, - 'haproxy.time_backend_connect': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the connection to establish to the final server, including retries.', - name: 'haproxy.time_backend_connect', - type: 'long', - }, - 'haproxy.server_queue': { - category: 'haproxy', - description: - 'Total number of requests which were processed before this one in the server queue.', - name: 'haproxy.server_queue', - type: 'long', - }, - 'haproxy.backend_queue': { - category: 'haproxy', - description: - "Total number of requests which were processed before this one in the backend's global queue.", - name: 'haproxy.backend_queue', - type: 'long', - }, - 'haproxy.bind_name': { - category: 'haproxy', - description: 'Name of the listening address which received the connection.', - name: 'haproxy.bind_name', - }, - 'haproxy.error_message': { - category: 'haproxy', - description: 'Error message logged by HAProxy in case of error.', - name: 'haproxy.error_message', - type: 'text', - }, - 'haproxy.source': { - category: 'haproxy', - description: 'The HAProxy source of the log', - name: 'haproxy.source', - type: 'keyword', - }, - 'haproxy.termination_state': { - category: 'haproxy', - description: 'Condition the session was in when the session ended.', - name: 'haproxy.termination_state', - }, - 'haproxy.mode': { - category: 'haproxy', - description: 'mode that the frontend is operating (TCP or HTTP)', - name: 'haproxy.mode', - type: 'keyword', - }, - 'haproxy.connections.active': { - category: 'haproxy', - description: - 'Total number of concurrent connections on the process when the session was logged.', - name: 'haproxy.connections.active', - type: 'long', - }, - 'haproxy.connections.frontend': { - category: 'haproxy', - description: - 'Total number of concurrent connections on the frontend when the session was logged.', - name: 'haproxy.connections.frontend', - type: 'long', - }, - 'haproxy.connections.backend': { - category: 'haproxy', - description: - 'Total number of concurrent connections handled by the backend when the session was logged.', - name: 'haproxy.connections.backend', - type: 'long', - }, - 'haproxy.connections.server': { - category: 'haproxy', - description: - 'Total number of concurrent connections still active on the server when the session was logged.', - name: 'haproxy.connections.server', - type: 'long', - }, - 'haproxy.connections.retries': { - category: 'haproxy', - description: - 'Number of connection retries experienced by this session when trying to connect to the server.', - name: 'haproxy.connections.retries', - type: 'long', - }, - 'haproxy.client.ip': { - category: 'haproxy', - name: 'haproxy.client.ip', - type: 'alias', - }, - 'haproxy.client.port': { - category: 'haproxy', - name: 'haproxy.client.port', - type: 'alias', - }, - 'haproxy.process_name': { - category: 'haproxy', - name: 'haproxy.process_name', - type: 'alias', - }, - 'haproxy.pid': { - category: 'haproxy', - name: 'haproxy.pid', - type: 'alias', - }, - 'haproxy.destination.port': { - category: 'haproxy', - name: 'haproxy.destination.port', - type: 'alias', - }, - 'haproxy.destination.ip': { - category: 'haproxy', - name: 'haproxy.destination.ip', - type: 'alias', - }, - 'haproxy.geoip.continent_name': { - category: 'haproxy', - name: 'haproxy.geoip.continent_name', - type: 'alias', - }, - 'haproxy.geoip.country_iso_code': { - category: 'haproxy', - name: 'haproxy.geoip.country_iso_code', - type: 'alias', - }, - 'haproxy.geoip.location': { - category: 'haproxy', - name: 'haproxy.geoip.location', - type: 'alias', - }, - 'haproxy.geoip.region_name': { - category: 'haproxy', - name: 'haproxy.geoip.region_name', - type: 'alias', - }, - 'haproxy.geoip.city_name': { - category: 'haproxy', - name: 'haproxy.geoip.city_name', - type: 'alias', - }, - 'haproxy.geoip.region_iso_code': { - category: 'haproxy', - name: 'haproxy.geoip.region_iso_code', - type: 'alias', - }, - 'haproxy.http.response.captured_cookie': { - category: 'haproxy', - description: - 'Optional "name=value" entry indicating that the client had this cookie in the response. ', - name: 'haproxy.http.response.captured_cookie', - }, - 'haproxy.http.response.captured_headers': { - category: 'haproxy', - description: - 'List of headers captured in the response due to the presence of the "capture response header" statement in the frontend. ', - name: 'haproxy.http.response.captured_headers', - type: 'keyword', - }, - 'haproxy.http.response.status_code': { - category: 'haproxy', - name: 'haproxy.http.response.status_code', - type: 'alias', - }, - 'haproxy.http.request.captured_cookie': { - category: 'haproxy', - description: - 'Optional "name=value" entry indicating that the server has returned a cookie with its request. ', - name: 'haproxy.http.request.captured_cookie', - }, - 'haproxy.http.request.captured_headers': { - category: 'haproxy', - description: - 'List of headers captured in the request due to the presence of the "capture request header" statement in the frontend. ', - name: 'haproxy.http.request.captured_headers', - type: 'keyword', - }, - 'haproxy.http.request.raw_request_line': { - category: 'haproxy', - description: - 'Complete HTTP request line, including the method, request and HTTP version string.', - name: 'haproxy.http.request.raw_request_line', - type: 'keyword', - }, - 'haproxy.http.request.time_wait_without_data_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the server to send a full HTTP response, not counting data.', - name: 'haproxy.http.request.time_wait_without_data_ms', - type: 'long', - }, - 'haproxy.http.request.time_wait_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for a full HTTP request from the client (not counting body) after the first byte was received.', - name: 'haproxy.http.request.time_wait_ms', - type: 'long', - }, - 'haproxy.tcp.connection_waiting_time_ms': { - category: 'haproxy', - description: 'Total time in milliseconds elapsed between the accept and the last close', - name: 'haproxy.tcp.connection_waiting_time_ms', - type: 'long', - }, - 'icinga.debug.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.debug.facility', - type: 'keyword', - }, - 'icinga.debug.severity': { - category: 'icinga', - name: 'icinga.debug.severity', - type: 'alias', - }, - 'icinga.debug.message': { - category: 'icinga', - name: 'icinga.debug.message', - type: 'alias', - }, - 'icinga.main.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.main.facility', - type: 'keyword', - }, - 'icinga.main.severity': { - category: 'icinga', - name: 'icinga.main.severity', - type: 'alias', - }, - 'icinga.main.message': { - category: 'icinga', - name: 'icinga.main.message', - type: 'alias', - }, - 'icinga.startup.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.startup.facility', - type: 'keyword', - }, - 'icinga.startup.severity': { - category: 'icinga', - name: 'icinga.startup.severity', - type: 'alias', - }, - 'icinga.startup.message': { - category: 'icinga', - name: 'icinga.startup.message', - type: 'alias', - }, - 'iis.access.sub_status': { - category: 'iis', - description: 'The HTTP substatus code. ', - name: 'iis.access.sub_status', - type: 'long', - }, - 'iis.access.win32_status': { - category: 'iis', - description: 'The Windows status code. ', - name: 'iis.access.win32_status', - type: 'long', - }, - 'iis.access.site_name': { - category: 'iis', - description: 'The site name and instance number. ', - name: 'iis.access.site_name', - type: 'keyword', - }, - 'iis.access.server_name': { - category: 'iis', - description: 'The name of the server on which the log file entry was generated. ', - name: 'iis.access.server_name', - type: 'keyword', - }, - 'iis.access.cookie': { - category: 'iis', - description: 'The content of the cookie sent or received, if any. ', - name: 'iis.access.cookie', - type: 'keyword', - }, - 'iis.access.body_received.bytes': { - category: 'iis', - name: 'iis.access.body_received.bytes', - type: 'alias', - }, - 'iis.access.body_sent.bytes': { - category: 'iis', - name: 'iis.access.body_sent.bytes', - type: 'alias', - }, - 'iis.access.server_ip': { - category: 'iis', - name: 'iis.access.server_ip', - type: 'alias', - }, - 'iis.access.method': { - category: 'iis', - name: 'iis.access.method', - type: 'alias', - }, - 'iis.access.url': { - category: 'iis', - name: 'iis.access.url', - type: 'alias', - }, - 'iis.access.query_string': { - category: 'iis', - name: 'iis.access.query_string', - type: 'alias', - }, - 'iis.access.port': { - category: 'iis', - name: 'iis.access.port', - type: 'alias', - }, - 'iis.access.user_name': { - category: 'iis', - name: 'iis.access.user_name', - type: 'alias', - }, - 'iis.access.remote_ip': { - category: 'iis', - name: 'iis.access.remote_ip', - type: 'alias', - }, - 'iis.access.referrer': { - category: 'iis', - name: 'iis.access.referrer', - type: 'alias', - }, - 'iis.access.response_code': { - category: 'iis', - name: 'iis.access.response_code', - type: 'alias', - }, - 'iis.access.http_version': { - category: 'iis', - name: 'iis.access.http_version', - type: 'alias', - }, - 'iis.access.hostname': { - category: 'iis', - name: 'iis.access.hostname', - type: 'alias', - }, - 'iis.access.user_agent.device': { - category: 'iis', - name: 'iis.access.user_agent.device', - type: 'alias', - }, - 'iis.access.user_agent.name': { - category: 'iis', - name: 'iis.access.user_agent.name', - type: 'alias', - }, - 'iis.access.user_agent.os': { - category: 'iis', - name: 'iis.access.user_agent.os', - type: 'alias', - }, - 'iis.access.user_agent.os_name': { - category: 'iis', - name: 'iis.access.user_agent.os_name', - type: 'alias', - }, - 'iis.access.user_agent.original': { - category: 'iis', - name: 'iis.access.user_agent.original', - type: 'alias', - }, - 'iis.access.geoip.continent_name': { - category: 'iis', - name: 'iis.access.geoip.continent_name', - type: 'alias', - }, - 'iis.access.geoip.country_iso_code': { - category: 'iis', - name: 'iis.access.geoip.country_iso_code', - type: 'alias', - }, - 'iis.access.geoip.location': { - category: 'iis', - name: 'iis.access.geoip.location', - type: 'alias', - }, - 'iis.access.geoip.region_name': { - category: 'iis', - name: 'iis.access.geoip.region_name', - type: 'alias', - }, - 'iis.access.geoip.city_name': { - category: 'iis', - name: 'iis.access.geoip.city_name', - type: 'alias', - }, - 'iis.access.geoip.region_iso_code': { - category: 'iis', - name: 'iis.access.geoip.region_iso_code', - type: 'alias', - }, - 'iis.error.reason_phrase': { - category: 'iis', - description: 'The HTTP reason phrase. ', - name: 'iis.error.reason_phrase', - type: 'keyword', - }, - 'iis.error.queue_name': { - category: 'iis', - description: 'The IIS application pool name. ', - name: 'iis.error.queue_name', - type: 'keyword', - }, - 'iis.error.remote_ip': { - category: 'iis', - name: 'iis.error.remote_ip', - type: 'alias', - }, - 'iis.error.remote_port': { - category: 'iis', - name: 'iis.error.remote_port', - type: 'alias', - }, - 'iis.error.server_ip': { - category: 'iis', - name: 'iis.error.server_ip', - type: 'alias', - }, - 'iis.error.server_port': { - category: 'iis', - name: 'iis.error.server_port', - type: 'alias', - }, - 'iis.error.http_version': { - category: 'iis', - name: 'iis.error.http_version', - type: 'alias', - }, - 'iis.error.method': { - category: 'iis', - name: 'iis.error.method', - type: 'alias', - }, - 'iis.error.url': { - category: 'iis', - name: 'iis.error.url', - type: 'alias', - }, - 'iis.error.response_code': { - category: 'iis', - name: 'iis.error.response_code', - type: 'alias', - }, - 'iis.error.geoip.continent_name': { - category: 'iis', - name: 'iis.error.geoip.continent_name', - type: 'alias', - }, - 'iis.error.geoip.country_iso_code': { - category: 'iis', - name: 'iis.error.geoip.country_iso_code', - type: 'alias', - }, - 'iis.error.geoip.location': { - category: 'iis', - name: 'iis.error.geoip.location', - type: 'alias', - }, - 'iis.error.geoip.region_name': { - category: 'iis', - name: 'iis.error.geoip.region_name', - type: 'alias', - }, - 'iis.error.geoip.city_name': { - category: 'iis', - name: 'iis.error.geoip.city_name', - type: 'alias', - }, - 'iis.error.geoip.region_iso_code': { - category: 'iis', - name: 'iis.error.geoip.region_iso_code', - type: 'alias', - }, - 'kafka.log.component': { - category: 'kafka', - description: 'Component the log is coming from. ', - name: 'kafka.log.component', - type: 'keyword', - }, - 'kafka.log.class': { - category: 'kafka', - description: 'Java class the log is coming from. ', - name: 'kafka.log.class', - type: 'keyword', - }, - 'kafka.log.thread': { - category: 'kafka', - description: 'Thread name the log is coming from. ', - name: 'kafka.log.thread', - type: 'keyword', - }, - 'kafka.log.trace.class': { - category: 'kafka', - description: 'Java class the trace is coming from. ', - name: 'kafka.log.trace.class', - type: 'keyword', - }, - 'kafka.log.trace.message': { - category: 'kafka', - description: 'Message part of the trace. ', - name: 'kafka.log.trace.message', - type: 'text', - }, - 'kibana.session_id': { - category: 'kibana', - description: - 'The ID of the user session associated with this event. Each login attempt results in a unique session id.', - example: '123e4567-e89b-12d3-a456-426614174000', - name: 'kibana.session_id', - type: 'keyword', - }, - 'kibana.space_id': { - category: 'kibana', - description: 'The id of the space associated with this event.', - example: 'default', - name: 'kibana.space_id', - type: 'keyword', - }, - 'kibana.saved_object.type': { - category: 'kibana', - description: 'The type of the saved object associated with this event.', - example: 'dashboard', - name: 'kibana.saved_object.type', - type: 'keyword', - }, - 'kibana.saved_object.id': { - category: 'kibana', - description: 'The id of the saved object associated with this event.', - example: '6295bdd0-0a0e-11e7-825f-6748cda7d858', - name: 'kibana.saved_object.id', - type: 'keyword', - }, - 'kibana.add_to_spaces': { - category: 'kibana', - description: 'The set of space ids that a saved object was shared to.', - example: "['default', 'marketing']", - name: 'kibana.add_to_spaces', - type: 'keyword', - }, - 'kibana.delete_from_spaces': { - category: 'kibana', - description: 'The set of space ids that a saved object was removed from.', - example: "['default', 'marketing']", - name: 'kibana.delete_from_spaces', - type: 'keyword', - }, - 'kibana.authentication_provider': { - category: 'kibana', - description: 'The authentication provider associated with a login event.', - example: 'basic1', - name: 'kibana.authentication_provider', - type: 'keyword', - }, - 'kibana.authentication_type': { - category: 'kibana', - description: 'The authentication provider type associated with a login event.', - example: 'basic', - name: 'kibana.authentication_type', - type: 'keyword', - }, - 'kibana.authentication_realm': { - category: 'kibana', - description: 'The Elasticsearch authentication realm name which fulfilled a login event.', - example: 'native', - name: 'kibana.authentication_realm', - type: 'keyword', - }, - 'kibana.lookup_realm': { - category: 'kibana', - description: 'The Elasticsearch lookup realm which fulfilled a login event.', - example: 'native', - name: 'kibana.lookup_realm', - type: 'keyword', - }, - 'kibana.log.tags': { - category: 'kibana', - description: 'Kibana logging tags. ', - name: 'kibana.log.tags', - type: 'keyword', - }, - 'kibana.log.state': { - category: 'kibana', - description: 'Current state of Kibana. ', - name: 'kibana.log.state', - type: 'keyword', - }, - 'kibana.log.meta': { - category: 'kibana', - name: 'kibana.log.meta', - type: 'object', - }, - 'kibana.log.kibana.log.meta.req.headers.referer': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.headers.referer', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.req.referer': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.referer', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.req.headers.user-agent': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.headers.user-agent', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.req.remoteAddress': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.remoteAddress', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.req.url': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.url', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.statusCode': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.statusCode', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.method': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.method', - type: 'alias', - }, - 'logstash.log.module': { - category: 'logstash', - description: 'The module or class where the event originate. ', - name: 'logstash.log.module', - type: 'keyword', - }, - 'logstash.log.thread': { - category: 'logstash', - description: 'Information about the running thread where the log originate. ', - name: 'logstash.log.thread', - type: 'keyword', - }, - 'logstash.log.log_event': { - category: 'logstash', - description: 'key and value debugging information. ', - name: 'logstash.log.log_event', - type: 'object', - }, - 'logstash.log.log_event.action': { - category: 'logstash', - name: 'logstash.log.log_event.action', - type: 'keyword', - }, - 'logstash.log.pipeline_id': { - category: 'logstash', - description: 'The ID of the pipeline. ', - example: 'main', - name: 'logstash.log.pipeline_id', - type: 'keyword', - }, - 'logstash.log.message': { - category: 'logstash', - name: 'logstash.log.message', - type: 'alias', - }, - 'logstash.log.level': { - category: 'logstash', - name: 'logstash.log.level', - type: 'alias', - }, - 'logstash.slowlog.module': { - category: 'logstash', - description: 'The module or class where the event originate. ', - name: 'logstash.slowlog.module', - type: 'keyword', - }, - 'logstash.slowlog.thread': { - category: 'logstash', - description: 'Information about the running thread where the log originate. ', - name: 'logstash.slowlog.thread', - type: 'keyword', - }, - 'logstash.slowlog.event': { - category: 'logstash', - description: 'Raw dump of the original event ', - name: 'logstash.slowlog.event', - type: 'keyword', - }, - 'logstash.slowlog.plugin_name': { - category: 'logstash', - description: 'Name of the plugin ', - name: 'logstash.slowlog.plugin_name', - type: 'keyword', - }, - 'logstash.slowlog.plugin_type': { - category: 'logstash', - description: 'Type of the plugin: Inputs, Filters, Outputs or Codecs. ', - name: 'logstash.slowlog.plugin_type', - type: 'keyword', - }, - 'logstash.slowlog.took_in_millis': { - category: 'logstash', - description: 'Execution time for the plugin in milliseconds. ', - name: 'logstash.slowlog.took_in_millis', - type: 'long', - }, - 'logstash.slowlog.plugin_params': { - category: 'logstash', - description: 'String value of the plugin configuration ', - name: 'logstash.slowlog.plugin_params', - type: 'keyword', - }, - 'logstash.slowlog.plugin_params_object': { - category: 'logstash', - description: 'key -> value of the configuration used by the plugin. ', - name: 'logstash.slowlog.plugin_params_object', - type: 'object', - }, - 'logstash.slowlog.level': { - category: 'logstash', - name: 'logstash.slowlog.level', - type: 'alias', - }, - 'logstash.slowlog.took_in_nanos': { - category: 'logstash', - name: 'logstash.slowlog.took_in_nanos', - type: 'alias', - }, - 'mongodb.log.component': { - category: 'mongodb', - description: 'Functional categorization of message ', - example: 'COMMAND', - name: 'mongodb.log.component', - type: 'keyword', - }, - 'mongodb.log.context': { - category: 'mongodb', - description: 'Context of message ', - example: 'initandlisten', - name: 'mongodb.log.context', - type: 'keyword', - }, - 'mongodb.log.severity': { - category: 'mongodb', - name: 'mongodb.log.severity', - type: 'alias', - }, - 'mongodb.log.message': { - category: 'mongodb', - name: 'mongodb.log.message', - type: 'alias', - }, - 'mongodb.log.id': { - category: 'mongodb', - description: 'Integer representing the unique identifier of the log statement ', - example: 4615611, - name: 'mongodb.log.id', - type: 'long', - }, - 'mysql.thread_id': { - category: 'mysql', - description: 'The connection or thread ID for the query. ', - name: 'mysql.thread_id', - type: 'long', - }, - 'mysql.error.thread_id': { - category: 'mysql', - name: 'mysql.error.thread_id', - type: 'alias', - }, - 'mysql.error.level': { - category: 'mysql', - name: 'mysql.error.level', - type: 'alias', - }, - 'mysql.error.message': { - category: 'mysql', - name: 'mysql.error.message', - type: 'alias', - }, - 'mysql.slowlog.lock_time.sec': { - category: 'mysql', - description: - 'The amount of time the query waited for the lock to be available. The value is in seconds, as a floating point number. ', - name: 'mysql.slowlog.lock_time.sec', - type: 'float', - }, - 'mysql.slowlog.rows_sent': { - category: 'mysql', - description: 'The number of rows returned by the query. ', - name: 'mysql.slowlog.rows_sent', - type: 'long', - }, - 'mysql.slowlog.rows_examined': { - category: 'mysql', - description: 'The number of rows scanned by the query. ', - name: 'mysql.slowlog.rows_examined', - type: 'long', - }, - 'mysql.slowlog.rows_affected': { - category: 'mysql', - description: 'The number of rows modified by the query. ', - name: 'mysql.slowlog.rows_affected', - type: 'long', - }, - 'mysql.slowlog.bytes_sent': { - category: 'mysql', - description: 'The number of bytes sent to client. ', - name: 'mysql.slowlog.bytes_sent', - type: 'long', - format: 'bytes', - }, - 'mysql.slowlog.bytes_received': { - category: 'mysql', - description: 'The number of bytes received from client. ', - name: 'mysql.slowlog.bytes_received', - type: 'long', - format: 'bytes', - }, - 'mysql.slowlog.query': { - category: 'mysql', - description: 'The slow query. ', - name: 'mysql.slowlog.query', - }, - 'mysql.slowlog.id': { - category: 'mysql', - name: 'mysql.slowlog.id', - type: 'alias', - }, - 'mysql.slowlog.schema': { - category: 'mysql', - description: 'The schema where the slow query was executed. ', - name: 'mysql.slowlog.schema', - type: 'keyword', - }, - 'mysql.slowlog.current_user': { - category: 'mysql', - description: - 'Current authenticated user, used to determine access privileges. Can differ from the value for user. ', - name: 'mysql.slowlog.current_user', - type: 'keyword', - }, - 'mysql.slowlog.last_errno': { - category: 'mysql', - description: 'Last SQL error seen. ', - name: 'mysql.slowlog.last_errno', - type: 'keyword', - }, - 'mysql.slowlog.killed': { - category: 'mysql', - description: 'Code of the reason if the query was killed. ', - name: 'mysql.slowlog.killed', - type: 'keyword', - }, - 'mysql.slowlog.query_cache_hit': { - category: 'mysql', - description: 'Whether the query cache was hit. ', - name: 'mysql.slowlog.query_cache_hit', - type: 'boolean', - }, - 'mysql.slowlog.tmp_table': { - category: 'mysql', - description: 'Whether a temporary table was used to resolve the query. ', - name: 'mysql.slowlog.tmp_table', - type: 'boolean', - }, - 'mysql.slowlog.tmp_table_on_disk': { - category: 'mysql', - description: 'Whether the query needed temporary tables on disk. ', - name: 'mysql.slowlog.tmp_table_on_disk', - type: 'boolean', - }, - 'mysql.slowlog.tmp_tables': { - category: 'mysql', - description: 'Number of temporary tables created for this query ', - name: 'mysql.slowlog.tmp_tables', - type: 'long', - }, - 'mysql.slowlog.tmp_disk_tables': { - category: 'mysql', - description: 'Number of temporary tables created on disk for this query. ', - name: 'mysql.slowlog.tmp_disk_tables', - type: 'long', - }, - 'mysql.slowlog.tmp_table_sizes': { - category: 'mysql', - description: 'Size of temporary tables created for this query.', - name: 'mysql.slowlog.tmp_table_sizes', - type: 'long', - format: 'bytes', - }, - 'mysql.slowlog.filesort': { - category: 'mysql', - description: 'Whether filesort optimization was used. ', - name: 'mysql.slowlog.filesort', - type: 'boolean', - }, - 'mysql.slowlog.filesort_on_disk': { - category: 'mysql', - description: 'Whether filesort optimization was used and it needed temporary tables on disk. ', - name: 'mysql.slowlog.filesort_on_disk', - type: 'boolean', - }, - 'mysql.slowlog.priority_queue': { - category: 'mysql', - description: 'Whether a priority queue was used for filesort. ', - name: 'mysql.slowlog.priority_queue', - type: 'boolean', - }, - 'mysql.slowlog.full_scan': { - category: 'mysql', - description: 'Whether a full table scan was needed for the slow query. ', - name: 'mysql.slowlog.full_scan', - type: 'boolean', - }, - 'mysql.slowlog.full_join': { - category: 'mysql', - description: - 'Whether a full join was needed for the slow query (no indexes were used for joins). ', - name: 'mysql.slowlog.full_join', - type: 'boolean', - }, - 'mysql.slowlog.merge_passes': { - category: 'mysql', - description: 'Number of merge passes executed for the query. ', - name: 'mysql.slowlog.merge_passes', - type: 'long', - }, - 'mysql.slowlog.sort_merge_passes': { - category: 'mysql', - description: 'Number of merge passes that the sort algorithm has had to do. ', - name: 'mysql.slowlog.sort_merge_passes', - type: 'long', - }, - 'mysql.slowlog.sort_range_count': { - category: 'mysql', - description: 'Number of sorts that were done using ranges. ', - name: 'mysql.slowlog.sort_range_count', - type: 'long', - }, - 'mysql.slowlog.sort_rows': { - category: 'mysql', - description: 'Number of sorted rows. ', - name: 'mysql.slowlog.sort_rows', - type: 'long', - }, - 'mysql.slowlog.sort_scan_count': { - category: 'mysql', - description: 'Number of sorts that were done by scanning the table. ', - name: 'mysql.slowlog.sort_scan_count', - type: 'long', - }, - 'mysql.slowlog.log_slow_rate_type': { - category: 'mysql', - description: - 'Type of slow log rate limit, it can be `session` if the rate limit is applied per session, or `query` if it applies per query. ', - name: 'mysql.slowlog.log_slow_rate_type', - type: 'keyword', - }, - 'mysql.slowlog.log_slow_rate_limit': { - category: 'mysql', - description: - 'Slow log rate limit, a value of 100 means that one in a hundred queries or sessions are being logged. ', - name: 'mysql.slowlog.log_slow_rate_limit', - type: 'keyword', - }, - 'mysql.slowlog.read_first': { - category: 'mysql', - description: 'The number of times the first entry in an index was read. ', - name: 'mysql.slowlog.read_first', - type: 'long', - }, - 'mysql.slowlog.read_last': { - category: 'mysql', - description: 'The number of times the last key in an index was read. ', - name: 'mysql.slowlog.read_last', - type: 'long', - }, - 'mysql.slowlog.read_key': { - category: 'mysql', - description: 'The number of requests to read a row based on a key. ', - name: 'mysql.slowlog.read_key', - type: 'long', - }, - 'mysql.slowlog.read_next': { - category: 'mysql', - description: 'The number of requests to read the next row in key order. ', - name: 'mysql.slowlog.read_next', - type: 'long', - }, - 'mysql.slowlog.read_prev': { - category: 'mysql', - description: 'The number of requests to read the previous row in key order. ', - name: 'mysql.slowlog.read_prev', - type: 'long', - }, - 'mysql.slowlog.read_rnd': { - category: 'mysql', - description: 'The number of requests to read a row based on a fixed position. ', - name: 'mysql.slowlog.read_rnd', - type: 'long', - }, - 'mysql.slowlog.read_rnd_next': { - category: 'mysql', - description: 'The number of requests to read the next row in the data file. ', - name: 'mysql.slowlog.read_rnd_next', - type: 'long', - }, - 'mysql.slowlog.innodb.trx_id': { - category: 'mysql', - description: 'Transaction ID ', - name: 'mysql.slowlog.innodb.trx_id', - type: 'keyword', - }, - 'mysql.slowlog.innodb.io_r_ops': { - category: 'mysql', - description: 'Number of page read operations. ', - name: 'mysql.slowlog.innodb.io_r_ops', - type: 'long', - }, - 'mysql.slowlog.innodb.io_r_bytes': { - category: 'mysql', - description: 'Bytes read during page read operations. ', - name: 'mysql.slowlog.innodb.io_r_bytes', - type: 'long', - format: 'bytes', - }, - 'mysql.slowlog.innodb.io_r_wait.sec': { - category: 'mysql', - description: 'How long it took to read all needed data from storage. ', - name: 'mysql.slowlog.innodb.io_r_wait.sec', - type: 'long', - }, - 'mysql.slowlog.innodb.rec_lock_wait.sec': { - category: 'mysql', - description: 'How long the query waited for locks. ', - name: 'mysql.slowlog.innodb.rec_lock_wait.sec', - type: 'long', - }, - 'mysql.slowlog.innodb.queue_wait.sec': { - category: 'mysql', - description: - 'How long the query waited to enter the InnoDB queue and to be executed once in the queue. ', - name: 'mysql.slowlog.innodb.queue_wait.sec', - type: 'long', - }, - 'mysql.slowlog.innodb.pages_distinct': { - category: 'mysql', - description: 'Approximated count of pages accessed to execute the query. ', - name: 'mysql.slowlog.innodb.pages_distinct', - type: 'long', - }, - 'mysql.slowlog.user': { - category: 'mysql', - name: 'mysql.slowlog.user', - type: 'alias', - }, - 'mysql.slowlog.host': { - category: 'mysql', - name: 'mysql.slowlog.host', - type: 'alias', - }, - 'mysql.slowlog.ip': { - category: 'mysql', - name: 'mysql.slowlog.ip', - type: 'alias', - }, - 'nats.log.client.id': { - category: 'nats', - description: 'The id of the client ', - name: 'nats.log.client.id', - type: 'integer', - }, - 'nats.log.msg.bytes': { - category: 'nats', - description: 'Size of the payload in bytes ', - name: 'nats.log.msg.bytes', - type: 'long', - format: 'bytes', - }, - 'nats.log.msg.type': { - category: 'nats', - description: 'The protocol message type ', - name: 'nats.log.msg.type', - type: 'keyword', - }, - 'nats.log.msg.subject': { - category: 'nats', - description: 'Subject name this message was received on ', - name: 'nats.log.msg.subject', - type: 'keyword', - }, - 'nats.log.msg.sid': { - category: 'nats', - description: 'The unique alphanumeric subscription ID of the subject ', - name: 'nats.log.msg.sid', - type: 'integer', - }, - 'nats.log.msg.reply_to': { - category: 'nats', - description: 'The inbox subject on which the publisher is listening for responses ', - name: 'nats.log.msg.reply_to', - type: 'keyword', - }, - 'nats.log.msg.max_messages': { - category: 'nats', - description: 'An optional number of messages to wait for before automatically unsubscribing ', - name: 'nats.log.msg.max_messages', - type: 'integer', - }, - 'nats.log.msg.error.message': { - category: 'nats', - description: 'Details about the error occurred ', - name: 'nats.log.msg.error.message', - type: 'text', - }, - 'nats.log.msg.queue_group': { - category: 'nats', - description: 'The queue group which subscriber will join ', - name: 'nats.log.msg.queue_group', - type: 'text', - }, - 'nginx.access.remote_ip_list': { - category: 'nginx', - description: - 'An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ', - name: 'nginx.access.remote_ip_list', - type: 'array', - }, - 'nginx.access.body_sent.bytes': { - category: 'nginx', - name: 'nginx.access.body_sent.bytes', - type: 'alias', - }, - 'nginx.access.user_name': { - category: 'nginx', - name: 'nginx.access.user_name', - type: 'alias', - }, - 'nginx.access.method': { - category: 'nginx', - name: 'nginx.access.method', - type: 'alias', - }, - 'nginx.access.url': { - category: 'nginx', - name: 'nginx.access.url', - type: 'alias', - }, - 'nginx.access.http_version': { - category: 'nginx', - name: 'nginx.access.http_version', - type: 'alias', - }, - 'nginx.access.response_code': { - category: 'nginx', - name: 'nginx.access.response_code', - type: 'alias', - }, - 'nginx.access.referrer': { - category: 'nginx', - name: 'nginx.access.referrer', - type: 'alias', - }, - 'nginx.access.agent': { - category: 'nginx', - name: 'nginx.access.agent', - type: 'alias', - }, - 'nginx.access.user_agent.device': { - category: 'nginx', - name: 'nginx.access.user_agent.device', - type: 'alias', - }, - 'nginx.access.user_agent.name': { - category: 'nginx', - name: 'nginx.access.user_agent.name', - type: 'alias', - }, - 'nginx.access.user_agent.os': { - category: 'nginx', - name: 'nginx.access.user_agent.os', - type: 'alias', - }, - 'nginx.access.user_agent.os_name': { - category: 'nginx', - name: 'nginx.access.user_agent.os_name', - type: 'alias', - }, - 'nginx.access.user_agent.original': { - category: 'nginx', - name: 'nginx.access.user_agent.original', - type: 'alias', - }, - 'nginx.access.geoip.continent_name': { - category: 'nginx', - name: 'nginx.access.geoip.continent_name', - type: 'alias', - }, - 'nginx.access.geoip.country_iso_code': { - category: 'nginx', - name: 'nginx.access.geoip.country_iso_code', - type: 'alias', - }, - 'nginx.access.geoip.location': { - category: 'nginx', - name: 'nginx.access.geoip.location', - type: 'alias', - }, - 'nginx.access.geoip.region_name': { - category: 'nginx', - name: 'nginx.access.geoip.region_name', - type: 'alias', - }, - 'nginx.access.geoip.city_name': { - category: 'nginx', - name: 'nginx.access.geoip.city_name', - type: 'alias', - }, - 'nginx.access.geoip.region_iso_code': { - category: 'nginx', - name: 'nginx.access.geoip.region_iso_code', - type: 'alias', - }, - 'nginx.error.connection_id': { - category: 'nginx', - description: 'Connection identifier. ', - name: 'nginx.error.connection_id', - type: 'long', - }, - 'nginx.error.level': { - category: 'nginx', - name: 'nginx.error.level', - type: 'alias', - }, - 'nginx.error.pid': { - category: 'nginx', - name: 'nginx.error.pid', - type: 'alias', - }, - 'nginx.error.tid': { - category: 'nginx', - name: 'nginx.error.tid', - type: 'alias', - }, - 'nginx.error.message': { - category: 'nginx', - name: 'nginx.error.message', - type: 'alias', - }, - 'nginx.ingress_controller.remote_ip_list': { - category: 'nginx', - description: - 'An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ', - name: 'nginx.ingress_controller.remote_ip_list', - type: 'array', - }, - 'nginx.ingress_controller.upstream_address_list': { - category: 'nginx', - description: - 'An array of the upstream addresses. It is a list because it is common that several upstream servers were contacted during request processing. ', - name: 'nginx.ingress_controller.upstream_address_list', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.response.length_list': { - category: 'nginx', - description: - 'An array of upstream response lengths. It is a list because it is common that several upstream servers were contacted during request processing. ', - name: 'nginx.ingress_controller.upstream.response.length_list', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.response.time_list': { - category: 'nginx', - description: - 'An array of upstream response durations. It is a list because it is common that several upstream servers were contacted during request processing. ', - name: 'nginx.ingress_controller.upstream.response.time_list', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.response.status_code_list': { - category: 'nginx', - description: - 'An array of upstream response status codes. It is a list because it is common that several upstream servers were contacted during request processing. ', - name: 'nginx.ingress_controller.upstream.response.status_code_list', - type: 'keyword', - }, - 'nginx.ingress_controller.http.request.length': { - category: 'nginx', - description: 'The request length (including request line, header, and request body) ', - name: 'nginx.ingress_controller.http.request.length', - type: 'long', - format: 'bytes', - }, - 'nginx.ingress_controller.http.request.time': { - category: 'nginx', - description: 'Time elapsed since the first bytes were read from the client ', - name: 'nginx.ingress_controller.http.request.time', - type: 'double', - format: 'duration', - }, - 'nginx.ingress_controller.upstream.name': { - category: 'nginx', - description: 'The name of the upstream. ', - name: 'nginx.ingress_controller.upstream.name', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.alternative_name': { - category: 'nginx', - description: 'The name of the alternative upstream. ', - name: 'nginx.ingress_controller.upstream.alternative_name', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.response.length': { - category: 'nginx', - description: - 'The length of the response obtained from the upstream server. If several servers were contacted during request process, the summary of the multiple response lengths is stored. ', - name: 'nginx.ingress_controller.upstream.response.length', - type: 'long', - format: 'bytes', - }, - 'nginx.ingress_controller.upstream.response.time': { - category: 'nginx', - description: - 'The time spent on receiving the response from the upstream as seconds with millisecond resolution. If several servers were contacted during request process, the summary of the multiple response times is stored. ', - name: 'nginx.ingress_controller.upstream.response.time', - type: 'double', - format: 'duration', - }, - 'nginx.ingress_controller.upstream.response.status_code': { - category: 'nginx', - description: - 'The status code of the response obtained from the upstream server. If several servers were contacted during request process, only the status code of the response from the last one is stored in this field. ', - name: 'nginx.ingress_controller.upstream.response.status_code', - type: 'long', - }, - 'nginx.ingress_controller.upstream.ip': { - category: 'nginx', - description: - 'The IP address of the upstream server. If several servers were contacted during request process, only the last one is stored in this field. ', - name: 'nginx.ingress_controller.upstream.ip', - type: 'ip', - }, - 'nginx.ingress_controller.upstream.port': { - category: 'nginx', - description: - 'The port of the upstream server. If several servers were contacted during request process, only the last one is stored in this field. ', - name: 'nginx.ingress_controller.upstream.port', - type: 'long', - }, - 'nginx.ingress_controller.http.request.id': { - category: 'nginx', - description: 'The randomly generated ID of the request ', - name: 'nginx.ingress_controller.http.request.id', - type: 'keyword', - }, - 'nginx.ingress_controller.body_sent.bytes': { - category: 'nginx', - name: 'nginx.ingress_controller.body_sent.bytes', - type: 'alias', - }, - 'nginx.ingress_controller.user_name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_name', - type: 'alias', - }, - 'nginx.ingress_controller.method': { - category: 'nginx', - name: 'nginx.ingress_controller.method', - type: 'alias', - }, - 'nginx.ingress_controller.url': { - category: 'nginx', - name: 'nginx.ingress_controller.url', - type: 'alias', - }, - 'nginx.ingress_controller.http_version': { - category: 'nginx', - name: 'nginx.ingress_controller.http_version', - type: 'alias', - }, - 'nginx.ingress_controller.response_code': { - category: 'nginx', - name: 'nginx.ingress_controller.response_code', - type: 'alias', - }, - 'nginx.ingress_controller.referrer': { - category: 'nginx', - name: 'nginx.ingress_controller.referrer', - type: 'alias', - }, - 'nginx.ingress_controller.agent': { - category: 'nginx', - name: 'nginx.ingress_controller.agent', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.device': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.device', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.name', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.os': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.os', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.os_name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.os_name', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.original': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.original', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.continent_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.continent_name', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.country_iso_code': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.country_iso_code', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.location': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.location', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.region_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.region_name', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.city_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.city_name', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.region_iso_code': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.region_iso_code', - type: 'alias', - }, - 'osquery.result.name': { - category: 'osquery', - description: 'The name of the query that generated this event. ', - name: 'osquery.result.name', - type: 'keyword', - }, - 'osquery.result.action': { - category: 'osquery', - description: - 'For incremental data, marks whether the entry was added or removed. It can be one of "added", "removed", or "snapshot". ', - name: 'osquery.result.action', - type: 'keyword', - }, - 'osquery.result.host_identifier': { - category: 'osquery', - description: - 'The identifier for the host on which the osquery agent is running. Normally the hostname. ', - name: 'osquery.result.host_identifier', - type: 'keyword', - }, - 'osquery.result.unix_time': { - category: 'osquery', - description: - 'Unix timestamp of the event, in seconds since the epoch. Used for computing the `@timestamp` column. ', - name: 'osquery.result.unix_time', - type: 'long', - }, - 'osquery.result.calendar_time': { - category: 'osquery', - description: 'String representation of the collection time, as formatted by osquery. ', - name: 'osquery.result.calendar_time', - type: 'keyword', - }, - 'pensando.dfw.action': { - category: 'pensando', - description: 'Action on the flow. ', - name: 'pensando.dfw.action', - type: 'keyword', - }, - 'pensando.dfw.app_id': { - category: 'pensando', - description: 'Application ID ', - name: 'pensando.dfw.app_id', - type: 'integer', - }, - 'pensando.dfw.destination_address': { - category: 'pensando', - description: 'Address of destination. ', - name: 'pensando.dfw.destination_address', - type: 'keyword', - }, - 'pensando.dfw.destination_port': { - category: 'pensando', - description: 'Port of destination. ', - name: 'pensando.dfw.destination_port', - type: 'integer', - }, - 'pensando.dfw.direction': { - category: 'pensando', - description: 'Direction of the flow ', - name: 'pensando.dfw.direction', - type: 'keyword', - }, - 'pensando.dfw.protocol': { - category: 'pensando', - description: 'Protocol of the flow ', - name: 'pensando.dfw.protocol', - type: 'keyword', - }, - 'pensando.dfw.rule_id': { - category: 'pensando', - description: 'Rule ID that was matched. ', - name: 'pensando.dfw.rule_id', - type: 'keyword', - }, - 'pensando.dfw.session_id': { - category: 'pensando', - description: 'Session ID of the flow ', - name: 'pensando.dfw.session_id', - type: 'integer', - }, - 'pensando.dfw.session_state': { - category: 'pensando', - description: 'Session state of the flow. ', - name: 'pensando.dfw.session_state', - type: 'keyword', - }, - 'pensando.dfw.source_address': { - category: 'pensando', - description: 'Source address of the flow. ', - name: 'pensando.dfw.source_address', - type: 'keyword', - }, - 'pensando.dfw.source_port': { - category: 'pensando', - description: 'Source port of the flow. ', - name: 'pensando.dfw.source_port', - type: 'integer', - }, - 'pensando.dfw.timestamp': { - category: 'pensando', - description: 'Timestamp of the log. ', - name: 'pensando.dfw.timestamp', - type: 'date', - }, - 'postgresql.log.timestamp': { - category: 'postgresql', - description: 'The timestamp from the log line. ', - name: 'postgresql.log.timestamp', - }, - 'postgresql.log.core_id': { - category: 'postgresql', - description: - 'Core id. (deprecated, there is no core_id in PostgreSQL logs, this is actually session_line_number). ', - name: 'postgresql.log.core_id', - type: 'alias', - }, - 'postgresql.log.client_addr': { - category: 'postgresql', - description: 'Host where the connection originated from. ', - example: '127.0.0.1', - name: 'postgresql.log.client_addr', - }, - 'postgresql.log.client_port': { - category: 'postgresql', - description: 'Port where the connection originated from. ', - example: '59700', - name: 'postgresql.log.client_port', - }, - 'postgresql.log.session_id': { - category: 'postgresql', - description: 'PostgreSQL session. ', - example: '5ff1dd98.22', - name: 'postgresql.log.session_id', - }, - 'postgresql.log.session_line_number': { - category: 'postgresql', - description: 'Line number inside a session. (%l in `log_line_prefix`). ', - name: 'postgresql.log.session_line_number', - type: 'long', - }, - 'postgresql.log.database': { - category: 'postgresql', - description: 'Name of database. ', - example: 'postgres', - name: 'postgresql.log.database', - }, - 'postgresql.log.query': { - category: 'postgresql', - description: - 'Query statement. In the case of CSV parse, look at command_tag to get more context. ', - example: 'SELECT * FROM users;', - name: 'postgresql.log.query', - }, - 'postgresql.log.query_step': { - category: 'postgresql', - description: - 'Statement step when using extended query protocol (one of statement, parse, bind or execute). ', - example: 'parse', - name: 'postgresql.log.query_step', - }, - 'postgresql.log.query_name': { - category: 'postgresql', - description: - 'Name given to a query when using extended query protocol. If it is "", or not present, this field is ignored. ', - example: 'pdo_stmt_00000001', - name: 'postgresql.log.query_name', - }, - 'postgresql.log.command_tag': { - category: 'postgresql', - description: - "Type of session's current command. The complete list can be found at: src/include/tcop/cmdtaglist.h ", - example: 'SELECT', - name: 'postgresql.log.command_tag', - }, - 'postgresql.log.session_start_time': { - category: 'postgresql', - description: 'Time when this session started. ', - name: 'postgresql.log.session_start_time', - type: 'date', - }, - 'postgresql.log.virtual_transaction_id': { - category: 'postgresql', - description: 'Backend local transaction id. ', - name: 'postgresql.log.virtual_transaction_id', - }, - 'postgresql.log.transaction_id': { - category: 'postgresql', - description: 'The id of current transaction. ', - name: 'postgresql.log.transaction_id', - type: 'long', - }, - 'postgresql.log.sql_state_code': { - category: 'postgresql', - description: - 'State code returned by Postgres (if any). See also https://www.postgresql.org/docs/current/errcodes-appendix.html ', - name: 'postgresql.log.sql_state_code', - type: 'keyword', - }, - 'postgresql.log.detail': { - category: 'postgresql', - description: - "More information about the message, parameters in case of a parametrized query. e.g. 'Role \\\"user\\\" does not exist.', 'parameters: $1 = 42', etc. ", - name: 'postgresql.log.detail', - }, - 'postgresql.log.hint': { - category: 'postgresql', - description: 'A possible solution to solve an error. ', - name: 'postgresql.log.hint', - }, - 'postgresql.log.internal_query': { - category: 'postgresql', - description: 'Internal query that led to the error (if any). ', - name: 'postgresql.log.internal_query', - }, - 'postgresql.log.internal_query_pos': { - category: 'postgresql', - description: 'Character count of the internal query (if any). ', - name: 'postgresql.log.internal_query_pos', - type: 'long', - }, - 'postgresql.log.context': { - category: 'postgresql', - description: 'Error context. ', - name: 'postgresql.log.context', - }, - 'postgresql.log.query_pos': { - category: 'postgresql', - description: 'Character count of the error position (if any). ', - name: 'postgresql.log.query_pos', - type: 'long', - }, - 'postgresql.log.location': { - category: 'postgresql', - description: - 'Location of the error in the PostgreSQL source code (if log_error_verbosity is set to verbose). ', - name: 'postgresql.log.location', - }, - 'postgresql.log.application_name': { - category: 'postgresql', - description: 'Name of the application of this event. It is defined by the client. ', - name: 'postgresql.log.application_name', - }, - 'postgresql.log.backend_type': { - category: 'postgresql', - description: - 'Type of backend of this event. Possible types are autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender and walwriter. In addition, background workers registered by extensions may have additional types. ', - example: 'client backend', - name: 'postgresql.log.backend_type', - }, - 'postgresql.log.error.code': { - category: 'postgresql', - description: - 'Error code returned by Postgres (if any). Deprecated: errors can have letters. Use sql_state_code instead. ', - name: 'postgresql.log.error.code', - type: 'alias', - }, - 'postgresql.log.timezone': { - category: 'postgresql', - name: 'postgresql.log.timezone', - type: 'alias', - }, - 'postgresql.log.user': { - category: 'postgresql', - name: 'postgresql.log.user', - type: 'alias', - }, - 'postgresql.log.level': { - category: 'postgresql', - description: - 'Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. ', - example: 'LOG', - name: 'postgresql.log.level', - type: 'alias', - }, - 'postgresql.log.message': { - category: 'postgresql', - name: 'postgresql.log.message', - type: 'alias', - }, - 'redis.log.role': { - category: 'redis', - description: - 'The role of the Redis instance. Can be one of `master`, `slave`, `child` (for RDF/AOF writing child), or `sentinel`. ', - name: 'redis.log.role', - type: 'keyword', - }, - 'redis.log.pid': { - category: 'redis', - name: 'redis.log.pid', - type: 'alias', - }, - 'redis.log.level': { - category: 'redis', - name: 'redis.log.level', - type: 'alias', - }, - 'redis.log.message': { - category: 'redis', - name: 'redis.log.message', - type: 'alias', - }, - 'redis.slowlog.cmd': { - category: 'redis', - description: 'The command executed. ', - name: 'redis.slowlog.cmd', - type: 'keyword', - }, - 'redis.slowlog.duration.us': { - category: 'redis', - description: 'How long it took to execute the command in microseconds. ', - name: 'redis.slowlog.duration.us', - type: 'long', - }, - 'redis.slowlog.id': { - category: 'redis', - description: 'The ID of the query. ', - name: 'redis.slowlog.id', - type: 'long', - }, - 'redis.slowlog.key': { - category: 'redis', - description: 'The key on which the command was executed. ', - name: 'redis.slowlog.key', - type: 'keyword', - }, - 'redis.slowlog.args': { - category: 'redis', - description: 'The arguments with which the command was called. ', - name: 'redis.slowlog.args', - type: 'keyword', - }, - 'santa.action': { - category: 'santa', - description: 'Action', - example: 'EXEC', - name: 'santa.action', - type: 'keyword', - }, - 'santa.decision': { - category: 'santa', - description: 'Decision that santad took.', - example: 'ALLOW', - name: 'santa.decision', - type: 'keyword', - }, - 'santa.reason': { - category: 'santa', - description: 'Reason for the decsision.', - example: 'CERT', - name: 'santa.reason', - type: 'keyword', - }, - 'santa.mode': { - category: 'santa', - description: 'Operating mode of Santa.', - example: 'M', - name: 'santa.mode', - type: 'keyword', - }, - 'santa.disk.volume': { - category: 'santa', - description: 'The volume name.', - name: 'santa.disk.volume', - }, - 'santa.disk.bus': { - category: 'santa', - description: 'The disk bus protocol.', - name: 'santa.disk.bus', - }, - 'santa.disk.serial': { - category: 'santa', - description: 'The disk serial number.', - name: 'santa.disk.serial', - }, - 'santa.disk.bsdname': { - category: 'santa', - description: 'The disk BSD name.', - example: 'disk1s3', - name: 'santa.disk.bsdname', - }, - 'santa.disk.model': { - category: 'santa', - description: 'The disk model.', - example: 'APPLE SSD SM0512L', - name: 'santa.disk.model', - }, - 'santa.disk.fs': { - category: 'santa', - description: 'The disk volume kind (filesystem type).', - example: 'apfs', - name: 'santa.disk.fs', - }, - 'santa.disk.mount': { - category: 'santa', - description: 'The disk volume path.', - name: 'santa.disk.mount', - }, - 'santa.certificate.common_name': { - category: 'santa', - description: 'Common name from code signing certificate.', - name: 'santa.certificate.common_name', - type: 'keyword', - }, - 'santa.certificate.sha256': { - category: 'santa', - description: 'SHA256 hash of code signing certificate.', - name: 'santa.certificate.sha256', - type: 'keyword', - }, - 'system.auth.timestamp': { - category: 'system', - name: 'system.auth.timestamp', - type: 'alias', - }, - 'system.auth.hostname': { - category: 'system', - name: 'system.auth.hostname', - type: 'alias', - }, - 'system.auth.program': { - category: 'system', - name: 'system.auth.program', - type: 'alias', - }, - 'system.auth.pid': { - category: 'system', - name: 'system.auth.pid', - type: 'alias', - }, - 'system.auth.message': { - category: 'system', - name: 'system.auth.message', - type: 'alias', - }, - 'system.auth.user': { - category: 'system', - name: 'system.auth.user', - type: 'alias', - }, - 'system.auth.ssh.method': { - category: 'system', - description: 'The SSH authentication method. Can be one of "password" or "publickey". ', - name: 'system.auth.ssh.method', - }, - 'system.auth.ssh.signature': { - category: 'system', - description: 'The signature of the client public key. ', - name: 'system.auth.ssh.signature', - }, - 'system.auth.ssh.dropped_ip': { - category: 'system', - description: 'The client IP from SSH connections that are open and immediately dropped. ', - name: 'system.auth.ssh.dropped_ip', - type: 'ip', - }, - 'system.auth.ssh.event': { - category: 'system', - description: 'The SSH event as found in the logs (Accepted, Invalid, Failed, etc.) ', - example: 'Accepted', - name: 'system.auth.ssh.event', - }, - 'system.auth.ssh.ip': { - category: 'system', - name: 'system.auth.ssh.ip', - type: 'alias', - }, - 'system.auth.ssh.port': { - category: 'system', - name: 'system.auth.ssh.port', - type: 'alias', - }, - 'system.auth.ssh.geoip.continent_name': { - category: 'system', - name: 'system.auth.ssh.geoip.continent_name', - type: 'alias', - }, - 'system.auth.ssh.geoip.country_iso_code': { - category: 'system', - name: 'system.auth.ssh.geoip.country_iso_code', - type: 'alias', - }, - 'system.auth.ssh.geoip.location': { - category: 'system', - name: 'system.auth.ssh.geoip.location', - type: 'alias', - }, - 'system.auth.ssh.geoip.region_name': { - category: 'system', - name: 'system.auth.ssh.geoip.region_name', - type: 'alias', - }, - 'system.auth.ssh.geoip.city_name': { - category: 'system', - name: 'system.auth.ssh.geoip.city_name', - type: 'alias', - }, - 'system.auth.ssh.geoip.region_iso_code': { - category: 'system', - name: 'system.auth.ssh.geoip.region_iso_code', - type: 'alias', - }, - 'system.auth.sudo.error': { - category: 'system', - description: 'The error message in case the sudo command failed. ', - example: 'user NOT in sudoers', - name: 'system.auth.sudo.error', - }, - 'system.auth.sudo.tty': { - category: 'system', - description: 'The TTY where the sudo command is executed. ', - name: 'system.auth.sudo.tty', - }, - 'system.auth.sudo.pwd': { - category: 'system', - description: 'The current directory where the sudo command is executed. ', - name: 'system.auth.sudo.pwd', - }, - 'system.auth.sudo.user': { - category: 'system', - description: 'The target user to which the sudo command is switching. ', - example: 'root', - name: 'system.auth.sudo.user', - }, - 'system.auth.sudo.command': { - category: 'system', - description: 'The command executed via sudo. ', - name: 'system.auth.sudo.command', - }, - 'system.auth.useradd.home': { - category: 'system', - description: 'The home folder for the new user.', - name: 'system.auth.useradd.home', - }, - 'system.auth.useradd.shell': { - category: 'system', - description: 'The default shell for the new user.', - name: 'system.auth.useradd.shell', - }, - 'system.auth.useradd.name': { - category: 'system', - name: 'system.auth.useradd.name', - type: 'alias', - }, - 'system.auth.useradd.uid': { - category: 'system', - name: 'system.auth.useradd.uid', - type: 'alias', - }, - 'system.auth.useradd.gid': { - category: 'system', - name: 'system.auth.useradd.gid', - type: 'alias', - }, - 'system.auth.groupadd.name': { - category: 'system', - name: 'system.auth.groupadd.name', - type: 'alias', - }, - 'system.auth.groupadd.gid': { - category: 'system', - name: 'system.auth.groupadd.gid', - type: 'alias', - }, - 'system.syslog.timestamp': { - category: 'system', - name: 'system.syslog.timestamp', - type: 'alias', - }, - 'system.syslog.hostname': { - category: 'system', - name: 'system.syslog.hostname', - type: 'alias', - }, - 'system.syslog.program': { - category: 'system', - name: 'system.syslog.program', - type: 'alias', - }, - 'system.syslog.pid': { - category: 'system', - name: 'system.syslog.pid', - type: 'alias', - }, - 'system.syslog.message': { - category: 'system', - name: 'system.syslog.message', - type: 'alias', - }, - 'traefik.access.user_identifier': { - category: 'traefik', - description: 'Is the RFC 1413 identity of the client ', - name: 'traefik.access.user_identifier', - type: 'keyword', - }, - 'traefik.access.request_count': { - category: 'traefik', - description: 'The number of requests ', - name: 'traefik.access.request_count', - type: 'long', - }, - 'traefik.access.frontend_name': { - category: 'traefik', - description: 'The name of the frontend used ', - name: 'traefik.access.frontend_name', - type: 'keyword', - }, - 'traefik.access.backend_url': { - category: 'traefik', - description: 'The url of the backend where request is forwarded', - name: 'traefik.access.backend_url', - type: 'keyword', - }, - 'traefik.access.body_sent.bytes': { - category: 'traefik', - name: 'traefik.access.body_sent.bytes', - type: 'alias', - }, - 'traefik.access.remote_ip': { - category: 'traefik', - name: 'traefik.access.remote_ip', - type: 'alias', - }, - 'traefik.access.user_name': { - category: 'traefik', - name: 'traefik.access.user_name', - type: 'alias', - }, - 'traefik.access.method': { - category: 'traefik', - name: 'traefik.access.method', - type: 'alias', - }, - 'traefik.access.url': { - category: 'traefik', - name: 'traefik.access.url', - type: 'alias', - }, - 'traefik.access.http_version': { - category: 'traefik', - name: 'traefik.access.http_version', - type: 'alias', - }, - 'traefik.access.response_code': { - category: 'traefik', - name: 'traefik.access.response_code', - type: 'alias', - }, - 'traefik.access.referrer': { - category: 'traefik', - name: 'traefik.access.referrer', - type: 'alias', - }, - 'traefik.access.agent': { - category: 'traefik', - name: 'traefik.access.agent', - type: 'alias', - }, - 'traefik.access.user_agent.name': { - category: 'traefik', - name: 'traefik.access.user_agent.name', - type: 'alias', - }, - 'traefik.access.user_agent.os': { - category: 'traefik', - name: 'traefik.access.user_agent.os', - type: 'alias', - }, - 'traefik.access.user_agent.os_name': { - category: 'traefik', - name: 'traefik.access.user_agent.os_name', - type: 'alias', - }, - 'traefik.access.user_agent.original': { - category: 'traefik', - name: 'traefik.access.user_agent.original', - type: 'alias', - }, - 'traefik.access.geoip.continent_name': { - category: 'traefik', - name: 'traefik.access.geoip.continent_name', - type: 'alias', - }, - 'traefik.access.geoip.country_iso_code': { - category: 'traefik', - name: 'traefik.access.geoip.country_iso_code', - type: 'alias', - }, - 'traefik.access.geoip.location': { - category: 'traefik', - name: 'traefik.access.geoip.location', - type: 'alias', - }, - 'traefik.access.geoip.region_name': { - category: 'traefik', - name: 'traefik.access.geoip.region_name', - type: 'alias', - }, - 'traefik.access.geoip.city_name': { - category: 'traefik', - name: 'traefik.access.geoip.city_name', - type: 'alias', - }, - 'traefik.access.geoip.region_iso_code': { - category: 'traefik', - name: 'traefik.access.geoip.region_iso_code', - type: 'alias', - }, - 'activemq.caller': { - category: 'activemq', - description: 'Name of the caller issuing the logging request (class or resource). ', - name: 'activemq.caller', - type: 'keyword', - }, - 'activemq.thread': { - category: 'activemq', - description: 'Thread that generated the logging event. ', - name: 'activemq.thread', - type: 'keyword', - }, - 'activemq.user': { - category: 'activemq', - description: 'User that generated the logging event. ', - name: 'activemq.user', - type: 'keyword', - }, - 'activemq.audit': { - category: 'activemq', - description: 'Fields from ActiveMQ audit logs. ', - name: 'activemq.audit', - type: 'group', - }, - 'activemq.log.stack_trace': { - category: 'activemq', - name: 'activemq.log.stack_trace', - type: 'keyword', - }, - 'aws.cloudtrail.event_version': { - category: 'aws', - description: 'The CloudTrail version of the log event format. ', - name: 'aws.cloudtrail.event_version', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.type': { - category: 'aws', - description: 'The type of the identity ', - name: 'aws.cloudtrail.user_identity.type', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.arn': { - category: 'aws', - description: 'The Amazon Resource Name (ARN) of the principal that made the call.', - name: 'aws.cloudtrail.user_identity.arn', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.access_key_id': { - category: 'aws', - description: 'The access key ID that was used to sign the request.', - name: 'aws.cloudtrail.user_identity.access_key_id', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.mfa_authenticated': { - category: 'aws', - description: - 'The value is true if the root user or IAM user whose credentials were used for the request also was authenticated with an MFA device; otherwise, false.', - name: 'aws.cloudtrail.user_identity.session_context.mfa_authenticated', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.creation_date': { - category: 'aws', - description: 'The date and time when the temporary security credentials were issued.', - name: 'aws.cloudtrail.user_identity.session_context.creation_date', - type: 'date', - }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.type': { - category: 'aws', - description: - 'The source of the temporary security credentials, such as Root, IAMUser, or Role.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.type', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.principal_id': { - category: 'aws', - description: 'The internal ID of the entity that was used to get credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.principal_id', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.arn': { - category: 'aws', - description: - 'The ARN of the source (account, IAM user, or role) that was used to get temporary security credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.arn', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.account_id': { - category: 'aws', - description: 'The account that owns the entity that was used to get credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.account_id', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.invoked_by': { - category: 'aws', - description: - 'The name of the AWS service that made the request, such as Amazon EC2 Auto Scaling or AWS Elastic Beanstalk.', - name: 'aws.cloudtrail.user_identity.invoked_by', - type: 'keyword', - }, - 'aws.cloudtrail.error_code': { - category: 'aws', - description: 'The AWS service error if the request returns an error.', - name: 'aws.cloudtrail.error_code', - type: 'keyword', - }, - 'aws.cloudtrail.error_message': { - category: 'aws', - description: 'If the request returns an error, the description of the error.', - name: 'aws.cloudtrail.error_message', - type: 'keyword', - }, - 'aws.cloudtrail.request_parameters': { - category: 'aws', - description: 'The parameters, if any, that were sent with the request.', - name: 'aws.cloudtrail.request_parameters', - type: 'keyword', - }, - 'aws.cloudtrail.response_elements': { - category: 'aws', - description: - 'The response element for actions that make changes (create, update, or delete actions).', - name: 'aws.cloudtrail.response_elements', - type: 'keyword', - }, - 'aws.cloudtrail.additional_eventdata': { - category: 'aws', - description: 'Additional data about the event that was not part of the request or response.', - name: 'aws.cloudtrail.additional_eventdata', - type: 'keyword', - }, - 'aws.cloudtrail.request_id': { - category: 'aws', - description: - 'The value that identifies the request. The service being called generates this value.', - name: 'aws.cloudtrail.request_id', - type: 'keyword', - }, - 'aws.cloudtrail.event_type': { - category: 'aws', - description: 'Identifies the type of event that generated the event record.', - name: 'aws.cloudtrail.event_type', - type: 'keyword', - }, - 'aws.cloudtrail.api_version': { - category: 'aws', - description: 'Identifies the API version associated with the AwsApiCall eventType value.', - name: 'aws.cloudtrail.api_version', - type: 'keyword', - }, - 'aws.cloudtrail.management_event': { - category: 'aws', - description: 'A Boolean value that identifies whether the event is a management event.', - name: 'aws.cloudtrail.management_event', - type: 'keyword', - }, - 'aws.cloudtrail.read_only': { - category: 'aws', - description: 'Identifies whether this operation is a read-only operation.', - name: 'aws.cloudtrail.read_only', - type: 'keyword', - }, - 'aws.cloudtrail.resources.arn': { - category: 'aws', - description: 'Resource ARNs', - name: 'aws.cloudtrail.resources.arn', - type: 'keyword', - }, - 'aws.cloudtrail.resources.account_id': { - category: 'aws', - description: 'Account ID of the resource owner', - name: 'aws.cloudtrail.resources.account_id', - type: 'keyword', - }, - 'aws.cloudtrail.resources.type': { - category: 'aws', - description: 'Resource type identifier in the format: AWS::aws-service-name::data-type-name', - name: 'aws.cloudtrail.resources.type', - type: 'keyword', - }, - 'aws.cloudtrail.recipient_account_id': { - category: 'aws', - description: 'Represents the account ID that received this event.', - name: 'aws.cloudtrail.recipient_account_id', - type: 'keyword', - }, - 'aws.cloudtrail.service_event_details': { - category: 'aws', - description: 'Identifies the service event, including what triggered the event and the result.', - name: 'aws.cloudtrail.service_event_details', - type: 'keyword', - }, - 'aws.cloudtrail.shared_event_id': { - category: 'aws', - description: - 'GUID generated by CloudTrail to uniquely identify CloudTrail events from the same AWS action that is sent to different AWS accounts.', - name: 'aws.cloudtrail.shared_event_id', - type: 'keyword', - }, - 'aws.cloudtrail.vpc_endpoint_id': { - category: 'aws', - description: - 'Identifies the VPC endpoint in which requests were made from a VPC to another AWS service, such as Amazon S3.', - name: 'aws.cloudtrail.vpc_endpoint_id', - type: 'keyword', - }, - 'aws.cloudtrail.event_category': { - category: 'aws', - description: - 'Shows the event category that is used in LookupEvents calls. - For management events, the value is management. - For data events, the value is data. - For Insights events, the value is insight.', - name: 'aws.cloudtrail.event_category', - type: 'keyword', - }, - 'aws.cloudtrail.console_login.additional_eventdata.mobile_version': { - category: 'aws', - description: 'Identifies whether ConsoleLogin was from mobile version', - name: 'aws.cloudtrail.console_login.additional_eventdata.mobile_version', - type: 'boolean', - }, - 'aws.cloudtrail.console_login.additional_eventdata.login_to': { - category: 'aws', - description: 'URL for ConsoleLogin', - name: 'aws.cloudtrail.console_login.additional_eventdata.login_to', - type: 'keyword', - }, - 'aws.cloudtrail.console_login.additional_eventdata.mfa_used': { - category: 'aws', - description: 'Identifies whether multi factor authentication was used during ConsoleLogin', - name: 'aws.cloudtrail.console_login.additional_eventdata.mfa_used', - type: 'boolean', - }, - 'aws.cloudtrail.flattened.additional_eventdata': { - category: 'aws', - description: 'Additional data about the event that was not part of the request or response. ', - name: 'aws.cloudtrail.flattened.additional_eventdata', - type: 'flattened', - }, - 'aws.cloudtrail.flattened.request_parameters': { - category: 'aws', - description: 'The parameters, if any, that were sent with the request.', - name: 'aws.cloudtrail.flattened.request_parameters', - type: 'flattened', - }, - 'aws.cloudtrail.flattened.response_elements': { - category: 'aws', - description: - 'The response element for actions that make changes (create, update, or delete actions).', - name: 'aws.cloudtrail.flattened.response_elements', - type: 'flattened', - }, - 'aws.cloudtrail.flattened.service_event_details': { - category: 'aws', - description: 'Identifies the service event, including what triggered the event and the result.', - name: 'aws.cloudtrail.flattened.service_event_details', - type: 'flattened', - }, - 'aws.cloudtrail.digest.log_files': { - category: 'aws', - description: 'A list of Logfiles contained in the digest.', - name: 'aws.cloudtrail.digest.log_files', - type: 'nested', - }, - 'aws.cloudtrail.digest.start_time': { - category: 'aws', - description: - 'The starting UTC time range that the digest file covers, taking as a reference the time in which log files have been delivered by CloudTrail.', - name: 'aws.cloudtrail.digest.start_time', - type: 'date', - }, - 'aws.cloudtrail.digest.end_time': { - category: 'aws', - description: - 'The ending UTC time range that the digest file covers, taking as a reference the time in which log files have been delivered by CloudTrail.', - name: 'aws.cloudtrail.digest.end_time', - type: 'date', - }, - 'aws.cloudtrail.digest.s3_bucket': { - category: 'aws', - description: - 'The name of the Amazon S3 bucket to which the current digest file has been delivered.', - name: 'aws.cloudtrail.digest.s3_bucket', - type: 'keyword', - }, - 'aws.cloudtrail.digest.s3_object': { - category: 'aws', - description: - 'The Amazon S3 object key (that is, the Amazon S3 bucket location) of the current digest file.', - name: 'aws.cloudtrail.digest.s3_object', - type: 'keyword', - }, - 'aws.cloudtrail.digest.newest_event_time': { - category: 'aws', - description: - 'The UTC time of the most recent event among all of the events in the log files in the digest.', - name: 'aws.cloudtrail.digest.newest_event_time', - type: 'date', - }, - 'aws.cloudtrail.digest.oldest_event_time': { - category: 'aws', - description: - 'The UTC time of the oldest event among all of the events in the log files in the digest.', - name: 'aws.cloudtrail.digest.oldest_event_time', - type: 'date', - }, - 'aws.cloudtrail.digest.previous_s3_bucket': { - category: 'aws', - description: 'The Amazon S3 bucket to which the previous digest file was delivered.', - name: 'aws.cloudtrail.digest.previous_s3_bucket', - type: 'keyword', - }, - 'aws.cloudtrail.digest.previous_hash_algorithm': { - category: 'aws', - description: 'The name of the hash algorithm that was used to hash the previous digest file.', - name: 'aws.cloudtrail.digest.previous_hash_algorithm', - type: 'keyword', - }, - 'aws.cloudtrail.digest.public_key_fingerprint': { - category: 'aws', - description: - 'The hexadecimal encoded fingerprint of the public key that matches the private key used to sign this digest file.', - name: 'aws.cloudtrail.digest.public_key_fingerprint', - type: 'keyword', - }, - 'aws.cloudtrail.digest.signature_algorithm': { - category: 'aws', - description: 'The algorithm used to sign the digest file.', - name: 'aws.cloudtrail.digest.signature_algorithm', - type: 'keyword', - }, - 'aws.cloudtrail.insight_details': { - category: 'aws', - description: - 'Shows information about the underlying triggers of an Insights event, such as event source, user agent, statistics, API name, and whether the event is the start or end of the Insights event.', - name: 'aws.cloudtrail.insight_details', - type: 'flattened', - }, - 'aws.cloudwatch.message': { - category: 'aws', - description: 'CloudWatch log message. ', - name: 'aws.cloudwatch.message', - type: 'text', - }, - 'aws.ec2.ip_address': { - category: 'aws', - description: 'The internet address of the requester. ', - name: 'aws.ec2.ip_address', - type: 'keyword', - }, - 'aws.elb.name': { - category: 'aws', - description: 'The name of the load balancer. ', - name: 'aws.elb.name', - type: 'keyword', - }, - 'aws.elb.type': { - category: 'aws', - description: 'The type of the load balancer for v2 Load Balancers. ', - name: 'aws.elb.type', - type: 'keyword', - }, - 'aws.elb.target_group.arn': { - category: 'aws', - description: 'The ARN of the target group handling the request. ', - name: 'aws.elb.target_group.arn', - type: 'keyword', - }, - 'aws.elb.listener': { - category: 'aws', - description: 'The ELB listener that received the connection. ', - name: 'aws.elb.listener', - type: 'keyword', - }, - 'aws.elb.protocol': { - category: 'aws', - description: 'The protocol of the load balancer (http or tcp). ', - name: 'aws.elb.protocol', - type: 'keyword', - }, - 'aws.elb.request_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the connection or request is received until it is sent to a registered backend. ', - name: 'aws.elb.request_processing_time.sec', - type: 'float', - }, - 'aws.elb.backend_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the connection is sent to the backend till the backend starts responding. ', - name: 'aws.elb.backend_processing_time.sec', - type: 'float', - }, - 'aws.elb.response_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the response is received from the backend till it is sent to the client. ', - name: 'aws.elb.response_processing_time.sec', - type: 'float', - }, - 'aws.elb.connection_time.ms': { - category: 'aws', - description: - 'The total time of the connection in milliseconds, since it is opened till it is closed. ', - name: 'aws.elb.connection_time.ms', - type: 'long', - }, - 'aws.elb.tls_handshake_time.ms': { - category: 'aws', - description: - 'The total time for the TLS handshake to complete in milliseconds once the connection has been established. ', - name: 'aws.elb.tls_handshake_time.ms', - type: 'long', - }, - 'aws.elb.backend.ip': { - category: 'aws', - description: 'The IP address of the backend processing this connection. ', - name: 'aws.elb.backend.ip', - type: 'keyword', - }, - 'aws.elb.backend.port': { - category: 'aws', - description: 'The port in the backend processing this connection. ', - name: 'aws.elb.backend.port', - type: 'keyword', - }, - 'aws.elb.backend.http.response.status_code': { - category: 'aws', - description: - 'The status code from the backend (status code sent to the client from ELB is stored in `http.response.status_code` ', - name: 'aws.elb.backend.http.response.status_code', - type: 'keyword', - }, - 'aws.elb.ssl_cipher': { - category: 'aws', - description: 'The SSL cipher used in TLS/SSL connections. ', - name: 'aws.elb.ssl_cipher', - type: 'keyword', - }, - 'aws.elb.ssl_protocol': { - category: 'aws', - description: 'The SSL protocol used in TLS/SSL connections. ', - name: 'aws.elb.ssl_protocol', - type: 'keyword', - }, - 'aws.elb.chosen_cert.arn': { - category: 'aws', - description: - 'The ARN of the chosen certificate presented to the client in TLS/SSL connections. ', - name: 'aws.elb.chosen_cert.arn', - type: 'keyword', - }, - 'aws.elb.chosen_cert.serial': { - category: 'aws', - description: - 'The serial number of the chosen certificate presented to the client in TLS/SSL connections. ', - name: 'aws.elb.chosen_cert.serial', - type: 'keyword', - }, - 'aws.elb.incoming_tls_alert': { - category: 'aws', - description: - 'The integer value of TLS alerts received by the load balancer from the client, if present. ', - name: 'aws.elb.incoming_tls_alert', - type: 'keyword', - }, - 'aws.elb.tls_named_group': { - category: 'aws', - description: 'The TLS named group. ', - name: 'aws.elb.tls_named_group', - type: 'keyword', - }, - 'aws.elb.trace_id': { - category: 'aws', - description: 'The contents of the `X-Amzn-Trace-Id` header. ', - name: 'aws.elb.trace_id', - type: 'keyword', - }, - 'aws.elb.matched_rule_priority': { - category: 'aws', - description: 'The priority value of the rule that matched the request, if a rule matched. ', - name: 'aws.elb.matched_rule_priority', - type: 'keyword', - }, - 'aws.elb.action_executed': { - category: 'aws', - description: - 'The action executed when processing the request (forward, fixed-response, authenticate...). It can contain several values. ', - name: 'aws.elb.action_executed', - type: 'keyword', - }, - 'aws.elb.redirect_url': { - category: 'aws', - description: 'The URL used if a redirection action was executed. ', - name: 'aws.elb.redirect_url', - type: 'keyword', - }, - 'aws.elb.error.reason': { - category: 'aws', - description: 'The error reason if the executed action failed. ', - name: 'aws.elb.error.reason', - type: 'keyword', - }, - 'aws.elb.target_port': { - category: 'aws', - description: 'List of IP addresses and ports for the targets that processed this request. ', - name: 'aws.elb.target_port', - type: 'keyword', - }, - 'aws.elb.target_status_code': { - category: 'aws', - description: 'List of status codes from the responses of the targets. ', - name: 'aws.elb.target_status_code', - type: 'keyword', - }, - 'aws.elb.classification': { - category: 'aws', - description: 'The classification for desync mitigation. ', - name: 'aws.elb.classification', - type: 'keyword', - }, - 'aws.elb.classification_reason': { - category: 'aws', - description: 'The classification reason code. ', - name: 'aws.elb.classification_reason', - type: 'keyword', - }, - 'aws.s3access.bucket_owner': { - category: 'aws', - description: 'The canonical user ID of the owner of the source bucket. ', - name: 'aws.s3access.bucket_owner', - type: 'keyword', - }, - 'aws.s3access.bucket': { - category: 'aws', - description: 'The name of the bucket that the request was processed against. ', - name: 'aws.s3access.bucket', - type: 'keyword', - }, - 'aws.s3access.remote_ip': { - category: 'aws', - description: 'The apparent internet address of the requester. ', - name: 'aws.s3access.remote_ip', - type: 'ip', - }, - 'aws.s3access.requester': { - category: 'aws', - description: 'The canonical user ID of the requester, or a - for unauthenticated requests. ', - name: 'aws.s3access.requester', - type: 'keyword', - }, - 'aws.s3access.request_id': { - category: 'aws', - description: 'A string generated by Amazon S3 to uniquely identify each request. ', - name: 'aws.s3access.request_id', - type: 'keyword', - }, - 'aws.s3access.operation': { - category: 'aws', - description: - 'The operation listed here is declared as SOAP.operation, REST.HTTP_method.resource_type, WEBSITE.HTTP_method.resource_type, or BATCH.DELETE.OBJECT. ', - name: 'aws.s3access.operation', - type: 'keyword', - }, - 'aws.s3access.key': { - category: 'aws', - description: - 'The "key" part of the request, URL encoded, or "-" if the operation does not take a key parameter. ', - name: 'aws.s3access.key', - type: 'keyword', - }, - 'aws.s3access.request_uri': { - category: 'aws', - description: 'The Request-URI part of the HTTP request message. ', - name: 'aws.s3access.request_uri', - type: 'keyword', - }, - 'aws.s3access.http_status': { - category: 'aws', - description: 'The numeric HTTP status code of the response. ', - name: 'aws.s3access.http_status', - type: 'long', - }, - 'aws.s3access.error_code': { - category: 'aws', - description: 'The Amazon S3 Error Code, or "-" if no error occurred. ', - name: 'aws.s3access.error_code', - type: 'keyword', - }, - 'aws.s3access.bytes_sent': { - category: 'aws', - description: - 'The number of response bytes sent, excluding HTTP protocol overhead, or "-" if zero. ', - name: 'aws.s3access.bytes_sent', - type: 'long', - }, - 'aws.s3access.object_size': { - category: 'aws', - description: 'The total size of the object in question. ', - name: 'aws.s3access.object_size', - type: 'long', - }, - 'aws.s3access.total_time': { - category: 'aws', - description: - "The number of milliseconds the request was in flight from the server's perspective. ", - name: 'aws.s3access.total_time', - type: 'long', - }, - 'aws.s3access.turn_around_time': { - category: 'aws', - description: 'The number of milliseconds that Amazon S3 spent processing your request. ', - name: 'aws.s3access.turn_around_time', - type: 'long', - }, - 'aws.s3access.referrer': { - category: 'aws', - description: 'The value of the HTTP Referrer header, if present. ', - name: 'aws.s3access.referrer', - type: 'keyword', - }, - 'aws.s3access.user_agent': { - category: 'aws', - description: 'The value of the HTTP User-Agent header. ', - name: 'aws.s3access.user_agent', - type: 'keyword', - }, - 'aws.s3access.version_id': { - category: 'aws', - description: - 'The version ID in the request, or "-" if the operation does not take a versionId parameter. ', - name: 'aws.s3access.version_id', - type: 'keyword', - }, - 'aws.s3access.host_id': { - category: 'aws', - description: 'The x-amz-id-2 or Amazon S3 extended request ID. ', - name: 'aws.s3access.host_id', - type: 'keyword', - }, - 'aws.s3access.signature_version': { - category: 'aws', - description: - 'The signature version, SigV2 or SigV4, that was used to authenticate the request or a - for unauthenticated requests. ', - name: 'aws.s3access.signature_version', - type: 'keyword', - }, - 'aws.s3access.cipher_suite': { - category: 'aws', - description: - 'The Secure Sockets Layer (SSL) cipher that was negotiated for HTTPS request or a - for HTTP. ', - name: 'aws.s3access.cipher_suite', - type: 'keyword', - }, - 'aws.s3access.authentication_type': { - category: 'aws', - description: - 'The type of request authentication used, AuthHeader for authentication headers, QueryString for query string (pre-signed URL) or a - for unauthenticated requests. ', - name: 'aws.s3access.authentication_type', - type: 'keyword', - }, - 'aws.s3access.host_header': { - category: 'aws', - description: 'The endpoint used to connect to Amazon S3. ', - name: 'aws.s3access.host_header', - type: 'keyword', - }, - 'aws.s3access.tls_version': { - category: 'aws', - description: 'The Transport Layer Security (TLS) version negotiated by the client. ', - name: 'aws.s3access.tls_version', - type: 'keyword', - }, - 'aws.vpcflow.version': { - category: 'aws', - description: - 'The VPC Flow Logs version. If you use the default format, the version is 2. If you specify a custom format, the version is 3. ', - name: 'aws.vpcflow.version', - type: 'keyword', - }, - 'aws.vpcflow.account_id': { - category: 'aws', - description: 'The AWS account ID for the flow log. ', - name: 'aws.vpcflow.account_id', - type: 'keyword', - }, - 'aws.vpcflow.interface_id': { - category: 'aws', - description: 'The ID of the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.interface_id', - type: 'keyword', - }, - 'aws.vpcflow.action': { - category: 'aws', - description: 'The action that is associated with the traffic, ACCEPT or REJECT. ', - name: 'aws.vpcflow.action', - type: 'keyword', - }, - 'aws.vpcflow.log_status': { - category: 'aws', - description: 'The logging status of the flow log, OK, NODATA or SKIPDATA. ', - name: 'aws.vpcflow.log_status', - type: 'keyword', - }, - 'aws.vpcflow.instance_id': { - category: 'aws', - description: - "The ID of the instance that's associated with network interface for which the traffic is recorded, if the instance is owned by you. ", - name: 'aws.vpcflow.instance_id', - type: 'keyword', - }, - 'aws.vpcflow.pkt_srcaddr': { - category: 'aws', - description: 'The packet-level (original) source IP address of the traffic. ', - name: 'aws.vpcflow.pkt_srcaddr', - type: 'ip', - }, - 'aws.vpcflow.pkt_dstaddr': { - category: 'aws', - description: 'The packet-level (original) destination IP address for the traffic. ', - name: 'aws.vpcflow.pkt_dstaddr', - type: 'ip', - }, - 'aws.vpcflow.vpc_id': { - category: 'aws', - description: - 'The ID of the VPC that contains the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.vpc_id', - type: 'keyword', - }, - 'aws.vpcflow.subnet_id': { - category: 'aws', - description: - 'The ID of the subnet that contains the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.subnet_id', - type: 'keyword', - }, - 'aws.vpcflow.tcp_flags': { - category: 'aws', - description: 'The bitmask value for the following TCP flags: 2=SYN,18=SYN-ACK,1=FIN,4=RST ', - name: 'aws.vpcflow.tcp_flags', - type: 'keyword', - }, - 'aws.vpcflow.tcp_flags_array': { - category: 'aws', - description: "List of TCP flags: 'fin, syn, rst, psh, ack, urg' ", - name: 'aws.vpcflow.tcp_flags_array', - type: 'keyword', - }, - 'aws.vpcflow.type': { - category: 'aws', - description: 'The type of traffic: IPv4, IPv6, or EFA. ', - name: 'aws.vpcflow.type', - type: 'keyword', - }, - 'awsfargate.log': { - category: 'awsfargate', - description: 'Fields for Amazon Fargate container logs. ', - name: 'awsfargate.log', - type: 'group', - }, - 'azure.subscription_id': { - category: 'azure', - description: 'Azure subscription ID ', - name: 'azure.subscription_id', - type: 'keyword', - }, - 'azure.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.correlation_id', - type: 'keyword', - }, - 'azure.tenant_id': { - category: 'azure', - description: 'tenant ID ', - name: 'azure.tenant_id', - type: 'keyword', - }, - 'azure.resource.id': { - category: 'azure', - description: 'Resource ID ', - name: 'azure.resource.id', - type: 'keyword', - }, - 'azure.resource.group': { - category: 'azure', - description: 'Resource group ', - name: 'azure.resource.group', - type: 'keyword', - }, - 'azure.resource.provider': { - category: 'azure', - description: 'Resource type/namespace ', - name: 'azure.resource.provider', - type: 'keyword', - }, - 'azure.resource.namespace': { - category: 'azure', - description: 'Resource type/namespace ', - name: 'azure.resource.namespace', - type: 'keyword', - }, - 'azure.resource.name': { - category: 'azure', - description: 'Name ', - name: 'azure.resource.name', - type: 'keyword', - }, - 'azure.resource.authorization_rule': { - category: 'azure', - description: 'Authorization rule ', - name: 'azure.resource.authorization_rule', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.name': { - category: 'azure', - description: 'Name ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.name', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.givenname': { - category: 'azure', - description: 'Givenname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.givenname', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.surname': { - category: 'azure', - description: 'Surname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.surname', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.fullname': { - category: 'azure', - description: 'Fullname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.fullname', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.schema': { - category: 'azure', - description: 'Schema ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.schema', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims.*': { - category: 'azure', - description: 'Claims ', - name: 'azure.activitylogs.identity.claims.*', - type: 'object', - }, - 'azure.activitylogs.identity.authorization.scope': { - category: 'azure', - description: 'Scope ', - name: 'azure.activitylogs.identity.authorization.scope', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.action': { - category: 'azure', - description: 'Action ', - name: 'azure.activitylogs.identity.authorization.action', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.role_assignment_scope': { - category: 'azure', - description: 'Role assignment scope ', - name: 'azure.activitylogs.identity.authorization.evidence.role_assignment_scope', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.role_definition_id': { - category: 'azure', - description: 'Role definition ID ', - name: 'azure.activitylogs.identity.authorization.evidence.role_definition_id', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.role': { - category: 'azure', - description: 'Role ', - name: 'azure.activitylogs.identity.authorization.evidence.role', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.role_assignment_id': { - category: 'azure', - description: 'Role assignment ID ', - name: 'azure.activitylogs.identity.authorization.evidence.role_assignment_id', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.principal_id': { - category: 'azure', - description: 'Principal ID ', - name: 'azure.activitylogs.identity.authorization.evidence.principal_id', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.principal_type': { - category: 'azure', - description: 'Principal type ', - name: 'azure.activitylogs.identity.authorization.evidence.principal_type', - type: 'keyword', - }, - 'azure.activitylogs.operation_name': { - category: 'azure', - description: 'Operation name ', - name: 'azure.activitylogs.operation_name', - type: 'keyword', - }, - 'azure.activitylogs.result_type': { - category: 'azure', - description: 'Result type ', - name: 'azure.activitylogs.result_type', - type: 'keyword', - }, - 'azure.activitylogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.activitylogs.result_signature', - type: 'keyword', - }, - 'azure.activitylogs.category': { - category: 'azure', - description: 'Category ', - name: 'azure.activitylogs.category', - type: 'keyword', - }, - 'azure.activitylogs.event_category': { - category: 'azure', - description: 'Event Category ', - name: 'azure.activitylogs.event_category', - type: 'keyword', - }, - 'azure.activitylogs.properties': { - category: 'azure', - description: 'Properties ', - name: 'azure.activitylogs.properties', - type: 'flattened', - }, - 'azure.auditlogs.category': { - category: 'azure', - description: 'The category of the operation. Currently, Audit is the only supported value. ', - name: 'azure.auditlogs.category', - type: 'keyword', - }, - 'azure.auditlogs.operation_name': { - category: 'azure', - description: 'The operation name ', - name: 'azure.auditlogs.operation_name', - type: 'keyword', - }, - 'azure.auditlogs.operation_version': { - category: 'azure', - description: 'The operation version ', - name: 'azure.auditlogs.operation_version', - type: 'keyword', - }, - 'azure.auditlogs.identity': { - category: 'azure', - description: 'Identity ', - name: 'azure.auditlogs.identity', - type: 'keyword', - }, - 'azure.auditlogs.tenant_id': { - category: 'azure', - description: 'Tenant ID ', - name: 'azure.auditlogs.tenant_id', - type: 'keyword', - }, - 'azure.auditlogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.auditlogs.result_signature', - type: 'keyword', - }, - 'azure.auditlogs.properties.result': { - category: 'azure', - description: 'Log result ', - name: 'azure.auditlogs.properties.result', - type: 'keyword', - }, - 'azure.auditlogs.properties.activity_display_name': { - category: 'azure', - description: 'Activity display name ', - name: 'azure.auditlogs.properties.activity_display_name', - type: 'keyword', - }, - 'azure.auditlogs.properties.result_reason': { - category: 'azure', - description: 'Reason for the log result ', - name: 'azure.auditlogs.properties.result_reason', - type: 'keyword', - }, - 'azure.auditlogs.properties.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.auditlogs.properties.correlation_id', - type: 'keyword', - }, - 'azure.auditlogs.properties.logged_by_service': { - category: 'azure', - description: 'Logged by service ', - name: 'azure.auditlogs.properties.logged_by_service', - type: 'keyword', - }, - 'azure.auditlogs.properties.operation_type': { - category: 'azure', - description: 'Operation type ', - name: 'azure.auditlogs.properties.operation_type', - type: 'keyword', - }, - 'azure.auditlogs.properties.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.id', - type: 'keyword', - }, - 'azure.auditlogs.properties.activity_datetime': { - category: 'azure', - description: 'Activity timestamp ', - name: 'azure.auditlogs.properties.activity_datetime', - type: 'date', - }, - 'azure.auditlogs.properties.category': { - category: 'azure', - description: 'category ', - name: 'azure.auditlogs.properties.category', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.display_name': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.target_resources.*.display_name', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.target_resources.*.id', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.type': { - category: 'azure', - description: 'Type ', - name: 'azure.auditlogs.properties.target_resources.*.type', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.ip_address': { - category: 'azure', - description: 'ip Address ', - name: 'azure.auditlogs.properties.target_resources.*.ip_address', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.user_principal_name': { - category: 'azure', - description: 'User principal name ', - name: 'azure.auditlogs.properties.target_resources.*.user_principal_name', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value': { - category: 'azure', - description: 'New value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name': { - category: 'azure', - description: 'Display value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value': { - category: 'azure', - description: 'Old value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.app.servicePrincipalName': { - category: 'azure', - description: 'Service principal name ', - name: 'azure.auditlogs.properties.initiated_by.app.servicePrincipalName', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.app.displayName': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.initiated_by.app.displayName', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.app.appId': { - category: 'azure', - description: 'App ID ', - name: 'azure.auditlogs.properties.initiated_by.app.appId', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.app.servicePrincipalId': { - category: 'azure', - description: 'Service principal ID ', - name: 'azure.auditlogs.properties.initiated_by.app.servicePrincipalId', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.user.userPrincipalName': { - category: 'azure', - description: 'User principal name ', - name: 'azure.auditlogs.properties.initiated_by.user.userPrincipalName', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.user.displayName': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.initiated_by.user.displayName', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.user.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.initiated_by.user.id', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.user.ipAddress': { - category: 'azure', - description: 'ip Address ', - name: 'azure.auditlogs.properties.initiated_by.user.ipAddress', - type: 'keyword', - }, - 'azure.platformlogs.operation_name': { - category: 'azure', - description: 'Operation name ', - name: 'azure.platformlogs.operation_name', - type: 'keyword', - }, - 'azure.platformlogs.result_type': { - category: 'azure', - description: 'Result type ', - name: 'azure.platformlogs.result_type', - type: 'keyword', - }, - 'azure.platformlogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.platformlogs.result_signature', - type: 'keyword', - }, - 'azure.platformlogs.category': { - category: 'azure', - description: 'Category ', - name: 'azure.platformlogs.category', - type: 'keyword', - }, - 'azure.platformlogs.event_category': { - category: 'azure', - description: 'Event Category ', - name: 'azure.platformlogs.event_category', - type: 'keyword', - }, - 'azure.platformlogs.status': { - category: 'azure', - description: 'Status ', - name: 'azure.platformlogs.status', - type: 'keyword', - }, - 'azure.platformlogs.ccpNamespace': { - category: 'azure', - description: 'ccpNamespace ', - name: 'azure.platformlogs.ccpNamespace', - type: 'keyword', - }, - 'azure.platformlogs.Cloud': { - category: 'azure', - description: 'Cloud ', - name: 'azure.platformlogs.Cloud', - type: 'keyword', - }, - 'azure.platformlogs.Environment': { - category: 'azure', - description: 'Environment ', - name: 'azure.platformlogs.Environment', - type: 'keyword', - }, - 'azure.platformlogs.EventTimeString': { - category: 'azure', - description: 'EventTimeString ', - name: 'azure.platformlogs.EventTimeString', - type: 'keyword', - }, - 'azure.platformlogs.Caller': { - category: 'azure', - description: 'Caller ', - name: 'azure.platformlogs.Caller', - type: 'keyword', - }, - 'azure.platformlogs.ScaleUnit': { - category: 'azure', - description: 'ScaleUnit ', - name: 'azure.platformlogs.ScaleUnit', - type: 'keyword', - }, - 'azure.platformlogs.ActivityId': { - category: 'azure', - description: 'ActivityId ', - name: 'azure.platformlogs.ActivityId', - type: 'keyword', - }, - 'azure.platformlogs.properties': { - category: 'azure', - description: 'Event inner properties ', - name: 'azure.platformlogs.properties', - type: 'flattened', - }, - 'azure.signinlogs.operation_name': { - category: 'azure', - description: 'The operation name ', - name: 'azure.signinlogs.operation_name', - type: 'keyword', - }, - 'azure.signinlogs.operation_version': { - category: 'azure', - description: 'The operation version ', - name: 'azure.signinlogs.operation_version', - type: 'keyword', - }, - 'azure.signinlogs.tenant_id': { - category: 'azure', - description: 'Tenant ID ', - name: 'azure.signinlogs.tenant_id', - type: 'keyword', - }, - 'azure.signinlogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.signinlogs.result_signature', - type: 'keyword', - }, - 'azure.signinlogs.result_description': { - category: 'azure', - description: 'Result description ', - name: 'azure.signinlogs.result_description', - type: 'keyword', - }, - 'azure.signinlogs.result_type': { - category: 'azure', - description: 'Result type ', - name: 'azure.signinlogs.result_type', - type: 'keyword', - }, - 'azure.signinlogs.identity': { - category: 'azure', - description: 'Identity ', - name: 'azure.signinlogs.identity', - type: 'keyword', - }, - 'azure.signinlogs.category': { - category: 'azure', - description: 'Category ', - name: 'azure.signinlogs.category', - type: 'keyword', - }, - 'azure.signinlogs.properties.id': { - category: 'azure', - description: 'Unique ID representing the sign-in activity. ', - name: 'azure.signinlogs.properties.id', - type: 'keyword', - }, - 'azure.signinlogs.properties.created_at': { - category: 'azure', - description: 'Date and time (UTC) the sign-in was initiated. ', - name: 'azure.signinlogs.properties.created_at', - type: 'date', - }, - 'azure.signinlogs.properties.user_display_name': { - category: 'azure', - description: 'User display name ', - name: 'azure.signinlogs.properties.user_display_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.signinlogs.properties.correlation_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.user_principal_name': { - category: 'azure', - description: 'User principal name ', - name: 'azure.signinlogs.properties.user_principal_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.user_id': { - category: 'azure', - description: 'User ID ', - name: 'azure.signinlogs.properties.user_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.app_id': { - category: 'azure', - description: 'App ID ', - name: 'azure.signinlogs.properties.app_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.app_display_name': { - category: 'azure', - description: 'App display name ', - name: 'azure.signinlogs.properties.app_display_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.autonomous_system_number': { - category: 'azure', - description: 'Autonomous system number.', - name: 'azure.signinlogs.properties.autonomous_system_number', - type: 'long', - }, - 'azure.signinlogs.properties.client_app_used': { - category: 'azure', - description: 'Client app used ', - name: 'azure.signinlogs.properties.client_app_used', - type: 'keyword', - }, - 'azure.signinlogs.properties.conditional_access_status': { - category: 'azure', - description: 'Conditional access status ', - name: 'azure.signinlogs.properties.conditional_access_status', - type: 'keyword', - }, - 'azure.signinlogs.properties.original_request_id': { - category: 'azure', - description: 'Original request ID ', - name: 'azure.signinlogs.properties.original_request_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.is_interactive': { - category: 'azure', - description: 'Is interactive ', - name: 'azure.signinlogs.properties.is_interactive', - type: 'boolean', - }, - 'azure.signinlogs.properties.token_issuer_name': { - category: 'azure', - description: 'Token issuer name ', - name: 'azure.signinlogs.properties.token_issuer_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.token_issuer_type': { - category: 'azure', - description: 'Token issuer type ', - name: 'azure.signinlogs.properties.token_issuer_type', - type: 'keyword', - }, - 'azure.signinlogs.properties.processing_time_ms': { - category: 'azure', - description: 'Processing time in milliseconds ', - name: 'azure.signinlogs.properties.processing_time_ms', - type: 'float', - }, - 'azure.signinlogs.properties.risk_detail': { - category: 'azure', - description: 'Risk detail ', - name: 'azure.signinlogs.properties.risk_detail', - type: 'keyword', - }, - 'azure.signinlogs.properties.risk_level_aggregated': { - category: 'azure', - description: 'Risk level aggregated ', - name: 'azure.signinlogs.properties.risk_level_aggregated', - type: 'keyword', - }, - 'azure.signinlogs.properties.risk_level_during_signin': { - category: 'azure', - description: 'Risk level during signIn ', - name: 'azure.signinlogs.properties.risk_level_during_signin', - type: 'keyword', - }, - 'azure.signinlogs.properties.risk_state': { - category: 'azure', - description: 'Risk state ', - name: 'azure.signinlogs.properties.risk_state', - type: 'keyword', - }, - 'azure.signinlogs.properties.resource_display_name': { - category: 'azure', - description: 'Resource display name ', - name: 'azure.signinlogs.properties.resource_display_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.status.error_code': { - category: 'azure', - description: 'Error code ', - name: 'azure.signinlogs.properties.status.error_code', - type: 'long', - }, - 'azure.signinlogs.properties.device_detail.device_id': { - category: 'azure', - description: 'Device ID ', - name: 'azure.signinlogs.properties.device_detail.device_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.operating_system': { - category: 'azure', - description: 'Operating system ', - name: 'azure.signinlogs.properties.device_detail.operating_system', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.browser': { - category: 'azure', - description: 'Browser ', - name: 'azure.signinlogs.properties.device_detail.browser', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.display_name': { - category: 'azure', - description: 'Display name ', - name: 'azure.signinlogs.properties.device_detail.display_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.trust_type': { - category: 'azure', - description: 'Trust type ', - name: 'azure.signinlogs.properties.device_detail.trust_type', - type: 'keyword', - }, - 'azure.signinlogs.properties.applied_conditional_access_policies': { - category: 'azure', - description: - 'A list of conditional access policies that are triggered by the corresponding sign-in activity. ', - name: 'azure.signinlogs.properties.applied_conditional_access_policies', - type: 'array', - }, - 'azure.signinlogs.properties.authentication_details': { - category: 'azure', - description: - 'The result of the authentication attempt and additional details on the authentication method. ', - name: 'azure.signinlogs.properties.authentication_details', - type: 'array', - }, - 'azure.signinlogs.properties.authentication_processing_details': { - category: 'azure', - description: - 'Additional authentication processing details, such as the agent name in case of PTA/PHS or Server/farm name in case of federated authentication. ', - name: 'azure.signinlogs.properties.authentication_processing_details', - type: 'flattened', - }, - 'azure.signinlogs.properties.authentication_requirement': { - category: 'azure', - description: - 'This holds the highest level of authentication needed through all the sign-in steps, for sign-in to succeed. ', - name: 'azure.signinlogs.properties.authentication_requirement', - type: 'keyword', - }, - 'azure.signinlogs.properties.authentication_requirement_policies': { - category: 'azure', - description: - 'Set of CA policies that apply to this sign-in, each as CA: policy name, and/or MFA: Per-user ', - name: 'azure.signinlogs.properties.authentication_requirement_policies', - type: 'keyword', - }, - 'azure.signinlogs.properties.flagged_for_review': { - category: 'azure', - name: 'azure.signinlogs.properties.flagged_for_review', - type: 'boolean', - }, - 'azure.signinlogs.properties.home_tenant_id': { - category: 'azure', - name: 'azure.signinlogs.properties.home_tenant_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.network_location_details': { - category: 'azure', - description: 'The network location details including the type of network used and its names.', - name: 'azure.signinlogs.properties.network_location_details', - type: 'array', - }, - 'azure.signinlogs.properties.resource_id': { - category: 'azure', - description: 'The identifier of the resource that the user signed in to.', - name: 'azure.signinlogs.properties.resource_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.resource_tenant_id': { - category: 'azure', - name: 'azure.signinlogs.properties.resource_tenant_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.risk_event_types': { - category: 'azure', - description: - 'The list of risk event types associated with the sign-in. Possible values: unlikelyTravel, anonymizedIPAddress, maliciousIPAddress, unfamiliarFeatures, malwareInfectedIPAddress, suspiciousIPAddress, leakedCredentials, investigationsThreatIntelligence, generic, or unknownFutureValue. ', - name: 'azure.signinlogs.properties.risk_event_types', - type: 'keyword', - }, - 'azure.signinlogs.properties.risk_event_types_v2': { - category: 'azure', - description: - 'The list of risk event types associated with the sign-in. Possible values: unlikelyTravel, anonymizedIPAddress, maliciousIPAddress, unfamiliarFeatures, malwareInfectedIPAddress, suspiciousIPAddress, leakedCredentials, investigationsThreatIntelligence, generic, or unknownFutureValue. ', - name: 'azure.signinlogs.properties.risk_event_types_v2', - type: 'keyword', - }, - 'azure.signinlogs.properties.service_principal_name': { - category: 'azure', - description: - 'The application name used for sign-in. This field is populated when you are signing in using an application. ', - name: 'azure.signinlogs.properties.service_principal_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.user_type': { - category: 'azure', - name: 'azure.signinlogs.properties.user_type', - type: 'keyword', - }, - 'azure.signinlogs.properties.service_principal_id': { - category: 'azure', - description: - 'The application identifier used for sign-in. This field is populated when you are signing in using an application. ', - name: 'azure.signinlogs.properties.service_principal_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.cross_tenant_access_type': { - category: 'azure', - name: 'azure.signinlogs.properties.cross_tenant_access_type', - type: 'keyword', - }, - 'azure.signinlogs.properties.is_tenant_restricted': { - category: 'azure', - name: 'azure.signinlogs.properties.is_tenant_restricted', - type: 'boolean', - }, - 'azure.signinlogs.properties.sso_extension_version': { - category: 'azure', - name: 'azure.signinlogs.properties.sso_extension_version', - type: 'keyword', - }, - 'network.interface.name': { - category: 'network', - description: 'Name of the network interface where the traffic has been observed. ', - name: 'network.interface.name', - type: 'keyword', - }, - 'rsa.internal.msg': { - category: 'rsa', - description: 'This key is used to capture the raw message that comes into the Log Decoder', - name: 'rsa.internal.msg', - type: 'keyword', - }, - 'rsa.internal.messageid': { - category: 'rsa', - name: 'rsa.internal.messageid', - type: 'keyword', - }, - 'rsa.internal.event_desc': { - category: 'rsa', - name: 'rsa.internal.event_desc', - type: 'keyword', - }, - 'rsa.internal.message': { - category: 'rsa', - description: 'This key captures the contents of instant messages', - name: 'rsa.internal.message', - type: 'keyword', - }, - 'rsa.internal.time': { - category: 'rsa', - description: - 'This is the time at which a session hits a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness.', - name: 'rsa.internal.time', - type: 'date', - }, - 'rsa.internal.level': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.level', - type: 'long', - }, - 'rsa.internal.msg_id': { - category: 'rsa', - description: - 'This is the Message ID1 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.msg_id', - type: 'keyword', - }, - 'rsa.internal.msg_vid': { - category: 'rsa', - description: - 'This is the Message ID2 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.msg_vid', - type: 'keyword', - }, - 'rsa.internal.data': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.data', - type: 'keyword', - }, - 'rsa.internal.obj_server': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_server', - type: 'keyword', - }, - 'rsa.internal.obj_val': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_val', - type: 'keyword', - }, - 'rsa.internal.resource': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.resource', - type: 'keyword', - }, - 'rsa.internal.obj_id': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_id', - type: 'keyword', - }, - 'rsa.internal.statement': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.statement', - type: 'keyword', - }, - 'rsa.internal.audit_class': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.audit_class', - type: 'keyword', - }, - 'rsa.internal.entry': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.entry', - type: 'keyword', - }, - 'rsa.internal.hcode': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.hcode', - type: 'keyword', - }, - 'rsa.internal.inode': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.inode', - type: 'long', - }, - 'rsa.internal.resource_class': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.resource_class', - type: 'keyword', - }, - 'rsa.internal.dead': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.dead', - type: 'long', - }, - 'rsa.internal.feed_desc': { - category: 'rsa', - description: - 'This is used to capture the description of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_desc', - type: 'keyword', - }, - 'rsa.internal.feed_name': { - category: 'rsa', - description: - 'This is used to capture the name of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_name', - type: 'keyword', - }, - 'rsa.internal.cid': { - category: 'rsa', - description: - 'This is the unique identifier used to identify a NetWitness Concentrator. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.cid', - type: 'keyword', - }, - 'rsa.internal.device_class': { - category: 'rsa', - description: - 'This is the Classification of the Log Event Source under a predefined fixed set of Event Source Classifications. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_class', - type: 'keyword', - }, - 'rsa.internal.device_group': { - category: 'rsa', - description: - 'This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_group', - type: 'keyword', - }, - 'rsa.internal.device_host': { - category: 'rsa', - description: - 'This is the Hostname of the log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_host', - type: 'keyword', - }, - 'rsa.internal.device_ip': { - category: 'rsa', - description: - 'This is the IPv4 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_ip', - type: 'ip', - }, - 'rsa.internal.device_ipv6': { - category: 'rsa', - description: - 'This is the IPv6 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_ipv6', - type: 'ip', - }, - 'rsa.internal.device_type': { - category: 'rsa', - description: - 'This is the name of the log parser which parsed a given session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_type', - type: 'keyword', - }, - 'rsa.internal.device_type_id': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.device_type_id', - type: 'long', - }, - 'rsa.internal.did': { - category: 'rsa', - description: - 'This is the unique identifier used to identify a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.did', - type: 'keyword', - }, - 'rsa.internal.entropy_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration', - name: 'rsa.internal.entropy_req', - type: 'long', - }, - 'rsa.internal.entropy_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration', - name: 'rsa.internal.entropy_res', - type: 'long', - }, - 'rsa.internal.event_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.event_name', - type: 'keyword', - }, - 'rsa.internal.feed_category': { - category: 'rsa', - description: - 'This is used to capture the category of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_category', - type: 'keyword', - }, - 'rsa.internal.forward_ip': { - category: 'rsa', - description: - 'This key should be used to capture the IPV4 address of a relay system which forwarded the events from the original system to NetWitness.', - name: 'rsa.internal.forward_ip', - type: 'ip', - }, - 'rsa.internal.forward_ipv6': { - category: 'rsa', - description: - 'This key is used to capture the IPV6 address of a relay system which forwarded the events from the original system to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.forward_ipv6', - type: 'ip', - }, - 'rsa.internal.header_id': { - category: 'rsa', - description: - 'This is the Header ID value that identifies the exact log parser header definition that parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.header_id', - type: 'keyword', - }, - 'rsa.internal.lc_cid': { - category: 'rsa', - description: - 'This is a unique Identifier of a Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.lc_cid', - type: 'keyword', - }, - 'rsa.internal.lc_ctime': { - category: 'rsa', - description: - 'This is the time at which a log is collected in a NetWitness Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.lc_ctime', - type: 'date', - }, - 'rsa.internal.mcb_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte request is simply which byte for each side (0 thru 255) was seen the most', - name: 'rsa.internal.mcb_req', - type: 'long', - }, - 'rsa.internal.mcb_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte response is simply which byte for each side (0 thru 255) was seen the most', - name: 'rsa.internal.mcb_res', - type: 'long', - }, - 'rsa.internal.mcbc_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams', - name: 'rsa.internal.mcbc_req', - type: 'long', - }, - 'rsa.internal.mcbc_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams', - name: 'rsa.internal.mcbc_res', - type: 'long', - }, - 'rsa.internal.medium': { - category: 'rsa', - description: - 'This key is used to identify if it’s a log/packet session or Layer 2 Encapsulation Type. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness. 32 = log, 33 = correlation session, < 32 is packet session', - name: 'rsa.internal.medium', - type: 'long', - }, - 'rsa.internal.node_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.node_name', - type: 'keyword', - }, - 'rsa.internal.nwe_callback_id': { - category: 'rsa', - description: 'This key denotes that event is endpoint related', - name: 'rsa.internal.nwe_callback_id', - type: 'keyword', - }, - 'rsa.internal.parse_error': { - category: 'rsa', - description: - 'This is a special key that stores any Meta key validation error found while parsing a log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.parse_error', - type: 'keyword', - }, - 'rsa.internal.payload_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep', - name: 'rsa.internal.payload_req', - type: 'long', - }, - 'rsa.internal.payload_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep', - name: 'rsa.internal.payload_res', - type: 'long', - }, - 'rsa.internal.process_vid_dst': { - category: 'rsa', - description: - 'Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the target process.', - name: 'rsa.internal.process_vid_dst', - type: 'keyword', - }, - 'rsa.internal.process_vid_src': { - category: 'rsa', - description: - 'Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the source process.', - name: 'rsa.internal.process_vid_src', - type: 'keyword', - }, - 'rsa.internal.rid': { - category: 'rsa', - description: - 'This is a special ID of the Remote Session created by NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.rid', - type: 'long', - }, - 'rsa.internal.session_split': { - category: 'rsa', - description: - 'This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.session_split', - type: 'keyword', - }, - 'rsa.internal.site': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.site', - type: 'keyword', - }, - 'rsa.internal.size': { - category: 'rsa', - description: - 'This is the size of the session as seen by the NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.size', - type: 'long', - }, - 'rsa.internal.sourcefile': { - category: 'rsa', - description: - 'This is the name of the log file or PCAPs that can be imported into NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.sourcefile', - type: 'keyword', - }, - 'rsa.internal.ubc_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once', - name: 'rsa.internal.ubc_req', - type: 'long', - }, - 'rsa.internal.ubc_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once', - name: 'rsa.internal.ubc_res', - type: 'long', - }, - 'rsa.internal.word': { - category: 'rsa', - description: - 'This is used by the Word Parsing technology to capture the first 5 character of every word in an unparsed log', - name: 'rsa.internal.word', - type: 'keyword', - }, - 'rsa.time.event_time': { - category: 'rsa', - description: - 'This key is used to capture the time mentioned in a raw session that represents the actual time an event occured in a standard normalized form', - name: 'rsa.time.event_time', - type: 'date', - }, - 'rsa.time.duration_time': { - category: 'rsa', - description: 'This key is used to capture the normalized duration/lifetime in seconds.', - name: 'rsa.time.duration_time', - type: 'double', - }, - 'rsa.time.event_time_str': { - category: 'rsa', - description: - 'This key is used to capture the incomplete time mentioned in a session as a string', - name: 'rsa.time.event_time_str', - type: 'keyword', - }, - 'rsa.time.starttime': { - category: 'rsa', - description: - 'This key is used to capture the Start time mentioned in a session in a standard form', - name: 'rsa.time.starttime', - type: 'date', - }, - 'rsa.time.month': { - category: 'rsa', - name: 'rsa.time.month', - type: 'keyword', - }, - 'rsa.time.day': { - category: 'rsa', - name: 'rsa.time.day', - type: 'keyword', - }, - 'rsa.time.endtime': { - category: 'rsa', - description: - 'This key is used to capture the End time mentioned in a session in a standard form', - name: 'rsa.time.endtime', - type: 'date', - }, - 'rsa.time.timezone': { - category: 'rsa', - description: 'This key is used to capture the timezone of the Event Time', - name: 'rsa.time.timezone', - type: 'keyword', - }, - 'rsa.time.duration_str': { - category: 'rsa', - description: 'A text string version of the duration', - name: 'rsa.time.duration_str', - type: 'keyword', - }, - 'rsa.time.date': { - category: 'rsa', - name: 'rsa.time.date', - type: 'keyword', - }, - 'rsa.time.year': { - category: 'rsa', - name: 'rsa.time.year', - type: 'keyword', - }, - 'rsa.time.recorded_time': { - category: 'rsa', - description: - "The event time as recorded by the system the event is collected from. The usage scenario is a multi-tier application where the management layer of the system records it's own timestamp at the time of collection from its child nodes. Must be in timestamp format.", - name: 'rsa.time.recorded_time', - type: 'date', - }, - 'rsa.time.datetime': { - category: 'rsa', - name: 'rsa.time.datetime', - type: 'keyword', - }, - 'rsa.time.effective_time': { - category: 'rsa', - description: - 'This key is the effective time referenced by an individual event in a Standard Timestamp format', - name: 'rsa.time.effective_time', - type: 'date', - }, - 'rsa.time.expire_time': { - category: 'rsa', - description: 'This key is the timestamp that explicitly refers to an expiration.', - name: 'rsa.time.expire_time', - type: 'date', - }, - 'rsa.time.process_time': { - category: 'rsa', - description: 'Deprecated, use duration.time', - name: 'rsa.time.process_time', - type: 'keyword', - }, - 'rsa.time.hour': { - category: 'rsa', - name: 'rsa.time.hour', - type: 'keyword', - }, - 'rsa.time.min': { - category: 'rsa', - name: 'rsa.time.min', - type: 'keyword', - }, - 'rsa.time.timestamp': { - category: 'rsa', - name: 'rsa.time.timestamp', - type: 'keyword', - }, - 'rsa.time.event_queue_time': { - category: 'rsa', - description: 'This key is the Time that the event was queued.', - name: 'rsa.time.event_queue_time', - type: 'date', - }, - 'rsa.time.p_time1': { - category: 'rsa', - name: 'rsa.time.p_time1', - type: 'keyword', - }, - 'rsa.time.tzone': { - category: 'rsa', - name: 'rsa.time.tzone', - type: 'keyword', - }, - 'rsa.time.eventtime': { - category: 'rsa', - name: 'rsa.time.eventtime', - type: 'keyword', - }, - 'rsa.time.gmtdate': { - category: 'rsa', - name: 'rsa.time.gmtdate', - type: 'keyword', - }, - 'rsa.time.gmttime': { - category: 'rsa', - name: 'rsa.time.gmttime', - type: 'keyword', - }, - 'rsa.time.p_date': { - category: 'rsa', - name: 'rsa.time.p_date', - type: 'keyword', - }, - 'rsa.time.p_month': { - category: 'rsa', - name: 'rsa.time.p_month', - type: 'keyword', - }, - 'rsa.time.p_time': { - category: 'rsa', - name: 'rsa.time.p_time', - type: 'keyword', - }, - 'rsa.time.p_time2': { - category: 'rsa', - name: 'rsa.time.p_time2', - type: 'keyword', - }, - 'rsa.time.p_year': { - category: 'rsa', - name: 'rsa.time.p_year', - type: 'keyword', - }, - 'rsa.time.expire_time_str': { - category: 'rsa', - description: - 'This key is used to capture incomplete timestamp that explicitly refers to an expiration.', - name: 'rsa.time.expire_time_str', - type: 'keyword', - }, - 'rsa.time.stamp': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.time.stamp', - type: 'date', - }, - 'rsa.misc.action': { - category: 'rsa', - name: 'rsa.misc.action', - type: 'keyword', - }, - 'rsa.misc.result': { - category: 'rsa', - description: - 'This key is used to capture the outcome/result string value of an action in a session.', - name: 'rsa.misc.result', - type: 'keyword', - }, - 'rsa.misc.severity': { - category: 'rsa', - description: 'This key is used to capture the severity given the session', - name: 'rsa.misc.severity', - type: 'keyword', - }, - 'rsa.misc.event_type': { - category: 'rsa', - description: 'This key captures the event category type as specified by the event source.', - name: 'rsa.misc.event_type', - type: 'keyword', - }, - 'rsa.misc.reference_id': { - category: 'rsa', - description: 'This key is used to capture an event id from the session directly', - name: 'rsa.misc.reference_id', - type: 'keyword', - }, - 'rsa.misc.version': { - category: 'rsa', - description: - 'This key captures Version of the application or OS which is generating the event.', - name: 'rsa.misc.version', - type: 'keyword', - }, - 'rsa.misc.disposition': { - category: 'rsa', - description: 'This key captures the The end state of an action.', - name: 'rsa.misc.disposition', - type: 'keyword', - }, - 'rsa.misc.result_code': { - category: 'rsa', - description: - 'This key is used to capture the outcome/result numeric value of an action in a session', - name: 'rsa.misc.result_code', - type: 'keyword', - }, - 'rsa.misc.category': { - category: 'rsa', - description: - 'This key is used to capture the category of an event given by the vendor in the session', - name: 'rsa.misc.category', - type: 'keyword', - }, - 'rsa.misc.obj_name': { - category: 'rsa', - description: 'This is used to capture name of object', - name: 'rsa.misc.obj_name', - type: 'keyword', - }, - 'rsa.misc.obj_type': { - category: 'rsa', - description: 'This is used to capture type of object', - name: 'rsa.misc.obj_type', - type: 'keyword', - }, - 'rsa.misc.event_source': { - category: 'rsa', - description: 'This key captures Source of the event that’s not a hostname', - name: 'rsa.misc.event_source', - type: 'keyword', - }, - 'rsa.misc.log_session_id': { - category: 'rsa', - description: 'This key is used to capture a sessionid from the session directly', - name: 'rsa.misc.log_session_id', - type: 'keyword', - }, - 'rsa.misc.group': { - category: 'rsa', - description: 'This key captures the Group Name value', - name: 'rsa.misc.group', - type: 'keyword', - }, - 'rsa.misc.policy_name': { - category: 'rsa', - description: 'This key is used to capture the Policy Name only.', - name: 'rsa.misc.policy_name', - type: 'keyword', - }, - 'rsa.misc.rule_name': { - category: 'rsa', - description: 'This key captures the Rule Name', - name: 'rsa.misc.rule_name', - type: 'keyword', - }, - 'rsa.misc.context': { - category: 'rsa', - description: 'This key captures Information which adds additional context to the event.', - name: 'rsa.misc.context', - type: 'keyword', - }, - 'rsa.misc.change_new': { - category: 'rsa', - description: - 'This key is used to capture the new values of the attribute that’s changing in a session', - name: 'rsa.misc.change_new', - type: 'keyword', - }, - 'rsa.misc.space': { - category: 'rsa', - name: 'rsa.misc.space', - type: 'keyword', - }, - 'rsa.misc.client': { - category: 'rsa', - description: - 'This key is used to capture only the name of the client application requesting resources of the server. See the user.agent meta key for capture of the specific user agent identifier or browser identification string.', - name: 'rsa.misc.client', - type: 'keyword', - }, - 'rsa.misc.msgIdPart1': { - category: 'rsa', - name: 'rsa.misc.msgIdPart1', - type: 'keyword', - }, - 'rsa.misc.msgIdPart2': { - category: 'rsa', - name: 'rsa.misc.msgIdPart2', - type: 'keyword', - }, - 'rsa.misc.change_old': { - category: 'rsa', - description: - 'This key is used to capture the old value of the attribute that’s changing in a session', - name: 'rsa.misc.change_old', - type: 'keyword', - }, - 'rsa.misc.operation_id': { - category: 'rsa', - description: - 'An alert number or operation number. The values should be unique and non-repeating.', - name: 'rsa.misc.operation_id', - type: 'keyword', - }, - 'rsa.misc.event_state': { - category: 'rsa', - description: - 'This key captures the current state of the object/item referenced within the event. Describing an on-going event.', - name: 'rsa.misc.event_state', - type: 'keyword', - }, - 'rsa.misc.group_object': { - category: 'rsa', - description: 'This key captures a collection/grouping of entities. Specific usage', - name: 'rsa.misc.group_object', - type: 'keyword', - }, - 'rsa.misc.node': { - category: 'rsa', - description: - 'Common use case is the node name within a cluster. The cluster name is reflected by the host name.', - name: 'rsa.misc.node', - type: 'keyword', - }, - 'rsa.misc.rule': { - category: 'rsa', - description: 'This key captures the Rule number', - name: 'rsa.misc.rule', - type: 'keyword', - }, - 'rsa.misc.device_name': { - category: 'rsa', - description: - 'This is used to capture name of the Device associated with the node Like: a physical disk, printer, etc', - name: 'rsa.misc.device_name', - type: 'keyword', - }, - 'rsa.misc.param': { - category: 'rsa', - description: 'This key is the parameters passed as part of a command or application, etc.', - name: 'rsa.misc.param', - type: 'keyword', - }, - 'rsa.misc.change_attrib': { - category: 'rsa', - description: - 'This key is used to capture the name of the attribute that’s changing in a session', - name: 'rsa.misc.change_attrib', - type: 'keyword', - }, - 'rsa.misc.event_computer': { - category: 'rsa', - description: - 'This key is a windows only concept, where this key is used to capture fully qualified domain name in a windows log.', - name: 'rsa.misc.event_computer', - type: 'keyword', - }, - 'rsa.misc.reference_id1': { - category: 'rsa', - description: 'This key is for Linked ID to be used as an addition to "reference.id"', - name: 'rsa.misc.reference_id1', - type: 'keyword', - }, - 'rsa.misc.event_log': { - category: 'rsa', - description: 'This key captures the Name of the event log', - name: 'rsa.misc.event_log', - type: 'keyword', - }, - 'rsa.misc.OS': { - category: 'rsa', - description: 'This key captures the Name of the Operating System', - name: 'rsa.misc.OS', - type: 'keyword', - }, - 'rsa.misc.terminal': { - category: 'rsa', - description: 'This key captures the Terminal Names only', - name: 'rsa.misc.terminal', - type: 'keyword', - }, - 'rsa.misc.msgIdPart3': { - category: 'rsa', - name: 'rsa.misc.msgIdPart3', - type: 'keyword', - }, - 'rsa.misc.filter': { - category: 'rsa', - description: 'This key captures Filter used to reduce result set', - name: 'rsa.misc.filter', - type: 'keyword', - }, - 'rsa.misc.serial_number': { - category: 'rsa', - description: 'This key is the Serial number associated with a physical asset.', - name: 'rsa.misc.serial_number', - type: 'keyword', - }, - 'rsa.misc.checksum': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the entity such as a file or process. Checksum should be used over checksum.src or checksum.dst when it is unclear whether the entity is a source or target of an action.', - name: 'rsa.misc.checksum', - type: 'keyword', - }, - 'rsa.misc.event_user': { - category: 'rsa', - description: - 'This key is a windows only concept, where this key is used to capture combination of domain name and username in a windows log.', - name: 'rsa.misc.event_user', - type: 'keyword', - }, - 'rsa.misc.virusname': { - category: 'rsa', - description: 'This key captures the name of the virus', - name: 'rsa.misc.virusname', - type: 'keyword', - }, - 'rsa.misc.content_type': { - category: 'rsa', - description: 'This key is used to capture Content Type only.', - name: 'rsa.misc.content_type', - type: 'keyword', - }, - 'rsa.misc.group_id': { - category: 'rsa', - description: 'This key captures Group ID Number (related to the group name)', - name: 'rsa.misc.group_id', - type: 'keyword', - }, - 'rsa.misc.policy_id': { - category: 'rsa', - description: - 'This key is used to capture the Policy ID only, this should be a numeric value, use policy.name otherwise', - name: 'rsa.misc.policy_id', - type: 'keyword', - }, - 'rsa.misc.vsys': { - category: 'rsa', - description: 'This key captures Virtual System Name', - name: 'rsa.misc.vsys', - type: 'keyword', - }, - 'rsa.misc.connection_id': { - category: 'rsa', - description: 'This key captures the Connection ID', - name: 'rsa.misc.connection_id', - type: 'keyword', - }, - 'rsa.misc.reference_id2': { - category: 'rsa', - description: - 'This key is for the 2nd Linked ID. Can be either linked to "reference.id" or "reference.id1" value but should not be used unless the other two variables are in play.', - name: 'rsa.misc.reference_id2', - type: 'keyword', - }, - 'rsa.misc.sensor': { - category: 'rsa', - description: 'This key captures Name of the sensor. Typically used in IDS/IPS based devices', - name: 'rsa.misc.sensor', - type: 'keyword', - }, - 'rsa.misc.sig_id': { - category: 'rsa', - description: 'This key captures IDS/IPS Int Signature ID', - name: 'rsa.misc.sig_id', - type: 'long', - }, - 'rsa.misc.port_name': { - category: 'rsa', - description: - 'This key is used for Physical or logical port connection but does NOT include a network port. (Example: Printer port name).', - name: 'rsa.misc.port_name', - type: 'keyword', - }, - 'rsa.misc.rule_group': { - category: 'rsa', - description: 'This key captures the Rule group name', - name: 'rsa.misc.rule_group', - type: 'keyword', - }, - 'rsa.misc.risk_num': { - category: 'rsa', - description: 'This key captures a Numeric Risk value', - name: 'rsa.misc.risk_num', - type: 'double', - }, - 'rsa.misc.trigger_val': { - category: 'rsa', - description: 'This key captures the Value of the trigger or threshold condition.', - name: 'rsa.misc.trigger_val', - type: 'keyword', - }, - 'rsa.misc.log_session_id1': { - category: 'rsa', - description: - 'This key is used to capture a Linked (Related) Session ID from the session directly', - name: 'rsa.misc.log_session_id1', - type: 'keyword', - }, - 'rsa.misc.comp_version': { - category: 'rsa', - description: 'This key captures the Version level of a sub-component of a product.', - name: 'rsa.misc.comp_version', - type: 'keyword', - }, - 'rsa.misc.content_version': { - category: 'rsa', - description: 'This key captures Version level of a signature or database content.', - name: 'rsa.misc.content_version', - type: 'keyword', - }, - 'rsa.misc.hardware_id': { - category: 'rsa', - description: - 'This key is used to capture unique identifier for a device or system (NOT a Mac address)', - name: 'rsa.misc.hardware_id', - type: 'keyword', - }, - 'rsa.misc.risk': { - category: 'rsa', - description: 'This key captures the non-numeric risk value', - name: 'rsa.misc.risk', - type: 'keyword', - }, - 'rsa.misc.event_id': { - category: 'rsa', - name: 'rsa.misc.event_id', - type: 'keyword', - }, - 'rsa.misc.reason': { - category: 'rsa', - name: 'rsa.misc.reason', - type: 'keyword', - }, - 'rsa.misc.status': { - category: 'rsa', - name: 'rsa.misc.status', - type: 'keyword', - }, - 'rsa.misc.mail_id': { - category: 'rsa', - description: 'This key is used to capture the mailbox id/name', - name: 'rsa.misc.mail_id', - type: 'keyword', - }, - 'rsa.misc.rule_uid': { - category: 'rsa', - description: 'This key is the Unique Identifier for a rule.', - name: 'rsa.misc.rule_uid', - type: 'keyword', - }, - 'rsa.misc.trigger_desc': { - category: 'rsa', - description: 'This key captures the Description of the trigger or threshold condition.', - name: 'rsa.misc.trigger_desc', - type: 'keyword', - }, - 'rsa.misc.inout': { - category: 'rsa', - name: 'rsa.misc.inout', - type: 'keyword', - }, - 'rsa.misc.p_msgid': { - category: 'rsa', - name: 'rsa.misc.p_msgid', - type: 'keyword', - }, - 'rsa.misc.data_type': { - category: 'rsa', - name: 'rsa.misc.data_type', - type: 'keyword', - }, - 'rsa.misc.msgIdPart4': { - category: 'rsa', - name: 'rsa.misc.msgIdPart4', - type: 'keyword', - }, - 'rsa.misc.error': { - category: 'rsa', - description: 'This key captures All non successful Error codes or responses', - name: 'rsa.misc.error', - type: 'keyword', - }, - 'rsa.misc.index': { - category: 'rsa', - name: 'rsa.misc.index', - type: 'keyword', - }, - 'rsa.misc.listnum': { - category: 'rsa', - description: - 'This key is used to capture listname or listnumber, primarily for collecting access-list', - name: 'rsa.misc.listnum', - type: 'keyword', - }, - 'rsa.misc.ntype': { - category: 'rsa', - name: 'rsa.misc.ntype', - type: 'keyword', - }, - 'rsa.misc.observed_val': { - category: 'rsa', - description: - 'This key captures the Value observed (from the perspective of the device generating the log).', - name: 'rsa.misc.observed_val', - type: 'keyword', - }, - 'rsa.misc.policy_value': { - category: 'rsa', - description: - 'This key captures the contents of the policy. This contains details about the policy', - name: 'rsa.misc.policy_value', - type: 'keyword', - }, - 'rsa.misc.pool_name': { - category: 'rsa', - description: 'This key captures the name of a resource pool', - name: 'rsa.misc.pool_name', - type: 'keyword', - }, - 'rsa.misc.rule_template': { - category: 'rsa', - description: - 'A default set of parameters which are overlayed onto a rule (or rulename) which efffectively constitutes a template', - name: 'rsa.misc.rule_template', - type: 'keyword', - }, - 'rsa.misc.count': { - category: 'rsa', - name: 'rsa.misc.count', - type: 'keyword', - }, - 'rsa.misc.number': { - category: 'rsa', - name: 'rsa.misc.number', - type: 'keyword', - }, - 'rsa.misc.sigcat': { - category: 'rsa', - name: 'rsa.misc.sigcat', - type: 'keyword', - }, - 'rsa.misc.type': { - category: 'rsa', - name: 'rsa.misc.type', - type: 'keyword', - }, - 'rsa.misc.comments': { - category: 'rsa', - description: 'Comment information provided in the log message', - name: 'rsa.misc.comments', - type: 'keyword', - }, - 'rsa.misc.doc_number': { - category: 'rsa', - description: 'This key captures File Identification number', - name: 'rsa.misc.doc_number', - type: 'long', - }, - 'rsa.misc.expected_val': { - category: 'rsa', - description: - 'This key captures the Value expected (from the perspective of the device generating the log).', - name: 'rsa.misc.expected_val', - type: 'keyword', - }, - 'rsa.misc.job_num': { - category: 'rsa', - description: 'This key captures the Job Number', - name: 'rsa.misc.job_num', - type: 'keyword', - }, - 'rsa.misc.spi_dst': { - category: 'rsa', - description: 'Destination SPI Index', - name: 'rsa.misc.spi_dst', - type: 'keyword', - }, - 'rsa.misc.spi_src': { - category: 'rsa', - description: 'Source SPI Index', - name: 'rsa.misc.spi_src', - type: 'keyword', - }, - 'rsa.misc.code': { - category: 'rsa', - name: 'rsa.misc.code', - type: 'keyword', - }, - 'rsa.misc.agent_id': { - category: 'rsa', - description: 'This key is used to capture agent id', - name: 'rsa.misc.agent_id', - type: 'keyword', - }, - 'rsa.misc.message_body': { - category: 'rsa', - description: 'This key captures the The contents of the message body.', - name: 'rsa.misc.message_body', - type: 'keyword', - }, - 'rsa.misc.phone': { - category: 'rsa', - name: 'rsa.misc.phone', - type: 'keyword', - }, - 'rsa.misc.sig_id_str': { - category: 'rsa', - description: 'This key captures a string object of the sigid variable.', - name: 'rsa.misc.sig_id_str', - type: 'keyword', - }, - 'rsa.misc.cmd': { - category: 'rsa', - name: 'rsa.misc.cmd', - type: 'keyword', - }, - 'rsa.misc.misc': { - category: 'rsa', - name: 'rsa.misc.misc', - type: 'keyword', - }, - 'rsa.misc.name': { - category: 'rsa', - name: 'rsa.misc.name', - type: 'keyword', - }, - 'rsa.misc.cpu': { - category: 'rsa', - description: 'This key is the CPU time used in the execution of the event being recorded.', - name: 'rsa.misc.cpu', - type: 'long', - }, - 'rsa.misc.event_desc': { - category: 'rsa', - description: - 'This key is used to capture a description of an event available directly or inferred', - name: 'rsa.misc.event_desc', - type: 'keyword', - }, - 'rsa.misc.sig_id1': { - category: 'rsa', - description: 'This key captures IDS/IPS Int Signature ID. This must be linked to the sig.id', - name: 'rsa.misc.sig_id1', - type: 'long', - }, - 'rsa.misc.im_buddyid': { - category: 'rsa', - name: 'rsa.misc.im_buddyid', - type: 'keyword', - }, - 'rsa.misc.im_client': { - category: 'rsa', - name: 'rsa.misc.im_client', - type: 'keyword', - }, - 'rsa.misc.im_userid': { - category: 'rsa', - name: 'rsa.misc.im_userid', - type: 'keyword', - }, - 'rsa.misc.pid': { - category: 'rsa', - name: 'rsa.misc.pid', - type: 'keyword', - }, - 'rsa.misc.priority': { - category: 'rsa', - name: 'rsa.misc.priority', - type: 'keyword', - }, - 'rsa.misc.context_subject': { - category: 'rsa', - description: - 'This key is to be used in an audit context where the subject is the object being identified', - name: 'rsa.misc.context_subject', - type: 'keyword', - }, - 'rsa.misc.context_target': { - category: 'rsa', - name: 'rsa.misc.context_target', - type: 'keyword', - }, - 'rsa.misc.cve': { - category: 'rsa', - description: - 'This key captures CVE (Common Vulnerabilities and Exposures) - an identifier for known information security vulnerabilities.', - name: 'rsa.misc.cve', - type: 'keyword', - }, - 'rsa.misc.fcatnum': { - category: 'rsa', - description: 'This key captures Filter Category Number. Legacy Usage', - name: 'rsa.misc.fcatnum', - type: 'keyword', - }, - 'rsa.misc.library': { - category: 'rsa', - description: 'This key is used to capture library information in mainframe devices', - name: 'rsa.misc.library', - type: 'keyword', - }, - 'rsa.misc.parent_node': { - category: 'rsa', - description: 'This key captures the Parent Node Name. Must be related to node variable.', - name: 'rsa.misc.parent_node', - type: 'keyword', - }, - 'rsa.misc.risk_info': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_info', - type: 'keyword', - }, - 'rsa.misc.tcp_flags': { - category: 'rsa', - description: 'This key is captures the TCP flags set in any packet of session', - name: 'rsa.misc.tcp_flags', - type: 'long', - }, - 'rsa.misc.tos': { - category: 'rsa', - description: 'This key describes the type of service', - name: 'rsa.misc.tos', - type: 'long', - }, - 'rsa.misc.vm_target': { - category: 'rsa', - description: 'VMWare Target **VMWARE** only varaible.', - name: 'rsa.misc.vm_target', - type: 'keyword', - }, - 'rsa.misc.workspace': { - category: 'rsa', - description: 'This key captures Workspace Description', - name: 'rsa.misc.workspace', - type: 'keyword', - }, - 'rsa.misc.command': { - category: 'rsa', - name: 'rsa.misc.command', - type: 'keyword', - }, - 'rsa.misc.event_category': { - category: 'rsa', - name: 'rsa.misc.event_category', - type: 'keyword', - }, - 'rsa.misc.facilityname': { - category: 'rsa', - name: 'rsa.misc.facilityname', - type: 'keyword', - }, - 'rsa.misc.forensic_info': { - category: 'rsa', - name: 'rsa.misc.forensic_info', - type: 'keyword', - }, - 'rsa.misc.jobname': { - category: 'rsa', - name: 'rsa.misc.jobname', - type: 'keyword', - }, - 'rsa.misc.mode': { - category: 'rsa', - name: 'rsa.misc.mode', - type: 'keyword', - }, - 'rsa.misc.policy': { - category: 'rsa', - name: 'rsa.misc.policy', - type: 'keyword', - }, - 'rsa.misc.policy_waiver': { - category: 'rsa', - name: 'rsa.misc.policy_waiver', - type: 'keyword', - }, - 'rsa.misc.second': { - category: 'rsa', - name: 'rsa.misc.second', - type: 'keyword', - }, - 'rsa.misc.space1': { - category: 'rsa', - name: 'rsa.misc.space1', - type: 'keyword', - }, - 'rsa.misc.subcategory': { - category: 'rsa', - name: 'rsa.misc.subcategory', - type: 'keyword', - }, - 'rsa.misc.tbdstr2': { - category: 'rsa', - name: 'rsa.misc.tbdstr2', - type: 'keyword', - }, - 'rsa.misc.alert_id': { - category: 'rsa', - description: 'Deprecated, New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.alert_id', - type: 'keyword', - }, - 'rsa.misc.checksum_dst': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the the target entity such as a process or file.', - name: 'rsa.misc.checksum_dst', - type: 'keyword', - }, - 'rsa.misc.checksum_src': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the source entity such as a file or process.', - name: 'rsa.misc.checksum_src', - type: 'keyword', - }, - 'rsa.misc.fresult': { - category: 'rsa', - description: 'This key captures the Filter Result', - name: 'rsa.misc.fresult', - type: 'long', - }, - 'rsa.misc.payload_dst': { - category: 'rsa', - description: 'This key is used to capture destination payload', - name: 'rsa.misc.payload_dst', - type: 'keyword', - }, - 'rsa.misc.payload_src': { - category: 'rsa', - description: 'This key is used to capture source payload', - name: 'rsa.misc.payload_src', - type: 'keyword', - }, - 'rsa.misc.pool_id': { - category: 'rsa', - description: 'This key captures the identifier (typically numeric field) of a resource pool', - name: 'rsa.misc.pool_id', - type: 'keyword', - }, - 'rsa.misc.process_id_val': { - category: 'rsa', - description: 'This key is a failure key for Process ID when it is not an integer value', - name: 'rsa.misc.process_id_val', - type: 'keyword', - }, - 'rsa.misc.risk_num_comm': { - category: 'rsa', - description: 'This key captures Risk Number Community', - name: 'rsa.misc.risk_num_comm', - type: 'double', - }, - 'rsa.misc.risk_num_next': { - category: 'rsa', - description: 'This key captures Risk Number NextGen', - name: 'rsa.misc.risk_num_next', - type: 'double', - }, - 'rsa.misc.risk_num_sand': { - category: 'rsa', - description: 'This key captures Risk Number SandBox', - name: 'rsa.misc.risk_num_sand', - type: 'double', - }, - 'rsa.misc.risk_num_static': { - category: 'rsa', - description: 'This key captures Risk Number Static', - name: 'rsa.misc.risk_num_static', - type: 'double', - }, - 'rsa.misc.risk_suspicious': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_suspicious', - type: 'keyword', - }, - 'rsa.misc.risk_warning': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_warning', - type: 'keyword', - }, - 'rsa.misc.snmp_oid': { - category: 'rsa', - description: 'SNMP Object Identifier', - name: 'rsa.misc.snmp_oid', - type: 'keyword', - }, - 'rsa.misc.sql': { - category: 'rsa', - description: 'This key captures the SQL query', - name: 'rsa.misc.sql', - type: 'keyword', - }, - 'rsa.misc.vuln_ref': { - category: 'rsa', - description: 'This key captures the Vulnerability Reference details', - name: 'rsa.misc.vuln_ref', - type: 'keyword', - }, - 'rsa.misc.acl_id': { - category: 'rsa', - name: 'rsa.misc.acl_id', - type: 'keyword', - }, - 'rsa.misc.acl_op': { - category: 'rsa', - name: 'rsa.misc.acl_op', - type: 'keyword', - }, - 'rsa.misc.acl_pos': { - category: 'rsa', - name: 'rsa.misc.acl_pos', - type: 'keyword', - }, - 'rsa.misc.acl_table': { - category: 'rsa', - name: 'rsa.misc.acl_table', - type: 'keyword', - }, - 'rsa.misc.admin': { - category: 'rsa', - name: 'rsa.misc.admin', - type: 'keyword', - }, - 'rsa.misc.alarm_id': { - category: 'rsa', - name: 'rsa.misc.alarm_id', - type: 'keyword', - }, - 'rsa.misc.alarmname': { - category: 'rsa', - name: 'rsa.misc.alarmname', - type: 'keyword', - }, - 'rsa.misc.app_id': { - category: 'rsa', - name: 'rsa.misc.app_id', - type: 'keyword', - }, - 'rsa.misc.audit': { - category: 'rsa', - name: 'rsa.misc.audit', - type: 'keyword', - }, - 'rsa.misc.audit_object': { - category: 'rsa', - name: 'rsa.misc.audit_object', - type: 'keyword', - }, - 'rsa.misc.auditdata': { - category: 'rsa', - name: 'rsa.misc.auditdata', - type: 'keyword', - }, - 'rsa.misc.benchmark': { - category: 'rsa', - name: 'rsa.misc.benchmark', - type: 'keyword', - }, - 'rsa.misc.bypass': { - category: 'rsa', - name: 'rsa.misc.bypass', - type: 'keyword', - }, - 'rsa.misc.cache': { - category: 'rsa', - name: 'rsa.misc.cache', - type: 'keyword', - }, - 'rsa.misc.cache_hit': { - category: 'rsa', - name: 'rsa.misc.cache_hit', - type: 'keyword', - }, - 'rsa.misc.cefversion': { - category: 'rsa', - name: 'rsa.misc.cefversion', - type: 'keyword', - }, - 'rsa.misc.cfg_attr': { - category: 'rsa', - name: 'rsa.misc.cfg_attr', - type: 'keyword', - }, - 'rsa.misc.cfg_obj': { - category: 'rsa', - name: 'rsa.misc.cfg_obj', - type: 'keyword', - }, - 'rsa.misc.cfg_path': { - category: 'rsa', - name: 'rsa.misc.cfg_path', - type: 'keyword', - }, - 'rsa.misc.changes': { - category: 'rsa', - name: 'rsa.misc.changes', - type: 'keyword', - }, - 'rsa.misc.client_ip': { - category: 'rsa', - name: 'rsa.misc.client_ip', - type: 'keyword', - }, - 'rsa.misc.clustermembers': { - category: 'rsa', - name: 'rsa.misc.clustermembers', - type: 'keyword', - }, - 'rsa.misc.cn_acttimeout': { - category: 'rsa', - name: 'rsa.misc.cn_acttimeout', - type: 'keyword', - }, - 'rsa.misc.cn_asn_src': { - category: 'rsa', - name: 'rsa.misc.cn_asn_src', - type: 'keyword', - }, - 'rsa.misc.cn_bgpv4nxthop': { - category: 'rsa', - name: 'rsa.misc.cn_bgpv4nxthop', - type: 'keyword', - }, - 'rsa.misc.cn_ctr_dst_code': { - category: 'rsa', - name: 'rsa.misc.cn_ctr_dst_code', - type: 'keyword', - }, - 'rsa.misc.cn_dst_tos': { - category: 'rsa', - name: 'rsa.misc.cn_dst_tos', - type: 'keyword', - }, - 'rsa.misc.cn_dst_vlan': { - category: 'rsa', - name: 'rsa.misc.cn_dst_vlan', - type: 'keyword', - }, - 'rsa.misc.cn_engine_id': { - category: 'rsa', - name: 'rsa.misc.cn_engine_id', - type: 'keyword', - }, - 'rsa.misc.cn_engine_type': { - category: 'rsa', - name: 'rsa.misc.cn_engine_type', - type: 'keyword', - }, - 'rsa.misc.cn_f_switch': { - category: 'rsa', - name: 'rsa.misc.cn_f_switch', - type: 'keyword', - }, - 'rsa.misc.cn_flowsampid': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampid', - type: 'keyword', - }, - 'rsa.misc.cn_flowsampintv': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampintv', - type: 'keyword', - }, - 'rsa.misc.cn_flowsampmode': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampmode', - type: 'keyword', - }, - 'rsa.misc.cn_inacttimeout': { - category: 'rsa', - name: 'rsa.misc.cn_inacttimeout', - type: 'keyword', - }, - 'rsa.misc.cn_inpermbyts': { - category: 'rsa', - name: 'rsa.misc.cn_inpermbyts', - type: 'keyword', - }, - 'rsa.misc.cn_inpermpckts': { - category: 'rsa', - name: 'rsa.misc.cn_inpermpckts', - type: 'keyword', - }, - 'rsa.misc.cn_invalid': { - category: 'rsa', - name: 'rsa.misc.cn_invalid', - type: 'keyword', - }, - 'rsa.misc.cn_ip_proto_ver': { - category: 'rsa', - name: 'rsa.misc.cn_ip_proto_ver', - type: 'keyword', - }, - 'rsa.misc.cn_ipv4_ident': { - category: 'rsa', - name: 'rsa.misc.cn_ipv4_ident', - type: 'keyword', - }, - 'rsa.misc.cn_l_switch': { - category: 'rsa', - name: 'rsa.misc.cn_l_switch', - type: 'keyword', - }, - 'rsa.misc.cn_log_did': { - category: 'rsa', - name: 'rsa.misc.cn_log_did', - type: 'keyword', - }, - 'rsa.misc.cn_log_rid': { - category: 'rsa', - name: 'rsa.misc.cn_log_rid', - type: 'keyword', - }, - 'rsa.misc.cn_max_ttl': { - category: 'rsa', - name: 'rsa.misc.cn_max_ttl', - type: 'keyword', - }, - 'rsa.misc.cn_maxpcktlen': { - category: 'rsa', - name: 'rsa.misc.cn_maxpcktlen', - type: 'keyword', - }, - 'rsa.misc.cn_min_ttl': { - category: 'rsa', - name: 'rsa.misc.cn_min_ttl', - type: 'keyword', - }, - 'rsa.misc.cn_minpcktlen': { - category: 'rsa', - name: 'rsa.misc.cn_minpcktlen', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_1': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_1', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_10': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_10', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_2': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_2', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_3': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_3', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_4': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_4', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_5': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_5', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_6': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_6', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_7': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_7', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_8': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_8', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_9': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_9', - type: 'keyword', - }, - 'rsa.misc.cn_mplstoplabel': { - category: 'rsa', - name: 'rsa.misc.cn_mplstoplabel', - type: 'keyword', - }, - 'rsa.misc.cn_mplstoplabip': { - category: 'rsa', - name: 'rsa.misc.cn_mplstoplabip', - type: 'keyword', - }, - 'rsa.misc.cn_mul_dst_byt': { - category: 'rsa', - name: 'rsa.misc.cn_mul_dst_byt', - type: 'keyword', - }, - 'rsa.misc.cn_mul_dst_pks': { - category: 'rsa', - name: 'rsa.misc.cn_mul_dst_pks', - type: 'keyword', - }, - 'rsa.misc.cn_muligmptype': { - category: 'rsa', - name: 'rsa.misc.cn_muligmptype', - type: 'keyword', - }, - 'rsa.misc.cn_sampalgo': { - category: 'rsa', - name: 'rsa.misc.cn_sampalgo', - type: 'keyword', - }, - 'rsa.misc.cn_sampint': { - category: 'rsa', - name: 'rsa.misc.cn_sampint', - type: 'keyword', - }, - 'rsa.misc.cn_seqctr': { - category: 'rsa', - name: 'rsa.misc.cn_seqctr', - type: 'keyword', - }, - 'rsa.misc.cn_spackets': { - category: 'rsa', - name: 'rsa.misc.cn_spackets', - type: 'keyword', - }, - 'rsa.misc.cn_src_tos': { - category: 'rsa', - name: 'rsa.misc.cn_src_tos', - type: 'keyword', - }, - 'rsa.misc.cn_src_vlan': { - category: 'rsa', - name: 'rsa.misc.cn_src_vlan', - type: 'keyword', - }, - 'rsa.misc.cn_sysuptime': { - category: 'rsa', - name: 'rsa.misc.cn_sysuptime', - type: 'keyword', - }, - 'rsa.misc.cn_template_id': { - category: 'rsa', - name: 'rsa.misc.cn_template_id', - type: 'keyword', - }, - 'rsa.misc.cn_totbytsexp': { - category: 'rsa', - name: 'rsa.misc.cn_totbytsexp', - type: 'keyword', - }, - 'rsa.misc.cn_totflowexp': { - category: 'rsa', - name: 'rsa.misc.cn_totflowexp', - type: 'keyword', - }, - 'rsa.misc.cn_totpcktsexp': { - category: 'rsa', - name: 'rsa.misc.cn_totpcktsexp', - type: 'keyword', - }, - 'rsa.misc.cn_unixnanosecs': { - category: 'rsa', - name: 'rsa.misc.cn_unixnanosecs', - type: 'keyword', - }, - 'rsa.misc.cn_v6flowlabel': { - category: 'rsa', - name: 'rsa.misc.cn_v6flowlabel', - type: 'keyword', - }, - 'rsa.misc.cn_v6optheaders': { - category: 'rsa', - name: 'rsa.misc.cn_v6optheaders', - type: 'keyword', - }, - 'rsa.misc.comp_class': { - category: 'rsa', - name: 'rsa.misc.comp_class', - type: 'keyword', - }, - 'rsa.misc.comp_name': { - category: 'rsa', - name: 'rsa.misc.comp_name', - type: 'keyword', - }, - 'rsa.misc.comp_rbytes': { - category: 'rsa', - name: 'rsa.misc.comp_rbytes', - type: 'keyword', - }, - 'rsa.misc.comp_sbytes': { - category: 'rsa', - name: 'rsa.misc.comp_sbytes', - type: 'keyword', - }, - 'rsa.misc.cpu_data': { - category: 'rsa', - name: 'rsa.misc.cpu_data', - type: 'keyword', - }, - 'rsa.misc.criticality': { - category: 'rsa', - name: 'rsa.misc.criticality', - type: 'keyword', - }, - 'rsa.misc.cs_agency_dst': { - category: 'rsa', - name: 'rsa.misc.cs_agency_dst', - type: 'keyword', - }, - 'rsa.misc.cs_analyzedby': { - category: 'rsa', - name: 'rsa.misc.cs_analyzedby', - type: 'keyword', - }, - 'rsa.misc.cs_av_other': { - category: 'rsa', - name: 'rsa.misc.cs_av_other', - type: 'keyword', - }, - 'rsa.misc.cs_av_primary': { - category: 'rsa', - name: 'rsa.misc.cs_av_primary', - type: 'keyword', - }, - 'rsa.misc.cs_av_secondary': { - category: 'rsa', - name: 'rsa.misc.cs_av_secondary', - type: 'keyword', - }, - 'rsa.misc.cs_bgpv6nxthop': { - category: 'rsa', - name: 'rsa.misc.cs_bgpv6nxthop', - type: 'keyword', - }, - 'rsa.misc.cs_bit9status': { - category: 'rsa', - name: 'rsa.misc.cs_bit9status', - type: 'keyword', - }, - 'rsa.misc.cs_context': { - category: 'rsa', - name: 'rsa.misc.cs_context', - type: 'keyword', - }, - 'rsa.misc.cs_control': { - category: 'rsa', - name: 'rsa.misc.cs_control', - type: 'keyword', - }, - 'rsa.misc.cs_data': { - category: 'rsa', - name: 'rsa.misc.cs_data', - type: 'keyword', - }, - 'rsa.misc.cs_datecret': { - category: 'rsa', - name: 'rsa.misc.cs_datecret', - type: 'keyword', - }, - 'rsa.misc.cs_dst_tld': { - category: 'rsa', - name: 'rsa.misc.cs_dst_tld', - type: 'keyword', - }, - 'rsa.misc.cs_eth_dst_ven': { - category: 'rsa', - name: 'rsa.misc.cs_eth_dst_ven', - type: 'keyword', - }, - 'rsa.misc.cs_eth_src_ven': { - category: 'rsa', - name: 'rsa.misc.cs_eth_src_ven', - type: 'keyword', - }, - 'rsa.misc.cs_event_uuid': { - category: 'rsa', - name: 'rsa.misc.cs_event_uuid', - type: 'keyword', - }, - 'rsa.misc.cs_filetype': { - category: 'rsa', - name: 'rsa.misc.cs_filetype', - type: 'keyword', - }, - 'rsa.misc.cs_fld': { - category: 'rsa', - name: 'rsa.misc.cs_fld', - type: 'keyword', - }, - 'rsa.misc.cs_if_desc': { - category: 'rsa', - name: 'rsa.misc.cs_if_desc', - type: 'keyword', - }, - 'rsa.misc.cs_if_name': { - category: 'rsa', - name: 'rsa.misc.cs_if_name', - type: 'keyword', - }, - 'rsa.misc.cs_ip_next_hop': { - category: 'rsa', - name: 'rsa.misc.cs_ip_next_hop', - type: 'keyword', - }, - 'rsa.misc.cs_ipv4dstpre': { - category: 'rsa', - name: 'rsa.misc.cs_ipv4dstpre', - type: 'keyword', - }, - 'rsa.misc.cs_ipv4srcpre': { - category: 'rsa', - name: 'rsa.misc.cs_ipv4srcpre', - type: 'keyword', - }, - 'rsa.misc.cs_lifetime': { - category: 'rsa', - name: 'rsa.misc.cs_lifetime', - type: 'keyword', - }, - 'rsa.misc.cs_log_medium': { - category: 'rsa', - name: 'rsa.misc.cs_log_medium', - type: 'keyword', - }, - 'rsa.misc.cs_loginname': { - category: 'rsa', - name: 'rsa.misc.cs_loginname', - type: 'keyword', - }, - 'rsa.misc.cs_modulescore': { - category: 'rsa', - name: 'rsa.misc.cs_modulescore', - type: 'keyword', - }, - 'rsa.misc.cs_modulesign': { - category: 'rsa', - name: 'rsa.misc.cs_modulesign', - type: 'keyword', - }, - 'rsa.misc.cs_opswatresult': { - category: 'rsa', - name: 'rsa.misc.cs_opswatresult', - type: 'keyword', - }, - 'rsa.misc.cs_payload': { - category: 'rsa', - name: 'rsa.misc.cs_payload', - type: 'keyword', - }, - 'rsa.misc.cs_registrant': { - category: 'rsa', - name: 'rsa.misc.cs_registrant', - type: 'keyword', - }, - 'rsa.misc.cs_registrar': { - category: 'rsa', - name: 'rsa.misc.cs_registrar', - type: 'keyword', - }, - 'rsa.misc.cs_represult': { - category: 'rsa', - name: 'rsa.misc.cs_represult', - type: 'keyword', - }, - 'rsa.misc.cs_rpayload': { - category: 'rsa', - name: 'rsa.misc.cs_rpayload', - type: 'keyword', - }, - 'rsa.misc.cs_sampler_name': { - category: 'rsa', - name: 'rsa.misc.cs_sampler_name', - type: 'keyword', - }, - 'rsa.misc.cs_sourcemodule': { - category: 'rsa', - name: 'rsa.misc.cs_sourcemodule', - type: 'keyword', - }, - 'rsa.misc.cs_streams': { - category: 'rsa', - name: 'rsa.misc.cs_streams', - type: 'keyword', - }, - 'rsa.misc.cs_targetmodule': { - category: 'rsa', - name: 'rsa.misc.cs_targetmodule', - type: 'keyword', - }, - 'rsa.misc.cs_v6nxthop': { - category: 'rsa', - name: 'rsa.misc.cs_v6nxthop', - type: 'keyword', - }, - 'rsa.misc.cs_whois_server': { - category: 'rsa', - name: 'rsa.misc.cs_whois_server', - type: 'keyword', - }, - 'rsa.misc.cs_yararesult': { - category: 'rsa', - name: 'rsa.misc.cs_yararesult', - type: 'keyword', - }, - 'rsa.misc.description': { - category: 'rsa', - name: 'rsa.misc.description', - type: 'keyword', - }, - 'rsa.misc.devvendor': { - category: 'rsa', - name: 'rsa.misc.devvendor', - type: 'keyword', - }, - 'rsa.misc.distance': { - category: 'rsa', - name: 'rsa.misc.distance', - type: 'keyword', - }, - 'rsa.misc.dstburb': { - category: 'rsa', - name: 'rsa.misc.dstburb', - type: 'keyword', - }, - 'rsa.misc.edomain': { - category: 'rsa', - name: 'rsa.misc.edomain', - type: 'keyword', - }, - 'rsa.misc.edomaub': { - category: 'rsa', - name: 'rsa.misc.edomaub', - type: 'keyword', - }, - 'rsa.misc.euid': { - category: 'rsa', - name: 'rsa.misc.euid', - type: 'keyword', - }, - 'rsa.misc.facility': { - category: 'rsa', - name: 'rsa.misc.facility', - type: 'keyword', - }, - 'rsa.misc.finterface': { - category: 'rsa', - name: 'rsa.misc.finterface', - type: 'keyword', - }, - 'rsa.misc.flags': { - category: 'rsa', - name: 'rsa.misc.flags', - type: 'keyword', - }, - 'rsa.misc.gaddr': { - category: 'rsa', - name: 'rsa.misc.gaddr', - type: 'keyword', - }, - 'rsa.misc.id3': { - category: 'rsa', - name: 'rsa.misc.id3', - type: 'keyword', - }, - 'rsa.misc.im_buddyname': { - category: 'rsa', - name: 'rsa.misc.im_buddyname', - type: 'keyword', - }, - 'rsa.misc.im_croomid': { - category: 'rsa', - name: 'rsa.misc.im_croomid', - type: 'keyword', - }, - 'rsa.misc.im_croomtype': { - category: 'rsa', - name: 'rsa.misc.im_croomtype', - type: 'keyword', - }, - 'rsa.misc.im_members': { - category: 'rsa', - name: 'rsa.misc.im_members', - type: 'keyword', - }, - 'rsa.misc.im_username': { - category: 'rsa', - name: 'rsa.misc.im_username', - type: 'keyword', - }, - 'rsa.misc.ipkt': { - category: 'rsa', - name: 'rsa.misc.ipkt', - type: 'keyword', - }, - 'rsa.misc.ipscat': { - category: 'rsa', - name: 'rsa.misc.ipscat', - type: 'keyword', - }, - 'rsa.misc.ipspri': { - category: 'rsa', - name: 'rsa.misc.ipspri', - type: 'keyword', - }, - 'rsa.misc.latitude': { - category: 'rsa', - name: 'rsa.misc.latitude', - type: 'keyword', - }, - 'rsa.misc.linenum': { - category: 'rsa', - name: 'rsa.misc.linenum', - type: 'keyword', - }, - 'rsa.misc.list_name': { - category: 'rsa', - name: 'rsa.misc.list_name', - type: 'keyword', - }, - 'rsa.misc.load_data': { - category: 'rsa', - name: 'rsa.misc.load_data', - type: 'keyword', - }, - 'rsa.misc.location_floor': { - category: 'rsa', - name: 'rsa.misc.location_floor', - type: 'keyword', - }, - 'rsa.misc.location_mark': { - category: 'rsa', - name: 'rsa.misc.location_mark', - type: 'keyword', - }, - 'rsa.misc.log_id': { - category: 'rsa', - name: 'rsa.misc.log_id', - type: 'keyword', - }, - 'rsa.misc.log_type': { - category: 'rsa', - name: 'rsa.misc.log_type', - type: 'keyword', - }, - 'rsa.misc.logid': { - category: 'rsa', - name: 'rsa.misc.logid', - type: 'keyword', - }, - 'rsa.misc.logip': { - category: 'rsa', - name: 'rsa.misc.logip', - type: 'keyword', - }, - 'rsa.misc.logname': { - category: 'rsa', - name: 'rsa.misc.logname', - type: 'keyword', - }, - 'rsa.misc.longitude': { - category: 'rsa', - name: 'rsa.misc.longitude', - type: 'keyword', - }, - 'rsa.misc.lport': { - category: 'rsa', - name: 'rsa.misc.lport', - type: 'keyword', - }, - 'rsa.misc.mbug_data': { - category: 'rsa', - name: 'rsa.misc.mbug_data', - type: 'keyword', - }, - 'rsa.misc.misc_name': { - category: 'rsa', - name: 'rsa.misc.misc_name', - type: 'keyword', - }, - 'rsa.misc.msg_type': { - category: 'rsa', - name: 'rsa.misc.msg_type', - type: 'keyword', - }, - 'rsa.misc.msgid': { - category: 'rsa', - name: 'rsa.misc.msgid', - type: 'keyword', - }, - 'rsa.misc.netsessid': { - category: 'rsa', - name: 'rsa.misc.netsessid', - type: 'keyword', - }, - 'rsa.misc.num': { - category: 'rsa', - name: 'rsa.misc.num', - type: 'keyword', - }, - 'rsa.misc.number1': { - category: 'rsa', - name: 'rsa.misc.number1', - type: 'keyword', - }, - 'rsa.misc.number2': { - category: 'rsa', - name: 'rsa.misc.number2', - type: 'keyword', - }, - 'rsa.misc.nwwn': { - category: 'rsa', - name: 'rsa.misc.nwwn', - type: 'keyword', - }, - 'rsa.misc.object': { - category: 'rsa', - name: 'rsa.misc.object', - type: 'keyword', - }, - 'rsa.misc.operation': { - category: 'rsa', - name: 'rsa.misc.operation', - type: 'keyword', - }, - 'rsa.misc.opkt': { - category: 'rsa', - name: 'rsa.misc.opkt', - type: 'keyword', - }, - 'rsa.misc.orig_from': { - category: 'rsa', - name: 'rsa.misc.orig_from', - type: 'keyword', - }, - 'rsa.misc.owner_id': { - category: 'rsa', - name: 'rsa.misc.owner_id', - type: 'keyword', - }, - 'rsa.misc.p_action': { - category: 'rsa', - name: 'rsa.misc.p_action', - type: 'keyword', - }, - 'rsa.misc.p_filter': { - category: 'rsa', - name: 'rsa.misc.p_filter', - type: 'keyword', - }, - 'rsa.misc.p_group_object': { - category: 'rsa', - name: 'rsa.misc.p_group_object', - type: 'keyword', - }, - 'rsa.misc.p_id': { - category: 'rsa', - name: 'rsa.misc.p_id', - type: 'keyword', - }, - 'rsa.misc.p_msgid1': { - category: 'rsa', - name: 'rsa.misc.p_msgid1', - type: 'keyword', - }, - 'rsa.misc.p_msgid2': { - category: 'rsa', - name: 'rsa.misc.p_msgid2', - type: 'keyword', - }, - 'rsa.misc.p_result1': { - category: 'rsa', - name: 'rsa.misc.p_result1', - type: 'keyword', - }, - 'rsa.misc.password_chg': { - category: 'rsa', - name: 'rsa.misc.password_chg', - type: 'keyword', - }, - 'rsa.misc.password_expire': { - category: 'rsa', - name: 'rsa.misc.password_expire', - type: 'keyword', - }, - 'rsa.misc.permgranted': { - category: 'rsa', - name: 'rsa.misc.permgranted', - type: 'keyword', - }, - 'rsa.misc.permwanted': { - category: 'rsa', - name: 'rsa.misc.permwanted', - type: 'keyword', - }, - 'rsa.misc.pgid': { - category: 'rsa', - name: 'rsa.misc.pgid', - type: 'keyword', - }, - 'rsa.misc.policyUUID': { - category: 'rsa', - name: 'rsa.misc.policyUUID', - type: 'keyword', - }, - 'rsa.misc.prog_asp_num': { - category: 'rsa', - name: 'rsa.misc.prog_asp_num', - type: 'keyword', - }, - 'rsa.misc.program': { - category: 'rsa', - name: 'rsa.misc.program', - type: 'keyword', - }, - 'rsa.misc.real_data': { - category: 'rsa', - name: 'rsa.misc.real_data', - type: 'keyword', - }, - 'rsa.misc.rec_asp_device': { - category: 'rsa', - name: 'rsa.misc.rec_asp_device', - type: 'keyword', - }, - 'rsa.misc.rec_asp_num': { - category: 'rsa', - name: 'rsa.misc.rec_asp_num', - type: 'keyword', - }, - 'rsa.misc.rec_library': { - category: 'rsa', - name: 'rsa.misc.rec_library', - type: 'keyword', - }, - 'rsa.misc.recordnum': { - category: 'rsa', - name: 'rsa.misc.recordnum', - type: 'keyword', - }, - 'rsa.misc.ruid': { - category: 'rsa', - name: 'rsa.misc.ruid', - type: 'keyword', - }, - 'rsa.misc.sburb': { - category: 'rsa', - name: 'rsa.misc.sburb', - type: 'keyword', - }, - 'rsa.misc.sdomain_fld': { - category: 'rsa', - name: 'rsa.misc.sdomain_fld', - type: 'keyword', - }, - 'rsa.misc.sec': { - category: 'rsa', - name: 'rsa.misc.sec', - type: 'keyword', - }, - 'rsa.misc.sensorname': { - category: 'rsa', - name: 'rsa.misc.sensorname', - type: 'keyword', - }, - 'rsa.misc.seqnum': { - category: 'rsa', - name: 'rsa.misc.seqnum', - type: 'keyword', - }, - 'rsa.misc.session': { - category: 'rsa', - name: 'rsa.misc.session', - type: 'keyword', - }, - 'rsa.misc.sessiontype': { - category: 'rsa', - name: 'rsa.misc.sessiontype', - type: 'keyword', - }, - 'rsa.misc.sigUUID': { - category: 'rsa', - name: 'rsa.misc.sigUUID', - type: 'keyword', - }, - 'rsa.misc.spi': { - category: 'rsa', - name: 'rsa.misc.spi', - type: 'keyword', - }, - 'rsa.misc.srcburb': { - category: 'rsa', - name: 'rsa.misc.srcburb', - type: 'keyword', - }, - 'rsa.misc.srcdom': { - category: 'rsa', - name: 'rsa.misc.srcdom', - type: 'keyword', - }, - 'rsa.misc.srcservice': { - category: 'rsa', - name: 'rsa.misc.srcservice', - type: 'keyword', - }, - 'rsa.misc.state': { - category: 'rsa', - name: 'rsa.misc.state', - type: 'keyword', - }, - 'rsa.misc.status1': { - category: 'rsa', - name: 'rsa.misc.status1', - type: 'keyword', - }, - 'rsa.misc.svcno': { - category: 'rsa', - name: 'rsa.misc.svcno', - type: 'keyword', - }, - 'rsa.misc.system': { - category: 'rsa', - name: 'rsa.misc.system', - type: 'keyword', - }, - 'rsa.misc.tbdstr1': { - category: 'rsa', - name: 'rsa.misc.tbdstr1', - type: 'keyword', - }, - 'rsa.misc.tgtdom': { - category: 'rsa', - name: 'rsa.misc.tgtdom', - type: 'keyword', - }, - 'rsa.misc.tgtdomain': { - category: 'rsa', - name: 'rsa.misc.tgtdomain', - type: 'keyword', - }, - 'rsa.misc.threshold': { - category: 'rsa', - name: 'rsa.misc.threshold', - type: 'keyword', - }, - 'rsa.misc.type1': { - category: 'rsa', - name: 'rsa.misc.type1', - type: 'keyword', - }, - 'rsa.misc.udb_class': { - category: 'rsa', - name: 'rsa.misc.udb_class', - type: 'keyword', - }, - 'rsa.misc.url_fld': { - category: 'rsa', - name: 'rsa.misc.url_fld', - type: 'keyword', - }, - 'rsa.misc.user_div': { - category: 'rsa', - name: 'rsa.misc.user_div', - type: 'keyword', - }, - 'rsa.misc.userid': { - category: 'rsa', - name: 'rsa.misc.userid', - type: 'keyword', - }, - 'rsa.misc.username_fld': { - category: 'rsa', - name: 'rsa.misc.username_fld', - type: 'keyword', - }, - 'rsa.misc.utcstamp': { - category: 'rsa', - name: 'rsa.misc.utcstamp', - type: 'keyword', - }, - 'rsa.misc.v_instafname': { - category: 'rsa', - name: 'rsa.misc.v_instafname', - type: 'keyword', - }, - 'rsa.misc.virt_data': { - category: 'rsa', - name: 'rsa.misc.virt_data', - type: 'keyword', - }, - 'rsa.misc.vpnid': { - category: 'rsa', - name: 'rsa.misc.vpnid', - type: 'keyword', - }, - 'rsa.misc.autorun_type': { - category: 'rsa', - description: 'This is used to capture Auto Run type', - name: 'rsa.misc.autorun_type', - type: 'keyword', - }, - 'rsa.misc.cc_number': { - category: 'rsa', - description: 'Valid Credit Card Numbers only', - name: 'rsa.misc.cc_number', - type: 'long', - }, - 'rsa.misc.content': { - category: 'rsa', - description: 'This key captures the content type from protocol headers', - name: 'rsa.misc.content', - type: 'keyword', - }, - 'rsa.misc.ein_number': { - category: 'rsa', - description: 'Employee Identification Numbers only', - name: 'rsa.misc.ein_number', - type: 'long', - }, - 'rsa.misc.found': { - category: 'rsa', - description: 'This is used to capture the results of regex match', - name: 'rsa.misc.found', - type: 'keyword', - }, - 'rsa.misc.language': { - category: 'rsa', - description: 'This is used to capture list of languages the client support and what it prefers', - name: 'rsa.misc.language', - type: 'keyword', - }, - 'rsa.misc.lifetime': { - category: 'rsa', - description: 'This key is used to capture the session lifetime in seconds.', - name: 'rsa.misc.lifetime', - type: 'long', - }, - 'rsa.misc.link': { - category: 'rsa', - description: - 'This key is used to link the sessions together. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.misc.link', - type: 'keyword', - }, - 'rsa.misc.match': { - category: 'rsa', - description: 'This key is for regex match name from search.ini', - name: 'rsa.misc.match', - type: 'keyword', - }, - 'rsa.misc.param_dst': { - category: 'rsa', - description: 'This key captures the command line/launch argument of the target process or file', - name: 'rsa.misc.param_dst', - type: 'keyword', - }, - 'rsa.misc.param_src': { - category: 'rsa', - description: 'This key captures source parameter', - name: 'rsa.misc.param_src', - type: 'keyword', - }, - 'rsa.misc.search_text': { - category: 'rsa', - description: 'This key captures the Search Text used', - name: 'rsa.misc.search_text', - type: 'keyword', - }, - 'rsa.misc.sig_name': { - category: 'rsa', - description: 'This key is used to capture the Signature Name only.', - name: 'rsa.misc.sig_name', - type: 'keyword', - }, - 'rsa.misc.snmp_value': { - category: 'rsa', - description: 'SNMP set request value', - name: 'rsa.misc.snmp_value', - type: 'keyword', - }, - 'rsa.misc.streams': { - category: 'rsa', - description: 'This key captures number of streams in session', - name: 'rsa.misc.streams', - type: 'long', - }, - 'rsa.db.index': { - category: 'rsa', - description: 'This key captures IndexID of the index.', - name: 'rsa.db.index', - type: 'keyword', - }, - 'rsa.db.instance': { - category: 'rsa', - description: 'This key is used to capture the database server instance name', - name: 'rsa.db.instance', - type: 'keyword', - }, - 'rsa.db.database': { - category: 'rsa', - description: - 'This key is used to capture the name of a database or an instance as seen in a session', - name: 'rsa.db.database', - type: 'keyword', - }, - 'rsa.db.transact_id': { - category: 'rsa', - description: 'This key captures the SQL transantion ID of the current session', - name: 'rsa.db.transact_id', - type: 'keyword', - }, - 'rsa.db.permissions': { - category: 'rsa', - description: 'This key captures permission or privilege level assigned to a resource.', - name: 'rsa.db.permissions', - type: 'keyword', - }, - 'rsa.db.table_name': { - category: 'rsa', - description: 'This key is used to capture the table name', - name: 'rsa.db.table_name', - type: 'keyword', - }, - 'rsa.db.db_id': { - category: 'rsa', - description: 'This key is used to capture the unique identifier for a database', - name: 'rsa.db.db_id', - type: 'keyword', - }, - 'rsa.db.db_pid': { - category: 'rsa', - description: 'This key captures the process id of a connection with database server', - name: 'rsa.db.db_pid', - type: 'long', - }, - 'rsa.db.lread': { - category: 'rsa', - description: 'This key is used for the number of logical reads', - name: 'rsa.db.lread', - type: 'long', - }, - 'rsa.db.lwrite': { - category: 'rsa', - description: 'This key is used for the number of logical writes', - name: 'rsa.db.lwrite', - type: 'long', - }, - 'rsa.db.pread': { - category: 'rsa', - description: 'This key is used for the number of physical writes', - name: 'rsa.db.pread', - type: 'long', - }, - 'rsa.network.alias_host': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of a hostname is not clear.Also it captures the Device Hostname. Any Hostname that isnt ad.computer.', - name: 'rsa.network.alias_host', - type: 'keyword', - }, - 'rsa.network.domain': { - category: 'rsa', - name: 'rsa.network.domain', - type: 'keyword', - }, - 'rsa.network.host_dst': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Hostname', - name: 'rsa.network.host_dst', - type: 'keyword', - }, - 'rsa.network.network_service': { - category: 'rsa', - description: 'This is used to capture layer 7 protocols/service names', - name: 'rsa.network.network_service', - type: 'keyword', - }, - 'rsa.network.interface': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of an interface is not clear', - name: 'rsa.network.interface', - type: 'keyword', - }, - 'rsa.network.network_port': { - category: 'rsa', - description: - 'Deprecated, use port. NOTE: There is a type discrepancy as currently used, TM: Int32, INDEX: UInt64 (why neither chose the correct UInt16?!)', - name: 'rsa.network.network_port', - type: 'long', - }, - 'rsa.network.eth_host': { - category: 'rsa', - description: 'Deprecated, use alias.mac', - name: 'rsa.network.eth_host', - type: 'keyword', - }, - 'rsa.network.sinterface': { - category: 'rsa', - description: 'This key should only be used when it’s a Source Interface', - name: 'rsa.network.sinterface', - type: 'keyword', - }, - 'rsa.network.dinterface': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Interface', - name: 'rsa.network.dinterface', - type: 'keyword', - }, - 'rsa.network.vlan': { - category: 'rsa', - description: 'This key should only be used to capture the ID of the Virtual LAN', - name: 'rsa.network.vlan', - type: 'long', - }, - 'rsa.network.zone_src': { - category: 'rsa', - description: 'This key should only be used when it’s a Source Zone.', - name: 'rsa.network.zone_src', - type: 'keyword', - }, - 'rsa.network.zone': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of a Zone is not clear', - name: 'rsa.network.zone', - type: 'keyword', - }, - 'rsa.network.zone_dst': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Zone.', - name: 'rsa.network.zone_dst', - type: 'keyword', - }, - 'rsa.network.gateway': { - category: 'rsa', - description: 'This key is used to capture the IP Address of the gateway', - name: 'rsa.network.gateway', - type: 'keyword', - }, - 'rsa.network.icmp_type': { - category: 'rsa', - description: 'This key is used to capture the ICMP type only', - name: 'rsa.network.icmp_type', - type: 'long', - }, - 'rsa.network.mask': { - category: 'rsa', - description: 'This key is used to capture the device network IPmask.', - name: 'rsa.network.mask', - type: 'keyword', - }, - 'rsa.network.icmp_code': { - category: 'rsa', - description: 'This key is used to capture the ICMP code only', - name: 'rsa.network.icmp_code', - type: 'long', - }, - 'rsa.network.protocol_detail': { - category: 'rsa', - description: 'This key should be used to capture additional protocol information', - name: 'rsa.network.protocol_detail', - type: 'keyword', - }, - 'rsa.network.dmask': { - category: 'rsa', - description: 'This key is used for Destionation Device network mask', - name: 'rsa.network.dmask', - type: 'keyword', - }, - 'rsa.network.port': { - category: 'rsa', - description: - 'This key should only be used to capture a Network Port when the directionality is not clear', - name: 'rsa.network.port', - type: 'long', - }, - 'rsa.network.smask': { - category: 'rsa', - description: 'This key is used for capturing source Network Mask', - name: 'rsa.network.smask', - type: 'keyword', - }, - 'rsa.network.netname': { - category: 'rsa', - description: - 'This key is used to capture the network name associated with an IP range. This is configured by the end user.', - name: 'rsa.network.netname', - type: 'keyword', - }, - 'rsa.network.paddr': { - category: 'rsa', - description: 'Deprecated', - name: 'rsa.network.paddr', - type: 'ip', - }, - 'rsa.network.faddr': { - category: 'rsa', - name: 'rsa.network.faddr', - type: 'keyword', - }, - 'rsa.network.lhost': { - category: 'rsa', - name: 'rsa.network.lhost', - type: 'keyword', - }, - 'rsa.network.origin': { - category: 'rsa', - name: 'rsa.network.origin', - type: 'keyword', - }, - 'rsa.network.remote_domain_id': { - category: 'rsa', - name: 'rsa.network.remote_domain_id', - type: 'keyword', - }, - 'rsa.network.addr': { - category: 'rsa', - name: 'rsa.network.addr', - type: 'keyword', - }, - 'rsa.network.dns_a_record': { - category: 'rsa', - name: 'rsa.network.dns_a_record', - type: 'keyword', - }, - 'rsa.network.dns_ptr_record': { - category: 'rsa', - name: 'rsa.network.dns_ptr_record', - type: 'keyword', - }, - 'rsa.network.fhost': { - category: 'rsa', - name: 'rsa.network.fhost', - type: 'keyword', - }, - 'rsa.network.fport': { - category: 'rsa', - name: 'rsa.network.fport', - type: 'keyword', - }, - 'rsa.network.laddr': { - category: 'rsa', - name: 'rsa.network.laddr', - type: 'keyword', - }, - 'rsa.network.linterface': { - category: 'rsa', - name: 'rsa.network.linterface', - type: 'keyword', - }, - 'rsa.network.phost': { - category: 'rsa', - name: 'rsa.network.phost', - type: 'keyword', - }, - 'rsa.network.ad_computer_dst': { - category: 'rsa', - description: 'Deprecated, use host.dst', - name: 'rsa.network.ad_computer_dst', - type: 'keyword', - }, - 'rsa.network.eth_type': { - category: 'rsa', - description: 'This key is used to capture Ethernet Type, Used for Layer 3 Protocols Only', - name: 'rsa.network.eth_type', - type: 'long', - }, - 'rsa.network.ip_proto': { - category: 'rsa', - description: - 'This key should be used to capture the Protocol number, all the protocol nubers are converted into string in UI', - name: 'rsa.network.ip_proto', - type: 'long', - }, - 'rsa.network.dns_cname_record': { - category: 'rsa', - name: 'rsa.network.dns_cname_record', - type: 'keyword', - }, - 'rsa.network.dns_id': { - category: 'rsa', - name: 'rsa.network.dns_id', - type: 'keyword', - }, - 'rsa.network.dns_opcode': { - category: 'rsa', - name: 'rsa.network.dns_opcode', - type: 'keyword', - }, - 'rsa.network.dns_resp': { - category: 'rsa', - name: 'rsa.network.dns_resp', - type: 'keyword', - }, - 'rsa.network.dns_type': { - category: 'rsa', - name: 'rsa.network.dns_type', - type: 'keyword', - }, - 'rsa.network.domain1': { - category: 'rsa', - name: 'rsa.network.domain1', - type: 'keyword', - }, - 'rsa.network.host_type': { - category: 'rsa', - name: 'rsa.network.host_type', - type: 'keyword', - }, - 'rsa.network.packet_length': { - category: 'rsa', - name: 'rsa.network.packet_length', - type: 'keyword', - }, - 'rsa.network.host_orig': { - category: 'rsa', - description: - 'This is used to capture the original hostname in case of a Forwarding Agent or a Proxy in between.', - name: 'rsa.network.host_orig', - type: 'keyword', - }, - 'rsa.network.rpayload': { - category: 'rsa', - description: - 'This key is used to capture the total number of payload bytes seen in the retransmitted packets.', - name: 'rsa.network.rpayload', - type: 'keyword', - }, - 'rsa.network.vlan_name': { - category: 'rsa', - description: 'This key should only be used to capture the name of the Virtual LAN', - name: 'rsa.network.vlan_name', - type: 'keyword', - }, - 'rsa.investigations.ec_activity': { - category: 'rsa', - description: 'This key captures the particular event activity(Ex:Logoff)', - name: 'rsa.investigations.ec_activity', - type: 'keyword', - }, - 'rsa.investigations.ec_theme': { - category: 'rsa', - description: 'This key captures the Theme of a particular Event(Ex:Authentication)', - name: 'rsa.investigations.ec_theme', - type: 'keyword', - }, - 'rsa.investigations.ec_subject': { - category: 'rsa', - description: 'This key captures the Subject of a particular Event(Ex:User)', - name: 'rsa.investigations.ec_subject', - type: 'keyword', - }, - 'rsa.investigations.ec_outcome': { - category: 'rsa', - description: 'This key captures the outcome of a particular Event(Ex:Success)', - name: 'rsa.investigations.ec_outcome', - type: 'keyword', - }, - 'rsa.investigations.event_cat': { - category: 'rsa', - description: 'This key captures the Event category number', - name: 'rsa.investigations.event_cat', - type: 'long', - }, - 'rsa.investigations.event_cat_name': { - category: 'rsa', - description: 'This key captures the event category name corresponding to the event cat code', - name: 'rsa.investigations.event_cat_name', - type: 'keyword', - }, - 'rsa.investigations.event_vcat': { - category: 'rsa', - description: - 'This is a vendor supplied category. This should be used in situations where the vendor has adopted their own event_category taxonomy.', - name: 'rsa.investigations.event_vcat', - type: 'keyword', - }, - 'rsa.investigations.analysis_file': { - category: 'rsa', - description: - 'This is used to capture all indicators used in a File Analysis. This key should be used to capture an analysis of a file', - name: 'rsa.investigations.analysis_file', - type: 'keyword', - }, - 'rsa.investigations.analysis_service': { - category: 'rsa', - description: - 'This is used to capture all indicators used in a Service Analysis. This key should be used to capture an analysis of a service', - name: 'rsa.investigations.analysis_service', - type: 'keyword', - }, - 'rsa.investigations.analysis_session': { - category: 'rsa', - description: - 'This is used to capture all indicators used for a Session Analysis. This key should be used to capture an analysis of a session', - name: 'rsa.investigations.analysis_session', - type: 'keyword', - }, - 'rsa.investigations.boc': { - category: 'rsa', - description: 'This is used to capture behaviour of compromise', - name: 'rsa.investigations.boc', - type: 'keyword', - }, - 'rsa.investigations.eoc': { - category: 'rsa', - description: 'This is used to capture Enablers of Compromise', - name: 'rsa.investigations.eoc', - type: 'keyword', - }, - 'rsa.investigations.inv_category': { - category: 'rsa', - description: 'This used to capture investigation category', - name: 'rsa.investigations.inv_category', - type: 'keyword', - }, - 'rsa.investigations.inv_context': { - category: 'rsa', - description: 'This used to capture investigation context', - name: 'rsa.investigations.inv_context', - type: 'keyword', - }, - 'rsa.investigations.ioc': { - category: 'rsa', - description: 'This is key capture indicator of compromise', - name: 'rsa.investigations.ioc', - type: 'keyword', - }, - 'rsa.counters.dclass_c1': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c1.str only', - name: 'rsa.counters.dclass_c1', - type: 'long', - }, - 'rsa.counters.dclass_c2': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c2.str only', - name: 'rsa.counters.dclass_c2', - type: 'long', - }, - 'rsa.counters.event_counter': { - category: 'rsa', - description: 'This is used to capture the number of times an event repeated', - name: 'rsa.counters.event_counter', - type: 'long', - }, - 'rsa.counters.dclass_r1': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r1.str only', - name: 'rsa.counters.dclass_r1', - type: 'keyword', - }, - 'rsa.counters.dclass_c3': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c3.str only', - name: 'rsa.counters.dclass_c3', - type: 'long', - }, - 'rsa.counters.dclass_c1_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c1 only', - name: 'rsa.counters.dclass_c1_str', - type: 'keyword', - }, - 'rsa.counters.dclass_c2_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c2 only', - name: 'rsa.counters.dclass_c2_str', - type: 'keyword', - }, - 'rsa.counters.dclass_r1_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r1 only', - name: 'rsa.counters.dclass_r1_str', - type: 'keyword', - }, - 'rsa.counters.dclass_r2': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r2.str only', - name: 'rsa.counters.dclass_r2', - type: 'keyword', - }, - 'rsa.counters.dclass_c3_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c3 only', - name: 'rsa.counters.dclass_c3_str', - type: 'keyword', - }, - 'rsa.counters.dclass_r3': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r3.str only', - name: 'rsa.counters.dclass_r3', - type: 'keyword', - }, - 'rsa.counters.dclass_r2_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r2 only', - name: 'rsa.counters.dclass_r2_str', - type: 'keyword', - }, - 'rsa.counters.dclass_r3_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r3 only', - name: 'rsa.counters.dclass_r3_str', - type: 'keyword', - }, - 'rsa.identity.auth_method': { - category: 'rsa', - description: 'This key is used to capture authentication methods used only', - name: 'rsa.identity.auth_method', - type: 'keyword', - }, - 'rsa.identity.user_role': { - category: 'rsa', - description: 'This key is used to capture the Role of a user only', - name: 'rsa.identity.user_role', - type: 'keyword', - }, - 'rsa.identity.dn': { - category: 'rsa', - description: 'X.500 (LDAP) Distinguished Name', - name: 'rsa.identity.dn', - type: 'keyword', - }, - 'rsa.identity.logon_type': { - category: 'rsa', - description: 'This key is used to capture the type of logon method used.', - name: 'rsa.identity.logon_type', - type: 'keyword', - }, - 'rsa.identity.profile': { - category: 'rsa', - description: 'This key is used to capture the user profile', - name: 'rsa.identity.profile', - type: 'keyword', - }, - 'rsa.identity.accesses': { - category: 'rsa', - description: 'This key is used to capture actual privileges used in accessing an object', - name: 'rsa.identity.accesses', - type: 'keyword', - }, - 'rsa.identity.realm': { - category: 'rsa', - description: 'Radius realm or similar grouping of accounts', - name: 'rsa.identity.realm', - type: 'keyword', - }, - 'rsa.identity.user_sid_dst': { - category: 'rsa', - description: 'This key captures Destination User Session ID', - name: 'rsa.identity.user_sid_dst', - type: 'keyword', - }, - 'rsa.identity.dn_src': { - category: 'rsa', - description: - 'An X.500 (LDAP) Distinguished name that is used in a context that indicates a Source dn', - name: 'rsa.identity.dn_src', - type: 'keyword', - }, - 'rsa.identity.org': { - category: 'rsa', - description: 'This key captures the User organization', - name: 'rsa.identity.org', - type: 'keyword', - }, - 'rsa.identity.dn_dst': { - category: 'rsa', - description: - 'An X.500 (LDAP) Distinguished name that used in a context that indicates a Destination dn', - name: 'rsa.identity.dn_dst', - type: 'keyword', - }, - 'rsa.identity.firstname': { - category: 'rsa', - description: - 'This key is for First Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.firstname', - type: 'keyword', - }, - 'rsa.identity.lastname': { - category: 'rsa', - description: - 'This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.lastname', - type: 'keyword', - }, - 'rsa.identity.user_dept': { - category: 'rsa', - description: "User's Department Names only", - name: 'rsa.identity.user_dept', - type: 'keyword', - }, - 'rsa.identity.user_sid_src': { - category: 'rsa', - description: 'This key captures Source User Session ID', - name: 'rsa.identity.user_sid_src', - type: 'keyword', - }, - 'rsa.identity.federated_sp': { - category: 'rsa', - description: - 'This key is the Federated Service Provider. This is the application requesting authentication.', - name: 'rsa.identity.federated_sp', - type: 'keyword', - }, - 'rsa.identity.federated_idp': { - category: 'rsa', - description: - 'This key is the federated Identity Provider. This is the server providing the authentication.', - name: 'rsa.identity.federated_idp', - type: 'keyword', - }, - 'rsa.identity.logon_type_desc': { - category: 'rsa', - description: - "This key is used to capture the textual description of an integer logon type as stored in the meta key 'logon.type'.", - name: 'rsa.identity.logon_type_desc', - type: 'keyword', - }, - 'rsa.identity.middlename': { - category: 'rsa', - description: - 'This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.middlename', - type: 'keyword', - }, - 'rsa.identity.password': { - category: 'rsa', - description: 'This key is for Passwords seen in any session, plain text or encrypted', - name: 'rsa.identity.password', - type: 'keyword', - }, - 'rsa.identity.host_role': { - category: 'rsa', - description: 'This key should only be used to capture the role of a Host Machine', - name: 'rsa.identity.host_role', - type: 'keyword', - }, - 'rsa.identity.ldap': { - category: 'rsa', - description: - 'This key is for Uninterpreted LDAP values. Ldap Values that don’t have a clear query or response context', - name: 'rsa.identity.ldap', - type: 'keyword', - }, - 'rsa.identity.ldap_query': { - category: 'rsa', - description: 'This key is the Search criteria from an LDAP search', - name: 'rsa.identity.ldap_query', - type: 'keyword', - }, - 'rsa.identity.ldap_response': { - category: 'rsa', - description: 'This key is to capture Results from an LDAP search', - name: 'rsa.identity.ldap_response', - type: 'keyword', - }, - 'rsa.identity.owner': { - category: 'rsa', - description: - 'This is used to capture username the process or service is running as, the author of the task', - name: 'rsa.identity.owner', - type: 'keyword', - }, - 'rsa.identity.service_account': { - category: 'rsa', - description: - 'This key is a windows specific key, used for capturing name of the account a service (referenced in the event) is running under. Legacy Usage', - name: 'rsa.identity.service_account', - type: 'keyword', - }, - 'rsa.email.email_dst': { - category: 'rsa', - description: - 'This key is used to capture the Destination email address only, when the destination context is not clear use email', - name: 'rsa.email.email_dst', - type: 'keyword', - }, - 'rsa.email.email_src': { - category: 'rsa', - description: - 'This key is used to capture the source email address only, when the source context is not clear use email', - name: 'rsa.email.email_src', - type: 'keyword', - }, - 'rsa.email.subject': { - category: 'rsa', - description: 'This key is used to capture the subject string from an Email only.', - name: 'rsa.email.subject', - type: 'keyword', - }, - 'rsa.email.email': { - category: 'rsa', - description: - 'This key is used to capture a generic email address where the source or destination context is not clear', - name: 'rsa.email.email', - type: 'keyword', - }, - 'rsa.email.trans_from': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.email.trans_from', - type: 'keyword', - }, - 'rsa.email.trans_to': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.email.trans_to', - type: 'keyword', - }, - 'rsa.file.privilege': { - category: 'rsa', - description: 'Deprecated, use permissions', - name: 'rsa.file.privilege', - type: 'keyword', - }, - 'rsa.file.attachment': { - category: 'rsa', - description: 'This key captures the attachment file name', - name: 'rsa.file.attachment', - type: 'keyword', - }, - 'rsa.file.filesystem': { - category: 'rsa', - name: 'rsa.file.filesystem', - type: 'keyword', - }, - 'rsa.file.binary': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.file.binary', - type: 'keyword', - }, - 'rsa.file.filename_dst': { - category: 'rsa', - description: 'This is used to capture name of the file targeted by the action', - name: 'rsa.file.filename_dst', - type: 'keyword', - }, - 'rsa.file.filename_src': { - category: 'rsa', - description: - 'This is used to capture name of the parent filename, the file which performed the action', - name: 'rsa.file.filename_src', - type: 'keyword', - }, - 'rsa.file.filename_tmp': { - category: 'rsa', - name: 'rsa.file.filename_tmp', - type: 'keyword', - }, - 'rsa.file.directory_dst': { - category: 'rsa', - description: - 'This key is used to capture the directory of the target process or file', - name: 'rsa.file.directory_dst', - type: 'keyword', - }, - 'rsa.file.directory_src': { - category: 'rsa', - description: 'This key is used to capture the directory of the source process or file', - name: 'rsa.file.directory_src', - type: 'keyword', - }, - 'rsa.file.file_entropy': { - category: 'rsa', - description: 'This is used to capture entropy vale of a file', - name: 'rsa.file.file_entropy', - type: 'double', - }, - 'rsa.file.file_vendor': { - category: 'rsa', - description: 'This is used to capture Company name of file located in version_info', - name: 'rsa.file.file_vendor', - type: 'keyword', - }, - 'rsa.file.task_name': { - category: 'rsa', - description: 'This is used to capture name of the task', - name: 'rsa.file.task_name', - type: 'keyword', - }, - 'rsa.web.fqdn': { - category: 'rsa', - description: 'Fully Qualified Domain Names', - name: 'rsa.web.fqdn', - type: 'keyword', - }, - 'rsa.web.web_cookie': { - category: 'rsa', - description: 'This key is used to capture the Web cookies specifically.', - name: 'rsa.web.web_cookie', - type: 'keyword', - }, - 'rsa.web.alias_host': { - category: 'rsa', - name: 'rsa.web.alias_host', - type: 'keyword', - }, - 'rsa.web.reputation_num': { - category: 'rsa', - description: 'Reputation Number of an entity. Typically used for Web Domains', - name: 'rsa.web.reputation_num', - type: 'double', - }, - 'rsa.web.web_ref_domain': { - category: 'rsa', - description: "Web referer's domain", - name: 'rsa.web.web_ref_domain', - type: 'keyword', - }, - 'rsa.web.web_ref_query': { - category: 'rsa', - description: "This key captures Web referer's query portion of the URL", - name: 'rsa.web.web_ref_query', - type: 'keyword', - }, - 'rsa.web.remote_domain': { - category: 'rsa', - name: 'rsa.web.remote_domain', - type: 'keyword', - }, - 'rsa.web.web_ref_page': { - category: 'rsa', - description: "This key captures Web referer's page information", - name: 'rsa.web.web_ref_page', - type: 'keyword', - }, - 'rsa.web.web_ref_root': { - category: 'rsa', - description: "Web referer's root URL path", - name: 'rsa.web.web_ref_root', - type: 'keyword', - }, - 'rsa.web.cn_asn_dst': { - category: 'rsa', - name: 'rsa.web.cn_asn_dst', - type: 'keyword', - }, - 'rsa.web.cn_rpackets': { - category: 'rsa', - name: 'rsa.web.cn_rpackets', - type: 'keyword', - }, - 'rsa.web.urlpage': { - category: 'rsa', - name: 'rsa.web.urlpage', - type: 'keyword', - }, - 'rsa.web.urlroot': { - category: 'rsa', - name: 'rsa.web.urlroot', - type: 'keyword', - }, - 'rsa.web.p_url': { - category: 'rsa', - name: 'rsa.web.p_url', - type: 'keyword', - }, - 'rsa.web.p_user_agent': { - category: 'rsa', - name: 'rsa.web.p_user_agent', - type: 'keyword', - }, - 'rsa.web.p_web_cookie': { - category: 'rsa', - name: 'rsa.web.p_web_cookie', - type: 'keyword', - }, - 'rsa.web.p_web_method': { - category: 'rsa', - name: 'rsa.web.p_web_method', - type: 'keyword', - }, - 'rsa.web.p_web_referer': { - category: 'rsa', - name: 'rsa.web.p_web_referer', - type: 'keyword', - }, - 'rsa.web.web_extension_tmp': { - category: 'rsa', - name: 'rsa.web.web_extension_tmp', - type: 'keyword', - }, - 'rsa.web.web_page': { - category: 'rsa', - name: 'rsa.web.web_page', - type: 'keyword', - }, - 'rsa.threat.threat_category': { - category: 'rsa', - description: 'This key captures Threat Name/Threat Category/Categorization of alert', - name: 'rsa.threat.threat_category', - type: 'keyword', - }, - 'rsa.threat.threat_desc': { - category: 'rsa', - description: - 'This key is used to capture the threat description from the session directly or inferred', - name: 'rsa.threat.threat_desc', - type: 'keyword', - }, - 'rsa.threat.alert': { - category: 'rsa', - description: 'This key is used to capture name of the alert', - name: 'rsa.threat.alert', - type: 'keyword', - }, - 'rsa.threat.threat_source': { - category: 'rsa', - description: 'This key is used to capture source of the threat', - name: 'rsa.threat.threat_source', - type: 'keyword', - }, - 'rsa.crypto.crypto': { - category: 'rsa', - description: 'This key is used to capture the Encryption Type or Encryption Key only', - name: 'rsa.crypto.crypto', - type: 'keyword', - }, - 'rsa.crypto.cipher_src': { - category: 'rsa', - description: 'This key is for Source (Client) Cipher', - name: 'rsa.crypto.cipher_src', - type: 'keyword', - }, - 'rsa.crypto.cert_subject': { - category: 'rsa', - description: 'This key is used to capture the Certificate organization only', - name: 'rsa.crypto.cert_subject', - type: 'keyword', - }, - 'rsa.crypto.peer': { - category: 'rsa', - description: "This key is for Encryption peer's IP Address", - name: 'rsa.crypto.peer', - type: 'keyword', - }, - 'rsa.crypto.cipher_size_src': { - category: 'rsa', - description: 'This key captures Source (Client) Cipher Size', - name: 'rsa.crypto.cipher_size_src', - type: 'long', - }, - 'rsa.crypto.ike': { - category: 'rsa', - description: 'IKE negotiation phase.', - name: 'rsa.crypto.ike', - type: 'keyword', - }, - 'rsa.crypto.scheme': { - category: 'rsa', - description: 'This key captures the Encryption scheme used', - name: 'rsa.crypto.scheme', - type: 'keyword', - }, - 'rsa.crypto.peer_id': { - category: 'rsa', - description: 'This key is for Encryption peer’s identity', - name: 'rsa.crypto.peer_id', - type: 'keyword', - }, - 'rsa.crypto.sig_type': { - category: 'rsa', - description: 'This key captures the Signature Type', - name: 'rsa.crypto.sig_type', - type: 'keyword', - }, - 'rsa.crypto.cert_issuer': { - category: 'rsa', - name: 'rsa.crypto.cert_issuer', - type: 'keyword', - }, - 'rsa.crypto.cert_host_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.crypto.cert_host_name', - type: 'keyword', - }, - 'rsa.crypto.cert_error': { - category: 'rsa', - description: 'This key captures the Certificate Error String', - name: 'rsa.crypto.cert_error', - type: 'keyword', - }, - 'rsa.crypto.cipher_dst': { - category: 'rsa', - description: 'This key is for Destination (Server) Cipher', - name: 'rsa.crypto.cipher_dst', - type: 'keyword', - }, - 'rsa.crypto.cipher_size_dst': { - category: 'rsa', - description: 'This key captures Destination (Server) Cipher Size', - name: 'rsa.crypto.cipher_size_dst', - type: 'long', - }, - 'rsa.crypto.ssl_ver_src': { - category: 'rsa', - description: 'Deprecated, use version', - name: 'rsa.crypto.ssl_ver_src', - type: 'keyword', - }, - 'rsa.crypto.d_certauth': { - category: 'rsa', - name: 'rsa.crypto.d_certauth', - type: 'keyword', - }, - 'rsa.crypto.s_certauth': { - category: 'rsa', - name: 'rsa.crypto.s_certauth', - type: 'keyword', - }, - 'rsa.crypto.ike_cookie1': { - category: 'rsa', - description: 'ID of the negotiation — sent for ISAKMP Phase One', - name: 'rsa.crypto.ike_cookie1', - type: 'keyword', - }, - 'rsa.crypto.ike_cookie2': { - category: 'rsa', - description: 'ID of the negotiation — sent for ISAKMP Phase Two', - name: 'rsa.crypto.ike_cookie2', - type: 'keyword', - }, - 'rsa.crypto.cert_checksum': { - category: 'rsa', - name: 'rsa.crypto.cert_checksum', - type: 'keyword', - }, - 'rsa.crypto.cert_host_cat': { - category: 'rsa', - description: 'This key is used for the hostname category value of a certificate', - name: 'rsa.crypto.cert_host_cat', - type: 'keyword', - }, - 'rsa.crypto.cert_serial': { - category: 'rsa', - description: 'This key is used to capture the Certificate serial number only', - name: 'rsa.crypto.cert_serial', - type: 'keyword', - }, - 'rsa.crypto.cert_status': { - category: 'rsa', - description: 'This key captures Certificate validation status', - name: 'rsa.crypto.cert_status', - type: 'keyword', - }, - 'rsa.crypto.ssl_ver_dst': { - category: 'rsa', - description: 'Deprecated, use version', - name: 'rsa.crypto.ssl_ver_dst', - type: 'keyword', - }, - 'rsa.crypto.cert_keysize': { - category: 'rsa', - name: 'rsa.crypto.cert_keysize', - type: 'keyword', - }, - 'rsa.crypto.cert_username': { - category: 'rsa', - name: 'rsa.crypto.cert_username', - type: 'keyword', - }, - 'rsa.crypto.https_insact': { - category: 'rsa', - name: 'rsa.crypto.https_insact', - type: 'keyword', - }, - 'rsa.crypto.https_valid': { - category: 'rsa', - name: 'rsa.crypto.https_valid', - type: 'keyword', - }, - 'rsa.crypto.cert_ca': { - category: 'rsa', - description: 'This key is used to capture the Certificate signing authority only', - name: 'rsa.crypto.cert_ca', - type: 'keyword', - }, - 'rsa.crypto.cert_common': { - category: 'rsa', - description: 'This key is used to capture the Certificate common name only', - name: 'rsa.crypto.cert_common', - type: 'keyword', - }, - 'rsa.wireless.wlan_ssid': { - category: 'rsa', - description: 'This key is used to capture the ssid of a Wireless Session', - name: 'rsa.wireless.wlan_ssid', - type: 'keyword', - }, - 'rsa.wireless.access_point': { - category: 'rsa', - description: 'This key is used to capture the access point name.', - name: 'rsa.wireless.access_point', - type: 'keyword', - }, - 'rsa.wireless.wlan_channel': { - category: 'rsa', - description: 'This is used to capture the channel names', - name: 'rsa.wireless.wlan_channel', - type: 'long', - }, - 'rsa.wireless.wlan_name': { - category: 'rsa', - description: 'This key captures either WLAN number/name', - name: 'rsa.wireless.wlan_name', - type: 'keyword', - }, - 'rsa.storage.disk_volume': { - category: 'rsa', - description: 'A unique name assigned to logical units (volumes) within a physical disk', - name: 'rsa.storage.disk_volume', - type: 'keyword', - }, - 'rsa.storage.lun': { - category: 'rsa', - description: 'Logical Unit Number.This key is a very useful concept in Storage.', - name: 'rsa.storage.lun', - type: 'keyword', - }, - 'rsa.storage.pwwn': { - category: 'rsa', - description: 'This uniquely identifies a port on a HBA.', - name: 'rsa.storage.pwwn', - type: 'keyword', - }, - 'rsa.physical.org_dst': { - category: 'rsa', - description: - 'This is used to capture the destination organization based on the GEOPIP Maxmind database.', - name: 'rsa.physical.org_dst', - type: 'keyword', - }, - 'rsa.physical.org_src': { - category: 'rsa', - description: - 'This is used to capture the source organization based on the GEOPIP Maxmind database.', - name: 'rsa.physical.org_src', - type: 'keyword', - }, - 'rsa.healthcare.patient_fname': { - category: 'rsa', - description: - 'This key is for First Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_fname', - type: 'keyword', - }, - 'rsa.healthcare.patient_id': { - category: 'rsa', - description: 'This key captures the unique ID for a patient', - name: 'rsa.healthcare.patient_id', - type: 'keyword', - }, - 'rsa.healthcare.patient_lname': { - category: 'rsa', - description: - 'This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_lname', - type: 'keyword', - }, - 'rsa.healthcare.patient_mname': { - category: 'rsa', - description: - 'This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_mname', - type: 'keyword', - }, - 'rsa.endpoint.host_state': { - category: 'rsa', - description: - 'This key is used to capture the current state of the machine, such as blacklisted, infected, firewall disabled and so on', - name: 'rsa.endpoint.host_state', - type: 'keyword', - }, - 'rsa.endpoint.registry_key': { - category: 'rsa', - description: 'This key captures the path to the registry key', - name: 'rsa.endpoint.registry_key', - type: 'keyword', - }, - 'rsa.endpoint.registry_value': { - category: 'rsa', - description: 'This key captures values or decorators used within a registry entry', - name: 'rsa.endpoint.registry_value', - type: 'keyword', - }, - 'forcepoint.virus_id': { - category: 'forcepoint', - description: 'Virus ID ', - name: 'forcepoint.virus_id', - type: 'keyword', - }, - 'checkpoint.app_risk': { - category: 'checkpoint', - description: 'Application risk.', - name: 'checkpoint.app_risk', - type: 'keyword', - }, - 'checkpoint.app_severity': { - category: 'checkpoint', - description: 'Application threat severity.', - name: 'checkpoint.app_severity', - type: 'keyword', - }, - 'checkpoint.app_sig_id': { - category: 'checkpoint', - description: 'The signature ID which the application was detected by.', - name: 'checkpoint.app_sig_id', - type: 'keyword', - }, - 'checkpoint.auth_method': { - category: 'checkpoint', - description: 'Password authentication protocol used.', - name: 'checkpoint.auth_method', - type: 'keyword', - }, - 'checkpoint.category': { - category: 'checkpoint', - description: 'Category.', - name: 'checkpoint.category', - type: 'keyword', - }, - 'checkpoint.confidence_level': { - category: 'checkpoint', - description: 'Confidence level determined.', - name: 'checkpoint.confidence_level', - type: 'integer', - }, - 'checkpoint.connectivity_state': { - category: 'checkpoint', - description: 'Connectivity state.', - name: 'checkpoint.connectivity_state', - type: 'keyword', - }, - 'checkpoint.cookie': { - category: 'checkpoint', - description: 'IKE cookie.', - name: 'checkpoint.cookie', - type: 'keyword', - }, - 'checkpoint.dst_phone_number': { - category: 'checkpoint', - description: 'Destination IP-Phone.', - name: 'checkpoint.dst_phone_number', - type: 'keyword', - }, - 'checkpoint.email_control': { - category: 'checkpoint', - description: 'Engine name.', - name: 'checkpoint.email_control', - type: 'keyword', - }, - 'checkpoint.email_id': { - category: 'checkpoint', - description: 'Internal email ID.', - name: 'checkpoint.email_id', - type: 'keyword', - }, - 'checkpoint.email_recipients_num': { - category: 'checkpoint', - description: 'Number of recipients.', - name: 'checkpoint.email_recipients_num', - type: 'long', - }, - 'checkpoint.email_session_id': { - category: 'checkpoint', - description: 'Internal email session ID.', - name: 'checkpoint.email_session_id', - type: 'keyword', - }, - 'checkpoint.email_spool_id': { - category: 'checkpoint', - description: 'Internal email spool ID.', - name: 'checkpoint.email_spool_id', - type: 'keyword', - }, - 'checkpoint.email_subject': { - category: 'checkpoint', - description: 'Email subject.', - name: 'checkpoint.email_subject', - type: 'keyword', - }, - 'checkpoint.event_count': { - category: 'checkpoint', - description: 'Number of events associated with the log.', - name: 'checkpoint.event_count', - type: 'long', - }, - 'checkpoint.frequency': { - category: 'checkpoint', - description: 'Scan frequency.', - name: 'checkpoint.frequency', - type: 'keyword', - }, - 'checkpoint.icmp_type': { - category: 'checkpoint', - description: 'ICMP type.', - name: 'checkpoint.icmp_type', - type: 'long', - }, - 'checkpoint.icmp_code': { - category: 'checkpoint', - description: 'ICMP code.', - name: 'checkpoint.icmp_code', - type: 'long', - }, - 'checkpoint.identity_type': { - category: 'checkpoint', - description: 'Identity type.', - name: 'checkpoint.identity_type', - type: 'keyword', - }, - 'checkpoint.incident_extension': { - category: 'checkpoint', - description: 'Format of original data.', - name: 'checkpoint.incident_extension', - type: 'keyword', - }, - 'checkpoint.integrity_av_invoke_type': { - category: 'checkpoint', - description: 'Scan invoke type.', - name: 'checkpoint.integrity_av_invoke_type', - type: 'keyword', - }, - 'checkpoint.malware_family': { - category: 'checkpoint', - description: 'Malware family.', - name: 'checkpoint.malware_family', - type: 'keyword', - }, - 'checkpoint.peer_gateway': { - category: 'checkpoint', - description: 'Main IP of the peer Security Gateway.', - name: 'checkpoint.peer_gateway', - type: 'ip', - }, - 'checkpoint.performance_impact': { - category: 'checkpoint', - description: 'Protection performance impact.', - name: 'checkpoint.performance_impact', - type: 'integer', - }, - 'checkpoint.protection_id': { - category: 'checkpoint', - description: 'Protection malware ID.', - name: 'checkpoint.protection_id', - type: 'keyword', - }, - 'checkpoint.protection_name': { - category: 'checkpoint', - description: 'Specific signature name of the attack.', - name: 'checkpoint.protection_name', - type: 'keyword', - }, - 'checkpoint.protection_type': { - category: 'checkpoint', - description: 'Type of protection used to detect the attack.', - name: 'checkpoint.protection_type', - type: 'keyword', - }, - 'checkpoint.scan_result': { - category: 'checkpoint', - description: 'Scan result.', - name: 'checkpoint.scan_result', - type: 'keyword', - }, - 'checkpoint.sensor_mode': { - category: 'checkpoint', - description: 'Sensor mode.', - name: 'checkpoint.sensor_mode', - type: 'keyword', - }, - 'checkpoint.severity': { - category: 'checkpoint', - description: 'Threat severity.', - name: 'checkpoint.severity', - type: 'keyword', - }, - 'checkpoint.spyware_name': { - category: 'checkpoint', - description: 'Spyware name.', - name: 'checkpoint.spyware_name', - type: 'keyword', - }, - 'checkpoint.spyware_status': { - category: 'checkpoint', - description: 'Spyware status.', - name: 'checkpoint.spyware_status', - type: 'keyword', - }, - 'checkpoint.subs_exp': { - category: 'checkpoint', - description: 'The expiration date of the subscription.', - name: 'checkpoint.subs_exp', - type: 'date', - }, - 'checkpoint.tcp_flags': { - category: 'checkpoint', - description: 'TCP packet flags.', - name: 'checkpoint.tcp_flags', - type: 'keyword', - }, - 'checkpoint.termination_reason': { - category: 'checkpoint', - description: 'Termination reason.', - name: 'checkpoint.termination_reason', - type: 'keyword', - }, - 'checkpoint.update_status': { - category: 'checkpoint', - description: 'Update status.', - name: 'checkpoint.update_status', - type: 'keyword', - }, - 'checkpoint.user_status': { - category: 'checkpoint', - description: 'User response.', - name: 'checkpoint.user_status', - type: 'keyword', - }, - 'checkpoint.uuid': { - category: 'checkpoint', - description: 'External ID.', - name: 'checkpoint.uuid', - type: 'keyword', - }, - 'checkpoint.virus_name': { - category: 'checkpoint', - description: 'Virus name.', - name: 'checkpoint.virus_name', - type: 'keyword', - }, - 'checkpoint.voip_log_type': { - category: 'checkpoint', - description: 'VoIP log types.', - name: 'checkpoint.voip_log_type', - type: 'keyword', - }, - 'cef.extensions.cp_app_risk': { - category: 'cef', - name: 'cef.extensions.cp_app_risk', - type: 'keyword', - }, - 'cef.extensions.cp_severity': { - category: 'cef', - name: 'cef.extensions.cp_severity', - type: 'keyword', - }, - 'cef.extensions.ifname': { - category: 'cef', - name: 'cef.extensions.ifname', - type: 'keyword', - }, - 'cef.extensions.inzone': { - category: 'cef', - name: 'cef.extensions.inzone', - type: 'keyword', - }, - 'cef.extensions.layer_uuid': { - category: 'cef', - name: 'cef.extensions.layer_uuid', - type: 'keyword', - }, - 'cef.extensions.layer_name': { - category: 'cef', - name: 'cef.extensions.layer_name', - type: 'keyword', - }, - 'cef.extensions.logid': { - category: 'cef', - name: 'cef.extensions.logid', - type: 'keyword', - }, - 'cef.extensions.loguid': { - category: 'cef', - name: 'cef.extensions.loguid', - type: 'keyword', - }, - 'cef.extensions.match_id': { - category: 'cef', - name: 'cef.extensions.match_id', - type: 'keyword', - }, - 'cef.extensions.nat_addtnl_rulenum': { - category: 'cef', - name: 'cef.extensions.nat_addtnl_rulenum', - type: 'keyword', - }, - 'cef.extensions.nat_rulenum': { - category: 'cef', - name: 'cef.extensions.nat_rulenum', - type: 'keyword', - }, - 'cef.extensions.origin': { - category: 'cef', - name: 'cef.extensions.origin', - type: 'keyword', - }, - 'cef.extensions.originsicname': { - category: 'cef', - name: 'cef.extensions.originsicname', - type: 'keyword', - }, - 'cef.extensions.outzone': { - category: 'cef', - name: 'cef.extensions.outzone', - type: 'keyword', - }, - 'cef.extensions.parent_rule': { - category: 'cef', - name: 'cef.extensions.parent_rule', - type: 'keyword', - }, - 'cef.extensions.product': { - category: 'cef', - name: 'cef.extensions.product', - type: 'keyword', - }, - 'cef.extensions.rule_action': { - category: 'cef', - name: 'cef.extensions.rule_action', - type: 'keyword', - }, - 'cef.extensions.rule_uid': { - category: 'cef', - name: 'cef.extensions.rule_uid', - type: 'keyword', - }, - 'cef.extensions.sequencenum': { - category: 'cef', - name: 'cef.extensions.sequencenum', - type: 'keyword', - }, - 'cef.extensions.service_id': { - category: 'cef', - name: 'cef.extensions.service_id', - type: 'keyword', - }, - 'cef.extensions.version': { - category: 'cef', - name: 'cef.extensions.version', - type: 'keyword', - }, - 'checkpoint.calc_desc': { - category: 'checkpoint', - description: 'Log description. ', - name: 'checkpoint.calc_desc', - type: 'keyword', - }, - 'checkpoint.dst_country': { - category: 'checkpoint', - description: 'Destination country. ', - name: 'checkpoint.dst_country', - type: 'keyword', - }, - 'checkpoint.dst_user_name': { - category: 'checkpoint', - description: 'Connected user name on the destination IP. ', - name: 'checkpoint.dst_user_name', - type: 'keyword', - }, - 'checkpoint.sys_message': { - category: 'checkpoint', - description: 'System messages ', - name: 'checkpoint.sys_message', - type: 'keyword', - }, - 'checkpoint.logid': { - category: 'checkpoint', - description: 'System messages ', - name: 'checkpoint.logid', - type: 'keyword', - }, - 'checkpoint.failure_impact': { - category: 'checkpoint', - description: 'The impact of update service failure. ', - name: 'checkpoint.failure_impact', - type: 'keyword', - }, - 'checkpoint.id': { - category: 'checkpoint', - description: 'Override application ID. ', - name: 'checkpoint.id', - type: 'integer', - }, - 'checkpoint.information': { - category: 'checkpoint', - description: 'Policy installation status for a specific blade. ', - name: 'checkpoint.information', - type: 'keyword', - }, - 'checkpoint.layer_name': { - category: 'checkpoint', - description: 'Layer name. ', - name: 'checkpoint.layer_name', - type: 'keyword', - }, - 'checkpoint.layer_uuid': { - category: 'checkpoint', - description: 'Layer UUID. ', - name: 'checkpoint.layer_uuid', - type: 'keyword', - }, - 'checkpoint.log_id': { - category: 'checkpoint', - description: 'Unique identity for logs. ', - name: 'checkpoint.log_id', - type: 'integer', - }, - 'checkpoint.origin_sic_name': { - category: 'checkpoint', - description: 'Machine SIC. ', - name: 'checkpoint.origin_sic_name', - type: 'keyword', - }, - 'checkpoint.policy_mgmt': { - category: 'checkpoint', - description: 'Name of the Management Server that manages this Security Gateway. ', - name: 'checkpoint.policy_mgmt', - type: 'keyword', - }, - 'checkpoint.policy_name': { - category: 'checkpoint', - description: 'Name of the last policy that this Security Gateway fetched. ', - name: 'checkpoint.policy_name', - type: 'keyword', - }, - 'checkpoint.protocol': { - category: 'checkpoint', - description: 'Protocol detected on the connection. ', - name: 'checkpoint.protocol', - type: 'keyword', - }, - 'checkpoint.proxy_src_ip': { - category: 'checkpoint', - description: 'Sender source IP (even when using proxy). ', - name: 'checkpoint.proxy_src_ip', - type: 'ip', - }, - 'checkpoint.rule': { - category: 'checkpoint', - description: 'Matched rule number. ', - name: 'checkpoint.rule', - type: 'integer', - }, - 'checkpoint.rule_action': { - category: 'checkpoint', - description: 'Action of the matched rule in the access policy. ', - name: 'checkpoint.rule_action', - type: 'keyword', - }, - 'checkpoint.scan_direction': { - category: 'checkpoint', - description: 'Scan direction. ', - name: 'checkpoint.scan_direction', - type: 'keyword', - }, - 'checkpoint.session_id': { - category: 'checkpoint', - description: 'Log uuid. ', - name: 'checkpoint.session_id', - type: 'keyword', - }, - 'checkpoint.source_os': { - category: 'checkpoint', - description: 'OS which generated the attack. ', - name: 'checkpoint.source_os', - type: 'keyword', - }, - 'checkpoint.src_country': { - category: 'checkpoint', - description: 'Country name, derived from connection source IP address. ', - name: 'checkpoint.src_country', - type: 'keyword', - }, - 'checkpoint.src_user_name': { - category: 'checkpoint', - description: 'User name connected to source IP ', - name: 'checkpoint.src_user_name', - type: 'keyword', - }, - 'checkpoint.ticket_id': { - category: 'checkpoint', - description: 'Unique ID per file. ', - name: 'checkpoint.ticket_id', - type: 'keyword', - }, - 'checkpoint.tls_server_host_name': { - category: 'checkpoint', - description: 'SNI/CN from encrypted TLS connection used by URLF for categorization. ', - name: 'checkpoint.tls_server_host_name', - type: 'keyword', - }, - 'checkpoint.verdict': { - category: 'checkpoint', - description: 'TE engine verdict Possible values: Malicious/Benign/Error. ', - name: 'checkpoint.verdict', - type: 'keyword', - }, - 'checkpoint.user': { - category: 'checkpoint', - description: 'Source user name. ', - name: 'checkpoint.user', - type: 'keyword', - }, - 'checkpoint.vendor_list': { - category: 'checkpoint', - description: 'The vendor name that provided the verdict for a malicious URL. ', - name: 'checkpoint.vendor_list', - type: 'keyword', - }, - 'checkpoint.web_server_type': { - category: 'checkpoint', - description: 'Web server detected in the HTTP response. ', - name: 'checkpoint.web_server_type', - type: 'keyword', - }, - 'checkpoint.client_name': { - category: 'checkpoint', - description: 'Client Application or Software Blade that detected the event. ', - name: 'checkpoint.client_name', - type: 'keyword', - }, - 'checkpoint.client_version': { - category: 'checkpoint', - description: 'Build version of SandBlast Agent client installed on the computer. ', - name: 'checkpoint.client_version', - type: 'keyword', - }, - 'checkpoint.extension_version': { - category: 'checkpoint', - description: 'Build version of the SandBlast Agent browser extension. ', - name: 'checkpoint.extension_version', - type: 'keyword', - }, - 'checkpoint.host_time': { - category: 'checkpoint', - description: 'Local time on the endpoint computer. ', - name: 'checkpoint.host_time', - type: 'keyword', - }, - 'checkpoint.installed_products': { - category: 'checkpoint', - description: 'List of installed Endpoint Software Blades. ', - name: 'checkpoint.installed_products', - type: 'keyword', - }, - 'checkpoint.cc': { - category: 'checkpoint', - description: 'The Carbon Copy address of the email. ', - name: 'checkpoint.cc', - type: 'keyword', - }, - 'checkpoint.parent_process_username': { - category: 'checkpoint', - description: 'Owner username of the parent process of the process that triggered the attack. ', - name: 'checkpoint.parent_process_username', - type: 'keyword', - }, - 'checkpoint.process_username': { - category: 'checkpoint', - description: 'Owner username of the process that triggered the attack. ', - name: 'checkpoint.process_username', - type: 'keyword', - }, - 'checkpoint.audit_status': { - category: 'checkpoint', - description: 'Audit Status. Can be Success or Failure. ', - name: 'checkpoint.audit_status', - type: 'keyword', - }, - 'checkpoint.objecttable': { - category: 'checkpoint', - description: 'Table of affected objects. ', - name: 'checkpoint.objecttable', - type: 'keyword', - }, - 'checkpoint.objecttype': { - category: 'checkpoint', - description: 'The type of the affected object. ', - name: 'checkpoint.objecttype', - type: 'keyword', - }, - 'checkpoint.operation_number': { - category: 'checkpoint', - description: 'The operation nuber. ', - name: 'checkpoint.operation_number', - type: 'keyword', - }, - 'checkpoint.suppressed_logs': { - category: 'checkpoint', - description: - 'Aggregated connections for five minutes on the same source, destination and port. ', - name: 'checkpoint.suppressed_logs', - type: 'integer', - }, - 'checkpoint.blade_name': { - category: 'checkpoint', - description: 'Blade name. ', - name: 'checkpoint.blade_name', - type: 'keyword', - }, - 'checkpoint.status': { - category: 'checkpoint', - description: 'Ok/Warning/Error. ', - name: 'checkpoint.status', - type: 'keyword', - }, - 'checkpoint.short_desc': { - category: 'checkpoint', - description: 'Short description of the process that was executed. ', - name: 'checkpoint.short_desc', - type: 'keyword', - }, - 'checkpoint.long_desc': { - category: 'checkpoint', - description: 'More information on the process (usually describing error reason in failure). ', - name: 'checkpoint.long_desc', - type: 'keyword', - }, - 'checkpoint.scan_hosts_hour': { - category: 'checkpoint', - description: 'Number of unique hosts during the last hour. ', - name: 'checkpoint.scan_hosts_hour', - type: 'integer', - }, - 'checkpoint.scan_hosts_day': { - category: 'checkpoint', - description: 'Number of unique hosts during the last day. ', - name: 'checkpoint.scan_hosts_day', - type: 'integer', - }, - 'checkpoint.scan_hosts_week': { - category: 'checkpoint', - description: 'Number of unique hosts during the last week. ', - name: 'checkpoint.scan_hosts_week', - type: 'integer', - }, - 'checkpoint.unique_detected_hour': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last hour. ', - name: 'checkpoint.unique_detected_hour', - type: 'integer', - }, - 'checkpoint.unique_detected_day': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last day. ', - name: 'checkpoint.unique_detected_day', - type: 'integer', - }, - 'checkpoint.unique_detected_week': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last week. ', - name: 'checkpoint.unique_detected_week', - type: 'integer', - }, - 'checkpoint.scan_mail': { - category: 'checkpoint', - description: 'Number of emails that were scanned by "AB malicious activity" engine. ', - name: 'checkpoint.scan_mail', - type: 'integer', - }, - 'checkpoint.additional_ip': { - category: 'checkpoint', - description: 'DNS host name. ', - name: 'checkpoint.additional_ip', - type: 'keyword', - }, - 'checkpoint.description': { - category: 'checkpoint', - description: 'Additional explanation how the security gateway enforced the connection. ', - name: 'checkpoint.description', - type: 'keyword', - }, - 'checkpoint.email_spam_category': { - category: 'checkpoint', - description: 'Email categories. Possible values: spam/not spam/phishing. ', - name: 'checkpoint.email_spam_category', - type: 'keyword', - }, - 'checkpoint.email_control_analysis': { - category: 'checkpoint', - description: 'Message classification, received from spam vendor engine. ', - name: 'checkpoint.email_control_analysis', - type: 'keyword', - }, - 'checkpoint.scan_results': { - category: 'checkpoint', - description: '"Infected"/description of a failure. ', - name: 'checkpoint.scan_results', - type: 'keyword', - }, - 'checkpoint.original_queue_id': { - category: 'checkpoint', - description: 'Original postfix email queue id. ', - name: 'checkpoint.original_queue_id', - type: 'keyword', - }, - 'checkpoint.risk': { - category: 'checkpoint', - description: 'Risk level we got from the engine. ', - name: 'checkpoint.risk', - type: 'keyword', - }, - 'checkpoint.observable_name': { - category: 'checkpoint', - description: 'IOC observable signature name. ', - name: 'checkpoint.observable_name', - type: 'keyword', - }, - 'checkpoint.observable_id': { - category: 'checkpoint', - description: 'IOC observable signature id. ', - name: 'checkpoint.observable_id', - type: 'keyword', - }, - 'checkpoint.observable_comment': { - category: 'checkpoint', - description: 'IOC observable signature description. ', - name: 'checkpoint.observable_comment', - type: 'keyword', - }, - 'checkpoint.indicator_name': { - category: 'checkpoint', - description: 'IOC indicator name. ', - name: 'checkpoint.indicator_name', - type: 'keyword', - }, - 'checkpoint.indicator_description': { - category: 'checkpoint', - description: 'IOC indicator description. ', - name: 'checkpoint.indicator_description', - type: 'keyword', - }, - 'checkpoint.indicator_reference': { - category: 'checkpoint', - description: 'IOC indicator reference. ', - name: 'checkpoint.indicator_reference', - type: 'keyword', - }, - 'checkpoint.indicator_uuid': { - category: 'checkpoint', - description: 'IOC indicator uuid. ', - name: 'checkpoint.indicator_uuid', - type: 'keyword', - }, - 'checkpoint.app_desc': { - category: 'checkpoint', - description: 'Application description. ', - name: 'checkpoint.app_desc', - type: 'keyword', - }, - 'checkpoint.app_id': { - category: 'checkpoint', - description: 'Application ID. ', - name: 'checkpoint.app_id', - type: 'integer', - }, - 'checkpoint.certificate_resource': { - category: 'checkpoint', - description: 'HTTPS resource Possible values: SNI or domain name (DN). ', - name: 'checkpoint.certificate_resource', - type: 'keyword', - }, - 'checkpoint.certificate_validation': { - category: 'checkpoint', - description: - 'Precise error, describing HTTPS certificate failure under "HTTPS categorize websites" feature. ', - name: 'checkpoint.certificate_validation', - type: 'keyword', - }, - 'checkpoint.browse_time': { - category: 'checkpoint', - description: 'Application session browse time. ', - name: 'checkpoint.browse_time', - type: 'keyword', - }, - 'checkpoint.limit_requested': { - category: 'checkpoint', - description: 'Indicates whether data limit was requested for the session. ', - name: 'checkpoint.limit_requested', - type: 'integer', - }, - 'checkpoint.limit_applied': { - category: 'checkpoint', - description: 'Indicates whether the session was actually date limited. ', - name: 'checkpoint.limit_applied', - type: 'integer', - }, - 'checkpoint.dropped_total': { - category: 'checkpoint', - description: 'Amount of dropped packets (both incoming and outgoing). ', - name: 'checkpoint.dropped_total', - type: 'integer', - }, - 'checkpoint.client_type_os': { - category: 'checkpoint', - description: 'Client OS detected in the HTTP request. ', - name: 'checkpoint.client_type_os', - type: 'keyword', - }, - 'checkpoint.name': { - category: 'checkpoint', - description: 'Application name. ', - name: 'checkpoint.name', - type: 'keyword', - }, - 'checkpoint.properties': { - category: 'checkpoint', - description: 'Application categories. ', - name: 'checkpoint.properties', - type: 'keyword', - }, - 'checkpoint.sig_id': { - category: 'checkpoint', - description: "Application's signature ID which how it was detected by. ", - name: 'checkpoint.sig_id', - type: 'keyword', - }, - 'checkpoint.desc': { - category: 'checkpoint', - description: 'Override application description. ', - name: 'checkpoint.desc', - type: 'keyword', - }, - 'checkpoint.referrer_self_uid': { - category: 'checkpoint', - description: 'UUID of the current log. ', - name: 'checkpoint.referrer_self_uid', - type: 'keyword', - }, - 'checkpoint.referrer_parent_uid': { - category: 'checkpoint', - description: 'Log UUID of the referring application. ', - name: 'checkpoint.referrer_parent_uid', - type: 'keyword', - }, - 'checkpoint.needs_browse_time': { - category: 'checkpoint', - description: 'Browse time required for the connection. ', - name: 'checkpoint.needs_browse_time', - type: 'integer', - }, - 'checkpoint.cluster_info': { - category: 'checkpoint', - description: - 'Cluster information. Possible options: Failover reason/cluster state changes/CP cluster or 3rd party. ', - name: 'checkpoint.cluster_info', - type: 'keyword', - }, - 'checkpoint.sync': { - category: 'checkpoint', - description: 'Sync status and the reason (stable, at risk). ', - name: 'checkpoint.sync', - type: 'keyword', - }, - 'checkpoint.file_direction': { - category: 'checkpoint', - description: 'File direction. Possible options: upload/download. ', - name: 'checkpoint.file_direction', - type: 'keyword', - }, - 'checkpoint.invalid_file_size': { - category: 'checkpoint', - description: 'File_size field is valid only if this field is set to 0. ', - name: 'checkpoint.invalid_file_size', - type: 'integer', - }, - 'checkpoint.top_archive_file_name': { - category: 'checkpoint', - description: 'In case of archive file: the file that was sent/received. ', - name: 'checkpoint.top_archive_file_name', - type: 'keyword', - }, - 'checkpoint.data_type_name': { - category: 'checkpoint', - description: 'Data type in rulebase that was matched. ', - name: 'checkpoint.data_type_name', - type: 'keyword', - }, - 'checkpoint.specific_data_type_name': { - category: 'checkpoint', - description: 'Compound/Group scenario, data type that was matched. ', - name: 'checkpoint.specific_data_type_name', - type: 'keyword', - }, - 'checkpoint.word_list': { - category: 'checkpoint', - description: 'Words matched by data type. ', - name: 'checkpoint.word_list', - type: 'keyword', - }, - 'checkpoint.info': { - category: 'checkpoint', - description: 'Special log message. ', - name: 'checkpoint.info', - type: 'keyword', - }, - 'checkpoint.outgoing_url': { - category: 'checkpoint', - description: 'URL related to this log (for HTTP). ', - name: 'checkpoint.outgoing_url', - type: 'keyword', - }, - 'checkpoint.dlp_rule_name': { - category: 'checkpoint', - description: 'Matched rule name. ', - name: 'checkpoint.dlp_rule_name', - type: 'keyword', - }, - 'checkpoint.dlp_recipients': { - category: 'checkpoint', - description: 'Mail recipients. ', - name: 'checkpoint.dlp_recipients', - type: 'keyword', - }, - 'checkpoint.dlp_subject': { - category: 'checkpoint', - description: 'Mail subject. ', - name: 'checkpoint.dlp_subject', - type: 'keyword', - }, - 'checkpoint.dlp_word_list': { - category: 'checkpoint', - description: 'Phrases matched by data type. ', - name: 'checkpoint.dlp_word_list', - type: 'keyword', - }, - 'checkpoint.dlp_template_score': { - category: 'checkpoint', - description: 'Template data type match score. ', - name: 'checkpoint.dlp_template_score', - type: 'keyword', - }, - 'checkpoint.message_size': { - category: 'checkpoint', - description: 'Mail/post size. ', - name: 'checkpoint.message_size', - type: 'integer', - }, - 'checkpoint.dlp_incident_uid': { - category: 'checkpoint', - description: 'Unique ID of the matched rule. ', - name: 'checkpoint.dlp_incident_uid', - type: 'keyword', - }, - 'checkpoint.dlp_related_incident_uid': { - category: 'checkpoint', - description: 'Other ID related to this one. ', - name: 'checkpoint.dlp_related_incident_uid', - type: 'keyword', - }, - 'checkpoint.dlp_data_type_name': { - category: 'checkpoint', - description: 'Matched data type. ', - name: 'checkpoint.dlp_data_type_name', - type: 'keyword', - }, - 'checkpoint.dlp_data_type_uid': { - category: 'checkpoint', - description: 'Unique ID of the matched data type. ', - name: 'checkpoint.dlp_data_type_uid', - type: 'keyword', - }, - 'checkpoint.dlp_violation_description': { - category: 'checkpoint', - description: 'Violation descriptions described in the rulebase. ', - name: 'checkpoint.dlp_violation_description', - type: 'keyword', - }, - 'checkpoint.dlp_relevant_data_types': { - category: 'checkpoint', - description: 'In case of Compound/Group: the inner data types that were matched. ', - name: 'checkpoint.dlp_relevant_data_types', - type: 'keyword', - }, - 'checkpoint.dlp_action_reason': { - category: 'checkpoint', - description: 'Action chosen reason. ', - name: 'checkpoint.dlp_action_reason', - type: 'keyword', - }, - 'checkpoint.dlp_categories': { - category: 'checkpoint', - description: 'Data type category. ', - name: 'checkpoint.dlp_categories', - type: 'keyword', - }, - 'checkpoint.dlp_transint': { - category: 'checkpoint', - description: 'HTTP/SMTP/FTP. ', - name: 'checkpoint.dlp_transint', - type: 'keyword', - }, - 'checkpoint.duplicate': { - category: 'checkpoint', - description: - 'Log marked as duplicated, when mail is split and the Security Gateway sees it twice. ', - name: 'checkpoint.duplicate', - type: 'keyword', - }, - 'checkpoint.matched_file': { - category: 'checkpoint', - description: 'Unique ID of the matched data type. ', - name: 'checkpoint.matched_file', - type: 'keyword', - }, - 'checkpoint.matched_file_text_segments': { - category: 'checkpoint', - description: 'Fingerprint: number of text segments matched by this traffic. ', - name: 'checkpoint.matched_file_text_segments', - type: 'integer', - }, - 'checkpoint.matched_file_percentage': { - category: 'checkpoint', - description: 'Fingerprint: match percentage of the traffic. ', - name: 'checkpoint.matched_file_percentage', - type: 'integer', - }, - 'checkpoint.dlp_additional_action': { - category: 'checkpoint', - description: 'Watermark/None. ', - name: 'checkpoint.dlp_additional_action', - type: 'keyword', - }, - 'checkpoint.dlp_watermark_profile': { - category: 'checkpoint', - description: 'Watermark which was applied. ', - name: 'checkpoint.dlp_watermark_profile', - type: 'keyword', - }, - 'checkpoint.dlp_repository_id': { - category: 'checkpoint', - description: 'ID of scanned repository. ', - name: 'checkpoint.dlp_repository_id', - type: 'keyword', - }, - 'checkpoint.dlp_repository_root_path': { - category: 'checkpoint', - description: 'Repository path. ', - name: 'checkpoint.dlp_repository_root_path', - type: 'keyword', - }, - 'checkpoint.scan_id': { - category: 'checkpoint', - description: 'Sequential number of scan. ', - name: 'checkpoint.scan_id', - type: 'keyword', - }, - 'checkpoint.special_properties': { - category: 'checkpoint', - description: - "If this field is set to '1' the log will not be shown (in use for monitoring scan progress). ", - name: 'checkpoint.special_properties', - type: 'integer', - }, - 'checkpoint.dlp_repository_total_size': { - category: 'checkpoint', - description: 'Repository size. ', - name: 'checkpoint.dlp_repository_total_size', - type: 'integer', - }, - 'checkpoint.dlp_repository_files_number': { - category: 'checkpoint', - description: 'Number of files in repository. ', - name: 'checkpoint.dlp_repository_files_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_scanned_files_number': { - category: 'checkpoint', - description: 'Number of scanned files in repository. ', - name: 'checkpoint.dlp_repository_scanned_files_number', - type: 'integer', - }, - 'checkpoint.duration': { - category: 'checkpoint', - description: 'Scan duration. ', - name: 'checkpoint.duration', - type: 'keyword', - }, - 'checkpoint.dlp_fingerprint_long_status': { - category: 'checkpoint', - description: 'Scan status - long format. ', - name: 'checkpoint.dlp_fingerprint_long_status', - type: 'keyword', - }, - 'checkpoint.dlp_fingerprint_short_status': { - category: 'checkpoint', - description: 'Scan status - short format. ', - name: 'checkpoint.dlp_fingerprint_short_status', - type: 'keyword', - }, - 'checkpoint.dlp_repository_directories_number': { - category: 'checkpoint', - description: 'Number of directories in repository. ', - name: 'checkpoint.dlp_repository_directories_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_unreachable_directories_number': { - category: 'checkpoint', - description: 'Number of directories the Security Gateway was unable to read. ', - name: 'checkpoint.dlp_repository_unreachable_directories_number', - type: 'integer', - }, - 'checkpoint.dlp_fingerprint_files_number': { - category: 'checkpoint', - description: 'Number of successfully scanned files in repository. ', - name: 'checkpoint.dlp_fingerprint_files_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_skipped_files_number': { - category: 'checkpoint', - description: 'Skipped number of files because of configuration. ', - name: 'checkpoint.dlp_repository_skipped_files_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_scanned_directories_number': { - category: 'checkpoint', - description: 'Amount of directories scanned. ', - name: 'checkpoint.dlp_repository_scanned_directories_number', - type: 'integer', - }, - 'checkpoint.number_of_errors': { - category: 'checkpoint', - description: 'Number of files that were not scanned due to an error. ', - name: 'checkpoint.number_of_errors', - type: 'integer', - }, - 'checkpoint.next_scheduled_scan_date': { - category: 'checkpoint', - description: 'Next scan scheduled time according to time object. ', - name: 'checkpoint.next_scheduled_scan_date', - type: 'keyword', - }, - 'checkpoint.dlp_repository_scanned_total_size': { - category: 'checkpoint', - description: 'Size scanned. ', - name: 'checkpoint.dlp_repository_scanned_total_size', - type: 'integer', - }, - 'checkpoint.dlp_repository_reached_directories_number': { - category: 'checkpoint', - description: 'Number of scanned directories in repository. ', - name: 'checkpoint.dlp_repository_reached_directories_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_not_scanned_directories_percentage': { - category: 'checkpoint', - description: 'Percentage of directories the Security Gateway was unable to read. ', - name: 'checkpoint.dlp_repository_not_scanned_directories_percentage', - type: 'integer', - }, - 'checkpoint.speed': { - category: 'checkpoint', - description: 'Current scan speed. ', - name: 'checkpoint.speed', - type: 'integer', - }, - 'checkpoint.dlp_repository_scan_progress': { - category: 'checkpoint', - description: 'Scan percentage. ', - name: 'checkpoint.dlp_repository_scan_progress', - type: 'integer', - }, - 'checkpoint.sub_policy_name': { - category: 'checkpoint', - description: 'Layer name. ', - name: 'checkpoint.sub_policy_name', - type: 'keyword', - }, - 'checkpoint.sub_policy_uid': { - category: 'checkpoint', - description: 'Layer uid. ', - name: 'checkpoint.sub_policy_uid', - type: 'keyword', - }, - 'checkpoint.fw_message': { - category: 'checkpoint', - description: 'Used for various firewall errors. ', - name: 'checkpoint.fw_message', - type: 'keyword', - }, - 'checkpoint.message': { - category: 'checkpoint', - description: 'ISP link has failed. ', - name: 'checkpoint.message', - type: 'keyword', - }, - 'checkpoint.isp_link': { - category: 'checkpoint', - description: 'Name of ISP link. ', - name: 'checkpoint.isp_link', - type: 'keyword', - }, - 'checkpoint.fw_subproduct': { - category: 'checkpoint', - description: 'Can be vpn/non vpn. ', - name: 'checkpoint.fw_subproduct', - type: 'keyword', - }, - 'checkpoint.sctp_error': { - category: 'checkpoint', - description: 'Error information, what caused sctp to fail on out_of_state. ', - name: 'checkpoint.sctp_error', - type: 'keyword', - }, - 'checkpoint.chunk_type': { - category: 'checkpoint', - description: 'Chunck of the sctp stream. ', - name: 'checkpoint.chunk_type', - type: 'keyword', - }, - 'checkpoint.sctp_association_state': { - category: 'checkpoint', - description: 'The bad state you were trying to update to. ', - name: 'checkpoint.sctp_association_state', - type: 'keyword', - }, - 'checkpoint.tcp_packet_out_of_state': { - category: 'checkpoint', - description: 'State violation. ', - name: 'checkpoint.tcp_packet_out_of_state', - type: 'keyword', - }, - 'checkpoint.connectivity_level': { - category: 'checkpoint', - description: 'Log for a new connection in wire mode. ', - name: 'checkpoint.connectivity_level', - type: 'keyword', - }, - 'checkpoint.ip_option': { - category: 'checkpoint', - description: 'IP option that was dropped. ', - name: 'checkpoint.ip_option', - type: 'integer', - }, - 'checkpoint.tcp_state': { - category: 'checkpoint', - description: 'Log reinting a tcp state change. ', - name: 'checkpoint.tcp_state', - type: 'keyword', - }, - 'checkpoint.expire_time': { - category: 'checkpoint', - description: 'Connection closing time. ', - name: 'checkpoint.expire_time', - type: 'keyword', - }, - 'checkpoint.rpc_prog': { - category: 'checkpoint', - description: 'Log for new RPC state - prog values. ', - name: 'checkpoint.rpc_prog', - type: 'integer', - }, - 'checkpoint.dce-rpc_interface_uuid': { - category: 'checkpoint', - description: 'Log for new RPC state - UUID values ', - name: 'checkpoint.dce-rpc_interface_uuid', - type: 'keyword', - }, - 'checkpoint.elapsed': { - category: 'checkpoint', - description: 'Time passed since start time. ', - name: 'checkpoint.elapsed', - type: 'keyword', - }, - 'checkpoint.icmp': { - category: 'checkpoint', - description: 'Number of packets, received by the client. ', - name: 'checkpoint.icmp', - type: 'keyword', - }, - 'checkpoint.capture_uuid': { - category: 'checkpoint', - description: 'UUID generated for the capture. Used when enabling the capture when logging. ', - name: 'checkpoint.capture_uuid', - type: 'keyword', - }, - 'checkpoint.diameter_app_ID': { - category: 'checkpoint', - description: 'The ID of diameter application. ', - name: 'checkpoint.diameter_app_ID', - type: 'integer', - }, - 'checkpoint.diameter_cmd_code': { - category: 'checkpoint', - description: 'Diameter not allowed application command id. ', - name: 'checkpoint.diameter_cmd_code', - type: 'integer', - }, - 'checkpoint.diameter_msg_type': { - category: 'checkpoint', - description: 'Diameter message type. ', - name: 'checkpoint.diameter_msg_type', - type: 'keyword', - }, - 'checkpoint.cp_message': { - category: 'checkpoint', - description: 'Used to log a general message. ', - name: 'checkpoint.cp_message', - type: 'integer', - }, - 'checkpoint.log_delay': { - category: 'checkpoint', - description: 'Time left before deleting template. ', - name: 'checkpoint.log_delay', - type: 'integer', - }, - 'checkpoint.attack_status': { - category: 'checkpoint', - description: 'In case of a malicious event on an endpoint computer, the status of the attack. ', - name: 'checkpoint.attack_status', - type: 'keyword', - }, - 'checkpoint.impacted_files': { - category: 'checkpoint', - description: - 'In case of an infection on an endpoint computer, the list of files that the malware impacted. ', - name: 'checkpoint.impacted_files', - type: 'keyword', - }, - 'checkpoint.remediated_files': { - category: 'checkpoint', - description: - 'In case of an infection and a successful cleaning of that infection, this is a list of remediated files on the computer. ', - name: 'checkpoint.remediated_files', - type: 'keyword', - }, - 'checkpoint.triggered_by': { - category: 'checkpoint', - description: - 'The name of the mechanism that triggered the Software Blade to enforce a protection. ', - name: 'checkpoint.triggered_by', - type: 'keyword', - }, - 'checkpoint.https_inspection_rule_id': { - category: 'checkpoint', - description: 'ID of the matched rule. ', - name: 'checkpoint.https_inspection_rule_id', - type: 'keyword', - }, - 'checkpoint.https_inspection_rule_name': { - category: 'checkpoint', - description: 'Name of the matched rule. ', - name: 'checkpoint.https_inspection_rule_name', - type: 'keyword', - }, - 'checkpoint.app_properties': { - category: 'checkpoint', - description: 'List of all found categories. ', - name: 'checkpoint.app_properties', - type: 'keyword', - }, - 'checkpoint.https_validation': { - category: 'checkpoint', - description: 'Precise error, describing HTTPS inspection failure. ', - name: 'checkpoint.https_validation', - type: 'keyword', - }, - 'checkpoint.https_inspection_action': { - category: 'checkpoint', - description: 'HTTPS inspection action (Inspect/Bypass/Error). ', - name: 'checkpoint.https_inspection_action', - type: 'keyword', - }, - 'checkpoint.icap_service_id': { - category: 'checkpoint', - description: 'Service ID, can work with multiple servers, treated as services. ', - name: 'checkpoint.icap_service_id', - type: 'integer', - }, - 'checkpoint.icap_server_name': { - category: 'checkpoint', - description: 'Server name. ', - name: 'checkpoint.icap_server_name', - type: 'keyword', - }, - 'checkpoint.internal_error': { - category: 'checkpoint', - description: 'Internal error, for troubleshooting ', - name: 'checkpoint.internal_error', - type: 'keyword', - }, - 'checkpoint.icap_more_info': { - category: 'checkpoint', - description: 'Free text for verdict. ', - name: 'checkpoint.icap_more_info', - type: 'integer', - }, - 'checkpoint.reply_status': { - category: 'checkpoint', - description: 'ICAP reply status code, e.g. 200 or 204. ', - name: 'checkpoint.reply_status', - type: 'integer', - }, - 'checkpoint.icap_server_service': { - category: 'checkpoint', - description: 'Service name, as given in the ICAP URI ', - name: 'checkpoint.icap_server_service', - type: 'keyword', - }, - 'checkpoint.mirror_and_decrypt_type': { - category: 'checkpoint', - description: - 'Information about decrypt and forward. Possible values: Mirror only, Decrypt and mirror, Partial mirroring (HTTPS inspection Bypass). ', - name: 'checkpoint.mirror_and_decrypt_type', - type: 'keyword', - }, - 'checkpoint.interface_name': { - category: 'checkpoint', - description: 'Designated interface for mirror And decrypt. ', - name: 'checkpoint.interface_name', - type: 'keyword', - }, - 'checkpoint.session_uid': { - category: 'checkpoint', - description: 'HTTP session-id. ', - name: 'checkpoint.session_uid', - type: 'keyword', - }, - 'checkpoint.broker_publisher': { - category: 'checkpoint', - description: 'IP address of the broker publisher who shared the session information. ', - name: 'checkpoint.broker_publisher', - type: 'ip', - }, - 'checkpoint.src_user_dn': { - category: 'checkpoint', - description: 'User distinguished name connected to source IP. ', - name: 'checkpoint.src_user_dn', - type: 'keyword', - }, - 'checkpoint.proxy_user_name': { - category: 'checkpoint', - description: 'User name connected to proxy IP. ', - name: 'checkpoint.proxy_user_name', - type: 'keyword', - }, - 'checkpoint.proxy_machine_name': { - category: 'checkpoint', - description: 'Machine name connected to proxy IP. ', - name: 'checkpoint.proxy_machine_name', - type: 'integer', - }, - 'checkpoint.proxy_user_dn': { - category: 'checkpoint', - description: 'User distinguished name connected to proxy IP. ', - name: 'checkpoint.proxy_user_dn', - type: 'keyword', - }, - 'checkpoint.query': { - category: 'checkpoint', - description: 'DNS query. ', - name: 'checkpoint.query', - type: 'keyword', - }, - 'checkpoint.dns_query': { - category: 'checkpoint', - description: 'DNS query. ', - name: 'checkpoint.dns_query', - type: 'keyword', - }, - 'checkpoint.inspection_item': { - category: 'checkpoint', - description: 'Blade element performed inspection. ', - name: 'checkpoint.inspection_item', - type: 'keyword', - }, - 'checkpoint.inspection_category': { - category: 'checkpoint', - description: 'Inspection category: protocol anomaly, signature etc. ', - name: 'checkpoint.inspection_category', - type: 'keyword', - }, - 'checkpoint.inspection_profile': { - category: 'checkpoint', - description: 'Profile which the activated protection belongs to. ', - name: 'checkpoint.inspection_profile', - type: 'keyword', - }, - 'checkpoint.summary': { - category: 'checkpoint', - description: 'Summary message of a non-compliant DNS traffic drops or detects. ', - name: 'checkpoint.summary', - type: 'keyword', - }, - 'checkpoint.question_rdata': { - category: 'checkpoint', - description: 'List of question records domains. ', - name: 'checkpoint.question_rdata', - type: 'keyword', - }, - 'checkpoint.answer_rdata': { - category: 'checkpoint', - description: 'List of answer resource records to the questioned domains. ', - name: 'checkpoint.answer_rdata', - type: 'keyword', - }, - 'checkpoint.authority_rdata': { - category: 'checkpoint', - description: 'List of authoritative servers. ', - name: 'checkpoint.authority_rdata', - type: 'keyword', - }, - 'checkpoint.additional_rdata': { - category: 'checkpoint', - description: 'List of additional resource records. ', - name: 'checkpoint.additional_rdata', - type: 'keyword', - }, - 'checkpoint.files_names': { - category: 'checkpoint', - description: 'List of files requested by FTP. ', - name: 'checkpoint.files_names', - type: 'keyword', - }, - 'checkpoint.ftp_user': { - category: 'checkpoint', - description: 'FTP username. ', - name: 'checkpoint.ftp_user', - type: 'keyword', - }, - 'checkpoint.mime_from': { - category: 'checkpoint', - description: "Sender's address. ", - name: 'checkpoint.mime_from', - type: 'keyword', - }, - 'checkpoint.mime_to': { - category: 'checkpoint', - description: 'List of receiver address. ', - name: 'checkpoint.mime_to', - type: 'keyword', - }, - 'checkpoint.bcc': { - category: 'checkpoint', - description: 'List of BCC addresses. ', - name: 'checkpoint.bcc', - type: 'keyword', - }, - 'checkpoint.content_type': { - category: 'checkpoint', - description: - 'Mail content type. Possible values: application/msword, text/html, image/gif etc. ', - name: 'checkpoint.content_type', - type: 'keyword', - }, - 'checkpoint.user_agent': { - category: 'checkpoint', - description: 'String identifying requesting software user agent. ', - name: 'checkpoint.user_agent', - type: 'keyword', - }, - 'checkpoint.referrer': { - category: 'checkpoint', - description: 'Referrer HTTP request header, previous web page address. ', - name: 'checkpoint.referrer', - type: 'keyword', - }, - 'checkpoint.http_location': { - category: 'checkpoint', - description: 'Response header, indicates the URL to redirect a page to. ', - name: 'checkpoint.http_location', - type: 'keyword', - }, - 'checkpoint.content_disposition': { - category: 'checkpoint', - description: 'Indicates how the content is expected to be displayed inline in the browser. ', - name: 'checkpoint.content_disposition', - type: 'keyword', - }, - 'checkpoint.via': { - category: 'checkpoint', - description: - 'Via header is added by proxies for tracking purposes to avoid sending reqests in loop. ', - name: 'checkpoint.via', - type: 'keyword', - }, - 'checkpoint.http_server': { - category: 'checkpoint', - description: - 'Server HTTP header value, contains information about the software used by the origin server, which handles the request. ', - name: 'checkpoint.http_server', - type: 'keyword', - }, - 'checkpoint.content_length': { - category: 'checkpoint', - description: 'Indicates the size of the entity-body of the HTTP header. ', - name: 'checkpoint.content_length', - type: 'keyword', - }, - 'checkpoint.authorization': { - category: 'checkpoint', - description: 'Authorization HTTP header value. ', - name: 'checkpoint.authorization', - type: 'keyword', - }, - 'checkpoint.http_host': { - category: 'checkpoint', - description: 'Domain name of the server that the HTTP request is sent to. ', - name: 'checkpoint.http_host', - type: 'keyword', - }, - 'checkpoint.inspection_settings_log': { - category: 'checkpoint', - description: 'Indicats that the log was released by inspection settings. ', - name: 'checkpoint.inspection_settings_log', - type: 'keyword', - }, - 'checkpoint.cvpn_resource': { - category: 'checkpoint', - description: 'Mobile Access application. ', - name: 'checkpoint.cvpn_resource', - type: 'keyword', - }, - 'checkpoint.cvpn_category': { - category: 'checkpoint', - description: 'Mobile Access application type. ', - name: 'checkpoint.cvpn_category', - type: 'keyword', - }, - 'checkpoint.url': { - category: 'checkpoint', - description: 'Translated URL. ', - name: 'checkpoint.url', - type: 'keyword', - }, - 'checkpoint.reject_id': { - category: 'checkpoint', - description: - 'A reject ID that corresponds to the one presented in the Mobile Access error page. ', - name: 'checkpoint.reject_id', - type: 'keyword', - }, - 'checkpoint.fs-proto': { - category: 'checkpoint', - description: 'The file share protocol used in mobile acess file share application. ', - name: 'checkpoint.fs-proto', - type: 'keyword', - }, - 'checkpoint.app_package': { - category: 'checkpoint', - description: 'Unique identifier of the application on the protected mobile device. ', - name: 'checkpoint.app_package', - type: 'keyword', - }, - 'checkpoint.appi_name': { - category: 'checkpoint', - description: 'Name of application downloaded on the protected mobile device. ', - name: 'checkpoint.appi_name', - type: 'keyword', - }, - 'checkpoint.app_repackaged': { - category: 'checkpoint', - description: - 'Indicates whether the original application was repackage not by the official developer. ', - name: 'checkpoint.app_repackaged', - type: 'keyword', - }, - 'checkpoint.app_sid_id': { - category: 'checkpoint', - description: 'Unique SHA identifier of a mobile application. ', - name: 'checkpoint.app_sid_id', - type: 'keyword', - }, - 'checkpoint.app_version': { - category: 'checkpoint', - description: 'Version of the application downloaded on the protected mobile device. ', - name: 'checkpoint.app_version', - type: 'keyword', - }, - 'checkpoint.developer_certificate_name': { - category: 'checkpoint', - description: - "Name of the developer's certificate that was used to sign the mobile application. ", - name: 'checkpoint.developer_certificate_name', - type: 'keyword', - }, - 'checkpoint.email_message_id': { - category: 'checkpoint', - description: 'Email session id (uniqe ID of the mail). ', - name: 'checkpoint.email_message_id', - type: 'keyword', - }, - 'checkpoint.email_queue_id': { - category: 'checkpoint', - description: 'Postfix email queue id. ', - name: 'checkpoint.email_queue_id', - type: 'keyword', - }, - 'checkpoint.email_queue_name': { - category: 'checkpoint', - description: 'Postfix email queue name. ', - name: 'checkpoint.email_queue_name', - type: 'keyword', - }, - 'checkpoint.file_name': { - category: 'checkpoint', - description: 'Malicious file name. ', - name: 'checkpoint.file_name', - type: 'keyword', - }, - 'checkpoint.failure_reason': { - category: 'checkpoint', - description: 'MTA failure description. ', - name: 'checkpoint.failure_reason', - type: 'keyword', - }, - 'checkpoint.email_headers': { - category: 'checkpoint', - description: 'String containing all the email headers. ', - name: 'checkpoint.email_headers', - type: 'keyword', - }, - 'checkpoint.arrival_time': { - category: 'checkpoint', - description: 'Email arrival timestamp. ', - name: 'checkpoint.arrival_time', - type: 'keyword', - }, - 'checkpoint.email_status': { - category: 'checkpoint', - description: - "Describes the email's state. Possible options: delivered, deferred, skipped, bounced, hold, new, scan_started, scan_ended ", - name: 'checkpoint.email_status', - type: 'keyword', - }, - 'checkpoint.status_update': { - category: 'checkpoint', - description: 'Last time log was updated. ', - name: 'checkpoint.status_update', - type: 'keyword', - }, - 'checkpoint.delivery_time': { - category: 'checkpoint', - description: 'Timestamp of when email was delivered (MTA finished handling the email. ', - name: 'checkpoint.delivery_time', - type: 'keyword', - }, - 'checkpoint.links_num': { - category: 'checkpoint', - description: 'Number of links in the mail. ', - name: 'checkpoint.links_num', - type: 'integer', - }, - 'checkpoint.attachments_num': { - category: 'checkpoint', - description: 'Number of attachments in the mail. ', - name: 'checkpoint.attachments_num', - type: 'integer', - }, - 'checkpoint.email_content': { - category: 'checkpoint', - description: - 'Mail contents. Possible options: attachments/links & attachments/links/text only. ', - name: 'checkpoint.email_content', - type: 'keyword', - }, - 'checkpoint.allocated_ports': { - category: 'checkpoint', - description: 'Amount of allocated ports. ', - name: 'checkpoint.allocated_ports', - type: 'integer', - }, - 'checkpoint.capacity': { - category: 'checkpoint', - description: 'Capacity of the ports. ', - name: 'checkpoint.capacity', - type: 'integer', - }, - 'checkpoint.ports_usage': { - category: 'checkpoint', - description: 'Percentage of allocated ports. ', - name: 'checkpoint.ports_usage', - type: 'integer', - }, - 'checkpoint.nat_exhausted_pool': { - category: 'checkpoint', - description: '4-tuple of an exhausted pool. ', - name: 'checkpoint.nat_exhausted_pool', - type: 'keyword', - }, - 'checkpoint.nat_rulenum': { - category: 'checkpoint', - description: 'NAT rulebase first matched rule. ', - name: 'checkpoint.nat_rulenum', - type: 'integer', - }, - 'checkpoint.nat_addtnl_rulenum': { - category: 'checkpoint', - description: - 'When matching 2 automatic rules , second rule match will be shown otherwise field will be 0. ', - name: 'checkpoint.nat_addtnl_rulenum', - type: 'integer', - }, - 'checkpoint.message_info': { - category: 'checkpoint', - description: 'Used for information messages, for example:NAT connection has ended. ', - name: 'checkpoint.message_info', - type: 'keyword', - }, - 'checkpoint.nat46': { - category: 'checkpoint', - description: 'NAT 46 status, in most cases "enabled". ', - name: 'checkpoint.nat46', - type: 'keyword', - }, - 'checkpoint.end_time': { - category: 'checkpoint', - description: 'TCP connection end time. ', - name: 'checkpoint.end_time', - type: 'keyword', - }, - 'checkpoint.tcp_end_reason': { - category: 'checkpoint', - description: 'Reason for TCP connection closure. ', - name: 'checkpoint.tcp_end_reason', - type: 'keyword', - }, - 'checkpoint.cgnet': { - category: 'checkpoint', - description: 'Describes NAT allocation for specific subscriber. ', - name: 'checkpoint.cgnet', - type: 'keyword', - }, - 'checkpoint.subscriber': { - category: 'checkpoint', - description: 'Source IP before CGNAT. ', - name: 'checkpoint.subscriber', - type: 'ip', - }, - 'checkpoint.hide_ip': { - category: 'checkpoint', - description: 'Source IP which will be used after CGNAT. ', - name: 'checkpoint.hide_ip', - type: 'ip', - }, - 'checkpoint.int_start': { - category: 'checkpoint', - description: 'Subscriber start int which will be used for NAT. ', - name: 'checkpoint.int_start', - type: 'integer', - }, - 'checkpoint.int_end': { - category: 'checkpoint', - description: 'Subscriber end int which will be used for NAT. ', - name: 'checkpoint.int_end', - type: 'integer', - }, - 'checkpoint.packet_amount': { - category: 'checkpoint', - description: 'Amount of packets dropped. ', - name: 'checkpoint.packet_amount', - type: 'integer', - }, - 'checkpoint.monitor_reason': { - category: 'checkpoint', - description: 'Aggregated logs of monitored packets. ', - name: 'checkpoint.monitor_reason', - type: 'keyword', - }, - 'checkpoint.drops_amount': { - category: 'checkpoint', - description: 'Amount of multicast packets dropped. ', - name: 'checkpoint.drops_amount', - type: 'integer', - }, - 'checkpoint.securexl_message': { - category: 'checkpoint', - description: - 'Two options for a SecureXL message: 1. Missed accounting records after heavy load on logging system. 2. FW log message regarding a packet drop. ', - name: 'checkpoint.securexl_message', - type: 'keyword', - }, - 'checkpoint.conns_amount': { - category: 'checkpoint', - description: 'Connections amount of aggregated log info. ', - name: 'checkpoint.conns_amount', - type: 'integer', - }, - 'checkpoint.scope': { - category: 'checkpoint', - description: 'IP related to the attack. ', - name: 'checkpoint.scope', - type: 'keyword', - }, - 'checkpoint.analyzed_on': { - category: 'checkpoint', - description: 'Check Point ThreatCloud / emulator name. ', - name: 'checkpoint.analyzed_on', - type: 'keyword', - }, - 'checkpoint.detected_on': { - category: 'checkpoint', - description: 'System and applications version the file was emulated on. ', - name: 'checkpoint.detected_on', - type: 'keyword', - }, - 'checkpoint.dropped_file_name': { - category: 'checkpoint', - description: 'List of names dropped from the original file. ', - name: 'checkpoint.dropped_file_name', - type: 'keyword', - }, - 'checkpoint.dropped_file_type': { - category: 'checkpoint', - description: 'List of file types dropped from the original file. ', - name: 'checkpoint.dropped_file_type', - type: 'keyword', - }, - 'checkpoint.dropped_file_hash': { - category: 'checkpoint', - description: 'List of file hashes dropped from the original file. ', - name: 'checkpoint.dropped_file_hash', - type: 'keyword', - }, - 'checkpoint.dropped_file_verdict': { - category: 'checkpoint', - description: 'List of file verdics dropped from the original file. ', - name: 'checkpoint.dropped_file_verdict', - type: 'keyword', - }, - 'checkpoint.emulated_on': { - category: 'checkpoint', - description: 'Images the files were emulated on. ', - name: 'checkpoint.emulated_on', - type: 'keyword', - }, - 'checkpoint.extracted_file_type': { - category: 'checkpoint', - description: 'Types of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_type', - type: 'keyword', - }, - 'checkpoint.extracted_file_names': { - category: 'checkpoint', - description: 'Names of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_names', - type: 'keyword', - }, - 'checkpoint.extracted_file_hash': { - category: 'checkpoint', - description: 'Archive hash in case of extracted files. ', - name: 'checkpoint.extracted_file_hash', - type: 'keyword', - }, - 'checkpoint.extracted_file_verdict': { - category: 'checkpoint', - description: 'Verdict of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_verdict', - type: 'keyword', - }, - 'checkpoint.extracted_file_uid': { - category: 'checkpoint', - description: 'UID of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_uid', - type: 'keyword', - }, - 'checkpoint.mitre_initial_access': { - category: 'checkpoint', - description: 'The adversary is trying to break into your network. ', - name: 'checkpoint.mitre_initial_access', - type: 'keyword', - }, - 'checkpoint.mitre_execution': { - category: 'checkpoint', - description: 'The adversary is trying to run malicious code. ', - name: 'checkpoint.mitre_execution', - type: 'keyword', - }, - 'checkpoint.mitre_persistence': { - category: 'checkpoint', - description: 'The adversary is trying to maintain his foothold. ', - name: 'checkpoint.mitre_persistence', - type: 'keyword', - }, - 'checkpoint.mitre_privilege_escalation': { - category: 'checkpoint', - description: 'The adversary is trying to gain higher-level permissions. ', - name: 'checkpoint.mitre_privilege_escalation', - type: 'keyword', - }, - 'checkpoint.mitre_defense_evasion': { - category: 'checkpoint', - description: 'The adversary is trying to avoid being detected. ', - name: 'checkpoint.mitre_defense_evasion', - type: 'keyword', - }, - 'checkpoint.mitre_credential_access': { - category: 'checkpoint', - description: 'The adversary is trying to steal account names and passwords. ', - name: 'checkpoint.mitre_credential_access', - type: 'keyword', - }, - 'checkpoint.mitre_discovery': { - category: 'checkpoint', - description: 'The adversary is trying to expose information about your environment. ', - name: 'checkpoint.mitre_discovery', - type: 'keyword', - }, - 'checkpoint.mitre_lateral_movement': { - category: 'checkpoint', - description: 'The adversary is trying to explore your environment. ', - name: 'checkpoint.mitre_lateral_movement', - type: 'keyword', - }, - 'checkpoint.mitre_collection': { - category: 'checkpoint', - description: 'The adversary is trying to collect data of interest to achieve his goal. ', - name: 'checkpoint.mitre_collection', - type: 'keyword', - }, - 'checkpoint.mitre_command_and_control': { - category: 'checkpoint', - description: - 'The adversary is trying to communicate with compromised systems in order to control them. ', - name: 'checkpoint.mitre_command_and_control', - type: 'keyword', - }, - 'checkpoint.mitre_exfiltration': { - category: 'checkpoint', - description: 'The adversary is trying to steal data. ', - name: 'checkpoint.mitre_exfiltration', - type: 'keyword', - }, - 'checkpoint.mitre_impact': { - category: 'checkpoint', - description: - 'The adversary is trying to manipulate, interrupt, or destroy your systems and data. ', - name: 'checkpoint.mitre_impact', - type: 'keyword', - }, - 'checkpoint.parent_file_hash': { - category: 'checkpoint', - description: "Archive's hash in case of extracted files. ", - name: 'checkpoint.parent_file_hash', - type: 'keyword', - }, - 'checkpoint.parent_file_name': { - category: 'checkpoint', - description: "Archive's name in case of extracted files. ", - name: 'checkpoint.parent_file_name', - type: 'keyword', - }, - 'checkpoint.parent_file_uid': { - category: 'checkpoint', - description: "Archive's UID in case of extracted files. ", - name: 'checkpoint.parent_file_uid', - type: 'keyword', - }, - 'checkpoint.similiar_iocs': { - category: 'checkpoint', - description: 'Other IoCs similar to the ones found, related to the malicious file. ', - name: 'checkpoint.similiar_iocs', - type: 'keyword', - }, - 'checkpoint.similar_hashes': { - category: 'checkpoint', - description: 'Hashes found similar to the malicious file. ', - name: 'checkpoint.similar_hashes', - type: 'keyword', - }, - 'checkpoint.similar_strings': { - category: 'checkpoint', - description: 'Strings found similar to the malicious file. ', - name: 'checkpoint.similar_strings', - type: 'keyword', - }, - 'checkpoint.similar_communication': { - category: 'checkpoint', - description: 'Network action found similar to the malicious file. ', - name: 'checkpoint.similar_communication', - type: 'keyword', - }, - 'checkpoint.te_verdict_determined_by': { - category: 'checkpoint', - description: 'Emulators determined file verdict. ', - name: 'checkpoint.te_verdict_determined_by', - type: 'keyword', - }, - 'checkpoint.packet_capture_unique_id': { - category: 'checkpoint', - description: 'Identifier of the packet capture files. ', - name: 'checkpoint.packet_capture_unique_id', - type: 'keyword', - }, - 'checkpoint.total_attachments': { - category: 'checkpoint', - description: 'The number of attachments in an email. ', - name: 'checkpoint.total_attachments', - type: 'integer', - }, - 'checkpoint.additional_info': { - category: 'checkpoint', - description: 'ID of original file/mail which are sent by admin. ', - name: 'checkpoint.additional_info', - type: 'keyword', - }, - 'checkpoint.content_risk': { - category: 'checkpoint', - description: 'File risk. ', - name: 'checkpoint.content_risk', - type: 'integer', - }, - 'checkpoint.operation': { - category: 'checkpoint', - description: 'Operation made by Threat Extraction. ', - name: 'checkpoint.operation', - type: 'keyword', - }, - 'checkpoint.scrubbed_content': { - category: 'checkpoint', - description: 'Active content that was found. ', - name: 'checkpoint.scrubbed_content', - type: 'keyword', - }, - 'checkpoint.scrub_time': { - category: 'checkpoint', - description: 'Extraction process duration. ', - name: 'checkpoint.scrub_time', - type: 'keyword', - }, - 'checkpoint.scrub_download_time': { - category: 'checkpoint', - description: 'File download time from resource. ', - name: 'checkpoint.scrub_download_time', - type: 'keyword', - }, - 'checkpoint.scrub_total_time': { - category: 'checkpoint', - description: 'Threat extraction total file handling time. ', - name: 'checkpoint.scrub_total_time', - type: 'keyword', - }, - 'checkpoint.scrub_activity': { - category: 'checkpoint', - description: 'The result of the extraction ', - name: 'checkpoint.scrub_activity', - type: 'keyword', - }, - 'checkpoint.watermark': { - category: 'checkpoint', - description: 'Reports whether watermark is added to the cleaned file. ', - name: 'checkpoint.watermark', - type: 'keyword', - }, - 'checkpoint.source_object': { - category: 'checkpoint', - description: 'Matched object name on source column. ', - name: 'checkpoint.source_object', - type: 'keyword', - }, - 'checkpoint.destination_object': { - category: 'checkpoint', - description: 'Matched object name on destination column. ', - name: 'checkpoint.destination_object', - type: 'keyword', - }, - 'checkpoint.drop_reason': { - category: 'checkpoint', - description: 'Drop reason description. ', - name: 'checkpoint.drop_reason', - type: 'keyword', - }, - 'checkpoint.hit': { - category: 'checkpoint', - description: 'Number of hits on a rule. ', - name: 'checkpoint.hit', - type: 'integer', - }, - 'checkpoint.rulebase_id': { - category: 'checkpoint', - description: 'Layer number. ', - name: 'checkpoint.rulebase_id', - type: 'integer', - }, - 'checkpoint.first_hit_time': { - category: 'checkpoint', - description: 'First hit time in current interval. ', - name: 'checkpoint.first_hit_time', - type: 'integer', - }, - 'checkpoint.last_hit_time': { - category: 'checkpoint', - description: 'Last hit time in current interval. ', - name: 'checkpoint.last_hit_time', - type: 'integer', - }, - 'checkpoint.rematch_info': { - category: 'checkpoint', - description: - 'Information sent when old connections cannot be matched during policy installation. ', - name: 'checkpoint.rematch_info', - type: 'keyword', - }, - 'checkpoint.last_rematch_time': { - category: 'checkpoint', - description: 'Connection rematched time. ', - name: 'checkpoint.last_rematch_time', - type: 'keyword', - }, - 'checkpoint.action_reason': { - category: 'checkpoint', - description: 'Connection drop reason. ', - name: 'checkpoint.action_reason', - type: 'integer', - }, - 'checkpoint.action_reason_msg': { - category: 'checkpoint', - description: 'Connection drop reason message. ', - name: 'checkpoint.action_reason_msg', - type: 'keyword', - }, - 'checkpoint.c_bytes': { - category: 'checkpoint', - description: 'Boolean value indicates whether bytes sent from the client side are used. ', - name: 'checkpoint.c_bytes', - type: 'integer', - }, - 'checkpoint.context_num': { - category: 'checkpoint', - description: 'Serial number of the log for a specific connection. ', - name: 'checkpoint.context_num', - type: 'integer', - }, - 'checkpoint.match_id': { - category: 'checkpoint', - description: 'Private key of the rule ', - name: 'checkpoint.match_id', - type: 'integer', - }, - 'checkpoint.alert': { - category: 'checkpoint', - description: 'Alert level of matched rule (for connection logs). ', - name: 'checkpoint.alert', - type: 'keyword', - }, - 'checkpoint.parent_rule': { - category: 'checkpoint', - description: 'Parent rule number, in case of inline layer. ', - name: 'checkpoint.parent_rule', - type: 'integer', - }, - 'checkpoint.match_fk': { - category: 'checkpoint', - description: 'Rule number. ', - name: 'checkpoint.match_fk', - type: 'integer', - }, - 'checkpoint.dropped_outgoing': { - category: 'checkpoint', - description: 'Number of outgoing bytes dropped when using UP-limit feature. ', - name: 'checkpoint.dropped_outgoing', - type: 'integer', - }, - 'checkpoint.dropped_incoming': { - category: 'checkpoint', - description: 'Number of incoming bytes dropped when using UP-limit feature. ', - name: 'checkpoint.dropped_incoming', - type: 'integer', - }, - 'checkpoint.media_type': { - category: 'checkpoint', - description: 'Media used (audio, video, etc.) ', - name: 'checkpoint.media_type', - type: 'keyword', - }, - 'checkpoint.sip_reason': { - category: 'checkpoint', - description: "Explains why 'source_ip' isn't allowed to redirect (handover). ", - name: 'checkpoint.sip_reason', - type: 'keyword', - }, - 'checkpoint.voip_method': { - category: 'checkpoint', - description: 'Registration request. ', - name: 'checkpoint.voip_method', - type: 'keyword', - }, - 'checkpoint.registered_ip-phones': { - category: 'checkpoint', - description: 'Registered IP-Phones. ', - name: 'checkpoint.registered_ip-phones', - type: 'keyword', - }, - 'checkpoint.voip_reg_user_type': { - category: 'checkpoint', - description: 'Registered IP-Phone type. ', - name: 'checkpoint.voip_reg_user_type', - type: 'keyword', - }, - 'checkpoint.voip_call_id': { - category: 'checkpoint', - description: 'Call-ID. ', - name: 'checkpoint.voip_call_id', - type: 'keyword', - }, - 'checkpoint.voip_reg_int': { - category: 'checkpoint', - description: 'Registration port. ', - name: 'checkpoint.voip_reg_int', - type: 'integer', - }, - 'checkpoint.voip_reg_ipp': { - category: 'checkpoint', - description: 'Registration IP protocol. ', - name: 'checkpoint.voip_reg_ipp', - type: 'integer', - }, - 'checkpoint.voip_reg_period': { - category: 'checkpoint', - description: 'Registration period. ', - name: 'checkpoint.voip_reg_period', - type: 'integer', - }, - 'checkpoint.src_phone_number': { - category: 'checkpoint', - description: 'Source IP-Phone. ', - name: 'checkpoint.src_phone_number', - type: 'keyword', - }, - 'checkpoint.voip_from_user_type': { - category: 'checkpoint', - description: 'Source IP-Phone type. ', - name: 'checkpoint.voip_from_user_type', - type: 'keyword', - }, - 'checkpoint.voip_to_user_type': { - category: 'checkpoint', - description: 'Destination IP-Phone type. ', - name: 'checkpoint.voip_to_user_type', - type: 'keyword', - }, - 'checkpoint.voip_call_dir': { - category: 'checkpoint', - description: 'Call direction: in/out. ', - name: 'checkpoint.voip_call_dir', - type: 'keyword', - }, - 'checkpoint.voip_call_state': { - category: 'checkpoint', - description: 'Call state. Possible values: in/out. ', - name: 'checkpoint.voip_call_state', - type: 'keyword', - }, - 'checkpoint.voip_call_term_time': { - category: 'checkpoint', - description: 'Call termination time stamp. ', - name: 'checkpoint.voip_call_term_time', - type: 'keyword', - }, - 'checkpoint.voip_duration': { - category: 'checkpoint', - description: 'Call duration (seconds). ', - name: 'checkpoint.voip_duration', - type: 'keyword', - }, - 'checkpoint.voip_media_port': { - category: 'checkpoint', - description: 'Media int. ', - name: 'checkpoint.voip_media_port', - type: 'keyword', - }, - 'checkpoint.voip_media_ipp': { - category: 'checkpoint', - description: 'Media IP protocol. ', - name: 'checkpoint.voip_media_ipp', - type: 'keyword', - }, - 'checkpoint.voip_est_codec': { - category: 'checkpoint', - description: 'Estimated codec. ', - name: 'checkpoint.voip_est_codec', - type: 'keyword', - }, - 'checkpoint.voip_exp': { - category: 'checkpoint', - description: 'Expiration. ', - name: 'checkpoint.voip_exp', - type: 'integer', - }, - 'checkpoint.voip_attach_sz': { - category: 'checkpoint', - description: 'Attachment size. ', - name: 'checkpoint.voip_attach_sz', - type: 'integer', - }, - 'checkpoint.voip_attach_action_info': { - category: 'checkpoint', - description: 'Attachment action Info. ', - name: 'checkpoint.voip_attach_action_info', - type: 'keyword', - }, - 'checkpoint.voip_media_codec': { - category: 'checkpoint', - description: 'Estimated codec. ', - name: 'checkpoint.voip_media_codec', - type: 'keyword', - }, - 'checkpoint.voip_reject_reason': { - category: 'checkpoint', - description: 'Reject reason. ', - name: 'checkpoint.voip_reject_reason', - type: 'keyword', - }, - 'checkpoint.voip_reason_info': { - category: 'checkpoint', - description: 'Information. ', - name: 'checkpoint.voip_reason_info', - type: 'keyword', - }, - 'checkpoint.voip_config': { - category: 'checkpoint', - description: 'Configuration. ', - name: 'checkpoint.voip_config', - type: 'keyword', - }, - 'checkpoint.voip_reg_server': { - category: 'checkpoint', - description: 'Registrar server IP address. ', - name: 'checkpoint.voip_reg_server', - type: 'ip', - }, - 'checkpoint.scv_user': { - category: 'checkpoint', - description: 'Username whose packets are dropped on SCV. ', - name: 'checkpoint.scv_user', - type: 'keyword', - }, - 'checkpoint.scv_message_info': { - category: 'checkpoint', - description: 'Drop reason. ', - name: 'checkpoint.scv_message_info', - type: 'keyword', - }, - 'checkpoint.ppp': { - category: 'checkpoint', - description: 'Authentication status. ', - name: 'checkpoint.ppp', - type: 'keyword', - }, - 'checkpoint.scheme': { - category: 'checkpoint', - description: 'Describes the scheme used for the log. ', - name: 'checkpoint.scheme', - type: 'keyword', - }, - 'checkpoint.machine': { - category: 'checkpoint', - description: 'L2TP machine which triggered the log and the log refers to it. ', - name: 'checkpoint.machine', - type: 'keyword', - }, - 'checkpoint.vpn_feature_name': { - category: 'checkpoint', - description: 'L2TP /IKE / Link Selection. ', - name: 'checkpoint.vpn_feature_name', - type: 'keyword', - }, - 'checkpoint.reject_category': { - category: 'checkpoint', - description: 'Authentication failure reason. ', - name: 'checkpoint.reject_category', - type: 'keyword', - }, - 'checkpoint.peer_ip_probing_status_update': { - category: 'checkpoint', - description: 'IP address response status. ', - name: 'checkpoint.peer_ip_probing_status_update', - type: 'keyword', - }, - 'checkpoint.peer_ip': { - category: 'checkpoint', - description: 'IP address which the client connects to. ', - name: 'checkpoint.peer_ip', - type: 'keyword', - }, - 'checkpoint.link_probing_status_update': { - category: 'checkpoint', - description: 'IP address response status. ', - name: 'checkpoint.link_probing_status_update', - type: 'keyword', - }, - 'checkpoint.source_interface': { - category: 'checkpoint', - description: 'External Interface name for source interface or Null if not found. ', - name: 'checkpoint.source_interface', - type: 'keyword', - }, - 'checkpoint.next_hop_ip': { - category: 'checkpoint', - description: 'Next hop IP address. ', - name: 'checkpoint.next_hop_ip', - type: 'keyword', - }, - 'checkpoint.srckeyid': { - category: 'checkpoint', - description: 'Initiator Spi ID. ', - name: 'checkpoint.srckeyid', - type: 'keyword', - }, - 'checkpoint.dstkeyid': { - category: 'checkpoint', - description: 'Responder Spi ID. ', - name: 'checkpoint.dstkeyid', - type: 'keyword', - }, - 'checkpoint.encryption_failure': { - category: 'checkpoint', - description: 'Message indicating why the encryption failed. ', - name: 'checkpoint.encryption_failure', - type: 'keyword', - }, - 'checkpoint.ike_ids': { - category: 'checkpoint', - description: 'All QM ids. ', - name: 'checkpoint.ike_ids', - type: 'keyword', - }, - 'checkpoint.community': { - category: 'checkpoint', - description: 'Community name for the IPSec key and the use of the IKEv. ', - name: 'checkpoint.community', - type: 'keyword', - }, - 'checkpoint.ike': { - category: 'checkpoint', - description: 'IKEMode (PHASE1, PHASE2, etc..). ', - name: 'checkpoint.ike', - type: 'keyword', - }, - 'checkpoint.cookieI': { - category: 'checkpoint', - description: 'Initiator cookie. ', - name: 'checkpoint.cookieI', - type: 'keyword', - }, - 'checkpoint.cookieR': { - category: 'checkpoint', - description: 'Responder cookie. ', - name: 'checkpoint.cookieR', - type: 'keyword', - }, - 'checkpoint.msgid': { - category: 'checkpoint', - description: 'Message ID. ', - name: 'checkpoint.msgid', - type: 'keyword', - }, - 'checkpoint.methods': { - category: 'checkpoint', - description: 'IPSEc methods. ', - name: 'checkpoint.methods', - type: 'keyword', - }, - 'checkpoint.connection_uid': { - category: 'checkpoint', - description: 'Calculation of md5 of the IP and user name as UID. ', - name: 'checkpoint.connection_uid', - type: 'keyword', - }, - 'checkpoint.site_name': { - category: 'checkpoint', - description: 'Site name. ', - name: 'checkpoint.site_name', - type: 'keyword', - }, - 'checkpoint.esod_rule_name': { - category: 'checkpoint', - description: 'Unknown rule name. ', - name: 'checkpoint.esod_rule_name', - type: 'keyword', - }, - 'checkpoint.esod_rule_action': { - category: 'checkpoint', - description: 'Unknown rule action. ', - name: 'checkpoint.esod_rule_action', - type: 'keyword', - }, - 'checkpoint.esod_rule_type': { - category: 'checkpoint', - description: 'Unknown rule type. ', - name: 'checkpoint.esod_rule_type', - type: 'keyword', - }, - 'checkpoint.esod_noncompliance_reason': { - category: 'checkpoint', - description: 'Non-compliance reason. ', - name: 'checkpoint.esod_noncompliance_reason', - type: 'keyword', - }, - 'checkpoint.esod_associated_policies': { - category: 'checkpoint', - description: 'Associated policies. ', - name: 'checkpoint.esod_associated_policies', - type: 'keyword', - }, - 'checkpoint.spyware_type': { - category: 'checkpoint', - description: 'Spyware type. ', - name: 'checkpoint.spyware_type', - type: 'keyword', - }, - 'checkpoint.anti_virus_type': { - category: 'checkpoint', - description: 'Anti virus type. ', - name: 'checkpoint.anti_virus_type', - type: 'keyword', - }, - 'checkpoint.end_user_firewall_type': { - category: 'checkpoint', - description: 'End user firewall type. ', - name: 'checkpoint.end_user_firewall_type', - type: 'keyword', - }, - 'checkpoint.esod_scan_status': { - category: 'checkpoint', - description: 'Scan failed. ', - name: 'checkpoint.esod_scan_status', - type: 'keyword', - }, - 'checkpoint.esod_access_status': { - category: 'checkpoint', - description: 'Access denied. ', - name: 'checkpoint.esod_access_status', - type: 'keyword', - }, - 'checkpoint.client_type': { - category: 'checkpoint', - description: 'Endpoint Connect. ', - name: 'checkpoint.client_type', - type: 'keyword', - }, - 'checkpoint.precise_error': { - category: 'checkpoint', - description: 'HTTP parser error. ', - name: 'checkpoint.precise_error', - type: 'keyword', - }, - 'checkpoint.method': { - category: 'checkpoint', - description: 'HTTP method. ', - name: 'checkpoint.method', - type: 'keyword', - }, - 'checkpoint.trusted_domain': { - category: 'checkpoint', - description: 'In case of phishing event, the domain, which the attacker was impersonating. ', - name: 'checkpoint.trusted_domain', - type: 'keyword', - }, - 'cisco.amp.timestamp_nanoseconds': { - category: 'cisco', - description: 'The timestamp in Epoch nanoseconds. ', - name: 'cisco.amp.timestamp_nanoseconds', - type: 'date', - }, - 'cisco.amp.event_type_id': { - category: 'cisco', - description: 'A sub ID of the event, depending on event type. ', - name: 'cisco.amp.event_type_id', - type: 'keyword', - }, - 'cisco.amp.detection': { - category: 'cisco', - description: 'The name of the malware detected. ', - name: 'cisco.amp.detection', - type: 'keyword', - }, - 'cisco.amp.detection_id': { - category: 'cisco', - description: 'The ID of the detection. ', - name: 'cisco.amp.detection_id', - type: 'keyword', - }, - 'cisco.amp.connector_guid': { - category: 'cisco', - description: 'The GUID of the connector sending information to AMP. ', - name: 'cisco.amp.connector_guid', - type: 'keyword', - }, - 'cisco.amp.group_guids': { - category: 'cisco', - description: 'An array of group GUIDS related to the connector sending information to AMP. ', - name: 'cisco.amp.group_guids', - type: 'keyword', - }, - 'cisco.amp.vulnerabilities': { - category: 'cisco', - description: 'An array of related vulnerabilities to the malicious event. ', - name: 'cisco.amp.vulnerabilities', - type: 'flattened', - }, - 'cisco.amp.scan.description': { - category: 'cisco', - description: - 'Description of an event related to a scan being initiated, for example the specific directory name. ', - name: 'cisco.amp.scan.description', - type: 'keyword', - }, - 'cisco.amp.scan.clean': { - category: 'cisco', - description: 'Boolean value if a scanned file was clean or not. ', - name: 'cisco.amp.scan.clean', - type: 'boolean', - }, - 'cisco.amp.scan.scanned_files': { - category: 'cisco', - description: 'Count of files scanned in a directory. ', - name: 'cisco.amp.scan.scanned_files', - type: 'long', - }, - 'cisco.amp.scan.scanned_processes': { - category: 'cisco', - description: 'Count of processes scanned related to a single scan event. ', - name: 'cisco.amp.scan.scanned_processes', - type: 'long', - }, - 'cisco.amp.scan.scanned_paths': { - category: 'cisco', - description: 'Count of different directories scanned related to a single scan event. ', - name: 'cisco.amp.scan.scanned_paths', - type: 'long', - }, - 'cisco.amp.scan.malicious_detections': { - category: 'cisco', - description: 'Count of malicious files or documents detected related to a single scan event. ', - name: 'cisco.amp.scan.malicious_detections', - type: 'long', - }, - 'cisco.amp.computer.connector_guid': { - category: 'cisco', - description: - 'The GUID of the connector, similar to top level connector_guid, but unique if multiple connectors are involved. ', - name: 'cisco.amp.computer.connector_guid', - type: 'keyword', - }, - 'cisco.amp.computer.external_ip': { - category: 'cisco', - description: 'The external IP of the related host. ', - name: 'cisco.amp.computer.external_ip', - type: 'ip', - }, - 'cisco.amp.computer.active': { - category: 'cisco', - description: 'If the current endpoint is active or not. ', - name: 'cisco.amp.computer.active', - type: 'boolean', - }, - 'cisco.amp.computer.network_addresses': { - category: 'cisco', - description: 'All network interface information on the related host. ', - name: 'cisco.amp.computer.network_addresses', - type: 'flattened', - }, - 'cisco.amp.file.disposition': { - category: 'cisco', - description: 'Categorization of file, for example "Malicious" or "Clean". ', - name: 'cisco.amp.file.disposition', - type: 'keyword', - }, - 'cisco.amp.network_info.disposition': { - category: 'cisco', - description: - 'Categorization of a network event related to a file, for example "Malicious" or "Clean". ', - name: 'cisco.amp.network_info.disposition', - type: 'keyword', - }, - 'cisco.amp.network_info.nfm.direction': { - category: 'cisco', - description: 'The current direction based on source and destination IP. ', - name: 'cisco.amp.network_info.nfm.direction', - type: 'keyword', - }, - 'cisco.amp.related.mac': { - category: 'cisco', - description: 'An array of all related MAC addresses. ', - name: 'cisco.amp.related.mac', - type: 'keyword', - }, - 'cisco.amp.related.cve': { - category: 'cisco', - description: 'An array of all related MAC addresses. ', - name: 'cisco.amp.related.cve', - type: 'keyword', - }, - 'cisco.amp.cloud_ioc.description': { - category: 'cisco', - description: 'Description of the related IOC for specific IOC events from AMP. ', - name: 'cisco.amp.cloud_ioc.description', - type: 'keyword', - }, - 'cisco.amp.cloud_ioc.short_description': { - category: 'cisco', - description: 'Short description of the related IOC for specific IOC events from AMP. ', - name: 'cisco.amp.cloud_ioc.short_description', - type: 'keyword', - }, - 'cisco.amp.network_info.parent.disposition': { - category: 'cisco', - description: 'Categorization of a IOC for example "Malicious" or "Clean". ', - name: 'cisco.amp.network_info.parent.disposition', - type: 'keyword', - }, - 'cisco.amp.network_info.parent.identity.md5': { - category: 'cisco', - description: 'MD5 hash of the related IOC. ', - name: 'cisco.amp.network_info.parent.identity.md5', - type: 'keyword', - }, - 'cisco.amp.network_info.parent.identity.sha1': { - category: 'cisco', - description: 'SHA1 hash of the related IOC. ', - name: 'cisco.amp.network_info.parent.identity.sha1', - type: 'keyword', - }, - 'cisco.amp.network_info.parent.identify.sha256': { - category: 'cisco', - description: 'SHA256 hash of the related IOC. ', - name: 'cisco.amp.network_info.parent.identify.sha256', - type: 'keyword', - }, - 'cisco.amp.file.archived_file.disposition': { - category: 'cisco', - description: - 'Categorization of a file archive related to a file, for example "Malicious" or "Clean". ', - name: 'cisco.amp.file.archived_file.disposition', - type: 'keyword', - }, - 'cisco.amp.file.archived_file.identity.md5': { - category: 'cisco', - description: 'MD5 hash of the archived file related to the malicious event. ', - name: 'cisco.amp.file.archived_file.identity.md5', - type: 'keyword', - }, - 'cisco.amp.file.archived_file.identity.sha1': { - category: 'cisco', - description: 'SHA1 hash of the archived file related to the malicious event. ', - name: 'cisco.amp.file.archived_file.identity.sha1', - type: 'keyword', - }, - 'cisco.amp.file.archived_file.identity.sha256': { - category: 'cisco', - description: 'SHA256 hash of the archived file related to the malicious event. ', - name: 'cisco.amp.file.archived_file.identity.sha256', - type: 'keyword', - }, - 'cisco.amp.file.attack_details.application': { - category: 'cisco', - description: 'The application name related to Exploit Prevention events. ', - name: 'cisco.amp.file.attack_details.application', - type: 'keyword', - }, - 'cisco.amp.file.attack_details.attacked_module': { - category: 'cisco', - description: - 'Path to the executable or dll that was attacked and detected by Exploit Prevention. ', - name: 'cisco.amp.file.attack_details.attacked_module', - type: 'keyword', - }, - 'cisco.amp.file.attack_details.base_address': { - category: 'cisco', - description: 'The base memory address related to the exploit detected. ', - name: 'cisco.amp.file.attack_details.base_address', - type: 'keyword', - }, - 'cisco.amp.file.attack_details.suspicious_files': { - category: 'cisco', - description: 'An array of related files when an attack is detected by Exploit Prevention. ', - name: 'cisco.amp.file.attack_details.suspicious_files', - type: 'keyword', - }, - 'cisco.amp.file.parent.disposition': { - category: 'cisco', - description: 'Categorization of parrent, for example "Malicious" or "Clean". ', - name: 'cisco.amp.file.parent.disposition', - type: 'keyword', - }, - 'cisco.amp.error.description': { - category: 'cisco', - description: 'Description of an endpoint error event. ', - name: 'cisco.amp.error.description', - type: 'keyword', - }, - 'cisco.amp.error.error_code': { - category: 'cisco', - description: 'The error code describing the related error event. ', - name: 'cisco.amp.error.error_code', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.severity': { - category: 'cisco', - description: - 'Severity result of the threat hunt registered to the malicious event. Can be Low-Critical. ', - name: 'cisco.amp.threat_hunting.severity', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_report_guid': { - category: 'cisco', - description: 'The GUID of the related threat hunting report. ', - name: 'cisco.amp.threat_hunting.incident_report_guid', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_hunt_guid': { - category: 'cisco', - description: 'The GUID of the related investigation tracking issue. ', - name: 'cisco.amp.threat_hunting.incident_hunt_guid', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_title': { - category: 'cisco', - description: 'Title of the incident related to the threat hunting activity. ', - name: 'cisco.amp.threat_hunting.incident_title', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_summary': { - category: 'cisco', - description: 'Summary of the outcome on the threat hunting activity. ', - name: 'cisco.amp.threat_hunting.incident_summary', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_remediation': { - category: 'cisco', - description: 'Recommendations to resolve the vulnerability or exploited host. ', - name: 'cisco.amp.threat_hunting.incident_remediation', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_id': { - category: 'cisco', - description: 'The id of the related incident for the threat hunting activity. ', - name: 'cisco.amp.threat_hunting.incident_id', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_end_time': { - category: 'cisco', - description: 'When the threat hunt finalized or closed. ', - name: 'cisco.amp.threat_hunting.incident_end_time', - type: 'date', - }, - 'cisco.amp.threat_hunting.incident_start_time': { - category: 'cisco', - description: 'When the threat hunt was initiated. ', - name: 'cisco.amp.threat_hunting.incident_start_time', - type: 'date', - }, - 'cisco.amp.file.attack_details.indicators': { - category: 'cisco', - description: - 'Different indicator types that matches the exploit detected, for example different MITRE tactics. ', - name: 'cisco.amp.file.attack_details.indicators', - type: 'flattened', - }, - 'cisco.amp.threat_hunting.tactics': { - category: 'cisco', - description: 'List of all MITRE tactics related to the incident found. ', - name: 'cisco.amp.threat_hunting.tactics', - type: 'flattened', - }, - 'cisco.amp.threat_hunting.techniques': { - category: 'cisco', - description: 'List of all MITRE techniques related to the incident found. ', - name: 'cisco.amp.threat_hunting.techniques', - type: 'flattened', - }, - 'cisco.amp.tactics': { - category: 'cisco', - description: 'List of all MITRE tactics related to the incident found. ', - name: 'cisco.amp.tactics', - type: 'flattened', - }, - 'cisco.amp.mitre_tactics': { - category: 'cisco', - description: "Array of all related mitre tactic ID's ", - name: 'cisco.amp.mitre_tactics', - type: 'keyword', - }, - 'cisco.amp.techniques': { - category: 'cisco', - description: 'List of all MITRE techniques related to the incident found. ', - name: 'cisco.amp.techniques', - type: 'flattened', - }, - 'cisco.amp.mitre_techniques': { - category: 'cisco', - description: "Array of all related mitre technique ID's ", - name: 'cisco.amp.mitre_techniques', - type: 'keyword', - }, - 'cisco.amp.command_line.arguments': { - category: 'cisco', - description: 'The CLI arguments related to the Cloud Threat IOC reported by Cisco. ', - name: 'cisco.amp.command_line.arguments', - type: 'keyword', - }, - 'cisco.amp.bp_data': { - category: 'cisco', - description: 'Endpoint isolation information ', - name: 'cisco.amp.bp_data', - type: 'flattened', - }, - 'cisco.asa.message_id': { - category: 'cisco', - description: 'The Cisco ASA message identifier. ', - name: 'cisco.asa.message_id', - type: 'keyword', - }, - 'cisco.asa.suffix': { - category: 'cisco', - description: 'Optional suffix after %ASA identifier. ', - example: 'session', - name: 'cisco.asa.suffix', - type: 'keyword', - }, - 'cisco.asa.source_interface': { - category: 'cisco', - description: 'Source interface for the flow or event. ', - name: 'cisco.asa.source_interface', - type: 'keyword', - }, - 'cisco.asa.destination_interface': { - category: 'cisco', - description: 'Destination interface for the flow or event. ', - name: 'cisco.asa.destination_interface', - type: 'keyword', - }, - 'cisco.asa.rule_name': { - category: 'cisco', - description: 'Name of the Access Control List rule that matched this event. ', - name: 'cisco.asa.rule_name', - type: 'keyword', - }, - 'cisco.asa.source_username': { - category: 'cisco', - description: 'Name of the user that is the source for this event. ', - name: 'cisco.asa.source_username', - type: 'keyword', - }, - 'cisco.asa.destination_username': { - category: 'cisco', - description: 'Name of the user that is the destination for this event. ', - name: 'cisco.asa.destination_username', - type: 'keyword', - }, - 'cisco.asa.mapped_source_ip': { - category: 'cisco', - description: 'The translated source IP address. ', - name: 'cisco.asa.mapped_source_ip', - type: 'ip', - }, - 'cisco.asa.mapped_source_host': { - category: 'cisco', - description: 'The translated source host. ', - name: 'cisco.asa.mapped_source_host', - type: 'keyword', - }, - 'cisco.asa.mapped_source_port': { - category: 'cisco', - description: 'The translated source port. ', - name: 'cisco.asa.mapped_source_port', - type: 'long', - }, - 'cisco.asa.mapped_destination_ip': { - category: 'cisco', - description: 'The translated destination IP address. ', - name: 'cisco.asa.mapped_destination_ip', - type: 'ip', - }, - 'cisco.asa.mapped_destination_host': { - category: 'cisco', - description: 'The translated destination host. ', - name: 'cisco.asa.mapped_destination_host', - type: 'keyword', - }, - 'cisco.asa.mapped_destination_port': { - category: 'cisco', - description: 'The translated destination port. ', - name: 'cisco.asa.mapped_destination_port', - type: 'long', - }, - 'cisco.asa.threat_level': { - category: 'cisco', - description: - 'Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ', - name: 'cisco.asa.threat_level', - type: 'keyword', - }, - 'cisco.asa.threat_category': { - category: 'cisco', - description: - 'Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ', - name: 'cisco.asa.threat_category', - type: 'keyword', - }, - 'cisco.asa.connection_id': { - category: 'cisco', - description: 'Unique identifier for a flow. ', - name: 'cisco.asa.connection_id', - type: 'keyword', - }, - 'cisco.asa.icmp_type': { - category: 'cisco', - description: 'ICMP type. ', - name: 'cisco.asa.icmp_type', - type: 'short', - }, - 'cisco.asa.icmp_code': { - category: 'cisco', - description: 'ICMP code. ', - name: 'cisco.asa.icmp_code', - type: 'short', - }, - 'cisco.asa.connection_type': { - category: 'cisco', - description: 'The VPN connection type ', - name: 'cisco.asa.connection_type', - type: 'keyword', - }, - 'cisco.asa.dap_records': { - category: 'cisco', - description: 'The assigned DAP records ', - name: 'cisco.asa.dap_records', - type: 'keyword', - }, - 'cisco.asa.command_line_arguments': { - category: 'cisco', - description: 'The command line arguments logged by the local audit log ', - name: 'cisco.asa.command_line_arguments', - type: 'keyword', - }, - 'cisco.asa.assigned_ip': { - category: 'cisco', - description: 'The IP address assigned to a VPN client successfully connecting ', - name: 'cisco.asa.assigned_ip', - type: 'ip', - }, - 'cisco.asa.privilege.old': { - category: 'cisco', - description: 'When a users privilege is changed this is the old value ', - name: 'cisco.asa.privilege.old', - type: 'keyword', - }, - 'cisco.asa.privilege.new': { - category: 'cisco', - description: 'When a users privilege is changed this is the new value ', - name: 'cisco.asa.privilege.new', - type: 'keyword', - }, - 'cisco.asa.burst.object': { - category: 'cisco', - description: 'The related object for burst warnings ', - name: 'cisco.asa.burst.object', - type: 'keyword', - }, - 'cisco.asa.burst.id': { - category: 'cisco', - description: 'The related rate ID for burst warnings ', - name: 'cisco.asa.burst.id', - type: 'keyword', - }, - 'cisco.asa.burst.current_rate': { - category: 'cisco', - description: 'The current burst rate seen ', - name: 'cisco.asa.burst.current_rate', - type: 'keyword', - }, - 'cisco.asa.burst.configured_rate': { - category: 'cisco', - description: 'The current configured burst rate ', - name: 'cisco.asa.burst.configured_rate', - type: 'keyword', - }, - 'cisco.asa.burst.avg_rate': { - category: 'cisco', - description: 'The current average burst rate seen ', - name: 'cisco.asa.burst.avg_rate', - type: 'keyword', - }, - 'cisco.asa.burst.configured_avg_rate': { - category: 'cisco', - description: 'The current configured average burst rate allowed ', - name: 'cisco.asa.burst.configured_avg_rate', - type: 'keyword', - }, - 'cisco.asa.burst.cumulative_count': { - category: 'cisco', - description: 'The total count of burst rate hits since the object was created or cleared ', - name: 'cisco.asa.burst.cumulative_count', - type: 'keyword', - }, - 'cisco.asa.termination_user': { - category: 'cisco', - description: 'AAA name of user requesting termination ', - name: 'cisco.asa.termination_user', - type: 'keyword', - }, - 'cisco.asa.webvpn.group_name': { - category: 'cisco', - description: 'The WebVPN group name the user belongs to ', - name: 'cisco.asa.webvpn.group_name', - type: 'keyword', - }, - 'cisco.asa.termination_initiator': { - category: 'cisco', - description: 'Interface name of the side that initiated the teardown ', - name: 'cisco.asa.termination_initiator', - type: 'keyword', - }, - 'cisco.asa.tunnel_type': { - category: 'cisco', - description: 'SA type (remote access or L2L) ', - name: 'cisco.asa.tunnel_type', - type: 'keyword', - }, - 'cisco.asa.session_type': { - category: 'cisco', - description: 'Session type (for example, IPsec or UDP) ', - name: 'cisco.asa.session_type', - type: 'keyword', - }, - 'cisco.ftd.message_id': { - category: 'cisco', - description: 'The Cisco FTD message identifier. ', - name: 'cisco.ftd.message_id', - type: 'keyword', - }, - 'cisco.ftd.suffix': { - category: 'cisco', - description: 'Optional suffix after %FTD identifier. ', - example: 'session', - name: 'cisco.ftd.suffix', - type: 'keyword', - }, - 'cisco.ftd.source_interface': { - category: 'cisco', - description: 'Source interface for the flow or event. ', - name: 'cisco.ftd.source_interface', - type: 'keyword', - }, - 'cisco.ftd.destination_interface': { - category: 'cisco', - description: 'Destination interface for the flow or event. ', - name: 'cisco.ftd.destination_interface', - type: 'keyword', - }, - 'cisco.ftd.rule_name': { - category: 'cisco', - description: 'Name of the Access Control List rule that matched this event. ', - name: 'cisco.ftd.rule_name', - type: 'keyword', - }, - 'cisco.ftd.source_username': { - category: 'cisco', - description: 'Name of the user that is the source for this event. ', - name: 'cisco.ftd.source_username', - type: 'keyword', - }, - 'cisco.ftd.destination_username': { - category: 'cisco', - description: 'Name of the user that is the destination for this event. ', - name: 'cisco.ftd.destination_username', - type: 'keyword', - }, - 'cisco.ftd.mapped_source_ip': { - category: 'cisco', - description: 'The translated source IP address. Use ECS source.nat.ip. ', - name: 'cisco.ftd.mapped_source_ip', - type: 'ip', - }, - 'cisco.ftd.mapped_source_host': { - category: 'cisco', - description: 'The translated source host. ', - name: 'cisco.ftd.mapped_source_host', - type: 'keyword', - }, - 'cisco.ftd.mapped_source_port': { - category: 'cisco', - description: 'The translated source port. Use ECS source.nat.port. ', - name: 'cisco.ftd.mapped_source_port', - type: 'long', - }, - 'cisco.ftd.mapped_destination_ip': { - category: 'cisco', - description: 'The translated destination IP address. Use ECS destination.nat.ip. ', - name: 'cisco.ftd.mapped_destination_ip', - type: 'ip', - }, - 'cisco.ftd.mapped_destination_host': { - category: 'cisco', - description: 'The translated destination host. ', - name: 'cisco.ftd.mapped_destination_host', - type: 'keyword', - }, - 'cisco.ftd.mapped_destination_port': { - category: 'cisco', - description: 'The translated destination port. Use ECS destination.nat.port. ', - name: 'cisco.ftd.mapped_destination_port', - type: 'long', - }, - 'cisco.ftd.threat_level': { - category: 'cisco', - description: - 'Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ', - name: 'cisco.ftd.threat_level', - type: 'keyword', - }, - 'cisco.ftd.threat_category': { - category: 'cisco', - description: - 'Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ', - name: 'cisco.ftd.threat_category', - type: 'keyword', - }, - 'cisco.ftd.connection_id': { - category: 'cisco', - description: 'Unique identifier for a flow. ', - name: 'cisco.ftd.connection_id', - type: 'keyword', - }, - 'cisco.ftd.icmp_type': { - category: 'cisco', - description: 'ICMP type. ', - name: 'cisco.ftd.icmp_type', - type: 'short', - }, - 'cisco.ftd.icmp_code': { - category: 'cisco', - description: 'ICMP code. ', - name: 'cisco.ftd.icmp_code', - type: 'short', - }, - 'cisco.ftd.security': { - category: 'cisco', - description: 'Raw fields for Security Events.', - name: 'cisco.ftd.security', - type: 'object', - }, - 'cisco.ftd.connection_type': { - category: 'cisco', - description: 'The VPN connection type ', - name: 'cisco.ftd.connection_type', - type: 'keyword', - }, - 'cisco.ftd.dap_records': { - category: 'cisco', - description: 'The assigned DAP records ', - name: 'cisco.ftd.dap_records', - type: 'keyword', - }, - 'cisco.ftd.termination_user': { - category: 'cisco', - description: 'AAA name of user requesting termination ', - name: 'cisco.ftd.termination_user', - type: 'keyword', - }, - 'cisco.ftd.webvpn.group_name': { - category: 'cisco', - description: 'The WebVPN group name the user belongs to ', - name: 'cisco.ftd.webvpn.group_name', - type: 'keyword', - }, - 'cisco.ftd.termination_initiator': { - category: 'cisco', - description: 'Interface name of the side that initiated the teardown ', - name: 'cisco.ftd.termination_initiator', - type: 'keyword', - }, - 'cisco.ios.access_list': { - category: 'cisco', - description: 'Name of the IP access list. ', - name: 'cisco.ios.access_list', - type: 'keyword', - }, - 'cisco.ios.facility': { - category: 'cisco', - description: - 'The facility to which the message refers (for example, SNMP, SYS, and so forth). A facility can be a hardware device, a protocol, or a module of the system software. It denotes the source or the cause of the system message. ', - example: 'SEC', - name: 'cisco.ios.facility', - type: 'keyword', - }, - 'cisco.umbrella.identities': { - category: 'cisco', - description: 'An array of the different identities related to the event. ', - name: 'cisco.umbrella.identities', - type: 'keyword', - }, - 'cisco.umbrella.categories': { - category: 'cisco', - description: 'The security or content categories that the destination matches. ', - name: 'cisco.umbrella.categories', - type: 'keyword', - }, - 'cisco.umbrella.policy_identity_type': { - category: 'cisco', - description: - 'The first identity type matched with this request. Available in version 3 and above. ', - name: 'cisco.umbrella.policy_identity_type', - type: 'keyword', - }, - 'cisco.umbrella.identity_types': { - category: 'cisco', - description: - 'The type of identity that made the request. For example, Roaming Computer or Network. ', - name: 'cisco.umbrella.identity_types', - type: 'keyword', - }, - 'cisco.umbrella.blocked_categories': { - category: 'cisco', - description: - 'The categories that resulted in the destination being blocked. Available in version 4 and above. ', - name: 'cisco.umbrella.blocked_categories', - type: 'keyword', - }, - 'cisco.umbrella.content_type': { - category: 'cisco', - description: 'The type of web content, typically text/html. ', - name: 'cisco.umbrella.content_type', - type: 'keyword', - }, - 'cisco.umbrella.sha_sha256': { - category: 'cisco', - description: 'Hex digest of the response content. ', - name: 'cisco.umbrella.sha_sha256', - type: 'keyword', - }, - 'cisco.umbrella.av_detections': { - category: 'cisco', - description: 'The detection name according to the antivirus engine used in file inspection. ', - name: 'cisco.umbrella.av_detections', - type: 'keyword', - }, - 'cisco.umbrella.puas': { - category: 'cisco', - description: - 'A list of all potentially unwanted application (PUA) results for the proxied file as returned by the antivirus scanner. ', - name: 'cisco.umbrella.puas', - type: 'keyword', - }, - 'cisco.umbrella.amp_disposition': { - category: 'cisco', - description: - 'The status of the files proxied and scanned by Cisco Advanced Malware Protection (AMP) as part of the Umbrella File Inspection feature; can be Clean, Malicious or Unknown. ', - name: 'cisco.umbrella.amp_disposition', - type: 'keyword', - }, - 'cisco.umbrella.amp_malware_name': { - category: 'cisco', - description: 'If Malicious, the name of the malware according to AMP. ', - name: 'cisco.umbrella.amp_malware_name', - type: 'keyword', - }, - 'cisco.umbrella.amp_score': { - category: 'cisco', - description: - 'The score of the malware from AMP. This field is not currently used and will be blank. ', - name: 'cisco.umbrella.amp_score', - type: 'keyword', - }, - 'cisco.umbrella.datacenter': { - category: 'cisco', - description: 'The name of the Umbrella Data Center that processed the user-generated traffic. ', - name: 'cisco.umbrella.datacenter', - type: 'keyword', - }, - 'cisco.umbrella.origin_id': { - category: 'cisco', - description: 'The unique identity of the network tunnel. ', - name: 'cisco.umbrella.origin_id', - type: 'keyword', - }, - 'coredns.query.size': { - category: 'coredns', - description: 'size of the DNS query ', - name: 'coredns.query.size', - type: 'integer', - format: 'bytes', - }, - 'coredns.response.size': { - category: 'coredns', - description: 'size of the DNS response ', - name: 'coredns.response.size', - type: 'integer', - format: 'bytes', - }, - 'crowdstrike.metadata.eventType': { - category: 'crowdstrike', - description: - 'DetectionSummaryEvent, FirewallMatchEvent, IncidentSummaryEvent, RemoteResponseSessionStartEvent, RemoteResponseSessionEndEvent, AuthActivityAuditEvent, or UserActivityAuditEvent ', - name: 'crowdstrike.metadata.eventType', - type: 'keyword', - }, - 'crowdstrike.metadata.eventCreationTime': { - category: 'crowdstrike', - description: 'The time this event occurred on the endpoint in UTC UNIX_MS format. ', - name: 'crowdstrike.metadata.eventCreationTime', - type: 'date', - }, - 'crowdstrike.metadata.offset': { - category: 'crowdstrike', - description: - 'Offset number that tracks the location of the event in stream. This is used to identify unique detection events. ', - name: 'crowdstrike.metadata.offset', - type: 'integer', - }, - 'crowdstrike.metadata.customerIDString': { - category: 'crowdstrike', - description: 'Customer identifier ', - name: 'crowdstrike.metadata.customerIDString', - type: 'keyword', - }, - 'crowdstrike.metadata.version': { - category: 'crowdstrike', - description: 'Schema version ', - name: 'crowdstrike.metadata.version', - type: 'keyword', - }, - 'crowdstrike.event.ProcessStartTime': { - category: 'crowdstrike', - description: 'The process start time in UTC UNIX_MS format. ', - name: 'crowdstrike.event.ProcessStartTime', - type: 'date', - }, - 'crowdstrike.event.ProcessEndTime': { - category: 'crowdstrike', - description: 'The process termination time in UTC UNIX_MS format. ', - name: 'crowdstrike.event.ProcessEndTime', - type: 'date', - }, - 'crowdstrike.event.ProcessId': { - category: 'crowdstrike', - description: 'Process ID related to the detection. ', - name: 'crowdstrike.event.ProcessId', - type: 'integer', - }, - 'crowdstrike.event.ParentProcessId': { - category: 'crowdstrike', - description: 'Parent process ID related to the detection. ', - name: 'crowdstrike.event.ParentProcessId', - type: 'integer', - }, - 'crowdstrike.event.ComputerName': { - category: 'crowdstrike', - description: 'Name of the computer where the detection occurred. ', - name: 'crowdstrike.event.ComputerName', - type: 'keyword', - }, - 'crowdstrike.event.UserName': { - category: 'crowdstrike', - description: 'User name associated with the detection. ', - name: 'crowdstrike.event.UserName', - type: 'keyword', - }, - 'crowdstrike.event.DetectName': { - category: 'crowdstrike', - description: 'Name of the detection. ', - name: 'crowdstrike.event.DetectName', - type: 'keyword', - }, - 'crowdstrike.event.DetectDescription': { - category: 'crowdstrike', - description: 'Description of the detection. ', - name: 'crowdstrike.event.DetectDescription', - type: 'keyword', - }, - 'crowdstrike.event.Severity': { - category: 'crowdstrike', - description: 'Severity score of the detection. ', - name: 'crowdstrike.event.Severity', - type: 'integer', - }, - 'crowdstrike.event.SeverityName': { - category: 'crowdstrike', - description: 'Severity score text. ', - name: 'crowdstrike.event.SeverityName', - type: 'keyword', - }, - 'crowdstrike.event.FileName': { - category: 'crowdstrike', - description: 'File name of the associated process for the detection. ', - name: 'crowdstrike.event.FileName', - type: 'keyword', - }, - 'crowdstrike.event.FilePath': { - category: 'crowdstrike', - description: 'Path of the executable associated with the detection. ', - name: 'crowdstrike.event.FilePath', - type: 'keyword', - }, - 'crowdstrike.event.CommandLine': { - category: 'crowdstrike', - description: 'Executable path with command line arguments. ', - name: 'crowdstrike.event.CommandLine', - type: 'keyword', - }, - 'crowdstrike.event.SHA1String': { - category: 'crowdstrike', - description: 'SHA1 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.SHA1String', - type: 'keyword', - }, - 'crowdstrike.event.SHA256String': { - category: 'crowdstrike', - description: 'SHA256 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.SHA256String', - type: 'keyword', - }, - 'crowdstrike.event.MD5String': { - category: 'crowdstrike', - description: 'MD5 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.MD5String', - type: 'keyword', - }, - 'crowdstrike.event.MachineDomain': { - category: 'crowdstrike', - description: 'Domain for the machine associated with the detection. ', - name: 'crowdstrike.event.MachineDomain', - type: 'keyword', - }, - 'crowdstrike.event.FalconHostLink': { - category: 'crowdstrike', - description: 'URL to view the detection in Falcon. ', - name: 'crowdstrike.event.FalconHostLink', - type: 'keyword', - }, - 'crowdstrike.event.SensorId': { - category: 'crowdstrike', - description: 'Unique ID associated with the Falcon sensor. ', - name: 'crowdstrike.event.SensorId', - type: 'keyword', - }, - 'crowdstrike.event.DetectId': { - category: 'crowdstrike', - description: 'Unique ID associated with the detection. ', - name: 'crowdstrike.event.DetectId', - type: 'keyword', - }, - 'crowdstrike.event.LocalIP': { - category: 'crowdstrike', - description: 'IP address of the host associated with the detection. ', - name: 'crowdstrike.event.LocalIP', - type: 'keyword', - }, - 'crowdstrike.event.MACAddress': { - category: 'crowdstrike', - description: 'MAC address of the host associated with the detection. ', - name: 'crowdstrike.event.MACAddress', - type: 'keyword', - }, - 'crowdstrike.event.Tactic': { - category: 'crowdstrike', - description: 'MITRE tactic category of the detection. ', - name: 'crowdstrike.event.Tactic', - type: 'keyword', - }, - 'crowdstrike.event.Technique': { - category: 'crowdstrike', - description: 'MITRE technique category of the detection. ', - name: 'crowdstrike.event.Technique', - type: 'keyword', - }, - 'crowdstrike.event.Objective': { - category: 'crowdstrike', - description: 'Method of detection. ', - name: 'crowdstrike.event.Objective', - type: 'keyword', - }, - 'crowdstrike.event.PatternDispositionDescription': { - category: 'crowdstrike', - description: 'Action taken by Falcon. ', - name: 'crowdstrike.event.PatternDispositionDescription', - type: 'keyword', - }, - 'crowdstrike.event.PatternDispositionValue': { - category: 'crowdstrike', - description: 'Unique ID associated with action taken. ', - name: 'crowdstrike.event.PatternDispositionValue', - type: 'integer', - }, - 'crowdstrike.event.PatternDispositionFlags': { - category: 'crowdstrike', - description: 'Flags indicating actions taken. ', - name: 'crowdstrike.event.PatternDispositionFlags', - type: 'object', - }, - 'crowdstrike.event.State': { - category: 'crowdstrike', - description: 'Whether the incident summary is open and ongoing or closed. ', - name: 'crowdstrike.event.State', - type: 'keyword', - }, - 'crowdstrike.event.IncidentStartTime': { - category: 'crowdstrike', - description: 'Start time for the incident in UTC UNIX format. ', - name: 'crowdstrike.event.IncidentStartTime', - type: 'date', - }, - 'crowdstrike.event.IncidentEndTime': { - category: 'crowdstrike', - description: 'End time for the incident in UTC UNIX format. ', - name: 'crowdstrike.event.IncidentEndTime', - type: 'date', - }, - 'crowdstrike.event.FineScore': { - category: 'crowdstrike', - description: 'Score for incident. ', - name: 'crowdstrike.event.FineScore', - type: 'float', - }, - 'crowdstrike.event.UserId': { - category: 'crowdstrike', - description: 'Email address or user ID associated with the event. ', - name: 'crowdstrike.event.UserId', - type: 'keyword', - }, - 'crowdstrike.event.UserIp': { - category: 'crowdstrike', - description: 'IP address associated with the user. ', - name: 'crowdstrike.event.UserIp', - type: 'keyword', - }, - 'crowdstrike.event.OperationName': { - category: 'crowdstrike', - description: 'Event subtype. ', - name: 'crowdstrike.event.OperationName', - type: 'keyword', - }, - 'crowdstrike.event.ServiceName': { - category: 'crowdstrike', - description: 'Service associated with this event. ', - name: 'crowdstrike.event.ServiceName', - type: 'keyword', - }, - 'crowdstrike.event.Success': { - category: 'crowdstrike', - description: 'Indicator of whether or not this event was successful. ', - name: 'crowdstrike.event.Success', - type: 'boolean', - }, - 'crowdstrike.event.UTCTimestamp': { - category: 'crowdstrike', - description: 'Timestamp associated with this event in UTC UNIX format. ', - name: 'crowdstrike.event.UTCTimestamp', - type: 'date', - }, - 'crowdstrike.event.AuditKeyValues': { - category: 'crowdstrike', - description: 'Fields that were changed in this event. ', - name: 'crowdstrike.event.AuditKeyValues', - type: 'nested', - }, - 'crowdstrike.event.ExecutablesWritten': { - category: 'crowdstrike', - description: 'Detected executables written to disk by a process. ', - name: 'crowdstrike.event.ExecutablesWritten', - type: 'nested', - }, - 'crowdstrike.event.SessionId': { - category: 'crowdstrike', - description: 'Session ID of the remote response session. ', - name: 'crowdstrike.event.SessionId', - type: 'keyword', - }, - 'crowdstrike.event.HostnameField': { - category: 'crowdstrike', - description: 'Host name of the machine for the remote session. ', - name: 'crowdstrike.event.HostnameField', - type: 'keyword', - }, - 'crowdstrike.event.StartTimestamp': { - category: 'crowdstrike', - description: 'Start time for the remote session in UTC UNIX format. ', - name: 'crowdstrike.event.StartTimestamp', - type: 'date', - }, - 'crowdstrike.event.EndTimestamp': { - category: 'crowdstrike', - description: 'End time for the remote session in UTC UNIX format. ', - name: 'crowdstrike.event.EndTimestamp', - type: 'date', - }, - 'crowdstrike.event.LateralMovement': { - category: 'crowdstrike', - description: 'Lateral movement field for incident. ', - name: 'crowdstrike.event.LateralMovement', - type: 'long', - }, - 'crowdstrike.event.ParentImageFileName': { - category: 'crowdstrike', - description: 'Path to the parent process. ', - name: 'crowdstrike.event.ParentImageFileName', - type: 'keyword', - }, - 'crowdstrike.event.ParentCommandLine': { - category: 'crowdstrike', - description: 'Parent process command line arguments. ', - name: 'crowdstrike.event.ParentCommandLine', - type: 'keyword', - }, - 'crowdstrike.event.GrandparentImageFileName': { - category: 'crowdstrike', - description: 'Path to the grandparent process. ', - name: 'crowdstrike.event.GrandparentImageFileName', - type: 'keyword', - }, - 'crowdstrike.event.GrandparentCommandLine': { - category: 'crowdstrike', - description: 'Grandparent process command line arguments. ', - name: 'crowdstrike.event.GrandparentCommandLine', - type: 'keyword', - }, - 'crowdstrike.event.IOCType': { - category: 'crowdstrike', - description: 'CrowdStrike type for indicator of compromise. ', - name: 'crowdstrike.event.IOCType', - type: 'keyword', - }, - 'crowdstrike.event.IOCValue': { - category: 'crowdstrike', - description: 'CrowdStrike value for indicator of compromise. ', - name: 'crowdstrike.event.IOCValue', - type: 'keyword', - }, - 'crowdstrike.event.CustomerId': { - category: 'crowdstrike', - description: 'Customer identifier. ', - name: 'crowdstrike.event.CustomerId', - type: 'keyword', - }, - 'crowdstrike.event.DeviceId': { - category: 'crowdstrike', - description: 'Device on which the event occurred. ', - name: 'crowdstrike.event.DeviceId', - type: 'keyword', - }, - 'crowdstrike.event.Ipv': { - category: 'crowdstrike', - description: 'Protocol for network request. ', - name: 'crowdstrike.event.Ipv', - type: 'keyword', - }, - 'crowdstrike.event.ConnectionDirection': { - category: 'crowdstrike', - description: 'Direction for network connection. ', - name: 'crowdstrike.event.ConnectionDirection', - type: 'keyword', - }, - 'crowdstrike.event.EventType': { - category: 'crowdstrike', - description: 'CrowdStrike provided event type. ', - name: 'crowdstrike.event.EventType', - type: 'keyword', - }, - 'crowdstrike.event.HostName': { - category: 'crowdstrike', - description: 'Host name of the local machine. ', - name: 'crowdstrike.event.HostName', - type: 'keyword', - }, - 'crowdstrike.event.ICMPCode': { - category: 'crowdstrike', - description: 'RFC2780 ICMP Code field. ', - name: 'crowdstrike.event.ICMPCode', - type: 'keyword', - }, - 'crowdstrike.event.ICMPType': { - category: 'crowdstrike', - description: 'RFC2780 ICMP Type field. ', - name: 'crowdstrike.event.ICMPType', - type: 'keyword', - }, - 'crowdstrike.event.ImageFileName': { - category: 'crowdstrike', - description: 'File name of the associated process for the detection. ', - name: 'crowdstrike.event.ImageFileName', - type: 'keyword', - }, - 'crowdstrike.event.PID': { - category: 'crowdstrike', - description: 'Associated process id for the detection. ', - name: 'crowdstrike.event.PID', - type: 'long', - }, - 'crowdstrike.event.LocalAddress': { - category: 'crowdstrike', - description: 'IP address of local machine. ', - name: 'crowdstrike.event.LocalAddress', - type: 'ip', - }, - 'crowdstrike.event.LocalPort': { - category: 'crowdstrike', - description: 'Port of local machine. ', - name: 'crowdstrike.event.LocalPort', - type: 'long', - }, - 'crowdstrike.event.RemoteAddress': { - category: 'crowdstrike', - description: 'IP address of remote machine. ', - name: 'crowdstrike.event.RemoteAddress', - type: 'ip', - }, - 'crowdstrike.event.RemotePort': { - category: 'crowdstrike', - description: 'Port of remote machine. ', - name: 'crowdstrike.event.RemotePort', - type: 'long', - }, - 'crowdstrike.event.RuleAction': { - category: 'crowdstrike', - description: 'Firewall rule action. ', - name: 'crowdstrike.event.RuleAction', - type: 'keyword', - }, - 'crowdstrike.event.RuleDescription': { - category: 'crowdstrike', - description: 'Firewall rule description. ', - name: 'crowdstrike.event.RuleDescription', - type: 'keyword', - }, - 'crowdstrike.event.RuleFamilyID': { - category: 'crowdstrike', - description: 'Firewall rule family id. ', - name: 'crowdstrike.event.RuleFamilyID', - type: 'keyword', - }, - 'crowdstrike.event.RuleGroupName': { - category: 'crowdstrike', - description: 'Firewall rule group name. ', - name: 'crowdstrike.event.RuleGroupName', - type: 'keyword', - }, - 'crowdstrike.event.RuleName': { - category: 'crowdstrike', - description: 'Firewall rule name. ', - name: 'crowdstrike.event.RuleName', - type: 'keyword', - }, - 'crowdstrike.event.RuleId': { - category: 'crowdstrike', - description: 'Firewall rule id. ', - name: 'crowdstrike.event.RuleId', - type: 'keyword', - }, - 'crowdstrike.event.MatchCount': { - category: 'crowdstrike', - description: 'Number of firewall rule matches. ', - name: 'crowdstrike.event.MatchCount', - type: 'long', - }, - 'crowdstrike.event.MatchCountSinceLastReport': { - category: 'crowdstrike', - description: 'Number of firewall rule matches since the last report. ', - name: 'crowdstrike.event.MatchCountSinceLastReport', - type: 'long', - }, - 'crowdstrike.event.Timestamp': { - category: 'crowdstrike', - description: 'Firewall rule triggered timestamp. ', - name: 'crowdstrike.event.Timestamp', - type: 'date', - }, - 'crowdstrike.event.Flags.Audit': { - category: 'crowdstrike', - description: 'CrowdStrike audit flag. ', - name: 'crowdstrike.event.Flags.Audit', - type: 'boolean', - }, - 'crowdstrike.event.Flags.Log': { - category: 'crowdstrike', - description: 'CrowdStrike log flag. ', - name: 'crowdstrike.event.Flags.Log', - type: 'boolean', - }, - 'crowdstrike.event.Flags.Monitor': { - category: 'crowdstrike', - description: 'CrowdStrike monitor flag. ', - name: 'crowdstrike.event.Flags.Monitor', - type: 'boolean', - }, - 'crowdstrike.event.Protocol': { - category: 'crowdstrike', - description: 'CrowdStrike provided protocol. ', - name: 'crowdstrike.event.Protocol', - type: 'keyword', - }, - 'crowdstrike.event.NetworkProfile': { - category: 'crowdstrike', - description: 'CrowdStrike network profile. ', - name: 'crowdstrike.event.NetworkProfile', - type: 'keyword', - }, - 'crowdstrike.event.PolicyName': { - category: 'crowdstrike', - description: 'CrowdStrike policy name. ', - name: 'crowdstrike.event.PolicyName', - type: 'keyword', - }, - 'crowdstrike.event.PolicyID': { - category: 'crowdstrike', - description: 'CrowdStrike policy id. ', - name: 'crowdstrike.event.PolicyID', - type: 'keyword', - }, - 'crowdstrike.event.Status': { - category: 'crowdstrike', - description: 'CrowdStrike status. ', - name: 'crowdstrike.event.Status', - type: 'keyword', - }, - 'crowdstrike.event.TreeID': { - category: 'crowdstrike', - description: 'CrowdStrike tree id. ', - name: 'crowdstrike.event.TreeID', - type: 'keyword', - }, - 'crowdstrike.event.Commands': { - category: 'crowdstrike', - description: 'Commands run in a remote session. ', - name: 'crowdstrike.event.Commands', - type: 'keyword', - }, - 'cyberarkpas.audit.action': { - category: 'cyberarkpas', - description: 'A description of the audit record.', - name: 'cyberarkpas.audit.action', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.address': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.address', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.cpm_disabled': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.cpm_disabled', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.cpm_error_details': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.cpm_error_details', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.cpm_status': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.cpm_status', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.creation_method': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.creation_method', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.customer': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.customer', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.database': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.database', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.device_type': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.device_type', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.dual_account_status': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.dual_account_status', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.group_name': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.group_name', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.in_process': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.in_process', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.index': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.index', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_fail_date': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_fail_date', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_success_change': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_success_change', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_success_reconciliation': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_success_reconciliation', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_success_verification': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_success_verification', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_task': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_task', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.logon_domain': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.logon_domain', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.policy_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.policy_id', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.port': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.port', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.privcloud': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.privcloud', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.reset_immediately': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.reset_immediately', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.retries_count': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.retries_count', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.sequence_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.sequence_id', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.tags': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.tags', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.user_dn': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.user_dn', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.user_name': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.user_name', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.virtual_username': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.virtual_username', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.other': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.other', - type: 'flattened', - }, - 'cyberarkpas.audit.category': { - category: 'cyberarkpas', - description: 'The category name (for category-related operations).', - name: 'cyberarkpas.audit.category', - type: 'keyword', - }, - 'cyberarkpas.audit.desc': { - category: 'cyberarkpas', - description: 'A static value that displays a description of the audit codes.', - name: 'cyberarkpas.audit.desc', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.ad_process_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.ad_process_id', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.ad_process_name': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.ad_process_name', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.application_type': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.application_type', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.command': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.command', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.connection_component_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.connection_component_id', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.dst_host': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.dst_host', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.logon_account': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.logon_account', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.managed_account': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.managed_account', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.process_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.process_id', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.process_name': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.process_name', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.protocol': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.protocol', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.psmid': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.psmid', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.session_duration': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.session_duration', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.session_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.session_id', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.src_host': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.src_host', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.username': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.username', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.other': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.other', - type: 'flattened', - }, - 'cyberarkpas.audit.file': { - category: 'cyberarkpas', - description: 'The name of the target file.', - name: 'cyberarkpas.audit.file', - type: 'keyword', - }, - 'cyberarkpas.audit.gateway_station': { - category: 'cyberarkpas', - description: 'The IP of the web application machine (PVWA).', - name: 'cyberarkpas.audit.gateway_station', - type: 'ip', - }, - 'cyberarkpas.audit.hostname': { - category: 'cyberarkpas', - description: 'The hostname, in upper case.', - example: 'MY-COMPUTER', - name: 'cyberarkpas.audit.hostname', - type: 'keyword', - }, - 'cyberarkpas.audit.iso_timestamp': { - category: 'cyberarkpas', - description: 'The timestamp, in ISO Timestamp format (RFC 3339).', - example: '"2013-06-25T10:47:19.000Z"', - name: 'cyberarkpas.audit.iso_timestamp', - type: 'date', - }, - 'cyberarkpas.audit.issuer': { - category: 'cyberarkpas', - description: - 'The Vault user who wrote the audit. This is usually the user who performed the operation.', - name: 'cyberarkpas.audit.issuer', - type: 'keyword', - }, - 'cyberarkpas.audit.location': { - category: 'cyberarkpas', - description: 'The target Location (for Location operations).', - name: 'cyberarkpas.audit.location', - type: 'keyword', - }, - 'cyberarkpas.audit.message': { - category: 'cyberarkpas', - description: 'A description of the audit records (same information as in the Desc field).', - name: 'cyberarkpas.audit.message', - type: 'keyword', - }, - 'cyberarkpas.audit.message_id': { - category: 'cyberarkpas', - description: 'The code ID of the audit records.', - name: 'cyberarkpas.audit.message_id', - type: 'keyword', - }, - 'cyberarkpas.audit.product': { - category: 'cyberarkpas', - description: 'A static value that represents the product.', - name: 'cyberarkpas.audit.product', - type: 'keyword', - }, - 'cyberarkpas.audit.pvwa_details': { - category: 'cyberarkpas', - description: 'Specific details of the PVWA audit records.', - name: 'cyberarkpas.audit.pvwa_details', - type: 'flattened', - }, - 'cyberarkpas.audit.raw': { - category: 'cyberarkpas', - description: - 'Raw XML for the original audit record. Only present when XSLT file has debugging enabled. ', - name: 'cyberarkpas.audit.raw', - type: 'keyword', - }, - 'cyberarkpas.audit.reason': { - category: 'cyberarkpas', - description: 'The reason entered by the user.', - name: 'cyberarkpas.audit.reason', - type: 'text', - }, - 'cyberarkpas.audit.rfc5424': { - category: 'cyberarkpas', - description: 'Whether the syslog format complies with RFC5424.', - example: 'yes', - name: 'cyberarkpas.audit.rfc5424', - type: 'boolean', - }, - 'cyberarkpas.audit.safe': { - category: 'cyberarkpas', - description: 'The name of the target Safe.', - name: 'cyberarkpas.audit.safe', - type: 'keyword', - }, - 'cyberarkpas.audit.severity': { - category: 'cyberarkpas', - description: 'The severity of the audit records.', - name: 'cyberarkpas.audit.severity', - type: 'keyword', - }, - 'cyberarkpas.audit.source_user': { - category: 'cyberarkpas', - description: 'The name of the Vault user who performed the operation.', - name: 'cyberarkpas.audit.source_user', - type: 'keyword', - }, - 'cyberarkpas.audit.station': { - category: 'cyberarkpas', - description: - 'The IP from where the operation was performed. For PVWA sessions, this will be the real client machine IP.', - name: 'cyberarkpas.audit.station', - type: 'ip', - }, - 'cyberarkpas.audit.target_user': { - category: 'cyberarkpas', - description: 'The name of the Vault user on which the operation was performed.', - name: 'cyberarkpas.audit.target_user', - type: 'keyword', - }, - 'cyberarkpas.audit.timestamp': { - category: 'cyberarkpas', - description: 'The timestamp, in MMM DD HH:MM:SS format.', - example: 'Jun 25 10:47:19', - name: 'cyberarkpas.audit.timestamp', - type: 'keyword', - }, - 'cyberarkpas.audit.vendor': { - category: 'cyberarkpas', - description: 'A static value that represents the vendor.', - name: 'cyberarkpas.audit.vendor', - type: 'keyword', - }, - 'cyberarkpas.audit.version': { - category: 'cyberarkpas', - description: 'A static value that represents the version of the Vault.', - name: 'cyberarkpas.audit.version', - type: 'keyword', - }, - 'envoyproxy.log_type': { - category: 'envoyproxy', - description: 'Envoy log type, normally ACCESS ', - name: 'envoyproxy.log_type', - type: 'keyword', - }, - 'envoyproxy.response_flags': { - category: 'envoyproxy', - description: 'Response flags ', - name: 'envoyproxy.response_flags', - type: 'keyword', - }, - 'envoyproxy.upstream_service_time': { - category: 'envoyproxy', - description: 'Upstream service time in nanoseconds ', - name: 'envoyproxy.upstream_service_time', - type: 'long', - format: 'duration', - }, - 'envoyproxy.request_id': { - category: 'envoyproxy', - description: 'ID of the request ', - name: 'envoyproxy.request_id', - type: 'keyword', - }, - 'envoyproxy.authority': { - category: 'envoyproxy', - description: 'Envoy proxy authority field ', - name: 'envoyproxy.authority', - type: 'keyword', - }, - 'envoyproxy.proxy_type': { - category: 'envoyproxy', - description: 'Envoy proxy type, tcp or http ', - name: 'envoyproxy.proxy_type', - type: 'keyword', - }, - 'fortinet.file.hash.crc32': { - category: 'fortinet', - description: 'CRC32 Hash of file ', - name: 'fortinet.file.hash.crc32', - type: 'keyword', - }, - 'fortinet.firewall.acct_stat': { - category: 'fortinet', - description: 'Accounting state (RADIUS) ', - name: 'fortinet.firewall.acct_stat', - type: 'keyword', - }, - 'fortinet.firewall.acktime': { - category: 'fortinet', - description: 'Alarm Acknowledge Time ', - name: 'fortinet.firewall.acktime', - type: 'keyword', - }, - 'fortinet.firewall.act': { - category: 'fortinet', - description: 'Action ', - name: 'fortinet.firewall.act', - type: 'keyword', - }, - 'fortinet.firewall.action': { - category: 'fortinet', - description: 'Status of the session ', - name: 'fortinet.firewall.action', - type: 'keyword', - }, - 'fortinet.firewall.activity': { - category: 'fortinet', - description: 'HA activity message ', - name: 'fortinet.firewall.activity', - type: 'keyword', - }, - 'fortinet.firewall.addr': { - category: 'fortinet', - description: 'IP Address ', - name: 'fortinet.firewall.addr', - type: 'ip', - }, - 'fortinet.firewall.addr_type': { - category: 'fortinet', - description: 'Address Type ', - name: 'fortinet.firewall.addr_type', - type: 'keyword', - }, - 'fortinet.firewall.addrgrp': { - category: 'fortinet', - description: 'Address Group ', - name: 'fortinet.firewall.addrgrp', - type: 'keyword', - }, - 'fortinet.firewall.adgroup': { - category: 'fortinet', - description: 'AD Group Name ', - name: 'fortinet.firewall.adgroup', - type: 'keyword', - }, - 'fortinet.firewall.admin': { - category: 'fortinet', - description: 'Admin User ', - name: 'fortinet.firewall.admin', - type: 'keyword', - }, - 'fortinet.firewall.age': { - category: 'fortinet', - description: 'Time in seconds - time passed since last seen ', - name: 'fortinet.firewall.age', - type: 'integer', - }, - 'fortinet.firewall.agent': { - category: 'fortinet', - description: 'User agent - eg. agent="Mozilla/5.0" ', - name: 'fortinet.firewall.agent', - type: 'keyword', - }, - 'fortinet.firewall.alarmid': { - category: 'fortinet', - description: 'Alarm ID ', - name: 'fortinet.firewall.alarmid', - type: 'integer', - }, - 'fortinet.firewall.alert': { - category: 'fortinet', - description: 'Alert ', - name: 'fortinet.firewall.alert', - type: 'keyword', - }, - 'fortinet.firewall.analyticscksum': { - category: 'fortinet', - description: 'The checksum of the file submitted for analytics ', - name: 'fortinet.firewall.analyticscksum', - type: 'keyword', - }, - 'fortinet.firewall.analyticssubmit': { - category: 'fortinet', - description: 'The flag for analytics submission ', - name: 'fortinet.firewall.analyticssubmit', - type: 'keyword', - }, - 'fortinet.firewall.ap': { - category: 'fortinet', - description: 'Access Point ', - name: 'fortinet.firewall.ap', - type: 'keyword', - }, - 'fortinet.firewall.app-type': { - category: 'fortinet', - description: 'Address Type ', - name: 'fortinet.firewall.app-type', - type: 'keyword', - }, - 'fortinet.firewall.appact': { - category: 'fortinet', - description: 'The security action from app control ', - name: 'fortinet.firewall.appact', - type: 'keyword', - }, - 'fortinet.firewall.appid': { - category: 'fortinet', - description: 'Application ID ', - name: 'fortinet.firewall.appid', - type: 'integer', - }, - 'fortinet.firewall.applist': { - category: 'fortinet', - description: 'Application Control profile ', - name: 'fortinet.firewall.applist', - type: 'keyword', - }, - 'fortinet.firewall.apprisk': { - category: 'fortinet', - description: 'Application Risk Level ', - name: 'fortinet.firewall.apprisk', - type: 'keyword', - }, - 'fortinet.firewall.apscan': { - category: 'fortinet', - description: 'The name of the AP, which scanned and detected the rogue AP ', - name: 'fortinet.firewall.apscan', - type: 'keyword', - }, - 'fortinet.firewall.apsn': { - category: 'fortinet', - description: 'Access Point ', - name: 'fortinet.firewall.apsn', - type: 'keyword', - }, - 'fortinet.firewall.apstatus': { - category: 'fortinet', - description: 'Access Point status ', - name: 'fortinet.firewall.apstatus', - type: 'keyword', - }, - 'fortinet.firewall.aptype': { - category: 'fortinet', - description: 'Access Point type ', - name: 'fortinet.firewall.aptype', - type: 'keyword', - }, - 'fortinet.firewall.assigned': { - category: 'fortinet', - description: 'Assigned IP Address ', - name: 'fortinet.firewall.assigned', - type: 'ip', - }, - 'fortinet.firewall.assignip': { - category: 'fortinet', - description: 'Assigned IP Address ', - name: 'fortinet.firewall.assignip', - type: 'ip', - }, - 'fortinet.firewall.attachment': { - category: 'fortinet', - description: 'The flag for email attachement ', - name: 'fortinet.firewall.attachment', - type: 'keyword', - }, - 'fortinet.firewall.attack': { - category: 'fortinet', - description: 'Attack Name ', - name: 'fortinet.firewall.attack', - type: 'keyword', - }, - 'fortinet.firewall.attackcontext': { - category: 'fortinet', - description: 'The trigger patterns and the packetdata with base64 encoding ', - name: 'fortinet.firewall.attackcontext', - type: 'keyword', - }, - 'fortinet.firewall.attackcontextid': { - category: 'fortinet', - description: 'Attack context id / total ', - name: 'fortinet.firewall.attackcontextid', - type: 'keyword', - }, - 'fortinet.firewall.attackid': { - category: 'fortinet', - description: 'Attack ID ', - name: 'fortinet.firewall.attackid', - type: 'integer', - }, - 'fortinet.firewall.auditid': { - category: 'fortinet', - description: 'Audit ID ', - name: 'fortinet.firewall.auditid', - type: 'long', - }, - 'fortinet.firewall.auditscore': { - category: 'fortinet', - description: 'The Audit Score ', - name: 'fortinet.firewall.auditscore', - type: 'keyword', - }, - 'fortinet.firewall.audittime': { - category: 'fortinet', - description: 'The time of the audit ', - name: 'fortinet.firewall.audittime', - type: 'long', - }, - 'fortinet.firewall.authgrp': { - category: 'fortinet', - description: 'Authorization Group ', - name: 'fortinet.firewall.authgrp', - type: 'keyword', - }, - 'fortinet.firewall.authid': { - category: 'fortinet', - description: 'Authentication ID ', - name: 'fortinet.firewall.authid', - type: 'keyword', - }, - 'fortinet.firewall.authproto': { - category: 'fortinet', - description: 'The protocol that initiated the authentication ', - name: 'fortinet.firewall.authproto', - type: 'keyword', - }, - 'fortinet.firewall.authserver': { - category: 'fortinet', - description: 'Authentication server ', - name: 'fortinet.firewall.authserver', - type: 'keyword', - }, - 'fortinet.firewall.bandwidth': { - category: 'fortinet', - description: 'Bandwidth ', - name: 'fortinet.firewall.bandwidth', - type: 'keyword', - }, - 'fortinet.firewall.banned_rule': { - category: 'fortinet', - description: 'NAC quarantine Banned Rule Name ', - name: 'fortinet.firewall.banned_rule', - type: 'keyword', - }, - 'fortinet.firewall.banned_src': { - category: 'fortinet', - description: 'NAC quarantine Banned Source IP ', - name: 'fortinet.firewall.banned_src', - type: 'keyword', - }, - 'fortinet.firewall.banword': { - category: 'fortinet', - description: 'Banned word ', - name: 'fortinet.firewall.banword', - type: 'keyword', - }, - 'fortinet.firewall.botnetdomain': { - category: 'fortinet', - description: 'Botnet Domain Name ', - name: 'fortinet.firewall.botnetdomain', - type: 'keyword', - }, - 'fortinet.firewall.botnetip': { - category: 'fortinet', - description: 'Botnet IP Address ', - name: 'fortinet.firewall.botnetip', - type: 'ip', - }, - 'fortinet.firewall.bssid': { - category: 'fortinet', - description: 'Service Set ID ', - name: 'fortinet.firewall.bssid', - type: 'keyword', - }, - 'fortinet.firewall.call_id': { - category: 'fortinet', - description: 'Caller ID ', - name: 'fortinet.firewall.call_id', - type: 'keyword', - }, - 'fortinet.firewall.carrier_ep': { - category: 'fortinet', - description: 'The FortiOS Carrier end-point identification ', - name: 'fortinet.firewall.carrier_ep', - type: 'keyword', - }, - 'fortinet.firewall.cat': { - category: 'fortinet', - description: 'DNS category ID ', - name: 'fortinet.firewall.cat', - type: 'integer', - }, - 'fortinet.firewall.category': { - category: 'fortinet', - description: 'Authentication category ', - name: 'fortinet.firewall.category', - type: 'keyword', - }, - 'fortinet.firewall.cc': { - category: 'fortinet', - description: 'CC Email Address ', - name: 'fortinet.firewall.cc', - type: 'keyword', - }, - 'fortinet.firewall.cdrcontent': { - category: 'fortinet', - description: 'Cdrcontent ', - name: 'fortinet.firewall.cdrcontent', - type: 'keyword', - }, - 'fortinet.firewall.centralnatid': { - category: 'fortinet', - description: 'Central NAT ID ', - name: 'fortinet.firewall.centralnatid', - type: 'integer', - }, - 'fortinet.firewall.cert': { - category: 'fortinet', - description: 'Certificate ', - name: 'fortinet.firewall.cert', - type: 'keyword', - }, - 'fortinet.firewall.cert-type': { - category: 'fortinet', - description: 'Certificate type ', - name: 'fortinet.firewall.cert-type', - type: 'keyword', - }, - 'fortinet.firewall.certhash': { - category: 'fortinet', - description: 'Certificate hash ', - name: 'fortinet.firewall.certhash', - type: 'keyword', - }, - 'fortinet.firewall.cfgattr': { - category: 'fortinet', - description: 'Configuration attribute ', - name: 'fortinet.firewall.cfgattr', - type: 'keyword', - }, - 'fortinet.firewall.cfgobj': { - category: 'fortinet', - description: 'Configuration object ', - name: 'fortinet.firewall.cfgobj', - type: 'keyword', - }, - 'fortinet.firewall.cfgpath': { - category: 'fortinet', - description: 'Configuration path ', - name: 'fortinet.firewall.cfgpath', - type: 'keyword', - }, - 'fortinet.firewall.cfgtid': { - category: 'fortinet', - description: 'Configuration transaction ID ', - name: 'fortinet.firewall.cfgtid', - type: 'keyword', - }, - 'fortinet.firewall.cfgtxpower': { - category: 'fortinet', - description: 'Configuration TX power ', - name: 'fortinet.firewall.cfgtxpower', - type: 'integer', - }, - 'fortinet.firewall.channel': { - category: 'fortinet', - description: 'Wireless Channel ', - name: 'fortinet.firewall.channel', - type: 'integer', - }, - 'fortinet.firewall.channeltype': { - category: 'fortinet', - description: 'SSH channel type ', - name: 'fortinet.firewall.channeltype', - type: 'keyword', - }, - 'fortinet.firewall.chassisid': { - category: 'fortinet', - description: 'Chassis ID ', - name: 'fortinet.firewall.chassisid', - type: 'integer', - }, - 'fortinet.firewall.checksum': { - category: 'fortinet', - description: 'The checksum of the scanned file ', - name: 'fortinet.firewall.checksum', - type: 'keyword', - }, - 'fortinet.firewall.chgheaders': { - category: 'fortinet', - description: 'HTTP Headers ', - name: 'fortinet.firewall.chgheaders', - type: 'keyword', - }, - 'fortinet.firewall.cldobjid': { - category: 'fortinet', - description: 'Connector object ID ', - name: 'fortinet.firewall.cldobjid', - type: 'keyword', - }, - 'fortinet.firewall.client_addr': { - category: 'fortinet', - description: 'Wifi client address ', - name: 'fortinet.firewall.client_addr', - type: 'keyword', - }, - 'fortinet.firewall.cloudaction': { - category: 'fortinet', - description: 'Cloud Action ', - name: 'fortinet.firewall.cloudaction', - type: 'keyword', - }, - 'fortinet.firewall.clouduser': { - category: 'fortinet', - description: 'Cloud User ', - name: 'fortinet.firewall.clouduser', - type: 'keyword', - }, - 'fortinet.firewall.column': { - category: 'fortinet', - description: 'VOIP Column ', - name: 'fortinet.firewall.column', - type: 'integer', - }, - 'fortinet.firewall.command': { - category: 'fortinet', - description: 'CLI Command ', - name: 'fortinet.firewall.command', - type: 'keyword', - }, - 'fortinet.firewall.community': { - category: 'fortinet', - description: 'SNMP Community ', - name: 'fortinet.firewall.community', - type: 'keyword', - }, - 'fortinet.firewall.configcountry': { - category: 'fortinet', - description: 'Configuration country ', - name: 'fortinet.firewall.configcountry', - type: 'keyword', - }, - 'fortinet.firewall.connection_type': { - category: 'fortinet', - description: 'FortiClient Connection Type ', - name: 'fortinet.firewall.connection_type', - type: 'keyword', - }, - 'fortinet.firewall.conserve': { - category: 'fortinet', - description: 'Flag for conserve mode ', - name: 'fortinet.firewall.conserve', - type: 'keyword', - }, - 'fortinet.firewall.constraint': { - category: 'fortinet', - description: 'WAF http protocol restrictions ', - name: 'fortinet.firewall.constraint', - type: 'keyword', - }, - 'fortinet.firewall.contentdisarmed': { - category: 'fortinet', - description: 'Email scanned content ', - name: 'fortinet.firewall.contentdisarmed', - type: 'keyword', - }, - 'fortinet.firewall.contenttype': { - category: 'fortinet', - description: 'Content Type from HTTP header ', - name: 'fortinet.firewall.contenttype', - type: 'keyword', - }, - 'fortinet.firewall.cookies': { - category: 'fortinet', - description: 'VPN Cookie ', - name: 'fortinet.firewall.cookies', - type: 'keyword', - }, - 'fortinet.firewall.count': { - category: 'fortinet', - description: 'Counts of action type ', - name: 'fortinet.firewall.count', - type: 'integer', - }, - 'fortinet.firewall.countapp': { - category: 'fortinet', - description: 'Number of App Ctrl logs associated with the session ', - name: 'fortinet.firewall.countapp', - type: 'integer', - }, - 'fortinet.firewall.countav': { - category: 'fortinet', - description: 'Number of AV logs associated with the session ', - name: 'fortinet.firewall.countav', - type: 'integer', - }, - 'fortinet.firewall.countcifs': { - category: 'fortinet', - description: 'Number of CIFS logs associated with the session ', - name: 'fortinet.firewall.countcifs', - type: 'integer', - }, - 'fortinet.firewall.countdlp': { - category: 'fortinet', - description: 'Number of DLP logs associated with the session ', - name: 'fortinet.firewall.countdlp', - type: 'integer', - }, - 'fortinet.firewall.countdns': { - category: 'fortinet', - description: 'Number of DNS logs associated with the session ', - name: 'fortinet.firewall.countdns', - type: 'integer', - }, - 'fortinet.firewall.countemail': { - category: 'fortinet', - description: 'Number of email logs associated with the session ', - name: 'fortinet.firewall.countemail', - type: 'integer', - }, - 'fortinet.firewall.countff': { - category: 'fortinet', - description: 'Number of ff logs associated with the session ', - name: 'fortinet.firewall.countff', - type: 'integer', - }, - 'fortinet.firewall.countips': { - category: 'fortinet', - description: 'Number of IPS logs associated with the session ', - name: 'fortinet.firewall.countips', - type: 'integer', - }, - 'fortinet.firewall.countssh': { - category: 'fortinet', - description: 'Number of SSH logs associated with the session ', - name: 'fortinet.firewall.countssh', - type: 'integer', - }, - 'fortinet.firewall.countssl': { - category: 'fortinet', - description: 'Number of SSL logs associated with the session ', - name: 'fortinet.firewall.countssl', - type: 'integer', - }, - 'fortinet.firewall.countwaf': { - category: 'fortinet', - description: 'Number of WAF logs associated with the session ', - name: 'fortinet.firewall.countwaf', - type: 'integer', - }, - 'fortinet.firewall.countweb': { - category: 'fortinet', - description: 'Number of Web filter logs associated with the session ', - name: 'fortinet.firewall.countweb', - type: 'integer', - }, - 'fortinet.firewall.cpu': { - category: 'fortinet', - description: 'CPU Usage ', - name: 'fortinet.firewall.cpu', - type: 'integer', - }, - 'fortinet.firewall.craction': { - category: 'fortinet', - description: 'Client Reputation Action ', - name: 'fortinet.firewall.craction', - type: 'integer', - }, - 'fortinet.firewall.criticalcount': { - category: 'fortinet', - description: 'Number of critical ratings ', - name: 'fortinet.firewall.criticalcount', - type: 'integer', - }, - 'fortinet.firewall.crl': { - category: 'fortinet', - description: 'Client Reputation Level ', - name: 'fortinet.firewall.crl', - type: 'keyword', - }, - 'fortinet.firewall.crlevel': { - category: 'fortinet', - description: 'Client Reputation Level ', - name: 'fortinet.firewall.crlevel', - type: 'keyword', - }, - 'fortinet.firewall.crscore': { - category: 'fortinet', - description: 'Some description ', - name: 'fortinet.firewall.crscore', - type: 'integer', - }, - 'fortinet.firewall.cveid': { - category: 'fortinet', - description: 'CVE ID ', - name: 'fortinet.firewall.cveid', - type: 'keyword', - }, - 'fortinet.firewall.daemon': { - category: 'fortinet', - description: 'Daemon name ', - name: 'fortinet.firewall.daemon', - type: 'keyword', - }, - 'fortinet.firewall.datarange': { - category: 'fortinet', - description: 'Data range for reports ', - name: 'fortinet.firewall.datarange', - type: 'keyword', - }, - 'fortinet.firewall.date': { - category: 'fortinet', - description: 'Date ', - name: 'fortinet.firewall.date', - type: 'keyword', - }, - 'fortinet.firewall.ddnsserver': { - category: 'fortinet', - description: 'DDNS server ', - name: 'fortinet.firewall.ddnsserver', - type: 'ip', - }, - 'fortinet.firewall.desc': { - category: 'fortinet', - description: 'Description ', - name: 'fortinet.firewall.desc', - type: 'keyword', - }, - 'fortinet.firewall.detectionmethod': { - category: 'fortinet', - description: 'Detection method ', - name: 'fortinet.firewall.detectionmethod', - type: 'keyword', - }, - 'fortinet.firewall.devcategory': { - category: 'fortinet', - description: 'Device category ', - name: 'fortinet.firewall.devcategory', - type: 'keyword', - }, - 'fortinet.firewall.devintfname': { - category: 'fortinet', - description: 'HA device Interface Name ', - name: 'fortinet.firewall.devintfname', - type: 'keyword', - }, - 'fortinet.firewall.devtype': { - category: 'fortinet', - description: 'Device type ', - name: 'fortinet.firewall.devtype', - type: 'keyword', - }, - 'fortinet.firewall.dhcp_msg': { - category: 'fortinet', - description: 'DHCP Message ', - name: 'fortinet.firewall.dhcp_msg', - type: 'keyword', - }, - 'fortinet.firewall.dintf': { - category: 'fortinet', - description: 'Destination interface ', - name: 'fortinet.firewall.dintf', - type: 'keyword', - }, - 'fortinet.firewall.disk': { - category: 'fortinet', - description: 'Assosciated disk ', - name: 'fortinet.firewall.disk', - type: 'keyword', - }, - 'fortinet.firewall.disklograte': { - category: 'fortinet', - description: 'Disk logging rate ', - name: 'fortinet.firewall.disklograte', - type: 'long', - }, - 'fortinet.firewall.dlpextra': { - category: 'fortinet', - description: 'DLP extra information ', - name: 'fortinet.firewall.dlpextra', - type: 'keyword', - }, - 'fortinet.firewall.docsource': { - category: 'fortinet', - description: 'DLP fingerprint document source ', - name: 'fortinet.firewall.docsource', - type: 'keyword', - }, - 'fortinet.firewall.domainctrlauthstate': { - category: 'fortinet', - description: 'CIFS domain auth state ', - name: 'fortinet.firewall.domainctrlauthstate', - type: 'integer', - }, - 'fortinet.firewall.domainctrlauthtype': { - category: 'fortinet', - description: 'CIFS domain auth type ', - name: 'fortinet.firewall.domainctrlauthtype', - type: 'integer', - }, - 'fortinet.firewall.domainctrldomain': { - category: 'fortinet', - description: 'CIFS domain auth domain ', - name: 'fortinet.firewall.domainctrldomain', - type: 'keyword', - }, - 'fortinet.firewall.domainctrlip': { - category: 'fortinet', - description: 'CIFS Domain IP ', - name: 'fortinet.firewall.domainctrlip', - type: 'ip', - }, - 'fortinet.firewall.domainctrlname': { - category: 'fortinet', - description: 'CIFS Domain name ', - name: 'fortinet.firewall.domainctrlname', - type: 'keyword', - }, - 'fortinet.firewall.domainctrlprotocoltype': { - category: 'fortinet', - description: 'CIFS Domain connection protocol ', - name: 'fortinet.firewall.domainctrlprotocoltype', - type: 'integer', - }, - 'fortinet.firewall.domainctrlusername': { - category: 'fortinet', - description: 'CIFS Domain username ', - name: 'fortinet.firewall.domainctrlusername', - type: 'keyword', - }, - 'fortinet.firewall.domainfilteridx': { - category: 'fortinet', - description: 'Domain filter ID ', - name: 'fortinet.firewall.domainfilteridx', - type: 'integer', - }, - 'fortinet.firewall.domainfilterlist': { - category: 'fortinet', - description: 'Domain filter name ', - name: 'fortinet.firewall.domainfilterlist', - type: 'keyword', - }, - 'fortinet.firewall.ds': { - category: 'fortinet', - description: 'Direction with distribution system ', - name: 'fortinet.firewall.ds', - type: 'keyword', - }, - 'fortinet.firewall.dst_int': { - category: 'fortinet', - description: 'Destination interface ', - name: 'fortinet.firewall.dst_int', - type: 'keyword', - }, - 'fortinet.firewall.dstintfrole': { - category: 'fortinet', - description: 'Destination interface role ', - name: 'fortinet.firewall.dstintfrole', - type: 'keyword', - }, - 'fortinet.firewall.dstcountry': { - category: 'fortinet', - description: 'Destination country ', - name: 'fortinet.firewall.dstcountry', - type: 'keyword', - }, - 'fortinet.firewall.dstdevcategory': { - category: 'fortinet', - description: 'Destination device category ', - name: 'fortinet.firewall.dstdevcategory', - type: 'keyword', - }, - 'fortinet.firewall.dstdevtype': { - category: 'fortinet', - description: 'Destination device type ', - name: 'fortinet.firewall.dstdevtype', - type: 'keyword', - }, - 'fortinet.firewall.dstfamily': { - category: 'fortinet', - description: 'Destination OS family ', - name: 'fortinet.firewall.dstfamily', - type: 'keyword', - }, - 'fortinet.firewall.dsthwvendor': { - category: 'fortinet', - description: 'Destination HW vendor ', - name: 'fortinet.firewall.dsthwvendor', - type: 'keyword', - }, - 'fortinet.firewall.dsthwversion': { - category: 'fortinet', - description: 'Destination HW version ', - name: 'fortinet.firewall.dsthwversion', - type: 'keyword', - }, - 'fortinet.firewall.dstinetsvc': { - category: 'fortinet', - description: 'Destination interface service ', - name: 'fortinet.firewall.dstinetsvc', - type: 'keyword', - }, - 'fortinet.firewall.dstosname': { - category: 'fortinet', - description: 'Destination OS name ', - name: 'fortinet.firewall.dstosname', - type: 'keyword', - }, - 'fortinet.firewall.dstosversion': { - category: 'fortinet', - description: 'Destination OS version ', - name: 'fortinet.firewall.dstosversion', - type: 'keyword', - }, - 'fortinet.firewall.dstserver': { - category: 'fortinet', - description: 'Destination server ', - name: 'fortinet.firewall.dstserver', - type: 'integer', - }, - 'fortinet.firewall.dstssid': { - category: 'fortinet', - description: 'Destination SSID ', - name: 'fortinet.firewall.dstssid', - type: 'keyword', - }, - 'fortinet.firewall.dstswversion': { - category: 'fortinet', - description: 'Destination software version ', - name: 'fortinet.firewall.dstswversion', - type: 'keyword', - }, - 'fortinet.firewall.dstunauthusersource': { - category: 'fortinet', - description: 'Destination unauthenticated source ', - name: 'fortinet.firewall.dstunauthusersource', - type: 'keyword', - }, - 'fortinet.firewall.dstuuid': { - category: 'fortinet', - description: 'UUID of the Destination IP address ', - name: 'fortinet.firewall.dstuuid', - type: 'keyword', - }, - 'fortinet.firewall.duid': { - category: 'fortinet', - description: 'DHCP UID ', - name: 'fortinet.firewall.duid', - type: 'keyword', - }, - 'fortinet.firewall.eapolcnt': { - category: 'fortinet', - description: 'EAPOL packet count ', - name: 'fortinet.firewall.eapolcnt', - type: 'integer', - }, - 'fortinet.firewall.eapoltype': { - category: 'fortinet', - description: 'EAPOL packet type ', - name: 'fortinet.firewall.eapoltype', - type: 'keyword', - }, - 'fortinet.firewall.encrypt': { - category: 'fortinet', - description: 'Whether the packet is encrypted or not ', - name: 'fortinet.firewall.encrypt', - type: 'integer', - }, - 'fortinet.firewall.encryption': { - category: 'fortinet', - description: 'Encryption method ', - name: 'fortinet.firewall.encryption', - type: 'keyword', - }, - 'fortinet.firewall.epoch': { - category: 'fortinet', - description: 'Epoch used for locating file ', - name: 'fortinet.firewall.epoch', - type: 'integer', - }, - 'fortinet.firewall.espauth': { - category: 'fortinet', - description: 'ESP Authentication ', - name: 'fortinet.firewall.espauth', - type: 'keyword', - }, - 'fortinet.firewall.esptransform': { - category: 'fortinet', - description: 'ESP Transform ', - name: 'fortinet.firewall.esptransform', - type: 'keyword', - }, - 'fortinet.firewall.eventtype': { - category: 'fortinet', - description: 'UTM Event Type ', - name: 'fortinet.firewall.eventtype', - type: 'keyword', - }, - 'fortinet.firewall.exch': { - category: 'fortinet', - description: 'Mail Exchanges from DNS response answer section ', - name: 'fortinet.firewall.exch', - type: 'keyword', - }, - 'fortinet.firewall.exchange': { - category: 'fortinet', - description: 'Mail Exchanges from DNS response answer section ', - name: 'fortinet.firewall.exchange', - type: 'keyword', - }, - 'fortinet.firewall.expectedsignature': { - category: 'fortinet', - description: 'Expected SSL signature ', - name: 'fortinet.firewall.expectedsignature', - type: 'keyword', - }, - 'fortinet.firewall.expiry': { - category: 'fortinet', - description: 'FortiGuard override expiry timestamp ', - name: 'fortinet.firewall.expiry', - type: 'keyword', - }, - 'fortinet.firewall.fams_pause': { - category: 'fortinet', - description: 'Fortinet Analysis and Management Service Pause ', - name: 'fortinet.firewall.fams_pause', - type: 'integer', - }, - 'fortinet.firewall.fazlograte': { - category: 'fortinet', - description: 'FortiAnalyzer Logging Rate ', - name: 'fortinet.firewall.fazlograte', - type: 'long', - }, - 'fortinet.firewall.fctemssn': { - category: 'fortinet', - description: 'FortiClient Endpoint SSN ', - name: 'fortinet.firewall.fctemssn', - type: 'keyword', - }, - 'fortinet.firewall.fctuid': { - category: 'fortinet', - description: 'FortiClient UID ', - name: 'fortinet.firewall.fctuid', - type: 'keyword', - }, - 'fortinet.firewall.field': { - category: 'fortinet', - description: 'NTP status field ', - name: 'fortinet.firewall.field', - type: 'keyword', - }, - 'fortinet.firewall.filefilter': { - category: 'fortinet', - description: 'The filter used to identify the affected file ', - name: 'fortinet.firewall.filefilter', - type: 'keyword', - }, - 'fortinet.firewall.filehashsrc': { - category: 'fortinet', - description: 'Filehash source ', - name: 'fortinet.firewall.filehashsrc', - type: 'keyword', - }, - 'fortinet.firewall.filtercat': { - category: 'fortinet', - description: 'DLP filter category ', - name: 'fortinet.firewall.filtercat', - type: 'keyword', - }, - 'fortinet.firewall.filteridx': { - category: 'fortinet', - description: 'DLP filter ID ', - name: 'fortinet.firewall.filteridx', - type: 'integer', - }, - 'fortinet.firewall.filtername': { - category: 'fortinet', - description: 'DLP rule name ', - name: 'fortinet.firewall.filtername', - type: 'keyword', - }, - 'fortinet.firewall.filtertype': { - category: 'fortinet', - description: 'DLP filter type ', - name: 'fortinet.firewall.filtertype', - type: 'keyword', - }, - 'fortinet.firewall.fortiguardresp': { - category: 'fortinet', - description: 'Antispam ESP value ', - name: 'fortinet.firewall.fortiguardresp', - type: 'keyword', - }, - 'fortinet.firewall.forwardedfor': { - category: 'fortinet', - description: 'Email address forwarded ', - name: 'fortinet.firewall.forwardedfor', - type: 'keyword', - }, - 'fortinet.firewall.fqdn': { - category: 'fortinet', - description: 'FQDN ', - name: 'fortinet.firewall.fqdn', - type: 'keyword', - }, - 'fortinet.firewall.frametype': { - category: 'fortinet', - description: 'Wireless frametype ', - name: 'fortinet.firewall.frametype', - type: 'keyword', - }, - 'fortinet.firewall.freediskstorage': { - category: 'fortinet', - description: 'Free disk integer ', - name: 'fortinet.firewall.freediskstorage', - type: 'integer', - }, - 'fortinet.firewall.from': { - category: 'fortinet', - description: 'From email address ', - name: 'fortinet.firewall.from', - type: 'keyword', - }, - 'fortinet.firewall.from_vcluster': { - category: 'fortinet', - description: 'Source virtual cluster number ', - name: 'fortinet.firewall.from_vcluster', - type: 'integer', - }, - 'fortinet.firewall.fsaverdict': { - category: 'fortinet', - description: 'FSA verdict ', - name: 'fortinet.firewall.fsaverdict', - type: 'keyword', - }, - 'fortinet.firewall.fwserver_name': { - category: 'fortinet', - description: 'Web proxy server name ', - name: 'fortinet.firewall.fwserver_name', - type: 'keyword', - }, - 'fortinet.firewall.gateway': { - category: 'fortinet', - description: 'Gateway ip address for PPPoE status report ', - name: 'fortinet.firewall.gateway', - type: 'ip', - }, - 'fortinet.firewall.green': { - category: 'fortinet', - description: 'Memory status ', - name: 'fortinet.firewall.green', - type: 'keyword', - }, - 'fortinet.firewall.groupid': { - category: 'fortinet', - description: 'User Group ID ', - name: 'fortinet.firewall.groupid', - type: 'integer', - }, - 'fortinet.firewall.ha-prio': { - category: 'fortinet', - description: 'HA Priority ', - name: 'fortinet.firewall.ha-prio', - type: 'integer', - }, - 'fortinet.firewall.ha_group': { - category: 'fortinet', - description: 'HA Group ', - name: 'fortinet.firewall.ha_group', - type: 'keyword', - }, - 'fortinet.firewall.ha_role': { - category: 'fortinet', - description: 'HA Role ', - name: 'fortinet.firewall.ha_role', - type: 'keyword', - }, - 'fortinet.firewall.handshake': { - category: 'fortinet', - description: 'SSL Handshake ', - name: 'fortinet.firewall.handshake', - type: 'keyword', - }, - 'fortinet.firewall.hash': { - category: 'fortinet', - description: 'Hash value of downloaded file ', - name: 'fortinet.firewall.hash', - type: 'keyword', - }, - 'fortinet.firewall.hbdn_reason': { - category: 'fortinet', - description: 'Heartbeat down reason ', - name: 'fortinet.firewall.hbdn_reason', - type: 'keyword', - }, - 'fortinet.firewall.highcount': { - category: 'fortinet', - description: 'Highcount fabric summary ', - name: 'fortinet.firewall.highcount', - type: 'integer', - }, - 'fortinet.firewall.host': { - category: 'fortinet', - description: 'Hostname ', - name: 'fortinet.firewall.host', - type: 'keyword', - }, - 'fortinet.firewall.iaid': { - category: 'fortinet', - description: 'DHCPv6 id ', - name: 'fortinet.firewall.iaid', - type: 'keyword', - }, - 'fortinet.firewall.icmpcode': { - category: 'fortinet', - description: 'Destination Port of the ICMP message ', - name: 'fortinet.firewall.icmpcode', - type: 'keyword', - }, - 'fortinet.firewall.icmpid': { - category: 'fortinet', - description: 'Source port of the ICMP message ', - name: 'fortinet.firewall.icmpid', - type: 'keyword', - }, - 'fortinet.firewall.icmptype': { - category: 'fortinet', - description: 'The type of ICMP message ', - name: 'fortinet.firewall.icmptype', - type: 'keyword', - }, - 'fortinet.firewall.identifier': { - category: 'fortinet', - description: 'Network traffic identifier ', - name: 'fortinet.firewall.identifier', - type: 'integer', - }, - 'fortinet.firewall.in_spi': { - category: 'fortinet', - description: 'IPSEC inbound SPI ', - name: 'fortinet.firewall.in_spi', - type: 'keyword', - }, - 'fortinet.firewall.incidentserialno': { - category: 'fortinet', - description: 'Incident serial number ', - name: 'fortinet.firewall.incidentserialno', - type: 'integer', - }, - 'fortinet.firewall.infected': { - category: 'fortinet', - description: 'Infected MMS ', - name: 'fortinet.firewall.infected', - type: 'integer', - }, - 'fortinet.firewall.infectedfilelevel': { - category: 'fortinet', - description: 'DLP infected file level ', - name: 'fortinet.firewall.infectedfilelevel', - type: 'integer', - }, - 'fortinet.firewall.informationsource': { - category: 'fortinet', - description: 'Information source ', - name: 'fortinet.firewall.informationsource', - type: 'keyword', - }, - 'fortinet.firewall.init': { - category: 'fortinet', - description: 'IPSEC init stage ', - name: 'fortinet.firewall.init', - type: 'keyword', - }, - 'fortinet.firewall.initiator': { - category: 'fortinet', - description: 'Original login user name for Fortiguard override ', - name: 'fortinet.firewall.initiator', - type: 'keyword', - }, - 'fortinet.firewall.interface': { - category: 'fortinet', - description: 'Related interface ', - name: 'fortinet.firewall.interface', - type: 'keyword', - }, - 'fortinet.firewall.intf': { - category: 'fortinet', - description: 'Related interface ', - name: 'fortinet.firewall.intf', - type: 'keyword', - }, - 'fortinet.firewall.invalidmac': { - category: 'fortinet', - description: 'The MAC address with invalid OUI ', - name: 'fortinet.firewall.invalidmac', - type: 'keyword', - }, - 'fortinet.firewall.ip': { - category: 'fortinet', - description: 'Related IP ', - name: 'fortinet.firewall.ip', - type: 'ip', - }, - 'fortinet.firewall.iptype': { - category: 'fortinet', - description: 'Related IP type ', - name: 'fortinet.firewall.iptype', - type: 'keyword', - }, - 'fortinet.firewall.keyword': { - category: 'fortinet', - description: 'Keyword used for search ', - name: 'fortinet.firewall.keyword', - type: 'keyword', - }, - 'fortinet.firewall.kind': { - category: 'fortinet', - description: 'VOIP kind ', - name: 'fortinet.firewall.kind', - type: 'keyword', - }, - 'fortinet.firewall.lanin': { - category: 'fortinet', - description: 'LAN incoming traffic in bytes ', - name: 'fortinet.firewall.lanin', - type: 'long', - }, - 'fortinet.firewall.lanout': { - category: 'fortinet', - description: 'LAN outbound traffic in bytes ', - name: 'fortinet.firewall.lanout', - type: 'long', - }, - 'fortinet.firewall.lease': { - category: 'fortinet', - description: 'DHCP lease ', - name: 'fortinet.firewall.lease', - type: 'integer', - }, - 'fortinet.firewall.license_limit': { - category: 'fortinet', - description: 'Maximum Number of FortiClients for the License ', - name: 'fortinet.firewall.license_limit', - type: 'keyword', - }, - 'fortinet.firewall.limit': { - category: 'fortinet', - description: 'Virtual Domain Resource Limit ', - name: 'fortinet.firewall.limit', - type: 'integer', - }, - 'fortinet.firewall.line': { - category: 'fortinet', - description: 'VOIP line ', - name: 'fortinet.firewall.line', - type: 'keyword', - }, - 'fortinet.firewall.live': { - category: 'fortinet', - description: 'Time in seconds ', - name: 'fortinet.firewall.live', - type: 'integer', - }, - 'fortinet.firewall.local': { - category: 'fortinet', - description: 'Local IP for a PPPD Connection ', - name: 'fortinet.firewall.local', - type: 'ip', - }, - 'fortinet.firewall.log': { - category: 'fortinet', - description: 'Log message ', - name: 'fortinet.firewall.log', - type: 'keyword', - }, - 'fortinet.firewall.login': { - category: 'fortinet', - description: 'SSH login ', - name: 'fortinet.firewall.login', - type: 'keyword', - }, - 'fortinet.firewall.lowcount': { - category: 'fortinet', - description: 'Fabric lowcount ', - name: 'fortinet.firewall.lowcount', - type: 'integer', - }, - 'fortinet.firewall.mac': { - category: 'fortinet', - description: 'DHCP mac address ', - name: 'fortinet.firewall.mac', - type: 'keyword', - }, - 'fortinet.firewall.malform_data': { - category: 'fortinet', - description: 'VOIP malformed data ', - name: 'fortinet.firewall.malform_data', - type: 'integer', - }, - 'fortinet.firewall.malform_desc': { - category: 'fortinet', - description: 'VOIP malformed data description ', - name: 'fortinet.firewall.malform_desc', - type: 'keyword', - }, - 'fortinet.firewall.manuf': { - category: 'fortinet', - description: 'Manufacturer name ', - name: 'fortinet.firewall.manuf', - type: 'keyword', - }, - 'fortinet.firewall.masterdstmac': { - category: 'fortinet', - description: 'Master mac address for a host with multiple network interfaces ', - name: 'fortinet.firewall.masterdstmac', - type: 'keyword', - }, - 'fortinet.firewall.mastersrcmac': { - category: 'fortinet', - description: 'The master MAC address for a host that has multiple network interfaces ', - name: 'fortinet.firewall.mastersrcmac', - type: 'keyword', - }, - 'fortinet.firewall.mediumcount': { - category: 'fortinet', - description: 'Fabric medium count ', - name: 'fortinet.firewall.mediumcount', - type: 'integer', - }, - 'fortinet.firewall.mem': { - category: 'fortinet', - description: 'Memory usage system statistics ', - name: 'fortinet.firewall.mem', - type: 'integer', - }, - 'fortinet.firewall.meshmode': { - category: 'fortinet', - description: 'Wireless mesh mode ', - name: 'fortinet.firewall.meshmode', - type: 'keyword', - }, - 'fortinet.firewall.message_type': { - category: 'fortinet', - description: 'VOIP message type ', - name: 'fortinet.firewall.message_type', - type: 'keyword', - }, - 'fortinet.firewall.method': { - category: 'fortinet', - description: 'HTTP method ', - name: 'fortinet.firewall.method', - type: 'keyword', - }, - 'fortinet.firewall.mgmtcnt': { - category: 'fortinet', - description: 'The number of unauthorized client flooding managemet frames ', - name: 'fortinet.firewall.mgmtcnt', - type: 'integer', - }, - 'fortinet.firewall.mode': { - category: 'fortinet', - description: 'IPSEC mode ', - name: 'fortinet.firewall.mode', - type: 'keyword', - }, - 'fortinet.firewall.module': { - category: 'fortinet', - description: 'PCI-DSS module ', - name: 'fortinet.firewall.module', - type: 'keyword', - }, - 'fortinet.firewall.monitor-name': { - category: 'fortinet', - description: 'Health Monitor Name ', - name: 'fortinet.firewall.monitor-name', - type: 'keyword', - }, - 'fortinet.firewall.monitor-type': { - category: 'fortinet', - description: 'Health Monitor Type ', - name: 'fortinet.firewall.monitor-type', - type: 'keyword', - }, - 'fortinet.firewall.mpsk': { - category: 'fortinet', - description: 'Wireless MPSK ', - name: 'fortinet.firewall.mpsk', - type: 'keyword', - }, - 'fortinet.firewall.msgproto': { - category: 'fortinet', - description: 'Message Protocol Number ', - name: 'fortinet.firewall.msgproto', - type: 'keyword', - }, - 'fortinet.firewall.mtu': { - category: 'fortinet', - description: 'Max Transmission Unit Value ', - name: 'fortinet.firewall.mtu', - type: 'integer', - }, - 'fortinet.firewall.name': { - category: 'fortinet', - description: 'Name ', - name: 'fortinet.firewall.name', - type: 'keyword', - }, - 'fortinet.firewall.nat': { - category: 'fortinet', - description: 'NAT IP Address ', - name: 'fortinet.firewall.nat', - type: 'keyword', - }, - 'fortinet.firewall.netid': { - category: 'fortinet', - description: 'Connector NetID ', - name: 'fortinet.firewall.netid', - type: 'keyword', - }, - 'fortinet.firewall.new_status': { - category: 'fortinet', - description: 'New status on user change ', - name: 'fortinet.firewall.new_status', - type: 'keyword', - }, - 'fortinet.firewall.new_value': { - category: 'fortinet', - description: 'New Virtual Domain Name ', - name: 'fortinet.firewall.new_value', - type: 'keyword', - }, - 'fortinet.firewall.newchannel': { - category: 'fortinet', - description: 'New Channel Number ', - name: 'fortinet.firewall.newchannel', - type: 'integer', - }, - 'fortinet.firewall.newchassisid': { - category: 'fortinet', - description: 'New Chassis ID ', - name: 'fortinet.firewall.newchassisid', - type: 'integer', - }, - 'fortinet.firewall.newslot': { - category: 'fortinet', - description: 'New Slot Number ', - name: 'fortinet.firewall.newslot', - type: 'integer', - }, - 'fortinet.firewall.nextstat': { - category: 'fortinet', - description: 'Time interval in seconds for the next statistics. ', - name: 'fortinet.firewall.nextstat', - type: 'integer', - }, - 'fortinet.firewall.nf_type': { - category: 'fortinet', - description: 'Notification Type ', - name: 'fortinet.firewall.nf_type', - type: 'keyword', - }, - 'fortinet.firewall.noise': { - category: 'fortinet', - description: 'Wifi Noise ', - name: 'fortinet.firewall.noise', - type: 'integer', - }, - 'fortinet.firewall.old_status': { - category: 'fortinet', - description: 'Original Status ', - name: 'fortinet.firewall.old_status', - type: 'keyword', - }, - 'fortinet.firewall.old_value': { - category: 'fortinet', - description: 'Original Virtual Domain name ', - name: 'fortinet.firewall.old_value', - type: 'keyword', - }, - 'fortinet.firewall.oldchannel': { - category: 'fortinet', - description: 'Original channel ', - name: 'fortinet.firewall.oldchannel', - type: 'integer', - }, - 'fortinet.firewall.oldchassisid': { - category: 'fortinet', - description: 'Original Chassis Number ', - name: 'fortinet.firewall.oldchassisid', - type: 'integer', - }, - 'fortinet.firewall.oldslot': { - category: 'fortinet', - description: 'Original Slot Number ', - name: 'fortinet.firewall.oldslot', - type: 'integer', - }, - 'fortinet.firewall.oldsn': { - category: 'fortinet', - description: 'Old Serial number ', - name: 'fortinet.firewall.oldsn', - type: 'keyword', - }, - 'fortinet.firewall.oldwprof': { - category: 'fortinet', - description: 'Old Web Filter Profile ', - name: 'fortinet.firewall.oldwprof', - type: 'keyword', - }, - 'fortinet.firewall.onwire': { - category: 'fortinet', - description: 'A flag to indicate if the AP is onwire or not ', - name: 'fortinet.firewall.onwire', - type: 'keyword', - }, - 'fortinet.firewall.opercountry': { - category: 'fortinet', - description: 'Operating Country ', - name: 'fortinet.firewall.opercountry', - type: 'keyword', - }, - 'fortinet.firewall.opertxpower': { - category: 'fortinet', - description: 'Operating TX power ', - name: 'fortinet.firewall.opertxpower', - type: 'integer', - }, - 'fortinet.firewall.osname': { - category: 'fortinet', - description: 'Operating System name ', - name: 'fortinet.firewall.osname', - type: 'keyword', - }, - 'fortinet.firewall.osversion': { - category: 'fortinet', - description: 'Operating System version ', - name: 'fortinet.firewall.osversion', - type: 'keyword', - }, - 'fortinet.firewall.out_spi': { - category: 'fortinet', - description: 'Out SPI ', - name: 'fortinet.firewall.out_spi', - type: 'keyword', - }, - 'fortinet.firewall.outintf': { - category: 'fortinet', - description: 'Out interface ', - name: 'fortinet.firewall.outintf', - type: 'keyword', - }, - 'fortinet.firewall.passedcount': { - category: 'fortinet', - description: 'Fabric passed count ', - name: 'fortinet.firewall.passedcount', - type: 'integer', - }, - 'fortinet.firewall.passwd': { - category: 'fortinet', - description: 'Changed user password information ', - name: 'fortinet.firewall.passwd', - type: 'keyword', - }, - 'fortinet.firewall.path': { - category: 'fortinet', - description: 'Path of looped configuration for security fabric ', - name: 'fortinet.firewall.path', - type: 'keyword', - }, - 'fortinet.firewall.peer': { - category: 'fortinet', - description: 'WAN optimization peer ', - name: 'fortinet.firewall.peer', - type: 'keyword', - }, - 'fortinet.firewall.peer_notif': { - category: 'fortinet', - description: 'VPN peer notification ', - name: 'fortinet.firewall.peer_notif', - type: 'keyword', - }, - 'fortinet.firewall.phase2_name': { - category: 'fortinet', - description: 'VPN phase2 name ', - name: 'fortinet.firewall.phase2_name', - type: 'keyword', - }, - 'fortinet.firewall.phone': { - category: 'fortinet', - description: 'VOIP Phone ', - name: 'fortinet.firewall.phone', - type: 'keyword', - }, - 'fortinet.firewall.pid': { - category: 'fortinet', - description: 'Process ID ', - name: 'fortinet.firewall.pid', - type: 'integer', - }, - 'fortinet.firewall.policytype': { - category: 'fortinet', - description: 'Policy Type ', - name: 'fortinet.firewall.policytype', - type: 'keyword', - }, - 'fortinet.firewall.poolname': { - category: 'fortinet', - description: 'IP Pool name ', - name: 'fortinet.firewall.poolname', - type: 'keyword', - }, - 'fortinet.firewall.port': { - category: 'fortinet', - description: 'Log upload error port ', - name: 'fortinet.firewall.port', - type: 'integer', - }, - 'fortinet.firewall.portbegin': { - category: 'fortinet', - description: 'IP Pool port number to begin ', - name: 'fortinet.firewall.portbegin', - type: 'integer', - }, - 'fortinet.firewall.portend': { - category: 'fortinet', - description: 'IP Pool port number to end ', - name: 'fortinet.firewall.portend', - type: 'integer', - }, - 'fortinet.firewall.probeproto': { - category: 'fortinet', - description: 'Link Monitor Probe Protocol ', - name: 'fortinet.firewall.probeproto', - type: 'keyword', - }, - 'fortinet.firewall.process': { - category: 'fortinet', - description: 'URL Filter process ', - name: 'fortinet.firewall.process', - type: 'keyword', - }, - 'fortinet.firewall.processtime': { - category: 'fortinet', - description: 'Process time for reports ', - name: 'fortinet.firewall.processtime', - type: 'integer', - }, - 'fortinet.firewall.profile': { - category: 'fortinet', - description: 'Profile Name ', - name: 'fortinet.firewall.profile', - type: 'keyword', - }, - 'fortinet.firewall.profile_vd': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.profile_vd', - type: 'keyword', - }, - 'fortinet.firewall.profilegroup': { - category: 'fortinet', - description: 'Profile Group Name ', - name: 'fortinet.firewall.profilegroup', - type: 'keyword', - }, - 'fortinet.firewall.profiletype': { - category: 'fortinet', - description: 'Profile Type ', - name: 'fortinet.firewall.profiletype', - type: 'keyword', - }, - 'fortinet.firewall.qtypeval': { - category: 'fortinet', - description: 'DNS question type value ', - name: 'fortinet.firewall.qtypeval', - type: 'integer', - }, - 'fortinet.firewall.quarskip': { - category: 'fortinet', - description: 'Quarantine skip explanation ', - name: 'fortinet.firewall.quarskip', - type: 'keyword', - }, - 'fortinet.firewall.quotaexceeded': { - category: 'fortinet', - description: 'If quota has been exceeded ', - name: 'fortinet.firewall.quotaexceeded', - type: 'keyword', - }, - 'fortinet.firewall.quotamax': { - category: 'fortinet', - description: 'Maximum quota allowed - in seconds if time-based - in bytes if traffic-based ', - name: 'fortinet.firewall.quotamax', - type: 'long', - }, - 'fortinet.firewall.quotatype': { - category: 'fortinet', - description: 'Quota type ', - name: 'fortinet.firewall.quotatype', - type: 'keyword', - }, - 'fortinet.firewall.quotaused': { - category: 'fortinet', - description: 'Quota used - in seconds if time-based - in bytes if trafficbased) ', - name: 'fortinet.firewall.quotaused', - type: 'long', - }, - 'fortinet.firewall.radioband': { - category: 'fortinet', - description: 'Radio band ', - name: 'fortinet.firewall.radioband', - type: 'keyword', - }, - 'fortinet.firewall.radioid': { - category: 'fortinet', - description: 'Radio ID ', - name: 'fortinet.firewall.radioid', - type: 'integer', - }, - 'fortinet.firewall.radioidclosest': { - category: 'fortinet', - description: 'Radio ID on the AP closest the rogue AP ', - name: 'fortinet.firewall.radioidclosest', - type: 'integer', - }, - 'fortinet.firewall.radioiddetected': { - category: 'fortinet', - description: 'Radio ID on the AP which detected the rogue AP ', - name: 'fortinet.firewall.radioiddetected', - type: 'integer', - }, - 'fortinet.firewall.rate': { - category: 'fortinet', - description: 'Wireless rogue rate value ', - name: 'fortinet.firewall.rate', - type: 'keyword', - }, - 'fortinet.firewall.rawdata': { - category: 'fortinet', - description: 'Raw data value ', - name: 'fortinet.firewall.rawdata', - type: 'keyword', - }, - 'fortinet.firewall.rawdataid': { - category: 'fortinet', - description: 'Raw data ID ', - name: 'fortinet.firewall.rawdataid', - type: 'keyword', - }, - 'fortinet.firewall.rcvddelta': { - category: 'fortinet', - description: 'Received bytes delta ', - name: 'fortinet.firewall.rcvddelta', - type: 'keyword', - }, - 'fortinet.firewall.reason': { - category: 'fortinet', - description: 'Alert reason ', - name: 'fortinet.firewall.reason', - type: 'keyword', - }, - 'fortinet.firewall.received': { - category: 'fortinet', - description: 'Server key exchange received ', - name: 'fortinet.firewall.received', - type: 'integer', - }, - 'fortinet.firewall.receivedsignature': { - category: 'fortinet', - description: 'Server key exchange received signature ', - name: 'fortinet.firewall.receivedsignature', - type: 'keyword', - }, - 'fortinet.firewall.red': { - category: 'fortinet', - description: 'Memory information in red ', - name: 'fortinet.firewall.red', - type: 'keyword', - }, - 'fortinet.firewall.referralurl': { - category: 'fortinet', - description: 'Web filter referralurl ', - name: 'fortinet.firewall.referralurl', - type: 'keyword', - }, - 'fortinet.firewall.remote': { - category: 'fortinet', - description: 'Remote PPP IP address ', - name: 'fortinet.firewall.remote', - type: 'ip', - }, - 'fortinet.firewall.remotewtptime': { - category: 'fortinet', - description: 'Remote Wifi Radius authentication time ', - name: 'fortinet.firewall.remotewtptime', - type: 'keyword', - }, - 'fortinet.firewall.reporttype': { - category: 'fortinet', - description: 'Report type ', - name: 'fortinet.firewall.reporttype', - type: 'keyword', - }, - 'fortinet.firewall.reqtype': { - category: 'fortinet', - description: 'Request type ', - name: 'fortinet.firewall.reqtype', - type: 'keyword', - }, - 'fortinet.firewall.request_name': { - category: 'fortinet', - description: 'VOIP request name ', - name: 'fortinet.firewall.request_name', - type: 'keyword', - }, - 'fortinet.firewall.result': { - category: 'fortinet', - description: 'VPN phase result ', - name: 'fortinet.firewall.result', - type: 'keyword', - }, - 'fortinet.firewall.role': { - category: 'fortinet', - description: 'VPN Phase 2 role ', - name: 'fortinet.firewall.role', - type: 'keyword', - }, - 'fortinet.firewall.rssi': { - category: 'fortinet', - description: 'Received signal strength indicator ', - name: 'fortinet.firewall.rssi', - type: 'integer', - }, - 'fortinet.firewall.rsso_key': { - category: 'fortinet', - description: 'RADIUS SSO attribute value ', - name: 'fortinet.firewall.rsso_key', - type: 'keyword', - }, - 'fortinet.firewall.ruledata': { - category: 'fortinet', - description: 'Rule data ', - name: 'fortinet.firewall.ruledata', - type: 'keyword', - }, - 'fortinet.firewall.ruletype': { - category: 'fortinet', - description: 'Rule type ', - name: 'fortinet.firewall.ruletype', - type: 'keyword', - }, - 'fortinet.firewall.scanned': { - category: 'fortinet', - description: 'Number of Scanned MMSs ', - name: 'fortinet.firewall.scanned', - type: 'integer', - }, - 'fortinet.firewall.scantime': { - category: 'fortinet', - description: 'Scanned time ', - name: 'fortinet.firewall.scantime', - type: 'long', - }, - 'fortinet.firewall.scope': { - category: 'fortinet', - description: 'FortiGuard Override Scope ', - name: 'fortinet.firewall.scope', - type: 'keyword', - }, - 'fortinet.firewall.security': { - category: 'fortinet', - description: 'Wireless rogue security ', - name: 'fortinet.firewall.security', - type: 'keyword', - }, - 'fortinet.firewall.sensitivity': { - category: 'fortinet', - description: 'Sensitivity for document fingerprint ', - name: 'fortinet.firewall.sensitivity', - type: 'keyword', - }, - 'fortinet.firewall.sensor': { - category: 'fortinet', - description: 'NAC Sensor Name ', - name: 'fortinet.firewall.sensor', - type: 'keyword', - }, - 'fortinet.firewall.sentdelta': { - category: 'fortinet', - description: 'Sent bytes delta ', - name: 'fortinet.firewall.sentdelta', - type: 'keyword', - }, - 'fortinet.firewall.seq': { - category: 'fortinet', - description: 'Sequence number ', - name: 'fortinet.firewall.seq', - type: 'keyword', - }, - 'fortinet.firewall.serial': { - category: 'fortinet', - description: 'WAN optimisation serial ', - name: 'fortinet.firewall.serial', - type: 'keyword', - }, - 'fortinet.firewall.serialno': { - category: 'fortinet', - description: 'Serial number ', - name: 'fortinet.firewall.serialno', - type: 'keyword', - }, - 'fortinet.firewall.server': { - category: 'fortinet', - description: 'AD server FQDN or IP ', - name: 'fortinet.firewall.server', - type: 'keyword', - }, - 'fortinet.firewall.session_id': { - category: 'fortinet', - description: 'Session ID ', - name: 'fortinet.firewall.session_id', - type: 'keyword', - }, - 'fortinet.firewall.sessionid': { - category: 'fortinet', - description: 'WAD Session ID ', - name: 'fortinet.firewall.sessionid', - type: 'integer', - }, - 'fortinet.firewall.setuprate': { - category: 'fortinet', - description: 'Session Setup Rate ', - name: 'fortinet.firewall.setuprate', - type: 'long', - }, - 'fortinet.firewall.severity': { - category: 'fortinet', - description: 'Severity ', - name: 'fortinet.firewall.severity', - type: 'keyword', - }, - 'fortinet.firewall.shaperdroprcvdbyte': { - category: 'fortinet', - description: 'Received bytes dropped by shaper ', - name: 'fortinet.firewall.shaperdroprcvdbyte', - type: 'integer', - }, - 'fortinet.firewall.shaperdropsentbyte': { - category: 'fortinet', - description: 'Sent bytes dropped by shaper ', - name: 'fortinet.firewall.shaperdropsentbyte', - type: 'integer', - }, - 'fortinet.firewall.shaperperipdropbyte': { - category: 'fortinet', - description: 'Dropped bytes per IP by shaper ', - name: 'fortinet.firewall.shaperperipdropbyte', - type: 'integer', - }, - 'fortinet.firewall.shaperperipname': { - category: 'fortinet', - description: 'Traffic shaper name (per IP) ', - name: 'fortinet.firewall.shaperperipname', - type: 'keyword', - }, - 'fortinet.firewall.shaperrcvdname': { - category: 'fortinet', - description: 'Traffic shaper name for received traffic ', - name: 'fortinet.firewall.shaperrcvdname', - type: 'keyword', - }, - 'fortinet.firewall.shapersentname': { - category: 'fortinet', - description: 'Traffic shaper name for sent traffic ', - name: 'fortinet.firewall.shapersentname', - type: 'keyword', - }, - 'fortinet.firewall.shapingpolicyid': { - category: 'fortinet', - description: 'Traffic shaper policy ID ', - name: 'fortinet.firewall.shapingpolicyid', - type: 'integer', - }, - 'fortinet.firewall.signal': { - category: 'fortinet', - description: 'Wireless rogue API signal ', - name: 'fortinet.firewall.signal', - type: 'integer', - }, - 'fortinet.firewall.size': { - category: 'fortinet', - description: 'Email size in bytes ', - name: 'fortinet.firewall.size', - type: 'long', - }, - 'fortinet.firewall.slot': { - category: 'fortinet', - description: 'Slot number ', - name: 'fortinet.firewall.slot', - type: 'integer', - }, - 'fortinet.firewall.sn': { - category: 'fortinet', - description: 'Security fabric serial number ', - name: 'fortinet.firewall.sn', - type: 'keyword', - }, - 'fortinet.firewall.snclosest': { - category: 'fortinet', - description: 'SN of the AP closest to the rogue AP ', - name: 'fortinet.firewall.snclosest', - type: 'keyword', - }, - 'fortinet.firewall.sndetected': { - category: 'fortinet', - description: 'SN of the AP which detected the rogue AP ', - name: 'fortinet.firewall.sndetected', - type: 'keyword', - }, - 'fortinet.firewall.snmeshparent': { - category: 'fortinet', - description: 'SN of the mesh parent ', - name: 'fortinet.firewall.snmeshparent', - type: 'keyword', - }, - 'fortinet.firewall.spi': { - category: 'fortinet', - description: 'IPSEC SPI ', - name: 'fortinet.firewall.spi', - type: 'keyword', - }, - 'fortinet.firewall.src_int': { - category: 'fortinet', - description: 'Source interface ', - name: 'fortinet.firewall.src_int', - type: 'keyword', - }, - 'fortinet.firewall.srcintfrole': { - category: 'fortinet', - description: 'Source interface role ', - name: 'fortinet.firewall.srcintfrole', - type: 'keyword', - }, - 'fortinet.firewall.srccountry': { - category: 'fortinet', - description: 'Source country ', - name: 'fortinet.firewall.srccountry', - type: 'keyword', - }, - 'fortinet.firewall.srcfamily': { - category: 'fortinet', - description: 'Source family ', - name: 'fortinet.firewall.srcfamily', - type: 'keyword', - }, - 'fortinet.firewall.srchwvendor': { - category: 'fortinet', - description: 'Source hardware vendor ', - name: 'fortinet.firewall.srchwvendor', - type: 'keyword', - }, - 'fortinet.firewall.srchwversion': { - category: 'fortinet', - description: 'Source hardware version ', - name: 'fortinet.firewall.srchwversion', - type: 'keyword', - }, - 'fortinet.firewall.srcinetsvc': { - category: 'fortinet', - description: 'Source interface service ', - name: 'fortinet.firewall.srcinetsvc', - type: 'keyword', - }, - 'fortinet.firewall.srcname': { - category: 'fortinet', - description: 'Source name ', - name: 'fortinet.firewall.srcname', - type: 'keyword', - }, - 'fortinet.firewall.srcserver': { - category: 'fortinet', - description: 'Source server ', - name: 'fortinet.firewall.srcserver', - type: 'integer', - }, - 'fortinet.firewall.srcssid': { - category: 'fortinet', - description: 'Source SSID ', - name: 'fortinet.firewall.srcssid', - type: 'keyword', - }, - 'fortinet.firewall.srcswversion': { - category: 'fortinet', - description: 'Source software version ', - name: 'fortinet.firewall.srcswversion', - type: 'keyword', - }, - 'fortinet.firewall.srcuuid': { - category: 'fortinet', - description: 'Source UUID ', - name: 'fortinet.firewall.srcuuid', - type: 'keyword', - }, - 'fortinet.firewall.sscname': { - category: 'fortinet', - description: 'SSC name ', - name: 'fortinet.firewall.sscname', - type: 'keyword', - }, - 'fortinet.firewall.ssid': { - category: 'fortinet', - description: 'Base Service Set ID ', - name: 'fortinet.firewall.ssid', - type: 'keyword', - }, - 'fortinet.firewall.sslaction': { - category: 'fortinet', - description: 'SSL Action ', - name: 'fortinet.firewall.sslaction', - type: 'keyword', - }, - 'fortinet.firewall.ssllocal': { - category: 'fortinet', - description: 'WAD SSL local ', - name: 'fortinet.firewall.ssllocal', - type: 'keyword', - }, - 'fortinet.firewall.sslremote': { - category: 'fortinet', - description: 'WAD SSL remote ', - name: 'fortinet.firewall.sslremote', - type: 'keyword', - }, - 'fortinet.firewall.stacount': { - category: 'fortinet', - description: 'Number of stations/clients ', - name: 'fortinet.firewall.stacount', - type: 'integer', - }, - 'fortinet.firewall.stage': { - category: 'fortinet', - description: 'IPSEC stage ', - name: 'fortinet.firewall.stage', - type: 'keyword', - }, - 'fortinet.firewall.stamac': { - category: 'fortinet', - description: '802.1x station mac ', - name: 'fortinet.firewall.stamac', - type: 'keyword', - }, - 'fortinet.firewall.state': { - category: 'fortinet', - description: 'Admin login state ', - name: 'fortinet.firewall.state', - type: 'keyword', - }, - 'fortinet.firewall.status': { - category: 'fortinet', - description: 'Status ', - name: 'fortinet.firewall.status', - type: 'keyword', - }, - 'fortinet.firewall.stitch': { - category: 'fortinet', - description: 'Automation stitch triggered ', - name: 'fortinet.firewall.stitch', - type: 'keyword', - }, - 'fortinet.firewall.subject': { - category: 'fortinet', - description: 'Email subject ', - name: 'fortinet.firewall.subject', - type: 'keyword', - }, - 'fortinet.firewall.submodule': { - category: 'fortinet', - description: 'Configuration Sub-Module Name ', - name: 'fortinet.firewall.submodule', - type: 'keyword', - }, - 'fortinet.firewall.subservice': { - category: 'fortinet', - description: 'AV subservice ', - name: 'fortinet.firewall.subservice', - type: 'keyword', - }, - 'fortinet.firewall.subtype': { - category: 'fortinet', - description: 'Log subtype ', - name: 'fortinet.firewall.subtype', - type: 'keyword', - }, - 'fortinet.firewall.suspicious': { - category: 'fortinet', - description: 'Number of Suspicious MMSs ', - name: 'fortinet.firewall.suspicious', - type: 'integer', - }, - 'fortinet.firewall.switchproto': { - category: 'fortinet', - description: 'Protocol change information ', - name: 'fortinet.firewall.switchproto', - type: 'keyword', - }, - 'fortinet.firewall.sync_status': { - category: 'fortinet', - description: 'The sync status with the master ', - name: 'fortinet.firewall.sync_status', - type: 'keyword', - }, - 'fortinet.firewall.sync_type': { - category: 'fortinet', - description: 'The sync type with the master ', - name: 'fortinet.firewall.sync_type', - type: 'keyword', - }, - 'fortinet.firewall.sysuptime': { - category: 'fortinet', - description: 'System uptime ', - name: 'fortinet.firewall.sysuptime', - type: 'keyword', - }, - 'fortinet.firewall.tamac': { - category: 'fortinet', - description: 'the MAC address of Transmitter, if none, then Receiver ', - name: 'fortinet.firewall.tamac', - type: 'keyword', - }, - 'fortinet.firewall.threattype': { - category: 'fortinet', - description: 'WIDS threat type ', - name: 'fortinet.firewall.threattype', - type: 'keyword', - }, - 'fortinet.firewall.time': { - category: 'fortinet', - description: 'Time of the event ', - name: 'fortinet.firewall.time', - type: 'keyword', - }, - 'fortinet.firewall.to': { - category: 'fortinet', - description: 'Email to field ', - name: 'fortinet.firewall.to', - type: 'keyword', - }, - 'fortinet.firewall.to_vcluster': { - category: 'fortinet', - description: 'destination virtual cluster number ', - name: 'fortinet.firewall.to_vcluster', - type: 'integer', - }, - 'fortinet.firewall.total': { - category: 'fortinet', - description: 'Total memory ', - name: 'fortinet.firewall.total', - type: 'integer', - }, - 'fortinet.firewall.totalsession': { - category: 'fortinet', - description: 'Total Number of Sessions ', - name: 'fortinet.firewall.totalsession', - type: 'integer', - }, - 'fortinet.firewall.trace_id': { - category: 'fortinet', - description: 'Session clash trace ID ', - name: 'fortinet.firewall.trace_id', - type: 'keyword', - }, - 'fortinet.firewall.trandisp': { - category: 'fortinet', - description: 'NAT translation type ', - name: 'fortinet.firewall.trandisp', - type: 'keyword', - }, - 'fortinet.firewall.transid': { - category: 'fortinet', - description: 'HTTP transaction ID ', - name: 'fortinet.firewall.transid', - type: 'integer', - }, - 'fortinet.firewall.translationid': { - category: 'fortinet', - description: 'DNS filter transaltion ID ', - name: 'fortinet.firewall.translationid', - type: 'keyword', - }, - 'fortinet.firewall.trigger': { - category: 'fortinet', - description: 'Automation stitch trigger ', - name: 'fortinet.firewall.trigger', - type: 'keyword', - }, - 'fortinet.firewall.trueclntip': { - category: 'fortinet', - description: 'File filter true client IP ', - name: 'fortinet.firewall.trueclntip', - type: 'ip', - }, - 'fortinet.firewall.tunnelid': { - category: 'fortinet', - description: 'IPSEC tunnel ID ', - name: 'fortinet.firewall.tunnelid', - type: 'integer', - }, - 'fortinet.firewall.tunnelip': { - category: 'fortinet', - description: 'IPSEC tunnel IP ', - name: 'fortinet.firewall.tunnelip', - type: 'ip', - }, - 'fortinet.firewall.tunneltype': { - category: 'fortinet', - description: 'IPSEC tunnel type ', - name: 'fortinet.firewall.tunneltype', - type: 'keyword', - }, - 'fortinet.firewall.type': { - category: 'fortinet', - description: 'Module type ', - name: 'fortinet.firewall.type', - type: 'keyword', - }, - 'fortinet.firewall.ui': { - category: 'fortinet', - description: 'Admin authentication UI type ', - name: 'fortinet.firewall.ui', - type: 'keyword', - }, - 'fortinet.firewall.unauthusersource': { - category: 'fortinet', - description: 'Unauthenticated user source ', - name: 'fortinet.firewall.unauthusersource', - type: 'keyword', - }, - 'fortinet.firewall.unit': { - category: 'fortinet', - description: 'Power supply unit ', - name: 'fortinet.firewall.unit', - type: 'integer', - }, - 'fortinet.firewall.urlfilteridx': { - category: 'fortinet', - description: 'URL filter ID ', - name: 'fortinet.firewall.urlfilteridx', - type: 'integer', - }, - 'fortinet.firewall.urlfilterlist': { - category: 'fortinet', - description: 'URL filter list ', - name: 'fortinet.firewall.urlfilterlist', - type: 'keyword', - }, - 'fortinet.firewall.urlsource': { - category: 'fortinet', - description: 'URL filter source ', - name: 'fortinet.firewall.urlsource', - type: 'keyword', - }, - 'fortinet.firewall.urltype': { - category: 'fortinet', - description: 'URL filter type ', - name: 'fortinet.firewall.urltype', - type: 'keyword', - }, - 'fortinet.firewall.used': { - category: 'fortinet', - description: 'Number of Used IPs ', - name: 'fortinet.firewall.used', - type: 'integer', - }, - 'fortinet.firewall.used_for_type': { - category: 'fortinet', - description: 'Connection for the type ', - name: 'fortinet.firewall.used_for_type', - type: 'integer', - }, - 'fortinet.firewall.utmaction': { - category: 'fortinet', - description: 'Security action performed by UTM ', - name: 'fortinet.firewall.utmaction', - type: 'keyword', - }, - 'fortinet.firewall.utmref': { - category: 'fortinet', - description: 'Reference to UTM ', - name: 'fortinet.firewall.utmref', - type: 'keyword', - }, - 'fortinet.firewall.vap': { - category: 'fortinet', - description: 'Virtual AP ', - name: 'fortinet.firewall.vap', - type: 'keyword', - }, - 'fortinet.firewall.vapmode': { - category: 'fortinet', - description: 'Virtual AP mode ', - name: 'fortinet.firewall.vapmode', - type: 'keyword', - }, - 'fortinet.firewall.vcluster': { - category: 'fortinet', - description: 'virtual cluster id ', - name: 'fortinet.firewall.vcluster', - type: 'integer', - }, - 'fortinet.firewall.vcluster_member': { - category: 'fortinet', - description: 'Virtual cluster member ', - name: 'fortinet.firewall.vcluster_member', - type: 'integer', - }, - 'fortinet.firewall.vcluster_state': { - category: 'fortinet', - description: 'Virtual cluster state ', - name: 'fortinet.firewall.vcluster_state', - type: 'keyword', - }, - 'fortinet.firewall.vd': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.vd', - type: 'keyword', - }, - 'fortinet.firewall.vdname': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.vdname', - type: 'keyword', - }, - 'fortinet.firewall.vendorurl': { - category: 'fortinet', - description: 'Vulnerability scan vendor name ', - name: 'fortinet.firewall.vendorurl', - type: 'keyword', - }, - 'fortinet.firewall.version': { - category: 'fortinet', - description: 'Version ', - name: 'fortinet.firewall.version', - type: 'keyword', - }, - 'fortinet.firewall.vip': { - category: 'fortinet', - description: 'Virtual IP ', - name: 'fortinet.firewall.vip', - type: 'keyword', - }, - 'fortinet.firewall.virus': { - category: 'fortinet', - description: 'Virus name ', - name: 'fortinet.firewall.virus', - type: 'keyword', - }, - 'fortinet.firewall.virusid': { - category: 'fortinet', - description: 'Virus ID (unique virus identifier) ', - name: 'fortinet.firewall.virusid', - type: 'integer', - }, - 'fortinet.firewall.voip_proto': { - category: 'fortinet', - description: 'VOIP protocol ', - name: 'fortinet.firewall.voip_proto', - type: 'keyword', - }, - 'fortinet.firewall.vpn': { - category: 'fortinet', - description: 'VPN description ', - name: 'fortinet.firewall.vpn', - type: 'keyword', - }, - 'fortinet.firewall.vpntunnel': { - category: 'fortinet', - description: 'IPsec Vpn Tunnel Name ', - name: 'fortinet.firewall.vpntunnel', - type: 'keyword', - }, - 'fortinet.firewall.vpntype': { - category: 'fortinet', - description: 'The type of the VPN tunnel ', - name: 'fortinet.firewall.vpntype', - type: 'keyword', - }, - 'fortinet.firewall.vrf': { - category: 'fortinet', - description: 'VRF number ', - name: 'fortinet.firewall.vrf', - type: 'integer', - }, - 'fortinet.firewall.vulncat': { - category: 'fortinet', - description: 'Vulnerability Category ', - name: 'fortinet.firewall.vulncat', - type: 'keyword', - }, - 'fortinet.firewall.vulnid': { - category: 'fortinet', - description: 'Vulnerability ID ', - name: 'fortinet.firewall.vulnid', - type: 'integer', - }, - 'fortinet.firewall.vulnname': { - category: 'fortinet', - description: 'Vulnerability name ', - name: 'fortinet.firewall.vulnname', - type: 'keyword', - }, - 'fortinet.firewall.vwlid': { - category: 'fortinet', - description: 'VWL ID ', - name: 'fortinet.firewall.vwlid', - type: 'integer', - }, - 'fortinet.firewall.vwlquality': { - category: 'fortinet', - description: 'VWL quality ', - name: 'fortinet.firewall.vwlquality', - type: 'keyword', - }, - 'fortinet.firewall.vwlservice': { - category: 'fortinet', - description: 'VWL service ', - name: 'fortinet.firewall.vwlservice', - type: 'keyword', - }, - 'fortinet.firewall.vwpvlanid': { - category: 'fortinet', - description: 'VWP VLAN ID ', - name: 'fortinet.firewall.vwpvlanid', - type: 'integer', - }, - 'fortinet.firewall.wanin': { - category: 'fortinet', - description: 'WAN incoming traffic in bytes ', - name: 'fortinet.firewall.wanin', - type: 'long', - }, - 'fortinet.firewall.wanoptapptype': { - category: 'fortinet', - description: 'WAN Optimization Application type ', - name: 'fortinet.firewall.wanoptapptype', - type: 'keyword', - }, - 'fortinet.firewall.wanout': { - category: 'fortinet', - description: 'WAN outgoing traffic in bytes ', - name: 'fortinet.firewall.wanout', - type: 'long', - }, - 'fortinet.firewall.weakwepiv': { - category: 'fortinet', - description: 'Weak Wep Initiation Vector ', - name: 'fortinet.firewall.weakwepiv', - type: 'keyword', - }, - 'fortinet.firewall.xauthgroup': { - category: 'fortinet', - description: 'XAuth Group Name ', - name: 'fortinet.firewall.xauthgroup', - type: 'keyword', - }, - 'fortinet.firewall.xauthuser': { - category: 'fortinet', - description: 'XAuth User Name ', - name: 'fortinet.firewall.xauthuser', - type: 'keyword', - }, - 'fortinet.firewall.xid': { - category: 'fortinet', - description: 'Wireless X ID ', - name: 'fortinet.firewall.xid', - type: 'integer', - }, - 'gcp.destination.instance.project_id': { - category: 'gcp', - description: 'ID of the project containing the VM. ', - name: 'gcp.destination.instance.project_id', - type: 'keyword', - }, - 'gcp.destination.instance.region': { - category: 'gcp', - description: 'Region of the VM. ', - name: 'gcp.destination.instance.region', - type: 'keyword', - }, - 'gcp.destination.instance.zone': { - category: 'gcp', - description: 'Zone of the VM. ', - name: 'gcp.destination.instance.zone', - type: 'keyword', - }, - 'gcp.destination.vpc.project_id': { - category: 'gcp', - description: 'ID of the project containing the VM. ', - name: 'gcp.destination.vpc.project_id', - type: 'keyword', - }, - 'gcp.destination.vpc.vpc_name': { - category: 'gcp', - description: 'VPC on which the VM is operating. ', - name: 'gcp.destination.vpc.vpc_name', - type: 'keyword', - }, - 'gcp.destination.vpc.subnetwork_name': { - category: 'gcp', - description: 'Subnetwork on which the VM is operating. ', - name: 'gcp.destination.vpc.subnetwork_name', - type: 'keyword', - }, - 'gcp.source.instance.project_id': { - category: 'gcp', - description: 'ID of the project containing the VM. ', - name: 'gcp.source.instance.project_id', - type: 'keyword', - }, - 'gcp.source.instance.region': { - category: 'gcp', - description: 'Region of the VM. ', - name: 'gcp.source.instance.region', - type: 'keyword', - }, - 'gcp.source.instance.zone': { - category: 'gcp', - description: 'Zone of the VM. ', - name: 'gcp.source.instance.zone', - type: 'keyword', - }, - 'gcp.source.vpc.project_id': { - category: 'gcp', - description: 'ID of the project containing the VM. ', - name: 'gcp.source.vpc.project_id', - type: 'keyword', - }, - 'gcp.source.vpc.vpc_name': { - category: 'gcp', - description: 'VPC on which the VM is operating. ', - name: 'gcp.source.vpc.vpc_name', - type: 'keyword', - }, - 'gcp.source.vpc.subnetwork_name': { - category: 'gcp', - description: 'Subnetwork on which the VM is operating. ', - name: 'gcp.source.vpc.subnetwork_name', - type: 'keyword', - }, - 'gcp.audit.type': { - category: 'gcp', - description: 'Type property. ', - name: 'gcp.audit.type', - type: 'keyword', - }, - 'gcp.audit.authentication_info.principal_email': { - category: 'gcp', - description: 'The email address of the authenticated user making the request. ', - name: 'gcp.audit.authentication_info.principal_email', - type: 'keyword', - }, - 'gcp.audit.authentication_info.authority_selector': { - category: 'gcp', - description: - 'The authority selector specified by the requestor, if any. It is not guaranteed that the principal was allowed to use this authority. ', - name: 'gcp.audit.authentication_info.authority_selector', - type: 'keyword', - }, - 'gcp.audit.authorization_info.permission': { - category: 'gcp', - description: 'The required IAM permission. ', - name: 'gcp.audit.authorization_info.permission', - type: 'keyword', - }, - 'gcp.audit.authorization_info.granted': { - category: 'gcp', - description: 'Whether or not authorization for resource and permission was granted. ', - name: 'gcp.audit.authorization_info.granted', - type: 'boolean', - }, - 'gcp.audit.authorization_info.resource_attributes.service': { - category: 'gcp', - description: 'The name of the service. ', - name: 'gcp.audit.authorization_info.resource_attributes.service', - type: 'keyword', - }, - 'gcp.audit.authorization_info.resource_attributes.name': { - category: 'gcp', - description: 'The name of the resource. ', - name: 'gcp.audit.authorization_info.resource_attributes.name', - type: 'keyword', - }, - 'gcp.audit.authorization_info.resource_attributes.type': { - category: 'gcp', - description: 'The type of the resource. ', - name: 'gcp.audit.authorization_info.resource_attributes.type', - type: 'keyword', - }, - 'gcp.audit.method_name': { - category: 'gcp', - description: - "The name of the service method or operation. For API calls, this should be the name of the API method. For example, 'google.datastore.v1.Datastore.RunQuery'. ", - name: 'gcp.audit.method_name', - type: 'keyword', - }, - 'gcp.audit.num_response_items': { - category: 'gcp', - description: 'The number of items returned from a List or Query API method, if applicable. ', - name: 'gcp.audit.num_response_items', - type: 'long', - }, - 'gcp.audit.request.proto_name': { - category: 'gcp', - description: 'Type property of the request. ', - name: 'gcp.audit.request.proto_name', - type: 'keyword', - }, - 'gcp.audit.request.filter': { - category: 'gcp', - description: 'Filter of the request. ', - name: 'gcp.audit.request.filter', - type: 'keyword', - }, - 'gcp.audit.request.name': { - category: 'gcp', - description: 'Name of the request. ', - name: 'gcp.audit.request.name', - type: 'keyword', - }, - 'gcp.audit.request.resource_name': { - category: 'gcp', - description: 'Name of the request resource. ', - name: 'gcp.audit.request.resource_name', - type: 'keyword', - }, - 'gcp.audit.request_metadata.caller_ip': { - category: 'gcp', - description: 'The IP address of the caller. ', - name: 'gcp.audit.request_metadata.caller_ip', - type: 'ip', - }, - 'gcp.audit.request_metadata.caller_supplied_user_agent': { - category: 'gcp', - description: - 'The user agent of the caller. This information is not authenticated and should be treated accordingly. ', - name: 'gcp.audit.request_metadata.caller_supplied_user_agent', - type: 'keyword', - }, - 'gcp.audit.response.proto_name': { - category: 'gcp', - description: 'Type property of the response. ', - name: 'gcp.audit.response.proto_name', - type: 'keyword', - }, - 'gcp.audit.response.details.group': { - category: 'gcp', - description: 'The name of the group. ', - name: 'gcp.audit.response.details.group', - type: 'keyword', - }, - 'gcp.audit.response.details.kind': { - category: 'gcp', - description: 'The kind of the response details. ', - name: 'gcp.audit.response.details.kind', - type: 'keyword', - }, - 'gcp.audit.response.details.name': { - category: 'gcp', - description: 'The name of the response details. ', - name: 'gcp.audit.response.details.name', - type: 'keyword', - }, - 'gcp.audit.response.details.uid': { - category: 'gcp', - description: 'The uid of the response details. ', - name: 'gcp.audit.response.details.uid', - type: 'keyword', - }, - 'gcp.audit.response.status': { - category: 'gcp', - description: 'Status of the response. ', - name: 'gcp.audit.response.status', - type: 'keyword', - }, - 'gcp.audit.resource_name': { - category: 'gcp', - description: - "The resource or collection that is the target of the operation. The name is a scheme-less URI, not including the API service name. For example, 'shelves/SHELF_ID/books'. ", - name: 'gcp.audit.resource_name', - type: 'keyword', - }, - 'gcp.audit.resource_location.current_locations': { - category: 'gcp', - description: 'Current locations of the resource. ', - name: 'gcp.audit.resource_location.current_locations', - type: 'keyword', - }, - 'gcp.audit.service_name': { - category: 'gcp', - description: - 'The name of the API service performing the operation. For example, datastore.googleapis.com. ', - name: 'gcp.audit.service_name', - type: 'keyword', - }, - 'gcp.audit.status.code': { - category: 'gcp', - description: 'The status code, which should be an enum value of google.rpc.Code. ', - name: 'gcp.audit.status.code', - type: 'integer', - }, - 'gcp.audit.status.message': { - category: 'gcp', - description: - 'A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client. ', - name: 'gcp.audit.status.message', - type: 'keyword', - }, - 'gcp.firewall.rule_details.priority': { - category: 'gcp', - description: 'The priority for the firewall rule.', - name: 'gcp.firewall.rule_details.priority', - type: 'long', - }, - 'gcp.firewall.rule_details.action': { - category: 'gcp', - description: 'Action that the rule performs on match.', - name: 'gcp.firewall.rule_details.action', - type: 'keyword', - }, - 'gcp.firewall.rule_details.direction': { - category: 'gcp', - description: 'Direction of traffic that matches this rule.', - name: 'gcp.firewall.rule_details.direction', - type: 'keyword', - }, - 'gcp.firewall.rule_details.reference': { - category: 'gcp', - description: 'Reference to the firewall rule.', - name: 'gcp.firewall.rule_details.reference', - type: 'keyword', - }, - 'gcp.firewall.rule_details.source_range': { - category: 'gcp', - description: 'List of source ranges that the firewall rule applies to.', - name: 'gcp.firewall.rule_details.source_range', - type: 'keyword', - }, - 'gcp.firewall.rule_details.destination_range': { - category: 'gcp', - description: 'List of destination ranges that the firewall applies to.', - name: 'gcp.firewall.rule_details.destination_range', - type: 'keyword', - }, - 'gcp.firewall.rule_details.source_tag': { - category: 'gcp', - description: 'List of all the source tags that the firewall rule applies to. ', - name: 'gcp.firewall.rule_details.source_tag', - type: 'keyword', - }, - 'gcp.firewall.rule_details.target_tag': { - category: 'gcp', - description: 'List of all the target tags that the firewall rule applies to. ', - name: 'gcp.firewall.rule_details.target_tag', - type: 'keyword', - }, - 'gcp.firewall.rule_details.ip_port_info': { - category: 'gcp', - description: 'List of ip protocols and applicable port ranges for rules. ', - name: 'gcp.firewall.rule_details.ip_port_info', - type: 'array', - }, - 'gcp.firewall.rule_details.source_service_account': { - category: 'gcp', - description: 'List of all the source service accounts that the firewall rule applies to. ', - name: 'gcp.firewall.rule_details.source_service_account', - type: 'keyword', - }, - 'gcp.firewall.rule_details.target_service_account': { - category: 'gcp', - description: 'List of all the target service accounts that the firewall rule applies to. ', - name: 'gcp.firewall.rule_details.target_service_account', - type: 'keyword', - }, - 'gcp.vpcflow.reporter': { - category: 'gcp', - description: "The side which reported the flow. Can be either 'SRC' or 'DEST'. ", - name: 'gcp.vpcflow.reporter', - type: 'keyword', - }, - 'gcp.vpcflow.rtt.ms': { - category: 'gcp', - description: - 'Latency as measured (for TCP flows only) during the time interval. This is the time elapsed between sending a SEQ and receiving a corresponding ACK and it contains the network RTT as well as the application related delay. ', - name: 'gcp.vpcflow.rtt.ms', - type: 'long', - }, - 'google_workspace.actor.type': { - category: 'google_workspace', - description: - 'The type of actor. Values can be: *USER*: Another user in the same domain. *EXTERNAL_USER*: A user outside the domain. *KEY*: A non-human actor. ', - name: 'google_workspace.actor.type', - type: 'keyword', - }, - 'google_workspace.actor.key': { - category: 'google_workspace', - description: - 'Only present when `actor.type` is `KEY`. Can be the `consumer_key` of the requestor for OAuth 2LO API requests or an identifier for robot accounts. ', - name: 'google_workspace.actor.key', - type: 'keyword', - }, - 'google_workspace.event.type': { - category: 'google_workspace', - description: - 'The type of Google Workspace event, mapped from `items[].events[].type` in the original payload. Each fileset can have a different set of values for it, more details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', - example: 'audit#activity', - name: 'google_workspace.event.type', - type: 'keyword', - }, - 'google_workspace.kind': { - category: 'google_workspace', - description: - 'The type of API resource, mapped from `kind` in the original payload. More details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', - example: 'audit#activity', - name: 'google_workspace.kind', - type: 'keyword', - }, - 'google_workspace.organization.domain': { - category: 'google_workspace', - description: "The domain that is affected by the report's event. ", - name: 'google_workspace.organization.domain', - type: 'keyword', - }, - 'google_workspace.admin.application.edition': { - category: 'google_workspace', - description: 'The Google Workspace edition.', - name: 'google_workspace.admin.application.edition', - type: 'keyword', - }, - 'google_workspace.admin.application.name': { - category: 'google_workspace', - description: "The application's name.", - name: 'google_workspace.admin.application.name', - type: 'keyword', - }, - 'google_workspace.admin.application.enabled': { - category: 'google_workspace', - description: 'The enabled application.', - name: 'google_workspace.admin.application.enabled', - type: 'keyword', - }, - 'google_workspace.admin.application.licences_order_number': { - category: 'google_workspace', - description: 'Order number used to redeem licenses.', - name: 'google_workspace.admin.application.licences_order_number', - type: 'keyword', - }, - 'google_workspace.admin.application.licences_purchased': { - category: 'google_workspace', - description: 'Number of licences purchased.', - name: 'google_workspace.admin.application.licences_purchased', - type: 'keyword', - }, - 'google_workspace.admin.application.id': { - category: 'google_workspace', - description: 'The application ID.', - name: 'google_workspace.admin.application.id', - type: 'keyword', - }, - 'google_workspace.admin.application.asp_id': { - category: 'google_workspace', - description: 'The application specific password ID.', - name: 'google_workspace.admin.application.asp_id', - type: 'keyword', - }, - 'google_workspace.admin.application.package_id': { - category: 'google_workspace', - description: 'The mobile application package ID.', - name: 'google_workspace.admin.application.package_id', - type: 'keyword', - }, - 'google_workspace.admin.group.email': { - category: 'google_workspace', - description: "The group's primary email address.", - name: 'google_workspace.admin.group.email', - type: 'keyword', - }, - 'google_workspace.admin.new_value': { - category: 'google_workspace', - description: 'The new value for the setting.', - name: 'google_workspace.admin.new_value', - type: 'keyword', - }, - 'google_workspace.admin.old_value': { - category: 'google_workspace', - description: 'The old value for the setting.', - name: 'google_workspace.admin.old_value', - type: 'keyword', - }, - 'google_workspace.admin.org_unit.name': { - category: 'google_workspace', - description: 'The organizational unit name.', - name: 'google_workspace.admin.org_unit.name', - type: 'keyword', - }, - 'google_workspace.admin.org_unit.full': { - category: 'google_workspace', - description: 'The org unit full path including the root org unit name.', - name: 'google_workspace.admin.org_unit.full', - type: 'keyword', - }, - 'google_workspace.admin.setting.name': { - category: 'google_workspace', - description: 'The setting name.', - name: 'google_workspace.admin.setting.name', - type: 'keyword', - }, - 'google_workspace.admin.user_defined_setting.name': { - category: 'google_workspace', - description: 'The name of the user-defined setting.', - name: 'google_workspace.admin.user_defined_setting.name', - type: 'keyword', - }, - 'google_workspace.admin.setting.description': { - category: 'google_workspace', - description: 'The setting name.', - name: 'google_workspace.admin.setting.description', - type: 'keyword', - }, - 'google_workspace.admin.group.priorities': { - category: 'google_workspace', - description: 'Group priorities.', - name: 'google_workspace.admin.group.priorities', - type: 'keyword', - }, - 'google_workspace.admin.domain.alias': { - category: 'google_workspace', - description: 'The domain alias.', - name: 'google_workspace.admin.domain.alias', - type: 'keyword', - }, - 'google_workspace.admin.domain.name': { - category: 'google_workspace', - description: 'The primary domain name.', - name: 'google_workspace.admin.domain.name', - type: 'keyword', - }, - 'google_workspace.admin.domain.secondary_name': { - category: 'google_workspace', - description: 'The secondary domain name.', - name: 'google_workspace.admin.domain.secondary_name', - type: 'keyword', - }, - 'google_workspace.admin.managed_configuration': { - category: 'google_workspace', - description: 'The name of the managed configuration.', - name: 'google_workspace.admin.managed_configuration', - type: 'keyword', - }, - 'google_workspace.admin.non_featured_services_selection': { - category: 'google_workspace', - description: - 'Non-featured services selection. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-application-settings#FLASHLIGHT_EDU_NON_FEATURED_SERVICES_SELECTED ', - name: 'google_workspace.admin.non_featured_services_selection', - type: 'keyword', - }, - 'google_workspace.admin.field': { - category: 'google_workspace', - description: 'The name of the field.', - name: 'google_workspace.admin.field', - type: 'keyword', - }, - 'google_workspace.admin.resource.id': { - category: 'google_workspace', - description: 'The name of the resource identifier.', - name: 'google_workspace.admin.resource.id', - type: 'keyword', - }, - 'google_workspace.admin.user.email': { - category: 'google_workspace', - description: "The user's primary email address.", - name: 'google_workspace.admin.user.email', - type: 'keyword', - }, - 'google_workspace.admin.user.nickname': { - category: 'google_workspace', - description: "The user's nickname.", - name: 'google_workspace.admin.user.nickname', - type: 'keyword', - }, - 'google_workspace.admin.user.birthdate': { - category: 'google_workspace', - description: "The user's birth date.", - name: 'google_workspace.admin.user.birthdate', - type: 'date', - }, - 'google_workspace.admin.gateway.name': { - category: 'google_workspace', - description: 'Gateway name. Present on some chat settings.', - name: 'google_workspace.admin.gateway.name', - type: 'keyword', - }, - 'google_workspace.admin.chrome_os.session_type': { - category: 'google_workspace', - description: 'Chrome OS session type.', - name: 'google_workspace.admin.chrome_os.session_type', - type: 'keyword', - }, - 'google_workspace.admin.device.serial_number': { - category: 'google_workspace', - description: 'Device serial number.', - name: 'google_workspace.admin.device.serial_number', - type: 'keyword', - }, - 'google_workspace.admin.device.id': { - category: 'google_workspace', - name: 'google_workspace.admin.device.id', - type: 'keyword', - }, - 'google_workspace.admin.device.type': { - category: 'google_workspace', - description: 'Device type.', - name: 'google_workspace.admin.device.type', - type: 'keyword', - }, - 'google_workspace.admin.print_server.name': { - category: 'google_workspace', - description: 'The name of the print server.', - name: 'google_workspace.admin.print_server.name', - type: 'keyword', - }, - 'google_workspace.admin.printer.name': { - category: 'google_workspace', - description: 'The name of the printer.', - name: 'google_workspace.admin.printer.name', - type: 'keyword', - }, - 'google_workspace.admin.device.command_details': { - category: 'google_workspace', - description: 'Command details.', - name: 'google_workspace.admin.device.command_details', - type: 'keyword', - }, - 'google_workspace.admin.role.id': { - category: 'google_workspace', - description: 'Unique identifier for this role privilege.', - name: 'google_workspace.admin.role.id', - type: 'keyword', - }, - 'google_workspace.admin.role.name': { - category: 'google_workspace', - description: - 'The role name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-delegated-admin-settings ', - name: 'google_workspace.admin.role.name', - type: 'keyword', - }, - 'google_workspace.admin.privilege.name': { - category: 'google_workspace', - description: 'Privilege name.', - name: 'google_workspace.admin.privilege.name', - type: 'keyword', - }, - 'google_workspace.admin.service.name': { - category: 'google_workspace', - description: 'The service name.', - name: 'google_workspace.admin.service.name', - type: 'keyword', - }, - 'google_workspace.admin.url.name': { - category: 'google_workspace', - description: 'The website name.', - name: 'google_workspace.admin.url.name', - type: 'keyword', - }, - 'google_workspace.admin.product.name': { - category: 'google_workspace', - description: 'The product name.', - name: 'google_workspace.admin.product.name', - type: 'keyword', - }, - 'google_workspace.admin.product.sku': { - category: 'google_workspace', - description: 'The product SKU.', - name: 'google_workspace.admin.product.sku', - type: 'keyword', - }, - 'google_workspace.admin.bulk_upload.failed': { - category: 'google_workspace', - description: 'Number of failed records in bulk upload operation.', - name: 'google_workspace.admin.bulk_upload.failed', - type: 'long', - }, - 'google_workspace.admin.bulk_upload.total': { - category: 'google_workspace', - description: 'Number of total records in bulk upload operation.', - name: 'google_workspace.admin.bulk_upload.total', - type: 'long', - }, - 'google_workspace.admin.group.allowed_list': { - category: 'google_workspace', - description: 'Names of allow-listed groups.', - name: 'google_workspace.admin.group.allowed_list', - type: 'keyword', - }, - 'google_workspace.admin.email.quarantine_name': { - category: 'google_workspace', - description: 'The name of the quarantine.', - name: 'google_workspace.admin.email.quarantine_name', - type: 'keyword', - }, - 'google_workspace.admin.email.log_search_filter.message_id': { - category: 'google_workspace', - description: "The log search filter's email message ID.", - name: 'google_workspace.admin.email.log_search_filter.message_id', - type: 'keyword', - }, - 'google_workspace.admin.email.log_search_filter.start_date': { - category: 'google_workspace', - description: "The log search filter's start date.", - name: 'google_workspace.admin.email.log_search_filter.start_date', - type: 'date', - }, - 'google_workspace.admin.email.log_search_filter.end_date': { - category: 'google_workspace', - description: "The log search filter's ending date.", - name: 'google_workspace.admin.email.log_search_filter.end_date', - type: 'date', - }, - 'google_workspace.admin.email.log_search_filter.recipient.value': { - category: 'google_workspace', - description: "The log search filter's email recipient.", - name: 'google_workspace.admin.email.log_search_filter.recipient.value', - type: 'keyword', - }, - 'google_workspace.admin.email.log_search_filter.sender.value': { - category: 'google_workspace', - description: "The log search filter's email sender.", - name: 'google_workspace.admin.email.log_search_filter.sender.value', - type: 'keyword', - }, - 'google_workspace.admin.email.log_search_filter.recipient.ip': { - category: 'google_workspace', - description: "The log search filter's email recipient's IP address.", - name: 'google_workspace.admin.email.log_search_filter.recipient.ip', - type: 'ip', - }, - 'google_workspace.admin.email.log_search_filter.sender.ip': { - category: 'google_workspace', - description: "The log search filter's email sender's IP address.", - name: 'google_workspace.admin.email.log_search_filter.sender.ip', - type: 'ip', - }, - 'google_workspace.admin.chrome_licenses.enabled': { - category: 'google_workspace', - description: - 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', - name: 'google_workspace.admin.chrome_licenses.enabled', - type: 'keyword', - }, - 'google_workspace.admin.chrome_licenses.allowed': { - category: 'google_workspace', - description: - 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', - name: 'google_workspace.admin.chrome_licenses.allowed', - type: 'keyword', - }, - 'google_workspace.admin.oauth2.service.name': { - category: 'google_workspace', - description: - 'OAuth2 service name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', - name: 'google_workspace.admin.oauth2.service.name', - type: 'keyword', - }, - 'google_workspace.admin.oauth2.application.id': { - category: 'google_workspace', - description: 'OAuth2 application ID.', - name: 'google_workspace.admin.oauth2.application.id', - type: 'keyword', - }, - 'google_workspace.admin.oauth2.application.name': { - category: 'google_workspace', - description: 'OAuth2 application name.', - name: 'google_workspace.admin.oauth2.application.name', - type: 'keyword', - }, - 'google_workspace.admin.oauth2.application.type': { - category: 'google_workspace', - description: - 'OAuth2 application type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', - name: 'google_workspace.admin.oauth2.application.type', - type: 'keyword', - }, - 'google_workspace.admin.verification_method': { - category: 'google_workspace', - description: - 'Related verification method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings and https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', - name: 'google_workspace.admin.verification_method', - type: 'keyword', - }, - 'google_workspace.admin.alert.name': { - category: 'google_workspace', - description: 'The alert name.', - name: 'google_workspace.admin.alert.name', - type: 'keyword', - }, - 'google_workspace.admin.rule.name': { - category: 'google_workspace', - description: 'The rule name.', - name: 'google_workspace.admin.rule.name', - type: 'keyword', - }, - 'google_workspace.admin.api.client.name': { - category: 'google_workspace', - description: 'The API client name.', - name: 'google_workspace.admin.api.client.name', - type: 'keyword', - }, - 'google_workspace.admin.api.scopes': { - category: 'google_workspace', - description: 'The API scopes.', - name: 'google_workspace.admin.api.scopes', - type: 'keyword', - }, - 'google_workspace.admin.mdm.token': { - category: 'google_workspace', - description: 'The MDM vendor enrollment token.', - name: 'google_workspace.admin.mdm.token', - type: 'keyword', - }, - 'google_workspace.admin.mdm.vendor': { - category: 'google_workspace', - description: "The MDM vendor's name.", - name: 'google_workspace.admin.mdm.vendor', - type: 'keyword', - }, - 'google_workspace.admin.info_type': { - category: 'google_workspace', - description: - 'This will be used to state what kind of information was changed. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', - name: 'google_workspace.admin.info_type', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.dest_email': { - category: 'google_workspace', - description: 'The destination address of the email monitor.', - name: 'google_workspace.admin.email_monitor.dest_email', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.level.chat': { - category: 'google_workspace', - description: 'The chat email monitor level.', - name: 'google_workspace.admin.email_monitor.level.chat', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.level.draft': { - category: 'google_workspace', - description: 'The draft email monitor level.', - name: 'google_workspace.admin.email_monitor.level.draft', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.level.incoming': { - category: 'google_workspace', - description: 'The incoming email monitor level.', - name: 'google_workspace.admin.email_monitor.level.incoming', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.level.outgoing': { - category: 'google_workspace', - description: 'The outgoing email monitor level.', - name: 'google_workspace.admin.email_monitor.level.outgoing', - type: 'keyword', - }, - 'google_workspace.admin.email_dump.include_deleted': { - category: 'google_workspace', - description: 'Indicates if deleted emails are included in the export.', - name: 'google_workspace.admin.email_dump.include_deleted', - type: 'boolean', - }, - 'google_workspace.admin.email_dump.package_content': { - category: 'google_workspace', - description: 'The contents of the mailbox package.', - name: 'google_workspace.admin.email_dump.package_content', - type: 'keyword', - }, - 'google_workspace.admin.email_dump.query': { - category: 'google_workspace', - description: 'The search query used for the dump.', - name: 'google_workspace.admin.email_dump.query', - type: 'keyword', - }, - 'google_workspace.admin.request.id': { - category: 'google_workspace', - description: 'The request ID.', - name: 'google_workspace.admin.request.id', - type: 'keyword', - }, - 'google_workspace.admin.mobile.action.id': { - category: 'google_workspace', - description: "The mobile device action's ID.", - name: 'google_workspace.admin.mobile.action.id', - type: 'keyword', - }, - 'google_workspace.admin.mobile.action.type': { - category: 'google_workspace', - description: - "The mobile device action's type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ", - name: 'google_workspace.admin.mobile.action.type', - type: 'keyword', - }, - 'google_workspace.admin.mobile.certificate.name': { - category: 'google_workspace', - description: 'The mobile certificate common name.', - name: 'google_workspace.admin.mobile.certificate.name', - type: 'keyword', - }, - 'google_workspace.admin.mobile.company_owned_devices': { - category: 'google_workspace', - description: 'The number of devices a company owns.', - name: 'google_workspace.admin.mobile.company_owned_devices', - type: 'long', - }, - 'google_workspace.admin.distribution.entity.name': { - category: 'google_workspace', - description: - 'The distribution entity value, which can be a group name or an org-unit name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', - name: 'google_workspace.admin.distribution.entity.name', - type: 'keyword', - }, - 'google_workspace.admin.distribution.entity.type': { - category: 'google_workspace', - description: - 'The distribution entity type, which can be a group or an org-unit. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', - name: 'google_workspace.admin.distribution.entity.type', - type: 'keyword', - }, - 'google_workspace.drive.billable': { - category: 'google_workspace', - description: 'Whether this activity is billable.', - name: 'google_workspace.drive.billable', - type: 'boolean', - }, - 'google_workspace.drive.source_folder_id': { - category: 'google_workspace', - name: 'google_workspace.drive.source_folder_id', - type: 'keyword', - }, - 'google_workspace.drive.source_folder_title': { - category: 'google_workspace', - name: 'google_workspace.drive.source_folder_title', - type: 'keyword', - }, - 'google_workspace.drive.destination_folder_id': { - category: 'google_workspace', - name: 'google_workspace.drive.destination_folder_id', - type: 'keyword', - }, - 'google_workspace.drive.destination_folder_title': { - category: 'google_workspace', - name: 'google_workspace.drive.destination_folder_title', - type: 'keyword', - }, - 'google_workspace.drive.file.id': { - category: 'google_workspace', - name: 'google_workspace.drive.file.id', - type: 'keyword', - }, - 'google_workspace.drive.file.type': { - category: 'google_workspace', - description: - 'Document Drive type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.file.type', - type: 'keyword', - }, - 'google_workspace.drive.originating_app_id': { - category: 'google_workspace', - description: 'The Google Cloud Project ID of the application that performed the action. ', - name: 'google_workspace.drive.originating_app_id', - type: 'keyword', - }, - 'google_workspace.drive.file.owner.email': { - category: 'google_workspace', - name: 'google_workspace.drive.file.owner.email', - type: 'keyword', - }, - 'google_workspace.drive.file.owner.is_shared_drive': { - category: 'google_workspace', - description: 'Boolean flag denoting whether owner is a shared drive. ', - name: 'google_workspace.drive.file.owner.is_shared_drive', - type: 'boolean', - }, - 'google_workspace.drive.primary_event': { - category: 'google_workspace', - description: - 'Whether this is a primary event. A single user action in Drive may generate several events. ', - name: 'google_workspace.drive.primary_event', - type: 'boolean', - }, - 'google_workspace.drive.shared_drive_id': { - category: 'google_workspace', - description: - 'The unique identifier of the Team Drive. Only populated for for events relating to a Team Drive or item contained inside a Team Drive. ', - name: 'google_workspace.drive.shared_drive_id', - type: 'keyword', - }, - 'google_workspace.drive.visibility': { - category: 'google_workspace', - description: - 'Visibility of target file. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.visibility', - type: 'keyword', - }, - 'google_workspace.drive.new_value': { - category: 'google_workspace', - description: - 'When a setting or property of the file changes, the new value for it will appear here. ', - name: 'google_workspace.drive.new_value', - type: 'keyword', - }, - 'google_workspace.drive.old_value': { - category: 'google_workspace', - description: - 'When a setting or property of the file changes, the old value for it will appear here. ', - name: 'google_workspace.drive.old_value', - type: 'keyword', - }, - 'google_workspace.drive.sheets_import_range_recipient_doc': { - category: 'google_workspace', - description: 'Doc ID of the recipient of a sheets import range.', - name: 'google_workspace.drive.sheets_import_range_recipient_doc', - type: 'keyword', - }, - 'google_workspace.drive.old_visibility': { - category: 'google_workspace', - description: 'When visibility changes, this holds the old value. ', - name: 'google_workspace.drive.old_visibility', - type: 'keyword', - }, - 'google_workspace.drive.visibility_change': { - category: 'google_workspace', - description: 'When visibility changes, this holds the new overall visibility of the file. ', - name: 'google_workspace.drive.visibility_change', - type: 'keyword', - }, - 'google_workspace.drive.target_domain': { - category: 'google_workspace', - description: - 'The domain for which the acccess scope was changed. This can also be the alias all to indicate the access scope was changed for all domains that have visibility for this document. ', - name: 'google_workspace.drive.target_domain', - type: 'keyword', - }, - 'google_workspace.drive.added_role': { - category: 'google_workspace', - description: - 'Added membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.added_role', - type: 'keyword', - }, - 'google_workspace.drive.membership_change_type': { - category: 'google_workspace', - description: - 'Type of change in Team Drive membership of a user/group. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.membership_change_type', - type: 'keyword', - }, - 'google_workspace.drive.shared_drive_settings_change_type': { - category: 'google_workspace', - description: - 'Type of change in Team Drive settings. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.shared_drive_settings_change_type', - type: 'keyword', - }, - 'google_workspace.drive.removed_role': { - category: 'google_workspace', - description: - 'Removed membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.removed_role', - type: 'keyword', - }, - 'google_workspace.drive.target': { - category: 'google_workspace', - description: 'Target user or group.', - name: 'google_workspace.drive.target', - type: 'keyword', - }, - 'google_workspace.groups.acl_permission': { - category: 'google_workspace', - description: - 'Group permission setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.acl_permission', - type: 'keyword', - }, - 'google_workspace.groups.email': { - category: 'google_workspace', - description: 'Group email. ', - name: 'google_workspace.groups.email', - type: 'keyword', - }, - 'google_workspace.groups.member.email': { - category: 'google_workspace', - description: 'Member email. ', - name: 'google_workspace.groups.member.email', - type: 'keyword', - }, - 'google_workspace.groups.member.role': { - category: 'google_workspace', - description: - 'Member role. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.member.role', - type: 'keyword', - }, - 'google_workspace.groups.setting': { - category: 'google_workspace', - description: - 'Group setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.setting', - type: 'keyword', - }, - 'google_workspace.groups.new_value': { - category: 'google_workspace', - description: - 'New value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.new_value', - type: 'keyword', - }, - 'google_workspace.groups.old_value': { - category: 'google_workspace', - description: - 'Old value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups', - name: 'google_workspace.groups.old_value', - type: 'keyword', - }, - 'google_workspace.groups.value': { - category: 'google_workspace', - description: - 'Value of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.value', - type: 'keyword', - }, - 'google_workspace.groups.message.id': { - category: 'google_workspace', - description: 'SMTP message Id of an email message. Present for moderation events. ', - name: 'google_workspace.groups.message.id', - type: 'keyword', - }, - 'google_workspace.groups.message.moderation_action': { - category: 'google_workspace', - description: 'Message moderation action. Possible values are `approved` and `rejected`. ', - name: 'google_workspace.groups.message.moderation_action', - type: 'keyword', - }, - 'google_workspace.groups.status': { - category: 'google_workspace', - description: - 'A status describing the output of an operation. Possible values are `failed` and `succeeded`. ', - name: 'google_workspace.groups.status', - type: 'keyword', - }, - 'google_workspace.login.affected_email_address': { - category: 'google_workspace', - name: 'google_workspace.login.affected_email_address', - type: 'keyword', - }, - 'google_workspace.login.challenge_method': { - category: 'google_workspace', - description: - 'Login challenge method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'google_workspace.login.challenge_method', - type: 'keyword', - }, - 'google_workspace.login.failure_type': { - category: 'google_workspace', - description: - 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'google_workspace.login.failure_type', - type: 'keyword', - }, - 'google_workspace.login.type': { - category: 'google_workspace', - description: - 'Login credentials type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'google_workspace.login.type', - type: 'keyword', - }, - 'google_workspace.login.is_second_factor': { - category: 'google_workspace', - name: 'google_workspace.login.is_second_factor', - type: 'boolean', - }, - 'google_workspace.login.is_suspicious': { - category: 'google_workspace', - name: 'google_workspace.login.is_suspicious', - type: 'boolean', - }, - 'google_workspace.saml.application_name': { - category: 'google_workspace', - description: 'Saml SP application name. ', - name: 'google_workspace.saml.application_name', - type: 'keyword', - }, - 'google_workspace.saml.failure_type': { - category: 'google_workspace', - description: - 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/saml. ', - name: 'google_workspace.saml.failure_type', - type: 'keyword', - }, - 'google_workspace.saml.initiated_by': { - category: 'google_workspace', - description: 'Requester of SAML authentication. ', - name: 'google_workspace.saml.initiated_by', - type: 'keyword', - }, - 'google_workspace.saml.orgunit_path': { - category: 'google_workspace', - description: 'User orgunit. ', - name: 'google_workspace.saml.orgunit_path', - type: 'keyword', - }, - 'google_workspace.saml.status_code': { - category: 'google_workspace', - description: 'SAML status code. ', - name: 'google_workspace.saml.status_code', - type: 'keyword', - }, - 'google_workspace.saml.second_level_status_code': { - category: 'google_workspace', - description: 'SAML second level status code. ', - name: 'google_workspace.saml.second_level_status_code', - type: 'keyword', - }, - 'ibmmq.errorlog.installation': { - category: 'ibmmq', - description: - 'This is the installation name which can be given at installation time. Each installation of IBM MQ on UNIX, Linux, and Windows, has a unique identifier known as an installation name. The installation name is used to associate things such as queue managers and configuration files with an installation. ', - name: 'ibmmq.errorlog.installation', - type: 'keyword', - }, - 'ibmmq.errorlog.qmgr': { - category: 'ibmmq', - description: - 'Name of the queue manager. Queue managers provide queuing services to applications, and manages the queues that belong to them. ', - name: 'ibmmq.errorlog.qmgr', - type: 'keyword', - }, - 'ibmmq.errorlog.arithinsert': { - category: 'ibmmq', - description: 'Changing content based on error.id', - name: 'ibmmq.errorlog.arithinsert', - type: 'keyword', - }, - 'ibmmq.errorlog.commentinsert': { - category: 'ibmmq', - description: 'Changing content based on error.id', - name: 'ibmmq.errorlog.commentinsert', - type: 'keyword', - }, - 'ibmmq.errorlog.errordescription': { - category: 'ibmmq', - description: 'Please add description', - example: 'Please add example', - name: 'ibmmq.errorlog.errordescription', - type: 'text', - }, - 'ibmmq.errorlog.explanation': { - category: 'ibmmq', - description: 'Explaines the error in more detail', - name: 'ibmmq.errorlog.explanation', - type: 'keyword', - }, - 'ibmmq.errorlog.action': { - category: 'ibmmq', - description: 'Defines what to do when the error occurs', - name: 'ibmmq.errorlog.action', - type: 'keyword', - }, - 'ibmmq.errorlog.code': { - category: 'ibmmq', - description: 'Error code.', - name: 'ibmmq.errorlog.code', - type: 'keyword', - }, - 'iptables.ether_type': { - category: 'iptables', - description: 'Value of the ethernet type field identifying the network layer protocol. ', - name: 'iptables.ether_type', - type: 'long', - }, - 'iptables.flow_label': { - category: 'iptables', - description: 'IPv6 flow label. ', - name: 'iptables.flow_label', - type: 'integer', - }, - 'iptables.fragment_flags': { - category: 'iptables', - description: 'IP fragment flags. A combination of CE, DF and MF. ', - name: 'iptables.fragment_flags', - type: 'keyword', - }, - 'iptables.fragment_offset': { - category: 'iptables', - description: 'Offset of the current IP fragment. ', - name: 'iptables.fragment_offset', - type: 'long', - }, - 'iptables.icmp.code': { - category: 'iptables', - description: 'ICMP code. ', - name: 'iptables.icmp.code', - type: 'long', - }, - 'iptables.icmp.id': { - category: 'iptables', - description: 'ICMP ID. ', - name: 'iptables.icmp.id', - type: 'long', - }, - 'iptables.icmp.parameter': { - category: 'iptables', - description: 'ICMP parameter. ', - name: 'iptables.icmp.parameter', - type: 'long', - }, - 'iptables.icmp.redirect': { - category: 'iptables', - description: 'ICMP redirect address. ', - name: 'iptables.icmp.redirect', - type: 'ip', - }, - 'iptables.icmp.seq': { - category: 'iptables', - description: 'ICMP sequence number. ', - name: 'iptables.icmp.seq', - type: 'long', - }, - 'iptables.icmp.type': { - category: 'iptables', - description: 'ICMP type. ', - name: 'iptables.icmp.type', - type: 'long', - }, - 'iptables.id': { - category: 'iptables', - description: 'Packet identifier. ', - name: 'iptables.id', - type: 'long', - }, - 'iptables.incomplete_bytes': { - category: 'iptables', - description: 'Number of incomplete bytes. ', - name: 'iptables.incomplete_bytes', - type: 'long', - }, - 'iptables.input_device': { - category: 'iptables', - description: 'Device that received the packet. ', - name: 'iptables.input_device', - type: 'keyword', - }, - 'iptables.precedence_bits': { - category: 'iptables', - description: 'IP precedence bits. ', - name: 'iptables.precedence_bits', - type: 'short', - }, - 'iptables.tos': { - category: 'iptables', - description: 'IP Type of Service field. ', - name: 'iptables.tos', - type: 'long', - }, - 'iptables.length': { - category: 'iptables', - description: 'Packet length. ', - name: 'iptables.length', - type: 'long', - }, - 'iptables.output_device': { - category: 'iptables', - description: 'Device that output the packet. ', - name: 'iptables.output_device', - type: 'keyword', - }, - 'iptables.tcp.flags': { - category: 'iptables', - description: 'TCP flags. ', - name: 'iptables.tcp.flags', - type: 'keyword', - }, - 'iptables.tcp.reserved_bits': { - category: 'iptables', - description: 'TCP reserved bits. ', - name: 'iptables.tcp.reserved_bits', - type: 'short', - }, - 'iptables.tcp.seq': { - category: 'iptables', - description: 'TCP sequence number. ', - name: 'iptables.tcp.seq', - type: 'long', - }, - 'iptables.tcp.ack': { - category: 'iptables', - description: 'TCP Acknowledgment number. ', - name: 'iptables.tcp.ack', - type: 'long', - }, - 'iptables.tcp.window': { - category: 'iptables', - description: 'Advertised TCP window size. ', - name: 'iptables.tcp.window', - type: 'long', - }, - 'iptables.ttl': { - category: 'iptables', - description: 'Time To Live field. ', - name: 'iptables.ttl', - type: 'integer', - }, - 'iptables.udp.length': { - category: 'iptables', - description: 'Length of the UDP header and payload. ', - name: 'iptables.udp.length', - type: 'long', - }, - 'iptables.ubiquiti.input_zone': { - category: 'iptables', - description: 'Input zone. ', - name: 'iptables.ubiquiti.input_zone', - type: 'keyword', - }, - 'iptables.ubiquiti.output_zone': { - category: 'iptables', - description: 'Output zone. ', - name: 'iptables.ubiquiti.output_zone', - type: 'keyword', - }, - 'iptables.ubiquiti.rule_number': { - category: 'iptables', - description: 'The rule number within the rule set.', - name: 'iptables.ubiquiti.rule_number', - type: 'keyword', - }, - 'iptables.ubiquiti.rule_set': { - category: 'iptables', - description: 'The rule set name.', - name: 'iptables.ubiquiti.rule_set', - type: 'keyword', - }, - 'juniper.srx.reason': { - category: 'juniper', - description: 'reason ', - name: 'juniper.srx.reason', - type: 'keyword', - }, - 'juniper.srx.connection_tag': { - category: 'juniper', - description: 'connection tag ', - name: 'juniper.srx.connection_tag', - type: 'keyword', - }, - 'juniper.srx.service_name': { - category: 'juniper', - description: 'service name ', - name: 'juniper.srx.service_name', - type: 'keyword', - }, - 'juniper.srx.nat_connection_tag': { - category: 'juniper', - description: 'nat connection tag ', - name: 'juniper.srx.nat_connection_tag', - type: 'keyword', - }, - 'juniper.srx.src_nat_rule_type': { - category: 'juniper', - description: 'src nat rule type ', - name: 'juniper.srx.src_nat_rule_type', - type: 'keyword', - }, - 'juniper.srx.src_nat_rule_name': { - category: 'juniper', - description: 'src nat rule name ', - name: 'juniper.srx.src_nat_rule_name', - type: 'keyword', - }, - 'juniper.srx.dst_nat_rule_type': { - category: 'juniper', - description: 'dst nat rule type ', - name: 'juniper.srx.dst_nat_rule_type', - type: 'keyword', - }, - 'juniper.srx.dst_nat_rule_name': { - category: 'juniper', - description: 'dst nat rule name ', - name: 'juniper.srx.dst_nat_rule_name', - type: 'keyword', - }, - 'juniper.srx.protocol_id': { - category: 'juniper', - description: 'protocol id ', - name: 'juniper.srx.protocol_id', - type: 'keyword', - }, - 'juniper.srx.policy_name': { - category: 'juniper', - description: 'policy name ', - name: 'juniper.srx.policy_name', - type: 'keyword', - }, - 'juniper.srx.session_id_32': { - category: 'juniper', - description: 'session id 32 ', - name: 'juniper.srx.session_id_32', - type: 'keyword', - }, - 'juniper.srx.session_id': { - category: 'juniper', - description: 'session id ', - name: 'juniper.srx.session_id', - type: 'keyword', - }, - 'juniper.srx.outbound_packets': { - category: 'juniper', - description: 'packets from client ', - name: 'juniper.srx.outbound_packets', - type: 'integer', - }, - 'juniper.srx.outbound_bytes': { - category: 'juniper', - description: 'bytes from client ', - name: 'juniper.srx.outbound_bytes', - type: 'integer', - }, - 'juniper.srx.inbound_packets': { - category: 'juniper', - description: 'packets from server ', - name: 'juniper.srx.inbound_packets', - type: 'integer', - }, - 'juniper.srx.inbound_bytes': { - category: 'juniper', - description: 'bytes from server ', - name: 'juniper.srx.inbound_bytes', - type: 'integer', - }, - 'juniper.srx.elapsed_time': { - category: 'juniper', - description: 'elapsed time ', - name: 'juniper.srx.elapsed_time', - type: 'date', - }, - 'juniper.srx.application': { - category: 'juniper', - description: 'application ', - name: 'juniper.srx.application', - type: 'keyword', - }, - 'juniper.srx.nested_application': { - category: 'juniper', - description: 'nested application ', - name: 'juniper.srx.nested_application', - type: 'keyword', - }, - 'juniper.srx.username': { - category: 'juniper', - description: 'username ', - name: 'juniper.srx.username', - type: 'keyword', - }, - 'juniper.srx.roles': { - category: 'juniper', - description: 'roles ', - name: 'juniper.srx.roles', - type: 'keyword', - }, - 'juniper.srx.encrypted': { - category: 'juniper', - description: 'encrypted ', - name: 'juniper.srx.encrypted', - type: 'keyword', - }, - 'juniper.srx.application_category': { - category: 'juniper', - description: 'application category ', - name: 'juniper.srx.application_category', - type: 'keyword', - }, - 'juniper.srx.application_sub_category': { - category: 'juniper', - description: 'application sub category ', - name: 'juniper.srx.application_sub_category', - type: 'keyword', - }, - 'juniper.srx.application_characteristics': { - category: 'juniper', - description: 'application characteristics ', - name: 'juniper.srx.application_characteristics', - type: 'keyword', - }, - 'juniper.srx.secure_web_proxy_session_type': { - category: 'juniper', - description: 'secure web proxy session type ', - name: 'juniper.srx.secure_web_proxy_session_type', - type: 'keyword', - }, - 'juniper.srx.peer_session_id': { - category: 'juniper', - description: 'peer session id ', - name: 'juniper.srx.peer_session_id', - type: 'keyword', - }, - 'juniper.srx.peer_source_address': { - category: 'juniper', - description: 'peer source address ', - name: 'juniper.srx.peer_source_address', - type: 'ip', - }, - 'juniper.srx.peer_source_port': { - category: 'juniper', - description: 'peer source port ', - name: 'juniper.srx.peer_source_port', - type: 'integer', - }, - 'juniper.srx.peer_destination_address': { - category: 'juniper', - description: 'peer destination address ', - name: 'juniper.srx.peer_destination_address', - type: 'ip', - }, - 'juniper.srx.peer_destination_port': { - category: 'juniper', - description: 'peer destination port ', - name: 'juniper.srx.peer_destination_port', - type: 'integer', - }, - 'juniper.srx.hostname': { - category: 'juniper', - description: 'hostname ', - name: 'juniper.srx.hostname', - type: 'keyword', - }, - 'juniper.srx.src_vrf_grp': { - category: 'juniper', - description: 'src_vrf_grp ', - name: 'juniper.srx.src_vrf_grp', - type: 'keyword', - }, - 'juniper.srx.dst_vrf_grp': { - category: 'juniper', - description: 'dst_vrf_grp ', - name: 'juniper.srx.dst_vrf_grp', - type: 'keyword', - }, - 'juniper.srx.icmp_type': { - category: 'juniper', - description: 'icmp type ', - name: 'juniper.srx.icmp_type', - type: 'integer', - }, - 'juniper.srx.process': { - category: 'juniper', - description: 'process that generated the message ', - name: 'juniper.srx.process', - type: 'keyword', - }, - 'juniper.srx.apbr_rule_type': { - category: 'juniper', - description: 'apbr rule type ', - name: 'juniper.srx.apbr_rule_type', - type: 'keyword', - }, - 'juniper.srx.dscp_value': { - category: 'juniper', - description: 'apbr rule type ', - name: 'juniper.srx.dscp_value', - type: 'integer', - }, - 'juniper.srx.logical_system_name': { - category: 'juniper', - description: 'logical system name ', - name: 'juniper.srx.logical_system_name', - type: 'keyword', - }, - 'juniper.srx.profile_name': { - category: 'juniper', - description: 'profile name ', - name: 'juniper.srx.profile_name', - type: 'keyword', - }, - 'juniper.srx.routing_instance': { - category: 'juniper', - description: 'routing instance ', - name: 'juniper.srx.routing_instance', - type: 'keyword', - }, - 'juniper.srx.rule_name': { - category: 'juniper', - description: 'rule name ', - name: 'juniper.srx.rule_name', - type: 'keyword', - }, - 'juniper.srx.uplink_tx_bytes': { - category: 'juniper', - description: 'uplink tx bytes ', - name: 'juniper.srx.uplink_tx_bytes', - type: 'integer', - }, - 'juniper.srx.uplink_rx_bytes': { - category: 'juniper', - description: 'uplink rx bytes ', - name: 'juniper.srx.uplink_rx_bytes', - type: 'integer', - }, - 'juniper.srx.obj': { - category: 'juniper', - description: 'url path ', - name: 'juniper.srx.obj', - type: 'keyword', - }, - 'juniper.srx.url': { - category: 'juniper', - description: 'url domain ', - name: 'juniper.srx.url', - type: 'keyword', - }, - 'juniper.srx.profile': { - category: 'juniper', - description: 'filter profile ', - name: 'juniper.srx.profile', - type: 'keyword', - }, - 'juniper.srx.category': { - category: 'juniper', - description: 'filter category ', - name: 'juniper.srx.category', - type: 'keyword', - }, - 'juniper.srx.filename': { - category: 'juniper', - description: 'filename ', - name: 'juniper.srx.filename', - type: 'keyword', - }, - 'juniper.srx.temporary_filename': { - category: 'juniper', - description: 'temporary_filename ', - name: 'juniper.srx.temporary_filename', - type: 'keyword', - }, - 'juniper.srx.name': { - category: 'juniper', - description: 'name ', - name: 'juniper.srx.name', - type: 'keyword', - }, - 'juniper.srx.error_message': { - category: 'juniper', - description: 'error_message ', - name: 'juniper.srx.error_message', - type: 'keyword', - }, - 'juniper.srx.error_code': { - category: 'juniper', - description: 'error_code ', - name: 'juniper.srx.error_code', - type: 'keyword', - }, - 'juniper.srx.action': { - category: 'juniper', - description: 'action ', - name: 'juniper.srx.action', - type: 'keyword', - }, - 'juniper.srx.protocol': { - category: 'juniper', - description: 'protocol ', - name: 'juniper.srx.protocol', - type: 'keyword', - }, - 'juniper.srx.protocol_name': { - category: 'juniper', - description: 'protocol name ', - name: 'juniper.srx.protocol_name', - type: 'keyword', - }, - 'juniper.srx.type': { - category: 'juniper', - description: 'type ', - name: 'juniper.srx.type', - type: 'keyword', - }, - 'juniper.srx.repeat_count': { - category: 'juniper', - description: 'repeat count ', - name: 'juniper.srx.repeat_count', - type: 'integer', - }, - 'juniper.srx.alert': { - category: 'juniper', - description: 'repeat alert ', - name: 'juniper.srx.alert', - type: 'keyword', - }, - 'juniper.srx.message_type': { - category: 'juniper', - description: 'message type ', - name: 'juniper.srx.message_type', - type: 'keyword', - }, - 'juniper.srx.threat_severity': { - category: 'juniper', - description: 'threat severity ', - name: 'juniper.srx.threat_severity', - type: 'keyword', - }, - 'juniper.srx.application_name': { - category: 'juniper', - description: 'application name ', - name: 'juniper.srx.application_name', - type: 'keyword', - }, - 'juniper.srx.attack_name': { - category: 'juniper', - description: 'attack name ', - name: 'juniper.srx.attack_name', - type: 'keyword', - }, - 'juniper.srx.index': { - category: 'juniper', - description: 'index ', - name: 'juniper.srx.index', - type: 'keyword', - }, - 'juniper.srx.message': { - category: 'juniper', - description: 'mesagge ', - name: 'juniper.srx.message', - type: 'keyword', - }, - 'juniper.srx.epoch_time': { - category: 'juniper', - description: 'epoch time ', - name: 'juniper.srx.epoch_time', - type: 'date', - }, - 'juniper.srx.packet_log_id': { - category: 'juniper', - description: 'packet log id ', - name: 'juniper.srx.packet_log_id', - type: 'integer', - }, - 'juniper.srx.export_id': { - category: 'juniper', - description: 'packet log id ', - name: 'juniper.srx.export_id', - type: 'integer', - }, - 'juniper.srx.ddos_application_name': { - category: 'juniper', - description: 'ddos application name ', - name: 'juniper.srx.ddos_application_name', - type: 'keyword', - }, - 'juniper.srx.connection_hit_rate': { - category: 'juniper', - description: 'connection hit rate ', - name: 'juniper.srx.connection_hit_rate', - type: 'integer', - }, - 'juniper.srx.time_scope': { - category: 'juniper', - description: 'time scope ', - name: 'juniper.srx.time_scope', - type: 'keyword', - }, - 'juniper.srx.context_hit_rate': { - category: 'juniper', - description: 'context hit rate ', - name: 'juniper.srx.context_hit_rate', - type: 'integer', - }, - 'juniper.srx.context_value_hit_rate': { - category: 'juniper', - description: 'context value hit rate ', - name: 'juniper.srx.context_value_hit_rate', - type: 'integer', - }, - 'juniper.srx.time_count': { - category: 'juniper', - description: 'time count ', - name: 'juniper.srx.time_count', - type: 'integer', - }, - 'juniper.srx.time_period': { - category: 'juniper', - description: 'time period ', - name: 'juniper.srx.time_period', - type: 'integer', - }, - 'juniper.srx.context_value': { - category: 'juniper', - description: 'context value ', - name: 'juniper.srx.context_value', - type: 'keyword', - }, - 'juniper.srx.context_name': { - category: 'juniper', - description: 'context name ', - name: 'juniper.srx.context_name', - type: 'keyword', - }, - 'juniper.srx.ruleebase_name': { - category: 'juniper', - description: 'ruleebase name ', - name: 'juniper.srx.ruleebase_name', - type: 'keyword', - }, - 'juniper.srx.verdict_source': { - category: 'juniper', - description: 'verdict source ', - name: 'juniper.srx.verdict_source', - type: 'keyword', - }, - 'juniper.srx.verdict_number': { - category: 'juniper', - description: 'verdict number ', - name: 'juniper.srx.verdict_number', - type: 'integer', - }, - 'juniper.srx.file_category': { - category: 'juniper', - description: 'file category ', - name: 'juniper.srx.file_category', - type: 'keyword', - }, - 'juniper.srx.sample_sha256': { - category: 'juniper', - description: 'sample sha256 ', - name: 'juniper.srx.sample_sha256', - type: 'keyword', - }, - 'juniper.srx.malware_info': { - category: 'juniper', - description: 'malware info ', - name: 'juniper.srx.malware_info', - type: 'keyword', - }, - 'juniper.srx.client_ip': { - category: 'juniper', - description: 'client ip ', - name: 'juniper.srx.client_ip', - type: 'ip', - }, - 'juniper.srx.tenant_id': { - category: 'juniper', - description: 'tenant id ', - name: 'juniper.srx.tenant_id', - type: 'keyword', - }, - 'juniper.srx.timestamp': { - category: 'juniper', - description: 'timestamp ', - name: 'juniper.srx.timestamp', - type: 'date', - }, - 'juniper.srx.th': { - category: 'juniper', - description: 'th ', - name: 'juniper.srx.th', - type: 'keyword', - }, - 'juniper.srx.status': { - category: 'juniper', - description: 'status ', - name: 'juniper.srx.status', - type: 'keyword', - }, - 'juniper.srx.state': { - category: 'juniper', - description: 'state ', - name: 'juniper.srx.state', - type: 'keyword', - }, - 'juniper.srx.file_hash_lookup': { - category: 'juniper', - description: 'file hash lookup ', - name: 'juniper.srx.file_hash_lookup', - type: 'keyword', - }, - 'juniper.srx.file_name': { - category: 'juniper', - description: 'file name ', - name: 'juniper.srx.file_name', - type: 'keyword', - }, - 'juniper.srx.action_detail': { - category: 'juniper', - description: 'action detail ', - name: 'juniper.srx.action_detail', - type: 'keyword', - }, - 'juniper.srx.sub_category': { - category: 'juniper', - description: 'sub category ', - name: 'juniper.srx.sub_category', - type: 'keyword', - }, - 'juniper.srx.feed_name': { - category: 'juniper', - description: 'feed name ', - name: 'juniper.srx.feed_name', - type: 'keyword', - }, - 'juniper.srx.occur_count': { - category: 'juniper', - description: 'occur count ', - name: 'juniper.srx.occur_count', - type: 'integer', - }, - 'juniper.srx.tag': { - category: 'juniper', - description: 'system log message tag, which uniquely identifies the message. ', - name: 'juniper.srx.tag', - type: 'keyword', - }, - 'microsoft.defender_atp.lastUpdateTime': { - category: 'microsoft', - description: 'The date and time (in UTC) the alert was last updated. ', - name: 'microsoft.defender_atp.lastUpdateTime', - type: 'date', - }, - 'microsoft.defender_atp.resolvedTime': { - category: 'microsoft', - description: "The date and time in which the status of the alert was changed to 'Resolved'. ", - name: 'microsoft.defender_atp.resolvedTime', - type: 'date', - }, - 'microsoft.defender_atp.incidentId': { - category: 'microsoft', - description: 'The Incident ID of the Alert. ', - name: 'microsoft.defender_atp.incidentId', - type: 'keyword', - }, - 'microsoft.defender_atp.investigationId': { - category: 'microsoft', - description: 'The Investigation ID related to the Alert. ', - name: 'microsoft.defender_atp.investigationId', - type: 'keyword', - }, - 'microsoft.defender_atp.investigationState': { - category: 'microsoft', - description: 'The current state of the Investigation. ', - name: 'microsoft.defender_atp.investigationState', - type: 'keyword', - }, - 'microsoft.defender_atp.assignedTo': { - category: 'microsoft', - description: 'Owner of the alert. ', - name: 'microsoft.defender_atp.assignedTo', - type: 'keyword', - }, - 'microsoft.defender_atp.status': { - category: 'microsoft', - description: - "Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ", - name: 'microsoft.defender_atp.status', - type: 'keyword', - }, - 'microsoft.defender_atp.classification': { - category: 'microsoft', - description: - "Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ", - name: 'microsoft.defender_atp.classification', - type: 'keyword', - }, - 'microsoft.defender_atp.determination': { - category: 'microsoft', - description: - "Specifies the determination of the alert. Possible values are: 'NotAvailable', 'Apt', 'Malware', 'SecurityPersonnel', 'SecurityTesting', 'UnwantedSoftware', 'Other'. ", - name: 'microsoft.defender_atp.determination', - type: 'keyword', - }, - 'microsoft.defender_atp.threatFamilyName': { - category: 'microsoft', - description: 'Threat family. ', - name: 'microsoft.defender_atp.threatFamilyName', - type: 'keyword', - }, - 'microsoft.defender_atp.rbacGroupName': { - category: 'microsoft', - description: 'User group related to the alert ', - name: 'microsoft.defender_atp.rbacGroupName', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.domainName': { - category: 'microsoft', - description: 'Domain name related to the alert ', - name: 'microsoft.defender_atp.evidence.domainName', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.ipAddress': { - category: 'microsoft', - description: 'IP address involved in the alert ', - name: 'microsoft.defender_atp.evidence.ipAddress', - type: 'ip', - }, - 'microsoft.defender_atp.evidence.aadUserId': { - category: 'microsoft', - description: 'ID of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.aadUserId', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.accountName': { - category: 'microsoft', - description: 'Username of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.accountName', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.entityType': { - category: 'microsoft', - description: 'The type of evidence ', - name: 'microsoft.defender_atp.evidence.entityType', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.userPrincipalName': { - category: 'microsoft', - description: 'Principal name of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.userPrincipalName', - type: 'keyword', - }, - 'microsoft.m365_defender.incidentId': { - category: 'microsoft', - description: 'Unique identifier to represent the incident. ', - name: 'microsoft.m365_defender.incidentId', - type: 'keyword', - }, - 'microsoft.m365_defender.redirectIncidentId': { - category: 'microsoft', - description: - 'Only populated in case an incident is being grouped together with another incident, as part of the incident processing logic. ', - name: 'microsoft.m365_defender.redirectIncidentId', - type: 'keyword', - }, - 'microsoft.m365_defender.incidentName': { - category: 'microsoft', - description: 'Name of the Incident. ', - name: 'microsoft.m365_defender.incidentName', - type: 'keyword', - }, - 'microsoft.m365_defender.determination': { - category: 'microsoft', - description: - 'Specifies the determination of the incident. The property values are: NotAvailable, Apt, Malware, SecurityPersonnel, SecurityTesting, UnwantedSoftware, Other. ', - name: 'microsoft.m365_defender.determination', - type: 'keyword', - }, - 'microsoft.m365_defender.investigationState': { - category: 'microsoft', - description: 'The current state of the Investigation. ', - name: 'microsoft.m365_defender.investigationState', - type: 'keyword', - }, - 'microsoft.m365_defender.assignedTo': { - category: 'microsoft', - description: 'Owner of the alert. ', - name: 'microsoft.m365_defender.assignedTo', - type: 'keyword', - }, - 'microsoft.m365_defender.tags': { - category: 'microsoft', - description: - 'Array of custom tags associated with an incident, for example to flag a group of incidents with a common characteristic. ', - name: 'microsoft.m365_defender.tags', - type: 'keyword', - }, - 'microsoft.m365_defender.status': { - category: 'microsoft', - description: - "Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ", - name: 'microsoft.m365_defender.status', - type: 'keyword', - }, - 'microsoft.m365_defender.classification': { - category: 'microsoft', - description: - "Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ", - name: 'microsoft.m365_defender.classification', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.incidentId': { - category: 'microsoft', - description: 'Unique identifier to represent the incident this alert is associated with. ', - name: 'microsoft.m365_defender.alerts.incidentId', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.resolvedTime': { - category: 'microsoft', - description: 'Time when alert was resolved. ', - name: 'microsoft.m365_defender.alerts.resolvedTime', - type: 'date', - }, - 'microsoft.m365_defender.alerts.status': { - category: 'microsoft', - description: 'Categorize alerts (as New, Active, or Resolved). ', - name: 'microsoft.m365_defender.alerts.status', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.severity': { - category: 'microsoft', - description: 'The severity of the related alert. ', - name: 'microsoft.m365_defender.alerts.severity', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.creationTime': { - category: 'microsoft', - description: 'Time when alert was first created. ', - name: 'microsoft.m365_defender.alerts.creationTime', - type: 'date', - }, - 'microsoft.m365_defender.alerts.lastUpdatedTime': { - category: 'microsoft', - description: 'Time when alert was last updated. ', - name: 'microsoft.m365_defender.alerts.lastUpdatedTime', - type: 'date', - }, - 'microsoft.m365_defender.alerts.investigationId': { - category: 'microsoft', - description: 'The automated investigation id triggered by this alert. ', - name: 'microsoft.m365_defender.alerts.investigationId', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.userSid': { - category: 'microsoft', - description: 'The SID of the related user ', - name: 'microsoft.m365_defender.alerts.userSid', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.detectionSource': { - category: 'microsoft', - description: 'The service that initially detected the threat. ', - name: 'microsoft.m365_defender.alerts.detectionSource', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.classification': { - category: 'microsoft', - description: - 'The specification for the incident. The property values are: Unknown, FalsePositive, TruePositive or null. ', - name: 'microsoft.m365_defender.alerts.classification', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.investigationState': { - category: 'microsoft', - description: "Information on the investigation's current status. ", - name: 'microsoft.m365_defender.alerts.investigationState', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.determination': { - category: 'microsoft', - description: - 'Specifies the determination of the incident. The property values are: NotAvailable, Apt, Malware, SecurityPersonnel, SecurityTesting, UnwantedSoftware, Other or null ', - name: 'microsoft.m365_defender.alerts.determination', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.assignedTo': { - category: 'microsoft', - description: 'Owner of the incident, or null if no owner is assigned. ', - name: 'microsoft.m365_defender.alerts.assignedTo', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.actorName': { - category: 'microsoft', - description: 'The activity group, if any, the associated with this alert. ', - name: 'microsoft.m365_defender.alerts.actorName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.threatFamilyName': { - category: 'microsoft', - description: 'Threat family associated with this alert. ', - name: 'microsoft.m365_defender.alerts.threatFamilyName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.mitreTechniques': { - category: 'microsoft', - description: 'The attack techniques, as aligned with the MITRE ATT&CK™ framework. ', - name: 'microsoft.m365_defender.alerts.mitreTechniques', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.entityType': { - category: 'microsoft', - description: - 'Entities that have been identified to be part of, or related to, a given alert. The properties values are: User, Ip, Url, File, Process, MailBox, MailMessage, MailCluster, Registry. ', - name: 'microsoft.m365_defender.alerts.entities.entityType', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.accountName': { - category: 'microsoft', - description: 'Account name of the related user. ', - name: 'microsoft.m365_defender.alerts.entities.accountName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.mailboxDisplayName': { - category: 'microsoft', - description: 'The display name of the related mailbox. ', - name: 'microsoft.m365_defender.alerts.entities.mailboxDisplayName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.mailboxAddress': { - category: 'microsoft', - description: 'The mail address of the related mailbox. ', - name: 'microsoft.m365_defender.alerts.entities.mailboxAddress', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.clusterBy': { - category: 'microsoft', - description: 'A list of metadata if the entityType is MailCluster. ', - name: 'microsoft.m365_defender.alerts.entities.clusterBy', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.sender': { - category: 'microsoft', - description: 'The sender for the related email message. ', - name: 'microsoft.m365_defender.alerts.entities.sender', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.recipient': { - category: 'microsoft', - description: 'The recipient for the related email message. ', - name: 'microsoft.m365_defender.alerts.entities.recipient', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.subject': { - category: 'microsoft', - description: 'The subject for the related email message. ', - name: 'microsoft.m365_defender.alerts.entities.subject', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.deliveryAction': { - category: 'microsoft', - description: 'The delivery status for the related email message. ', - name: 'microsoft.m365_defender.alerts.entities.deliveryAction', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.securityGroupId': { - category: 'microsoft', - description: 'The Security Group ID for the user related to the email message. ', - name: 'microsoft.m365_defender.alerts.entities.securityGroupId', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.securityGroupName': { - category: 'microsoft', - description: 'The Security Group Name for the user related to the email message. ', - name: 'microsoft.m365_defender.alerts.entities.securityGroupName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.registryHive': { - category: 'microsoft', - description: - 'Reference to which Hive in registry the event is related to, if eventType is registry. Example: HKEY_LOCAL_MACHINE. ', - name: 'microsoft.m365_defender.alerts.entities.registryHive', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.registryKey': { - category: 'microsoft', - description: 'Reference to the related registry key to the event. ', - name: 'microsoft.m365_defender.alerts.entities.registryKey', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.registryValueType': { - category: 'microsoft', - description: 'Value type of the registry key/value pair related to the event. ', - name: 'microsoft.m365_defender.alerts.entities.registryValueType', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.deviceId': { - category: 'microsoft', - description: 'The unique ID of the device related to the event. ', - name: 'microsoft.m365_defender.alerts.entities.deviceId', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.ipAddress': { - category: 'microsoft', - description: 'The related IP address to the event. ', - name: 'microsoft.m365_defender.alerts.entities.ipAddress', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.devices': { - category: 'microsoft', - description: 'The devices related to the investigation. ', - name: 'microsoft.m365_defender.alerts.devices', - type: 'flattened', - }, - 'misp.attack_pattern.id': { - category: 'misp', - description: 'Identifier of the threat indicator. ', - name: 'misp.attack_pattern.id', - type: 'keyword', - }, - 'misp.attack_pattern.name': { - category: 'misp', - description: 'Name of the attack pattern. ', - name: 'misp.attack_pattern.name', - type: 'keyword', - }, - 'misp.attack_pattern.description': { - category: 'misp', - description: 'Description of the attack pattern. ', - name: 'misp.attack_pattern.description', - type: 'text', - }, - 'misp.attack_pattern.kill_chain_phases': { - category: 'misp', - description: 'The kill chain phase(s) to which this attack pattern corresponds. ', - name: 'misp.attack_pattern.kill_chain_phases', - type: 'keyword', - }, - 'misp.campaign.id': { - category: 'misp', - description: 'Identifier of the campaign. ', - name: 'misp.campaign.id', - type: 'keyword', - }, - 'misp.campaign.name': { - category: 'misp', - description: 'Name of the campaign. ', - name: 'misp.campaign.name', - type: 'keyword', - }, - 'misp.campaign.description': { - category: 'misp', - description: 'Description of the campaign. ', - name: 'misp.campaign.description', - type: 'text', - }, - 'misp.campaign.aliases': { - category: 'misp', - description: 'Alternative names used to identify this campaign. ', - name: 'misp.campaign.aliases', - type: 'text', - }, - 'misp.campaign.first_seen': { - category: 'misp', - description: 'The time that this Campaign was first seen, in RFC3339 format. ', - name: 'misp.campaign.first_seen', - type: 'date', - }, - 'misp.campaign.last_seen': { - category: 'misp', - description: 'The time that this Campaign was last seen, in RFC3339 format. ', - name: 'misp.campaign.last_seen', - type: 'date', - }, - 'misp.campaign.objective': { - category: 'misp', - description: - "This field defines the Campaign's primary goal, objective, desired outcome, or intended effect. ", - name: 'misp.campaign.objective', - type: 'keyword', - }, - 'misp.course_of_action.id': { - category: 'misp', - description: 'Identifier of the Course of Action. ', - name: 'misp.course_of_action.id', - type: 'keyword', - }, - 'misp.course_of_action.name': { - category: 'misp', - description: 'The name used to identify the Course of Action. ', - name: 'misp.course_of_action.name', - type: 'keyword', - }, - 'misp.course_of_action.description': { - category: 'misp', - description: 'Description of the Course of Action. ', - name: 'misp.course_of_action.description', - type: 'text', - }, - 'misp.identity.id': { - category: 'misp', - description: 'Identifier of the Identity. ', - name: 'misp.identity.id', - type: 'keyword', - }, - 'misp.identity.name': { - category: 'misp', - description: 'The name used to identify the Identity. ', - name: 'misp.identity.name', - type: 'keyword', - }, - 'misp.identity.description': { - category: 'misp', - description: 'Description of the Identity. ', - name: 'misp.identity.description', - type: 'text', - }, - 'misp.identity.identity_class': { - category: 'misp', - description: - 'The type of entity that this Identity describes, e.g., an individual or organization. Open Vocab - identity-class-ov ', - name: 'misp.identity.identity_class', - type: 'keyword', - }, - 'misp.identity.labels': { - category: 'misp', - description: 'The list of roles that this Identity performs. ', - example: 'CEO\n', - name: 'misp.identity.labels', - type: 'keyword', - }, - 'misp.identity.sectors': { - category: 'misp', - description: - 'The list of sectors that this Identity belongs to. Open Vocab - industry-sector-ov ', - name: 'misp.identity.sectors', - type: 'keyword', - }, - 'misp.identity.contact_information': { - category: 'misp', - description: 'The contact information (e-mail, phone number, etc.) for this Identity. ', - name: 'misp.identity.contact_information', - type: 'text', - }, - 'misp.intrusion_set.id': { - category: 'misp', - description: 'Identifier of the Intrusion Set. ', - name: 'misp.intrusion_set.id', - type: 'keyword', - }, - 'misp.intrusion_set.name': { - category: 'misp', - description: 'The name used to identify the Intrusion Set. ', - name: 'misp.intrusion_set.name', - type: 'keyword', - }, - 'misp.intrusion_set.description': { - category: 'misp', - description: 'Description of the Intrusion Set. ', - name: 'misp.intrusion_set.description', - type: 'text', - }, - 'misp.intrusion_set.aliases': { - category: 'misp', - description: 'Alternative names used to identify the Intrusion Set. ', - name: 'misp.intrusion_set.aliases', - type: 'text', - }, - 'misp.intrusion_set.first_seen': { - category: 'misp', - description: 'The time that this Intrusion Set was first seen, in RFC3339 format. ', - name: 'misp.intrusion_set.first_seen', - type: 'date', - }, - 'misp.intrusion_set.last_seen': { - category: 'misp', - description: 'The time that this Intrusion Set was last seen, in RFC3339 format. ', - name: 'misp.intrusion_set.last_seen', - type: 'date', - }, - 'misp.intrusion_set.goals': { - category: 'misp', - description: 'The high level goals of this Intrusion Set, namely, what are they trying to do. ', - name: 'misp.intrusion_set.goals', - type: 'text', - }, - 'misp.intrusion_set.resource_level': { - category: 'misp', - description: - 'This defines the organizational level at which this Intrusion Set typically works. Open Vocab - attack-resource-level-ov ', - name: 'misp.intrusion_set.resource_level', - type: 'text', - }, - 'misp.intrusion_set.primary_motivation': { - category: 'misp', - description: - 'The primary reason, motivation, or purpose behind this Intrusion Set. Open Vocab - attack-motivation-ov ', - name: 'misp.intrusion_set.primary_motivation', - type: 'text', - }, - 'misp.intrusion_set.secondary_motivations': { - category: 'misp', - description: - 'The secondary reasons, motivations, or purposes behind this Intrusion Set. Open Vocab - attack-motivation-ov ', - name: 'misp.intrusion_set.secondary_motivations', - type: 'text', - }, - 'misp.malware.id': { - category: 'misp', - description: 'Identifier of the Malware. ', - name: 'misp.malware.id', - type: 'keyword', - }, - 'misp.malware.name': { - category: 'misp', - description: 'The name used to identify the Malware. ', - name: 'misp.malware.name', - type: 'keyword', - }, - 'misp.malware.description': { - category: 'misp', - description: 'Description of the Malware. ', - name: 'misp.malware.description', - type: 'text', - }, - 'misp.malware.labels': { - category: 'misp', - description: - 'The type of malware being described. Open Vocab - malware-label-ov. adware,backdoor,bot,ddos,dropper,exploit-kit,keylogger,ransomware, remote-access-trojan,resource-exploitation,rogue-security-software,rootkit, screen-capture,spyware,trojan,virus,worm ', - name: 'misp.malware.labels', - type: 'keyword', - }, - 'misp.malware.kill_chain_phases': { - category: 'misp', - description: 'The list of kill chain phases for which this Malware instance can be used. ', - name: 'misp.malware.kill_chain_phases', - type: 'keyword', - format: 'string', - }, - 'misp.note.id': { - category: 'misp', - description: 'Identifier of the Note. ', - name: 'misp.note.id', - type: 'keyword', - }, - 'misp.note.summary': { - category: 'misp', - description: 'A brief description used as a summary of the Note. ', - name: 'misp.note.summary', - type: 'keyword', - }, - 'misp.note.description': { - category: 'misp', - description: 'The content of the Note. ', - name: 'misp.note.description', - type: 'text', - }, - 'misp.note.authors': { - category: 'misp', - description: 'The name of the author(s) of this Note. ', - name: 'misp.note.authors', - type: 'keyword', - }, - 'misp.note.object_refs': { - category: 'misp', - description: 'The STIX Objects (SDOs and SROs) that the note is being applied to. ', - name: 'misp.note.object_refs', - type: 'keyword', - }, - 'misp.threat_indicator.labels': { - category: 'misp', - description: 'list of type open-vocab that specifies the type of indicator. ', - example: 'Domain Watchlist\n', - name: 'misp.threat_indicator.labels', - type: 'keyword', - }, - 'misp.threat_indicator.id': { - category: 'misp', - description: 'Identifier of the threat indicator. ', - name: 'misp.threat_indicator.id', - type: 'keyword', - }, - 'misp.threat_indicator.version': { - category: 'misp', - description: 'Version of the threat indicator. ', - name: 'misp.threat_indicator.version', - type: 'keyword', - }, - 'misp.threat_indicator.type': { - category: 'misp', - description: 'Type of the threat indicator. ', - name: 'misp.threat_indicator.type', - type: 'keyword', - }, - 'misp.threat_indicator.description': { - category: 'misp', - description: 'Description of the threat indicator. ', - name: 'misp.threat_indicator.description', - type: 'text', - }, - 'misp.threat_indicator.feed': { - category: 'misp', - description: 'Name of the threat feed. ', - name: 'misp.threat_indicator.feed', - type: 'text', - }, - 'misp.threat_indicator.valid_from': { - category: 'misp', - description: - 'The time from which this Indicator should be considered valuable intelligence, in RFC3339 format. ', - name: 'misp.threat_indicator.valid_from', - type: 'date', - }, - 'misp.threat_indicator.valid_until': { - category: 'misp', - description: - 'The time at which this Indicator should no longer be considered valuable intelligence. If the valid_until property is omitted, then there is no constraint on the latest time for which the indicator should be used, in RFC3339 format. ', - name: 'misp.threat_indicator.valid_until', - type: 'date', - }, - 'misp.threat_indicator.severity': { - category: 'misp', - description: 'Threat severity to which this indicator corresponds. ', - example: 'high', - name: 'misp.threat_indicator.severity', - type: 'keyword', - format: 'string', - }, - 'misp.threat_indicator.confidence': { - category: 'misp', - description: 'Confidence level to which this indicator corresponds. ', - example: 'high', - name: 'misp.threat_indicator.confidence', - type: 'keyword', - }, - 'misp.threat_indicator.kill_chain_phases': { - category: 'misp', - description: 'The kill chain phase(s) to which this indicator corresponds. ', - name: 'misp.threat_indicator.kill_chain_phases', - type: 'keyword', - format: 'string', - }, - 'misp.threat_indicator.mitre_tactic': { - category: 'misp', - description: 'MITRE tactics to which this indicator corresponds. ', - example: 'Initial Access', - name: 'misp.threat_indicator.mitre_tactic', - type: 'keyword', - format: 'string', - }, - 'misp.threat_indicator.mitre_technique': { - category: 'misp', - description: 'MITRE techniques to which this indicator corresponds. ', - example: 'Drive-by Compromise', - name: 'misp.threat_indicator.mitre_technique', - type: 'keyword', - format: 'string', - }, - 'misp.threat_indicator.attack_pattern': { - category: 'misp', - description: - 'The attack_pattern for this indicator is a STIX Pattern as specified in STIX Version 2.0 Part 5 - STIX Patterning. ', - example: "[destination:ip = '91.219.29.188/32']\n", - name: 'misp.threat_indicator.attack_pattern', - type: 'keyword', - }, - 'misp.threat_indicator.attack_pattern_kql': { - category: 'misp', - description: - 'The attack_pattern for this indicator is KQL query that matches the attack_pattern specified in the STIX Pattern format. ', - example: 'destination.ip: "91.219.29.188/32"\n', - name: 'misp.threat_indicator.attack_pattern_kql', - type: 'keyword', - }, - 'misp.threat_indicator.negate': { - category: 'misp', - description: 'When set to true, it specifies the absence of the attack_pattern. ', - name: 'misp.threat_indicator.negate', - type: 'boolean', - }, - 'misp.threat_indicator.intrusion_set': { - category: 'misp', - description: 'Name of the intrusion set if known. ', - name: 'misp.threat_indicator.intrusion_set', - type: 'keyword', - }, - 'misp.threat_indicator.campaign': { - category: 'misp', - description: 'Name of the attack campaign if known. ', - name: 'misp.threat_indicator.campaign', - type: 'keyword', - }, - 'misp.threat_indicator.threat_actor': { - category: 'misp', - description: 'Name of the threat actor if known. ', - name: 'misp.threat_indicator.threat_actor', - type: 'keyword', - }, - 'misp.observed_data.id': { - category: 'misp', - description: 'Identifier of the Observed Data. ', - name: 'misp.observed_data.id', - type: 'keyword', - }, - 'misp.observed_data.first_observed': { - category: 'misp', - description: 'The beginning of the time window that the data was observed, in RFC3339 format. ', - name: 'misp.observed_data.first_observed', - type: 'date', - }, - 'misp.observed_data.last_observed': { - category: 'misp', - description: 'The end of the time window that the data was observed, in RFC3339 format. ', - name: 'misp.observed_data.last_observed', - type: 'date', - }, - 'misp.observed_data.number_observed': { - category: 'misp', - description: - 'The number of times the data represented in the objects property was observed. This MUST be an integer between 1 and 999,999,999 inclusive. ', - name: 'misp.observed_data.number_observed', - type: 'integer', - }, - 'misp.observed_data.objects': { - category: 'misp', - description: - 'A dictionary of Cyber Observable Objects that describes the single fact that was observed. ', - name: 'misp.observed_data.objects', - type: 'keyword', - }, - 'misp.report.id': { - category: 'misp', - description: 'Identifier of the Report. ', - name: 'misp.report.id', - type: 'keyword', - }, - 'misp.report.labels': { - category: 'misp', - description: - 'This field is an Open Vocabulary that specifies the primary subject of this report. Open Vocab - report-label-ov. threat-report,attack-pattern,campaign,identity,indicator,malware,observed-data,threat-actor,tool,vulnerability ', - name: 'misp.report.labels', - type: 'keyword', - }, - 'misp.report.name': { - category: 'misp', - description: 'The name used to identify the Report. ', - name: 'misp.report.name', - type: 'keyword', - }, - 'misp.report.description': { - category: 'misp', - description: 'A description that provides more details and context about Report. ', - name: 'misp.report.description', - type: 'text', - }, - 'misp.report.published': { - category: 'misp', - description: - 'The date that this report object was officially published by the creator of this report, in RFC3339 format. ', - name: 'misp.report.published', - type: 'date', - }, - 'misp.report.object_refs': { - category: 'misp', - description: 'Specifies the STIX Objects that are referred to by this Report. ', - name: 'misp.report.object_refs', - type: 'text', - }, - 'misp.threat_actor.id': { - category: 'misp', - description: 'Identifier of the Threat Actor. ', - name: 'misp.threat_actor.id', - type: 'keyword', - }, - 'misp.threat_actor.labels': { - category: 'misp', - description: - 'This field specifies the type of threat actor. Open Vocab - threat-actor-label-ov. activist,competitor,crime-syndicate,criminal,hacker,insider-accidental,insider-disgruntled,nation-state,sensationalist,spy,terrorist ', - name: 'misp.threat_actor.labels', - type: 'keyword', - }, - 'misp.threat_actor.name': { - category: 'misp', - description: 'The name used to identify this Threat Actor or Threat Actor group. ', - name: 'misp.threat_actor.name', - type: 'keyword', - }, - 'misp.threat_actor.description': { - category: 'misp', - description: 'A description that provides more details and context about the Threat Actor. ', - name: 'misp.threat_actor.description', - type: 'text', - }, - 'misp.threat_actor.aliases': { - category: 'misp', - description: 'A list of other names that this Threat Actor is believed to use. ', - name: 'misp.threat_actor.aliases', - type: 'text', - }, - 'misp.threat_actor.roles': { - category: 'misp', - description: - 'This is a list of roles the Threat Actor plays. Open Vocab - threat-actor-role-ov. agent,director,independent,sponsor,infrastructure-operator,infrastructure-architect,malware-author ', - name: 'misp.threat_actor.roles', - type: 'text', - }, - 'misp.threat_actor.goals': { - category: 'misp', - description: 'The high level goals of this Threat Actor, namely, what are they trying to do. ', - name: 'misp.threat_actor.goals', - type: 'text', - }, - 'misp.threat_actor.sophistication': { - category: 'misp', - description: - 'The skill, specific knowledge, special training, or expertise a Threat Actor must have to perform the attack. Open Vocab - threat-actor-sophistication-ov. none,minimal,intermediate,advanced,strategic,expert,innovator ', - name: 'misp.threat_actor.sophistication', - type: 'text', - }, - 'misp.threat_actor.resource_level': { - category: 'misp', - description: - 'This defines the organizational level at which this Threat Actor typically works. Open Vocab - attack-resource-level-ov. individual,club,contest,team,organization,government ', - name: 'misp.threat_actor.resource_level', - type: 'text', - }, - 'misp.threat_actor.primary_motivation': { - category: 'misp', - description: - 'The primary reason, motivation, or purpose behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.primary_motivation', - type: 'text', - }, - 'misp.threat_actor.secondary_motivations': { - category: 'misp', - description: - 'The secondary reasons, motivations, or purposes behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.secondary_motivations', - type: 'text', - }, - 'misp.threat_actor.personal_motivations': { - category: 'misp', - description: - 'The personal reasons, motivations, or purposes of the Threat Actor regardless of organizational goals. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.personal_motivations', - type: 'text', - }, - 'misp.tool.id': { - category: 'misp', - description: 'Identifier of the Tool. ', - name: 'misp.tool.id', - type: 'keyword', - }, - 'misp.tool.labels': { - category: 'misp', - description: - 'The kind(s) of tool(s) being described. Open Vocab - tool-label-ov. denial-of-service,exploitation,information-gathering,network-capture,credential-exploitation,remote-access,vulnerability-scanning ', - name: 'misp.tool.labels', - type: 'keyword', - }, - 'misp.tool.name': { - category: 'misp', - description: 'The name used to identify the Tool. ', - name: 'misp.tool.name', - type: 'keyword', - }, - 'misp.tool.description': { - category: 'misp', - description: 'A description that provides more details and context about the Tool. ', - name: 'misp.tool.description', - type: 'text', - }, - 'misp.tool.tool_version': { - category: 'misp', - description: 'The version identifier associated with the Tool. ', - name: 'misp.tool.tool_version', - type: 'keyword', - }, - 'misp.tool.kill_chain_phases': { - category: 'misp', - description: 'The list of kill chain phases for which this Tool instance can be used. ', - name: 'misp.tool.kill_chain_phases', - type: 'text', - }, - 'misp.vulnerability.id': { - category: 'misp', - description: 'Identifier of the Vulnerability. ', - name: 'misp.vulnerability.id', - type: 'keyword', - }, - 'misp.vulnerability.name': { - category: 'misp', - description: 'The name used to identify the Vulnerability. ', - name: 'misp.vulnerability.name', - type: 'keyword', - }, - 'misp.vulnerability.description': { - category: 'misp', - description: 'A description that provides more details and context about the Vulnerability. ', - name: 'misp.vulnerability.description', - type: 'text', - }, - 'mssql.log.origin': { - category: 'mssql', - description: 'Origin of the message, usually the server but it can also be a recovery process', - name: 'mssql.log.origin', - type: 'keyword', - }, - 'mysqlenterprise.audit.class': { - category: 'mysqlenterprise', - description: - 'A string representing the event class. The class defines the type of event, when taken together with the event item that specifies the event subclass. ', - name: 'mysqlenterprise.audit.class', - type: 'keyword', - }, - 'mysqlenterprise.audit.connection_id': { - category: 'mysqlenterprise', - description: - 'An integer representing the client connection identifier. This is the same as the value returned by the CONNECTION_ID() function within the session. ', - name: 'mysqlenterprise.audit.connection_id', - type: 'keyword', - }, - 'mysqlenterprise.audit.id': { - category: 'mysqlenterprise', - description: 'An unsigned integer representing an event ID. ', - name: 'mysqlenterprise.audit.id', - type: 'keyword', - }, - 'mysqlenterprise.audit.connection_data.connection_type': { - category: 'mysqlenterprise', - description: - 'The security state of the connection to the server. Permitted values are tcp/ip (TCP/IP connection established without encryption), ssl (TCP/IP connection established with encryption), socket (Unix socket file connection), named_pipe (Windows named pipe connection), and shared_memory (Windows shared memory connection). ', - name: 'mysqlenterprise.audit.connection_data.connection_type', - type: 'keyword', - }, - 'mysqlenterprise.audit.connection_data.status': { - category: 'mysqlenterprise', - description: - 'An integer representing the command status: 0 for success, nonzero if an error occurred. ', - name: 'mysqlenterprise.audit.connection_data.status', - type: 'long', - }, - 'mysqlenterprise.audit.connection_data.db': { - category: 'mysqlenterprise', - description: - 'A string representing a database name. For connection_data, it is the default database. For table_access_data, it is the table database. ', - name: 'mysqlenterprise.audit.connection_data.db', - type: 'keyword', - }, - 'mysqlenterprise.audit.connection_data.connection_attributes': { - category: 'mysqlenterprise', - description: 'Connection attributes that might be passed by different MySQL Clients. ', - name: 'mysqlenterprise.audit.connection_data.connection_attributes', - type: 'flattened', - }, - 'mysqlenterprise.audit.general_data.command': { - category: 'mysqlenterprise', - description: - 'A string representing the type of instruction that generated the audit event, such as a command that the server received from a client. ', - name: 'mysqlenterprise.audit.general_data.command', - type: 'keyword', - }, - 'mysqlenterprise.audit.general_data.sql_command': { - category: 'mysqlenterprise', - description: 'A string that indicates the SQL statement type. ', - name: 'mysqlenterprise.audit.general_data.sql_command', - type: 'keyword', - }, - 'mysqlenterprise.audit.general_data.query': { - category: 'mysqlenterprise', - description: - 'A string representing the text of an SQL statement. The value can be empty. Long values may be truncated. The string, like the audit log file itself, is written using UTF-8 (up to 4 bytes per character), so the value may be the result of conversion. ', - name: 'mysqlenterprise.audit.general_data.query', - type: 'keyword', - }, - 'mysqlenterprise.audit.general_data.status': { - category: 'mysqlenterprise', - description: - 'An integer representing the command status: 0 for success, nonzero if an error occurred. This is the same as the value of the mysql_errno() C API function. ', - name: 'mysqlenterprise.audit.general_data.status', - type: 'long', - }, - 'mysqlenterprise.audit.login.user': { - category: 'mysqlenterprise', - description: - 'A string representing the information indicating how a client connected to the server. ', - name: 'mysqlenterprise.audit.login.user', - type: 'keyword', - }, - 'mysqlenterprise.audit.login.proxy': { - category: 'mysqlenterprise', - description: - 'A string representing the proxy user. The value is empty if user proxying is not in effect. ', - name: 'mysqlenterprise.audit.login.proxy', - type: 'keyword', - }, - 'mysqlenterprise.audit.shutdown_data.server_id': { - category: 'mysqlenterprise', - description: - 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', - name: 'mysqlenterprise.audit.shutdown_data.server_id', - type: 'keyword', - }, - 'mysqlenterprise.audit.startup_data.server_id': { - category: 'mysqlenterprise', - description: - 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', - name: 'mysqlenterprise.audit.startup_data.server_id', - type: 'keyword', - }, - 'mysqlenterprise.audit.startup_data.mysql_version': { - category: 'mysqlenterprise', - description: - 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', - name: 'mysqlenterprise.audit.startup_data.mysql_version', - type: 'keyword', - }, - 'mysqlenterprise.audit.table_access_data.db': { - category: 'mysqlenterprise', - description: - 'A string representing a database name. For connection_data, it is the default database. For table_access_data, it is the table database. ', - name: 'mysqlenterprise.audit.table_access_data.db', - type: 'keyword', - }, - 'mysqlenterprise.audit.table_access_data.table': { - category: 'mysqlenterprise', - description: 'A string representing a table name. ', - name: 'mysqlenterprise.audit.table_access_data.table', - type: 'keyword', - }, - 'mysqlenterprise.audit.table_access_data.query': { - category: 'mysqlenterprise', - description: - 'A string representing the text of an SQL statement. The value can be empty. Long values may be truncated. The string, like the audit log file itself, is written using UTF-8 (up to 4 bytes per character), so the value may be the result of conversion. ', - name: 'mysqlenterprise.audit.table_access_data.query', - type: 'keyword', - }, - 'mysqlenterprise.audit.table_access_data.sql_command': { - category: 'mysqlenterprise', - description: 'A string that indicates the SQL statement type. ', - name: 'mysqlenterprise.audit.table_access_data.sql_command', - type: 'keyword', - }, - 'mysqlenterprise.audit.account.user': { - category: 'mysqlenterprise', - description: - 'A string representing the user that the server authenticated the client as. This is the user name that the server uses for privilege checking. ', - name: 'mysqlenterprise.audit.account.user', - type: 'keyword', - }, - 'mysqlenterprise.audit.account.host': { - category: 'mysqlenterprise', - description: 'A string representing the client host name. ', - name: 'mysqlenterprise.audit.account.host', - type: 'keyword', - }, - 'mysqlenterprise.audit.login.os': { - category: 'mysqlenterprise', - description: - 'A string representing the external user name used during the authentication process, as set by the plugin used to authenticate the client. ', - name: 'mysqlenterprise.audit.login.os', - type: 'keyword', - }, - 'o365.audit.AADGroupId': { - category: 'o365', - name: 'o365.audit.AADGroupId', - type: 'keyword', - }, - 'o365.audit.Actor.ID': { - category: 'o365', - name: 'o365.audit.Actor.ID', - type: 'keyword', - }, - 'o365.audit.Actor.Type': { - category: 'o365', - name: 'o365.audit.Actor.Type', - type: 'keyword', - }, - 'o365.audit.ActorContextId': { - category: 'o365', - name: 'o365.audit.ActorContextId', - type: 'keyword', - }, - 'o365.audit.ActorIpAddress': { - category: 'o365', - name: 'o365.audit.ActorIpAddress', - type: 'keyword', - }, - 'o365.audit.ActorUserId': { - category: 'o365', - name: 'o365.audit.ActorUserId', - type: 'keyword', - }, - 'o365.audit.ActorYammerUserId': { - category: 'o365', - name: 'o365.audit.ActorYammerUserId', - type: 'keyword', - }, - 'o365.audit.AlertEntityId': { - category: 'o365', - name: 'o365.audit.AlertEntityId', - type: 'keyword', - }, - 'o365.audit.AlertId': { - category: 'o365', - name: 'o365.audit.AlertId', - type: 'keyword', - }, - 'o365.audit.AlertLinks': { - category: 'o365', - name: 'o365.audit.AlertLinks', - type: 'array', - }, - 'o365.audit.AlertType': { - category: 'o365', - name: 'o365.audit.AlertType', - type: 'keyword', - }, - 'o365.audit.AppId': { - category: 'o365', - name: 'o365.audit.AppId', - type: 'keyword', - }, - 'o365.audit.ApplicationDisplayName': { - category: 'o365', - name: 'o365.audit.ApplicationDisplayName', - type: 'keyword', - }, - 'o365.audit.ApplicationId': { - category: 'o365', - name: 'o365.audit.ApplicationId', - type: 'keyword', - }, - 'o365.audit.AzureActiveDirectoryEventType': { - category: 'o365', - name: 'o365.audit.AzureActiveDirectoryEventType', - type: 'keyword', - }, - 'o365.audit.ExchangeMetaData.*': { - category: 'o365', - name: 'o365.audit.ExchangeMetaData.*', - type: 'object', - }, - 'o365.audit.Category': { - category: 'o365', - name: 'o365.audit.Category', - type: 'keyword', - }, - 'o365.audit.ClientAppId': { - category: 'o365', - name: 'o365.audit.ClientAppId', - type: 'keyword', - }, - 'o365.audit.ClientInfoString': { - category: 'o365', - name: 'o365.audit.ClientInfoString', - type: 'keyword', - }, - 'o365.audit.ClientIP': { - category: 'o365', - name: 'o365.audit.ClientIP', - type: 'keyword', - }, - 'o365.audit.ClientIPAddress': { - category: 'o365', - name: 'o365.audit.ClientIPAddress', - type: 'keyword', - }, - 'o365.audit.Comments': { - category: 'o365', - name: 'o365.audit.Comments', - type: 'text', - }, - 'o365.audit.CommunicationType': { - category: 'o365', - name: 'o365.audit.CommunicationType', - type: 'keyword', - }, - 'o365.audit.CorrelationId': { - category: 'o365', - name: 'o365.audit.CorrelationId', - type: 'keyword', - }, - 'o365.audit.CreationTime': { - category: 'o365', - name: 'o365.audit.CreationTime', - type: 'keyword', - }, - 'o365.audit.CustomUniqueId': { - category: 'o365', - name: 'o365.audit.CustomUniqueId', - type: 'keyword', - }, - 'o365.audit.Data': { - category: 'o365', - name: 'o365.audit.Data', - type: 'keyword', - }, - 'o365.audit.DataType': { - category: 'o365', - name: 'o365.audit.DataType', - type: 'keyword', - }, - 'o365.audit.DoNotDistributeEvent': { - category: 'o365', - name: 'o365.audit.DoNotDistributeEvent', - type: 'boolean', - }, - 'o365.audit.EntityType': { - category: 'o365', - name: 'o365.audit.EntityType', - type: 'keyword', - }, - 'o365.audit.ErrorNumber': { - category: 'o365', - name: 'o365.audit.ErrorNumber', - type: 'keyword', - }, - 'o365.audit.EventData': { - category: 'o365', - name: 'o365.audit.EventData', - type: 'keyword', - }, - 'o365.audit.EventSource': { - category: 'o365', - name: 'o365.audit.EventSource', - type: 'keyword', - }, - 'o365.audit.ExceptionInfo.*': { - category: 'o365', - name: 'o365.audit.ExceptionInfo.*', - type: 'object', - }, - 'o365.audit.ExtendedProperties.*': { - category: 'o365', - name: 'o365.audit.ExtendedProperties.*', - type: 'object', - }, - 'o365.audit.ExternalAccess': { - category: 'o365', - name: 'o365.audit.ExternalAccess', - type: 'keyword', - }, - 'o365.audit.FromApp': { - category: 'o365', - name: 'o365.audit.FromApp', - type: 'boolean', - }, - 'o365.audit.GroupName': { - category: 'o365', - name: 'o365.audit.GroupName', - type: 'keyword', - }, - 'o365.audit.Id': { - category: 'o365', - name: 'o365.audit.Id', - type: 'keyword', - }, - 'o365.audit.ImplicitShare': { - category: 'o365', - name: 'o365.audit.ImplicitShare', - type: 'keyword', - }, - 'o365.audit.IncidentId': { - category: 'o365', - name: 'o365.audit.IncidentId', - type: 'keyword', - }, - 'o365.audit.InternalLogonType': { - category: 'o365', - name: 'o365.audit.InternalLogonType', - type: 'keyword', - }, - 'o365.audit.InterSystemsId': { - category: 'o365', - name: 'o365.audit.InterSystemsId', - type: 'keyword', - }, - 'o365.audit.IntraSystemId': { - category: 'o365', - name: 'o365.audit.IntraSystemId', - type: 'keyword', - }, - 'o365.audit.IsDocLib': { - category: 'o365', - name: 'o365.audit.IsDocLib', - type: 'boolean', - }, - 'o365.audit.Item.*': { - category: 'o365', - name: 'o365.audit.Item.*', - type: 'object', - }, - 'o365.audit.Item.*.*': { - category: 'o365', - name: 'o365.audit.Item.*.*', - type: 'object', - }, - 'o365.audit.ItemCount': { - category: 'o365', - name: 'o365.audit.ItemCount', - type: 'long', - }, - 'o365.audit.ItemName': { - category: 'o365', - name: 'o365.audit.ItemName', - type: 'keyword', - }, - 'o365.audit.ItemType': { - category: 'o365', - name: 'o365.audit.ItemType', - type: 'keyword', - }, - 'o365.audit.ListBaseTemplateType': { - category: 'o365', - name: 'o365.audit.ListBaseTemplateType', - type: 'keyword', - }, - 'o365.audit.ListBaseType': { - category: 'o365', - name: 'o365.audit.ListBaseType', - type: 'keyword', - }, - 'o365.audit.ListColor': { - category: 'o365', - name: 'o365.audit.ListColor', - type: 'keyword', - }, - 'o365.audit.ListIcon': { - category: 'o365', - name: 'o365.audit.ListIcon', - type: 'keyword', - }, - 'o365.audit.ListId': { - category: 'o365', - name: 'o365.audit.ListId', - type: 'keyword', - }, - 'o365.audit.ListTitle': { - category: 'o365', - name: 'o365.audit.ListTitle', - type: 'keyword', - }, - 'o365.audit.ListItemUniqueId': { - category: 'o365', - name: 'o365.audit.ListItemUniqueId', - type: 'keyword', - }, - 'o365.audit.LogonError': { - category: 'o365', - name: 'o365.audit.LogonError', - type: 'keyword', - }, - 'o365.audit.LogonType': { - category: 'o365', - name: 'o365.audit.LogonType', - type: 'keyword', - }, - 'o365.audit.LogonUserSid': { - category: 'o365', - name: 'o365.audit.LogonUserSid', - type: 'keyword', - }, - 'o365.audit.MailboxGuid': { - category: 'o365', - name: 'o365.audit.MailboxGuid', - type: 'keyword', - }, - 'o365.audit.MailboxOwnerMasterAccountSid': { - category: 'o365', - name: 'o365.audit.MailboxOwnerMasterAccountSid', - type: 'keyword', - }, - 'o365.audit.MailboxOwnerSid': { - category: 'o365', - name: 'o365.audit.MailboxOwnerSid', - type: 'keyword', - }, - 'o365.audit.MailboxOwnerUPN': { - category: 'o365', - name: 'o365.audit.MailboxOwnerUPN', - type: 'keyword', - }, - 'o365.audit.Members': { - category: 'o365', - name: 'o365.audit.Members', - type: 'array', - }, - 'o365.audit.Members.*': { - category: 'o365', - name: 'o365.audit.Members.*', - type: 'object', - }, - 'o365.audit.ModifiedProperties.*.*': { - category: 'o365', - name: 'o365.audit.ModifiedProperties.*.*', - type: 'object', - }, - 'o365.audit.Name': { - category: 'o365', - name: 'o365.audit.Name', - type: 'keyword', - }, - 'o365.audit.ObjectId': { - category: 'o365', - name: 'o365.audit.ObjectId', - type: 'keyword', - }, - 'o365.audit.Operation': { - category: 'o365', - name: 'o365.audit.Operation', - type: 'keyword', - }, - 'o365.audit.OrganizationId': { - category: 'o365', - name: 'o365.audit.OrganizationId', - type: 'keyword', - }, - 'o365.audit.OrganizationName': { - category: 'o365', - name: 'o365.audit.OrganizationName', - type: 'keyword', - }, - 'o365.audit.OriginatingServer': { - category: 'o365', - name: 'o365.audit.OriginatingServer', - type: 'keyword', - }, - 'o365.audit.Parameters.*': { - category: 'o365', - name: 'o365.audit.Parameters.*', - type: 'object', - }, - 'o365.audit.PolicyDetails': { - category: 'o365', - name: 'o365.audit.PolicyDetails', - type: 'array', - }, - 'o365.audit.PolicyId': { - category: 'o365', - name: 'o365.audit.PolicyId', - type: 'keyword', - }, - 'o365.audit.RecordType': { - category: 'o365', - name: 'o365.audit.RecordType', - type: 'keyword', - }, - 'o365.audit.ResultStatus': { - category: 'o365', - name: 'o365.audit.ResultStatus', - type: 'keyword', - }, - 'o365.audit.SensitiveInfoDetectionIsIncluded': { - category: 'o365', - name: 'o365.audit.SensitiveInfoDetectionIsIncluded', - type: 'keyword', - }, - 'o365.audit.SharePointMetaData.*': { - category: 'o365', - name: 'o365.audit.SharePointMetaData.*', - type: 'object', - }, - 'o365.audit.SessionId': { - category: 'o365', - name: 'o365.audit.SessionId', - type: 'keyword', - }, - 'o365.audit.Severity': { - category: 'o365', - name: 'o365.audit.Severity', - type: 'keyword', - }, - 'o365.audit.Site': { - category: 'o365', - name: 'o365.audit.Site', - type: 'keyword', - }, - 'o365.audit.SiteUrl': { - category: 'o365', - name: 'o365.audit.SiteUrl', - type: 'keyword', - }, - 'o365.audit.Source': { - category: 'o365', - name: 'o365.audit.Source', - type: 'keyword', - }, - 'o365.audit.SourceFileExtension': { - category: 'o365', - name: 'o365.audit.SourceFileExtension', - type: 'keyword', - }, - 'o365.audit.SourceFileName': { - category: 'o365', - name: 'o365.audit.SourceFileName', - type: 'keyword', - }, - 'o365.audit.SourceRelativeUrl': { - category: 'o365', - name: 'o365.audit.SourceRelativeUrl', - type: 'keyword', - }, - 'o365.audit.Status': { - category: 'o365', - name: 'o365.audit.Status', - type: 'keyword', - }, - 'o365.audit.SupportTicketId': { - category: 'o365', - name: 'o365.audit.SupportTicketId', - type: 'keyword', - }, - 'o365.audit.Target.ID': { - category: 'o365', - name: 'o365.audit.Target.ID', - type: 'keyword', - }, - 'o365.audit.Target.Type': { - category: 'o365', - name: 'o365.audit.Target.Type', - type: 'keyword', - }, - 'o365.audit.TargetContextId': { - category: 'o365', - name: 'o365.audit.TargetContextId', - type: 'keyword', - }, - 'o365.audit.TargetUserOrGroupName': { - category: 'o365', - name: 'o365.audit.TargetUserOrGroupName', - type: 'keyword', - }, - 'o365.audit.TargetUserOrGroupType': { - category: 'o365', - name: 'o365.audit.TargetUserOrGroupType', - type: 'keyword', - }, - 'o365.audit.TeamName': { - category: 'o365', - name: 'o365.audit.TeamName', - type: 'keyword', - }, - 'o365.audit.TeamGuid': { - category: 'o365', - name: 'o365.audit.TeamGuid', - type: 'keyword', - }, - 'o365.audit.TemplateTypeId': { - category: 'o365', - name: 'o365.audit.TemplateTypeId', - type: 'keyword', - }, - 'o365.audit.UniqueSharingId': { - category: 'o365', - name: 'o365.audit.UniqueSharingId', - type: 'keyword', - }, - 'o365.audit.UserAgent': { - category: 'o365', - name: 'o365.audit.UserAgent', - type: 'keyword', - }, - 'o365.audit.UserId': { - category: 'o365', - name: 'o365.audit.UserId', - type: 'keyword', - }, - 'o365.audit.UserKey': { - category: 'o365', - name: 'o365.audit.UserKey', - type: 'keyword', - }, - 'o365.audit.UserType': { - category: 'o365', - name: 'o365.audit.UserType', - type: 'keyword', - }, - 'o365.audit.Version': { - category: 'o365', - name: 'o365.audit.Version', - type: 'keyword', - }, - 'o365.audit.WebId': { - category: 'o365', - name: 'o365.audit.WebId', - type: 'keyword', - }, - 'o365.audit.Workload': { - category: 'o365', - name: 'o365.audit.Workload', - type: 'keyword', - }, - 'o365.audit.YammerNetworkId': { - category: 'o365', - name: 'o365.audit.YammerNetworkId', - type: 'keyword', - }, - 'okta.uuid': { - category: 'okta', - description: 'The unique identifier of the Okta LogEvent. ', - name: 'okta.uuid', - type: 'keyword', - }, - 'okta.event_type': { - category: 'okta', - description: 'The type of the LogEvent. ', - name: 'okta.event_type', - type: 'keyword', - }, - 'okta.version': { - category: 'okta', - description: 'The version of the LogEvent. ', - name: 'okta.version', - type: 'keyword', - }, - 'okta.severity': { - category: 'okta', - description: 'The severity of the LogEvent. Must be one of DEBUG, INFO, WARN, or ERROR. ', - name: 'okta.severity', - type: 'keyword', - }, - 'okta.display_message': { - category: 'okta', - description: 'The display message of the LogEvent. ', - name: 'okta.display_message', - type: 'keyword', - }, - 'okta.actor.id': { - category: 'okta', - description: 'Identifier of the actor. ', - name: 'okta.actor.id', - type: 'keyword', - }, - 'okta.actor.type': { - category: 'okta', - description: 'Type of the actor. ', - name: 'okta.actor.type', - type: 'keyword', - }, - 'okta.actor.alternate_id': { - category: 'okta', - description: 'Alternate identifier of the actor. ', - name: 'okta.actor.alternate_id', - type: 'keyword', - }, - 'okta.actor.display_name': { - category: 'okta', - description: 'Display name of the actor. ', - name: 'okta.actor.display_name', - type: 'keyword', - }, - 'okta.client.ip': { - category: 'okta', - description: 'The IP address of the client. ', - name: 'okta.client.ip', - type: 'ip', - }, - 'okta.client.user_agent.raw_user_agent': { - category: 'okta', - description: 'The raw informaton of the user agent. ', - name: 'okta.client.user_agent.raw_user_agent', - type: 'keyword', - }, - 'okta.client.user_agent.os': { - category: 'okta', - description: 'The OS informaton. ', - name: 'okta.client.user_agent.os', - type: 'keyword', - }, - 'okta.client.user_agent.browser': { - category: 'okta', - description: 'The browser informaton of the client. ', - name: 'okta.client.user_agent.browser', - type: 'keyword', - }, - 'okta.client.zone': { - category: 'okta', - description: 'The zone information of the client. ', - name: 'okta.client.zone', - type: 'keyword', - }, - 'okta.client.device': { - category: 'okta', - description: 'The information of the client device. ', - name: 'okta.client.device', - type: 'keyword', - }, - 'okta.client.id': { - category: 'okta', - description: 'The identifier of the client. ', - name: 'okta.client.id', - type: 'keyword', - }, - 'okta.outcome.reason': { - category: 'okta', - description: 'The reason of the outcome. ', - name: 'okta.outcome.reason', - type: 'keyword', - }, - 'okta.outcome.result': { - category: 'okta', - description: - 'The result of the outcome. Must be one of: SUCCESS, FAILURE, SKIPPED, ALLOW, DENY, CHALLENGE, UNKNOWN. ', - name: 'okta.outcome.result', - type: 'keyword', - }, - 'okta.target.id': { - category: 'okta', - description: 'Identifier of the actor. ', - name: 'okta.target.id', - type: 'keyword', - }, - 'okta.target.type': { - category: 'okta', - description: 'Type of the actor. ', - name: 'okta.target.type', - type: 'keyword', - }, - 'okta.target.alternate_id': { - category: 'okta', - description: 'Alternate identifier of the actor. ', - name: 'okta.target.alternate_id', - type: 'keyword', - }, - 'okta.target.display_name': { - category: 'okta', - description: 'Display name of the actor. ', - name: 'okta.target.display_name', - type: 'keyword', - }, - 'okta.transaction.id': { - category: 'okta', - description: 'Identifier of the transaction. ', - name: 'okta.transaction.id', - type: 'keyword', - }, - 'okta.transaction.type': { - category: 'okta', - description: 'The type of transaction. Must be one of "WEB", "JOB". ', - name: 'okta.transaction.type', - type: 'keyword', - }, - 'okta.debug_context.debug_data.device_fingerprint': { - category: 'okta', - description: 'The fingerprint of the device. ', - name: 'okta.debug_context.debug_data.device_fingerprint', - type: 'keyword', - }, - 'okta.debug_context.debug_data.request_id': { - category: 'okta', - description: 'The identifier of the request. ', - name: 'okta.debug_context.debug_data.request_id', - type: 'keyword', - }, - 'okta.debug_context.debug_data.request_uri': { - category: 'okta', - description: 'The request URI. ', - name: 'okta.debug_context.debug_data.request_uri', - type: 'keyword', - }, - 'okta.debug_context.debug_data.threat_suspected': { - category: 'okta', - description: 'Threat suspected. ', - name: 'okta.debug_context.debug_data.threat_suspected', - type: 'keyword', - }, - 'okta.debug_context.debug_data.url': { - category: 'okta', - description: 'The URL. ', - name: 'okta.debug_context.debug_data.url', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.browser': { - category: 'okta', - description: 'The browser used. ', - name: 'okta.debug_context.debug_data.suspicious_activity.browser', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_city': { - category: 'okta', - description: 'The city where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_city', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_country': { - category: 'okta', - description: 'The country where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_country', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_id': { - category: 'okta', - description: 'The event ID. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_id', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_ip': { - category: 'okta', - description: 'The IP of the suspicious event. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_ip', - type: 'ip', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_latitude': { - category: 'okta', - description: 'The latitude where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_latitude', - type: 'float', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_longitude': { - category: 'okta', - description: 'The longitude where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_longitude', - type: 'float', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_state': { - category: 'okta', - description: 'The state where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_state', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_transaction_id': { - category: 'okta', - description: 'The event transaction ID. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_transaction_id', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_type': { - category: 'okta', - description: 'The event type. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_type', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.os': { - category: 'okta', - description: 'The OS of the system from where the suspicious activity occured. ', - name: 'okta.debug_context.debug_data.suspicious_activity.os', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.timestamp': { - category: 'okta', - description: 'The timestamp of when the activity occurred. ', - name: 'okta.debug_context.debug_data.suspicious_activity.timestamp', - type: 'date', - }, - 'okta.authentication_context.authentication_provider': { - category: 'okta', - description: - 'The information about the authentication provider. Must be one of OKTA_AUTHENTICATION_PROVIDER, ACTIVE_DIRECTORY, LDAP, FEDERATION, SOCIAL, FACTOR_PROVIDER. ', - name: 'okta.authentication_context.authentication_provider', - type: 'keyword', - }, - 'okta.authentication_context.authentication_step': { - category: 'okta', - description: 'The authentication step. ', - name: 'okta.authentication_context.authentication_step', - type: 'integer', - }, - 'okta.authentication_context.credential_provider': { - category: 'okta', - description: - 'The information about credential provider. Must be one of OKTA_CREDENTIAL_PROVIDER, RSA, SYMANTEC, GOOGLE, DUO, YUBIKEY. ', - name: 'okta.authentication_context.credential_provider', - type: 'keyword', - }, - 'okta.authentication_context.credential_type': { - category: 'okta', - description: - 'The information about credential type. Must be one of OTP, SMS, PASSWORD, ASSERTION, IWA, EMAIL, OAUTH2, JWT, CERTIFICATE, PRE_SHARED_SYMMETRIC_KEY, OKTA_CLIENT_SESSION, DEVICE_UDID. ', - name: 'okta.authentication_context.credential_type', - type: 'keyword', - }, - 'okta.authentication_context.issuer.id': { - category: 'okta', - description: 'The identifier of the issuer. ', - name: 'okta.authentication_context.issuer.id', - type: 'keyword', - }, - 'okta.authentication_context.issuer.type': { - category: 'okta', - description: 'The type of the issuer. ', - name: 'okta.authentication_context.issuer.type', - type: 'keyword', - }, - 'okta.authentication_context.external_session_id': { - category: 'okta', - description: 'The session identifer of the external session if any. ', - name: 'okta.authentication_context.external_session_id', - type: 'keyword', - }, - 'okta.authentication_context.interface': { - category: 'okta', - description: 'The interface used. e.g., Outlook, Office365, wsTrust ', - name: 'okta.authentication_context.interface', - type: 'keyword', - }, - 'okta.security_context.as.number': { - category: 'okta', - description: 'The AS number. ', - name: 'okta.security_context.as.number', - type: 'integer', - }, - 'okta.security_context.as.organization.name': { - category: 'okta', - description: 'The organization name. ', - name: 'okta.security_context.as.organization.name', - type: 'keyword', - }, - 'okta.security_context.isp': { - category: 'okta', - description: 'The Internet Service Provider. ', - name: 'okta.security_context.isp', - type: 'keyword', - }, - 'okta.security_context.domain': { - category: 'okta', - description: 'The domain name. ', - name: 'okta.security_context.domain', - type: 'keyword', - }, - 'okta.security_context.is_proxy': { - category: 'okta', - description: 'Whether it is a proxy or not. ', - name: 'okta.security_context.is_proxy', - type: 'boolean', - }, - 'okta.request.ip_chain.ip': { - category: 'okta', - description: 'IP address. ', - name: 'okta.request.ip_chain.ip', - type: 'ip', - }, - 'okta.request.ip_chain.version': { - category: 'okta', - description: 'IP version. Must be one of V4, V6. ', - name: 'okta.request.ip_chain.version', - type: 'keyword', - }, - 'okta.request.ip_chain.source': { - category: 'okta', - description: 'Source information. ', - name: 'okta.request.ip_chain.source', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.city': { - category: 'okta', - description: 'The city.', - name: 'okta.request.ip_chain.geographical_context.city', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.state': { - category: 'okta', - description: 'The state.', - name: 'okta.request.ip_chain.geographical_context.state', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.postal_code': { - category: 'okta', - description: 'The postal code.', - name: 'okta.request.ip_chain.geographical_context.postal_code', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.country': { - category: 'okta', - description: 'The country.', - name: 'okta.request.ip_chain.geographical_context.country', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.geolocation': { - category: 'okta', - description: 'Geolocation information. ', - name: 'okta.request.ip_chain.geographical_context.geolocation', - type: 'geo_point', - }, - 'oracle.database_audit.status': { - category: 'oracle', - description: 'Database Audit Status. ', - name: 'oracle.database_audit.status', - type: 'keyword', - }, - 'oracle.database_audit.session_id': { - category: 'oracle', - description: 'Indicates the audit session ID number. ', - name: 'oracle.database_audit.session_id', - type: 'keyword', - }, - 'oracle.database_audit.client.terminal': { - category: 'oracle', - description: 'If available, the client terminal type, for example "pty". ', - name: 'oracle.database_audit.client.terminal', - type: 'keyword', - }, - 'oracle.database_audit.client.address': { - category: 'oracle', - description: 'The IP Address or Domain used by the client. ', - name: 'oracle.database_audit.client.address', - type: 'keyword', - }, - 'oracle.database_audit.client.user': { - category: 'oracle', - description: 'The user running the client or connection to the database. ', - name: 'oracle.database_audit.client.user', - type: 'keyword', - }, - 'oracle.database_audit.database.user': { - category: 'oracle', - description: 'The database user used to authenticate. ', - name: 'oracle.database_audit.database.user', - type: 'keyword', - }, - 'oracle.database_audit.privilege': { - category: 'oracle', - description: 'The privilege group related to the database user. ', - name: 'oracle.database_audit.privilege', - type: 'keyword', - }, - 'oracle.database_audit.entry.id': { - category: 'oracle', - description: - 'Indicates the current audit entry number, assigned to each audit trail record. The audit entry.id sequence number is shared between fine-grained audit records and regular audit records. ', - name: 'oracle.database_audit.entry.id', - type: 'keyword', - }, - 'oracle.database_audit.database.host': { - category: 'oracle', - description: 'Client host machine name. ', - name: 'oracle.database_audit.database.host', - type: 'keyword', - }, - 'oracle.database_audit.action': { - category: 'oracle', - description: - 'The action performed during the audit event. This could for example be the raw query. ', - name: 'oracle.database_audit.action', - type: 'keyword', - }, - 'oracle.database_audit.action_number': { - category: 'oracle', - description: - 'Action is a numeric value representing the action the user performed. The corresponding name of the action type is in the AUDIT_ACTIONS table. For example, action 100 refers to LOGON. ', - name: 'oracle.database_audit.action_number', - type: 'keyword', - }, - 'oracle.database_audit.database.id': { - category: 'oracle', - description: - 'Database identifier calculated when the database is created. It corresponds to the DBID column of the V$DATABASE data dictionary view. ', - name: 'oracle.database_audit.database.id', - type: 'keyword', - }, - 'oracle.database_audit.length': { - category: 'oracle', - description: - 'Refers to the total number of bytes used in this audit record. This number includes the trailing newline bytes (\\n), if any, at the end of the audit record. ', - name: 'oracle.database_audit.length', - type: 'long', - }, - 'panw.panos.ruleset': { - category: 'panw', - description: 'Name of the rule that matched this session. ', - name: 'panw.panos.ruleset', - type: 'keyword', - }, - 'panw.panos.source.zone': { - category: 'panw', - description: 'Source zone for this session. ', - name: 'panw.panos.source.zone', - type: 'keyword', - }, - 'panw.panos.source.interface': { - category: 'panw', - description: 'Source interface for this session. ', - name: 'panw.panos.source.interface', - type: 'keyword', - }, - 'panw.panos.source.nat.ip': { - category: 'panw', - description: 'Post-NAT source IP. ', - name: 'panw.panos.source.nat.ip', - type: 'ip', - }, - 'panw.panos.source.nat.port': { - category: 'panw', - description: 'Post-NAT source port. ', - name: 'panw.panos.source.nat.port', - type: 'long', - }, - 'panw.panos.destination.zone': { - category: 'panw', - description: 'Destination zone for this session. ', - name: 'panw.panos.destination.zone', - type: 'keyword', - }, - 'panw.panos.destination.interface': { - category: 'panw', - description: 'Destination interface for this session. ', - name: 'panw.panos.destination.interface', - type: 'keyword', - }, - 'panw.panos.destination.nat.ip': { - category: 'panw', - description: 'Post-NAT destination IP. ', - name: 'panw.panos.destination.nat.ip', - type: 'ip', - }, - 'panw.panos.destination.nat.port': { - category: 'panw', - description: 'Post-NAT destination port. ', - name: 'panw.panos.destination.nat.port', - type: 'long', - }, - 'panw.panos.endreason': { - category: 'panw', - description: 'The reason a session terminated. ', - name: 'panw.panos.endreason', - type: 'keyword', - }, - 'panw.panos.network.pcap_id': { - category: 'panw', - description: 'Packet capture ID for a threat. ', - name: 'panw.panos.network.pcap_id', - type: 'keyword', - }, - 'panw.panos.network.nat.community_id': { - category: 'panw', - description: 'Community ID flow-hash for the NAT 5-tuple. ', - name: 'panw.panos.network.nat.community_id', - type: 'keyword', - }, - 'panw.panos.file.hash': { - category: 'panw', - description: 'Binary hash for a threat file sent to be analyzed by the WildFire service. ', - name: 'panw.panos.file.hash', - type: 'keyword', - }, - 'panw.panos.url.category': { - category: 'panw', - description: - "For threat URLs, it's the URL category. For WildFire, the verdict on the file and is either 'malicious', 'grayware', or 'benign'. ", - name: 'panw.panos.url.category', - type: 'keyword', - }, - 'panw.panos.flow_id': { - category: 'panw', - description: 'Internal numeric identifier for each session. ', - name: 'panw.panos.flow_id', - type: 'keyword', - }, - 'panw.panos.sequence_number': { - category: 'panw', - description: - 'Log entry identifier that is incremented sequentially. Unique for each log type. ', - name: 'panw.panos.sequence_number', - type: 'long', - }, - 'panw.panos.threat.resource': { - category: 'panw', - description: 'URL or file name for a threat. ', - name: 'panw.panos.threat.resource', - type: 'keyword', - }, - 'panw.panos.threat.id': { - category: 'panw', - description: 'Palo Alto Networks identifier for the threat. ', - name: 'panw.panos.threat.id', - type: 'keyword', - }, - 'panw.panos.threat.name': { - category: 'panw', - description: 'Palo Alto Networks name for the threat. ', - name: 'panw.panos.threat.name', - type: 'keyword', - }, - 'panw.panos.action': { - category: 'panw', - description: 'Action taken for the session.', - name: 'panw.panos.action', - type: 'keyword', - }, - 'panw.panos.type': { - category: 'panw', - description: 'Specifies the type of the log', - name: 'panw.panos.type', - }, - 'panw.panos.sub_type': { - category: 'panw', - description: 'Specifies the sub type of the log', - name: 'panw.panos.sub_type', - }, - 'panw.panos.virtual_sys': { - category: 'panw', - description: 'Virtual system instance ', - name: 'panw.panos.virtual_sys', - type: 'keyword', - }, - 'panw.panos.client_os_ver': { - category: 'panw', - description: 'The client device’s OS version. ', - name: 'panw.panos.client_os_ver', - type: 'keyword', - }, - 'panw.panos.client_os': { - category: 'panw', - description: 'The client device’s OS version. ', - name: 'panw.panos.client_os', - type: 'keyword', - }, - 'panw.panos.client_ver': { - category: 'panw', - description: 'The client’s GlobalProtect app version. ', - name: 'panw.panos.client_ver', - type: 'keyword', - }, - 'panw.panos.stage': { - category: 'panw', - description: 'A string showing the stage of the connection ', - example: 'before-login', - name: 'panw.panos.stage', - type: 'keyword', - }, - 'panw.panos.actionflags': { - category: 'panw', - description: 'A bit field indicating if the log was forwarded to Panorama. ', - name: 'panw.panos.actionflags', - type: 'keyword', - }, - 'panw.panos.error': { - category: 'panw', - description: 'A string showing that error that has occurred in any event. ', - name: 'panw.panos.error', - type: 'keyword', - }, - 'panw.panos.error_code': { - category: 'panw', - description: 'An integer associated with any errors that occurred. ', - name: 'panw.panos.error_code', - type: 'integer', - }, - 'panw.panos.repeatcnt': { - category: 'panw', - description: - 'The number of sessions with the same source IP address, destination IP address, application, and subtype that GlobalProtect has detected within the last five seconds.An integer associated with any errors that occurred. ', - name: 'panw.panos.repeatcnt', - type: 'integer', - }, - 'panw.panos.serial_number': { - category: 'panw', - description: 'The serial number of the user’s machine or device. ', - name: 'panw.panos.serial_number', - type: 'keyword', - }, - 'panw.panos.auth_method': { - category: 'panw', - description: 'A string showing the authentication type ', - example: 'LDAP', - name: 'panw.panos.auth_method', - type: 'keyword', - }, - 'panw.panos.datasource': { - category: 'panw', - description: 'Source from which mapping information is collected. ', - name: 'panw.panos.datasource', - type: 'keyword', - }, - 'panw.panos.datasourcetype': { - category: 'panw', - description: 'Mechanism used to identify the IP/User mappings within a data source. ', - name: 'panw.panos.datasourcetype', - type: 'keyword', - }, - 'panw.panos.datasourcename': { - category: 'panw', - description: 'User-ID source that sends the IP (Port)-User Mapping. ', - name: 'panw.panos.datasourcename', - type: 'keyword', - }, - 'panw.panos.factorno': { - category: 'panw', - description: 'Indicates the use of primary authentication (1) or additional factors (2, 3). ', - name: 'panw.panos.factorno', - type: 'integer', - }, - 'panw.panos.factortype': { - category: 'panw', - description: 'Vendor used to authenticate a user when Multi Factor authentication is present. ', - name: 'panw.panos.factortype', - type: 'keyword', - }, - 'panw.panos.factorcompletiontime': { - category: 'panw', - description: 'Time the authentication was completed. ', - name: 'panw.panos.factorcompletiontime', - type: 'date', - }, - 'panw.panos.ugflags': { - category: 'panw', - description: - 'Displays whether the user group that was found during user group mapping. Supported values are: User Group Found—Indicates whether the user could be mapped to a group. Duplicate User—Indicates whether duplicate users were found in a user group. Displays N/A if no user group is found. ', - name: 'panw.panos.ugflags', - type: 'keyword', - }, - 'panw.panos.device_group_hierarchy.level_1': { - category: 'panw', - description: - 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', - name: 'panw.panos.device_group_hierarchy.level_1', - type: 'keyword', - }, - 'panw.panos.device_group_hierarchy.level_2': { - category: 'panw', - description: - 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', - name: 'panw.panos.device_group_hierarchy.level_2', - type: 'keyword', - }, - 'panw.panos.device_group_hierarchy.level_3': { - category: 'panw', - description: - 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', - name: 'panw.panos.device_group_hierarchy.level_3', - type: 'keyword', - }, - 'panw.panos.device_group_hierarchy.level_4': { - category: 'panw', - description: - 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', - name: 'panw.panos.device_group_hierarchy.level_4', - type: 'keyword', - }, - 'panw.panos.timeout': { - category: 'panw', - description: 'Timeout after which the IP/User Mappings are cleared. ', - name: 'panw.panos.timeout', - type: 'integer', - }, - 'panw.panos.vsys_id': { - category: 'panw', - description: 'A unique identifier for a virtual system on a Palo Alto Networks firewall. ', - name: 'panw.panos.vsys_id', - type: 'keyword', - }, - 'panw.panos.vsys_name': { - category: 'panw', - description: - 'The name of the virtual system associated with the session; only valid on firewalls enabled for multiple virtual systems. ', - name: 'panw.panos.vsys_name', - type: 'keyword', - }, - 'panw.panos.description': { - category: 'panw', - description: 'Additional information for any event that has occurred. ', - name: 'panw.panos.description', - type: 'keyword', - }, - 'panw.panos.tunnel_type': { - category: 'panw', - description: 'The type of tunnel (either SSLVPN or IPSec). ', - name: 'panw.panos.tunnel_type', - type: 'keyword', - }, - 'panw.panos.connect_method': { - category: 'panw', - description: 'A string showing the how the GlobalProtect app connects to Gateway ', - name: 'panw.panos.connect_method', - type: 'keyword', - }, - 'panw.panos.matchname': { - category: 'panw', - description: 'Name of the HIP object or profile. ', - name: 'panw.panos.matchname', - type: 'keyword', - }, - 'panw.panos.matchtype': { - category: 'panw', - description: 'Whether the hip field represents a HIP object or a HIP profile. ', - name: 'panw.panos.matchtype', - type: 'keyword', - }, - 'panw.panos.priority': { - category: 'panw', - description: - 'The priority order of the gateway that is based on highest (1), high (2), medium (3), low (4), or lowest (5) to which the GlobalProtect app can connect. ', - name: 'panw.panos.priority', - type: 'keyword', - }, - 'panw.panos.response_time': { - category: 'panw', - description: - 'The SSL response time of the selected gateway that is measured in milliseconds on the endpoint during tunnel setup. ', - name: 'panw.panos.response_time', - type: 'keyword', - }, - 'panw.panos.attempted_gateways': { - category: 'panw', - description: - 'The fields that are collected for each gateway connection attempt with the gateway name, SSL response time, and priority ', - name: 'panw.panos.attempted_gateways', - type: 'keyword', - }, - 'panw.panos.gateway': { - category: 'panw', - description: 'The name of the gateway that is specified on the portal configuration. ', - name: 'panw.panos.gateway', - type: 'keyword', - }, - 'panw.panos.selection_type': { - category: 'panw', - description: 'The connection method that is selected to connect to the gateway. ', - name: 'panw.panos.selection_type', - type: 'keyword', - }, - 'rabbitmq.log.pid': { - category: 'rabbitmq', - description: 'The Erlang process id', - example: '<0.222.0>', - name: 'rabbitmq.log.pid', - type: 'keyword', - }, - 'snyk.projects': { - category: 'snyk', - description: 'Array with all related projects objects. ', - name: 'snyk.projects', - type: 'flattened', - }, - 'snyk.related.projects': { - category: 'snyk', - description: "Array of all the related project ID's. ", - name: 'snyk.related.projects', - type: 'keyword', - }, - 'snyk.audit.org_id': { - category: 'snyk', - description: 'ID of the related Organization related to the event. ', - name: 'snyk.audit.org_id', - type: 'keyword', - }, - 'snyk.audit.project_id': { - category: 'snyk', - description: 'ID of the project related to the event. ', - name: 'snyk.audit.project_id', - type: 'keyword', - }, - 'snyk.audit.content': { - category: 'snyk', - description: 'Overview of the content that was changed, both old and new values. ', - name: 'snyk.audit.content', - type: 'flattened', - }, - 'snyk.vulnerabilities.cvss3': { - category: 'snyk', - description: 'CSSv3 scores. ', - name: 'snyk.vulnerabilities.cvss3', - type: 'keyword', - }, - 'snyk.vulnerabilities.disclosure_time': { - category: 'snyk', - description: - 'The time this vulnerability was originally disclosed to the package maintainers. ', - name: 'snyk.vulnerabilities.disclosure_time', - type: 'date', - }, - 'snyk.vulnerabilities.exploit_maturity': { - category: 'snyk', - description: 'The Snyk exploit maturity level. ', - name: 'snyk.vulnerabilities.exploit_maturity', - type: 'keyword', - }, - 'snyk.vulnerabilities.id': { - category: 'snyk', - description: 'The vulnerability reference ID. ', - name: 'snyk.vulnerabilities.id', - type: 'keyword', - }, - 'snyk.vulnerabilities.is_ignored': { - category: 'snyk', - description: 'If the vulnerability report has been ignored. ', - name: 'snyk.vulnerabilities.is_ignored', - type: 'boolean', - }, - 'snyk.vulnerabilities.is_patchable': { - category: 'snyk', - description: 'If vulnerability is fixable by using a Snyk supplied patch. ', - name: 'snyk.vulnerabilities.is_patchable', - type: 'boolean', - }, - 'snyk.vulnerabilities.is_patched': { - category: 'snyk', - description: 'If the vulnerability has been patched. ', - name: 'snyk.vulnerabilities.is_patched', - type: 'boolean', - }, - 'snyk.vulnerabilities.is_pinnable': { - category: 'snyk', - description: 'If the vulnerability is fixable by pinning a transitive dependency. ', - name: 'snyk.vulnerabilities.is_pinnable', - type: 'boolean', - }, - 'snyk.vulnerabilities.is_upgradable': { - category: 'snyk', - description: 'If the vulnerability fixable by upgrading a dependency. ', - name: 'snyk.vulnerabilities.is_upgradable', - type: 'boolean', - }, - 'snyk.vulnerabilities.language': { - category: 'snyk', - description: "The package's programming language. ", - name: 'snyk.vulnerabilities.language', - type: 'keyword', - }, - 'snyk.vulnerabilities.package': { - category: 'snyk', - description: 'The package identifier according to its package manager. ', - name: 'snyk.vulnerabilities.package', - type: 'keyword', - }, - 'snyk.vulnerabilities.package_manager': { - category: 'snyk', - description: 'The package manager. ', - name: 'snyk.vulnerabilities.package_manager', - type: 'keyword', - }, - 'snyk.vulnerabilities.patches': { - category: 'snyk', - description: 'Patches required to resolve the issue created by Snyk. ', - name: 'snyk.vulnerabilities.patches', - type: 'flattened', - }, - 'snyk.vulnerabilities.priority_score': { - category: 'snyk', - description: 'The CVS priority score. ', - name: 'snyk.vulnerabilities.priority_score', - type: 'long', - }, - 'snyk.vulnerabilities.publication_time': { - category: 'snyk', - description: 'The vulnerability publication time. ', - name: 'snyk.vulnerabilities.publication_time', - type: 'date', - }, - 'snyk.vulnerabilities.jira_issue_url': { - category: 'snyk', - description: 'Link to the related Jira issue. ', - name: 'snyk.vulnerabilities.jira_issue_url', - type: 'keyword', - }, - 'snyk.vulnerabilities.original_severity': { - category: 'snyk', - description: 'The original severity of the vulnerability. ', - name: 'snyk.vulnerabilities.original_severity', - type: 'long', - }, - 'snyk.vulnerabilities.reachability': { - category: 'snyk', - description: - 'If the vulnerable function from the library is used in the code scanned. Can either be No Info, Potentially reachable and Reachable. ', - name: 'snyk.vulnerabilities.reachability', - type: 'keyword', - }, - 'snyk.vulnerabilities.title': { - category: 'snyk', - description: 'The issue title. ', - name: 'snyk.vulnerabilities.title', - type: 'keyword', - }, - 'snyk.vulnerabilities.type': { - category: 'snyk', - description: 'The issue type. Can be either "license" or "vulnerability". ', - name: 'snyk.vulnerabilities.type', - type: 'keyword', - }, - 'snyk.vulnerabilities.unique_severities_list': { - category: 'snyk', - description: 'A list of related unique severities. ', - name: 'snyk.vulnerabilities.unique_severities_list', - type: 'keyword', - }, - 'snyk.vulnerabilities.version': { - category: 'snyk', - description: 'The package version this issue is applicable to. ', - name: 'snyk.vulnerabilities.version', - type: 'keyword', - }, - 'snyk.vulnerabilities.introduced_date': { - category: 'snyk', - description: 'The date the vulnerability was initially found. ', - name: 'snyk.vulnerabilities.introduced_date', - type: 'date', - }, - 'snyk.vulnerabilities.is_fixed': { - category: 'snyk', - description: 'If the related vulnerability has been resolved. ', - name: 'snyk.vulnerabilities.is_fixed', - type: 'boolean', - }, - 'snyk.vulnerabilities.credit': { - category: 'snyk', - description: 'Reference to the person that original found the vulnerability. ', - name: 'snyk.vulnerabilities.credit', - type: 'keyword', - }, - 'snyk.vulnerabilities.semver': { - category: 'snyk', - description: - 'One or more semver ranges this issue is applicable to. The format varies according to package manager. ', - name: 'snyk.vulnerabilities.semver', - type: 'flattened', - }, - 'snyk.vulnerabilities.identifiers.alternative': { - category: 'snyk', - description: 'Additional vulnerability identifiers. ', - name: 'snyk.vulnerabilities.identifiers.alternative', - type: 'keyword', - }, - 'snyk.vulnerabilities.identifiers.cwe': { - category: 'snyk', - description: 'CWE vulnerability identifiers. ', - name: 'snyk.vulnerabilities.identifiers.cwe', - type: 'keyword', - }, - 'sophos.xg.device': { - category: 'sophos', - description: 'device ', - name: 'sophos.xg.device', - type: 'keyword', - }, - 'sophos.xg.date': { - category: 'sophos', - description: 'Date (yyyy-mm-dd) when the event occurred ', - name: 'sophos.xg.date', - type: 'date', - }, - 'sophos.xg.timezone': { - category: 'sophos', - description: 'Time (hh:mm:ss) when the event occurred ', - name: 'sophos.xg.timezone', - type: 'keyword', - }, - 'sophos.xg.device_name': { - category: 'sophos', - description: 'Model number of the device ', - name: 'sophos.xg.device_name', - type: 'keyword', - }, - 'sophos.xg.device_id': { - category: 'sophos', - description: 'Serial number of the device ', - name: 'sophos.xg.device_id', - type: 'keyword', - }, - 'sophos.xg.log_id': { - category: 'sophos', - description: 'Unique 12 characters code (0101011) ', - name: 'sophos.xg.log_id', - type: 'keyword', - }, - 'sophos.xg.log_type': { - category: 'sophos', - description: 'Type of event e.g. firewall event ', - name: 'sophos.xg.log_type', - type: 'keyword', - }, - 'sophos.xg.log_component': { - category: 'sophos', - description: 'Component responsible for logging e.g. Firewall rule ', - name: 'sophos.xg.log_component', - type: 'keyword', - }, - 'sophos.xg.log_subtype': { - category: 'sophos', - description: 'Sub type of event ', - name: 'sophos.xg.log_subtype', - type: 'keyword', - }, - 'sophos.xg.hb_health': { - category: 'sophos', - description: 'Heartbeat status ', - name: 'sophos.xg.hb_health', - type: 'keyword', - }, - 'sophos.xg.priority': { - category: 'sophos', - description: 'Severity level of traffic ', - name: 'sophos.xg.priority', - type: 'keyword', - }, - 'sophos.xg.status': { - category: 'sophos', - description: 'Ultimate status of traffic – Allowed or Denied ', - name: 'sophos.xg.status', - type: 'keyword', - }, - 'sophos.xg.duration': { - category: 'sophos', - description: 'Durability of traffic (seconds) ', - name: 'sophos.xg.duration', - type: 'long', - }, - 'sophos.xg.fw_rule_id': { - category: 'sophos', - description: 'Firewall Rule ID which is applied on the traffic ', - name: 'sophos.xg.fw_rule_id', - type: 'integer', - }, - 'sophos.xg.user_name': { - category: 'sophos', - description: 'user_name ', - name: 'sophos.xg.user_name', - type: 'keyword', - }, - 'sophos.xg.user_group': { - category: 'sophos', - description: 'Group name to which the user belongs ', - name: 'sophos.xg.user_group', - type: 'keyword', - }, - 'sophos.xg.iap': { - category: 'sophos', - description: 'Internet Access policy ID applied on the traffic ', - name: 'sophos.xg.iap', - type: 'keyword', - }, - 'sophos.xg.ips_policy_id': { - category: 'sophos', - description: 'IPS policy ID applied on the traffic ', - name: 'sophos.xg.ips_policy_id', - type: 'integer', - }, - 'sophos.xg.policy_type': { - category: 'sophos', - description: 'Policy type applied to the traffic ', - name: 'sophos.xg.policy_type', - type: 'keyword', - }, - 'sophos.xg.appfilter_policy_id': { - category: 'sophos', - description: 'Application Filter policy applied on the traffic ', - name: 'sophos.xg.appfilter_policy_id', - type: 'integer', - }, - 'sophos.xg.application_filter_policy': { - category: 'sophos', - description: 'Application Filter policy applied on the traffic ', - name: 'sophos.xg.application_filter_policy', - type: 'integer', - }, - 'sophos.xg.application': { - category: 'sophos', - description: 'Application name ', - name: 'sophos.xg.application', - type: 'keyword', - }, - 'sophos.xg.application_name': { - category: 'sophos', - description: 'Application name ', - name: 'sophos.xg.application_name', - type: 'keyword', - }, - 'sophos.xg.application_risk': { - category: 'sophos', - description: 'Risk level assigned to the application ', - name: 'sophos.xg.application_risk', - type: 'keyword', - }, - 'sophos.xg.application_technology': { - category: 'sophos', - description: 'Technology of the application ', - name: 'sophos.xg.application_technology', - type: 'keyword', - }, - 'sophos.xg.application_category': { - category: 'sophos', - description: 'Application is resolved by signature or synchronized application ', - name: 'sophos.xg.application_category', - type: 'keyword', - }, - 'sophos.xg.appresolvedby': { - category: 'sophos', - description: 'Technology of the application ', - name: 'sophos.xg.appresolvedby', - type: 'keyword', - }, - 'sophos.xg.app_is_cloud': { - category: 'sophos', - description: 'Application is Cloud ', - name: 'sophos.xg.app_is_cloud', - type: 'keyword', - }, - 'sophos.xg.in_interface': { - category: 'sophos', - description: 'Interface for incoming traffic, e.g., Port A ', - name: 'sophos.xg.in_interface', - type: 'keyword', - }, - 'sophos.xg.out_interface': { - category: 'sophos', - description: 'Interface for outgoing traffic, e.g., Port B ', - name: 'sophos.xg.out_interface', - type: 'keyword', - }, - 'sophos.xg.src_ip': { - category: 'sophos', - description: 'Original source IP address of traffic ', - name: 'sophos.xg.src_ip', - type: 'ip', - }, - 'sophos.xg.src_mac': { - category: 'sophos', - description: 'Original source MAC address of traffic ', - name: 'sophos.xg.src_mac', - type: 'keyword', - }, - 'sophos.xg.src_country_code': { - category: 'sophos', - description: 'Code of the country to which the source IP belongs ', - name: 'sophos.xg.src_country_code', - type: 'keyword', - }, - 'sophos.xg.dst_ip': { - category: 'sophos', - description: 'Original destination IP address of traffic ', - name: 'sophos.xg.dst_ip', - type: 'ip', - }, - 'sophos.xg.dst_country_code': { - category: 'sophos', - description: 'Code of the country to which the destination IP belongs ', - name: 'sophos.xg.dst_country_code', - type: 'keyword', - }, - 'sophos.xg.protocol': { - category: 'sophos', - description: 'Protocol number of traffic ', - name: 'sophos.xg.protocol', - type: 'keyword', - }, - 'sophos.xg.src_port': { - category: 'sophos', - description: 'Original source port of TCP and UDP traffic ', - name: 'sophos.xg.src_port', - type: 'integer', - }, - 'sophos.xg.dst_port': { - category: 'sophos', - description: 'Original destination port of TCP and UDP traffic ', - name: 'sophos.xg.dst_port', - type: 'integer', - }, - 'sophos.xg.icmp_type': { - category: 'sophos', - description: 'ICMP type of ICMP traffic ', - name: 'sophos.xg.icmp_type', - type: 'keyword', - }, - 'sophos.xg.icmp_code': { - category: 'sophos', - description: 'ICMP code of ICMP traffic ', - name: 'sophos.xg.icmp_code', - type: 'keyword', - }, - 'sophos.xg.sent_pkts': { - category: 'sophos', - description: 'Total number of packets sent ', - name: 'sophos.xg.sent_pkts', - type: 'long', - }, - 'sophos.xg.received_pkts': { - category: 'sophos', - description: 'Total number of packets received ', - name: 'sophos.xg.received_pkts', - type: 'long', - }, - 'sophos.xg.sent_bytes': { - category: 'sophos', - description: 'Total number of bytes sent ', - name: 'sophos.xg.sent_bytes', - type: 'long', - }, - 'sophos.xg.recv_bytes': { - category: 'sophos', - description: 'Total number of bytes received ', - name: 'sophos.xg.recv_bytes', - type: 'long', - }, - 'sophos.xg.trans_src_ip': { - category: 'sophos', - description: 'Translated source IP address for outgoing traffic ', - name: 'sophos.xg.trans_src_ip', - type: 'ip', - }, - 'sophos.xg.trans_src_port': { - category: 'sophos', - description: 'Translated source port for outgoing traffic ', - name: 'sophos.xg.trans_src_port', - type: 'integer', - }, - 'sophos.xg.trans_dst_ip': { - category: 'sophos', - description: 'Translated destination IP address for outgoing traffic ', - name: 'sophos.xg.trans_dst_ip', - type: 'ip', - }, - 'sophos.xg.trans_dst_port': { - category: 'sophos', - description: 'Translated destination port for outgoing traffic ', - name: 'sophos.xg.trans_dst_port', - type: 'integer', - }, - 'sophos.xg.srczonetype': { - category: 'sophos', - description: 'Type of source zone, e.g., LAN ', - name: 'sophos.xg.srczonetype', - type: 'keyword', - }, - 'sophos.xg.srczone': { - category: 'sophos', - description: 'Name of source zone ', - name: 'sophos.xg.srczone', - type: 'keyword', - }, - 'sophos.xg.dstzonetype': { - category: 'sophos', - description: 'Type of destination zone, e.g., WAN ', - name: 'sophos.xg.dstzonetype', - type: 'keyword', - }, - 'sophos.xg.dstzone': { - category: 'sophos', - description: 'Name of destination zone ', - name: 'sophos.xg.dstzone', - type: 'keyword', - }, - 'sophos.xg.dir_disp': { - category: 'sophos', - description: 'TPacket direction. Possible values:“org”, “reply”, “” ', - name: 'sophos.xg.dir_disp', - type: 'keyword', - }, - 'sophos.xg.connevent': { - category: 'sophos', - description: 'Event on which this log is generated ', - name: 'sophos.xg.connevent', - type: 'keyword', - }, - 'sophos.xg.conn_id': { - category: 'sophos', - description: 'Unique identifier of connection ', - name: 'sophos.xg.conn_id', - type: 'integer', - }, - 'sophos.xg.vconn_id': { - category: 'sophos', - description: 'Connection ID of the master connection ', - name: 'sophos.xg.vconn_id', - type: 'integer', - }, - 'sophos.xg.idp_policy_id': { - category: 'sophos', - description: 'IPS policy ID which is applied on the traffic ', - name: 'sophos.xg.idp_policy_id', - type: 'integer', - }, - 'sophos.xg.idp_policy_name': { - category: 'sophos', - description: 'IPS policy name i.e. IPS policy name which is applied on the traffic ', - name: 'sophos.xg.idp_policy_name', - type: 'keyword', - }, - 'sophos.xg.signature_id': { - category: 'sophos', - description: 'Signature ID ', - name: 'sophos.xg.signature_id', - type: 'keyword', - }, - 'sophos.xg.signature_msg': { - category: 'sophos', - description: 'Signature messsage ', - name: 'sophos.xg.signature_msg', - type: 'keyword', - }, - 'sophos.xg.classification': { - category: 'sophos', - description: 'Signature classification ', - name: 'sophos.xg.classification', - type: 'keyword', - }, - 'sophos.xg.rule_priority': { - category: 'sophos', - description: 'Priority of IPS policy ', - name: 'sophos.xg.rule_priority', - type: 'keyword', - }, - 'sophos.xg.platform': { - category: 'sophos', - description: 'Platform of the traffic. ', - name: 'sophos.xg.platform', - type: 'keyword', - }, - 'sophos.xg.category': { - category: 'sophos', - description: 'IPS signature category. ', - name: 'sophos.xg.category', - type: 'keyword', - }, - 'sophos.xg.target': { - category: 'sophos', - description: 'Platform of the traffic. ', - name: 'sophos.xg.target', - type: 'keyword', - }, - 'sophos.xg.eventid': { - category: 'sophos', - description: 'ATP Evenet ID ', - name: 'sophos.xg.eventid', - type: 'keyword', - }, - 'sophos.xg.ep_uuid': { - category: 'sophos', - description: 'Endpoint UUID ', - name: 'sophos.xg.ep_uuid', - type: 'keyword', - }, - 'sophos.xg.threatname': { - category: 'sophos', - description: 'ATP threatname ', - name: 'sophos.xg.threatname', - type: 'keyword', - }, - 'sophos.xg.sourceip': { - category: 'sophos', - description: 'Original source IP address of traffic ', - name: 'sophos.xg.sourceip', - type: 'ip', - }, - 'sophos.xg.destinationip': { - category: 'sophos', - description: 'Original destination IP address of traffic ', - name: 'sophos.xg.destinationip', - type: 'ip', - }, - 'sophos.xg.login_user': { - category: 'sophos', - description: 'ATP login user ', - name: 'sophos.xg.login_user', - type: 'keyword', - }, - 'sophos.xg.eventtype': { - category: 'sophos', - description: 'ATP event type ', - name: 'sophos.xg.eventtype', - type: 'keyword', - }, - 'sophos.xg.execution_path': { - category: 'sophos', - description: 'ATP execution path ', - name: 'sophos.xg.execution_path', - type: 'keyword', - }, - 'sophos.xg.av_policy_name': { - category: 'sophos', - description: 'Malware scanning policy name which is applied on the traffic ', - name: 'sophos.xg.av_policy_name', - type: 'keyword', - }, - 'sophos.xg.from_email_address': { - category: 'sophos', - description: 'Sender email address ', - name: 'sophos.xg.from_email_address', - type: 'keyword', - }, - 'sophos.xg.to_email_address': { - category: 'sophos', - description: 'Receipeint email address ', - name: 'sophos.xg.to_email_address', - type: 'keyword', - }, - 'sophos.xg.subject': { - category: 'sophos', - description: 'Email subject ', - name: 'sophos.xg.subject', - type: 'keyword', - }, - 'sophos.xg.mailsize': { - category: 'sophos', - description: 'mailsize ', - name: 'sophos.xg.mailsize', - type: 'integer', - }, - 'sophos.xg.virus': { - category: 'sophos', - description: 'virus name ', - name: 'sophos.xg.virus', - type: 'keyword', - }, - 'sophos.xg.ftp_url': { - category: 'sophos', - description: 'FTP URL from which virus was downloaded ', - name: 'sophos.xg.ftp_url', - type: 'keyword', - }, - 'sophos.xg.ftp_direction': { - category: 'sophos', - description: 'Direction of FTP transfer: Upload or Download ', - name: 'sophos.xg.ftp_direction', - type: 'keyword', - }, - 'sophos.xg.filesize': { - category: 'sophos', - description: 'Size of the file that contained virus ', - name: 'sophos.xg.filesize', - type: 'integer', - }, - 'sophos.xg.filepath': { - category: 'sophos', - description: 'Path of the file containing virus ', - name: 'sophos.xg.filepath', - type: 'keyword', - }, - 'sophos.xg.filename': { - category: 'sophos', - description: 'File name associated with the event ', - name: 'sophos.xg.filename', - type: 'keyword', - }, - 'sophos.xg.ftpcommand': { - category: 'sophos', - description: 'FTP command used when virus was found ', - name: 'sophos.xg.ftpcommand', - type: 'keyword', - }, - 'sophos.xg.url': { - category: 'sophos', - description: 'URL from which virus was downloaded ', - name: 'sophos.xg.url', - type: 'keyword', - }, - 'sophos.xg.domainname': { - category: 'sophos', - description: 'Domain from which virus was downloaded ', - name: 'sophos.xg.domainname', - type: 'keyword', - }, - 'sophos.xg.quarantine': { - category: 'sophos', - description: 'Path and filename of the file quarantined ', - name: 'sophos.xg.quarantine', - type: 'keyword', - }, - 'sophos.xg.src_domainname': { - category: 'sophos', - description: 'Sender domain name ', - name: 'sophos.xg.src_domainname', - type: 'keyword', - }, - 'sophos.xg.dst_domainname': { - category: 'sophos', - description: 'Receiver domain name ', - name: 'sophos.xg.dst_domainname', - type: 'keyword', - }, - 'sophos.xg.reason': { - category: 'sophos', - description: 'Reason why the record was detected as spam/malicious ', - name: 'sophos.xg.reason', - type: 'keyword', - }, - 'sophos.xg.referer': { - category: 'sophos', - description: 'Referer ', - name: 'sophos.xg.referer', - type: 'keyword', - }, - 'sophos.xg.spamaction': { - category: 'sophos', - description: 'Spam Action ', - name: 'sophos.xg.spamaction', - type: 'keyword', - }, - 'sophos.xg.mailid': { - category: 'sophos', - description: 'mailid ', - name: 'sophos.xg.mailid', - type: 'keyword', - }, - 'sophos.xg.quarantine_reason': { - category: 'sophos', - description: 'Quarantine reason ', - name: 'sophos.xg.quarantine_reason', - type: 'keyword', - }, - 'sophos.xg.status_code': { - category: 'sophos', - description: 'Status code ', - name: 'sophos.xg.status_code', - type: 'keyword', - }, - 'sophos.xg.override_token': { - category: 'sophos', - description: 'Override token ', - name: 'sophos.xg.override_token', - type: 'keyword', - }, - 'sophos.xg.con_id': { - category: 'sophos', - description: 'Unique identifier of connection ', - name: 'sophos.xg.con_id', - type: 'integer', - }, - 'sophos.xg.override_authorizer': { - category: 'sophos', - description: 'Override authorizer ', - name: 'sophos.xg.override_authorizer', - type: 'keyword', - }, - 'sophos.xg.transactionid': { - category: 'sophos', - description: 'Transaction ID of the AV scan. ', - name: 'sophos.xg.transactionid', - type: 'keyword', - }, - 'sophos.xg.upload_file_type': { - category: 'sophos', - description: 'Upload file type ', - name: 'sophos.xg.upload_file_type', - type: 'keyword', - }, - 'sophos.xg.upload_file_name': { - category: 'sophos', - description: 'Upload file name ', - name: 'sophos.xg.upload_file_name', - type: 'keyword', - }, - 'sophos.xg.httpresponsecode': { - category: 'sophos', - description: 'code of HTTP response ', - name: 'sophos.xg.httpresponsecode', - type: 'long', - }, - 'sophos.xg.user_gp': { - category: 'sophos', - description: 'Group name to which the user belongs. ', - name: 'sophos.xg.user_gp', - type: 'keyword', - }, - 'sophos.xg.category_type': { - category: 'sophos', - description: 'Type of category under which website falls ', - name: 'sophos.xg.category_type', - type: 'keyword', - }, - 'sophos.xg.download_file_type': { - category: 'sophos', - description: 'Download file type ', - name: 'sophos.xg.download_file_type', - type: 'keyword', - }, - 'sophos.xg.exceptions': { - category: 'sophos', - description: 'List of the checks excluded by web exceptions. ', - name: 'sophos.xg.exceptions', - type: 'keyword', - }, - 'sophos.xg.contenttype': { - category: 'sophos', - description: 'Type of the content ', - name: 'sophos.xg.contenttype', - type: 'keyword', - }, - 'sophos.xg.override_name': { - category: 'sophos', - description: 'Override name ', - name: 'sophos.xg.override_name', - type: 'keyword', - }, - 'sophos.xg.activityname': { - category: 'sophos', - description: 'Web policy activity that matched and caused the policy result. ', - name: 'sophos.xg.activityname', - type: 'keyword', - }, - 'sophos.xg.download_file_name': { - category: 'sophos', - description: 'Download file name ', - name: 'sophos.xg.download_file_name', - type: 'keyword', - }, - 'sophos.xg.sha1sum': { - category: 'sophos', - description: 'SHA1 checksum of the item being analyzed ', - name: 'sophos.xg.sha1sum', - type: 'keyword', - }, - 'sophos.xg.message_id': { - category: 'sophos', - description: 'Message ID ', - name: 'sophos.xg.message_id', - type: 'keyword', - }, - 'sophos.xg.connid': { - category: 'sophos', - description: 'Connection ID ', - name: 'sophos.xg.connid', - type: 'keyword', - }, - 'sophos.xg.message': { - category: 'sophos', - description: 'Message ', - name: 'sophos.xg.message', - type: 'keyword', - }, - 'sophos.xg.email_subject': { - category: 'sophos', - description: 'Email Subject ', - name: 'sophos.xg.email_subject', - type: 'keyword', - }, - 'sophos.xg.file_path': { - category: 'sophos', - description: 'File path ', - name: 'sophos.xg.file_path', - type: 'keyword', - }, - 'sophos.xg.dstdomain': { - category: 'sophos', - description: 'Destination Domain ', - name: 'sophos.xg.dstdomain', - type: 'keyword', - }, - 'sophos.xg.file_size': { - category: 'sophos', - description: 'File Size ', - name: 'sophos.xg.file_size', - type: 'integer', - }, - 'sophos.xg.transaction_id': { - category: 'sophos', - description: 'Transaction ID ', - name: 'sophos.xg.transaction_id', - type: 'keyword', - }, - 'sophos.xg.website': { - category: 'sophos', - description: 'Website ', - name: 'sophos.xg.website', - type: 'keyword', - }, - 'sophos.xg.file_name': { - category: 'sophos', - description: 'Filename ', - name: 'sophos.xg.file_name', - type: 'keyword', - }, - 'sophos.xg.context_prefix': { - category: 'sophos', - description: 'Content Prefix ', - name: 'sophos.xg.context_prefix', - type: 'keyword', - }, - 'sophos.xg.site_category': { - category: 'sophos', - description: 'Site Category ', - name: 'sophos.xg.site_category', - type: 'keyword', - }, - 'sophos.xg.context_suffix': { - category: 'sophos', - description: 'Context Suffix ', - name: 'sophos.xg.context_suffix', - type: 'keyword', - }, - 'sophos.xg.dictionary_name': { - category: 'sophos', - description: 'Dictionary Name ', - name: 'sophos.xg.dictionary_name', - type: 'keyword', - }, - 'sophos.xg.action': { - category: 'sophos', - description: 'Event Action ', - name: 'sophos.xg.action', - type: 'keyword', - }, - 'sophos.xg.user': { - category: 'sophos', - description: 'User ', - name: 'sophos.xg.user', - type: 'keyword', - }, - 'sophos.xg.context_match': { - category: 'sophos', - description: 'Context Match ', - name: 'sophos.xg.context_match', - type: 'keyword', - }, - 'sophos.xg.direction': { - category: 'sophos', - description: 'Direction ', - name: 'sophos.xg.direction', - type: 'keyword', - }, - 'sophos.xg.auth_client': { - category: 'sophos', - description: 'Auth Client ', - name: 'sophos.xg.auth_client', - type: 'keyword', - }, - 'sophos.xg.auth_mechanism': { - category: 'sophos', - description: 'Auth mechanism ', - name: 'sophos.xg.auth_mechanism', - type: 'keyword', - }, - 'sophos.xg.connectionname': { - category: 'sophos', - description: 'Connectionname ', - name: 'sophos.xg.connectionname', - type: 'keyword', - }, - 'sophos.xg.remotenetwork': { - category: 'sophos', - description: 'remotenetwork ', - name: 'sophos.xg.remotenetwork', - type: 'keyword', - }, - 'sophos.xg.localgateway': { - category: 'sophos', - description: 'Localgateway ', - name: 'sophos.xg.localgateway', - type: 'keyword', - }, - 'sophos.xg.localnetwork': { - category: 'sophos', - description: 'Localnetwork ', - name: 'sophos.xg.localnetwork', - type: 'keyword', - }, - 'sophos.xg.connectiontype': { - category: 'sophos', - description: 'Connectiontype ', - name: 'sophos.xg.connectiontype', - type: 'keyword', - }, - 'sophos.xg.oldversion': { - category: 'sophos', - description: 'Oldversion ', - name: 'sophos.xg.oldversion', - type: 'keyword', - }, - 'sophos.xg.newversion': { - category: 'sophos', - description: 'Newversion ', - name: 'sophos.xg.newversion', - type: 'keyword', - }, - 'sophos.xg.ipaddress': { - category: 'sophos', - description: 'Ipaddress ', - name: 'sophos.xg.ipaddress', - type: 'keyword', - }, - 'sophos.xg.client_physical_address': { - category: 'sophos', - description: 'Client physical address ', - name: 'sophos.xg.client_physical_address', - type: 'keyword', - }, - 'sophos.xg.client_host_name': { - category: 'sophos', - description: 'Client host name ', - name: 'sophos.xg.client_host_name', - type: 'keyword', - }, - 'sophos.xg.raw_data': { - category: 'sophos', - description: 'Raw data ', - name: 'sophos.xg.raw_data', - type: 'keyword', - }, - 'sophos.xg.Mode': { - category: 'sophos', - description: 'Mode ', - name: 'sophos.xg.Mode', - type: 'keyword', - }, - 'sophos.xg.sessionid': { - category: 'sophos', - description: 'Sessionid ', - name: 'sophos.xg.sessionid', - type: 'keyword', - }, - 'sophos.xg.starttime': { - category: 'sophos', - description: 'Starttime ', - name: 'sophos.xg.starttime', - type: 'date', - }, - 'sophos.xg.remote_ip': { - category: 'sophos', - description: 'Remote IP ', - name: 'sophos.xg.remote_ip', - type: 'ip', - }, - 'sophos.xg.timestamp': { - category: 'sophos', - description: 'timestamp ', - name: 'sophos.xg.timestamp', - type: 'date', - }, - 'sophos.xg.SysLog_SERVER_NAME': { - category: 'sophos', - description: 'SysLog SERVER NAME ', - name: 'sophos.xg.SysLog_SERVER_NAME', - type: 'keyword', - }, - 'sophos.xg.backup_mode': { - category: 'sophos', - description: 'Backup mode ', - name: 'sophos.xg.backup_mode', - type: 'keyword', - }, - 'sophos.xg.source': { - category: 'sophos', - description: 'Source ', - name: 'sophos.xg.source', - type: 'keyword', - }, - 'sophos.xg.server': { - category: 'sophos', - description: 'Server ', - name: 'sophos.xg.server', - type: 'keyword', - }, - 'sophos.xg.host': { - category: 'sophos', - description: 'Host ', - name: 'sophos.xg.host', - type: 'keyword', - }, - 'sophos.xg.responsetime': { - category: 'sophos', - description: 'Responsetime ', - name: 'sophos.xg.responsetime', - type: 'long', - }, - 'sophos.xg.cookie': { - category: 'sophos', - description: 'cookie ', - name: 'sophos.xg.cookie', - type: 'keyword', - }, - 'sophos.xg.querystring': { - category: 'sophos', - description: 'querystring ', - name: 'sophos.xg.querystring', - type: 'keyword', - }, - 'sophos.xg.extra': { - category: 'sophos', - description: 'extra ', - name: 'sophos.xg.extra', - type: 'keyword', - }, - 'sophos.xg.PHPSESSID': { - category: 'sophos', - description: 'PHPSESSID ', - name: 'sophos.xg.PHPSESSID', - type: 'keyword', - }, - 'sophos.xg.start_time': { - category: 'sophos', - description: 'Start time ', - name: 'sophos.xg.start_time', - type: 'date', - }, - 'sophos.xg.eventtime': { - category: 'sophos', - description: 'Event time ', - name: 'sophos.xg.eventtime', - type: 'date', - }, - 'sophos.xg.red_id': { - category: 'sophos', - description: 'RED ID ', - name: 'sophos.xg.red_id', - type: 'keyword', - }, - 'sophos.xg.branch_name': { - category: 'sophos', - description: 'Branch Name ', - name: 'sophos.xg.branch_name', - type: 'keyword', - }, - 'sophos.xg.updatedip': { - category: 'sophos', - description: 'updatedip ', - name: 'sophos.xg.updatedip', - type: 'ip', - }, - 'sophos.xg.idle_cpu': { - category: 'sophos', - description: 'idle ## ', - name: 'sophos.xg.idle_cpu', - type: 'float', - }, - 'sophos.xg.system_cpu': { - category: 'sophos', - description: 'system ', - name: 'sophos.xg.system_cpu', - type: 'float', - }, - 'sophos.xg.user_cpu': { - category: 'sophos', - description: 'system ', - name: 'sophos.xg.user_cpu', - type: 'float', - }, - 'sophos.xg.used': { - category: 'sophos', - description: 'used ', - name: 'sophos.xg.used', - type: 'integer', - }, - 'sophos.xg.unit': { - category: 'sophos', - description: 'unit ', - name: 'sophos.xg.unit', - type: 'keyword', - }, - 'sophos.xg.total_memory': { - category: 'sophos', - description: 'Total Memory ', - name: 'sophos.xg.total_memory', - type: 'integer', - }, - 'sophos.xg.free': { - category: 'sophos', - description: 'free ', - name: 'sophos.xg.free', - type: 'integer', - }, - 'sophos.xg.transmittederrors': { - category: 'sophos', - description: 'transmitted errors ', - name: 'sophos.xg.transmittederrors', - type: 'keyword', - }, - 'sophos.xg.receivederrors': { - category: 'sophos', - description: 'received errors ', - name: 'sophos.xg.receivederrors', - type: 'keyword', - }, - 'sophos.xg.receivedkbits': { - category: 'sophos', - description: 'received kbits ', - name: 'sophos.xg.receivedkbits', - type: 'long', - }, - 'sophos.xg.transmittedkbits': { - category: 'sophos', - description: 'transmitted kbits ', - name: 'sophos.xg.transmittedkbits', - type: 'long', - }, - 'sophos.xg.transmitteddrops': { - category: 'sophos', - description: 'transmitted drops ', - name: 'sophos.xg.transmitteddrops', - type: 'long', - }, - 'sophos.xg.receiveddrops': { - category: 'sophos', - description: 'received drops ', - name: 'sophos.xg.receiveddrops', - type: 'long', - }, - 'sophos.xg.collisions': { - category: 'sophos', - description: 'collisions ', - name: 'sophos.xg.collisions', - type: 'long', - }, - 'sophos.xg.interface': { - category: 'sophos', - description: 'interface ', - name: 'sophos.xg.interface', - type: 'keyword', - }, - 'sophos.xg.Configuration': { - category: 'sophos', - description: 'Configuration ', - name: 'sophos.xg.Configuration', - type: 'float', - }, - 'sophos.xg.Reports': { - category: 'sophos', - description: 'Reports ', - name: 'sophos.xg.Reports', - type: 'float', - }, - 'sophos.xg.Signature': { - category: 'sophos', - description: 'Signature ', - name: 'sophos.xg.Signature', - type: 'float', - }, - 'sophos.xg.Temp': { - category: 'sophos', - description: 'Temp ', - name: 'sophos.xg.Temp', - type: 'float', - }, - 'sophos.xg.users': { - category: 'sophos', - description: 'users ', - name: 'sophos.xg.users', - type: 'keyword', - }, - 'sophos.xg.ssid': { - category: 'sophos', - description: 'ssid ', - name: 'sophos.xg.ssid', - type: 'keyword', - }, - 'sophos.xg.ap': { - category: 'sophos', - description: 'ap ', - name: 'sophos.xg.ap', - type: 'keyword', - }, - 'sophos.xg.clients_conn_ssid': { - category: 'sophos', - description: 'clients connection ssid ', - name: 'sophos.xg.clients_conn_ssid', - type: 'keyword', - }, - 'sophos.xg.sqli': { - category: 'sophos', - description: 'The related SQLI caught by the WAF ', - name: 'sophos.xg.sqli', - type: 'keyword', - }, - 'sophos.xg.xss': { - category: 'sophos', - description: 'The related XSS caught by the WAF ', - name: 'sophos.xg.xss', - type: 'keyword', - }, - 'sophos.xg.ether_type': { - category: 'sophos', - description: 'The ethernet frame type ', - name: 'sophos.xg.ether_type', - type: 'keyword', - }, - 'suricata.eve.event_type': { - category: 'suricata', - name: 'suricata.eve.event_type', - type: 'keyword', - }, - 'suricata.eve.app_proto_orig': { - category: 'suricata', - name: 'suricata.eve.app_proto_orig', - type: 'keyword', - }, - 'suricata.eve.tcp.tcp_flags': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags', - type: 'keyword', - }, - 'suricata.eve.tcp.psh': { - category: 'suricata', - name: 'suricata.eve.tcp.psh', - type: 'boolean', - }, - 'suricata.eve.tcp.tcp_flags_tc': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags_tc', - type: 'keyword', - }, - 'suricata.eve.tcp.ack': { - category: 'suricata', - name: 'suricata.eve.tcp.ack', - type: 'boolean', - }, - 'suricata.eve.tcp.syn': { - category: 'suricata', - name: 'suricata.eve.tcp.syn', - type: 'boolean', - }, - 'suricata.eve.tcp.state': { - category: 'suricata', - name: 'suricata.eve.tcp.state', - type: 'keyword', - }, - 'suricata.eve.tcp.tcp_flags_ts': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags_ts', - type: 'keyword', - }, - 'suricata.eve.tcp.rst': { - category: 'suricata', - name: 'suricata.eve.tcp.rst', - type: 'boolean', - }, - 'suricata.eve.tcp.fin': { - category: 'suricata', - name: 'suricata.eve.tcp.fin', - type: 'boolean', - }, - 'suricata.eve.fileinfo.sha1': { - category: 'suricata', - name: 'suricata.eve.fileinfo.sha1', - type: 'keyword', - }, - 'suricata.eve.fileinfo.tx_id': { - category: 'suricata', - name: 'suricata.eve.fileinfo.tx_id', - type: 'long', - }, - 'suricata.eve.fileinfo.state': { - category: 'suricata', - name: 'suricata.eve.fileinfo.state', - type: 'keyword', - }, - 'suricata.eve.fileinfo.stored': { - category: 'suricata', - name: 'suricata.eve.fileinfo.stored', - type: 'boolean', - }, - 'suricata.eve.fileinfo.gaps': { - category: 'suricata', - name: 'suricata.eve.fileinfo.gaps', - type: 'boolean', - }, - 'suricata.eve.fileinfo.sha256': { - category: 'suricata', - name: 'suricata.eve.fileinfo.sha256', - type: 'keyword', - }, - 'suricata.eve.fileinfo.md5': { - category: 'suricata', - name: 'suricata.eve.fileinfo.md5', - type: 'keyword', - }, - 'suricata.eve.icmp_type': { - category: 'suricata', - name: 'suricata.eve.icmp_type', - type: 'long', - }, - 'suricata.eve.pcap_cnt': { - category: 'suricata', - name: 'suricata.eve.pcap_cnt', - type: 'long', - }, - 'suricata.eve.dns.type': { - category: 'suricata', - name: 'suricata.eve.dns.type', - type: 'keyword', - }, - 'suricata.eve.dns.rrtype': { - category: 'suricata', - name: 'suricata.eve.dns.rrtype', - type: 'keyword', - }, - 'suricata.eve.dns.rrname': { - category: 'suricata', - name: 'suricata.eve.dns.rrname', - type: 'keyword', - }, - 'suricata.eve.dns.rdata': { - category: 'suricata', - name: 'suricata.eve.dns.rdata', - type: 'keyword', - }, - 'suricata.eve.dns.tx_id': { - category: 'suricata', - name: 'suricata.eve.dns.tx_id', - type: 'long', - }, - 'suricata.eve.dns.ttl': { - category: 'suricata', - name: 'suricata.eve.dns.ttl', - type: 'long', - }, - 'suricata.eve.dns.rcode': { - category: 'suricata', - name: 'suricata.eve.dns.rcode', - type: 'keyword', - }, - 'suricata.eve.dns.id': { - category: 'suricata', - name: 'suricata.eve.dns.id', - type: 'long', - }, - 'suricata.eve.flow_id': { - category: 'suricata', - name: 'suricata.eve.flow_id', - type: 'keyword', - }, - 'suricata.eve.email.status': { - category: 'suricata', - name: 'suricata.eve.email.status', - type: 'keyword', - }, - 'suricata.eve.icmp_code': { - category: 'suricata', - name: 'suricata.eve.icmp_code', - type: 'long', - }, - 'suricata.eve.http.redirect': { - category: 'suricata', - name: 'suricata.eve.http.redirect', - type: 'keyword', - }, - 'suricata.eve.http.protocol': { - category: 'suricata', - name: 'suricata.eve.http.protocol', - type: 'keyword', - }, - 'suricata.eve.http.http_content_type': { - category: 'suricata', - name: 'suricata.eve.http.http_content_type', - type: 'keyword', - }, - 'suricata.eve.in_iface': { - category: 'suricata', - name: 'suricata.eve.in_iface', - type: 'keyword', - }, - 'suricata.eve.alert.metadata': { - category: 'suricata', - description: 'Metadata about the alert.', - name: 'suricata.eve.alert.metadata', - type: 'flattened', - }, - 'suricata.eve.alert.category': { - category: 'suricata', - name: 'suricata.eve.alert.category', - type: 'keyword', - }, - 'suricata.eve.alert.rev': { - category: 'suricata', - name: 'suricata.eve.alert.rev', - type: 'long', - }, - 'suricata.eve.alert.gid': { - category: 'suricata', - name: 'suricata.eve.alert.gid', - type: 'long', - }, - 'suricata.eve.alert.signature': { - category: 'suricata', - name: 'suricata.eve.alert.signature', - type: 'keyword', - }, - 'suricata.eve.alert.signature_id': { - category: 'suricata', - name: 'suricata.eve.alert.signature_id', - type: 'long', - }, - 'suricata.eve.alert.protocols': { - category: 'suricata', - name: 'suricata.eve.alert.protocols', - type: 'keyword', - }, - 'suricata.eve.alert.attack_target': { - category: 'suricata', - name: 'suricata.eve.alert.attack_target', - type: 'keyword', - }, - 'suricata.eve.alert.capec_id': { - category: 'suricata', - name: 'suricata.eve.alert.capec_id', - type: 'keyword', - }, - 'suricata.eve.alert.cwe_id': { - category: 'suricata', - name: 'suricata.eve.alert.cwe_id', - type: 'keyword', - }, - 'suricata.eve.alert.malware': { - category: 'suricata', - name: 'suricata.eve.alert.malware', - type: 'keyword', - }, - 'suricata.eve.alert.cve': { - category: 'suricata', - name: 'suricata.eve.alert.cve', - type: 'keyword', - }, - 'suricata.eve.alert.cvss_v2_base': { - category: 'suricata', - name: 'suricata.eve.alert.cvss_v2_base', - type: 'keyword', - }, - 'suricata.eve.alert.cvss_v2_temporal': { - category: 'suricata', - name: 'suricata.eve.alert.cvss_v2_temporal', - type: 'keyword', - }, - 'suricata.eve.alert.cvss_v3_base': { - category: 'suricata', - name: 'suricata.eve.alert.cvss_v3_base', - type: 'keyword', - }, - 'suricata.eve.alert.cvss_v3_temporal': { - category: 'suricata', - name: 'suricata.eve.alert.cvss_v3_temporal', - type: 'keyword', - }, - 'suricata.eve.alert.priority': { - category: 'suricata', - name: 'suricata.eve.alert.priority', - type: 'keyword', - }, - 'suricata.eve.alert.hostile': { - category: 'suricata', - name: 'suricata.eve.alert.hostile', - type: 'keyword', - }, - 'suricata.eve.alert.infected': { - category: 'suricata', - name: 'suricata.eve.alert.infected', - type: 'keyword', - }, - 'suricata.eve.alert.created_at': { - category: 'suricata', - name: 'suricata.eve.alert.created_at', - type: 'date', - }, - 'suricata.eve.alert.updated_at': { - category: 'suricata', - name: 'suricata.eve.alert.updated_at', - type: 'date', - }, - 'suricata.eve.alert.classtype': { - category: 'suricata', - name: 'suricata.eve.alert.classtype', - type: 'keyword', - }, - 'suricata.eve.alert.rule_source': { - category: 'suricata', - name: 'suricata.eve.alert.rule_source', - type: 'keyword', - }, - 'suricata.eve.alert.sid': { - category: 'suricata', - name: 'suricata.eve.alert.sid', - type: 'keyword', - }, - 'suricata.eve.alert.affected_product': { - category: 'suricata', - name: 'suricata.eve.alert.affected_product', - type: 'keyword', - }, - 'suricata.eve.alert.deployment': { - category: 'suricata', - name: 'suricata.eve.alert.deployment', - type: 'keyword', - }, - 'suricata.eve.alert.former_category': { - category: 'suricata', - name: 'suricata.eve.alert.former_category', - type: 'keyword', - }, - 'suricata.eve.alert.mitre_tool_id': { - category: 'suricata', - name: 'suricata.eve.alert.mitre_tool_id', - type: 'keyword', - }, - 'suricata.eve.alert.performance_impact': { - category: 'suricata', - name: 'suricata.eve.alert.performance_impact', - type: 'keyword', - }, - 'suricata.eve.alert.signature_severity': { - category: 'suricata', - name: 'suricata.eve.alert.signature_severity', - type: 'keyword', - }, - 'suricata.eve.alert.tag': { - category: 'suricata', - name: 'suricata.eve.alert.tag', - type: 'keyword', - }, - 'suricata.eve.ssh.client.proto_version': { - category: 'suricata', - name: 'suricata.eve.ssh.client.proto_version', - type: 'keyword', - }, - 'suricata.eve.ssh.client.software_version': { - category: 'suricata', - name: 'suricata.eve.ssh.client.software_version', - type: 'keyword', - }, - 'suricata.eve.ssh.server.proto_version': { - category: 'suricata', - name: 'suricata.eve.ssh.server.proto_version', - type: 'keyword', - }, - 'suricata.eve.ssh.server.software_version': { - category: 'suricata', - name: 'suricata.eve.ssh.server.software_version', - type: 'keyword', - }, - 'suricata.eve.stats.capture.kernel_packets': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_packets', - type: 'long', - }, - 'suricata.eve.stats.capture.kernel_drops': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_drops', - type: 'long', - }, - 'suricata.eve.stats.capture.kernel_ifdrops': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_ifdrops', - type: 'long', - }, - 'suricata.eve.stats.uptime': { - category: 'suricata', - name: 'suricata.eve.stats.uptime', - type: 'long', - }, - 'suricata.eve.stats.detect.alert': { - category: 'suricata', - name: 'suricata.eve.stats.detect.alert', - type: 'long', - }, - 'suricata.eve.stats.http.memcap': { - category: 'suricata', - name: 'suricata.eve.stats.http.memcap', - type: 'long', - }, - 'suricata.eve.stats.http.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.http.memuse', - type: 'long', - }, - 'suricata.eve.stats.file_store.open_files': { - category: 'suricata', - name: 'suricata.eve.stats.file_store.open_files', - type: 'long', - }, - 'suricata.eve.stats.defrag.max_frag_hits': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.max_frag_hits', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv4.timeouts': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.timeouts', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv4.fragments': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.fragments', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv4.reassembled': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.reassembled', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv6.timeouts': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.timeouts', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv6.fragments': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.fragments', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv6.reassembled': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.reassembled', - type: 'long', - }, - 'suricata.eve.stats.flow.tcp_reuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow.tcp_reuse', - type: 'long', - }, - 'suricata.eve.stats.flow.udp': { - category: 'suricata', - name: 'suricata.eve.stats.flow.udp', - type: 'long', - }, - 'suricata.eve.stats.flow.memcap': { - category: 'suricata', - name: 'suricata.eve.stats.flow.memcap', - type: 'long', - }, - 'suricata.eve.stats.flow.emerg_mode_entered': { - category: 'suricata', - name: 'suricata.eve.stats.flow.emerg_mode_entered', - type: 'long', - }, - 'suricata.eve.stats.flow.emerg_mode_over': { - category: 'suricata', - name: 'suricata.eve.stats.flow.emerg_mode_over', - type: 'long', - }, - 'suricata.eve.stats.flow.tcp': { - category: 'suricata', - name: 'suricata.eve.stats.flow.tcp', - type: 'long', - }, - 'suricata.eve.stats.flow.icmpv6': { - category: 'suricata', - name: 'suricata.eve.stats.flow.icmpv6', - type: 'long', - }, - 'suricata.eve.stats.flow.icmpv4': { - category: 'suricata', - name: 'suricata.eve.stats.flow.icmpv4', - type: 'long', - }, - 'suricata.eve.stats.flow.spare': { - category: 'suricata', - name: 'suricata.eve.stats.flow.spare', - type: 'long', - }, - 'suricata.eve.stats.flow.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow.memuse', - type: 'long', - }, - 'suricata.eve.stats.tcp.pseudo_failed': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.pseudo_failed', - type: 'long', - }, - 'suricata.eve.stats.tcp.ssn_memcap_drop': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.ssn_memcap_drop', - type: 'long', - }, - 'suricata.eve.stats.tcp.insert_data_overlap_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_data_overlap_fail', - type: 'long', - }, - 'suricata.eve.stats.tcp.sessions': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.sessions', - type: 'long', - }, - 'suricata.eve.stats.tcp.pseudo': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.pseudo', - type: 'long', - }, - 'suricata.eve.stats.tcp.synack': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.synack', - type: 'long', - }, - 'suricata.eve.stats.tcp.insert_data_normal_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_data_normal_fail', - type: 'long', - }, - 'suricata.eve.stats.tcp.syn': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.syn', - type: 'long', - }, - 'suricata.eve.stats.tcp.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.memuse', - type: 'long', - }, - 'suricata.eve.stats.tcp.invalid_checksum': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.invalid_checksum', - type: 'long', - }, - 'suricata.eve.stats.tcp.segment_memcap_drop': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.segment_memcap_drop', - type: 'long', - }, - 'suricata.eve.stats.tcp.overlap': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.overlap', - type: 'long', - }, - 'suricata.eve.stats.tcp.insert_list_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_list_fail', - type: 'long', - }, - 'suricata.eve.stats.tcp.rst': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.rst', - type: 'long', - }, - 'suricata.eve.stats.tcp.stream_depth_reached': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.stream_depth_reached', - type: 'long', - }, - 'suricata.eve.stats.tcp.reassembly_memuse': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.reassembly_memuse', - type: 'long', - }, - 'suricata.eve.stats.tcp.reassembly_gap': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.reassembly_gap', - type: 'long', - }, - 'suricata.eve.stats.tcp.overlap_diff_data': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.overlap_diff_data', - type: 'long', - }, - 'suricata.eve.stats.tcp.no_flow': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.no_flow', - type: 'long', - }, - 'suricata.eve.stats.decoder.avg_pkt_size': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.avg_pkt_size', - type: 'long', - }, - 'suricata.eve.stats.decoder.bytes': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.bytes', - type: 'long', - }, - 'suricata.eve.stats.decoder.tcp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.tcp', - type: 'long', - }, - 'suricata.eve.stats.decoder.raw': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.raw', - type: 'long', - }, - 'suricata.eve.stats.decoder.ppp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ppp', - type: 'long', - }, - 'suricata.eve.stats.decoder.vlan_qinq': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.vlan_qinq', - type: 'long', - }, - 'suricata.eve.stats.decoder.null': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.null', - type: 'long', - }, - 'suricata.eve.stats.decoder.ltnull.unsupported_type': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ltnull.unsupported_type', - type: 'long', - }, - 'suricata.eve.stats.decoder.ltnull.pkt_too_small': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ltnull.pkt_too_small', - type: 'long', - }, - 'suricata.eve.stats.decoder.invalid': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.invalid', - type: 'long', - }, - 'suricata.eve.stats.decoder.gre': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.gre', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipv4': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv4', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv6', - type: 'long', - }, - 'suricata.eve.stats.decoder.pkts': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.pkts', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipv6_in_ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv6_in_ipv6', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipraw.invalid_ip_version': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipraw.invalid_ip_version', - type: 'long', - }, - 'suricata.eve.stats.decoder.pppoe': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.pppoe', - type: 'long', - }, - 'suricata.eve.stats.decoder.udp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.udp', - type: 'long', - }, - 'suricata.eve.stats.decoder.dce.pkt_too_small': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.dce.pkt_too_small', - type: 'long', - }, - 'suricata.eve.stats.decoder.vlan': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.vlan', - type: 'long', - }, - 'suricata.eve.stats.decoder.sctp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.sctp', - type: 'long', - }, - 'suricata.eve.stats.decoder.max_pkt_size': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.max_pkt_size', - type: 'long', - }, - 'suricata.eve.stats.decoder.teredo': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.teredo', - type: 'long', - }, - 'suricata.eve.stats.decoder.mpls': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.mpls', - type: 'long', - }, - 'suricata.eve.stats.decoder.sll': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.sll', - type: 'long', - }, - 'suricata.eve.stats.decoder.icmpv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.icmpv6', - type: 'long', - }, - 'suricata.eve.stats.decoder.icmpv4': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.icmpv4', - type: 'long', - }, - 'suricata.eve.stats.decoder.erspan': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.erspan', - type: 'long', - }, - 'suricata.eve.stats.decoder.ethernet': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ethernet', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipv4_in_ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv4_in_ipv6', - type: 'long', - }, - 'suricata.eve.stats.decoder.ieee8021ah': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ieee8021ah', - type: 'long', - }, - 'suricata.eve.stats.dns.memcap_global': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memcap_global', - type: 'long', - }, - 'suricata.eve.stats.dns.memcap_state': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memcap_state', - type: 'long', - }, - 'suricata.eve.stats.dns.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memuse', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_busy': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_busy', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_timeout': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_timeout', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_notimeout': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_notimeout', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_skipped': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_skipped', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.closed_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.closed_pruned', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.new_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.new_pruned', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_removed': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_removed', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.bypassed_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.bypassed_pruned', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.est_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.est_pruned', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_timeout_inuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_timeout_inuse', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_checked': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_checked', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_maxlen': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_maxlen', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_checked': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_checked', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_empty': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_empty', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.tls': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.tls', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.ftp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.ftp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.http': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.http', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.failed_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.failed_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.dns_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dns_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.dns_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dns_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.smtp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.smtp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.failed_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.failed_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.msn': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.msn', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.ssh': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.ssh', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.imap': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.imap', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.dcerpc_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dcerpc_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.dcerpc_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dcerpc_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.smb': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.smb', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.tls': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.tls', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.ftp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.ftp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.http': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.http', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.dns_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dns_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.dns_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dns_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.smtp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.smtp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.ssh': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.ssh', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.dcerpc_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dcerpc_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.dcerpc_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dcerpc_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.smb': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.smb', - type: 'long', - }, - 'suricata.eve.tls.notbefore': { - category: 'suricata', - name: 'suricata.eve.tls.notbefore', - type: 'date', - }, - 'suricata.eve.tls.issuerdn': { - category: 'suricata', - name: 'suricata.eve.tls.issuerdn', - type: 'keyword', - }, - 'suricata.eve.tls.sni': { - category: 'suricata', - name: 'suricata.eve.tls.sni', - type: 'keyword', - }, - 'suricata.eve.tls.version': { - category: 'suricata', - name: 'suricata.eve.tls.version', - type: 'keyword', - }, - 'suricata.eve.tls.session_resumed': { - category: 'suricata', - name: 'suricata.eve.tls.session_resumed', - type: 'boolean', - }, - 'suricata.eve.tls.fingerprint': { - category: 'suricata', - name: 'suricata.eve.tls.fingerprint', - type: 'keyword', - }, - 'suricata.eve.tls.serial': { - category: 'suricata', - name: 'suricata.eve.tls.serial', - type: 'keyword', - }, - 'suricata.eve.tls.notafter': { - category: 'suricata', - name: 'suricata.eve.tls.notafter', - type: 'date', - }, - 'suricata.eve.tls.subject': { - category: 'suricata', - name: 'suricata.eve.tls.subject', - type: 'keyword', - }, - 'suricata.eve.tls.ja3s.string': { - category: 'suricata', - name: 'suricata.eve.tls.ja3s.string', - type: 'keyword', - }, - 'suricata.eve.tls.ja3s.hash': { - category: 'suricata', - name: 'suricata.eve.tls.ja3s.hash', - type: 'keyword', - }, - 'suricata.eve.tls.ja3.string': { - category: 'suricata', - name: 'suricata.eve.tls.ja3.string', - type: 'keyword', - }, - 'suricata.eve.tls.ja3.hash': { - category: 'suricata', - name: 'suricata.eve.tls.ja3.hash', - type: 'keyword', - }, - 'suricata.eve.app_proto_ts': { - category: 'suricata', - name: 'suricata.eve.app_proto_ts', - type: 'keyword', - }, - 'suricata.eve.flow.age': { - category: 'suricata', - name: 'suricata.eve.flow.age', - type: 'long', - }, - 'suricata.eve.flow.state': { - category: 'suricata', - name: 'suricata.eve.flow.state', - type: 'keyword', - }, - 'suricata.eve.flow.reason': { - category: 'suricata', - name: 'suricata.eve.flow.reason', - type: 'keyword', - }, - 'suricata.eve.flow.alerted': { - category: 'suricata', - name: 'suricata.eve.flow.alerted', - type: 'boolean', - }, - 'suricata.eve.tx_id': { - category: 'suricata', - name: 'suricata.eve.tx_id', - type: 'long', - }, - 'suricata.eve.app_proto_tc': { - category: 'suricata', - name: 'suricata.eve.app_proto_tc', - type: 'keyword', - }, - 'suricata.eve.smtp.rcpt_to': { - category: 'suricata', - name: 'suricata.eve.smtp.rcpt_to', - type: 'keyword', - }, - 'suricata.eve.smtp.mail_from': { - category: 'suricata', - name: 'suricata.eve.smtp.mail_from', - type: 'keyword', - }, - 'suricata.eve.smtp.helo': { - category: 'suricata', - name: 'suricata.eve.smtp.helo', - type: 'keyword', - }, - 'suricata.eve.app_proto_expected': { - category: 'suricata', - name: 'suricata.eve.app_proto_expected', - type: 'keyword', - }, - 'suricata.eve.flags': { - category: 'suricata', - name: 'suricata.eve.flags', - type: 'group', - }, - 'zeek.session_id': { - category: 'zeek', - description: 'A unique identifier of the session ', - name: 'zeek.session_id', - type: 'keyword', - }, - 'zeek.capture_loss.ts_delta': { - category: 'zeek', - description: 'The time delay between this measurement and the last. ', - name: 'zeek.capture_loss.ts_delta', - type: 'integer', - }, - 'zeek.capture_loss.peer': { - category: 'zeek', - description: - 'In the event that there are multiple Bro instances logging to the same host, this distinguishes each peer with its individual name. ', - name: 'zeek.capture_loss.peer', - type: 'keyword', - }, - 'zeek.capture_loss.gaps': { - category: 'zeek', - description: 'Number of missed ACKs from the previous measurement interval. ', - name: 'zeek.capture_loss.gaps', - type: 'integer', - }, - 'zeek.capture_loss.acks': { - category: 'zeek', - description: 'Total number of ACKs seen in the previous measurement interval. ', - name: 'zeek.capture_loss.acks', - type: 'integer', - }, - 'zeek.capture_loss.percent_lost': { - category: 'zeek', - description: "Percentage of ACKs seen where the data being ACKed wasn't seen. ", - name: 'zeek.capture_loss.percent_lost', - type: 'double', - }, - 'zeek.connection.local_orig': { - category: 'zeek', - description: 'Indicates whether the session is originated locally. ', - name: 'zeek.connection.local_orig', - type: 'boolean', - }, - 'zeek.connection.local_resp': { - category: 'zeek', - description: 'Indicates whether the session is responded locally. ', - name: 'zeek.connection.local_resp', - type: 'boolean', - }, - 'zeek.connection.missed_bytes': { - category: 'zeek', - description: 'Missed bytes for the session. ', - name: 'zeek.connection.missed_bytes', - type: 'long', - }, - 'zeek.connection.state': { - category: 'zeek', - description: 'Code indicating the state of the session. ', - name: 'zeek.connection.state', - type: 'keyword', - }, - 'zeek.connection.state_message': { - category: 'zeek', - description: 'The state of the session. ', - name: 'zeek.connection.state_message', - type: 'keyword', - }, - 'zeek.connection.icmp.type': { - category: 'zeek', - description: 'ICMP message type. ', - name: 'zeek.connection.icmp.type', - type: 'integer', - }, - 'zeek.connection.icmp.code': { - category: 'zeek', - description: 'ICMP message code. ', - name: 'zeek.connection.icmp.code', - type: 'integer', - }, - 'zeek.connection.history': { - category: 'zeek', - description: 'Flags indicating the history of the session. ', - name: 'zeek.connection.history', - type: 'keyword', - }, - 'zeek.connection.vlan': { - category: 'zeek', - description: 'VLAN identifier. ', - name: 'zeek.connection.vlan', - type: 'integer', - }, - 'zeek.connection.inner_vlan': { - category: 'zeek', - description: 'VLAN identifier. ', - name: 'zeek.connection.inner_vlan', - type: 'integer', - }, - 'zeek.dce_rpc.rtt': { - category: 'zeek', - description: - "Round trip time from the request to the response. If either the request or response wasn't seen, this will be null. ", - name: 'zeek.dce_rpc.rtt', - type: 'integer', - }, - 'zeek.dce_rpc.named_pipe': { - category: 'zeek', - description: 'Remote pipe name. ', - name: 'zeek.dce_rpc.named_pipe', - type: 'keyword', - }, - 'zeek.dce_rpc.endpoint': { - category: 'zeek', - description: 'Endpoint name looked up from the uuid. ', - name: 'zeek.dce_rpc.endpoint', - type: 'keyword', - }, - 'zeek.dce_rpc.operation': { - category: 'zeek', - description: 'Operation seen in the call. ', - name: 'zeek.dce_rpc.operation', - type: 'keyword', - }, - 'zeek.dhcp.domain': { - category: 'zeek', - description: 'Domain given by the server in option 15. ', - name: 'zeek.dhcp.domain', - type: 'keyword', - }, - 'zeek.dhcp.duration': { - category: 'zeek', - description: - 'Duration of the DHCP session representing the time from the first message to the last, in seconds. ', - name: 'zeek.dhcp.duration', - type: 'double', - }, - 'zeek.dhcp.hostname': { - category: 'zeek', - description: 'Name given by client in Hostname option 12. ', - name: 'zeek.dhcp.hostname', - type: 'keyword', - }, - 'zeek.dhcp.client_fqdn': { - category: 'zeek', - description: 'FQDN given by client in Client FQDN option 81. ', - name: 'zeek.dhcp.client_fqdn', - type: 'keyword', - }, - 'zeek.dhcp.lease_time': { - category: 'zeek', - description: 'IP address lease interval in seconds. ', - name: 'zeek.dhcp.lease_time', - type: 'integer', - }, - 'zeek.dhcp.address.assigned': { - category: 'zeek', - description: 'IP address assigned by the server. ', - name: 'zeek.dhcp.address.assigned', - type: 'ip', - }, - 'zeek.dhcp.address.client': { - category: 'zeek', - description: - 'IP address of the client. If a transaction is only a client sending INFORM messages then there is no lease information exchanged so this is helpful to know who sent the messages. Getting an address in this field does require that the client sources at least one DHCP message using a non-broadcast address. ', - name: 'zeek.dhcp.address.client', - type: 'ip', - }, - 'zeek.dhcp.address.mac': { - category: 'zeek', - description: "Client's hardware address. ", - name: 'zeek.dhcp.address.mac', - type: 'keyword', - }, - 'zeek.dhcp.address.requested': { - category: 'zeek', - description: 'IP address requested by the client. ', - name: 'zeek.dhcp.address.requested', - type: 'ip', - }, - 'zeek.dhcp.address.server': { - category: 'zeek', - description: 'IP address of the DHCP server. ', - name: 'zeek.dhcp.address.server', - type: 'ip', - }, - 'zeek.dhcp.msg.types': { - category: 'zeek', - description: 'List of DHCP message types seen in this exchange. ', - name: 'zeek.dhcp.msg.types', - type: 'keyword', - }, - 'zeek.dhcp.msg.origin': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/msg-orig.bro is loaded) The address that originated each message from the msg.types field. ', - name: 'zeek.dhcp.msg.origin', - type: 'ip', - }, - 'zeek.dhcp.msg.client': { - category: 'zeek', - description: - 'Message typically accompanied with a DHCP_DECLINE so the client can tell the server why it rejected an address. ', - name: 'zeek.dhcp.msg.client', - type: 'keyword', - }, - 'zeek.dhcp.msg.server': { - category: 'zeek', - description: - 'Message typically accompanied with a DHCP_NAK to let the client know why it rejected the request. ', - name: 'zeek.dhcp.msg.server', - type: 'keyword', - }, - 'zeek.dhcp.software.client': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ', - name: 'zeek.dhcp.software.client', - type: 'keyword', - }, - 'zeek.dhcp.software.server': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ', - name: 'zeek.dhcp.software.server', - type: 'keyword', - }, - 'zeek.dhcp.id.circuit': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/sub-opts.bro is loaded) Added by DHCP relay agents which terminate switched or permanent circuits. It encodes an agent-local identifier of the circuit from which a DHCP client-to-server packet was received. Typically it should represent a router or switch interface number. ', - name: 'zeek.dhcp.id.circuit', - type: 'keyword', - }, - 'zeek.dhcp.id.remote_agent': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/sub-opts.bro is loaded) A globally unique identifier added by relay agents to identify the remote host end of the circuit. ', - name: 'zeek.dhcp.id.remote_agent', - type: 'keyword', - }, - 'zeek.dhcp.id.subscriber': { - category: 'zeek', - description: - "(present if policy/protocols/dhcp/sub-opts.bro is loaded) The subscriber ID is a value independent of the physical network configuration so that a customer's DHCP configuration can be given to them correctly no matter where they are physically connected. ", - name: 'zeek.dhcp.id.subscriber', - type: 'keyword', - }, - 'zeek.dnp3.function.request': { - category: 'zeek', - description: 'The name of the function message in the request. ', - name: 'zeek.dnp3.function.request', - type: 'keyword', - }, - 'zeek.dnp3.function.reply': { - category: 'zeek', - description: 'The name of the function message in the reply. ', - name: 'zeek.dnp3.function.reply', - type: 'keyword', - }, - 'zeek.dnp3.id': { - category: 'zeek', - description: "The response's internal indication number. ", - name: 'zeek.dnp3.id', - type: 'integer', - }, - 'zeek.dns.trans_id': { - category: 'zeek', - description: 'DNS transaction identifier. ', - name: 'zeek.dns.trans_id', - type: 'keyword', - }, - 'zeek.dns.rtt': { - category: 'zeek', - description: 'Round trip time for the query and response. ', - name: 'zeek.dns.rtt', - type: 'double', - }, - 'zeek.dns.query': { - category: 'zeek', - description: 'The domain name that is the subject of the DNS query. ', - name: 'zeek.dns.query', - type: 'keyword', - }, - 'zeek.dns.qclass': { - category: 'zeek', - description: 'The QCLASS value specifying the class of the query. ', - name: 'zeek.dns.qclass', - type: 'long', - }, - 'zeek.dns.qclass_name': { - category: 'zeek', - description: 'A descriptive name for the class of the query. ', - name: 'zeek.dns.qclass_name', - type: 'keyword', - }, - 'zeek.dns.qtype': { - category: 'zeek', - description: 'A QTYPE value specifying the type of the query. ', - name: 'zeek.dns.qtype', - type: 'long', - }, - 'zeek.dns.qtype_name': { - category: 'zeek', - description: 'A descriptive name for the type of the query. ', - name: 'zeek.dns.qtype_name', - type: 'keyword', - }, - 'zeek.dns.rcode': { - category: 'zeek', - description: 'The response code value in DNS response messages. ', - name: 'zeek.dns.rcode', - type: 'long', - }, - 'zeek.dns.rcode_name': { - category: 'zeek', - description: 'A descriptive name for the response code value. ', - name: 'zeek.dns.rcode_name', - type: 'keyword', - }, - 'zeek.dns.AA': { - category: 'zeek', - description: - 'The Authoritative Answer bit for response messages specifies that the responding name server is an authority for the domain name in the question section. ', - name: 'zeek.dns.AA', - type: 'boolean', - }, - 'zeek.dns.TC': { - category: 'zeek', - description: 'The Truncation bit specifies that the message was truncated. ', - name: 'zeek.dns.TC', - type: 'boolean', - }, - 'zeek.dns.RD': { - category: 'zeek', - description: - 'The Recursion Desired bit in a request message indicates that the client wants recursive service for this query. ', - name: 'zeek.dns.RD', - type: 'boolean', - }, - 'zeek.dns.RA': { - category: 'zeek', - description: - 'The Recursion Available bit in a response message indicates that the name server supports recursive queries. ', - name: 'zeek.dns.RA', - type: 'boolean', - }, - 'zeek.dns.answers': { - category: 'zeek', - description: 'The set of resource descriptions in the query answer. ', - name: 'zeek.dns.answers', - type: 'keyword', - }, - 'zeek.dns.TTLs': { - category: 'zeek', - description: 'The caching intervals of the associated RRs described by the answers field. ', - name: 'zeek.dns.TTLs', - type: 'double', - }, - 'zeek.dns.rejected': { - category: 'zeek', - description: 'Indicates whether the DNS query was rejected by the server. ', - name: 'zeek.dns.rejected', - type: 'boolean', - }, - 'zeek.dns.total_answers': { - category: 'zeek', - description: 'The total number of resource records in the reply. ', - name: 'zeek.dns.total_answers', - type: 'integer', - }, - 'zeek.dns.total_replies': { - category: 'zeek', - description: 'The total number of resource records in the reply message. ', - name: 'zeek.dns.total_replies', - type: 'integer', - }, - 'zeek.dns.saw_query': { - category: 'zeek', - description: 'Whether the full DNS query has been seen. ', - name: 'zeek.dns.saw_query', - type: 'boolean', - }, - 'zeek.dns.saw_reply': { - category: 'zeek', - description: 'Whether the full DNS reply has been seen. ', - name: 'zeek.dns.saw_reply', - type: 'boolean', - }, - 'zeek.dpd.analyzer': { - category: 'zeek', - description: 'The analyzer that generated the violation. ', - name: 'zeek.dpd.analyzer', - type: 'keyword', - }, - 'zeek.dpd.failure_reason': { - category: 'zeek', - description: 'The textual reason for the analysis failure. ', - name: 'zeek.dpd.failure_reason', - type: 'keyword', - }, - 'zeek.dpd.packet_segment': { - category: 'zeek', - description: - '(present if policy/frameworks/dpd/packet-segment-logging.bro is loaded) A chunk of the payload that most likely resulted in the protocol violation. ', - name: 'zeek.dpd.packet_segment', - type: 'keyword', - }, - 'zeek.files.fuid': { - category: 'zeek', - description: 'A file unique identifier. ', - name: 'zeek.files.fuid', - type: 'keyword', - }, - 'zeek.files.tx_host': { - category: 'zeek', - description: 'The host that transferred the file. ', - name: 'zeek.files.tx_host', - type: 'ip', - }, - 'zeek.files.rx_host': { - category: 'zeek', - description: 'The host that received the file. ', - name: 'zeek.files.rx_host', - type: 'ip', - }, - 'zeek.files.session_ids': { - category: 'zeek', - description: 'The sessions that have this file. ', - name: 'zeek.files.session_ids', - type: 'keyword', - }, - 'zeek.files.source': { - category: 'zeek', - description: - 'An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ', - name: 'zeek.files.source', - type: 'keyword', - }, - 'zeek.files.depth': { - category: 'zeek', - description: - 'A value to represent the depth of this file in relation to its source. In SMTP, it is the depth of the MIME attachment on the message. In HTTP, it is the depth of the request within the TCP connection. ', - name: 'zeek.files.depth', - type: 'long', - }, - 'zeek.files.analyzers': { - category: 'zeek', - description: 'A set of analysis types done during the file analysis. ', - name: 'zeek.files.analyzers', - type: 'keyword', - }, - 'zeek.files.mime_type': { - category: 'zeek', - description: 'Mime type of the file. ', - name: 'zeek.files.mime_type', - type: 'keyword', - }, - 'zeek.files.filename': { - category: 'zeek', - description: 'Name of the file if available. ', - name: 'zeek.files.filename', - type: 'keyword', - }, - 'zeek.files.local_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the data originated from the local network or not. ', - name: 'zeek.files.local_orig', - type: 'boolean', - }, - 'zeek.files.is_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ', - name: 'zeek.files.is_orig', - type: 'boolean', - }, - 'zeek.files.duration': { - category: 'zeek', - description: 'The duration the file was analyzed for. Not the duration of the session. ', - name: 'zeek.files.duration', - type: 'double', - }, - 'zeek.files.seen_bytes': { - category: 'zeek', - description: 'Number of bytes provided to the file analysis engine for the file. ', - name: 'zeek.files.seen_bytes', - type: 'long', - }, - 'zeek.files.total_bytes': { - category: 'zeek', - description: 'Total number of bytes that are supposed to comprise the full file. ', - name: 'zeek.files.total_bytes', - type: 'long', - }, - 'zeek.files.missing_bytes': { - category: 'zeek', - description: - 'The number of bytes in the file stream that were completely missed during the process of analysis. ', - name: 'zeek.files.missing_bytes', - type: 'long', - }, - 'zeek.files.overflow_bytes': { - category: 'zeek', - description: - "The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ", - name: 'zeek.files.overflow_bytes', - type: 'long', - }, - 'zeek.files.timedout': { - category: 'zeek', - description: 'Whether the file analysis timed out at least once for the file. ', - name: 'zeek.files.timedout', - type: 'boolean', - }, - 'zeek.files.parent_fuid': { - category: 'zeek', - description: - 'Identifier associated with a container file from which this one was extracted as part of the file analysis. ', - name: 'zeek.files.parent_fuid', - type: 'keyword', - }, - 'zeek.files.md5': { - category: 'zeek', - description: 'An MD5 digest of the file contents. ', - name: 'zeek.files.md5', - type: 'keyword', - }, - 'zeek.files.sha1': { - category: 'zeek', - description: 'A SHA1 digest of the file contents. ', - name: 'zeek.files.sha1', - type: 'keyword', - }, - 'zeek.files.sha256': { - category: 'zeek', - description: 'A SHA256 digest of the file contents. ', - name: 'zeek.files.sha256', - type: 'keyword', - }, - 'zeek.files.extracted': { - category: 'zeek', - description: 'Local filename of extracted file. ', - name: 'zeek.files.extracted', - type: 'keyword', - }, - 'zeek.files.extracted_cutoff': { - category: 'zeek', - description: - 'Indicate whether the file being extracted was cut off hence not extracted completely. ', - name: 'zeek.files.extracted_cutoff', - type: 'boolean', - }, - 'zeek.files.extracted_size': { - category: 'zeek', - description: 'The number of bytes extracted to disk. ', - name: 'zeek.files.extracted_size', - type: 'long', - }, - 'zeek.files.entropy': { - category: 'zeek', - description: 'The information density of the contents of the file. ', - name: 'zeek.files.entropy', - type: 'double', - }, - 'zeek.ftp.user': { - category: 'zeek', - description: 'User name for the current FTP session. ', - name: 'zeek.ftp.user', - type: 'keyword', - }, - 'zeek.ftp.password': { - category: 'zeek', - description: 'Password for the current FTP session if captured. ', - name: 'zeek.ftp.password', - type: 'keyword', - }, - 'zeek.ftp.command': { - category: 'zeek', - description: 'Command given by the client. ', - name: 'zeek.ftp.command', - type: 'keyword', - }, - 'zeek.ftp.arg': { - category: 'zeek', - description: 'Argument for the command if one is given. ', - name: 'zeek.ftp.arg', - type: 'keyword', - }, - 'zeek.ftp.file.size': { - category: 'zeek', - description: 'Size of the file if the command indicates a file transfer. ', - name: 'zeek.ftp.file.size', - type: 'long', - }, - 'zeek.ftp.file.mime_type': { - category: 'zeek', - description: 'Sniffed mime type of file. ', - name: 'zeek.ftp.file.mime_type', - type: 'keyword', - }, - 'zeek.ftp.file.fuid': { - category: 'zeek', - description: '(present if base/protocols/ftp/files.bro is loaded) File unique ID. ', - name: 'zeek.ftp.file.fuid', - type: 'keyword', - }, - 'zeek.ftp.reply.code': { - category: 'zeek', - description: 'Reply code from the server in response to the command. ', - name: 'zeek.ftp.reply.code', - type: 'integer', - }, - 'zeek.ftp.reply.msg': { - category: 'zeek', - description: 'Reply message from the server in response to the command. ', - name: 'zeek.ftp.reply.msg', - type: 'keyword', - }, - 'zeek.ftp.data_channel.passive': { - category: 'zeek', - description: 'Whether PASV mode is toggled for control channel. ', - name: 'zeek.ftp.data_channel.passive', - type: 'boolean', - }, - 'zeek.ftp.data_channel.originating_host': { - category: 'zeek', - description: 'The host that will be initiating the data connection. ', - name: 'zeek.ftp.data_channel.originating_host', - type: 'ip', - }, - 'zeek.ftp.data_channel.response_host': { - category: 'zeek', - description: 'The host that will be accepting the data connection. ', - name: 'zeek.ftp.data_channel.response_host', - type: 'ip', - }, - 'zeek.ftp.data_channel.response_port': { - category: 'zeek', - description: 'The port at which the acceptor is listening for the data connection. ', - name: 'zeek.ftp.data_channel.response_port', - type: 'integer', - }, - 'zeek.ftp.cwd': { - category: 'zeek', - description: - "Current working directory that this session is in. By making the default value '.', we can indicate that unless something more concrete is discovered that the existing but unknown directory is ok to use. ", - name: 'zeek.ftp.cwd', - type: 'keyword', - }, - 'zeek.ftp.cmdarg.cmd': { - category: 'zeek', - description: 'Command. ', - name: 'zeek.ftp.cmdarg.cmd', - type: 'keyword', - }, - 'zeek.ftp.cmdarg.arg': { - category: 'zeek', - description: 'Argument for the command if one was given. ', - name: 'zeek.ftp.cmdarg.arg', - type: 'keyword', - }, - 'zeek.ftp.cmdarg.seq': { - category: 'zeek', - description: 'Counter to track how many commands have been executed. ', - name: 'zeek.ftp.cmdarg.seq', - type: 'integer', - }, - 'zeek.ftp.pending_commands': { - category: 'zeek', - description: - 'Queue for commands that have been sent but not yet responded to are tracked here. ', - name: 'zeek.ftp.pending_commands', - type: 'integer', - }, - 'zeek.ftp.passive': { - category: 'zeek', - description: 'Indicates if the session is in active or passive mode. ', - name: 'zeek.ftp.passive', - type: 'boolean', - }, - 'zeek.ftp.capture_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.ftp.capture_password', - type: 'boolean', - }, - 'zeek.ftp.last_auth_requested': { - category: 'zeek', - description: - 'present if base/protocols/ftp/gridftp.bro is loaded. Last authentication/security mechanism that was used. ', - name: 'zeek.ftp.last_auth_requested', - type: 'keyword', - }, - 'zeek.http.trans_depth': { - category: 'zeek', - description: - 'Represents the pipelined depth into the connection of this request/response transaction. ', - name: 'zeek.http.trans_depth', - type: 'integer', - }, - 'zeek.http.status_msg': { - category: 'zeek', - description: 'Status message returned by the server. ', - name: 'zeek.http.status_msg', - type: 'keyword', - }, - 'zeek.http.info_code': { - category: 'zeek', - description: 'Last seen 1xx informational reply code returned by the server. ', - name: 'zeek.http.info_code', - type: 'integer', - }, - 'zeek.http.info_msg': { - category: 'zeek', - description: 'Last seen 1xx informational reply message returned by the server. ', - name: 'zeek.http.info_msg', - type: 'keyword', - }, - 'zeek.http.tags': { - category: 'zeek', - description: - 'A set of indicators of various attributes discovered and related to a particular request/response pair. ', - name: 'zeek.http.tags', - type: 'keyword', - }, - 'zeek.http.password': { - category: 'zeek', - description: 'Password if basic-auth is performed for the request. ', - name: 'zeek.http.password', - type: 'keyword', - }, - 'zeek.http.captured_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.http.captured_password', - type: 'boolean', - }, - 'zeek.http.proxied': { - category: 'zeek', - description: 'All of the headers that may indicate if the HTTP request was proxied. ', - name: 'zeek.http.proxied', - type: 'keyword', - }, - 'zeek.http.range_request': { - category: 'zeek', - description: 'Indicates if this request can assume 206 partial content in response. ', - name: 'zeek.http.range_request', - type: 'boolean', - }, - 'zeek.http.client_header_names': { - category: 'zeek', - description: - 'The vector of HTTP header names sent by the client. No header values are included here, just the header names. ', - name: 'zeek.http.client_header_names', - type: 'keyword', - }, - 'zeek.http.server_header_names': { - category: 'zeek', - description: - 'The vector of HTTP header names sent by the server. No header values are included here, just the header names. ', - name: 'zeek.http.server_header_names', - type: 'keyword', - }, - 'zeek.http.orig_fuids': { - category: 'zeek', - description: 'An ordered vector of file unique IDs from the originator. ', - name: 'zeek.http.orig_fuids', - type: 'keyword', - }, - 'zeek.http.orig_mime_types': { - category: 'zeek', - description: 'An ordered vector of mime types from the originator. ', - name: 'zeek.http.orig_mime_types', - type: 'keyword', - }, - 'zeek.http.orig_filenames': { - category: 'zeek', - description: 'An ordered vector of filenames from the originator. ', - name: 'zeek.http.orig_filenames', - type: 'keyword', - }, - 'zeek.http.resp_fuids': { - category: 'zeek', - description: 'An ordered vector of file unique IDs from the responder. ', - name: 'zeek.http.resp_fuids', - type: 'keyword', - }, - 'zeek.http.resp_mime_types': { - category: 'zeek', - description: 'An ordered vector of mime types from the responder. ', - name: 'zeek.http.resp_mime_types', - type: 'keyword', - }, - 'zeek.http.resp_filenames': { - category: 'zeek', - description: 'An ordered vector of filenames from the responder. ', - name: 'zeek.http.resp_filenames', - type: 'keyword', - }, - 'zeek.http.orig_mime_depth': { - category: 'zeek', - description: 'Current number of MIME entities in the HTTP request message body. ', - name: 'zeek.http.orig_mime_depth', - type: 'integer', - }, - 'zeek.http.resp_mime_depth': { - category: 'zeek', - description: 'Current number of MIME entities in the HTTP response message body. ', - name: 'zeek.http.resp_mime_depth', - type: 'integer', - }, - 'zeek.intel.seen.indicator': { - category: 'zeek', - description: 'The intelligence indicator. ', - name: 'zeek.intel.seen.indicator', - type: 'keyword', - }, - 'zeek.intel.seen.indicator_type': { - category: 'zeek', - description: 'The type of data the indicator represents. ', - name: 'zeek.intel.seen.indicator_type', - type: 'keyword', - }, - 'zeek.intel.seen.host': { - category: 'zeek', - description: 'If the indicator type was Intel::ADDR, then this field will be present. ', - name: 'zeek.intel.seen.host', - type: 'keyword', - }, - 'zeek.intel.seen.conn': { - category: 'zeek', - description: - 'If the data was discovered within a connection, the connection record should go here to give context to the data. ', - name: 'zeek.intel.seen.conn', - type: 'keyword', - }, - 'zeek.intel.seen.where': { - category: 'zeek', - description: 'Where the data was discovered. ', - name: 'zeek.intel.seen.where', - type: 'keyword', - }, - 'zeek.intel.seen.node': { - category: 'zeek', - description: 'The name of the node where the match was discovered. ', - name: 'zeek.intel.seen.node', - type: 'keyword', - }, - 'zeek.intel.seen.uid': { - category: 'zeek', - description: - 'If the data was discovered within a connection, the connection uid should go here to give context to the data. If the conn field is provided, this will be automatically filled out. ', - name: 'zeek.intel.seen.uid', - type: 'keyword', - }, - 'zeek.intel.seen.f': { - category: 'zeek', - description: - 'If the data was discovered within a file, the file record should go here to provide context to the data. ', - name: 'zeek.intel.seen.f', - type: 'object', - }, - 'zeek.intel.seen.fuid': { - category: 'zeek', - description: - 'If the data was discovered within a file, the file uid should go here to provide context to the data. If the file record f is provided, this will be automatically filled out. ', - name: 'zeek.intel.seen.fuid', - type: 'keyword', - }, - 'zeek.intel.matched': { - category: 'zeek', - description: 'Event to represent a match in the intelligence data from data that was seen. ', - name: 'zeek.intel.matched', - type: 'keyword', - }, - 'zeek.intel.sources': { - category: 'zeek', - description: 'Sources which supplied data for this match. ', - name: 'zeek.intel.sources', - type: 'keyword', - }, - 'zeek.intel.fuid': { - category: 'zeek', - description: - 'If a file was associated with this intelligence hit, this is the uid for the file. ', - name: 'zeek.intel.fuid', - type: 'keyword', - }, - 'zeek.intel.file_mime_type': { - category: 'zeek', - description: - 'A mime type if the intelligence hit is related to a file. If the $f field is provided this will be automatically filled out. ', - name: 'zeek.intel.file_mime_type', - type: 'keyword', - }, - 'zeek.intel.file_desc': { - category: 'zeek', - description: - 'Frequently files can be described to give a bit more context. If the $f field is provided this field will be automatically filled out. ', - name: 'zeek.intel.file_desc', - type: 'keyword', - }, - 'zeek.irc.nick': { - category: 'zeek', - description: 'Nickname given for the connection. ', - name: 'zeek.irc.nick', - type: 'keyword', - }, - 'zeek.irc.user': { - category: 'zeek', - description: 'Username given for the connection. ', - name: 'zeek.irc.user', - type: 'keyword', - }, - 'zeek.irc.command': { - category: 'zeek', - description: 'Command given by the client. ', - name: 'zeek.irc.command', - type: 'keyword', - }, - 'zeek.irc.value': { - category: 'zeek', - description: 'Value for the command given by the client. ', - name: 'zeek.irc.value', - type: 'keyword', - }, - 'zeek.irc.addl': { - category: 'zeek', - description: 'Any additional data for the command. ', - name: 'zeek.irc.addl', - type: 'keyword', - }, - 'zeek.irc.dcc.file.name': { - category: 'zeek', - description: 'Present if base/protocols/irc/dcc-send.bro is loaded. DCC filename requested. ', - name: 'zeek.irc.dcc.file.name', - type: 'keyword', - }, - 'zeek.irc.dcc.file.size': { - category: 'zeek', - description: - 'Present if base/protocols/irc/dcc-send.bro is loaded. Size of the DCC transfer as indicated by the sender. ', - name: 'zeek.irc.dcc.file.size', - type: 'long', - }, - 'zeek.irc.dcc.mime_type': { - category: 'zeek', - description: - 'present if base/protocols/irc/dcc-send.bro is loaded. Sniffed mime type of the file. ', - name: 'zeek.irc.dcc.mime_type', - type: 'keyword', - }, - 'zeek.irc.fuid': { - category: 'zeek', - description: 'present if base/protocols/irc/files.bro is loaded. File unique ID. ', - name: 'zeek.irc.fuid', - type: 'keyword', - }, - 'zeek.kerberos.request_type': { - category: 'zeek', - description: 'Request type - Authentication Service (AS) or Ticket Granting Service (TGS). ', - name: 'zeek.kerberos.request_type', - type: 'keyword', - }, - 'zeek.kerberos.client': { - category: 'zeek', - description: 'Client name. ', - name: 'zeek.kerberos.client', - type: 'keyword', - }, - 'zeek.kerberos.service': { - category: 'zeek', - description: 'Service name. ', - name: 'zeek.kerberos.service', - type: 'keyword', - }, - 'zeek.kerberos.success': { - category: 'zeek', - description: 'Request result. ', - name: 'zeek.kerberos.success', - type: 'boolean', - }, - 'zeek.kerberos.error.code': { - category: 'zeek', - description: 'Error code. ', - name: 'zeek.kerberos.error.code', - type: 'integer', - }, - 'zeek.kerberos.error.msg': { - category: 'zeek', - description: 'Error message. ', - name: 'zeek.kerberos.error.msg', - type: 'keyword', - }, - 'zeek.kerberos.valid.from': { - category: 'zeek', - description: 'Ticket valid from. ', - name: 'zeek.kerberos.valid.from', - type: 'date', - }, - 'zeek.kerberos.valid.until': { - category: 'zeek', - description: 'Ticket valid until. ', - name: 'zeek.kerberos.valid.until', - type: 'date', - }, - 'zeek.kerberos.valid.days': { - category: 'zeek', - description: 'Number of days the ticket is valid for. ', - name: 'zeek.kerberos.valid.days', - type: 'integer', - }, - 'zeek.kerberos.cipher': { - category: 'zeek', - description: 'Ticket encryption type. ', - name: 'zeek.kerberos.cipher', - type: 'keyword', - }, - 'zeek.kerberos.forwardable': { - category: 'zeek', - description: 'Forwardable ticket requested. ', - name: 'zeek.kerberos.forwardable', - type: 'boolean', - }, - 'zeek.kerberos.renewable': { - category: 'zeek', - description: 'Renewable ticket requested. ', - name: 'zeek.kerberos.renewable', - type: 'boolean', - }, - 'zeek.kerberos.ticket.auth': { - category: 'zeek', - description: 'Hash of ticket used to authorize request/transaction. ', - name: 'zeek.kerberos.ticket.auth', - type: 'keyword', - }, - 'zeek.kerberos.ticket.new': { - category: 'zeek', - description: 'Hash of ticket returned by the KDC. ', - name: 'zeek.kerberos.ticket.new', - type: 'keyword', - }, - 'zeek.kerberos.cert.client.value': { - category: 'zeek', - description: 'Client certificate. ', - name: 'zeek.kerberos.cert.client.value', - type: 'keyword', - }, - 'zeek.kerberos.cert.client.fuid': { - category: 'zeek', - description: 'File unique ID of client cert. ', - name: 'zeek.kerberos.cert.client.fuid', - type: 'keyword', - }, - 'zeek.kerberos.cert.client.subject': { - category: 'zeek', - description: 'Subject of client certificate. ', - name: 'zeek.kerberos.cert.client.subject', - type: 'keyword', - }, - 'zeek.kerberos.cert.server.value': { - category: 'zeek', - description: 'Server certificate. ', - name: 'zeek.kerberos.cert.server.value', - type: 'keyword', - }, - 'zeek.kerberos.cert.server.fuid': { - category: 'zeek', - description: 'File unique ID of server certificate. ', - name: 'zeek.kerberos.cert.server.fuid', - type: 'keyword', - }, - 'zeek.kerberos.cert.server.subject': { - category: 'zeek', - description: 'Subject of server certificate. ', - name: 'zeek.kerberos.cert.server.subject', - type: 'keyword', - }, - 'zeek.modbus.function': { - category: 'zeek', - description: 'The name of the function message that was sent. ', - name: 'zeek.modbus.function', - type: 'keyword', - }, - 'zeek.modbus.exception': { - category: 'zeek', - description: 'The exception if the response was a failure. ', - name: 'zeek.modbus.exception', - type: 'keyword', - }, - 'zeek.modbus.track_address': { - category: 'zeek', - description: - 'Present if policy/protocols/modbus/track-memmap.bro is loaded. Modbus track address. ', - name: 'zeek.modbus.track_address', - type: 'integer', - }, - 'zeek.mysql.cmd': { - category: 'zeek', - description: 'The command that was issued. ', - name: 'zeek.mysql.cmd', - type: 'keyword', - }, - 'zeek.mysql.arg': { - category: 'zeek', - description: 'The argument issued to the command. ', - name: 'zeek.mysql.arg', - type: 'keyword', - }, - 'zeek.mysql.success': { - category: 'zeek', - description: 'Whether the command succeeded. ', - name: 'zeek.mysql.success', - type: 'boolean', - }, - 'zeek.mysql.rows': { - category: 'zeek', - description: 'The number of affected rows, if any. ', - name: 'zeek.mysql.rows', - type: 'integer', - }, - 'zeek.mysql.response': { - category: 'zeek', - description: 'Server message, if any. ', - name: 'zeek.mysql.response', - type: 'keyword', - }, - 'zeek.notice.connection_id': { - category: 'zeek', - description: 'Identifier of the related connection session. ', - name: 'zeek.notice.connection_id', - type: 'keyword', - }, - 'zeek.notice.icmp_id': { - category: 'zeek', - description: 'Identifier of the related ICMP session. ', - name: 'zeek.notice.icmp_id', - type: 'keyword', - }, - 'zeek.notice.file.id': { - category: 'zeek', - description: 'An identifier associated with a single file that is related to this notice. ', - name: 'zeek.notice.file.id', - type: 'keyword', - }, - 'zeek.notice.file.parent_id': { - category: 'zeek', - description: 'Identifier associated with a container file from which this one was extracted. ', - name: 'zeek.notice.file.parent_id', - type: 'keyword', - }, - 'zeek.notice.file.source': { - category: 'zeek', - description: - 'An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ', - name: 'zeek.notice.file.source', - type: 'keyword', - }, - 'zeek.notice.file.mime_type': { - category: 'zeek', - description: 'A mime type if the notice is related to a file. ', - name: 'zeek.notice.file.mime_type', - type: 'keyword', - }, - 'zeek.notice.file.is_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ', - name: 'zeek.notice.file.is_orig', - type: 'boolean', - }, - 'zeek.notice.file.seen_bytes': { - category: 'zeek', - description: 'Number of bytes provided to the file analysis engine for the file. ', - name: 'zeek.notice.file.seen_bytes', - type: 'long', - }, - 'zeek.notice.ffile.total_bytes': { - category: 'zeek', - description: 'Total number of bytes that are supposed to comprise the full file. ', - name: 'zeek.notice.ffile.total_bytes', - type: 'long', - }, - 'zeek.notice.file.missing_bytes': { - category: 'zeek', - description: - 'The number of bytes in the file stream that were completely missed during the process of analysis. ', - name: 'zeek.notice.file.missing_bytes', - type: 'long', - }, - 'zeek.notice.file.overflow_bytes': { - category: 'zeek', - description: - "The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ", - name: 'zeek.notice.file.overflow_bytes', - type: 'long', - }, - 'zeek.notice.fuid': { - category: 'zeek', - description: 'A file unique ID if this notice is related to a file. ', - name: 'zeek.notice.fuid', - type: 'keyword', - }, - 'zeek.notice.note': { - category: 'zeek', - description: 'The type of the notice. ', - name: 'zeek.notice.note', - type: 'keyword', - }, - 'zeek.notice.msg': { - category: 'zeek', - description: 'The human readable message for the notice. ', - name: 'zeek.notice.msg', - type: 'keyword', - }, - 'zeek.notice.sub': { - category: 'zeek', - description: 'The human readable sub-message. ', - name: 'zeek.notice.sub', - type: 'keyword', - }, - 'zeek.notice.n': { - category: 'zeek', - description: 'Associated count, or a status code. ', - name: 'zeek.notice.n', - type: 'long', - }, - 'zeek.notice.peer_name': { - category: 'zeek', - description: 'Name of remote peer that raised this notice. ', - name: 'zeek.notice.peer_name', - type: 'keyword', - }, - 'zeek.notice.peer_descr': { - category: 'zeek', - description: 'Textual description for the peer that raised this notice. ', - name: 'zeek.notice.peer_descr', - type: 'text', - }, - 'zeek.notice.actions': { - category: 'zeek', - description: 'The actions which have been applied to this notice. ', - name: 'zeek.notice.actions', - type: 'keyword', - }, - 'zeek.notice.email_body_sections': { - category: 'zeek', - description: - 'By adding chunks of text into this element, other scripts can expand on notices that are being emailed. ', - name: 'zeek.notice.email_body_sections', - type: 'text', - }, - 'zeek.notice.email_delay_tokens': { - category: 'zeek', - description: - 'Adding a string token to this set will cause the built-in emailing functionality to delay sending the email either the token has been removed or the email has been delayed for the specified time duration. ', - name: 'zeek.notice.email_delay_tokens', - type: 'keyword', - }, - 'zeek.notice.identifier': { - category: 'zeek', - description: - 'This field is provided when a notice is generated for the purpose of deduplicating notices. ', - name: 'zeek.notice.identifier', - type: 'keyword', - }, - 'zeek.notice.suppress_for': { - category: 'zeek', - description: - 'This field indicates the length of time that this unique notice should be suppressed. ', - name: 'zeek.notice.suppress_for', - type: 'double', - }, - 'zeek.notice.dropped': { - category: 'zeek', - description: 'Indicate if the source IP address was dropped and denied network access. ', - name: 'zeek.notice.dropped', - type: 'boolean', - }, - 'zeek.ntlm.domain': { - category: 'zeek', - description: 'Domain name given by the client. ', - name: 'zeek.ntlm.domain', - type: 'keyword', - }, - 'zeek.ntlm.hostname': { - category: 'zeek', - description: 'Hostname given by the client. ', - name: 'zeek.ntlm.hostname', - type: 'keyword', - }, - 'zeek.ntlm.success': { - category: 'zeek', - description: 'Indicate whether or not the authentication was successful. ', - name: 'zeek.ntlm.success', - type: 'boolean', - }, - 'zeek.ntlm.username': { - category: 'zeek', - description: 'Username given by the client. ', - name: 'zeek.ntlm.username', - type: 'keyword', - }, - 'zeek.ntlm.server.name.dns': { - category: 'zeek', - description: 'DNS name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.dns', - type: 'keyword', - }, - 'zeek.ntlm.server.name.netbios': { - category: 'zeek', - description: 'NetBIOS name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.netbios', - type: 'keyword', - }, - 'zeek.ntlm.server.name.tree': { - category: 'zeek', - description: 'Tree name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.tree', - type: 'keyword', - }, - 'zeek.ntp.version': { - category: 'zeek', - description: 'The NTP version number (1, 2, 3, 4). ', - name: 'zeek.ntp.version', - type: 'integer', - }, - 'zeek.ntp.mode': { - category: 'zeek', - description: 'The NTP mode being used. ', - name: 'zeek.ntp.mode', - type: 'integer', - }, - 'zeek.ntp.stratum': { - category: 'zeek', - description: 'The stratum (primary server, secondary server, etc.). ', - name: 'zeek.ntp.stratum', - type: 'integer', - }, - 'zeek.ntp.poll': { - category: 'zeek', - description: 'The maximum interval between successive messages in seconds. ', - name: 'zeek.ntp.poll', - type: 'double', - }, - 'zeek.ntp.precision': { - category: 'zeek', - description: 'The precision of the system clock in seconds. ', - name: 'zeek.ntp.precision', - type: 'double', - }, - 'zeek.ntp.root_delay': { - category: 'zeek', - description: 'Total round-trip delay to the reference clock in seconds. ', - name: 'zeek.ntp.root_delay', - type: 'double', - }, - 'zeek.ntp.root_disp': { - category: 'zeek', - description: 'Total dispersion to the reference clock in seconds. ', - name: 'zeek.ntp.root_disp', - type: 'double', - }, - 'zeek.ntp.ref_id': { - category: 'zeek', - description: - 'For stratum 0, 4 character string used for debugging. For stratum 1, ID assigned to the reference clock by IANA. Above stratum 1, when using IPv4, the IP address of the reference clock. Note that the NTP protocol did not originally specify a large enough field to represent IPv6 addresses, so they use the first four bytes of the MD5 hash of the reference clock’s IPv6 address (i.e. an IPv4 address here is not necessarily IPv4). ', - name: 'zeek.ntp.ref_id', - type: 'keyword', - }, - 'zeek.ntp.ref_time': { - category: 'zeek', - description: 'Time when the system clock was last set or correct. ', - name: 'zeek.ntp.ref_time', - type: 'date', - }, - 'zeek.ntp.org_time': { - category: 'zeek', - description: 'Time at the client when the request departed for the NTP server. ', - name: 'zeek.ntp.org_time', - type: 'date', - }, - 'zeek.ntp.rec_time': { - category: 'zeek', - description: 'Time at the server when the request arrived from the NTP client. ', - name: 'zeek.ntp.rec_time', - type: 'date', - }, - 'zeek.ntp.xmt_time': { - category: 'zeek', - description: 'Time at the server when the response departed for the NTP client. ', - name: 'zeek.ntp.xmt_time', - type: 'date', - }, - 'zeek.ntp.num_exts': { - category: 'zeek', - description: 'Number of extension fields (which are not currently parsed). ', - name: 'zeek.ntp.num_exts', - type: 'integer', - }, - 'zeek.ocsp.file_id': { - category: 'zeek', - description: 'File id of the OCSP reply. ', - name: 'zeek.ocsp.file_id', - type: 'keyword', - }, - 'zeek.ocsp.hash.algorithm': { - category: 'zeek', - description: 'Hash algorithm used to generate issuerNameHash and issuerKeyHash. ', - name: 'zeek.ocsp.hash.algorithm', - type: 'keyword', - }, - 'zeek.ocsp.hash.issuer.name': { - category: 'zeek', - description: "Hash of the issuer's distingueshed name. ", - name: 'zeek.ocsp.hash.issuer.name', - type: 'keyword', - }, - 'zeek.ocsp.hash.issuer.key': { - category: 'zeek', - description: "Hash of the issuer's public key. ", - name: 'zeek.ocsp.hash.issuer.key', - type: 'keyword', - }, - 'zeek.ocsp.serial_number': { - category: 'zeek', - description: 'Serial number of the affected certificate. ', - name: 'zeek.ocsp.serial_number', - type: 'keyword', - }, - 'zeek.ocsp.status': { - category: 'zeek', - description: 'Status of the affected certificate. ', - name: 'zeek.ocsp.status', - type: 'keyword', - }, - 'zeek.ocsp.revoke.time': { - category: 'zeek', - description: 'Time at which the certificate was revoked. ', - name: 'zeek.ocsp.revoke.time', - type: 'date', - }, - 'zeek.ocsp.revoke.reason': { - category: 'zeek', - description: 'Reason for which the certificate was revoked. ', - name: 'zeek.ocsp.revoke.reason', - type: 'keyword', - }, - 'zeek.ocsp.update.this': { - category: 'zeek', - description: 'The time at which the status being shows is known to have been correct. ', - name: 'zeek.ocsp.update.this', - type: 'date', - }, - 'zeek.ocsp.update.next': { - category: 'zeek', - description: - 'The latest time at which new information about the status of the certificate will be available. ', - name: 'zeek.ocsp.update.next', - type: 'date', - }, - 'zeek.pe.client': { - category: 'zeek', - description: "The client's version string. ", - name: 'zeek.pe.client', - type: 'keyword', - }, - 'zeek.pe.id': { - category: 'zeek', - description: 'File id of this portable executable file. ', - name: 'zeek.pe.id', - type: 'keyword', - }, - 'zeek.pe.machine': { - category: 'zeek', - description: 'The target machine that the file was compiled for. ', - name: 'zeek.pe.machine', - type: 'keyword', - }, - 'zeek.pe.compile_time': { - category: 'zeek', - description: 'The time that the file was created at. ', - name: 'zeek.pe.compile_time', - type: 'date', - }, - 'zeek.pe.os': { - category: 'zeek', - description: 'The required operating system. ', - name: 'zeek.pe.os', - type: 'keyword', - }, - 'zeek.pe.subsystem': { - category: 'zeek', - description: 'The subsystem that is required to run this file. ', - name: 'zeek.pe.subsystem', - type: 'keyword', - }, - 'zeek.pe.is_exe': { - category: 'zeek', - description: 'Is the file an executable, or just an object file? ', - name: 'zeek.pe.is_exe', - type: 'boolean', - }, - 'zeek.pe.is_64bit': { - category: 'zeek', - description: 'Is the file a 64-bit executable? ', - name: 'zeek.pe.is_64bit', - type: 'boolean', - }, - 'zeek.pe.uses_aslr': { - category: 'zeek', - description: 'Does the file support Address Space Layout Randomization? ', - name: 'zeek.pe.uses_aslr', - type: 'boolean', - }, - 'zeek.pe.uses_dep': { - category: 'zeek', - description: 'Does the file support Data Execution Prevention? ', - name: 'zeek.pe.uses_dep', - type: 'boolean', - }, - 'zeek.pe.uses_code_integrity': { - category: 'zeek', - description: 'Does the file enforce code integrity checks? ', - name: 'zeek.pe.uses_code_integrity', - type: 'boolean', - }, - 'zeek.pe.uses_seh': { - category: 'zeek', - description: 'Does the file use structured exception handing? ', - name: 'zeek.pe.uses_seh', - type: 'boolean', - }, - 'zeek.pe.has_import_table': { - category: 'zeek', - description: 'Does the file have an import table? ', - name: 'zeek.pe.has_import_table', - type: 'boolean', - }, - 'zeek.pe.has_export_table': { - category: 'zeek', - description: 'Does the file have an export table? ', - name: 'zeek.pe.has_export_table', - type: 'boolean', - }, - 'zeek.pe.has_cert_table': { - category: 'zeek', - description: 'Does the file have an attribute certificate table? ', - name: 'zeek.pe.has_cert_table', - type: 'boolean', - }, - 'zeek.pe.has_debug_data': { - category: 'zeek', - description: 'Does the file have a debug table? ', - name: 'zeek.pe.has_debug_data', - type: 'boolean', - }, - 'zeek.pe.section_names': { - category: 'zeek', - description: 'The names of the sections, in order. ', - name: 'zeek.pe.section_names', - type: 'keyword', - }, - 'zeek.radius.username': { - category: 'zeek', - description: 'The username, if present. ', - name: 'zeek.radius.username', - type: 'keyword', - }, - 'zeek.radius.mac': { - category: 'zeek', - description: 'MAC address, if present. ', - name: 'zeek.radius.mac', - type: 'keyword', - }, - 'zeek.radius.framed_addr': { - category: 'zeek', - description: - 'The address given to the network access server, if present. This is only a hint from the RADIUS server and the network access server is not required to honor the address. ', - name: 'zeek.radius.framed_addr', - type: 'ip', - }, - 'zeek.radius.remote_ip': { - category: 'zeek', - description: - 'Remote IP address, if present. This is collected from the Tunnel-Client-Endpoint attribute. ', - name: 'zeek.radius.remote_ip', - type: 'ip', - }, - 'zeek.radius.connect_info': { - category: 'zeek', - description: 'Connect info, if present. ', - name: 'zeek.radius.connect_info', - type: 'keyword', - }, - 'zeek.radius.reply_msg': { - category: 'zeek', - description: - 'Reply message from the server challenge. This is frequently shown to the user authenticating. ', - name: 'zeek.radius.reply_msg', - type: 'keyword', - }, - 'zeek.radius.result': { - category: 'zeek', - description: 'Successful or failed authentication. ', - name: 'zeek.radius.result', - type: 'keyword', - }, - 'zeek.radius.ttl': { - category: 'zeek', - description: - 'The duration between the first request and either the "Access-Accept" message or an error. If the field is empty, it means that either the request or response was not seen. ', - name: 'zeek.radius.ttl', - type: 'integer', - }, - 'zeek.radius.logged': { - category: 'zeek', - description: 'Whether this has already been logged and can be ignored. ', - name: 'zeek.radius.logged', - type: 'boolean', - }, - 'zeek.rdp.cookie': { - category: 'zeek', - description: 'Cookie value used by the client machine. This is typically a username. ', - name: 'zeek.rdp.cookie', - type: 'keyword', - }, - 'zeek.rdp.result': { - category: 'zeek', - description: - "Status result for the connection. It's a mix between RDP negotation failure messages and GCC server create response messages. ", - name: 'zeek.rdp.result', - type: 'keyword', - }, - 'zeek.rdp.security_protocol': { - category: 'zeek', - description: 'Security protocol chosen by the server. ', - name: 'zeek.rdp.security_protocol', - type: 'keyword', - }, - 'zeek.rdp.keyboard_layout': { - category: 'zeek', - description: 'Keyboard layout (language) of the client machine. ', - name: 'zeek.rdp.keyboard_layout', - type: 'keyword', - }, - 'zeek.rdp.client.build': { - category: 'zeek', - description: 'RDP client version used by the client machine. ', - name: 'zeek.rdp.client.build', - type: 'keyword', - }, - 'zeek.rdp.client.client_name': { - category: 'zeek', - description: 'Name of the client machine. ', - name: 'zeek.rdp.client.client_name', - type: 'keyword', - }, - 'zeek.rdp.client.product_id': { - category: 'zeek', - description: 'Product ID of the client machine. ', - name: 'zeek.rdp.client.product_id', - type: 'keyword', - }, - 'zeek.rdp.desktop.width': { - category: 'zeek', - description: 'Desktop width of the client machine. ', - name: 'zeek.rdp.desktop.width', - type: 'integer', - }, - 'zeek.rdp.desktop.height': { - category: 'zeek', - description: 'Desktop height of the client machine. ', - name: 'zeek.rdp.desktop.height', - type: 'integer', - }, - 'zeek.rdp.desktop.color_depth': { - category: 'zeek', - description: 'The color depth requested by the client in the high_color_depth field. ', - name: 'zeek.rdp.desktop.color_depth', - type: 'keyword', - }, - 'zeek.rdp.cert.type': { - category: 'zeek', - description: - 'If the connection is being encrypted with native RDP encryption, this is the type of cert being used. ', - name: 'zeek.rdp.cert.type', - type: 'keyword', - }, - 'zeek.rdp.cert.count': { - category: 'zeek', - description: 'The number of certs seen. X.509 can transfer an entire certificate chain. ', - name: 'zeek.rdp.cert.count', - type: 'integer', - }, - 'zeek.rdp.cert.permanent': { - category: 'zeek', - description: - 'Indicates if the provided certificate or certificate chain is permanent or temporary. ', - name: 'zeek.rdp.cert.permanent', - type: 'boolean', - }, - 'zeek.rdp.encryption.level': { - category: 'zeek', - description: 'Encryption level of the connection. ', - name: 'zeek.rdp.encryption.level', - type: 'keyword', - }, - 'zeek.rdp.encryption.method': { - category: 'zeek', - description: 'Encryption method of the connection. ', - name: 'zeek.rdp.encryption.method', - type: 'keyword', - }, - 'zeek.rdp.done': { - category: 'zeek', - description: 'Track status of logging RDP connections. ', - name: 'zeek.rdp.done', - type: 'boolean', - }, - 'zeek.rdp.ssl': { - category: 'zeek', - description: - '(present if policy/protocols/rdp/indicate_ssl.bro is loaded) Flag the connection if it was seen over SSL. ', - name: 'zeek.rdp.ssl', - type: 'boolean', - }, - 'zeek.rfb.version.client.major': { - category: 'zeek', - description: 'Major version of the client. ', - name: 'zeek.rfb.version.client.major', - type: 'keyword', - }, - 'zeek.rfb.version.client.minor': { - category: 'zeek', - description: 'Minor version of the client. ', - name: 'zeek.rfb.version.client.minor', - type: 'keyword', - }, - 'zeek.rfb.version.server.major': { - category: 'zeek', - description: 'Major version of the server. ', - name: 'zeek.rfb.version.server.major', - type: 'keyword', - }, - 'zeek.rfb.version.server.minor': { - category: 'zeek', - description: 'Minor version of the server. ', - name: 'zeek.rfb.version.server.minor', - type: 'keyword', - }, - 'zeek.rfb.auth.success': { - category: 'zeek', - description: 'Whether or not authentication was successful. ', - name: 'zeek.rfb.auth.success', - type: 'boolean', - }, - 'zeek.rfb.auth.method': { - category: 'zeek', - description: 'Identifier of authentication method used. ', - name: 'zeek.rfb.auth.method', - type: 'keyword', - }, - 'zeek.rfb.share_flag': { - category: 'zeek', - description: 'Whether the client has an exclusive or a shared session. ', - name: 'zeek.rfb.share_flag', - type: 'boolean', - }, - 'zeek.rfb.desktop_name': { - category: 'zeek', - description: 'Name of the screen that is being shared. ', - name: 'zeek.rfb.desktop_name', - type: 'keyword', - }, - 'zeek.rfb.width': { - category: 'zeek', - description: 'Width of the screen that is being shared. ', - name: 'zeek.rfb.width', - type: 'integer', - }, - 'zeek.rfb.height': { - category: 'zeek', - description: 'Height of the screen that is being shared. ', - name: 'zeek.rfb.height', - type: 'integer', - }, - 'zeek.signature.note': { - category: 'zeek', - description: 'Notice associated with signature event. ', - name: 'zeek.signature.note', - type: 'keyword', - }, - 'zeek.signature.sig_id': { - category: 'zeek', - description: 'The name of the signature that matched. ', - name: 'zeek.signature.sig_id', - type: 'keyword', - }, - 'zeek.signature.event_msg': { - category: 'zeek', - description: 'A more descriptive message of the signature-matching event. ', - name: 'zeek.signature.event_msg', - type: 'keyword', - }, - 'zeek.signature.sub_msg': { - category: 'zeek', - description: 'Extracted payload data or extra message. ', - name: 'zeek.signature.sub_msg', - type: 'keyword', - }, - 'zeek.signature.sig_count': { - category: 'zeek', - description: 'Number of sigs, usually from summary count. ', - name: 'zeek.signature.sig_count', - type: 'integer', - }, - 'zeek.signature.host_count': { - category: 'zeek', - description: 'Number of hosts, from a summary count. ', - name: 'zeek.signature.host_count', - type: 'integer', - }, - 'zeek.sip.transaction_depth': { - category: 'zeek', - description: - 'Represents the pipelined depth into the connection of this request/response transaction. ', - name: 'zeek.sip.transaction_depth', - type: 'integer', - }, - 'zeek.sip.sequence.method': { - category: 'zeek', - description: 'Verb used in the SIP request (INVITE, REGISTER etc.). ', - name: 'zeek.sip.sequence.method', - type: 'keyword', - }, - 'zeek.sip.sequence.number': { - category: 'zeek', - description: 'Contents of the CSeq: header from the client. ', - name: 'zeek.sip.sequence.number', - type: 'keyword', - }, - 'zeek.sip.uri': { - category: 'zeek', - description: 'URI used in the request. ', - name: 'zeek.sip.uri', - type: 'keyword', - }, - 'zeek.sip.date': { - category: 'zeek', - description: 'Contents of the Date: header from the client. ', - name: 'zeek.sip.date', - type: 'keyword', - }, - 'zeek.sip.request.from': { - category: 'zeek', - description: - "Contents of the request From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ", - name: 'zeek.sip.request.from', - type: 'keyword', - }, - 'zeek.sip.request.to': { - category: 'zeek', - description: 'Contents of the To: header. ', - name: 'zeek.sip.request.to', - type: 'keyword', - }, - 'zeek.sip.request.path': { - category: 'zeek', - description: 'The client message transmission path, as extracted from the headers. ', - name: 'zeek.sip.request.path', - type: 'keyword', - }, - 'zeek.sip.request.body_length': { - category: 'zeek', - description: 'Contents of the Content-Length: header from the client. ', - name: 'zeek.sip.request.body_length', - type: 'long', - }, - 'zeek.sip.response.from': { - category: 'zeek', - description: - "Contents of the response From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ", - name: 'zeek.sip.response.from', - type: 'keyword', - }, - 'zeek.sip.response.to': { - category: 'zeek', - description: 'Contents of the response To: header. ', - name: 'zeek.sip.response.to', - type: 'keyword', - }, - 'zeek.sip.response.path': { - category: 'zeek', - description: 'The server message transmission path, as extracted from the headers. ', - name: 'zeek.sip.response.path', - type: 'keyword', - }, - 'zeek.sip.response.body_length': { - category: 'zeek', - description: 'Contents of the Content-Length: header from the server. ', - name: 'zeek.sip.response.body_length', - type: 'long', - }, - 'zeek.sip.reply_to': { - category: 'zeek', - description: 'Contents of the Reply-To: header. ', - name: 'zeek.sip.reply_to', - type: 'keyword', - }, - 'zeek.sip.call_id': { - category: 'zeek', - description: 'Contents of the Call-ID: header from the client. ', - name: 'zeek.sip.call_id', - type: 'keyword', - }, - 'zeek.sip.subject': { - category: 'zeek', - description: 'Contents of the Subject: header from the client. ', - name: 'zeek.sip.subject', - type: 'keyword', - }, - 'zeek.sip.user_agent': { - category: 'zeek', - description: 'Contents of the User-Agent: header from the client. ', - name: 'zeek.sip.user_agent', - type: 'keyword', - }, - 'zeek.sip.status.code': { - category: 'zeek', - description: 'Status code returned by the server. ', - name: 'zeek.sip.status.code', - type: 'integer', - }, - 'zeek.sip.status.msg': { - category: 'zeek', - description: 'Status message returned by the server. ', - name: 'zeek.sip.status.msg', - type: 'keyword', - }, - 'zeek.sip.warning': { - category: 'zeek', - description: 'Contents of the Warning: header. ', - name: 'zeek.sip.warning', - type: 'keyword', - }, - 'zeek.sip.content_type': { - category: 'zeek', - description: 'Contents of the Content-Type: header from the server. ', - name: 'zeek.sip.content_type', - type: 'keyword', - }, - 'zeek.smb_cmd.command': { - category: 'zeek', - description: 'The command sent by the client. ', - name: 'zeek.smb_cmd.command', - type: 'keyword', - }, - 'zeek.smb_cmd.sub_command': { - category: 'zeek', - description: 'The subcommand sent by the client, if present. ', - name: 'zeek.smb_cmd.sub_command', - type: 'keyword', - }, - 'zeek.smb_cmd.argument': { - category: 'zeek', - description: 'Command argument sent by the client, if any. ', - name: 'zeek.smb_cmd.argument', - type: 'keyword', - }, - 'zeek.smb_cmd.status': { - category: 'zeek', - description: "Server reply to the client's command. ", - name: 'zeek.smb_cmd.status', - type: 'keyword', - }, - 'zeek.smb_cmd.rtt': { - category: 'zeek', - description: 'Round trip time from the request to the response. ', - name: 'zeek.smb_cmd.rtt', - type: 'double', - }, - 'zeek.smb_cmd.version': { - category: 'zeek', - description: 'Version of SMB for the command. ', - name: 'zeek.smb_cmd.version', - type: 'keyword', - }, - 'zeek.smb_cmd.username': { - category: 'zeek', - description: 'Authenticated username, if available. ', - name: 'zeek.smb_cmd.username', - type: 'keyword', - }, - 'zeek.smb_cmd.tree': { - category: 'zeek', - description: - 'If this is related to a tree, this is the tree that was used for the current command. ', - name: 'zeek.smb_cmd.tree', - type: 'keyword', - }, - 'zeek.smb_cmd.tree_service': { - category: 'zeek', - description: 'The type of tree (disk share, printer share, named pipe, etc.). ', - name: 'zeek.smb_cmd.tree_service', - type: 'keyword', - }, - 'zeek.smb_cmd.file.name': { - category: 'zeek', - description: 'Filename if one was seen. ', - name: 'zeek.smb_cmd.file.name', - type: 'keyword', - }, - 'zeek.smb_cmd.file.action': { - category: 'zeek', - description: 'Action this log record represents. ', - name: 'zeek.smb_cmd.file.action', - type: 'keyword', - }, - 'zeek.smb_cmd.file.uid': { - category: 'zeek', - description: 'UID of the referenced file. ', - name: 'zeek.smb_cmd.file.uid', - type: 'keyword', - }, - 'zeek.smb_cmd.file.host.tx': { - category: 'zeek', - description: 'Address of the transmitting host. ', - name: 'zeek.smb_cmd.file.host.tx', - type: 'ip', - }, - 'zeek.smb_cmd.file.host.rx': { - category: 'zeek', - description: 'Address of the receiving host. ', - name: 'zeek.smb_cmd.file.host.rx', - type: 'ip', - }, - 'zeek.smb_cmd.smb1_offered_dialects': { - category: 'zeek', - description: - 'Present if base/protocols/smb/smb1-main.bro is loaded. Dialects offered by the client. ', - name: 'zeek.smb_cmd.smb1_offered_dialects', - type: 'keyword', - }, - 'zeek.smb_cmd.smb2_offered_dialects': { - category: 'zeek', - description: - 'Present if base/protocols/smb/smb2-main.bro is loaded. Dialects offered by the client. ', - name: 'zeek.smb_cmd.smb2_offered_dialects', - type: 'integer', - }, - 'zeek.smb_files.action': { - category: 'zeek', - description: 'Action this log record represents. ', - name: 'zeek.smb_files.action', - type: 'keyword', - }, - 'zeek.smb_files.fid': { - category: 'zeek', - description: 'ID referencing this file. ', - name: 'zeek.smb_files.fid', - type: 'integer', - }, - 'zeek.smb_files.name': { - category: 'zeek', - description: 'Filename if one was seen. ', - name: 'zeek.smb_files.name', - type: 'keyword', - }, - 'zeek.smb_files.path': { - category: 'zeek', - description: 'Path pulled from the tree this file was transferred to or from. ', - name: 'zeek.smb_files.path', - type: 'keyword', - }, - 'zeek.smb_files.previous_name': { - category: 'zeek', - description: "If the rename action was seen, this will be the file's previous name. ", - name: 'zeek.smb_files.previous_name', - type: 'keyword', - }, - 'zeek.smb_files.size': { - category: 'zeek', - description: 'Byte size of the file. ', - name: 'zeek.smb_files.size', - type: 'long', - }, - 'zeek.smb_files.times.accessed': { - category: 'zeek', - description: "The file's access time. ", - name: 'zeek.smb_files.times.accessed', - type: 'date', - }, - 'zeek.smb_files.times.changed': { - category: 'zeek', - description: "The file's change time. ", - name: 'zeek.smb_files.times.changed', - type: 'date', - }, - 'zeek.smb_files.times.created': { - category: 'zeek', - description: "The file's create time. ", - name: 'zeek.smb_files.times.created', - type: 'date', - }, - 'zeek.smb_files.times.modified': { - category: 'zeek', - description: "The file's modify time. ", - name: 'zeek.smb_files.times.modified', - type: 'date', - }, - 'zeek.smb_files.uuid': { - category: 'zeek', - description: 'UUID referencing this file if DCE/RPC. ', - name: 'zeek.smb_files.uuid', - type: 'keyword', - }, - 'zeek.smb_mapping.path': { - category: 'zeek', - description: 'Name of the tree path. ', - name: 'zeek.smb_mapping.path', - type: 'keyword', - }, - 'zeek.smb_mapping.service': { - category: 'zeek', - description: 'The type of resource of the tree (disk share, printer share, named pipe, etc.). ', - name: 'zeek.smb_mapping.service', - type: 'keyword', - }, - 'zeek.smb_mapping.native_file_system': { - category: 'zeek', - description: 'File system of the tree. ', - name: 'zeek.smb_mapping.native_file_system', - type: 'keyword', - }, - 'zeek.smb_mapping.share_type': { - category: 'zeek', - description: - 'If this is SMB2, a share type will be included. For SMB1, the type of share will be deduced and included as well. ', - name: 'zeek.smb_mapping.share_type', - type: 'keyword', - }, - 'zeek.smtp.transaction_depth': { - category: 'zeek', - description: - 'A count to represent the depth of this message transaction in a single connection where multiple messages were transferred. ', - name: 'zeek.smtp.transaction_depth', - type: 'integer', - }, - 'zeek.smtp.helo': { - category: 'zeek', - description: 'Contents of the Helo header. ', - name: 'zeek.smtp.helo', - type: 'keyword', - }, - 'zeek.smtp.mail_from': { - category: 'zeek', - description: 'Email addresses found in the MAIL FROM header. ', - name: 'zeek.smtp.mail_from', - type: 'keyword', - }, - 'zeek.smtp.rcpt_to': { - category: 'zeek', - description: 'Email addresses found in the RCPT TO header. ', - name: 'zeek.smtp.rcpt_to', - type: 'keyword', - }, - 'zeek.smtp.date': { - category: 'zeek', - description: 'Contents of the Date header. ', - name: 'zeek.smtp.date', - type: 'date', - }, - 'zeek.smtp.from': { - category: 'zeek', - description: 'Contents of the From header. ', - name: 'zeek.smtp.from', - type: 'keyword', - }, - 'zeek.smtp.to': { - category: 'zeek', - description: 'Contents of the To header. ', - name: 'zeek.smtp.to', - type: 'keyword', - }, - 'zeek.smtp.cc': { - category: 'zeek', - description: 'Contents of the CC header. ', - name: 'zeek.smtp.cc', - type: 'keyword', - }, - 'zeek.smtp.reply_to': { - category: 'zeek', - description: 'Contents of the ReplyTo header. ', - name: 'zeek.smtp.reply_to', - type: 'keyword', - }, - 'zeek.smtp.msg_id': { - category: 'zeek', - description: 'Contents of the MsgID header. ', - name: 'zeek.smtp.msg_id', - type: 'keyword', - }, - 'zeek.smtp.in_reply_to': { - category: 'zeek', - description: 'Contents of the In-Reply-To header. ', - name: 'zeek.smtp.in_reply_to', - type: 'keyword', - }, - 'zeek.smtp.subject': { - category: 'zeek', - description: 'Contents of the Subject header. ', - name: 'zeek.smtp.subject', - type: 'keyword', - }, - 'zeek.smtp.x_originating_ip': { - category: 'zeek', - description: 'Contents of the X-Originating-IP header. ', - name: 'zeek.smtp.x_originating_ip', - type: 'keyword', - }, - 'zeek.smtp.first_received': { - category: 'zeek', - description: 'Contents of the first Received header. ', - name: 'zeek.smtp.first_received', - type: 'keyword', - }, - 'zeek.smtp.second_received': { - category: 'zeek', - description: 'Contents of the second Received header. ', - name: 'zeek.smtp.second_received', - type: 'keyword', - }, - 'zeek.smtp.last_reply': { - category: 'zeek', - description: 'The last message that the server sent to the client. ', - name: 'zeek.smtp.last_reply', - type: 'keyword', - }, - 'zeek.smtp.path': { - category: 'zeek', - description: 'The message transmission path, as extracted from the headers. ', - name: 'zeek.smtp.path', - type: 'ip', - }, - 'zeek.smtp.user_agent': { - category: 'zeek', - description: 'Value of the User-Agent header from the client. ', - name: 'zeek.smtp.user_agent', - type: 'keyword', - }, - 'zeek.smtp.tls': { - category: 'zeek', - description: 'Indicates that the connection has switched to using TLS. ', - name: 'zeek.smtp.tls', - type: 'boolean', - }, - 'zeek.smtp.process_received_from': { - category: 'zeek', - description: 'Indicates if the "Received: from" headers should still be processed. ', - name: 'zeek.smtp.process_received_from', - type: 'boolean', - }, - 'zeek.smtp.has_client_activity': { - category: 'zeek', - description: 'Indicates if client activity has been seen, but not yet logged. ', - name: 'zeek.smtp.has_client_activity', - type: 'boolean', - }, - 'zeek.smtp.fuids': { - category: 'zeek', - description: - '(present if base/protocols/smtp/files.bro is loaded) An ordered vector of file unique IDs seen attached to the message. ', - name: 'zeek.smtp.fuids', - type: 'keyword', - }, - 'zeek.smtp.is_webmail': { - category: 'zeek', - description: 'Indicates if the message was sent through a webmail interface. ', - name: 'zeek.smtp.is_webmail', - type: 'boolean', - }, - 'zeek.snmp.duration': { - category: 'zeek', - description: - 'The amount of time between the first packet beloning to the SNMP session and the latest one seen. ', - name: 'zeek.snmp.duration', - type: 'double', - }, - 'zeek.snmp.version': { - category: 'zeek', - description: 'The version of SNMP being used. ', - name: 'zeek.snmp.version', - type: 'keyword', - }, - 'zeek.snmp.community': { - category: 'zeek', - description: - "The community string of the first SNMP packet associated with the session. This is used as part of SNMP's (v1 and v2c) administrative/security framework. See RFC 1157 or RFC 1901. ", - name: 'zeek.snmp.community', - type: 'keyword', - }, - 'zeek.snmp.get.requests': { - category: 'zeek', - description: - 'The number of variable bindings in GetRequest/GetNextRequest PDUs seen for the session. ', - name: 'zeek.snmp.get.requests', - type: 'integer', - }, - 'zeek.snmp.get.bulk_requests': { - category: 'zeek', - description: 'The number of variable bindings in GetBulkRequest PDUs seen for the session. ', - name: 'zeek.snmp.get.bulk_requests', - type: 'integer', - }, - 'zeek.snmp.get.responses': { - category: 'zeek', - description: - 'The number of variable bindings in GetResponse/Response PDUs seen for the session. ', - name: 'zeek.snmp.get.responses', - type: 'integer', - }, - 'zeek.snmp.set.requests': { - category: 'zeek', - description: 'The number of variable bindings in SetRequest PDUs seen for the session. ', - name: 'zeek.snmp.set.requests', - type: 'integer', - }, - 'zeek.snmp.display_string': { - category: 'zeek', - description: 'A system description of the SNMP responder endpoint. ', - name: 'zeek.snmp.display_string', - type: 'keyword', - }, - 'zeek.snmp.up_since': { - category: 'zeek', - description: "The time at which the SNMP responder endpoint claims it's been up since. ", - name: 'zeek.snmp.up_since', - type: 'date', - }, - 'zeek.socks.version': { - category: 'zeek', - description: 'Protocol version of SOCKS. ', - name: 'zeek.socks.version', - type: 'integer', - }, - 'zeek.socks.user': { - category: 'zeek', - description: 'Username used to request a login to the proxy. ', - name: 'zeek.socks.user', - type: 'keyword', - }, - 'zeek.socks.password': { - category: 'zeek', - description: 'Password used to request a login to the proxy. ', - name: 'zeek.socks.password', - type: 'keyword', - }, - 'zeek.socks.status': { - category: 'zeek', - description: 'Server status for the attempt at using the proxy. ', - name: 'zeek.socks.status', - type: 'keyword', - }, - 'zeek.socks.request.host': { - category: 'zeek', - description: 'Client requested SOCKS address. Could be an address, a name or both. ', - name: 'zeek.socks.request.host', - type: 'keyword', - }, - 'zeek.socks.request.port': { - category: 'zeek', - description: 'Client requested port. ', - name: 'zeek.socks.request.port', - type: 'integer', - }, - 'zeek.socks.bound.host': { - category: 'zeek', - description: 'Server bound address. Could be an address, a name or both. ', - name: 'zeek.socks.bound.host', - type: 'keyword', - }, - 'zeek.socks.bound.port': { - category: 'zeek', - description: 'Server bound port. ', - name: 'zeek.socks.bound.port', - type: 'integer', - }, - 'zeek.socks.capture_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.socks.capture_password', - type: 'boolean', - }, - 'zeek.ssh.client': { - category: 'zeek', - description: "The client's version string. ", - name: 'zeek.ssh.client', - type: 'keyword', - }, - 'zeek.ssh.direction': { - category: 'zeek', - description: - 'Direction of the connection. If the client was a local host logging into an external host, this would be OUTBOUND. INBOUND would be set for the opposite situation. ', - name: 'zeek.ssh.direction', - type: 'keyword', - }, - 'zeek.ssh.host_key': { - category: 'zeek', - description: "The server's key thumbprint. ", - name: 'zeek.ssh.host_key', - type: 'keyword', - }, - 'zeek.ssh.server': { - category: 'zeek', - description: "The server's version string. ", - name: 'zeek.ssh.server', - type: 'keyword', - }, - 'zeek.ssh.version': { - category: 'zeek', - description: 'SSH major version (1 or 2). ', - name: 'zeek.ssh.version', - type: 'integer', - }, - 'zeek.ssh.algorithm.cipher': { - category: 'zeek', - description: 'The encryption algorithm in use. ', - name: 'zeek.ssh.algorithm.cipher', - type: 'keyword', - }, - 'zeek.ssh.algorithm.compression': { - category: 'zeek', - description: 'The compression algorithm in use. ', - name: 'zeek.ssh.algorithm.compression', - type: 'keyword', - }, - 'zeek.ssh.algorithm.host_key': { - category: 'zeek', - description: "The server host key's algorithm. ", - name: 'zeek.ssh.algorithm.host_key', - type: 'keyword', - }, - 'zeek.ssh.algorithm.key_exchange': { - category: 'zeek', - description: 'The key exchange algorithm in use. ', - name: 'zeek.ssh.algorithm.key_exchange', - type: 'keyword', - }, - 'zeek.ssh.algorithm.mac': { - category: 'zeek', - description: 'The signing (MAC) algorithm in use. ', - name: 'zeek.ssh.algorithm.mac', - type: 'keyword', - }, - 'zeek.ssh.auth.attempts': { - category: 'zeek', - description: - "The number of authentication attemps we observed. There's always at least one, since some servers might support no authentication at all. It's important to note that not all of these are failures, since some servers require two-factor auth (e.g. password AND pubkey). ", - name: 'zeek.ssh.auth.attempts', - type: 'integer', - }, - 'zeek.ssh.auth.success': { - category: 'zeek', - description: 'Authentication result. ', - name: 'zeek.ssh.auth.success', - type: 'boolean', - }, - 'zeek.ssl.version': { - category: 'zeek', - description: 'SSL/TLS version that was logged. ', - name: 'zeek.ssl.version', - type: 'keyword', - }, - 'zeek.ssl.cipher': { - category: 'zeek', - description: 'SSL/TLS cipher suite that was logged. ', - name: 'zeek.ssl.cipher', - type: 'keyword', - }, - 'zeek.ssl.curve': { - category: 'zeek', - description: 'Elliptic curve that was logged when using ECDH/ECDHE. ', - name: 'zeek.ssl.curve', - type: 'keyword', - }, - 'zeek.ssl.resumed': { - category: 'zeek', - description: - 'Flag to indicate if the session was resumed reusing the key material exchanged in an earlier connection. ', - name: 'zeek.ssl.resumed', - type: 'boolean', - }, - 'zeek.ssl.next_protocol': { - category: 'zeek', - description: - 'Next protocol the server chose using the application layer next protocol extension. ', - name: 'zeek.ssl.next_protocol', - type: 'keyword', - }, - 'zeek.ssl.established': { - category: 'zeek', - description: 'Flag to indicate if this ssl session has been established successfully. ', - name: 'zeek.ssl.established', - type: 'boolean', - }, - 'zeek.ssl.validation.status': { - category: 'zeek', - description: 'Result of certificate validation for this connection. ', - name: 'zeek.ssl.validation.status', - type: 'keyword', - }, - 'zeek.ssl.validation.code': { - category: 'zeek', - description: - 'Result of certificate validation for this connection, given as OpenSSL validation code. ', - name: 'zeek.ssl.validation.code', - type: 'keyword', - }, - 'zeek.ssl.last_alert': { - category: 'zeek', - description: 'Last alert that was seen during the connection. ', - name: 'zeek.ssl.last_alert', - type: 'keyword', - }, - 'zeek.ssl.server.name': { - category: 'zeek', - description: - 'Value of the Server Name Indicator SSL/TLS extension. It indicates the server name that the client was requesting. ', - name: 'zeek.ssl.server.name', - type: 'keyword', - }, - 'zeek.ssl.server.cert_chain': { - category: 'zeek', - description: - 'Chain of certificates offered by the server to validate its complete signing chain. ', - name: 'zeek.ssl.server.cert_chain', - type: 'keyword', - }, - 'zeek.ssl.server.cert_chain_fuids': { - category: 'zeek', - description: - 'An ordered vector of certificate file identifiers for the certificates offered by the server. ', - name: 'zeek.ssl.server.cert_chain_fuids', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.common_name': { - category: 'zeek', - description: 'Common name of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.common_name', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.country': { - category: 'zeek', - description: 'Country code of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.country', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.locality': { - category: 'zeek', - description: 'Locality of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.locality', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.organization': { - category: 'zeek', - description: 'Organization of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.organization', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.organizational_unit': { - category: 'zeek', - description: - 'Organizational unit of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.organizational_unit', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.state': { - category: 'zeek', - description: - 'State or province name of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.state', - type: 'keyword', - }, - 'zeek.ssl.server.subject.common_name': { - category: 'zeek', - description: 'Common name of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.common_name', - type: 'keyword', - }, - 'zeek.ssl.server.subject.country': { - category: 'zeek', - description: 'Country code of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.country', - type: 'keyword', - }, - 'zeek.ssl.server.subject.locality': { - category: 'zeek', - description: 'Locality of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.locality', - type: 'keyword', - }, - 'zeek.ssl.server.subject.organization': { - category: 'zeek', - description: 'Organization of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.organization', - type: 'keyword', - }, - 'zeek.ssl.server.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.organizational_unit', - type: 'keyword', - }, - 'zeek.ssl.server.subject.state': { - category: 'zeek', - description: 'State or province name of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.state', - type: 'keyword', - }, - 'zeek.ssl.client.cert_chain': { - category: 'zeek', - description: - 'Chain of certificates offered by the client to validate its complete signing chain. ', - name: 'zeek.ssl.client.cert_chain', - type: 'keyword', - }, - 'zeek.ssl.client.cert_chain_fuids': { - category: 'zeek', - description: - 'An ordered vector of certificate file identifiers for the certificates offered by the client. ', - name: 'zeek.ssl.client.cert_chain_fuids', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.common_name': { - category: 'zeek', - description: 'Common name of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.common_name', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.country': { - category: 'zeek', - description: 'Country code of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.country', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.locality': { - category: 'zeek', - description: 'Locality of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.locality', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.organization': { - category: 'zeek', - description: 'Organization of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.organization', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.organizational_unit': { - category: 'zeek', - description: - 'Organizational unit of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.organizational_unit', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.state': { - category: 'zeek', - description: - 'State or province name of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.state', - type: 'keyword', - }, - 'zeek.ssl.client.subject.common_name': { - category: 'zeek', - description: 'Common name of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.common_name', - type: 'keyword', - }, - 'zeek.ssl.client.subject.country': { - category: 'zeek', - description: 'Country code of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.country', - type: 'keyword', - }, - 'zeek.ssl.client.subject.locality': { - category: 'zeek', - description: 'Locality of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.locality', - type: 'keyword', - }, - 'zeek.ssl.client.subject.organization': { - category: 'zeek', - description: 'Organization of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.organization', - type: 'keyword', - }, - 'zeek.ssl.client.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.organizational_unit', - type: 'keyword', - }, - 'zeek.ssl.client.subject.state': { - category: 'zeek', - description: 'State or province name of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.state', - type: 'keyword', - }, - 'zeek.stats.peer': { - category: 'zeek', - description: 'Peer that generated this log. Mostly for clusters. ', - name: 'zeek.stats.peer', - type: 'keyword', - }, - 'zeek.stats.memory': { - category: 'zeek', - description: 'Amount of memory currently in use in MB. ', - name: 'zeek.stats.memory', - type: 'integer', - }, - 'zeek.stats.packets.processed': { - category: 'zeek', - description: 'Number of packets processed since the last stats interval. ', - name: 'zeek.stats.packets.processed', - type: 'long', - }, - 'zeek.stats.packets.dropped': { - category: 'zeek', - description: - 'Number of packets dropped since the last stats interval if reading live traffic. ', - name: 'zeek.stats.packets.dropped', - type: 'long', - }, - 'zeek.stats.packets.received': { - category: 'zeek', - description: - 'Number of packets seen on the link since the last stats interval if reading live traffic. ', - name: 'zeek.stats.packets.received', - type: 'long', - }, - 'zeek.stats.bytes.received': { - category: 'zeek', - description: 'Number of bytes received since the last stats interval if reading live traffic. ', - name: 'zeek.stats.bytes.received', - type: 'long', - }, - 'zeek.stats.connections.tcp.active': { - category: 'zeek', - description: 'TCP connections currently in memory. ', - name: 'zeek.stats.connections.tcp.active', - type: 'integer', - }, - 'zeek.stats.connections.tcp.count': { - category: 'zeek', - description: 'TCP connections seen since last stats interval. ', - name: 'zeek.stats.connections.tcp.count', - type: 'integer', - }, - 'zeek.stats.connections.udp.active': { - category: 'zeek', - description: 'UDP connections currently in memory. ', - name: 'zeek.stats.connections.udp.active', - type: 'integer', - }, - 'zeek.stats.connections.udp.count': { - category: 'zeek', - description: 'UDP connections seen since last stats interval. ', - name: 'zeek.stats.connections.udp.count', - type: 'integer', - }, - 'zeek.stats.connections.icmp.active': { - category: 'zeek', - description: 'ICMP connections currently in memory. ', - name: 'zeek.stats.connections.icmp.active', - type: 'integer', - }, - 'zeek.stats.connections.icmp.count': { - category: 'zeek', - description: 'ICMP connections seen since last stats interval. ', - name: 'zeek.stats.connections.icmp.count', - type: 'integer', - }, - 'zeek.stats.events.processed': { - category: 'zeek', - description: 'Number of events processed since the last stats interval. ', - name: 'zeek.stats.events.processed', - type: 'integer', - }, - 'zeek.stats.events.queued': { - category: 'zeek', - description: 'Number of events that have been queued since the last stats interval. ', - name: 'zeek.stats.events.queued', - type: 'integer', - }, - 'zeek.stats.timers.count': { - category: 'zeek', - description: 'Number of timers scheduled since last stats interval. ', - name: 'zeek.stats.timers.count', - type: 'integer', - }, - 'zeek.stats.timers.active': { - category: 'zeek', - description: 'Current number of scheduled timers. ', - name: 'zeek.stats.timers.active', - type: 'integer', - }, - 'zeek.stats.files.count': { - category: 'zeek', - description: 'Number of files seen since last stats interval. ', - name: 'zeek.stats.files.count', - type: 'integer', - }, - 'zeek.stats.files.active': { - category: 'zeek', - description: 'Current number of files actively being seen. ', - name: 'zeek.stats.files.active', - type: 'integer', - }, - 'zeek.stats.dns_requests.count': { - category: 'zeek', - description: 'Number of DNS requests seen since last stats interval. ', - name: 'zeek.stats.dns_requests.count', - type: 'integer', - }, - 'zeek.stats.dns_requests.active': { - category: 'zeek', - description: 'Current number of DNS requests awaiting a reply. ', - name: 'zeek.stats.dns_requests.active', - type: 'integer', - }, - 'zeek.stats.reassembly_size.tcp': { - category: 'zeek', - description: 'Current size of TCP data in reassembly. ', - name: 'zeek.stats.reassembly_size.tcp', - type: 'integer', - }, - 'zeek.stats.reassembly_size.file': { - category: 'zeek', - description: 'Current size of File data in reassembly. ', - name: 'zeek.stats.reassembly_size.file', - type: 'integer', - }, - 'zeek.stats.reassembly_size.frag': { - category: 'zeek', - description: 'Current size of packet fragment data in reassembly. ', - name: 'zeek.stats.reassembly_size.frag', - type: 'integer', - }, - 'zeek.stats.reassembly_size.unknown': { - category: 'zeek', - description: 'Current size of unknown data in reassembly (this is only PIA buffer right now). ', - name: 'zeek.stats.reassembly_size.unknown', - type: 'integer', - }, - 'zeek.stats.timestamp_lag': { - category: 'zeek', - description: 'Lag between the wall clock and packet timestamps if reading live traffic. ', - name: 'zeek.stats.timestamp_lag', - type: 'integer', - }, - 'zeek.syslog.facility': { - category: 'zeek', - description: 'Syslog facility for the message. ', - name: 'zeek.syslog.facility', - type: 'keyword', - }, - 'zeek.syslog.severity': { - category: 'zeek', - description: 'Syslog severity for the message. ', - name: 'zeek.syslog.severity', - type: 'keyword', - }, - 'zeek.syslog.message': { - category: 'zeek', - description: 'The plain text message. ', - name: 'zeek.syslog.message', - type: 'keyword', - }, - 'zeek.tunnel.type': { - category: 'zeek', - description: 'The type of tunnel. ', - name: 'zeek.tunnel.type', - type: 'keyword', - }, - 'zeek.tunnel.action': { - category: 'zeek', - description: 'The type of activity that occurred. ', - name: 'zeek.tunnel.action', - type: 'keyword', - }, - 'zeek.weird.name': { - category: 'zeek', - description: 'The name of the weird that occurred. ', - name: 'zeek.weird.name', - type: 'keyword', - }, - 'zeek.weird.additional_info': { - category: 'zeek', - description: 'Additional information accompanying the weird if any. ', - name: 'zeek.weird.additional_info', - type: 'keyword', - }, - 'zeek.weird.notice': { - category: 'zeek', - description: 'Indicate if this weird was also turned into a notice. ', - name: 'zeek.weird.notice', - type: 'boolean', - }, - 'zeek.weird.peer': { - category: 'zeek', - description: - 'The peer that originated this weird. This is helpful in cluster deployments if a particular cluster node is having trouble to help identify which node is having trouble. ', - name: 'zeek.weird.peer', - type: 'keyword', - }, - 'zeek.weird.identifier': { - category: 'zeek', - description: - 'This field is to be provided when a weird is generated for the purpose of deduplicating weirds. The identifier string should be unique for a single instance of the weird. This field is used to define when a weird is conceptually a duplicate of a previous weird. ', - name: 'zeek.weird.identifier', - type: 'keyword', - }, - 'zeek.x509.id': { - category: 'zeek', - description: 'File id of this certificate. ', - name: 'zeek.x509.id', - type: 'keyword', - }, - 'zeek.x509.certificate.version': { - category: 'zeek', - description: 'Version number. ', - name: 'zeek.x509.certificate.version', - type: 'integer', - }, - 'zeek.x509.certificate.serial': { - category: 'zeek', - description: 'Serial number. ', - name: 'zeek.x509.certificate.serial', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.country': { - category: 'zeek', - description: 'Country provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.country', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.common_name': { - category: 'zeek', - description: 'Common name provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.common_name', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.locality': { - category: 'zeek', - description: 'Locality provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.locality', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.organization': { - category: 'zeek', - description: 'Organization provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.organization', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.organizational_unit', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.state': { - category: 'zeek', - description: 'State or province provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.state', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.country': { - category: 'zeek', - description: 'Country provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.country', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.common_name': { - category: 'zeek', - description: 'Common name provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.common_name', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.locality': { - category: 'zeek', - description: 'Locality provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.locality', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.organization': { - category: 'zeek', - description: 'Organization provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.organization', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.organizational_unit': { - category: 'zeek', - description: 'Organizational unit provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.organizational_unit', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.state': { - category: 'zeek', - description: 'State or province provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.state', - type: 'keyword', - }, - 'zeek.x509.certificate.common_name': { - category: 'zeek', - description: 'Last (most specific) common name. ', - name: 'zeek.x509.certificate.common_name', - type: 'keyword', - }, - 'zeek.x509.certificate.valid.from': { - category: 'zeek', - description: 'Timestamp before when certificate is not valid. ', - name: 'zeek.x509.certificate.valid.from', - type: 'date', - }, - 'zeek.x509.certificate.valid.until': { - category: 'zeek', - description: 'Timestamp after when certificate is not valid. ', - name: 'zeek.x509.certificate.valid.until', - type: 'date', - }, - 'zeek.x509.certificate.key.algorithm': { - category: 'zeek', - description: 'Name of the key algorithm. ', - name: 'zeek.x509.certificate.key.algorithm', - type: 'keyword', - }, - 'zeek.x509.certificate.key.type': { - category: 'zeek', - description: 'Key type, if key parseable by openssl (either rsa, dsa or ec). ', - name: 'zeek.x509.certificate.key.type', - type: 'keyword', - }, - 'zeek.x509.certificate.key.length': { - category: 'zeek', - description: 'Key length in bits. ', - name: 'zeek.x509.certificate.key.length', - type: 'integer', - }, - 'zeek.x509.certificate.signature_algorithm': { - category: 'zeek', - description: 'Name of the signature algorithm. ', - name: 'zeek.x509.certificate.signature_algorithm', - type: 'keyword', - }, - 'zeek.x509.certificate.exponent': { - category: 'zeek', - description: 'Exponent, if RSA-certificate. ', - name: 'zeek.x509.certificate.exponent', - type: 'keyword', - }, - 'zeek.x509.certificate.curve': { - category: 'zeek', - description: 'Curve, if EC-certificate. ', - name: 'zeek.x509.certificate.curve', - type: 'keyword', - }, - 'zeek.x509.san.dns': { - category: 'zeek', - description: 'List of DNS entries in SAN. ', - name: 'zeek.x509.san.dns', - type: 'keyword', - }, - 'zeek.x509.san.uri': { - category: 'zeek', - description: 'List of URI entries in SAN. ', - name: 'zeek.x509.san.uri', - type: 'keyword', - }, - 'zeek.x509.san.email': { - category: 'zeek', - description: 'List of email entries in SAN. ', - name: 'zeek.x509.san.email', - type: 'keyword', - }, - 'zeek.x509.san.ip': { - category: 'zeek', - description: 'List of IP entries in SAN. ', - name: 'zeek.x509.san.ip', - type: 'ip', - }, - 'zeek.x509.san.other_fields': { - category: 'zeek', - description: 'True if the certificate contained other, not recognized or parsed name fields. ', - name: 'zeek.x509.san.other_fields', - type: 'boolean', - }, - 'zeek.x509.basic_constraints.certificate_authority': { - category: 'zeek', - description: 'CA flag set or not. ', - name: 'zeek.x509.basic_constraints.certificate_authority', - type: 'boolean', - }, - 'zeek.x509.basic_constraints.path_length': { - category: 'zeek', - description: 'Maximum path length. ', - name: 'zeek.x509.basic_constraints.path_length', - type: 'integer', - }, - 'zeek.x509.log_cert': { - category: 'zeek', - description: - 'Present if policy/protocols/ssl/log-hostcerts-only.bro is loaded Logging of certificate is suppressed if set to F. ', - name: 'zeek.x509.log_cert', - type: 'boolean', - }, - 'zookeeper.audit.session': { - category: 'zookeeper', - description: 'Client session id ', - name: 'zookeeper.audit.session', - type: 'keyword', - }, - 'zookeeper.audit.znode': { - category: 'zookeeper', - description: 'Path of the znode ', - name: 'zookeeper.audit.znode', - type: 'keyword', - }, - 'zookeeper.audit.znode_type': { - category: 'zookeeper', - description: 'Type of znode in case of creation operation ', - name: 'zookeeper.audit.znode_type', - type: 'keyword', - }, - 'zookeeper.audit.acl': { - category: 'zookeeper', - description: - 'String representation of znode ACL like cdrwa(create, delete,read, write, admin). This is logged only for setAcl operation ', - name: 'zookeeper.audit.acl', - type: 'keyword', - }, - 'zookeeper.audit.result': { - category: 'zookeeper', - description: - 'Result of the operation. Possible values are (success/failure/invoked). Result "invoked" is used for serverStop operation because stop is logged before ensuring that server actually stopped. ', - name: 'zookeeper.audit.result', - type: 'keyword', - }, - 'zookeeper.audit.user': { - category: 'zookeeper', - description: 'Comma separated list of users who are associate with a client session ', - name: 'zookeeper.audit.user', - type: 'keyword', - }, - 'zookeeper.log': { - category: 'zookeeper', - description: 'ZooKeeper logs. ', - name: 'zookeeper.log', - type: 'group', - }, - 'zoom.master_account_id': { - category: 'zoom', - description: 'Master Account related to a specific Sub Account ', - name: 'zoom.master_account_id', - type: 'keyword', - }, - 'zoom.sub_account_id': { - category: 'zoom', - description: 'Related Sub Account ', - name: 'zoom.sub_account_id', - type: 'keyword', - }, - 'zoom.operator_id': { - category: 'zoom', - description: 'UserID that triggered the event ', - name: 'zoom.operator_id', - type: 'keyword', - }, - 'zoom.operator': { - category: 'zoom', - description: 'Username/Email related to the user that triggered the event ', - name: 'zoom.operator', - type: 'keyword', - }, - 'zoom.account_id': { - category: 'zoom', - description: 'Related accountID to the event ', - name: 'zoom.account_id', - type: 'keyword', - }, - 'zoom.timestamp': { - category: 'zoom', - description: 'Timestamp related to the event ', - name: 'zoom.timestamp', - type: 'date', - }, - 'zoom.creation_type': { - category: 'zoom', - description: 'Creation type ', - name: 'zoom.creation_type', - type: 'keyword', - }, - 'zoom.account.owner_id': { - category: 'zoom', - description: 'UserID of the user whose sub account was created/disassociated ', - name: 'zoom.account.owner_id', - type: 'keyword', - }, - 'zoom.account.email': { - category: 'zoom', - description: 'Email related to the user the action was performed on ', - name: 'zoom.account.email', - type: 'keyword', - }, - 'zoom.account.owner_email': { - category: 'zoom', - description: 'Email of the user whose sub account was created/disassociated ', - name: 'zoom.account.owner_email', - type: 'keyword', - }, - 'zoom.account.account_name': { - category: 'zoom', - description: 'When an account name is updated, this is the new value set ', - name: 'zoom.account.account_name', - type: 'keyword', - }, - 'zoom.account.account_alias': { - category: 'zoom', - description: 'When an account alias is updated, this is the new value set ', - name: 'zoom.account.account_alias', - type: 'keyword', - }, - 'zoom.account.account_support_name': { - category: 'zoom', - description: 'When an account support_name is updated, this is the new value set ', - name: 'zoom.account.account_support_name', - type: 'keyword', - }, - 'zoom.account.account_support_email': { - category: 'zoom', - description: 'When an account support_email is updated, this is the new value set ', - name: 'zoom.account.account_support_email', - type: 'keyword', - }, - 'zoom.chat_channel.name': { - category: 'zoom', - description: 'The name of the channel that has been added/modified/deleted ', - name: 'zoom.chat_channel.name', - type: 'keyword', - }, - 'zoom.chat_channel.id': { - category: 'zoom', - description: 'The ID of the channel that has been added/modified/deleted ', - name: 'zoom.chat_channel.id', - type: 'keyword', - }, - 'zoom.chat_channel.type': { - category: 'zoom', - description: - 'Type of channel related to the event. Can be 1(Invite-Only), 2(Private) or 3(Public) ', - name: 'zoom.chat_channel.type', - type: 'keyword', - }, - 'zoom.chat_message.id': { - category: 'zoom', - description: 'Unique ID of the related chat message ', - name: 'zoom.chat_message.id', - type: 'keyword', - }, - 'zoom.chat_message.type': { - category: 'zoom', - description: 'Type of message, can be either "to_contact" or "to_channel" ', - name: 'zoom.chat_message.type', - type: 'keyword', - }, - 'zoom.chat_message.session_id': { - category: 'zoom', - description: 'SessionID for the channel related to the message ', - name: 'zoom.chat_message.session_id', - type: 'keyword', - }, - 'zoom.chat_message.contact_email': { - category: 'zoom', - description: 'Email address related to the user sending the message ', - name: 'zoom.chat_message.contact_email', - type: 'keyword', - }, - 'zoom.chat_message.contact_id': { - category: 'zoom', - description: 'UserID belonging to the user receiving a message ', - name: 'zoom.chat_message.contact_id', - type: 'keyword', - }, - 'zoom.chat_message.channel_id': { - category: 'zoom', - description: 'ChannelID related to the message ', - name: 'zoom.chat_message.channel_id', - type: 'keyword', - }, - 'zoom.chat_message.channel_name': { - category: 'zoom', - description: 'Channel name related to the message ', - name: 'zoom.chat_message.channel_name', - type: 'keyword', - }, - 'zoom.chat_message.message': { - category: 'zoom', - description: 'A string containing the full message that was sent ', - name: 'zoom.chat_message.message', - type: 'keyword', - }, - 'zoom.meeting.id': { - category: 'zoom', - description: 'Unique ID of the related meeting ', - name: 'zoom.meeting.id', - type: 'keyword', - }, - 'zoom.meeting.uuid': { - category: 'zoom', - description: 'The UUID of the related meeting ', - name: 'zoom.meeting.uuid', - type: 'keyword', - }, - 'zoom.meeting.host_id': { - category: 'zoom', - description: 'The UserID of the configured meeting host ', - name: 'zoom.meeting.host_id', - type: 'keyword', - }, - 'zoom.meeting.topic': { - category: 'zoom', - description: 'Topic of the related meeting ', - name: 'zoom.meeting.topic', - type: 'keyword', - }, - 'zoom.meeting.type': { - category: 'zoom', - description: 'Type of meeting created ', - name: 'zoom.meeting.type', - type: 'keyword', - }, - 'zoom.meeting.start_time': { - category: 'zoom', - description: 'Date and time the meeting started ', - name: 'zoom.meeting.start_time', - type: 'date', - }, - 'zoom.meeting.timezone': { - category: 'zoom', - description: 'Which timezone is used for the meeting timestamps ', - name: 'zoom.meeting.timezone', - type: 'keyword', - }, - 'zoom.meeting.duration': { - category: 'zoom', - description: 'The duration of a meeting in minutes ', - name: 'zoom.meeting.duration', - type: 'long', - }, - 'zoom.meeting.issues': { - category: 'zoom', - description: - 'When a user reports an issue with the meeting, for example: "Unstable audio quality" ', - name: 'zoom.meeting.issues', - type: 'keyword', - }, - 'zoom.meeting.password': { - category: 'zoom', - description: 'Password related to the meeting ', - name: 'zoom.meeting.password', - type: 'keyword', - }, - 'zoom.phone.id': { - category: 'zoom', - description: 'Unique ID for the phone or conversation ', - name: 'zoom.phone.id', - type: 'keyword', - }, - 'zoom.phone.user_id': { - category: 'zoom', - description: 'UserID for the phone owner related to a Call Log being completed ', - name: 'zoom.phone.user_id', - type: 'keyword', - }, - 'zoom.phone.download_url': { - category: 'zoom', - description: 'Download URL for the voicemail ', - name: 'zoom.phone.download_url', - type: 'keyword', - }, - 'zoom.phone.ringing_start_time': { - category: 'zoom', - description: 'The timestamp when a ringtone was established to the callee ', - name: 'zoom.phone.ringing_start_time', - type: 'date', - }, - 'zoom.phone.connected_start_time': { - category: 'zoom', - description: 'The date and time when a ringtone was established to the callee ', - name: 'zoom.phone.connected_start_time', - type: 'date', - }, - 'zoom.phone.answer_start_time': { - category: 'zoom', - description: 'The date and time when the call was answered ', - name: 'zoom.phone.answer_start_time', - type: 'date', - }, - 'zoom.phone.call_end_time': { - category: 'zoom', - description: 'The date and time when the call ended ', - name: 'zoom.phone.call_end_time', - type: 'date', - }, - 'zoom.phone.call_id': { - category: 'zoom', - description: 'Unique ID of the related call ', - name: 'zoom.phone.call_id', - type: 'keyword', - }, - 'zoom.phone.duration': { - category: 'zoom', - description: 'Duration of a voicemail in minutes ', - name: 'zoom.phone.duration', - type: 'long', - }, - 'zoom.phone.caller.id': { - category: 'zoom', - description: 'UserID of the caller related to the voicemail/call ', - name: 'zoom.phone.caller.id', - type: 'keyword', - }, - 'zoom.phone.caller.user_id': { - category: 'zoom', - description: 'UserID of the person which initiated the call ', - name: 'zoom.phone.caller.user_id', - type: 'keyword', - }, - 'zoom.phone.caller.number_type': { - category: 'zoom', - description: 'The type of number, can be 1(Internal) or 2(External) ', - name: 'zoom.phone.caller.number_type', - type: 'keyword', - }, - 'zoom.phone.caller.name': { - category: 'zoom', - description: 'The name of the related callee ', - name: 'zoom.phone.caller.name', - type: 'keyword', - }, - 'zoom.phone.caller.phone_number': { - category: 'zoom', - description: 'Phone Number of the caller related to the call ', - name: 'zoom.phone.caller.phone_number', - type: 'keyword', - }, - 'zoom.phone.caller.extension_type': { - category: 'zoom', - description: - 'Extension type of the caller number, can be user, callQueue, autoReceptionist or shareLineGroup ', - name: 'zoom.phone.caller.extension_type', - type: 'keyword', - }, - 'zoom.phone.caller.extension_number': { - category: 'zoom', - description: 'Extension number of the caller ', - name: 'zoom.phone.caller.extension_number', - type: 'keyword', - }, - 'zoom.phone.caller.timezone': { - category: 'zoom', - description: 'Timezone of the caller ', - name: 'zoom.phone.caller.timezone', - type: 'keyword', - }, - 'zoom.phone.caller.device_type': { - category: 'zoom', - description: 'Device type used by the caller ', - name: 'zoom.phone.caller.device_type', - type: 'keyword', - }, - 'zoom.phone.callee.id': { - category: 'zoom', - description: 'UserID of the callee related to the voicemail/call ', - name: 'zoom.phone.callee.id', - type: 'keyword', - }, - 'zoom.phone.callee.user_id': { - category: 'zoom', - description: 'UserID of the related callee of a voicemail/call ', - name: 'zoom.phone.callee.user_id', - type: 'keyword', - }, - 'zoom.phone.callee.name': { - category: 'zoom', - description: 'The name of the related callee ', - name: 'zoom.phone.callee.name', - type: 'keyword', - }, - 'zoom.phone.callee.number_type': { - category: 'zoom', - description: 'The type of number, can be 1(Internal) or 2(External) ', - name: 'zoom.phone.callee.number_type', - type: 'keyword', - }, - 'zoom.phone.callee.phone_number': { - category: 'zoom', - description: 'Phone Number of the callee related to the call ', - name: 'zoom.phone.callee.phone_number', - type: 'keyword', - }, - 'zoom.phone.callee.extension_type': { - category: 'zoom', - description: - 'Extension type of the callee number, can be user, callQueue, autoReceptionist or shareLineGroup ', - name: 'zoom.phone.callee.extension_type', - type: 'keyword', - }, - 'zoom.phone.callee.extension_number': { - category: 'zoom', - description: 'Extension number of the callee related to the call ', - name: 'zoom.phone.callee.extension_number', - type: 'keyword', - }, - 'zoom.phone.callee.timezone': { - category: 'zoom', - description: 'Timezone of the callee related to the call ', - name: 'zoom.phone.callee.timezone', - type: 'keyword', - }, - 'zoom.phone.callee.device_type': { - category: 'zoom', - description: 'Device type used by the callee related to the call ', - name: 'zoom.phone.callee.device_type', - type: 'keyword', - }, - 'zoom.phone.date_time': { - category: 'zoom', - description: 'Date and time of the related phone event ', - name: 'zoom.phone.date_time', - type: 'date', - }, - 'zoom.recording.id': { - category: 'zoom', - description: 'Unique ID of the related recording ', - name: 'zoom.recording.id', - type: 'keyword', - }, - 'zoom.recording.uuid': { - category: 'zoom', - description: 'UUID of the related recording ', - name: 'zoom.recording.uuid', - type: 'keyword', - }, - 'zoom.recording.host_id': { - category: 'zoom', - description: 'UserID of the host of the meeting that was recorded ', - name: 'zoom.recording.host_id', - type: 'keyword', - }, - 'zoom.recording.topic': { - category: 'zoom', - description: 'Topic of the meeting related to the recording ', - name: 'zoom.recording.topic', - type: 'keyword', - }, - 'zoom.recording.type': { - category: 'zoom', - description: - 'Type of recording, can be multiple type of values, please check Zoom documentation ', - name: 'zoom.recording.type', - type: 'keyword', - }, - 'zoom.recording.start_time': { - category: 'zoom', - description: 'The date and time when the recording started ', - name: 'zoom.recording.start_time', - type: 'date', - }, - 'zoom.recording.timezone': { - category: 'zoom', - description: 'The timezone used for the recording date ', - name: 'zoom.recording.timezone', - type: 'keyword', - }, - 'zoom.recording.duration': { - category: 'zoom', - description: 'Duration of the recording in minutes ', - name: 'zoom.recording.duration', - type: 'long', - }, - 'zoom.recording.share_url': { - category: 'zoom', - description: 'The URL to access the recording ', - name: 'zoom.recording.share_url', - type: 'keyword', - }, - 'zoom.recording.total_size': { - category: 'zoom', - description: 'Total size of the recording in bytes ', - name: 'zoom.recording.total_size', - type: 'long', - }, - 'zoom.recording.recording_count': { - category: 'zoom', - description: 'Number of recording files related to the recording ', - name: 'zoom.recording.recording_count', - type: 'long', - }, - 'zoom.recording.recording_file.recording_start': { - category: 'zoom', - description: 'The date and time the recording started ', - name: 'zoom.recording.recording_file.recording_start', - type: 'date', - }, - 'zoom.recording.recording_file.recording_end': { - category: 'zoom', - description: 'The date and time the recording finished ', - name: 'zoom.recording.recording_file.recording_end', - type: 'date', - }, - 'zoom.recording.host_email': { - category: 'zoom', - description: 'Email address of the host related to the meeting that was recorded ', - name: 'zoom.recording.host_email', - type: 'keyword', - }, - 'zoom.user.id': { - category: 'zoom', - description: 'UserID related to the user event ', - name: 'zoom.user.id', - type: 'keyword', - }, - 'zoom.user.first_name': { - category: 'zoom', - description: 'User first name related to the user event ', - name: 'zoom.user.first_name', - type: 'keyword', - }, - 'zoom.user.last_name': { - category: 'zoom', - description: 'User last name related to the user event ', - name: 'zoom.user.last_name', - type: 'keyword', - }, - 'zoom.user.email': { - category: 'zoom', - description: 'User email related to the user event ', - name: 'zoom.user.email', - type: 'keyword', - }, - 'zoom.user.type': { - category: 'zoom', - description: 'User type related to the user event ', - name: 'zoom.user.type', - type: 'keyword', - }, - 'zoom.user.phone_number': { - category: 'zoom', - description: 'User phone number related to the user event ', - name: 'zoom.user.phone_number', - type: 'keyword', - }, - 'zoom.user.phone_country': { - category: 'zoom', - description: 'User country code related to the user event ', - name: 'zoom.user.phone_country', - type: 'keyword', - }, - 'zoom.user.company': { - category: 'zoom', - description: 'User company related to the user event ', - name: 'zoom.user.company', - type: 'keyword', - }, - 'zoom.user.pmi': { - category: 'zoom', - description: 'User personal meeting ID related to the user event ', - name: 'zoom.user.pmi', - type: 'keyword', - }, - 'zoom.user.use_pmi': { - category: 'zoom', - description: 'If a user has PMI enabled ', - name: 'zoom.user.use_pmi', - type: 'boolean', - }, - 'zoom.user.pic_url': { - category: 'zoom', - description: 'Full URL to the profile picture used by the user ', - name: 'zoom.user.pic_url', - type: 'keyword', - }, - 'zoom.user.vanity_name': { - category: 'zoom', - description: 'Name of the personal meeting room related to the user event ', - name: 'zoom.user.vanity_name', - type: 'keyword', - }, - 'zoom.user.timezone': { - category: 'zoom', - description: 'Timezone configured for the user ', - name: 'zoom.user.timezone', - type: 'keyword', - }, - 'zoom.user.language': { - category: 'zoom', - description: 'Language configured for the user ', - name: 'zoom.user.language', - type: 'keyword', - }, - 'zoom.user.host_key': { - category: 'zoom', - description: 'Host key set for the user ', - name: 'zoom.user.host_key', - type: 'keyword', - }, - 'zoom.user.role': { - category: 'zoom', - description: 'The configured role for the user ', - name: 'zoom.user.role', - type: 'keyword', - }, - 'zoom.user.dept': { - category: 'zoom', - description: 'The configured departement for the user ', - name: 'zoom.user.dept', - type: 'keyword', - }, - 'zoom.user.presence_status': { - category: 'zoom', - description: 'Current presence status of user ', - name: 'zoom.user.presence_status', - type: 'keyword', - }, - 'zoom.user.personal_notes': { - category: 'zoom', - description: 'Personal notes for the User ', - name: 'zoom.user.personal_notes', - type: 'keyword', - }, - 'zoom.user.client_type': { - category: 'zoom', - description: 'Type of client used by the user. Can be browser, mac, win, iphone or android ', - name: 'zoom.user.client_type', - type: 'keyword', - }, - 'zoom.user.version': { - category: 'zoom', - description: 'Version of the client used by the user ', - name: 'zoom.user.version', - type: 'keyword', - }, - 'zoom.webinar.id': { - category: 'zoom', - description: 'Unique ID for the related webinar ', - name: 'zoom.webinar.id', - type: 'keyword', - }, - 'zoom.webinar.join_url': { - category: 'zoom', - description: 'The URL configured to join the webinar ', - name: 'zoom.webinar.join_url', - type: 'keyword', - }, - 'zoom.webinar.uuid': { - category: 'zoom', - description: 'UUID for the related webinar ', - name: 'zoom.webinar.uuid', - type: 'keyword', - }, - 'zoom.webinar.host_id': { - category: 'zoom', - description: 'UserID for the configured host of the webinar ', - name: 'zoom.webinar.host_id', - type: 'keyword', - }, - 'zoom.webinar.topic': { - category: 'zoom', - description: 'Meeting topic of the related webinar ', - name: 'zoom.webinar.topic', - type: 'keyword', - }, - 'zoom.webinar.type': { - category: 'zoom', - description: - 'Type of webinar created. Can be either 5(Webinar), 6(Recurring webinar without fixed time) or 9(Recurring webinar with fixed time) ', - name: 'zoom.webinar.type', - type: 'keyword', - }, - 'zoom.webinar.start_time': { - category: 'zoom', - description: 'The date and time when the webinar started ', - name: 'zoom.webinar.start_time', - type: 'date', - }, - 'zoom.webinar.timezone': { - category: 'zoom', - description: 'Timezone used for the dates related to the webinar ', - name: 'zoom.webinar.timezone', - type: 'keyword', - }, - 'zoom.webinar.duration': { - category: 'zoom', - description: 'Duration of the webinar in minutes ', - name: 'zoom.webinar.duration', - type: 'long', - }, - 'zoom.webinar.agenda': { - category: 'zoom', - description: 'The configured agenda of the webinar ', - name: 'zoom.webinar.agenda', - type: 'keyword', - }, - 'zoom.webinar.password': { - category: 'zoom', - description: 'Password configured to access the webinar ', - name: 'zoom.webinar.password', - type: 'keyword', - }, - 'zoom.webinar.issues': { - category: 'zoom', - description: 'Any reported issues about a webinar is reported in this field ', - name: 'zoom.webinar.issues', - type: 'keyword', - }, - 'zoom.zoomroom.id': { - category: 'zoom', - description: 'Unique ID of the Zoom room ', - name: 'zoom.zoomroom.id', - type: 'keyword', - }, - 'zoom.zoomroom.room_name': { - category: 'zoom', - description: 'The configured name of the Zoom room ', - name: 'zoom.zoomroom.room_name', - type: 'keyword', - }, - 'zoom.zoomroom.calendar_name': { - category: 'zoom', - description: 'Calendar name of the Zoom room ', - name: 'zoom.zoomroom.calendar_name', - type: 'keyword', - }, - 'zoom.zoomroom.calendar_id': { - category: 'zoom', - description: 'Unique ID of the calendar used by the Zoom room ', - name: 'zoom.zoomroom.calendar_id', - type: 'keyword', - }, - 'zoom.zoomroom.event_id': { - category: 'zoom', - description: 'Unique ID of the calendar event associated with the Zoom Room ', - name: 'zoom.zoomroom.event_id', - type: 'keyword', - }, - 'zoom.zoomroom.change_key': { - category: 'zoom', - description: - 'Key used by Microsoft products integration that represents a specific version of a calendar ', - name: 'zoom.zoomroom.change_key', - type: 'keyword', - }, - 'zoom.zoomroom.resource_email': { - category: 'zoom', - description: 'Email address associated with the calendar in use by the Zoom room ', - name: 'zoom.zoomroom.resource_email', - type: 'keyword', - }, - 'zoom.zoomroom.email': { - category: 'zoom', - description: 'Email address associated with the Zoom room itself ', - name: 'zoom.zoomroom.email', - type: 'keyword', - }, - 'zoom.zoomroom.issue': { - category: 'zoom', - description: 'Any reported alerts or issues related to the Zoom room or its equipment ', - name: 'zoom.zoomroom.issue', - type: 'keyword', - }, - 'zoom.zoomroom.alert_type': { - category: 'zoom', - description: - 'An integer value representing the type of alert. The list of alert types can be found in the Zoom documentation ', - name: 'zoom.zoomroom.alert_type', - type: 'keyword', - }, - 'zoom.zoomroom.component': { - category: 'zoom', - description: - 'An integer value representing the type of equipment or component, The list of component types can be found in the Zoom documentation ', - name: 'zoom.zoomroom.component', - type: 'keyword', - }, - 'zoom.zoomroom.alert_kind': { - category: 'zoom', - description: - 'An integer value showing if the Zoom room alert has been either 1(Triggered) or 2(Cleared) ', - name: 'zoom.zoomroom.alert_kind', - type: 'keyword', - }, - 'zoom.registrant.id': { - category: 'zoom', - description: 'Unique ID of the user registering to a meeting or webinar ', - name: 'zoom.registrant.id', - type: 'keyword', - }, - 'zoom.registrant.status': { - category: 'zoom', - description: 'Status of the specific user registration ', - name: 'zoom.registrant.status', - type: 'keyword', - }, - 'zoom.registrant.email': { - category: 'zoom', - description: 'Email of the user registering to a meeting or webinar ', - name: 'zoom.registrant.email', - type: 'keyword', - }, - 'zoom.registrant.first_name': { - category: 'zoom', - description: 'First name of the user registering to a meeting or webinar ', - name: 'zoom.registrant.first_name', - type: 'keyword', - }, - 'zoom.registrant.last_name': { - category: 'zoom', - description: 'Last name of the user registering to a meeting or webinar ', - name: 'zoom.registrant.last_name', - type: 'keyword', - }, - 'zoom.registrant.address': { - category: 'zoom', - description: 'Address of the user registering to a meeting or webinar ', - name: 'zoom.registrant.address', - type: 'keyword', - }, - 'zoom.registrant.city': { - category: 'zoom', - description: 'City of the user registering to a meeting or webinar ', - name: 'zoom.registrant.city', - type: 'keyword', - }, - 'zoom.registrant.country': { - category: 'zoom', - description: 'Country of the user registering to a meeting or webinar ', - name: 'zoom.registrant.country', - type: 'keyword', - }, - 'zoom.registrant.zip': { - category: 'zoom', - description: 'Zip code of the user registering to a meeting or webinar ', - name: 'zoom.registrant.zip', - type: 'keyword', - }, - 'zoom.registrant.state': { - category: 'zoom', - description: 'State of the user registering to a meeting or webinar ', - name: 'zoom.registrant.state', - type: 'keyword', - }, - 'zoom.registrant.phone': { - category: 'zoom', - description: 'Phone number of the user registering to a meeting or webinar ', - name: 'zoom.registrant.phone', - type: 'keyword', - }, - 'zoom.registrant.industry': { - category: 'zoom', - description: 'Related industry of the user registering to a meeting or webinar ', - name: 'zoom.registrant.industry', - type: 'keyword', - }, - 'zoom.registrant.org': { - category: 'zoom', - description: 'Organization related to the user registering to a meeting or webinar ', - name: 'zoom.registrant.org', - type: 'keyword', - }, - 'zoom.registrant.job_title': { - category: 'zoom', - description: 'Job title of the user registering to a meeting or webinar ', - name: 'zoom.registrant.job_title', - type: 'keyword', - }, - 'zoom.registrant.purchasing_time_frame': { - category: 'zoom', - description: 'Choosen purchase timeframe of the user registering to a meeting or webinar ', - name: 'zoom.registrant.purchasing_time_frame', - type: 'keyword', - }, - 'zoom.registrant.role_in_purchase_process': { - category: 'zoom', - description: - 'Choosen role in a purchase process related to the user registering to a meeting or webinar ', - name: 'zoom.registrant.role_in_purchase_process', - type: 'keyword', - }, - 'zoom.registrant.no_of_employees': { - category: 'zoom', - description: 'Number of employees choosen by the user registering to a meeting or webinar ', - name: 'zoom.registrant.no_of_employees', - type: 'keyword', - }, - 'zoom.registrant.comments': { - category: 'zoom', - description: 'Comments left by the user registering to a meeting or webinar ', - name: 'zoom.registrant.comments', - type: 'keyword', - }, - 'zoom.registrant.join_url': { - category: 'zoom', - description: 'The URL that the registrant can use to join the webinar ', - name: 'zoom.registrant.join_url', - type: 'keyword', - }, - 'zoom.participant.id': { - category: 'zoom', - description: 'Unique ID of the participant related to a meeting ', - name: 'zoom.participant.id', - type: 'keyword', - }, - 'zoom.participant.user_id': { - category: 'zoom', - description: 'UserID of the participant related to a meeting ', - name: 'zoom.participant.user_id', - type: 'keyword', - }, - 'zoom.participant.user_name': { - category: 'zoom', - description: 'Username of the participant related to a meeting ', - name: 'zoom.participant.user_name', - type: 'keyword', - }, - 'zoom.participant.join_time': { - category: 'zoom', - description: 'The date and time a participant joined a meeting ', - name: 'zoom.participant.join_time', - type: 'date', - }, - 'zoom.participant.leave_time': { - category: 'zoom', - description: 'The date and time a participant left a meeting ', - name: 'zoom.participant.leave_time', - type: 'date', - }, - 'zoom.participant.sharing_details.link_source': { - category: 'zoom', - description: 'Method of sharing with dropbox integration ', - name: 'zoom.participant.sharing_details.link_source', - type: 'keyword', - }, - 'zoom.participant.sharing_details.content': { - category: 'zoom', - description: 'Type of content that was shared ', - name: 'zoom.participant.sharing_details.content', - type: 'keyword', - }, - 'zoom.participant.sharing_details.file_link': { - category: 'zoom', - description: 'The file link that was shared ', - name: 'zoom.participant.sharing_details.file_link', - type: 'keyword', - }, - 'zoom.participant.sharing_details.date_time': { - category: 'zoom', - description: 'Timestamp the sharing started ', - name: 'zoom.participant.sharing_details.date_time', - type: 'keyword', - }, - 'zoom.participant.sharing_details.source': { - category: 'zoom', - description: 'The file source that was share ', - name: 'zoom.participant.sharing_details.source', - type: 'keyword', - }, - 'zoom.old_values': { - category: 'zoom', - description: - 'Includes the old values when updating a object like user, meeting, account or webinar ', - name: 'zoom.old_values', - type: 'flattened', - }, - 'zoom.settings': { - category: 'zoom', - description: - 'The current active settings related to a object like user, meeting, account or webinar ', - name: 'zoom.settings', - type: 'flattened', - }, - 'aws-cloudwatch.log_group': { - category: 'aws-cloudwatch', - description: 'The name of the log group to which this event belongs.', - name: 'aws-cloudwatch.log_group', - type: 'keyword', - }, - 'aws-cloudwatch.log_stream': { - category: 'aws-cloudwatch', - description: 'The name of the log stream to which this event belongs.', - name: 'aws-cloudwatch.log_stream', - type: 'keyword', - }, - 'aws-cloudwatch.ingestion_time': { - category: 'aws-cloudwatch', - description: 'The time the event was ingested in AWS CloudWatch.', - name: 'aws-cloudwatch.ingestion_time', - type: 'keyword', - }, - 'bucket.name': { - category: 'bucket', - description: 'Name of the S3 bucket that this log retrieved from. ', - name: 'bucket.name', - type: 'keyword', - }, - 'bucket.arn': { - category: 'bucket', - description: 'ARN of the S3 bucket that this log retrieved from. ', - name: 'bucket.arn', - type: 'keyword', - }, - 'object.key': { - category: 'object', - description: 'Name of the S3 object that this log retrieved from. ', - name: 'object.key', - type: 'keyword', - }, - metadata: { - category: 'base', - description: 'AWS S3 object metadata values.', - name: 'metadata', - type: 'flattened', - }, - 'netflow.type': { - category: 'netflow', - description: 'The type of NetFlow record described by this event. ', - name: 'netflow.type', - type: 'keyword', - }, - 'netflow.exporter.address': { - category: 'netflow', - description: "Exporter's network address in IP:port format. ", - name: 'netflow.exporter.address', - type: 'keyword', - }, - 'netflow.exporter.source_id': { - category: 'netflow', - description: 'Observation domain ID to which this record belongs. ', - name: 'netflow.exporter.source_id', - type: 'long', - }, - 'netflow.exporter.timestamp': { - category: 'netflow', - description: 'Time and date of export. ', - name: 'netflow.exporter.timestamp', - type: 'date', - }, - 'netflow.exporter.uptime_millis': { - category: 'netflow', - description: 'How long the exporter process has been running, in milliseconds. ', - name: 'netflow.exporter.uptime_millis', - type: 'long', - }, - 'netflow.exporter.version': { - category: 'netflow', - description: 'NetFlow version used. ', - name: 'netflow.exporter.version', - type: 'integer', - }, - 'netflow.absolute_error': { - category: 'netflow', - name: 'netflow.absolute_error', - type: 'double', - }, - 'netflow.address_pool_high_threshold': { - category: 'netflow', - name: 'netflow.address_pool_high_threshold', - type: 'long', - }, - 'netflow.address_pool_low_threshold': { - category: 'netflow', - name: 'netflow.address_pool_low_threshold', - type: 'long', - }, - 'netflow.address_port_mapping_high_threshold': { - category: 'netflow', - name: 'netflow.address_port_mapping_high_threshold', - type: 'long', - }, - 'netflow.address_port_mapping_low_threshold': { - category: 'netflow', - name: 'netflow.address_port_mapping_low_threshold', - type: 'long', - }, - 'netflow.address_port_mapping_per_user_high_threshold': { - category: 'netflow', - name: 'netflow.address_port_mapping_per_user_high_threshold', - type: 'long', - }, - 'netflow.afc_protocol': { - category: 'netflow', - name: 'netflow.afc_protocol', - type: 'integer', - }, - 'netflow.afc_protocol_name': { - category: 'netflow', - name: 'netflow.afc_protocol_name', - type: 'keyword', - }, - 'netflow.anonymization_flags': { - category: 'netflow', - name: 'netflow.anonymization_flags', - type: 'integer', - }, - 'netflow.anonymization_technique': { - category: 'netflow', - name: 'netflow.anonymization_technique', - type: 'integer', - }, - 'netflow.application_business-relevance': { - category: 'netflow', - name: 'netflow.application_business-relevance', - type: 'long', - }, - 'netflow.application_category_name': { - category: 'netflow', - name: 'netflow.application_category_name', - type: 'keyword', - }, - 'netflow.application_description': { - category: 'netflow', - name: 'netflow.application_description', - type: 'keyword', - }, - 'netflow.application_group_name': { - category: 'netflow', - name: 'netflow.application_group_name', - type: 'keyword', - }, - 'netflow.application_http_uri_statistics': { - category: 'netflow', - name: 'netflow.application_http_uri_statistics', - type: 'short', - }, - 'netflow.application_http_user-agent': { - category: 'netflow', - name: 'netflow.application_http_user-agent', - type: 'short', - }, - 'netflow.application_id': { - category: 'netflow', - name: 'netflow.application_id', - type: 'short', - }, - 'netflow.application_name': { - category: 'netflow', - name: 'netflow.application_name', - type: 'keyword', - }, - 'netflow.application_sub_category_name': { - category: 'netflow', - name: 'netflow.application_sub_category_name', - type: 'keyword', - }, - 'netflow.application_traffic-class': { - category: 'netflow', - name: 'netflow.application_traffic-class', - type: 'long', - }, - 'netflow.art_client_network_time_maximum': { - category: 'netflow', - name: 'netflow.art_client_network_time_maximum', - type: 'long', - }, - 'netflow.art_client_network_time_minimum': { - category: 'netflow', - name: 'netflow.art_client_network_time_minimum', - type: 'long', - }, - 'netflow.art_client_network_time_sum': { - category: 'netflow', - name: 'netflow.art_client_network_time_sum', - type: 'long', - }, - 'netflow.art_clientpackets': { - category: 'netflow', - name: 'netflow.art_clientpackets', - type: 'long', - }, - 'netflow.art_count_late_responses': { - category: 'netflow', - name: 'netflow.art_count_late_responses', - type: 'long', - }, - 'netflow.art_count_new_connections': { - category: 'netflow', - name: 'netflow.art_count_new_connections', - type: 'long', - }, - 'netflow.art_count_responses': { - category: 'netflow', - name: 'netflow.art_count_responses', - type: 'long', - }, - 'netflow.art_count_responses_histogram_bucket1': { - category: 'netflow', - name: 'netflow.art_count_responses_histogram_bucket1', - type: 'long', - }, - 'netflow.art_count_responses_histogram_bucket2': { - category: 'netflow', - name: 'netflow.art_count_responses_histogram_bucket2', - type: 'long', - }, - 'netflow.art_count_responses_histogram_bucket3': { - category: 'netflow', - name: 'netflow.art_count_responses_histogram_bucket3', - type: 'long', - }, - 'netflow.art_count_responses_histogram_bucket4': { - category: 'netflow', - name: 'netflow.art_count_responses_histogram_bucket4', - type: 'long', - }, - 'netflow.art_count_responses_histogram_bucket5': { - category: 'netflow', - name: 'netflow.art_count_responses_histogram_bucket5', - type: 'long', - }, - 'netflow.art_count_responses_histogram_bucket6': { - category: 'netflow', - name: 'netflow.art_count_responses_histogram_bucket6', - type: 'long', - }, - 'netflow.art_count_responses_histogram_bucket7': { - category: 'netflow', - name: 'netflow.art_count_responses_histogram_bucket7', - type: 'long', - }, - 'netflow.art_count_retransmissions': { - category: 'netflow', - name: 'netflow.art_count_retransmissions', - type: 'long', - }, - 'netflow.art_count_transactions': { - category: 'netflow', - name: 'netflow.art_count_transactions', - type: 'long', - }, - 'netflow.art_network_time_maximum': { - category: 'netflow', - name: 'netflow.art_network_time_maximum', - type: 'long', - }, - 'netflow.art_network_time_minimum': { - category: 'netflow', - name: 'netflow.art_network_time_minimum', - type: 'long', - }, - 'netflow.art_network_time_sum': { - category: 'netflow', - name: 'netflow.art_network_time_sum', - type: 'long', - }, - 'netflow.art_response_time_maximum': { - category: 'netflow', - name: 'netflow.art_response_time_maximum', - type: 'long', - }, - 'netflow.art_response_time_minimum': { - category: 'netflow', - name: 'netflow.art_response_time_minimum', - type: 'long', - }, - 'netflow.art_response_time_sum': { - category: 'netflow', - name: 'netflow.art_response_time_sum', - type: 'long', - }, - 'netflow.art_server_network_time_maximum': { - category: 'netflow', - name: 'netflow.art_server_network_time_maximum', - type: 'long', - }, - 'netflow.art_server_network_time_minimum': { - category: 'netflow', - name: 'netflow.art_server_network_time_minimum', - type: 'long', - }, - 'netflow.art_server_network_time_sum': { - category: 'netflow', - name: 'netflow.art_server_network_time_sum', - type: 'long', - }, - 'netflow.art_server_response_time_maximum': { - category: 'netflow', - name: 'netflow.art_server_response_time_maximum', - type: 'long', - }, - 'netflow.art_server_response_time_minimum': { - category: 'netflow', - name: 'netflow.art_server_response_time_minimum', - type: 'long', - }, - 'netflow.art_server_response_time_sum': { - category: 'netflow', - name: 'netflow.art_server_response_time_sum', - type: 'long', - }, - 'netflow.art_serverpackets': { - category: 'netflow', - name: 'netflow.art_serverpackets', - type: 'long', - }, - 'netflow.art_total_response_time_maximum': { - category: 'netflow', - name: 'netflow.art_total_response_time_maximum', - type: 'long', - }, - 'netflow.art_total_response_time_minimum': { - category: 'netflow', - name: 'netflow.art_total_response_time_minimum', - type: 'long', - }, - 'netflow.art_total_response_time_sum': { - category: 'netflow', - name: 'netflow.art_total_response_time_sum', - type: 'long', - }, - 'netflow.art_total_transaction_time_maximum': { - category: 'netflow', - name: 'netflow.art_total_transaction_time_maximum', - type: 'long', - }, - 'netflow.art_total_transaction_time_minimum': { - category: 'netflow', - name: 'netflow.art_total_transaction_time_minimum', - type: 'long', - }, - 'netflow.art_total_transaction_time_sum': { - category: 'netflow', - name: 'netflow.art_total_transaction_time_sum', - type: 'long', - }, - 'netflow.assembled_fragment_count': { - category: 'netflow', - name: 'netflow.assembled_fragment_count', - type: 'long', - }, - 'netflow.audit_counter': { - category: 'netflow', - name: 'netflow.audit_counter', - type: 'long', - }, - 'netflow.average_interarrival_time': { - category: 'netflow', - name: 'netflow.average_interarrival_time', - type: 'long', - }, - 'netflow.bgp_destination_as_number': { - category: 'netflow', - name: 'netflow.bgp_destination_as_number', - type: 'long', - }, - 'netflow.bgp_next_adjacent_as_number': { - category: 'netflow', - name: 'netflow.bgp_next_adjacent_as_number', - type: 'long', - }, - 'netflow.bgp_next_hop_ipv4_address': { - category: 'netflow', - name: 'netflow.bgp_next_hop_ipv4_address', - type: 'ip', - }, - 'netflow.bgp_next_hop_ipv6_address': { - category: 'netflow', - name: 'netflow.bgp_next_hop_ipv6_address', - type: 'ip', - }, - 'netflow.bgp_prev_adjacent_as_number': { - category: 'netflow', - name: 'netflow.bgp_prev_adjacent_as_number', - type: 'long', - }, - 'netflow.bgp_source_as_number': { - category: 'netflow', - name: 'netflow.bgp_source_as_number', - type: 'long', - }, - 'netflow.bgp_validity_state': { - category: 'netflow', - name: 'netflow.bgp_validity_state', - type: 'short', - }, - 'netflow.biflow_direction': { - category: 'netflow', - name: 'netflow.biflow_direction', - type: 'short', - }, - 'netflow.bind_ipv4_address': { - category: 'netflow', - name: 'netflow.bind_ipv4_address', - type: 'ip', - }, - 'netflow.bind_transport_port': { - category: 'netflow', - name: 'netflow.bind_transport_port', - type: 'integer', - }, - 'netflow.class_id': { - category: 'netflow', - name: 'netflow.class_id', - type: 'long', - }, - 'netflow.class_name': { - category: 'netflow', - name: 'netflow.class_name', - type: 'keyword', - }, - 'netflow.classification_engine_id': { - category: 'netflow', - name: 'netflow.classification_engine_id', - type: 'short', - }, - 'netflow.collection_time_milliseconds': { - category: 'netflow', - name: 'netflow.collection_time_milliseconds', - type: 'date', - }, - 'netflow.collector_certificate': { - category: 'netflow', - name: 'netflow.collector_certificate', - type: 'short', - }, - 'netflow.collector_ipv4_address': { - category: 'netflow', - name: 'netflow.collector_ipv4_address', - type: 'ip', - }, - 'netflow.collector_ipv6_address': { - category: 'netflow', - name: 'netflow.collector_ipv6_address', - type: 'ip', - }, - 'netflow.collector_transport_port': { - category: 'netflow', - name: 'netflow.collector_transport_port', - type: 'integer', - }, - 'netflow.common_properties_id': { - category: 'netflow', - name: 'netflow.common_properties_id', - type: 'long', - }, - 'netflow.confidence_level': { - category: 'netflow', - name: 'netflow.confidence_level', - type: 'double', - }, - 'netflow.conn_ipv4_address': { - category: 'netflow', - name: 'netflow.conn_ipv4_address', - type: 'ip', - }, - 'netflow.conn_transport_port': { - category: 'netflow', - name: 'netflow.conn_transport_port', - type: 'integer', - }, - 'netflow.connection_sum_duration_seconds': { - category: 'netflow', - name: 'netflow.connection_sum_duration_seconds', - type: 'long', - }, - 'netflow.connection_transaction_id': { - category: 'netflow', - name: 'netflow.connection_transaction_id', - type: 'long', - }, - 'netflow.conntrack_id': { - category: 'netflow', - name: 'netflow.conntrack_id', - type: 'long', - }, - 'netflow.data_byte_count': { - category: 'netflow', - name: 'netflow.data_byte_count', - type: 'long', - }, - 'netflow.data_link_frame_section': { - category: 'netflow', - name: 'netflow.data_link_frame_section', - type: 'short', - }, - 'netflow.data_link_frame_size': { - category: 'netflow', - name: 'netflow.data_link_frame_size', - type: 'integer', - }, - 'netflow.data_link_frame_type': { - category: 'netflow', - name: 'netflow.data_link_frame_type', - type: 'integer', - }, - 'netflow.data_records_reliability': { - category: 'netflow', - name: 'netflow.data_records_reliability', - type: 'boolean', - }, - 'netflow.delta_flow_count': { - category: 'netflow', - name: 'netflow.delta_flow_count', - type: 'long', - }, - 'netflow.destination_ipv4_address': { - category: 'netflow', - name: 'netflow.destination_ipv4_address', - type: 'ip', - }, - 'netflow.destination_ipv4_prefix': { - category: 'netflow', - name: 'netflow.destination_ipv4_prefix', - type: 'ip', - }, - 'netflow.destination_ipv4_prefix_length': { - category: 'netflow', - name: 'netflow.destination_ipv4_prefix_length', - type: 'short', - }, - 'netflow.destination_ipv6_address': { - category: 'netflow', - name: 'netflow.destination_ipv6_address', - type: 'ip', - }, - 'netflow.destination_ipv6_prefix': { - category: 'netflow', - name: 'netflow.destination_ipv6_prefix', - type: 'ip', - }, - 'netflow.destination_ipv6_prefix_length': { - category: 'netflow', - name: 'netflow.destination_ipv6_prefix_length', - type: 'short', - }, - 'netflow.destination_mac_address': { - category: 'netflow', - name: 'netflow.destination_mac_address', - type: 'keyword', - }, - 'netflow.destination_transport_port': { - category: 'netflow', - name: 'netflow.destination_transport_port', - type: 'integer', - }, - 'netflow.digest_hash_value': { - category: 'netflow', - name: 'netflow.digest_hash_value', - type: 'long', - }, - 'netflow.distinct_count_of_destination_ip_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_destination_ip_address', - type: 'long', - }, - 'netflow.distinct_count_of_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_destination_ipv4_address', - type: 'long', - }, - 'netflow.distinct_count_of_destination_ipv6_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_destination_ipv6_address', - type: 'long', - }, - 'netflow.distinct_count_of_source_ip_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_source_ip_address', - type: 'long', - }, - 'netflow.distinct_count_of_source_ipv4_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_source_ipv4_address', - type: 'long', - }, - 'netflow.distinct_count_of_source_ipv6_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_source_ipv6_address', - type: 'long', - }, - 'netflow.dns_authoritative': { - category: 'netflow', - name: 'netflow.dns_authoritative', - type: 'short', - }, - 'netflow.dns_cname': { - category: 'netflow', - name: 'netflow.dns_cname', - type: 'keyword', - }, - 'netflow.dns_id': { - category: 'netflow', - name: 'netflow.dns_id', - type: 'integer', - }, - 'netflow.dns_mx_exchange': { - category: 'netflow', - name: 'netflow.dns_mx_exchange', - type: 'keyword', - }, - 'netflow.dns_mx_preference': { - category: 'netflow', - name: 'netflow.dns_mx_preference', - type: 'integer', - }, - 'netflow.dns_nsd_name': { - category: 'netflow', - name: 'netflow.dns_nsd_name', - type: 'keyword', - }, - 'netflow.dns_nx_domain': { - category: 'netflow', - name: 'netflow.dns_nx_domain', - type: 'short', - }, - 'netflow.dns_ptrd_name': { - category: 'netflow', - name: 'netflow.dns_ptrd_name', - type: 'keyword', - }, - 'netflow.dns_qname': { - category: 'netflow', - name: 'netflow.dns_qname', - type: 'keyword', - }, - 'netflow.dns_qr_type': { - category: 'netflow', - name: 'netflow.dns_qr_type', - type: 'integer', - }, - 'netflow.dns_query_response': { - category: 'netflow', - name: 'netflow.dns_query_response', - type: 'short', - }, - 'netflow.dns_rr_section': { - category: 'netflow', - name: 'netflow.dns_rr_section', - type: 'short', - }, - 'netflow.dns_soa_expire': { - category: 'netflow', - name: 'netflow.dns_soa_expire', - type: 'long', - }, - 'netflow.dns_soa_minimum': { - category: 'netflow', - name: 'netflow.dns_soa_minimum', - type: 'long', - }, - 'netflow.dns_soa_refresh': { - category: 'netflow', - name: 'netflow.dns_soa_refresh', - type: 'long', - }, - 'netflow.dns_soa_retry': { - category: 'netflow', - name: 'netflow.dns_soa_retry', - type: 'long', - }, - 'netflow.dns_soa_serial': { - category: 'netflow', - name: 'netflow.dns_soa_serial', - type: 'long', - }, - 'netflow.dns_soam_name': { - category: 'netflow', - name: 'netflow.dns_soam_name', - type: 'keyword', - }, - 'netflow.dns_soar_name': { - category: 'netflow', - name: 'netflow.dns_soar_name', - type: 'keyword', - }, - 'netflow.dns_srv_port': { - category: 'netflow', - name: 'netflow.dns_srv_port', - type: 'integer', - }, - 'netflow.dns_srv_priority': { - category: 'netflow', - name: 'netflow.dns_srv_priority', - type: 'integer', - }, - 'netflow.dns_srv_target': { - category: 'netflow', - name: 'netflow.dns_srv_target', - type: 'integer', - }, - 'netflow.dns_srv_weight': { - category: 'netflow', - name: 'netflow.dns_srv_weight', - type: 'integer', - }, - 'netflow.dns_ttl': { - category: 'netflow', - name: 'netflow.dns_ttl', - type: 'long', - }, - 'netflow.dns_txt_data': { - category: 'netflow', - name: 'netflow.dns_txt_data', - type: 'keyword', - }, - 'netflow.dot1q_customer_dei': { - category: 'netflow', - name: 'netflow.dot1q_customer_dei', - type: 'boolean', - }, - 'netflow.dot1q_customer_destination_mac_address': { - category: 'netflow', - name: 'netflow.dot1q_customer_destination_mac_address', - type: 'keyword', - }, - 'netflow.dot1q_customer_priority': { - category: 'netflow', - name: 'netflow.dot1q_customer_priority', - type: 'short', - }, - 'netflow.dot1q_customer_source_mac_address': { - category: 'netflow', - name: 'netflow.dot1q_customer_source_mac_address', - type: 'keyword', - }, - 'netflow.dot1q_customer_vlan_id': { - category: 'netflow', - name: 'netflow.dot1q_customer_vlan_id', - type: 'integer', - }, - 'netflow.dot1q_dei': { - category: 'netflow', - name: 'netflow.dot1q_dei', - type: 'boolean', - }, - 'netflow.dot1q_priority': { - category: 'netflow', - name: 'netflow.dot1q_priority', - type: 'short', - }, - 'netflow.dot1q_service_instance_id': { - category: 'netflow', - name: 'netflow.dot1q_service_instance_id', - type: 'long', - }, - 'netflow.dot1q_service_instance_priority': { - category: 'netflow', - name: 'netflow.dot1q_service_instance_priority', - type: 'short', - }, - 'netflow.dot1q_service_instance_tag': { - category: 'netflow', - name: 'netflow.dot1q_service_instance_tag', - type: 'short', - }, - 'netflow.dot1q_vlan_id': { - category: 'netflow', - name: 'netflow.dot1q_vlan_id', - type: 'integer', - }, - 'netflow.dropped_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.dropped_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.dropped_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.dropped_layer2_octet_total_count', - type: 'long', - }, - 'netflow.dropped_octet_delta_count': { - category: 'netflow', - name: 'netflow.dropped_octet_delta_count', - type: 'long', - }, - 'netflow.dropped_octet_total_count': { - category: 'netflow', - name: 'netflow.dropped_octet_total_count', - type: 'long', - }, - 'netflow.dropped_packet_delta_count': { - category: 'netflow', - name: 'netflow.dropped_packet_delta_count', - type: 'long', - }, - 'netflow.dropped_packet_total_count': { - category: 'netflow', - name: 'netflow.dropped_packet_total_count', - type: 'long', - }, - 'netflow.dst_traffic_index': { - category: 'netflow', - name: 'netflow.dst_traffic_index', - type: 'long', - }, - 'netflow.egress_broadcast_packet_total_count': { - category: 'netflow', - name: 'netflow.egress_broadcast_packet_total_count', - type: 'long', - }, - 'netflow.egress_interface': { - category: 'netflow', - name: 'netflow.egress_interface', - type: 'long', - }, - 'netflow.egress_interface_type': { - category: 'netflow', - name: 'netflow.egress_interface_type', - type: 'long', - }, - 'netflow.egress_physical_interface': { - category: 'netflow', - name: 'netflow.egress_physical_interface', - type: 'long', - }, - 'netflow.egress_unicast_packet_total_count': { - category: 'netflow', - name: 'netflow.egress_unicast_packet_total_count', - type: 'long', - }, - 'netflow.egress_vrfid': { - category: 'netflow', - name: 'netflow.egress_vrfid', - type: 'long', - }, - 'netflow.encrypted_technology': { - category: 'netflow', - name: 'netflow.encrypted_technology', - type: 'keyword', - }, - 'netflow.engine_id': { - category: 'netflow', - name: 'netflow.engine_id', - type: 'short', - }, - 'netflow.engine_type': { - category: 'netflow', - name: 'netflow.engine_type', - type: 'short', - }, - 'netflow.ethernet_header_length': { - category: 'netflow', - name: 'netflow.ethernet_header_length', - type: 'short', - }, - 'netflow.ethernet_payload_length': { - category: 'netflow', - name: 'netflow.ethernet_payload_length', - type: 'integer', - }, - 'netflow.ethernet_total_length': { - category: 'netflow', - name: 'netflow.ethernet_total_length', - type: 'integer', - }, - 'netflow.ethernet_type': { - category: 'netflow', - name: 'netflow.ethernet_type', - type: 'integer', - }, - 'netflow.expired_fragment_count': { - category: 'netflow', - name: 'netflow.expired_fragment_count', - type: 'long', - }, - 'netflow.export_interface': { - category: 'netflow', - name: 'netflow.export_interface', - type: 'long', - }, - 'netflow.export_protocol_version': { - category: 'netflow', - name: 'netflow.export_protocol_version', - type: 'short', - }, - 'netflow.export_sctp_stream_id': { - category: 'netflow', - name: 'netflow.export_sctp_stream_id', - type: 'integer', - }, - 'netflow.export_transport_protocol': { - category: 'netflow', - name: 'netflow.export_transport_protocol', - type: 'short', - }, - 'netflow.exported_flow_record_total_count': { - category: 'netflow', - name: 'netflow.exported_flow_record_total_count', - type: 'long', - }, - 'netflow.exported_message_total_count': { - category: 'netflow', - name: 'netflow.exported_message_total_count', - type: 'long', - }, - 'netflow.exported_octet_total_count': { - category: 'netflow', - name: 'netflow.exported_octet_total_count', - type: 'long', - }, - 'netflow.exporter_certificate': { - category: 'netflow', - name: 'netflow.exporter_certificate', - type: 'short', - }, - 'netflow.exporter_ipv4_address': { - category: 'netflow', - name: 'netflow.exporter_ipv4_address', - type: 'ip', - }, - 'netflow.exporter_ipv6_address': { - category: 'netflow', - name: 'netflow.exporter_ipv6_address', - type: 'ip', - }, - 'netflow.exporter_transport_port': { - category: 'netflow', - name: 'netflow.exporter_transport_port', - type: 'integer', - }, - 'netflow.exporting_process_id': { - category: 'netflow', - name: 'netflow.exporting_process_id', - type: 'long', - }, - 'netflow.external_address_realm': { - category: 'netflow', - name: 'netflow.external_address_realm', - type: 'short', - }, - 'netflow.firewall_event': { - category: 'netflow', - name: 'netflow.firewall_event', - type: 'short', - }, - 'netflow.first_eight_non_empty_packet_directions': { - category: 'netflow', - name: 'netflow.first_eight_non_empty_packet_directions', - type: 'short', - }, - 'netflow.first_non_empty_packet_size': { - category: 'netflow', - name: 'netflow.first_non_empty_packet_size', - type: 'integer', - }, - 'netflow.first_packet_banner': { - category: 'netflow', - name: 'netflow.first_packet_banner', - type: 'keyword', - }, - 'netflow.flags_and_sampler_id': { - category: 'netflow', - name: 'netflow.flags_and_sampler_id', - type: 'long', - }, - 'netflow.flow_active_timeout': { - category: 'netflow', - name: 'netflow.flow_active_timeout', - type: 'integer', - }, - 'netflow.flow_attributes': { - category: 'netflow', - name: 'netflow.flow_attributes', - type: 'integer', - }, - 'netflow.flow_direction': { - category: 'netflow', - name: 'netflow.flow_direction', - type: 'short', - }, - 'netflow.flow_duration_microseconds': { - category: 'netflow', - name: 'netflow.flow_duration_microseconds', - type: 'long', - }, - 'netflow.flow_duration_milliseconds': { - category: 'netflow', - name: 'netflow.flow_duration_milliseconds', - type: 'long', - }, - 'netflow.flow_end_delta_microseconds': { - category: 'netflow', - name: 'netflow.flow_end_delta_microseconds', - type: 'long', - }, - 'netflow.flow_end_microseconds': { - category: 'netflow', - name: 'netflow.flow_end_microseconds', - type: 'date', - }, - 'netflow.flow_end_milliseconds': { - category: 'netflow', - name: 'netflow.flow_end_milliseconds', - type: 'date', - }, - 'netflow.flow_end_nanoseconds': { - category: 'netflow', - name: 'netflow.flow_end_nanoseconds', - type: 'date', - }, - 'netflow.flow_end_reason': { - category: 'netflow', - name: 'netflow.flow_end_reason', - type: 'short', - }, - 'netflow.flow_end_seconds': { - category: 'netflow', - name: 'netflow.flow_end_seconds', - type: 'date', - }, - 'netflow.flow_end_sys_up_time': { - category: 'netflow', - name: 'netflow.flow_end_sys_up_time', - type: 'long', - }, - 'netflow.flow_id': { - category: 'netflow', - name: 'netflow.flow_id', - type: 'long', - }, - 'netflow.flow_idle_timeout': { - category: 'netflow', - name: 'netflow.flow_idle_timeout', - type: 'integer', - }, - 'netflow.flow_key_indicator': { - category: 'netflow', - name: 'netflow.flow_key_indicator', - type: 'long', - }, - 'netflow.flow_label_ipv6': { - category: 'netflow', - name: 'netflow.flow_label_ipv6', - type: 'long', - }, - 'netflow.flow_sampling_time_interval': { - category: 'netflow', - name: 'netflow.flow_sampling_time_interval', - type: 'long', - }, - 'netflow.flow_sampling_time_spacing': { - category: 'netflow', - name: 'netflow.flow_sampling_time_spacing', - type: 'long', - }, - 'netflow.flow_selected_flow_delta_count': { - category: 'netflow', - name: 'netflow.flow_selected_flow_delta_count', - type: 'long', - }, - 'netflow.flow_selected_octet_delta_count': { - category: 'netflow', - name: 'netflow.flow_selected_octet_delta_count', - type: 'long', - }, - 'netflow.flow_selected_packet_delta_count': { - category: 'netflow', - name: 'netflow.flow_selected_packet_delta_count', - type: 'long', - }, - 'netflow.flow_selector_algorithm': { - category: 'netflow', - name: 'netflow.flow_selector_algorithm', - type: 'integer', - }, - 'netflow.flow_start_delta_microseconds': { - category: 'netflow', - name: 'netflow.flow_start_delta_microseconds', - type: 'long', - }, - 'netflow.flow_start_microseconds': { - category: 'netflow', - name: 'netflow.flow_start_microseconds', - type: 'date', - }, - 'netflow.flow_start_milliseconds': { - category: 'netflow', - name: 'netflow.flow_start_milliseconds', - type: 'date', - }, - 'netflow.flow_start_nanoseconds': { - category: 'netflow', - name: 'netflow.flow_start_nanoseconds', - type: 'date', - }, - 'netflow.flow_start_seconds': { - category: 'netflow', - name: 'netflow.flow_start_seconds', - type: 'date', - }, - 'netflow.flow_start_sys_up_time': { - category: 'netflow', - name: 'netflow.flow_start_sys_up_time', - type: 'long', - }, - 'netflow.flow_table_flush_event_count': { - category: 'netflow', - name: 'netflow.flow_table_flush_event_count', - type: 'long', - }, - 'netflow.flow_table_peak_count': { - category: 'netflow', - name: 'netflow.flow_table_peak_count', - type: 'long', - }, - 'netflow.forwarding_status': { - category: 'netflow', - name: 'netflow.forwarding_status', - type: 'short', - }, - 'netflow.fragment_flags': { - category: 'netflow', - name: 'netflow.fragment_flags', - type: 'short', - }, - 'netflow.fragment_identification': { - category: 'netflow', - name: 'netflow.fragment_identification', - type: 'long', - }, - 'netflow.fragment_offset': { - category: 'netflow', - name: 'netflow.fragment_offset', - type: 'integer', - }, - 'netflow.fw_blackout_secs': { - category: 'netflow', - name: 'netflow.fw_blackout_secs', - type: 'long', - }, - 'netflow.fw_configured_value': { - category: 'netflow', - name: 'netflow.fw_configured_value', - type: 'long', - }, - 'netflow.fw_cts_src_sgt': { - category: 'netflow', - name: 'netflow.fw_cts_src_sgt', - type: 'long', - }, - 'netflow.fw_event_level': { - category: 'netflow', - name: 'netflow.fw_event_level', - type: 'long', - }, - 'netflow.fw_event_level_id': { - category: 'netflow', - name: 'netflow.fw_event_level_id', - type: 'long', - }, - 'netflow.fw_ext_event': { - category: 'netflow', - name: 'netflow.fw_ext_event', - type: 'integer', - }, - 'netflow.fw_ext_event_alt': { - category: 'netflow', - name: 'netflow.fw_ext_event_alt', - type: 'long', - }, - 'netflow.fw_ext_event_desc': { - category: 'netflow', - name: 'netflow.fw_ext_event_desc', - type: 'keyword', - }, - 'netflow.fw_half_open_count': { - category: 'netflow', - name: 'netflow.fw_half_open_count', - type: 'long', - }, - 'netflow.fw_half_open_high': { - category: 'netflow', - name: 'netflow.fw_half_open_high', - type: 'long', - }, - 'netflow.fw_half_open_rate': { - category: 'netflow', - name: 'netflow.fw_half_open_rate', - type: 'long', - }, - 'netflow.fw_max_sessions': { - category: 'netflow', - name: 'netflow.fw_max_sessions', - type: 'long', - }, - 'netflow.fw_rule': { - category: 'netflow', - name: 'netflow.fw_rule', - type: 'keyword', - }, - 'netflow.fw_summary_pkt_count': { - category: 'netflow', - name: 'netflow.fw_summary_pkt_count', - type: 'long', - }, - 'netflow.fw_zone_pair_id': { - category: 'netflow', - name: 'netflow.fw_zone_pair_id', - type: 'long', - }, - 'netflow.fw_zone_pair_name': { - category: 'netflow', - name: 'netflow.fw_zone_pair_name', - type: 'long', - }, - 'netflow.global_address_mapping_high_threshold': { - category: 'netflow', - name: 'netflow.global_address_mapping_high_threshold', - type: 'long', - }, - 'netflow.gre_key': { - category: 'netflow', - name: 'netflow.gre_key', - type: 'long', - }, - 'netflow.hash_digest_output': { - category: 'netflow', - name: 'netflow.hash_digest_output', - type: 'boolean', - }, - 'netflow.hash_flow_domain': { - category: 'netflow', - name: 'netflow.hash_flow_domain', - type: 'integer', - }, - 'netflow.hash_initialiser_value': { - category: 'netflow', - name: 'netflow.hash_initialiser_value', - type: 'long', - }, - 'netflow.hash_ip_payload_offset': { - category: 'netflow', - name: 'netflow.hash_ip_payload_offset', - type: 'long', - }, - 'netflow.hash_ip_payload_size': { - category: 'netflow', - name: 'netflow.hash_ip_payload_size', - type: 'long', - }, - 'netflow.hash_output_range_max': { - category: 'netflow', - name: 'netflow.hash_output_range_max', - type: 'long', - }, - 'netflow.hash_output_range_min': { - category: 'netflow', - name: 'netflow.hash_output_range_min', - type: 'long', - }, - 'netflow.hash_selected_range_max': { - category: 'netflow', - name: 'netflow.hash_selected_range_max', - type: 'long', - }, - 'netflow.hash_selected_range_min': { - category: 'netflow', - name: 'netflow.hash_selected_range_min', - type: 'long', - }, - 'netflow.http_content_type': { - category: 'netflow', - name: 'netflow.http_content_type', - type: 'keyword', - }, - 'netflow.http_message_version': { - category: 'netflow', - name: 'netflow.http_message_version', - type: 'keyword', - }, - 'netflow.http_reason_phrase': { - category: 'netflow', - name: 'netflow.http_reason_phrase', - type: 'keyword', - }, - 'netflow.http_request_host': { - category: 'netflow', - name: 'netflow.http_request_host', - type: 'keyword', - }, - 'netflow.http_request_method': { - category: 'netflow', - name: 'netflow.http_request_method', - type: 'keyword', - }, - 'netflow.http_request_target': { - category: 'netflow', - name: 'netflow.http_request_target', - type: 'keyword', - }, - 'netflow.http_status_code': { - category: 'netflow', - name: 'netflow.http_status_code', - type: 'integer', - }, - 'netflow.http_user_agent': { - category: 'netflow', - name: 'netflow.http_user_agent', - type: 'keyword', - }, - 'netflow.icmp_code_ipv4': { - category: 'netflow', - name: 'netflow.icmp_code_ipv4', - type: 'short', - }, - 'netflow.icmp_code_ipv6': { - category: 'netflow', - name: 'netflow.icmp_code_ipv6', - type: 'short', - }, - 'netflow.icmp_type_code_ipv4': { - category: 'netflow', - name: 'netflow.icmp_type_code_ipv4', - type: 'integer', - }, - 'netflow.icmp_type_code_ipv6': { - category: 'netflow', - name: 'netflow.icmp_type_code_ipv6', - type: 'integer', - }, - 'netflow.icmp_type_ipv4': { - category: 'netflow', - name: 'netflow.icmp_type_ipv4', - type: 'short', - }, - 'netflow.icmp_type_ipv6': { - category: 'netflow', - name: 'netflow.icmp_type_ipv6', - type: 'short', - }, - 'netflow.igmp_type': { - category: 'netflow', - name: 'netflow.igmp_type', - type: 'short', - }, - 'netflow.ignored_data_record_total_count': { - category: 'netflow', - name: 'netflow.ignored_data_record_total_count', - type: 'long', - }, - 'netflow.ignored_layer2_frame_total_count': { - category: 'netflow', - name: 'netflow.ignored_layer2_frame_total_count', - type: 'long', - }, - 'netflow.ignored_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.ignored_layer2_octet_total_count', - type: 'long', - }, - 'netflow.ignored_octet_total_count': { - category: 'netflow', - name: 'netflow.ignored_octet_total_count', - type: 'long', - }, - 'netflow.ignored_packet_total_count': { - category: 'netflow', - name: 'netflow.ignored_packet_total_count', - type: 'long', - }, - 'netflow.information_element_data_type': { - category: 'netflow', - name: 'netflow.information_element_data_type', - type: 'short', - }, - 'netflow.information_element_description': { - category: 'netflow', - name: 'netflow.information_element_description', - type: 'keyword', - }, - 'netflow.information_element_id': { - category: 'netflow', - name: 'netflow.information_element_id', - type: 'integer', - }, - 'netflow.information_element_index': { - category: 'netflow', - name: 'netflow.information_element_index', - type: 'integer', - }, - 'netflow.information_element_name': { - category: 'netflow', - name: 'netflow.information_element_name', - type: 'keyword', - }, - 'netflow.information_element_range_begin': { - category: 'netflow', - name: 'netflow.information_element_range_begin', - type: 'long', - }, - 'netflow.information_element_range_end': { - category: 'netflow', - name: 'netflow.information_element_range_end', - type: 'long', - }, - 'netflow.information_element_semantics': { - category: 'netflow', - name: 'netflow.information_element_semantics', - type: 'short', - }, - 'netflow.information_element_units': { - category: 'netflow', - name: 'netflow.information_element_units', - type: 'integer', - }, - 'netflow.ingress_broadcast_packet_total_count': { - category: 'netflow', - name: 'netflow.ingress_broadcast_packet_total_count', - type: 'long', - }, - 'netflow.ingress_interface': { - category: 'netflow', - name: 'netflow.ingress_interface', - type: 'long', - }, - 'netflow.ingress_interface_type': { - category: 'netflow', - name: 'netflow.ingress_interface_type', - type: 'long', - }, - 'netflow.ingress_multicast_packet_total_count': { - category: 'netflow', - name: 'netflow.ingress_multicast_packet_total_count', - type: 'long', - }, - 'netflow.ingress_physical_interface': { - category: 'netflow', - name: 'netflow.ingress_physical_interface', - type: 'long', - }, - 'netflow.ingress_unicast_packet_total_count': { - category: 'netflow', - name: 'netflow.ingress_unicast_packet_total_count', - type: 'long', - }, - 'netflow.ingress_vrfid': { - category: 'netflow', - name: 'netflow.ingress_vrfid', - type: 'long', - }, - 'netflow.initial_tcp_flags': { - category: 'netflow', - name: 'netflow.initial_tcp_flags', - type: 'short', - }, - 'netflow.initiator_octets': { - category: 'netflow', - name: 'netflow.initiator_octets', - type: 'long', - }, - 'netflow.initiator_packets': { - category: 'netflow', - name: 'netflow.initiator_packets', - type: 'long', - }, - 'netflow.interface_description': { - category: 'netflow', - name: 'netflow.interface_description', - type: 'keyword', - }, - 'netflow.interface_name': { - category: 'netflow', - name: 'netflow.interface_name', - type: 'keyword', - }, - 'netflow.intermediate_process_id': { - category: 'netflow', - name: 'netflow.intermediate_process_id', - type: 'long', - }, - 'netflow.internal_address_realm': { - category: 'netflow', - name: 'netflow.internal_address_realm', - type: 'short', - }, - 'netflow.ip_class_of_service': { - category: 'netflow', - name: 'netflow.ip_class_of_service', - type: 'short', - }, - 'netflow.ip_diff_serv_code_point': { - category: 'netflow', - name: 'netflow.ip_diff_serv_code_point', - type: 'short', - }, - 'netflow.ip_header_length': { - category: 'netflow', - name: 'netflow.ip_header_length', - type: 'short', - }, - 'netflow.ip_header_packet_section': { - category: 'netflow', - name: 'netflow.ip_header_packet_section', - type: 'short', - }, - 'netflow.ip_next_hop_ipv4_address': { - category: 'netflow', - name: 'netflow.ip_next_hop_ipv4_address', - type: 'ip', - }, - 'netflow.ip_next_hop_ipv6_address': { - category: 'netflow', - name: 'netflow.ip_next_hop_ipv6_address', - type: 'ip', - }, - 'netflow.ip_payload_length': { - category: 'netflow', - name: 'netflow.ip_payload_length', - type: 'long', - }, - 'netflow.ip_payload_packet_section': { - category: 'netflow', - name: 'netflow.ip_payload_packet_section', - type: 'short', - }, - 'netflow.ip_precedence': { - category: 'netflow', - name: 'netflow.ip_precedence', - type: 'short', - }, - 'netflow.ip_sec_spi': { - category: 'netflow', - name: 'netflow.ip_sec_spi', - type: 'long', - }, - 'netflow.ip_total_length': { - category: 'netflow', - name: 'netflow.ip_total_length', - type: 'long', - }, - 'netflow.ip_ttl': { - category: 'netflow', - name: 'netflow.ip_ttl', - type: 'short', - }, - 'netflow.ip_version': { - category: 'netflow', - name: 'netflow.ip_version', - type: 'short', - }, - 'netflow.ipv4_ihl': { - category: 'netflow', - name: 'netflow.ipv4_ihl', - type: 'short', - }, - 'netflow.ipv4_options': { - category: 'netflow', - name: 'netflow.ipv4_options', - type: 'long', - }, - 'netflow.ipv4_router_sc': { - category: 'netflow', - name: 'netflow.ipv4_router_sc', - type: 'ip', - }, - 'netflow.ipv6_extension_headers': { - category: 'netflow', - name: 'netflow.ipv6_extension_headers', - type: 'long', - }, - 'netflow.is_multicast': { - category: 'netflow', - name: 'netflow.is_multicast', - type: 'short', - }, - 'netflow.ixia_browser_id': { - category: 'netflow', - name: 'netflow.ixia_browser_id', - type: 'short', - }, - 'netflow.ixia_browser_name': { - category: 'netflow', - name: 'netflow.ixia_browser_name', - type: 'keyword', - }, - 'netflow.ixia_device_id': { - category: 'netflow', - name: 'netflow.ixia_device_id', - type: 'short', - }, - 'netflow.ixia_device_name': { - category: 'netflow', - name: 'netflow.ixia_device_name', - type: 'keyword', - }, - 'netflow.ixia_dns_answer': { - category: 'netflow', - name: 'netflow.ixia_dns_answer', - type: 'keyword', - }, - 'netflow.ixia_dns_classes': { - category: 'netflow', - name: 'netflow.ixia_dns_classes', - type: 'keyword', - }, - 'netflow.ixia_dns_query': { - category: 'netflow', - name: 'netflow.ixia_dns_query', - type: 'keyword', - }, - 'netflow.ixia_dns_record_txt': { - category: 'netflow', - name: 'netflow.ixia_dns_record_txt', - type: 'keyword', - }, - 'netflow.ixia_dst_as_name': { - category: 'netflow', - name: 'netflow.ixia_dst_as_name', - type: 'keyword', - }, - 'netflow.ixia_dst_city_name': { - category: 'netflow', - name: 'netflow.ixia_dst_city_name', - type: 'keyword', - }, - 'netflow.ixia_dst_country_code': { - category: 'netflow', - name: 'netflow.ixia_dst_country_code', - type: 'keyword', - }, - 'netflow.ixia_dst_country_name': { - category: 'netflow', - name: 'netflow.ixia_dst_country_name', - type: 'keyword', - }, - 'netflow.ixia_dst_latitude': { - category: 'netflow', - name: 'netflow.ixia_dst_latitude', - type: 'float', - }, - 'netflow.ixia_dst_longitude': { - category: 'netflow', - name: 'netflow.ixia_dst_longitude', - type: 'float', - }, - 'netflow.ixia_dst_region_code': { - category: 'netflow', - name: 'netflow.ixia_dst_region_code', - type: 'keyword', - }, - 'netflow.ixia_dst_region_node': { - category: 'netflow', - name: 'netflow.ixia_dst_region_node', - type: 'keyword', - }, - 'netflow.ixia_encrypt_cipher': { - category: 'netflow', - name: 'netflow.ixia_encrypt_cipher', - type: 'keyword', - }, - 'netflow.ixia_encrypt_key_length': { - category: 'netflow', - name: 'netflow.ixia_encrypt_key_length', - type: 'integer', - }, - 'netflow.ixia_encrypt_type': { - category: 'netflow', - name: 'netflow.ixia_encrypt_type', - type: 'keyword', - }, - 'netflow.ixia_http_host_name': { - category: 'netflow', - name: 'netflow.ixia_http_host_name', - type: 'keyword', - }, - 'netflow.ixia_http_uri': { - category: 'netflow', - name: 'netflow.ixia_http_uri', - type: 'keyword', - }, - 'netflow.ixia_http_user_agent': { - category: 'netflow', - name: 'netflow.ixia_http_user_agent', - type: 'keyword', - }, - 'netflow.ixia_imsi_subscriber': { - category: 'netflow', - name: 'netflow.ixia_imsi_subscriber', - type: 'keyword', - }, - 'netflow.ixia_l7_app_id': { - category: 'netflow', - name: 'netflow.ixia_l7_app_id', - type: 'long', - }, - 'netflow.ixia_l7_app_name': { - category: 'netflow', - name: 'netflow.ixia_l7_app_name', - type: 'keyword', - }, - 'netflow.ixia_latency': { - category: 'netflow', - name: 'netflow.ixia_latency', - type: 'long', - }, - 'netflow.ixia_rev_octet_delta_count': { - category: 'netflow', - name: 'netflow.ixia_rev_octet_delta_count', - type: 'long', - }, - 'netflow.ixia_rev_packet_delta_count': { - category: 'netflow', - name: 'netflow.ixia_rev_packet_delta_count', - type: 'long', - }, - 'netflow.ixia_src_as_name': { - category: 'netflow', - name: 'netflow.ixia_src_as_name', - type: 'keyword', - }, - 'netflow.ixia_src_city_name': { - category: 'netflow', - name: 'netflow.ixia_src_city_name', - type: 'keyword', - }, - 'netflow.ixia_src_country_code': { - category: 'netflow', - name: 'netflow.ixia_src_country_code', - type: 'keyword', - }, - 'netflow.ixia_src_country_name': { - category: 'netflow', - name: 'netflow.ixia_src_country_name', - type: 'keyword', - }, - 'netflow.ixia_src_latitude': { - category: 'netflow', - name: 'netflow.ixia_src_latitude', - type: 'float', - }, - 'netflow.ixia_src_longitude': { - category: 'netflow', - name: 'netflow.ixia_src_longitude', - type: 'float', - }, - 'netflow.ixia_src_region_code': { - category: 'netflow', - name: 'netflow.ixia_src_region_code', - type: 'keyword', - }, - 'netflow.ixia_src_region_name': { - category: 'netflow', - name: 'netflow.ixia_src_region_name', - type: 'keyword', - }, - 'netflow.ixia_threat_ipv4': { - category: 'netflow', - name: 'netflow.ixia_threat_ipv4', - type: 'ip', - }, - 'netflow.ixia_threat_ipv6': { - category: 'netflow', - name: 'netflow.ixia_threat_ipv6', - type: 'ip', - }, - 'netflow.ixia_threat_type': { - category: 'netflow', - name: 'netflow.ixia_threat_type', - type: 'keyword', - }, - 'netflow.large_packet_count': { - category: 'netflow', - name: 'netflow.large_packet_count', - type: 'long', - }, - 'netflow.layer2_frame_delta_count': { - category: 'netflow', - name: 'netflow.layer2_frame_delta_count', - type: 'long', - }, - 'netflow.layer2_frame_total_count': { - category: 'netflow', - name: 'netflow.layer2_frame_total_count', - type: 'long', - }, - 'netflow.layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.layer2_octet_delta_count', - type: 'long', - }, - 'netflow.layer2_octet_delta_sum_of_squares': { - category: 'netflow', - name: 'netflow.layer2_octet_delta_sum_of_squares', - type: 'long', - }, - 'netflow.layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.layer2_octet_total_count', - type: 'long', - }, - 'netflow.layer2_octet_total_sum_of_squares': { - category: 'netflow', - name: 'netflow.layer2_octet_total_sum_of_squares', - type: 'long', - }, - 'netflow.layer2_segment_id': { - category: 'netflow', - name: 'netflow.layer2_segment_id', - type: 'long', - }, - 'netflow.layer2packet_section_data': { - category: 'netflow', - name: 'netflow.layer2packet_section_data', - type: 'short', - }, - 'netflow.layer2packet_section_offset': { - category: 'netflow', - name: 'netflow.layer2packet_section_offset', - type: 'integer', - }, - 'netflow.layer2packet_section_size': { - category: 'netflow', - name: 'netflow.layer2packet_section_size', - type: 'integer', - }, - 'netflow.line_card_id': { - category: 'netflow', - name: 'netflow.line_card_id', - type: 'long', - }, - 'netflow.log_op': { - category: 'netflow', - name: 'netflow.log_op', - type: 'short', - }, - 'netflow.lower_ci_limit': { - category: 'netflow', - name: 'netflow.lower_ci_limit', - type: 'double', - }, - 'netflow.mark': { - category: 'netflow', - name: 'netflow.mark', - type: 'long', - }, - 'netflow.max_bib_entries': { - category: 'netflow', - name: 'netflow.max_bib_entries', - type: 'long', - }, - 'netflow.max_entries_per_user': { - category: 'netflow', - name: 'netflow.max_entries_per_user', - type: 'long', - }, - 'netflow.max_export_seconds': { - category: 'netflow', - name: 'netflow.max_export_seconds', - type: 'date', - }, - 'netflow.max_flow_end_microseconds': { - category: 'netflow', - name: 'netflow.max_flow_end_microseconds', - type: 'date', - }, - 'netflow.max_flow_end_milliseconds': { - category: 'netflow', - name: 'netflow.max_flow_end_milliseconds', - type: 'date', - }, - 'netflow.max_flow_end_nanoseconds': { - category: 'netflow', - name: 'netflow.max_flow_end_nanoseconds', - type: 'date', - }, - 'netflow.max_flow_end_seconds': { - category: 'netflow', - name: 'netflow.max_flow_end_seconds', - type: 'date', - }, - 'netflow.max_fragments_pending_reassembly': { - category: 'netflow', - name: 'netflow.max_fragments_pending_reassembly', - type: 'long', - }, - 'netflow.max_packet_size': { - category: 'netflow', - name: 'netflow.max_packet_size', - type: 'integer', - }, - 'netflow.max_session_entries': { - category: 'netflow', - name: 'netflow.max_session_entries', - type: 'long', - }, - 'netflow.max_subscribers': { - category: 'netflow', - name: 'netflow.max_subscribers', - type: 'long', - }, - 'netflow.maximum_ip_total_length': { - category: 'netflow', - name: 'netflow.maximum_ip_total_length', - type: 'long', - }, - 'netflow.maximum_layer2_total_length': { - category: 'netflow', - name: 'netflow.maximum_layer2_total_length', - type: 'long', - }, - 'netflow.maximum_ttl': { - category: 'netflow', - name: 'netflow.maximum_ttl', - type: 'short', - }, - 'netflow.mean_flow_rate': { - category: 'netflow', - name: 'netflow.mean_flow_rate', - type: 'long', - }, - 'netflow.mean_packet_rate': { - category: 'netflow', - name: 'netflow.mean_packet_rate', - type: 'long', - }, - 'netflow.message_md5_checksum': { - category: 'netflow', - name: 'netflow.message_md5_checksum', - type: 'short', - }, - 'netflow.message_scope': { - category: 'netflow', - name: 'netflow.message_scope', - type: 'short', - }, - 'netflow.metering_process_id': { - category: 'netflow', - name: 'netflow.metering_process_id', - type: 'long', - }, - 'netflow.metro_evc_id': { - category: 'netflow', - name: 'netflow.metro_evc_id', - type: 'keyword', - }, - 'netflow.metro_evc_type': { - category: 'netflow', - name: 'netflow.metro_evc_type', - type: 'short', - }, - 'netflow.mib_capture_time_semantics': { - category: 'netflow', - name: 'netflow.mib_capture_time_semantics', - type: 'short', - }, - 'netflow.mib_context_engine_id': { - category: 'netflow', - name: 'netflow.mib_context_engine_id', - type: 'short', - }, - 'netflow.mib_context_name': { - category: 'netflow', - name: 'netflow.mib_context_name', - type: 'keyword', - }, - 'netflow.mib_index_indicator': { - category: 'netflow', - name: 'netflow.mib_index_indicator', - type: 'long', - }, - 'netflow.mib_module_name': { - category: 'netflow', - name: 'netflow.mib_module_name', - type: 'keyword', - }, - 'netflow.mib_object_description': { - category: 'netflow', - name: 'netflow.mib_object_description', - type: 'keyword', - }, - 'netflow.mib_object_identifier': { - category: 'netflow', - name: 'netflow.mib_object_identifier', - type: 'short', - }, - 'netflow.mib_object_name': { - category: 'netflow', - name: 'netflow.mib_object_name', - type: 'keyword', - }, - 'netflow.mib_object_syntax': { - category: 'netflow', - name: 'netflow.mib_object_syntax', - type: 'keyword', - }, - 'netflow.mib_object_value_bits': { - category: 'netflow', - name: 'netflow.mib_object_value_bits', - type: 'short', - }, - 'netflow.mib_object_value_counter': { - category: 'netflow', - name: 'netflow.mib_object_value_counter', - type: 'long', - }, - 'netflow.mib_object_value_gauge': { - category: 'netflow', - name: 'netflow.mib_object_value_gauge', - type: 'long', - }, - 'netflow.mib_object_value_integer': { - category: 'netflow', - name: 'netflow.mib_object_value_integer', - type: 'integer', - }, - 'netflow.mib_object_value_ip_address': { - category: 'netflow', - name: 'netflow.mib_object_value_ip_address', - type: 'ip', - }, - 'netflow.mib_object_value_octet_string': { - category: 'netflow', - name: 'netflow.mib_object_value_octet_string', - type: 'short', - }, - 'netflow.mib_object_value_oid': { - category: 'netflow', - name: 'netflow.mib_object_value_oid', - type: 'short', - }, - 'netflow.mib_object_value_time_ticks': { - category: 'netflow', - name: 'netflow.mib_object_value_time_ticks', - type: 'long', - }, - 'netflow.mib_object_value_unsigned': { - category: 'netflow', - name: 'netflow.mib_object_value_unsigned', - type: 'long', - }, - 'netflow.mib_sub_identifier': { - category: 'netflow', - name: 'netflow.mib_sub_identifier', - type: 'long', - }, - 'netflow.min_export_seconds': { - category: 'netflow', - name: 'netflow.min_export_seconds', - type: 'date', - }, - 'netflow.min_flow_start_microseconds': { - category: 'netflow', - name: 'netflow.min_flow_start_microseconds', - type: 'date', - }, - 'netflow.min_flow_start_milliseconds': { - category: 'netflow', - name: 'netflow.min_flow_start_milliseconds', - type: 'date', - }, - 'netflow.min_flow_start_nanoseconds': { - category: 'netflow', - name: 'netflow.min_flow_start_nanoseconds', - type: 'date', - }, - 'netflow.min_flow_start_seconds': { - category: 'netflow', - name: 'netflow.min_flow_start_seconds', - type: 'date', - }, - 'netflow.minimum_ip_total_length': { - category: 'netflow', - name: 'netflow.minimum_ip_total_length', - type: 'long', - }, - 'netflow.minimum_layer2_total_length': { - category: 'netflow', - name: 'netflow.minimum_layer2_total_length', - type: 'long', - }, - 'netflow.minimum_ttl': { - category: 'netflow', - name: 'netflow.minimum_ttl', - type: 'short', - }, - 'netflow.mobile_imsi': { - category: 'netflow', - name: 'netflow.mobile_imsi', - type: 'keyword', - }, - 'netflow.mobile_msisdn': { - category: 'netflow', - name: 'netflow.mobile_msisdn', - type: 'keyword', - }, - 'netflow.monitoring_interval_end_milli_seconds': { - category: 'netflow', - name: 'netflow.monitoring_interval_end_milli_seconds', - type: 'date', - }, - 'netflow.monitoring_interval_start_milli_seconds': { - category: 'netflow', - name: 'netflow.monitoring_interval_start_milli_seconds', - type: 'date', - }, - 'netflow.mpls_label_stack_depth': { - category: 'netflow', - name: 'netflow.mpls_label_stack_depth', - type: 'long', - }, - 'netflow.mpls_label_stack_length': { - category: 'netflow', - name: 'netflow.mpls_label_stack_length', - type: 'long', - }, - 'netflow.mpls_label_stack_section': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section', - type: 'short', - }, - 'netflow.mpls_label_stack_section10': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section10', - type: 'short', - }, - 'netflow.mpls_label_stack_section2': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section2', - type: 'short', - }, - 'netflow.mpls_label_stack_section3': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section3', - type: 'short', - }, - 'netflow.mpls_label_stack_section4': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section4', - type: 'short', - }, - 'netflow.mpls_label_stack_section5': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section5', - type: 'short', - }, - 'netflow.mpls_label_stack_section6': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section6', - type: 'short', - }, - 'netflow.mpls_label_stack_section7': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section7', - type: 'short', - }, - 'netflow.mpls_label_stack_section8': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section8', - type: 'short', - }, - 'netflow.mpls_label_stack_section9': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section9', - type: 'short', - }, - 'netflow.mpls_payload_length': { - category: 'netflow', - name: 'netflow.mpls_payload_length', - type: 'long', - }, - 'netflow.mpls_payload_packet_section': { - category: 'netflow', - name: 'netflow.mpls_payload_packet_section', - type: 'short', - }, - 'netflow.mpls_top_label_exp': { - category: 'netflow', - name: 'netflow.mpls_top_label_exp', - type: 'short', - }, - 'netflow.mpls_top_label_ipv4_address': { - category: 'netflow', - name: 'netflow.mpls_top_label_ipv4_address', - type: 'ip', - }, - 'netflow.mpls_top_label_ipv6_address': { - category: 'netflow', - name: 'netflow.mpls_top_label_ipv6_address', - type: 'ip', - }, - 'netflow.mpls_top_label_prefix_length': { - category: 'netflow', - name: 'netflow.mpls_top_label_prefix_length', - type: 'short', - }, - 'netflow.mpls_top_label_stack_section': { - category: 'netflow', - name: 'netflow.mpls_top_label_stack_section', - type: 'short', - }, - 'netflow.mpls_top_label_ttl': { - category: 'netflow', - name: 'netflow.mpls_top_label_ttl', - type: 'short', - }, - 'netflow.mpls_top_label_type': { - category: 'netflow', - name: 'netflow.mpls_top_label_type', - type: 'short', - }, - 'netflow.mpls_vpn_route_distinguisher': { - category: 'netflow', - name: 'netflow.mpls_vpn_route_distinguisher', - type: 'short', - }, - 'netflow.mptcp_address_id': { - category: 'netflow', - name: 'netflow.mptcp_address_id', - type: 'short', - }, - 'netflow.mptcp_flags': { - category: 'netflow', - name: 'netflow.mptcp_flags', - type: 'short', - }, - 'netflow.mptcp_initial_data_sequence_number': { - category: 'netflow', - name: 'netflow.mptcp_initial_data_sequence_number', - type: 'long', - }, - 'netflow.mptcp_maximum_segment_size': { - category: 'netflow', - name: 'netflow.mptcp_maximum_segment_size', - type: 'integer', - }, - 'netflow.mptcp_receiver_token': { - category: 'netflow', - name: 'netflow.mptcp_receiver_token', - type: 'long', - }, - 'netflow.multicast_replication_factor': { - category: 'netflow', - name: 'netflow.multicast_replication_factor', - type: 'long', - }, - 'netflow.nat_event': { - category: 'netflow', - name: 'netflow.nat_event', - type: 'short', - }, - 'netflow.nat_inside_svcid': { - category: 'netflow', - name: 'netflow.nat_inside_svcid', - type: 'integer', - }, - 'netflow.nat_instance_id': { - category: 'netflow', - name: 'netflow.nat_instance_id', - type: 'long', - }, - 'netflow.nat_originating_address_realm': { - category: 'netflow', - name: 'netflow.nat_originating_address_realm', - type: 'short', - }, - 'netflow.nat_outside_svcid': { - category: 'netflow', - name: 'netflow.nat_outside_svcid', - type: 'integer', - }, - 'netflow.nat_pool_id': { - category: 'netflow', - name: 'netflow.nat_pool_id', - type: 'long', - }, - 'netflow.nat_pool_name': { - category: 'netflow', - name: 'netflow.nat_pool_name', - type: 'keyword', - }, - 'netflow.nat_quota_exceeded_event': { - category: 'netflow', - name: 'netflow.nat_quota_exceeded_event', - type: 'long', - }, - 'netflow.nat_sub_string': { - category: 'netflow', - name: 'netflow.nat_sub_string', - type: 'keyword', - }, - 'netflow.nat_threshold_event': { - category: 'netflow', - name: 'netflow.nat_threshold_event', - type: 'long', - }, - 'netflow.nat_type': { - category: 'netflow', - name: 'netflow.nat_type', - type: 'short', - }, - 'netflow.netscale_ica_client_version': { - category: 'netflow', - name: 'netflow.netscale_ica_client_version', - type: 'keyword', - }, - 'netflow.netscaler_aaa_username': { - category: 'netflow', - name: 'netflow.netscaler_aaa_username', - type: 'keyword', - }, - 'netflow.netscaler_app_name': { - category: 'netflow', - name: 'netflow.netscaler_app_name', - type: 'keyword', - }, - 'netflow.netscaler_app_name_app_id': { - category: 'netflow', - name: 'netflow.netscaler_app_name_app_id', - type: 'long', - }, - 'netflow.netscaler_app_name_incarnation_number': { - category: 'netflow', - name: 'netflow.netscaler_app_name_incarnation_number', - type: 'long', - }, - 'netflow.netscaler_app_template_name': { - category: 'netflow', - name: 'netflow.netscaler_app_template_name', - type: 'keyword', - }, - 'netflow.netscaler_app_unit_name_app_id': { - category: 'netflow', - name: 'netflow.netscaler_app_unit_name_app_id', - type: 'long', - }, - 'netflow.netscaler_application_startup_duration': { - category: 'netflow', - name: 'netflow.netscaler_application_startup_duration', - type: 'long', - }, - 'netflow.netscaler_application_startup_time': { - category: 'netflow', - name: 'netflow.netscaler_application_startup_time', - type: 'long', - }, - 'netflow.netscaler_cache_redir_client_connection_core_id': { - category: 'netflow', - name: 'netflow.netscaler_cache_redir_client_connection_core_id', - type: 'long', - }, - 'netflow.netscaler_cache_redir_client_connection_transaction_id': { - category: 'netflow', - name: 'netflow.netscaler_cache_redir_client_connection_transaction_id', - type: 'long', - }, - 'netflow.netscaler_client_rtt': { - category: 'netflow', - name: 'netflow.netscaler_client_rtt', - type: 'long', - }, - 'netflow.netscaler_connection_chain_hop_count': { - category: 'netflow', - name: 'netflow.netscaler_connection_chain_hop_count', - type: 'long', - }, - 'netflow.netscaler_connection_chain_id': { - category: 'netflow', - name: 'netflow.netscaler_connection_chain_id', - type: 'short', - }, - 'netflow.netscaler_connection_id': { - category: 'netflow', - name: 'netflow.netscaler_connection_id', - type: 'long', - }, - 'netflow.netscaler_current_license_consumed': { - category: 'netflow', - name: 'netflow.netscaler_current_license_consumed', - type: 'long', - }, - 'netflow.netscaler_db_clt_host_name': { - category: 'netflow', - name: 'netflow.netscaler_db_clt_host_name', - type: 'keyword', - }, - 'netflow.netscaler_db_database_name': { - category: 'netflow', - name: 'netflow.netscaler_db_database_name', - type: 'keyword', - }, - 'netflow.netscaler_db_login_flags': { - category: 'netflow', - name: 'netflow.netscaler_db_login_flags', - type: 'long', - }, - 'netflow.netscaler_db_protocol_name': { - category: 'netflow', - name: 'netflow.netscaler_db_protocol_name', - type: 'short', - }, - 'netflow.netscaler_db_req_string': { - category: 'netflow', - name: 'netflow.netscaler_db_req_string', - type: 'keyword', - }, - 'netflow.netscaler_db_req_type': { - category: 'netflow', - name: 'netflow.netscaler_db_req_type', - type: 'short', - }, - 'netflow.netscaler_db_resp_length': { - category: 'netflow', - name: 'netflow.netscaler_db_resp_length', - type: 'long', - }, - 'netflow.netscaler_db_resp_status': { - category: 'netflow', - name: 'netflow.netscaler_db_resp_status', - type: 'long', - }, - 'netflow.netscaler_db_resp_status_string': { - category: 'netflow', - name: 'netflow.netscaler_db_resp_status_string', - type: 'keyword', - }, - 'netflow.netscaler_db_user_name': { - category: 'netflow', - name: 'netflow.netscaler_db_user_name', - type: 'keyword', - }, - 'netflow.netscaler_flow_flags': { - category: 'netflow', - name: 'netflow.netscaler_flow_flags', - type: 'long', - }, - 'netflow.netscaler_http_client_interaction_end_time': { - category: 'netflow', - name: 'netflow.netscaler_http_client_interaction_end_time', - type: 'keyword', - }, - 'netflow.netscaler_http_client_interaction_start_time': { - category: 'netflow', - name: 'netflow.netscaler_http_client_interaction_start_time', - type: 'keyword', - }, - 'netflow.netscaler_http_client_render_end_time': { - category: 'netflow', - name: 'netflow.netscaler_http_client_render_end_time', - type: 'keyword', - }, - 'netflow.netscaler_http_client_render_start_time': { - category: 'netflow', - name: 'netflow.netscaler_http_client_render_start_time', - type: 'keyword', - }, - 'netflow.netscaler_http_content_type': { - category: 'netflow', - name: 'netflow.netscaler_http_content_type', - type: 'keyword', - }, - 'netflow.netscaler_http_domain_name': { - category: 'netflow', - name: 'netflow.netscaler_http_domain_name', - type: 'keyword', - }, - 'netflow.netscaler_http_req_authorization': { - category: 'netflow', - name: 'netflow.netscaler_http_req_authorization', - type: 'keyword', - }, - 'netflow.netscaler_http_req_cookie': { - category: 'netflow', - name: 'netflow.netscaler_http_req_cookie', - type: 'keyword', - }, - 'netflow.netscaler_http_req_forw_fb': { - category: 'netflow', - name: 'netflow.netscaler_http_req_forw_fb', - type: 'long', - }, - 'netflow.netscaler_http_req_forw_lb': { - category: 'netflow', - name: 'netflow.netscaler_http_req_forw_lb', - type: 'long', - }, - 'netflow.netscaler_http_req_host': { - category: 'netflow', - name: 'netflow.netscaler_http_req_host', - type: 'keyword', - }, - 'netflow.netscaler_http_req_method': { - category: 'netflow', - name: 'netflow.netscaler_http_req_method', - type: 'keyword', - }, - 'netflow.netscaler_http_req_rcv_fb': { - category: 'netflow', - name: 'netflow.netscaler_http_req_rcv_fb', - type: 'long', - }, - 'netflow.netscaler_http_req_rcv_lb': { - category: 'netflow', - name: 'netflow.netscaler_http_req_rcv_lb', - type: 'long', - }, - 'netflow.netscaler_http_req_referer': { - category: 'netflow', - name: 'netflow.netscaler_http_req_referer', - type: 'keyword', - }, - 'netflow.netscaler_http_req_url': { - category: 'netflow', - name: 'netflow.netscaler_http_req_url', - type: 'keyword', - }, - 'netflow.netscaler_http_req_user_agent': { - category: 'netflow', - name: 'netflow.netscaler_http_req_user_agent', - type: 'keyword', - }, - 'netflow.netscaler_http_req_via': { - category: 'netflow', - name: 'netflow.netscaler_http_req_via', - type: 'keyword', - }, - 'netflow.netscaler_http_req_xforwarded_for': { - category: 'netflow', - name: 'netflow.netscaler_http_req_xforwarded_for', - type: 'keyword', - }, - 'netflow.netscaler_http_res_forw_fb': { - category: 'netflow', - name: 'netflow.netscaler_http_res_forw_fb', - type: 'long', - }, - 'netflow.netscaler_http_res_forw_lb': { - category: 'netflow', - name: 'netflow.netscaler_http_res_forw_lb', - type: 'long', - }, - 'netflow.netscaler_http_res_location': { - category: 'netflow', - name: 'netflow.netscaler_http_res_location', - type: 'keyword', - }, - 'netflow.netscaler_http_res_rcv_fb': { - category: 'netflow', - name: 'netflow.netscaler_http_res_rcv_fb', - type: 'long', - }, - 'netflow.netscaler_http_res_rcv_lb': { - category: 'netflow', - name: 'netflow.netscaler_http_res_rcv_lb', - type: 'long', - }, - 'netflow.netscaler_http_res_set_cookie': { - category: 'netflow', - name: 'netflow.netscaler_http_res_set_cookie', - type: 'keyword', - }, - 'netflow.netscaler_http_res_set_cookie2': { - category: 'netflow', - name: 'netflow.netscaler_http_res_set_cookie2', - type: 'keyword', - }, - 'netflow.netscaler_http_rsp_len': { - category: 'netflow', - name: 'netflow.netscaler_http_rsp_len', - type: 'long', - }, - 'netflow.netscaler_http_rsp_status': { - category: 'netflow', - name: 'netflow.netscaler_http_rsp_status', - type: 'integer', - }, - 'netflow.netscaler_ica_app_module_path': { - category: 'netflow', - name: 'netflow.netscaler_ica_app_module_path', - type: 'keyword', - }, - 'netflow.netscaler_ica_app_process_id': { - category: 'netflow', - name: 'netflow.netscaler_ica_app_process_id', - type: 'long', - }, - 'netflow.netscaler_ica_application_name': { - category: 'netflow', - name: 'netflow.netscaler_ica_application_name', - type: 'keyword', - }, - 'netflow.netscaler_ica_application_termination_time': { - category: 'netflow', - name: 'netflow.netscaler_ica_application_termination_time', - type: 'long', - }, - 'netflow.netscaler_ica_application_termination_type': { - category: 'netflow', - name: 'netflow.netscaler_ica_application_termination_type', - type: 'integer', - }, - 'netflow.netscaler_ica_channel_id1': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id1', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id1_bytes': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id1_bytes', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id2': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id2', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id2_bytes': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id2_bytes', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id3': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id3', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id3_bytes': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id3_bytes', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id4': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id4', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id4_bytes': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id4_bytes', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id5': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id5', - type: 'long', - }, - 'netflow.netscaler_ica_channel_id5_bytes': { - category: 'netflow', - name: 'netflow.netscaler_ica_channel_id5_bytes', - type: 'long', - }, - 'netflow.netscaler_ica_client_host_name': { - category: 'netflow', - name: 'netflow.netscaler_ica_client_host_name', - type: 'keyword', - }, - 'netflow.netscaler_ica_client_ip': { - category: 'netflow', - name: 'netflow.netscaler_ica_client_ip', - type: 'ip', - }, - 'netflow.netscaler_ica_client_launcher': { - category: 'netflow', - name: 'netflow.netscaler_ica_client_launcher', - type: 'integer', - }, - 'netflow.netscaler_ica_client_side_rto_count': { - category: 'netflow', - name: 'netflow.netscaler_ica_client_side_rto_count', - type: 'integer', - }, - 'netflow.netscaler_ica_client_side_window_size': { - category: 'netflow', - name: 'netflow.netscaler_ica_client_side_window_size', - type: 'integer', - }, - 'netflow.netscaler_ica_client_type': { - category: 'netflow', - name: 'netflow.netscaler_ica_client_type', - type: 'integer', - }, - 'netflow.netscaler_ica_clientside_delay': { - category: 'netflow', - name: 'netflow.netscaler_ica_clientside_delay', - type: 'long', - }, - 'netflow.netscaler_ica_clientside_jitter': { - category: 'netflow', - name: 'netflow.netscaler_ica_clientside_jitter', - type: 'long', - }, - 'netflow.netscaler_ica_clientside_packets_retransmit': { - category: 'netflow', - name: 'netflow.netscaler_ica_clientside_packets_retransmit', - type: 'integer', - }, - 'netflow.netscaler_ica_clientside_rtt': { - category: 'netflow', - name: 'netflow.netscaler_ica_clientside_rtt', - type: 'long', - }, - 'netflow.netscaler_ica_clientside_rx_bytes': { - category: 'netflow', - name: 'netflow.netscaler_ica_clientside_rx_bytes', - type: 'long', - }, - 'netflow.netscaler_ica_clientside_srtt': { - category: 'netflow', - name: 'netflow.netscaler_ica_clientside_srtt', - type: 'long', - }, - 'netflow.netscaler_ica_clientside_tx_bytes': { - category: 'netflow', - name: 'netflow.netscaler_ica_clientside_tx_bytes', - type: 'long', - }, - 'netflow.netscaler_ica_connection_priority': { - category: 'netflow', - name: 'netflow.netscaler_ica_connection_priority', - type: 'integer', - }, - 'netflow.netscaler_ica_device_serial_no': { - category: 'netflow', - name: 'netflow.netscaler_ica_device_serial_no', - type: 'long', - }, - 'netflow.netscaler_ica_domain_name': { - category: 'netflow', - name: 'netflow.netscaler_ica_domain_name', - type: 'keyword', - }, - 'netflow.netscaler_ica_flags': { - category: 'netflow', - name: 'netflow.netscaler_ica_flags', - type: 'long', - }, - 'netflow.netscaler_ica_host_delay': { - category: 'netflow', - name: 'netflow.netscaler_ica_host_delay', - type: 'long', - }, - 'netflow.netscaler_ica_l7_client_latency': { - category: 'netflow', - name: 'netflow.netscaler_ica_l7_client_latency', - type: 'long', - }, - 'netflow.netscaler_ica_l7_server_latency': { - category: 'netflow', - name: 'netflow.netscaler_ica_l7_server_latency', - type: 'long', - }, - 'netflow.netscaler_ica_launch_mechanism': { - category: 'netflow', - name: 'netflow.netscaler_ica_launch_mechanism', - type: 'integer', - }, - 'netflow.netscaler_ica_network_update_end_time': { - category: 'netflow', - name: 'netflow.netscaler_ica_network_update_end_time', - type: 'long', - }, - 'netflow.netscaler_ica_network_update_start_time': { - category: 'netflow', - name: 'netflow.netscaler_ica_network_update_start_time', - type: 'long', - }, - 'netflow.netscaler_ica_rtt': { - category: 'netflow', - name: 'netflow.netscaler_ica_rtt', - type: 'long', - }, - 'netflow.netscaler_ica_server_name': { - category: 'netflow', - name: 'netflow.netscaler_ica_server_name', - type: 'keyword', - }, - 'netflow.netscaler_ica_server_side_rto_count': { - category: 'netflow', - name: 'netflow.netscaler_ica_server_side_rto_count', - type: 'integer', - }, - 'netflow.netscaler_ica_server_side_window_size': { - category: 'netflow', - name: 'netflow.netscaler_ica_server_side_window_size', - type: 'integer', - }, - 'netflow.netscaler_ica_serverside_delay': { - category: 'netflow', - name: 'netflow.netscaler_ica_serverside_delay', - type: 'long', - }, - 'netflow.netscaler_ica_serverside_jitter': { - category: 'netflow', - name: 'netflow.netscaler_ica_serverside_jitter', - type: 'long', - }, - 'netflow.netscaler_ica_serverside_packets_retransmit': { - category: 'netflow', - name: 'netflow.netscaler_ica_serverside_packets_retransmit', - type: 'integer', - }, - 'netflow.netscaler_ica_serverside_rtt': { - category: 'netflow', - name: 'netflow.netscaler_ica_serverside_rtt', - type: 'long', - }, - 'netflow.netscaler_ica_serverside_srtt': { - category: 'netflow', - name: 'netflow.netscaler_ica_serverside_srtt', - type: 'long', - }, - 'netflow.netscaler_ica_session_end_time': { - category: 'netflow', - name: 'netflow.netscaler_ica_session_end_time', - type: 'long', - }, - 'netflow.netscaler_ica_session_guid': { - category: 'netflow', - name: 'netflow.netscaler_ica_session_guid', - type: 'short', - }, - 'netflow.netscaler_ica_session_reconnects': { - category: 'netflow', - name: 'netflow.netscaler_ica_session_reconnects', - type: 'short', - }, - 'netflow.netscaler_ica_session_setup_time': { - category: 'netflow', - name: 'netflow.netscaler_ica_session_setup_time', - type: 'long', - }, - 'netflow.netscaler_ica_session_update_begin_sec': { - category: 'netflow', - name: 'netflow.netscaler_ica_session_update_begin_sec', - type: 'long', - }, - 'netflow.netscaler_ica_session_update_end_sec': { - category: 'netflow', - name: 'netflow.netscaler_ica_session_update_end_sec', - type: 'long', - }, - 'netflow.netscaler_ica_username': { - category: 'netflow', - name: 'netflow.netscaler_ica_username', - type: 'keyword', - }, - 'netflow.netscaler_license_type': { - category: 'netflow', - name: 'netflow.netscaler_license_type', - type: 'short', - }, - 'netflow.netscaler_main_page_core_id': { - category: 'netflow', - name: 'netflow.netscaler_main_page_core_id', - type: 'long', - }, - 'netflow.netscaler_main_page_id': { - category: 'netflow', - name: 'netflow.netscaler_main_page_id', - type: 'long', - }, - 'netflow.netscaler_max_license_count': { - category: 'netflow', - name: 'netflow.netscaler_max_license_count', - type: 'long', - }, - 'netflow.netscaler_msi_client_cookie': { - category: 'netflow', - name: 'netflow.netscaler_msi_client_cookie', - type: 'short', - }, - 'netflow.netscaler_round_trip_time': { - category: 'netflow', - name: 'netflow.netscaler_round_trip_time', - type: 'long', - }, - 'netflow.netscaler_server_ttfb': { - category: 'netflow', - name: 'netflow.netscaler_server_ttfb', - type: 'long', - }, - 'netflow.netscaler_server_ttlb': { - category: 'netflow', - name: 'netflow.netscaler_server_ttlb', - type: 'long', - }, - 'netflow.netscaler_syslog_message': { - category: 'netflow', - name: 'netflow.netscaler_syslog_message', - type: 'keyword', - }, - 'netflow.netscaler_syslog_priority': { - category: 'netflow', - name: 'netflow.netscaler_syslog_priority', - type: 'short', - }, - 'netflow.netscaler_syslog_timestamp': { - category: 'netflow', - name: 'netflow.netscaler_syslog_timestamp', - type: 'long', - }, - 'netflow.netscaler_transaction_id': { - category: 'netflow', - name: 'netflow.netscaler_transaction_id', - type: 'long', - }, - 'netflow.netscaler_unknown270': { - category: 'netflow', - name: 'netflow.netscaler_unknown270', - type: 'long', - }, - 'netflow.netscaler_unknown271': { - category: 'netflow', - name: 'netflow.netscaler_unknown271', - type: 'long', - }, - 'netflow.netscaler_unknown272': { - category: 'netflow', - name: 'netflow.netscaler_unknown272', - type: 'long', - }, - 'netflow.netscaler_unknown273': { - category: 'netflow', - name: 'netflow.netscaler_unknown273', - type: 'long', - }, - 'netflow.netscaler_unknown274': { - category: 'netflow', - name: 'netflow.netscaler_unknown274', - type: 'long', - }, - 'netflow.netscaler_unknown275': { - category: 'netflow', - name: 'netflow.netscaler_unknown275', - type: 'long', - }, - 'netflow.netscaler_unknown276': { - category: 'netflow', - name: 'netflow.netscaler_unknown276', - type: 'long', - }, - 'netflow.netscaler_unknown277': { - category: 'netflow', - name: 'netflow.netscaler_unknown277', - type: 'long', - }, - 'netflow.netscaler_unknown278': { - category: 'netflow', - name: 'netflow.netscaler_unknown278', - type: 'long', - }, - 'netflow.netscaler_unknown279': { - category: 'netflow', - name: 'netflow.netscaler_unknown279', - type: 'long', - }, - 'netflow.netscaler_unknown280': { - category: 'netflow', - name: 'netflow.netscaler_unknown280', - type: 'long', - }, - 'netflow.netscaler_unknown281': { - category: 'netflow', - name: 'netflow.netscaler_unknown281', - type: 'long', - }, - 'netflow.netscaler_unknown282': { - category: 'netflow', - name: 'netflow.netscaler_unknown282', - type: 'long', - }, - 'netflow.netscaler_unknown283': { - category: 'netflow', - name: 'netflow.netscaler_unknown283', - type: 'long', - }, - 'netflow.netscaler_unknown284': { - category: 'netflow', - name: 'netflow.netscaler_unknown284', - type: 'long', - }, - 'netflow.netscaler_unknown285': { - category: 'netflow', - name: 'netflow.netscaler_unknown285', - type: 'long', - }, - 'netflow.netscaler_unknown286': { - category: 'netflow', - name: 'netflow.netscaler_unknown286', - type: 'long', - }, - 'netflow.netscaler_unknown287': { - category: 'netflow', - name: 'netflow.netscaler_unknown287', - type: 'long', - }, - 'netflow.netscaler_unknown288': { - category: 'netflow', - name: 'netflow.netscaler_unknown288', - type: 'long', - }, - 'netflow.netscaler_unknown289': { - category: 'netflow', - name: 'netflow.netscaler_unknown289', - type: 'long', - }, - 'netflow.netscaler_unknown290': { - category: 'netflow', - name: 'netflow.netscaler_unknown290', - type: 'long', - }, - 'netflow.netscaler_unknown291': { - category: 'netflow', - name: 'netflow.netscaler_unknown291', - type: 'long', - }, - 'netflow.netscaler_unknown292': { - category: 'netflow', - name: 'netflow.netscaler_unknown292', - type: 'long', - }, - 'netflow.netscaler_unknown293': { - category: 'netflow', - name: 'netflow.netscaler_unknown293', - type: 'long', - }, - 'netflow.netscaler_unknown294': { - category: 'netflow', - name: 'netflow.netscaler_unknown294', - type: 'long', - }, - 'netflow.netscaler_unknown295': { - category: 'netflow', - name: 'netflow.netscaler_unknown295', - type: 'long', - }, - 'netflow.netscaler_unknown296': { - category: 'netflow', - name: 'netflow.netscaler_unknown296', - type: 'long', - }, - 'netflow.netscaler_unknown297': { - category: 'netflow', - name: 'netflow.netscaler_unknown297', - type: 'long', - }, - 'netflow.netscaler_unknown298': { - category: 'netflow', - name: 'netflow.netscaler_unknown298', - type: 'long', - }, - 'netflow.netscaler_unknown299': { - category: 'netflow', - name: 'netflow.netscaler_unknown299', - type: 'long', - }, - 'netflow.netscaler_unknown300': { - category: 'netflow', - name: 'netflow.netscaler_unknown300', - type: 'long', - }, - 'netflow.netscaler_unknown301': { - category: 'netflow', - name: 'netflow.netscaler_unknown301', - type: 'long', - }, - 'netflow.netscaler_unknown302': { - category: 'netflow', - name: 'netflow.netscaler_unknown302', - type: 'long', - }, - 'netflow.netscaler_unknown303': { - category: 'netflow', - name: 'netflow.netscaler_unknown303', - type: 'long', - }, - 'netflow.netscaler_unknown304': { - category: 'netflow', - name: 'netflow.netscaler_unknown304', - type: 'long', - }, - 'netflow.netscaler_unknown305': { - category: 'netflow', - name: 'netflow.netscaler_unknown305', - type: 'long', - }, - 'netflow.netscaler_unknown306': { - category: 'netflow', - name: 'netflow.netscaler_unknown306', - type: 'long', - }, - 'netflow.netscaler_unknown307': { - category: 'netflow', - name: 'netflow.netscaler_unknown307', - type: 'long', - }, - 'netflow.netscaler_unknown308': { - category: 'netflow', - name: 'netflow.netscaler_unknown308', - type: 'long', - }, - 'netflow.netscaler_unknown309': { - category: 'netflow', - name: 'netflow.netscaler_unknown309', - type: 'long', - }, - 'netflow.netscaler_unknown310': { - category: 'netflow', - name: 'netflow.netscaler_unknown310', - type: 'long', - }, - 'netflow.netscaler_unknown311': { - category: 'netflow', - name: 'netflow.netscaler_unknown311', - type: 'long', - }, - 'netflow.netscaler_unknown312': { - category: 'netflow', - name: 'netflow.netscaler_unknown312', - type: 'long', - }, - 'netflow.netscaler_unknown313': { - category: 'netflow', - name: 'netflow.netscaler_unknown313', - type: 'long', - }, - 'netflow.netscaler_unknown314': { - category: 'netflow', - name: 'netflow.netscaler_unknown314', - type: 'long', - }, - 'netflow.netscaler_unknown315': { - category: 'netflow', - name: 'netflow.netscaler_unknown315', - type: 'long', - }, - 'netflow.netscaler_unknown316': { - category: 'netflow', - name: 'netflow.netscaler_unknown316', - type: 'keyword', - }, - 'netflow.netscaler_unknown317': { - category: 'netflow', - name: 'netflow.netscaler_unknown317', - type: 'long', - }, - 'netflow.netscaler_unknown318': { - category: 'netflow', - name: 'netflow.netscaler_unknown318', - type: 'long', - }, - 'netflow.netscaler_unknown319': { - category: 'netflow', - name: 'netflow.netscaler_unknown319', - type: 'keyword', - }, - 'netflow.netscaler_unknown320': { - category: 'netflow', - name: 'netflow.netscaler_unknown320', - type: 'integer', - }, - 'netflow.netscaler_unknown321': { - category: 'netflow', - name: 'netflow.netscaler_unknown321', - type: 'long', - }, - 'netflow.netscaler_unknown322': { - category: 'netflow', - name: 'netflow.netscaler_unknown322', - type: 'long', - }, - 'netflow.netscaler_unknown323': { - category: 'netflow', - name: 'netflow.netscaler_unknown323', - type: 'integer', - }, - 'netflow.netscaler_unknown324': { - category: 'netflow', - name: 'netflow.netscaler_unknown324', - type: 'integer', - }, - 'netflow.netscaler_unknown325': { - category: 'netflow', - name: 'netflow.netscaler_unknown325', - type: 'integer', - }, - 'netflow.netscaler_unknown326': { - category: 'netflow', - name: 'netflow.netscaler_unknown326', - type: 'integer', - }, - 'netflow.netscaler_unknown327': { - category: 'netflow', - name: 'netflow.netscaler_unknown327', - type: 'long', - }, - 'netflow.netscaler_unknown328': { - category: 'netflow', - name: 'netflow.netscaler_unknown328', - type: 'integer', - }, - 'netflow.netscaler_unknown329': { - category: 'netflow', - name: 'netflow.netscaler_unknown329', - type: 'integer', - }, - 'netflow.netscaler_unknown330': { - category: 'netflow', - name: 'netflow.netscaler_unknown330', - type: 'integer', - }, - 'netflow.netscaler_unknown331': { - category: 'netflow', - name: 'netflow.netscaler_unknown331', - type: 'integer', - }, - 'netflow.netscaler_unknown332': { - category: 'netflow', - name: 'netflow.netscaler_unknown332', - type: 'long', - }, - 'netflow.netscaler_unknown333': { - category: 'netflow', - name: 'netflow.netscaler_unknown333', - type: 'keyword', - }, - 'netflow.netscaler_unknown334': { - category: 'netflow', - name: 'netflow.netscaler_unknown334', - type: 'keyword', - }, - 'netflow.netscaler_unknown335': { - category: 'netflow', - name: 'netflow.netscaler_unknown335', - type: 'long', - }, - 'netflow.netscaler_unknown336': { - category: 'netflow', - name: 'netflow.netscaler_unknown336', - type: 'long', - }, - 'netflow.netscaler_unknown337': { - category: 'netflow', - name: 'netflow.netscaler_unknown337', - type: 'long', - }, - 'netflow.netscaler_unknown338': { - category: 'netflow', - name: 'netflow.netscaler_unknown338', - type: 'long', - }, - 'netflow.netscaler_unknown339': { - category: 'netflow', - name: 'netflow.netscaler_unknown339', - type: 'long', - }, - 'netflow.netscaler_unknown340': { - category: 'netflow', - name: 'netflow.netscaler_unknown340', - type: 'long', - }, - 'netflow.netscaler_unknown341': { - category: 'netflow', - name: 'netflow.netscaler_unknown341', - type: 'long', - }, - 'netflow.netscaler_unknown342': { - category: 'netflow', - name: 'netflow.netscaler_unknown342', - type: 'long', - }, - 'netflow.netscaler_unknown343': { - category: 'netflow', - name: 'netflow.netscaler_unknown343', - type: 'long', - }, - 'netflow.netscaler_unknown344': { - category: 'netflow', - name: 'netflow.netscaler_unknown344', - type: 'long', - }, - 'netflow.netscaler_unknown345': { - category: 'netflow', - name: 'netflow.netscaler_unknown345', - type: 'long', - }, - 'netflow.netscaler_unknown346': { - category: 'netflow', - name: 'netflow.netscaler_unknown346', - type: 'long', - }, - 'netflow.netscaler_unknown347': { - category: 'netflow', - name: 'netflow.netscaler_unknown347', - type: 'long', - }, - 'netflow.netscaler_unknown348': { - category: 'netflow', - name: 'netflow.netscaler_unknown348', - type: 'integer', - }, - 'netflow.netscaler_unknown349': { - category: 'netflow', - name: 'netflow.netscaler_unknown349', - type: 'keyword', - }, - 'netflow.netscaler_unknown350': { - category: 'netflow', - name: 'netflow.netscaler_unknown350', - type: 'keyword', - }, - 'netflow.netscaler_unknown351': { - category: 'netflow', - name: 'netflow.netscaler_unknown351', - type: 'keyword', - }, - 'netflow.netscaler_unknown352': { - category: 'netflow', - name: 'netflow.netscaler_unknown352', - type: 'integer', - }, - 'netflow.netscaler_unknown353': { - category: 'netflow', - name: 'netflow.netscaler_unknown353', - type: 'long', - }, - 'netflow.netscaler_unknown354': { - category: 'netflow', - name: 'netflow.netscaler_unknown354', - type: 'long', - }, - 'netflow.netscaler_unknown355': { - category: 'netflow', - name: 'netflow.netscaler_unknown355', - type: 'long', - }, - 'netflow.netscaler_unknown356': { - category: 'netflow', - name: 'netflow.netscaler_unknown356', - type: 'long', - }, - 'netflow.netscaler_unknown357': { - category: 'netflow', - name: 'netflow.netscaler_unknown357', - type: 'long', - }, - 'netflow.netscaler_unknown363': { - category: 'netflow', - name: 'netflow.netscaler_unknown363', - type: 'short', - }, - 'netflow.netscaler_unknown383': { - category: 'netflow', - name: 'netflow.netscaler_unknown383', - type: 'short', - }, - 'netflow.netscaler_unknown391': { - category: 'netflow', - name: 'netflow.netscaler_unknown391', - type: 'long', - }, - 'netflow.netscaler_unknown398': { - category: 'netflow', - name: 'netflow.netscaler_unknown398', - type: 'long', - }, - 'netflow.netscaler_unknown404': { - category: 'netflow', - name: 'netflow.netscaler_unknown404', - type: 'long', - }, - 'netflow.netscaler_unknown405': { - category: 'netflow', - name: 'netflow.netscaler_unknown405', - type: 'long', - }, - 'netflow.netscaler_unknown427': { - category: 'netflow', - name: 'netflow.netscaler_unknown427', - type: 'long', - }, - 'netflow.netscaler_unknown429': { - category: 'netflow', - name: 'netflow.netscaler_unknown429', - type: 'short', - }, - 'netflow.netscaler_unknown432': { - category: 'netflow', - name: 'netflow.netscaler_unknown432', - type: 'short', - }, - 'netflow.netscaler_unknown433': { - category: 'netflow', - name: 'netflow.netscaler_unknown433', - type: 'short', - }, - 'netflow.netscaler_unknown453': { - category: 'netflow', - name: 'netflow.netscaler_unknown453', - type: 'long', - }, - 'netflow.netscaler_unknown465': { - category: 'netflow', - name: 'netflow.netscaler_unknown465', - type: 'long', - }, - 'netflow.new_connection_delta_count': { - category: 'netflow', - name: 'netflow.new_connection_delta_count', - type: 'long', - }, - 'netflow.next_header_ipv6': { - category: 'netflow', - name: 'netflow.next_header_ipv6', - type: 'short', - }, - 'netflow.non_empty_packet_count': { - category: 'netflow', - name: 'netflow.non_empty_packet_count', - type: 'long', - }, - 'netflow.not_sent_flow_total_count': { - category: 'netflow', - name: 'netflow.not_sent_flow_total_count', - type: 'long', - }, - 'netflow.not_sent_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.not_sent_layer2_octet_total_count', - type: 'long', - }, - 'netflow.not_sent_octet_total_count': { - category: 'netflow', - name: 'netflow.not_sent_octet_total_count', - type: 'long', - }, - 'netflow.not_sent_packet_total_count': { - category: 'netflow', - name: 'netflow.not_sent_packet_total_count', - type: 'long', - }, - 'netflow.observation_domain_id': { - category: 'netflow', - name: 'netflow.observation_domain_id', - type: 'long', - }, - 'netflow.observation_domain_name': { - category: 'netflow', - name: 'netflow.observation_domain_name', - type: 'keyword', - }, - 'netflow.observation_point_id': { - category: 'netflow', - name: 'netflow.observation_point_id', - type: 'long', - }, - 'netflow.observation_point_type': { - category: 'netflow', - name: 'netflow.observation_point_type', - type: 'short', - }, - 'netflow.observation_time_microseconds': { - category: 'netflow', - name: 'netflow.observation_time_microseconds', - type: 'date', - }, - 'netflow.observation_time_milliseconds': { - category: 'netflow', - name: 'netflow.observation_time_milliseconds', - type: 'date', - }, - 'netflow.observation_time_nanoseconds': { - category: 'netflow', - name: 'netflow.observation_time_nanoseconds', - type: 'date', - }, - 'netflow.observation_time_seconds': { - category: 'netflow', - name: 'netflow.observation_time_seconds', - type: 'date', - }, - 'netflow.observed_flow_total_count': { - category: 'netflow', - name: 'netflow.observed_flow_total_count', - type: 'long', - }, - 'netflow.octet_delta_count': { - category: 'netflow', - name: 'netflow.octet_delta_count', - type: 'long', - }, - 'netflow.octet_delta_sum_of_squares': { - category: 'netflow', - name: 'netflow.octet_delta_sum_of_squares', - type: 'long', - }, - 'netflow.octet_total_count': { - category: 'netflow', - name: 'netflow.octet_total_count', - type: 'long', - }, - 'netflow.octet_total_sum_of_squares': { - category: 'netflow', - name: 'netflow.octet_total_sum_of_squares', - type: 'long', - }, - 'netflow.opaque_octets': { - category: 'netflow', - name: 'netflow.opaque_octets', - type: 'short', - }, - 'netflow.original_exporter_ipv4_address': { - category: 'netflow', - name: 'netflow.original_exporter_ipv4_address', - type: 'ip', - }, - 'netflow.original_exporter_ipv6_address': { - category: 'netflow', - name: 'netflow.original_exporter_ipv6_address', - type: 'ip', - }, - 'netflow.original_flows_completed': { - category: 'netflow', - name: 'netflow.original_flows_completed', - type: 'long', - }, - 'netflow.original_flows_initiated': { - category: 'netflow', - name: 'netflow.original_flows_initiated', - type: 'long', - }, - 'netflow.original_flows_present': { - category: 'netflow', - name: 'netflow.original_flows_present', - type: 'long', - }, - 'netflow.original_observation_domain_id': { - category: 'netflow', - name: 'netflow.original_observation_domain_id', - type: 'long', - }, - 'netflow.os_finger_print': { - category: 'netflow', - name: 'netflow.os_finger_print', - type: 'keyword', - }, - 'netflow.os_name': { - category: 'netflow', - name: 'netflow.os_name', - type: 'keyword', - }, - 'netflow.os_version': { - category: 'netflow', - name: 'netflow.os_version', - type: 'keyword', - }, - 'netflow.p2p_technology': { - category: 'netflow', - name: 'netflow.p2p_technology', - type: 'keyword', - }, - 'netflow.packet_delta_count': { - category: 'netflow', - name: 'netflow.packet_delta_count', - type: 'long', - }, - 'netflow.packet_total_count': { - category: 'netflow', - name: 'netflow.packet_total_count', - type: 'long', - }, - 'netflow.padding_octets': { - category: 'netflow', - name: 'netflow.padding_octets', - type: 'short', - }, - 'netflow.payload': { - category: 'netflow', - name: 'netflow.payload', - type: 'keyword', - }, - 'netflow.payload_entropy': { - category: 'netflow', - name: 'netflow.payload_entropy', - type: 'short', - }, - 'netflow.payload_length_ipv6': { - category: 'netflow', - name: 'netflow.payload_length_ipv6', - type: 'integer', - }, - 'netflow.policy_qos_classification_hierarchy': { - category: 'netflow', - name: 'netflow.policy_qos_classification_hierarchy', - type: 'long', - }, - 'netflow.policy_qos_queue_index': { - category: 'netflow', - name: 'netflow.policy_qos_queue_index', - type: 'long', - }, - 'netflow.policy_qos_queuedrops': { - category: 'netflow', - name: 'netflow.policy_qos_queuedrops', - type: 'long', - }, - 'netflow.policy_qos_queueindex': { - category: 'netflow', - name: 'netflow.policy_qos_queueindex', - type: 'long', - }, - 'netflow.port_id': { - category: 'netflow', - name: 'netflow.port_id', - type: 'long', - }, - 'netflow.port_range_end': { - category: 'netflow', - name: 'netflow.port_range_end', - type: 'integer', - }, - 'netflow.port_range_num_ports': { - category: 'netflow', - name: 'netflow.port_range_num_ports', - type: 'integer', - }, - 'netflow.port_range_start': { - category: 'netflow', - name: 'netflow.port_range_start', - type: 'integer', - }, - 'netflow.port_range_step_size': { - category: 'netflow', - name: 'netflow.port_range_step_size', - type: 'integer', - }, - 'netflow.post_destination_mac_address': { - category: 'netflow', - name: 'netflow.post_destination_mac_address', - type: 'keyword', - }, - 'netflow.post_dot1q_customer_vlan_id': { - category: 'netflow', - name: 'netflow.post_dot1q_customer_vlan_id', - type: 'integer', - }, - 'netflow.post_dot1q_vlan_id': { - category: 'netflow', - name: 'netflow.post_dot1q_vlan_id', - type: 'integer', - }, - 'netflow.post_ip_class_of_service': { - category: 'netflow', - name: 'netflow.post_ip_class_of_service', - type: 'short', - }, - 'netflow.post_ip_diff_serv_code_point': { - category: 'netflow', - name: 'netflow.post_ip_diff_serv_code_point', - type: 'short', - }, - 'netflow.post_ip_precedence': { - category: 'netflow', - name: 'netflow.post_ip_precedence', - type: 'short', - }, - 'netflow.post_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.post_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.post_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.post_layer2_octet_total_count', - type: 'long', - }, - 'netflow.post_mcast_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.post_mcast_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.post_mcast_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.post_mcast_layer2_octet_total_count', - type: 'long', - }, - 'netflow.post_mcast_octet_delta_count': { - category: 'netflow', - name: 'netflow.post_mcast_octet_delta_count', - type: 'long', - }, - 'netflow.post_mcast_octet_total_count': { - category: 'netflow', - name: 'netflow.post_mcast_octet_total_count', - type: 'long', - }, - 'netflow.post_mcast_packet_delta_count': { - category: 'netflow', - name: 'netflow.post_mcast_packet_delta_count', - type: 'long', - }, - 'netflow.post_mcast_packet_total_count': { - category: 'netflow', - name: 'netflow.post_mcast_packet_total_count', - type: 'long', - }, - 'netflow.post_mpls_top_label_exp': { - category: 'netflow', - name: 'netflow.post_mpls_top_label_exp', - type: 'short', - }, - 'netflow.post_napt_destination_transport_port': { - category: 'netflow', - name: 'netflow.post_napt_destination_transport_port', - type: 'integer', - }, - 'netflow.post_napt_source_transport_port': { - category: 'netflow', - name: 'netflow.post_napt_source_transport_port', - type: 'integer', - }, - 'netflow.post_nat_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.post_nat_destination_ipv4_address', - type: 'ip', - }, - 'netflow.post_nat_destination_ipv6_address': { - category: 'netflow', - name: 'netflow.post_nat_destination_ipv6_address', - type: 'ip', - }, - 'netflow.post_nat_source_ipv4_address': { - category: 'netflow', - name: 'netflow.post_nat_source_ipv4_address', - type: 'ip', - }, - 'netflow.post_nat_source_ipv6_address': { - category: 'netflow', - name: 'netflow.post_nat_source_ipv6_address', - type: 'ip', - }, - 'netflow.post_octet_delta_count': { - category: 'netflow', - name: 'netflow.post_octet_delta_count', - type: 'long', - }, - 'netflow.post_octet_total_count': { - category: 'netflow', - name: 'netflow.post_octet_total_count', - type: 'long', - }, - 'netflow.post_packet_delta_count': { - category: 'netflow', - name: 'netflow.post_packet_delta_count', - type: 'long', - }, - 'netflow.post_packet_total_count': { - category: 'netflow', - name: 'netflow.post_packet_total_count', - type: 'long', - }, - 'netflow.post_source_mac_address': { - category: 'netflow', - name: 'netflow.post_source_mac_address', - type: 'keyword', - }, - 'netflow.post_vlan_id': { - category: 'netflow', - name: 'netflow.post_vlan_id', - type: 'integer', - }, - 'netflow.private_enterprise_number': { - category: 'netflow', - name: 'netflow.private_enterprise_number', - type: 'long', - }, - 'netflow.procera_apn': { - category: 'netflow', - name: 'netflow.procera_apn', - type: 'keyword', - }, - 'netflow.procera_base_service': { - category: 'netflow', - name: 'netflow.procera_base_service', - type: 'keyword', - }, - 'netflow.procera_content_categories': { - category: 'netflow', - name: 'netflow.procera_content_categories', - type: 'keyword', - }, - 'netflow.procera_device_id': { - category: 'netflow', - name: 'netflow.procera_device_id', - type: 'long', - }, - 'netflow.procera_external_rtt': { - category: 'netflow', - name: 'netflow.procera_external_rtt', - type: 'integer', - }, - 'netflow.procera_flow_behavior': { - category: 'netflow', - name: 'netflow.procera_flow_behavior', - type: 'keyword', - }, - 'netflow.procera_ggsn': { - category: 'netflow', - name: 'netflow.procera_ggsn', - type: 'keyword', - }, - 'netflow.procera_http_content_type': { - category: 'netflow', - name: 'netflow.procera_http_content_type', - type: 'keyword', - }, - 'netflow.procera_http_file_length': { - category: 'netflow', - name: 'netflow.procera_http_file_length', - type: 'long', - }, - 'netflow.procera_http_language': { - category: 'netflow', - name: 'netflow.procera_http_language', - type: 'keyword', - }, - 'netflow.procera_http_location': { - category: 'netflow', - name: 'netflow.procera_http_location', - type: 'keyword', - }, - 'netflow.procera_http_referer': { - category: 'netflow', - name: 'netflow.procera_http_referer', - type: 'keyword', - }, - 'netflow.procera_http_request_method': { - category: 'netflow', - name: 'netflow.procera_http_request_method', - type: 'keyword', - }, - 'netflow.procera_http_request_version': { - category: 'netflow', - name: 'netflow.procera_http_request_version', - type: 'keyword', - }, - 'netflow.procera_http_response_status': { - category: 'netflow', - name: 'netflow.procera_http_response_status', - type: 'integer', - }, - 'netflow.procera_http_url': { - category: 'netflow', - name: 'netflow.procera_http_url', - type: 'keyword', - }, - 'netflow.procera_http_user_agent': { - category: 'netflow', - name: 'netflow.procera_http_user_agent', - type: 'keyword', - }, - 'netflow.procera_imsi': { - category: 'netflow', - name: 'netflow.procera_imsi', - type: 'long', - }, - 'netflow.procera_incoming_octets': { - category: 'netflow', - name: 'netflow.procera_incoming_octets', - type: 'long', - }, - 'netflow.procera_incoming_packets': { - category: 'netflow', - name: 'netflow.procera_incoming_packets', - type: 'long', - }, - 'netflow.procera_incoming_shaping_drops': { - category: 'netflow', - name: 'netflow.procera_incoming_shaping_drops', - type: 'long', - }, - 'netflow.procera_incoming_shaping_latency': { - category: 'netflow', - name: 'netflow.procera_incoming_shaping_latency', - type: 'integer', - }, - 'netflow.procera_internal_rtt': { - category: 'netflow', - name: 'netflow.procera_internal_rtt', - type: 'integer', - }, - 'netflow.procera_local_ipv4_host': { - category: 'netflow', - name: 'netflow.procera_local_ipv4_host', - type: 'ip', - }, - 'netflow.procera_local_ipv6_host': { - category: 'netflow', - name: 'netflow.procera_local_ipv6_host', - type: 'ip', - }, - 'netflow.procera_msisdn': { - category: 'netflow', - name: 'netflow.procera_msisdn', - type: 'long', - }, - 'netflow.procera_outgoing_octets': { - category: 'netflow', - name: 'netflow.procera_outgoing_octets', - type: 'long', - }, - 'netflow.procera_outgoing_packets': { - category: 'netflow', - name: 'netflow.procera_outgoing_packets', - type: 'long', - }, - 'netflow.procera_outgoing_shaping_drops': { - category: 'netflow', - name: 'netflow.procera_outgoing_shaping_drops', - type: 'long', - }, - 'netflow.procera_outgoing_shaping_latency': { - category: 'netflow', - name: 'netflow.procera_outgoing_shaping_latency', - type: 'integer', - }, - 'netflow.procera_property': { - category: 'netflow', - name: 'netflow.procera_property', - type: 'keyword', - }, - 'netflow.procera_qoe_incoming_external': { - category: 'netflow', - name: 'netflow.procera_qoe_incoming_external', - type: 'float', - }, - 'netflow.procera_qoe_incoming_internal': { - category: 'netflow', - name: 'netflow.procera_qoe_incoming_internal', - type: 'float', - }, - 'netflow.procera_qoe_outgoing_external': { - category: 'netflow', - name: 'netflow.procera_qoe_outgoing_external', - type: 'float', - }, - 'netflow.procera_qoe_outgoing_internal': { - category: 'netflow', - name: 'netflow.procera_qoe_outgoing_internal', - type: 'float', - }, - 'netflow.procera_rat': { - category: 'netflow', - name: 'netflow.procera_rat', - type: 'keyword', - }, - 'netflow.procera_remote_ipv4_host': { - category: 'netflow', - name: 'netflow.procera_remote_ipv4_host', - type: 'ip', - }, - 'netflow.procera_remote_ipv6_host': { - category: 'netflow', - name: 'netflow.procera_remote_ipv6_host', - type: 'ip', - }, - 'netflow.procera_rnc': { - category: 'netflow', - name: 'netflow.procera_rnc', - type: 'integer', - }, - 'netflow.procera_server_hostname': { - category: 'netflow', - name: 'netflow.procera_server_hostname', - type: 'keyword', - }, - 'netflow.procera_service': { - category: 'netflow', - name: 'netflow.procera_service', - type: 'keyword', - }, - 'netflow.procera_sgsn': { - category: 'netflow', - name: 'netflow.procera_sgsn', - type: 'keyword', - }, - 'netflow.procera_subscriber_identifier': { - category: 'netflow', - name: 'netflow.procera_subscriber_identifier', - type: 'keyword', - }, - 'netflow.procera_template_name': { - category: 'netflow', - name: 'netflow.procera_template_name', - type: 'keyword', - }, - 'netflow.procera_user_location_information': { - category: 'netflow', - name: 'netflow.procera_user_location_information', - type: 'keyword', - }, - 'netflow.protocol_identifier': { - category: 'netflow', - name: 'netflow.protocol_identifier', - type: 'short', - }, - 'netflow.pseudo_wire_control_word': { - category: 'netflow', - name: 'netflow.pseudo_wire_control_word', - type: 'long', - }, - 'netflow.pseudo_wire_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.pseudo_wire_destination_ipv4_address', - type: 'ip', - }, - 'netflow.pseudo_wire_id': { - category: 'netflow', - name: 'netflow.pseudo_wire_id', - type: 'long', - }, - 'netflow.pseudo_wire_type': { - category: 'netflow', - name: 'netflow.pseudo_wire_type', - type: 'integer', - }, - 'netflow.reason': { - category: 'netflow', - name: 'netflow.reason', - type: 'long', - }, - 'netflow.reason_text': { - category: 'netflow', - name: 'netflow.reason_text', - type: 'keyword', - }, - 'netflow.relative_error': { - category: 'netflow', - name: 'netflow.relative_error', - type: 'double', - }, - 'netflow.responder_octets': { - category: 'netflow', - name: 'netflow.responder_octets', - type: 'long', - }, - 'netflow.responder_packets': { - category: 'netflow', - name: 'netflow.responder_packets', - type: 'long', - }, - 'netflow.reverse_absolute_error': { - category: 'netflow', - name: 'netflow.reverse_absolute_error', - type: 'double', - }, - 'netflow.reverse_anonymization_flags': { - category: 'netflow', - name: 'netflow.reverse_anonymization_flags', - type: 'integer', - }, - 'netflow.reverse_anonymization_technique': { - category: 'netflow', - name: 'netflow.reverse_anonymization_technique', - type: 'integer', - }, - 'netflow.reverse_application_category_name': { - category: 'netflow', - name: 'netflow.reverse_application_category_name', - type: 'keyword', - }, - 'netflow.reverse_application_description': { - category: 'netflow', - name: 'netflow.reverse_application_description', - type: 'keyword', - }, - 'netflow.reverse_application_group_name': { - category: 'netflow', - name: 'netflow.reverse_application_group_name', - type: 'keyword', - }, - 'netflow.reverse_application_id': { - category: 'netflow', - name: 'netflow.reverse_application_id', - type: 'keyword', - }, - 'netflow.reverse_application_name': { - category: 'netflow', - name: 'netflow.reverse_application_name', - type: 'keyword', - }, - 'netflow.reverse_application_sub_category_name': { - category: 'netflow', - name: 'netflow.reverse_application_sub_category_name', - type: 'keyword', - }, - 'netflow.reverse_average_interarrival_time': { - category: 'netflow', - name: 'netflow.reverse_average_interarrival_time', - type: 'long', - }, - 'netflow.reverse_bgp_destination_as_number': { - category: 'netflow', - name: 'netflow.reverse_bgp_destination_as_number', - type: 'long', - }, - 'netflow.reverse_bgp_next_adjacent_as_number': { - category: 'netflow', - name: 'netflow.reverse_bgp_next_adjacent_as_number', - type: 'long', - }, - 'netflow.reverse_bgp_next_hop_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_bgp_next_hop_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_bgp_next_hop_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_bgp_next_hop_ipv6_address', - type: 'ip', - }, - 'netflow.reverse_bgp_prev_adjacent_as_number': { - category: 'netflow', - name: 'netflow.reverse_bgp_prev_adjacent_as_number', - type: 'long', - }, - 'netflow.reverse_bgp_source_as_number': { - category: 'netflow', - name: 'netflow.reverse_bgp_source_as_number', - type: 'long', - }, - 'netflow.reverse_bgp_validity_state': { - category: 'netflow', - name: 'netflow.reverse_bgp_validity_state', - type: 'short', - }, - 'netflow.reverse_class_id': { - category: 'netflow', - name: 'netflow.reverse_class_id', - type: 'short', - }, - 'netflow.reverse_class_name': { - category: 'netflow', - name: 'netflow.reverse_class_name', - type: 'keyword', - }, - 'netflow.reverse_classification_engine_id': { - category: 'netflow', - name: 'netflow.reverse_classification_engine_id', - type: 'short', - }, - 'netflow.reverse_collection_time_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_collection_time_milliseconds', - type: 'long', - }, - 'netflow.reverse_collector_certificate': { - category: 'netflow', - name: 'netflow.reverse_collector_certificate', - type: 'keyword', - }, - 'netflow.reverse_confidence_level': { - category: 'netflow', - name: 'netflow.reverse_confidence_level', - type: 'double', - }, - 'netflow.reverse_connection_sum_duration_seconds': { - category: 'netflow', - name: 'netflow.reverse_connection_sum_duration_seconds', - type: 'long', - }, - 'netflow.reverse_connection_transaction_id': { - category: 'netflow', - name: 'netflow.reverse_connection_transaction_id', - type: 'long', - }, - 'netflow.reverse_data_byte_count': { - category: 'netflow', - name: 'netflow.reverse_data_byte_count', - type: 'long', - }, - 'netflow.reverse_data_link_frame_section': { - category: 'netflow', - name: 'netflow.reverse_data_link_frame_section', - type: 'keyword', - }, - 'netflow.reverse_data_link_frame_size': { - category: 'netflow', - name: 'netflow.reverse_data_link_frame_size', - type: 'integer', - }, - 'netflow.reverse_data_link_frame_type': { - category: 'netflow', - name: 'netflow.reverse_data_link_frame_type', - type: 'integer', - }, - 'netflow.reverse_data_records_reliability': { - category: 'netflow', - name: 'netflow.reverse_data_records_reliability', - type: 'short', - }, - 'netflow.reverse_delta_flow_count': { - category: 'netflow', - name: 'netflow.reverse_delta_flow_count', - type: 'long', - }, - 'netflow.reverse_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_destination_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_destination_ipv4_prefix': { - category: 'netflow', - name: 'netflow.reverse_destination_ipv4_prefix', - type: 'ip', - }, - 'netflow.reverse_destination_ipv4_prefix_length': { - category: 'netflow', - name: 'netflow.reverse_destination_ipv4_prefix_length', - type: 'short', - }, - 'netflow.reverse_destination_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_destination_ipv6_address', - type: 'ip', - }, - 'netflow.reverse_destination_ipv6_prefix': { - category: 'netflow', - name: 'netflow.reverse_destination_ipv6_prefix', - type: 'ip', - }, - 'netflow.reverse_destination_ipv6_prefix_length': { - category: 'netflow', - name: 'netflow.reverse_destination_ipv6_prefix_length', - type: 'short', - }, - 'netflow.reverse_destination_mac_address': { - category: 'netflow', - name: 'netflow.reverse_destination_mac_address', - type: 'keyword', - }, - 'netflow.reverse_destination_transport_port': { - category: 'netflow', - name: 'netflow.reverse_destination_transport_port', - type: 'integer', - }, - 'netflow.reverse_digest_hash_value': { - category: 'netflow', - name: 'netflow.reverse_digest_hash_value', - type: 'long', - }, - 'netflow.reverse_distinct_count_of_destination_ip_address': { - category: 'netflow', - name: 'netflow.reverse_distinct_count_of_destination_ip_address', - type: 'long', - }, - 'netflow.reverse_distinct_count_of_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_distinct_count_of_destination_ipv4_address', - type: 'long', - }, - 'netflow.reverse_distinct_count_of_destination_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_distinct_count_of_destination_ipv6_address', - type: 'long', - }, - 'netflow.reverse_distinct_count_of_source_ip_address': { - category: 'netflow', - name: 'netflow.reverse_distinct_count_of_source_ip_address', - type: 'long', - }, - 'netflow.reverse_distinct_count_of_source_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_distinct_count_of_source_ipv4_address', - type: 'long', - }, - 'netflow.reverse_distinct_count_of_source_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_distinct_count_of_source_ipv6_address', - type: 'long', - }, - 'netflow.reverse_dot1q_customer_dei': { - category: 'netflow', - name: 'netflow.reverse_dot1q_customer_dei', - type: 'short', - }, - 'netflow.reverse_dot1q_customer_destination_mac_address': { - category: 'netflow', - name: 'netflow.reverse_dot1q_customer_destination_mac_address', - type: 'keyword', - }, - 'netflow.reverse_dot1q_customer_priority': { - category: 'netflow', - name: 'netflow.reverse_dot1q_customer_priority', - type: 'short', - }, - 'netflow.reverse_dot1q_customer_source_mac_address': { - category: 'netflow', - name: 'netflow.reverse_dot1q_customer_source_mac_address', - type: 'keyword', - }, - 'netflow.reverse_dot1q_customer_vlan_id': { - category: 'netflow', - name: 'netflow.reverse_dot1q_customer_vlan_id', - type: 'integer', - }, - 'netflow.reverse_dot1q_dei': { - category: 'netflow', - name: 'netflow.reverse_dot1q_dei', - type: 'short', - }, - 'netflow.reverse_dot1q_priority': { - category: 'netflow', - name: 'netflow.reverse_dot1q_priority', - type: 'short', - }, - 'netflow.reverse_dot1q_service_instance_id': { - category: 'netflow', - name: 'netflow.reverse_dot1q_service_instance_id', - type: 'long', - }, - 'netflow.reverse_dot1q_service_instance_priority': { - category: 'netflow', - name: 'netflow.reverse_dot1q_service_instance_priority', - type: 'short', - }, - 'netflow.reverse_dot1q_service_instance_tag': { - category: 'netflow', - name: 'netflow.reverse_dot1q_service_instance_tag', - type: 'keyword', - }, - 'netflow.reverse_dot1q_vlan_id': { - category: 'netflow', - name: 'netflow.reverse_dot1q_vlan_id', - type: 'integer', - }, - 'netflow.reverse_dropped_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_dropped_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_dropped_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_dropped_layer2_octet_total_count', - type: 'long', - }, - 'netflow.reverse_dropped_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_dropped_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_dropped_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_dropped_octet_total_count', - type: 'long', - }, - 'netflow.reverse_dropped_packet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_dropped_packet_delta_count', - type: 'long', - }, - 'netflow.reverse_dropped_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_dropped_packet_total_count', - type: 'long', - }, - 'netflow.reverse_dst_traffic_index': { - category: 'netflow', - name: 'netflow.reverse_dst_traffic_index', - type: 'long', - }, - 'netflow.reverse_egress_broadcast_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_egress_broadcast_packet_total_count', - type: 'long', - }, - 'netflow.reverse_egress_interface': { - category: 'netflow', - name: 'netflow.reverse_egress_interface', - type: 'long', - }, - 'netflow.reverse_egress_interface_type': { - category: 'netflow', - name: 'netflow.reverse_egress_interface_type', - type: 'long', - }, - 'netflow.reverse_egress_physical_interface': { - category: 'netflow', - name: 'netflow.reverse_egress_physical_interface', - type: 'long', - }, - 'netflow.reverse_egress_unicast_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_egress_unicast_packet_total_count', - type: 'long', - }, - 'netflow.reverse_egress_vrfid': { - category: 'netflow', - name: 'netflow.reverse_egress_vrfid', - type: 'long', - }, - 'netflow.reverse_encrypted_technology': { - category: 'netflow', - name: 'netflow.reverse_encrypted_technology', - type: 'keyword', - }, - 'netflow.reverse_engine_id': { - category: 'netflow', - name: 'netflow.reverse_engine_id', - type: 'short', - }, - 'netflow.reverse_engine_type': { - category: 'netflow', - name: 'netflow.reverse_engine_type', - type: 'short', - }, - 'netflow.reverse_ethernet_header_length': { - category: 'netflow', - name: 'netflow.reverse_ethernet_header_length', - type: 'short', - }, - 'netflow.reverse_ethernet_payload_length': { - category: 'netflow', - name: 'netflow.reverse_ethernet_payload_length', - type: 'integer', - }, - 'netflow.reverse_ethernet_total_length': { - category: 'netflow', - name: 'netflow.reverse_ethernet_total_length', - type: 'integer', - }, - 'netflow.reverse_ethernet_type': { - category: 'netflow', - name: 'netflow.reverse_ethernet_type', - type: 'integer', - }, - 'netflow.reverse_export_sctp_stream_id': { - category: 'netflow', - name: 'netflow.reverse_export_sctp_stream_id', - type: 'integer', - }, - 'netflow.reverse_exporter_certificate': { - category: 'netflow', - name: 'netflow.reverse_exporter_certificate', - type: 'keyword', - }, - 'netflow.reverse_exporting_process_id': { - category: 'netflow', - name: 'netflow.reverse_exporting_process_id', - type: 'long', - }, - 'netflow.reverse_firewall_event': { - category: 'netflow', - name: 'netflow.reverse_firewall_event', - type: 'short', - }, - 'netflow.reverse_first_non_empty_packet_size': { - category: 'netflow', - name: 'netflow.reverse_first_non_empty_packet_size', - type: 'integer', - }, - 'netflow.reverse_first_packet_banner': { - category: 'netflow', - name: 'netflow.reverse_first_packet_banner', - type: 'keyword', - }, - 'netflow.reverse_flags_and_sampler_id': { - category: 'netflow', - name: 'netflow.reverse_flags_and_sampler_id', - type: 'long', - }, - 'netflow.reverse_flow_active_timeout': { - category: 'netflow', - name: 'netflow.reverse_flow_active_timeout', - type: 'integer', - }, - 'netflow.reverse_flow_attributes': { - category: 'netflow', - name: 'netflow.reverse_flow_attributes', - type: 'integer', - }, - 'netflow.reverse_flow_delta_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_delta_milliseconds', - type: 'long', - }, - 'netflow.reverse_flow_direction': { - category: 'netflow', - name: 'netflow.reverse_flow_direction', - type: 'short', - }, - 'netflow.reverse_flow_duration_microseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_duration_microseconds', - type: 'long', - }, - 'netflow.reverse_flow_duration_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_duration_milliseconds', - type: 'long', - }, - 'netflow.reverse_flow_end_delta_microseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_end_delta_microseconds', - type: 'long', - }, - 'netflow.reverse_flow_end_microseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_end_microseconds', - type: 'long', - }, - 'netflow.reverse_flow_end_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_end_milliseconds', - type: 'long', - }, - 'netflow.reverse_flow_end_nanoseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_end_nanoseconds', - type: 'long', - }, - 'netflow.reverse_flow_end_reason': { - category: 'netflow', - name: 'netflow.reverse_flow_end_reason', - type: 'short', - }, - 'netflow.reverse_flow_end_seconds': { - category: 'netflow', - name: 'netflow.reverse_flow_end_seconds', - type: 'long', - }, - 'netflow.reverse_flow_end_sys_up_time': { - category: 'netflow', - name: 'netflow.reverse_flow_end_sys_up_time', - type: 'long', - }, - 'netflow.reverse_flow_idle_timeout': { - category: 'netflow', - name: 'netflow.reverse_flow_idle_timeout', - type: 'integer', - }, - 'netflow.reverse_flow_label_ipv6': { - category: 'netflow', - name: 'netflow.reverse_flow_label_ipv6', - type: 'long', - }, - 'netflow.reverse_flow_sampling_time_interval': { - category: 'netflow', - name: 'netflow.reverse_flow_sampling_time_interval', - type: 'long', - }, - 'netflow.reverse_flow_sampling_time_spacing': { - category: 'netflow', - name: 'netflow.reverse_flow_sampling_time_spacing', - type: 'long', - }, - 'netflow.reverse_flow_selected_flow_delta_count': { - category: 'netflow', - name: 'netflow.reverse_flow_selected_flow_delta_count', - type: 'long', - }, - 'netflow.reverse_flow_selected_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_flow_selected_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_flow_selected_packet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_flow_selected_packet_delta_count', - type: 'long', - }, - 'netflow.reverse_flow_selector_algorithm': { - category: 'netflow', - name: 'netflow.reverse_flow_selector_algorithm', - type: 'integer', - }, - 'netflow.reverse_flow_start_delta_microseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_start_delta_microseconds', - type: 'long', - }, - 'netflow.reverse_flow_start_microseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_start_microseconds', - type: 'long', - }, - 'netflow.reverse_flow_start_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_start_milliseconds', - type: 'long', - }, - 'netflow.reverse_flow_start_nanoseconds': { - category: 'netflow', - name: 'netflow.reverse_flow_start_nanoseconds', - type: 'long', - }, - 'netflow.reverse_flow_start_seconds': { - category: 'netflow', - name: 'netflow.reverse_flow_start_seconds', - type: 'long', - }, - 'netflow.reverse_flow_start_sys_up_time': { - category: 'netflow', - name: 'netflow.reverse_flow_start_sys_up_time', - type: 'long', - }, - 'netflow.reverse_forwarding_status': { - category: 'netflow', - name: 'netflow.reverse_forwarding_status', - type: 'long', - }, - 'netflow.reverse_fragment_flags': { - category: 'netflow', - name: 'netflow.reverse_fragment_flags', - type: 'short', - }, - 'netflow.reverse_fragment_identification': { - category: 'netflow', - name: 'netflow.reverse_fragment_identification', - type: 'long', - }, - 'netflow.reverse_fragment_offset': { - category: 'netflow', - name: 'netflow.reverse_fragment_offset', - type: 'integer', - }, - 'netflow.reverse_gre_key': { - category: 'netflow', - name: 'netflow.reverse_gre_key', - type: 'long', - }, - 'netflow.reverse_hash_digest_output': { - category: 'netflow', - name: 'netflow.reverse_hash_digest_output', - type: 'short', - }, - 'netflow.reverse_hash_flow_domain': { - category: 'netflow', - name: 'netflow.reverse_hash_flow_domain', - type: 'integer', - }, - 'netflow.reverse_hash_initialiser_value': { - category: 'netflow', - name: 'netflow.reverse_hash_initialiser_value', - type: 'long', - }, - 'netflow.reverse_hash_ip_payload_offset': { - category: 'netflow', - name: 'netflow.reverse_hash_ip_payload_offset', - type: 'long', - }, - 'netflow.reverse_hash_ip_payload_size': { - category: 'netflow', - name: 'netflow.reverse_hash_ip_payload_size', - type: 'long', - }, - 'netflow.reverse_hash_output_range_max': { - category: 'netflow', - name: 'netflow.reverse_hash_output_range_max', - type: 'long', - }, - 'netflow.reverse_hash_output_range_min': { - category: 'netflow', - name: 'netflow.reverse_hash_output_range_min', - type: 'long', - }, - 'netflow.reverse_hash_selected_range_max': { - category: 'netflow', - name: 'netflow.reverse_hash_selected_range_max', - type: 'long', - }, - 'netflow.reverse_hash_selected_range_min': { - category: 'netflow', - name: 'netflow.reverse_hash_selected_range_min', - type: 'long', - }, - 'netflow.reverse_icmp_code_ipv4': { - category: 'netflow', - name: 'netflow.reverse_icmp_code_ipv4', - type: 'short', - }, - 'netflow.reverse_icmp_code_ipv6': { - category: 'netflow', - name: 'netflow.reverse_icmp_code_ipv6', - type: 'short', - }, - 'netflow.reverse_icmp_type_code_ipv4': { - category: 'netflow', - name: 'netflow.reverse_icmp_type_code_ipv4', - type: 'integer', - }, - 'netflow.reverse_icmp_type_code_ipv6': { - category: 'netflow', - name: 'netflow.reverse_icmp_type_code_ipv6', - type: 'integer', - }, - 'netflow.reverse_icmp_type_ipv4': { - category: 'netflow', - name: 'netflow.reverse_icmp_type_ipv4', - type: 'short', - }, - 'netflow.reverse_icmp_type_ipv6': { - category: 'netflow', - name: 'netflow.reverse_icmp_type_ipv6', - type: 'short', - }, - 'netflow.reverse_igmp_type': { - category: 'netflow', - name: 'netflow.reverse_igmp_type', - type: 'short', - }, - 'netflow.reverse_ignored_data_record_total_count': { - category: 'netflow', - name: 'netflow.reverse_ignored_data_record_total_count', - type: 'long', - }, - 'netflow.reverse_ignored_layer2_frame_total_count': { - category: 'netflow', - name: 'netflow.reverse_ignored_layer2_frame_total_count', - type: 'long', - }, - 'netflow.reverse_ignored_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_ignored_layer2_octet_total_count', - type: 'long', - }, - 'netflow.reverse_information_element_data_type': { - category: 'netflow', - name: 'netflow.reverse_information_element_data_type', - type: 'short', - }, - 'netflow.reverse_information_element_description': { - category: 'netflow', - name: 'netflow.reverse_information_element_description', - type: 'keyword', - }, - 'netflow.reverse_information_element_id': { - category: 'netflow', - name: 'netflow.reverse_information_element_id', - type: 'integer', - }, - 'netflow.reverse_information_element_index': { - category: 'netflow', - name: 'netflow.reverse_information_element_index', - type: 'integer', - }, - 'netflow.reverse_information_element_name': { - category: 'netflow', - name: 'netflow.reverse_information_element_name', - type: 'keyword', - }, - 'netflow.reverse_information_element_range_begin': { - category: 'netflow', - name: 'netflow.reverse_information_element_range_begin', - type: 'long', - }, - 'netflow.reverse_information_element_range_end': { - category: 'netflow', - name: 'netflow.reverse_information_element_range_end', - type: 'long', - }, - 'netflow.reverse_information_element_semantics': { - category: 'netflow', - name: 'netflow.reverse_information_element_semantics', - type: 'short', - }, - 'netflow.reverse_information_element_units': { - category: 'netflow', - name: 'netflow.reverse_information_element_units', - type: 'integer', - }, - 'netflow.reverse_ingress_broadcast_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_ingress_broadcast_packet_total_count', - type: 'long', - }, - 'netflow.reverse_ingress_interface': { - category: 'netflow', - name: 'netflow.reverse_ingress_interface', - type: 'long', - }, - 'netflow.reverse_ingress_interface_type': { - category: 'netflow', - name: 'netflow.reverse_ingress_interface_type', - type: 'long', - }, - 'netflow.reverse_ingress_multicast_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_ingress_multicast_packet_total_count', - type: 'long', - }, - 'netflow.reverse_ingress_physical_interface': { - category: 'netflow', - name: 'netflow.reverse_ingress_physical_interface', - type: 'long', - }, - 'netflow.reverse_ingress_unicast_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_ingress_unicast_packet_total_count', - type: 'long', - }, - 'netflow.reverse_ingress_vrfid': { - category: 'netflow', - name: 'netflow.reverse_ingress_vrfid', - type: 'long', - }, - 'netflow.reverse_initial_tcp_flags': { - category: 'netflow', - name: 'netflow.reverse_initial_tcp_flags', - type: 'short', - }, - 'netflow.reverse_initiator_octets': { - category: 'netflow', - name: 'netflow.reverse_initiator_octets', - type: 'long', - }, - 'netflow.reverse_initiator_packets': { - category: 'netflow', - name: 'netflow.reverse_initiator_packets', - type: 'long', - }, - 'netflow.reverse_interface_description': { - category: 'netflow', - name: 'netflow.reverse_interface_description', - type: 'keyword', - }, - 'netflow.reverse_interface_name': { - category: 'netflow', - name: 'netflow.reverse_interface_name', - type: 'keyword', - }, - 'netflow.reverse_intermediate_process_id': { - category: 'netflow', - name: 'netflow.reverse_intermediate_process_id', - type: 'long', - }, - 'netflow.reverse_ip_class_of_service': { - category: 'netflow', - name: 'netflow.reverse_ip_class_of_service', - type: 'short', - }, - 'netflow.reverse_ip_diff_serv_code_point': { - category: 'netflow', - name: 'netflow.reverse_ip_diff_serv_code_point', - type: 'short', - }, - 'netflow.reverse_ip_header_length': { - category: 'netflow', - name: 'netflow.reverse_ip_header_length', - type: 'short', - }, - 'netflow.reverse_ip_header_packet_section': { - category: 'netflow', - name: 'netflow.reverse_ip_header_packet_section', - type: 'keyword', - }, - 'netflow.reverse_ip_next_hop_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_ip_next_hop_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_ip_next_hop_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_ip_next_hop_ipv6_address', - type: 'ip', - }, - 'netflow.reverse_ip_payload_length': { - category: 'netflow', - name: 'netflow.reverse_ip_payload_length', - type: 'long', - }, - 'netflow.reverse_ip_payload_packet_section': { - category: 'netflow', - name: 'netflow.reverse_ip_payload_packet_section', - type: 'keyword', - }, - 'netflow.reverse_ip_precedence': { - category: 'netflow', - name: 'netflow.reverse_ip_precedence', - type: 'short', - }, - 'netflow.reverse_ip_sec_spi': { - category: 'netflow', - name: 'netflow.reverse_ip_sec_spi', - type: 'long', - }, - 'netflow.reverse_ip_total_length': { - category: 'netflow', - name: 'netflow.reverse_ip_total_length', - type: 'long', - }, - 'netflow.reverse_ip_ttl': { - category: 'netflow', - name: 'netflow.reverse_ip_ttl', - type: 'short', - }, - 'netflow.reverse_ip_version': { - category: 'netflow', - name: 'netflow.reverse_ip_version', - type: 'short', - }, - 'netflow.reverse_ipv4_ihl': { - category: 'netflow', - name: 'netflow.reverse_ipv4_ihl', - type: 'short', - }, - 'netflow.reverse_ipv4_options': { - category: 'netflow', - name: 'netflow.reverse_ipv4_options', - type: 'long', - }, - 'netflow.reverse_ipv4_router_sc': { - category: 'netflow', - name: 'netflow.reverse_ipv4_router_sc', - type: 'ip', - }, - 'netflow.reverse_ipv6_extension_headers': { - category: 'netflow', - name: 'netflow.reverse_ipv6_extension_headers', - type: 'long', - }, - 'netflow.reverse_is_multicast': { - category: 'netflow', - name: 'netflow.reverse_is_multicast', - type: 'short', - }, - 'netflow.reverse_large_packet_count': { - category: 'netflow', - name: 'netflow.reverse_large_packet_count', - type: 'long', - }, - 'netflow.reverse_layer2_frame_delta_count': { - category: 'netflow', - name: 'netflow.reverse_layer2_frame_delta_count', - type: 'long', - }, - 'netflow.reverse_layer2_frame_total_count': { - category: 'netflow', - name: 'netflow.reverse_layer2_frame_total_count', - type: 'long', - }, - 'netflow.reverse_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_layer2_octet_delta_sum_of_squares': { - category: 'netflow', - name: 'netflow.reverse_layer2_octet_delta_sum_of_squares', - type: 'long', - }, - 'netflow.reverse_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_layer2_octet_total_count', - type: 'long', - }, - 'netflow.reverse_layer2_octet_total_sum_of_squares': { - category: 'netflow', - name: 'netflow.reverse_layer2_octet_total_sum_of_squares', - type: 'long', - }, - 'netflow.reverse_layer2_segment_id': { - category: 'netflow', - name: 'netflow.reverse_layer2_segment_id', - type: 'long', - }, - 'netflow.reverse_layer2packet_section_data': { - category: 'netflow', - name: 'netflow.reverse_layer2packet_section_data', - type: 'keyword', - }, - 'netflow.reverse_layer2packet_section_offset': { - category: 'netflow', - name: 'netflow.reverse_layer2packet_section_offset', - type: 'integer', - }, - 'netflow.reverse_layer2packet_section_size': { - category: 'netflow', - name: 'netflow.reverse_layer2packet_section_size', - type: 'integer', - }, - 'netflow.reverse_line_card_id': { - category: 'netflow', - name: 'netflow.reverse_line_card_id', - type: 'long', - }, - 'netflow.reverse_lower_ci_limit': { - category: 'netflow', - name: 'netflow.reverse_lower_ci_limit', - type: 'double', - }, - 'netflow.reverse_max_export_seconds': { - category: 'netflow', - name: 'netflow.reverse_max_export_seconds', - type: 'long', - }, - 'netflow.reverse_max_flow_end_microseconds': { - category: 'netflow', - name: 'netflow.reverse_max_flow_end_microseconds', - type: 'long', - }, - 'netflow.reverse_max_flow_end_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_max_flow_end_milliseconds', - type: 'long', - }, - 'netflow.reverse_max_flow_end_nanoseconds': { - category: 'netflow', - name: 'netflow.reverse_max_flow_end_nanoseconds', - type: 'long', - }, - 'netflow.reverse_max_flow_end_seconds': { - category: 'netflow', - name: 'netflow.reverse_max_flow_end_seconds', - type: 'long', - }, - 'netflow.reverse_max_packet_size': { - category: 'netflow', - name: 'netflow.reverse_max_packet_size', - type: 'integer', - }, - 'netflow.reverse_maximum_ip_total_length': { - category: 'netflow', - name: 'netflow.reverse_maximum_ip_total_length', - type: 'long', - }, - 'netflow.reverse_maximum_layer2_total_length': { - category: 'netflow', - name: 'netflow.reverse_maximum_layer2_total_length', - type: 'long', - }, - 'netflow.reverse_maximum_ttl': { - category: 'netflow', - name: 'netflow.reverse_maximum_ttl', - type: 'short', - }, - 'netflow.reverse_message_md5_checksum': { - category: 'netflow', - name: 'netflow.reverse_message_md5_checksum', - type: 'keyword', - }, - 'netflow.reverse_message_scope': { - category: 'netflow', - name: 'netflow.reverse_message_scope', - type: 'short', - }, - 'netflow.reverse_metering_process_id': { - category: 'netflow', - name: 'netflow.reverse_metering_process_id', - type: 'long', - }, - 'netflow.reverse_metro_evc_id': { - category: 'netflow', - name: 'netflow.reverse_metro_evc_id', - type: 'keyword', - }, - 'netflow.reverse_metro_evc_type': { - category: 'netflow', - name: 'netflow.reverse_metro_evc_type', - type: 'short', - }, - 'netflow.reverse_min_export_seconds': { - category: 'netflow', - name: 'netflow.reverse_min_export_seconds', - type: 'long', - }, - 'netflow.reverse_min_flow_start_microseconds': { - category: 'netflow', - name: 'netflow.reverse_min_flow_start_microseconds', - type: 'long', - }, - 'netflow.reverse_min_flow_start_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_min_flow_start_milliseconds', - type: 'long', - }, - 'netflow.reverse_min_flow_start_nanoseconds': { - category: 'netflow', - name: 'netflow.reverse_min_flow_start_nanoseconds', - type: 'long', - }, - 'netflow.reverse_min_flow_start_seconds': { - category: 'netflow', - name: 'netflow.reverse_min_flow_start_seconds', - type: 'long', - }, - 'netflow.reverse_minimum_ip_total_length': { - category: 'netflow', - name: 'netflow.reverse_minimum_ip_total_length', - type: 'long', - }, - 'netflow.reverse_minimum_layer2_total_length': { - category: 'netflow', - name: 'netflow.reverse_minimum_layer2_total_length', - type: 'long', - }, - 'netflow.reverse_minimum_ttl': { - category: 'netflow', - name: 'netflow.reverse_minimum_ttl', - type: 'short', - }, - 'netflow.reverse_monitoring_interval_end_milli_seconds': { - category: 'netflow', - name: 'netflow.reverse_monitoring_interval_end_milli_seconds', - type: 'long', - }, - 'netflow.reverse_monitoring_interval_start_milli_seconds': { - category: 'netflow', - name: 'netflow.reverse_monitoring_interval_start_milli_seconds', - type: 'long', - }, - 'netflow.reverse_mpls_label_stack_depth': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_depth', - type: 'long', - }, - 'netflow.reverse_mpls_label_stack_length': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_length', - type: 'long', - }, - 'netflow.reverse_mpls_label_stack_section': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section10': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section10', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section2': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section2', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section3': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section3', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section4': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section4', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section5': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section5', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section6': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section6', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section7': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section7', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section8': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section8', - type: 'keyword', - }, - 'netflow.reverse_mpls_label_stack_section9': { - category: 'netflow', - name: 'netflow.reverse_mpls_label_stack_section9', - type: 'keyword', - }, - 'netflow.reverse_mpls_payload_length': { - category: 'netflow', - name: 'netflow.reverse_mpls_payload_length', - type: 'long', - }, - 'netflow.reverse_mpls_payload_packet_section': { - category: 'netflow', - name: 'netflow.reverse_mpls_payload_packet_section', - type: 'keyword', - }, - 'netflow.reverse_mpls_top_label_exp': { - category: 'netflow', - name: 'netflow.reverse_mpls_top_label_exp', - type: 'short', - }, - 'netflow.reverse_mpls_top_label_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_mpls_top_label_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_mpls_top_label_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_mpls_top_label_ipv6_address', - type: 'ip', - }, - 'netflow.reverse_mpls_top_label_prefix_length': { - category: 'netflow', - name: 'netflow.reverse_mpls_top_label_prefix_length', - type: 'short', - }, - 'netflow.reverse_mpls_top_label_stack_section': { - category: 'netflow', - name: 'netflow.reverse_mpls_top_label_stack_section', - type: 'keyword', - }, - 'netflow.reverse_mpls_top_label_ttl': { - category: 'netflow', - name: 'netflow.reverse_mpls_top_label_ttl', - type: 'short', - }, - 'netflow.reverse_mpls_top_label_type': { - category: 'netflow', - name: 'netflow.reverse_mpls_top_label_type', - type: 'short', - }, - 'netflow.reverse_mpls_vpn_route_distinguisher': { - category: 'netflow', - name: 'netflow.reverse_mpls_vpn_route_distinguisher', - type: 'keyword', - }, - 'netflow.reverse_multicast_replication_factor': { - category: 'netflow', - name: 'netflow.reverse_multicast_replication_factor', - type: 'long', - }, - 'netflow.reverse_nat_event': { - category: 'netflow', - name: 'netflow.reverse_nat_event', - type: 'short', - }, - 'netflow.reverse_nat_originating_address_realm': { - category: 'netflow', - name: 'netflow.reverse_nat_originating_address_realm', - type: 'short', - }, - 'netflow.reverse_nat_pool_id': { - category: 'netflow', - name: 'netflow.reverse_nat_pool_id', - type: 'long', - }, - 'netflow.reverse_nat_pool_name': { - category: 'netflow', - name: 'netflow.reverse_nat_pool_name', - type: 'keyword', - }, - 'netflow.reverse_nat_type': { - category: 'netflow', - name: 'netflow.reverse_nat_type', - type: 'short', - }, - 'netflow.reverse_new_connection_delta_count': { - category: 'netflow', - name: 'netflow.reverse_new_connection_delta_count', - type: 'long', - }, - 'netflow.reverse_next_header_ipv6': { - category: 'netflow', - name: 'netflow.reverse_next_header_ipv6', - type: 'short', - }, - 'netflow.reverse_non_empty_packet_count': { - category: 'netflow', - name: 'netflow.reverse_non_empty_packet_count', - type: 'long', - }, - 'netflow.reverse_not_sent_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_not_sent_layer2_octet_total_count', - type: 'long', - }, - 'netflow.reverse_observation_domain_name': { - category: 'netflow', - name: 'netflow.reverse_observation_domain_name', - type: 'keyword', - }, - 'netflow.reverse_observation_point_id': { - category: 'netflow', - name: 'netflow.reverse_observation_point_id', - type: 'long', - }, - 'netflow.reverse_observation_point_type': { - category: 'netflow', - name: 'netflow.reverse_observation_point_type', - type: 'short', - }, - 'netflow.reverse_observation_time_microseconds': { - category: 'netflow', - name: 'netflow.reverse_observation_time_microseconds', - type: 'long', - }, - 'netflow.reverse_observation_time_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_observation_time_milliseconds', - type: 'long', - }, - 'netflow.reverse_observation_time_nanoseconds': { - category: 'netflow', - name: 'netflow.reverse_observation_time_nanoseconds', - type: 'long', - }, - 'netflow.reverse_observation_time_seconds': { - category: 'netflow', - name: 'netflow.reverse_observation_time_seconds', - type: 'long', - }, - 'netflow.reverse_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_octet_delta_sum_of_squares': { - category: 'netflow', - name: 'netflow.reverse_octet_delta_sum_of_squares', - type: 'long', - }, - 'netflow.reverse_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_octet_total_count', - type: 'long', - }, - 'netflow.reverse_octet_total_sum_of_squares': { - category: 'netflow', - name: 'netflow.reverse_octet_total_sum_of_squares', - type: 'long', - }, - 'netflow.reverse_opaque_octets': { - category: 'netflow', - name: 'netflow.reverse_opaque_octets', - type: 'keyword', - }, - 'netflow.reverse_original_exporter_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_original_exporter_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_original_exporter_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_original_exporter_ipv6_address', - type: 'ip', - }, - 'netflow.reverse_original_flows_completed': { - category: 'netflow', - name: 'netflow.reverse_original_flows_completed', - type: 'long', - }, - 'netflow.reverse_original_flows_initiated': { - category: 'netflow', - name: 'netflow.reverse_original_flows_initiated', - type: 'long', - }, - 'netflow.reverse_original_flows_present': { - category: 'netflow', - name: 'netflow.reverse_original_flows_present', - type: 'long', - }, - 'netflow.reverse_original_observation_domain_id': { - category: 'netflow', - name: 'netflow.reverse_original_observation_domain_id', - type: 'long', - }, - 'netflow.reverse_os_finger_print': { - category: 'netflow', - name: 'netflow.reverse_os_finger_print', - type: 'keyword', - }, - 'netflow.reverse_os_name': { - category: 'netflow', - name: 'netflow.reverse_os_name', - type: 'keyword', - }, - 'netflow.reverse_os_version': { - category: 'netflow', - name: 'netflow.reverse_os_version', - type: 'keyword', - }, - 'netflow.reverse_p2p_technology': { - category: 'netflow', - name: 'netflow.reverse_p2p_technology', - type: 'keyword', - }, - 'netflow.reverse_packet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_packet_delta_count', - type: 'long', - }, - 'netflow.reverse_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_packet_total_count', - type: 'long', - }, - 'netflow.reverse_payload': { - category: 'netflow', - name: 'netflow.reverse_payload', - type: 'keyword', - }, - 'netflow.reverse_payload_entropy': { - category: 'netflow', - name: 'netflow.reverse_payload_entropy', - type: 'short', - }, - 'netflow.reverse_payload_length_ipv6': { - category: 'netflow', - name: 'netflow.reverse_payload_length_ipv6', - type: 'integer', - }, - 'netflow.reverse_port_id': { - category: 'netflow', - name: 'netflow.reverse_port_id', - type: 'long', - }, - 'netflow.reverse_port_range_end': { - category: 'netflow', - name: 'netflow.reverse_port_range_end', - type: 'integer', - }, - 'netflow.reverse_port_range_num_ports': { - category: 'netflow', - name: 'netflow.reverse_port_range_num_ports', - type: 'integer', - }, - 'netflow.reverse_port_range_start': { - category: 'netflow', - name: 'netflow.reverse_port_range_start', - type: 'integer', - }, - 'netflow.reverse_port_range_step_size': { - category: 'netflow', - name: 'netflow.reverse_port_range_step_size', - type: 'integer', - }, - 'netflow.reverse_post_destination_mac_address': { - category: 'netflow', - name: 'netflow.reverse_post_destination_mac_address', - type: 'keyword', - }, - 'netflow.reverse_post_dot1q_customer_vlan_id': { - category: 'netflow', - name: 'netflow.reverse_post_dot1q_customer_vlan_id', - type: 'integer', - }, - 'netflow.reverse_post_dot1q_vlan_id': { - category: 'netflow', - name: 'netflow.reverse_post_dot1q_vlan_id', - type: 'integer', - }, - 'netflow.reverse_post_ip_class_of_service': { - category: 'netflow', - name: 'netflow.reverse_post_ip_class_of_service', - type: 'short', - }, - 'netflow.reverse_post_ip_diff_serv_code_point': { - category: 'netflow', - name: 'netflow.reverse_post_ip_diff_serv_code_point', - type: 'short', - }, - 'netflow.reverse_post_ip_precedence': { - category: 'netflow', - name: 'netflow.reverse_post_ip_precedence', - type: 'short', - }, - 'netflow.reverse_post_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_post_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_post_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_post_layer2_octet_total_count', - type: 'long', - }, - 'netflow.reverse_post_mcast_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_post_mcast_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_post_mcast_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_post_mcast_layer2_octet_total_count', - type: 'long', - }, - 'netflow.reverse_post_mcast_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_post_mcast_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_post_mcast_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_post_mcast_octet_total_count', - type: 'long', - }, - 'netflow.reverse_post_mcast_packet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_post_mcast_packet_delta_count', - type: 'long', - }, - 'netflow.reverse_post_mcast_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_post_mcast_packet_total_count', - type: 'long', - }, - 'netflow.reverse_post_mpls_top_label_exp': { - category: 'netflow', - name: 'netflow.reverse_post_mpls_top_label_exp', - type: 'short', - }, - 'netflow.reverse_post_napt_destination_transport_port': { - category: 'netflow', - name: 'netflow.reverse_post_napt_destination_transport_port', - type: 'integer', - }, - 'netflow.reverse_post_napt_source_transport_port': { - category: 'netflow', - name: 'netflow.reverse_post_napt_source_transport_port', - type: 'integer', - }, - 'netflow.reverse_post_nat_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_post_nat_destination_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_post_nat_destination_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_post_nat_destination_ipv6_address', - type: 'ip', - }, - 'netflow.reverse_post_nat_source_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_post_nat_source_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_post_nat_source_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_post_nat_source_ipv6_address', - type: 'ip', - }, - 'netflow.reverse_post_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_post_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_post_octet_total_count': { - category: 'netflow', - name: 'netflow.reverse_post_octet_total_count', - type: 'long', - }, - 'netflow.reverse_post_packet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_post_packet_delta_count', - type: 'long', - }, - 'netflow.reverse_post_packet_total_count': { - category: 'netflow', - name: 'netflow.reverse_post_packet_total_count', - type: 'long', - }, - 'netflow.reverse_post_source_mac_address': { - category: 'netflow', - name: 'netflow.reverse_post_source_mac_address', - type: 'keyword', - }, - 'netflow.reverse_post_vlan_id': { - category: 'netflow', - name: 'netflow.reverse_post_vlan_id', - type: 'integer', - }, - 'netflow.reverse_private_enterprise_number': { - category: 'netflow', - name: 'netflow.reverse_private_enterprise_number', - type: 'long', - }, - 'netflow.reverse_protocol_identifier': { - category: 'netflow', - name: 'netflow.reverse_protocol_identifier', - type: 'short', - }, - 'netflow.reverse_pseudo_wire_control_word': { - category: 'netflow', - name: 'netflow.reverse_pseudo_wire_control_word', - type: 'long', - }, - 'netflow.reverse_pseudo_wire_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_pseudo_wire_destination_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_pseudo_wire_id': { - category: 'netflow', - name: 'netflow.reverse_pseudo_wire_id', - type: 'long', - }, - 'netflow.reverse_pseudo_wire_type': { - category: 'netflow', - name: 'netflow.reverse_pseudo_wire_type', - type: 'integer', - }, - 'netflow.reverse_relative_error': { - category: 'netflow', - name: 'netflow.reverse_relative_error', - type: 'double', - }, - 'netflow.reverse_responder_octets': { - category: 'netflow', - name: 'netflow.reverse_responder_octets', - type: 'long', - }, - 'netflow.reverse_responder_packets': { - category: 'netflow', - name: 'netflow.reverse_responder_packets', - type: 'long', - }, - 'netflow.reverse_rfc3550_jitter_microseconds': { - category: 'netflow', - name: 'netflow.reverse_rfc3550_jitter_microseconds', - type: 'long', - }, - 'netflow.reverse_rfc3550_jitter_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_rfc3550_jitter_milliseconds', - type: 'long', - }, - 'netflow.reverse_rfc3550_jitter_nanoseconds': { - category: 'netflow', - name: 'netflow.reverse_rfc3550_jitter_nanoseconds', - type: 'long', - }, - 'netflow.reverse_rtp_payload_type': { - category: 'netflow', - name: 'netflow.reverse_rtp_payload_type', - type: 'short', - }, - 'netflow.reverse_rtp_sequence_number': { - category: 'netflow', - name: 'netflow.reverse_rtp_sequence_number', - type: 'integer', - }, - 'netflow.reverse_sampler_id': { - category: 'netflow', - name: 'netflow.reverse_sampler_id', - type: 'short', - }, - 'netflow.reverse_sampler_mode': { - category: 'netflow', - name: 'netflow.reverse_sampler_mode', - type: 'short', - }, - 'netflow.reverse_sampler_name': { - category: 'netflow', - name: 'netflow.reverse_sampler_name', - type: 'keyword', - }, - 'netflow.reverse_sampler_random_interval': { - category: 'netflow', - name: 'netflow.reverse_sampler_random_interval', - type: 'long', - }, - 'netflow.reverse_sampling_algorithm': { - category: 'netflow', - name: 'netflow.reverse_sampling_algorithm', - type: 'short', - }, - 'netflow.reverse_sampling_flow_interval': { - category: 'netflow', - name: 'netflow.reverse_sampling_flow_interval', - type: 'long', - }, - 'netflow.reverse_sampling_flow_spacing': { - category: 'netflow', - name: 'netflow.reverse_sampling_flow_spacing', - type: 'long', - }, - 'netflow.reverse_sampling_interval': { - category: 'netflow', - name: 'netflow.reverse_sampling_interval', - type: 'long', - }, - 'netflow.reverse_sampling_packet_interval': { - category: 'netflow', - name: 'netflow.reverse_sampling_packet_interval', - type: 'long', - }, - 'netflow.reverse_sampling_packet_space': { - category: 'netflow', - name: 'netflow.reverse_sampling_packet_space', - type: 'long', - }, - 'netflow.reverse_sampling_population': { - category: 'netflow', - name: 'netflow.reverse_sampling_population', - type: 'long', - }, - 'netflow.reverse_sampling_probability': { - category: 'netflow', - name: 'netflow.reverse_sampling_probability', - type: 'double', - }, - 'netflow.reverse_sampling_size': { - category: 'netflow', - name: 'netflow.reverse_sampling_size', - type: 'long', - }, - 'netflow.reverse_sampling_time_interval': { - category: 'netflow', - name: 'netflow.reverse_sampling_time_interval', - type: 'long', - }, - 'netflow.reverse_sampling_time_space': { - category: 'netflow', - name: 'netflow.reverse_sampling_time_space', - type: 'long', - }, - 'netflow.reverse_second_packet_banner': { - category: 'netflow', - name: 'netflow.reverse_second_packet_banner', - type: 'keyword', - }, - 'netflow.reverse_section_exported_octets': { - category: 'netflow', - name: 'netflow.reverse_section_exported_octets', - type: 'integer', - }, - 'netflow.reverse_section_offset': { - category: 'netflow', - name: 'netflow.reverse_section_offset', - type: 'integer', - }, - 'netflow.reverse_selection_sequence_id': { - category: 'netflow', - name: 'netflow.reverse_selection_sequence_id', - type: 'long', - }, - 'netflow.reverse_selector_algorithm': { - category: 'netflow', - name: 'netflow.reverse_selector_algorithm', - type: 'integer', - }, - 'netflow.reverse_selector_id': { - category: 'netflow', - name: 'netflow.reverse_selector_id', - type: 'long', - }, - 'netflow.reverse_selector_id_total_flows_observed': { - category: 'netflow', - name: 'netflow.reverse_selector_id_total_flows_observed', - type: 'long', - }, - 'netflow.reverse_selector_id_total_flows_selected': { - category: 'netflow', - name: 'netflow.reverse_selector_id_total_flows_selected', - type: 'long', - }, - 'netflow.reverse_selector_id_total_pkts_observed': { - category: 'netflow', - name: 'netflow.reverse_selector_id_total_pkts_observed', - type: 'long', - }, - 'netflow.reverse_selector_id_total_pkts_selected': { - category: 'netflow', - name: 'netflow.reverse_selector_id_total_pkts_selected', - type: 'long', - }, - 'netflow.reverse_selector_name': { - category: 'netflow', - name: 'netflow.reverse_selector_name', - type: 'keyword', - }, - 'netflow.reverse_session_scope': { - category: 'netflow', - name: 'netflow.reverse_session_scope', - type: 'short', - }, - 'netflow.reverse_small_packet_count': { - category: 'netflow', - name: 'netflow.reverse_small_packet_count', - type: 'long', - }, - 'netflow.reverse_source_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_source_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_source_ipv4_prefix': { - category: 'netflow', - name: 'netflow.reverse_source_ipv4_prefix', - type: 'ip', - }, - 'netflow.reverse_source_ipv4_prefix_length': { - category: 'netflow', - name: 'netflow.reverse_source_ipv4_prefix_length', - type: 'short', - }, - 'netflow.reverse_source_ipv6_address': { - category: 'netflow', - name: 'netflow.reverse_source_ipv6_address', - type: 'ip', - }, - 'netflow.reverse_source_ipv6_prefix': { - category: 'netflow', - name: 'netflow.reverse_source_ipv6_prefix', - type: 'ip', - }, - 'netflow.reverse_source_ipv6_prefix_length': { - category: 'netflow', - name: 'netflow.reverse_source_ipv6_prefix_length', - type: 'short', - }, - 'netflow.reverse_source_mac_address': { - category: 'netflow', - name: 'netflow.reverse_source_mac_address', - type: 'keyword', - }, - 'netflow.reverse_source_transport_port': { - category: 'netflow', - name: 'netflow.reverse_source_transport_port', - type: 'integer', - }, - 'netflow.reverse_src_traffic_index': { - category: 'netflow', - name: 'netflow.reverse_src_traffic_index', - type: 'long', - }, - 'netflow.reverse_sta_ipv4_address': { - category: 'netflow', - name: 'netflow.reverse_sta_ipv4_address', - type: 'ip', - }, - 'netflow.reverse_sta_mac_address': { - category: 'netflow', - name: 'netflow.reverse_sta_mac_address', - type: 'keyword', - }, - 'netflow.reverse_standard_deviation_interarrival_time': { - category: 'netflow', - name: 'netflow.reverse_standard_deviation_interarrival_time', - type: 'long', - }, - 'netflow.reverse_standard_deviation_payload_length': { - category: 'netflow', - name: 'netflow.reverse_standard_deviation_payload_length', - type: 'integer', - }, - 'netflow.reverse_system_init_time_milliseconds': { - category: 'netflow', - name: 'netflow.reverse_system_init_time_milliseconds', - type: 'long', - }, - 'netflow.reverse_tcp_ack_total_count': { - category: 'netflow', - name: 'netflow.reverse_tcp_ack_total_count', - type: 'long', - }, - 'netflow.reverse_tcp_acknowledgement_number': { - category: 'netflow', - name: 'netflow.reverse_tcp_acknowledgement_number', - type: 'long', - }, - 'netflow.reverse_tcp_control_bits': { - category: 'netflow', - name: 'netflow.reverse_tcp_control_bits', - type: 'integer', - }, - 'netflow.reverse_tcp_destination_port': { - category: 'netflow', - name: 'netflow.reverse_tcp_destination_port', - type: 'integer', - }, - 'netflow.reverse_tcp_fin_total_count': { - category: 'netflow', - name: 'netflow.reverse_tcp_fin_total_count', - type: 'long', - }, - 'netflow.reverse_tcp_header_length': { - category: 'netflow', - name: 'netflow.reverse_tcp_header_length', - type: 'short', - }, - 'netflow.reverse_tcp_options': { - category: 'netflow', - name: 'netflow.reverse_tcp_options', - type: 'long', - }, - 'netflow.reverse_tcp_psh_total_count': { - category: 'netflow', - name: 'netflow.reverse_tcp_psh_total_count', - type: 'long', - }, - 'netflow.reverse_tcp_rst_total_count': { - category: 'netflow', - name: 'netflow.reverse_tcp_rst_total_count', - type: 'long', - }, - 'netflow.reverse_tcp_sequence_number': { - category: 'netflow', - name: 'netflow.reverse_tcp_sequence_number', - type: 'long', - }, - 'netflow.reverse_tcp_source_port': { - category: 'netflow', - name: 'netflow.reverse_tcp_source_port', - type: 'integer', - }, - 'netflow.reverse_tcp_syn_total_count': { - category: 'netflow', - name: 'netflow.reverse_tcp_syn_total_count', - type: 'long', - }, - 'netflow.reverse_tcp_urg_total_count': { - category: 'netflow', - name: 'netflow.reverse_tcp_urg_total_count', - type: 'long', - }, - 'netflow.reverse_tcp_urgent_pointer': { - category: 'netflow', - name: 'netflow.reverse_tcp_urgent_pointer', - type: 'integer', - }, - 'netflow.reverse_tcp_window_scale': { - category: 'netflow', - name: 'netflow.reverse_tcp_window_scale', - type: 'integer', - }, - 'netflow.reverse_tcp_window_size': { - category: 'netflow', - name: 'netflow.reverse_tcp_window_size', - type: 'integer', - }, - 'netflow.reverse_total_length_ipv4': { - category: 'netflow', - name: 'netflow.reverse_total_length_ipv4', - type: 'integer', - }, - 'netflow.reverse_transport_octet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_transport_octet_delta_count', - type: 'long', - }, - 'netflow.reverse_transport_packet_delta_count': { - category: 'netflow', - name: 'netflow.reverse_transport_packet_delta_count', - type: 'long', - }, - 'netflow.reverse_tunnel_technology': { - category: 'netflow', - name: 'netflow.reverse_tunnel_technology', - type: 'keyword', - }, - 'netflow.reverse_udp_destination_port': { - category: 'netflow', - name: 'netflow.reverse_udp_destination_port', - type: 'integer', - }, - 'netflow.reverse_udp_message_length': { - category: 'netflow', - name: 'netflow.reverse_udp_message_length', - type: 'integer', - }, - 'netflow.reverse_udp_source_port': { - category: 'netflow', - name: 'netflow.reverse_udp_source_port', - type: 'integer', - }, - 'netflow.reverse_union_tcp_flags': { - category: 'netflow', - name: 'netflow.reverse_union_tcp_flags', - type: 'short', - }, - 'netflow.reverse_upper_ci_limit': { - category: 'netflow', - name: 'netflow.reverse_upper_ci_limit', - type: 'double', - }, - 'netflow.reverse_user_name': { - category: 'netflow', - name: 'netflow.reverse_user_name', - type: 'keyword', - }, - 'netflow.reverse_value_distribution_method': { - category: 'netflow', - name: 'netflow.reverse_value_distribution_method', - type: 'short', - }, - 'netflow.reverse_virtual_station_interface_id': { - category: 'netflow', - name: 'netflow.reverse_virtual_station_interface_id', - type: 'keyword', - }, - 'netflow.reverse_virtual_station_interface_name': { - category: 'netflow', - name: 'netflow.reverse_virtual_station_interface_name', - type: 'keyword', - }, - 'netflow.reverse_virtual_station_name': { - category: 'netflow', - name: 'netflow.reverse_virtual_station_name', - type: 'keyword', - }, - 'netflow.reverse_virtual_station_uuid': { - category: 'netflow', - name: 'netflow.reverse_virtual_station_uuid', - type: 'keyword', - }, - 'netflow.reverse_vlan_id': { - category: 'netflow', - name: 'netflow.reverse_vlan_id', - type: 'integer', - }, - 'netflow.reverse_vr_fname': { - category: 'netflow', - name: 'netflow.reverse_vr_fname', - type: 'keyword', - }, - 'netflow.reverse_wlan_channel_id': { - category: 'netflow', - name: 'netflow.reverse_wlan_channel_id', - type: 'short', - }, - 'netflow.reverse_wlan_ssid': { - category: 'netflow', - name: 'netflow.reverse_wlan_ssid', - type: 'keyword', - }, - 'netflow.reverse_wtp_mac_address': { - category: 'netflow', - name: 'netflow.reverse_wtp_mac_address', - type: 'keyword', - }, - 'netflow.rfc3550_jitter_microseconds': { - category: 'netflow', - name: 'netflow.rfc3550_jitter_microseconds', - type: 'long', - }, - 'netflow.rfc3550_jitter_milliseconds': { - category: 'netflow', - name: 'netflow.rfc3550_jitter_milliseconds', - type: 'long', - }, - 'netflow.rfc3550_jitter_nanoseconds': { - category: 'netflow', - name: 'netflow.rfc3550_jitter_nanoseconds', - type: 'long', - }, - 'netflow.rtp_payload_type': { - category: 'netflow', - name: 'netflow.rtp_payload_type', - type: 'short', - }, - 'netflow.rtp_sequence_number': { - category: 'netflow', - name: 'netflow.rtp_sequence_number', - type: 'integer', - }, - 'netflow.sampler_id': { - category: 'netflow', - name: 'netflow.sampler_id', - type: 'short', - }, - 'netflow.sampler_mode': { - category: 'netflow', - name: 'netflow.sampler_mode', - type: 'short', - }, - 'netflow.sampler_name': { - category: 'netflow', - name: 'netflow.sampler_name', - type: 'keyword', - }, - 'netflow.sampler_random_interval': { - category: 'netflow', - name: 'netflow.sampler_random_interval', - type: 'long', - }, - 'netflow.sampling_algorithm': { - category: 'netflow', - name: 'netflow.sampling_algorithm', - type: 'short', - }, - 'netflow.sampling_flow_interval': { - category: 'netflow', - name: 'netflow.sampling_flow_interval', - type: 'long', - }, - 'netflow.sampling_flow_spacing': { - category: 'netflow', - name: 'netflow.sampling_flow_spacing', - type: 'long', - }, - 'netflow.sampling_interval': { - category: 'netflow', - name: 'netflow.sampling_interval', - type: 'long', - }, - 'netflow.sampling_packet_interval': { - category: 'netflow', - name: 'netflow.sampling_packet_interval', - type: 'long', - }, - 'netflow.sampling_packet_space': { - category: 'netflow', - name: 'netflow.sampling_packet_space', - type: 'long', - }, - 'netflow.sampling_population': { - category: 'netflow', - name: 'netflow.sampling_population', - type: 'long', - }, - 'netflow.sampling_probability': { - category: 'netflow', - name: 'netflow.sampling_probability', - type: 'double', - }, - 'netflow.sampling_size': { - category: 'netflow', - name: 'netflow.sampling_size', - type: 'long', - }, - 'netflow.sampling_time_interval': { - category: 'netflow', - name: 'netflow.sampling_time_interval', - type: 'long', - }, - 'netflow.sampling_time_space': { - category: 'netflow', - name: 'netflow.sampling_time_space', - type: 'long', - }, - 'netflow.second_packet_banner': { - category: 'netflow', - name: 'netflow.second_packet_banner', - type: 'keyword', - }, - 'netflow.section_exported_octets': { - category: 'netflow', - name: 'netflow.section_exported_octets', - type: 'integer', - }, - 'netflow.section_offset': { - category: 'netflow', - name: 'netflow.section_offset', - type: 'integer', - }, - 'netflow.selection_sequence_id': { - category: 'netflow', - name: 'netflow.selection_sequence_id', - type: 'long', - }, - 'netflow.selector_algorithm': { - category: 'netflow', - name: 'netflow.selector_algorithm', - type: 'integer', - }, - 'netflow.selector_id': { - category: 'netflow', - name: 'netflow.selector_id', - type: 'long', - }, - 'netflow.selector_id_total_flows_observed': { - category: 'netflow', - name: 'netflow.selector_id_total_flows_observed', - type: 'long', - }, - 'netflow.selector_id_total_flows_selected': { - category: 'netflow', - name: 'netflow.selector_id_total_flows_selected', - type: 'long', - }, - 'netflow.selector_id_total_pkts_observed': { - category: 'netflow', - name: 'netflow.selector_id_total_pkts_observed', - type: 'long', - }, - 'netflow.selector_id_total_pkts_selected': { - category: 'netflow', - name: 'netflow.selector_id_total_pkts_selected', - type: 'long', - }, - 'netflow.selector_name': { - category: 'netflow', - name: 'netflow.selector_name', - type: 'keyword', - }, - 'netflow.service_name': { - category: 'netflow', - name: 'netflow.service_name', - type: 'keyword', - }, - 'netflow.session_scope': { - category: 'netflow', - name: 'netflow.session_scope', - type: 'short', - }, - 'netflow.silk_app_label': { - category: 'netflow', - name: 'netflow.silk_app_label', - type: 'integer', - }, - 'netflow.small_packet_count': { - category: 'netflow', - name: 'netflow.small_packet_count', - type: 'long', - }, - 'netflow.source_ipv4_address': { - category: 'netflow', - name: 'netflow.source_ipv4_address', - type: 'ip', - }, - 'netflow.source_ipv4_prefix': { - category: 'netflow', - name: 'netflow.source_ipv4_prefix', - type: 'ip', - }, - 'netflow.source_ipv4_prefix_length': { - category: 'netflow', - name: 'netflow.source_ipv4_prefix_length', - type: 'short', - }, - 'netflow.source_ipv6_address': { - category: 'netflow', - name: 'netflow.source_ipv6_address', - type: 'ip', - }, - 'netflow.source_ipv6_prefix': { - category: 'netflow', - name: 'netflow.source_ipv6_prefix', - type: 'ip', - }, - 'netflow.source_ipv6_prefix_length': { - category: 'netflow', - name: 'netflow.source_ipv6_prefix_length', - type: 'short', - }, - 'netflow.source_mac_address': { - category: 'netflow', - name: 'netflow.source_mac_address', - type: 'keyword', - }, - 'netflow.source_transport_port': { - category: 'netflow', - name: 'netflow.source_transport_port', - type: 'integer', - }, - 'netflow.source_transport_ports_limit': { - category: 'netflow', - name: 'netflow.source_transport_ports_limit', - type: 'integer', - }, - 'netflow.src_traffic_index': { - category: 'netflow', - name: 'netflow.src_traffic_index', - type: 'long', - }, - 'netflow.ssl_cert_serial_number': { - category: 'netflow', - name: 'netflow.ssl_cert_serial_number', - type: 'keyword', - }, - 'netflow.ssl_cert_signature': { - category: 'netflow', - name: 'netflow.ssl_cert_signature', - type: 'keyword', - }, - 'netflow.ssl_cert_validity_not_after': { - category: 'netflow', - name: 'netflow.ssl_cert_validity_not_after', - type: 'keyword', - }, - 'netflow.ssl_cert_validity_not_before': { - category: 'netflow', - name: 'netflow.ssl_cert_validity_not_before', - type: 'keyword', - }, - 'netflow.ssl_cert_version': { - category: 'netflow', - name: 'netflow.ssl_cert_version', - type: 'short', - }, - 'netflow.ssl_certificate_hash': { - category: 'netflow', - name: 'netflow.ssl_certificate_hash', - type: 'keyword', - }, - 'netflow.ssl_cipher': { - category: 'netflow', - name: 'netflow.ssl_cipher', - type: 'keyword', - }, - 'netflow.ssl_client_version': { - category: 'netflow', - name: 'netflow.ssl_client_version', - type: 'short', - }, - 'netflow.ssl_compression_method': { - category: 'netflow', - name: 'netflow.ssl_compression_method', - type: 'short', - }, - 'netflow.ssl_object_type': { - category: 'netflow', - name: 'netflow.ssl_object_type', - type: 'keyword', - }, - 'netflow.ssl_object_value': { - category: 'netflow', - name: 'netflow.ssl_object_value', - type: 'keyword', - }, - 'netflow.ssl_public_key_algorithm': { - category: 'netflow', - name: 'netflow.ssl_public_key_algorithm', - type: 'keyword', - }, - 'netflow.ssl_public_key_length': { - category: 'netflow', - name: 'netflow.ssl_public_key_length', - type: 'keyword', - }, - 'netflow.ssl_server_cipher': { - category: 'netflow', - name: 'netflow.ssl_server_cipher', - type: 'long', - }, - 'netflow.ssl_server_name': { - category: 'netflow', - name: 'netflow.ssl_server_name', - type: 'keyword', - }, - 'netflow.sta_ipv4_address': { - category: 'netflow', - name: 'netflow.sta_ipv4_address', - type: 'ip', - }, - 'netflow.sta_mac_address': { - category: 'netflow', - name: 'netflow.sta_mac_address', - type: 'keyword', - }, - 'netflow.standard_deviation_interarrival_time': { - category: 'netflow', - name: 'netflow.standard_deviation_interarrival_time', - type: 'long', - }, - 'netflow.standard_deviation_payload_length': { - category: 'netflow', - name: 'netflow.standard_deviation_payload_length', - type: 'short', - }, - 'netflow.system_init_time_milliseconds': { - category: 'netflow', - name: 'netflow.system_init_time_milliseconds', - type: 'date', - }, - 'netflow.tcp_ack_total_count': { - category: 'netflow', - name: 'netflow.tcp_ack_total_count', - type: 'long', - }, - 'netflow.tcp_acknowledgement_number': { - category: 'netflow', - name: 'netflow.tcp_acknowledgement_number', - type: 'long', - }, - 'netflow.tcp_control_bits': { - category: 'netflow', - name: 'netflow.tcp_control_bits', - type: 'integer', - }, - 'netflow.tcp_destination_port': { - category: 'netflow', - name: 'netflow.tcp_destination_port', - type: 'integer', - }, - 'netflow.tcp_fin_total_count': { - category: 'netflow', - name: 'netflow.tcp_fin_total_count', - type: 'long', - }, - 'netflow.tcp_header_length': { - category: 'netflow', - name: 'netflow.tcp_header_length', - type: 'short', - }, - 'netflow.tcp_options': { - category: 'netflow', - name: 'netflow.tcp_options', - type: 'long', - }, - 'netflow.tcp_psh_total_count': { - category: 'netflow', - name: 'netflow.tcp_psh_total_count', - type: 'long', - }, - 'netflow.tcp_rst_total_count': { - category: 'netflow', - name: 'netflow.tcp_rst_total_count', - type: 'long', - }, - 'netflow.tcp_sequence_number': { - category: 'netflow', - name: 'netflow.tcp_sequence_number', - type: 'long', - }, - 'netflow.tcp_source_port': { - category: 'netflow', - name: 'netflow.tcp_source_port', - type: 'integer', - }, - 'netflow.tcp_syn_total_count': { - category: 'netflow', - name: 'netflow.tcp_syn_total_count', - type: 'long', - }, - 'netflow.tcp_urg_total_count': { - category: 'netflow', - name: 'netflow.tcp_urg_total_count', - type: 'long', - }, - 'netflow.tcp_urgent_pointer': { - category: 'netflow', - name: 'netflow.tcp_urgent_pointer', - type: 'integer', - }, - 'netflow.tcp_window_scale': { - category: 'netflow', - name: 'netflow.tcp_window_scale', - type: 'integer', - }, - 'netflow.tcp_window_size': { - category: 'netflow', - name: 'netflow.tcp_window_size', - type: 'integer', - }, - 'netflow.template_id': { - category: 'netflow', - name: 'netflow.template_id', - type: 'integer', - }, - 'netflow.tftp_filename': { - category: 'netflow', - name: 'netflow.tftp_filename', - type: 'keyword', - }, - 'netflow.tftp_mode': { - category: 'netflow', - name: 'netflow.tftp_mode', - type: 'keyword', - }, - 'netflow.timestamp': { - category: 'netflow', - name: 'netflow.timestamp', - type: 'long', - }, - 'netflow.timestamp_absolute_monitoring-interval': { - category: 'netflow', - name: 'netflow.timestamp_absolute_monitoring-interval', - type: 'long', - }, - 'netflow.total_length_ipv4': { - category: 'netflow', - name: 'netflow.total_length_ipv4', - type: 'integer', - }, - 'netflow.traffic_type': { - category: 'netflow', - name: 'netflow.traffic_type', - type: 'short', - }, - 'netflow.transport_octet_delta_count': { - category: 'netflow', - name: 'netflow.transport_octet_delta_count', - type: 'long', - }, - 'netflow.transport_packet_delta_count': { - category: 'netflow', - name: 'netflow.transport_packet_delta_count', - type: 'long', - }, - 'netflow.tunnel_technology': { - category: 'netflow', - name: 'netflow.tunnel_technology', - type: 'keyword', - }, - 'netflow.udp_destination_port': { - category: 'netflow', - name: 'netflow.udp_destination_port', - type: 'integer', - }, - 'netflow.udp_message_length': { - category: 'netflow', - name: 'netflow.udp_message_length', - type: 'integer', - }, - 'netflow.udp_source_port': { - category: 'netflow', - name: 'netflow.udp_source_port', - type: 'integer', - }, - 'netflow.union_tcp_flags': { - category: 'netflow', - name: 'netflow.union_tcp_flags', - type: 'short', - }, - 'netflow.upper_ci_limit': { - category: 'netflow', - name: 'netflow.upper_ci_limit', - type: 'double', - }, - 'netflow.user_name': { - category: 'netflow', - name: 'netflow.user_name', - type: 'keyword', - }, - 'netflow.username': { - category: 'netflow', - name: 'netflow.username', - type: 'keyword', - }, - 'netflow.value_distribution_method': { - category: 'netflow', - name: 'netflow.value_distribution_method', - type: 'short', - }, - 'netflow.viptela_vpn_id': { - category: 'netflow', - name: 'netflow.viptela_vpn_id', - type: 'long', - }, - 'netflow.virtual_station_interface_id': { - category: 'netflow', - name: 'netflow.virtual_station_interface_id', - type: 'short', - }, - 'netflow.virtual_station_interface_name': { - category: 'netflow', - name: 'netflow.virtual_station_interface_name', - type: 'keyword', - }, - 'netflow.virtual_station_name': { - category: 'netflow', - name: 'netflow.virtual_station_name', - type: 'keyword', - }, - 'netflow.virtual_station_uuid': { - category: 'netflow', - name: 'netflow.virtual_station_uuid', - type: 'short', - }, - 'netflow.vlan_id': { - category: 'netflow', - name: 'netflow.vlan_id', - type: 'integer', - }, - 'netflow.vmware_egress_interface_attr': { - category: 'netflow', - name: 'netflow.vmware_egress_interface_attr', - type: 'integer', - }, - 'netflow.vmware_ingress_interface_attr': { - category: 'netflow', - name: 'netflow.vmware_ingress_interface_attr', - type: 'integer', - }, - 'netflow.vmware_tenant_dest_ipv4': { - category: 'netflow', - name: 'netflow.vmware_tenant_dest_ipv4', - type: 'ip', - }, - 'netflow.vmware_tenant_dest_ipv6': { - category: 'netflow', - name: 'netflow.vmware_tenant_dest_ipv6', - type: 'ip', - }, - 'netflow.vmware_tenant_dest_port': { - category: 'netflow', - name: 'netflow.vmware_tenant_dest_port', - type: 'integer', - }, - 'netflow.vmware_tenant_protocol': { - category: 'netflow', - name: 'netflow.vmware_tenant_protocol', - type: 'short', - }, - 'netflow.vmware_tenant_source_ipv4': { - category: 'netflow', - name: 'netflow.vmware_tenant_source_ipv4', - type: 'ip', - }, - 'netflow.vmware_tenant_source_ipv6': { - category: 'netflow', - name: 'netflow.vmware_tenant_source_ipv6', - type: 'ip', - }, - 'netflow.vmware_tenant_source_port': { - category: 'netflow', - name: 'netflow.vmware_tenant_source_port', - type: 'integer', - }, - 'netflow.vmware_vxlan_export_role': { - category: 'netflow', - name: 'netflow.vmware_vxlan_export_role', - type: 'short', - }, - 'netflow.vpn_identifier': { - category: 'netflow', - name: 'netflow.vpn_identifier', - type: 'short', - }, - 'netflow.vr_fname': { - category: 'netflow', - name: 'netflow.vr_fname', - type: 'keyword', - }, - 'netflow.waasoptimization_segment': { - category: 'netflow', - name: 'netflow.waasoptimization_segment', - type: 'short', - }, - 'netflow.wlan_channel_id': { - category: 'netflow', - name: 'netflow.wlan_channel_id', - type: 'short', - }, - 'netflow.wlan_ssid': { - category: 'netflow', - name: 'netflow.wlan_ssid', - type: 'keyword', - }, - 'netflow.wtp_mac_address': { - category: 'netflow', - name: 'netflow.wtp_mac_address', - type: 'keyword', - }, - 'netflow.xlate_destination_address_ip_v4': { - category: 'netflow', - name: 'netflow.xlate_destination_address_ip_v4', - type: 'ip', - }, - 'netflow.xlate_destination_port': { - category: 'netflow', - name: 'netflow.xlate_destination_port', - type: 'integer', - }, - 'netflow.xlate_source_address_ip_v4': { - category: 'netflow', - name: 'netflow.xlate_source_address_ip_v4', - type: 'ip', - }, - 'netflow.xlate_source_port': { - category: 'netflow', - name: 'netflow.xlate_source_port', - type: 'integer', - }, - 'cef.version': { - category: 'cef', - description: 'Version of the CEF specification used by the message. ', - name: 'cef.version', - type: 'keyword', - }, - 'cef.device.vendor': { - category: 'cef', - description: 'Vendor of the device that produced the message. ', - name: 'cef.device.vendor', - type: 'keyword', - }, - 'cef.device.product': { - category: 'cef', - description: 'Product of the device that produced the message. ', - name: 'cef.device.product', - type: 'keyword', - }, - 'cef.device.version': { - category: 'cef', - description: 'Version of the product that produced the message. ', - name: 'cef.device.version', - type: 'keyword', - }, - 'cef.device.event_class_id': { - category: 'cef', - description: 'Unique identifier of the event type. ', - name: 'cef.device.event_class_id', - type: 'keyword', - }, - 'cef.severity': { - category: 'cef', - description: - 'Importance of the event. The valid string values are Unknown, Low, Medium, High, and Very-High. The valid integer values are 0-3=Low, 4-6=Medium, 7- 8=High, and 9-10=Very-High. ', - example: 'Very-High', - name: 'cef.severity', - type: 'keyword', - }, - 'cef.name': { - category: 'cef', - description: 'Short description of the event. ', - name: 'cef.name', - type: 'keyword', - }, - 'cef.extensions.agentAddress': { - category: 'cef', - description: 'The IP address of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentAddress', - type: 'ip', - }, - 'cef.extensions.agentDnsDomain': { - category: 'cef', - description: 'The DNS domain name of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentDnsDomain', - type: 'keyword', - }, - 'cef.extensions.agentHostName': { - category: 'cef', - description: 'The hostname of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentHostName', - type: 'keyword', - }, - 'cef.extensions.agentId': { - category: 'cef', - description: 'The agent ID of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentId', - type: 'keyword', - }, - 'cef.extensions.agentMacAddress': { - category: 'cef', - description: 'The MAC address of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentMacAddress', - type: 'keyword', - }, - 'cef.extensions.agentNtDomain': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentNtDomain', - type: 'keyword', - }, - 'cef.extensions.agentReceiptTime': { - category: 'cef', - description: - 'The time at which information about the event was received by the ArcSight connector.', - name: 'cef.extensions.agentReceiptTime', - type: 'date', - }, - 'cef.extensions.agentTimeZone': { - category: 'cef', - description: 'The agent time zone of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentTimeZone', - type: 'keyword', - }, - 'cef.extensions.agentTranslatedAddress': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentTranslatedAddress', - type: 'ip', - }, - 'cef.extensions.agentTranslatedZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentTranslatedZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.agentTranslatedZoneURI': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentTranslatedZoneURI', - type: 'keyword', - }, - 'cef.extensions.agentType': { - category: 'cef', - description: 'The agent type of the ArcSight connector that processed the event', - name: 'cef.extensions.agentType', - type: 'keyword', - }, - 'cef.extensions.agentVersion': { - category: 'cef', - description: 'The version of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentVersion', - type: 'keyword', - }, - 'cef.extensions.agentZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.agentZoneURI': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentZoneURI', - type: 'keyword', - }, - 'cef.extensions.applicationProtocol': { - category: 'cef', - description: - 'Application level protocol, example values are HTTP, HTTPS, SSHv2, Telnet, POP, IMPA, IMAPS, and so on.', - name: 'cef.extensions.applicationProtocol', - type: 'keyword', - }, - 'cef.extensions.baseEventCount': { - category: 'cef', - description: - 'A count associated with this event. How many times was this same event observed? Count can be omitted if it is 1.', - name: 'cef.extensions.baseEventCount', - type: 'long', - }, - 'cef.extensions.bytesIn': { - category: 'cef', - description: - 'Number of bytes transferred inbound, relative to the source to destination relationship, meaning that data was flowing from source to destination.', - name: 'cef.extensions.bytesIn', - type: 'long', - }, - 'cef.extensions.bytesOut': { - category: 'cef', - description: - 'Number of bytes transferred outbound relative to the source to destination relationship. For example, the byte number of data flowing from the destination to the source.', - name: 'cef.extensions.bytesOut', - type: 'long', - }, - 'cef.extensions.customerExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.customerExternalID', - type: 'keyword', - }, - 'cef.extensions.customerURI': { - category: 'cef', - description: 'null', - name: 'cef.extensions.customerURI', - type: 'keyword', - }, - 'cef.extensions.destinationAddress': { - category: 'cef', - description: - 'Identifies the destination address that the event refers to in an IP network. The format is an IPv4 address.', - name: 'cef.extensions.destinationAddress', - type: 'ip', - }, - 'cef.extensions.destinationDnsDomain': { - category: 'cef', - description: 'The DNS domain part of the complete fully qualified domain name (FQDN).', - name: 'cef.extensions.destinationDnsDomain', - type: 'keyword', - }, - 'cef.extensions.destinationGeoLatitude': { - category: 'cef', - description: "The latitudinal value from which the destination's IP address belongs.", - name: 'cef.extensions.destinationGeoLatitude', - type: 'double', - }, - 'cef.extensions.destinationGeoLongitude': { - category: 'cef', - description: "The longitudinal value from which the destination's IP address belongs.", - name: 'cef.extensions.destinationGeoLongitude', - type: 'double', - }, - 'cef.extensions.destinationHostName': { - category: 'cef', - description: - 'Identifies the destination that an event refers to in an IP network. The format should be a fully qualified domain name (FQDN) associated with the destination node, when a node is available.', - name: 'cef.extensions.destinationHostName', - type: 'keyword', - }, - 'cef.extensions.destinationMacAddress': { - category: 'cef', - description: 'Six colon-seperated hexadecimal numbers.', - name: 'cef.extensions.destinationMacAddress', - type: 'keyword', - }, - 'cef.extensions.destinationNtDomain': { - category: 'cef', - description: 'The Windows domain name of the destination address.', - name: 'cef.extensions.destinationNtDomain', - type: 'keyword', - }, - 'cef.extensions.destinationPort': { - category: 'cef', - description: 'The valid port numbers are between 0 and 65535.', - name: 'cef.extensions.destinationPort', - type: 'long', - }, - 'cef.extensions.destinationProcessId': { - category: 'cef', - description: - 'Provides the ID of the destination process associated with the event. For example, if an event contains process ID 105, "105" is the process ID.', - name: 'cef.extensions.destinationProcessId', - type: 'long', - }, - 'cef.extensions.destinationProcessName': { - category: 'cef', - description: "The name of the event's destination process.", - name: 'cef.extensions.destinationProcessName', - type: 'keyword', - }, - 'cef.extensions.destinationServiceName': { - category: 'cef', - description: 'The service targeted by this event.', - name: 'cef.extensions.destinationServiceName', - type: 'keyword', - }, - 'cef.extensions.destinationTranslatedAddress': { - category: 'cef', - description: 'Identifies the translated destination that the event refers to in an IP network.', - name: 'cef.extensions.destinationTranslatedAddress', - type: 'ip', - }, - 'cef.extensions.destinationTranslatedPort': { - category: 'cef', - description: - 'Port after it was translated; for example, a firewall. Valid port numbers are 0 to 65535.', - name: 'cef.extensions.destinationTranslatedPort', - type: 'long', - }, - 'cef.extensions.destinationTranslatedZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.destinationTranslatedZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.destinationTranslatedZoneURI': { - category: 'cef', - description: - 'The URI for the Translated Zone that the destination asset has been assigned to in ArcSight.', - name: 'cef.extensions.destinationTranslatedZoneURI', - type: 'keyword', - }, - 'cef.extensions.destinationUserId': { - category: 'cef', - description: - 'Identifies the destination user by ID. For example, in UNIX, the root user is generally associated with user ID 0.', - name: 'cef.extensions.destinationUserId', - type: 'keyword', - }, - 'cef.extensions.destinationUserName': { - category: 'cef', - description: - "Identifies the destination user by name. This is the user associated with the event's destination. Email addresses are often mapped into the UserName fields. The recipient is a candidate to put into this field.", - name: 'cef.extensions.destinationUserName', - type: 'keyword', - }, - 'cef.extensions.destinationUserPrivileges': { - category: 'cef', - description: - 'The typical values are "Administrator", "User", and "Guest". This identifies the destination user\'s privileges. In UNIX, for example, activity executed on the root user would be identified with destinationUser Privileges of "Administrator".', - name: 'cef.extensions.destinationUserPrivileges', - type: 'keyword', - }, - 'cef.extensions.destinationZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.destinationZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.destinationZoneURI': { - category: 'cef', - description: - 'The URI for the Zone that the destination asset has been assigned to in ArcSight.', - name: 'cef.extensions.destinationZoneURI', - type: 'keyword', - }, - 'cef.extensions.deviceAction': { - category: 'cef', - description: 'Action taken by the device.', - name: 'cef.extensions.deviceAction', - type: 'keyword', - }, - 'cef.extensions.deviceAddress': { - category: 'cef', - description: 'Identifies the device address that an event refers to in an IP network.', - name: 'cef.extensions.deviceAddress', - type: 'ip', - }, - 'cef.extensions.deviceCustomFloatingPoint1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomFloatingPoint1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomFloatingPoint3Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomFloatingPoint3Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomFloatingPoint4Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomFloatingPoint4Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomDate1': { - category: 'cef', - description: - 'One of two timestamp fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomDate1', - type: 'date', - }, - 'cef.extensions.deviceCustomDate1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomDate1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomDate2': { - category: 'cef', - description: - 'One of two timestamp fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomDate2', - type: 'date', - }, - 'cef.extensions.deviceCustomDate2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomDate2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomFloatingPoint1': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomFloatingPoint1', - type: 'double', - }, - 'cef.extensions.deviceCustomFloatingPoint2': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomFloatingPoint2', - type: 'double', - }, - 'cef.extensions.deviceCustomFloatingPoint2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomFloatingPoint2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomFloatingPoint3': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomFloatingPoint3', - type: 'double', - }, - 'cef.extensions.deviceCustomFloatingPoint4': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomFloatingPoint4', - type: 'double', - }, - 'cef.extensions.deviceCustomIPv6Address1': { - category: 'cef', - description: - 'One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomIPv6Address1', - type: 'ip', - }, - 'cef.extensions.deviceCustomIPv6Address1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomIPv6Address1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomIPv6Address2': { - category: 'cef', - description: - 'One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomIPv6Address2', - type: 'ip', - }, - 'cef.extensions.deviceCustomIPv6Address2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomIPv6Address2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomIPv6Address3': { - category: 'cef', - description: - 'One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomIPv6Address3', - type: 'ip', - }, - 'cef.extensions.deviceCustomIPv6Address3Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomIPv6Address3Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomIPv6Address4': { - category: 'cef', - description: - 'One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomIPv6Address4', - type: 'ip', - }, - 'cef.extensions.deviceCustomIPv6Address4Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomIPv6Address4Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomNumber1': { - category: 'cef', - description: - 'One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomNumber1', - type: 'long', - }, - 'cef.extensions.deviceCustomNumber1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomNumber1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomNumber2': { - category: 'cef', - description: - 'One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomNumber2', - type: 'long', - }, - 'cef.extensions.deviceCustomNumber2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomNumber2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomNumber3': { - category: 'cef', - description: - 'One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomNumber3', - type: 'long', - }, - 'cef.extensions.deviceCustomNumber3Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomNumber3Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString1': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString1', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString2': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString2', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString3': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString3', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString3Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString3Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString4': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString4', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString4Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString4Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString5': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString5', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString5Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString5Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString6': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString6', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString6Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString6Label', - type: 'keyword', - }, - 'cef.extensions.deviceDirection': { - category: 'cef', - description: - 'Any information about what direction the observed communication has taken. The following values are supported - "0" for inbound or "1" for outbound.', - name: 'cef.extensions.deviceDirection', - type: 'long', - }, - 'cef.extensions.deviceDnsDomain': { - category: 'cef', - description: 'The DNS domain part of the complete fully qualified domain name (FQDN).', - name: 'cef.extensions.deviceDnsDomain', - type: 'keyword', - }, - 'cef.extensions.deviceEventCategory': { - category: 'cef', - description: - 'Represents the category assigned by the originating device. Devices often use their own categorization schema to classify event. Example "/Monitor/Disk/Read".', - name: 'cef.extensions.deviceEventCategory', - type: 'keyword', - }, - 'cef.extensions.deviceExternalId': { - category: 'cef', - description: 'A name that uniquely identifies the device generating this event.', - name: 'cef.extensions.deviceExternalId', - type: 'keyword', - }, - 'cef.extensions.deviceFacility': { - category: 'cef', - description: - 'The facility generating this event. For example, Syslog has an explicit facility associated with every event.', - name: 'cef.extensions.deviceFacility', - type: 'keyword', - }, - 'cef.extensions.deviceFlexNumber1': { - category: 'cef', - description: - 'One of two alternative number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceFlexNumber1', - type: 'long', - }, - 'cef.extensions.deviceFlexNumber1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceFlexNumber1Label', - type: 'keyword', - }, - 'cef.extensions.deviceFlexNumber2': { - category: 'cef', - description: - 'One of two alternative number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceFlexNumber2', - type: 'long', - }, - 'cef.extensions.deviceFlexNumber2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceFlexNumber2Label', - type: 'keyword', - }, - 'cef.extensions.deviceHostName': { - category: 'cef', - description: - 'The format should be a fully qualified domain name (FQDN) associated with the device node, when a node is available.', - name: 'cef.extensions.deviceHostName', - type: 'keyword', - }, - 'cef.extensions.deviceInboundInterface': { - category: 'cef', - description: 'Interface on which the packet or data entered the device.', - name: 'cef.extensions.deviceInboundInterface', - type: 'keyword', - }, - 'cef.extensions.deviceMacAddress': { - category: 'cef', - description: 'Six colon-separated hexadecimal numbers.', - name: 'cef.extensions.deviceMacAddress', - type: 'keyword', - }, - 'cef.extensions.deviceNtDomain': { - category: 'cef', - description: 'The Windows domain name of the device address.', - name: 'cef.extensions.deviceNtDomain', - type: 'keyword', - }, - 'cef.extensions.deviceOutboundInterface': { - category: 'cef', - description: 'Interface on which the packet or data left the device.', - name: 'cef.extensions.deviceOutboundInterface', - type: 'keyword', - }, - 'cef.extensions.devicePayloadId': { - category: 'cef', - description: 'Unique identifier for the payload associated with the event.', - name: 'cef.extensions.devicePayloadId', - type: 'keyword', - }, - 'cef.extensions.deviceProcessId': { - category: 'cef', - description: 'Provides the ID of the process on the device generating the event.', - name: 'cef.extensions.deviceProcessId', - type: 'long', - }, - 'cef.extensions.deviceProcessName': { - category: 'cef', - description: - 'Process name associated with the event. An example might be the process generating the syslog entry in UNIX.', - name: 'cef.extensions.deviceProcessName', - type: 'keyword', - }, - 'cef.extensions.deviceReceiptTime': { - category: 'cef', - description: - 'The time at which the event related to the activity was received. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st 1970)', - name: 'cef.extensions.deviceReceiptTime', - type: 'date', - }, - 'cef.extensions.deviceTimeZone': { - category: 'cef', - description: 'The time zone for the device generating the event.', - name: 'cef.extensions.deviceTimeZone', - type: 'keyword', - }, - 'cef.extensions.deviceTranslatedAddress': { - category: 'cef', - description: - 'Identifies the translated device address that the event refers to in an IP network.', - name: 'cef.extensions.deviceTranslatedAddress', - type: 'ip', - }, - 'cef.extensions.deviceTranslatedZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.deviceTranslatedZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.deviceTranslatedZoneURI': { - category: 'cef', - description: - 'The URI for the Translated Zone that the device asset has been assigned to in ArcSight.', - name: 'cef.extensions.deviceTranslatedZoneURI', - type: 'keyword', - }, - 'cef.extensions.deviceZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.deviceZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.deviceZoneURI': { - category: 'cef', - description: 'Thee URI for the Zone that the device asset has been assigned to in ArcSight.', - name: 'cef.extensions.deviceZoneURI', - type: 'keyword', - }, - 'cef.extensions.endTime': { - category: 'cef', - description: - 'The time at which the activity related to the event ended. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st1970). An example would be reporting the end of a session.', - name: 'cef.extensions.endTime', - type: 'date', - }, - 'cef.extensions.eventId': { - category: 'cef', - description: 'This is a unique ID that ArcSight assigns to each event.', - name: 'cef.extensions.eventId', - type: 'long', - }, - 'cef.extensions.eventOutcome': { - category: 'cef', - description: "Displays the outcome, usually as 'success' or 'failure'.", - name: 'cef.extensions.eventOutcome', - type: 'keyword', - }, - 'cef.extensions.externalId': { - category: 'cef', - description: - 'The ID used by an originating device. They are usually increasing numbers, associated with events.', - name: 'cef.extensions.externalId', - type: 'keyword', - }, - 'cef.extensions.fileCreateTime': { - category: 'cef', - description: 'Time when the file was created.', - name: 'cef.extensions.fileCreateTime', - type: 'date', - }, - 'cef.extensions.fileHash': { - category: 'cef', - description: 'Hash of a file.', - name: 'cef.extensions.fileHash', - type: 'keyword', - }, - 'cef.extensions.fileId': { - category: 'cef', - description: 'An ID associated with a file could be the inode.', - name: 'cef.extensions.fileId', - type: 'keyword', - }, - 'cef.extensions.fileModificationTime': { - category: 'cef', - description: 'Time when the file was last modified.', - name: 'cef.extensions.fileModificationTime', - type: 'date', - }, - 'cef.extensions.filename': { - category: 'cef', - description: 'Name of the file only (without its path).', - name: 'cef.extensions.filename', - type: 'keyword', - }, - 'cef.extensions.filePath': { - category: 'cef', - description: 'Full path to the file, including file name itself.', - name: 'cef.extensions.filePath', - type: 'keyword', - }, - 'cef.extensions.filePermission': { - category: 'cef', - description: 'Permissions of the file.', - name: 'cef.extensions.filePermission', - type: 'keyword', - }, - 'cef.extensions.fileSize': { - category: 'cef', - description: 'Size of the file.', - name: 'cef.extensions.fileSize', - type: 'long', - }, - 'cef.extensions.fileType': { - category: 'cef', - description: 'Type of file (pipe, socket, etc.)', - name: 'cef.extensions.fileType', - type: 'keyword', - }, - 'cef.extensions.flexDate1': { - category: 'cef', - description: - 'A timestamp field available to map a timestamp that does not apply to any other defined timestamp field in this dictionary. Use all flex fields sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.', - name: 'cef.extensions.flexDate1', - type: 'date', - }, - 'cef.extensions.flexDate1Label': { - category: 'cef', - description: 'The label field is a string and describes the purpose of the flex field.', - name: 'cef.extensions.flexDate1Label', - type: 'keyword', - }, - 'cef.extensions.flexString1': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.', - name: 'cef.extensions.flexString1', - type: 'keyword', - }, - 'cef.extensions.flexString2': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.', - name: 'cef.extensions.flexString2', - type: 'keyword', - }, - 'cef.extensions.flexString1Label': { - category: 'cef', - description: 'The label field is a string and describes the purpose of the flex field.', - name: 'cef.extensions.flexString1Label', - type: 'keyword', - }, - 'cef.extensions.flexString2Label': { - category: 'cef', - description: 'The label field is a string and describes the purpose of the flex field.', - name: 'cef.extensions.flexString2Label', - type: 'keyword', - }, - 'cef.extensions.message': { - category: 'cef', - description: - 'An arbitrary message giving more details about the event. Multi-line entries can be produced by using \\n as the new line separator.', - name: 'cef.extensions.message', - type: 'keyword', - }, - 'cef.extensions.oldFileCreateTime': { - category: 'cef', - description: 'Time when old file was created.', - name: 'cef.extensions.oldFileCreateTime', - type: 'date', - }, - 'cef.extensions.oldFileHash': { - category: 'cef', - description: 'Hash of the old file.', - name: 'cef.extensions.oldFileHash', - type: 'keyword', - }, - 'cef.extensions.oldFileId': { - category: 'cef', - description: 'An ID associated with the old file could be the inode.', - name: 'cef.extensions.oldFileId', - type: 'keyword', - }, - 'cef.extensions.oldFileModificationTime': { - category: 'cef', - description: 'Time when old file was last modified.', - name: 'cef.extensions.oldFileModificationTime', - type: 'date', - }, - 'cef.extensions.oldFileName': { - category: 'cef', - description: 'Name of the old file.', - name: 'cef.extensions.oldFileName', - type: 'keyword', - }, - 'cef.extensions.oldFilePath': { - category: 'cef', - description: 'Full path to the old file, including the file name itself.', - name: 'cef.extensions.oldFilePath', - type: 'keyword', - }, - 'cef.extensions.oldFilePermission': { - category: 'cef', - description: 'Permissions of the old file.', - name: 'cef.extensions.oldFilePermission', - type: 'keyword', - }, - 'cef.extensions.oldFileSize': { - category: 'cef', - description: 'Size of the old file.', - name: 'cef.extensions.oldFileSize', - type: 'long', - }, - 'cef.extensions.oldFileType': { - category: 'cef', - description: 'Type of the old file (pipe, socket, etc.)', - name: 'cef.extensions.oldFileType', - type: 'keyword', - }, - 'cef.extensions.rawEvent': { - category: 'cef', - description: 'null', - name: 'cef.extensions.rawEvent', - type: 'keyword', - }, - 'cef.extensions.Reason': { - category: 'cef', - description: - 'The reason an audit event was generated. For example "bad password" or "unknown user". This could also be an error or return code. Example "0x1234".', - name: 'cef.extensions.Reason', - type: 'keyword', - }, - 'cef.extensions.requestClientApplication': { - category: 'cef', - description: 'The User-Agent associated with the request.', - name: 'cef.extensions.requestClientApplication', - type: 'keyword', - }, - 'cef.extensions.requestContext': { - category: 'cef', - description: - 'Description of the content from which the request originated (for example, HTTP Referrer)', - name: 'cef.extensions.requestContext', - type: 'keyword', - }, - 'cef.extensions.requestCookies': { - category: 'cef', - description: 'Cookies associated with the request.', - name: 'cef.extensions.requestCookies', - type: 'keyword', - }, - 'cef.extensions.requestMethod': { - category: 'cef', - description: 'The HTTP method used to access a URL.', - name: 'cef.extensions.requestMethod', - type: 'keyword', - }, - 'cef.extensions.requestUrl': { - category: 'cef', - description: - 'In the case of an HTTP request, this field contains the URL accessed. The URL should contain the protocol as well.', - name: 'cef.extensions.requestUrl', - type: 'keyword', - }, - 'cef.extensions.sourceAddress': { - category: 'cef', - description: 'Identifies the source that an event refers to in an IP network.', - name: 'cef.extensions.sourceAddress', - type: 'ip', - }, - 'cef.extensions.sourceDnsDomain': { - category: 'cef', - description: 'The DNS domain part of the complete fully qualified domain name (FQDN).', - name: 'cef.extensions.sourceDnsDomain', - type: 'keyword', - }, - 'cef.extensions.sourceGeoLatitude': { - category: 'cef', - description: 'null', - name: 'cef.extensions.sourceGeoLatitude', - type: 'double', - }, - 'cef.extensions.sourceGeoLongitude': { - category: 'cef', - description: 'null', - name: 'cef.extensions.sourceGeoLongitude', - type: 'double', - }, - 'cef.extensions.sourceHostName': { - category: 'cef', - description: - "Identifies the source that an event refers to in an IP network. The format should be a fully qualified domain name (FQDN) associated with the source node, when a mode is available. Examples: 'host' or 'host.domain.com'. ", - name: 'cef.extensions.sourceHostName', - type: 'keyword', - }, - 'cef.extensions.sourceMacAddress': { - category: 'cef', - description: 'Six colon-separated hexadecimal numbers.', - example: '00:0d:60:af:1b:61', - name: 'cef.extensions.sourceMacAddress', - type: 'keyword', - }, - 'cef.extensions.sourceNtDomain': { - category: 'cef', - description: 'The Windows domain name for the source address.', - name: 'cef.extensions.sourceNtDomain', - type: 'keyword', - }, - 'cef.extensions.sourcePort': { - category: 'cef', - description: 'The valid port numbers are 0 to 65535.', - name: 'cef.extensions.sourcePort', - type: 'long', - }, - 'cef.extensions.sourceProcessId': { - category: 'cef', - description: 'The ID of the source process associated with the event.', - name: 'cef.extensions.sourceProcessId', - type: 'long', - }, - 'cef.extensions.sourceProcessName': { - category: 'cef', - description: "The name of the event's source process.", - name: 'cef.extensions.sourceProcessName', - type: 'keyword', - }, - 'cef.extensions.sourceServiceName': { - category: 'cef', - description: 'The service that is responsible for generating this event.', - name: 'cef.extensions.sourceServiceName', - type: 'keyword', - }, - 'cef.extensions.sourceTranslatedAddress': { - category: 'cef', - description: 'Identifies the translated source that the event refers to in an IP network.', - name: 'cef.extensions.sourceTranslatedAddress', - type: 'ip', - }, - 'cef.extensions.sourceTranslatedPort': { - category: 'cef', - description: - 'A port number after being translated by, for example, a firewall. Valid port numbers are 0 to 65535.', - name: 'cef.extensions.sourceTranslatedPort', - type: 'long', - }, - 'cef.extensions.sourceTranslatedZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.sourceTranslatedZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.sourceTranslatedZoneURI': { - category: 'cef', - description: - 'The URI for the Translated Zone that the destination asset has been assigned to in ArcSight.', - name: 'cef.extensions.sourceTranslatedZoneURI', - type: 'keyword', - }, - 'cef.extensions.sourceUserId': { - category: 'cef', - description: - 'Identifies the source user by ID. This is the user associated with the source of the event. For example, in UNIX, the root user is generally associated with user ID 0.', - name: 'cef.extensions.sourceUserId', - type: 'keyword', - }, - 'cef.extensions.sourceUserName': { - category: 'cef', - description: - 'Identifies the source user by name. Email addresses are also mapped into the UserName fields. The sender is a candidate to put into this field.', - name: 'cef.extensions.sourceUserName', - type: 'keyword', - }, - 'cef.extensions.sourceUserPrivileges': { - category: 'cef', - description: - 'The typical values are "Administrator", "User", and "Guest". It identifies the source user\'s privileges. In UNIX, for example, activity executed by the root user would be identified with "Administrator".', - name: 'cef.extensions.sourceUserPrivileges', - type: 'keyword', - }, - 'cef.extensions.sourceZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.sourceZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.sourceZoneURI': { - category: 'cef', - description: 'The URI for the Zone that the source asset has been assigned to in ArcSight.', - name: 'cef.extensions.sourceZoneURI', - type: 'keyword', - }, - 'cef.extensions.startTime': { - category: 'cef', - description: - 'The time when the activity the event referred to started. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st 1970)', - name: 'cef.extensions.startTime', - type: 'date', - }, - 'cef.extensions.transportProtocol': { - category: 'cef', - description: - 'Identifies the Layer-4 protocol used. The possible values are protocols such as TCP or UDP.', - name: 'cef.extensions.transportProtocol', - type: 'keyword', - }, - 'cef.extensions.type': { - category: 'cef', - description: - '0 means base event, 1 means aggregated, 2 means correlation, and 3 means action. This field can be omitted for base events (type 0).', - name: 'cef.extensions.type', - type: 'long', - }, - 'cef.extensions.categoryDeviceType': { - category: 'cef', - description: 'Device type. Examples - Proxy, IDS, Web Server', - name: 'cef.extensions.categoryDeviceType', - type: 'keyword', - }, - 'cef.extensions.categoryObject': { - category: 'cef', - description: - 'Object that the event is about. For example it can be an operating sytem, database, file, etc.', - name: 'cef.extensions.categoryObject', - type: 'keyword', - }, - 'cef.extensions.categoryBehavior': { - category: 'cef', - description: - "Action or a behavior associated with an event. It's what is being done to the object.", - name: 'cef.extensions.categoryBehavior', - type: 'keyword', - }, - 'cef.extensions.categoryTechnique': { - category: 'cef', - description: 'Technique being used (e.g. /DoS).', - name: 'cef.extensions.categoryTechnique', - type: 'keyword', - }, - 'cef.extensions.categoryDeviceGroup': { - category: 'cef', - description: 'General device group like Firewall.', - name: 'cef.extensions.categoryDeviceGroup', - type: 'keyword', - }, - 'cef.extensions.categorySignificance': { - category: 'cef', - description: 'Characterization of the importance of the event.', - name: 'cef.extensions.categorySignificance', - type: 'keyword', - }, - 'cef.extensions.categoryOutcome': { - category: 'cef', - description: 'Outcome of the event (e.g. sucess, failure, or attempt).', - name: 'cef.extensions.categoryOutcome', - type: 'keyword', - }, - 'cef.extensions.managerReceiptTime': { - category: 'cef', - description: 'When the Arcsight ESM received the event.', - name: 'cef.extensions.managerReceiptTime', - type: 'date', - }, - 'source.service.name': { - category: 'source', - description: 'Service that is the source of the event.', - name: 'source.service.name', - type: 'keyword', - }, - 'destination.service.name': { - category: 'destination', - description: 'Service that is the target of the event.', - name: 'destination.service.name', - type: 'keyword', - }, - type: { - category: 'base', - description: - 'The type of the transaction (for example, HTTP, MySQL, Redis, or RUM) or "flow" in case of flows. ', - name: 'type', - }, - 'server.process.name': { - category: 'server', - description: 'The name of the process that served the transaction. ', - name: 'server.process.name', - }, - 'server.process.args': { - category: 'server', - description: 'The command-line of the process that served the transaction. ', - name: 'server.process.args', - }, - 'server.process.executable': { - category: 'server', - description: 'Absolute path to the server process executable. ', - name: 'server.process.executable', - }, - 'server.process.working_directory': { - category: 'server', - description: 'The working directory of the server process. ', - name: 'server.process.working_directory', - }, - 'server.process.start': { - category: 'server', - description: 'The time the server process started. ', - name: 'server.process.start', - }, - 'client.process.name': { - category: 'client', - description: 'The name of the process that initiated the transaction. ', - name: 'client.process.name', - }, - 'client.process.args': { - category: 'client', - description: 'The command-line of the process that initiated the transaction. ', - name: 'client.process.args', - }, - 'client.process.executable': { - category: 'client', - description: 'Absolute path to the client process executable. ', - name: 'client.process.executable', - }, - 'client.process.working_directory': { - category: 'client', - description: 'The working directory of the client process. ', - name: 'client.process.working_directory', - }, - 'client.process.start': { - category: 'client', - description: 'The time the client process started. ', - name: 'client.process.start', - }, - real_ip: { - category: 'base', - description: - 'If the server initiating the transaction is a proxy, this field contains the original client IP address. For HTTP, for example, the IP address extracted from a configurable HTTP header, by default `X-Forwarded-For`. Unless this field is disabled, it always has a value, and it matches the `client_ip` for non proxy clients. ', - name: 'real_ip', - type: 'alias', - }, - transport: { - category: 'base', - description: - 'The transport protocol used for the transaction. If not specified, then tcp is assumed. ', - name: 'transport', - type: 'alias', - }, - 'flow.final': { - category: 'flow', - description: - 'Indicates if event is last event in flow. If final is false, the event reports an intermediate flow state only. ', - name: 'flow.final', - type: 'boolean', - }, - 'flow.id': { - category: 'flow', - description: 'Internal flow ID based on connection meta data and address. ', - name: 'flow.id', - }, - 'flow.vlan': { - category: 'flow', - description: - "VLAN identifier from the 802.1q frame. In case of a multi-tagged frame this field will be an array with the outer tag's VLAN identifier listed first. ", - name: 'flow.vlan', - type: 'long', - }, - flow_id: { - category: 'base', - name: 'flow_id', - type: 'alias', - }, - final: { - category: 'base', - name: 'final', - type: 'alias', - }, - vlan: { - category: 'base', - name: 'vlan', - type: 'alias', - }, - 'source.stats.net_bytes_total': { - category: 'source', - name: 'source.stats.net_bytes_total', - type: 'alias', - }, - 'source.stats.net_packets_total': { - category: 'source', - name: 'source.stats.net_packets_total', - type: 'alias', - }, - 'dest.stats.net_bytes_total': { - category: 'dest', - name: 'dest.stats.net_bytes_total', - type: 'alias', - }, - 'dest.stats.net_packets_total': { - category: 'dest', - name: 'dest.stats.net_packets_total', - type: 'alias', - }, - status: { - category: 'base', - description: - 'The high level status of the transaction. The way to compute this value depends on the protocol, but the result has a meaning independent of the protocol. ', - name: 'status', - }, - method: { - category: 'base', - description: - 'The command/verb/method of the transaction. For HTTP, this is the method name (GET, POST, PUT, and so on), for SQL this is the verb (SELECT, UPDATE, DELETE, and so on). ', - name: 'method', - }, - resource: { - category: 'base', - description: - 'The logical resource that this transaction refers to. For HTTP, this is the URL path up to the last slash (/). For example, if the URL is `/users/1`, the resource is `/users`. For databases, the resource is typically the table name. The field is not filled for all transaction types. ', - name: 'resource', - }, - path: { - category: 'base', - description: - 'The path the transaction refers to. For HTTP, this is the URL. For SQL databases, this is the table name. For key-value stores, this is the key. ', - name: 'path', - }, - query: { - category: 'base', - description: - 'The query in a human readable format. For HTTP, it will typically be something like `GET /users/_search?name=test`. For MySQL, it is something like `SELECT id from users where name=test`. ', - name: 'query', - type: 'keyword', - }, - params: { - category: 'base', - description: - 'The request parameters. For HTTP, these are the POST or GET parameters. For Thrift-RPC, these are the parameters from the request. ', - name: 'params', - type: 'text', - }, - notes: { - category: 'base', - description: - 'Messages from Packetbeat itself. This field usually contains error messages for interpreting the raw data. This information can be helpful for troubleshooting. ', - name: 'notes', - type: 'alias', - }, - request: { - category: 'base', - description: - 'For text protocols, this is the request as seen on the wire (application layer only). For binary protocols this is our representation of the request. ', - name: 'request', - type: 'text', - }, - response: { - category: 'base', - description: - 'For text protocols, this is the response as seen on the wire (application layer only). For binary protocols this is our representation of the request. ', - name: 'response', - type: 'text', - }, - bytes_in: { - category: 'base', - description: - 'The number of bytes of the request. Note that this size is the application layer message length, without the length of the IP or TCP headers. ', - name: 'bytes_in', - type: 'alias', - }, - bytes_out: { - category: 'base', - description: - 'The number of bytes of the response. Note that this size is the application layer message length, without the length of the IP or TCP headers. ', - name: 'bytes_out', - type: 'alias', - }, - 'amqp.reply-code': { - category: 'amqp', - description: 'AMQP reply code to an error, similar to http reply-code ', - example: 404, - name: 'amqp.reply-code', - type: 'long', - }, - 'amqp.reply-text': { - category: 'amqp', - description: 'Text explaining the error. ', - name: 'amqp.reply-text', - type: 'keyword', - }, - 'amqp.class-id': { - category: 'amqp', - description: 'Failing method class. ', - name: 'amqp.class-id', - type: 'long', - }, - 'amqp.method-id': { - category: 'amqp', - description: 'Failing method ID. ', - name: 'amqp.method-id', - type: 'long', - }, - 'amqp.exchange': { - category: 'amqp', - description: 'Name of the exchange. ', - name: 'amqp.exchange', - type: 'keyword', - }, - 'amqp.exchange-type': { - category: 'amqp', - description: 'Exchange type. ', - example: 'fanout', - name: 'amqp.exchange-type', - type: 'keyword', - }, - 'amqp.passive': { - category: 'amqp', - description: 'If set, do not create exchange/queue. ', - name: 'amqp.passive', - type: 'boolean', - }, - 'amqp.durable': { - category: 'amqp', - description: 'If set, request a durable exchange/queue. ', - name: 'amqp.durable', - type: 'boolean', - }, - 'amqp.exclusive': { - category: 'amqp', - description: 'If set, request an exclusive queue. ', - name: 'amqp.exclusive', - type: 'boolean', - }, - 'amqp.auto-delete': { - category: 'amqp', - description: 'If set, auto-delete queue when unused. ', - name: 'amqp.auto-delete', - type: 'boolean', - }, - 'amqp.no-wait': { - category: 'amqp', - description: 'If set, the server will not respond to the method. ', - name: 'amqp.no-wait', - type: 'boolean', - }, - 'amqp.consumer-tag': { - category: 'amqp', - description: 'Identifier for the consumer, valid within the current channel. ', - name: 'amqp.consumer-tag', - }, - 'amqp.delivery-tag': { - category: 'amqp', - description: 'The server-assigned and channel-specific delivery tag. ', - name: 'amqp.delivery-tag', - type: 'long', - }, - 'amqp.message-count': { - category: 'amqp', - description: - 'The number of messages in the queue, which will be zero for newly-declared queues. ', - name: 'amqp.message-count', - type: 'long', - }, - 'amqp.consumer-count': { - category: 'amqp', - description: 'The number of consumers of a queue. ', - name: 'amqp.consumer-count', - type: 'long', - }, - 'amqp.routing-key': { - category: 'amqp', - description: 'Message routing key. ', - name: 'amqp.routing-key', - type: 'keyword', - }, - 'amqp.no-ack': { - category: 'amqp', - description: 'If set, the server does not expect acknowledgements for messages. ', - name: 'amqp.no-ack', - type: 'boolean', - }, - 'amqp.no-local': { - category: 'amqp', - description: - 'If set, the server will not send messages to the connection that published them. ', - name: 'amqp.no-local', - type: 'boolean', - }, - 'amqp.if-unused': { - category: 'amqp', - description: 'Delete only if unused. ', - name: 'amqp.if-unused', - type: 'boolean', - }, - 'amqp.if-empty': { - category: 'amqp', - description: 'Delete only if empty. ', - name: 'amqp.if-empty', - type: 'boolean', - }, - 'amqp.queue': { - category: 'amqp', - description: 'The queue name identifies the queue within the vhost. ', - name: 'amqp.queue', - type: 'keyword', - }, - 'amqp.redelivered': { - category: 'amqp', - description: - 'Indicates that the message has been previously delivered to this or another client. ', - name: 'amqp.redelivered', - type: 'boolean', - }, - 'amqp.multiple': { - category: 'amqp', - description: 'Acknowledge multiple messages. ', - name: 'amqp.multiple', - type: 'boolean', - }, - 'amqp.arguments': { - category: 'amqp', - description: 'Optional additional arguments passed to some methods. Can be of various types. ', - name: 'amqp.arguments', - type: 'object', - }, - 'amqp.mandatory': { - category: 'amqp', - description: 'Indicates mandatory routing. ', - name: 'amqp.mandatory', - type: 'boolean', - }, - 'amqp.immediate': { - category: 'amqp', - description: 'Request immediate delivery. ', - name: 'amqp.immediate', - type: 'boolean', - }, - 'amqp.content-type': { - category: 'amqp', - description: 'MIME content type. ', - example: 'text/plain', - name: 'amqp.content-type', - type: 'keyword', - }, - 'amqp.content-encoding': { - category: 'amqp', - description: 'MIME content encoding. ', - name: 'amqp.content-encoding', - type: 'keyword', - }, - 'amqp.headers': { - category: 'amqp', - description: 'Message header field table. ', - name: 'amqp.headers', - type: 'object', - }, - 'amqp.delivery-mode': { - category: 'amqp', - description: 'Non-persistent (1) or persistent (2). ', - name: 'amqp.delivery-mode', - type: 'keyword', - }, - 'amqp.priority': { - category: 'amqp', - description: 'Message priority, 0 to 9. ', - name: 'amqp.priority', - type: 'long', - }, - 'amqp.correlation-id': { - category: 'amqp', - description: 'Application correlation identifier. ', - name: 'amqp.correlation-id', - type: 'keyword', - }, - 'amqp.reply-to': { - category: 'amqp', - description: 'Address to reply to. ', - name: 'amqp.reply-to', - type: 'keyword', - }, - 'amqp.expiration': { - category: 'amqp', - description: 'Message expiration specification. ', - name: 'amqp.expiration', - type: 'keyword', - }, - 'amqp.message-id': { - category: 'amqp', - description: 'Application message identifier. ', - name: 'amqp.message-id', - type: 'keyword', - }, - 'amqp.timestamp': { - category: 'amqp', - description: 'Message timestamp. ', - name: 'amqp.timestamp', - type: 'keyword', - }, - 'amqp.type': { - category: 'amqp', - description: 'Message type name. ', - name: 'amqp.type', - type: 'keyword', - }, - 'amqp.user-id': { - category: 'amqp', - description: 'Creating user id. ', - name: 'amqp.user-id', - type: 'keyword', - }, - 'amqp.app-id': { - category: 'amqp', - description: 'Creating application id. ', - name: 'amqp.app-id', - type: 'keyword', - }, - no_request: { - category: 'base', - name: 'no_request', - type: 'alias', - }, - 'cassandra.no_request': { - category: 'cassandra', - description: 'Indicates that there is no request because this is a PUSH message. ', - name: 'cassandra.no_request', - type: 'boolean', - }, - 'cassandra.request.headers.version': { - category: 'cassandra', - description: 'The version of the protocol.', - name: 'cassandra.request.headers.version', - type: 'long', - }, - 'cassandra.request.headers.flags': { - category: 'cassandra', - description: 'Flags applying to this frame.', - name: 'cassandra.request.headers.flags', - type: 'keyword', - }, - 'cassandra.request.headers.stream': { - category: 'cassandra', - description: - 'A frame has a stream id. If a client sends a request message with the stream id X, it is guaranteed that the stream id of the response to that message will be X.', - name: 'cassandra.request.headers.stream', - type: 'keyword', - }, - 'cassandra.request.headers.op': { - category: 'cassandra', - description: 'An operation type that distinguishes the actual message.', - name: 'cassandra.request.headers.op', - type: 'keyword', - }, - 'cassandra.request.headers.length': { - category: 'cassandra', - description: - 'A integer representing the length of the body of the frame (a frame is limited to 256MB in length).', - name: 'cassandra.request.headers.length', - type: 'long', - }, - 'cassandra.request.query': { - category: 'cassandra', - description: 'The CQL query which client send to cassandra.', - name: 'cassandra.request.query', - type: 'keyword', - }, - 'cassandra.response.headers.version': { - category: 'cassandra', - description: 'The version of the protocol.', - name: 'cassandra.response.headers.version', - type: 'long', - }, - 'cassandra.response.headers.flags': { - category: 'cassandra', - description: 'Flags applying to this frame.', - name: 'cassandra.response.headers.flags', - type: 'keyword', - }, - 'cassandra.response.headers.stream': { - category: 'cassandra', - description: - 'A frame has a stream id. If a client sends a request message with the stream id X, it is guaranteed that the stream id of the response to that message will be X.', - name: 'cassandra.response.headers.stream', - type: 'keyword', - }, - 'cassandra.response.headers.op': { - category: 'cassandra', - description: 'An operation type that distinguishes the actual message.', - name: 'cassandra.response.headers.op', - type: 'keyword', - }, - 'cassandra.response.headers.length': { - category: 'cassandra', - description: - 'A integer representing the length of the body of the frame (a frame is limited to 256MB in length).', - name: 'cassandra.response.headers.length', - type: 'long', - }, - 'cassandra.response.result.type': { - category: 'cassandra', - description: 'Cassandra result type.', - name: 'cassandra.response.result.type', - type: 'keyword', - }, - 'cassandra.response.result.rows.num_rows': { - category: 'cassandra', - description: 'Representing the number of rows present in this result.', - name: 'cassandra.response.result.rows.num_rows', - type: 'long', - }, - 'cassandra.response.result.rows.meta.keyspace': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the keyspace name.', - name: 'cassandra.response.result.rows.meta.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.rows.meta.table': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the table name.', - name: 'cassandra.response.result.rows.meta.table', - type: 'keyword', - }, - 'cassandra.response.result.rows.meta.flags': { - category: 'cassandra', - description: 'Provides information on the formatting of the remaining information.', - name: 'cassandra.response.result.rows.meta.flags', - type: 'keyword', - }, - 'cassandra.response.result.rows.meta.col_count': { - category: 'cassandra', - description: - 'Representing the number of columns selected by the query that produced this result.', - name: 'cassandra.response.result.rows.meta.col_count', - type: 'long', - }, - 'cassandra.response.result.rows.meta.pkey_columns': { - category: 'cassandra', - description: 'Representing the PK columns index and counts.', - name: 'cassandra.response.result.rows.meta.pkey_columns', - type: 'long', - }, - 'cassandra.response.result.rows.meta.paging_state': { - category: 'cassandra', - description: - 'The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.', - name: 'cassandra.response.result.rows.meta.paging_state', - type: 'keyword', - }, - 'cassandra.response.result.keyspace': { - category: 'cassandra', - description: 'Indicating the name of the keyspace that has been set.', - name: 'cassandra.response.result.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.change': { - category: 'cassandra', - description: 'Representing the type of changed involved.', - name: 'cassandra.response.result.schema_change.change', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.keyspace': { - category: 'cassandra', - description: 'This describes which keyspace has changed.', - name: 'cassandra.response.result.schema_change.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.table': { - category: 'cassandra', - description: 'This describes which table has changed.', - name: 'cassandra.response.result.schema_change.table', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.object': { - category: 'cassandra', - description: - 'This describes the name of said affected object (either the table, user type, function, or aggregate name).', - name: 'cassandra.response.result.schema_change.object', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.target': { - category: 'cassandra', - description: 'Target could be "FUNCTION" or "AGGREGATE", multiple arguments.', - name: 'cassandra.response.result.schema_change.target', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.name': { - category: 'cassandra', - description: 'The function/aggregate name.', - name: 'cassandra.response.result.schema_change.name', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.args': { - category: 'cassandra', - description: 'One string for each argument type (as CQL type).', - name: 'cassandra.response.result.schema_change.args', - type: 'keyword', - }, - 'cassandra.response.result.prepared.prepared_id': { - category: 'cassandra', - description: 'Representing the prepared query ID.', - name: 'cassandra.response.result.prepared.prepared_id', - type: 'keyword', - }, - 'cassandra.response.result.prepared.req_meta.keyspace': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the keyspace name.', - name: 'cassandra.response.result.prepared.req_meta.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.prepared.req_meta.table': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the table name.', - name: 'cassandra.response.result.prepared.req_meta.table', - type: 'keyword', - }, - 'cassandra.response.result.prepared.req_meta.flags': { - category: 'cassandra', - description: 'Provides information on the formatting of the remaining information.', - name: 'cassandra.response.result.prepared.req_meta.flags', - type: 'keyword', - }, - 'cassandra.response.result.prepared.req_meta.col_count': { - category: 'cassandra', - description: - 'Representing the number of columns selected by the query that produced this result.', - name: 'cassandra.response.result.prepared.req_meta.col_count', - type: 'long', - }, - 'cassandra.response.result.prepared.req_meta.pkey_columns': { - category: 'cassandra', - description: 'Representing the PK columns index and counts.', - name: 'cassandra.response.result.prepared.req_meta.pkey_columns', - type: 'long', - }, - 'cassandra.response.result.prepared.req_meta.paging_state': { - category: 'cassandra', - description: - 'The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.', - name: 'cassandra.response.result.prepared.req_meta.paging_state', - type: 'keyword', - }, - 'cassandra.response.result.prepared.resp_meta.keyspace': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the keyspace name.', - name: 'cassandra.response.result.prepared.resp_meta.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.prepared.resp_meta.table': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the table name.', - name: 'cassandra.response.result.prepared.resp_meta.table', - type: 'keyword', - }, - 'cassandra.response.result.prepared.resp_meta.flags': { - category: 'cassandra', - description: 'Provides information on the formatting of the remaining information.', - name: 'cassandra.response.result.prepared.resp_meta.flags', - type: 'keyword', - }, - 'cassandra.response.result.prepared.resp_meta.col_count': { - category: 'cassandra', - description: - 'Representing the number of columns selected by the query that produced this result.', - name: 'cassandra.response.result.prepared.resp_meta.col_count', - type: 'long', - }, - 'cassandra.response.result.prepared.resp_meta.pkey_columns': { - category: 'cassandra', - description: 'Representing the PK columns index and counts.', - name: 'cassandra.response.result.prepared.resp_meta.pkey_columns', - type: 'long', - }, - 'cassandra.response.result.prepared.resp_meta.paging_state': { - category: 'cassandra', - description: - 'The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.', - name: 'cassandra.response.result.prepared.resp_meta.paging_state', - type: 'keyword', - }, - 'cassandra.response.supported': { - category: 'cassandra', - description: - 'Indicates which startup options are supported by the server. This message comes as a response to an OPTIONS message.', - name: 'cassandra.response.supported', - type: 'object', - }, - 'cassandra.response.authentication.class': { - category: 'cassandra', - description: 'Indicates the full class name of the IAuthenticator in use', - name: 'cassandra.response.authentication.class', - type: 'keyword', - }, - 'cassandra.response.warnings': { - category: 'cassandra', - description: 'The text of the warnings, only occur when Warning flag was set.', - name: 'cassandra.response.warnings', - type: 'keyword', - }, - 'cassandra.response.event.type': { - category: 'cassandra', - description: 'Representing the event type.', - name: 'cassandra.response.event.type', - type: 'keyword', - }, - 'cassandra.response.event.change': { - category: 'cassandra', - description: - 'The message corresponding respectively to the type of change followed by the address of the new/removed node.', - name: 'cassandra.response.event.change', - type: 'keyword', - }, - 'cassandra.response.event.host': { - category: 'cassandra', - description: 'Representing the node ip.', - name: 'cassandra.response.event.host', - type: 'keyword', - }, - 'cassandra.response.event.port': { - category: 'cassandra', - description: 'Representing the node port.', - name: 'cassandra.response.event.port', - type: 'long', - }, - 'cassandra.response.event.schema_change.change': { - category: 'cassandra', - description: 'Representing the type of changed involved.', - name: 'cassandra.response.event.schema_change.change', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.keyspace': { - category: 'cassandra', - description: 'This describes which keyspace has changed.', - name: 'cassandra.response.event.schema_change.keyspace', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.table': { - category: 'cassandra', - description: 'This describes which table has changed.', - name: 'cassandra.response.event.schema_change.table', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.object': { - category: 'cassandra', - description: - 'This describes the name of said affected object (either the table, user type, function, or aggregate name).', - name: 'cassandra.response.event.schema_change.object', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.target': { - category: 'cassandra', - description: 'Target could be "FUNCTION" or "AGGREGATE", multiple arguments.', - name: 'cassandra.response.event.schema_change.target', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.name': { - category: 'cassandra', - description: 'The function/aggregate name.', - name: 'cassandra.response.event.schema_change.name', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.args': { - category: 'cassandra', - description: 'One string for each argument type (as CQL type).', - name: 'cassandra.response.event.schema_change.args', - type: 'keyword', - }, - 'cassandra.response.error.code': { - category: 'cassandra', - description: 'The error code of the Cassandra response.', - name: 'cassandra.response.error.code', - type: 'long', - }, - 'cassandra.response.error.msg': { - category: 'cassandra', - description: 'The error message of the Cassandra response.', - name: 'cassandra.response.error.msg', - type: 'keyword', - }, - 'cassandra.response.error.type': { - category: 'cassandra', - description: 'The error type of the Cassandra response.', - name: 'cassandra.response.error.type', - type: 'keyword', - }, - 'cassandra.response.error.details.read_consistency': { - category: 'cassandra', - description: 'Representing the consistency level of the query that triggered the exception.', - name: 'cassandra.response.error.details.read_consistency', - type: 'keyword', - }, - 'cassandra.response.error.details.required': { - category: 'cassandra', - description: - 'Representing the number of nodes that should be alive to respect consistency level.', - name: 'cassandra.response.error.details.required', - type: 'long', - }, - 'cassandra.response.error.details.alive': { - category: 'cassandra', - description: - 'Representing the number of replicas that were known to be alive when the request had been processed (since an unavailable exception has been triggered).', - name: 'cassandra.response.error.details.alive', - type: 'long', - }, - 'cassandra.response.error.details.received': { - category: 'cassandra', - description: 'Representing the number of nodes having acknowledged the request.', - name: 'cassandra.response.error.details.received', - type: 'long', - }, - 'cassandra.response.error.details.blockfor': { - category: 'cassandra', - description: - 'Representing the number of replicas whose acknowledgement is required to achieve consistency level.', - name: 'cassandra.response.error.details.blockfor', - type: 'long', - }, - 'cassandra.response.error.details.write_type': { - category: 'cassandra', - description: 'Describe the type of the write that timed out.', - name: 'cassandra.response.error.details.write_type', - type: 'keyword', - }, - 'cassandra.response.error.details.data_present': { - category: 'cassandra', - description: 'It means the replica that was asked for data had responded.', - name: 'cassandra.response.error.details.data_present', - type: 'boolean', - }, - 'cassandra.response.error.details.keyspace': { - category: 'cassandra', - description: 'The keyspace of the failed function.', - name: 'cassandra.response.error.details.keyspace', - type: 'keyword', - }, - 'cassandra.response.error.details.table': { - category: 'cassandra', - description: 'The keyspace of the failed function.', - name: 'cassandra.response.error.details.table', - type: 'keyword', - }, - 'cassandra.response.error.details.stmt_id': { - category: 'cassandra', - description: 'Representing the unknown ID.', - name: 'cassandra.response.error.details.stmt_id', - type: 'keyword', - }, - 'cassandra.response.error.details.num_failures': { - category: 'cassandra', - description: - 'Representing the number of nodes that experience a failure while executing the request.', - name: 'cassandra.response.error.details.num_failures', - type: 'keyword', - }, - 'cassandra.response.error.details.function': { - category: 'cassandra', - description: 'The name of the failed function.', - name: 'cassandra.response.error.details.function', - type: 'keyword', - }, - 'cassandra.response.error.details.arg_types': { - category: 'cassandra', - description: 'One string for each argument type (as CQL type) of the failed function.', - name: 'cassandra.response.error.details.arg_types', - type: 'keyword', - }, - 'dhcpv4.transaction_id': { - category: 'dhcpv4', - description: - 'Transaction ID, a random number chosen by the client, used by the client and server to associate messages and responses between a client and a server. ', - name: 'dhcpv4.transaction_id', - type: 'keyword', - }, - 'dhcpv4.seconds': { - category: 'dhcpv4', - description: - 'Number of seconds elapsed since client began address acquisition or renewal process. ', - name: 'dhcpv4.seconds', - type: 'long', - }, - 'dhcpv4.flags': { - category: 'dhcpv4', - description: - 'Flags are set by the client to indicate how the DHCP server should its reply -- either unicast or broadcast. ', - name: 'dhcpv4.flags', - type: 'keyword', - }, - 'dhcpv4.client_ip': { - category: 'dhcpv4', - description: 'The current IP address of the client.', - name: 'dhcpv4.client_ip', - type: 'ip', - }, - 'dhcpv4.assigned_ip': { - category: 'dhcpv4', - description: - 'The IP address that the DHCP server is assigning to the client. This field is also known as "your" IP address. ', - name: 'dhcpv4.assigned_ip', - type: 'ip', - }, - 'dhcpv4.server_ip': { - category: 'dhcpv4', - description: - 'The IP address of the DHCP server that the client should use for the next step in the bootstrap process. ', - name: 'dhcpv4.server_ip', - type: 'ip', - }, - 'dhcpv4.relay_ip': { - category: 'dhcpv4', - description: - 'The relay IP address used by the client to contact the server (i.e. a DHCP relay server). ', - name: 'dhcpv4.relay_ip', - type: 'ip', - }, - 'dhcpv4.client_mac': { - category: 'dhcpv4', - description: "The client's MAC address (layer two).", - name: 'dhcpv4.client_mac', - type: 'keyword', - }, - 'dhcpv4.server_name': { - category: 'dhcpv4', - description: - 'The name of the server sending the message. Optional. Used in DHCPOFFER or DHCPACK messages. ', - name: 'dhcpv4.server_name', - type: 'keyword', - }, - 'dhcpv4.op_code': { - category: 'dhcpv4', - description: 'The message op code (bootrequest or bootreply). ', - example: 'bootreply', - name: 'dhcpv4.op_code', - type: 'keyword', - }, - 'dhcpv4.hops': { - category: 'dhcpv4', - description: 'The number of hops the DHCP message went through.', - name: 'dhcpv4.hops', - type: 'long', - }, - 'dhcpv4.hardware_type': { - category: 'dhcpv4', - description: 'The type of hardware used for the local network (Ethernet, LocalTalk, etc). ', - name: 'dhcpv4.hardware_type', - type: 'keyword', - }, - 'dhcpv4.option.message_type': { - category: 'dhcpv4', - description: - 'The specific type of DHCP message being sent (e.g. discover, offer, request, decline, ack, nak, release, inform). ', - example: 'ack', - name: 'dhcpv4.option.message_type', - type: 'keyword', - }, - 'dhcpv4.option.parameter_request_list': { - category: 'dhcpv4', - description: - 'This option is used by a DHCP client to request values for specified configuration parameters. ', - name: 'dhcpv4.option.parameter_request_list', - type: 'keyword', - }, - 'dhcpv4.option.requested_ip_address': { - category: 'dhcpv4', - description: - 'This option is used in a client request (DHCPDISCOVER) to allow the client to request that a particular IP address be assigned. ', - name: 'dhcpv4.option.requested_ip_address', - type: 'ip', - }, - 'dhcpv4.option.server_identifier': { - category: 'dhcpv4', - description: 'IP address of the individual DHCP server which handled this message. ', - name: 'dhcpv4.option.server_identifier', - type: 'ip', - }, - 'dhcpv4.option.broadcast_address': { - category: 'dhcpv4', - description: "This option specifies the broadcast address in use on the client's subnet. ", - name: 'dhcpv4.option.broadcast_address', - type: 'ip', - }, - 'dhcpv4.option.max_dhcp_message_size': { - category: 'dhcpv4', - description: - 'This option specifies the maximum length DHCP message that the client is willing to accept. ', - name: 'dhcpv4.option.max_dhcp_message_size', - type: 'long', - }, - 'dhcpv4.option.class_identifier': { - category: 'dhcpv4', - description: - "This option is used by DHCP clients to optionally identify the vendor type and configuration of a DHCP client. Vendors may choose to define specific vendor class identifiers to convey particular configuration or other identification information about a client. For example, the identifier may encode the client's hardware configuration. ", - name: 'dhcpv4.option.class_identifier', - type: 'keyword', - }, - 'dhcpv4.option.domain_name': { - category: 'dhcpv4', - description: - 'This option specifies the domain name that client should use when resolving hostnames via the Domain Name System. ', - name: 'dhcpv4.option.domain_name', - type: 'keyword', - }, - 'dhcpv4.option.dns_servers': { - category: 'dhcpv4', - description: - 'The domain name server option specifies a list of Domain Name System servers available to the client. ', - name: 'dhcpv4.option.dns_servers', - type: 'ip', - }, - 'dhcpv4.option.vendor_identifying_options': { - category: 'dhcpv4', - description: - 'A DHCP client may use this option to unambiguously identify the vendor that manufactured the hardware on which the client is running, the software in use, or an industry consortium to which the vendor belongs. This field is described in RFC 3925. ', - name: 'dhcpv4.option.vendor_identifying_options', - type: 'object', - }, - 'dhcpv4.option.subnet_mask': { - category: 'dhcpv4', - description: 'The subnet mask that the client should use on the currnet network. ', - name: 'dhcpv4.option.subnet_mask', - type: 'ip', - }, - 'dhcpv4.option.utc_time_offset_sec': { - category: 'dhcpv4', - description: - "The time offset field specifies the offset of the client's subnet in seconds from Coordinated Universal Time (UTC). ", - name: 'dhcpv4.option.utc_time_offset_sec', - type: 'long', - }, - 'dhcpv4.option.router': { - category: 'dhcpv4', - description: - "The router option specifies a list of IP addresses for routers on the client's subnet. ", - name: 'dhcpv4.option.router', - type: 'ip', - }, - 'dhcpv4.option.time_servers': { - category: 'dhcpv4', - description: - 'The time server option specifies a list of RFC 868 time servers available to the client. ', - name: 'dhcpv4.option.time_servers', - type: 'ip', - }, - 'dhcpv4.option.ntp_servers': { - category: 'dhcpv4', - description: - 'This option specifies a list of IP addresses indicating NTP servers available to the client. ', - name: 'dhcpv4.option.ntp_servers', - type: 'ip', - }, - 'dhcpv4.option.hostname': { - category: 'dhcpv4', - description: 'This option specifies the name of the client. ', - name: 'dhcpv4.option.hostname', - type: 'keyword', - }, - 'dhcpv4.option.ip_address_lease_time_sec': { - category: 'dhcpv4', - description: - 'This option is used in a client request (DHCPDISCOVER or DHCPREQUEST) to allow the client to request a lease time for the IP address. In a server reply (DHCPOFFER), a DHCP server uses this option to specify the lease time it is willing to offer. ', - name: 'dhcpv4.option.ip_address_lease_time_sec', - type: 'long', - }, - 'dhcpv4.option.message': { - category: 'dhcpv4', - description: - 'This option is used by a DHCP server to provide an error message to a DHCP client in a DHCPNAK message in the event of a failure. A client may use this option in a DHCPDECLINE message to indicate the why the client declined the offered parameters. ', - name: 'dhcpv4.option.message', - type: 'text', - }, - 'dhcpv4.option.renewal_time_sec': { - category: 'dhcpv4', - description: - 'This option specifies the time interval from address assignment until the client transitions to the RENEWING state. ', - name: 'dhcpv4.option.renewal_time_sec', - type: 'long', - }, - 'dhcpv4.option.rebinding_time_sec': { - category: 'dhcpv4', - description: - 'This option specifies the time interval from address assignment until the client transitions to the REBINDING state. ', - name: 'dhcpv4.option.rebinding_time_sec', - type: 'long', - }, - 'dhcpv4.option.boot_file_name': { - category: 'dhcpv4', - description: - "This option is used to identify a bootfile when the 'file' field in the DHCP header has been used for DHCP options. ", - name: 'dhcpv4.option.boot_file_name', - type: 'keyword', - }, - 'dns.flags.authoritative': { - category: 'dns', - description: - 'A DNS flag specifying that the responding server is an authority for the domain name used in the question. ', - name: 'dns.flags.authoritative', - type: 'boolean', - }, - 'dns.flags.recursion_available': { - category: 'dns', - description: - 'A DNS flag specifying whether recursive query support is available in the name server. ', - name: 'dns.flags.recursion_available', - type: 'boolean', - }, - 'dns.flags.recursion_desired': { - category: 'dns', - description: - 'A DNS flag specifying that the client directs the server to pursue a query recursively. Recursive query support is optional. ', - name: 'dns.flags.recursion_desired', - type: 'boolean', - }, - 'dns.flags.authentic_data': { - category: 'dns', - description: - 'A DNS flag specifying that the recursive server considers the response authentic. ', - name: 'dns.flags.authentic_data', - type: 'boolean', - }, - 'dns.flags.checking_disabled': { - category: 'dns', - description: - 'A DNS flag specifying that the client disables the server signature validation of the query. ', - name: 'dns.flags.checking_disabled', - type: 'boolean', - }, - 'dns.flags.truncated_response': { - category: 'dns', - description: 'A DNS flag specifying that only the first 512 bytes of the reply were returned. ', - name: 'dns.flags.truncated_response', - type: 'boolean', - }, - 'dns.question.etld_plus_one': { - category: 'dns', - description: - 'The effective top-level domain (eTLD) plus one more label. For example, the eTLD+1 for "foo.bar.golang.org." is "golang.org.". The data for determining the eTLD comes from an embedded copy of the data from http://publicsuffix.org.', - example: 'amazon.co.uk.', - name: 'dns.question.etld_plus_one', - }, - 'dns.answers_count': { - category: 'dns', - description: 'The number of resource records contained in the `dns.answers` field. ', - name: 'dns.answers_count', - type: 'long', - }, - 'dns.authorities': { - category: 'dns', - description: 'An array containing a dictionary for each authority section from the answer. ', - name: 'dns.authorities', - type: 'object', - }, - 'dns.authorities_count': { - category: 'dns', - description: - 'The number of resource records contained in the `dns.authorities` field. The `dns.authorities` field may or may not be included depending on the configuration of Packetbeat. ', - name: 'dns.authorities_count', - type: 'long', - }, - 'dns.authorities.name': { - category: 'dns', - description: 'The domain name to which this resource record pertains.', - example: 'example.com.', - name: 'dns.authorities.name', - }, - 'dns.authorities.type': { - category: 'dns', - description: 'The type of data contained in this resource record.', - example: 'NS', - name: 'dns.authorities.type', - }, - 'dns.authorities.class': { - category: 'dns', - description: 'The class of DNS data contained in this resource record.', - example: 'IN', - name: 'dns.authorities.class', - }, - 'dns.additionals': { - category: 'dns', - description: 'An array containing a dictionary for each additional section from the answer. ', - name: 'dns.additionals', - type: 'object', - }, - 'dns.additionals_count': { - category: 'dns', - description: - 'The number of resource records contained in the `dns.additionals` field. The `dns.additionals` field may or may not be included depending on the configuration of Packetbeat. ', - name: 'dns.additionals_count', - type: 'long', - }, - 'dns.additionals.name': { - category: 'dns', - description: 'The domain name to which this resource record pertains.', - example: 'example.com.', - name: 'dns.additionals.name', - }, - 'dns.additionals.type': { - category: 'dns', - description: 'The type of data contained in this resource record.', - example: 'NS', - name: 'dns.additionals.type', - }, - 'dns.additionals.class': { - category: 'dns', - description: 'The class of DNS data contained in this resource record.', - example: 'IN', - name: 'dns.additionals.class', - }, - 'dns.additionals.ttl': { - category: 'dns', - description: - 'The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached. ', - name: 'dns.additionals.ttl', - type: 'long', - }, - 'dns.additionals.data': { - category: 'dns', - description: - 'The data describing the resource. The meaning of this data depends on the type and class of the resource record. ', - name: 'dns.additionals.data', - }, - 'dns.opt.version': { - category: 'dns', - description: 'The EDNS version.', - example: '0', - name: 'dns.opt.version', - }, - 'dns.opt.do': { - category: 'dns', - description: 'If set, the transaction uses DNSSEC.', - name: 'dns.opt.do', - type: 'boolean', - }, - 'dns.opt.ext_rcode': { - category: 'dns', - description: 'Extended response code field.', - example: 'BADVERS', - name: 'dns.opt.ext_rcode', - }, - 'dns.opt.udp_size': { - category: 'dns', - description: "Requestor's UDP payload size (in bytes).", - name: 'dns.opt.udp_size', - type: 'long', - }, - 'http.request.headers': { - category: 'http', - description: - 'A map containing the captured header fields from the request. Which headers to capture is configurable. If headers with the same header name are present in the message, they will be separated by commas. ', - name: 'http.request.headers', - type: 'object', - }, - 'http.request.params': { - category: 'http', - name: 'http.request.params', - type: 'alias', - }, - 'http.response.status_phrase': { - category: 'http', - description: 'The HTTP status phrase.', - example: 'Not Found', - name: 'http.response.status_phrase', - }, - 'http.response.headers': { - category: 'http', - description: - 'A map containing the captured header fields from the response. Which headers to capture is configurable. If headers with the same header name are present in the message, they will be separated by commas. ', - name: 'http.response.headers', - type: 'object', - }, - 'http.response.code': { - category: 'http', - name: 'http.response.code', - type: 'alias', - }, - 'http.response.phrase': { - category: 'http', - name: 'http.response.phrase', - type: 'alias', - }, - 'icmp.version': { - category: 'icmp', - description: 'The version of the ICMP protocol.', - name: 'icmp.version', - }, - 'icmp.request.message': { - category: 'icmp', - description: 'A human readable form of the request.', - name: 'icmp.request.message', - type: 'keyword', - }, - 'icmp.request.type': { - category: 'icmp', - description: 'The request type.', - name: 'icmp.request.type', - type: 'long', - }, - 'icmp.request.code': { - category: 'icmp', - description: 'The request code.', - name: 'icmp.request.code', - type: 'long', - }, - 'icmp.response.message': { - category: 'icmp', - description: 'A human readable form of the response.', - name: 'icmp.response.message', - type: 'keyword', - }, - 'icmp.response.type': { - category: 'icmp', - description: 'The response type.', - name: 'icmp.response.type', - type: 'long', - }, - 'icmp.response.code': { - category: 'icmp', - description: 'The response code.', - name: 'icmp.response.code', - type: 'long', - }, - 'memcache.protocol_type': { - category: 'memcache', - description: - 'The memcache protocol implementation. The value can be "binary" for binary-based, "text" for text-based, or "unknown" for an unknown memcache protocol type. ', - name: 'memcache.protocol_type', - type: 'keyword', - }, - 'memcache.request.line': { - category: 'memcache', - description: 'The raw command line for unknown commands ONLY. ', - name: 'memcache.request.line', - type: 'keyword', - }, - 'memcache.request.command': { - category: 'memcache', - description: - 'The memcache command being requested in the memcache text protocol. For example "set" or "get". The binary protocol opcodes are translated into memcache text protocol commands. ', - name: 'memcache.request.command', - type: 'keyword', - }, - 'memcache.response.command': { - category: 'memcache', - description: - 'Either the text based protocol response message type or the name of the originating request if binary protocol is used. ', - name: 'memcache.response.command', - type: 'keyword', - }, - 'memcache.request.type': { - category: 'memcache', - description: - 'The memcache command classification. This value can be "UNKNOWN", "Load", "Store", "Delete", "Counter", "Info", "SlabCtrl", "LRUCrawler", "Stats", "Success", "Fail", or "Auth". ', - name: 'memcache.request.type', - type: 'keyword', - }, - 'memcache.response.type': { - category: 'memcache', - description: - 'The memcache command classification. This value can be "UNKNOWN", "Load", "Store", "Delete", "Counter", "Info", "SlabCtrl", "LRUCrawler", "Stats", "Success", "Fail", or "Auth". The text based protocol will employ any of these, whereas the binary based protocol will mirror the request commands only (see `memcache.response.status` for binary protocol). ', - name: 'memcache.response.type', - type: 'keyword', - }, - 'memcache.response.error_msg': { - category: 'memcache', - description: 'The optional error message in the memcache response (text based protocol only). ', - name: 'memcache.response.error_msg', - type: 'keyword', - }, - 'memcache.request.opcode': { - category: 'memcache', - description: 'The binary protocol message opcode name. ', - name: 'memcache.request.opcode', - type: 'keyword', - }, - 'memcache.response.opcode': { - category: 'memcache', - description: 'The binary protocol message opcode name. ', - name: 'memcache.response.opcode', - type: 'keyword', - }, - 'memcache.request.opcode_value': { - category: 'memcache', - description: 'The binary protocol message opcode value. ', - name: 'memcache.request.opcode_value', - type: 'long', - }, - 'memcache.response.opcode_value': { - category: 'memcache', - description: 'The binary protocol message opcode value. ', - name: 'memcache.response.opcode_value', - type: 'long', - }, - 'memcache.request.opaque': { - category: 'memcache', - description: - 'The binary protocol opaque header value used for correlating request with response messages. ', - name: 'memcache.request.opaque', - type: 'long', - }, - 'memcache.response.opaque': { - category: 'memcache', - description: - 'The binary protocol opaque header value used for correlating request with response messages. ', - name: 'memcache.response.opaque', - type: 'long', - }, - 'memcache.request.vbucket': { - category: 'memcache', - description: 'The vbucket index sent in the binary message. ', - name: 'memcache.request.vbucket', - type: 'long', - }, - 'memcache.response.status': { - category: 'memcache', - description: 'The textual representation of the response error code (binary protocol only). ', - name: 'memcache.response.status', - type: 'keyword', - }, - 'memcache.response.status_code': { - category: 'memcache', - description: 'The status code value returned in the response (binary protocol only). ', - name: 'memcache.response.status_code', - type: 'long', - }, - 'memcache.request.keys': { - category: 'memcache', - description: 'The list of keys sent in the store or load commands. ', - name: 'memcache.request.keys', - type: 'array', - }, - 'memcache.response.keys': { - category: 'memcache', - description: 'The list of keys returned for the load command (if present). ', - name: 'memcache.response.keys', - type: 'array', - }, - 'memcache.request.count_values': { - category: 'memcache', - description: - 'The number of values found in the memcache request message. If the command does not send any data, this field is missing. ', - name: 'memcache.request.count_values', - type: 'long', - }, - 'memcache.response.count_values': { - category: 'memcache', - description: - 'The number of values found in the memcache response message. If the command does not send any data, this field is missing. ', - name: 'memcache.response.count_values', - type: 'long', - }, - 'memcache.request.values': { - category: 'memcache', - description: 'The list of base64 encoded values sent with the request (if present). ', - name: 'memcache.request.values', - type: 'array', - }, - 'memcache.response.values': { - category: 'memcache', - description: 'The list of base64 encoded values sent with the response (if present). ', - name: 'memcache.response.values', - type: 'array', - }, - 'memcache.request.bytes': { - category: 'memcache', - description: 'The byte count of the values being transferred. ', - name: 'memcache.request.bytes', - type: 'long', - format: 'bytes', - }, - 'memcache.response.bytes': { - category: 'memcache', - description: 'The byte count of the values being transferred. ', - name: 'memcache.response.bytes', - type: 'long', - format: 'bytes', - }, - 'memcache.request.delta': { - category: 'memcache', - description: 'The counter increment/decrement delta value. ', - name: 'memcache.request.delta', - type: 'long', - }, - 'memcache.request.initial': { - category: 'memcache', - description: 'The counter increment/decrement initial value parameter (binary protocol only). ', - name: 'memcache.request.initial', - type: 'long', - }, - 'memcache.request.verbosity': { - category: 'memcache', - description: 'The value of the memcache "verbosity" command. ', - name: 'memcache.request.verbosity', - type: 'long', - }, - 'memcache.request.raw_args': { - category: 'memcache', - description: - 'The text protocol raw arguments for the "stats ..." and "lru crawl ..." commands. ', - name: 'memcache.request.raw_args', - type: 'keyword', - }, - 'memcache.request.source_class': { - category: 'memcache', - description: "The source class id in 'slab reassign' command. ", - name: 'memcache.request.source_class', - type: 'long', - }, - 'memcache.request.dest_class': { - category: 'memcache', - description: "The destination class id in 'slab reassign' command. ", - name: 'memcache.request.dest_class', - type: 'long', - }, - 'memcache.request.automove': { - category: 'memcache', - description: - 'The automove mode in the \'slab automove\' command expressed as a string. This value can be "standby"(=0), "slow"(=1), "aggressive"(=2), or the raw value if the value is unknown. ', - name: 'memcache.request.automove', - type: 'keyword', - }, - 'memcache.request.flags': { - category: 'memcache', - description: 'The memcache command flags sent in the request (if present). ', - name: 'memcache.request.flags', - type: 'long', - }, - 'memcache.response.flags': { - category: 'memcache', - description: 'The memcache message flags sent in the response (if present). ', - name: 'memcache.response.flags', - type: 'long', - }, - 'memcache.request.exptime': { - category: 'memcache', - description: - 'The data expiry time in seconds sent with the memcache command (if present). If the value is <30 days, the expiry time is relative to "now", or else it is an absolute Unix time in seconds (32-bit). ', - name: 'memcache.request.exptime', - type: 'long', - }, - 'memcache.request.sleep_us': { - category: 'memcache', - description: "The sleep setting in microseconds for the 'lru_crawler sleep' command. ", - name: 'memcache.request.sleep_us', - type: 'long', - }, - 'memcache.response.value': { - category: 'memcache', - description: 'The counter value returned by a counter operation. ', - name: 'memcache.response.value', - type: 'long', - }, - 'memcache.request.noreply': { - category: 'memcache', - description: - 'Set to true if noreply was set in the request. The `memcache.response` field will be missing. ', - name: 'memcache.request.noreply', - type: 'boolean', - }, - 'memcache.request.quiet': { - category: 'memcache', - description: 'Set to true if the binary protocol message is to be treated as a quiet message. ', - name: 'memcache.request.quiet', - type: 'boolean', - }, - 'memcache.request.cas_unique': { - category: 'memcache', - description: 'The CAS (compare-and-swap) identifier if present. ', - name: 'memcache.request.cas_unique', - type: 'long', - }, - 'memcache.response.cas_unique': { - category: 'memcache', - description: - 'The CAS (compare-and-swap) identifier to be used with CAS-based updates (if present). ', - name: 'memcache.response.cas_unique', - type: 'long', - }, - 'memcache.response.stats': { - category: 'memcache', - description: - 'The list of statistic values returned. Each entry is a dictionary with the fields "name" and "value". ', - name: 'memcache.response.stats', - type: 'array', - }, - 'memcache.response.version': { - category: 'memcache', - description: 'The returned memcache version string. ', - name: 'memcache.response.version', - type: 'keyword', - }, - 'mongodb.error': { - category: 'mongodb', - description: - 'If the MongoDB request has resulted in an error, this field contains the error message returned by the server. ', - name: 'mongodb.error', - }, - 'mongodb.fullCollectionName': { - category: 'mongodb', - description: - 'The full collection name. The full collection name is the concatenation of the database name with the collection name, using a dot (.) for the concatenation. For example, for the database foo and the collection bar, the full collection name is foo.bar. ', - name: 'mongodb.fullCollectionName', - }, - 'mongodb.numberToSkip': { - category: 'mongodb', - description: - 'Sets the number of documents to omit - starting from the first document in the resulting dataset - when returning the result of the query. ', - name: 'mongodb.numberToSkip', - type: 'long', - }, - 'mongodb.numberToReturn': { - category: 'mongodb', - description: 'The requested maximum number of documents to be returned. ', - name: 'mongodb.numberToReturn', - type: 'long', - }, - 'mongodb.numberReturned': { - category: 'mongodb', - description: 'The number of documents in the reply. ', - name: 'mongodb.numberReturned', - type: 'long', - }, - 'mongodb.startingFrom': { - category: 'mongodb', - description: 'Where in the cursor this reply is starting. ', - name: 'mongodb.startingFrom', - }, - 'mongodb.query': { - category: 'mongodb', - description: - 'A JSON document that represents the query. The query will contain one or more elements, all of which must match for a document to be included in the result set. Possible elements include $query, $orderby, $hint, $explain, and $snapshot. ', - name: 'mongodb.query', - }, - 'mongodb.returnFieldsSelector': { - category: 'mongodb', - description: - 'A JSON document that limits the fields in the returned documents. The returnFieldsSelector contains one or more elements, each of which is the name of a field that should be returned, and the integer value 1. ', - name: 'mongodb.returnFieldsSelector', - }, - 'mongodb.selector': { - category: 'mongodb', - description: - 'A BSON document that specifies the query for selecting the document to update or delete. ', - name: 'mongodb.selector', - }, - 'mongodb.update': { - category: 'mongodb', - description: - 'A BSON document that specifies the update to be performed. For information on specifying updates, see the Update Operations documentation from the MongoDB Manual. ', - name: 'mongodb.update', - }, - 'mongodb.cursorId': { - category: 'mongodb', - description: - 'The cursor identifier returned in the OP_REPLY. This must be the value that was returned from the database. ', - name: 'mongodb.cursorId', - }, - 'mysql.affected_rows': { - category: 'mysql', - description: - 'If the MySQL command is successful, this field contains the affected number of rows of the last statement. ', - name: 'mysql.affected_rows', - type: 'long', - }, - 'mysql.insert_id': { - category: 'mysql', - description: - 'If the INSERT query is successful, this field contains the id of the newly inserted row. ', - name: 'mysql.insert_id', - }, - 'mysql.num_fields': { - category: 'mysql', - description: - 'If the SELECT query is successful, this field is set to the number of fields returned. ', - name: 'mysql.num_fields', - }, - 'mysql.num_rows': { - category: 'mysql', - description: - 'If the SELECT query is successful, this field is set to the number of rows returned. ', - name: 'mysql.num_rows', - }, - 'mysql.query': { - category: 'mysql', - description: "The row mysql query as read from the transaction's request. ", - name: 'mysql.query', - }, - 'mysql.error_code': { - category: 'mysql', - description: 'The error code returned by MySQL. ', - name: 'mysql.error_code', - type: 'long', - }, - 'mysql.error_message': { - category: 'mysql', - description: 'The error info message returned by MySQL. ', - name: 'mysql.error_message', - }, - 'nfs.version': { - category: 'nfs', - description: 'NFS protocol version number.', - name: 'nfs.version', - type: 'long', - }, - 'nfs.minor_version': { - category: 'nfs', - description: 'NFS protocol minor version number.', - name: 'nfs.minor_version', - type: 'long', - }, - 'nfs.tag': { - category: 'nfs', - description: 'NFS v4 COMPOUND operation tag.', - name: 'nfs.tag', - }, - 'nfs.opcode': { - category: 'nfs', - description: 'NFS operation name, or main operation name, in case of COMPOUND calls. ', - name: 'nfs.opcode', - }, - 'nfs.status': { - category: 'nfs', - description: 'NFS operation reply status.', - name: 'nfs.status', - }, - 'rpc.xid': { - category: 'rpc', - description: 'RPC message transaction identifier.', - name: 'rpc.xid', - }, - 'rpc.status': { - category: 'rpc', - description: 'RPC message reply status.', - name: 'rpc.status', - }, - 'rpc.auth_flavor': { - category: 'rpc', - description: 'RPC authentication flavor.', - name: 'rpc.auth_flavor', - }, - 'rpc.cred.uid': { - category: 'rpc', - description: "RPC caller's user id, in case of auth-unix.", - name: 'rpc.cred.uid', - type: 'long', - }, - 'rpc.cred.gid': { - category: 'rpc', - description: "RPC caller's group id, in case of auth-unix.", - name: 'rpc.cred.gid', - type: 'long', - }, - 'rpc.cred.gids': { - category: 'rpc', - description: "RPC caller's secondary group ids, in case of auth-unix.", - name: 'rpc.cred.gids', - }, - 'rpc.cred.stamp': { - category: 'rpc', - description: 'Arbitrary ID which the caller machine may generate.', - name: 'rpc.cred.stamp', - type: 'long', - }, - 'rpc.cred.machinename': { - category: 'rpc', - description: "The name of the caller's machine.", - name: 'rpc.cred.machinename', - }, - 'rpc.call_size': { - category: 'rpc', - description: 'RPC call size with argument.', - name: 'rpc.call_size', - type: 'alias', - }, - 'rpc.reply_size': { - category: 'rpc', - description: 'RPC reply size with argument.', - name: 'rpc.reply_size', - type: 'alias', - }, - 'pgsql.error_code': { - category: 'pgsql', - description: 'The PostgreSQL error code.', - name: 'pgsql.error_code', - type: 'long', - }, - 'pgsql.error_message': { - category: 'pgsql', - description: 'The PostgreSQL error message.', - name: 'pgsql.error_message', - }, - 'pgsql.error_severity': { - category: 'pgsql', - description: 'The PostgreSQL error severity.', - name: 'pgsql.error_severity', - }, - 'pgsql.num_fields': { - category: 'pgsql', - description: - 'If the SELECT query if successful, this field is set to the number of fields returned. ', - name: 'pgsql.num_fields', - }, - 'pgsql.num_rows': { - category: 'pgsql', - description: - 'If the SELECT query if successful, this field is set to the number of rows returned. ', - name: 'pgsql.num_rows', - }, - 'redis.return_value': { - category: 'redis', - description: 'The return value of the Redis command in a human readable format. ', - name: 'redis.return_value', - }, - 'redis.error': { - category: 'redis', - description: - 'If the Redis command has resulted in an error, this field contains the error message returned by the Redis server. ', - name: 'redis.error', - }, - 'sip.code': { - category: 'sip', - description: 'Response status code.', - name: 'sip.code', - type: 'keyword', - }, - 'sip.method': { - category: 'sip', - description: 'Request method.', - name: 'sip.method', - type: 'keyword', - }, - 'sip.status': { - category: 'sip', - description: 'Response status phrase.', - name: 'sip.status', - type: 'keyword', - }, - 'sip.type': { - category: 'sip', - description: 'Either request or response.', - name: 'sip.type', - type: 'keyword', - }, - 'sip.version': { - category: 'sip', - description: 'SIP protocol version.', - name: 'sip.version', - type: 'keyword', - }, - 'sip.uri.original': { - category: 'sip', - description: 'The original URI.', - name: 'sip.uri.original', - type: 'keyword', - }, - 'sip.uri.scheme': { - category: 'sip', - description: 'The URI scheme.', - name: 'sip.uri.scheme', - type: 'keyword', - }, - 'sip.uri.username': { - category: 'sip', - description: 'The URI user name.', - name: 'sip.uri.username', - type: 'keyword', - }, - 'sip.uri.host': { - category: 'sip', - description: 'The URI host.', - name: 'sip.uri.host', - type: 'keyword', - }, - 'sip.uri.port': { - category: 'sip', - description: 'The URI port.', - name: 'sip.uri.port', - type: 'keyword', - }, - 'sip.accept': { - category: 'sip', - description: 'Accept header value.', - name: 'sip.accept', - type: 'keyword', - }, - 'sip.allow': { - category: 'sip', - description: 'Allowed methods.', - name: 'sip.allow', - type: 'keyword', - }, - 'sip.call_id': { - category: 'sip', - description: 'Call ID.', - name: 'sip.call_id', - type: 'keyword', - }, - 'sip.content_length': { - category: 'sip', - name: 'sip.content_length', - type: 'long', - }, - 'sip.content_type': { - category: 'sip', - name: 'sip.content_type', - type: 'keyword', - }, - 'sip.max_forwards': { - category: 'sip', - name: 'sip.max_forwards', - type: 'long', - }, - 'sip.supported': { - category: 'sip', - description: 'Supported methods.', - name: 'sip.supported', - type: 'keyword', - }, - 'sip.user_agent.original': { - category: 'sip', - name: 'sip.user_agent.original', - type: 'keyword', - }, - 'sip.private.uri.original': { - category: 'sip', - description: 'Private original URI.', - name: 'sip.private.uri.original', - type: 'keyword', - }, - 'sip.private.uri.scheme': { - category: 'sip', - description: 'Private URI scheme.', - name: 'sip.private.uri.scheme', - type: 'keyword', - }, - 'sip.private.uri.username': { - category: 'sip', - description: 'Private URI user name.', - name: 'sip.private.uri.username', - type: 'keyword', - }, - 'sip.private.uri.host': { - category: 'sip', - description: 'Private URI host.', - name: 'sip.private.uri.host', - type: 'keyword', - }, - 'sip.private.uri.port': { - category: 'sip', - description: 'Private URI port.', - name: 'sip.private.uri.port', - type: 'keyword', - }, - 'sip.cseq.code': { - category: 'sip', - description: 'Sequence code.', - name: 'sip.cseq.code', - type: 'keyword', - }, - 'sip.cseq.method': { - category: 'sip', - description: 'Sequence method.', - name: 'sip.cseq.method', - type: 'keyword', - }, - 'sip.via.original': { - category: 'sip', - description: 'The original Via value.', - name: 'sip.via.original', - type: 'keyword', - }, - 'sip.to.display_info': { - category: 'sip', - description: 'To display info', - name: 'sip.to.display_info', - type: 'keyword', - }, - 'sip.to.uri.original': { - category: 'sip', - description: 'To original URI', - name: 'sip.to.uri.original', - type: 'keyword', - }, - 'sip.to.uri.scheme': { - category: 'sip', - description: 'To URI scheme', - name: 'sip.to.uri.scheme', - type: 'keyword', - }, - 'sip.to.uri.username': { - category: 'sip', - description: 'To URI user name', - name: 'sip.to.uri.username', - type: 'keyword', - }, - 'sip.to.uri.host': { - category: 'sip', - description: 'To URI host', - name: 'sip.to.uri.host', - type: 'keyword', - }, - 'sip.to.uri.port': { - category: 'sip', - description: 'To URI port', - name: 'sip.to.uri.port', - type: 'keyword', - }, - 'sip.to.tag': { - category: 'sip', - description: 'To tag', - name: 'sip.to.tag', - type: 'keyword', - }, - 'sip.from.display_info': { - category: 'sip', - description: 'From display info', - name: 'sip.from.display_info', - type: 'keyword', - }, - 'sip.from.uri.original': { - category: 'sip', - description: 'From original URI', - name: 'sip.from.uri.original', - type: 'keyword', - }, - 'sip.from.uri.scheme': { - category: 'sip', - description: 'From URI scheme', - name: 'sip.from.uri.scheme', - type: 'keyword', - }, - 'sip.from.uri.username': { - category: 'sip', - description: 'From URI user name', - name: 'sip.from.uri.username', - type: 'keyword', - }, - 'sip.from.uri.host': { - category: 'sip', - description: 'From URI host', - name: 'sip.from.uri.host', - type: 'keyword', - }, - 'sip.from.uri.port': { - category: 'sip', - description: 'From URI port', - name: 'sip.from.uri.port', - type: 'keyword', - }, - 'sip.from.tag': { - category: 'sip', - description: 'From tag', - name: 'sip.from.tag', - type: 'keyword', - }, - 'sip.contact.display_info': { - category: 'sip', - description: 'Contact display info', - name: 'sip.contact.display_info', - type: 'keyword', - }, - 'sip.contact.uri.original': { - category: 'sip', - description: 'Contact original URI', - name: 'sip.contact.uri.original', - type: 'keyword', - }, - 'sip.contact.uri.scheme': { - category: 'sip', - description: 'Contat URI scheme', - name: 'sip.contact.uri.scheme', - type: 'keyword', - }, - 'sip.contact.uri.username': { - category: 'sip', - description: 'Contact URI user name', - name: 'sip.contact.uri.username', - type: 'keyword', - }, - 'sip.contact.uri.host': { - category: 'sip', - description: 'Contact URI host', - name: 'sip.contact.uri.host', - type: 'keyword', - }, - 'sip.contact.uri.port': { - category: 'sip', - description: 'Contact URI port', - name: 'sip.contact.uri.port', - type: 'keyword', - }, - 'sip.contact.transport': { - category: 'sip', - description: 'Contact transport', - name: 'sip.contact.transport', - type: 'keyword', - }, - 'sip.contact.line': { - category: 'sip', - description: 'Contact line', - name: 'sip.contact.line', - type: 'keyword', - }, - 'sip.contact.expires': { - category: 'sip', - description: 'Contact expires', - name: 'sip.contact.expires', - type: 'keyword', - }, - 'sip.contact.q': { - category: 'sip', - description: 'Contact Q', - name: 'sip.contact.q', - type: 'keyword', - }, - 'sip.auth.scheme': { - category: 'sip', - description: 'Auth scheme', - name: 'sip.auth.scheme', - type: 'keyword', - }, - 'sip.auth.realm': { - category: 'sip', - description: 'Auth realm', - name: 'sip.auth.realm', - type: 'keyword', - }, - 'sip.auth.uri.original': { - category: 'sip', - description: 'Auth original URI', - name: 'sip.auth.uri.original', - type: 'keyword', - }, - 'sip.auth.uri.scheme': { - category: 'sip', - description: 'Auth URI scheme', - name: 'sip.auth.uri.scheme', - type: 'keyword', - }, - 'sip.auth.uri.host': { - category: 'sip', - description: 'Auth URI host', - name: 'sip.auth.uri.host', - type: 'keyword', - }, - 'sip.auth.uri.port': { - category: 'sip', - description: 'Auth URI port', - name: 'sip.auth.uri.port', - type: 'keyword', - }, - 'sip.sdp.version': { - category: 'sip', - description: 'SDP version', - name: 'sip.sdp.version', - type: 'keyword', - }, - 'sip.sdp.owner.username': { - category: 'sip', - description: 'SDP owner user name', - name: 'sip.sdp.owner.username', - type: 'keyword', - }, - 'sip.sdp.owner.session_id': { - category: 'sip', - description: 'SDP owner session ID', - name: 'sip.sdp.owner.session_id', - type: 'keyword', - }, - 'sip.sdp.owner.version': { - category: 'sip', - description: 'SDP owner version', - name: 'sip.sdp.owner.version', - type: 'keyword', - }, - 'sip.sdp.owner.ip': { - category: 'sip', - description: 'SDP owner IP', - name: 'sip.sdp.owner.ip', - type: 'ip', - }, - 'sip.sdp.session.name': { - category: 'sip', - description: 'SDP session name', - name: 'sip.sdp.session.name', - type: 'keyword', - }, - 'sip.sdp.connection.info': { - category: 'sip', - description: 'SDP connection info', - name: 'sip.sdp.connection.info', - type: 'keyword', - }, - 'sip.sdp.connection.address': { - category: 'sip', - description: 'SDP connection address', - name: 'sip.sdp.connection.address', - type: 'keyword', - }, - 'sip.sdp.body.original': { - category: 'sip', - description: 'SDP original body', - name: 'sip.sdp.body.original', - type: 'keyword', - }, - 'thrift.params': { - category: 'thrift', - description: - 'The RPC method call parameters in a human readable format. If the IDL files are available, the parameters use names whenever possible. Otherwise, the IDs from the message are used. ', - name: 'thrift.params', - }, - 'thrift.service': { - category: 'thrift', - description: 'The name of the Thrift-RPC service as defined in the IDL files. ', - name: 'thrift.service', - }, - 'thrift.return_value': { - category: 'thrift', - description: - 'The value returned by the Thrift-RPC call. This is encoded in a human readable format. ', - name: 'thrift.return_value', - }, - 'thrift.exceptions': { - category: 'thrift', - description: - 'If the call resulted in exceptions, this field contains the exceptions in a human readable format. ', - name: 'thrift.exceptions', - }, - 'tls.client.x509.version': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.client.x509.version', - type: 'keyword', - }, - 'tls.client.x509.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.client.x509.issuer.province', - type: 'keyword', - }, - 'tls.client.x509.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.client.x509.subject.province', - type: 'keyword', - }, - 'tls.server.x509.version': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.server.x509.version', - type: 'keyword', - }, - 'tls.server.x509.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.server.x509.issuer.province', - type: 'keyword', - }, - 'tls.server.x509.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.server.x509.subject.province', - type: 'keyword', - }, - 'tls.detailed.version': { - category: 'tls', - description: 'The version of the TLS protocol used. ', - example: 'TLS 1.3', - name: 'tls.detailed.version', - type: 'keyword', - }, - 'tls.detailed.resumption_method': { - category: 'tls', - description: - 'If the session has been resumed, the underlying method used. One of "id" for TLS session ID or "ticket" for TLS ticket extension. ', - name: 'tls.detailed.resumption_method', - type: 'keyword', - }, - 'tls.detailed.client_certificate_requested': { - category: 'tls', - description: - 'Whether the server has requested the client to authenticate itself using a client certificate. ', - name: 'tls.detailed.client_certificate_requested', - type: 'boolean', - }, - 'tls.detailed.client_hello.version': { - category: 'tls', - description: - 'The version of the TLS protocol by which the client wishes to communicate during this session. ', - name: 'tls.detailed.client_hello.version', - type: 'keyword', - }, - 'tls.detailed.client_hello.session_id': { - category: 'tls', - description: - 'Unique number to identify the session for the corresponding connection with the client. ', - name: 'tls.detailed.client_hello.session_id', - type: 'keyword', - }, - 'tls.detailed.client_hello.supported_compression_methods': { - category: 'tls', - description: - 'The list of compression methods the client supports. See https://www.iana.org/assignments/comp-meth-ids/comp-meth-ids.xhtml ', - name: 'tls.detailed.client_hello.supported_compression_methods', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.server_name_indication': { - category: 'tls', - description: 'List of hostnames', - name: 'tls.detailed.client_hello.extensions.server_name_indication', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.application_layer_protocol_negotiation': { - category: 'tls', - description: 'List of application-layer protocols the client is willing to use. ', - name: 'tls.detailed.client_hello.extensions.application_layer_protocol_negotiation', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.session_ticket': { - category: 'tls', - description: - 'Length of the session ticket, if provided, or an empty string to advertise support for tickets. ', - name: 'tls.detailed.client_hello.extensions.session_ticket', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.supported_versions': { - category: 'tls', - description: 'List of TLS versions that the client is willing to use. ', - name: 'tls.detailed.client_hello.extensions.supported_versions', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.supported_groups': { - category: 'tls', - description: 'List of Elliptic Curve Cryptography (ECC) curve groups supported by the client. ', - name: 'tls.detailed.client_hello.extensions.supported_groups', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.signature_algorithms': { - category: 'tls', - description: 'List of signature algorithms that may be use in digital signatures. ', - name: 'tls.detailed.client_hello.extensions.signature_algorithms', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.ec_points_formats': { - category: 'tls', - description: - 'List of Elliptic Curve (EC) point formats. Indicates the set of point formats that the client can parse. ', - name: 'tls.detailed.client_hello.extensions.ec_points_formats', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions._unparsed_': { - category: 'tls', - description: 'List of extensions that were left unparsed by Packetbeat. ', - name: 'tls.detailed.client_hello.extensions._unparsed_', - type: 'keyword', - }, - 'tls.detailed.server_hello.version': { - category: 'tls', - description: - 'The version of the TLS protocol that is used for this session. It is the highest version supported by the server not exceeding the version requested in the client hello. ', - name: 'tls.detailed.server_hello.version', - type: 'keyword', - }, - 'tls.detailed.server_hello.selected_compression_method': { - category: 'tls', - description: - 'The compression method selected by the server from the list provided in the client hello. ', - name: 'tls.detailed.server_hello.selected_compression_method', - type: 'keyword', - }, - 'tls.detailed.server_hello.session_id': { - category: 'tls', - description: - 'Unique number to identify the session for the corresponding connection with the client. ', - name: 'tls.detailed.server_hello.session_id', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions.application_layer_protocol_negotiation': { - category: 'tls', - description: 'Negotiated application layer protocol', - name: 'tls.detailed.server_hello.extensions.application_layer_protocol_negotiation', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions.session_ticket': { - category: 'tls', - description: - 'Used to announce that a session ticket will be provided by the server. Always an empty string. ', - name: 'tls.detailed.server_hello.extensions.session_ticket', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions.supported_versions': { - category: 'tls', - description: 'Negotiated TLS version to be used. ', - name: 'tls.detailed.server_hello.extensions.supported_versions', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions.ec_points_formats': { - category: 'tls', - description: - 'List of Elliptic Curve (EC) point formats. Indicates the set of point formats that the server can parse. ', - name: 'tls.detailed.server_hello.extensions.ec_points_formats', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions._unparsed_': { - category: 'tls', - description: 'List of extensions that were left unparsed by Packetbeat. ', - name: 'tls.detailed.server_hello.extensions._unparsed_', - type: 'keyword', - }, - 'tls.detailed.server_certificate_chain': { - category: 'tls', - description: 'Chain of trust for the server certificate.', - name: 'tls.detailed.server_certificate_chain', - type: 'array', - }, - 'tls.detailed.client_certificate_chain': { - category: 'tls', - description: 'Chain of trust for the client certificate.', - name: 'tls.detailed.client_certificate_chain', - type: 'array', - }, - 'tls.detailed.alert_types': { - category: 'tls', - description: 'An array containing the TLS alert type for every alert received. ', - name: 'tls.detailed.alert_types', - type: 'keyword', - }, - 'winlog.api': { - category: 'winlog', - description: - 'The event log API type used to read the record. The possible values are "wineventlog" for the Windows Event Log API or "wineventlog-experimental" for its experimental implementation. ', - name: 'winlog.api', - }, - 'winlog.activity_id': { - category: 'winlog', - description: - 'A globally unique identifier that identifies the current activity. The events that are published with this identifier are part of the same activity. ', - name: 'winlog.activity_id', - type: 'keyword', - }, - 'winlog.computer_name': { - category: 'winlog', - description: - 'The name of the computer that generated the record. When using Windows event forwarding, this name can differ from `agent.hostname`. ', - name: 'winlog.computer_name', - type: 'keyword', - }, - 'winlog.event_data': { - category: 'winlog', - description: - 'The event-specific data. This field is mutually exclusive with `user_data`. If you are capturing event data on versions prior to Windows Vista, the parameters in `event_data` are named `param1`, `param2`, and so on, because event log parameters are unnamed in earlier versions of Windows. ', - name: 'winlog.event_data', - type: 'object', - }, - 'winlog.event_data.AuthenticationPackageName': { - category: 'winlog', - name: 'winlog.event_data.AuthenticationPackageName', - type: 'keyword', - }, - 'winlog.event_data.Binary': { - category: 'winlog', - name: 'winlog.event_data.Binary', - type: 'keyword', - }, - 'winlog.event_data.BitlockerUserInputTime': { - category: 'winlog', - name: 'winlog.event_data.BitlockerUserInputTime', - type: 'keyword', - }, - 'winlog.event_data.BootMode': { - category: 'winlog', - name: 'winlog.event_data.BootMode', - type: 'keyword', - }, - 'winlog.event_data.BootType': { - category: 'winlog', - name: 'winlog.event_data.BootType', - type: 'keyword', - }, - 'winlog.event_data.BuildVersion': { - category: 'winlog', - name: 'winlog.event_data.BuildVersion', - type: 'keyword', - }, - 'winlog.event_data.Company': { - category: 'winlog', - name: 'winlog.event_data.Company', - type: 'keyword', - }, - 'winlog.event_data.CorruptionActionState': { - category: 'winlog', - name: 'winlog.event_data.CorruptionActionState', - type: 'keyword', - }, - 'winlog.event_data.CreationUtcTime': { - category: 'winlog', - name: 'winlog.event_data.CreationUtcTime', - type: 'keyword', - }, - 'winlog.event_data.Description': { - category: 'winlog', - name: 'winlog.event_data.Description', - type: 'keyword', - }, - 'winlog.event_data.Detail': { - category: 'winlog', - name: 'winlog.event_data.Detail', - type: 'keyword', - }, - 'winlog.event_data.DeviceName': { - category: 'winlog', - name: 'winlog.event_data.DeviceName', - type: 'keyword', - }, - 'winlog.event_data.DeviceNameLength': { - category: 'winlog', - name: 'winlog.event_data.DeviceNameLength', - type: 'keyword', - }, - 'winlog.event_data.DeviceTime': { - category: 'winlog', - name: 'winlog.event_data.DeviceTime', - type: 'keyword', - }, - 'winlog.event_data.DeviceVersionMajor': { - category: 'winlog', - name: 'winlog.event_data.DeviceVersionMajor', - type: 'keyword', - }, - 'winlog.event_data.DeviceVersionMinor': { - category: 'winlog', - name: 'winlog.event_data.DeviceVersionMinor', - type: 'keyword', - }, - 'winlog.event_data.DriveName': { - category: 'winlog', - name: 'winlog.event_data.DriveName', - type: 'keyword', - }, - 'winlog.event_data.DriverName': { - category: 'winlog', - name: 'winlog.event_data.DriverName', - type: 'keyword', - }, - 'winlog.event_data.DriverNameLength': { - category: 'winlog', - name: 'winlog.event_data.DriverNameLength', - type: 'keyword', - }, - 'winlog.event_data.DwordVal': { - category: 'winlog', - name: 'winlog.event_data.DwordVal', - type: 'keyword', - }, - 'winlog.event_data.EntryCount': { - category: 'winlog', - name: 'winlog.event_data.EntryCount', - type: 'keyword', - }, - 'winlog.event_data.ExtraInfo': { - category: 'winlog', - name: 'winlog.event_data.ExtraInfo', - type: 'keyword', - }, - 'winlog.event_data.FailureName': { - category: 'winlog', - name: 'winlog.event_data.FailureName', - type: 'keyword', - }, - 'winlog.event_data.FailureNameLength': { - category: 'winlog', - name: 'winlog.event_data.FailureNameLength', - type: 'keyword', - }, - 'winlog.event_data.FileVersion': { - category: 'winlog', - name: 'winlog.event_data.FileVersion', - type: 'keyword', - }, - 'winlog.event_data.FinalStatus': { - category: 'winlog', - name: 'winlog.event_data.FinalStatus', - type: 'keyword', - }, - 'winlog.event_data.Group': { - category: 'winlog', - name: 'winlog.event_data.Group', - type: 'keyword', - }, - 'winlog.event_data.IdleImplementation': { - category: 'winlog', - name: 'winlog.event_data.IdleImplementation', - type: 'keyword', - }, - 'winlog.event_data.IdleStateCount': { - category: 'winlog', - name: 'winlog.event_data.IdleStateCount', - type: 'keyword', - }, - 'winlog.event_data.ImpersonationLevel': { - category: 'winlog', - name: 'winlog.event_data.ImpersonationLevel', - type: 'keyword', - }, - 'winlog.event_data.IntegrityLevel': { - category: 'winlog', - name: 'winlog.event_data.IntegrityLevel', - type: 'keyword', - }, - 'winlog.event_data.IpAddress': { - category: 'winlog', - name: 'winlog.event_data.IpAddress', - type: 'keyword', - }, - 'winlog.event_data.IpPort': { - category: 'winlog', - name: 'winlog.event_data.IpPort', - type: 'keyword', - }, - 'winlog.event_data.KeyLength': { - category: 'winlog', - name: 'winlog.event_data.KeyLength', - type: 'keyword', - }, - 'winlog.event_data.LastBootGood': { - category: 'winlog', - name: 'winlog.event_data.LastBootGood', - type: 'keyword', - }, - 'winlog.event_data.LastShutdownGood': { - category: 'winlog', - name: 'winlog.event_data.LastShutdownGood', - type: 'keyword', - }, - 'winlog.event_data.LmPackageName': { - category: 'winlog', - name: 'winlog.event_data.LmPackageName', - type: 'keyword', - }, - 'winlog.event_data.LogonGuid': { - category: 'winlog', - name: 'winlog.event_data.LogonGuid', - type: 'keyword', - }, - 'winlog.event_data.LogonId': { - category: 'winlog', - name: 'winlog.event_data.LogonId', - type: 'keyword', - }, - 'winlog.event_data.LogonProcessName': { - category: 'winlog', - name: 'winlog.event_data.LogonProcessName', - type: 'keyword', - }, - 'winlog.event_data.LogonType': { - category: 'winlog', - name: 'winlog.event_data.LogonType', - type: 'keyword', - }, - 'winlog.event_data.MajorVersion': { - category: 'winlog', - name: 'winlog.event_data.MajorVersion', - type: 'keyword', - }, - 'winlog.event_data.MaximumPerformancePercent': { - category: 'winlog', - name: 'winlog.event_data.MaximumPerformancePercent', - type: 'keyword', - }, - 'winlog.event_data.MemberName': { - category: 'winlog', - name: 'winlog.event_data.MemberName', - type: 'keyword', - }, - 'winlog.event_data.MemberSid': { - category: 'winlog', - name: 'winlog.event_data.MemberSid', - type: 'keyword', - }, - 'winlog.event_data.MinimumPerformancePercent': { - category: 'winlog', - name: 'winlog.event_data.MinimumPerformancePercent', - type: 'keyword', - }, - 'winlog.event_data.MinimumThrottlePercent': { - category: 'winlog', - name: 'winlog.event_data.MinimumThrottlePercent', - type: 'keyword', - }, - 'winlog.event_data.MinorVersion': { - category: 'winlog', - name: 'winlog.event_data.MinorVersion', - type: 'keyword', - }, - 'winlog.event_data.NewProcessId': { - category: 'winlog', - name: 'winlog.event_data.NewProcessId', - type: 'keyword', - }, - 'winlog.event_data.NewProcessName': { - category: 'winlog', - name: 'winlog.event_data.NewProcessName', - type: 'keyword', - }, - 'winlog.event_data.NewSchemeGuid': { - category: 'winlog', - name: 'winlog.event_data.NewSchemeGuid', - type: 'keyword', - }, - 'winlog.event_data.NewTime': { - category: 'winlog', - name: 'winlog.event_data.NewTime', - type: 'keyword', - }, - 'winlog.event_data.NominalFrequency': { - category: 'winlog', - name: 'winlog.event_data.NominalFrequency', - type: 'keyword', - }, - 'winlog.event_data.Number': { - category: 'winlog', - name: 'winlog.event_data.Number', - type: 'keyword', - }, - 'winlog.event_data.OldSchemeGuid': { - category: 'winlog', - name: 'winlog.event_data.OldSchemeGuid', - type: 'keyword', - }, - 'winlog.event_data.OldTime': { - category: 'winlog', - name: 'winlog.event_data.OldTime', - type: 'keyword', - }, - 'winlog.event_data.OriginalFileName': { - category: 'winlog', - name: 'winlog.event_data.OriginalFileName', - type: 'keyword', - }, - 'winlog.event_data.Path': { - category: 'winlog', - name: 'winlog.event_data.Path', - type: 'keyword', - }, - 'winlog.event_data.PerformanceImplementation': { - category: 'winlog', - name: 'winlog.event_data.PerformanceImplementation', - type: 'keyword', - }, - 'winlog.event_data.PreviousCreationUtcTime': { - category: 'winlog', - name: 'winlog.event_data.PreviousCreationUtcTime', - type: 'keyword', - }, - 'winlog.event_data.PreviousTime': { - category: 'winlog', - name: 'winlog.event_data.PreviousTime', - type: 'keyword', - }, - 'winlog.event_data.PrivilegeList': { - category: 'winlog', - name: 'winlog.event_data.PrivilegeList', - type: 'keyword', - }, - 'winlog.event_data.ProcessId': { - category: 'winlog', - name: 'winlog.event_data.ProcessId', - type: 'keyword', - }, - 'winlog.event_data.ProcessName': { - category: 'winlog', - name: 'winlog.event_data.ProcessName', - type: 'keyword', - }, - 'winlog.event_data.ProcessPath': { - category: 'winlog', - name: 'winlog.event_data.ProcessPath', - type: 'keyword', - }, - 'winlog.event_data.ProcessPid': { - category: 'winlog', - name: 'winlog.event_data.ProcessPid', - type: 'keyword', - }, - 'winlog.event_data.Product': { - category: 'winlog', - name: 'winlog.event_data.Product', - type: 'keyword', - }, - 'winlog.event_data.PuaCount': { - category: 'winlog', - name: 'winlog.event_data.PuaCount', - type: 'keyword', - }, - 'winlog.event_data.PuaPolicyId': { - category: 'winlog', - name: 'winlog.event_data.PuaPolicyId', - type: 'keyword', - }, - 'winlog.event_data.QfeVersion': { - category: 'winlog', - name: 'winlog.event_data.QfeVersion', - type: 'keyword', - }, - 'winlog.event_data.Reason': { - category: 'winlog', - name: 'winlog.event_data.Reason', - type: 'keyword', - }, - 'winlog.event_data.SchemaVersion': { - category: 'winlog', - name: 'winlog.event_data.SchemaVersion', - type: 'keyword', - }, - 'winlog.event_data.ScriptBlockText': { - category: 'winlog', - name: 'winlog.event_data.ScriptBlockText', - type: 'keyword', - }, - 'winlog.event_data.ServiceName': { - category: 'winlog', - name: 'winlog.event_data.ServiceName', - type: 'keyword', - }, - 'winlog.event_data.ServiceVersion': { - category: 'winlog', - name: 'winlog.event_data.ServiceVersion', - type: 'keyword', - }, - 'winlog.event_data.ShutdownActionType': { - category: 'winlog', - name: 'winlog.event_data.ShutdownActionType', - type: 'keyword', - }, - 'winlog.event_data.ShutdownEventCode': { - category: 'winlog', - name: 'winlog.event_data.ShutdownEventCode', - type: 'keyword', - }, - 'winlog.event_data.ShutdownReason': { - category: 'winlog', - name: 'winlog.event_data.ShutdownReason', - type: 'keyword', - }, - 'winlog.event_data.Signature': { - category: 'winlog', - name: 'winlog.event_data.Signature', - type: 'keyword', - }, - 'winlog.event_data.SignatureStatus': { - category: 'winlog', - name: 'winlog.event_data.SignatureStatus', - type: 'keyword', - }, - 'winlog.event_data.Signed': { - category: 'winlog', - name: 'winlog.event_data.Signed', - type: 'keyword', - }, - 'winlog.event_data.StartTime': { - category: 'winlog', - name: 'winlog.event_data.StartTime', - type: 'keyword', - }, - 'winlog.event_data.State': { - category: 'winlog', - name: 'winlog.event_data.State', - type: 'keyword', - }, - 'winlog.event_data.Status': { - category: 'winlog', - name: 'winlog.event_data.Status', - type: 'keyword', - }, - 'winlog.event_data.StopTime': { - category: 'winlog', - name: 'winlog.event_data.StopTime', - type: 'keyword', - }, - 'winlog.event_data.SubjectDomainName': { - category: 'winlog', - name: 'winlog.event_data.SubjectDomainName', - type: 'keyword', - }, - 'winlog.event_data.SubjectLogonId': { - category: 'winlog', - name: 'winlog.event_data.SubjectLogonId', - type: 'keyword', - }, - 'winlog.event_data.SubjectUserName': { - category: 'winlog', - name: 'winlog.event_data.SubjectUserName', - type: 'keyword', - }, - 'winlog.event_data.SubjectUserSid': { - category: 'winlog', - name: 'winlog.event_data.SubjectUserSid', - type: 'keyword', - }, - 'winlog.event_data.TSId': { - category: 'winlog', - name: 'winlog.event_data.TSId', - type: 'keyword', - }, - 'winlog.event_data.TargetDomainName': { - category: 'winlog', - name: 'winlog.event_data.TargetDomainName', - type: 'keyword', - }, - 'winlog.event_data.TargetInfo': { - category: 'winlog', - name: 'winlog.event_data.TargetInfo', - type: 'keyword', - }, - 'winlog.event_data.TargetLogonGuid': { - category: 'winlog', - name: 'winlog.event_data.TargetLogonGuid', - type: 'keyword', - }, - 'winlog.event_data.TargetLogonId': { - category: 'winlog', - name: 'winlog.event_data.TargetLogonId', - type: 'keyword', - }, - 'winlog.event_data.TargetServerName': { - category: 'winlog', - name: 'winlog.event_data.TargetServerName', - type: 'keyword', - }, - 'winlog.event_data.TargetUserName': { - category: 'winlog', - name: 'winlog.event_data.TargetUserName', - type: 'keyword', - }, - 'winlog.event_data.TargetUserSid': { - category: 'winlog', - name: 'winlog.event_data.TargetUserSid', - type: 'keyword', - }, - 'winlog.event_data.TerminalSessionId': { - category: 'winlog', - name: 'winlog.event_data.TerminalSessionId', - type: 'keyword', - }, - 'winlog.event_data.TokenElevationType': { - category: 'winlog', - name: 'winlog.event_data.TokenElevationType', - type: 'keyword', - }, - 'winlog.event_data.TransmittedServices': { - category: 'winlog', - name: 'winlog.event_data.TransmittedServices', - type: 'keyword', - }, - 'winlog.event_data.UserSid': { - category: 'winlog', - name: 'winlog.event_data.UserSid', - type: 'keyword', - }, - 'winlog.event_data.Version': { - category: 'winlog', - name: 'winlog.event_data.Version', - type: 'keyword', - }, - 'winlog.event_data.Workstation': { - category: 'winlog', - name: 'winlog.event_data.Workstation', - type: 'keyword', - }, - 'winlog.event_data.param1': { - category: 'winlog', - name: 'winlog.event_data.param1', - type: 'keyword', - }, - 'winlog.event_data.param2': { - category: 'winlog', - name: 'winlog.event_data.param2', - type: 'keyword', - }, - 'winlog.event_data.param3': { - category: 'winlog', - name: 'winlog.event_data.param3', - type: 'keyword', - }, - 'winlog.event_data.param4': { - category: 'winlog', - name: 'winlog.event_data.param4', - type: 'keyword', - }, - 'winlog.event_data.param5': { - category: 'winlog', - name: 'winlog.event_data.param5', - type: 'keyword', - }, - 'winlog.event_data.param6': { - category: 'winlog', - name: 'winlog.event_data.param6', - type: 'keyword', - }, - 'winlog.event_data.param7': { - category: 'winlog', - name: 'winlog.event_data.param7', - type: 'keyword', - }, - 'winlog.event_data.param8': { - category: 'winlog', - name: 'winlog.event_data.param8', - type: 'keyword', - }, - 'winlog.event_id': { - category: 'winlog', - description: 'The event identifier. The value is specific to the source of the event. ', - name: 'winlog.event_id', - type: 'keyword', - }, - 'winlog.keywords': { - category: 'winlog', - description: 'The keywords are used to classify an event. ', - name: 'winlog.keywords', - type: 'keyword', - }, - 'winlog.channel': { - category: 'winlog', - description: - 'The name of the channel from which this record was read. This value is one of the names from the `event_logs` collection in the configuration. ', - name: 'winlog.channel', - type: 'keyword', - }, - 'winlog.record_id': { - category: 'winlog', - description: - 'The record ID of the event log record. The first record written to an event log is record number 1, and other records are numbered sequentially. If the record number reaches the maximum value (2^32^ for the Event Logging API and 2^64^ for the Windows Event Log API), the next record number will be 0. ', - name: 'winlog.record_id', - type: 'keyword', - }, - 'winlog.related_activity_id': { - category: 'winlog', - description: - 'A globally unique identifier that identifies the activity to which control was transferred to. The related events would then have this identifier as their `activity_id` identifier. ', - name: 'winlog.related_activity_id', - type: 'keyword', - }, - 'winlog.opcode': { - category: 'winlog', - description: - 'The opcode defined in the event. Task and opcode are typically used to identify the location in the application from where the event was logged. ', - name: 'winlog.opcode', - type: 'keyword', - }, - 'winlog.provider_guid': { - category: 'winlog', - description: - 'A globally unique identifier that identifies the provider that logged the event. ', - name: 'winlog.provider_guid', - type: 'keyword', - }, - 'winlog.process.pid': { - category: 'winlog', - description: 'The process_id of the Client Server Runtime Process. ', - name: 'winlog.process.pid', - type: 'long', - }, - 'winlog.provider_name': { - category: 'winlog', - description: - 'The source of the event log record (the application or service that logged the record). ', - name: 'winlog.provider_name', - type: 'keyword', - }, - 'winlog.task': { - category: 'winlog', - description: - 'The task defined in the event. Task and opcode are typically used to identify the location in the application from where the event was logged. The category used by the Event Logging API (on pre Windows Vista operating systems) is written to this field. ', - name: 'winlog.task', - type: 'keyword', - }, - 'winlog.time_created': { - category: 'winlog', - description: 'The event creation time. ', - name: 'winlog.time_created', - type: 'date', - }, - 'winlog.process.thread.id': { - category: 'winlog', - name: 'winlog.process.thread.id', - type: 'long', - }, - 'winlog.user_data': { - category: 'winlog', - description: 'The event specific data. This field is mutually exclusive with `event_data`. ', - name: 'winlog.user_data', - type: 'object', - }, - 'winlog.user.identifier': { - category: 'winlog', - description: - 'The Windows security identifier (SID) of the account associated with this event. If Winlogbeat cannot resolve the SID to a name, then the `user.name`, `user.domain`, and `user.type` fields will be omitted from the event. If you discover Winlogbeat not resolving SIDs, review the log for clues as to what the problem may be. ', - example: 'S-1-5-21-3541430928-2051711210-1391384369-1001', - name: 'winlog.user.identifier', - type: 'keyword', - }, - 'winlog.user.name': { - category: 'winlog', - description: 'Name of the user associated with this event. ', - name: 'winlog.user.name', - type: 'keyword', - }, - 'winlog.user.domain': { - category: 'winlog', - description: 'The domain that the account associated with this event is a member of. ', - name: 'winlog.user.domain', - type: 'keyword', - }, - 'winlog.user.type': { - category: 'winlog', - description: 'The type of account associated with this event. ', - name: 'winlog.user.type', - type: 'keyword', - }, - 'winlog.version': { - category: 'winlog', - description: "The version number of the event's definition.", - name: 'winlog.version', - type: 'long', - }, - activity_id: { - category: 'base', - name: 'activity_id', - type: 'alias', - }, - computer_name: { - category: 'base', - name: 'computer_name', - type: 'alias', - }, - event_id: { - category: 'base', - name: 'event_id', - type: 'alias', - }, - keywords: { - category: 'base', - name: 'keywords', - type: 'alias', - }, - log_name: { - category: 'base', - name: 'log_name', - type: 'alias', - }, - message_error: { - category: 'base', - name: 'message_error', - type: 'alias', - }, - record_number: { - category: 'base', - name: 'record_number', - type: 'alias', - }, - related_activity_id: { - category: 'base', - name: 'related_activity_id', - type: 'alias', - }, - opcode: { - category: 'base', - name: 'opcode', - type: 'alias', - }, - provider_guid: { - category: 'base', - name: 'provider_guid', - type: 'alias', - }, - process_id: { - category: 'base', - name: 'process_id', - type: 'alias', - }, - source_name: { - category: 'base', - name: 'source_name', - type: 'alias', - }, - task: { - category: 'base', - name: 'task', - type: 'alias', - }, - thread_id: { - category: 'base', - name: 'thread_id', - type: 'alias', - }, - 'user.identifier': { - category: 'user', - name: 'user.identifier', - type: 'alias', - }, - 'user.type': { - category: 'user', - name: 'user.type', - type: 'alias', - }, - version: { - category: 'base', - name: 'version', - type: 'alias', - }, - xml: { - category: 'base', - name: 'xml', - type: 'alias', - }, - 'powershell.id': { - category: 'powershell', - description: 'Shell Id.', - example: 'Microsoft Powershell', - name: 'powershell.id', - type: 'keyword', - }, - 'powershell.pipeline_id': { - category: 'powershell', - description: 'Pipeline id.', - example: '1', - name: 'powershell.pipeline_id', - type: 'keyword', - }, - 'powershell.runspace_id': { - category: 'powershell', - description: 'Runspace id.', - example: '4fa9074d-45ab-4e53-9195-e91981ac2bbb', - name: 'powershell.runspace_id', - type: 'keyword', - }, - 'powershell.sequence': { - category: 'powershell', - description: 'Sequence number of the powershell execution.', - example: 1, - name: 'powershell.sequence', - type: 'long', - }, - 'powershell.total': { - category: 'powershell', - description: 'Total number of messages in the sequence.', - example: 10, - name: 'powershell.total', - type: 'long', - }, - 'powershell.command.path': { - category: 'powershell', - description: 'Path of the executed command.', - example: 'C:\\Windows\\system32\\cmd.exe', - name: 'powershell.command.path', - type: 'keyword', - }, - 'powershell.command.name': { - category: 'powershell', - description: 'Name of the executed command.', - example: 'cmd.exe', - name: 'powershell.command.name', - type: 'keyword', - }, - 'powershell.command.type': { - category: 'powershell', - description: 'Type of the executed command.', - example: 'Application', - name: 'powershell.command.type', - type: 'keyword', - }, - 'powershell.command.value': { - category: 'powershell', - description: 'The invoked command.', - example: 'Import-LocalizedData LocalizedData -filename ArchiveResources', - name: 'powershell.command.value', - type: 'text', - }, - 'powershell.command.invocation_details': { - category: 'powershell', - description: 'An array of objects containing detailed information of the executed command. ', - name: 'powershell.command.invocation_details', - type: 'array', - }, - 'powershell.command.invocation_details.type': { - category: 'powershell', - description: 'The type of detail.', - example: 'CommandInvocation', - name: 'powershell.command.invocation_details.type', - type: 'keyword', - }, - 'powershell.command.invocation_details.related_command': { - category: 'powershell', - description: 'The command to which the detail is related to.', - example: 'Add-Type', - name: 'powershell.command.invocation_details.related_command', - type: 'keyword', - }, - 'powershell.command.invocation_details.name': { - category: 'powershell', - description: 'Only used for ParameterBinding detail type. Indicates the parameter name. ', - example: 'AssemblyName', - name: 'powershell.command.invocation_details.name', - type: 'keyword', - }, - 'powershell.command.invocation_details.value': { - category: 'powershell', - description: 'The value of the detail. The meaning of it will depend on the detail type. ', - example: 'System.IO.Compression.FileSystem', - name: 'powershell.command.invocation_details.value', - type: 'text', - }, - 'powershell.connected_user.domain': { - category: 'powershell', - description: 'User domain.', - example: 'VAGRANT', - name: 'powershell.connected_user.domain', - type: 'keyword', - }, - 'powershell.connected_user.name': { - category: 'powershell', - description: 'User name.', - example: 'vagrant', - name: 'powershell.connected_user.name', - type: 'keyword', - }, - 'powershell.engine.version': { - category: 'powershell', - description: 'Version of the PowerShell engine version used to execute the command.', - example: '5.1.17763.1007', - name: 'powershell.engine.version', - type: 'keyword', - }, - 'powershell.engine.previous_state': { - category: 'powershell', - description: 'Previous state of the PowerShell engine. ', - example: 'Available', - name: 'powershell.engine.previous_state', - type: 'keyword', - }, - 'powershell.engine.new_state': { - category: 'powershell', - description: 'New state of the PowerShell engine. ', - example: 'Stopped', - name: 'powershell.engine.new_state', - type: 'keyword', - }, - 'powershell.file.script_block_id': { - category: 'powershell', - description: 'Id of the executed script block.', - example: '50d2dbda-7361-4926-a94d-d9eadfdb43fa', - name: 'powershell.file.script_block_id', - type: 'keyword', - }, - 'powershell.file.script_block_text': { - category: 'powershell', - description: 'Text of the executed script block. ', - example: '.\\a_script.ps1', - name: 'powershell.file.script_block_text', - type: 'text', - }, - 'powershell.process.executable_version': { - category: 'powershell', - description: 'Version of the engine hosting process executable.', - example: '5.1.17763.1007', - name: 'powershell.process.executable_version', - type: 'keyword', - }, - 'powershell.provider.new_state': { - category: 'powershell', - description: 'New state of the PowerShell provider. ', - example: 'Active', - name: 'powershell.provider.new_state', - type: 'keyword', - }, - 'powershell.provider.name': { - category: 'powershell', - description: 'Provider name. ', - example: 'Variable', - name: 'powershell.provider.name', - type: 'keyword', - }, - 'winlog.logon.type': { - category: 'winlog', - description: - 'Logon type name. This is the descriptive version of the `winlog.event_data.LogonType` ordinal. This is an enrichment added by the Security module. ', - example: 'RemoteInteractive', - name: 'winlog.logon.type', - type: 'keyword', - }, - 'winlog.logon.id': { - category: 'winlog', - description: - 'Logon ID that can be used to associate this logon with other events related to the same logon session. ', - name: 'winlog.logon.id', - type: 'keyword', - }, - 'winlog.logon.failure.reason': { - category: 'winlog', - description: 'The reason the logon failed. ', - name: 'winlog.logon.failure.reason', - type: 'keyword', - }, - 'winlog.logon.failure.status': { - category: 'winlog', - description: - 'The reason the logon failed. This is textual description based on the value of the hexadecimal `Status` field. ', - name: 'winlog.logon.failure.status', - type: 'keyword', - }, - 'winlog.logon.failure.sub_status': { - category: 'winlog', - description: - 'Additional information about the logon failure. This is a textual description based on the value of the hexidecimal `SubStatus` field. ', - name: 'winlog.logon.failure.sub_status', - type: 'keyword', - }, - 'sysmon.dns.status': { - category: 'sysmon', - description: 'Windows status code returned for the DNS query.', - name: 'sysmon.dns.status', - type: 'keyword', - }, - 'sysmon.file.archived': { - category: 'sysmon', - description: 'Indicates if the deleted file was archived.', - name: 'sysmon.file.archived', - type: 'boolean', - }, - 'sysmon.file.is_executable': { - category: 'sysmon', - description: 'Indicates if the deleted file was an executable.', - name: 'sysmon.file.is_executable', - type: 'boolean', - }, -}; diff --git a/x-pack/plugins/timelines/tsconfig.json b/x-pack/plugins/timelines/tsconfig.json index 15961117840ae..1e18b5881ec61 100644 --- a/x-pack/plugins/timelines/tsconfig.json +++ b/x-pack/plugins/timelines/tsconfig.json @@ -2,9 +2,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -16,13 +14,25 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../cases/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/cases-plugin", + "@kbn/alerting-plugin", + "@kbn/utility-types", + "@kbn/es-query", + "@kbn/securitysolution-t-grid", + "@kbn/rule-data-utils", + "@kbn/rule-registry-plugin", + "@kbn/data-views-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/ui-theme", + "@kbn/i18n-react", + "@kbn/i18n", + "@kbn/security-plugin", + "@kbn/safer-lodash-set", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/transform/tsconfig.json b/x-pack/plugins/transform/tsconfig.json index 3298fc0e3b406..312e1243e6e57 100644 --- a/x-pack/plugins/transform/tsconfig.json +++ b/x-pack/plugins/transform/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "common/**/*", @@ -14,11 +12,40 @@ "public/**/*.json", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../license_management/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../ml/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/ml-plugin", + "@kbn/unified-search-plugin", + "@kbn/data-plugin", + "@kbn/config-schema", + "@kbn/i18n", + "@kbn/ml-is-populated-object", + "@kbn/alerting-plugin", + "@kbn/data-views-plugin", + "@kbn/home-plugin", + "@kbn/saved-objects-plugin", + "@kbn/management-plugin", + "@kbn/share-plugin", + "@kbn/spaces-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + "@kbn/ace", + "@kbn/es-ui-shared-plugin", + "@kbn/discover-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/usage-collection-plugin", + "@kbn/core-http-browser", + "@kbn/std", + "@kbn/es-query", + "@kbn/ml-agg-utils", + "@kbn/utility-types", + "@kbn/ml-string-hash", + "@kbn/ui-theme", + "@kbn/field-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/translations/tsconfig.json b/x-pack/plugins/translations/tsconfig.json index 4397d0f0b146e..e48f8b0627a1b 100644 --- a/x-pack/plugins/translations/tsconfig.json +++ b/x-pack/plugins/translations/tsconfig.json @@ -1,10 +1,11 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": ["server/**/*", "translations/ja-JP.json", "translations/zh-CN.json"], - "kbn_references": [{ "path": "../../../src/core/tsconfig.json" }] + "kbn_references": [], + "exclude": [ + "target/**/*", + ] } diff --git a/x-pack/plugins/triggers_actions_ui/tsconfig.json b/x-pack/plugins/triggers_actions_ui/tsconfig.json index a433af59649a1..70cf7794e33ac 100644 --- a/x-pack/plugins/triggers_actions_ui/tsconfig.json +++ b/x-pack/plugins/triggers_actions_ui/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ ".storybook/**/*", @@ -14,19 +12,39 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../alerting/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../rule_registry/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/data_view_editor/tsconfig.json" }, - { "path": "../../../src/plugins/saved_objects/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/charts/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../../../src/plugins/unified_search/tsconfig.json" } + "@kbn/core", + "@kbn/alerting-plugin", + "@kbn/features-plugin", + "@kbn/rule-registry-plugin", + "@kbn/data-plugin", + "@kbn/data-view-editor-plugin", + "@kbn/home-plugin", + "@kbn/charts-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-utils-plugin", + "@kbn/management-plugin", + "@kbn/spaces-plugin", + "@kbn/unified-search-plugin", + "@kbn/i18n-react", + "@kbn/storybook", + "@kbn/config-schema", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/i18n", + "@kbn/utility-types", + "@kbn/es-query", + "@kbn/data-views-plugin", + "@kbn/actions-plugin", + "@kbn/rule-data-utils", + "@kbn/test-jest-helpers", + "@kbn/es-ui-shared-plugin", + "@kbn/monaco", + "@kbn/core-http-browser", + "@kbn/core-notifications-browser", + "@kbn/core-doc-links-browser", + "@kbn/ui-theme", + "@kbn/datemath", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/upgrade_assistant/tsconfig.json b/x-pack/plugins/upgrade_assistant/tsconfig.json index 2663859f207c0..74ef1142e929d 100644 --- a/x-pack/plugins/upgrade_assistant/tsconfig.json +++ b/x-pack/plugins/upgrade_assistant/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../../typings/**/*", @@ -16,13 +14,30 @@ "server/**/*.json" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../infra/tsconfig.json" }, - { "path": "../cloud/tsconfig.json" }, + "@kbn/core", + "@kbn/management-plugin", + "@kbn/usage-collection-plugin", + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/infra-plugin", + "@kbn/cloud-plugin", + "@kbn/test-jest-helpers", + "@kbn/share-plugin", + "@kbn/data-plugin", + "@kbn/i18n", + "@kbn/kibana-utils-plugin", + "@kbn/kibana-react-plugin", + "@kbn/i18n-react", + "@kbn/analytics", + "@kbn/rison", + "@kbn/es-query", + "@kbn/config-schema", + "@kbn/security-plugin", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/utility-types", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/ux/e2e/tsconfig.json b/x-pack/plugins/ux/e2e/tsconfig.json index bde3d9cb57da7..46ba299021831 100644 --- a/x-pack/plugins/ux/e2e/tsconfig.json +++ b/x-pack/plugins/ux/e2e/tsconfig.json @@ -7,17 +7,13 @@ "types": [ "node"], }, "kbn_references": [ - { - "path": "../../apm/tsconfig.json", - }, { "path": "../../synthetics/e2e/tsconfig.json", }, { "path": "../../observability/e2e/tsconfig.json" }, - { - "path": "../tsconfig.json", - } + "@kbn/test", + "@kbn/observability-plugin", ] } diff --git a/x-pack/plugins/ux/tsconfig.json b/x-pack/plugins/ux/tsconfig.json index a07702fc36407..e9f31c6b08bee 100644 --- a/x-pack/plugins/ux/tsconfig.json +++ b/x-pack/plugins/ux/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "../../../typings/**/*", @@ -13,19 +11,33 @@ "public/**/*.json", ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/inspector/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../apm/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../maps/tsconfig.json" }, - { "path": "../observability/tsconfig.json" }, - { "path": "../lens/tsconfig.json" }, + "@kbn/core", + "@kbn/data-plugin", + "@kbn/embeddable-plugin", + "@kbn/home-plugin", + "@kbn/inspector-plugin", + "@kbn/kibana-react-plugin", + "@kbn/apm-plugin", + "@kbn/features-plugin", + "@kbn/licensing-plugin", + "@kbn/maps-plugin", + "@kbn/observability-plugin", + "@kbn/lens-plugin", + "@kbn/i18n", + "@kbn/io-ts-utils", + "@kbn/data-views-plugin", + "@kbn/core-http-browser", + "@kbn/datemath", + "@kbn/ui-theme", + "@kbn/typed-react-router-config", + "@kbn/utility-types", + "@kbn/server-route-repository", + "@kbn/es-types", + "@kbn/shared-ux-page-kibana-template", + "@kbn/i18n-react", + "@kbn/es-query", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/plugins/watcher/tsconfig.json b/x-pack/plugins/watcher/tsconfig.json index 045ed49f24a42..457da687c9d43 100644 --- a/x-pack/plugins/watcher/tsconfig.json +++ b/x-pack/plugins/watcher/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, + "outDir": "target/types", }, "include": [ "__jest__/**/*", @@ -14,15 +12,28 @@ "../../../typings/**/*" ], "kbn_references": [ - { "path": "../../../src/core/tsconfig.json" }, - { "path": "../../../src/plugins/home/tsconfig.json" }, - { "path": "../../../src/plugins/management/tsconfig.json" }, - { "path": "../../../src/plugins/charts/tsconfig.json" }, - { "path": "../../../src/plugins/data/tsconfig.json" }, - { "path": "../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../license_api_guard/tsconfig.json" }, - { "path": "../licensing/tsconfig.json" }, - { "path": "../features/tsconfig.json" }, + "@kbn/core", + "@kbn/home-plugin", + "@kbn/management-plugin", + "@kbn/charts-plugin", + "@kbn/data-plugin", + "@kbn/kibana-react-plugin", + "@kbn/es-ui-shared-plugin", + "@kbn/license-api-guard-plugin", + "@kbn/licensing-plugin", + "@kbn/features-plugin", + "@kbn/core-doc-links-browser-mocks", + "@kbn/core-execution-context-browser-mocks", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/safer-lodash-set", + "@kbn/config-schema", + "@kbn/datemath", + "@kbn/field-formats-plugin", + "@kbn/i18n-react", + "@kbn/ace", + ], + "exclude": [ + "target/**/*", ] } diff --git a/x-pack/scripts/jest.js b/x-pack/scripts/jest.js index 2ea950e075c8c..4c83073a559a4 100644 --- a/x-pack/scripts/jest.js +++ b/x-pack/scripts/jest.js @@ -5,5 +5,4 @@ * 2.0. */ -require('../../src/setup_node_env/ensure_node_preserve_symlinks'); require('@kbn/test').runJest(); diff --git a/x-pack/test/examples/config.ts b/x-pack/test/examples/config.ts index 3f6c1c920acad..0bcb70751d835 100644 --- a/x-pack/test/examples/config.ts +++ b/x-pack/test/examples/config.ts @@ -8,7 +8,8 @@ import { FtrConfigProviderContext } from '@kbn/test'; import { resolve } from 'path'; import fs from 'fs'; -import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/repo-info'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { const xpackFunctionalConfig = await readConfigFile( diff --git a/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts b/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts index 24472a1e9f5be..d062eb8feb432 100644 --- a/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts +++ b/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { REPO_ROOT } from '@kbn/utils'; +// @ts-ignore we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; import expect from '@kbn/expect'; import fs from 'fs'; import path from 'path'; diff --git a/x-pack/test/functional/services/ml/stack_management_jobs.ts b/x-pack/test/functional/services/ml/stack_management_jobs.ts index 9f37003be2175..48a783de58389 100644 --- a/x-pack/test/functional/services/ml/stack_management_jobs.ts +++ b/x-pack/test/functional/services/ml/stack_management_jobs.ts @@ -6,7 +6,8 @@ */ import expect from '@kbn/expect'; -import { REPO_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; import fs from 'fs'; import path from 'path'; diff --git a/x-pack/test/functional_cors/plugins/kibana_cors_test/tsconfig.json b/x-pack/test/functional_cors/plugins/kibana_cors_test/tsconfig.json index 9925e88e82877..3428af6bad2f5 100644 --- a/x-pack/test/functional_cors/plugins/kibana_cors_test/tsconfig.json +++ b/x-pack/test/functional_cors/plugins/kibana_cors_test/tsconfig.json @@ -1,16 +1,18 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" } + "@kbn/core", + "@kbn/test", + "@kbn/config-schema", ] } diff --git a/x-pack/test/functional_embedded/plugins/iframe_embedded/tsconfig.json b/x-pack/test/functional_embedded/plugins/iframe_embedded/tsconfig.json index 9925e88e82877..71169d35a6125 100644 --- a/x-pack/test/functional_embedded/plugins/iframe_embedded/tsconfig.json +++ b/x-pack/test/functional_embedded/plugins/iframe_embedded/tsconfig.json @@ -1,16 +1,16 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/x-pack/test/functional_execution_context/fixtures/plugins/alerts/server/ensure_apm_started.ts b/x-pack/test/functional_execution_context/fixtures/plugins/alerts/server/ensure_apm_started.ts index 8581ebe5183c1..d0e989f662cff 100644 --- a/x-pack/test/functional_execution_context/fixtures/plugins/alerts/server/ensure_apm_started.ts +++ b/x-pack/test/functional_execution_context/fixtures/plugins/alerts/server/ensure_apm_started.ts @@ -6,7 +6,8 @@ */ import apmAgent from 'elastic-apm-node'; import { initApm } from '@kbn/apm-config-loader'; -import { REPO_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; if (!apmAgent.isStarted()) { initApm(process.argv, REPO_ROOT, false, 'test-plugin'); diff --git a/x-pack/test/licensing_plugin/config.public.ts b/x-pack/test/licensing_plugin/config.public.ts index a962f499d566a..efe6a950ffeb1 100644 --- a/x-pack/test/licensing_plugin/config.public.ts +++ b/x-pack/test/licensing_plugin/config.public.ts @@ -6,7 +6,8 @@ */ import path from 'path'; -import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/repo-info'; import { FtrConfigProviderContext } from '@kbn/test'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { diff --git a/x-pack/test/licensing_plugin/plugins/test_feature_usage/tsconfig.json b/x-pack/test/licensing_plugin/plugins/test_feature_usage/tsconfig.json index 1c8c99611ad56..1685a89d40697 100644 --- a/x-pack/test/licensing_plugin/plugins/test_feature_usage/tsconfig.json +++ b/x-pack/test/licensing_plugin/plugins/test_feature_usage/tsconfig.json @@ -1,17 +1,17 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" }, - { "path": "../../../../plugins/licensing/tsconfig.json" } + "@kbn/core", + "@kbn/licensing-plugin" ] } diff --git a/x-pack/test/load/runner.ts b/x-pack/test/load/runner.ts index 256af8af24d3c..3a54c218d4ef0 100644 --- a/x-pack/test/load/runner.ts +++ b/x-pack/test/load/runner.ts @@ -7,7 +7,8 @@ import { withProcRunner } from '@kbn/dev-proc-runner'; import { resolve } from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; import Fs from 'fs'; import { createFlagError } from '@kbn/dev-cli-errors'; import { setTimeout as setTimeoutAsync } from 'timers/promises'; diff --git a/x-pack/test/plugin_api_integration/plugins/elasticsearch_client/tsconfig.json b/x-pack/test/plugin_api_integration/plugins/elasticsearch_client/tsconfig.json index 9925e88e82877..71169d35a6125 100644 --- a/x-pack/test/plugin_api_integration/plugins/elasticsearch_client/tsconfig.json +++ b/x-pack/test/plugin_api_integration/plugins/elasticsearch_client/tsconfig.json @@ -1,16 +1,16 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/x-pack/test/plugin_api_integration/plugins/event_log/tsconfig.json b/x-pack/test/plugin_api_integration/plugins/event_log/tsconfig.json index 1eb7ab3f254cb..f1fc9d8927258 100644 --- a/x-pack/test/plugin_api_integration/plugins/event_log/tsconfig.json +++ b/x-pack/test/plugin_api_integration/plugins/event_log/tsconfig.json @@ -1,17 +1,17 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" }, - { "path": "../../../../plugins/event_log/tsconfig.json" } + "@kbn/core", + "@kbn/event-log-plugin" ] } diff --git a/x-pack/test/plugin_api_integration/plugins/feature_usage_test/tsconfig.json b/x-pack/test/plugin_api_integration/plugins/feature_usage_test/tsconfig.json index 3c7a74893c545..675e4bfcf3852 100644 --- a/x-pack/test/plugin_api_integration/plugins/feature_usage_test/tsconfig.json +++ b/x-pack/test/plugin_api_integration/plugins/feature_usage_test/tsconfig.json @@ -1,17 +1,18 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" }, - { "path": "../../../../plugins/licensing/tsconfig.json" }, + "@kbn/core", + "@kbn/licensing-plugin", + "@kbn/config-schema", ] } diff --git a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/tsconfig.json b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/tsconfig.json index 0bbd4f56f7ce6..6038cbe20ae83 100644 --- a/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/tsconfig.json +++ b/x-pack/test/plugin_api_integration/plugins/sample_task_plugin/tsconfig.json @@ -1,17 +1,18 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" }, - { "path": "../../../../plugins/task_manager/tsconfig.json" }, + "@kbn/core", + "@kbn/task-manager-plugin", + "@kbn/config-schema", ] } diff --git a/x-pack/test/plugin_api_perf/plugins/task_manager_performance/tsconfig.json b/x-pack/test/plugin_api_perf/plugins/task_manager_performance/tsconfig.json index 0bbd4f56f7ce6..6038cbe20ae83 100644 --- a/x-pack/test/plugin_api_perf/plugins/task_manager_performance/tsconfig.json +++ b/x-pack/test/plugin_api_perf/plugins/task_manager_performance/tsconfig.json @@ -1,17 +1,18 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" }, - { "path": "../../../../plugins/task_manager/tsconfig.json" }, + "@kbn/core", + "@kbn/task-manager-plugin", + "@kbn/config-schema", ] } diff --git a/x-pack/test/plugin_functional/config.ts b/x-pack/test/plugin_functional/config.ts index 19846669f48ba..afea1a17d0d86 100644 --- a/x-pack/test/plugin_functional/config.ts +++ b/x-pack/test/plugin_functional/config.ts @@ -7,7 +7,8 @@ import { resolve } from 'path'; import fs from 'fs'; -import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/repo-info'; import { FtrConfigProviderContext } from '@kbn/test'; import { services } from './services'; import { pageObjects } from './page_objects'; diff --git a/x-pack/test/plugin_functional/plugins/global_search_test/tsconfig.json b/x-pack/test/plugin_functional/plugins/global_search_test/tsconfig.json index cf8ae37666cca..a92b2e82c9b09 100644 --- a/x-pack/test/plugin_functional/plugins/global_search_test/tsconfig.json +++ b/x-pack/test/plugin_functional/plugins/global_search_test/tsconfig.json @@ -1,17 +1,17 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" }, - { "path": "../../../../plugins/global_search/tsconfig.json" }, + "@kbn/core", + "@kbn/global-search-plugin", ] } diff --git a/x-pack/test/plugin_functional/plugins/resolver_test/tsconfig.json b/x-pack/test/plugin_functional/plugins/resolver_test/tsconfig.json index 9034d94a86b7b..ea3130c84e99b 100644 --- a/x-pack/test/plugin_functional/plugins/resolver_test/tsconfig.json +++ b/x-pack/test/plugin_functional/plugins/resolver_test/tsconfig.json @@ -1,18 +1,20 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "**/*.ts", "**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" }, - { "path": "../../../../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../../../plugins/security_solution/tsconfig.json" }, + "@kbn/core", + "@kbn/kibana-react-plugin", + "@kbn/security-solution-plugin", + "@kbn/i18n", + "@kbn/i18n-react", ] } diff --git a/x-pack/test/saved_object_api_integration/common/config.ts b/x-pack/test/saved_object_api_integration/common/config.ts index 32d2d73d5cebc..5878134050027 100644 --- a/x-pack/test/saved_object_api_integration/common/config.ts +++ b/x-pack/test/saved_object_api_integration/common/config.ts @@ -7,7 +7,8 @@ import path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; import { FtrConfigProviderContext } from '@kbn/test'; import { services } from './services'; diff --git a/x-pack/test/scalability/config.ts b/x-pack/test/scalability/config.ts index 0d3303faf5970..490b44705bb18 100644 --- a/x-pack/test/scalability/config.ts +++ b/x-pack/test/scalability/config.ts @@ -8,7 +8,8 @@ import { FtrConfigProviderContext } from '@kbn/test'; import fs from 'fs'; import path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; import { createFlagError } from '@kbn/dev-cli-errors'; import { commonFunctionalServices } from '@kbn/ftr-common-functional-services'; import { ScalabilityTestRunner } from './runner'; diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts index 314f8bcebd6dc..27203acc35756 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts @@ -7,7 +7,8 @@ import { IndexedHostsAndAlertsResponse } from '@kbn/security-solution-plugin/common/endpoint/index_data'; import { TimelineResponse } from '@kbn/security-solution-plugin/common/types'; -import { kibanaPackageJson } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { kibanaPackageJson } from '@kbn/repo-info'; import { FtrProviderContext } from '../../ftr_provider_context'; import { IndexedEndpointRuleAlerts } from '../../../security_solution_ftr/services/detections'; diff --git a/x-pack/test/security_solution_endpoint/services/endpoint.ts b/x-pack/test/security_solution_endpoint/services/endpoint.ts index e29ae10a60df8..c74ba05c4ae3e 100644 --- a/x-pack/test/security_solution_endpoint/services/endpoint.ts +++ b/x-pack/test/security_solution_endpoint/services/endpoint.ts @@ -33,7 +33,8 @@ import { HostInfo, HostMetadata } from '@kbn/security-solution-plugin/common/end import { EndpointDocGenerator } from '@kbn/security-solution-plugin/common/endpoint/generate_data'; import { EndpointMetadataGenerator } from '@kbn/security-solution-plugin/common/endpoint/data_generators/endpoint_metadata_generator'; import { merge } from 'lodash'; -import { kibanaPackageJson } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { kibanaPackageJson } from '@kbn/repo-info'; import seedrandom from 'seedrandom'; import { FtrService } from '../../functional/ftr_provider_context'; diff --git a/x-pack/test/security_solution_endpoint/services/endpoint_telemetry.ts b/x-pack/test/security_solution_endpoint/services/endpoint_telemetry.ts index eb93b43e83bab..0d04fd4e895b8 100644 --- a/x-pack/test/security_solution_endpoint/services/endpoint_telemetry.ts +++ b/x-pack/test/security_solution_endpoint/services/endpoint_telemetry.ts @@ -7,7 +7,8 @@ import fs from 'fs'; import Path from 'path'; -import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/repo-info'; import { FtrProviderContext } from '../ftr_provider_context'; const TELEMETRY_API_ROOT = '/api/stats?extended=true'; diff --git a/x-pack/test/security_solution_ftr/services/detections/endpoint_rule_alert_generator.ts b/x-pack/test/security_solution_ftr/services/detections/endpoint_rule_alert_generator.ts index 87b5f9a29784d..4c37ac73d25ee 100644 --- a/x-pack/test/security_solution_ftr/services/detections/endpoint_rule_alert_generator.ts +++ b/x-pack/test/security_solution_ftr/services/detections/endpoint_rule_alert_generator.ts @@ -6,7 +6,8 @@ */ import { BaseDataGenerator } from '@kbn/security-solution-plugin/common/endpoint/data_generators/base_data_generator'; -import { kibanaPackageJson } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { kibanaPackageJson } from '@kbn/repo-info'; import { mergeWith } from 'lodash'; import { EndpointMetadataGenerator } from '@kbn/security-solution-plugin/common/endpoint/data_generators/endpoint_metadata_generator'; import { HostMetadata } from '@kbn/security-solution-plugin/common/endpoint/types'; diff --git a/x-pack/test/security_solution_ftr/services/detections/index.ts b/x-pack/test/security_solution_ftr/services/detections/index.ts index e7cbc15f99305..e212a09a5d21a 100644 --- a/x-pack/test/security_solution_ftr/services/detections/index.ts +++ b/x-pack/test/security_solution_ftr/services/detections/index.ts @@ -15,7 +15,8 @@ import { } from '@kbn/security-solution-plugin/common/constants'; import { estypes } from '@elastic/elasticsearch'; import { Rule } from '@kbn/security-solution-plugin/public/detection_engine/rule_management/logic/types'; -import { kibanaPackageJson } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { kibanaPackageJson } from '@kbn/repo-info'; import { wrapErrorIfNeeded } from '@kbn/security-solution-plugin/common/endpoint/data_loaders/utils'; import { FtrService } from '../../../functional/ftr_provider_context'; import { EndpointRuleAlertGenerator } from './endpoint_rule_alert_generator'; diff --git a/x-pack/test/spaces_api_integration/common/config.ts b/x-pack/test/spaces_api_integration/common/config.ts index d7139e7bd1c34..d4cf6851b481b 100644 --- a/x-pack/test/spaces_api_integration/common/config.ts +++ b/x-pack/test/spaces_api_integration/common/config.ts @@ -6,7 +6,8 @@ */ import path from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; import { FtrConfigProviderContext } from '@kbn/test'; interface CreateTestConfigOptions { diff --git a/x-pack/test/stack_functional_integration/apps/alerts/alerts_encryption_keys.js b/x-pack/test/stack_functional_integration/apps/alerts/alerts_encryption_keys.js index fdc7fb3a3edcb..a245748ef07cc 100644 --- a/x-pack/test/stack_functional_integration/apps/alerts/alerts_encryption_keys.js +++ b/x-pack/test/stack_functional_integration/apps/alerts/alerts_encryption_keys.js @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import { resolve } from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; const INTEGRATION_TEST_ROOT = process.env.WORKSPACE || resolve(REPO_ROOT, '../integration-test'); const ARCHIVE = resolve( diff --git a/x-pack/test/stack_functional_integration/apps/metricbeat/_metricbeat_dashboard.ts b/x-pack/test/stack_functional_integration/apps/metricbeat/_metricbeat_dashboard.ts index 66da887b5067c..da1626f9bd26d 100644 --- a/x-pack/test/stack_functional_integration/apps/metricbeat/_metricbeat_dashboard.ts +++ b/x-pack/test/stack_functional_integration/apps/metricbeat/_metricbeat_dashboard.ts @@ -7,7 +7,8 @@ import expect from '@kbn/expect'; import { resolve } from 'path'; -import { REPO_ROOT } from '@kbn/utils'; +// @ts-ignore we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; import { FtrProviderContext } from '../../../functional/ftr_provider_context'; const INTEGRATION_TEST_ROOT = process.env.WORKSPACE || resolve(REPO_ROOT, '../integration-test'); diff --git a/x-pack/test/stack_functional_integration/configs/config.stack_functional_integration_base.js b/x-pack/test/stack_functional_integration/configs/config.stack_functional_integration_base.js index 9b2e2f087d081..f37d78f683e4a 100644 --- a/x-pack/test/stack_functional_integration/configs/config.stack_functional_integration_base.js +++ b/x-pack/test/stack_functional_integration/configs/config.stack_functional_integration_base.js @@ -8,7 +8,7 @@ import { resolve } from 'path'; import consumeState from './consume_state'; import { ToolingLog } from '@kbn/tooling-log'; -import { REPO_ROOT } from '@kbn/utils'; +import { REPO_ROOT } from '@kbn/repo-info'; import chalk from 'chalk'; import { esTestConfig, kbnTestConfig } from '@kbn/test'; import { TriggersActionsPageProvider } from '../../functional_with_es_ssl/page_objects/triggers_actions_ui_page'; diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index f825153c69d20..7caf279af5863 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -1,10 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types", - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, + "outDir": "target/types", "types": ["node", "@kbn/ambient-ftr-types"], // there is still a decent amount of JS in this plugin and we are taking // advantage of the fact that TS doesn't know the types of that code and @@ -26,90 +23,90 @@ ], "kbn_references": [ { "path": "../../test/tsconfig.json" }, - { "path": "../../src/core/tsconfig.json" }, - { "path": "../../src/plugins/bfetch/tsconfig.json" }, - { "path": "../../src/plugins/charts/tsconfig.json" }, - { "path": "../../src/plugins/console/tsconfig.json" }, - { "path": "../../src/plugins/dashboard/tsconfig.json" }, - { "path": "../../src/plugins/data/tsconfig.json" }, - { "path": "../../src/plugins/discover/tsconfig.json" }, - { "path": "../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../src/plugins/es_ui_shared/tsconfig.json" }, - { "path": "../../src/plugins/expressions/tsconfig.json" }, - { "path": "../../src/plugins/home/tsconfig.json" }, - { "path": "../../src/plugins/data_view_management/tsconfig.json" }, - { "path": "../../src/plugins/kibana_overview/tsconfig.json" }, - { "path": "../../src/plugins/kibana_react/tsconfig.json" }, - { "path": "../../src/plugins/kibana_usage_collection/tsconfig.json" }, - { "path": "../../src/plugins/kibana_utils/tsconfig.json" }, - { "path": "../../src/plugins/management/tsconfig.json" }, - { "path": "../../src/plugins/navigation/tsconfig.json" }, - { "path": "../../src/plugins/newsfeed/tsconfig.json" }, - { "path": "../../src/plugins/saved_objects_management/tsconfig.json" }, - { "path": "../../src/plugins/saved_objects_tagging_oss/tsconfig.json" }, - { "path": "../../src/plugins/saved_objects/tsconfig.json" }, - { "path": "../../src/plugins/share/tsconfig.json" }, - { "path": "../../src/plugins/telemetry_collection_manager/tsconfig.json" }, - { "path": "../../src/plugins/telemetry_management_section/tsconfig.json" }, - { "path": "../../src/plugins/telemetry/tsconfig.json" }, - { "path": "../../src/plugins/ui_actions/tsconfig.json" }, - { "path": "../../src/plugins/ui_actions_enhanced/tsconfig.json" }, - { "path": "../../src/plugins/url_forwarding/tsconfig.json" }, - { "path": "../../src/plugins/usage_collection/tsconfig.json" }, - { "path": "../plugins/actions/tsconfig.json" }, - { "path": "../plugins/alerting/tsconfig.json" }, - { "path": "../plugins/stack_connectors/tsconfig.json" }, - { "path": "../plugins/apm/tsconfig.json" }, - { "path": "../plugins/banners/tsconfig.json" }, - { "path": "../plugins/cases/tsconfig.json" }, - { "path": "../plugins/cloud/tsconfig.json" }, - { "path": "../plugins/enterprise_search/tsconfig.json" }, - { "path": "../plugins/fleet/tsconfig.json" }, - { "path": "../plugins/global_search/tsconfig.json" }, - { "path": "../plugins/global_search_providers/tsconfig.json" }, - { "path": "../plugins/features/tsconfig.json" }, - { "path": "../plugins/drilldowns/url_drilldown/tsconfig.json" }, - { "path": "../plugins/embeddable_enhanced/tsconfig.json" }, - { "path": "../plugins/encrypted_saved_objects/tsconfig.json" }, - { "path": "../plugins/enterprise_search/tsconfig.json" }, - { "path": "../plugins/event_log/tsconfig.json" }, - { "path": "../plugins/features/tsconfig.json" }, - { "path": "../plugins/global_search_bar/tsconfig.json" }, - { "path": "../plugins/global_search_providers/tsconfig.json" }, - { "path": "../plugins/global_search/tsconfig.json" }, - { "path": "../plugins/grokdebugger/tsconfig.json" }, - { "path": "../plugins/index_management/tsconfig.json" }, - { "path": "../plugins/infra/tsconfig.json" }, - { "path": "../plugins/ingest_pipelines/tsconfig.json" }, - { "path": "../plugins/lens/tsconfig.json" }, - { "path": "../plugins/license_management/tsconfig.json" }, - { "path": "../plugins/licensing/tsconfig.json" }, - { "path": "../plugins/lists/tsconfig.json" }, - { "path": "../plugins/logstash/tsconfig.json" }, - { "path": "../plugins/ml/tsconfig.json" }, - { "path": "../plugins/monitoring/tsconfig.json" }, - { "path": "../plugins/observability/tsconfig.json" }, - { "path": "../plugins/osquery/tsconfig.json" }, - { "path": "../plugins/painless_lab/tsconfig.json" }, - { "path": "../plugins/runtime_fields/tsconfig.json" }, - { "path": "../plugins/saved_objects_tagging/tsconfig.json" }, - { "path": "../plugins/security/tsconfig.json" }, - { "path": "../plugins/security_solution/tsconfig.json" }, - { "path": "../plugins/snapshot_restore/tsconfig.json" }, - { "path": "../plugins/spaces/tsconfig.json" }, - { "path": "../plugins/stack_alerts/tsconfig.json" }, - { "path": "../plugins/task_manager/tsconfig.json" }, - { "path": "../plugins/telemetry_collection_xpack/tsconfig.json" }, - { "path": "../plugins/timelines/tsconfig.json" }, - { "path": "../plugins/transform/tsconfig.json" }, - { "path": "../plugins/triggers_actions_ui/tsconfig.json" }, - { "path": "../plugins/upgrade_assistant/tsconfig.json" }, - { "path": "../plugins/watcher/tsconfig.json" }, - { "path": "../plugins/rollup/tsconfig.json" }, - { "path": "../plugins/remote_clusters/tsconfig.json" }, - { "path": "../plugins/cross_cluster_replication/tsconfig.json" }, - { "path": "../plugins/index_lifecycle_management/tsconfig.json"}, - { "path": "../plugins/synthetics/tsconfig.json" }, - { "path": "./plugin_functional/plugins/global_search_test/tsconfig.json" } + "@kbn/core", + "@kbn/data-plugin", + "@kbn/kibana-react-plugin", + "@kbn/kibana-usage-collection-plugin", + "@kbn/share-plugin", + "@kbn/telemetry-collection-manager-plugin", + "@kbn/telemetry-plugin", + "@kbn/actions-plugin", + "@kbn/alerting-plugin", + "@kbn/apm-plugin", + "@kbn/cases-plugin", + "@kbn/fleet-plugin", + "@kbn/global-search-plugin", + "@kbn/features-plugin", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/event-log-plugin", + "@kbn/features-plugin", + "@kbn/global-search-plugin", + "@kbn/index-management-plugin", + "@kbn/infra-plugin", + "@kbn/lens-plugin", + "@kbn/licensing-plugin", + "@kbn/lists-plugin", + "@kbn/ml-plugin", + "@kbn/monitoring-plugin", + "@kbn/observability-plugin", + "@kbn/security-plugin", + "@kbn/security-solution-plugin", + "@kbn/snapshot-restore-plugin", + "@kbn/spaces-plugin", + "@kbn/task-manager-plugin", + "@kbn/telemetry-collection-xpack-plugin", + "@kbn/timelines-plugin", + "@kbn/transform-plugin", + "@kbn/triggers-actions-ui-plugin", + "@kbn/upgrade-assistant-plugin", + "@kbn/remote-clusters-plugin", + "@kbn/cross-cluster-replication-plugin", + "@kbn/synthetics-plugin", + "@kbn/global-search-test-plugin", + "@kbn/test", + "@kbn/repo-info", + "@kbn/tooling-log", + "@kbn/dev-utils", + "@kbn/dev-proc-runner", + "@kbn/ftr-common-functional-services", + "@kbn/securitysolution-io-ts-list-types", + "@kbn/securitysolution-list-constants", + "@kbn/securitysolution-es-utils", + "@kbn/expect", + "@kbn/dev-cli-errors", + "@kbn/ci-stats-reporter", + "@kbn/std", + "@kbn/apm-synthtrace", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/rule-data-utils", + "@kbn/maps-plugin", + "@kbn/test-subj-selector", + "@kbn/rison", + "@kbn/reporting-plugin", + "@kbn/aiops-plugin", + "@kbn/ml-agg-utils", + "@kbn/logging", + "@kbn/utility-types", + "@kbn/data-views-plugin", + "@kbn/datemath", + "@kbn/safer-lodash-set", + "@kbn/securitysolution-rules", + "@kbn/es-archiver", + "@kbn/config-schema", + "@kbn/kubernetes-security-plugin", + "@kbn/es-query", + "@kbn/session-view-plugin", + "@kbn/ml-is-populated-object", + "@kbn/ml-string-hash", + "@kbn/data-visualizer-plugin", + "@kbn/visualizations-plugin", + "@kbn/rule-registry-plugin", + "@kbn/controls-plugin", + "@kbn/i18n-react", + "@kbn/apm-config-loader", + "@kbn/core-saved-objects-server", + "@kbn/core-provider-plugin", + "@kbn/core-saved-objects-common", + "@kbn/alerting-fixture-plugin", ] } diff --git a/x-pack/test/usage_collection/plugins/application_usage_test/tsconfig.json b/x-pack/test/usage_collection/plugins/application_usage_test/tsconfig.json index 9915d6a039072..cb4b5e34dcf89 100644 --- a/x-pack/test/usage_collection/plugins/application_usage_test/tsconfig.json +++ b/x-pack/test/usage_collection/plugins/application_usage_test/tsconfig.json @@ -1,16 +1,16 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "public/**/*.ts", "public/**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" }, + "@kbn/core", ] } diff --git a/x-pack/test/usage_collection/plugins/stack_management_usage_test/tsconfig.json b/x-pack/test/usage_collection/plugins/stack_management_usage_test/tsconfig.json index d14f3df51ff9c..c5a738ee176c1 100644 --- a/x-pack/test/usage_collection/plugins/stack_management_usage_test/tsconfig.json +++ b/x-pack/test/usage_collection/plugins/stack_management_usage_test/tsconfig.json @@ -1,16 +1,16 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./target/types" + "outDir": "target/types" }, "include": [ "public/**/*.ts", "public/**/*.tsx", ], "exclude": [ - "./target" + "target/**/*", ], "kbn_references": [ - { "path": "../../../../../src/core/tsconfig.json" } + "@kbn/core" ] } diff --git a/yarn.lock b/yarn.lock index 8e789231e698f..42cd55a3d964b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2689,135 +2689,143 @@ resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== -"@kbn/ace@link:bazel-bin/packages/kbn-ace": +"@kbn/ace@link:packages/kbn-ace": version "0.0.0" uid "" -"@kbn/aiops-components@link:bazel-bin/x-pack/packages/ml/aiops_components": +"@kbn/aiops-components@link:x-pack/packages/ml/aiops_components": version "0.0.0" uid "" -"@kbn/aiops-utils@link:bazel-bin/x-pack/packages/ml/aiops_utils": +"@kbn/aiops-utils@link:x-pack/packages/ml/aiops_utils": version "0.0.0" uid "" -"@kbn/alerts@link:bazel-bin/packages/kbn-alerts": +"@kbn/alerts@link:packages/kbn-alerts": version "0.0.0" uid "" -"@kbn/ambient-common-types@link:bazel-bin/packages/kbn-ambient-common-types": +"@kbn/ambient-common-types@link:packages/kbn-ambient-common-types": version "0.0.0" uid "" -"@kbn/ambient-ftr-types@link:bazel-bin/packages/kbn-ambient-ftr-types": +"@kbn/ambient-ftr-types@link:packages/kbn-ambient-ftr-types": version "0.0.0" uid "" -"@kbn/ambient-storybook-types@link:bazel-bin/packages/kbn-ambient-storybook-types": +"@kbn/ambient-storybook-types@link:packages/kbn-ambient-storybook-types": version "0.0.0" uid "" -"@kbn/ambient-ui-types@link:bazel-bin/packages/kbn-ambient-ui-types": +"@kbn/ambient-ui-types@link:packages/kbn-ambient-ui-types": version "0.0.0" uid "" -"@kbn/analytics-client@link:bazel-bin/packages/analytics/client": +"@kbn/analytics-client@link:packages/analytics/client": version "0.0.0" uid "" -"@kbn/analytics-shippers-elastic-v3-browser@link:bazel-bin/packages/analytics/shippers/elastic_v3/browser": +"@kbn/analytics-shippers-elastic-v3-browser@link:packages/analytics/shippers/elastic_v3/browser": version "0.0.0" uid "" -"@kbn/analytics-shippers-elastic-v3-common@link:bazel-bin/packages/analytics/shippers/elastic_v3/common": +"@kbn/analytics-shippers-elastic-v3-common@link:packages/analytics/shippers/elastic_v3/common": version "0.0.0" uid "" -"@kbn/analytics-shippers-elastic-v3-server@link:bazel-bin/packages/analytics/shippers/elastic_v3/server": +"@kbn/analytics-shippers-elastic-v3-server@link:packages/analytics/shippers/elastic_v3/server": version "0.0.0" uid "" -"@kbn/analytics-shippers-fullstory@link:bazel-bin/packages/analytics/shippers/fullstory": +"@kbn/analytics-shippers-fullstory@link:packages/analytics/shippers/fullstory": version "0.0.0" uid "" -"@kbn/analytics-shippers-gainsight@link:bazel-bin/packages/analytics/shippers/gainsight": +"@kbn/analytics-shippers-gainsight@link:packages/analytics/shippers/gainsight": version "0.0.0" uid "" -"@kbn/analytics@link:bazel-bin/packages/kbn-analytics": +"@kbn/analytics@link:packages/kbn-analytics": version "0.0.0" uid "" -"@kbn/apm-config-loader@link:bazel-bin/packages/kbn-apm-config-loader": +"@kbn/apm-config-loader@link:packages/kbn-apm-config-loader": version "0.0.0" uid "" -"@kbn/apm-synthtrace@link:bazel-bin/packages/kbn-apm-synthtrace": +"@kbn/apm-synthtrace@link:packages/kbn-apm-synthtrace": version "0.0.0" uid "" -"@kbn/apm-utils@link:bazel-bin/packages/kbn-apm-utils": +"@kbn/apm-utils@link:packages/kbn-apm-utils": version "0.0.0" uid "" -"@kbn/axe-config@link:bazel-bin/packages/kbn-axe-config": +"@kbn/axe-config@link:packages/kbn-axe-config": version "0.0.0" uid "" -"@kbn/babel-plugin-synthetic-packages@link:bazel-bin/packages/kbn-babel-plugin-synthetic-packages": +"@kbn/babel-plugin-package-imports@link:packages/kbn-babel-plugin-package-imports": version "0.0.0" uid "" -"@kbn/babel-preset@link:bazel-bin/packages/kbn-babel-preset": +"@kbn/babel-preset@link:packages/kbn-babel-preset": version "0.0.0" uid "" -"@kbn/bazel-packages@link:bazel-bin/packages/kbn-bazel-packages": +"@kbn/babel-register@link:packages/kbn-babel-register": version "0.0.0" uid "" -"@kbn/bazel-runner@link:bazel-bin/packages/kbn-bazel-runner": +"@kbn/babel-transform@link:packages/kbn-babel-transform": version "0.0.0" uid "" -"@kbn/cases-components@link:bazel-bin/packages/kbn-cases-components": +"@kbn/bazel-packages@link:packages/kbn-bazel-packages": version "0.0.0" uid "" -"@kbn/chart-icons@link:bazel-bin/packages/kbn-chart-icons": +"@kbn/bazel-runner@link:packages/kbn-bazel-runner": version "0.0.0" uid "" -"@kbn/ci-stats-core@link:bazel-bin/packages/kbn-ci-stats-core": +"@kbn/cases-components@link:packages/kbn-cases-components": version "0.0.0" uid "" -"@kbn/ci-stats-performance-metrics@link:bazel-bin/packages/kbn-ci-stats-performance-metrics": +"@kbn/chart-icons@link:packages/kbn-chart-icons": version "0.0.0" uid "" -"@kbn/ci-stats-reporter@link:bazel-bin/packages/kbn-ci-stats-reporter": +"@kbn/ci-stats-core@link:packages/kbn-ci-stats-core": version "0.0.0" uid "" -"@kbn/cli-dev-mode@link:bazel-bin/packages/kbn-cli-dev-mode": +"@kbn/ci-stats-performance-metrics@link:packages/kbn-ci-stats-performance-metrics": version "0.0.0" uid "" -"@kbn/coloring@link:bazel-bin/packages/kbn-coloring": +"@kbn/ci-stats-reporter@link:packages/kbn-ci-stats-reporter": version "0.0.0" uid "" -"@kbn/config-mocks@link:bazel-bin/packages/kbn-config-mocks": +"@kbn/cli-dev-mode@link:packages/kbn-cli-dev-mode": version "0.0.0" uid "" -"@kbn/config-schema@link:bazel-bin/packages/kbn-config-schema": +"@kbn/coloring@link:packages/kbn-coloring": version "0.0.0" uid "" -"@kbn/config@link:bazel-bin/packages/kbn-config": +"@kbn/config-mocks@link:packages/kbn-config-mocks": + version "0.0.0" + uid "" + +"@kbn/config-schema@link:packages/kbn-config-schema": + version "0.0.0" + uid "" + +"@kbn/config@link:packages/kbn-config": version "0.0.0" uid "" @@ -2829,1347 +2837,1367 @@ version "0.0.0" uid "" -"@kbn/core-analytics-browser-internal@link:bazel-bin/packages/core/analytics/core-analytics-browser-internal": +"@kbn/core-analytics-browser-internal@link:packages/core/analytics/core-analytics-browser-internal": + version "0.0.0" + uid "" + +"@kbn/core-analytics-browser-mocks@link:packages/core/analytics/core-analytics-browser-mocks": + version "0.0.0" + uid "" + +"@kbn/core-analytics-browser@link:packages/core/analytics/core-analytics-browser": + version "0.0.0" + uid "" + +"@kbn/core-analytics-server-internal@link:packages/core/analytics/core-analytics-server-internal": + version "0.0.0" + uid "" + +"@kbn/core-analytics-server-mocks@link:packages/core/analytics/core-analytics-server-mocks": + version "0.0.0" + uid "" + +"@kbn/core-analytics-server@link:packages/core/analytics/core-analytics-server": version "0.0.0" uid "" -"@kbn/core-analytics-browser-mocks@link:bazel-bin/packages/core/analytics/core-analytics-browser-mocks": +"@kbn/core-application-browser-internal@link:packages/core/application/core-application-browser-internal": version "0.0.0" uid "" -"@kbn/core-analytics-browser@link:bazel-bin/packages/core/analytics/core-analytics-browser": +"@kbn/core-application-browser-mocks@link:packages/core/application/core-application-browser-mocks": version "0.0.0" uid "" -"@kbn/core-analytics-server-internal@link:bazel-bin/packages/core/analytics/core-analytics-server-internal": +"@kbn/core-application-browser@link:packages/core/application/core-application-browser": version "0.0.0" uid "" -"@kbn/core-analytics-server-mocks@link:bazel-bin/packages/core/analytics/core-analytics-server-mocks": +"@kbn/core-application-common@link:packages/core/application/core-application-common": version "0.0.0" uid "" -"@kbn/core-analytics-server@link:bazel-bin/packages/core/analytics/core-analytics-server": +"@kbn/core-apps-browser-internal@link:packages/core/apps/core-apps-browser-internal": version "0.0.0" uid "" -"@kbn/core-application-browser-internal@link:bazel-bin/packages/core/application/core-application-browser-internal": +"@kbn/core-apps-browser-mocks@link:packages/core/apps/core-apps-browser-mocks": version "0.0.0" uid "" -"@kbn/core-application-browser-mocks@link:bazel-bin/packages/core/application/core-application-browser-mocks": +"@kbn/core-apps-server-internal@link:packages/core/apps/core-apps-server-internal": version "0.0.0" uid "" -"@kbn/core-application-browser@link:bazel-bin/packages/core/application/core-application-browser": +"@kbn/core-base-browser-internal@link:packages/core/base/core-base-browser-internal": version "0.0.0" uid "" -"@kbn/core-application-common@link:bazel-bin/packages/core/application/core-application-common": +"@kbn/core-base-browser-mocks@link:packages/core/base/core-base-browser-mocks": version "0.0.0" uid "" -"@kbn/core-apps-browser-internal@link:bazel-bin/packages/core/apps/core-apps-browser-internal": +"@kbn/core-base-common-internal@link:packages/core/base/core-base-common-internal": version "0.0.0" uid "" -"@kbn/core-apps-browser-mocks@link:bazel-bin/packages/core/apps/core-apps-browser-mocks": +"@kbn/core-base-common@link:packages/core/base/core-base-common": version "0.0.0" uid "" -"@kbn/core-apps-server-internal@link:bazel-bin/packages/core/apps/core-apps-server-internal": +"@kbn/core-base-server-internal@link:packages/core/base/core-base-server-internal": version "0.0.0" uid "" -"@kbn/core-base-browser-internal@link:bazel-bin/packages/core/base/core-base-browser-internal": +"@kbn/core-base-server-mocks@link:packages/core/base/core-base-server-mocks": version "0.0.0" uid "" -"@kbn/core-base-browser-mocks@link:bazel-bin/packages/core/base/core-base-browser-mocks": +"@kbn/core-capabilities-browser-internal@link:packages/core/capabilities/core-capabilities-browser-internal": version "0.0.0" uid "" -"@kbn/core-base-common-internal@link:bazel-bin/packages/core/base/core-base-common-internal": +"@kbn/core-capabilities-browser-mocks@link:packages/core/capabilities/core-capabilities-browser-mocks": version "0.0.0" uid "" -"@kbn/core-base-common@link:bazel-bin/packages/core/base/core-base-common": +"@kbn/core-capabilities-common@link:packages/core/capabilities/core-capabilities-common": version "0.0.0" uid "" -"@kbn/core-base-server-internal@link:bazel-bin/packages/core/base/core-base-server-internal": +"@kbn/core-capabilities-server-internal@link:packages/core/capabilities/core-capabilities-server-internal": version "0.0.0" uid "" -"@kbn/core-base-server-mocks@link:bazel-bin/packages/core/base/core-base-server-mocks": +"@kbn/core-capabilities-server-mocks@link:packages/core/capabilities/core-capabilities-server-mocks": version "0.0.0" uid "" -"@kbn/core-capabilities-browser-internal@link:bazel-bin/packages/core/capabilities/core-capabilities-browser-internal": +"@kbn/core-capabilities-server@link:packages/core/capabilities/core-capabilities-server": version "0.0.0" uid "" -"@kbn/core-capabilities-browser-mocks@link:bazel-bin/packages/core/capabilities/core-capabilities-browser-mocks": +"@kbn/core-chrome-browser-internal@link:packages/core/chrome/core-chrome-browser-internal": version "0.0.0" uid "" -"@kbn/core-capabilities-common@link:bazel-bin/packages/core/capabilities/core-capabilities-common": +"@kbn/core-chrome-browser-mocks@link:packages/core/chrome/core-chrome-browser-mocks": version "0.0.0" uid "" -"@kbn/core-capabilities-server-internal@link:bazel-bin/packages/core/capabilities/core-capabilities-server-internal": +"@kbn/core-chrome-browser@link:packages/core/chrome/core-chrome-browser": version "0.0.0" uid "" -"@kbn/core-capabilities-server-mocks@link:bazel-bin/packages/core/capabilities/core-capabilities-server-mocks": +"@kbn/core-config-server-internal@link:packages/core/config/core-config-server-internal": version "0.0.0" uid "" -"@kbn/core-capabilities-server@link:bazel-bin/packages/core/capabilities/core-capabilities-server": +"@kbn/core-config-server-mocks@link:packages/core/config/core-config-server-mocks": version "0.0.0" uid "" -"@kbn/core-chrome-browser-internal@link:bazel-bin/packages/core/chrome/core-chrome-browser-internal": +"@kbn/core-deprecations-browser-internal@link:packages/core/deprecations/core-deprecations-browser-internal": version "0.0.0" uid "" -"@kbn/core-chrome-browser-mocks@link:bazel-bin/packages/core/chrome/core-chrome-browser-mocks": +"@kbn/core-deprecations-browser-mocks@link:packages/core/deprecations/core-deprecations-browser-mocks": version "0.0.0" uid "" -"@kbn/core-chrome-browser@link:bazel-bin/packages/core/chrome/core-chrome-browser": +"@kbn/core-deprecations-browser@link:packages/core/deprecations/core-deprecations-browser": version "0.0.0" uid "" -"@kbn/core-config-server-internal@link:bazel-bin/packages/core/config/core-config-server-internal": +"@kbn/core-deprecations-common@link:packages/core/deprecations/core-deprecations-common": version "0.0.0" uid "" -"@kbn/core-config-server-mocks@link:bazel-bin/packages/core/config/core-config-server-mocks": +"@kbn/core-deprecations-server-internal@link:packages/core/deprecations/core-deprecations-server-internal": version "0.0.0" uid "" -"@kbn/core-deprecations-browser-internal@link:bazel-bin/packages/core/deprecations/core-deprecations-browser-internal": +"@kbn/core-deprecations-server-mocks@link:packages/core/deprecations/core-deprecations-server-mocks": version "0.0.0" uid "" -"@kbn/core-deprecations-browser-mocks@link:bazel-bin/packages/core/deprecations/core-deprecations-browser-mocks": +"@kbn/core-deprecations-server@link:packages/core/deprecations/core-deprecations-server": version "0.0.0" uid "" -"@kbn/core-deprecations-browser@link:bazel-bin/packages/core/deprecations/core-deprecations-browser": +"@kbn/core-doc-links-browser-internal@link:packages/core/doc-links/core-doc-links-browser-internal": version "0.0.0" uid "" -"@kbn/core-deprecations-common@link:bazel-bin/packages/core/deprecations/core-deprecations-common": +"@kbn/core-doc-links-browser-mocks@link:packages/core/doc-links/core-doc-links-browser-mocks": version "0.0.0" uid "" -"@kbn/core-deprecations-server-internal@link:bazel-bin/packages/core/deprecations/core-deprecations-server-internal": +"@kbn/core-doc-links-browser@link:packages/core/doc-links/core-doc-links-browser": version "0.0.0" uid "" -"@kbn/core-deprecations-server-mocks@link:bazel-bin/packages/core/deprecations/core-deprecations-server-mocks": +"@kbn/core-doc-links-server-internal@link:packages/core/doc-links/core-doc-links-server-internal": version "0.0.0" uid "" -"@kbn/core-deprecations-server@link:bazel-bin/packages/core/deprecations/core-deprecations-server": +"@kbn/core-doc-links-server-mocks@link:packages/core/doc-links/core-doc-links-server-mocks": version "0.0.0" uid "" -"@kbn/core-doc-links-browser-internal@link:bazel-bin/packages/core/doc-links/core-doc-links-browser-internal": +"@kbn/core-doc-links-server@link:packages/core/doc-links/core-doc-links-server": version "0.0.0" uid "" -"@kbn/core-doc-links-browser-mocks@link:bazel-bin/packages/core/doc-links/core-doc-links-browser-mocks": +"@kbn/core-elasticsearch-client-server-internal@link:packages/core/elasticsearch/core-elasticsearch-client-server-internal": version "0.0.0" uid "" -"@kbn/core-doc-links-browser@link:bazel-bin/packages/core/doc-links/core-doc-links-browser": +"@kbn/core-elasticsearch-client-server-mocks@link:packages/core/elasticsearch/core-elasticsearch-client-server-mocks": version "0.0.0" uid "" -"@kbn/core-doc-links-server-internal@link:bazel-bin/packages/core/doc-links/core-doc-links-server-internal": +"@kbn/core-elasticsearch-client-server@link:packages/core/elasticsearch/core-elasticsearch-client-server": version "0.0.0" uid "" -"@kbn/core-doc-links-server-mocks@link:bazel-bin/packages/core/doc-links/core-doc-links-server-mocks": +"@kbn/core-elasticsearch-server-internal@link:packages/core/elasticsearch/core-elasticsearch-server-internal": version "0.0.0" uid "" -"@kbn/core-doc-links-server@link:bazel-bin/packages/core/doc-links/core-doc-links-server": +"@kbn/core-elasticsearch-server-mocks@link:packages/core/elasticsearch/core-elasticsearch-server-mocks": version "0.0.0" uid "" -"@kbn/core-elasticsearch-client-server-internal@link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-client-server-internal": +"@kbn/core-elasticsearch-server@link:packages/core/elasticsearch/core-elasticsearch-server": version "0.0.0" uid "" -"@kbn/core-elasticsearch-client-server-mocks@link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-client-server-mocks": +"@kbn/core-environment-server-internal@link:packages/core/environment/core-environment-server-internal": version "0.0.0" uid "" -"@kbn/core-elasticsearch-client-server@link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-client-server": +"@kbn/core-environment-server-mocks@link:packages/core/environment/core-environment-server-mocks": version "0.0.0" uid "" -"@kbn/core-elasticsearch-server-internal@link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-server-internal": +"@kbn/core-execution-context-browser-internal@link:packages/core/execution-context/core-execution-context-browser-internal": version "0.0.0" uid "" -"@kbn/core-elasticsearch-server-mocks@link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-server-mocks": +"@kbn/core-execution-context-browser-mocks@link:packages/core/execution-context/core-execution-context-browser-mocks": version "0.0.0" uid "" -"@kbn/core-elasticsearch-server@link:bazel-bin/packages/core/elasticsearch/core-elasticsearch-server": +"@kbn/core-execution-context-browser@link:packages/core/execution-context/core-execution-context-browser": version "0.0.0" uid "" -"@kbn/core-environment-server-internal@link:bazel-bin/packages/core/environment/core-environment-server-internal": +"@kbn/core-execution-context-common@link:packages/core/execution-context/core-execution-context-common": version "0.0.0" uid "" -"@kbn/core-environment-server-mocks@link:bazel-bin/packages/core/environment/core-environment-server-mocks": +"@kbn/core-execution-context-server-internal@link:packages/core/execution-context/core-execution-context-server-internal": version "0.0.0" uid "" -"@kbn/core-execution-context-browser-internal@link:bazel-bin/packages/core/execution-context/core-execution-context-browser-internal": +"@kbn/core-execution-context-server-mocks@link:packages/core/execution-context/core-execution-context-server-mocks": version "0.0.0" uid "" -"@kbn/core-execution-context-browser-mocks@link:bazel-bin/packages/core/execution-context/core-execution-context-browser-mocks": +"@kbn/core-execution-context-server@link:packages/core/execution-context/core-execution-context-server": version "0.0.0" uid "" -"@kbn/core-execution-context-browser@link:bazel-bin/packages/core/execution-context/core-execution-context-browser": +"@kbn/core-fatal-errors-browser-internal@link:packages/core/fatal-errors/core-fatal-errors-browser-internal": version "0.0.0" uid "" -"@kbn/core-execution-context-common@link:bazel-bin/packages/core/execution-context/core-execution-context-common": +"@kbn/core-fatal-errors-browser-mocks@link:packages/core/fatal-errors/core-fatal-errors-browser-mocks": version "0.0.0" uid "" -"@kbn/core-execution-context-server-internal@link:bazel-bin/packages/core/execution-context/core-execution-context-server-internal": +"@kbn/core-fatal-errors-browser@link:packages/core/fatal-errors/core-fatal-errors-browser": version "0.0.0" uid "" -"@kbn/core-execution-context-server-mocks@link:bazel-bin/packages/core/execution-context/core-execution-context-server-mocks": +"@kbn/core-http-browser-internal@link:packages/core/http/core-http-browser-internal": version "0.0.0" uid "" -"@kbn/core-execution-context-server@link:bazel-bin/packages/core/execution-context/core-execution-context-server": +"@kbn/core-http-browser-mocks@link:packages/core/http/core-http-browser-mocks": version "0.0.0" uid "" -"@kbn/core-fatal-errors-browser-internal@link:bazel-bin/packages/core/fatal-errors/core-fatal-errors-browser-internal": +"@kbn/core-http-browser@link:packages/core/http/core-http-browser": version "0.0.0" uid "" -"@kbn/core-fatal-errors-browser-mocks@link:bazel-bin/packages/core/fatal-errors/core-fatal-errors-browser-mocks": +"@kbn/core-http-common@link:packages/core/http/core-http-common": version "0.0.0" uid "" -"@kbn/core-fatal-errors-browser@link:bazel-bin/packages/core/fatal-errors/core-fatal-errors-browser": +"@kbn/core-http-context-server-internal@link:packages/core/http/core-http-context-server-internal": version "0.0.0" uid "" -"@kbn/core-http-browser-internal@link:bazel-bin/packages/core/http/core-http-browser-internal": +"@kbn/core-http-context-server-mocks@link:packages/core/http/core-http-context-server-mocks": version "0.0.0" uid "" -"@kbn/core-http-browser-mocks@link:bazel-bin/packages/core/http/core-http-browser-mocks": +"@kbn/core-http-request-handler-context-server-internal@link:packages/core/http/core-http-request-handler-context-server-internal": version "0.0.0" uid "" -"@kbn/core-http-browser@link:bazel-bin/packages/core/http/core-http-browser": +"@kbn/core-http-request-handler-context-server@link:packages/core/http/core-http-request-handler-context-server": version "0.0.0" uid "" -"@kbn/core-http-common@link:bazel-bin/packages/core/http/core-http-common": +"@kbn/core-http-resources-server-internal@link:packages/core/http/core-http-resources-server-internal": version "0.0.0" uid "" -"@kbn/core-http-context-server-internal@link:bazel-bin/packages/core/http/core-http-context-server-internal": +"@kbn/core-http-resources-server-mocks@link:packages/core/http/core-http-resources-server-mocks": version "0.0.0" uid "" -"@kbn/core-http-context-server-mocks@link:bazel-bin/packages/core/http/core-http-context-server-mocks": +"@kbn/core-http-resources-server@link:packages/core/http/core-http-resources-server": version "0.0.0" uid "" -"@kbn/core-http-request-handler-context-server-internal@link:bazel-bin/packages/core/http/core-http-request-handler-context-server-internal": +"@kbn/core-http-router-server-internal@link:packages/core/http/core-http-router-server-internal": version "0.0.0" uid "" -"@kbn/core-http-request-handler-context-server@link:bazel-bin/packages/core/http/core-http-request-handler-context-server": +"@kbn/core-http-router-server-mocks@link:packages/core/http/core-http-router-server-mocks": version "0.0.0" uid "" -"@kbn/core-http-resources-server-internal@link:bazel-bin/packages/core/http/core-http-resources-server-internal": +"@kbn/core-http-server-internal@link:packages/core/http/core-http-server-internal": version "0.0.0" uid "" -"@kbn/core-http-resources-server-mocks@link:bazel-bin/packages/core/http/core-http-resources-server-mocks": +"@kbn/core-http-server-mocks@link:packages/core/http/core-http-server-mocks": version "0.0.0" uid "" -"@kbn/core-http-resources-server@link:bazel-bin/packages/core/http/core-http-resources-server": +"@kbn/core-http-server@link:packages/core/http/core-http-server": version "0.0.0" uid "" -"@kbn/core-http-router-server-internal@link:bazel-bin/packages/core/http/core-http-router-server-internal": +"@kbn/core-i18n-browser-internal@link:packages/core/i18n/core-i18n-browser-internal": version "0.0.0" uid "" -"@kbn/core-http-router-server-mocks@link:bazel-bin/packages/core/http/core-http-router-server-mocks": +"@kbn/core-i18n-browser-mocks@link:packages/core/i18n/core-i18n-browser-mocks": version "0.0.0" uid "" -"@kbn/core-http-server-internal@link:bazel-bin/packages/core/http/core-http-server-internal": +"@kbn/core-i18n-browser@link:packages/core/i18n/core-i18n-browser": version "0.0.0" uid "" -"@kbn/core-http-server-mocks@link:bazel-bin/packages/core/http/core-http-server-mocks": +"@kbn/core-i18n-server-internal@link:packages/core/i18n/core-i18n-server-internal": version "0.0.0" uid "" -"@kbn/core-http-server@link:bazel-bin/packages/core/http/core-http-server": +"@kbn/core-i18n-server-mocks@link:packages/core/i18n/core-i18n-server-mocks": version "0.0.0" uid "" -"@kbn/core-i18n-browser-internal@link:bazel-bin/packages/core/i18n/core-i18n-browser-internal": +"@kbn/core-i18n-server@link:packages/core/i18n/core-i18n-server": version "0.0.0" uid "" -"@kbn/core-i18n-browser-mocks@link:bazel-bin/packages/core/i18n/core-i18n-browser-mocks": +"@kbn/core-injected-metadata-browser-internal@link:packages/core/injected-metadata/core-injected-metadata-browser-internal": version "0.0.0" uid "" -"@kbn/core-i18n-browser@link:bazel-bin/packages/core/i18n/core-i18n-browser": +"@kbn/core-injected-metadata-browser-mocks@link:packages/core/injected-metadata/core-injected-metadata-browser-mocks": version "0.0.0" uid "" -"@kbn/core-i18n-server-internal@link:bazel-bin/packages/core/i18n/core-i18n-server-internal": +"@kbn/core-injected-metadata-common-internal@link:packages/core/injected-metadata/core-injected-metadata-common-internal": version "0.0.0" uid "" -"@kbn/core-i18n-server-mocks@link:bazel-bin/packages/core/i18n/core-i18n-server-mocks": +"@kbn/core-integrations-browser-internal@link:packages/core/integrations/core-integrations-browser-internal": version "0.0.0" uid "" -"@kbn/core-i18n-server@link:bazel-bin/packages/core/i18n/core-i18n-server": +"@kbn/core-integrations-browser-mocks@link:packages/core/integrations/core-integrations-browser-mocks": version "0.0.0" uid "" -"@kbn/core-injected-metadata-browser-internal@link:bazel-bin/packages/core/injected-metadata/core-injected-metadata-browser-internal": +"@kbn/core-lifecycle-browser-internal@link:packages/core/lifecycle/core-lifecycle-browser-internal": version "0.0.0" uid "" -"@kbn/core-injected-metadata-browser-mocks@link:bazel-bin/packages/core/injected-metadata/core-injected-metadata-browser-mocks": +"@kbn/core-lifecycle-browser-mocks@link:packages/core/lifecycle/core-lifecycle-browser-mocks": version "0.0.0" uid "" -"@kbn/core-injected-metadata-common-internal@link:bazel-bin/packages/core/injected-metadata/core-injected-metadata-common-internal": +"@kbn/core-lifecycle-browser@link:packages/core/lifecycle/core-lifecycle-browser": version "0.0.0" uid "" -"@kbn/core-integrations-browser-internal@link:bazel-bin/packages/core/integrations/core-integrations-browser-internal": +"@kbn/core-lifecycle-server-internal@link:packages/core/lifecycle/core-lifecycle-server-internal": version "0.0.0" uid "" -"@kbn/core-integrations-browser-mocks@link:bazel-bin/packages/core/integrations/core-integrations-browser-mocks": +"@kbn/core-lifecycle-server-mocks@link:packages/core/lifecycle/core-lifecycle-server-mocks": version "0.0.0" uid "" -"@kbn/core-lifecycle-browser-internal@link:bazel-bin/packages/core/lifecycle/core-lifecycle-browser-internal": +"@kbn/core-lifecycle-server@link:packages/core/lifecycle/core-lifecycle-server": version "0.0.0" uid "" -"@kbn/core-lifecycle-browser-mocks@link:bazel-bin/packages/core/lifecycle/core-lifecycle-browser-mocks": +"@kbn/core-logging-browser-internal@link:packages/core/logging/core-logging-browser-internal": version "0.0.0" uid "" -"@kbn/core-lifecycle-browser@link:bazel-bin/packages/core/lifecycle/core-lifecycle-browser": +"@kbn/core-logging-browser-mocks@link:packages/core/logging/core-logging-browser-mocks": version "0.0.0" uid "" -"@kbn/core-lifecycle-server-internal@link:bazel-bin/packages/core/lifecycle/core-lifecycle-server-internal": +"@kbn/core-logging-common-internal@link:packages/core/logging/core-logging-common-internal": version "0.0.0" uid "" -"@kbn/core-lifecycle-server-mocks@link:bazel-bin/packages/core/lifecycle/core-lifecycle-server-mocks": +"@kbn/core-logging-server-internal@link:packages/core/logging/core-logging-server-internal": version "0.0.0" uid "" -"@kbn/core-lifecycle-server@link:bazel-bin/packages/core/lifecycle/core-lifecycle-server": +"@kbn/core-logging-server-mocks@link:packages/core/logging/core-logging-server-mocks": version "0.0.0" uid "" -"@kbn/core-logging-browser-internal@link:bazel-bin/packages/core/logging/core-logging-browser-internal": +"@kbn/core-logging-server@link:packages/core/logging/core-logging-server": version "0.0.0" uid "" -"@kbn/core-logging-browser-mocks@link:bazel-bin/packages/core/logging/core-logging-browser-mocks": +"@kbn/core-metrics-collectors-server-internal@link:packages/core/metrics/core-metrics-collectors-server-internal": version "0.0.0" uid "" -"@kbn/core-logging-common-internal@link:bazel-bin/packages/core/logging/core-logging-common-internal": +"@kbn/core-metrics-collectors-server-mocks@link:packages/core/metrics/core-metrics-collectors-server-mocks": version "0.0.0" uid "" -"@kbn/core-logging-server-internal@link:bazel-bin/packages/core/logging/core-logging-server-internal": +"@kbn/core-metrics-server-internal@link:packages/core/metrics/core-metrics-server-internal": version "0.0.0" uid "" -"@kbn/core-logging-server-mocks@link:bazel-bin/packages/core/logging/core-logging-server-mocks": +"@kbn/core-metrics-server-mocks@link:packages/core/metrics/core-metrics-server-mocks": version "0.0.0" uid "" -"@kbn/core-logging-server@link:bazel-bin/packages/core/logging/core-logging-server": +"@kbn/core-metrics-server@link:packages/core/metrics/core-metrics-server": version "0.0.0" uid "" -"@kbn/core-metrics-collectors-server-internal@link:bazel-bin/packages/core/metrics/core-metrics-collectors-server-internal": +"@kbn/core-mount-utils-browser-internal@link:packages/core/mount-utils/core-mount-utils-browser-internal": version "0.0.0" uid "" -"@kbn/core-metrics-collectors-server-mocks@link:bazel-bin/packages/core/metrics/core-metrics-collectors-server-mocks": +"@kbn/core-mount-utils-browser@link:packages/core/mount-utils/core-mount-utils-browser": version "0.0.0" uid "" -"@kbn/core-metrics-server-internal@link:bazel-bin/packages/core/metrics/core-metrics-server-internal": +"@kbn/core-node-server-internal@link:packages/core/node/core-node-server-internal": version "0.0.0" uid "" -"@kbn/core-metrics-server-mocks@link:bazel-bin/packages/core/metrics/core-metrics-server-mocks": +"@kbn/core-node-server-mocks@link:packages/core/node/core-node-server-mocks": version "0.0.0" uid "" -"@kbn/core-metrics-server@link:bazel-bin/packages/core/metrics/core-metrics-server": +"@kbn/core-node-server@link:packages/core/node/core-node-server": version "0.0.0" uid "" -"@kbn/core-mount-utils-browser-internal@link:bazel-bin/packages/core/mount-utils/core-mount-utils-browser-internal": +"@kbn/core-notifications-browser-internal@link:packages/core/notifications/core-notifications-browser-internal": version "0.0.0" uid "" -"@kbn/core-mount-utils-browser@link:bazel-bin/packages/core/mount-utils/core-mount-utils-browser": +"@kbn/core-notifications-browser-mocks@link:packages/core/notifications/core-notifications-browser-mocks": version "0.0.0" uid "" -"@kbn/core-node-server-internal@link:bazel-bin/packages/core/node/core-node-server-internal": +"@kbn/core-notifications-browser@link:packages/core/notifications/core-notifications-browser": version "0.0.0" uid "" -"@kbn/core-node-server-mocks@link:bazel-bin/packages/core/node/core-node-server-mocks": +"@kbn/core-overlays-browser-internal@link:packages/core/overlays/core-overlays-browser-internal": version "0.0.0" uid "" -"@kbn/core-node-server@link:bazel-bin/packages/core/node/core-node-server": +"@kbn/core-overlays-browser-mocks@link:packages/core/overlays/core-overlays-browser-mocks": version "0.0.0" uid "" -"@kbn/core-notifications-browser-internal@link:bazel-bin/packages/core/notifications/core-notifications-browser-internal": +"@kbn/core-overlays-browser@link:packages/core/overlays/core-overlays-browser": version "0.0.0" uid "" -"@kbn/core-notifications-browser-mocks@link:bazel-bin/packages/core/notifications/core-notifications-browser-mocks": +"@kbn/core-plugins-base-server-internal@link:packages/core/plugins/core-plugins-base-server-internal": version "0.0.0" uid "" -"@kbn/core-notifications-browser@link:bazel-bin/packages/core/notifications/core-notifications-browser": +"@kbn/core-plugins-browser-internal@link:packages/core/plugins/core-plugins-browser-internal": version "0.0.0" uid "" -"@kbn/core-overlays-browser-internal@link:bazel-bin/packages/core/overlays/core-overlays-browser-internal": +"@kbn/core-plugins-browser-mocks@link:packages/core/plugins/core-plugins-browser-mocks": version "0.0.0" uid "" -"@kbn/core-overlays-browser-mocks@link:bazel-bin/packages/core/overlays/core-overlays-browser-mocks": +"@kbn/core-plugins-browser@link:packages/core/plugins/core-plugins-browser": version "0.0.0" uid "" -"@kbn/core-overlays-browser@link:bazel-bin/packages/core/overlays/core-overlays-browser": +"@kbn/core-plugins-server-internal@link:packages/core/plugins/core-plugins-server-internal": version "0.0.0" uid "" -"@kbn/core-plugins-base-server-internal@link:bazel-bin/packages/core/plugins/core-plugins-base-server-internal": +"@kbn/core-plugins-server-mocks@link:packages/core/plugins/core-plugins-server-mocks": version "0.0.0" uid "" -"@kbn/core-plugins-browser-internal@link:bazel-bin/packages/core/plugins/core-plugins-browser-internal": +"@kbn/core-plugins-server@link:packages/core/plugins/core-plugins-server": version "0.0.0" uid "" -"@kbn/core-plugins-browser-mocks@link:bazel-bin/packages/core/plugins/core-plugins-browser-mocks": +"@kbn/core-preboot-server-internal@link:packages/core/preboot/core-preboot-server-internal": version "0.0.0" uid "" -"@kbn/core-plugins-browser@link:bazel-bin/packages/core/plugins/core-plugins-browser": +"@kbn/core-preboot-server-mocks@link:packages/core/preboot/core-preboot-server-mocks": version "0.0.0" uid "" -"@kbn/core-plugins-server-internal@link:bazel-bin/packages/core/plugins/core-plugins-server-internal": +"@kbn/core-preboot-server@link:packages/core/preboot/core-preboot-server": version "0.0.0" uid "" -"@kbn/core-plugins-server-mocks@link:bazel-bin/packages/core/plugins/core-plugins-server-mocks": +"@kbn/core-rendering-browser-internal@link:packages/core/rendering/core-rendering-browser-internal": version "0.0.0" uid "" -"@kbn/core-plugins-server@link:bazel-bin/packages/core/plugins/core-plugins-server": +"@kbn/core-rendering-browser-mocks@link:packages/core/rendering/core-rendering-browser-mocks": version "0.0.0" uid "" -"@kbn/core-preboot-server-internal@link:bazel-bin/packages/core/preboot/core-preboot-server-internal": +"@kbn/core-rendering-server-internal@link:packages/core/rendering/core-rendering-server-internal": version "0.0.0" uid "" -"@kbn/core-preboot-server-mocks@link:bazel-bin/packages/core/preboot/core-preboot-server-mocks": +"@kbn/core-rendering-server-mocks@link:packages/core/rendering/core-rendering-server-mocks": version "0.0.0" uid "" -"@kbn/core-preboot-server@link:bazel-bin/packages/core/preboot/core-preboot-server": +"@kbn/core-root-browser-internal@link:packages/core/root/core-root-browser-internal": version "0.0.0" uid "" -"@kbn/core-rendering-browser-internal@link:bazel-bin/packages/core/rendering/core-rendering-browser-internal": +"@kbn/core-root-server-internal@link:packages/core/root/core-root-server-internal": version "0.0.0" uid "" -"@kbn/core-rendering-browser-mocks@link:bazel-bin/packages/core/rendering/core-rendering-browser-mocks": +"@kbn/core-saved-objects-api-browser@link:packages/core/saved-objects/core-saved-objects-api-browser": version "0.0.0" uid "" -"@kbn/core-rendering-server-internal@link:bazel-bin/packages/core/rendering/core-rendering-server-internal": +"@kbn/core-saved-objects-api-server-internal@link:packages/core/saved-objects/core-saved-objects-api-server-internal": version "0.0.0" uid "" -"@kbn/core-rendering-server-mocks@link:bazel-bin/packages/core/rendering/core-rendering-server-mocks": +"@kbn/core-saved-objects-api-server-mocks@link:packages/core/saved-objects/core-saved-objects-api-server-mocks": version "0.0.0" uid "" -"@kbn/core-root-browser-internal@link:bazel-bin/packages/core/root/core-root-browser-internal": +"@kbn/core-saved-objects-api-server@link:packages/core/saved-objects/core-saved-objects-api-server": version "0.0.0" uid "" -"@kbn/core-root-server-internal@link:bazel-bin/packages/core/root/core-root-server-internal": +"@kbn/core-saved-objects-base-server-internal@link:packages/core/saved-objects/core-saved-objects-base-server-internal": version "0.0.0" uid "" -"@kbn/core-saved-objects-api-browser@link:bazel-bin/packages/core/saved-objects/core-saved-objects-api-browser": +"@kbn/core-saved-objects-base-server-mocks@link:packages/core/saved-objects/core-saved-objects-base-server-mocks": version "0.0.0" uid "" -"@kbn/core-saved-objects-api-server-internal@link:bazel-bin/packages/core/saved-objects/core-saved-objects-api-server-internal": +"@kbn/core-saved-objects-browser-internal@link:packages/core/saved-objects/core-saved-objects-browser-internal": version "0.0.0" uid "" -"@kbn/core-saved-objects-api-server-mocks@link:bazel-bin/packages/core/saved-objects/core-saved-objects-api-server-mocks": +"@kbn/core-saved-objects-browser-mocks@link:packages/core/saved-objects/core-saved-objects-browser-mocks": version "0.0.0" uid "" -"@kbn/core-saved-objects-api-server@link:bazel-bin/packages/core/saved-objects/core-saved-objects-api-server": +"@kbn/core-saved-objects-browser@link:packages/core/saved-objects/core-saved-objects-browser": version "0.0.0" uid "" -"@kbn/core-saved-objects-base-server-internal@link:bazel-bin/packages/core/saved-objects/core-saved-objects-base-server-internal": +"@kbn/core-saved-objects-common@link:packages/core/saved-objects/core-saved-objects-common": version "0.0.0" uid "" -"@kbn/core-saved-objects-base-server-mocks@link:bazel-bin/packages/core/saved-objects/core-saved-objects-base-server-mocks": +"@kbn/core-saved-objects-import-export-server-internal@link:packages/core/saved-objects/core-saved-objects-import-export-server-internal": version "0.0.0" uid "" -"@kbn/core-saved-objects-browser-internal@link:bazel-bin/packages/core/saved-objects/core-saved-objects-browser-internal": +"@kbn/core-saved-objects-import-export-server-mocks@link:packages/core/saved-objects/core-saved-objects-import-export-server-mocks": version "0.0.0" uid "" -"@kbn/core-saved-objects-browser-mocks@link:bazel-bin/packages/core/saved-objects/core-saved-objects-browser-mocks": +"@kbn/core-saved-objects-migration-server-internal@link:packages/core/saved-objects/core-saved-objects-migration-server-internal": version "0.0.0" uid "" -"@kbn/core-saved-objects-browser@link:bazel-bin/packages/core/saved-objects/core-saved-objects-browser": +"@kbn/core-saved-objects-migration-server-mocks@link:packages/core/saved-objects/core-saved-objects-migration-server-mocks": version "0.0.0" uid "" -"@kbn/core-saved-objects-common@link:bazel-bin/packages/core/saved-objects/core-saved-objects-common": +"@kbn/core-saved-objects-server-internal@link:packages/core/saved-objects/core-saved-objects-server-internal": version "0.0.0" uid "" -"@kbn/core-saved-objects-import-export-server-internal@link:bazel-bin/packages/core/saved-objects/core-saved-objects-import-export-server-internal": +"@kbn/core-saved-objects-server-mocks@link:packages/core/saved-objects/core-saved-objects-server-mocks": version "0.0.0" uid "" -"@kbn/core-saved-objects-import-export-server-mocks@link:bazel-bin/packages/core/saved-objects/core-saved-objects-import-export-server-mocks": +"@kbn/core-saved-objects-server@link:packages/core/saved-objects/core-saved-objects-server": version "0.0.0" uid "" -"@kbn/core-saved-objects-migration-server-internal@link:bazel-bin/packages/core/saved-objects/core-saved-objects-migration-server-internal": +"@kbn/core-saved-objects-utils-server@link:packages/core/saved-objects/core-saved-objects-utils-server": version "0.0.0" uid "" -"@kbn/core-saved-objects-migration-server-mocks@link:bazel-bin/packages/core/saved-objects/core-saved-objects-migration-server-mocks": +"@kbn/core-status-common-internal@link:packages/core/status/core-status-common-internal": version "0.0.0" uid "" -"@kbn/core-saved-objects-server-internal@link:bazel-bin/packages/core/saved-objects/core-saved-objects-server-internal": +"@kbn/core-status-common@link:packages/core/status/core-status-common": version "0.0.0" uid "" -"@kbn/core-saved-objects-server-mocks@link:bazel-bin/packages/core/saved-objects/core-saved-objects-server-mocks": +"@kbn/core-status-server-internal@link:packages/core/status/core-status-server-internal": version "0.0.0" uid "" -"@kbn/core-saved-objects-server@link:bazel-bin/packages/core/saved-objects/core-saved-objects-server": +"@kbn/core-status-server-mocks@link:packages/core/status/core-status-server-mocks": version "0.0.0" uid "" -"@kbn/core-saved-objects-utils-server@link:bazel-bin/packages/core/saved-objects/core-saved-objects-utils-server": +"@kbn/core-status-server@link:packages/core/status/core-status-server": version "0.0.0" uid "" -"@kbn/core-status-common-internal@link:bazel-bin/packages/core/status/core-status-common-internal": +"@kbn/core-test-helpers-deprecations-getters@link:packages/core/test-helpers/core-test-helpers-deprecations-getters": version "0.0.0" uid "" -"@kbn/core-status-common@link:bazel-bin/packages/core/status/core-status-common": +"@kbn/core-test-helpers-http-setup-browser@link:packages/core/test-helpers/core-test-helpers-http-setup-browser": version "0.0.0" uid "" -"@kbn/core-status-server-internal@link:bazel-bin/packages/core/status/core-status-server-internal": +"@kbn/core-test-helpers-kbn-server@link:packages/core/test-helpers/core-test-helpers-kbn-server": version "0.0.0" uid "" -"@kbn/core-status-server-mocks@link:bazel-bin/packages/core/status/core-status-server-mocks": +"@kbn/core-test-helpers-so-type-serializer@link:packages/core/test-helpers/core-test-helpers-so-type-serializer": version "0.0.0" uid "" -"@kbn/core-status-server@link:bazel-bin/packages/core/status/core-status-server": +"@kbn/core-test-helpers-test-utils@link:packages/core/test-helpers/core-test-helpers-test-utils": version "0.0.0" uid "" -"@kbn/core-test-helpers-deprecations-getters@link:bazel-bin/packages/core/test-helpers/core-test-helpers-deprecations-getters": +"@kbn/core-theme-browser-internal@link:packages/core/theme/core-theme-browser-internal": version "0.0.0" uid "" -"@kbn/core-test-helpers-http-setup-browser@link:bazel-bin/packages/core/test-helpers/core-test-helpers-http-setup-browser": +"@kbn/core-theme-browser-mocks@link:packages/core/theme/core-theme-browser-mocks": version "0.0.0" uid "" -"@kbn/core-test-helpers-kbn-server@link:bazel-bin/packages/core/test-helpers/core-test-helpers-kbn-server": +"@kbn/core-theme-browser@link:packages/core/theme/core-theme-browser": version "0.0.0" uid "" -"@kbn/core-test-helpers-so-type-serializer@link:bazel-bin/packages/core/test-helpers/core-test-helpers-so-type-serializer": +"@kbn/core-ui-settings-browser-internal@link:packages/core/ui-settings/core-ui-settings-browser-internal": version "0.0.0" uid "" -"@kbn/core-test-helpers-test-utils@link:bazel-bin/packages/core/test-helpers/core-test-helpers-test-utils": +"@kbn/core-ui-settings-browser-mocks@link:packages/core/ui-settings/core-ui-settings-browser-mocks": version "0.0.0" uid "" -"@kbn/core-theme-browser-internal@link:bazel-bin/packages/core/theme/core-theme-browser-internal": +"@kbn/core-ui-settings-browser@link:packages/core/ui-settings/core-ui-settings-browser": version "0.0.0" uid "" -"@kbn/core-theme-browser-mocks@link:bazel-bin/packages/core/theme/core-theme-browser-mocks": +"@kbn/core-ui-settings-common@link:packages/core/ui-settings/core-ui-settings-common": version "0.0.0" uid "" -"@kbn/core-theme-browser@link:bazel-bin/packages/core/theme/core-theme-browser": +"@kbn/core-ui-settings-server-internal@link:packages/core/ui-settings/core-ui-settings-server-internal": version "0.0.0" uid "" -"@kbn/core-ui-settings-browser-internal@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-internal": +"@kbn/core-ui-settings-server-mocks@link:packages/core/ui-settings/core-ui-settings-server-mocks": version "0.0.0" uid "" -"@kbn/core-ui-settings-browser-mocks@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-mocks": +"@kbn/core-ui-settings-server@link:packages/core/ui-settings/core-ui-settings-server": version "0.0.0" uid "" -"@kbn/core-ui-settings-browser@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser": +"@kbn/core-usage-data-base-server-internal@link:packages/core/usage-data/core-usage-data-base-server-internal": version "0.0.0" uid "" -"@kbn/core-ui-settings-common@link:bazel-bin/packages/core/ui-settings/core-ui-settings-common": +"@kbn/core-usage-data-server-internal@link:packages/core/usage-data/core-usage-data-server-internal": version "0.0.0" uid "" -"@kbn/core-ui-settings-server-internal@link:bazel-bin/packages/core/ui-settings/core-ui-settings-server-internal": +"@kbn/core-usage-data-server-mocks@link:packages/core/usage-data/core-usage-data-server-mocks": version "0.0.0" uid "" -"@kbn/core-ui-settings-server-mocks@link:bazel-bin/packages/core/ui-settings/core-ui-settings-server-mocks": +"@kbn/core-usage-data-server@link:packages/core/usage-data/core-usage-data-server": version "0.0.0" uid "" -"@kbn/core-ui-settings-server@link:bazel-bin/packages/core/ui-settings/core-ui-settings-server": +"@kbn/crypto-browser@link:packages/kbn-crypto-browser": version "0.0.0" uid "" -"@kbn/core-usage-data-base-server-internal@link:bazel-bin/packages/core/usage-data/core-usage-data-base-server-internal": +"@kbn/crypto@link:packages/kbn-crypto": version "0.0.0" uid "" -"@kbn/core-usage-data-server-internal@link:bazel-bin/packages/core/usage-data/core-usage-data-server-internal": +"@kbn/cypress-config@link:packages/kbn-cypress-config": version "0.0.0" uid "" -"@kbn/core-usage-data-server-mocks@link:bazel-bin/packages/core/usage-data/core-usage-data-server-mocks": +"@kbn/datemath@link:packages/kbn-datemath": version "0.0.0" uid "" -"@kbn/core-usage-data-server@link:bazel-bin/packages/core/usage-data/core-usage-data-server": +"@kbn/dev-cli-errors@link:packages/kbn-dev-cli-errors": version "0.0.0" uid "" -"@kbn/crypto-browser@link:bazel-bin/packages/kbn-crypto-browser": +"@kbn/dev-cli-runner@link:packages/kbn-dev-cli-runner": version "0.0.0" uid "" -"@kbn/crypto@link:bazel-bin/packages/kbn-crypto": +"@kbn/dev-proc-runner@link:packages/kbn-dev-proc-runner": version "0.0.0" uid "" -"@kbn/datemath@link:bazel-bin/packages/kbn-datemath": +"@kbn/dev-utils@link:packages/kbn-dev-utils": version "0.0.0" uid "" -"@kbn/dev-cli-errors@link:bazel-bin/packages/kbn-dev-cli-errors": +"@kbn/doc-links@link:packages/kbn-doc-links": version "0.0.0" uid "" -"@kbn/dev-cli-runner@link:bazel-bin/packages/kbn-dev-cli-runner": +"@kbn/docs-utils@link:packages/kbn-docs-utils": version "0.0.0" uid "" -"@kbn/dev-proc-runner@link:bazel-bin/packages/kbn-dev-proc-runner": +"@kbn/ebt-tools@link:packages/kbn-ebt-tools": version "0.0.0" uid "" -"@kbn/dev-utils@link:bazel-bin/packages/kbn-dev-utils": +"@kbn/ecs@link:packages/kbn-ecs": version "0.0.0" uid "" -"@kbn/doc-links@link:bazel-bin/packages/kbn-doc-links": +"@kbn/es-archiver@link:packages/kbn-es-archiver": version "0.0.0" uid "" -"@kbn/docs-utils@link:bazel-bin/packages/kbn-docs-utils": +"@kbn/es-errors@link:packages/kbn-es-errors": version "0.0.0" uid "" -"@kbn/ebt-tools@link:bazel-bin/packages/kbn-ebt-tools": +"@kbn/es-query@link:packages/kbn-es-query": version "0.0.0" uid "" -"@kbn/ecs@link:bazel-bin/packages/kbn-ecs": +"@kbn/es-types@link:packages/kbn-es-types": version "0.0.0" uid "" -"@kbn/es-archiver@link:bazel-bin/packages/kbn-es-archiver": +"@kbn/es@link:packages/kbn-es": version "0.0.0" uid "" -"@kbn/es-errors@link:bazel-bin/packages/kbn-es-errors": +"@kbn/eslint-config@link:packages/kbn-eslint-config": version "0.0.0" uid "" -"@kbn/es-query@link:bazel-bin/packages/kbn-es-query": +"@kbn/eslint-plugin-disable@link:packages/kbn-eslint-plugin-disable": version "0.0.0" uid "" -"@kbn/es-types@link:bazel-bin/packages/kbn-es-types": +"@kbn/eslint-plugin-eslint@link:packages/kbn-eslint-plugin-eslint": version "0.0.0" uid "" -"@kbn/es@link:bazel-bin/packages/kbn-es": +"@kbn/eslint-plugin-imports@link:packages/kbn-eslint-plugin-imports": version "0.0.0" uid "" -"@kbn/eslint-config@link:bazel-bin/packages/kbn-eslint-config": +"@kbn/expect@link:packages/kbn-expect": version "0.0.0" uid "" -"@kbn/eslint-plugin-disable@link:bazel-bin/packages/kbn-eslint-plugin-disable": +"@kbn/failed-test-reporter-cli@link:packages/kbn-failed-test-reporter-cli": version "0.0.0" uid "" -"@kbn/eslint-plugin-eslint@link:bazel-bin/packages/kbn-eslint-plugin-eslint": +"@kbn/field-types@link:packages/kbn-field-types": version "0.0.0" uid "" -"@kbn/eslint-plugin-imports@link:bazel-bin/packages/kbn-eslint-plugin-imports": +"@kbn/find-used-node-modules@link:packages/kbn-find-used-node-modules": version "0.0.0" uid "" -"@kbn/expect@link:bazel-bin/packages/kbn-expect": +"@kbn/flot-charts@link:packages/kbn-flot-charts": version "0.0.0" uid "" -"@kbn/failed-test-reporter-cli@link:bazel-bin/packages/kbn-failed-test-reporter-cli": +"@kbn/ftr-common-functional-services@link:packages/kbn-ftr-common-functional-services": version "0.0.0" uid "" -"@kbn/field-types@link:bazel-bin/packages/kbn-field-types": +"@kbn/ftr-screenshot-filename@link:packages/kbn-ftr-screenshot-filename": version "0.0.0" uid "" -"@kbn/find-used-node-modules@link:bazel-bin/packages/kbn-find-used-node-modules": +"@kbn/generate@link:packages/kbn-generate": version "0.0.0" uid "" -"@kbn/flot-charts@link:bazel-bin/packages/kbn-flot-charts": +"@kbn/get-repo-files@link:packages/kbn-get-repo-files": version "0.0.0" uid "" -"@kbn/ftr-common-functional-services@link:bazel-bin/packages/kbn-ftr-common-functional-services": +"@kbn/guided-onboarding@link:packages/kbn-guided-onboarding": version "0.0.0" uid "" -"@kbn/ftr-screenshot-filename@link:bazel-bin/packages/kbn-ftr-screenshot-filename": +"@kbn/handlebars@link:packages/kbn-handlebars": version "0.0.0" uid "" -"@kbn/generate@link:bazel-bin/packages/kbn-generate": +"@kbn/hapi-mocks@link:packages/kbn-hapi-mocks": version "0.0.0" uid "" -"@kbn/get-repo-files@link:bazel-bin/packages/kbn-get-repo-files": +"@kbn/health-gateway-server@link:packages/kbn-health-gateway-server": version "0.0.0" uid "" -"@kbn/guided-onboarding@link:bazel-bin/packages/kbn-guided-onboarding": +"@kbn/home-sample-data-card@link:packages/home/sample_data_card": version "0.0.0" uid "" -"@kbn/handlebars@link:bazel-bin/packages/kbn-handlebars": +"@kbn/home-sample-data-tab@link:packages/home/sample_data_tab": version "0.0.0" uid "" -"@kbn/hapi-mocks@link:bazel-bin/packages/kbn-hapi-mocks": +"@kbn/home-sample-data-types@link:packages/home/sample_data_types": version "0.0.0" uid "" -"@kbn/health-gateway-server@link:bazel-bin/packages/kbn-health-gateway-server": +"@kbn/i18n-react@link:packages/kbn-i18n-react": version "0.0.0" uid "" -"@kbn/home-sample-data-card@link:bazel-bin/packages/home/sample_data_card": +"@kbn/i18n@link:packages/kbn-i18n": version "0.0.0" uid "" -"@kbn/home-sample-data-tab@link:bazel-bin/packages/home/sample_data_tab": +"@kbn/import-resolver@link:packages/kbn-import-resolver": version "0.0.0" uid "" -"@kbn/home-sample-data-types@link:bazel-bin/packages/home/sample_data_types": +"@kbn/interpreter@link:packages/kbn-interpreter": version "0.0.0" uid "" -"@kbn/i18n-react@link:bazel-bin/packages/kbn-i18n-react": +"@kbn/io-ts-utils@link:packages/kbn-io-ts-utils": version "0.0.0" uid "" -"@kbn/i18n@link:bazel-bin/packages/kbn-i18n": +"@kbn/jest-serializers@link:packages/kbn-jest-serializers": version "0.0.0" uid "" -"@kbn/import-resolver@link:bazel-bin/packages/kbn-import-resolver": +"@kbn/journeys@link:packages/kbn-journeys": version "0.0.0" uid "" -"@kbn/interpreter@link:bazel-bin/packages/kbn-interpreter": +"@kbn/kibana-manifest-schema@link:packages/kbn-kibana-manifest-schema": version "0.0.0" uid "" -"@kbn/io-ts-utils@link:bazel-bin/packages/kbn-io-ts-utils": +"@kbn/language-documentation-popover@link:packages/kbn-language-documentation-popover": version "0.0.0" uid "" -"@kbn/jest-serializers@link:bazel-bin/packages/kbn-jest-serializers": +"@kbn/logging-mocks@link:packages/kbn-logging-mocks": version "0.0.0" uid "" -"@kbn/journeys@link:bazel-bin/packages/kbn-journeys": +"@kbn/logging@link:packages/kbn-logging": version "0.0.0" uid "" -"@kbn/kibana-manifest-schema@link:bazel-bin/packages/kbn-kibana-manifest-schema": +"@kbn/managed-vscode-config-cli@link:packages/kbn-managed-vscode-config-cli": version "0.0.0" uid "" -"@kbn/language-documentation-popover@link:bazel-bin/packages/kbn-language-documentation-popover": +"@kbn/managed-vscode-config@link:packages/kbn-managed-vscode-config": version "0.0.0" uid "" -"@kbn/logging-mocks@link:bazel-bin/packages/kbn-logging-mocks": +"@kbn/mapbox-gl@link:packages/kbn-mapbox-gl": version "0.0.0" uid "" -"@kbn/logging@link:bazel-bin/packages/kbn-logging": +"@kbn/ml-agg-utils@link:x-pack/packages/ml/agg_utils": version "0.0.0" uid "" -"@kbn/managed-vscode-config-cli@link:bazel-bin/packages/kbn-managed-vscode-config-cli": +"@kbn/ml-is-populated-object@link:x-pack/packages/ml/is_populated_object": version "0.0.0" uid "" -"@kbn/managed-vscode-config@link:bazel-bin/packages/kbn-managed-vscode-config": +"@kbn/ml-string-hash@link:x-pack/packages/ml/string_hash": version "0.0.0" uid "" -"@kbn/mapbox-gl@link:bazel-bin/packages/kbn-mapbox-gl": +"@kbn/monaco@link:packages/kbn-monaco": version "0.0.0" uid "" -"@kbn/ml-agg-utils@link:bazel-bin/x-pack/packages/ml/agg_utils": +"@kbn/optimizer-webpack-helpers@link:packages/kbn-optimizer-webpack-helpers": version "0.0.0" uid "" -"@kbn/ml-is-populated-object@link:bazel-bin/x-pack/packages/ml/is_populated_object": +"@kbn/optimizer@link:packages/kbn-optimizer": version "0.0.0" uid "" -"@kbn/ml-string-hash@link:bazel-bin/x-pack/packages/ml/string_hash": +"@kbn/osquery-io-ts-types@link:packages/kbn-osquery-io-ts-types": version "0.0.0" uid "" -"@kbn/monaco@link:bazel-bin/packages/kbn-monaco": +"@kbn/package-map@link:packages/kbn-package-map": version "0.0.0" uid "" -"@kbn/optimizer-webpack-helpers@link:bazel-bin/packages/kbn-optimizer-webpack-helpers": +"@kbn/peggy-loader@link:packages/kbn-peggy-loader": version "0.0.0" uid "" -"@kbn/optimizer@link:bazel-bin/packages/kbn-optimizer": +"@kbn/peggy@link:packages/kbn-peggy": version "0.0.0" uid "" -"@kbn/osquery-io-ts-types@link:bazel-bin/packages/kbn-osquery-io-ts-types": +"@kbn/performance-testing-dataset-extractor@link:packages/kbn-performance-testing-dataset-extractor": version "0.0.0" uid "" -"@kbn/peggy-loader@link:bazel-bin/packages/kbn-peggy-loader": +"@kbn/plugin-discovery@link:packages/kbn-plugin-discovery": version "0.0.0" uid "" -"@kbn/peggy@link:bazel-bin/packages/kbn-peggy": +"@kbn/plugin-generator@link:packages/kbn-plugin-generator": version "0.0.0" uid "" -"@kbn/performance-testing-dataset-extractor@link:bazel-bin/packages/kbn-performance-testing-dataset-extractor": +"@kbn/plugin-helpers@link:packages/kbn-plugin-helpers": version "0.0.0" uid "" -"@kbn/plugin-discovery@link:bazel-bin/packages/kbn-plugin-discovery": +"@kbn/react-field@link:packages/kbn-react-field": version "0.0.0" uid "" -"@kbn/plugin-generator@link:bazel-bin/packages/kbn-plugin-generator": +"@kbn/repo-info@link:packages/kbn-repo-info": version "0.0.0" uid "" -"@kbn/plugin-helpers@link:bazel-bin/packages/kbn-plugin-helpers": +"@kbn/repo-path@link:packages/kbn-repo-path": version "0.0.0" uid "" -"@kbn/react-field@link:bazel-bin/packages/kbn-react-field": +"@kbn/repo-source-classifier-cli@link:packages/kbn-repo-source-classifier-cli": version "0.0.0" uid "" -"@kbn/repo-source-classifier-cli@link:bazel-bin/packages/kbn-repo-source-classifier-cli": +"@kbn/repo-source-classifier@link:packages/kbn-repo-source-classifier": version "0.0.0" uid "" -"@kbn/repo-source-classifier@link:bazel-bin/packages/kbn-repo-source-classifier": +"@kbn/rison@link:packages/kbn-rison": version "0.0.0" uid "" -"@kbn/rison@link:bazel-bin/packages/kbn-rison": +"@kbn/rule-data-utils@link:packages/kbn-rule-data-utils": version "0.0.0" uid "" -"@kbn/rule-data-utils@link:bazel-bin/packages/kbn-rule-data-utils": +"@kbn/safer-lodash-set@link:packages/kbn-safer-lodash-set": version "0.0.0" uid "" -"@kbn/safer-lodash-set@link:bazel-bin/packages/kbn-safer-lodash-set": +"@kbn/securitysolution-autocomplete@link:packages/kbn-securitysolution-autocomplete": version "0.0.0" uid "" -"@kbn/securitysolution-autocomplete@link:bazel-bin/packages/kbn-securitysolution-autocomplete": +"@kbn/securitysolution-es-utils@link:packages/kbn-securitysolution-es-utils": version "0.0.0" uid "" -"@kbn/securitysolution-es-utils@link:bazel-bin/packages/kbn-securitysolution-es-utils": +"@kbn/securitysolution-exception-list-components@link:packages/kbn-securitysolution-exception-list-components": version "0.0.0" uid "" -"@kbn/securitysolution-exception-list-components@link:bazel-bin/packages/kbn-securitysolution-exception-list-components": +"@kbn/securitysolution-hook-utils@link:packages/kbn-securitysolution-hook-utils": version "0.0.0" uid "" -"@kbn/securitysolution-hook-utils@link:bazel-bin/packages/kbn-securitysolution-hook-utils": +"@kbn/securitysolution-io-ts-alerting-types@link:packages/kbn-securitysolution-io-ts-alerting-types": version "0.0.0" uid "" -"@kbn/securitysolution-io-ts-alerting-types@link:bazel-bin/packages/kbn-securitysolution-io-ts-alerting-types": +"@kbn/securitysolution-io-ts-list-types@link:packages/kbn-securitysolution-io-ts-list-types": version "0.0.0" uid "" -"@kbn/securitysolution-io-ts-list-types@link:bazel-bin/packages/kbn-securitysolution-io-ts-list-types": +"@kbn/securitysolution-io-ts-types@link:packages/kbn-securitysolution-io-ts-types": version "0.0.0" uid "" -"@kbn/securitysolution-io-ts-types@link:bazel-bin/packages/kbn-securitysolution-io-ts-types": +"@kbn/securitysolution-io-ts-utils@link:packages/kbn-securitysolution-io-ts-utils": version "0.0.0" uid "" -"@kbn/securitysolution-io-ts-utils@link:bazel-bin/packages/kbn-securitysolution-io-ts-utils": +"@kbn/securitysolution-list-api@link:packages/kbn-securitysolution-list-api": version "0.0.0" uid "" -"@kbn/securitysolution-list-api@link:bazel-bin/packages/kbn-securitysolution-list-api": +"@kbn/securitysolution-list-constants@link:packages/kbn-securitysolution-list-constants": version "0.0.0" uid "" -"@kbn/securitysolution-list-constants@link:bazel-bin/packages/kbn-securitysolution-list-constants": +"@kbn/securitysolution-list-hooks@link:packages/kbn-securitysolution-list-hooks": version "0.0.0" uid "" -"@kbn/securitysolution-list-hooks@link:bazel-bin/packages/kbn-securitysolution-list-hooks": +"@kbn/securitysolution-list-utils@link:packages/kbn-securitysolution-list-utils": version "0.0.0" uid "" -"@kbn/securitysolution-list-utils@link:bazel-bin/packages/kbn-securitysolution-list-utils": +"@kbn/securitysolution-rules@link:packages/kbn-securitysolution-rules": version "0.0.0" uid "" -"@kbn/securitysolution-rules@link:bazel-bin/packages/kbn-securitysolution-rules": +"@kbn/securitysolution-t-grid@link:packages/kbn-securitysolution-t-grid": version "0.0.0" uid "" -"@kbn/securitysolution-t-grid@link:bazel-bin/packages/kbn-securitysolution-t-grid": +"@kbn/securitysolution-utils@link:packages/kbn-securitysolution-utils": version "0.0.0" uid "" -"@kbn/securitysolution-utils@link:bazel-bin/packages/kbn-securitysolution-utils": +"@kbn/server-http-tools@link:packages/kbn-server-http-tools": version "0.0.0" uid "" -"@kbn/server-http-tools@link:bazel-bin/packages/kbn-server-http-tools": +"@kbn/server-route-repository@link:packages/kbn-server-route-repository": version "0.0.0" uid "" -"@kbn/server-route-repository@link:bazel-bin/packages/kbn-server-route-repository": +"@kbn/shared-svg@link:packages/kbn-shared-svg": version "0.0.0" uid "" -"@kbn/shared-svg@link:bazel-bin/packages/kbn-shared-svg": +"@kbn/shared-ux-avatar-solution@link:packages/shared-ux/avatar/solution": version "0.0.0" uid "" -"@kbn/shared-ux-avatar-solution@link:bazel-bin/packages/shared-ux/avatar/solution": +"@kbn/shared-ux-avatar-user-profile-components@link:packages/shared-ux/avatar/user_profile/impl": version "0.0.0" uid "" -"@kbn/shared-ux-avatar-user-profile-components@link:bazel-bin/packages/shared-ux/avatar/user_profile/impl": +"@kbn/shared-ux-button-exit-full-screen-mocks@link:packages/shared-ux/button/exit_full_screen/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-button-exit-full-screen-mocks@link:bazel-bin/packages/shared-ux/button/exit_full_screen/mocks": +"@kbn/shared-ux-button-exit-full-screen-types@link:packages/shared-ux/button/exit_full_screen/types": version "0.0.0" uid "" -"@kbn/shared-ux-button-exit-full-screen-types@link:bazel-bin/packages/shared-ux/button/exit_full_screen/types": +"@kbn/shared-ux-button-exit-full-screen@link:packages/shared-ux/button/exit_full_screen/impl": version "0.0.0" uid "" -"@kbn/shared-ux-button-exit-full-screen@link:bazel-bin/packages/shared-ux/button/exit_full_screen/impl": +"@kbn/shared-ux-button-toolbar@link:packages/shared-ux/button_toolbar": version "0.0.0" uid "" -"@kbn/shared-ux-button-toolbar@link:bazel-bin/packages/shared-ux/button_toolbar": +"@kbn/shared-ux-card-no-data-mocks@link:packages/shared-ux/card/no_data/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-card-no-data-mocks@link:bazel-bin/packages/shared-ux/card/no_data/mocks": +"@kbn/shared-ux-card-no-data-types@link:packages/shared-ux/card/no_data/types": version "0.0.0" uid "" -"@kbn/shared-ux-card-no-data-types@link:bazel-bin/packages/shared-ux/card/no_data/types": +"@kbn/shared-ux-card-no-data@link:packages/shared-ux/card/no_data/impl": version "0.0.0" uid "" -"@kbn/shared-ux-card-no-data@link:bazel-bin/packages/shared-ux/card/no_data/impl": +"@kbn/shared-ux-file-context@link:packages/shared-ux/file/context": version "0.0.0" uid "" -"@kbn/shared-ux-file-context@link:bazel-bin/packages/shared-ux/file/context": +"@kbn/shared-ux-file-image-mocks@link:packages/shared-ux/file/image/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-file-image-mocks@link:bazel-bin/packages/shared-ux/file/image/mocks": +"@kbn/shared-ux-file-image@link:packages/shared-ux/file/image/impl": version "0.0.0" uid "" -"@kbn/shared-ux-file-image@link:bazel-bin/packages/shared-ux/file/image/impl": +"@kbn/shared-ux-file-mocks@link:packages/shared-ux/file/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-file-mocks@link:bazel-bin/packages/shared-ux/file/mocks": +"@kbn/shared-ux-file-picker@link:packages/shared-ux/file/file_picker/impl": version "0.0.0" uid "" -"@kbn/shared-ux-file-picker@link:bazel-bin/packages/shared-ux/file/file_picker/impl": +"@kbn/shared-ux-file-types@link:packages/shared-ux/file/types": version "0.0.0" uid "" -"@kbn/shared-ux-file-types@link:bazel-bin/packages/shared-ux/file/types": +"@kbn/shared-ux-file-upload@link:packages/shared-ux/file/file_upload/impl": version "0.0.0" uid "" -"@kbn/shared-ux-file-upload@link:bazel-bin/packages/shared-ux/file/file_upload/impl": +"@kbn/shared-ux-file-util@link:packages/shared-ux/file/util": version "0.0.0" uid "" -"@kbn/shared-ux-file-util@link:bazel-bin/packages/shared-ux/file/util": +"@kbn/shared-ux-link-redirect-app-mocks@link:packages/shared-ux/link/redirect_app/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-link-redirect-app-mocks@link:bazel-bin/packages/shared-ux/link/redirect_app/mocks": +"@kbn/shared-ux-link-redirect-app-types@link:packages/shared-ux/link/redirect_app/types": version "0.0.0" uid "" -"@kbn/shared-ux-link-redirect-app-types@link:bazel-bin/packages/shared-ux/link/redirect_app/types": +"@kbn/shared-ux-link-redirect-app@link:packages/shared-ux/link/redirect_app/impl": version "0.0.0" uid "" -"@kbn/shared-ux-link-redirect-app@link:bazel-bin/packages/shared-ux/link/redirect_app/impl": +"@kbn/shared-ux-markdown-mocks@link:packages/shared-ux/markdown/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-markdown-mocks@link:bazel-bin/packages/shared-ux/markdown/mocks": +"@kbn/shared-ux-markdown-types@link:packages/shared-ux/markdown/types": version "0.0.0" uid "" -"@kbn/shared-ux-markdown-types@link:bazel-bin/packages/shared-ux/markdown/types": +"@kbn/shared-ux-markdown@link:packages/shared-ux/markdown/impl": version "0.0.0" uid "" -"@kbn/shared-ux-markdown@link:bazel-bin/packages/shared-ux/markdown/impl": +"@kbn/shared-ux-page-analytics-no-data-mocks@link:packages/shared-ux/page/analytics_no_data/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-analytics-no-data-mocks@link:bazel-bin/packages/shared-ux/page/analytics_no_data/mocks": +"@kbn/shared-ux-page-analytics-no-data-types@link:packages/shared-ux/page/analytics_no_data/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-analytics-no-data-types@link:bazel-bin/packages/shared-ux/page/analytics_no_data/types": +"@kbn/shared-ux-page-analytics-no-data@link:packages/shared-ux/page/analytics_no_data/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-analytics-no-data@link:bazel-bin/packages/shared-ux/page/analytics_no_data/impl": +"@kbn/shared-ux-page-kibana-no-data-mocks@link:packages/shared-ux/page/kibana_no_data/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-no-data-mocks@link:bazel-bin/packages/shared-ux/page/kibana_no_data/mocks": +"@kbn/shared-ux-page-kibana-no-data-types@link:packages/shared-ux/page/kibana_no_data/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-no-data-types@link:bazel-bin/packages/shared-ux/page/kibana_no_data/types": +"@kbn/shared-ux-page-kibana-no-data@link:packages/shared-ux/page/kibana_no_data/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-no-data@link:bazel-bin/packages/shared-ux/page/kibana_no_data/impl": +"@kbn/shared-ux-page-kibana-template-mocks@link:packages/shared-ux/page/kibana_template/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-template-mocks@link:bazel-bin/packages/shared-ux/page/kibana_template/mocks": +"@kbn/shared-ux-page-kibana-template-types@link:packages/shared-ux/page/kibana_template/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-template-types@link:bazel-bin/packages/shared-ux/page/kibana_template/types": +"@kbn/shared-ux-page-kibana-template@link:packages/shared-ux/page/kibana_template/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-template@link:bazel-bin/packages/shared-ux/page/kibana_template/impl": +"@kbn/shared-ux-page-no-data-config-mocks@link:packages/shared-ux/page/no_data_config/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-config-mocks@link:bazel-bin/packages/shared-ux/page/no_data_config/mocks": +"@kbn/shared-ux-page-no-data-config-types@link:packages/shared-ux/page/no_data_config/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-config-types@link:bazel-bin/packages/shared-ux/page/no_data_config/types": +"@kbn/shared-ux-page-no-data-config@link:packages/shared-ux/page/no_data_config/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-config@link:bazel-bin/packages/shared-ux/page/no_data_config/impl": +"@kbn/shared-ux-page-no-data-mocks@link:packages/shared-ux/page/no_data/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-mocks@link:bazel-bin/packages/shared-ux/page/no_data/mocks": +"@kbn/shared-ux-page-no-data-types@link:packages/shared-ux/page/no_data/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-types@link:bazel-bin/packages/shared-ux/page/no_data/types": +"@kbn/shared-ux-page-no-data@link:packages/shared-ux/page/no_data/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data@link:bazel-bin/packages/shared-ux/page/no_data/impl": +"@kbn/shared-ux-page-solution-nav@link:packages/shared-ux/page/solution_nav": version "0.0.0" uid "" -"@kbn/shared-ux-page-solution-nav@link:bazel-bin/packages/shared-ux/page/solution_nav": +"@kbn/shared-ux-prompt-no-data-views-mocks@link:packages/shared-ux/prompt/no_data_views/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-prompt-no-data-views-mocks@link:bazel-bin/packages/shared-ux/prompt/no_data_views/mocks": +"@kbn/shared-ux-prompt-no-data-views-types@link:packages/shared-ux/prompt/no_data_views/types": version "0.0.0" uid "" -"@kbn/shared-ux-prompt-no-data-views-types@link:bazel-bin/packages/shared-ux/prompt/no_data_views/types": +"@kbn/shared-ux-prompt-no-data-views@link:packages/shared-ux/prompt/no_data_views/impl": version "0.0.0" uid "" -"@kbn/shared-ux-prompt-no-data-views@link:bazel-bin/packages/shared-ux/prompt/no_data_views/impl": +"@kbn/shared-ux-prompt-not-found@link:packages/shared-ux/prompt/not_found": version "0.0.0" uid "" -"@kbn/shared-ux-prompt-not-found@link:bazel-bin/packages/shared-ux/prompt/not_found": +"@kbn/shared-ux-router-mocks@link:packages/shared-ux/router/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-router-mocks@link:bazel-bin/packages/shared-ux/router/mocks": +"@kbn/shared-ux-services@link:packages/kbn-shared-ux-services": version "0.0.0" uid "" -"@kbn/shared-ux-services@link:bazel-bin/packages/kbn-shared-ux-services": +"@kbn/shared-ux-storybook-mock@link:packages/shared-ux/storybook/mock": version "0.0.0" uid "" -"@kbn/shared-ux-storybook-mock@link:bazel-bin/packages/shared-ux/storybook/mock": +"@kbn/shared-ux-storybook@link:packages/kbn-shared-ux-storybook": version "0.0.0" uid "" -"@kbn/shared-ux-storybook@link:bazel-bin/packages/kbn-shared-ux-storybook": +"@kbn/shared-ux-utility@link:packages/kbn-shared-ux-utility": version "0.0.0" uid "" -"@kbn/shared-ux-utility@link:bazel-bin/packages/kbn-shared-ux-utility": +"@kbn/some-dev-log@link:packages/kbn-some-dev-log": version "0.0.0" uid "" -"@kbn/some-dev-log@link:bazel-bin/packages/kbn-some-dev-log": +"@kbn/sort-package-json@link:packages/kbn-sort-package-json": version "0.0.0" uid "" -"@kbn/sort-package-json@link:bazel-bin/packages/kbn-sort-package-json": +"@kbn/spec-to-console@link:packages/kbn-spec-to-console": version "0.0.0" uid "" -"@kbn/spec-to-console@link:bazel-bin/packages/kbn-spec-to-console": +"@kbn/std@link:packages/kbn-std": version "0.0.0" uid "" -"@kbn/std@link:bazel-bin/packages/kbn-std": +"@kbn/stdio-dev-helpers@link:packages/kbn-stdio-dev-helpers": version "0.0.0" uid "" -"@kbn/stdio-dev-helpers@link:bazel-bin/packages/kbn-stdio-dev-helpers": +"@kbn/storybook@link:packages/kbn-storybook": version "0.0.0" uid "" -"@kbn/storybook@link:bazel-bin/packages/kbn-storybook": +"@kbn/telemetry-tools@link:packages/kbn-telemetry-tools": version "0.0.0" uid "" -"@kbn/synthetic-package-map@link:bazel-bin/packages/kbn-synthetic-package-map": +"@kbn/test-jest-helpers@link:packages/kbn-test-jest-helpers": version "0.0.0" uid "" -"@kbn/telemetry-tools@link:bazel-bin/packages/kbn-telemetry-tools": +"@kbn/test-subj-selector@link:packages/kbn-test-subj-selector": version "0.0.0" uid "" -"@kbn/test-jest-helpers@link:bazel-bin/packages/kbn-test-jest-helpers": +"@kbn/test@link:packages/kbn-test": version "0.0.0" uid "" -"@kbn/test-subj-selector@link:bazel-bin/packages/kbn-test-subj-selector": +"@kbn/timelion-grammar@link:packages/kbn-timelion-grammar": version "0.0.0" uid "" -"@kbn/test@link:bazel-bin/packages/kbn-test": +"@kbn/tinymath@link:packages/kbn-tinymath": version "0.0.0" uid "" -"@kbn/timelion-grammar@link:bazel-bin/packages/kbn-timelion-grammar": +"@kbn/tooling-log@link:packages/kbn-tooling-log": version "0.0.0" uid "" -"@kbn/tinymath@link:bazel-bin/packages/kbn-tinymath": +"@kbn/ts-project-linter-cli@link:packages/kbn-ts-project-linter-cli": version "0.0.0" uid "" -"@kbn/tooling-log@link:bazel-bin/packages/kbn-tooling-log": +"@kbn/ts-project-linter@link:packages/kbn-ts-project-linter": version "0.0.0" uid "" -"@kbn/type-summarizer-cli@link:bazel-bin/packages/kbn-type-summarizer-cli": +"@kbn/ts-projects@link:packages/kbn-ts-projects": version "0.0.0" uid "" -"@kbn/type-summarizer-core@link:bazel-bin/packages/kbn-type-summarizer-core": +"@kbn/ts-type-check-cli@link:packages/kbn-ts-type-check-cli": version "0.0.0" uid "" -"@kbn/type-summarizer@link:bazel-bin/packages/kbn-type-summarizer": +"@kbn/typed-react-router-config@link:packages/kbn-typed-react-router-config": version "0.0.0" uid "" -"@kbn/typed-react-router-config@link:bazel-bin/packages/kbn-typed-react-router-config": +"@kbn/ui-framework@link:packages/kbn-ui-framework": version "0.0.0" uid "" -"@kbn/ui-framework@link:bazel-bin/packages/kbn-ui-framework": +"@kbn/ui-shared-deps-npm@link:packages/kbn-ui-shared-deps-npm": version "0.0.0" uid "" -"@kbn/ui-shared-deps-npm@link:bazel-bin/packages/kbn-ui-shared-deps-npm": +"@kbn/ui-shared-deps-src@link:packages/kbn-ui-shared-deps-src": version "0.0.0" uid "" -"@kbn/ui-shared-deps-src@link:bazel-bin/packages/kbn-ui-shared-deps-src": +"@kbn/ui-theme@link:packages/kbn-ui-theme": version "0.0.0" uid "" -"@kbn/ui-theme@link:bazel-bin/packages/kbn-ui-theme": +"@kbn/user-profile-components@link:packages/kbn-user-profile-components": version "0.0.0" uid "" -"@kbn/user-profile-components@link:bazel-bin/packages/kbn-user-profile-components": +"@kbn/utility-types-jest@link:packages/kbn-utility-types-jest": version "0.0.0" uid "" -"@kbn/utility-types-jest@link:bazel-bin/packages/kbn-utility-types-jest": +"@kbn/utility-types@link:packages/kbn-utility-types": version "0.0.0" uid "" -"@kbn/utility-types@link:bazel-bin/packages/kbn-utility-types": +"@kbn/utils@link:packages/kbn-utils": version "0.0.0" uid "" -"@kbn/utils@link:bazel-bin/packages/kbn-utils": +"@kbn/web-worker-stub@link:packages/kbn-web-worker-stub": version "0.0.0" uid "" -"@kbn/yarn-lock-validator@link:bazel-bin/packages/kbn-yarn-lock-validator": +"@kbn/yarn-lock-validator@link:packages/kbn-yarn-lock-validator": version "0.0.0" uid "" @@ -7614,6 +7642,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== +"@types/semver@^7.3.12": + version "7.3.12" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.12.tgz#920447fdd78d76b19de0438b7f60df3c4a80bf1c" + integrity sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A== + "@types/serve-index@^1.9.1": version "1.9.1" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" @@ -7951,18 +7984,18 @@ integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg== "@typescript-eslint/eslint-plugin@^5.20.0": - version "5.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.20.0.tgz#022531a639640ff3faafaf251d1ce00a2ef000a1" - integrity sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q== + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.1.tgz#ee5b51405f6c9ee7e60e4006d68c69450d3b4536" + integrity sha512-cOizjPlKEh0bXdFrBLTrI/J6B/QMlhwE9auOov53tgB+qMukH6/h8YAK/qw+QJGct/PTbdh2lytGyipxCcEtAw== dependencies: - "@typescript-eslint/scope-manager" "5.20.0" - "@typescript-eslint/type-utils" "5.20.0" - "@typescript-eslint/utils" "5.20.0" - debug "^4.3.2" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/type-utils" "5.45.1" + "@typescript-eslint/utils" "5.45.1" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" regexpp "^3.2.0" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^4.0.1": @@ -7978,14 +8011,14 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.20.0": - version "5.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.20.0.tgz#4991c4ee0344315c2afc2a62f156565f689c8d0b" - integrity sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w== + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.1.tgz#6440ec283fa1373a12652d4e2fef4cb6e7b7e8c6" + integrity sha512-JQ3Ep8bEOXu16q0ztsatp/iQfDCtvap7sp/DKo7DWltUquj5AfCOpX2zSzJ8YkAVnrQNqQ5R62PBz2UtrfmCkA== dependencies: - "@typescript-eslint/scope-manager" "5.20.0" - "@typescript-eslint/types" "5.20.0" - "@typescript-eslint/typescript-estree" "5.20.0" - debug "^4.3.2" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/typescript-estree" "5.45.1" + debug "^4.3.4" "@typescript-eslint/scope-manager@4.31.2": version "4.31.2" @@ -7995,21 +8028,22 @@ "@typescript-eslint/types" "4.31.2" "@typescript-eslint/visitor-keys" "4.31.2" -"@typescript-eslint/scope-manager@5.20.0": - version "5.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.20.0.tgz#79c7fb8598d2942e45b3c881ced95319818c7980" - integrity sha512-h9KtuPZ4D/JuX7rpp1iKg3zOH0WNEa+ZIXwpW/KWmEFDxlA/HSfCMhiyF1HS/drTICjIbpA6OqkAhrP/zkCStg== +"@typescript-eslint/scope-manager@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.1.tgz#5b87d025eec7035d879b99c260f03be5c247883c" + integrity sha512-D6fCileR6Iai7E35Eb4Kp+k0iW7F1wxXYrOhX/3dywsOJpJAQ20Fwgcf+P/TDtvQ7zcsWsrJaglaQWDhOMsspQ== dependencies: - "@typescript-eslint/types" "5.20.0" - "@typescript-eslint/visitor-keys" "5.20.0" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/visitor-keys" "5.45.1" -"@typescript-eslint/type-utils@5.20.0": - version "5.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.20.0.tgz#151c21cbe9a378a34685735036e5ddfc00223be3" - integrity sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw== +"@typescript-eslint/type-utils@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.1.tgz#cb7d300c3c95802cea9f87c7f8be363cf8f8538c" + integrity sha512-aosxFa+0CoYgYEl3aptLe1svP910DJq68nwEJzyQcrtRhC4BN0tJAvZGAe+D0tzjJmFXe+h4leSsiZhwBa2vrA== dependencies: - "@typescript-eslint/utils" "5.20.0" - debug "^4.3.2" + "@typescript-eslint/typescript-estree" "5.45.1" + "@typescript-eslint/utils" "5.45.1" + debug "^4.3.4" tsutils "^3.21.0" "@typescript-eslint/types@4.31.2": @@ -8017,10 +8051,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.2.tgz#2aea7177d6d744521a168ed4668eddbd912dfadf" integrity sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w== -"@typescript-eslint/types@5.20.0": - version "5.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.20.0.tgz#fa39c3c2aa786568302318f1cb51fcf64258c20c" - integrity sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg== +"@typescript-eslint/types@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.1.tgz#8e1883041cee23f1bb7e1343b0139f97f6a17c14" + integrity sha512-HEW3U0E5dLjUT+nk7b4lLbOherS1U4ap+b9pfu2oGsW3oPu7genRaY9dDv3nMczC1rbnRY2W/D7SN05wYoGImg== "@typescript-eslint/typescript-estree@4.31.2": version "4.31.2" @@ -8035,30 +8069,32 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.20.0", "@typescript-eslint/typescript-estree@^5.20.0": - version "5.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.20.0.tgz#ab73686ab18c8781bbf249c9459a55dc9417d6b0" - integrity sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w== +"@typescript-eslint/typescript-estree@5.45.1", "@typescript-eslint/typescript-estree@^5.20.0": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.1.tgz#b3dc37f0c4f0fe73e09917fc735e6f96eabf9ba4" + integrity sha512-76NZpmpCzWVrrb0XmYEpbwOz/FENBi+5W7ipVXAsG3OoFrQKJMiaqsBMbvGRyLtPotGqUfcY7Ur8j0dksDJDng== dependencies: - "@typescript-eslint/types" "5.20.0" - "@typescript-eslint/visitor-keys" "5.20.0" - debug "^4.3.2" - globby "^11.0.4" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/visitor-keys" "5.45.1" + debug "^4.3.4" + globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.20.0": - version "5.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.20.0.tgz#b8e959ed11eca1b2d5414e12417fd94cae3517a5" - integrity sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w== +"@typescript-eslint/utils@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.1.tgz#39610c98bde82c4792f2a858b29b7d0053448be2" + integrity sha512-rlbC5VZz68+yjAzQBc4I7KDYVzWG2X/OrqoZrMahYq3u8FFtmQYc+9rovo/7wlJH5kugJ+jQXV5pJMnofGmPRw== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.20.0" - "@typescript-eslint/types" "5.20.0" - "@typescript-eslint/typescript-estree" "5.20.0" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/typescript-estree" "5.45.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" + semver "^7.3.7" "@typescript-eslint/visitor-keys@4.31.2": version "4.31.2" @@ -8068,13 +8104,13 @@ "@typescript-eslint/types" "4.31.2" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.20.0": - version "5.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz#70236b5c6b67fbaf8b2f58bf3414b76c1e826c2a" - integrity sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg== +"@typescript-eslint/visitor-keys@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.1.tgz#204428430ad6a830d24c5ac87c71366a1cfe1948" + integrity sha512-cy9ln+6rmthYWjH9fmx+5FU/JDpjQb586++x2FZlveq7GdGuLLW9a2Jcst2TGekH82bXpfmRNSwP9tyEs6RjvQ== dependencies: - "@typescript-eslint/types" "5.20.0" - eslint-visitor-keys "^3.0.0" + "@typescript-eslint/types" "5.45.1" + eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -13070,7 +13106,7 @@ endent@^2.0.1: fast-json-parse "^1.0.3" objectorarray "^1.0.4" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: +enhanced-resolve@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== @@ -13773,10 +13809,10 @@ eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" - integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^7.32.0: version "7.32.0" @@ -14224,7 +14260,7 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.11, fast-glob@^3.2.2, fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.11, fast-glob@^3.2.2, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -14235,6 +14271,17 @@ fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.11, fast-glob@^3.2.2, fast-gl merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.7: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-parse@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" @@ -15299,7 +15346,7 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.0.1, globby@^11.0.2, globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: +globby@^11.0.1, globby@^11.0.2, globby@^11.0.3, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -16176,7 +16223,7 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.0.5, ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8, ignore@^5.2.0: +ignore@^5.0.5, ignore@^5.1.1, ignore@^5.1.4, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -18688,7 +18735,7 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@^1.0.0, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.4.2" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== @@ -19623,7 +19670,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -20151,6 +20198,11 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -26358,17 +26410,6 @@ ts-easing@^0.2.0: resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== -ts-loader@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-7.0.5.tgz#789338fb01cb5dc0a33c54e50558b34a73c9c4c5" - integrity sha512-zXypEIT6k3oTc+OZNx/cqElrsbBtYqDknf48OZos0NQ3RTt045fBIU8RRSu+suObBzYB355aIPGOe/3kj9h7Ig== - dependencies: - chalk "^2.3.0" - enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" - micromatch "^4.0.0" - semver "^6.0.0" - ts-morph@^13.0.2: version "13.0.2" resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-13.0.2.tgz#55546023493ef82389d9e4f28848a556c784bac4"