stylelint-plugin-import
Version:
Stylelint plugin for managing imports.
62 lines (61 loc) • 2.66 kB
JavaScript
;
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(),
});
}
}
});
},
});