123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 'use strict';
- const isBuiltinModule = require('is-builtin-module');
- const {matches, STATIC_REQUIRE_SOURCE_SELECTOR} = require('./selectors/index.js');
- const {replaceStringLiteral} = require('./fix/index.js');
- const MESSAGE_ID = 'prefer-node-protocol';
- const messages = {
- [MESSAGE_ID]: 'Prefer `node:{{moduleName}}` over `{{moduleName}}`.',
- };
- const importExportSourceSelector = [
- ':matches(ImportDeclaration, ExportNamedDeclaration, ImportExpression)',
- ' > ',
- 'Literal.source',
- ].join('');
- const selector = matches([
- importExportSourceSelector,
- STATIC_REQUIRE_SOURCE_SELECTOR,
- ]);
- const create = () => ({
- [selector](node) {
- const {value} = node;
- if (
- typeof value !== 'string'
- || value.startsWith('node:')
- || !isBuiltinModule(value)
- ) {
- return;
- }
- return {
- node,
- messageId: MESSAGE_ID,
- data: {moduleName: value},
- /** @param {import('eslint').Rule.RuleFixer} fixer */
- fix: fixer => replaceStringLiteral(fixer, node, 'node:', 0, 0),
- };
- },
- });
- /** @type {import('eslint').Rule.RuleModule} */
- module.exports = {
- create,
- meta: {
- type: 'suggestion',
- docs: {
- description: 'Prefer using the `node:` protocol when importing Node.js builtin modules.',
- },
- fixable: 'code',
- messages,
- },
- };
|