← back to Homesonspec
apps/workers/src/cli.ts
60 lines
import { prisma } from "@homesonspec/database";
import { meridianHomesAdapter } from "@homesonspec/collector-meridian-homes";
import { tollBrothersAdapter } from "@homesonspec/collector-toll-brothers";
import { lennarAdapter } from "@homesonspec/collector-lennar";
import { drHortonAdapter } from "@homesonspec/collector-dr-horton";
import { kbHomeAdapter } from "@homesonspec/collector-kb-home";
import { pulteAdapter } from "@homesonspec/collector-pulte";
import { triPointeAdapter } from "@homesonspec/collector-tri-pointe";
import { taylorMorrisonAdapter } from "@homesonspec/collector-taylor-morrison";
import { discoveryAdapter } from "@homesonspec/collector-discovery";
import { davidWeekleyAdapter } from "@homesonspec/collector-david-weekley";
import { ashtonWoodsAdapter } from "@homesonspec/collector-ashton-woods";
import { runPipeline } from "./pipeline";
import { recordSourceRun } from "./verify";
/**
* Direct pipeline runner — no queue required.
* pnpm --filter @homesonspec/workers pipeline -- --adapter=meridian-homes-fixtures
*/
const ADAPTERS = {
[meridianHomesAdapter.key]: meridianHomesAdapter,
[tollBrothersAdapter.key]: tollBrothersAdapter,
[lennarAdapter.key]: lennarAdapter,
[drHortonAdapter.key]: drHortonAdapter,
[kbHomeAdapter.key]: kbHomeAdapter,
[pulteAdapter.key]: pulteAdapter,
[triPointeAdapter.key]: triPointeAdapter,
[taylorMorrisonAdapter.key]: taylorMorrisonAdapter,
[discoveryAdapter.key]: discoveryAdapter,
[davidWeekleyAdapter.key]: davidWeekleyAdapter,
[ashtonWoodsAdapter.key]: ashtonWoodsAdapter,
};
async function main() {
const arg = process.argv.find((a) => a.startsWith("--adapter="));
const key = arg?.split("=")[1] ?? meridianHomesAdapter.key;
const adapter = ADAPTERS[key];
if (!adapter) {
console.error(`Unknown adapter "${key}". Known: ${Object.keys(ADAPTERS).join(", ")}`);
process.exit(1);
}
console.log(`Running pipeline for ${key} (extractor v${adapter.version})…`);
try {
const summary = await runPipeline(adapter);
console.log(JSON.stringify(summary, null, 2));
} catch (err) {
// Record the failure so the failure streak advances toward auto-pause.
const message = err instanceof Error ? err.message : String(err);
await recordSourceRun(key, { ok: false, kind: "pipeline", message }).catch(() => {});
throw err;
}
}
main()
.catch((error) => {
console.error(error);
process.exitCode = 1;
})
.finally(() => prisma.$disconnect());