kibana/packages/kbn-eslint-plugin-eslint/rules/no_export_all.test.js
Spencer fecdba7eba
[eslint] add rule to prevent export* in plugin index files (#109357)
* [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>
2021-09-01 18:05:45 -07:00

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";
`,
},
],
});