37 lines
1.1 KiB
JavaScript
Executable File
37 lines
1.1 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
import { readFileSync } from 'fs';
|
|
import path from 'path';
|
|
|
|
const file = path.resolve('src/lib/data/calculators.ts');
|
|
const text = readFileSync(file, 'utf8');
|
|
const start = text.indexOf('[');
|
|
const end = text.indexOf('];', start);
|
|
if (start === -1 || end === -1) {
|
|
console.error('Unable to locate calculators array in calculators.ts');
|
|
process.exit(1);
|
|
}
|
|
let arr = text.slice(start, end + 1).trim();
|
|
arr = arr.replace(/,\s*\]$/, ']');
|
|
let calculators;
|
|
try {
|
|
calculators = JSON.parse(arr);
|
|
} catch (err) {
|
|
console.error('Failed to parse calculators.ts as JSON:', err.message);
|
|
process.exit(1);
|
|
}
|
|
|
|
const offenders = calculators.filter(c =>
|
|
['3col', '3col-mul'].includes(c.type) &&
|
|
c.name.toLowerCase().includes(' to ') &&
|
|
(!c.labels?.in3 || c.labels.in3.toLowerCase() === 'result')
|
|
);
|
|
|
|
if (offenders.length) {
|
|
console.error(`3-col calculators with vague or missing output labels: ${offenders.length}`);
|
|
offenders.slice(0, 20).forEach(c => console.error(`- ${c.slug}`));
|
|
if (offenders.length > 20) console.error(`…and ${offenders.length - 20} more`);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('3-col label lint passed.');
|