@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands
54 lines (51 loc) • 2.55 kB
JavaScript
import { runCodegen } from '@lunora/codegen';
import { collectWranglerSecretVariables } from '@lunora/config';
import { p as parseApiSpec } from '../packem_shared/api-spec-Bx0iKbxA.mjs';
import { d as defineHandler } from '../packem_shared/command-lYnl4QyF.mjs';
import { v as validateOutputFormat, p as printJson, l as loggerForFormat, i as isJsonFormat } from '../packem_shared/output-format-B4642rjE.mjs';
const CRON_TRIGGER_LIMIT = 3;
const runCodegenCommand = (options) => {
const projectRoot = options.cwd ?? process.cwd();
const json = isJsonFormat(options.format);
const logger = loggerForFormat(options.format, options.logger);
const formatError = validateOutputFormat("codegen", options.format);
if (formatError !== void 0) {
options.logger.error(formatError);
return { advisories: [], cronTriggers: [], error: formatError, outputDirectory: "" };
}
const result = runCodegen({ apiSpec: options.apiSpec, projectRoot, wranglerVariables: collectWranglerSecretVariables(projectRoot) });
const commandResult = {
advisories: result.advisories.map((advisory) => {
return {
detail: advisory.detail,
level: advisory.level,
name: advisory.name,
remediation: advisory.remediation
};
}),
cronTriggers: result.cronTriggers,
outputDirectory: result.outputDirectory
};
logger.success(`codegen wrote dataModel.ts, api.ts, server.ts to ${result.outputDirectory}`);
if (result.advisories.length > 0) {
const count = result.advisories.length;
const lines = result.advisories.map((advisory) => ` [${advisory.level}] ${advisory.name} — ${advisory.detail}
↳ ${advisory.remediation}`);
logger.warn(`${count.toString()} schema ${count === 1 ? "advisory" : "advisories"}:
${lines.join("\n")}`);
}
if (result.cronTriggers.length > CRON_TRIGGER_LIMIT) {
logger.warn(
`${result.cronTriggers.length.toString()} distinct cron expressions declared — Cloudflare allows at most ${CRON_TRIGGER_LIMIT.toString()} Cron Triggers per Worker. Consolidate schedules (jobs can share one expression) or move finer-grained work to Durable Object alarms via @lunora/scheduler (runAfter/runAt).`
);
}
if (json) {
printJson(commandResult);
}
return commandResult;
};
const execute = defineHandler(({ cwd, logger, options }) => {
const result = runCodegenCommand({ apiSpec: parseApiSpec(options.apiSpec), cwd, format: options.format, logger });
return { code: result.error === void 0 ? 0 : 1 };
});
export { execute, runCodegenCommand };