1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports["default"] = rule;
- exports.ruleName = exports.meta = exports.messages = void 0;
- var _path = _interopRequireDefault(require("path"));
- var _stylelint = require("stylelint");
- var _utils = require("../../utils");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
- var ruleName = (0, _utils.namespace)("at-import-partial-extension");
- exports.ruleName = ruleName;
- var messages = _stylelint.utils.ruleMessages(ruleName, {
- expected: "Expected @import to have an extension",
- rejected: function rejected(ext) {
- return "Unexpected extension \".".concat(ext, "\" in @import");
- }
- });
- exports.messages = messages;
- var meta = {
- url: (0, _utils.ruleUrl)(ruleName)
- };
- // https://drafts.csswg.org/mediaqueries/#media-types
- exports.meta = meta;
- var mediaQueryTypes = ["all", "print", "screen", "speech", "tv", "tty", "projection", "handheld", "braille", "embossed", "aural"];
- var mediaQueryTypesRE = new RegExp("(".concat(mediaQueryTypes.join("|"), ")$"), "i");
- var stripPath = function stripPath(path) {
- return path.replace(/^\s*(["'])\s*/, "").replace(/\s*(["'])\s*$/, "");
- };
- function rule(expectation, _, context) {
- return function (root, result) {
- var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
- actual: expectation,
- possible: ["always", "never"]
- });
- if (!validOptions) {
- return;
- }
- root.walkAtRules("import", function (decl) {
- var paths = decl.params.split(/["']\s*,/).filter(function (path) {
- return !mediaQueryTypesRE.test(path.trim());
- });
- // Processing comma-separated lists of import paths
- paths.forEach(function (path) {
- // Stripping trailing quotes and whitespaces, if any
- var pathStripped = stripPath(path);
- // Skipping importing CSS: url(), ".css", URI with a protocol
- if (pathStripped.slice(0, 4) === "url(" || pathStripped.slice(-4) === ".css" || pathStripped.search("//") !== -1) {
- return;
- }
- var extension = _path["default"].extname(pathStripped).slice(1);
- if (!extension && expectation === "always") {
- _stylelint.utils.report({
- message: messages.expected,
- node: decl,
- result: result,
- ruleName: ruleName
- });
- return;
- }
- var isScssPartial = extension === "scss";
- if (extension && isScssPartial && expectation === "never") {
- if (context.fix) {
- var extPattern = new RegExp("\\.".concat(extension, "(['\" ]*)$"), "g");
- decl.params = decl.params.replace(extPattern, "$1");
- return;
- }
- _stylelint.utils.report({
- message: messages.rejected(extension),
- node: decl,
- word: extension,
- result: result,
- ruleName: ruleName
- });
- }
- });
- });
- };
- }
- rule.ruleName = ruleName;
- rule.messages = messages;
- rule.meta = meta;
|