UNPKG

@lunora/cli

Version:

The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands

54 lines (51 loc) 2.55 kB
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 };