index.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. 'use strict';
  2. const report = require('../../utils/report');
  3. const ruleMessages = require('../../utils/ruleMessages');
  4. const validateOptions = require('../../utils/validateOptions');
  5. const ruleName = 'unicode-bom';
  6. const messages = ruleMessages(ruleName, {
  7. expected: 'Expected Unicode BOM',
  8. rejected: 'Unexpected Unicode BOM',
  9. });
  10. const meta = {
  11. url: 'https://stylelint.io/user-guide/rules/unicode-bom',
  12. deprecated: true,
  13. };
  14. /** @type {import('stylelint').Rule} */
  15. const rule = (primary) => {
  16. return (root, result) => {
  17. const validOptions = validateOptions(result, ruleName, {
  18. actual: primary,
  19. possible: ['always', 'never'],
  20. });
  21. if (
  22. !validOptions ||
  23. !root.source ||
  24. // @ts-expect-error -- TS2339: Property 'inline' does not exist on type 'Source'.
  25. root.source.inline ||
  26. // @ts-expect-error -- TS2339: Property 'lang' does not exist on type 'Source'.
  27. root.source.lang === 'object-literal' ||
  28. // Ignore HTML documents
  29. // @ts-expect-error -- TS2339: Property 'document' does not exist on type 'Root'.
  30. root.document !== undefined
  31. ) {
  32. return;
  33. }
  34. const { hasBOM } = root.source.input;
  35. if (primary === 'always' && !hasBOM) {
  36. report({
  37. result,
  38. ruleName,
  39. message: messages.expected,
  40. node: root,
  41. line: 1,
  42. });
  43. }
  44. if (primary === 'never' && hasBOM) {
  45. report({
  46. result,
  47. ruleName,
  48. message: messages.rejected,
  49. node: root,
  50. line: 1,
  51. });
  52. }
  53. };
  54. };
  55. rule.ruleName = ruleName;
  56. rule.messages = messages;
  57. rule.meta = meta;
  58. module.exports = rule;