#!/usr/bin/env node import * as path from "node:path"; import { parseArgs } from "node:util"; import { build, upload, printBuildOutput, parseUploadsInput } from "@notionhq/custom-blocks/bundle"; import { buildApp } from "./build.js"; const USAGE = `Usage: notion-apps Commands: build Build the app in the current directory build-blocks Build browser bundles (--manifest --out ) upload-blocks Upload browser bundles (--uploads ) `; async function main(): Promise { const command = process.argv[2]; switch (command) { case "build": { const projectRoot = process.cwd(); const { manifest, bundlePath, manifestPath } = await buildApp(projectRoot); const count = manifest.capabilities.length; console.log( `Built ${path.relative(projectRoot, bundlePath)} and ` + `${path.relative(projectRoot, manifestPath)} ` + `(${count} ${count === 1 ? "capability" : "capabilities"})`, ); break; } case "build-blocks": { const { values } = parseArgs({ args: process.argv.slice(3), options: { manifest: { type: "string" }, out: { type: "string" }, cwd: { type: "string" }, }, }); if (!values.out) throw new Error("build-blocks requires --out "); printBuildOutput( await build({ out: values.out, manifest: values.manifest ?? "dist/manifest.json", cwd: values.cwd, }), ); break; } case "upload-blocks": { const { values } = parseArgs({ args: process.argv.slice(3), options: { uploads: { type: "string" } }, }); if (!values.uploads) throw new Error("upload-blocks requires --uploads "); console.log(JSON.stringify(await upload(parseUploadsInput(values.uploads)))); break; } case undefined: case "help": case "--help": console.log(USAGE); break; default: console.error(`Unknown command: ${command}\n\n${USAGE}`); process.exitCode = 1; } } main().catch((error: unknown) => { console.error(error instanceof Error ? error.message : String(error)); process.exitCode = 1; });