Gå til innholdet

required-export-pattern

Verifiser at filer i en spesifikk mappe eksporterer en påkrevd funksjonssignatur.

Konvensjonsbaserte arkitekturer (CLI-kommandofiler, rutebehandlere, pluginmoduler) krever ofte at hver fil eksporterer en funksjon med et spesifikt navnemønster. Denne regelen skanner omfangsfiler etter en påkrevd eksport og rapporterer enhver fil som ikke samsvarer. Den bruker Promise.all() for å sjekke filer parallelt for ytelse.

src/commands/deploy.ts
// Missing the required register*Command export
export function deploy() {
// ...
}
src/commands/deploy.ts
import type { Command } from "commander";
export function registerDeployCommand(program: Command) {
program
.command("deploy")
.description("Deploy the application")
.action(() => {
// ...
});
}
/// <reference path="../rules.d.ts" />
export default {
rules: {
"register-function-export": {
description: "Command files must export a register*Command function",
async check(ctx) {
const files = ctx.scopedFiles.filter((f) => !f.endsWith("index.ts"));
const checks = files.map(async (file) => {
const content = await ctx.readFile(file);
if (!/export\s+function\s+register\w+Command/.test(content)) {
ctx.report.violation({
message: "Command file must export a register*Command function",
file,
});
}
});
await Promise.all(checks);
},
},
},
} satisfies RuleSet;

Tilpass mønsteret for andre konvensjoner:

// Express/Hono route handlers
/export\s+default\s+.*Router/
// React page components
/export\s+default\s+function\s+\w+Page/
// Plugin modules
/export\s+const\s+plugin\s*[:=]/

Når arkitekturen din krever et spesifikt eksportmønster fra filer i en mappe. Kombiner denne med ADR-ens files-frontmatter-felt for å avgrense den til riktig mappe.

Når mappen inneholder blandede filtyper som ikke alle trenger å følge det samme eksportmønsteret.