index.cjs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // NOTICE: This file is generated by Rollup. To modify it,
  2. // please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
  3. 'use strict';
  4. const validateTypes = require('../../utils/validateTypes.cjs');
  5. const functionArgumentsSearch = require('../../utils/functionArgumentsSearch.cjs');
  6. const getSchemeFromUrl = require('../../utils/getSchemeFromUrl.cjs');
  7. const isStandardSyntaxUrl = require('../../utils/isStandardSyntaxUrl.cjs');
  8. const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp.cjs');
  9. const report = require('../../utils/report.cjs');
  10. const ruleMessages = require('../../utils/ruleMessages.cjs');
  11. const validateOptions = require('../../utils/validateOptions.cjs');
  12. const ruleName = 'function-url-scheme-allowed-list';
  13. const messages = ruleMessages(ruleName, {
  14. rejected: (scheme) => `Unexpected URL scheme "${scheme}:"`,
  15. });
  16. const meta = {
  17. url: 'https://stylelint.io/user-guide/rules/function-url-scheme-allowed-list',
  18. };
  19. /** @type {import('stylelint').CoreRules[ruleName]} */
  20. const rule = (primary) => {
  21. return (root, result) => {
  22. const validOptions = validateOptions(result, ruleName, {
  23. actual: primary,
  24. possible: [validateTypes.isString, validateTypes.isRegExp],
  25. });
  26. if (!validOptions) {
  27. return;
  28. }
  29. root.walkDecls((decl) => {
  30. functionArgumentsSearch(decl.toString().toLowerCase(), 'url', (args, index) => {
  31. const unspacedUrlString = args.trim();
  32. if (!isStandardSyntaxUrl(unspacedUrlString)) {
  33. return;
  34. }
  35. const urlString = unspacedUrlString.replace(/^['"]+|['"]+$/g, '');
  36. const scheme = getSchemeFromUrl(urlString);
  37. if (scheme === null) {
  38. return;
  39. }
  40. if (matchesStringOrRegExp(scheme, primary)) {
  41. return;
  42. }
  43. report({
  44. message: messages.rejected,
  45. messageArgs: [scheme],
  46. node: decl,
  47. index,
  48. endIndex: index + args.length,
  49. result,
  50. ruleName,
  51. });
  52. });
  53. });
  54. };
  55. };
  56. rule.primaryOptionArray = true;
  57. rule.ruleName = ruleName;
  58. rule.messages = messages;
  59. rule.meta = meta;
  60. module.exports = rule;