diff --git a/packages/cli/src/cli/commands/entities/list.ts b/packages/cli/src/cli/commands/entities/list.ts new file mode 100644 index 00000000..1ab4326b --- /dev/null +++ b/packages/cli/src/cli/commands/entities/list.ts @@ -0,0 +1,15 @@ +import { Command } from "commander"; +import type { CLIContext, RunCommandResult } from "@/cli/types.js"; +import { Base44Command } from "@/cli/utils/index.js"; +import { listEntitySchemas } from "@/core/resources/entity/index.js"; + +async function listEntitiesAction({ jsonMode }: CLIContext): Promise { + const catalog = await listEntitySchemas(); + return { stdout: jsonMode ? `${JSON.stringify(catalog)}\n` : undefined, outroMessage: jsonMode ? undefined : JSON.stringify(catalog, null, 2) }; +} + +export function getEntitiesListCommand(): Command { + return new Base44Command("list") + .description("List remote entity schemas (read-only)") + .action(listEntitiesAction); +} diff --git a/packages/cli/src/cli/commands/entities/push.ts b/packages/cli/src/cli/commands/entities/push.ts index 017531a7..be7af793 100644 --- a/packages/cli/src/cli/commands/entities/push.ts +++ b/packages/cli/src/cli/commands/entities/push.ts @@ -3,6 +3,7 @@ import type { CLIContext, RunCommandResult } from "@/cli/types.js"; import { Base44Command, confirmPush } from "@/cli/utils/index.js"; import { readProjectConfig } from "@/core/index.js"; import { pushEntities } from "@/core/resources/entity/index.js"; +import { getEntitiesListCommand } from "@/cli/commands/entities/list.js"; interface PushOptions { yes?: boolean; @@ -65,5 +66,6 @@ export function getEntitiesPushCommand(): Command { .description("Push local entities to Base44") .option("-y, --yes", "Skip confirmation prompt") .action(pushEntitiesAction), - ); + ) + .addCommand(getEntitiesListCommand()); } diff --git a/packages/cli/src/core/resources/entity/api.ts b/packages/cli/src/core/resources/entity/api.ts index b4add559..791f057c 100644 --- a/packages/cli/src/core/resources/entity/api.ts +++ b/packages/cli/src/core/resources/entity/api.ts @@ -7,6 +7,17 @@ import type { } from "@/core/resources/entity/schema.js"; import { SyncEntitiesResponseSchema } from "@/core/resources/entity/schema.js"; +/** Read the remote entity catalog without touching records or mutating resources. */ +export async function listEntitySchemas(): Promise { + const appClient = getAppClient(); + try { + const response = await appClient.get("entity-schemas"); + return await response.json(); + } catch (error) { + throw await ApiError.fromHttpError(error, "listing entity schemas"); + } +} + export async function syncEntities( entities: Entity[], ): Promise {