@seamapi/blueprint
Version:
Build tools for the Seam API using this blueprint.
57 lines • 2.17 kB
JavaScript
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 {
// TODO: Skip event and action_attempt warning until support is added.
if (!['event', 'action_attempt'].includes(resourceType)) {
// 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