astro-ghostcms/.pnpm-store/v3/files/21/a74689e00bdf9ab76a4b17a151a...

56 lines
2.6 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@typescript-eslint/utils");
const eslint_utils_1 = require("@typescript-eslint/utils/eslint-utils");
const util_1 = require("../util");
exports.default = (0, util_1.createRule)({
name: 'no-import-type-side-effects',
meta: {
type: 'problem',
docs: {
description: 'Enforce the use of top-level import type qualifier when an import only has specifiers with inline type qualifiers',
},
fixable: 'code',
messages: {
useTopLevelQualifier: 'TypeScript will only remove the inline type specifiers which will leave behind a side effect import at runtime. Convert this to a top-level type qualifier to properly remove the entire import.',
},
schema: [],
},
defaultOptions: [],
create(context) {
const sourceCode = (0, eslint_utils_1.getSourceCode)(context);
return {
'ImportDeclaration[importKind!="type"]'(node) {
if (node.specifiers.length === 0) {
return;
}
const specifiers = [];
for (const specifier of node.specifiers) {
if (specifier.type !== utils_1.AST_NODE_TYPES.ImportSpecifier ||
specifier.importKind !== 'type') {
return;
}
specifiers.push(specifier);
}
context.report({
node,
messageId: 'useTopLevelQualifier',
fix(fixer) {
const fixes = [];
for (const specifier of specifiers) {
const qualifier = (0, util_1.nullThrows)(sourceCode.getFirstToken(specifier, util_1.isTypeKeyword), util_1.NullThrowsReasons.MissingToken('type keyword', 'import specifier'));
fixes.push(fixer.removeRange([
qualifier.range[0],
specifier.imported.range[0],
]));
}
const importKeyword = (0, util_1.nullThrows)(sourceCode.getFirstToken(node, util_1.isImportKeyword), util_1.NullThrowsReasons.MissingToken('import keyword', 'import'));
fixes.push(fixer.insertTextAfter(importKeyword, ' type'));
return fixes;
},
});
},
};
},
});
//# sourceMappingURL=no-import-type-side-effects.js.map