From 9f3523c57d77da554a4f8c294815323689c42f4e Mon Sep 17 00:00:00 2001 From: DaxDados Consultoria <124072804+daxdados@users.noreply.github.com> Date: Tue, 18 Aug 2026 16:18:04 +0100 Subject: [PATCH] Add read-only entity schema listing --- packages/cli/src/cli/commands/entities/list.ts | 15 +++++++++++++++ packages/cli/src/cli/commands/entities/push.ts | 4 +++- packages/cli/src/core/resources/entity/api.ts | 11 +++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 packages/cli/src/cli/commands/entities/list.ts 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 000000000..1ab4326bb --- /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 017531a76..be7af7937 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 b4add5597..791f057c7 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 {