UNPKG

@seamapi/blueprint

Version:

Build tools for the Seam API using this blueprint.

54 lines 2.01 kB
import { z } from 'zod'; import { JsonSchema } from '../../lib/json.js'; import { formatResourceRecords } from './format.js'; import { createSeamCliResourceData } from './seam-cli.js'; import { SdkNameSchema, SyntaxNameSchema } from './syntax.js'; export const ResourceSampleDefinitionSchema = z.object({ title: z.string().trim().min(1), description: z.string().trim().min(1), resource_type: z.string().trim().min(1), properties: z.record(z.string().min(1), JsonSchema), }); const ResourceSchema = z.record(SdkNameSchema, z.object({ title: z.string().min(1), resource_data: z.string(), resource_data_syntax: SyntaxNameSchema, })); const ResourceSampleSchema = ResourceSampleDefinitionSchema.extend({ resource: ResourceSchema, }); export const createResourceSample = async (resourceSampleDefinition, context) => { const resourceType = resourceSampleDefinition.resource_type; const schema = toPartialZodSchema(context.schemas[resourceType]); if (schema != null) { const { success, error } = schema.safeParse(resourceSampleDefinition.properties); if (!success) { throw new Error(`Invalid properties for resource sample definition of type '${resourceType}': ${error.message}`); } } else { // eslint-disable-next-line no-console console.warn(`Missing Zod schema for resource ${resourceType}.`); } const resource = { seam_cli: { title: 'Seam CLI', resource_data: createSeamCliResourceData(resourceSampleDefinition, context), resource_data_syntax: 'json', }, }; return { ...resourceSampleDefinition, resource: await formatResourceRecords(resource, context), }; }; const toPartialZodSchema = (input) => { if (typeof input !== 'object') return null; if (input == null) return null; if ('deepPartial' in input) return input; return null; }; //# sourceMappingURL=resource-sample.js.map