12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 'use strict';
- const report = require('../../utils/report');
- const ruleMessages = require('../../utils/ruleMessages');
- const validateOptions = require('../../utils/validateOptions');
- const ruleName = 'unicode-bom';
- const messages = ruleMessages(ruleName, {
- expected: 'Expected Unicode BOM',
- rejected: 'Unexpected Unicode BOM',
- });
- const meta = {
- url: 'https://stylelint.io/user-guide/rules/list/unicode-bom',
- };
- /** @type {import('stylelint').Rule} */
- const rule = (primary) => {
- return (root, result) => {
- const validOptions = validateOptions(result, ruleName, {
- actual: primary,
- possible: ['always', 'never'],
- });
- if (
- !validOptions ||
- !root.source ||
- // @ts-expect-error -- TS2339: Property 'inline' does not exist on type 'Source'.
- root.source.inline ||
- // @ts-expect-error -- TS2339: Property 'lang' does not exist on type 'Source'.
- root.source.lang === 'object-literal' ||
- // Ignore HTML documents
- // @ts-expect-error -- TS2339: Property 'document' does not exist on type 'Root'.
- root.document !== undefined
- ) {
- return;
- }
- const { hasBOM } = root.source.input;
- if (primary === 'always' && !hasBOM) {
- report({
- result,
- ruleName,
- message: messages.expected,
- node: root,
- line: 1,
- });
- }
- if (primary === 'never' && hasBOM) {
- report({
- result,
- ruleName,
- message: messages.rejected,
- node: root,
- line: 1,
- });
- }
- };
- };
- rule.ruleName = ruleName;
- rule.messages = messages;
- rule.meta = meta;
- module.exports = rule;
|