brick-codegen
Version:
Better React Native native module development
70 lines (68 loc) • 2.45 kB
JavaScript
import { NewBrickCodegen } from "./src-C3eLVBlf.js";
import { program } from "@commander-js/extra-typings";
import { readFileSync } from "fs";
import { dirname, join } from "path";
import pc from "picocolors";
import { fileURLToPath } from "url";
//#region src/cli.ts
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const packageJson = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
function log(message) {
console.log(`${pc.bold(pc.green("[Brick]"))} ${message}`);
}
function logError(message) {
console.error(`${pc.bold(pc.green("[Brick]"))} ${pc.red(message)}`);
}
program.name("brick-codegen").description("Brick Module Framework - React Native TurboModule Code Generator").version(packageJson.version).option("--debug", "Enable debug logging", false).option("--output-ios <path>", "Custom iOS output directory").option("--output-android <path>", "Custom Android output directory").option("--platform <platform>", "Target platform: ios or android");
program.action(async (options) => {
await runGenerate(options);
});
async function runGenerate(options) {
try {
const config = await buildConfig(options);
const codegen = new NewBrickCodegen(config);
const result = await codegen.generate();
if (result.success) log("Done.");
else {
if (result.errors.length > 0) for (const error of result.errors) logError(error);
process.exit(1);
}
} catch (error) {
logError(`${error instanceof Error ? error.message : "Unknown error"}`);
process.exit(1);
}
}
async function buildConfig(options) {
const projectRoot = process.cwd();
const platforms = parsePlatformOptions(options);
return {
projectRoot,
outputIos: options.outputIos,
outputAndroid: options.outputAndroid,
debug: options.debug || false,
platforms
};
}
function parsePlatformOptions(options) {
if (!options.platform) return void 0;
const platform = options.platform.trim().toLowerCase();
if (!["ios", "android"].includes(platform)) {
logError(`Invalid platform: ${platform}. Supported platforms: ios, android`);
process.exit(1);
}
return [platform];
}
process.on("uncaughtException", (error) => {
logError(`Uncaught exception: ${error.message}`);
process.exit(1);
});
process.on("unhandledRejection", (reason) => {
logError(`Unhandled rejection: ${reason}`);
process.exit(1);
});
program.parse();
//#endregion
export { };
//# sourceMappingURL=cli.js.map