@tambo-ai/react 0.69.0 → 0.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/dist/hooks/use-tambo-threads.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +4 -5
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +4 -5
- package/dist/mcp/index.js.map +1 -1
- package/dist/model/component-metadata.d.ts +88 -241
- package/dist/model/component-metadata.d.ts.map +1 -1
- package/dist/model/component-metadata.js.map +1 -1
- package/dist/model/mcp-server-info.d.ts +3 -3
- package/dist/model/mcp-server-info.js.map +1 -1
- package/dist/providers/hooks/use-tambo-session-token.test.js.map +1 -1
- package/dist/providers/tambo-component-provider.d.ts +2 -2
- package/dist/providers/tambo-component-provider.d.ts.map +1 -1
- package/dist/providers/tambo-component-provider.js.map +1 -1
- package/dist/providers/tambo-interactable-provider.d.ts +1 -1
- package/dist/providers/tambo-registry-provider.d.ts +4 -4
- package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
- package/dist/providers/tambo-registry-provider.js +11 -8
- package/dist/providers/tambo-registry-provider.js.map +1 -1
- package/dist/providers/tambo-registry-provider.test.js +31 -0
- package/dist/providers/tambo-registry-provider.test.js.map +1 -1
- package/dist/providers/tambo-registry-schema-compat.test.js +42 -52
- package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -1
- package/dist/providers/tambo-stubs.d.ts +2 -2
- package/dist/providers/tambo-stubs.d.ts.map +1 -1
- package/dist/providers/tambo-stubs.js.map +1 -1
- package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +1 -1
- package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
- package/dist/providers/tambo-thread-provider.js +110 -142
- package/dist/providers/tambo-thread-provider.js.map +1 -1
- package/dist/providers/tambo-thread-provider.test.js +362 -445
- package/dist/providers/tambo-thread-provider.test.js.map +1 -1
- package/dist/schema/index.d.ts +1 -2
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -5
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/schema.d.ts +7 -24
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +34 -105
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/schema.test.js +26 -124
- package/dist/schema/schema.test.js.map +1 -1
- package/dist/testing/tools.d.ts +2 -12
- package/dist/testing/tools.d.ts.map +1 -1
- package/dist/testing/tools.js +1 -20
- package/dist/testing/tools.js.map +1 -1
- package/dist/testing/types.d.ts +2 -2
- package/dist/testing/types.d.ts.map +1 -1
- package/dist/testing/types.js.map +1 -1
- package/dist/util/registry-validators.d.ts +2 -2
- package/dist/util/registry-validators.d.ts.map +1 -1
- package/dist/util/registry-validators.js +37 -17
- package/dist/util/registry-validators.js.map +1 -1
- package/dist/util/registry-validators.test.js +64 -25
- package/dist/util/registry-validators.test.js.map +1 -1
- package/dist/util/registry.d.ts +4 -10
- package/dist/util/registry.d.ts.map +1 -1
- package/dist/util/registry.js +6 -22
- package/dist/util/registry.js.map +1 -1
- package/dist/util/registry.test.js +1 -47
- package/dist/util/registry.test.js.map +1 -1
- package/dist/util/tool-caller.d.ts +2 -2
- package/dist/util/tool-caller.d.ts.map +1 -1
- package/dist/util/tool-caller.js +5 -12
- package/dist/util/tool-caller.js.map +1 -1
- package/dist/v1/index.d.ts +35 -0
- package/dist/v1/index.d.ts.map +1 -0
- package/dist/v1/index.js +47 -0
- package/dist/v1/index.js.map +1 -0
- package/dist/v1/types/component.d.ts +47 -0
- package/dist/v1/types/component.d.ts.map +1 -0
- package/dist/v1/types/component.js +11 -0
- package/dist/v1/types/component.js.map +1 -0
- package/dist/v1/types/event.d.ts +63 -0
- package/dist/v1/types/event.d.ts.map +1 -0
- package/dist/v1/types/event.js +9 -0
- package/dist/v1/types/event.js.map +1 -0
- package/dist/v1/types/message.d.ts +39 -0
- package/dist/v1/types/message.d.ts.map +1 -0
- package/dist/v1/types/message.js +10 -0
- package/dist/v1/types/message.js.map +1 -0
- package/dist/v1/types/thread.d.ts +54 -0
- package/dist/v1/types/thread.d.ts.map +1 -0
- package/dist/v1/types/thread.js +9 -0
- package/dist/v1/types/thread.js.map +1 -0
- package/dist/v1/types/tool.d.ts +52 -0
- package/dist/v1/types/tool.d.ts.map +1 -0
- package/dist/v1/types/tool.js +11 -0
- package/dist/v1/types/tool.js.map +1 -0
- package/esm/hooks/use-tambo-threads.test.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js.map +1 -1
- package/esm/mcp/index.d.ts +4 -5
- package/esm/mcp/index.d.ts.map +1 -1
- package/esm/mcp/index.js +4 -5
- package/esm/mcp/index.js.map +1 -1
- package/esm/model/component-metadata.d.ts +88 -241
- package/esm/model/component-metadata.d.ts.map +1 -1
- package/esm/model/component-metadata.js.map +1 -1
- package/esm/model/mcp-server-info.d.ts +3 -3
- package/esm/model/mcp-server-info.js.map +1 -1
- package/esm/providers/hooks/use-tambo-session-token.test.js.map +1 -1
- package/esm/providers/tambo-component-provider.d.ts +2 -2
- package/esm/providers/tambo-component-provider.d.ts.map +1 -1
- package/esm/providers/tambo-component-provider.js.map +1 -1
- package/esm/providers/tambo-interactable-provider.d.ts +1 -1
- package/esm/providers/tambo-registry-provider.d.ts +4 -4
- package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
- package/esm/providers/tambo-registry-provider.js +11 -8
- package/esm/providers/tambo-registry-provider.js.map +1 -1
- package/esm/providers/tambo-registry-provider.test.js +31 -0
- package/esm/providers/tambo-registry-provider.test.js.map +1 -1
- package/esm/providers/tambo-registry-schema-compat.test.js +42 -52
- package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -1
- package/esm/providers/tambo-stubs.d.ts +2 -2
- package/esm/providers/tambo-stubs.d.ts.map +1 -1
- package/esm/providers/tambo-stubs.js.map +1 -1
- package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +1 -1
- package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
- package/esm/providers/tambo-thread-provider.js +110 -142
- package/esm/providers/tambo-thread-provider.js.map +1 -1
- package/esm/providers/tambo-thread-provider.test.js +329 -445
- package/esm/providers/tambo-thread-provider.test.js.map +1 -1
- package/esm/schema/index.d.ts +1 -2
- package/esm/schema/index.d.ts.map +1 -1
- package/esm/schema/index.js +1 -2
- package/esm/schema/index.js.map +1 -1
- package/esm/schema/schema.d.ts +7 -24
- package/esm/schema/schema.d.ts.map +1 -1
- package/esm/schema/schema.js +34 -103
- package/esm/schema/schema.js.map +1 -1
- package/esm/schema/schema.test.js +27 -125
- package/esm/schema/schema.test.js.map +1 -1
- package/esm/testing/tools.d.ts +2 -12
- package/esm/testing/tools.d.ts.map +1 -1
- package/esm/testing/tools.js +2 -20
- package/esm/testing/tools.js.map +1 -1
- package/esm/testing/types.d.ts +2 -2
- package/esm/testing/types.d.ts.map +1 -1
- package/esm/testing/types.js.map +1 -1
- package/esm/util/registry-validators.d.ts +2 -2
- package/esm/util/registry-validators.d.ts.map +1 -1
- package/esm/util/registry-validators.js +38 -18
- package/esm/util/registry-validators.js.map +1 -1
- package/esm/util/registry-validators.test.js +64 -25
- package/esm/util/registry-validators.test.js.map +1 -1
- package/esm/util/registry.d.ts +4 -10
- package/esm/util/registry.d.ts.map +1 -1
- package/esm/util/registry.js +7 -22
- package/esm/util/registry.js.map +1 -1
- package/esm/util/registry.test.js +3 -49
- package/esm/util/registry.test.js.map +1 -1
- package/esm/util/tool-caller.d.ts +2 -2
- package/esm/util/tool-caller.d.ts.map +1 -1
- package/esm/util/tool-caller.js +5 -12
- package/esm/util/tool-caller.js.map +1 -1
- package/esm/v1/index.d.ts +35 -0
- package/esm/v1/index.d.ts.map +1 -0
- package/esm/v1/index.js +46 -0
- package/esm/v1/index.js.map +1 -0
- package/esm/v1/types/component.d.ts +47 -0
- package/esm/v1/types/component.d.ts.map +1 -0
- package/esm/v1/types/component.js +10 -0
- package/esm/v1/types/component.js.map +1 -0
- package/esm/v1/types/event.d.ts +63 -0
- package/esm/v1/types/event.d.ts.map +1 -0
- package/esm/v1/types/event.js +8 -0
- package/esm/v1/types/event.js.map +1 -0
- package/esm/v1/types/message.d.ts +39 -0
- package/esm/v1/types/message.d.ts.map +1 -0
- package/esm/v1/types/message.js +9 -0
- package/esm/v1/types/message.js.map +1 -0
- package/esm/v1/types/thread.d.ts +54 -0
- package/esm/v1/types/thread.d.ts.map +1 -0
- package/esm/v1/types/thread.js +8 -0
- package/esm/v1/types/thread.js.map +1 -0
- package/esm/v1/types/tool.d.ts +52 -0
- package/esm/v1/types/tool.d.ts.map +1 -0
- package/esm/v1/types/tool.js +10 -0
- package/esm/v1/types/tool.js.map +1 -0
- package/package.json +18 -8
- package/dist/schema/zod.d.ts +0 -57
- package/dist/schema/zod.d.ts.map +0 -1
- package/dist/schema/zod.js +0 -191
- package/dist/schema/zod.js.map +0 -1
- package/dist/schema/zod.test.d.ts +0 -2
- package/dist/schema/zod.test.d.ts.map +0 -1
- package/dist/schema/zod.test.js +0 -663
- package/dist/schema/zod.test.js.map +0 -1
- package/esm/schema/zod.d.ts +0 -57
- package/esm/schema/zod.d.ts.map +0 -1
- package/esm/schema/zod.js +0 -180
- package/esm/schema/zod.js.map +0 -1
- package/esm/schema/zod.test.d.ts +0 -2
- package/esm/schema/zod.test.d.ts.map +0 -1
- package/esm/schema/zod.test.js +0 -628
- package/esm/schema/zod.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tambo-registry-provider.test.js","sourceRoot":"","sources":["../../src/providers/tambo-registry-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { act, renderHook } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { TamboComponent, TamboTool } from \"../model/component-metadata\";\nimport { defineTool } from \"../util/registry\";\nimport {\n TamboRegistryProvider,\n useTamboRegistry,\n} from \"./tambo-registry-provider\";\n\n// Shared tool registry for all tests\nconst createMockTools = (): TamboTool[] => [\n defineTool({\n name: \"test-tool-1\",\n description: \"First test tool\",\n tool: jest.fn().mockResolvedValue(\"test-tool-1-result\"),\n inputSchema: z.object({\n input: z.string().describe(\"input parameter\"),\n }),\n outputSchema: z.string(),\n }),\n defineTool({\n name: \"test-tool-2\",\n description: \"Second test tool\",\n tool: jest.fn().mockResolvedValue(\"test-tool-2-result\"),\n inputSchema: z.object({\n value: z.number().describe(\"number parameter\"),\n }),\n outputSchema: z.string(),\n }),\n];\n\nconst createMockComponents = (tools: TamboTool[]): TamboComponent[] => [\n {\n name: \"TestComponent\",\n component: () => <div>TestComponent</div>,\n description: \"Test component\",\n propsSchema: z.object({\n test: z.string(),\n }),\n associatedTools: tools,\n },\n];\n\ndescribe(\"TamboRegistryProvider\", () => {\n const mockTools = createMockTools();\n const mockComponents = createMockComponents(mockTools);\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n describe(\"Component and tool registration\", () => {\n it(\"should register components and tools correctly\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider components={mockComponents}>\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.componentList).toHaveProperty(\"TestComponent\");\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-1\");\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-2\");\n expect(result.current.componentToolAssociations).toHaveProperty(\n \"TestComponent\",\n );\n expect(result.current.componentToolAssociations.TestComponent).toEqual([\n \"test-tool-1\",\n \"test-tool-2\",\n ]);\n });\n\n it(\"should provide onCallUnregisteredTool in context\", () => {\n const mockonCallUnregisteredTool = jest\n .fn()\n .mockResolvedValue(\"test-result\");\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider\n components={mockComponents}\n onCallUnregisteredTool={mockonCallUnregisteredTool}\n >\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // The onCallUnregisteredTool should be available in the context\n expect(result.current.onCallUnregisteredTool).toBeDefined();\n expect(typeof result.current.onCallUnregisteredTool).toBe(\"function\");\n });\n\n it(\"should handle tool registration and association\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Register a new tool\n act(() => {\n result.current.registerTool(mockTools[0]);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-1\");\n\n // Register a new component\n act(() => {\n result.current.registerComponent(mockComponents[0]);\n });\n\n expect(result.current.componentList).toHaveProperty(\"TestComponent\");\n expect(result.current.componentToolAssociations).toHaveProperty(\n \"TestComponent\",\n );\n });\n\n it(\"should handle multiple tool registration\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Register multiple tools\n act(() => {\n result.current.registerTools(mockTools);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-1\");\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-2\");\n expect(Object.keys(result.current.toolRegistry)).toHaveLength(2);\n });\n it(\"should preserve maxCalls when registering a tool\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const maxTool: TamboTool = {\n name: \"max-tool\",\n description: \"Tool with maxCalls\",\n tool: jest.fn().mockResolvedValue(\"ok\"),\n inputSchema: z.object({}),\n outputSchema: z.object(),\n maxCalls: 4,\n };\n\n act(() => {\n result.current.registerTool(maxTool);\n });\n\n expect(result.current.toolRegistry[\"max-tool\"].maxCalls).toBe(4);\n });\n\n it(\"should handle tool association with components\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider components={mockComponents}>\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Add a new tool association\n const newTool: TamboTool = {\n name: \"new-tool\",\n description: \"New tool\",\n tool: jest.fn().mockResolvedValue(\"new-tool-result\"),\n inputSchema: z.object({\n input: z.string().describe(\"input\"),\n }),\n outputSchema: z.string(),\n };\n\n // First register the tool\n act(() => {\n result.current.registerTool(newTool);\n });\n\n // Then add the association\n act(() => {\n result.current.addToolAssociation(\"TestComponent\", newTool);\n });\n\n expect(result.current.componentToolAssociations.TestComponent).toContain(\n \"new-tool\",\n );\n });\n\n it(\"should throw error when adding tool association to non-existent component\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const newTool: TamboTool = {\n name: \"new-tool\",\n description: \"New tool\",\n tool: jest.fn().mockResolvedValue(\"new-tool-result\"),\n inputSchema: z.object({\n input: z.string().describe(\"input\"),\n }),\n outputSchema: z.string(),\n };\n\n expect(() => {\n act(() => {\n result.current.addToolAssociation(\"NonExistentComponent\", newTool);\n });\n }).toThrow(\"Component NonExistentComponent not found in registry\");\n });\n\n it(\"should validate tool schemas and throw error for invalid schemas\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const invalidTool: TamboTool = {\n name: \"invalid-tool\",\n description: \"Invalid tool\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z.record(z.string(), z.string()), // This should cause validation to fail\n outputSchema: z.string(),\n };\n\n // This should throw during registration due to invalid schema\n expect(() => {\n act(() => {\n result.current.registerTool(invalidTool);\n });\n }).toThrow(\n 'Record types (objects with dynamic keys) are not supported in inputSchema of tool \"invalid-tool\". Found at path \"(root)\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should validate component schemas and throw error for invalid schemas\", () => {\n const invalidComponent: TamboComponent = {\n name: \"InvalidComponent\",\n component: () => <div>Invalid</div>,\n description: \"Invalid component\",\n propsSchema: z.record(z.string(), z.string()), // This should cause validation to fail\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // This should throw during registration due to invalid schema\n expect(() => {\n act(() => {\n result.current.registerComponent(invalidComponent);\n });\n }).toThrow(\n 'Record types (objects with dynamic keys) are not supported in propsSchema of component \"InvalidComponent\"',\n );\n });\n\n it(\"should throw error when component has both propsSchema and propsDefinition\", () => {\n const invalidComponent: TamboComponent = {\n name: \"InvalidComponent\",\n component: () => <div>Invalid</div>,\n description: \"Invalid component\",\n propsSchema: z.object({ test: z.string() }),\n propsDefinition: { test: \"string\" }, // Both defined - should throw\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(() => {\n act(() => {\n result.current.registerComponent(invalidComponent);\n });\n }).toThrow(\n \"Component InvalidComponent cannot have both propsSchema and propsDefinition defined\",\n );\n });\n\n it(\"should throw error when component has neither propsSchema nor propsDefinition\", () => {\n const invalidComponent: TamboComponent = {\n name: \"InvalidComponent\",\n component: () => <div>Invalid</div>,\n description: \"Invalid component\",\n // Neither propsSchema nor propsDefinition defined - should throw\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(() => {\n act(() => {\n result.current.registerComponent(invalidComponent);\n });\n }).toThrow(\n \"Component InvalidComponent must have either propsSchema (recommended) or propsDefinition defined\",\n );\n });\n\n it(\"should throw error when tool name contains spaces\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const invalidTool: TamboTool = {\n name: \"invalid tool name\", // Contains spaces\n description: \"Tool with spaces in name\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z.object({\n input: z.string(),\n }),\n outputSchema: z.string(),\n };\n\n expect(() => {\n act(() => {\n result.current.registerTool(invalidTool);\n });\n }).toThrow(\n 'tool \"invalid tool name\" must only contain letters, numbers, underscores, and hyphens.',\n );\n });\n\n it(\"should throw error when component name contains spaces\", () => {\n const invalidComponent: TamboComponent = {\n name: \"Invalid Component Name\", // Contains spaces\n component: () => <div>Invalid</div>,\n description: \"Component with spaces in name\",\n propsSchema: z.object({ test: z.string() }),\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(() => {\n act(() => {\n result.current.registerComponent(invalidComponent);\n });\n }).toThrow(\n 'component \"Invalid Component Name\" must only contain letters, numbers, underscores, and hyphens.',\n );\n });\n });\n\n describe(\"Tool call handling\", () => {\n it(\"should provide onCallUnregisteredTool callback for handling unknown tools\", async () => {\n const mockonCallUnregisteredTool = jest\n .fn()\n .mockResolvedValue(\"unknown-tool-result\");\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider\n components={mockComponents}\n onCallUnregisteredTool={mockonCallUnregisteredTool}\n >\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Verify the callback is available\n expect(result.current.onCallUnregisteredTool).toBeDefined();\n expect(typeof result.current.onCallUnregisteredTool).toBe(\"function\");\n\n // Simulate calling the unknown tool handler\n const toolName = \"unknown-tool\";\n const args = [{ parameterName: \"input\", parameterValue: \"test-input\" }];\n\n await act(async () => {\n if (result.current.onCallUnregisteredTool) {\n await result.current.onCallUnregisteredTool(toolName, args);\n }\n });\n\n expect(mockonCallUnregisteredTool).toHaveBeenCalledWith(toolName, args);\n });\n\n it(\"should handle onCallUnregisteredTool being undefined\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider components={mockComponents}>\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.onCallUnregisteredTool).toBeUndefined();\n });\n });\n\n describe(\"Resource registration\", () => {\n it(\"should register static resources via props\", () => {\n const staticResources = [\n {\n uri: \"file:///local/doc.txt\",\n name: \"Local Document\",\n mimeType: \"text/plain\",\n },\n {\n uri: \"file:///local/image.png\",\n name: \"Local Image\",\n mimeType: \"image/png\",\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider resources={staticResources}>\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.resources).toHaveLength(2);\n expect(result.current.resources[0].uri).toBe(\"file:///local/doc.txt\");\n expect(result.current.resources[1].uri).toBe(\"file:///local/image.png\");\n });\n\n it(\"should register resources dynamically via registerResource\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const newResource = {\n uri: \"file:///dynamic/doc.txt\",\n name: \"Dynamic Document\",\n mimeType: \"text/plain\",\n };\n\n act(() => {\n result.current.registerResource(newResource);\n });\n\n expect(result.current.resources).toHaveLength(1);\n expect(result.current.resources[0].uri).toBe(\"file:///dynamic/doc.txt\");\n });\n\n it(\"should register multiple resources via registerResources\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const newResources = [\n {\n uri: \"file:///batch/doc1.txt\",\n name: \"Batch Document 1\",\n mimeType: \"text/plain\",\n },\n {\n uri: \"file:///batch/doc2.txt\",\n name: \"Batch Document 2\",\n mimeType: \"text/plain\",\n },\n ];\n\n act(() => {\n result.current.registerResources(newResources);\n });\n\n expect(result.current.resources).toHaveLength(2);\n expect(result.current.resources[0].uri).toBe(\"file:///batch/doc1.txt\");\n expect(result.current.resources[1].uri).toBe(\"file:///batch/doc2.txt\");\n });\n\n it(\"should register resource source via props\", () => {\n const mockListResources = jest.fn().mockResolvedValue([]);\n const mockGetResource = jest.fn().mockResolvedValue({\n contents: [{ uri: \"\", mimeType: \"text/plain\", text: \"\" }],\n });\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider\n listResources={mockListResources}\n getResource={mockGetResource}\n >\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.resourceSource).not.toBeNull();\n expect(result.current.resourceSource?.listResources).toBe(\n mockListResources,\n );\n expect(result.current.resourceSource?.getResource).toBe(mockGetResource);\n });\n\n it(\"should register resource source via registerResourceSource\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const mockListResources = jest.fn().mockResolvedValue([]);\n const mockGetResource = jest.fn().mockResolvedValue({\n contents: [{ uri: \"\", mimeType: \"text/plain\", text: \"\" }],\n });\n\n act(() => {\n result.current.registerResourceSource({\n listResources: mockListResources,\n getResource: mockGetResource,\n });\n });\n\n expect(result.current.resourceSource).not.toBeNull();\n expect(result.current.resourceSource?.listResources).toBe(\n mockListResources,\n );\n expect(result.current.resourceSource?.getResource).toBe(mockGetResource);\n });\n\n it(\"should throw error when only listResources is provided\", () => {\n const mockListResources = jest.fn().mockResolvedValue([]);\n\n expect(() => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider listResources={mockListResources}>\n {children}\n </TamboRegistryProvider>\n );\n renderHook(() => useTamboRegistry(), { wrapper });\n }).toThrow(\n \"Both listResources and getResource must be provided together\",\n );\n });\n\n it(\"should throw error when only getResource is provided\", () => {\n const mockGetResource = jest.fn().mockResolvedValue({\n contents: [{ uri: \"\", mimeType: \"text/plain\", text: \"\" }],\n });\n\n expect(() => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider getResource={mockGetResource}>\n {children}\n </TamboRegistryProvider>\n );\n renderHook(() => useTamboRegistry(), { wrapper });\n }).toThrow(\n \"Both listResources and getResource must be provided together\",\n );\n });\n\n it(\"should validate resource has required uri field\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const invalidResource = {\n name: \"Document without URI\",\n mimeType: \"text/plain\",\n } as any;\n\n expect(() => {\n act(() => {\n result.current.registerResource(invalidResource);\n });\n }).toThrow(\"Resource must have a 'uri' field\");\n });\n\n it(\"should validate resource has required name field\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const invalidResource = {\n uri: \"file:///doc.txt\",\n mimeType: \"text/plain\",\n } as any;\n\n expect(() => {\n act(() => {\n result.current.registerResource(invalidResource);\n });\n }).toThrow(\n \"Resource with URI 'file:///doc.txt' must have a 'name' field\",\n );\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"tambo-registry-provider.test.js","sourceRoot":"","sources":["../../src/providers/tambo-registry-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { act, renderHook } from \"@testing-library/react\";\nimport React from \"react\";\nimport { z } from \"zod/v4\";\nimport { TamboComponent, TamboTool } from \"../model/component-metadata\";\nimport { defineTool } from \"../util/registry\";\nimport {\n TamboRegistryProvider,\n useTamboRegistry,\n} from \"./tambo-registry-provider\";\n\n// Shared tool registry for all tests\nconst createMockTools = (): TamboTool[] => [\n defineTool({\n name: \"test-tool-1\",\n description: \"First test tool\",\n tool: jest.fn().mockResolvedValue(\"test-tool-1-result\"),\n inputSchema: z.object({\n input: z.string().describe(\"input parameter\"),\n }),\n outputSchema: z.string(),\n }),\n defineTool({\n name: \"test-tool-2\",\n description: \"Second test tool\",\n tool: jest.fn().mockResolvedValue(\"test-tool-2-result\"),\n inputSchema: z.object({\n value: z.number().describe(\"number parameter\"),\n }),\n outputSchema: z.string(),\n }),\n];\n\nconst createMockComponents = (tools: TamboTool[]): TamboComponent[] => [\n {\n name: \"TestComponent\",\n component: () => <div>TestComponent</div>,\n description: \"Test component\",\n propsSchema: z.object({\n test: z.string(),\n }),\n associatedTools: tools,\n },\n];\n\ndescribe(\"TamboRegistryProvider\", () => {\n const mockTools = createMockTools();\n const mockComponents = createMockComponents(mockTools);\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n describe(\"Component and tool registration\", () => {\n it(\"should register components and tools correctly\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider components={mockComponents}>\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.componentList).toHaveProperty(\"TestComponent\");\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-1\");\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-2\");\n expect(result.current.componentToolAssociations).toHaveProperty(\n \"TestComponent\",\n );\n expect(result.current.componentToolAssociations.TestComponent).toEqual([\n \"test-tool-1\",\n \"test-tool-2\",\n ]);\n });\n\n it(\"should provide onCallUnregisteredTool in context\", () => {\n const mockonCallUnregisteredTool = jest\n .fn()\n .mockResolvedValue(\"test-result\");\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider\n components={mockComponents}\n onCallUnregisteredTool={mockonCallUnregisteredTool}\n >\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // The onCallUnregisteredTool should be available in the context\n expect(result.current.onCallUnregisteredTool).toBeDefined();\n expect(typeof result.current.onCallUnregisteredTool).toBe(\"function\");\n });\n\n it(\"should handle tool registration and association\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Register a new tool\n act(() => {\n result.current.registerTool(mockTools[0]);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-1\");\n\n // Register a new component\n act(() => {\n result.current.registerComponent(mockComponents[0]);\n });\n\n expect(result.current.componentList).toHaveProperty(\"TestComponent\");\n expect(result.current.componentToolAssociations).toHaveProperty(\n \"TestComponent\",\n );\n });\n\n it(\"should handle multiple tool registration\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Register multiple tools\n act(() => {\n result.current.registerTools(mockTools);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-1\");\n expect(result.current.toolRegistry).toHaveProperty(\"test-tool-2\");\n expect(Object.keys(result.current.toolRegistry)).toHaveLength(2);\n });\n it(\"should preserve maxCalls when registering a tool\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const maxTool: TamboTool = {\n name: \"max-tool\",\n description: \"Tool with maxCalls\",\n tool: jest.fn().mockResolvedValue(\"ok\"),\n inputSchema: z.object({}),\n outputSchema: z.object(),\n maxCalls: 4,\n };\n\n act(() => {\n result.current.registerTool(maxTool);\n });\n\n expect(result.current.toolRegistry[\"max-tool\"].maxCalls).toBe(4);\n });\n\n it(\"should warn when overwriting an existing tool by default\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n const consoleWarnSpy = jest.spyOn(console, \"warn\").mockImplementation();\n\n // Register a tool\n act(() => {\n result.current.registerTool(mockTools[0]);\n });\n\n // Register the same tool again (should warn by default)\n act(() => {\n result.current.registerTool(mockTools[0]);\n });\n\n expect(consoleWarnSpy).toHaveBeenCalledWith(\n expect.stringContaining(\"Overwriting tool test-tool-1\"),\n );\n\n consoleWarnSpy.mockRestore();\n });\n\n it(\"should not warn when overwriting a tool if warnOnOverwrite is false\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n const consoleWarnSpy = jest.spyOn(console, \"warn\").mockImplementation();\n\n // Register a tool\n act(() => {\n result.current.registerTool(mockTools[0], false);\n });\n\n // Register the same tool again with warnOnOverwrite=false\n act(() => {\n result.current.registerTool(mockTools[0], false);\n });\n\n // Should not warn about \"Registering new tool\"\n expect(consoleWarnSpy).not.toHaveBeenCalledWith(\n expect.stringContaining(\"Overwriting tool test-tool-1\"),\n );\n\n consoleWarnSpy.mockRestore();\n });\n\n it(\"should handle tool association with components\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider components={mockComponents}>\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Add a new tool association\n const newTool: TamboTool = {\n name: \"new-tool\",\n description: \"New tool\",\n tool: jest.fn().mockResolvedValue(\"new-tool-result\"),\n inputSchema: z.object({\n input: z.string().describe(\"input\"),\n }),\n outputSchema: z.string(),\n };\n\n // First register the tool\n act(() => {\n result.current.registerTool(newTool);\n });\n\n // Then add the association\n act(() => {\n result.current.addToolAssociation(\"TestComponent\", newTool);\n });\n\n expect(result.current.componentToolAssociations.TestComponent).toContain(\n \"new-tool\",\n );\n });\n\n it(\"should throw error when adding tool association to non-existent component\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const newTool: TamboTool = {\n name: \"new-tool\",\n description: \"New tool\",\n tool: jest.fn().mockResolvedValue(\"new-tool-result\"),\n inputSchema: z.object({\n input: z.string().describe(\"input\"),\n }),\n outputSchema: z.string(),\n };\n\n expect(() => {\n act(() => {\n result.current.addToolAssociation(\"NonExistentComponent\", newTool);\n });\n }).toThrow(\"Component NonExistentComponent not found in registry\");\n });\n\n it(\"should validate tool schemas and throw error for invalid schemas\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const invalidTool: TamboTool = {\n name: \"invalid-tool\",\n description: \"Invalid tool\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z.record(z.string(), z.string()), // This should cause validation to fail\n outputSchema: z.string(),\n };\n\n // This should throw during registration due to invalid schema\n expect(() => {\n act(() => {\n result.current.registerTool(invalidTool);\n });\n }).toThrow(\n 'Record types (objects with dynamic keys) are not supported in inputSchema of tool \"invalid-tool\". Found at path \"(root)\". Replace it with an object using explicit keys.',\n );\n });\n\n it(\"should validate component schemas and throw error for invalid schemas\", () => {\n const invalidComponent: TamboComponent = {\n name: \"InvalidComponent\",\n component: () => <div>Invalid</div>,\n description: \"Invalid component\",\n propsSchema: z.record(z.string(), z.string()), // This should cause validation to fail\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // This should throw during registration due to invalid schema\n expect(() => {\n act(() => {\n result.current.registerComponent(invalidComponent);\n });\n }).toThrow(\n 'Record types (objects with dynamic keys) are not supported in propsSchema of component \"InvalidComponent\"',\n );\n });\n\n it(\"should throw error when component has both propsSchema and propsDefinition\", () => {\n const invalidComponent: TamboComponent = {\n name: \"InvalidComponent\",\n component: () => <div>Invalid</div>,\n description: \"Invalid component\",\n propsSchema: z.object({ test: z.string() }),\n propsDefinition: { test: \"string\" }, // Both defined - should throw\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(() => {\n act(() => {\n result.current.registerComponent(invalidComponent);\n });\n }).toThrow(\n \"Component InvalidComponent cannot have both propsSchema and propsDefinition defined\",\n );\n });\n\n it(\"should throw error when component has neither propsSchema nor propsDefinition\", () => {\n const invalidComponent: TamboComponent = {\n name: \"InvalidComponent\",\n component: () => <div>Invalid</div>,\n description: \"Invalid component\",\n // Neither propsSchema nor propsDefinition defined - should throw\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(() => {\n act(() => {\n result.current.registerComponent(invalidComponent);\n });\n }).toThrow(\n \"Component InvalidComponent must have either propsSchema (recommended) or propsDefinition defined\",\n );\n });\n\n it(\"should throw error when tool name contains spaces\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const invalidTool: TamboTool = {\n name: \"invalid tool name\", // Contains spaces\n description: \"Tool with spaces in name\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z.object({\n input: z.string(),\n }),\n outputSchema: z.string(),\n };\n\n expect(() => {\n act(() => {\n result.current.registerTool(invalidTool);\n });\n }).toThrow(\n 'tool \"invalid tool name\" must only contain letters, numbers, underscores, and hyphens.',\n );\n });\n\n it(\"should throw error when component name contains spaces\", () => {\n const invalidComponent: TamboComponent = {\n name: \"Invalid Component Name\", // Contains spaces\n component: () => <div>Invalid</div>,\n description: \"Component with spaces in name\",\n propsSchema: z.object({ test: z.string() }),\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(() => {\n act(() => {\n result.current.registerComponent(invalidComponent);\n });\n }).toThrow(\n 'component \"Invalid Component Name\" must only contain letters, numbers, underscores, and hyphens.',\n );\n });\n });\n\n describe(\"Tool call handling\", () => {\n it(\"should provide onCallUnregisteredTool callback for handling unknown tools\", async () => {\n const mockonCallUnregisteredTool = jest\n .fn()\n .mockResolvedValue(\"unknown-tool-result\");\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider\n components={mockComponents}\n onCallUnregisteredTool={mockonCallUnregisteredTool}\n >\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Verify the callback is available\n expect(result.current.onCallUnregisteredTool).toBeDefined();\n expect(typeof result.current.onCallUnregisteredTool).toBe(\"function\");\n\n // Simulate calling the unknown tool handler\n const toolName = \"unknown-tool\";\n const args = [{ parameterName: \"input\", parameterValue: \"test-input\" }];\n\n await act(async () => {\n if (result.current.onCallUnregisteredTool) {\n await result.current.onCallUnregisteredTool(toolName, args);\n }\n });\n\n expect(mockonCallUnregisteredTool).toHaveBeenCalledWith(toolName, args);\n });\n\n it(\"should handle onCallUnregisteredTool being undefined\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider components={mockComponents}>\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.onCallUnregisteredTool).toBeUndefined();\n });\n });\n\n describe(\"Resource registration\", () => {\n it(\"should register static resources via props\", () => {\n const staticResources = [\n {\n uri: \"file:///local/doc.txt\",\n name: \"Local Document\",\n mimeType: \"text/plain\",\n },\n {\n uri: \"file:///local/image.png\",\n name: \"Local Image\",\n mimeType: \"image/png\",\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider resources={staticResources}>\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.resources).toHaveLength(2);\n expect(result.current.resources[0].uri).toBe(\"file:///local/doc.txt\");\n expect(result.current.resources[1].uri).toBe(\"file:///local/image.png\");\n });\n\n it(\"should register resources dynamically via registerResource\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const newResource = {\n uri: \"file:///dynamic/doc.txt\",\n name: \"Dynamic Document\",\n mimeType: \"text/plain\",\n };\n\n act(() => {\n result.current.registerResource(newResource);\n });\n\n expect(result.current.resources).toHaveLength(1);\n expect(result.current.resources[0].uri).toBe(\"file:///dynamic/doc.txt\");\n });\n\n it(\"should register multiple resources via registerResources\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const newResources = [\n {\n uri: \"file:///batch/doc1.txt\",\n name: \"Batch Document 1\",\n mimeType: \"text/plain\",\n },\n {\n uri: \"file:///batch/doc2.txt\",\n name: \"Batch Document 2\",\n mimeType: \"text/plain\",\n },\n ];\n\n act(() => {\n result.current.registerResources(newResources);\n });\n\n expect(result.current.resources).toHaveLength(2);\n expect(result.current.resources[0].uri).toBe(\"file:///batch/doc1.txt\");\n expect(result.current.resources[1].uri).toBe(\"file:///batch/doc2.txt\");\n });\n\n it(\"should register resource source via props\", () => {\n const mockListResources = jest.fn().mockResolvedValue([]);\n const mockGetResource = jest.fn().mockResolvedValue({\n contents: [{ uri: \"\", mimeType: \"text/plain\", text: \"\" }],\n });\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider\n listResources={mockListResources}\n getResource={mockGetResource}\n >\n {children}\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(result.current.resourceSource).not.toBeNull();\n expect(result.current.resourceSource?.listResources).toBe(\n mockListResources,\n );\n expect(result.current.resourceSource?.getResource).toBe(mockGetResource);\n });\n\n it(\"should register resource source via registerResourceSource\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const mockListResources = jest.fn().mockResolvedValue([]);\n const mockGetResource = jest.fn().mockResolvedValue({\n contents: [{ uri: \"\", mimeType: \"text/plain\", text: \"\" }],\n });\n\n act(() => {\n result.current.registerResourceSource({\n listResources: mockListResources,\n getResource: mockGetResource,\n });\n });\n\n expect(result.current.resourceSource).not.toBeNull();\n expect(result.current.resourceSource?.listResources).toBe(\n mockListResources,\n );\n expect(result.current.resourceSource?.getResource).toBe(mockGetResource);\n });\n\n it(\"should throw error when only listResources is provided\", () => {\n const mockListResources = jest.fn().mockResolvedValue([]);\n\n expect(() => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider listResources={mockListResources}>\n {children}\n </TamboRegistryProvider>\n );\n renderHook(() => useTamboRegistry(), { wrapper });\n }).toThrow(\n \"Both listResources and getResource must be provided together\",\n );\n });\n\n it(\"should throw error when only getResource is provided\", () => {\n const mockGetResource = jest.fn().mockResolvedValue({\n contents: [{ uri: \"\", mimeType: \"text/plain\", text: \"\" }],\n });\n\n expect(() => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider getResource={mockGetResource}>\n {children}\n </TamboRegistryProvider>\n );\n renderHook(() => useTamboRegistry(), { wrapper });\n }).toThrow(\n \"Both listResources and getResource must be provided together\",\n );\n });\n\n it(\"should validate resource has required uri field\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const invalidResource = {\n name: \"Document without URI\",\n mimeType: \"text/plain\",\n } as any;\n\n expect(() => {\n act(() => {\n result.current.registerResource(invalidResource);\n });\n }).toThrow(\"Resource must have a 'uri' field\");\n });\n\n it(\"should validate resource has required name field\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const invalidResource = {\n uri: \"file:///doc.txt\",\n mimeType: \"text/plain\",\n } as any;\n\n expect(() => {\n act(() => {\n result.current.registerResource(invalidResource);\n });\n }).toThrow(\n \"Resource with URI 'file:///doc.txt' must have a 'name' field\",\n );\n });\n });\n});\n"]}
|
|
@@ -242,60 +242,46 @@ describe("Schema Compatibility", () => {
|
|
|
242
242
|
});
|
|
243
243
|
});
|
|
244
244
|
describe("registerTool with different schema types", () => {
|
|
245
|
-
describe("
|
|
246
|
-
|
|
245
|
+
describe("Deprecated toolSchema throws error", () => {
|
|
246
|
+
const deprecatedTool = {
|
|
247
|
+
name: "deprecated-tool",
|
|
248
|
+
description: "Tool with deprecated toolSchema",
|
|
249
|
+
tool: jest.fn().mockResolvedValue("result"),
|
|
250
|
+
toolSchema: z3
|
|
251
|
+
.function()
|
|
252
|
+
.args(z3.string().describe("input parameter"))
|
|
253
|
+
.returns(z3.string()),
|
|
254
|
+
};
|
|
255
|
+
it("should throw error when using deprecated toolSchema", () => {
|
|
247
256
|
const { result } = renderHook(() => useTamboRegistry(), { wrapper });
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
tool: jest.fn().mockResolvedValue("result"),
|
|
252
|
-
toolSchema: z3
|
|
253
|
-
.function()
|
|
254
|
-
.args(z3.string().describe("input parameter"))
|
|
255
|
-
.returns(z3.string()),
|
|
256
|
-
});
|
|
257
|
-
act(() => {
|
|
258
|
-
result.current.registerTool(tool);
|
|
259
|
-
});
|
|
260
|
-
expect(result.current.toolRegistry).toHaveProperty("zod3-function-tool");
|
|
257
|
+
expect(() => {
|
|
258
|
+
act(() => result.current.registerTool(deprecatedTool));
|
|
259
|
+
}).toThrow('Tool "deprecated-tool" uses deprecated "toolSchema" property.');
|
|
261
260
|
});
|
|
262
|
-
it("should
|
|
261
|
+
it("registerTools should throw error when using deprecated toolSchema", () => {
|
|
263
262
|
const { result } = renderHook(() => useTamboRegistry(), { wrapper });
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
tool: jest.fn().mockResolvedValue("result"),
|
|
268
|
-
toolSchema: z3
|
|
269
|
-
.function()
|
|
270
|
-
.args(z3.string().describe("first argument"), z3.number().describe("second argument"), z3.boolean().optional().describe("optional third argument"))
|
|
271
|
-
.returns(z3.object({ success: z3.boolean() })),
|
|
272
|
-
});
|
|
273
|
-
act(() => {
|
|
274
|
-
result.current.registerTool(tool);
|
|
275
|
-
});
|
|
276
|
-
expect(result.current.toolRegistry).toHaveProperty("zod3-multi-arg-tool");
|
|
263
|
+
expect(() => {
|
|
264
|
+
act(() => result.current.registerTools([deprecatedTool]));
|
|
265
|
+
}).toThrow('Tool "deprecated-tool" uses deprecated "toolSchema" property.');
|
|
277
266
|
});
|
|
278
|
-
|
|
267
|
+
});
|
|
268
|
+
describe("Zod 3 object schemas for tools", () => {
|
|
269
|
+
it("should register tool with Zod 3 object inputSchema", () => {
|
|
279
270
|
const { result } = renderHook(() => useTamboRegistry(), { wrapper });
|
|
280
271
|
const tool = defineTool({
|
|
281
|
-
name: "zod3-object-
|
|
282
|
-
description: "Tool with object
|
|
272
|
+
name: "zod3-object-tool",
|
|
273
|
+
description: "Tool with Zod 3 object schema",
|
|
283
274
|
tool: jest.fn().mockResolvedValue("result"),
|
|
284
|
-
|
|
285
|
-
.function()
|
|
286
|
-
.args(z3
|
|
287
|
-
.object({
|
|
275
|
+
inputSchema: z3.object({
|
|
288
276
|
query: z3.string().describe("search query"),
|
|
289
277
|
limit: z3.number().optional().describe("max results"),
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
.describe("search options"))
|
|
293
|
-
.returns(z3.array(z3.string())),
|
|
278
|
+
}),
|
|
279
|
+
outputSchema: z3.string(),
|
|
294
280
|
});
|
|
295
281
|
act(() => {
|
|
296
282
|
result.current.registerTool(tool);
|
|
297
283
|
});
|
|
298
|
-
expect(result.current.toolRegistry).toHaveProperty("zod3-object-
|
|
284
|
+
expect(result.current.toolRegistry).toHaveProperty("zod3-object-tool");
|
|
299
285
|
});
|
|
300
286
|
});
|
|
301
287
|
describe("Zod 4 object schemas for tools", () => {
|
|
@@ -548,12 +534,15 @@ describe("Schema Compatibility", () => {
|
|
|
548
534
|
});
|
|
549
535
|
it("should register tools with mixed Zod 3, Zod 4, and JSON Schema", () => {
|
|
550
536
|
const { result } = renderHook(() => useTamboRegistry(), { wrapper });
|
|
551
|
-
// Zod 3 tool (using
|
|
537
|
+
// Zod 3 tool (using object inputSchema)
|
|
552
538
|
const zod3Tool = defineTool({
|
|
553
539
|
name: "mixed-zod3-tool",
|
|
554
540
|
description: "Zod 3 tool",
|
|
555
541
|
tool: jest.fn().mockResolvedValue("result"),
|
|
556
|
-
|
|
542
|
+
inputSchema: z3.object({
|
|
543
|
+
input: z3.string(),
|
|
544
|
+
}),
|
|
545
|
+
outputSchema: z3.string(),
|
|
557
546
|
});
|
|
558
547
|
// Zod 4 tool (using Standard Schema with object inputSchema)
|
|
559
548
|
const zod4Tool = defineTool({
|
|
@@ -604,25 +593,26 @@ describe("Schema Compatibility", () => {
|
|
|
604
593
|
});
|
|
605
594
|
});
|
|
606
595
|
describe("registerTool preserves maxCalls", () => {
|
|
607
|
-
it("should preserve maxCalls for
|
|
596
|
+
it("should preserve maxCalls for Zod 3 inputSchema tools", () => {
|
|
608
597
|
const { result } = renderHook(() => useTamboRegistry(), { wrapper });
|
|
609
598
|
const tool = defineTool({
|
|
610
|
-
name: "
|
|
611
|
-
description: "
|
|
599
|
+
name: "zod3-max-tool",
|
|
600
|
+
description: "Zod 3 tool with maxCalls",
|
|
612
601
|
tool: jest.fn().mockResolvedValue("ok"),
|
|
613
|
-
|
|
602
|
+
inputSchema: z3.object({ q: z3.string() }),
|
|
603
|
+
outputSchema: z3.string(),
|
|
614
604
|
maxCalls: 2,
|
|
615
605
|
});
|
|
616
606
|
act(() => {
|
|
617
607
|
result.current.registerTool(tool);
|
|
618
608
|
});
|
|
619
|
-
expect(result.current.toolRegistry["
|
|
609
|
+
expect(result.current.toolRegistry["zod3-max-tool"].maxCalls).toBe(2);
|
|
620
610
|
});
|
|
621
|
-
it("should preserve maxCalls for inputSchema tools", () => {
|
|
611
|
+
it("should preserve maxCalls for Zod 4 inputSchema tools", () => {
|
|
622
612
|
const { result } = renderHook(() => useTamboRegistry(), { wrapper });
|
|
623
613
|
const tool = defineTool({
|
|
624
|
-
name: "
|
|
625
|
-
description: "
|
|
614
|
+
name: "zod4-max-tool",
|
|
615
|
+
description: "Zod 4 tool with maxCalls",
|
|
626
616
|
tool: jest.fn().mockResolvedValue("ok"),
|
|
627
617
|
inputSchema: z4.object({ q: z4.string() }),
|
|
628
618
|
outputSchema: z4.string(),
|
|
@@ -631,7 +621,7 @@ describe("Schema Compatibility", () => {
|
|
|
631
621
|
act(() => {
|
|
632
622
|
result.current.registerTool(tool);
|
|
633
623
|
});
|
|
634
|
-
expect(result.current.toolRegistry["
|
|
624
|
+
expect(result.current.toolRegistry["zod4-max-tool"].maxCalls).toBe(3);
|
|
635
625
|
});
|
|
636
626
|
});
|
|
637
627
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tambo-registry-schema-compat.test.js","sourceRoot":"","sources":["../../src/providers/tambo-registry-schema-compat.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tests for schema compatibility with registerTool and registerComponent.\n *\n * These tests verify that the registry functions work correctly with:\n * - Zod 3 schemas (current primary)\n * - Zod 4 schemas (Standard Schema native)\n * - Raw JSON Schema objects\n */\nimport { act, renderHook } from \"@testing-library/react\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport React from \"react\";\nimport * as z3 from \"zod/v3\";\nimport * as z4 from \"zod/v4\";\nimport { TamboComponent } from \"../model/component-metadata\";\nimport { defineTool } from \"../util/registry\";\nimport {\n TamboRegistryProvider,\n useTamboRegistry,\n} from \"./tambo-registry-provider\";\n\n// Test component for registration tests\nconst TestComponent: React.FC<{ message: string }> = ({ message }) => (\n <div>{message}</div>\n);\n\ndescribe(\"Schema Compatibility\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n describe(\"registerComponent with different schema types\", () => {\n describe(\"Zod 3 schemas\", () => {\n it(\"should register component with Zod 3 object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod3ObjectComponent\",\n component: TestComponent,\n description: \"Component with Zod 3 object schema\",\n propsSchema: z3.object({\n message: z3.string().describe(\"The message to display\"),\n count: z3.number().optional().describe(\"Optional count\"),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod3ObjectComponent\",\n );\n const registered = result.current.componentList.Zod3ObjectComponent;\n expect(registered.name).toBe(\"Zod3ObjectComponent\");\n expect(registered.props).toBeDefined();\n expect(registered.props).toHaveProperty(\"type\", \"object\");\n });\n\n it(\"should register component with Zod 3 nested object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod3NestedComponent\",\n component: TestComponent,\n description: \"Component with nested Zod 3 schema\",\n propsSchema: z3.object({\n user: z3.object({\n name: z3.string(),\n email: z3.string().email(),\n }),\n settings: z3.object({\n theme: z3.enum([\"light\", \"dark\"]),\n notifications: z3.boolean(),\n }),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod3NestedComponent\",\n );\n });\n\n it(\"should register component with Zod 3 array schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod3ArrayComponent\",\n component: TestComponent,\n description: \"Component with Zod 3 array schema\",\n propsSchema: z3.object({\n items: z3.array(z3.string()).describe(\"List of items\"),\n tags: z3.array(\n z3.object({\n id: z3.number(),\n label: z3.string(),\n }),\n ),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod3ArrayComponent\",\n );\n });\n\n it(\"should register component with Zod 3 union schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod3UnionComponent\",\n component: TestComponent,\n description: \"Component with Zod 3 union schema\",\n propsSchema: z3.object({\n value: z3.union([z3.string(), z3.number()]),\n status: z3.enum([\"pending\", \"active\", \"completed\"]),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod3UnionComponent\",\n );\n });\n });\n\n describe(\"Zod 4 schemas\", () => {\n it(\"should register component with Zod 4 object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod4ObjectComponent\",\n component: TestComponent,\n description: \"Component with Zod 4 object schema\",\n propsSchema: z4.object({\n message: z4.string().describe(\"The message to display\"),\n count: z4.number().optional().describe(\"Optional count\"),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod4ObjectComponent\",\n );\n const registered = result.current.componentList.Zod4ObjectComponent;\n expect(registered.name).toBe(\"Zod4ObjectComponent\");\n expect(registered.props).toBeDefined();\n expect(registered.props).toHaveProperty(\"type\", \"object\");\n });\n\n it(\"should register component with Zod 4 nested object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod4NestedComponent\",\n component: TestComponent,\n description: \"Component with nested Zod 4 schema\",\n propsSchema: z4.object({\n user: z4.object({\n name: z4.string(),\n email: z4.email(),\n }),\n settings: z4.object({\n theme: z4.enum([\"light\", \"dark\"]),\n notifications: z4.boolean(),\n }),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod4NestedComponent\",\n );\n });\n\n it(\"should register component with Zod 4 array schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod4ArrayComponent\",\n component: TestComponent,\n description: \"Component with Zod 4 array schema\",\n propsSchema: z4.object({\n items: z4.array(z4.string()).describe(\"List of items\"),\n tags: z4.array(\n z4.object({\n id: z4.number(),\n label: z4.string(),\n }),\n ),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod4ArrayComponent\",\n );\n });\n\n it(\"should register component with Zod 4 union schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod4UnionComponent\",\n component: TestComponent,\n description: \"Component with Zod 4 union schema\",\n propsSchema: z4.object({\n value: z4.union([z4.string(), z4.number()]),\n status: z4.enum([\"pending\", \"active\", \"completed\"]),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod4UnionComponent\",\n );\n });\n });\n\n describe(\"JSON Schema objects\", () => {\n it(\"should register component with raw JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n properties: {\n message: { type: \"string\", description: \"The message to display\" },\n count: { type: \"number\", description: \"Optional count\" },\n },\n required: [\"message\"],\n };\n\n const component: TamboComponent = {\n name: \"JsonSchemaComponent\",\n component: TestComponent,\n description: \"Component with raw JSON Schema\",\n propsSchema: jsonSchema,\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"JsonSchemaComponent\",\n );\n const registered = result.current.componentList.JsonSchemaComponent;\n expect(registered.props).toEqual(jsonSchema);\n });\n\n it(\"should register component with complex JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n properties: {\n user: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n email: { type: \"string\", format: \"email\" },\n },\n required: [\"name\", \"email\"],\n },\n items: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n id: { type: \"number\" },\n label: { type: \"string\" },\n },\n },\n },\n },\n required: [\"user\"],\n };\n\n const component: TamboComponent = {\n name: \"ComplexJsonSchemaComponent\",\n component: TestComponent,\n description: \"Component with complex JSON Schema\",\n propsSchema: jsonSchema,\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"ComplexJsonSchemaComponent\",\n );\n });\n });\n });\n\n describe(\"registerTool with different schema types\", () => {\n describe(\"Zod 3 function schemas\", () => {\n it(\"should register tool with Zod 3 function schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod3-function-tool\",\n description: \"Tool with Zod 3 function schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n toolSchema: z3\n .function()\n .args(z3.string().describe(\"input parameter\"))\n .returns(z3.string()),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"zod3-function-tool\",\n );\n });\n\n it(\"should register tool with Zod 3 function schema with multiple args\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod3-multi-arg-tool\",\n description: \"Tool with multiple arguments\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n toolSchema: z3\n .function()\n .args(\n z3.string().describe(\"first argument\"),\n z3.number().describe(\"second argument\"),\n z3.boolean().optional().describe(\"optional third argument\"),\n )\n .returns(z3.object({ success: z3.boolean() })),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"zod3-multi-arg-tool\",\n );\n });\n\n it(\"should register tool with Zod 3 function schema with object arg\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod3-object-arg-tool\",\n description: \"Tool with object argument\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n toolSchema: z3\n .function()\n .args(\n z3\n .object({\n query: z3.string().describe(\"search query\"),\n limit: z3.number().optional().describe(\"max results\"),\n filters: z3.array(z3.string()).optional(),\n })\n .describe(\"search options\"),\n )\n .returns(z3.array(z3.string())),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"zod3-object-arg-tool\",\n );\n });\n });\n\n describe(\"Zod 4 object schemas for tools\", () => {\n // Note: inputSchema must always be an object schema\n // The tool function receives a single object argument with all parameters\n\n it(\"should register tool with Zod 4 object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod4-object-tool\",\n description: \"Tool with Zod 4 object schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.object({\n input: z4.string().describe(\"input parameter\"),\n }),\n outputSchema: z4.string(),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"zod4-object-tool\");\n });\n\n it(\"should register tool with Zod 4 object schema with multiple fields\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod4-multi-field-tool\",\n description: \"Tool with multiple Zod 4 fields\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.object({\n first: z4.string().describe(\"first argument\"),\n second: z4.number().describe(\"second argument\"),\n third: z4.boolean().optional().describe(\"optional third argument\"),\n }),\n outputSchema: z4.array(z4.string()),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"zod4-multi-field-tool\",\n );\n });\n\n it(\"should register tool with Zod 4 nested object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod4-nested-object-tool\",\n description: \"Tool with Zod 4 nested object\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4\n .object({\n query: z4.string().describe(\"search query\"),\n limit: z4.number().optional().describe(\"max results\"),\n filters: z4.array(z4.string()).optional(),\n })\n .describe(\"search options\"),\n outputSchema: z4.array(z4.string()),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"zod4-nested-object-tool\",\n );\n });\n });\n\n describe(\"JSON Schema for tools\", () => {\n it(\"should register tool with JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n description: \"Tool parameters\",\n properties: {\n query: { type: \"string\", description: \"The search query\" },\n limit: { type: \"number\", description: \"Max results to return\" },\n },\n required: [\"query\"],\n };\n\n const tool = defineTool({\n name: \"json-schema-tool\",\n description: \"Tool with raw JSON Schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: jsonSchema,\n outputSchema: {},\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"json-schema-tool\");\n });\n\n it(\"should register tool with complex JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n description: \"Complex search parameters\",\n properties: {\n search: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n filters: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n field: { type: \"string\" },\n value: { type: \"string\" },\n },\n },\n },\n },\n required: [\"query\"],\n },\n pagination: {\n type: \"object\",\n properties: {\n page: { type: \"number\" },\n pageSize: { type: \"number\" },\n },\n },\n },\n required: [\"search\"],\n };\n\n const tool = defineTool({\n name: \"complex-json-schema-tool\",\n description: \"Tool with complex JSON Schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: jsonSchema,\n outputSchema: {},\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"complex-json-schema-tool\",\n );\n });\n });\n });\n\n describe(\"Schema validation errors\", () => {\n it(\"should reject Zod 3 z.record() in component propsSchema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"InvalidZod3RecordComponent\",\n component: TestComponent,\n description: \"Component with invalid z.record() schema\",\n propsSchema: z3.record(z3.string()),\n };\n\n expect(() => {\n act(() => {\n result.current.registerComponent(component);\n });\n }).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported/,\n );\n });\n\n it(\"should reject Zod 4 z.record() in component propsSchema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"InvalidZod4RecordComponent\",\n component: TestComponent,\n description: \"Component with invalid Zod 4 z.record() schema\",\n // Zod 4 record requires key type and value type\n propsSchema: z4.record(z4.string(), z4.string()),\n };\n\n expect(() => {\n act(() => {\n result.current.registerComponent(component);\n });\n }).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported/,\n );\n });\n\n it(\"should reject Zod 3 z.record() in tool schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"invalid-zod3-record-tool\",\n description: \"Tool with invalid z.record() schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z3.object({\n metadata: z3.record(z3.string()),\n }),\n outputSchema: z3.string(),\n });\n\n expect(() => {\n act(() => {\n result.current.registerTool(tool);\n });\n }).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported/,\n );\n });\n\n it(\"should reject Zod 4 z.record() in tool schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"invalid-zod4-record-tool\",\n description: \"Tool with invalid Zod 4 z.record() schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.object({\n metadata: z4.record(z4.string(), z4.string()),\n }),\n outputSchema: z4.string(),\n });\n\n expect(() => {\n act(() => {\n result.current.registerTool(tool);\n });\n }).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported/,\n );\n });\n\n it(\"should reject non-object inputSchema (tuple)\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"invalid-tuple-tool\",\n description: \"Tool with tuple inputSchema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.tuple([z4.string()]),\n outputSchema: z4.string(),\n });\n\n expect(() => {\n act(() => {\n result.current.registerTool(tool);\n });\n }).toThrow(/must be an object schema/);\n });\n\n it(\"should reject non-object inputSchema (string)\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"invalid-string-tool\",\n description: \"Tool with string inputSchema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.string(),\n outputSchema: z4.string(),\n });\n\n expect(() => {\n act(() => {\n result.current.registerTool(tool);\n });\n }).toThrow(/must be an object schema/);\n });\n });\n\n describe(\"Cross-version compatibility\", () => {\n it(\"should register components with mixed Zod 3 and Zod 4 schemas\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Register Zod 3 component\n const zod3Component: TamboComponent = {\n name: \"MixedZod3Component\",\n component: TestComponent,\n description: \"Zod 3 component\",\n propsSchema: z3.object({ value: z3.string() }),\n };\n\n // Register Zod 4 component\n const zod4Component: TamboComponent = {\n name: \"MixedZod4Component\",\n component: TestComponent,\n description: \"Zod 4 component\",\n propsSchema: z4.object({ value: z4.string() }),\n };\n\n act(() => {\n result.current.registerComponent(zod3Component);\n result.current.registerComponent(zod4Component);\n });\n\n expect(result.current.componentList).toHaveProperty(\"MixedZod3Component\");\n expect(result.current.componentList).toHaveProperty(\"MixedZod4Component\");\n });\n\n it(\"should register tools with mixed Zod 3, Zod 4, and JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Zod 3 tool (using function schema)\n const zod3Tool = defineTool({\n name: \"mixed-zod3-tool\",\n description: \"Zod 3 tool\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n toolSchema: z3.function().args(z3.string()).returns(z3.string()),\n });\n\n // Zod 4 tool (using Standard Schema with object inputSchema)\n const zod4Tool = defineTool({\n name: \"mixed-zod4-tool\",\n description: \"Zod 4 tool\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.object({\n input: z4.string(),\n }),\n outputSchema: z4.string(),\n });\n\n // JSON Schema tool\n const jsonSchemaTool = defineTool({\n name: \"mixed-json-schema-tool\",\n description: \"JSON Schema tool\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: {\n type: \"object\",\n properties: {\n input: { type: \"string\" },\n },\n },\n outputSchema: { type: \"string\" },\n });\n\n act(() => {\n result.current.registerTools([zod3Tool, zod4Tool, jsonSchemaTool]);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"mixed-zod3-tool\");\n expect(result.current.toolRegistry).toHaveProperty(\"mixed-zod4-tool\");\n expect(result.current.toolRegistry).toHaveProperty(\n \"mixed-json-schema-tool\",\n );\n });\n });\n\n describe(\"Standard Schema interface verification\", () => {\n it(\"should verify Zod 3 schema has ~standard property\", () => {\n const schema = z3.object({ value: z3.string() });\n expect(\"~standard\" in schema).toBe(true);\n });\n\n it(\"should verify Zod 4 schema has ~standard property\", () => {\n const schema = z4.object({ value: z4.string() });\n expect(\"~standard\" in schema).toBe(true);\n });\n\n it(\"should verify JSON Schema does not have ~standard property\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: { value: { type: \"string\" } },\n };\n expect(\"~standard\" in schema).toBe(false);\n });\n });\n describe(\"registerTool preserves maxCalls\", () => {\n it(\"should preserve maxCalls for legacy toolSchema tools\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"legacy-max-tool\",\n description: \"Legacy tool with maxCalls\",\n tool: jest.fn().mockResolvedValue(\"ok\"),\n toolSchema: z3.function().args(z3.string()).returns(z3.string()),\n maxCalls: 2,\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry[\"legacy-max-tool\"].maxCalls).toBe(2);\n });\n\n it(\"should preserve maxCalls for inputSchema tools\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"input-max-tool\",\n description: \"Input-schema tool with maxCalls\",\n tool: jest.fn().mockResolvedValue(\"ok\"),\n inputSchema: z4.object({ q: z4.string() }),\n outputSchema: z4.string(),\n maxCalls: 3,\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry[\"input-max-tool\"].maxCalls).toBe(3);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"tambo-registry-schema-compat.test.js","sourceRoot":"","sources":["../../src/providers/tambo-registry-schema-compat.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tests for schema compatibility with registerTool and registerComponent.\n *\n * These tests verify that the registry functions work correctly with:\n * - Zod 3 schemas (current primary)\n * - Zod 4 schemas (Standard Schema native)\n * - Raw JSON Schema objects\n */\nimport { act, renderHook } from \"@testing-library/react\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport React from \"react\";\nimport * as z3 from \"zod/v3\";\nimport * as z4 from \"zod/v4\";\nimport { TamboComponent } from \"../model/component-metadata\";\nimport { defineTool } from \"../util/registry\";\nimport {\n TamboRegistryProvider,\n useTamboRegistry,\n} from \"./tambo-registry-provider\";\n\n// Test component for registration tests\nconst TestComponent: React.FC<{ message: string }> = ({ message }) => (\n <div>{message}</div>\n);\n\ndescribe(\"Schema Compatibility\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider>{children}</TamboRegistryProvider>\n );\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n describe(\"registerComponent with different schema types\", () => {\n describe(\"Zod 3 schemas\", () => {\n it(\"should register component with Zod 3 object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod3ObjectComponent\",\n component: TestComponent,\n description: \"Component with Zod 3 object schema\",\n propsSchema: z3.object({\n message: z3.string().describe(\"The message to display\"),\n count: z3.number().optional().describe(\"Optional count\"),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod3ObjectComponent\",\n );\n const registered = result.current.componentList.Zod3ObjectComponent;\n expect(registered.name).toBe(\"Zod3ObjectComponent\");\n expect(registered.props).toBeDefined();\n expect(registered.props).toHaveProperty(\"type\", \"object\");\n });\n\n it(\"should register component with Zod 3 nested object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod3NestedComponent\",\n component: TestComponent,\n description: \"Component with nested Zod 3 schema\",\n propsSchema: z3.object({\n user: z3.object({\n name: z3.string(),\n email: z3.string().email(),\n }),\n settings: z3.object({\n theme: z3.enum([\"light\", \"dark\"]),\n notifications: z3.boolean(),\n }),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod3NestedComponent\",\n );\n });\n\n it(\"should register component with Zod 3 array schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod3ArrayComponent\",\n component: TestComponent,\n description: \"Component with Zod 3 array schema\",\n propsSchema: z3.object({\n items: z3.array(z3.string()).describe(\"List of items\"),\n tags: z3.array(\n z3.object({\n id: z3.number(),\n label: z3.string(),\n }),\n ),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod3ArrayComponent\",\n );\n });\n\n it(\"should register component with Zod 3 union schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod3UnionComponent\",\n component: TestComponent,\n description: \"Component with Zod 3 union schema\",\n propsSchema: z3.object({\n value: z3.union([z3.string(), z3.number()]),\n status: z3.enum([\"pending\", \"active\", \"completed\"]),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod3UnionComponent\",\n );\n });\n });\n\n describe(\"Zod 4 schemas\", () => {\n it(\"should register component with Zod 4 object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod4ObjectComponent\",\n component: TestComponent,\n description: \"Component with Zod 4 object schema\",\n propsSchema: z4.object({\n message: z4.string().describe(\"The message to display\"),\n count: z4.number().optional().describe(\"Optional count\"),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod4ObjectComponent\",\n );\n const registered = result.current.componentList.Zod4ObjectComponent;\n expect(registered.name).toBe(\"Zod4ObjectComponent\");\n expect(registered.props).toBeDefined();\n expect(registered.props).toHaveProperty(\"type\", \"object\");\n });\n\n it(\"should register component with Zod 4 nested object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod4NestedComponent\",\n component: TestComponent,\n description: \"Component with nested Zod 4 schema\",\n propsSchema: z4.object({\n user: z4.object({\n name: z4.string(),\n email: z4.email(),\n }),\n settings: z4.object({\n theme: z4.enum([\"light\", \"dark\"]),\n notifications: z4.boolean(),\n }),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod4NestedComponent\",\n );\n });\n\n it(\"should register component with Zod 4 array schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod4ArrayComponent\",\n component: TestComponent,\n description: \"Component with Zod 4 array schema\",\n propsSchema: z4.object({\n items: z4.array(z4.string()).describe(\"List of items\"),\n tags: z4.array(\n z4.object({\n id: z4.number(),\n label: z4.string(),\n }),\n ),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod4ArrayComponent\",\n );\n });\n\n it(\"should register component with Zod 4 union schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"Zod4UnionComponent\",\n component: TestComponent,\n description: \"Component with Zod 4 union schema\",\n propsSchema: z4.object({\n value: z4.union([z4.string(), z4.number()]),\n status: z4.enum([\"pending\", \"active\", \"completed\"]),\n }),\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"Zod4UnionComponent\",\n );\n });\n });\n\n describe(\"JSON Schema objects\", () => {\n it(\"should register component with raw JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n properties: {\n message: { type: \"string\", description: \"The message to display\" },\n count: { type: \"number\", description: \"Optional count\" },\n },\n required: [\"message\"],\n };\n\n const component: TamboComponent = {\n name: \"JsonSchemaComponent\",\n component: TestComponent,\n description: \"Component with raw JSON Schema\",\n propsSchema: jsonSchema,\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"JsonSchemaComponent\",\n );\n const registered = result.current.componentList.JsonSchemaComponent;\n expect(registered.props).toEqual(jsonSchema);\n });\n\n it(\"should register component with complex JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n properties: {\n user: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n email: { type: \"string\", format: \"email\" },\n },\n required: [\"name\", \"email\"],\n },\n items: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n id: { type: \"number\" },\n label: { type: \"string\" },\n },\n },\n },\n },\n required: [\"user\"],\n };\n\n const component: TamboComponent = {\n name: \"ComplexJsonSchemaComponent\",\n component: TestComponent,\n description: \"Component with complex JSON Schema\",\n propsSchema: jsonSchema,\n };\n\n act(() => {\n result.current.registerComponent(component);\n });\n\n expect(result.current.componentList).toHaveProperty(\n \"ComplexJsonSchemaComponent\",\n );\n });\n });\n });\n\n describe(\"registerTool with different schema types\", () => {\n describe(\"Deprecated toolSchema throws error\", () => {\n const deprecatedTool = {\n name: \"deprecated-tool\",\n description: \"Tool with deprecated toolSchema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n toolSchema: z3\n .function()\n .args(z3.string().describe(\"input parameter\"))\n .returns(z3.string()),\n };\n\n it(\"should throw error when using deprecated toolSchema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(() => {\n act(() => result.current.registerTool(deprecatedTool));\n }).toThrow(\n 'Tool \"deprecated-tool\" uses deprecated \"toolSchema\" property.',\n );\n });\n\n it(\"registerTools should throw error when using deprecated toolSchema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n expect(() => {\n act(() => result.current.registerTools([deprecatedTool]));\n }).toThrow(\n 'Tool \"deprecated-tool\" uses deprecated \"toolSchema\" property.',\n );\n });\n });\n\n describe(\"Zod 3 object schemas for tools\", () => {\n it(\"should register tool with Zod 3 object inputSchema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod3-object-tool\",\n description: \"Tool with Zod 3 object schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z3.object({\n query: z3.string().describe(\"search query\"),\n limit: z3.number().optional().describe(\"max results\"),\n }),\n outputSchema: z3.string(),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"zod3-object-tool\");\n });\n });\n\n describe(\"Zod 4 object schemas for tools\", () => {\n // Note: inputSchema must always be an object schema\n // The tool function receives a single object argument with all parameters\n\n it(\"should register tool with Zod 4 object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod4-object-tool\",\n description: \"Tool with Zod 4 object schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.object({\n input: z4.string().describe(\"input parameter\"),\n }),\n outputSchema: z4.string(),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"zod4-object-tool\");\n });\n\n it(\"should register tool with Zod 4 object schema with multiple fields\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod4-multi-field-tool\",\n description: \"Tool with multiple Zod 4 fields\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.object({\n first: z4.string().describe(\"first argument\"),\n second: z4.number().describe(\"second argument\"),\n third: z4.boolean().optional().describe(\"optional third argument\"),\n }),\n outputSchema: z4.array(z4.string()),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"zod4-multi-field-tool\",\n );\n });\n\n it(\"should register tool with Zod 4 nested object schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod4-nested-object-tool\",\n description: \"Tool with Zod 4 nested object\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4\n .object({\n query: z4.string().describe(\"search query\"),\n limit: z4.number().optional().describe(\"max results\"),\n filters: z4.array(z4.string()).optional(),\n })\n .describe(\"search options\"),\n outputSchema: z4.array(z4.string()),\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"zod4-nested-object-tool\",\n );\n });\n });\n\n describe(\"JSON Schema for tools\", () => {\n it(\"should register tool with JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n description: \"Tool parameters\",\n properties: {\n query: { type: \"string\", description: \"The search query\" },\n limit: { type: \"number\", description: \"Max results to return\" },\n },\n required: [\"query\"],\n };\n\n const tool = defineTool({\n name: \"json-schema-tool\",\n description: \"Tool with raw JSON Schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: jsonSchema,\n outputSchema: {},\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"json-schema-tool\");\n });\n\n it(\"should register tool with complex JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n description: \"Complex search parameters\",\n properties: {\n search: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n filters: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n field: { type: \"string\" },\n value: { type: \"string\" },\n },\n },\n },\n },\n required: [\"query\"],\n },\n pagination: {\n type: \"object\",\n properties: {\n page: { type: \"number\" },\n pageSize: { type: \"number\" },\n },\n },\n },\n required: [\"search\"],\n };\n\n const tool = defineTool({\n name: \"complex-json-schema-tool\",\n description: \"Tool with complex JSON Schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: jsonSchema,\n outputSchema: {},\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\n \"complex-json-schema-tool\",\n );\n });\n });\n });\n\n describe(\"Schema validation errors\", () => {\n it(\"should reject Zod 3 z.record() in component propsSchema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"InvalidZod3RecordComponent\",\n component: TestComponent,\n description: \"Component with invalid z.record() schema\",\n propsSchema: z3.record(z3.string()),\n };\n\n expect(() => {\n act(() => {\n result.current.registerComponent(component);\n });\n }).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported/,\n );\n });\n\n it(\"should reject Zod 4 z.record() in component propsSchema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const component: TamboComponent = {\n name: \"InvalidZod4RecordComponent\",\n component: TestComponent,\n description: \"Component with invalid Zod 4 z.record() schema\",\n // Zod 4 record requires key type and value type\n propsSchema: z4.record(z4.string(), z4.string()),\n };\n\n expect(() => {\n act(() => {\n result.current.registerComponent(component);\n });\n }).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported/,\n );\n });\n\n it(\"should reject Zod 3 z.record() in tool schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"invalid-zod3-record-tool\",\n description: \"Tool with invalid z.record() schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z3.object({\n metadata: z3.record(z3.string()),\n }),\n outputSchema: z3.string(),\n });\n\n expect(() => {\n act(() => {\n result.current.registerTool(tool);\n });\n }).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported/,\n );\n });\n\n it(\"should reject Zod 4 z.record() in tool schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"invalid-zod4-record-tool\",\n description: \"Tool with invalid Zod 4 z.record() schema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.object({\n metadata: z4.record(z4.string(), z4.string()),\n }),\n outputSchema: z4.string(),\n });\n\n expect(() => {\n act(() => {\n result.current.registerTool(tool);\n });\n }).toThrow(\n /Record types \\(objects with dynamic keys\\) are not supported/,\n );\n });\n\n it(\"should reject non-object inputSchema (tuple)\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"invalid-tuple-tool\",\n description: \"Tool with tuple inputSchema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.tuple([z4.string()]),\n outputSchema: z4.string(),\n });\n\n expect(() => {\n act(() => {\n result.current.registerTool(tool);\n });\n }).toThrow(/must be an object schema/);\n });\n\n it(\"should reject non-object inputSchema (string)\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"invalid-string-tool\",\n description: \"Tool with string inputSchema\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.string(),\n outputSchema: z4.string(),\n });\n\n expect(() => {\n act(() => {\n result.current.registerTool(tool);\n });\n }).toThrow(/must be an object schema/);\n });\n });\n\n describe(\"Cross-version compatibility\", () => {\n it(\"should register components with mixed Zod 3 and Zod 4 schemas\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Register Zod 3 component\n const zod3Component: TamboComponent = {\n name: \"MixedZod3Component\",\n component: TestComponent,\n description: \"Zod 3 component\",\n propsSchema: z3.object({ value: z3.string() }),\n };\n\n // Register Zod 4 component\n const zod4Component: TamboComponent = {\n name: \"MixedZod4Component\",\n component: TestComponent,\n description: \"Zod 4 component\",\n propsSchema: z4.object({ value: z4.string() }),\n };\n\n act(() => {\n result.current.registerComponent(zod3Component);\n result.current.registerComponent(zod4Component);\n });\n\n expect(result.current.componentList).toHaveProperty(\"MixedZod3Component\");\n expect(result.current.componentList).toHaveProperty(\"MixedZod4Component\");\n });\n\n it(\"should register tools with mixed Zod 3, Zod 4, and JSON Schema\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n // Zod 3 tool (using object inputSchema)\n const zod3Tool = defineTool({\n name: \"mixed-zod3-tool\",\n description: \"Zod 3 tool\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z3.object({\n input: z3.string(),\n }),\n outputSchema: z3.string(),\n });\n\n // Zod 4 tool (using Standard Schema with object inputSchema)\n const zod4Tool = defineTool({\n name: \"mixed-zod4-tool\",\n description: \"Zod 4 tool\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: z4.object({\n input: z4.string(),\n }),\n outputSchema: z4.string(),\n });\n\n // JSON Schema tool\n const jsonSchemaTool = defineTool({\n name: \"mixed-json-schema-tool\",\n description: \"JSON Schema tool\",\n tool: jest.fn().mockResolvedValue(\"result\"),\n inputSchema: {\n type: \"object\",\n properties: {\n input: { type: \"string\" },\n },\n },\n outputSchema: { type: \"string\" },\n });\n\n act(() => {\n result.current.registerTools([zod3Tool, zod4Tool, jsonSchemaTool]);\n });\n\n expect(result.current.toolRegistry).toHaveProperty(\"mixed-zod3-tool\");\n expect(result.current.toolRegistry).toHaveProperty(\"mixed-zod4-tool\");\n expect(result.current.toolRegistry).toHaveProperty(\n \"mixed-json-schema-tool\",\n );\n });\n });\n\n describe(\"Standard Schema interface verification\", () => {\n it(\"should verify Zod 3 schema has ~standard property\", () => {\n const schema = z3.object({ value: z3.string() });\n expect(\"~standard\" in schema).toBe(true);\n });\n\n it(\"should verify Zod 4 schema has ~standard property\", () => {\n const schema = z4.object({ value: z4.string() });\n expect(\"~standard\" in schema).toBe(true);\n });\n\n it(\"should verify JSON Schema does not have ~standard property\", () => {\n const schema: JSONSchema7 = {\n type: \"object\",\n properties: { value: { type: \"string\" } },\n };\n expect(\"~standard\" in schema).toBe(false);\n });\n });\n describe(\"registerTool preserves maxCalls\", () => {\n it(\"should preserve maxCalls for Zod 3 inputSchema tools\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod3-max-tool\",\n description: \"Zod 3 tool with maxCalls\",\n tool: jest.fn().mockResolvedValue(\"ok\"),\n inputSchema: z3.object({ q: z3.string() }),\n outputSchema: z3.string(),\n maxCalls: 2,\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry[\"zod3-max-tool\"].maxCalls).toBe(2);\n });\n\n it(\"should preserve maxCalls for Zod 4 inputSchema tools\", () => {\n const { result } = renderHook(() => useTamboRegistry(), { wrapper });\n\n const tool = defineTool({\n name: \"zod4-max-tool\",\n description: \"Zod 4 tool with maxCalls\",\n tool: jest.fn().mockResolvedValue(\"ok\"),\n inputSchema: z4.object({ q: z4.string() }),\n outputSchema: z4.string(),\n maxCalls: 3,\n });\n\n act(() => {\n result.current.registerTool(tool);\n });\n\n expect(result.current.toolRegistry[\"zod4-max-tool\"].maxCalls).toBe(3);\n });\n });\n});\n"]}
|