weavebot-core
Version:
Generic content processing framework for web scraping and AI extraction
1 lines • 3.36 kB
Source Map (JSON)
{"version":3,"sources":["../src/schemas/index.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Generic Schema Registry for dynamic schema management\n * This registry allows applications to register their own schemas\n */\nexport class SchemaRegistry {\n private schemas = new Map<string, z.ZodType>();\n private fieldMappings = new Map<string, Record<string, string>>();\n\n /**\n * Register a schema with optional field mapping\n */\n register<T>(name: string, schema: z.ZodType<T>, fieldMapping?: Record<string, string>): void {\n this.schemas.set(name, schema);\n if (fieldMapping) {\n this.fieldMappings.set(name, fieldMapping);\n }\n }\n\n /**\n * Validate data against a registered schema\n */\n validate<T>(schemaName: string, data: unknown): T {\n const schema = this.schemas.get(schemaName);\n if (!schema) {\n throw new Error(`Schema '${schemaName}' not found`);\n }\n return schema.parse(data) as T;\n }\n\n /**\n * Get a registered schema\n */\n getSchema(name: string): z.ZodType | undefined {\n return this.schemas.get(name);\n }\n\n /**\n * Get field mapping for a schema\n */\n getFieldMapping(name: string): Record<string, string> | undefined {\n return this.fieldMappings.get(name);\n }\n\n /**\n * List all registered schema names\n */\n listSchemas(): string[] {\n return Array.from(this.schemas.keys());\n }\n\n /**\n * Check if a schema is registered\n */\n hasSchema(name: string): boolean {\n return this.schemas.has(name);\n }\n\n /**\n * Clear all registered schemas\n */\n clear(): void {\n this.schemas.clear();\n this.fieldMappings.clear();\n }\n}\n\n// Create default registry instance\nexport const defaultSchemaRegistry = new SchemaRegistry();\n\n/**\n * Helper to create a schema registry with initial schemas\n */\nexport function createSchemaRegistry(\n schemas?: Record<string, z.ZodType>,\n mappings?: Record<string, Record<string, string>>\n): SchemaRegistry {\n const registry = new SchemaRegistry();\n \n if (schemas) {\n Object.entries(schemas).forEach(([name, schema]) => {\n const mapping = mappings?.[name];\n registry.register(name, schema, mapping);\n });\n }\n \n return registry;\n}"],"mappings":";AAMO,IAAM,iBAAN,MAAqB;AAAA,EAClB,UAAU,oBAAI,IAAuB;AAAA,EACrC,gBAAgB,oBAAI,IAAoC;AAAA;AAAA;AAAA;AAAA,EAKhE,SAAY,MAAc,QAAsB,cAA6C;AAC3F,SAAK,QAAQ,IAAI,MAAM,MAAM;AAC7B,QAAI,cAAc;AAChB,WAAK,cAAc,IAAI,MAAM,YAAY;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAY,YAAoB,MAAkB;AAChD,UAAM,SAAS,KAAK,QAAQ,IAAI,UAAU;AAC1C,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,WAAW,UAAU,aAAa;AAAA,IACpD;AACA,WAAO,OAAO,MAAM,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,MAAqC;AAC7C,WAAO,KAAK,QAAQ,IAAI,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,MAAkD;AAChE,WAAO,KAAK,cAAc,IAAI,IAAI;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,cAAwB;AACtB,WAAO,MAAM,KAAK,KAAK,QAAQ,KAAK,CAAC;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,MAAuB;AAC/B,WAAO,KAAK,QAAQ,IAAI,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,QAAQ,MAAM;AACnB,SAAK,cAAc,MAAM;AAAA,EAC3B;AACF;AAGO,IAAM,wBAAwB,IAAI,eAAe;AAKjD,SAAS,qBACd,SACA,UACgB;AAChB,QAAM,WAAW,IAAI,eAAe;AAEpC,MAAI,SAAS;AACX,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,MAAM,MAAM;AAClD,YAAM,UAAU,WAAW,IAAI;AAC/B,eAAS,SAAS,MAAM,QAAQ,OAAO;AAAA,IACzC,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}