init project
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import { readFile } from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import { fail, pass, repositoryRoot, walk } from './lib.mjs';
|
||||
|
||||
const cssFiles = await walk(path.join(repositoryRoot, 'src'), (file) => file.endsWith('.css'));
|
||||
const errors = [];
|
||||
const forbidden = [
|
||||
/(^|[;{]\s*)(left|right)\s*:/gim,
|
||||
/(^|[;{]\s*)(margin|padding|border)-(left|right)(?:-[a-z]+)?\s*:/gim,
|
||||
/(^|[;{]\s*)inset-(left|right)\s*:/gim,
|
||||
/(^|[;{]\s*)text-align\s*:\s*(left|right)/gim,
|
||||
/(^|[;{]\s*)float\s*:\s*(left|right)/gim,
|
||||
];
|
||||
for (const file of cssFiles) {
|
||||
const text = await readFile(file, 'utf8');
|
||||
for (const expression of forbidden) {
|
||||
const matches = text.match(expression);
|
||||
if (matches)
|
||||
errors.push(
|
||||
`${path.relative(repositoryRoot, file)} uses physical CSS: ${matches.join(', ')}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (errors.length > 0) fail(errors);
|
||||
else pass(`${cssFiles.length} CSS files use direction-safe logical declarations.`);
|
||||
Reference in New Issue
Block a user