Files
firecrawl/apps/api/src/lib/extract/helpers/spread-schemas.ts
T

48 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-01-22 18:47:44 -03:00
export async function spreadSchemas(
schema: any,
keys: string[],
): Promise<{
singleAnswerSchema: any;
multiEntitySchema: any;
}> {
let singleAnswerSchema = { ...schema, properties: { ...schema.properties } };
let multiEntitySchema: any = { type: "object", properties: {} };
keys.forEach((key) => {
if (singleAnswerSchema.properties[key]) {
multiEntitySchema.properties[key] = singleAnswerSchema.properties[key];
delete singleAnswerSchema.properties[key];
}
});
// Recursively delete empty properties in singleAnswerSchema
const deleteEmptyProperties = (schema: any) => {
for (const key in schema.properties) {
if (
schema.properties[key].properties &&
Object.keys(schema.properties[key].properties).length === 0
) {
delete schema.properties[key];
} else if (schema.properties[key].properties) {
deleteEmptyProperties(schema.properties[key]);
}
}
};
deleteEmptyProperties(singleAnswerSchema);
deleteEmptyProperties(multiEntitySchema);
// If singleAnswerSchema has no properties left, return an empty object
if (Object.keys(singleAnswerSchema.properties).length === 0) {
singleAnswerSchema = {};
}
2025-01-22 18:47:44 -03:00
if (Object.keys(multiEntitySchema.properties).length === 0) {
multiEntitySchema = {};
}
return {
singleAnswerSchema,
multiEntitySchema,
};
2025-01-22 18:47:44 -03:00
}