#!/usr/bin/env tsx
/**
* `deco-eitri` — CLI for producing a Studio-ready `.deco` from an Eitri app.
*
* deco-eitri init [--root
]
* Scaffold tsconfig.json (+ src/eitri-env.d.ts shim). Idempotent.
*
* deco-eitri generate [--root ] [--force] [any generate flags]
* Run the blocks-cli orchestrator with --platform eitri: emits a
* self-contained .deco/meta.gen.json + the .deco/blocks.gen.json
* snapshot, skipping the React-runtime generators.
*
* `generate` forwards every flag through to @decocms/blocks-cli's `generate`
* (see `deco-eitri generate --help`), only ensuring --platform eitri is set.
*/
import { runGenerate } from "@decocms/blocks-cli/generate";
import { runEitriInit } from "./init";
const USAGE = `\
deco-eitri — produce a Studio-ready .deco for an Eitri app
Usage:
deco-eitri init [--root ]
Scaffold tsconfig.json (extends @decocms/eitri/tsconfig) and a
src/eitri-env.d.ts shim. Never overwrites existing files.
deco-eitri generate [--root ] [--force] [...generate flags]
Generate .deco (self-contained meta.gen.json + blocks.gen.json snapshot)
with --platform eitri. All @decocms/blocks-cli generate flags are
forwarded; run \`deco-eitri generate --help\` for the full list.
`;
/** Pull `--root ` out of an argv slice (used by init). */
function valueFlag(argv: string[], flag: string): string | undefined {
const i = argv.indexOf(flag);
return i !== -1 ? argv[i + 1] : undefined;
}
async function main(): Promise {
const [command, ...rest] = process.argv.slice(2);
if (!command || command === "--help" || command === "-h") {
console.log(USAGE);
return command ? 0 : 1;
}
if (command === "init") {
const { created, skipped } = runEitriInit({ root: valueFlag(rest, "--root") });
for (const f of created) console.log(`[deco-eitri] created ${f}`);
for (const f of skipped) console.log(`[deco-eitri] skipped ${f} (already exists)`);
console.log(
created.length
? "[deco-eitri] init done — run `deco-eitri generate` to produce .deco"
: "[deco-eitri] init: nothing to do (already set up)",
);
return 0;
}
if (command === "generate") {
// Forward everything to the orchestrator, guaranteeing --platform eitri.
const args = rest.includes("--platform") ? rest : ["--platform", "eitri", ...rest];
return runGenerate(args);
}
console.error(`[deco-eitri] unknown command "${command}"\n`);
console.error(USAGE);
return 1;
}
main()
.then((code) => {
process.exitCode = code;
})
.catch((err) => {
console.error(err);
process.exit(1);
});