@kyro-cms/core 0.3.4 → 0.4.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.
Files changed (88) hide show
  1. package/README.md +3 -3
  2. package/dist/api-handler.cjs +6 -6
  3. package/dist/api-handler.js +5 -5
  4. package/dist/{chunk-X3CU27OO.cjs → chunk-3FW6WVVP.cjs} +2 -17
  5. package/dist/chunk-3FW6WVVP.cjs.map +1 -0
  6. package/dist/{chunk-CZ3HWX2X.cjs → chunk-3ZZPZYCM.cjs} +42 -67
  7. package/dist/chunk-3ZZPZYCM.cjs.map +1 -0
  8. package/dist/{chunk-6LPNEC6D.js → chunk-C4JJEE42.js} +43 -68
  9. package/dist/chunk-C4JJEE42.js.map +1 -0
  10. package/dist/{chunk-VEI5KQVC.cjs → chunk-FWGHXRRI.cjs} +45 -15
  11. package/dist/chunk-FWGHXRRI.cjs.map +1 -0
  12. package/dist/{chunk-MMYAIYHJ.cjs → chunk-M4GFA2UQ.cjs} +336 -32
  13. package/dist/chunk-M4GFA2UQ.cjs.map +1 -0
  14. package/dist/{chunk-2SJATAN4.js → chunk-OJBK3JYF.js} +336 -32
  15. package/dist/chunk-OJBK3JYF.js.map +1 -0
  16. package/dist/{chunk-XIXGJGQW.js → chunk-SAMZQVC2.js} +44 -14
  17. package/dist/chunk-SAMZQVC2.js.map +1 -0
  18. package/dist/{chunk-B76I67F3.js → chunk-WSCJQI2B.js} +61 -13
  19. package/dist/chunk-WSCJQI2B.js.map +1 -0
  20. package/dist/{chunk-RGIQKTZ7.js → chunk-YMG55RSX.js} +4 -18
  21. package/dist/chunk-YMG55RSX.js.map +1 -0
  22. package/dist/{chunk-DAIBBBOL.cjs → chunk-Z2OVHWHB.cjs} +61 -13
  23. package/dist/chunk-Z2OVHWHB.cjs.map +1 -0
  24. package/dist/drizzle/index.cjs +10 -10
  25. package/dist/drizzle/index.js +2 -2
  26. package/dist/index.cjs +138 -105
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.js +77 -44
  29. package/dist/index.js.map +1 -1
  30. package/dist/rest/index.cjs +5 -4
  31. package/dist/rest/index.js +3 -2
  32. package/dist/templates/index.cjs +24 -24
  33. package/dist/templates/index.js +1 -1
  34. package/package.json +2 -14
  35. package/dist/WebhookService-BCpW2dyL.d.ts +0 -112
  36. package/dist/WebhookService-DxYSFvNg.d.cts +0 -112
  37. package/dist/api-handler.d.cts +0 -9
  38. package/dist/api-handler.d.ts +0 -9
  39. package/dist/base-DvvNqnM-.d.cts +0 -73
  40. package/dist/base-eVegJ_Pr.d.ts +0 -73
  41. package/dist/chunk-2SJATAN4.js.map +0 -1
  42. package/dist/chunk-6LPNEC6D.js.map +0 -1
  43. package/dist/chunk-B76I67F3.js.map +0 -1
  44. package/dist/chunk-CZ3HWX2X.cjs.map +0 -1
  45. package/dist/chunk-DAIBBBOL.cjs.map +0 -1
  46. package/dist/chunk-MMYAIYHJ.cjs.map +0 -1
  47. package/dist/chunk-RGIQKTZ7.js.map +0 -1
  48. package/dist/chunk-VEI5KQVC.cjs.map +0 -1
  49. package/dist/chunk-X3CU27OO.cjs.map +0 -1
  50. package/dist/chunk-XIXGJGQW.js.map +0 -1
  51. package/dist/cli/index.d.cts +0 -1
  52. package/dist/cli/index.d.ts +0 -1
  53. package/dist/client.d.cts +0 -12
  54. package/dist/client.d.ts +0 -12
  55. package/dist/drizzle/index.d.cts +0 -135
  56. package/dist/drizzle/index.d.ts +0 -135
  57. package/dist/fields/index.d.cts +0 -27
  58. package/dist/fields/index.d.ts +0 -27
  59. package/dist/graphql/index.d.cts +0 -22
  60. package/dist/graphql/index.d.ts +0 -22
  61. package/dist/index-Bz9JqRGI.d.cts +0 -86
  62. package/dist/index-Bz9JqRGI.d.ts +0 -86
  63. package/dist/index-CLp-DRKA.d.ts +0 -64
  64. package/dist/index-DfO7G4kN.d.cts +0 -64
  65. package/dist/index.d.cts +0 -1361
  66. package/dist/index.d.ts +0 -1361
  67. package/dist/integration.d.cts +0 -27
  68. package/dist/integration.d.ts +0 -27
  69. package/dist/mongodb/index.d.cts +0 -63
  70. package/dist/mongodb/index.d.ts +0 -63
  71. package/dist/mysql-media-AI6YK767.cjs +0 -48
  72. package/dist/mysql-media-AI6YK767.cjs.map +0 -1
  73. package/dist/mysql-media-CDZUS7YX.js +0 -45
  74. package/dist/mysql-media-CDZUS7YX.js.map +0 -1
  75. package/dist/rest/index.d.cts +0 -57
  76. package/dist/rest/index.d.ts +0 -57
  77. package/dist/templates/index.d.cts +0 -59
  78. package/dist/templates/index.d.ts +0 -59
  79. package/dist/trpc/index.d.cts +0 -136
  80. package/dist/trpc/index.d.ts +0 -136
  81. package/dist/types-Bs1up4yP.d.ts +0 -461
  82. package/dist/types-Da83JLDk.d.cts +0 -130
  83. package/dist/types-Da83JLDk.d.ts +0 -130
  84. package/dist/types-J3R9nVsZ.d.cts +0 -461
  85. package/dist/types-VtjUxIMp.d.cts +0 -246
  86. package/dist/types-VtjUxIMp.d.ts +0 -246
  87. package/dist/ws/index.d.cts +0 -88
  88. package/dist/ws/index.d.ts +0 -88
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/database/drizzle/adapter.ts"],"names":[],"mappings":"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","file":"chunk-C4JJEE42.js","sourcesContent":["import { AbstractBaseAdapter } from '../base.js';\nimport { sql, eq } from 'drizzle-orm';\nimport type {\n CollectionConfig,\n GlobalConfig,\n FindArgs,\n FindByIDArgs,\n CreateArgs,\n UpdateArgs,\n DeleteArgs,\n FindResult,\n DraftFindArgs,\n DraftUpsertArgs,\n DraftDeleteArgs,\n DraftSnapshot,\n} from '../../registry/types.js';\nimport type { Field, RelationshipField } from '../../fields/types.js';\n\n// ============================================================================\n// Drizzle Schema Generator\n// ============================================================================\n\nexport function fieldToDrizzleType(field: Field, dialect: 'postgres' | 'sqlite' = 'postgres'): string {\n switch (field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'textarea':\n case 'color':\n case 'code':\n case 'markdown':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'number':\n return field.integer ? 'integer' : 'decimal';\n case 'checkbox':\n return 'boolean';\n case 'date':\n return 'timestamp';\n case 'select':\n case 'radio':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'richtext':\n case 'json':\n case 'array':\n case 'group':\n case 'blocks':\n case 'row':\n case 'collapsible':\n case 'tabs':\n return 'jsonb';\n case 'relationship':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'upload':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n default:\n return 'jsonb';\n }\n}\n\nexport function collectionToDrizzleSchema(\n collection: CollectionConfig,\n dialect: 'postgres' | 'sqlite' = 'postgres'\n): string {\n const tableName = collection.slug.replace(/-/g, '_');\n const lines: string[] = [];\n \n lines.push(`export const ${tableName} = pgTable('${tableName}', {`);\n \n // Add id field\n lines.push(` id: uuid('id').primaryKey().defaultRandom(),`);\n \n // Process fields\n for (const field of collection.fields) {\n if (field.name === 'id') continue;\n \n const dbType = fieldToDrizzleType(field, dialect);\n const isRequired = field.required;\n \n let fieldDef = ` ${field.name}: pg.${dbType}('${field.name}')`;\n \n // Add constraints\n if (field.unique) fieldDef += '.unique()';\n if (!isRequired) fieldDef += '.nullable()';\n \n // Add default value\n if (field.defaultValue !== undefined) {\n if (typeof field.defaultValue === 'string') {\n fieldDef += `.default('${field.defaultValue}')`;\n } else if (typeof field.defaultValue === 'boolean') {\n fieldDef += `.default(${field.defaultValue})`;\n } else {\n fieldDef += `.default(sql\\`${JSON.stringify(field.defaultValue)}\\`)`;\n }\n }\n \n fieldDef += ',';\n lines.push(fieldDef);\n }\n \n // Add timestamps\n if (collection.timestamps) {\n lines.push(` createdAt: pg.timestamp('created_at').defaultNow(),`);\n lines.push(` updatedAt: pg.timestamp('updated_at').defaultNow(),`);\n }\n \n // Add status field\n lines.push(` _status: ${dialect === 'sqlite' ? 'sqlite' : 'pg'}.varchar('_status').default('published'),`);\n lines.push(` _has_draft: ${dialect === 'sqlite' ? 'sqlite' : 'pg'}.boolean('_has_draft').default(false),`);\n \n lines.push('});');\n \n return lines.join('\\n');\n}\n\n// ============================================================================\n// Drizzle Adapter\n// ============================================================================\n\nexport class DrizzleAdapter extends AbstractBaseAdapter {\n private client: any;\n private schema: any;\n private dialect: 'postgres' | 'sqlite';\n private draftsTableReady = false;\n private versionsTableReady = false;\n \n constructor(options: {\n type: 'postgres' | 'sqlite';\n client: any;\n schema?: any;\n }) {\n super();\n this.client = options.client;\n this.schema = options.schema || {};\n this.dialect = options.type;\n }\n\n protected prepareData(data: Record<string, any>, config: CollectionConfig): Record<string, any> {\n const result = super.prepareData(data, config);\n \n // Handle nested tab fields - convert to JSON for storage\n for (const field of config.fields) {\n if (field.type === 'tabs' && 'tabs' in field && field.name) {\n const tabData = data[field.name];\n if (tabData && typeof tabData === 'object') {\n // Process list, relationship-block, image, and upload fields inside tabs to preserve full object\n const processedTabData: any = {};\n for (const [key, value] of Object.entries(tabData)) {\n const tabField = field.tabs.flatMap((t: any) => t.fields).find((f: any) => f.name === key);\n if ((tabField?.type === 'upload' || tabField?.type === 'image' || tabField?.type === 'list' || tabField?.type === 'relationship-block') && value) {\n if (Array.isArray(value)) {\n processedTabData[key] = JSON.stringify(value);\n } else if (typeof value === 'object') {\n processedTabData[key] = JSON.stringify(value);\n } else {\n processedTabData[key] = value;\n }\n } else {\n processedTabData[key] = value;\n }\n }\n result[field.name] = JSON.stringify(processedTabData);\n }\n }\n \n // Also handle top-level list, relationship-block, image, and upload fields\n if (['upload', 'image', 'list', 'relationship-block'].includes((field as any).type) && field.name) {\n const value = data[field.name];\n if (value) {\n if (Array.isArray(value)) {\n result[field.name] = JSON.stringify(value);\n } else if (typeof value === 'object') {\n result[field.name] = JSON.stringify(value);\n }\n }\n }\n }\n \n return result;\n }\n\n async connect(): Promise<void> {\n this.connected = true;\n console.log(`[DrizzleAdapter] Connected to ${this.dialect}`);\n }\n\n async disconnect(): Promise<void> {\n this.connected = false;\n console.log(`[DrizzleAdapter] Disconnected from ${this.dialect}`);\n }\n\n async find<T>(args: FindArgs): Promise<FindResult<T>> {\n const { collection: slug, where = {}, sort, limit = 10, page = 1, tenantID, select, draft } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n // Build query\n const filters = this.buildWhereClause(where, config, table, tenantID);\n \n // Default filter for non-draft requests: only show published\n if (!draft) {\n filters.push(table._status.equals('published'));\n }\n\n const sortOption = this.parseSort(sort);\n\n // Get total count\n const totalDocs = await this.count({ collection: slug, where: { ...where, _status: draft ? undefined : 'published' }, tenantID });\n\n // Execute query\n const offset = (page - 1) * limit;\n \n let results = [];\n try {\n results = await this.client\n .select()\n .from(table)\n .where(filters)\n .orderBy(sortOption.direction === 'asc' ? table[sortOption.field] : undefined)\n .limit(limit)\n .offset(offset);\n } catch (error) {\n console.error(`[DrizzleAdapter] Query error:`, error);\n }\n\n let docs: T[] = results.map((doc: any) => this.processResult(doc, config));\n\n // If draft: true, we need to check if any docs have a separate draft version\n if (draft) {\n docs = await Promise.all(docs.map(async (doc: any) => {\n if (doc._has_draft) {\n const versions = await this.findVersions({\n collection: slug,\n documentId: doc.id,\n limit: 1,\n sort: '-createdAt'\n });\n if (versions.docs.length > 0 && versions.docs[0].status === 'draft') {\n return { ...doc, ...versions.docs[0].data, _has_draft: true, _status: doc._status };\n }\n }\n return doc;\n }));\n }\n\n return {\n docs,\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findByID<T>(args: FindByIDArgs): Promise<T | null> {\n const { collection: slug, id, tenantID, draft } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n let query = this.client\n .select()\n .from(table)\n .where(table.id.equals(id));\n\n if (tenantID) {\n query = query.where(table.tenantId.equals(tenantID));\n }\n\n if (!draft) {\n query = query.where(table._status.equals('published'));\n }\n\n const results = await query.limit(1);\n if (results.length === 0) return null;\n\n let doc = this.processResult(results[0], config) as T;\n\n // If draft: true and doc has a separate draft, merge it\n if (draft && (doc as any)._has_draft) {\n const versions = await this.findVersions({\n collection: slug,\n documentId: (doc as any).id,\n limit: 1,\n sort: '-createdAt'\n });\n if (versions.docs.length > 0 && versions.docs[0].status === 'draft') {\n doc = { ...doc, ...versions.docs[0].data, _has_draft: true, _status: (doc as any)._status };\n }\n }\n\n return doc;\n }\n\n async create<T>(args: CreateArgs): Promise<T> {\n const { collection: slug, data, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const insertData = this.prepareData(data, config);\n if (tenantID) {\n insertData.tenantId = tenantID;\n }\n\n const result = await this.client\n .insert(table)\n .values(insertData)\n .returning();\n\n return this.processResult(result[0], config) as T;\n }\n\n async update<T>(args: UpdateArgs): Promise<T> {\n const { collection: slug, id, data, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const updateData = this.prepareData(data, config);\n if (tenantID) {\n updateData.tenantId = tenantID;\n }\n\n const result = await this.client\n .update(table)\n .set(updateData)\n .where(eq(table.id, id))\n .returning();\n\n return this.processResult(result[0], config) as T;\n }\n\n async delete<T>(args: DeleteArgs): Promise<T> {\n const { collection: slug, id, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n let query = this.client\n .delete(table)\n .where(eq(table.id, id))\n .returning();\n\n if (tenantID) {\n query = query.where(table.tenantId.equals(tenantID));\n }\n\n const result = await query;\n if (result.length === 0) {\n throw new Error(`Document not found: ${slug}/${id}`);\n }\n\n return this.processResult(result[0], config) as T;\n }\n\n async count(args: { collection: string; where?: Record<string, any>; tenantID?: string }): Promise<number> {\n const { collection: slug, where = {}, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const filters = this.buildWhereClause(where, config, table, tenantID);\n\n try {\n const result = await this.client\n .select({ count: `count(*)` })\n .from(table)\n .where(filters);\n\n return parseInt(result[0]?.count || '0');\n } catch {\n return 0;\n }\n }\n\n async findOne(args: { collection: string; where: Record<string, any>; tenantID?: string; draft?: boolean }): Promise<any> {\n const { collection: slug, where = {}, tenantID, draft } = args;\n \n // Check if it's a Global\n if (slug.startsWith('_globals_')) {\n const globalSlug = slug.replace('_globals_', '');\n const globalConfig = this.globals.get(globalSlug);\n if (!globalConfig) throw new Error(`Global \"${globalSlug}\" not found`);\n \n const table = this.getTable(slug);\n let query = this.client.select().from(table);\n \n if (!draft) {\n query = query.where(table._status.equals('published'));\n }\n\n const results = await query.limit(1);\n if (results.length === 0) return null;\n\n let doc = this.processResult(results[0], globalConfig as any);\n\n // If draft: true and doc has a separate draft, merge it\n if (draft && (doc as any)._has_draft) {\n const versions = await this.findVersions({\n collection: slug,\n documentId: globalSlug,\n limit: 1,\n sort: '-createdAt'\n });\n if (versions.docs.length > 0 && versions.docs[0].status === 'draft') {\n doc = { ...doc, ...versions.docs[0].data, _has_draft: true, _status: (doc as any)._status };\n }\n }\n return doc;\n }\n\n const result = await this.find({ ...args, limit: 1 });\n return result.docs[0] || null;\n }\n\n async findVersions(args: any): Promise<FindResult<any>> {\n await this.ensureVersionsTable();\n const { collection: slug, documentId, limit = 10, page = 1, tenantID } = args;\n\n const offset = (page - 1) * limit;\n \n const countResult = await this.executeRaw(sql`\n SELECT count(*) as count \n FROM kyro_versions \n WHERE collection_slug = ${slug} \n AND document_id = ${documentId}\n ${tenantID ? sql`AND tenant_id = ${tenantID}` : sql``}\n `);\n const totalDocs = parseInt(countResult[0]?.count || '0');\n\n const results = await this.executeRaw(sql`\n SELECT * \n FROM kyro_versions \n WHERE collection_slug = ${slug} \n AND document_id = ${documentId}\n ${tenantID ? sql`AND tenant_id = ${tenantID}` : sql``}\n ORDER BY created_at DESC\n LIMIT ${limit}\n OFFSET ${offset}\n `);\n\n return {\n docs: results.map(row => ({\n ...row,\n data: typeof row.data === 'string' ? JSON.parse(row.data) : row.data,\n })),\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findVersionByID(args: { collection: string; versionId: string; tenantID?: string }): Promise<any> {\n await this.ensureVersionsTable();\n const results = await this.executeRaw(sql`\n SELECT * FROM kyro_versions \n WHERE id = ${args.versionId} \n AND collection_slug = ${args.collection}\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n LIMIT 1\n `);\n \n if (results.length === 0) return null;\n const row = results[0];\n return {\n ...row,\n data: typeof row.data === 'string' ? JSON.parse(row.data) : row.data,\n };\n }\n\n async createVersion(args: any): Promise<any> {\n await this.ensureVersionsTable();\n const id = Math.random().toString(36).substring(2, 15);\n const now = new Date().toISOString();\n \n await this.executeRaw(sql`\n INSERT INTO kyro_versions (\n id, collection_slug, document_id, tenant_id, data, status, created_by, change_description, created_at, updated_at\n ) VALUES (\n ${id}, ${args.collection}, ${args.documentId}, ${args.tenantID || null}, \n ${JSON.stringify(args.data)}, ${args.status}, ${args.createdBy || null}, \n ${args.changeDescription || null}, ${now}, ${now}\n )\n `);\n\n // Pruning logic\n const config = this.getCollection(args.collection);\n if (config.versions?.maxPerDoc) {\n await this.deleteVersions({\n collection: args.collection,\n documentId: args.documentId,\n keepLatest: config.versions.maxPerDoc,\n tenantID: args.tenantID,\n });\n }\n\n return this.findVersionByID({ collection: args.collection, versionId: id, tenantID: args.tenantID });\n }\n\n async deleteVersions(args: { collection: string; documentId: string; keepLatest?: number; tenantID?: string }): Promise<void> {\n await this.ensureVersionsTable();\n \n if (args.keepLatest) {\n // Find IDs of latest versions to keep\n const toKeep = await this.executeRaw(sql`\n SELECT id FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n ORDER BY created_at DESC\n LIMIT ${args.keepLatest}\n `);\n \n const keepIds = toKeep.map(r => r.id);\n if (keepIds.length > 0) {\n await this.executeRaw(sql`\n DELETE FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n AND id NOT IN (${sql.join(keepIds.map(id => sql`${id}`), sql`, `)})\n `);\n }\n } else {\n await this.executeRaw(sql`\n DELETE FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n `);\n }\n }\n\n async findDraft<T>(args: DraftFindArgs): Promise<DraftSnapshot<T> | null> {\n await this.ensureDraftsTable();\n\n const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);\n const rows = await this.executeRaw<any>(sql`\n SELECT *\n FROM kyro_drafts\n WHERE id = ${draftId}\n LIMIT 1\n `);\n const row = rows[0];\n return row ? this.rowToDraft<T>(row) : null;\n }\n\n async upsertDraft<T>(args: DraftUpsertArgs<T>): Promise<DraftSnapshot<T>> {\n await this.ensureDraftsTable();\n\n const now = new Date().toISOString();\n const draftUpdatedAt = args.draftUpdatedAt || now;\n const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);\n const existing = await this.findDraft<T>(args);\n\n if (existing) {\n await this.executeRaw(sql`\n UPDATE kyro_drafts\n SET\n data = ${JSON.stringify(args.data)},\n base_updated_at = ${args.baseUpdatedAt ?? null},\n draft_updated_at = ${draftUpdatedAt},\n updated_at = ${now}\n WHERE id = ${draftId}\n `);\n } else {\n await this.executeRaw(sql`\n INSERT INTO kyro_drafts (\n id, collection_slug, document_id, tenant_id, data, base_updated_at, draft_updated_at, created_at, updated_at\n ) VALUES (\n ${draftId},\n ${args.collection},\n ${args.documentId},\n ${args.tenantID ?? null},\n ${JSON.stringify(args.data)},\n ${args.baseUpdatedAt ?? null},\n ${draftUpdatedAt},\n ${now},\n ${now}\n )\n `);\n }\n\n const saved = await this.findDraft<T>(args);\n if (!saved) {\n throw new Error('Failed to persist draft snapshot');\n }\n return saved;\n }\n\n async deleteDraft(args: DraftDeleteArgs): Promise<void> {\n await this.ensureDraftsTable();\n\n const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);\n await this.executeRaw(sql`\n DELETE FROM kyro_drafts\n WHERE id = ${draftId}\n `);\n }\n\n // ========================================================================\n // Helper Methods\n // ========================================================================\n\n private getTable(slug: string): any {\n const tableName = this.getTableName(slug);\n const table = this.schema[tableName];\n if (!table) {\n throw new Error(`Table \"${tableName}\" not found in schema`);\n }\n return table;\n }\n\n private buildWhereClause(\n where: Record<string, any>,\n config: CollectionConfig,\n table: any,\n tenantID?: string\n ): any {\n // Simplified where clause builder\n const conditions: any[] = [];\n\n // Apply tenant filter\n if (tenantID && config.tenantScoped) {\n conditions.push({ tenantId: tenantID });\n }\n\n // Process where conditions\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND' && Array.isArray(value)) {\n // AND conditions\n for (const subCondition of value) {\n conditions.push(...Object.entries(subCondition).map(([k, v]) => ({ [k]: v })));\n }\n } else if (key === 'OR' && Array.isArray(value)) {\n // OR conditions - simplified\n conditions.push(...value.flatMap((v: any) => \n Object.entries(v).map(([k, val]) => ({ [k]: val }))\n ));\n } else if (typeof value === 'object' && value !== null) {\n // Operator-based conditions\n if (value.equals !== undefined) conditions.push(eq(table[key], value.equals));\n if (value.not_equals !== undefined) conditions.push({ [key]: { not: value.not_equals } });\n if (value.in) conditions.push({ [key]: { in: value.in } });\n if (value.like) conditions.push({ [key]: { like: value.like } });\n if (value.greater_than !== undefined) conditions.push({ [key]: { gt: value.greater_than } });\n if (value.greater_than_equal !== undefined) conditions.push({ [key]: { gte: value.greater_than_equal } });\n if (value.less_than !== undefined) conditions.push({ [key]: { lt: value.less_than } });\n if (value.less_than_equal !== undefined) conditions.push({ [key]: { lte: value.less_than_equal } });\n } else {\n // Direct equality\n conditions.push({ [key]: value });\n }\n }\n\n return conditions.length > 0 ? conditions : undefined;\n }\n\n private processResult(data: any, config: CollectionConfig): any {\n if (!data) return null;\n\n const result = { ...data };\n\n // Convert id field\n if (data.id) {\n result.id = String(data.id);\n }\n\n // Parse JSON fields and upload/image fields\n for (const field of config.fields) {\n if (['json', 'richtext', 'array', 'group', 'blocks', 'upload', 'image', 'list', 'relationship-block'].includes((field as any).type)) {\n const f = field as any;\n if (result[f.name] && typeof result[f.name] === 'string') {\n try {\n const parsed = JSON.parse(result[f.name]);\n result[f.name] = parsed;\n } catch {\n // Keep original value\n }\n }\n }\n \n // Handle nested tab fields - build nested structure\n if (field.type === 'tabs' && 'tabs' in field && field.name) {\n const tabData: any = {};\n for (const tab of field.tabs) {\n for (const tabField of tab.fields) {\n if (tabField.name && result[tabField.name] !== undefined) {\n let value = result[tabField.name];\n // Parse JSON types and upload/image/list/relationship-block fields\n if (['json', 'richtext', 'array', 'group', 'blocks', 'upload', 'image', 'list', 'relationship-block'].includes((tabField as any).type)) {\n if (value && typeof value === 'string') {\n try {\n value = JSON.parse(value);\n } catch {\n // Keep original value\n }\n }\n }\n tabData[tabField.name] = value;\n // Remove from top level\n delete result[tabField.name];\n }\n }\n }\n result[field.name] = tabData;\n }\n }\n\n // Convert timestamps to ISO strings\n if (result.createdAt) {\n result.createdAt = new Date(result.createdAt).toISOString();\n }\n if (result.updatedAt) {\n result.updatedAt = new Date(result.updatedAt).toISOString();\n }\n\n return result;\n }\n\n private async ensureDraftsTable(): Promise<void> {\n if (this.draftsTableReady) return;\n\n const createTableSQL = sql.raw(`\n CREATE TABLE IF NOT EXISTS kyro_drafts (\n id text PRIMARY KEY,\n collection_slug text NOT NULL,\n document_id text NOT NULL,\n tenant_id text,\n data text NOT NULL,\n base_updated_at text,\n draft_updated_at text NOT NULL,\n created_at text NOT NULL,\n updated_at text NOT NULL\n )\n `);\n\n await this.executeRaw(createTableSQL);\n this.draftsTableReady = true;\n }\n\n private async ensureVersionsTable(): Promise<void> {\n if (this.versionsTableReady) return;\n\n const createTableSQL = sql.raw(`\n CREATE TABLE IF NOT EXISTS kyro_versions (\n id text PRIMARY KEY,\n collection_slug text NOT NULL,\n document_id text NOT NULL,\n tenant_id text,\n data text NOT NULL,\n status text NOT NULL,\n created_by text,\n change_description text,\n created_at text NOT NULL,\n updated_at text NOT NULL\n )\n `);\n\n await this.executeRaw(createTableSQL);\n this.versionsTableReady = true;\n }\n\n private getDraftId(collection: string, documentId: string, tenantID?: string): string {\n return `${collection}::${documentId}::${tenantID || 'global'}`;\n }\n\n private async executeRaw<T = any>(query: any): Promise<T[]> {\n const result = await this.client.execute(query);\n if (Array.isArray(result)) {\n return result as T[];\n }\n if (Array.isArray(result?.rows)) {\n return result.rows as T[];\n }\n if (Array.isArray(result?.[0])) {\n return result[0] as T[];\n }\n return [];\n }\n\n private rowToDraft<T>(row: any): DraftSnapshot<T> {\n return {\n id: String(row.id),\n collection: row.collection_slug,\n documentId: row.document_id,\n tenantID: row.tenant_id ?? undefined,\n data: row.data ? JSON.parse(row.data) : {},\n baseUpdatedAt: row.base_updated_at ?? null,\n draftUpdatedAt: row.draft_updated_at,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\nexport function createDrizzleAdapter(options: {\n type: 'postgres' | 'sqlite';\n client: any;\n schema?: any;\n}): DrizzleAdapter {\n return new DrizzleAdapter(options);\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkK7JPTH3G_cjs = require('./chunk-K7JPTH3G.cjs');
4
- var chunkVJT6P4N6_cjs = require('./chunk-VJT6P4N6.cjs');
5
- var chunkMMYAIYHJ_cjs = require('./chunk-MMYAIYHJ.cjs');
4
+ var chunkM4GFA2UQ_cjs = require('./chunk-M4GFA2UQ.cjs');
6
5
  var chunkIBG6V56E_cjs = require('./chunk-IBG6V56E.cjs');
6
+ var chunkVJT6P4N6_cjs = require('./chunk-VJT6P4N6.cjs');
7
7
  var chunkDVD5P72E_cjs = require('./chunk-DVD5P72E.cjs');
8
8
  var zod = require('zod');
9
9
 
@@ -459,13 +459,7 @@ function colorToZod(field) {
459
459
  }
460
460
  function richTextToZod(field) {
461
461
  let schema = zod.z.union([
462
- zod.z.array(
463
- zod.z.object({
464
- type: zod.z.string(),
465
- data: zod.z.record(zod.z.any()),
466
- children: zod.z.array(zod.z.any()).optional()
467
- })
468
- ),
462
+ zod.z.array(zod.z.record(zod.z.any())),
469
463
  zod.z.string()
470
464
  ]);
471
465
  if (!field.required) schema = schema.optional().nullable();
@@ -1095,6 +1089,7 @@ var Kyro = class {
1095
1089
  registry;
1096
1090
  db;
1097
1091
  pubsub;
1092
+ webhookService;
1098
1093
  settings;
1099
1094
  wsServer;
1100
1095
  config;
@@ -1103,6 +1098,7 @@ var Kyro = class {
1103
1098
  this.registry = createRegistry();
1104
1099
  this.db = config.adapter;
1105
1100
  this.pubsub = new chunkDVD5P72E_cjs.KyroPubSub(this.registry);
1101
+ this.webhookService = chunkIBG6V56E_cjs.createWebhookService(this.db);
1106
1102
  if (config.collections) {
1107
1103
  this.registry.addCollections(config.collections);
1108
1104
  }
@@ -1131,12 +1127,45 @@ var Kyro = class {
1131
1127
  { name: "keyPrefix", type: "text", required: true },
1132
1128
  { name: "permissions", type: "json" },
1133
1129
  { name: "lastUsedAt", type: "date" },
1134
- { name: "expiresAt", type: "date" },
1135
- { name: "createdAt", type: "date", required: true }
1130
+ { name: "expiresAt", type: "date" }
1131
+ ]
1132
+ };
1133
+ const webhookCollection = {
1134
+ slug: chunkIBG6V56E_cjs.WEBHOOK_COLLECTION,
1135
+ fields: [
1136
+ { name: "name", type: "text", required: true },
1137
+ { name: "url", type: "text", required: true },
1138
+ { name: "events", type: "json", required: true },
1139
+ { name: "status", type: "text", required: true },
1140
+ { name: "secret", type: "text" },
1141
+ { name: "headers", type: "json" },
1142
+ { name: "lastTriggered", type: "date" },
1143
+ { name: "lastError", type: "text" }
1144
+ ]
1145
+ };
1146
+ const webhookDeliveryCollection = {
1147
+ slug: chunkIBG6V56E_cjs.WEBHOOK_DELIVERY_COLLECTION,
1148
+ fields: [
1149
+ { name: "webhookId", type: "text", required: true },
1150
+ { name: "event", type: "text", required: true },
1151
+ { name: "payload", type: "json", required: true },
1152
+ { name: "attempt", type: "number", required: true },
1153
+ { name: "status", type: "text", required: true },
1154
+ { name: "responseStatus", type: "number" },
1155
+ { name: "responseBody", type: "text" },
1156
+ { name: "error", type: "text" },
1157
+ { name: "duration", type: "number" },
1158
+ { name: "deliveredAt", type: "date" },
1159
+ { name: "nextRetryAt", type: "date" }
1136
1160
  ]
1137
1161
  };
1138
1162
  await this.db.init(
1139
- [...this.registry.getCollections(), systemCollection],
1163
+ [
1164
+ ...this.registry.getCollections(),
1165
+ systemCollection,
1166
+ webhookCollection,
1167
+ webhookDeliveryCollection
1168
+ ],
1140
1169
  this.registry.getGlobals()
1141
1170
  );
1142
1171
  this.pubsub.autoRegisterHooks();
@@ -1167,7 +1196,7 @@ var Kyro = class {
1167
1196
  const authObj = typeof this.config.auth === "object" ? this.config.auth : null;
1168
1197
  const authSecret = authObj?.secret;
1169
1198
  const checkSession = authObj?.checkSession !== false;
1170
- return chunkMMYAIYHJ_cjs.createHonoApp({
1199
+ return chunkM4GFA2UQ_cjs.createHonoApp({
1171
1200
  registry: this.registry,
1172
1201
  db: this.db,
1173
1202
  authSecret,
@@ -1175,6 +1204,7 @@ var Kyro = class {
1175
1204
  checkSession,
1176
1205
  ...options,
1177
1206
  cors: this.config.cors,
1207
+ webhookService: this.webhookService,
1178
1208
  settings: this.settings
1179
1209
  });
1180
1210
  }
@@ -1242,5 +1272,5 @@ exports.validateCollection = validateCollection;
1242
1272
  exports.validateConfig = validateConfig;
1243
1273
  exports.validateFields = validateFields;
1244
1274
  exports.validateGlobal = validateGlobal;
1245
- //# sourceMappingURL=chunk-VEI5KQVC.cjs.map
1246
- //# sourceMappingURL=chunk-VEI5KQVC.cjs.map
1275
+ //# sourceMappingURL=chunk-FWGHXRRI.cjs.map
1276
+ //# sourceMappingURL=chunk-FWGHXRRI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry/validator.ts","../src/registry/zod-builder.ts","../src/registry/index.ts","../src/createKyro.ts"],"names":["z","fields","KyroPubSub","createWebhookService","API_KEY_COLLECTION","WEBHOOK_COLLECTION","WEBHOOK_DELIVERY_COLLECTION","createHonoApp","buildGraphQLSchema","createKyroServer","createWSServer"],"mappings":"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","file":"chunk-FWGHXRRI.cjs","sourcesContent":["import type { CollectionConfig, GlobalConfig } from './types.js';\nimport type { Field, Block } from '../fields/types.js';\n\n// ============================================================================\n// Helper: Recursively find field by name (searches nested fields too)\n// ============================================================================\n\nfunction findFieldByName(fields: Field[], name: string): boolean {\n for (const field of fields) {\n if (field.name === name) {\n return true;\n }\n // Search nested fields in tabs, row, collapsible, and group\n if ('tabs' in field && field.tabs) {\n for (const tab of field.tabs) {\n if (findFieldByName(tab.fields, name)) {\n return true;\n }\n }\n }\n if ('fields' in field && field.fields) {\n if (findFieldByName(field.fields, name)) {\n return true;\n }\n }\n }\n return false;\n}\n\n// ============================================================================\n// Validation Errors\n// ============================================================================\n\nexport class ConfigValidationError extends Error {\n public errors: string[];\n \n constructor(errors: string[]) {\n super(`Configuration validation failed:\\n${errors.join('\\n')}`);\n this.name = 'ConfigValidationError';\n this.errors = errors;\n }\n}\n\n// ============================================================================\n// Collection Validation\n// ============================================================================\n\nexport function validateCollection(config: CollectionConfig): string[] {\n const errors: string[] = [];\n \n // Slug validation\n if (!config.slug) {\n errors.push(`Collection is missing a \"slug\" property`);\n } else if (!/^[a-z][a-z0-9_-]*$/.test(config.slug)) {\n errors.push(`Collection slug \"${config.slug}\" must be lowercase alphanumeric with dashes`);\n }\n \n // Fields validation\n if (!config.fields || config.fields.length === 0) {\n errors.push(`Collection \"${config.slug}\" has no fields defined`);\n } else {\n const fieldErrors = validateFields(config.fields, config.slug);\n errors.push(...fieldErrors);\n }\n \n // Access validation\n if (config.access) {\n for (const [action, handler] of Object.entries(config.access)) {\n if (typeof handler !== 'boolean' && typeof handler !== 'function') {\n errors.push(`Collection \"${config.slug}\" has invalid access.${action} (must be boolean or function)`);\n }\n }\n }\n \n // Admin validation\n if (config.admin?.useAsTitle) {\n const fieldExists = findFieldByName(config.fields, config.admin!.useAsTitle);\n if (!fieldExists) {\n errors.push(`Collection \"${config.slug}\" admin.useAsTitle references unknown field \"${config.admin.useAsTitle}\"`);\n }\n }\n \n if (config.admin?.defaultColumns) {\n for (const col of config.admin.defaultColumns) {\n const fieldExists = findFieldByName(config.fields, col);\n if (!fieldExists) {\n errors.push(`Collection \"${config.slug}\" admin.defaultColumns references unknown field \"${col}\"`);\n }\n }\n }\n \n // Upload validation\n if (config.upload) {\n if (config.upload.fileSize && config.upload.fileSize <= 0) {\n errors.push(`Collection \"${config.slug}\" upload.fileSize must be positive`);\n }\n }\n \n // Versions validation\n if (config.versions) {\n if (config.versions.maxPerDoc && config.versions.maxPerDoc <= 0) {\n errors.push(`Collection \"${config.slug}\" versions.maxPerDoc must be positive`);\n }\n }\n \n // Auth validation\n if (config.auth) {\n const hasEmailField = config.fields.some(f => f.name === 'email');\n const hasPasswordField = config.fields.some(f => f.name === 'password');\n if (!hasEmailField) {\n errors.push(`Collection \"${config.slug}\" with auth enabled requires an \"email\" field`);\n }\n if (!hasPasswordField) {\n errors.push(`Collection \"${config.slug}\" with auth enabled requires a \"password\" field`);\n }\n }\n \n return errors;\n}\n\n// ============================================================================\n// Global Validation\n// ============================================================================\n\nexport function validateGlobal(config: GlobalConfig): string[] {\n const errors: string[] = [];\n \n // Slug validation\n if (!config.slug) {\n errors.push(`Global is missing a \"slug\" property`);\n } else if (!/^[a-z][a-z0-9_-]*$/.test(config.slug)) {\n errors.push(`Global slug \"${config.slug}\" must be lowercase alphanumeric with dashes`);\n }\n \n // Fields validation\n if (!config.fields || config.fields.length === 0) {\n errors.push(`Global \"${config.slug}\" has no fields defined`);\n } else {\n const fieldErrors = validateFields(config.fields, `global:${config.slug}`);\n errors.push(...fieldErrors);\n }\n \n return errors;\n}\n\n// ============================================================================\n// Field Validation\n// ============================================================================\n\nexport function validateFields(fields: Field[], context: string): string[] {\n const errors: string[] = [];\n const fieldNames = new Set<string>();\n \n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n \n // Skip layout fields without names\n if (field.type === 'row' || field.type === 'collapsible' || field.type === 'tabs') {\n // Validate nested fields\n if ('fields' in field && field.fields) {\n const nestedErrors = validateFields(field.fields, context);\n errors.push(...nestedErrors);\n } else if ('tabs' in field) {\n for (const tab of (field as any).tabs) {\n const tabErrors = validateFields(tab.fields, context);\n errors.push(...tabErrors);\n }\n }\n continue;\n }\n \n // Name validation\n const fieldName = field.name as string | undefined;\n if (!fieldName) {\n errors.push(`${context}: Field at index ${i} is missing a \"name\" property`);\n continue;\n }\n \n if (fieldNames.has(fieldName)) {\n errors.push(`${context}: Duplicate field name \"${fieldName}\"`);\n }\n fieldNames.add(fieldName);\n \n if (!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(fieldName)) {\n errors.push(`${context}: Field name \"${fieldName}\" must be alphanumeric with underscores`);\n }\n \n // Type validation\n if (!field.type) {\n errors.push(`${context}: Field \"${fieldName}\" is missing a \"type\" property`);\n continue;\n }\n \n // Field-specific validation\n switch (field.type) {\n case 'relationship':\n if (!field.relationTo) {\n errors.push(`${context}: Relationship field \"${fieldName}\" is missing \"relationTo\"`);\n }\n break;\n \n case 'array':\n if (!field.fields || field.fields.length === 0) {\n errors.push(`${context}: Array field \"${fieldName}\" has no fields defined`);\n } else {\n const arrayErrors = validateFields(field.fields, `${context}.${fieldName}`);\n errors.push(...arrayErrors);\n }\n break;\n \n case 'group':\n if (!field.fields || field.fields.length === 0) {\n errors.push(`${context}: Group field \"${fieldName}\" has no fields defined`);\n } else {\n const groupErrors = validateFields(field.fields, `${context}.${fieldName}`);\n errors.push(...groupErrors);\n }\n break;\n \n case 'blocks':\n if (!field.blocks || field.blocks.length === 0) {\n errors.push(`${context}: Blocks field \"${fieldName}\" has no blocks defined`);\n } else {\n const blockErrors = validateBlocks(field.blocks, `${context}.${fieldName}`);\n errors.push(...blockErrors);\n }\n break;\n \n case 'select':\n case 'radio':\n if (!field.options || field.options.length === 0) {\n errors.push(`${context}: ${field.type} field \"${fieldName}\" has no options defined`);\n } else {\n const values = field.options.map((o: any) => o.value);\n const uniqueValues = new Set(values);\n if (values.length !== uniqueValues.size) {\n errors.push(`${context}: ${field.type} field \"${fieldName}\" has duplicate option values`);\n }\n }\n break;\n \n case 'upload':\n if (!field.relationTo) {\n errors.push(`${context}: Upload field \"${fieldName}\" is missing \"relationTo\"`);\n }\n break;\n }\n \n // Min/Max validation\n if ('min' in field && 'max' in field && (field as any).min > (field as any).max) {\n errors.push(`${context}: Field \"${fieldName}\" has min greater than max`);\n }\n \n if ('minLength' in field && 'maxLength' in field && (field as any).minLength > (field as any).maxLength) {\n errors.push(`${context}: Field \"${fieldName}\" has minLength greater than maxLength`);\n }\n \n if ('minRows' in field && 'maxRows' in field && (field as any).minRows > (field as any).maxRows) {\n errors.push(`${context}: Field \"${fieldName}\" has minRows greater than maxRows`);\n }\n }\n \n return errors;\n}\n\n// ============================================================================\n// Block Validation\n// ============================================================================\n\nexport function validateBlocks(blocks: Block[], context: string): string[] {\n const errors: string[] = [];\n const slugs = new Set<string>();\n \n for (const block of blocks) {\n if (!block.slug) {\n errors.push(`${context}: Block is missing a \"slug\" property`);\n continue;\n }\n \n if (slugs.has(block.slug)) {\n errors.push(`${context}: Duplicate block slug \"${block.slug}\"`);\n }\n slugs.add(block.slug);\n \n if (!block.label) {\n errors.push(`${context}: Block \"${block.slug}\" is missing a \"label\" property`);\n }\n \n if (!block.fields || block.fields.length === 0) {\n errors.push(`${context}: Block \"${block.slug}\" has no fields defined`);\n } else {\n const blockErrors = validateFields(block.fields, `${context}.${block.slug}`);\n errors.push(...blockErrors);\n }\n }\n \n return errors;\n}\n\n// ============================================================================\n// Full Configuration Validation\n// ============================================================================\n\nexport function validateConfig(collections: CollectionConfig[], globals: GlobalConfig[] = []): void {\n const errors: string[] = [];\n const slugs = new Set<string>();\n \n // Check for duplicate collection slugs\n for (const collection of collections) {\n if (slugs.has(collection.slug)) {\n errors.push(`Duplicate collection slug \"${collection.slug}\"`);\n }\n slugs.add(collection.slug);\n }\n \n // Check for duplicate global slugs\n for (const global of globals) {\n if (slugs.has(global.slug)) {\n errors.push(`Duplicate global slug \"${global.slug}\"`);\n }\n slugs.add(global.slug);\n }\n \n // Validate all collections\n for (const collection of collections) {\n const collectionErrors = validateCollection(collection);\n errors.push(...collectionErrors);\n }\n \n // Validate all globals\n for (const global of globals) {\n const globalErrors = validateGlobal(global);\n errors.push(...globalErrors);\n }\n \n // Validate relationships reference existing collections\n for (const collection of collections) {\n const relationshipErrors = validateRelationships(collection.fields, collections);\n errors.push(...relationshipErrors);\n }\n \n if (errors.length > 0) {\n throw new ConfigValidationError(errors);\n }\n}\n\nfunction validateRelationships(fields: Field[], collections: CollectionConfig[]): string[] {\n const errors: string[] = [];\n const collectionSlugs = new Set(collections.map(c => c.slug));\n \n for (const field of fields) {\n if (field.type === 'relationship') {\n const targets = Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo];\n for (const target of targets) {\n if (!collectionSlugs.has(target)) {\n errors.push(`Relationship field \"${field.name}\" references unknown collection \"${target}\"`);\n }\n }\n }\n \n if (field.type === 'upload') {\n const targets = Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo];\n for (const target of targets) {\n if (!collectionSlugs.has(target)) {\n errors.push(`Upload field \"${field.name}\" references unknown collection \"${target}\"`);\n }\n }\n }\n \n if ('fields' in field && field.fields) {\n const nestedErrors = validateRelationships(field.fields, collections);\n errors.push(...nestedErrors);\n }\n \n if ('tabs' in field) {\n for (const tab of (field as any).tabs) {\n const tabErrors = validateRelationships(tab.fields, collections);\n errors.push(...tabErrors);\n }\n }\n \n if ('blocks' in field) {\n for (const block of (field as any).blocks) {\n const blockErrors = validateRelationships(block.fields, collections);\n errors.push(...blockErrors);\n }\n }\n }\n \n return errors;\n}\n","import { z, type ZodTypeAny } from \"zod\";\nimport type {\n Field,\n TextField,\n NumberField,\n CheckboxField,\n DateField,\n EmailField,\n PasswordField,\n TextareaField,\n SelectField,\n RadioField,\n ColorField,\n RichTextField,\n JSONField,\n CodeField,\n UploadField,\n MarkdownField,\n RelationshipField,\n ArrayField,\n GroupField,\n BlocksField,\n RowField,\n CollapsibleField,\n TabsField,\n ValidateOptions,\n} from \"../fields/types.js\";\nimport type { CollectionConfig, GlobalConfig } from \"./types.js\";\n\n// ============================================================================\n// Field → Zod Schema Generator\n// ============================================================================\n\nexport function fieldToZod(field: Field): ZodTypeAny {\n switch (field.type) {\n case \"text\":\n return textToZod(field);\n case \"number\":\n return numberToZod(field);\n case \"checkbox\":\n return checkboxToZod(field);\n case \"date\":\n return dateToZod(field);\n case \"email\":\n return emailToZod(field);\n case \"password\":\n return passwordToZod(field);\n case \"textarea\":\n return textareaToZod(field);\n case \"select\":\n return selectToZod(field);\n case \"radio\":\n return radioToZod(field);\n case \"color\":\n return colorToZod(field);\n case \"richtext\":\n return richTextToZod(field);\n case \"json\":\n return jsonToZod(field);\n case \"code\":\n return codeToZod(field);\n case \"upload\":\n return uploadToZod(field);\n case \"image\":\n return uploadToZod(field as any);\n case \"markdown\":\n return markdownToZod(field);\n case \"relationship\":\n return relationshipToZod(field);\n case \"relationship-block\" as any:\n return relationshipToZod(field as any);\n case \"array\":\n return arrayToZod(field);\n case \"list\":\n return listToZod(field);\n case \"group\":\n return groupToZod(field);\n case \"blocks\":\n return blocksToZod(field);\n case \"row\":\n return rowToZod(field);\n case \"collapsible\":\n return collapsibleToZod(field);\n case \"tabs\":\n return tabsToZod(field);\n default:\n return z.any();\n }\n}\n\n// ============================================================================\n// Primitive Field Schemas\n// ============================================================================\n\nfunction textToZod(field: TextField): ZodTypeAny {\n let schema: ZodTypeAny = z.string();\n if (field.minLength) schema = (schema as any).min(field.minLength);\n if (field.maxLength) schema = (schema as any).max(field.maxLength);\n if (field.pattern) schema = (schema as any).regex(new RegExp(field.pattern));\n if (field.variant === \"email\") schema = (schema as any).email();\n if (field.variant === \"url\") schema = (schema as any).url();\n if (field.hasMany) schema = z.array(schema);\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction numberToZod(field: NumberField): ZodTypeAny {\n let schema: ZodTypeAny = field.integer ? z.number().int() : z.number();\n if (field.min !== undefined) schema = (schema as any).min(field.min);\n if (field.max !== undefined) schema = (schema as any).max(field.max);\n if (field.step) {\n schema = (schema as any).refine(\n (val: number) => Number.isInteger(val / field.step!),\n `Value must be divisible by ${field.step}`,\n );\n }\n if (field.hasMany) schema = z.array(schema);\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction checkboxToZod(field: CheckboxField): ZodTypeAny {\n let schema: ZodTypeAny = z.boolean();\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction dateToZod(field: DateField): ZodTypeAny {\n let schema: ZodTypeAny = z\n .string()\n .refine((val) => !isNaN(Date.parse(val)), \"Invalid date format\");\n if (field.minDate) {\n schema = (schema as any).refine(\n (val: string) => new Date(val) >= new Date(field.minDate!),\n `Date must be after ${field.minDate}`,\n );\n }\n if (field.maxDate) {\n schema = (schema as any).refine(\n (val: string) => new Date(val) <= new Date(field.maxDate!),\n `Date must be before ${field.maxDate}`,\n );\n }\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction emailToZod(field: EmailField): ZodTypeAny {\n let schema: ZodTypeAny = z.string().email(\"Invalid email\");\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction passwordToZod(field: PasswordField): ZodTypeAny {\n let schema: ZodTypeAny = z\n .string()\n .min(6, \"Password must be at least 6 characters\");\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction textareaToZod(field: TextareaField): ZodTypeAny {\n let schema: ZodTypeAny = z.string();\n if (field.minLength) schema = (schema as any).min(field.minLength);\n if (field.maxLength) schema = (schema as any).max(field.maxLength);\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction selectToZod(field: SelectField): ZodTypeAny {\n const values = field.options.map((opt) => opt.value);\n let schema: ZodTypeAny;\n if (field.hasMany) {\n schema = z.array(z.enum(values as [string, ...string[]]));\n } else {\n schema = z.enum(values as [string, ...string[]]);\n }\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction radioToZod(field: RadioField): ZodTypeAny {\n const values = field.options.map((opt) => opt.value);\n let schema: ZodTypeAny = z.enum(values as [string, ...string[]]);\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction colorToZod(field: ColorField): ZodTypeAny {\n let schema: ZodTypeAny = z.string();\n if (field.format === \"hex\")\n schema = (schema as any).regex(/^#[0-9A-Fa-f]{6}$/);\n if (field.format === \"rgb\")\n schema = (schema as any).regex(\n /^rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)$/,\n );\n if (field.format === \"hsl\")\n schema = (schema as any).regex(\n /^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/,\n );\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\n// ============================================================================\n// Complex Field Schemas\n// ============================================================================\n\nfunction richTextToZod(field: RichTextField): ZodTypeAny {\n let schema: ZodTypeAny = z.union([\n z.array(z.record(z.any())),\n z.string(),\n ]);\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction jsonToZod(field: JSONField): ZodTypeAny {\n let schema: ZodTypeAny = z.union([z.record(z.any()), z.array(z.any())]);\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction codeToZod(field: CodeField): ZodTypeAny {\n let schema: ZodTypeAny = z.string();\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction uploadToZod(field: UploadField): ZodTypeAny {\n let schema: ZodTypeAny;\n\n if (field.relationTo) {\n const mediaSchema = z.object({\n id: z.string(),\n url: z.string().optional(),\n filename: z.string().optional(),\n mimeType: z.string().optional(),\n });\n schema = z.union([z.string(), mediaSchema]);\n } else {\n schema = z.string();\n }\n\n if (field.hasMany) {\n schema = z.array(schema);\n }\n\n if (!field.required) {\n schema = (schema as any).optional().nullable();\n }\n\n if (field.validate) {\n schema = addCustomValidation(schema, field.validate);\n }\n\n return schema;\n}\n\nfunction markdownToZod(field: MarkdownField): ZodTypeAny {\n let schema: ZodTypeAny = z.string();\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\n// ============================================================================\n// Relational Field Schemas\n// ============================================================================\n\nfunction relationshipToZod(field: RelationshipField): ZodTypeAny {\n let schema: ZodTypeAny;\n if (Array.isArray(field.relationTo)) {\n schema = z.object({\n relationTo: z.enum(field.relationTo as [string, ...string[]]),\n value: z.string(),\n });\n } else {\n schema = z.union([\n z.string(),\n z.object({ relationTo: z.string(), value: z.string() }),\n ]);\n }\n if (field.hasMany) schema = z.array(schema);\n if (!field.required) schema = schema.optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction arrayToZod(field: ArrayField): ZodTypeAny {\n const itemSchema = z.object(\n Object.fromEntries(\n field.fields.filter((f) => f.name).map((f) => [f.name!, fieldToZod(f)]),\n ),\n );\n let schema: ZodTypeAny = z.array(itemSchema);\n if (field.minRows) schema = (schema as any).min(field.minRows);\n if (field.maxRows) schema = (schema as any).max(field.maxRows);\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction listToZod(field: any): ZodTypeAny {\n let schema: ZodTypeAny = z.array(z.string());\n if (!field.required) schema = (schema as any).optional().nullable();\n return schema;\n}\n\nfunction groupToZod(field: GroupField): ZodTypeAny {\n const schema = z.object(\n Object.fromEntries(\n field.fields.filter((f) => f.name).map((f) => [f.name!, fieldToZod(f)]),\n ),\n );\n if (!field.required) return (schema as any).optional().nullable();\n return schema;\n}\n\nfunction blocksToZod(field: BlocksField): ZodTypeAny {\n const blocks = field.blocks || [];\n const blockSchemas = blocks.map((block) => {\n return z.object({\n blockType: z.literal(block.slug),\n ...Object.fromEntries(\n block.fields.filter((f) => f.name).map((f) => [f.name!, fieldToZod(f)]),\n ),\n });\n });\n\n const knownTypes = blocks.map((b) => b.slug);\n let schema: ZodTypeAny;\n\n if (knownTypes.length > 0) {\n const knownSchema = z\n .object({\n blockType: z.enum(knownTypes as [string, ...string[]]),\n })\n .catchall(z.any());\n const unknownSchema = z\n .object({\n blockType: z.string(),\n })\n .catchall(z.any());\n schema = z.array(z.union([knownSchema, unknownSchema]));\n } else {\n schema = z.array(z.object({ blockType: z.string() }).catchall(z.any()));\n }\n\n if (field.minRows) schema = (schema as any).min(field.minRows);\n if (field.maxRows) schema = (schema as any).max(field.maxRows);\n if (!field.required) schema = (schema as any).optional().nullable();\n if (field.validate) schema = addCustomValidation(schema, field.validate);\n return schema;\n}\n\nfunction rowToZod(field: RowField): ZodTypeAny {\n const schema = z.object(\n Object.fromEntries(\n field.fields.filter((f) => f.name).map((f) => [f.name!, fieldToZod(f)]),\n ),\n );\n return schema;\n}\n\nfunction collapsibleToZod(field: CollapsibleField): ZodTypeAny {\n const schema = z.object(\n Object.fromEntries(\n field.fields.filter((f) => f.name).map((f) => [f.name!, fieldToZod(f)]),\n ),\n );\n return schema;\n}\n\nfunction tabsToZod(field: TabsField): ZodTypeAny {\n const schemas: Record<string, ZodTypeAny> = {};\n for (const tab of field.tabs) {\n for (const f of tab.fields) {\n if (f.name) {\n schemas[f.name] = fieldToZod(f);\n }\n }\n }\n return z.object(schemas);\n}\n\n// ============================================================================\n// Custom Validation Helper\n// ============================================================================\n\nfunction addCustomValidation(\n schema: ZodTypeAny,\n validate: (\n value: any,\n options: ValidateOptions,\n ) => string | true | Promise<string | true>,\n): ZodTypeAny {\n return schema.refine(\n async (val: any) => {\n const result = await validate(val, { required: false });\n return result === true;\n },\n {\n message: \"Custom validation failed\",\n },\n );\n}\n\n// ============================================================================\n// Collection Schema Generator\n// ============================================================================\n\nfunction flattenFields(fields: Field[]): Field[] {\n const result: Field[] = [];\n for (const field of fields) {\n if (field.type === \"tabs\" && \"tabs\" in field) {\n for (const tab of field.tabs) {\n result.push(...flattenFields(tab.fields));\n }\n } else if (field.type === \"row\" && \"fields\" in field) {\n result.push(...flattenFields(field.fields));\n } else if (field.type === \"collapsible\" && \"fields\" in field) {\n result.push(...flattenFields(field.fields));\n } else {\n result.push(field);\n }\n }\n return result;\n}\n\nfunction buildNestedShape(fields: Field[]): Record<string, ZodTypeAny> {\n const shape: Record<string, ZodTypeAny> = {};\n \n for (const field of fields) {\n if (!field.name) continue;\n \n if (field.type === \"tabs\" && \"tabs\" in field) {\n const tabShape: Record<string, ZodTypeAny> = {};\n for (const tab of field.tabs) {\n const nestedShape = buildNestedShape(tab.fields);\n Object.assign(tabShape, nestedShape);\n }\n shape[field.name] = z.object(tabShape);\n } else if (field.type === \"row\" && \"fields\" in field) {\n const rowShape = buildNestedShape(field.fields);\n Object.assign(shape, rowShape);\n } else if (field.type === \"collapsible\" && \"fields\" in field) {\n shape[field.name] = z.object(buildNestedShape(field.fields));\n } else {\n shape[field.name] = fieldToZod(field);\n }\n }\n \n return shape;\n}\n\nexport function collectionToZod(collection: CollectionConfig): ZodTypeAny {\n const shape = buildNestedShape(collection.fields);\n\n if (collection.timestamps) {\n shape[\"createdAt\"] = z.string().optional();\n shape[\"updatedAt\"] = z.string().optional();\n }\n\n if (collection.tenantScoped) {\n shape[\"tenantID\"] = z.string().optional();\n }\n\n shape[\"id\"] = z.string().optional();\n\n return z.object(shape).passthrough();\n}\n\nexport function collectionToCreateZod(\n collection: CollectionConfig,\n): ZodTypeAny {\n const shape = buildNestedShape(collection.fields);\n return z.object(shape).passthrough();\n}\n\nexport function collectionToUpdateZod(\n collection: CollectionConfig,\n): ZodTypeAny {\n const shape: Record<string, ZodTypeAny> = {};\n \n for (const field of collection.fields) {\n if (!field.name) continue;\n \n if (field.type === \"tabs\" && \"tabs\" in field) {\n const tabShape: Record<string, ZodTypeAny> = {};\n for (const tab of field.tabs) {\n for (const tabField of tab.fields) {\n if (tabField.name) {\n tabShape[tabField.name] = fieldToZod(tabField).optional().nullable();\n }\n }\n }\n shape[field.name] = z.object(tabShape).optional().nullable();\n } else if (field.type === \"row\" && \"fields\" in field) {\n const rowShape: Record<string, ZodTypeAny> = {};\n for (const rowField of field.fields) {\n if (rowField.name) {\n rowShape[rowField.name] = fieldToZod(rowField).optional().nullable();\n }\n }\n Object.assign(shape, rowShape);\n } else if (field.type === \"collapsible\" && \"fields\" in field) {\n shape[field.name] = z.object(buildNestedShape(field.fields)).optional().nullable();\n } else {\n shape[field.name] = fieldToZod(field).optional().nullable();\n }\n }\n\n return z.object(shape).passthrough();\n}\n\nexport function collectionToWhereZod(collection: CollectionConfig): ZodTypeAny {\n const shape: Record<string, ZodTypeAny> = {};\n\n for (const field of collection.fields) {\n if (field.name) {\n shape[field.name] = z\n .object({\n equals: z.any().optional(),\n not_equals: z.any().optional(),\n in: z.array(z.any()).optional(),\n not_in: z.array(z.any()).optional(),\n greater_than: z.number().optional(),\n greater_than_equal: z.number().optional(),\n less_than: z.number().optional(),\n less_than_equal: z.number().optional(),\n like: z.string().optional(),\n not_like: z.string().optional(),\n contains: z.string().optional(),\n exists: z.boolean().optional(),\n })\n .optional();\n }\n }\n\n shape[\"AND\"] = z.array(z.lazy(() => z.object(shape))).optional();\n shape[\"OR\"] = z.array(z.lazy(() => z.object(shape))).optional();\n\n return z.object(shape).optional();\n}\n\n// ============================================================================\n// Global Schema Generator\n// ============================================================================\n\nexport function globalToZod(global: GlobalConfig): ZodTypeAny {\n const shape = buildNestedShape(global.fields);\n\n shape[\"id\"] = z.string().optional();\n\n return z.object(shape).passthrough();\n}\n","import type {\n CollectionConfig,\n GlobalConfig,\n BaseAdapter,\n PluginConfig,\n} from \"./types.js\";\nimport type { Field } from \"../fields/types.js\";\nimport {\n validateConfig,\n validateCollection,\n validateGlobal,\n} from \"./validator.js\";\nimport {\n collectionToZod,\n collectionToCreateZod,\n collectionToUpdateZod,\n collectionToWhereZod,\n globalToZod,\n fieldToZod,\n} from \"./zod-builder.js\";\nimport type { ZodTypeAny } from \"zod\";\n\n// ============================================================================\n// Registry Class\n// ============================================================================\n\nexport class Registry {\n private collections: Map<string, CollectionConfig> = new Map();\n private globals: Map<string, GlobalConfig> = new Map();\n private plugins: PluginConfig[] = [];\n private schemaCache: Map<string, ZodTypeAny> = new Map();\n private initialized = false;\n\n // ========================================================================\n // Collection Management\n // ========================================================================\n\n addCollection(config: CollectionConfig): void {\n if (this.initialized) {\n throw new Error(\n \"Cannot add collections after Registry has been initialized\",\n );\n }\n\n if (this.collections.has(config.slug)) {\n console.warn(\n `[Registry] Duplicate collection slug \"${config.slug}\" — skipping`,\n );\n return;\n }\n\n // Apply plugin extensions\n let finalConfig = { ...config };\n for (const plugin of this.plugins) {\n if (plugin.extendCollection) {\n finalConfig = plugin.extendCollection(finalConfig.slug, finalConfig);\n }\n }\n\n // Add default fields (id, createdAt, etc.) before validation\n finalConfig.fields = this.applyFieldDefaults(finalConfig);\n\n const errors = validateCollection(finalConfig);\n if (errors.length > 0) {\n throw new Error(`Invalid collection config: ${errors.join(\", \")}`);\n }\n\n this.collections.set(finalConfig.slug, finalConfig);\n this.clearSchemaCache(finalConfig.slug);\n }\n\n addCollections(configs: CollectionConfig[]): void {\n for (const config of configs) {\n this.addCollection(config);\n }\n }\n\n getCollection(slug: string): CollectionConfig | undefined {\n return this.collections.get(slug);\n }\n\n getCollections(): CollectionConfig[] {\n return Array.from(this.collections.values());\n }\n\n getCollectionSlugs(): string[] {\n return Array.from(this.collections.keys());\n }\n\n hasCollection(slug: string): boolean {\n return this.collections.has(slug);\n }\n\n removeCollection(slug: string): boolean {\n if (this.initialized) {\n throw new Error(\n \"Cannot remove collections after Registry has been initialized\",\n );\n }\n this.clearSchemaCache(slug);\n return this.collections.delete(slug);\n }\n\n // ========================================================================\n // Global Management\n // ========================================================================\n\n addGlobal(config: GlobalConfig): void {\n if (this.initialized) {\n throw new Error(\"Cannot add globals after Registry has been initialized\");\n }\n\n if (this.globals.has(config.slug)) {\n console.warn(\n `[Registry] Duplicate global slug \"${config.slug}\" — skipping`,\n );\n return;\n }\n\n const errors = validateGlobal(config);\n if (errors.length > 0) {\n throw new Error(`Invalid global config: ${errors.join(\", \")}`);\n }\n\n let finalConfig = { ...config };\n for (const plugin of this.plugins) {\n if (plugin.extendGlobal) {\n finalConfig = plugin.extendGlobal(finalConfig.slug, finalConfig);\n }\n }\n\n this.globals.set(finalConfig.slug, finalConfig);\n this.clearSchemaCache(`global:${finalConfig.slug}`);\n }\n\n addGlobals(configs: GlobalConfig[]): void {\n for (const config of configs) {\n this.addGlobal(config);\n }\n }\n\n getGlobal(slug: string): GlobalConfig | undefined {\n return this.globals.get(slug);\n }\n\n getGlobals(): GlobalConfig[] {\n return Array.from(this.globals.values());\n }\n\n getGlobalSlugs(): string[] {\n return Array.from(this.globals.keys());\n }\n\n hasGlobal(slug: string): boolean {\n return this.globals.has(slug);\n }\n\n removeGlobal(slug: string): boolean {\n if (this.initialized) {\n throw new Error(\n \"Cannot remove globals after Registry has been initialized\",\n );\n }\n this.clearSchemaCache(`global:${slug}`);\n return this.globals.delete(slug);\n }\n\n // ========================================================================\n // Plugin Management\n // ========================================================================\n\n addPlugin(plugin: PluginConfig): void {\n if (this.initialized) {\n throw new Error(\"Cannot add plugins after Registry has been initialized\");\n }\n this.plugins.push(plugin);\n }\n\n getPlugins(): PluginConfig[] {\n return [...this.plugins];\n }\n\n // ========================================================================\n // Schema Generation\n // ========================================================================\n\n getZodSchema(slug: string): ZodTypeAny {\n const cached = this.schemaCache.get(slug);\n if (cached) return cached;\n\n const collection = this.collections.get(slug);\n if (collection) {\n const schema = collectionToZod(collection);\n this.schemaCache.set(slug, schema);\n return schema;\n }\n\n const global = this.globals.get(slug);\n if (global) {\n const schema = globalToZod(global);\n this.schemaCache.set(`global:${slug}`, schema);\n return schema;\n }\n\n throw new Error(`No collection or global found with slug \"${slug}\"`);\n }\n\n getCreateZodSchema(slug: string): ZodTypeAny {\n const cacheKey = `${slug}:create`;\n const cached = this.schemaCache.get(cacheKey);\n if (cached) return cached;\n\n const collection = this.collections.get(slug);\n if (collection) {\n const schema = collectionToCreateZod(collection);\n this.schemaCache.set(cacheKey, schema);\n return schema;\n }\n\n throw new Error(`No collection found with slug \"${slug}\"`);\n }\n\n getUpdateZodSchema(slug: string): ZodTypeAny {\n const cacheKey = `${slug}:update`;\n const cached = this.schemaCache.get(cacheKey);\n if (cached) return cached;\n\n const collection = this.collections.get(slug);\n if (collection) {\n const schema = collectionToUpdateZod(collection);\n this.schemaCache.set(cacheKey, schema);\n return schema;\n }\n\n throw new Error(`No collection found with slug \"${slug}\"`);\n }\n\n getWhereZodSchema(slug: string): ZodTypeAny {\n const cacheKey = `${slug}:where`;\n const cached = this.schemaCache.get(cacheKey);\n if (cached) return cached;\n\n const collection = this.collections.get(slug);\n if (collection) {\n const schema = collectionToWhereZod(collection);\n this.schemaCache.set(cacheKey, schema);\n return schema;\n }\n\n throw new Error(`No collection found with slug \"${slug}\"`);\n }\n\n getFieldZodSchema(field: Field): ZodTypeAny {\n return fieldToZod(field);\n }\n\n private clearSchemaCache(slug: string): void {\n this.schemaCache.delete(slug);\n this.schemaCache.delete(`${slug}:create`);\n this.schemaCache.delete(`${slug}:update`);\n this.schemaCache.delete(`${slug}:where`);\n }\n\n // ========================================================================\n // Field Helpers\n // ========================================================================\n\n private applyFieldDefaults(config: CollectionConfig): Field[] {\n const fields = [...config.fields];\n\n // Add id field if not present\n if (!fields.some((f) => f.name === \"id\")) {\n fields.unshift({\n name: \"id\",\n type: \"text\",\n admin: { readOnly: true, hidden: true },\n });\n }\n\n // Add tenantID field if tenantScoped\n if (config.tenantScoped && !fields.some((f) => f.name === \"tenantID\")) {\n fields.push({\n name: \"tenantID\",\n type: \"text\",\n required: true,\n admin: { readOnly: true, hidden: true },\n });\n }\n\n // Add timestamp fields if enabled\n if (config.timestamps && !fields.some((f) => f.name === \"createdAt\")) {\n fields.push({\n name: \"createdAt\",\n type: \"date\",\n admin: { readOnly: true, hidden: true },\n });\n fields.push({\n name: \"updatedAt\",\n type: \"date\",\n admin: { readOnly: true, hidden: true },\n });\n }\n\n // Add password field if auth is enabled\n if (config.auth && !fields.some((f) => f.name === \"password\")) {\n fields.push({\n name: \"password\",\n type: \"password\",\n required: true,\n admin: { hidden: true },\n });\n }\n\n return fields;\n }\n\n getFields(slug: string): Field[] {\n const collection = this.collections.get(slug);\n if (collection) return collection.fields;\n\n const global = this.globals.get(slug);\n if (global) return global.fields;\n\n throw new Error(`No collection or global found with slug \"${slug}\"`);\n }\n\n getFieldMap(slug: string): Map<string, Field> {\n const fields = this.getFields(slug);\n const map = new Map<string, Field>();\n\n const addFields = (fields: Field[]) => {\n for (const field of fields) {\n if (field.name) {\n map.set(field.name, field);\n }\n if (\"fields\" in field && field.fields) {\n addFields(field.fields);\n }\n if (\"tabs\" in field) {\n for (const tab of (field as any).tabs) {\n addFields(tab.fields);\n }\n }\n if (\"blocks\" in field) {\n for (const block of (field as any).blocks) {\n addFields(block.fields);\n }\n }\n }\n };\n\n addFields(fields);\n return map;\n }\n\n getVisibleFields(slug: string): Field[] {\n const fields = this.getFields(slug);\n return fields.filter((f) => !f.admin?.hidden);\n }\n\n // ========================================================================\n // Initialization\n // ========================================================================\n\n validate(): void {\n const collections = this.getCollections();\n const globals = this.getGlobals();\n validateConfig(collections, globals);\n }\n\n async init(): Promise<void> {\n this.validate();\n\n // Initialize plugins\n for (const plugin of this.plugins) {\n if (plugin.init) {\n await plugin.init(this);\n }\n }\n\n this.initialized = true;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n // ========================================================================\n // Query Helpers\n // ========================================================================\n\n getPaginationDefaults(slug: string): {\n defaultLimit: number;\n limits: number[];\n } {\n const collection = this.collections.get(slug);\n return {\n defaultLimit: collection?.admin?.pagination?.defaultLimit || 10,\n limits: collection?.admin?.pagination?.limits || [10, 25, 50, 100],\n };\n }\n\n getDefaultSort(slug: string): string {\n const collection = this.collections.get(slug);\n const useAsTitle = collection?.admin?.useAsTitle;\n if (useAsTitle) return useAsTitle;\n return \"createdAt\";\n }\n\n getDefaultColumns(slug: string): string[] {\n const collection = this.collections.get(slug);\n if (collection?.admin?.defaultColumns) {\n return collection.admin.defaultColumns;\n }\n const fields = this.getVisibleFields(slug);\n return fields.slice(0, 4).map((f) => f.name!);\n }\n\n // ========================================================================\n // Admin Helpers\n // ========================================================================\n\n getAdminTitle(slug: string): string {\n const collection = this.collections.get(slug);\n return collection?.label || collection?.admin?.description || slug;\n }\n\n getAdminLabel(slug: string): string {\n const collection = this.collections.get(slug);\n return collection?.singularLabel || collection?.label || slug;\n }\n\n getAdminGroup(slug: string): string | undefined {\n return this.collections.get(slug)?.admin?.group;\n }\n\n // ========================================================================\n // Debug / Stats\n // ========================================================================\n\n getStats(): {\n collections: number;\n globals: number;\n plugins: number;\n fields: number;\n } {\n let totalFields = 0;\n for (const collection of this.collections.values()) {\n totalFields += collection.fields.length;\n }\n for (const global of this.globals.values()) {\n totalFields += global.fields.length;\n }\n\n return {\n collections: this.collections.size,\n globals: this.globals.size,\n plugins: this.plugins.length,\n fields: totalFields,\n };\n }\n\n toJSON(): {\n collections: CollectionConfig[];\n globals: GlobalConfig[];\n } {\n return {\n collections: this.getCollections(),\n globals: this.getGlobals(),\n };\n }\n}\n\n// ============================================================================\n// Singleton Instance\n// ============================================================================\n\nlet instance: Registry | null = null;\n\nexport function getRegistry(): Registry {\n if (!instance) {\n instance = new Registry();\n }\n return instance;\n}\n\nexport function resetRegistry(): void {\n instance = null;\n}\n\nexport function createRegistry(): Registry {\n instance = new Registry();\n return instance;\n}\n","import { Registry, createRegistry } from \"./registry/index.js\";\nimport type {\n KyroConfig,\n CollectionConfig,\n GlobalConfig,\n BaseAdapter,\n PluginConfig,\n} from \"./registry/types.js\";\nimport {\n KyroPubSub,\n createWSServer,\n type KyroWSServer,\n} from \"./api/ws/index.js\";\nimport { createHonoApp } from \"./api/rest/index.js\";\nimport { buildGraphQLSchema } from \"./api/graphql/index.js\";\nimport { createKyroServer } from \"./api/trpc/index.js\";\nimport type { User, Request } from \"./hooks/types.js\";\nimport { API_KEY_COLLECTION } from \"./auth/api-key.js\";\nimport {\n createWebhookService,\n type WebhookService,\n WEBHOOK_COLLECTION,\n WEBHOOK_DELIVERY_COLLECTION,\n} from \"./webhooks/index.js\";\n\n// ============================================================================\n// Kyro Instance\n// ============================================================================\n\nexport class Kyro {\n public registry: Registry;\n public db: BaseAdapter;\n public pubsub: KyroPubSub;\n public webhookService: WebhookService;\n public settings?: Record<string, any>;\n private wsServer?: KyroWSServer;\n private config: KyroConfig;\n\n constructor(config: KyroConfig) {\n this.config = config;\n this.registry = createRegistry();\n this.db = config.adapter;\n this.pubsub = new KyroPubSub(this.registry);\n this.webhookService = createWebhookService(this.db);\n\n // Register collections\n if (config.collections) {\n this.registry.addCollections(config.collections);\n }\n\n // Register globals\n if (config.globals) {\n this.registry.addGlobals(config.globals);\n }\n\n // Register plugins\n if (config.plugins) {\n for (const plugin of config.plugins) {\n this.registry.addPlugin(plugin);\n }\n }\n }\n\n async init(): Promise<void> {\n // Initialize registry\n await this.registry.init();\n\n // Initialize database adapter\n if (!this.db) {\n throw new Error(\n `Database adapter is null — failed to load at startup. ` +\n `Check the server console for the exact error.`\n );\n }\n\n const systemCollection: CollectionConfig = {\n slug: API_KEY_COLLECTION,\n fields: [\n { name: \"userId\", type: \"text\", required: true },\n { name: \"name\", type: \"text\", required: true },\n { name: \"key\", type: \"text\", required: true },\n { name: \"keyPrefix\", type: \"text\", required: true },\n { name: \"permissions\", type: \"json\" },\n { name: \"lastUsedAt\", type: \"date\" },\n { name: \"expiresAt\", type: \"date\" },\n ],\n };\n\n const webhookCollection: CollectionConfig = {\n slug: WEBHOOK_COLLECTION,\n fields: [\n { name: \"name\", type: \"text\", required: true },\n { name: \"url\", type: \"text\", required: true },\n { name: \"events\", type: \"json\", required: true },\n { name: \"status\", type: \"text\", required: true },\n { name: \"secret\", type: \"text\" },\n { name: \"headers\", type: \"json\" },\n { name: \"lastTriggered\", type: \"date\" },\n { name: \"lastError\", type: \"text\" },\n ],\n };\n\n const webhookDeliveryCollection: CollectionConfig = {\n slug: WEBHOOK_DELIVERY_COLLECTION,\n fields: [\n { name: \"webhookId\", type: \"text\", required: true },\n { name: \"event\", type: \"text\", required: true },\n { name: \"payload\", type: \"json\", required: true },\n { name: \"attempt\", type: \"number\", required: true },\n { name: \"status\", type: \"text\", required: true },\n { name: \"responseStatus\", type: \"number\" },\n { name: \"responseBody\", type: \"text\" },\n { name: \"error\", type: \"text\" },\n { name: \"duration\", type: \"number\" },\n { name: \"deliveredAt\", type: \"date\" },\n { name: \"nextRetryAt\", type: \"date\" },\n ],\n };\n\n await this.db.init(\n [\n ...this.registry.getCollections(),\n systemCollection,\n webhookCollection,\n webhookDeliveryCollection,\n ],\n this.registry.getGlobals(),\n );\n\n // Auto-register PubSub hooks\n this.pubsub.autoRegisterHooks();\n\n console.log(\"✅ Kyro CMS initialized\");\n console.log(` Collections: ${this.registry.getCollections().length}`);\n console.log(` Globals: ${this.registry.getGlobals().length}`);\n }\n\n // ============================================================================\n // API Methods\n // ============================================================================\n\n // Load settings from globals if not already loaded\n async loadSettings() {\n if (this.settings) return this.settings;\n\n try {\n // Try to find access-settings in the database\n const accessSettings = await this.db.findOne({\n collection: \"_globals\",\n where: { slug: \"access-settings\" },\n });\n\n if (accessSettings) {\n this.settings = accessSettings.data;\n }\n } catch (e) {\n // Settings not found - use defaults\n console.log(\"⚠️ No access-settings found, using defaults\");\n }\n\n return this.settings || {};\n }\n\n getREST(options?: { user?: User; req?: Request; tenantID?: string }) {\n const authObj =\n typeof this.config.auth === \"object\" ? this.config.auth : null;\n const authSecret = authObj?.secret;\n const checkSession = authObj?.checkSession !== false;\n\n return createHonoApp({\n registry: this.registry,\n db: this.db,\n authSecret,\n authAdapter: this.config.authAdapter,\n checkSession,\n ...options,\n cors: this.config.cors,\n webhookService: this.webhookService,\n settings: this.settings,\n });\n }\n\n getGraphQL(options?: { user?: User; req?: Request; tenantID?: string }) {\n return buildGraphQLSchema({\n registry: this.registry,\n db: this.db,\n ...options,\n settings: this.settings,\n });\n }\n\n getTRPC(options?: { user?: User; req?: Request; tenantID?: string }) {\n return createKyroServer({\n registry: this.registry,\n db: this.db,\n req: options?.req || { headers: {} },\n ...options,\n settings: this.settings,\n });\n }\n\n async startWebSocket(options?: {\n port?: number;\n requireAuth?: boolean;\n verifyToken?: (token: string) => Promise<any>;\n }) {\n // Check if WebSocket is enabled in settings\n const apiAccess = this.settings?.access?.apiAccess;\n if (apiAccess?.websocketEnabled === false) {\n console.log(\"⚠️ WebSocket is disabled in settings\");\n return null;\n }\n\n this.wsServer = createWSServer({\n pubsub: this.pubsub,\n port: options?.port || 8080,\n requireAuth: options?.requireAuth ?? apiAccess?.requireAuth,\n verifyToken: options?.verifyToken,\n });\n console.log(`🔌 WebSocket server started on port ${options?.port || 8080}`);\n return this.wsServer;\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n async shutdown(): Promise<void> {\n if (this.wsServer) {\n await this.wsServer.close();\n }\n await this.db.disconnect();\n console.log(\"👋 Kyro CMS shut down\");\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\nexport function createKyro(config: KyroConfig): Kyro {\n return new Kyro(config);\n}\n\n// ============================================================================\n// Convenience Exports\n// ============================================================================\n\nexport {\n Registry,\n createRegistry,\n getRegistry,\n resetRegistry,\n} from \"./registry/index.js\";\nexport type {\n KyroConfig,\n CollectionConfig,\n GlobalConfig,\n BaseAdapter,\n PluginConfig,\n FindArgs,\n FindByIDArgs,\n CreateArgs,\n UpdateArgs,\n DeleteArgs,\n FindResult,\n CreateResult,\n} from \"./registry/types.js\";\nexport type { Field, FieldType } from \"./fields/index.js\";\nexport type { AccessControl, AccessArgs, WhereClause } from \"./access/index.js\";\nexport type { Hook, HookArgs, User, Request } from \"./hooks/index.js\";\nexport {\n DrizzleAdapter,\n createDrizzleAdapter,\n} from \"./database/drizzle/index.js\";\nexport {\n MongoDBAdapter,\n createMongoDBAdapter,\n} from \"./database/mongodb/index.js\";\nexport { KyroPubSub, KyroWSServer, createWSServer } from \"./api/ws/index.js\";\nexport { createHonoApp } from \"./api/rest/index.js\";\nexport {\n buildGraphQLSchema,\n createGraphQLSchema,\n} from \"./api/graphql/index.js\";\nexport { createKyroServer } from \"./api/trpc/index.js\";\nexport { z } from \"zod\";\n"]}