From a3eb0ca0fccda3556115f6b0071371846554e076 Mon Sep 17 00:00:00 2001 From: Pavel Tarnopolsky Date: Thu, 12 Feb 2026 11:28:55 +0200 Subject: [PATCH] feat(types): add ConnectorTypeRegistry to generated types Add connector type registry alongside existing entity, function, and agent registries in the generated types.d.ts file. Co-Authored-By: Claude Opus 4.6 --- src/cli/commands/types/generate.ts | 4 ++-- src/core/types/generator.ts | 11 +++++++---- tests/cli/types_generate.spec.ts | 6 +++++- .../base44/connectors/slack.jsonc | 4 ++++ 4 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 tests/fixtures/with-types-resources/base44/connectors/slack.jsonc diff --git a/src/cli/commands/types/generate.ts b/src/cli/commands/types/generate.ts index 356b4ed0..9066563f 100644 --- a/src/cli/commands/types/generate.ts +++ b/src/cli/commands/types/generate.ts @@ -8,10 +8,10 @@ import { generateTypesFile, updateProjectConfig } from "@/core/types/index.js"; const TYPES_FILE_PATH = "base44/.types/types.d.ts"; async function generateTypesAction(): Promise { - const { entities, functions, agents, project } = await readProjectConfig(); + const { entities, functions, agents, connectors, project } = await readProjectConfig(); await runTask("Generating types", async () => { - await generateTypesFile({ entities, functions, agents }); + await generateTypesFile({ entities, functions, agents, connectors }); }); const tsconfigUpdated = await updateProjectConfig(project.root); diff --git a/src/core/types/generator.ts b/src/core/types/generator.ts index 3ab2dce1..82b2ff3d 100644 --- a/src/core/types/generator.ts +++ b/src/core/types/generator.ts @@ -7,12 +7,14 @@ import { getAppConfig } from "@/core/project/app-config.js"; import type { AgentConfig } from "@/core/resources/agent/index.js"; import type { Entity } from "@/core/resources/entity/index.js"; import type { BackendFunction } from "@/core/resources/function/index.js"; +import type { ConnectorResource } from "@/core/resources/connector/index.js"; import { writeFile } from "@/core/utils/fs.js"; interface GenerateTypesInput { entities: Entity[]; functions: BackendFunction[]; agents: AgentConfig[]; + connectors: ConnectorResource[]; } const HEADER = stripIndent` @@ -24,8 +26,8 @@ const EMPTY_TEMPLATE = stripIndent` // Auto-generated by Base44 CLI - DO NOT EDIT // Regenerate with: base44 types // - // No entities, functions, or agents found in project. - // Add resources to base44/entities/, base44/functions/, or base44/agents/ + // No entities, functions, agents, or connectors found in project. + // Add resources to base44/entities/, base44/functions/, base44/agents/, or base44/connectors/ // and run \`base44 types generate\` again. declare module '@base44/sdk' { @@ -45,9 +47,9 @@ export async function generateTypesFile( } async function generateContent(input: GenerateTypesInput): Promise { - const { entities, functions, agents } = input; + const { entities, functions, agents, connectors } = input; - if (!entities.length && !functions.length && !agents.length) { + if (!entities.length && !functions.length && !agents.length && !connectors.length) { return EMPTY_TEMPLATE; } @@ -63,6 +65,7 @@ async function generateContent(input: GenerateTypesInput): Promise { ], ["FunctionNameRegistry", functions.map((f) => `"${f.name}": true;`)], ["AgentNameRegistry", agents.map((a) => `"${a.name}": true;`)], + ["ConnectorTypeRegistry", connectors.map((c) => `"${c.type}": true;`)], ]; // Generate registries (only for non-empty entries) diff --git a/tests/cli/types_generate.spec.ts b/tests/cli/types_generate.spec.ts index b1ce2609..b4a09e0a 100644 --- a/tests/cli/types_generate.spec.ts +++ b/tests/cli/types_generate.spec.ts @@ -41,6 +41,10 @@ describe("types generate command", () => { // Contains the AgentNameRegistry with the agent name expect(typesContent).toContain("AgentNameRegistry"); expect(typesContent).toContain(`"assistant": true`); + + // Contains the ConnectorTypeRegistry with the connector type + expect(typesContent).toContain("ConnectorTypeRegistry"); + expect(typesContent).toContain(`"slack": true`); }); it("updates tsconfig.json to include types path", async () => { @@ -79,7 +83,7 @@ describe("types generate command", () => { // And an empty template is generated const typesContent = await t.readProjectFile("base44/.types/types.d.ts"); expect(typesContent).not.toBeNull(); - expect(typesContent).toContain("No entities, functions, or agents found"); + expect(typesContent).toContain("No entities, functions, agents, or connectors found"); }); it("skips tsconfig update if types path already included", async () => { diff --git a/tests/fixtures/with-types-resources/base44/connectors/slack.jsonc b/tests/fixtures/with-types-resources/base44/connectors/slack.jsonc new file mode 100644 index 00000000..e1a4e781 --- /dev/null +++ b/tests/fixtures/with-types-resources/base44/connectors/slack.jsonc @@ -0,0 +1,4 @@ +{ + "type": "slack", + "scopes": ["chat:write"] +}