UNPKG

@sourcegraph/stylelint-plugin-sourcegraph

Version:

Custom stylelint rules for Sourcegraph

73 lines 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.noRestrictedImports = exports.messages = exports.ruleName = void 0; const tslib_1 = require("tslib"); const path_1 = (0, tslib_1.__importDefault)(require("path")); const find_root_1 = require("@manypkg/find-root"); const ignore_1 = (0, tslib_1.__importDefault)(require("ignore")); const postcss_value_parser_1 = (0, tslib_1.__importDefault)(require("postcss-value-parser")); const stylelint_1 = (0, tslib_1.__importDefault)(require("stylelint")); const utils_1 = require("../../utils"); exports.ruleName = '@sourcegraph/no-restricted-imports'; exports.messages = stylelint_1.default.utils.ruleMessages(exports.ruleName, { rejected: importPath => { return `'${String(importPath)}' import is restricted from being used.`; }, }); const ROOT_DIR = (0, find_root_1.findRootSync)(process.cwd()); function getImportURI(node) { if (node.type === 'function' && node.value === 'url') { return node.nodes[0].value; } return node.value; } exports.noRestrictedImports = (0, utils_1.createPlugin)(exports.ruleName, (isEnabled, config) => { if (!config) { throw new Error(`The ${exports.ruleName} rule configuration is not provided!`); } const { paths = [] } = config; const ignorer = (0, ignore_1.default)().add(paths); return function (postcssRoot, postcssResult) { if (!isEnabled) { return; } const areOptionsValid = stylelint_1.default.utils.validateOptions(postcssResult, exports.ruleName, { actual: isEnabled, optional: false, possible: [true, false], }, { actual: config, optional: false, possible: { paths: [utils_1.isString], }, }); if (!areOptionsValid) { return; } const fileName = postcssRoot.source?.input.from; const fileDirectory = fileName ? path_1.default.parse(fileName).dir : ''; postcssRoot.walkAtRules(/^import$/i, atRule => { const { nodes } = (0, postcss_value_parser_1.default)(atRule.params); if (nodes.length === 0) { return; } const [firstNode] = nodes; const importURI = getImportURI(firstNode); const importPath = importURI.startsWith('.') ? path_1.default.relative(ROOT_DIR, path_1.default.join(fileDirectory, importURI)) : importURI; const isRestricted = paths.includes(importPath) || ignorer.ignores(importPath); if (isRestricted) { stylelint_1.default.utils.report({ message: exports.messages.rejected(importURI), node: atRule, result: postcssResult, ruleName: exports.ruleName, }); return; } }); }; }); //# sourceMappingURL=no-restricted-imports.js.map