* [eslint] add rule to prevent export* in plugin index files * deduplicate export names for types/instances with the same name * attempt to auto-fix duplicate exports too * capture exported enums too * enforce no_export_all for core too * disable rule by default, allow opting-in for help fixing * update tests * reduce yarn.lock duplication * add rule but no fixes * disable all existing violations * update api docs with new line numbers * revert unnecessary changes to yarn.lock which only had drawbacks * remove unnecessary eslint-disable * rework codegen to split type exports and use babel to generate valid code * check for "export types" deeply * improve test by using fixtures * add comments to some helper functions * disable fix for namespace exports including types * label all eslint-disable comments with related team-specific issue * ensure that child exports of `export type` are always tracked as types Co-authored-by: spalger <spalger@users.noreply.github.com> Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
/*
|
|
* Copyright 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 { RuleTester } = require('eslint');
|
|
const dedent = require('dedent');
|
|
|
|
const rule = require('./no_export_all');
|
|
|
|
const ruleTester = new RuleTester({
|
|
parser: require.resolve('@typescript-eslint/parser'),
|
|
parserOptions: {
|
|
sourceType: 'module',
|
|
ecmaVersion: 2018,
|
|
ecmaFeatures: {
|
|
jsx: true,
|
|
},
|
|
},
|
|
});
|
|
|
|
ruleTester.run('@kbn/eslint/no_export_all', rule, {
|
|
valid: [
|
|
{
|
|
code: dedent`
|
|
export { bar } from './foo';
|
|
export { bar as box } from './foo';
|
|
`,
|
|
},
|
|
],
|
|
|
|
invalid: [
|
|
{
|
|
filename: Path.resolve(__dirname, '../__fixtures__/index.ts'),
|
|
code: dedent`
|
|
export * as baz from './baz';
|
|
export * from './foo';
|
|
`,
|
|
|
|
errors: [
|
|
{
|
|
line: 1,
|
|
message:
|
|
'`export *` is not allowed in the index files of plugins to prevent accidentally exporting too many APIs',
|
|
},
|
|
{
|
|
line: 2,
|
|
message:
|
|
'`export *` is not allowed in the index files of plugins to prevent accidentally exporting too many APIs',
|
|
},
|
|
],
|
|
|
|
output: dedent`
|
|
import { one, two, three } from "./baz";
|
|
export const baz = {
|
|
one,
|
|
two,
|
|
three
|
|
};
|
|
export type { ReexportedClass, SomeInterface, TypeAlias } from "./foo";
|
|
export { someConst, someLet, someFunction, SomeClass, SomeEnum } from "./foo";
|
|
`,
|
|
},
|
|
],
|
|
});
|