26 lines
944 B
TypeScript
26 lines
944 B
TypeScript
|
import type { Linter } from './interface';
|
||
|
import { lintWarning } from './utils';
|
||
|
|
||
|
const linter: Linter = (key, value, info) => {
|
||
|
if (key === 'content') {
|
||
|
// From emotion: https://github.com/emotion-js/emotion/blob/main/packages/serialize/src/index.js#L63
|
||
|
const contentValuePattern =
|
||
|
/(attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\(|(no-)?(open|close)-quote/;
|
||
|
const contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];
|
||
|
if (
|
||
|
typeof value !== 'string' ||
|
||
|
(contentValues.indexOf(value) === -1 &&
|
||
|
!contentValuePattern.test(value) &&
|
||
|
(value.charAt(0) !== value.charAt(value.length - 1) ||
|
||
|
(value.charAt(0) !== '"' && value.charAt(0) !== "'")))
|
||
|
) {
|
||
|
lintWarning(
|
||
|
`You seem to be using a value for 'content' without quotes, try replacing it with \`content: '"${value}"'\`.`,
|
||
|
info,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
export default linter;
|