import type { LintDiagnostic } from '../diagnostic.js' import { isProductionSource, type DomainProject } from '../project.js' import { importedCalls } from '../source.js' import { analyzerDiagnostic, type AnalyzerRule } from './project-rule.js' const sdkModules = new Set(['@astrale-os/sdk']) const remoteDefinitions = new Set(['defineRemoteFunction', 'remoteMethod']) export const oneRemoteDefinitionPerFile: AnalyzerRule = { slug: 'one-remote-definition-per-file', analyze(project: DomainProject): readonly LintDiagnostic[] { const diagnostics: LintDiagnostic[] = [] for (const file of project.files) { if (!isProductionSource(file.relativePath)) continue const definitions = importedCalls(file, sdkModules, remoteDefinitions) for (const definition of definitions.slice(1)) { const diagnostic = analyzerDiagnostic( this.slug, file, definition, `Found ${definitions.length} definitions.`, ) if (diagnostic) diagnostics.push(diagnostic) } } return diagnostics }, }