/** * ESLint Rule: ViewData Location * * Ensures ViewData types are in lib/view-data/, not templates/ */ module.exports = { meta: { type: 'problem', docs: { description: 'Ensure ViewData types are in lib/view-data/, not templates/', category: 'File Structure', recommended: true, }, messages: { wrongLocation: 'ViewData types must be in lib/view-data/, not templates/. See apps/website/docs/architecture/website/VIEW_DATA.md', }, schema: [], }, create(context) { const filename = context.getFilename(); return { ImportDeclaration(node) { const importPath = node.source.value; // Check for ViewData imports from templates if (importPath.includes('/templates/') && importPath.includes('ViewData')) { context.report({ node, messageId: 'wrongLocation', }); } }, // Also check if the file itself is a ViewData in wrong location Program(node) { if (filename.includes('/templates/') && filename.endsWith('ViewData.ts')) { context.report({ node, messageId: 'wrongLocation', }); } }, }; }, };