@kyro-cms/core 0.9.1 → 0.9.2
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.
- package/README.md +0 -6
- package/dist/{WebhookService-Yg2UEOB4.d.cts → WebhookService-BKszZlG0.d.cts} +1 -1
- package/dist/{WebhookService-CUTb9XOy.d.ts → WebhookService-Ccf1j-IN.d.ts} +1 -1
- package/dist/api-handler-graphql.cjs +17 -17
- package/dist/api-handler-graphql.js +13 -13
- package/dist/api-handler-trpc.cjs +15 -15
- package/dist/api-handler-trpc.js +13 -13
- package/dist/api-handler.cjs +16 -16
- package/dist/api-handler.js +13 -13
- package/dist/{base-DaqY2GhA.d.ts → base-CIuXkrH4.d.cts} +3 -5
- package/dist/{base-B71y_EAF.d.cts → base-fFo4lqER.d.ts} +3 -5
- package/dist/bootstrap-3PV3GJ3S.js +7 -0
- package/dist/{bootstrap-T5BK77LD.js.map → bootstrap-3PV3GJ3S.js.map} +1 -1
- package/dist/bootstrap-4CELFLJO.cjs +32 -0
- package/dist/{bootstrap-5NLASFOG.cjs.map → bootstrap-4CELFLJO.cjs.map} +1 -1
- package/dist/{chunk-Z6ZWNWWR.js → chunk-4CV4JOE5.js} +3 -9
- package/dist/{chunk-Z6ZWNWWR.js.map → chunk-4CV4JOE5.js.map} +1 -1
- package/dist/{chunk-5EPFQUQD.js → chunk-53NYVYVX.js} +6 -6
- package/dist/chunk-53NYVYVX.js.map +1 -0
- package/dist/{chunk-22M4O4ZJ.js → chunk-5H3MWQJS.js} +129 -143
- package/dist/chunk-5H3MWQJS.js.map +1 -0
- package/dist/{chunk-RAMGUDJN.cjs → chunk-5PMQQFRE.cjs} +5 -5
- package/dist/{chunk-RAMGUDJN.cjs.map → chunk-5PMQQFRE.cjs.map} +1 -1
- package/dist/{chunk-TXSZFA4G.js → chunk-6UNONDW7.js} +93 -9
- package/dist/chunk-6UNONDW7.js.map +1 -0
- package/dist/{chunk-C36TMDTY.cjs → chunk-7OS7TX2Q.cjs} +49 -48
- package/dist/chunk-7OS7TX2Q.cjs.map +1 -0
- package/dist/{chunk-3TPQ2BU6.js → chunk-BYBMTIMT.js} +2 -6
- package/dist/chunk-BYBMTIMT.js.map +1 -0
- package/dist/{chunk-FOPGUM27.js → chunk-CJX74IYK.js} +5 -4
- package/dist/chunk-CJX74IYK.js.map +1 -0
- package/dist/{chunk-RSF3UU7H.cjs → chunk-CNKT4PME.cjs} +196 -200
- package/dist/chunk-CNKT4PME.cjs.map +1 -0
- package/dist/{chunk-G7VZBCD6.cjs → chunk-CZLDE2OZ.cjs} +2 -9
- package/dist/{chunk-G7VZBCD6.cjs.map → chunk-CZLDE2OZ.cjs.map} +1 -1
- package/dist/{chunk-JOPVMWTM.cjs → chunk-DPA3KWPY.cjs} +3 -3
- package/dist/chunk-DPA3KWPY.cjs.map +1 -0
- package/dist/{chunk-ROJHKAQ4.cjs → chunk-E2763JUP.cjs} +143 -157
- package/dist/chunk-E2763JUP.cjs.map +1 -0
- package/dist/{chunk-FAXU7BMP.js → chunk-E5UJBLQ7.js} +2 -2
- package/dist/chunk-E5UJBLQ7.js.map +1 -0
- package/dist/{chunk-DVD5P72E.cjs → chunk-EEJUFDMF.cjs} +2 -6
- package/dist/chunk-EEJUFDMF.cjs.map +1 -0
- package/dist/{chunk-2HZRBATX.cjs → chunk-FSKONGCX.cjs} +2 -2
- package/dist/chunk-FSKONGCX.cjs.map +1 -0
- package/dist/{chunk-P2HKJ7P5.js → chunk-GAAHG2Z4.js} +3 -3
- package/dist/{chunk-P2HKJ7P5.js.map → chunk-GAAHG2Z4.js.map} +1 -1
- package/dist/{chunk-PI73NNOK.cjs → chunk-GUUB5EAG.cjs} +2 -2
- package/dist/chunk-GUUB5EAG.cjs.map +1 -0
- package/dist/{chunk-PU2Z5VWF.js → chunk-IPTZM3VE.js} +183 -187
- package/dist/chunk-IPTZM3VE.js.map +1 -0
- package/dist/{chunk-UERVXYVK.cjs → chunk-NWUEVLQT.cjs} +13 -13
- package/dist/{chunk-UERVXYVK.cjs.map → chunk-NWUEVLQT.cjs.map} +1 -1
- package/dist/{chunk-KPA4AN4R.js → chunk-OHC6UHFY.js} +86 -12
- package/dist/chunk-OHC6UHFY.js.map +1 -0
- package/dist/{chunk-DEVFAKCQ.cjs → chunk-PHJRNPHY.cjs} +6 -6
- package/dist/chunk-PHJRNPHY.cjs.map +1 -0
- package/dist/{chunk-VO35MNPH.js → chunk-PQ72Z6WC.js} +67 -105
- package/dist/chunk-PQ72Z6WC.js.map +1 -0
- package/dist/{chunk-KNRSROWB.cjs → chunk-PV2I2KMI.cjs} +86 -12
- package/dist/chunk-PV2I2KMI.cjs.map +1 -0
- package/dist/{chunk-V2TVSCV5.cjs → chunk-Q23GAMLE.cjs} +71 -109
- package/dist/chunk-Q23GAMLE.cjs.map +1 -0
- package/dist/{chunk-COIASRDK.cjs → chunk-RFFSZSCL.cjs} +107 -171
- package/dist/chunk-RFFSZSCL.cjs.map +1 -0
- package/dist/{chunk-AL5KX63J.js → chunk-UUDTPZX6.js} +3 -3
- package/dist/chunk-UUDTPZX6.js.map +1 -0
- package/dist/{chunk-EJN2PAOE.js → chunk-V7KZQIZ6.js} +102 -166
- package/dist/chunk-V7KZQIZ6.js.map +1 -0
- package/dist/{chunk-DYTZ6FQ7.js → chunk-WXVB364T.js} +2 -2
- package/dist/chunk-WXVB364T.js.map +1 -0
- package/dist/{chunk-WNCYAKF3.cjs → chunk-Y7AQK4R4.cjs} +93 -9
- package/dist/chunk-Y7AQK4R4.cjs.map +1 -0
- package/dist/{chunk-SPBTLUN6.js → chunk-YFAVQQTU.js} +7 -7
- package/dist/{chunk-SPBTLUN6.js.map → chunk-YFAVQQTU.js.map} +1 -1
- package/dist/cli/index.cjs +5 -5
- package/dist/cli/index.js +5 -5
- package/dist/client.cjs +4 -4
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +2 -2
- package/dist/drizzle/index.cjs +14 -14
- package/dist/drizzle/index.d.cts +4 -10
- package/dist/drizzle/index.d.ts +4 -10
- package/dist/drizzle/index.js +5 -5
- package/dist/fields/index.cjs +22 -22
- package/dist/fields/index.d.cts +1 -1
- package/dist/fields/index.d.ts +1 -1
- package/dist/fields/index.js +2 -2
- package/dist/graphql/index.cjs +1 -1
- package/dist/graphql/index.d.cts +3 -3
- package/dist/graphql/index.d.ts +3 -3
- package/dist/graphql/index.js +1 -1
- package/dist/{index-CaTNnLGd.d.cts → index-BKta3cBH.d.cts} +3 -2
- package/dist/{index-CJXPB_ot.d.ts → index-ClOqnkTO.d.ts} +3 -2
- package/dist/index.cjs +117 -117
- package/dist/index.d.cts +10 -15
- package/dist/index.d.ts +10 -15
- package/dist/index.js +18 -18
- package/dist/integration.cjs +1 -1
- package/dist/integration.js +1 -1
- package/dist/media-7WDX4BDJ.js +4 -0
- package/dist/{media-GPPTZ43E.js.map → media-7WDX4BDJ.js.map} +1 -1
- package/dist/{media-XNTUFJZR.cjs → media-TUSLVRQ6.cjs} +3 -3
- package/dist/{media-XNTUFJZR.cjs.map → media-TUSLVRQ6.cjs.map} +1 -1
- package/dist/{mongo-auth-adapter-ISOM7FSS.cjs → mongo-auth-adapter-GT4S7SCU.cjs} +3 -3
- package/dist/{mongo-auth-adapter-ISOM7FSS.cjs.map → mongo-auth-adapter-GT4S7SCU.cjs.map} +1 -1
- package/dist/mongo-auth-adapter-M7VV4LNB.js +4 -0
- package/dist/{mongo-auth-adapter-MO6STCV3.js.map → mongo-auth-adapter-M7VV4LNB.js.map} +1 -1
- package/dist/mongodb/index.cjs +5 -5
- package/dist/mongodb/index.d.cts +4 -9
- package/dist/mongodb/index.d.ts +4 -9
- package/dist/mongodb/index.js +3 -3
- package/dist/postgres-auth-adapter-AFAPISH7.js +5 -0
- package/dist/{postgres-auth-adapter-DWDR7P5G.js.map → postgres-auth-adapter-AFAPISH7.js.map} +1 -1
- package/dist/postgres-auth-adapter-SFDTLONT.cjs +14 -0
- package/dist/{postgres-auth-adapter-WRWSJD4E.cjs.map → postgres-auth-adapter-SFDTLONT.cjs.map} +1 -1
- package/dist/{redis-adapter-KJ3YOOT6.cjs → redis-adapter-UQX4EE3B.cjs} +3 -3
- package/dist/{redis-adapter-KJ3YOOT6.cjs.map → redis-adapter-UQX4EE3B.cjs.map} +1 -1
- package/dist/redis-adapter-XALOGWY3.js +4 -0
- package/dist/{redis-adapter-HGTPWIGV.js.map → redis-adapter-XALOGWY3.js.map} +1 -1
- package/dist/rest/index.cjs +10 -10
- package/dist/rest/index.d.cts +4 -4
- package/dist/rest/index.d.ts +4 -4
- package/dist/rest/index.js +8 -8
- package/dist/{schema-TTFE4467.cjs → schema-6QL3USNB.cjs} +15 -15
- package/dist/{schema-TTFE4467.cjs.map → schema-6QL3USNB.cjs.map} +1 -1
- package/dist/{schema-6I5OFR4Z.js → schema-FNNWEAAW.js} +4 -4
- package/dist/{schema-6I5OFR4Z.js.map → schema-FNNWEAAW.js.map} +1 -1
- package/dist/{sqlite-adapter-CSIZE5SX.cjs → sqlite-adapter-AQB5TCGV.cjs} +3 -3
- package/dist/{sqlite-adapter-CSIZE5SX.cjs.map → sqlite-adapter-AQB5TCGV.cjs.map} +1 -1
- package/dist/sqlite-adapter-N5H6IM2X.js +4 -0
- package/dist/{sqlite-adapter-6GEUSVXQ.js.map → sqlite-adapter-N5H6IM2X.js.map} +1 -1
- package/dist/templates/index.cjs +49 -49
- package/dist/templates/index.d.cts +2 -2
- package/dist/templates/index.d.ts +2 -2
- package/dist/templates/index.js +2 -2
- package/dist/trpc/index.cjs +11 -11
- package/dist/trpc/index.d.cts +3 -3
- package/dist/trpc/index.d.ts +3 -3
- package/dist/trpc/index.js +2 -2
- package/dist/{types-Z6FBiqa2.d.cts → types-DeSApf9T.d.cts} +1 -0
- package/dist/{types-Z6FBiqa2.d.ts → types-DeSApf9T.d.ts} +1 -0
- package/dist/{types-CyCQ6SAI.d.ts → types-Dgzlftb7.d.ts} +6 -28
- package/dist/{types-DJxD9394.d.cts → types-Ds0tCA3L.d.cts} +6 -28
- package/dist/ws/index.cjs +6 -6
- package/dist/ws/index.js +2 -2
- package/package.json +1 -1
- package/dist/bootstrap-5NLASFOG.cjs +0 -32
- package/dist/bootstrap-T5BK77LD.js +0 -7
- package/dist/chunk-22M4O4ZJ.js.map +0 -1
- package/dist/chunk-2HZRBATX.cjs.map +0 -1
- package/dist/chunk-3TPQ2BU6.js.map +0 -1
- package/dist/chunk-5EPFQUQD.js.map +0 -1
- package/dist/chunk-AL5KX63J.js.map +0 -1
- package/dist/chunk-C36TMDTY.cjs.map +0 -1
- package/dist/chunk-COIASRDK.cjs.map +0 -1
- package/dist/chunk-DEVFAKCQ.cjs.map +0 -1
- package/dist/chunk-DVD5P72E.cjs.map +0 -1
- package/dist/chunk-DYTZ6FQ7.js.map +0 -1
- package/dist/chunk-EJN2PAOE.js.map +0 -1
- package/dist/chunk-FAXU7BMP.js.map +0 -1
- package/dist/chunk-FOPGUM27.js.map +0 -1
- package/dist/chunk-JOPVMWTM.cjs.map +0 -1
- package/dist/chunk-KNRSROWB.cjs.map +0 -1
- package/dist/chunk-KPA4AN4R.js.map +0 -1
- package/dist/chunk-PI73NNOK.cjs.map +0 -1
- package/dist/chunk-PU2Z5VWF.js.map +0 -1
- package/dist/chunk-ROJHKAQ4.cjs.map +0 -1
- package/dist/chunk-RSF3UU7H.cjs.map +0 -1
- package/dist/chunk-TXSZFA4G.js.map +0 -1
- package/dist/chunk-V2TVSCV5.cjs.map +0 -1
- package/dist/chunk-VO35MNPH.js.map +0 -1
- package/dist/chunk-WNCYAKF3.cjs.map +0 -1
- package/dist/media-GPPTZ43E.js +0 -4
- package/dist/mongo-auth-adapter-MO6STCV3.js +0 -4
- package/dist/postgres-auth-adapter-DWDR7P5G.js +0 -5
- package/dist/postgres-auth-adapter-WRWSJD4E.cjs +0 -14
- package/dist/redis-adapter-HGTPWIGV.js +0 -4
- package/dist/sqlite-adapter-6GEUSVXQ.js +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/registry/validator.ts","../src/registry/zod-builder.ts","../src/registry/index.ts","../src/plugins/storage-s3.ts","../src/plugins/storage-cloudinary.ts","../src/plugins/storage-ftp.ts","../src/createKyro.ts","../src/database/local/adapter.ts"],"names":["z","getDefaultRegistry","fields","createS3Storage","createCloudinaryStorage","createFtpStorage","KyroPubSub","createWebhookService","createStorageSettingsGlobal","API_KEY_COLLECTION","WEBHOOK_COLLECTION","WEBHOOK_DELIVERY_COLLECTION","createHonoApp","buildGraphQLSchema","extractApiKeyFromRequest","validateApiKey","createApiKeyContext","parse","execute","createContext","createKyroServer","createWSServer","createRequire","AbstractBaseAdapter","applyRLS","DEFAULT_RLS_CONFIG","canAccessDocument","result","randomBytes"],"mappings":"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","file":"chunk-E2763JUP.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) && !(field as any).dynamicOptions) {\n errors.push(`${context}: ${field.type} field \"${fieldName}\" has no options defined`);\n } else if (field.options) {\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 console.warn(`[Kyro Config Warning]: Relationship field \"${field.name}\" references unknown collection \"${target}\". Select options will not be available until this collection is registered.`);\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.coerce.number().int() : z.coerce.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 let schema: ZodTypeAny;\n if (field.options && field.options.length > 0) {\n const values = field.options.map((opt) => opt.value);\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 } else {\n schema = field.hasMany ? z.array(z.string()) : 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 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.array(z.record(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 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, z.record(z.any())]));\n } else {\n schema = z.array(z.union([z.object({ blockType: z.string() }).catchall(z.any()), z.record(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).passthrough().optional();\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).passthrough().optional();\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)).passthrough().optional();\n } else {\n shape[field.name] = fieldToZod(field);\n }\n }\n \n return shape;\n}\n\nfunction buildUpdateNestedShape(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 = buildUpdateNestedShape(tab.fields);\n Object.assign(tabShape, nestedShape);\n }\n shape[field.name] = z.object(tabShape).passthrough().optional().nullable();\n } else if (field.type === \"row\" && \"fields\" in field) {\n const rowShape = buildUpdateNestedShape(field.fields);\n Object.assign(shape, rowShape);\n } else if (field.type === \"collapsible\" && \"fields\" in field) {\n shape[field.name] = z.object(buildUpdateNestedShape(field.fields)).passthrough().optional().nullable();\n } else if (field.type === \"group\" && \"fields\" in field) {\n shape[field.name] = z.object(buildUpdateNestedShape(field.fields)).passthrough().optional().nullable();\n } else {\n shape[field.name] = fieldToZod(field).optional().nullable();\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(buildUpdateNestedShape(field.fields)).optional().nullable();\n } else if (field.type === \"group\" && \"fields\" in field) {\n shape[field.name] = z.object(buildUpdateNestedShape(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\nexport function globalToUpdateZod(global: GlobalConfig): ZodTypeAny {\n const shape: Record<string, ZodTypeAny> = {};\n\n for (const field of global.fields) {\n if (!field.name) continue;\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 === \"collapsible\" && \"fields\" in field) {\n shape[field.name] = z.object(buildUpdateNestedShape(field.fields)).optional().nullable();\n } else if (field.type === \"group\" && \"fields\" in field) {\n shape[field.name] = z.object(buildUpdateNestedShape(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","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 globalToUpdateZod,\n fieldToZod,\n} from \"./zod-builder.js\";\nimport type { ZodTypeAny } from \"zod\";\nimport {\n getDefaultRegistry,\n type StorageProviderRegistry,\n} from \"../storage/registry.js\";\n\n// ============================================================================\n// Registry Class\n// ============================================================================\n\nexport class Registry {\n public storageProviders: StorageProviderRegistry = getDefaultRegistry();\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\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 this._addGlobalUnsafe(config);\n }\n\n /**\n * Add a global after the registry is already initialized.\n * Only for internal use (e.g. storage settings form built at startup).\n */\n addGlobalPostInit(config: GlobalConfig): void {\n if (this.globals.has(config.slug)) {\n this.globals.delete(config.slug);\n }\n this._addGlobalUnsafe(config);\n }\n\n private _addGlobalUnsafe(config: GlobalConfig): void {\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 const global = this.globals.get(slug);\n if (global) {\n const schema = globalToUpdateZod(global);\n this.schemaCache.set(`global:${slug}:update`, schema);\n return schema;\n }\n\n throw new Error(`No collection or global 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 publishStatus field if drafts are enabled\n if (config.versions?.drafts && !fields.some((f) => f.name === \"status\")) {\n fields.push({\n name: \"status\",\n type: \"select\",\n options: [\n { value: \"draft\", label: \"Draft\" },\n { value: \"published\", label: \"Published\" },\n ],\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 type { PluginConfig } from \"../registry/types.js\";\nimport type { Field } from \"../fields/types.js\";\nimport type { Registry } from \"../registry/index.js\";\nimport type { StorageConfig } from \"../config/ConfigService.js\";\nimport { createS3Storage } from \"../storage/s3.js\";\n\ntype S3Variant =\n | \"aws\"\n | \"r2\"\n | \"gcs\"\n | \"digitalocean\"\n | \"backblaze\"\n | \"wasabi\";\n\ninterface VariantDef {\n type: S3Variant;\n configKey: string;\n displayName: string;\n configFields: Field[];\n}\n\nconst s3Variants: Record<S3Variant, VariantDef> = {\n aws: {\n type: \"aws\",\n configKey: \"s3\",\n displayName: \"S3 Compatible (AWS, Backblaze, Wasabi, etc.)\",\n configFields: [\n { name: \"bucket\", type: \"text\", label: \"Bucket Name\", required: true },\n { name: \"region\", type: \"text\", label: \"Region\", defaultValue: \"us-east-1\", admin: { placeholder: \"us-east-1\" } },\n { name: \"accessKeyId\", type: \"text\", label: \"Access Key ID\", required: true },\n { name: \"secretAccessKey\", type: \"password\", label: \"Secret Access Key\", required: true },\n { name: \"endpoint\", type: \"text\", label: \"Endpoint URL\", admin: { placeholder: \"https://s3.custom.com\" } },\n { name: \"cdnUrl\", type: \"text\", label: \"CDN URL\", admin: { placeholder: \"https://cdn.example.com\" } },\n { name: \"prefix\", type: \"text\", label: \"Path Prefix\", admin: { placeholder: \"uploads\" } },\n ],\n },\n r2: {\n type: \"r2\",\n configKey: \"r2\",\n displayName: \"Cloudflare R2\",\n configFields: [\n { name: \"accountId\", type: \"text\", label: \"Account ID\", required: true, admin: { placeholder: \"Your Cloudflare Account ID\" } },\n { name: \"accessKeyId\", type: \"text\", label: \"Access Key ID\", required: true },\n { name: \"secretAccessKey\", type: \"password\", label: \"Secret Access Key\", required: true },\n { name: \"bucket\", type: \"text\", label: \"Bucket Name\", required: true },\n {\n name: \"publicDevUrl\", type: \"text\", label: \"Public Dev URL ID\",\n admin: {\n placeholder: \"pub-xxxxxxxxxxxxxxxx\",\n description: \"Enter ONLY the ID (e.g., pub-b8d8c4cc8bcf4d868ddd95efc1b305aa). Do NOT include https:// or the full URL. Found in R2 Dashboard → Public Dev URL.\",\n },\n },\n { name: \"cdnUrl\", type: \"text\", label: \"Custom CDN URL\", admin: { placeholder: \"https://assets.example.com (optional)\" } },\n { name: \"prefix\", type: \"text\", label: \"Path Prefix\", admin: { placeholder: \"uploads (optional)\", description: \"Optional prefix for all object keys. Do not use '/' as prefix.\" } },\n ],\n },\n gcs: {\n type: \"gcs\",\n configKey: \"gcs\",\n displayName: \"Google Cloud Storage\",\n configFields: [\n { name: \"bucket\", type: \"text\", label: \"Bucket Name\", required: true },\n { name: \"projectId\", type: \"text\", label: \"Project ID\" },\n { name: \"clientEmail\", type: \"text\", label: \"Client Email\" },\n { name: \"privateKey\", type: \"password\", label: \"Private Key\" },\n { name: \"cdnUrl\", type: \"text\", label: \"CDN URL\" },\n { name: \"prefix\", type: \"text\", label: \"Path Prefix\" },\n ],\n },\n digitalocean: {\n type: \"digitalocean\",\n configKey: \"digitalocean\",\n displayName: \"DigitalOcean Spaces\",\n configFields: [\n { name: \"bucket\", type: \"text\", label: \"Bucket Name\", required: true },\n { name: \"region\", type: \"text\", label: \"Region\", defaultValue: \"nyc3\" },\n { name: \"accessKeyId\", type: \"text\", label: \"Access Key ID\", required: true },\n { name: \"secretAccessKey\", type: \"password\", label: \"Secret Access Key\", required: true },\n { name: \"cdnUrl\", type: \"text\", label: \"CDN URL\" },\n { name: \"prefix\", type: \"text\", label: \"Path Prefix\" },\n ],\n },\n backblaze: {\n type: \"backblaze\",\n configKey: \"backblaze\",\n displayName: \"Backblaze B2\",\n configFields: [\n { name: \"bucket\", type: \"text\", label: \"Bucket Name\", required: true },\n { name: \"accountId\", type: \"text\", label: \"Account ID\" },\n { name: \"applicationKeyId\", type: \"text\", label: \"Application Key ID\", required: true },\n { name: \"applicationKey\", type: \"password\", label: \"Application Key\", required: true },\n { name: \"cdnUrl\", type: \"text\", label: \"CDN URL\" },\n { name: \"prefix\", type: \"text\", label: \"Path Prefix\" },\n ],\n },\n wasabi: {\n type: \"wasabi\",\n configKey: \"wasabi\",\n displayName: \"Wasabi\",\n configFields: [\n { name: \"bucket\", type: \"text\", label: \"Bucket Name\", required: true },\n { name: \"region\", type: \"text\", label: \"Region\", defaultValue: \"us-east-1\" },\n { name: \"accessKeyId\", type: \"text\", label: \"Access Key ID\", required: true },\n { name: \"secretAccessKey\", type: \"password\", label: \"Secret Access Key\", required: true },\n { name: \"cdnUrl\", type: \"text\", label: \"CDN URL\" },\n { name: \"prefix\", type: \"text\", label: \"Path Prefix\" },\n ],\n },\n};\n\nfunction getEndpoint(type: S3Variant, config: any): string | undefined {\n switch (type) {\n case \"r2\":\n return config?.endpoint || `https://${config?.accountId || \"\"}.r2.cloudflarestorage.com`;\n case \"digitalocean\":\n return config?.endpoint || `https://${config?.region || \"nyc3\"}.digitaloceanspaces.com`;\n case \"backblaze\":\n return config?.endpoint || `https://s3.backblazeb2.com`;\n case \"wasabi\":\n return config?.endpoint || `https://s3.${config?.region || \"us-east-1\"}.wasabisys.com`;\n default:\n return config?.endpoint;\n }\n}\n\nfunction buildS3Config(type: S3Variant, c: any): any {\n return {\n provider: type,\n bucket: c?.bucket || \"\",\n region: c?.region || \"us-east-1\",\n accessKeyId: c?.accessKeyId || c?.clientEmail || c?.applicationKeyId || \"\",\n secretAccessKey: c?.secretAccessKey || c?.privateKey || c?.applicationKey || \"\",\n endpoint: getEndpoint(type, c),\n cdnUrl: c?.cdnUrl,\n prefix: c?.prefix,\n accountId: c?.accountId,\n publicDevUrl: c?.publicDevUrl,\n };\n}\n\nfunction buildS3ConfigFromStorageConfig(type: S3Variant, def: VariantDef, sc: StorageConfig): any {\n const c = (sc as any)[def.configKey] || {};\n return buildS3Config(type, c);\n}\n\nfunction buildS3ConfigFromRaw(type: S3Variant, def: VariantDef, raw: any): any {\n const c = raw?.[def.configKey] || raw;\n return buildS3Config(type, c);\n}\n\nexport const s3StoragePlugin: PluginConfig = {\n name: \"@kyro-cms/storage-s3\",\n version: \"1.0.0\",\n description: \"S3-compatible storage (AWS R2 GCS DigitalOcean Backblaze Wasabi)\",\n init: (kyro: any) => {\n const registry = kyro.storageProviders as import(\"../storage/registry.js\").StorageProviderRegistry;\n if (!registry) return;\n\n const pluginName = \"@kyro-cms/storage-s3\";\n\n for (const v of Object.values(s3Variants)) {\n registry.register({\n type: v.type,\n displayName: v.displayName,\n pluginName,\n configKey: v.configKey,\n configFields: v.configFields,\n extractConfig: (sc: any) => buildS3ConfigFromStorageConfig(v.type, v, sc),\n extractRawConfig: (raw: any) => buildS3ConfigFromRaw(v.type, v, raw),\n factory: (c: any) => createS3Storage(c),\n });\n }\n },\n};\n","import type { PluginConfig } from \"../registry/types.js\";\nimport { createCloudinaryStorage } from \"../storage/cloudinary.js\";\n\nexport const cloudinaryStoragePlugin: PluginConfig = {\n name: \"@kyro-cms/storage-cloudinary\",\n version: \"1.0.0\",\n description: \"Cloudinary image and video storage\",\n init: (kyro: any) => {\n const registry = kyro.storageProviders as import(\"../storage/registry.js\").StorageProviderRegistry;\n if (!registry) return;\n\n registry.register({\n type: \"cloudinary\",\n displayName: \"Cloudinary\",\n pluginName: \"@kyro-cms/storage-cloudinary\",\n configKey: \"cloudinary\",\n configFields: [\n { name: \"cloudName\", type: \"text\", label: \"Cloud Name\", required: true },\n { name: \"apiKey\", type: \"text\", label: \"API Key\", required: true },\n { name: \"apiSecret\", type: \"password\", label: \"API Secret\", required: true },\n { name: \"folder\", type: \"text\", label: \"Folder\", admin: { placeholder: \"Optional folder path\" } },\n {\n name: \"uploadPreset\", type: \"text\", label: \"Upload Preset (optional)\",\n admin: { placeholder: \"Leave empty for signed uploads\", description: \"If not set, uploads will be signed with API Secret\" },\n },\n ],\n extractConfig: (sc: any) => ({\n cloudName: sc.cloudinary?.cloudName || \"\",\n apiKey: sc.cloudinary?.apiKey || \"\",\n apiSecret: sc.cloudinary?.apiSecret || \"\",\n folder: sc.cloudinary?.folder,\n uploadPreset: sc.cloudinary?.uploadPreset,\n }),\n extractRawConfig: (c: any) => {\n const cl = c?.cloudinary || c;\n return {\n cloudName: cl?.cloudName || \"\",\n apiKey: cl?.apiKey || \"\",\n apiSecret: cl?.apiSecret || \"\",\n folder: cl?.folder,\n uploadPreset: cl?.uploadPreset,\n };\n },\n factory: (c: any) => createCloudinaryStorage(c),\n });\n },\n};\n","import type { PluginConfig } from \"../registry/types.js\";\nimport { createFtpStorage } from \"../storage/ftp.js\";\n\nexport const ftpStoragePlugin: PluginConfig = {\n name: \"@kyro-cms/storage-ftp\",\n version: \"1.0.0\",\n description: \"FTP/SFTP storage provider\",\n init: (kyro: any) => {\n const registry = kyro.storageProviders as import(\"../storage/registry.js\").StorageProviderRegistry;\n if (!registry) return;\n\n registry.register({\n type: \"ftp\",\n displayName: \"FTP\",\n pluginName: \"@kyro-cms/storage-ftp\",\n configKey: \"ftp\",\n configFields: [\n { name: \"host\", type: \"text\", label: \"Host\", required: true, admin: { placeholder: \"ftp.example.com\" } },\n { name: \"port\", type: \"number\", label: \"Port\", defaultValue: 21, admin: { placeholder: \"21 for FTP\" } },\n { name: \"user\", type: \"text\", label: \"Username\", required: true },\n { name: \"password\", type: \"password\", label: \"Password\", required: true },\n { name: \"secure\", type: \"checkbox\", label: \"Use TLS/SSL\", defaultValue: false, admin: { description: \"Enable TLS/SSL for secure connections (FTP only)\" } },\n { name: \"baseUrl\", type: \"text\", label: \"Base URL\", required: true, admin: { placeholder: \"https://files.example.com\" } },\n { name: \"prefix\", type: \"text\", label: \"Path Prefix\", admin: { placeholder: \"uploads\" } },\n ],\n extractConfig: (sc: any) => ({\n host: sc.ftp?.host || \"\",\n port: sc.ftp?.port || 21,\n user: sc.ftp?.user || \"\",\n password: sc.ftp?.password || \"\",\n secure: sc.ftp?.secure || false,\n baseUrl: sc.ftp?.baseUrl || \"\",\n prefix: sc.ftp?.prefix,\n type: \"ftp\" as const,\n }),\n extractRawConfig: (c: any) => {\n const ftp = c?.ftp || c;\n return {\n host: ftp?.host || \"\",\n port: ftp?.port || 21,\n user: ftp?.user || \"\",\n password: ftp?.password || \"\",\n secure: ftp?.secure || false,\n baseUrl: ftp?.baseUrl || \"\",\n prefix: ftp?.prefix,\n type: \"ftp\" as const,\n };\n },\n factory: (c: any) => createFtpStorage(c),\n });\n },\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 { parse, execute } from \"graphql\";\nimport { createKyroServer, createContext } from \"./api/trpc/index.js\";\nimport type { User, Request } from \"./hooks/types.js\";\nimport {\n API_KEY_COLLECTION,\n validateApiKey,\n extractApiKeyFromRequest,\n createApiKeyContext,\n} from \"./auth/api-key.js\";\nimport {\n createWebhookService,\n type WebhookService,\n WEBHOOK_COLLECTION,\n WEBHOOK_DELIVERY_COLLECTION,\n} from \"./webhooks/index.js\";\nimport { s3StoragePlugin } from \"./plugins/storage-s3.js\";\nimport { cloudinaryStoragePlugin } from \"./plugins/storage-cloudinary.js\";\nimport { ftpStoragePlugin } from \"./plugins/storage-ftp.js\";\nimport { createStorageSettingsGlobal } from \"./templates/settings/storage.js\";\n\nconst builtinStoragePlugins: PluginConfig[] = [\n s3StoragePlugin,\n cloudinaryStoragePlugin,\n ftpStoragePlugin,\n];\n\n// ============================================================================\n// Kyro Instance\n// ============================================================================\n\nfunction updateFieldByPath(\n fields: any[],\n path: string,\n updates: Record<string, any>,\n): boolean {\n const parts = path.split(\".\");\n if (parts.length === 0) return false;\n\n const currentPart = parts[0];\n const remainingPath = parts.slice(1).join(\".\");\n\n for (const field of fields) {\n if (field.name === currentPart) {\n if (remainingPath) {\n // Continue traversing nested fields\n if (field.fields && Array.isArray(field.fields)) {\n return updateFieldByPath(field.fields, remainingPath, updates);\n }\n // For array fields, look in the nested fields\n if (field.type === \"array\" && field.fields && Array.isArray(field.fields)) {\n return updateFieldByPath(field.fields, remainingPath, updates);\n }\n return false;\n } else {\n // Found the target field, apply updates\n Object.assign(field, updates);\n return true;\n }\n }\n }\n return false;\n}\n\nfunction applyCollectionOverrides(\n collections: CollectionConfig[],\n overrides?: Record<string, any>,\n): void {\n if (!overrides) return;\n for (const col of collections) {\n const override = overrides[col.slug];\n if (override) {\n const { fields: fieldOverrides, ...adminOverrides } = override;\n col.admin = { ...col.admin, ...adminOverrides };\n\n // Apply field-level overrides\n if (fieldOverrides && col.fields && Array.isArray(col.fields)) {\n for (const [fieldPath, fieldUpdates] of Object.entries(fieldOverrides)) {\n updateFieldByPath(col.fields, fieldPath, fieldUpdates as any);\n }\n }\n }\n }\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 // Apply collection overrides to collections before registering them\n if (config.collections && config.admin?.collectionOverrides) {\n applyCollectionOverrides(config.collections, config.admin.collectionOverrides);\n }\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 built-in storage plugins first\n for (const plugin of builtinStoragePlugins) {\n this.registry.addPlugin(plugin);\n }\n\n // Register user plugins (overrides/adds to built-in)\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 (runs plugin init hooks)\n await this.registry.init();\n\n // Build storage settings global AFTER all plugins have registered their providers\n // but BEFORE db.init() so the table schema includes it\n const storageGlobal = createStorageSettingsGlobal(\n this.registry.storageProviders,\n (name: string) => this.registry.storageProviders.isPluginEnabled(name),\n );\n this.registry.addGlobalPostInit(storageGlobal);\n\n const pluginSettingsGlobal: GlobalConfig = {\n slug: \"plugin-settings\",\n admin: { hidden: true },\n fields: [{ name: \"states\", type: \"json\" }],\n };\n this.registry.addGlobalPostInit(pluginSettingsGlobal);\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 const allGlobals = this.registry.getGlobals();\n\n await this.db.init(\n [\n ...this.registry.getCollections(),\n systemCollection,\n webhookCollection,\n webhookDeliveryCollection,\n ],\n allGlobals,\n );\n\n // Load plugin enable/disable state from database\n await this.loadPluginState();\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: ${allGlobals.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 const doc = await this.db.findOne({\n collection: \"_globals_access-settings\",\n where: {},\n });\n\n if (doc) {\n // wrap so consumers read settings.access.apiAccess\n this.settings = { access: doc };\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 async loadPluginState(): Promise<void> {\n const storageRegistry = this.registry.storageProviders;\n const pluginNames = storageRegistry.getAllPluginNames();\n\n let pluginStates: Record<string, boolean> = {};\n try {\n const doc = await this.db.findOne({\n collection: \"_globals_plugin-settings\",\n where: {},\n });\n if (doc && doc.states) {\n pluginStates = doc.states;\n }\n } catch (e) {\n // Not initialized yet or empty\n }\n\n for (const name of pluginNames) {\n if (pluginStates[name] !== undefined) {\n storageRegistry.setPluginEnabled(name, pluginStates[name]);\n }\n }\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 }): { fetch: (request: any, locals?: any) => Promise<Response>; schema: any } {\n const defaultSchema = buildGraphQLSchema({\n registry: this.registry,\n db: this.db,\n settings: this.settings,\n user: options?.user,\n req: options?.req,\n tenantID: options?.tenantID,\n });\n\n return {\n fetch: async (request: any, _locals?: any) => {\n const apiKeyRaw = extractApiKeyFromRequest(request);\n let gqlUser: User | undefined;\n let apiKeyCtx: ReturnType<typeof createApiKeyContext> | undefined;\n\n if (apiKeyRaw && this.db) {\n const apiKeyResult = await validateApiKey(apiKeyRaw, this.db);\n if (!apiKeyResult.valid) {\n return new Response(\n JSON.stringify({ errors: [{ message: apiKeyResult.error || \"Invalid API key\" }] }),\n { status: 401, headers: { \"Content-Type\": \"application/json\" } },\n );\n }\n if (apiKeyResult.user) {\n gqlUser = apiKeyResult.user as User;\n apiKeyCtx = createApiKeyContext(apiKeyResult);\n }\n }\n\n const mustRebuild = gqlUser !== options?.user || apiKeyCtx !== undefined;\n const schema = mustRebuild\n ? buildGraphQLSchema({\n registry: this.registry,\n db: this.db,\n settings: this.settings,\n user: gqlUser,\n req: request,\n tenantID: options?.tenantID,\n apiKey: apiKeyCtx,\n })\n : defaultSchema;\n\n const body: any =\n request.method === \"POST\"\n ? await request.json().catch(() => ({}))\n : {};\n const query = body.query || \"\";\n const variables = body.variables || {};\n\n if (!query) {\n return new Response(\n JSON.stringify({ error: \"No GraphQL query provided\" }),\n { status: 400, headers: { \"Content-Type\": \"application/json\" } },\n );\n }\n\n try {\n const document = parse(query);\n const result = await execute({\n schema,\n document,\n variableValues: variables,\n contextValue: {\n db: this.db,\n registry: this.registry,\n settings: this.settings,\n user: gqlUser,\n req: request,\n tenantID: options?.tenantID,\n },\n });\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n } catch (err: any) {\n return new Response(\n JSON.stringify({ errors: [{ message: err.message }] }),\n { status: 400, headers: { \"Content-Type\": \"application/json\" } },\n );\n }\n },\n schema: defaultSchema,\n };\n }\n\n getTRPC(options?: { user?: User; req?: Request; tenantID?: string }): { fetch: (request: any, locals?: any) => Promise<Response>; router: any } {\n return {\n fetch: async (request: any, locals?: any) => {\n const url = new URL(request.url);\n const path = url.pathname.replace(/^\\/api\\/trpc\\//, \"\");\n const [slug, ...rest] = path.split(\".\");\n let procedureName = rest.join(\".\");\n procedureName = procedureName.replace(/\\.(query|mutate|subscribe)$/, \"\");\n\n if (!slug || !procedureName) {\n return new Response(\n JSON.stringify({\n error: {\n message: \"Invalid tRPC path\",\n code: -32600,\n data: { code: \"BAD_REQUEST\", httpStatus: 400 },\n },\n }),\n { status: 400, headers: { \"Content-Type\": \"application/json\" } },\n );\n }\n\n const ctx = await createContext({\n db: this.db,\n registry: this.registry,\n req: request,\n user: options?.user,\n tenantID: options?.tenantID,\n settings: this.settings,\n });\n\n const kyroRouter = createKyroServer(ctx);\n\n const collectionRouter = (kyroRouter as any)[slug];\n if (!collectionRouter) {\n return new Response(\n JSON.stringify({\n error: {\n message: `Collection '${slug}' not found`,\n code: -32601,\n data: { code: \"NOT_FOUND\", httpStatus: 404 },\n },\n }),\n { status: 404, headers: { \"Content-Type\": \"application/json\" } },\n );\n }\n\n const procedure = collectionRouter[procedureName];\n if (typeof procedure !== \"function\") {\n return new Response(\n JSON.stringify({\n error: {\n message: `Procedure '${procedureName}' not found`,\n code: -32601,\n data: { code: \"NOT_FOUND\", httpStatus: 404 },\n },\n }),\n { status: 404, headers: { \"Content-Type\": \"application/json\" } },\n );\n }\n\n try {\n let raw: any = {};\n if (request.method === \"POST\" || request.method === \"PATCH\") {\n raw = await request.json().catch(() => ({}));\n } else {\n const qs = new URL(request.url).searchParams.get(\"input\");\n if (qs) {\n try { raw = JSON.parse(decodeURIComponent(qs)); } catch {}\n }\n }\n const input = raw?.[\"0\"] ?? raw;\n const result = await procedure({ ...input, collection: slug });\n return new Response(JSON.stringify({ result: { data: result } }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n } catch (err: any) {\n const msg = err.message || \"Internal error\";\n const httpStatus =\n msg.includes(\"not found\") ? 404 :\n msg.includes(\"denied\") || msg.includes(\"authentication required\") ? 403 :\n msg.includes(\"conflict\") ? 409 :\n 500;\n const code =\n httpStatus === 404 ? -32601 :\n httpStatus === 403 ? -32001 :\n httpStatus === 409 ? -32002 :\n -32603;\n return new Response(\n JSON.stringify({\n error: {\n message: msg,\n code,\n data: {\n code: \"INTERNAL_SERVER_ERROR\",\n httpStatus,\n },\n },\n }),\n { status: httpStatus, headers: { \"Content-Type\": \"application/json\" } },\n );\n }\n },\n router: null as any,\n };\n }\n\n getWS(): KyroWSServer | undefined {\n return this.wsServer;\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?.wsEnabled === false) {\n console.log(\"⚠️ WebSocket is disabled in settings\");\n return null;\n }\n\n const defaultVerifyToken = async (token: string) => {\n const result = await validateApiKey(token, this.db);\n if (!result.valid) throw new Error(result.error || \"Invalid API key\");\n if (!result.user) throw new Error(\"API key has no associated user\");\n return result.user;\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 || defaultVerifyToken,\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","import { createRequire } from \"module\";\nconst _require = createRequire(import.meta.url);\nconst modPath = \"node:\" + \"sqlite\";\nconst { DatabaseSync } = _require(modPath) as typeof import(\"node:sqlite\");\nimport { randomBytes } from 'crypto';\nimport { AbstractBaseAdapter } from \"../base.js\";\nimport type {\n CollectionConfig,\n GlobalConfig,\n FindArgs,\n FindByIDArgs,\n CreateArgs,\n UpdateArgs,\n DeleteArgs,\n FindResult,\n VersionRecord,\n CreateVersionArgs,\n FindVersionsArgs,\n DocumentStatus,\n} from \"../../registry/types.js\";\nimport type { Field } from \"../../fields/types.js\";\nimport type { TenantContext } from \"../../auth/rls/tenant.js\";\nimport { applyRLS, DEFAULT_RLS_CONFIG, canAccessDocument } from \"../../auth/rls/tenant.js\";\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 processFieldValue(row: any, field: Field): any {\n const f = field as any;\n let value = row[f.name];\n \n if (\n f.type === \"json\" ||\n f.type === \"richtext\" ||\n f.type === \"array\" ||\n f.type === \"group\" ||\n f.type === \"blocks\" ||\n f.type === \"list\" ||\n f.type === \"relationship-block\"\n ) {\n try {\n value = value ? JSON.parse(value) : null;\n } catch {\n value = null;\n }\n }\n\n if (f.type === \"checkbox\") {\n value = Boolean(value);\n }\n\n if (f.type === \"date\" && value) {\n try {\n const d = new Date(value);\n if (isNaN(d.getTime())) {\n value = null;\n } else {\n value = d.toISOString();\n }\n } catch {\n value = null;\n }\n }\n\n if ((f.type === \"upload\" || f.type === \"image\") && value) {\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n value = parsed.map((item: any) => {\n if (typeof item === \"object\" && item !== null) {\n return item;\n }\n return { id: item };\n });\n } else {\n value = typeof parsed === \"object\" ? parsed : { id: parsed };\n }\n } catch {\n value = { id: value };\n }\n }\n\n if (f.type === \"relationship\" && value) {\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n value = parsed;\n } else {\n value = parsed;\n }\n } catch {\n value = { relationTo: Array.isArray(f.relationTo) ? f.relationTo[0] : f.relationTo, value };\n }\n }\n\n if (f.type === \"list\" && value) {\n try {\n const parsed = JSON.parse(value);\n value = Array.isArray(parsed) ? parsed : [];\n } catch {\n value = [];\n }\n }\n\n if (f.type === \"relationship-block\" && value) {\n try {\n const parsed = JSON.parse(value);\n value = Array.isArray(parsed) ? parsed : [];\n } catch {\n value = [];\n }\n }\n\n return value;\n}\n\nfunction buildNestedDoc(row: any, fields: Field[]): any {\n const doc: any = {};\n \n for (const field of fields) {\n if (!field.name || field.name === \"id\") continue;\n \n if (field.type === \"tabs\" && \"tabs\" in field) {\n const tabData: any = {};\n for (const tab of field.tabs) {\n Object.assign(tabData, buildNestedDoc(row, tab.fields));\n }\n doc[field.name] = tabData;\n } else if (field.type === \"row\" && \"fields\" in field) {\n const rowData = buildNestedDoc(row, field.fields);\n Object.assign(doc, rowData);\n } else if (field.type === \"collapsible\" && \"fields\" in field) {\n doc[field.name] = buildNestedDoc(row, field.fields);\n } else {\n doc[field.name] = processFieldValue(row, field);\n }\n }\n \n return doc;\n}\n\nfunction getTableColumns(db: any, tableName: string): string[] {\n try {\n const rows = db.prepare(`PRAGMA table_info(${tableName})`).all() as any[];\n return rows.map((r: any) => r.name);\n } catch {\n return [];\n }\n}\n\nexport class LocalAdapter extends AbstractBaseAdapter {\n private db: any;\n private path?: string;\n private migrations: Map<string, boolean> = new Map();\n private readonly versionsTableName = \"kyro_versions\";\n\n constructor(options: { db?: any; path?: string }) {\n super();\n this.path = options.path;\n\n if (options.db) {\n this.db = options.db;\n } else {\n this.db = null;\n }\n }\n\n async connect(): Promise<void> {\n if (!this.db) {\n this.db = new DatabaseSync(this.path || \":memory:\");\n }\n\n // Wrap prepare to serialize parameter bindings for Node.js node:sqlite DatabaseSync compatibility\n if (this.db && typeof this.db.prepare === \"function\" && !this.db.prepare.__wrapped) {\n const originalPrepare = this.db.prepare.bind(this.db);\n const wrappedPrepare = (sql: string) => {\n const stmt = originalPrepare(sql);\n const serialize = (val: any) => {\n if (typeof val === \"boolean\") return val ? 1 : 0;\n if (val === undefined) return null;\n return val;\n };\n return new Proxy(stmt, {\n get(target, prop, receiver) {\n if (prop === \"all\") {\n return (...params: any[]) => target.all(...params.map(serialize));\n }\n if (prop === \"get\") {\n return (...params: any[]) => target.get(...params.map(serialize));\n }\n if (prop === \"run\") {\n return (...params: any[]) => target.run(...params.map(serialize));\n }\n const val = Reflect.get(target, prop, receiver);\n return typeof val === \"function\" ? val.bind(target) : val;\n }\n });\n };\n wrappedPrepare.__wrapped = true;\n this.db.prepare = wrappedPrepare;\n }\n\n this.db.exec(\"PRAGMA journal_mode = WAL\");\n this.db.exec(\"PRAGMA foreign_keys = ON\");\n this.connected = true;\n console.log(\n `[LocalAdapter] Connected to SQLite (${this.path || \"memory\"})`,\n );\n }\n\n async disconnect(): Promise<void> {\n if (this.db) {\n this.db.close();\n }\n this.connected = false;\n console.log(\"[LocalAdapter] Disconnected\");\n }\n\n // ========================================================================\n // Schema Management\n // ========================================================================\n\n private ensureTable(\n config: CollectionConfig | GlobalConfig,\n tableName?: string,\n ): void {\n const name = tableName || this.getTableNameFor(config.slug);\n\n const columns: string[] = [`id TEXT PRIMARY KEY`];\n\n for (const field of flattenFields(config.fields)) {\n if (!field.name || field.name === \"id\") continue;\n\n const colDef = this.fieldToSQL(field);\n if (colDef) columns.push(colDef);\n }\n\n // Always add timestamps for all tables\n columns.push(`${this.col(\"createdAt\")} TEXT DEFAULT (datetime('now'))`);\n columns.push(`${this.col(\"updatedAt\")} TEXT DEFAULT (datetime('now'))`);\n // publishStatus: defaults to 'draft'\n columns.push(`status TEXT DEFAULT 'draft'`);\n columns.push(`hasDraft INTEGER DEFAULT 0`);\n\n if ((config as CollectionConfig).tenantScoped) {\n columns.push(`tenant_id TEXT NOT NULL`);\n }\n\n const existingColumns = getTableColumns(this.db, name);\n\n if (existingColumns.length === 0) {\n const createSQL = `CREATE TABLE IF NOT EXISTS ${name} (${columns.join(\", \")})`;\n this.db.exec(createSQL);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_${name}_status ON ${name}(status)`);\n\n for (const field of flattenFields(config.fields)) {\n if (field.name && field.indexed) {\n this.db.exec(\n `CREATE INDEX IF NOT EXISTS idx_${name}_${field.name} ON ${name}(${this.col(field.name)})`,\n );\n }\n if (field.name && field.unique) {\n this.db.exec(\n `CREATE UNIQUE INDEX IF NOT EXISTS idx_${name}_${field.name}_unique ON ${name}(${this.col(field.name)})`,\n );\n }\n }\n } else {\n const existingSet = new Set(existingColumns);\n for (const colDef of columns) {\n const colName = colDef.split(\" \")[0].replace(/^\"/, \"\").replace(/\"$/, \"\");\n if (!existingSet.has(colName) && colName !== \"id\") {\n try {\n if (colName === \"status\") {\n this.db.exec(`ALTER TABLE ${name} ADD COLUMN ${this.col(colName)} TEXT DEFAULT 'published'`);\n } else if (colName === \"hasDraft\") {\n this.db.exec(`ALTER TABLE ${name} ADD COLUMN ${this.col(colName)} INTEGER DEFAULT 0`);\n } else {\n this.db.exec(`ALTER TABLE ${name} ADD COLUMN ${this.col(colName)} TEXT`);\n }\n } catch {\n // Column may already exist via concurrent migration\n }\n }\n }\n }\n\n this.migrations.set(name, true);\n }\n\n private ensureVersionsTable(): void {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS ${this.versionsTableName} (\n id TEXT PRIMARY KEY,\n collection_slug TEXT NOT NULL,\n document_id TEXT NOT NULL,\n tenant_id TEXT,\n version INTEGER NOT NULL,\n status TEXT NOT NULL DEFAULT 'draft',\n autosave INTEGER NOT NULL DEFAULT 0,\n data TEXT NOT NULL,\n created_by TEXT,\n change_description TEXT,\n published_at TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n )\n `);\n this.db.exec(\n `CREATE INDEX IF NOT EXISTS idx_${this.versionsTableName}_doc ON ${this.versionsTableName}(collection_slug, document_id)`,\n );\n this.db.exec(\n `CREATE INDEX IF NOT EXISTS idx_${this.versionsTableName}_status ON ${this.versionsTableName}(status)`,\n );\n this.db.exec(\n `CREATE INDEX IF NOT EXISTS idx_${this.versionsTableName}_autosave ON ${this.versionsTableName}(autosave)`,\n );\n\n // Migration: add autosave column to existing tables\n try {\n this.db.exec(`ALTER TABLE ${this.versionsTableName} ADD COLUMN autosave INTEGER NOT NULL DEFAULT 0`);\n } catch {\n // Column already exists — safe to ignore\n }\n }\n\n\n\n // ========================================================================\n // SQL Quoting\n // ========================================================================\n\n private col(name: string): string {\n return `\"${name}\"`;\n }\n\n private fieldToSQL(field: any): string | null {\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 case \"url\":\n return this.col(field.name) + \" TEXT\";\n case \"number\":\n return this.col(field.name) + \" REAL\";\n case \"checkbox\":\n return this.col(field.name) + \" INTEGER DEFAULT 0\";\n case \"date\":\n return this.col(field.name) + \" TEXT\";\n case \"select\":\n case \"radio\":\n return this.col(field.name) + \" TEXT\";\n case \"relationship\":\n case \"upload\":\n return this.col(field.name) + \" TEXT\";\n case \"json\":\n case \"richtext\":\n case \"array\":\n case \"group\":\n case \"blocks\":\n return this.col(field.name) + \" TEXT\";\n default:\n return null;\n }\n }\n\n // ========================================================================\n // CRUD Operations\n // ========================================================================\n\n private parseGlobalsSlug(slug: string): {\n isGlobal: boolean;\n globalSlug: string;\n tableName: string;\n } {\n if (slug.startsWith(\"_globals_\")) {\n const globalSlug = slug.replace(\"_globals_\", \"\");\n return {\n isGlobal: true,\n globalSlug,\n tableName: `global_${globalSlug.replace(/-/g, \"_\")}`,\n };\n }\n return {\n isGlobal: false,\n globalSlug: \"\",\n tableName: this.getTableNameFor(slug),\n };\n }\n\n async find<T>(args: FindArgs): Promise<FindResult<T>> {\n const {\n collection: slug,\n where = {},\n sort,\n limit = 10,\n page = 1,\n tenantID,\n draft = false,\n } = args;\n const parsed = this.parseGlobalsSlug(slug);\n const config = parsed.isGlobal \n ? this.globals.get(parsed.globalSlug)! \n : this.getCollection(slug);\n \n this.ensureTable(config, parsed.tableName);\n\n const tableName = parsed.tableName;\n let sql = `SELECT * FROM ${tableName}`;\n const params: any[] = [];\n const conditions: string[] = [];\n\n let effectiveWhere = { ...where };\n if (this.tenantContext && (config as CollectionConfig).tenantScoped) {\n const rlsQuery = applyRLS({ where: effectiveWhere }, slug, this.tenantContext, DEFAULT_RLS_CONFIG);\n effectiveWhere = rlsQuery.where || {};\n }\n\n // Public API: only show published. Admin (draft=true): show all.\n if (!draft) {\n conditions.push(`status = ?`);\n params.push('published');\n }\n\n if (tenantID && (config as CollectionConfig).tenantScoped) {\n conditions.push(`tenant_id = ?`);\n params.push(tenantID);\n }\n\n for (const [key, value] of Object.entries(effectiveWhere)) {\n if (key === \"AND\" || key === \"OR\") continue;\n\n if (typeof value === \"object\" && value !== null) {\n if (value.equals !== undefined) {\n conditions.push(`${this.col(key)} = ?`);\n params.push(value.equals);\n }\n if (value.in !== undefined) {\n conditions.push(`${this.col(key)} IN (${value.in.map(() => \"?\").join(\", \")})`);\n params.push(...value.in);\n }\n if (value.not_equals !== undefined) {\n conditions.push(`${this.col(key)} != ?`);\n params.push(value.not_equals);\n }\n } else {\n conditions.push(`${this.col(key)} = ?`);\n params.push(value);\n }\n }\n\n if (conditions.length > 0) {\n sql += ` WHERE ${conditions.join(\" AND \")}`;\n }\n\n const sortField = this.col(sort?.replace(\"-\", \"\") || \"createdAt\");\n const sortDir = sort?.startsWith(\"-\") ? \"DESC\" : \"ASC\";\n sql += ` ORDER BY ${sortField} ${sortDir}`;\n\n const countSql = sql.replace(\"SELECT *\", \"SELECT COUNT(*) as count\");\n const countResult = this.db.prepare(countSql).get(...params) as {\n count: number;\n };\n const totalDocs = countResult?.count || 0;\n\n sql += ` LIMIT ? OFFSET ?`;\n params.push(limit, (page - 1) * limit);\n\n const rows = this.db.prepare(sql).all(...params);\n let docs = rows.map((row: any) => this.rowToDoc(row, config));\n\n if (this.tenantContext && !this.tenantContext.isSuperAdmin) {\n docs = docs.filter((doc: any) => canAccessDocument(doc, slug, this.tenantContext!, DEFAULT_RLS_CONFIG));\n }\n\n // If draft: true, merge the latest version (autosave or manual) into the response\n if (draft) {\n docs = await Promise.all(docs.map(async (doc: any) => {\n const version = this.db\n .prepare(`SELECT * FROM ${this.versionsTableName} WHERE collection_slug = ? AND document_id = ? AND tenant_id IS NULL ORDER BY version DESC LIMIT 1`)\n .get(slug, doc.id) as any;\n if (version) {\n const versionData = version.data ? JSON.parse(version.data) : {};\n return { ...doc, ...versionData, status: doc.status };\n }\n return doc;\n }));\n }\n\n return {\n docs: docs as T[],\n totalDocs,\n limit,\n totalPages: Math.ceil(totalDocs / limit),\n page,\n pagingCounter: (page - 1) * limit + 1,\n hasPrevPage: page > 1,\n hasNextPage: page < Math.ceil(totalDocs / limit),\n prevPage: page > 1 ? page - 1 : null,\n nextPage: page < Math.ceil(totalDocs / limit) ? page + 1 : null,\n };\n }\n\n async findByID<T>(args: FindByIDArgs): Promise<T | null> {\n const { collection: slug, id, tenantID, draft = false } = args;\n const parsed = this.parseGlobalsSlug(slug);\n const config = parsed.isGlobal \n ? this.globals.get(parsed.globalSlug)! \n : this.getCollection(slug);\n \n this.ensureTable(config, parsed.tableName);\n\n const tableName = parsed.tableName;\n let sql = `SELECT * FROM ${tableName} WHERE id = ?`;\n const params: any[] = [id];\n\n if (this.tenantContext && (config as CollectionConfig).tenantScoped) {\n const tempDoc = { id, tenant_id: this.tenantContext.tenantId };\n if (!canAccessDocument(tempDoc, slug, this.tenantContext, DEFAULT_RLS_CONFIG)) {\n return null;\n }\n }\n\n // Public API: only show published docs. Admin (draft=true): skip status filter.\n if (!draft) {\n sql += ` AND status = ?`;\n params.push('published');\n }\n\n if (tenantID && (config as CollectionConfig).tenantScoped) {\n sql += ` AND tenant_id = ?`;\n params.push(tenantID);\n }\n\n const row = this.db.prepare(sql).get(...params);\n if (!row) return null;\n\n let doc = this.rowToDoc(row as any, config);\n\n // If draft: true, merge the latest version (autosave or manual) into the response\n if (draft) {\n const version = this.db\n .prepare(`SELECT * FROM ${this.versionsTableName} WHERE collection_slug = ? AND document_id = ? AND tenant_id IS NULL ORDER BY version DESC LIMIT 1`)\n .get(slug, doc.id) as any;\n if (version) {\n const versionData = version.data ? JSON.parse(version.data) : {};\n doc = { ...doc, ...versionData, status: doc.status };\n }\n }\n\n return doc as T;\n }\n\n async create<T>(args: CreateArgs): Promise<T> {\n const { collection: slug, data, tenantID } = args;\n const parsed = this.parseGlobalsSlug(slug);\n const config = parsed.isGlobal \n ? this.globals.get(parsed.globalSlug)! \n : this.getCollection(slug);\n \n this.ensureTable(config, parsed.tableName);\n\n const tableName = parsed.tableName;\n const id = parsed.isGlobal ? parsed.globalSlug : (data.id || this.generateId());\n\n const insertData = this.prepareData(data, config);\n insertData.id = id;\n insertData.created_at = new Date().toISOString();\n insertData.updated_at = new Date().toISOString();\n\n if (tenantID && (config as CollectionConfig).tenantScoped) {\n insertData.tenant_id = tenantID;\n }\n\n const columns = Object.keys(insertData);\n\n // Filter data to only include valid columns\n const validColumns = getTableColumns(this.db, tableName);\n const filteredData: Record<string, any> = {};\n for (const key of columns) {\n if (validColumns.includes(key)) {\n filteredData[key] = insertData[key];\n }\n }\n\n const filteredColumns = Object.keys(filteredData);\n const quotedColumns = filteredColumns.map(c => this.col(c));\n const placeholders = filteredColumns.map(() => \"?\").join(\", \");\n const values = Object.values(filteredData).map((v: any) =>\n v !== null && typeof v === \"object\" ? JSON.stringify(v) : v,\n );\n\n this.db\n .prepare(\n `INSERT OR REPLACE INTO ${tableName} (${quotedColumns.join(\", \")}) VALUES (${placeholders})`,\n )\n .run(...values);\n\n return this.findByID<T>({ collection: slug, id, tenantID }) as Promise<T>;\n }\n\n async update<T>(args: UpdateArgs): Promise<T> {\n const { collection: slug, id, data, tenantID } = args;\n const parsed = this.parseGlobalsSlug(slug);\n const config = parsed.isGlobal \n ? this.globals.get(parsed.globalSlug)! \n : this.getCollection(slug);\n \n this.ensureTable(config, parsed.tableName);\n\n const tableName = parsed.tableName;\n const updateData = this.prepareData(data, config);\n updateData.updated_at = new Date().toISOString();\n\n // Filter data to only include valid columns\n const validColumns = getTableColumns(this.db, tableName);\n const filteredData: Record<string, any> = {};\n for (const key of Object.keys(updateData)) {\n if (validColumns.includes(key)) {\n filteredData[key] = updateData[key];\n }\n }\n\n const columns = Object.keys(filteredData);\n const setClause = columns.map((c) => `${this.col(c)} = ?`).join(\", \");\n const values = Object.values(filteredData).map((v: any) =>\n v !== null && typeof v === \"object\" ? JSON.stringify(v) : v,\n );\n\n let sql = `UPDATE ${tableName} SET ${setClause} WHERE id = ?`;\n const params = [...values, id];\n\n if (tenantID && (config as CollectionConfig).tenantScoped) {\n sql += ` AND tenant_id = ?`;\n params.push(tenantID);\n }\n\n this.db.prepare(sql).run(...params);\n\n return this.findByID<T>({ collection: slug, id, tenantID, draft: true }) as Promise<T>;\n }\n\n async delete<T>(args: DeleteArgs): Promise<T> {\n const { collection: slug, id, tenantID } = args;\n const parsed = this.parseGlobalsSlug(slug);\n const config = parsed.isGlobal \n ? this.globals.get(parsed.globalSlug)! \n : this.getCollection(slug);\n \n this.ensureTable(config, parsed.tableName);\n\n const doc = await this.findByID<T>({ collection: slug, id, tenantID });\n if (!doc) throw new Error(`Document not found: ${slug}/${id}`);\n\n const tableName = parsed.tableName;\n let sql = `DELETE FROM ${tableName} WHERE id = ?`;\n const params: any[] = [id];\n\n if (tenantID && (config as CollectionConfig).tenantScoped) {\n sql += ` AND tenant_id = ?`;\n params.push(tenantID);\n }\n\n this.db.prepare(sql).run(...params);\n\n return doc;\n }\n\n async count(args: {\n collection: string;\n where?: Record<string, any>;\n tenantID?: string;\n }): Promise<number> {\n const { collection: slug, tenantID } = args;\n const parsed = this.parseGlobalsSlug(slug);\n const config = parsed.isGlobal \n ? this.globals.get(parsed.globalSlug)! \n : this.getCollection(slug);\n \n this.ensureTable(config, parsed.tableName);\n\n const tableName = parsed.tableName;\n let sql = `SELECT COUNT(*) as count FROM ${tableName}`;\n const params: any[] = [];\n\n if (tenantID && (config as CollectionConfig).tenantScoped) {\n sql += ` WHERE tenant_id = ?`;\n params.push(tenantID);\n }\n\n const result = this.db.prepare(sql).get(...params) as { count: number };\n return result?.count || 0;\n }\n\n async findOne(args: {\n collection: string;\n where: Record<string, any>;\n tenantID?: string;\n draft?: boolean;\n }): Promise<any> {\n const parsed = this.parseGlobalsSlug(args.collection);\n if (parsed.isGlobal) {\n const globalConfig = this.globals.get(parsed.globalSlug);\n if (!globalConfig) {\n throw new Error(`Global \"${parsed.globalSlug}\" not found in adapter`);\n }\n this.ensureTable(globalConfig, parsed.tableName);\n\n let sql = `SELECT * FROM ${parsed.tableName}`;\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (!args.draft && globalConfig.versions) {\n conditions.push(\"status = 'published'\");\n }\n\n if (conditions.length > 0) {\n sql += ` WHERE ${conditions.join(\" AND \")}`;\n }\n\n sql += \" LIMIT 1\";\n\n const result = this.db.prepare(sql).get(...params) as any;\n if (result) {\n let doc = this.rowToDoc(result, globalConfig);\n\n // If draft: true, merge the latest version (autosave or manual) into the response\n if (args.draft) {\n const version = this.db\n .prepare(`SELECT * FROM ${this.versionsTableName} WHERE collection_slug = ? AND document_id = ? AND tenant_id IS NULL ORDER BY version DESC LIMIT 1`)\n .get(args.collection, parsed.globalSlug) as any;\n if (version) {\n const versionData = version.data ? JSON.parse(version.data) : {};\n doc = { ...doc, ...versionData, status: doc.status };\n }\n }\n return doc;\n }\n return null;\n }\n const result = await this.find({ ...args, limit: 1 });\n return result.docs[0] || null;\n }\n\n // ========================================================================\n // Version History\n // ========================================================================\n\n async findVersions(args: FindVersionsArgs): Promise<FindResult<VersionRecord>> {\n this.ensureVersionsTable();\n const { collection, documentId, tenantID, limit = 20, page = 1 } = args;\n const conditions = [`collection_slug = ?`, `document_id = ?`, `autosave = 0`];\n const params: any[] = [collection, documentId];\n\n if (tenantID) {\n conditions.push(`tenant_id = ?`);\n params.push(tenantID);\n } else {\n conditions.push(`tenant_id IS NULL`);\n }\n\n const where = `WHERE ${conditions.join(' AND ')}`;\n const countResult = this.db\n .prepare(`SELECT COUNT(*) as count FROM ${this.versionsTableName} ${where}`)\n .get(...params) as { count: number };\n const totalDocs = countResult?.count || 0;\n\n const offset = (page - 1) * limit;\n const rows = this.db\n .prepare(`SELECT * FROM ${this.versionsTableName} ${where} ORDER BY version DESC LIMIT ? OFFSET ?`)\n .all(...params, limit, offset) as any[];\n\n const docs = rows.map((r) => this.rowToVersion(r));\n return {\n docs,\n totalDocs,\n limit,\n totalPages: Math.ceil(totalDocs / limit),\n page,\n pagingCounter: (page - 1) * limit + 1,\n hasPrevPage: page > 1,\n hasNextPage: page < Math.ceil(totalDocs / limit),\n prevPage: page > 1 ? page - 1 : null,\n nextPage: page < Math.ceil(totalDocs / limit) ? page + 1 : null,\n };\n }\n\n async findVersionByID(args: { collection: string; versionId: string; tenantID?: string }): Promise<VersionRecord | null> {\n this.ensureVersionsTable();\n const row = this.db\n .prepare(`SELECT * FROM ${this.versionsTableName} WHERE id = ? AND collection_slug = ? LIMIT 1`)\n .get(args.versionId, args.collection) as any;\n return row ? this.rowToVersion(row) : null;\n }\n\n async createVersion<T = Record<string, any>>(args: CreateVersionArgs<T>): Promise<VersionRecord<T>> {\n this.ensureVersionsTable();\n const now = new Date().toISOString();\n\n // Autosave: reuse existing autosave slot instead of creating a new row\n if (args.autosave) {\n let sql = `SELECT * FROM ${this.versionsTableName} WHERE collection_slug = ? AND document_id = ? AND autosave = 1`;\n const params: any[] = [args.collection, args.documentId];\n if (args.tenantID) {\n sql += ` AND tenant_id = ?`;\n params.push(args.tenantID);\n } else {\n sql += ` AND tenant_id IS NULL`;\n }\n sql += ` LIMIT 1`;\n const existing = this.db.prepare(sql).get(...params) as any;\n if (existing) {\n this.db\n .prepare(`UPDATE ${this.versionsTableName} SET data = ?, status = ?, updated_at = ? WHERE id = ?`)\n .run(JSON.stringify(args.data), args.status, now, existing.id);\n const result = await this.findVersionByID({ collection: args.collection, versionId: existing.id });\n if (result) return result as VersionRecord<T>;\n }\n }\n\n const id = this.generateId();\n\n // Get next version number\n const latestRow = this.db\n .prepare(`SELECT version FROM ${this.versionsTableName} WHERE collection_slug = ? AND document_id = ? AND autosave = 0 ORDER BY version DESC LIMIT 1`)\n .get(args.collection, args.documentId) as any;\n const nextVersion = (latestRow?.version ?? 0) + 1;\n\n this.db\n .prepare(\n `INSERT INTO ${this.versionsTableName} (\n id, collection_slug, document_id, tenant_id, version, status, autosave, data, created_by, change_description, published_at, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n )\n .run(\n id,\n args.collection,\n args.documentId,\n args.tenantID ?? null,\n nextVersion,\n args.status,\n args.autosave ? 1 : 0,\n JSON.stringify(args.data),\n args.createdBy ?? null,\n args.changeDescription ?? null,\n args.status === 'published' ? now : null,\n now,\n now,\n );\n\n // Prune old versions — skip for autosave versions (only one per doc, not counted toward limit)\n if (!args.autosave) {\n const collectionConfig = this.collections.get(args.collection);\n const maxPerDoc = (collectionConfig as CollectionConfig)?.versions?.maxPerDoc;\n if (maxPerDoc && maxPerDoc > 0) {\n await this.deleteVersions({ collection: args.collection, documentId: args.documentId, keepLatest: maxPerDoc, tenantID: args.tenantID });\n }\n }\n\n const saved = await this.findVersionByID({ collection: args.collection, versionId: id });\n return saved as VersionRecord<T>;\n }\n\n async updateLatestVersion<T = Record<string, any>>(args: CreateVersionArgs<T>): Promise<VersionRecord<T>> {\n return this.createVersion({ ...args, autosave: true });\n }\n\n async deleteVersions(args: { collection: string; documentId: string; keepLatest?: number; tenantID?: string }): Promise<void> {\n this.ensureVersionsTable();\n const { collection, documentId, keepLatest, tenantID } = args;\n\n if (keepLatest && keepLatest > 0) {\n // Delete all non-published, non-autosave versions beyond the keepLatest limit\n const rows = this.db\n .prepare(`SELECT id, status, autosave FROM ${this.versionsTableName} WHERE collection_slug = ? AND document_id = ? ORDER BY version DESC`)\n .all(collection, documentId) as any[];\n\n // Always keep published and autosave versions; prune non-published beyond the limit\n let draftCount = 0;\n const toDelete: string[] = [];\n for (const row of rows) {\n if (row.status === 'published' || row.autosave === 1) continue;\n draftCount++;\n if (draftCount > keepLatest) toDelete.push(row.id);\n }\n\n for (const vid of toDelete) {\n this.db.prepare(`DELETE FROM ${this.versionsTableName} WHERE id = ?`).run(vid);\n }\n } else {\n // Delete all versions for this document\n let sql = `DELETE FROM ${this.versionsTableName} WHERE collection_slug = ? AND document_id = ?`;\n const params: any[] = [collection, documentId];\n if (tenantID) { sql += ` AND tenant_id = ?`; params.push(tenantID); }\n this.db.prepare(sql).run(...params);\n }\n }\n\n private rowToVersion<T = Record<string, any>>(row: any): VersionRecord<T> {\n return {\n id: String(row.id),\n collection: row.collection_slug,\n documentId: row.document_id,\n version: row.version,\n status: row.status as DocumentStatus,\n data: row.data ? JSON.parse(row.data) : {},\n createdBy: row.created_by ?? undefined,\n changeDescription: row.change_description ?? undefined,\n publishedAt: row.published_at ?? null,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n }\n\n\n\n // ========================================================================\n // Helpers\n // ========================================================================\n\n protected prepareData(\n data: Record<string, any>,\n config: CollectionConfig | GlobalConfig,\n ): Record<string, any> {\n const result: Record<string, any> = {};\n const fields = flattenFields(config.fields);\n\n // Helper to process a field value\n const processValue = (field: Field, value: any): any => {\n const f = field as any;\n if (\n f.type === \"json\" ||\n f.type === \"richtext\" ||\n f.type === \"array\" ||\n f.type === \"group\" ||\n f.type === \"blocks\" ||\n f.type === \"list\" ||\n f.type === \"relationship-block\"\n ) {\n return value !== null && value !== undefined ? JSON.stringify(value) : null;\n } else if (f.type === \"checkbox\") {\n return value ? 1 : 0;\n } else if (f.type === \"number\") {\n return value !== null && value !== \"\" ? Number(value) : null;\n } else if (f.type === \"upload\" || f.type === \"image\") {\n if (value === null || value === undefined) return null;\n if (Array.isArray(value)) {\n const items = value.map((v: any) => {\n if (typeof v === \"string\") return v;\n if (typeof v === \"object\") return v.id || v._id || v;\n return String(v);\n });\n return JSON.stringify(items);\n }\n if (typeof value === \"string\") return value;\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n } else if (field.type === \"relationship\") {\n if (value === null || value === undefined) return null;\n if (Array.isArray(value)) {\n const rels = value.map((v: any) => {\n if (typeof v === \"string\") return v;\n if (typeof v === \"object\") return JSON.stringify({ relationTo: field.relationTo, value: v.id || v });\n return String(v);\n });\n return JSON.stringify(rels);\n }\n if (typeof value === \"string\") return value;\n if (typeof value === \"object\") return JSON.stringify({ relationTo: field.relationTo, value: value.id || value });\n return String(value);\n }\n return value;\n };\n\n // First pass: process top-level fields\n for (const field of fields) {\n if (!field.name || field.name === \"id\") continue;\n \n // Skip fields that are inside tabs (they'll be handled separately)\n const isInTab = config.fields.some(f => \n f.type === \"tabs\" && \"tabs\" in f && \n f.tabs.some(t => t.fields.some(tf => tf.name === field.name))\n );\n if (isInTab) continue;\n \n const value = data[field.name];\n if (value !== undefined) {\n result[field.name] = processValue(field, value);\n }\n }\n\n // Second pass: process nested tab fields\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 for (const tab of field.tabs) {\n for (const tabField of tab.fields) {\n if (tabField.name && tabField.name !== \"id\") {\n const value = tabData[tabField.name];\n if (value !== undefined) {\n result[tabField.name] = processValue(tabField, value);\n }\n }\n }\n }\n }\n }\n }\n\n return result;\n }\n\n private rowToDoc(row: any, config: CollectionConfig | GlobalConfig): any {\n const doc: any = { id: row.id };\n\n for (const field of flattenFields(config.fields)) {\n if (!field.name || field.name === \"id\") continue;\n\n const f = field as any;\n let value = row[f.name];\n\n if (\n f.type === \"json\" ||\n f.type === \"richtext\" ||\n f.type === \"array\" ||\n f.type === \"group\" ||\n f.type === \"blocks\" ||\n f.type === \"list\" ||\n f.type === \"relationship-block\"\n ) {\n try {\n value = value ? JSON.parse(value) : null;\n } catch {\n value = null;\n }\n }\n\n if (field.type === \"checkbox\") {\n value = Boolean(value);\n }\n\n if (field.type === \"date\" && value) {\n try {\n const d = new Date(value);\n if (isNaN(d.getTime())) {\n console.warn(`[LocalAdapter] Invalid date value for field \"${field.name}\":`, value);\n value = null;\n } else {\n value = d.toISOString();\n }\n } catch {\n value = null;\n }\n }\n\n if ((field.type === \"upload\" || field.type === \"image\") && value) {\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n value = parsed.map((item: any) => {\n if (typeof item === \"object\" && item !== null) {\n return item; // Keep full object with id, url, etc.\n }\n return { id: item };\n });\n } else {\n // If it's an object, keep it; otherwise assume it's just an ID\n value = typeof parsed === \"object\" ? parsed : { id: parsed };\n }\n } catch {\n value = { id: value };\n }\n }\n\n if (field.type === \"relationship\" && value) {\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n value = parsed;\n } else {\n value = parsed;\n }\n } catch {\n value = { relationTo: Array.isArray(field.relationTo) ? field.relationTo[0] : field.relationTo, value };\n }\n }\n\n doc[field.name] = value;\n }\n\n // Build nested structure for tab/row/collapsible fields\n for (const field of config.fields) {\n if (!field.name || field.name === \"id\" || field.name === \"row\" || field.name === \"collapsible\") continue;\n \n if (field.type === \"tabs\" && \"tabs\" in field) {\n const tabData: any = {};\n for (const tab of field.tabs) {\n for (const tabField of tab.fields) {\n if (tabField.name && tabField.name !== \"id\") {\n // Get the processed value for this tab field\n tabData[tabField.name] = processFieldValue(row, tabField);\n }\n }\n }\n doc[field.name] = tabData;\n }\n }\n\n if ((config as CollectionConfig).timestamps) {\n const cAt = row.createdAt || row.created_at;\n const uAt = row.updatedAt || row.updated_at;\n \n if (cAt) {\n try {\n const d = new Date(cAt);\n if (!isNaN(d.getTime())) doc.createdAt = d.toISOString();\n } catch {}\n }\n \n if (uAt) {\n try {\n const d = new Date(uAt);\n if (!isNaN(d.getTime())) doc.updatedAt = d.toISOString();\n } catch {}\n }\n }\n\n if ((config as CollectionConfig).tenantScoped) {\n doc.tenantID = row.tenant_id;\n }\n\n doc.status = row.status ?? 'published';\n doc.hasDraft = row.hasDraft ? Boolean(row.hasDraft) : false;\n\n return doc;\n }\n\n private generateId(): string {\n const timestamp = Date.now().toString(16).padStart(12, '0');\n const random = randomBytes(6).toString('hex');\n return timestamp + random;\n }\n\n private getMediaById(mediaId: string): { id: string; url: string; thumbnailUrl?: string } | null {\n try {\n const tableName = this.getTableNameFor(\"media\");\n const row = this.db.prepare(`SELECT id, url, thumbnail_url FROM ${tableName} WHERE id = ?`).get(mediaId) as any;\n if (row) {\n return {\n id: row.id,\n url: row.url,\n thumbnailUrl: row.thumbnail_url || row.url,\n };\n }\n } catch (err) {\n // Media table might not exist or query failed\n }\n return null;\n }\n\n private getTableNameFor(slug: string): string {\n return slug.replace(/-/g, \"_\");\n }\n\n\n\n // ========================================================================\n // Migrations\n // ========================================================================\n\n async migrate(): Promise<void> {\n for (const config of this.collections.values()) {\n this.ensureTable(config);\n }\n console.log(\"[LocalAdapter] Migrations complete\");\n }\n\n async rollback(): Promise<void> {\n console.log(\"[LocalAdapter] Rollback not supported for schema changes\");\n }\n\n // ========================================================================\n // Transaction Support\n // ========================================================================\n\n async transaction<T>(fn: (tx: any) => Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n const tx = this.db.transaction(async () => {\n return fn({ db: this.db });\n });\n\n try {\n const result = tx();\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n // ========================================================================\n // Direct DB Access\n // ========================================================================\n\n getDatabase(): any {\n return this.db;\n }\n\n exec(sql: string): void {\n this.db.exec(sql);\n }\n\n prepare(sql: string) {\n return this.db.prepare(sql);\n }\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nexport function createLocalAdapter(options?: {\n db?: any;\n path?: string;\n}): LocalAdapter {\n return new LocalAdapter(options || {});\n}\n"]}
|
|
@@ -216,5 +216,5 @@ function renderRichText(value) {
|
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
export { ALL_FIELD_TYPES, COMPLEX_FIELD_TYPES, LAYOUT_FIELD_TYPES, PRIMITIVE_FIELD_TYPES, RELATIONAL_FIELD_TYPES, createRelationshipFieldConfig, isArrayField, isBlocksField, isGroupField, isImageField, isLayoutField, isNumberField, isRelationshipField, isRichTextField, isSelectField, isTextField, isUploadField, normalizeRichTextValue, renderRichText, richTextStyles };
|
|
219
|
-
//# sourceMappingURL=chunk-
|
|
220
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-E5UJBLQ7.js.map
|
|
220
|
+
//# sourceMappingURL=chunk-E5UJBLQ7.js.map
|