mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 10:40:07 -04:00
## Summary Addresses https://github.com/elastic/kibana-team/issues/1175 As part of the **Sustainable Kibana Architecture** initiative, this PR sets the foundation to start classifying plugins in isolated groups, matching our current solutions / project types: * It adds support for the following fields in the packages' manifests (kibana.jsonc): * `group?: 'search' | 'security' | 'observability' | 'platform' | 'common'` * `visibility?: 'private' | 'shared'` * It proposes a folder structure to automatically infer groups: ```javascript 'src/platform/plugins/shared': { group: 'platform', visibility: 'shared', }, 'src/platform/plugins/internal': { group: 'platform', visibility: 'private', }, 'x-pack/platform/plugins/shared': { group: 'platform', visibility: 'shared', }, 'x-pack/platform/plugins/internal': { group: 'platform', visibility: 'private', }, 'x-pack/solutions/observability/plugins': { group: 'observability', visibility: 'private', }, 'x-pack/solutions/security/plugins': { group: 'security', visibility: 'private', }, 'x-pack/solutions/search/plugins': { group: 'search', visibility: 'private', }, ``` * If a plugin is moved to one of the specific locations above, the group and visibility in the manifest (if specified) must match those inferred from the path. * Plugins that are not relocated are considered: `group: 'common', visibility: 'shared'` by default. As soon as we specify a custom `group`, the ESLINT rules will check violations against dependencies / dependants. The ESLINT rules are pretty simple: * Plugins can only depend on: * Plugins in the same group * OR plugins with `'shared'` visibility * Plugins in `'observability', 'security', 'search'` groups are mandatorily `'private'`. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
33 lines
1.6 KiB
TypeScript
33 lines
1.6 KiB
TypeScript
/*
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
* or more contributor license agreements. Licensed under the "Elastic License
|
|
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
|
|
* Public License v 1"; you may not use this file except in compliance with, at
|
|
* your election, the "Elastic License 2.0", the "GNU Affero General Public
|
|
* License v3.0 only", or the "Server Side Public License, v 1".
|
|
*/
|
|
|
|
export * from './src/get_import_resolver';
|
|
import { NoUnresolvableImportsRule } from './src/rules/no_unresolvable_imports';
|
|
import { UniformImportsRule } from './src/rules/uniform_imports';
|
|
import { ExportsMovedPackagesRule } from './src/rules/exports_moved_packages';
|
|
import { NoUnusedImportsRule } from './src/rules/no_unused_imports';
|
|
import { NoBoundaryCrossingRule } from './src/rules/no_boundary_crossing';
|
|
import { NoGroupCrossingImportsRule } from './src/rules/no_group_crossing_imports';
|
|
import { NoGroupCrossingManifestsRule } from './src/rules/no_group_crossing_manifests';
|
|
import { RequireImportRule } from './src/rules/require_import';
|
|
|
|
/**
|
|
* Custom ESLint rules, add `'@kbn/eslint-plugin-imports'` to your eslint config to use them
|
|
* @internal
|
|
*/
|
|
export const rules = {
|
|
no_unresolvable_imports: NoUnresolvableImportsRule,
|
|
uniform_imports: UniformImportsRule,
|
|
exports_moved_packages: ExportsMovedPackagesRule,
|
|
no_unused_imports: NoUnusedImportsRule,
|
|
no_boundary_crossing: NoBoundaryCrossingRule,
|
|
no_group_crossing_imports: NoGroupCrossingImportsRule,
|
|
no_group_crossing_manifests: NoGroupCrossingManifestsRule,
|
|
require_import: RequireImportRule,
|
|
};
|