UNPKG

stylelint-plugin-import

Version:
62 lines (61 loc) 2.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fileExtensionRule = void 0; const path_1 = require("path"); const stylelint_rule_creator_1 = require("stylelint-rule-creator"); const import_path_1 = require("../../import-path"); const plugin_util_1 = require("../../plugin-util"); const messages = { extensionRequired(line, extension) { return `Missing file extension "${extension}" in ${line}`; }, extensionBlocked(line) { return `File extensions are not allowed: ${line}`; }, }; const defaultOptions = { mode: stylelint_rule_creator_1.DefaultOptionMode.REQUIRE, extension: '.css', }; exports.fileExtensionRule = (0, stylelint_rule_creator_1.createDefaultRule)({ ruleName: `${plugin_util_1.prefix}/file-extension`, messages, defaultOptions, ruleCallback: (report, messages, { ruleOptions, root, context, exceptionRegExps }) => { root.walkAtRules('import', (atRule) => { if ((0, stylelint_rule_creator_1.doesMatchLineExceptions)(atRule, exceptionRegExps)) { return; } const optionsExtension = ruleOptions.extension || defaultOptions.extension; const currentExtension = (0, path_1.extname)((0, import_path_1.extractImportPath)(atRule)); if (ruleOptions.mode === stylelint_rule_creator_1.DefaultOptionMode.REQUIRE && !currentExtension) { if (context.fix) { const newNode = atRule.clone(); newNode.params = newNode.params.replace(/(['"]\)?)$/, optionsExtension + '$1'); atRule.replaceWith(newNode); } else { report({ message: messages.extensionRequired(atRule.toString(), optionsExtension), node: atRule, word: atRule.toString(), }); } } else if (ruleOptions.mode === stylelint_rule_creator_1.DefaultOptionMode.BLOCK && currentExtension) { if (context.fix) { const newNode = atRule.clone(); newNode.params = newNode.params.replace(new RegExp(currentExtension.replace('.', '\\.') + `(.*['"]\\)?)$`), '$1'); atRule.replaceWith(newNode); } else { report({ message: messages.extensionBlocked(atRule.toString()), node: atRule, word: atRule.toString(), }); } } }); }, });