@sonicjs-cms/core 2.0.7 → 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-OOV64BK4.cjs → chunk-4I25AGUR.cjs} +349 -267
  3. package/dist/chunk-4I25AGUR.cjs.map +1 -0
  4. package/dist/chunk-6FR25MPC.js.map +1 -1
  5. package/dist/{chunk-JB2NUJJ5.js → chunk-ABYMIXRN.js} +193 -111
  6. package/dist/chunk-ABYMIXRN.js.map +1 -0
  7. package/dist/{chunk-4MBTSUI6.js → chunk-COBUPOMD.js} +22 -6
  8. package/dist/chunk-COBUPOMD.js.map +1 -0
  9. package/dist/chunk-DOR2IU73.cjs.map +1 -1
  10. package/dist/{chunk-3R7EQNGO.cjs → chunk-DYYAXDXI.cjs} +6 -6
  11. package/dist/chunk-DYYAXDXI.cjs.map +1 -0
  12. package/dist/{chunk-7XEESVSX.cjs → chunk-EYMHWJTW.cjs} +2 -2
  13. package/dist/chunk-EYMHWJTW.cjs.map +1 -0
  14. package/dist/{chunk-HJZOA2O5.cjs → chunk-F5ESJXI2.cjs} +25 -3
  15. package/dist/chunk-F5ESJXI2.cjs.map +1 -0
  16. package/dist/chunk-FICTAGD4.js.map +1 -1
  17. package/dist/{chunk-EAELJXRV.js → chunk-HKEK7UNV.js} +25 -3
  18. package/dist/chunk-HKEK7UNV.js.map +1 -0
  19. package/dist/{chunk-KHNSPJ6X.cjs → chunk-MABBKINE.cjs} +5 -5
  20. package/dist/{chunk-KHNSPJ6X.cjs.map → chunk-MABBKINE.cjs.map} +1 -1
  21. package/dist/{chunk-YGVWY6KO.cjs → chunk-NBDPIRQS.cjs} +22 -5
  22. package/dist/chunk-NBDPIRQS.cjs.map +1 -0
  23. package/dist/{chunk-O7LMFJMZ.js → chunk-OKPDQO2Y.js} +3 -3
  24. package/dist/chunk-OKPDQO2Y.js.map +1 -0
  25. package/dist/{chunk-LS5CMDNL.js → chunk-OPGDMS7L.js} +3 -3
  26. package/dist/{chunk-LS5CMDNL.js.map → chunk-OPGDMS7L.js.map} +1 -1
  27. package/dist/chunk-RCQ2HIQD.cjs.map +1 -1
  28. package/dist/{chunk-RSFXIU6A.cjs → chunk-TMIRVVQ7.cjs} +4 -4
  29. package/dist/chunk-TMIRVVQ7.cjs.map +1 -0
  30. package/dist/{chunk-YHLLVUJC.js → chunk-VEC5MLT3.js} +2 -2
  31. package/dist/chunk-VEC5MLT3.js.map +1 -0
  32. package/dist/{chunk-YURRY22X.js → chunk-WRRLB6KG.js} +4 -4
  33. package/dist/chunk-WRRLB6KG.js.map +1 -0
  34. package/dist/index.cjs +108 -104
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.js +11 -11
  37. package/dist/index.js.map +1 -1
  38. package/dist/middleware.cjs +23 -23
  39. package/dist/middleware.js +2 -2
  40. package/dist/plugins.cjs +7 -7
  41. package/dist/plugins.js +1 -1
  42. package/dist/routes.cjs +25 -25
  43. package/dist/routes.js +5 -5
  44. package/dist/services.cjs +18 -14
  45. package/dist/services.js +1 -1
  46. package/dist/templates.cjs +18 -18
  47. package/dist/templates.js +2 -2
  48. package/dist/utils.cjs +11 -11
  49. package/dist/utils.js +1 -1
  50. package/migrations/019_remove_blog_posts_collection.sql +15 -0
  51. package/package.json +2 -2
  52. package/dist/chunk-3R7EQNGO.cjs.map +0 -1
  53. package/dist/chunk-4MBTSUI6.js.map +0 -1
  54. package/dist/chunk-7XEESVSX.cjs.map +0 -1
  55. package/dist/chunk-EAELJXRV.js.map +0 -1
  56. package/dist/chunk-HJZOA2O5.cjs.map +0 -1
  57. package/dist/chunk-JB2NUJJ5.js.map +0 -1
  58. package/dist/chunk-O7LMFJMZ.js.map +0 -1
  59. package/dist/chunk-OOV64BK4.cjs.map +0 -1
  60. package/dist/chunk-RSFXIU6A.cjs.map +0 -1
  61. package/dist/chunk-YGVWY6KO.cjs.map +0 -1
  62. package/dist/chunk-YHLLVUJC.js.map +0 -1
  63. package/dist/chunk-YURRY22X.js.map +0 -1
@@ -413,7 +413,7 @@ function buildQuery(table, filter) {
413
413
  // package.json
414
414
  var package_default = {
415
415
  name: "@sonicjs-cms/core",
416
- version: "2.0.7",
416
+ version: "2.0.9",
417
417
  description: "Core framework for SonicJS headless CMS - Edge-first, TypeScript-native CMS built for Cloudflare Workers",
418
418
  type: "module",
419
419
  main: "./dist/index.cjs",
@@ -502,7 +502,7 @@ var package_default = {
502
502
  "@cloudflare/workers-types": "^4.0.0",
503
503
  hono: "^4.0.0",
504
504
  "drizzle-orm": "^0.44.0",
505
- zod: "^3.0.0"
505
+ zod: "^3.0.0 || ^4.0.0"
506
506
  },
507
507
  dependencies: {
508
508
  "drizzle-zod": "^0.8.3",
@@ -536,5 +536,5 @@ function getCoreVersion() {
536
536
  }
537
537
 
538
538
  export { QueryFilterBuilder, SONICJS_VERSION, TemplateRenderer, buildQuery, escapeHtml, getCoreVersion, package_default, renderTemplate, sanitizeInput, sanitizeObject, templateRenderer };
539
- //# sourceMappingURL=chunk-YURRY22X.js.map
540
- //# sourceMappingURL=chunk-YURRY22X.js.map
539
+ //# sourceMappingURL=chunk-WRRLB6KG.js.map
540
+ //# sourceMappingURL=chunk-WRRLB6KG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/sanitize.ts","../src/utils/template-renderer.ts","../src/utils/query-filter.ts","../package.json","../src/utils/version.ts"],"names":[],"mappings":"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","file":"chunk-WRRLB6KG.js","sourcesContent":["/**\n * HTML sanitization utilities for preventing XSS attacks\n */\n\n/**\n * Escapes HTML special characters to prevent XSS attacks\n * @param text - The text to escape\n * @returns The escaped text safe for HTML output\n */\nexport function escapeHtml(text: string): string {\n if (typeof text !== 'string') {\n return ''\n }\n\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#039;'\n }\n\n return text.replace(/[&<>\"']/g, (char) => map[char] || char)\n}\n\n/**\n * Sanitizes user input by escaping HTML special characters\n * This should be used for all user-provided text fields to prevent XSS\n * @param input - The input string to sanitize\n * @returns The sanitized string\n */\nexport function sanitizeInput(input: string | null | undefined): string {\n if (!input) {\n return ''\n }\n return escapeHtml(String(input).trim())\n}\n\n/**\n * Sanitizes an object's string properties\n * @param obj - Object with string properties to sanitize\n * @param fields - Array of field names to sanitize\n * @returns New object with sanitized fields\n */\nexport function sanitizeObject<T extends Record<string, any>>(\n obj: T,\n fields: (keyof T)[]\n): T {\n const sanitized = { ...obj }\n\n for (const field of fields) {\n if (typeof obj[field] === 'string') {\n sanitized[field] = sanitizeInput(obj[field]) as T[keyof T]\n }\n }\n\n return sanitized\n}\n","// Template renderer compatible with Cloudflare Workers\n// No filesystem access available\n\ninterface TemplateData {\n [key: string]: any\n}\n\nexport class TemplateRenderer {\n private templateCache = new Map<string, string>()\n\n constructor() {\n // Cloudflare Workers compatible - no filesystem access\n }\n\n /**\n * Simple Handlebars-like template engine\n */\n private renderTemplate(template: string, data: TemplateData): string {\n let rendered = template\n\n // Handle each loops - process outermost loops first for proper nesting\n rendered = rendered.replace(/\\{\\{#each\\s+([^}]+)\\}\\}([\\s\\S]*?)\\{\\{\\/each\\}\\}/g, (_match, arrayName, content) => {\n const array = this.getNestedValue(data, arrayName.trim())\n if (!Array.isArray(array)) return ''\n \n return array.map((item, index) => {\n // Create context with array item and special variables\n const itemContext = {\n ...data,\n // Handle primitive items (for {{.}} syntax)\n '.': item,\n // Spread item properties if it's an object\n ...(typeof item === 'object' && item !== null ? item : {}),\n '@index': index,\n '@first': index === 0,\n '@last': index === array.length - 1\n }\n return this.renderTemplate(content, itemContext)\n }).join('')\n })\n\n // Second pass: Handle conditionals\n let ifCount = 0\n while (rendered.includes('{{#if ') && ifCount < 100) {\n const previousRendered = rendered\n rendered = rendered.replace(/\\{\\{#if\\s+([^}]+)\\}\\}([\\s\\S]*?)\\{\\{\\/if\\}\\}/g, (_match, condition, content) => {\n const value = this.getNestedValue(data, condition.trim())\n // Handle boolean values properly - @first/@last are explicitly boolean\n const isTruthy = value === true || (value && value !== 0 && value !== '' && value !== null && value !== undefined)\n return isTruthy ? this.renderTemplate(content, data) : ''\n })\n if (previousRendered === rendered) break\n ifCount++\n }\n\n // Third pass: Handle triple braces for raw HTML {{{variable}}}\n rendered = rendered.replace(/\\{\\{\\{([^}]+)\\}\\}\\}/g, (_match, variable) => {\n const value = this.getNestedValue(data, variable.trim())\n return value !== undefined && value !== null ? String(value) : ''\n })\n\n // Fourth pass: Handle helper functions like {{titleCase field}}\n rendered = rendered.replace(/\\{\\{([^}#\\/]+)\\s+([^}]+)\\}\\}/g, (match, helper, variable) => {\n const helperName = helper.trim()\n const varName = variable.trim()\n \n if (helperName === 'titleCase') {\n const value = this.getNestedValue(data, varName)\n if (value !== undefined && value !== null) {\n return this.titleCase(String(value))\n }\n }\n \n return match // Return original if helper not found\n })\n\n // Final pass: Handle simple variables {{variable}}\n rendered = rendered.replace(/\\{\\{([^}#\\/]+)\\}\\}/g, (match, variable) => {\n const trimmed = variable.trim()\n \n // Skip if it's a helper function (has spaces)\n if (trimmed.includes(' ')) {\n return match\n }\n \n const value = this.getNestedValue(data, trimmed)\n if (value === null) return ''\n if (value === undefined) return ''\n return String(value)\n })\n\n return rendered\n }\n\n /**\n * Get nested value from object using dot notation\n */\n private getNestedValue(obj: any, path: string): any {\n if (!obj || path === '') return undefined\n \n return path.split('.').reduce((current, key) => {\n if (current === null || current === undefined) return undefined\n return current[key]\n }, obj)\n }\n\n /**\n * Title case helper function\n */\n private titleCase(str: string): string {\n return str\n .replace(/_/g, ' ')\n .replace(/\\b\\w/g, l => l.toUpperCase())\n }\n\n /**\n * Render a template string with data\n */\n render(template: string, data: TemplateData = {}): string {\n return this.renderTemplate(template, data)\n }\n\n /**\n * Clear template cache (useful for development)\n */\n clearCache(): void {\n this.templateCache.clear()\n }\n}\n\n// Export singleton instance\nexport const templateRenderer = new TemplateRenderer()\n\n// Utility function to render template strings directly\nexport function renderTemplate(template: string, data: TemplateData = {}): string {\n return templateRenderer.render(template, data)\n}","/**\n * Query Filter Builder for SonicJS AI\n * Supports comprehensive filtering with AND/OR logic\n * Compatible with D1 Database (SQLite)\n */\n\nexport type FilterOperator =\n | 'equals'\n | 'not_equals'\n | 'greater_than'\n | 'greater_than_equal'\n | 'less_than'\n | 'less_than_equal'\n | 'like'\n | 'contains'\n | 'in'\n | 'not_in'\n | 'all'\n | 'exists'\n | 'near'\n | 'within'\n | 'intersects'\n\nexport interface FilterCondition {\n field: string\n operator: FilterOperator\n value: any\n}\n\nexport interface FilterGroup {\n and?: FilterCondition[]\n or?: FilterCondition[]\n}\n\nexport interface QueryFilter {\n where?: FilterGroup\n limit?: number\n offset?: number\n sort?: {\n field: string\n order: 'asc' | 'desc'\n }[]\n}\n\nexport interface QueryResult {\n sql: string\n params: any[]\n errors: string[]\n}\n\n/**\n * Query Filter Builder\n * Converts filter objects into SQL WHERE clauses with parameterized queries\n */\nexport class QueryFilterBuilder {\n private params: any[] = []\n private errors: string[] = []\n\n /**\n * Build a complete SQL query from filter object\n */\n build(baseTable: string, filter: QueryFilter): QueryResult {\n this.params = []\n this.errors = []\n\n let sql = `SELECT * FROM ${baseTable}`\n\n // Build WHERE clause\n if (filter.where) {\n const whereClause = this.buildWhereClause(filter.where)\n if (whereClause) {\n sql += ` WHERE ${whereClause}`\n }\n }\n\n // Build ORDER BY clause\n if (filter.sort && filter.sort.length > 0) {\n const orderClauses = filter.sort\n .map(s => `${this.sanitizeFieldName(s.field)} ${s.order.toUpperCase()}`)\n .join(', ')\n sql += ` ORDER BY ${orderClauses}`\n }\n\n // Build LIMIT clause\n if (filter.limit) {\n sql += ` LIMIT ?`\n this.params.push(filter.limit)\n }\n\n // Build OFFSET clause\n if (filter.offset) {\n sql += ` OFFSET ?`\n this.params.push(filter.offset)\n }\n\n return {\n sql,\n params: this.params,\n errors: this.errors\n }\n }\n\n /**\n * Build WHERE clause from filter group\n */\n private buildWhereClause(group: FilterGroup): string {\n const clauses: string[] = []\n\n // Handle AND conditions\n if (group.and && group.and.length > 0) {\n const andClauses = group.and\n .map(condition => this.buildCondition(condition))\n .filter(clause => clause !== null)\n\n if (andClauses.length > 0) {\n clauses.push(`(${andClauses.join(' AND ')})`)\n }\n }\n\n // Handle OR conditions\n if (group.or && group.or.length > 0) {\n const orClauses = group.or\n .map(condition => this.buildCondition(condition))\n .filter(clause => clause !== null)\n\n if (orClauses.length > 0) {\n clauses.push(`(${orClauses.join(' OR ')})`)\n }\n }\n\n return clauses.join(' AND ')\n }\n\n /**\n * Build a single condition\n */\n private buildCondition(condition: FilterCondition): string | null {\n const field = this.sanitizeFieldName(condition.field)\n\n switch (condition.operator) {\n case 'equals':\n return this.buildEquals(field, condition.value)\n\n case 'not_equals':\n return this.buildNotEquals(field, condition.value)\n\n case 'greater_than':\n return this.buildComparison(field, '>', condition.value)\n\n case 'greater_than_equal':\n return this.buildComparison(field, '>=', condition.value)\n\n case 'less_than':\n return this.buildComparison(field, '<', condition.value)\n\n case 'less_than_equal':\n return this.buildComparison(field, '<=', condition.value)\n\n case 'like':\n return this.buildLike(field, condition.value)\n\n case 'contains':\n return this.buildContains(field, condition.value)\n\n case 'in':\n return this.buildIn(field, condition.value)\n\n case 'not_in':\n return this.buildNotIn(field, condition.value)\n\n case 'all':\n return this.buildAll(field, condition.value)\n\n case 'exists':\n return this.buildExists(field, condition.value)\n\n case 'near':\n this.errors.push(`'near' operator not supported in SQLite. Use spatial extension or application-level filtering.`)\n return null\n\n case 'within':\n this.errors.push(`'within' operator not supported in SQLite. Use spatial extension or application-level filtering.`)\n return null\n\n case 'intersects':\n this.errors.push(`'intersects' operator not supported in SQLite. Use spatial extension or application-level filtering.`)\n return null\n\n default:\n this.errors.push(`Unknown operator: ${condition.operator}`)\n return null\n }\n }\n\n /**\n * Build equals condition\n */\n private buildEquals(field: string, value: any): string {\n if (value === null) {\n return `${field} IS NULL`\n }\n this.params.push(value)\n return `${field} = ?`\n }\n\n /**\n * Build not equals condition\n */\n private buildNotEquals(field: string, value: any): string {\n if (value === null) {\n return `${field} IS NOT NULL`\n }\n this.params.push(value)\n return `${field} != ?`\n }\n\n /**\n * Build comparison condition (>, >=, <, <=)\n */\n private buildComparison(field: string, operator: string, value: any): string {\n this.params.push(value)\n return `${field} ${operator} ?`\n }\n\n /**\n * Build LIKE condition (case-insensitive, all words must be present)\n */\n private buildLike(field: string, value: string): string {\n const words = value.split(/\\s+/).filter(w => w.length > 0)\n\n if (words.length === 0) {\n return `1=1` // No-op condition\n }\n\n const conditions = words.map(word => {\n this.params.push(`%${word}%`)\n return `${field} LIKE ?`\n })\n\n return `(${conditions.join(' AND ')})`\n }\n\n /**\n * Build CONTAINS condition (case-insensitive substring)\n */\n private buildContains(field: string, value: string): string {\n this.params.push(`%${value}%`)\n return `${field} LIKE ?`\n }\n\n /**\n * Build IN condition\n */\n private buildIn(field: string, value: any): string {\n let values: any[]\n\n if (typeof value === 'string') {\n // Parse comma-delimited string\n values = value.split(',').map(v => v.trim()).filter(v => v.length > 0)\n } else if (Array.isArray(value)) {\n values = value\n } else {\n values = [value]\n }\n\n if (values.length === 0) {\n return `1=0` // No values means no matches\n }\n\n const placeholders = values.map(v => {\n this.params.push(v)\n return '?'\n }).join(', ')\n\n return `${field} IN (${placeholders})`\n }\n\n /**\n * Build NOT IN condition\n */\n private buildNotIn(field: string, value: any): string {\n let values: any[]\n\n if (typeof value === 'string') {\n // Parse comma-delimited string\n values = value.split(',').map(v => v.trim()).filter(v => v.length > 0)\n } else if (Array.isArray(value)) {\n values = value\n } else {\n values = [value]\n }\n\n if (values.length === 0) {\n return `1=1` // No values means all match\n }\n\n const placeholders = values.map(v => {\n this.params.push(v)\n return '?'\n }).join(', ')\n\n return `${field} NOT IN (${placeholders})`\n }\n\n /**\n * Build ALL condition (value must contain all items in list)\n * For SQLite, we'll check if a JSON array contains all values\n */\n private buildAll(field: string, value: any): string {\n let values: any[]\n\n if (typeof value === 'string') {\n values = value.split(',').map(v => v.trim()).filter(v => v.length > 0)\n } else if (Array.isArray(value)) {\n values = value\n } else {\n values = [value]\n }\n\n if (values.length === 0) {\n return `1=1`\n }\n\n // For SQLite, check if field contains all values using JSON functions\n // This assumes the field is a JSON array or comma-separated string\n const conditions = values.map(val => {\n this.params.push(`%${val}%`)\n return `${field} LIKE ?`\n })\n\n return `(${conditions.join(' AND ')})`\n }\n\n /**\n * Build EXISTS condition\n */\n private buildExists(field: string, value: boolean): string {\n if (value) {\n return `${field} IS NOT NULL AND ${field} != ''`\n } else {\n return `(${field} IS NULL OR ${field} = '')`\n }\n }\n\n /**\n * Sanitize field names to prevent SQL injection\n */\n private sanitizeFieldName(field: string): string {\n // Allow alphanumeric, underscores, dots (for JSON fields)\n const sanitized = field.replace(/[^a-zA-Z0-9_$.]/g, '')\n\n // Handle JSON field access (e.g., data.title -> json_extract(data, '$.title'))\n if (sanitized.includes('.')) {\n const [table, ...path] = sanitized.split('.')\n return `json_extract(${table}, '$.${path.join('.')}')`\n }\n\n return sanitized\n }\n\n /**\n * Parse filter from query string\n */\n static parseFromQuery(query: Record<string, any>): QueryFilter {\n const filter: QueryFilter = {}\n\n // Parse where clause from 'where' parameter (JSON string)\n if (query.where) {\n try {\n filter.where = typeof query.where === 'string'\n ? JSON.parse(query.where)\n : query.where\n } catch (e) {\n console.error('Failed to parse where clause:', e)\n }\n }\n\n // Initialize where clause if not present\n if (!filter.where) {\n filter.where = { and: [] }\n }\n if (!filter.where.and) {\n filter.where.and = []\n }\n\n // Parse simple field filters (status, collection_id, etc.)\n // These are convenience parameters that get converted to WHERE conditions\n const simpleFieldMappings: Record<string, string> = {\n 'status': 'status',\n 'collection_id': 'collection_id'\n }\n\n for (const [queryParam, dbField] of Object.entries(simpleFieldMappings)) {\n if (query[queryParam]) {\n filter.where.and.push({\n field: dbField,\n operator: 'equals',\n value: query[queryParam]\n })\n }\n }\n\n // Parse limit\n if (query.limit) {\n filter.limit = Math.min(parseInt(query.limit), 1000) // Max 1000\n }\n\n // Parse offset\n if (query.offset) {\n filter.offset = parseInt(query.offset)\n }\n\n // Parse sort\n if (query.sort) {\n try {\n filter.sort = typeof query.sort === 'string'\n ? JSON.parse(query.sort)\n : query.sort\n } catch (e) {\n console.error('Failed to parse sort clause:', e)\n }\n }\n\n return filter\n }\n}\n\n/**\n * Helper function to build query from filter\n */\nexport function buildQuery(table: string, filter: QueryFilter): QueryResult {\n const builder = new QueryFilterBuilder()\n return builder.build(table, filter)\n}\n","{\n \"name\": \"@sonicjs-cms/core\",\n \"version\": \"2.0.9\",\n \"description\": \"Core framework for SonicJS headless CMS - Edge-first, TypeScript-native CMS built for Cloudflare Workers\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./services\": {\n \"types\": \"./dist/services.d.ts\",\n \"import\": \"./dist/services.js\",\n \"require\": \"./dist/services.cjs\"\n },\n \"./middleware\": {\n \"types\": \"./dist/middleware.d.ts\",\n \"import\": \"./dist/middleware.js\",\n \"require\": \"./dist/middleware.cjs\"\n },\n \"./routes\": {\n \"types\": \"./dist/routes.d.ts\",\n \"import\": \"./dist/routes.js\",\n \"require\": \"./dist/routes.cjs\"\n },\n \"./templates\": {\n \"types\": \"./dist/templates.d.ts\",\n \"import\": \"./dist/templates.js\",\n \"require\": \"./dist/templates.cjs\"\n },\n \"./plugins\": {\n \"types\": \"./dist/plugins.d.ts\",\n \"import\": \"./dist/plugins.js\",\n \"require\": \"./dist/plugins.cjs\"\n },\n \"./utils\": {\n \"types\": \"./dist/utils.d.ts\",\n \"import\": \"./dist/utils.js\",\n \"require\": \"./dist/utils.cjs\"\n },\n \"./types\": {\n \"types\": \"./dist/types.d.ts\",\n \"import\": \"./dist/types.js\",\n \"require\": \"./dist/types.cjs\"\n }\n },\n \"files\": [\n \"dist\",\n \"migrations\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"type-check\": \"tsc --noEmit\",\n \"test\": \"vitest --run\",\n \"test:watch\": \"vitest\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"keywords\": [\n \"cms\",\n \"headless-cms\",\n \"cloudflare\",\n \"workers\",\n \"edge\",\n \"typescript\",\n \"hono\",\n \"content-management\",\n \"api\",\n \"sonicjs\"\n ],\n \"author\": \"SonicJS Team\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/sonicjs/sonicjs.git\",\n \"directory\": \"packages/core\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/sonicjs/sonicjs/issues\"\n },\n \"homepage\": \"https://sonicjs.com\",\n \"peerDependencies\": {\n \"@cloudflare/workers-types\": \"^4.0.0\",\n \"hono\": \"^4.0.0\",\n \"drizzle-orm\": \"^0.44.0\",\n \"zod\": \"^3.0.0 || ^4.0.0\"\n },\n \"dependencies\": {\n \"drizzle-zod\": \"^0.8.3\",\n \"marked\": \"^16.4.1\",\n \"highlight.js\": \"^11.11.1\",\n \"semver\": \"^7.7.3\"\n },\n \"devDependencies\": {\n \"@cloudflare/workers-types\": \"^4.20251014.0\",\n \"@types/node\": \"^24.9.2\",\n \"drizzle-orm\": \"^0.44.7\",\n \"hono\": \"^4.10.4\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.5\",\n \"zod\": \"^4.1.12\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","/**\n * Version utility\n *\n * Provides the current version of @sonicjs-cms/core package\n */\n\nimport pkg from '../../package.json'\n\nexport const SONICJS_VERSION = pkg.version\n\n/**\n * Get the current SonicJS core version\n */\nexport function getCoreVersion(): string {\n return SONICJS_VERSION\n}\n"]}
package/dist/index.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkOOV64BK4_cjs = require('./chunk-OOV64BK4.cjs');
3
+ var chunk4I25AGUR_cjs = require('./chunk-4I25AGUR.cjs');
4
4
  var chunkDOR2IU73_cjs = require('./chunk-DOR2IU73.cjs');
5
- var chunk3R7EQNGO_cjs = require('./chunk-3R7EQNGO.cjs');
6
- var chunkYGVWY6KO_cjs = require('./chunk-YGVWY6KO.cjs');
7
- var chunkKHNSPJ6X_cjs = require('./chunk-KHNSPJ6X.cjs');
8
- var chunk7XEESVSX_cjs = require('./chunk-7XEESVSX.cjs');
9
- var chunkHJZOA2O5_cjs = require('./chunk-HJZOA2O5.cjs');
10
- var chunkRSFXIU6A_cjs = require('./chunk-RSFXIU6A.cjs');
5
+ var chunkDYYAXDXI_cjs = require('./chunk-DYYAXDXI.cjs');
6
+ var chunkNBDPIRQS_cjs = require('./chunk-NBDPIRQS.cjs');
7
+ var chunkMABBKINE_cjs = require('./chunk-MABBKINE.cjs');
8
+ var chunkEYMHWJTW_cjs = require('./chunk-EYMHWJTW.cjs');
9
+ var chunkF5ESJXI2_cjs = require('./chunk-F5ESJXI2.cjs');
10
+ var chunkTMIRVVQ7_cjs = require('./chunk-TMIRVVQ7.cjs');
11
11
  var chunkRCQ2HIQD_cjs = require('./chunk-RCQ2HIQD.cjs');
12
12
  var chunkKYGRJCZM_cjs = require('./chunk-KYGRJCZM.cjs');
13
13
  require('./chunk-IGJUBJBW.cjs');
@@ -229,7 +229,7 @@ var DatabaseToolsService = class {
229
229
  };
230
230
 
231
231
  // src/templates/pages/admin-database-table.template.ts
232
- chunk7XEESVSX_cjs.init_admin_layout_catalyst_template();
232
+ chunkEYMHWJTW_cjs.init_admin_layout_catalyst_template();
233
233
  function renderDatabaseTablePage(data) {
234
234
  const totalPages = Math.ceil(data.totalRows / data.pageSize);
235
235
  const startRow = (data.currentPage - 1) * data.pageSize + 1;
@@ -478,7 +478,7 @@ function renderDatabaseTablePage(data) {
478
478
  user: data.user,
479
479
  content: pageContent
480
480
  };
481
- return chunk7XEESVSX_cjs.renderAdminLayoutCatalyst(layoutData);
481
+ return chunkEYMHWJTW_cjs.renderAdminLayoutCatalyst(layoutData);
482
482
  }
483
483
  function generatePageNumbers(currentPage, totalPages) {
484
484
  const pages = [];
@@ -553,7 +553,7 @@ function formatCellValue(value) {
553
553
  // src/plugins/core-plugins/database-tools-plugin/admin-routes.ts
554
554
  function createDatabaseToolsAdminRoutes() {
555
555
  const router2 = new hono.Hono();
556
- router2.use("*", chunk3R7EQNGO_cjs.requireAuth());
556
+ router2.use("*", chunkDYYAXDXI_cjs.requireAuth());
557
557
  router2.get("/api/stats", async (c) => {
558
558
  try {
559
559
  const user = c.get("user");
@@ -737,14 +737,14 @@ function createDatabaseToolsAdminRoutes() {
737
737
  // src/app.ts
738
738
  function createSonicJSApp(config = {}) {
739
739
  const app = new hono.Hono();
740
- const appVersion = config.version || chunkRSFXIU6A_cjs.getCoreVersion();
740
+ const appVersion = config.version || chunkTMIRVVQ7_cjs.getCoreVersion();
741
741
  const appName = config.name || "SonicJS AI";
742
742
  app.use("*", async (c, next) => {
743
743
  c.set("appVersion", appVersion);
744
744
  await next();
745
745
  });
746
- app.use("*", chunk3R7EQNGO_cjs.metricsMiddleware());
747
- app.use("*", chunk3R7EQNGO_cjs.bootstrapMiddleware());
746
+ app.use("*", chunkDYYAXDXI_cjs.metricsMiddleware());
747
+ app.use("*", chunkDYYAXDXI_cjs.bootstrapMiddleware());
748
748
  if (config.middleware?.beforeAuth) {
749
749
  for (const middleware of config.middleware.beforeAuth) {
750
750
  app.use("*", middleware);
@@ -761,20 +761,20 @@ function createSonicJSApp(config = {}) {
761
761
  app.use("*", middleware);
762
762
  }
763
763
  }
764
- app.route("/api", chunkOOV64BK4_cjs.api_default);
765
- app.route("/api/media", chunkOOV64BK4_cjs.api_media_default);
766
- app.route("/api/system", chunkOOV64BK4_cjs.api_system_default);
767
- app.route("/admin/api", chunkOOV64BK4_cjs.admin_api_default);
768
- app.route("/admin/dashboard", chunkOOV64BK4_cjs.router);
769
- app.route("/admin/collections", chunkOOV64BK4_cjs.adminCollectionsRoutes);
770
- app.route("/admin/settings", chunkOOV64BK4_cjs.adminSettingsRoutes);
764
+ app.route("/api", chunk4I25AGUR_cjs.api_default);
765
+ app.route("/api/media", chunk4I25AGUR_cjs.api_media_default);
766
+ app.route("/api/system", chunk4I25AGUR_cjs.api_system_default);
767
+ app.route("/admin/api", chunk4I25AGUR_cjs.admin_api_default);
768
+ app.route("/admin/dashboard", chunk4I25AGUR_cjs.router);
769
+ app.route("/admin/collections", chunk4I25AGUR_cjs.adminCollectionsRoutes);
770
+ app.route("/admin/settings", chunk4I25AGUR_cjs.adminSettingsRoutes);
771
771
  app.route("/admin/database-tools", createDatabaseToolsAdminRoutes());
772
- app.route("/admin/content", chunkOOV64BK4_cjs.admin_content_default);
773
- app.route("/admin/media", chunkOOV64BK4_cjs.adminMediaRoutes);
774
- app.route("/admin/plugins", chunkOOV64BK4_cjs.adminPluginRoutes);
775
- app.route("/admin/logs", chunkOOV64BK4_cjs.adminLogsRoutes);
776
- app.route("/admin", chunkOOV64BK4_cjs.userRoutes);
777
- app.route("/auth", chunkOOV64BK4_cjs.auth_default);
772
+ app.route("/admin/content", chunk4I25AGUR_cjs.admin_content_default);
773
+ app.route("/admin/media", chunk4I25AGUR_cjs.adminMediaRoutes);
774
+ app.route("/admin/plugins", chunk4I25AGUR_cjs.adminPluginRoutes);
775
+ app.route("/admin/logs", chunk4I25AGUR_cjs.adminLogsRoutes);
776
+ app.route("/admin", chunk4I25AGUR_cjs.userRoutes);
777
+ app.route("/auth", chunk4I25AGUR_cjs.auth_default);
778
778
  app.get("/files/*", async (c) => {
779
779
  try {
780
780
  const url = new URL(c.req.url);
@@ -838,87 +838,87 @@ function createDb(d1$1) {
838
838
  }
839
839
 
840
840
  // src/index.ts
841
- var VERSION = chunkRSFXIU6A_cjs.package_default.version;
841
+ var VERSION = chunkTMIRVVQ7_cjs.package_default.version;
842
842
 
843
843
  Object.defineProperty(exports, "ROUTES_INFO", {
844
844
  enumerable: true,
845
- get: function () { return chunkOOV64BK4_cjs.ROUTES_INFO; }
845
+ get: function () { return chunk4I25AGUR_cjs.ROUTES_INFO; }
846
846
  });
847
847
  Object.defineProperty(exports, "adminApiRoutes", {
848
848
  enumerable: true,
849
- get: function () { return chunkOOV64BK4_cjs.admin_api_default; }
849
+ get: function () { return chunk4I25AGUR_cjs.admin_api_default; }
850
850
  });
851
851
  Object.defineProperty(exports, "adminCheckboxRoutes", {
852
852
  enumerable: true,
853
- get: function () { return chunkOOV64BK4_cjs.adminCheckboxRoutes; }
853
+ get: function () { return chunk4I25AGUR_cjs.adminCheckboxRoutes; }
854
854
  });
855
855
  Object.defineProperty(exports, "adminCodeExamplesRoutes", {
856
856
  enumerable: true,
857
- get: function () { return chunkOOV64BK4_cjs.admin_code_examples_default; }
857
+ get: function () { return chunk4I25AGUR_cjs.admin_code_examples_default; }
858
858
  });
859
859
  Object.defineProperty(exports, "adminCollectionsRoutes", {
860
860
  enumerable: true,
861
- get: function () { return chunkOOV64BK4_cjs.adminCollectionsRoutes; }
861
+ get: function () { return chunk4I25AGUR_cjs.adminCollectionsRoutes; }
862
862
  });
863
863
  Object.defineProperty(exports, "adminContentRoutes", {
864
864
  enumerable: true,
865
- get: function () { return chunkOOV64BK4_cjs.admin_content_default; }
865
+ get: function () { return chunk4I25AGUR_cjs.admin_content_default; }
866
866
  });
867
867
  Object.defineProperty(exports, "adminDashboardRoutes", {
868
868
  enumerable: true,
869
- get: function () { return chunkOOV64BK4_cjs.router; }
869
+ get: function () { return chunk4I25AGUR_cjs.router; }
870
870
  });
871
871
  Object.defineProperty(exports, "adminDesignRoutes", {
872
872
  enumerable: true,
873
- get: function () { return chunkOOV64BK4_cjs.adminDesignRoutes; }
873
+ get: function () { return chunk4I25AGUR_cjs.adminDesignRoutes; }
874
874
  });
875
875
  Object.defineProperty(exports, "adminFAQRoutes", {
876
876
  enumerable: true,
877
- get: function () { return chunkOOV64BK4_cjs.admin_faq_default; }
877
+ get: function () { return chunk4I25AGUR_cjs.admin_faq_default; }
878
878
  });
879
879
  Object.defineProperty(exports, "adminLogsRoutes", {
880
880
  enumerable: true,
881
- get: function () { return chunkOOV64BK4_cjs.adminLogsRoutes; }
881
+ get: function () { return chunk4I25AGUR_cjs.adminLogsRoutes; }
882
882
  });
883
883
  Object.defineProperty(exports, "adminMediaRoutes", {
884
884
  enumerable: true,
885
- get: function () { return chunkOOV64BK4_cjs.adminMediaRoutes; }
885
+ get: function () { return chunk4I25AGUR_cjs.adminMediaRoutes; }
886
886
  });
887
887
  Object.defineProperty(exports, "adminPluginRoutes", {
888
888
  enumerable: true,
889
- get: function () { return chunkOOV64BK4_cjs.adminPluginRoutes; }
889
+ get: function () { return chunk4I25AGUR_cjs.adminPluginRoutes; }
890
890
  });
891
891
  Object.defineProperty(exports, "adminSettingsRoutes", {
892
892
  enumerable: true,
893
- get: function () { return chunkOOV64BK4_cjs.adminSettingsRoutes; }
893
+ get: function () { return chunk4I25AGUR_cjs.adminSettingsRoutes; }
894
894
  });
895
895
  Object.defineProperty(exports, "adminTestimonialsRoutes", {
896
896
  enumerable: true,
897
- get: function () { return chunkOOV64BK4_cjs.admin_testimonials_default; }
897
+ get: function () { return chunk4I25AGUR_cjs.admin_testimonials_default; }
898
898
  });
899
899
  Object.defineProperty(exports, "adminUsersRoutes", {
900
900
  enumerable: true,
901
- get: function () { return chunkOOV64BK4_cjs.userRoutes; }
901
+ get: function () { return chunk4I25AGUR_cjs.userRoutes; }
902
902
  });
903
903
  Object.defineProperty(exports, "apiContentCrudRoutes", {
904
904
  enumerable: true,
905
- get: function () { return chunkOOV64BK4_cjs.api_content_crud_default; }
905
+ get: function () { return chunk4I25AGUR_cjs.api_content_crud_default; }
906
906
  });
907
907
  Object.defineProperty(exports, "apiMediaRoutes", {
908
908
  enumerable: true,
909
- get: function () { return chunkOOV64BK4_cjs.api_media_default; }
909
+ get: function () { return chunk4I25AGUR_cjs.api_media_default; }
910
910
  });
911
911
  Object.defineProperty(exports, "apiRoutes", {
912
912
  enumerable: true,
913
- get: function () { return chunkOOV64BK4_cjs.api_default; }
913
+ get: function () { return chunk4I25AGUR_cjs.api_default; }
914
914
  });
915
915
  Object.defineProperty(exports, "apiSystemRoutes", {
916
916
  enumerable: true,
917
- get: function () { return chunkOOV64BK4_cjs.api_system_default; }
917
+ get: function () { return chunk4I25AGUR_cjs.api_system_default; }
918
918
  });
919
919
  Object.defineProperty(exports, "authRoutes", {
920
920
  enumerable: true,
921
- get: function () { return chunkOOV64BK4_cjs.auth_default; }
921
+ get: function () { return chunk4I25AGUR_cjs.auth_default; }
922
922
  });
923
923
  Object.defineProperty(exports, "Logger", {
924
924
  enumerable: true,
@@ -1086,231 +1086,235 @@ Object.defineProperty(exports, "workflowHistory", {
1086
1086
  });
1087
1087
  Object.defineProperty(exports, "AuthManager", {
1088
1088
  enumerable: true,
1089
- get: function () { return chunk3R7EQNGO_cjs.AuthManager; }
1089
+ get: function () { return chunkDYYAXDXI_cjs.AuthManager; }
1090
1090
  });
1091
1091
  Object.defineProperty(exports, "PermissionManager", {
1092
1092
  enumerable: true,
1093
- get: function () { return chunk3R7EQNGO_cjs.PermissionManager; }
1093
+ get: function () { return chunkDYYAXDXI_cjs.PermissionManager; }
1094
1094
  });
1095
1095
  Object.defineProperty(exports, "bootstrapMiddleware", {
1096
1096
  enumerable: true,
1097
- get: function () { return chunk3R7EQNGO_cjs.bootstrapMiddleware; }
1097
+ get: function () { return chunkDYYAXDXI_cjs.bootstrapMiddleware; }
1098
1098
  });
1099
1099
  Object.defineProperty(exports, "cacheHeaders", {
1100
1100
  enumerable: true,
1101
- get: function () { return chunk3R7EQNGO_cjs.cacheHeaders; }
1101
+ get: function () { return chunkDYYAXDXI_cjs.cacheHeaders; }
1102
1102
  });
1103
1103
  Object.defineProperty(exports, "compressionMiddleware", {
1104
1104
  enumerable: true,
1105
- get: function () { return chunk3R7EQNGO_cjs.compressionMiddleware; }
1105
+ get: function () { return chunkDYYAXDXI_cjs.compressionMiddleware; }
1106
1106
  });
1107
1107
  Object.defineProperty(exports, "detailedLoggingMiddleware", {
1108
1108
  enumerable: true,
1109
- get: function () { return chunk3R7EQNGO_cjs.detailedLoggingMiddleware; }
1109
+ get: function () { return chunkDYYAXDXI_cjs.detailedLoggingMiddleware; }
1110
1110
  });
1111
1111
  Object.defineProperty(exports, "getActivePlugins", {
1112
1112
  enumerable: true,
1113
- get: function () { return chunk3R7EQNGO_cjs.getActivePlugins; }
1113
+ get: function () { return chunkDYYAXDXI_cjs.getActivePlugins; }
1114
1114
  });
1115
1115
  Object.defineProperty(exports, "isPluginActive", {
1116
1116
  enumerable: true,
1117
- get: function () { return chunk3R7EQNGO_cjs.isPluginActive; }
1117
+ get: function () { return chunkDYYAXDXI_cjs.isPluginActive; }
1118
1118
  });
1119
1119
  Object.defineProperty(exports, "logActivity", {
1120
1120
  enumerable: true,
1121
- get: function () { return chunk3R7EQNGO_cjs.logActivity; }
1121
+ get: function () { return chunkDYYAXDXI_cjs.logActivity; }
1122
1122
  });
1123
1123
  Object.defineProperty(exports, "loggingMiddleware", {
1124
1124
  enumerable: true,
1125
- get: function () { return chunk3R7EQNGO_cjs.loggingMiddleware; }
1125
+ get: function () { return chunkDYYAXDXI_cjs.loggingMiddleware; }
1126
1126
  });
1127
1127
  Object.defineProperty(exports, "optionalAuth", {
1128
1128
  enumerable: true,
1129
- get: function () { return chunk3R7EQNGO_cjs.optionalAuth; }
1129
+ get: function () { return chunkDYYAXDXI_cjs.optionalAuth; }
1130
1130
  });
1131
1131
  Object.defineProperty(exports, "performanceLoggingMiddleware", {
1132
1132
  enumerable: true,
1133
- get: function () { return chunk3R7EQNGO_cjs.performanceLoggingMiddleware; }
1133
+ get: function () { return chunkDYYAXDXI_cjs.performanceLoggingMiddleware; }
1134
1134
  });
1135
1135
  Object.defineProperty(exports, "requireActivePlugin", {
1136
1136
  enumerable: true,
1137
- get: function () { return chunk3R7EQNGO_cjs.requireActivePlugin; }
1137
+ get: function () { return chunkDYYAXDXI_cjs.requireActivePlugin; }
1138
1138
  });
1139
1139
  Object.defineProperty(exports, "requireActivePlugins", {
1140
1140
  enumerable: true,
1141
- get: function () { return chunk3R7EQNGO_cjs.requireActivePlugins; }
1141
+ get: function () { return chunkDYYAXDXI_cjs.requireActivePlugins; }
1142
1142
  });
1143
1143
  Object.defineProperty(exports, "requireAnyPermission", {
1144
1144
  enumerable: true,
1145
- get: function () { return chunk3R7EQNGO_cjs.requireAnyPermission; }
1145
+ get: function () { return chunkDYYAXDXI_cjs.requireAnyPermission; }
1146
1146
  });
1147
1147
  Object.defineProperty(exports, "requireAuth", {
1148
1148
  enumerable: true,
1149
- get: function () { return chunk3R7EQNGO_cjs.requireAuth; }
1149
+ get: function () { return chunkDYYAXDXI_cjs.requireAuth; }
1150
1150
  });
1151
1151
  Object.defineProperty(exports, "requirePermission", {
1152
1152
  enumerable: true,
1153
- get: function () { return chunk3R7EQNGO_cjs.requirePermission; }
1153
+ get: function () { return chunkDYYAXDXI_cjs.requirePermission; }
1154
1154
  });
1155
1155
  Object.defineProperty(exports, "requireRole", {
1156
1156
  enumerable: true,
1157
- get: function () { return chunk3R7EQNGO_cjs.requireRole; }
1157
+ get: function () { return chunkDYYAXDXI_cjs.requireRole; }
1158
1158
  });
1159
1159
  Object.defineProperty(exports, "securityHeaders", {
1160
1160
  enumerable: true,
1161
- get: function () { return chunk3R7EQNGO_cjs.securityHeaders; }
1161
+ get: function () { return chunkDYYAXDXI_cjs.securityHeaders; }
1162
1162
  });
1163
1163
  Object.defineProperty(exports, "securityLoggingMiddleware", {
1164
1164
  enumerable: true,
1165
- get: function () { return chunk3R7EQNGO_cjs.securityLoggingMiddleware; }
1165
+ get: function () { return chunkDYYAXDXI_cjs.securityLoggingMiddleware; }
1166
1166
  });
1167
1167
  Object.defineProperty(exports, "MigrationService", {
1168
1168
  enumerable: true,
1169
- get: function () { return chunkYGVWY6KO_cjs.MigrationService; }
1169
+ get: function () { return chunkNBDPIRQS_cjs.MigrationService; }
1170
1170
  });
1171
1171
  Object.defineProperty(exports, "PluginBootstrapService", {
1172
1172
  enumerable: true,
1173
- get: function () { return chunkYGVWY6KO_cjs.PluginBootstrapService; }
1173
+ get: function () { return chunkNBDPIRQS_cjs.PluginBootstrapService; }
1174
1174
  });
1175
1175
  Object.defineProperty(exports, "PluginServiceClass", {
1176
1176
  enumerable: true,
1177
- get: function () { return chunkYGVWY6KO_cjs.PluginService; }
1177
+ get: function () { return chunkNBDPIRQS_cjs.PluginService; }
1178
1178
  });
1179
1179
  Object.defineProperty(exports, "cleanupRemovedCollections", {
1180
1180
  enumerable: true,
1181
- get: function () { return chunkYGVWY6KO_cjs.cleanupRemovedCollections; }
1181
+ get: function () { return chunkNBDPIRQS_cjs.cleanupRemovedCollections; }
1182
1182
  });
1183
1183
  Object.defineProperty(exports, "fullCollectionSync", {
1184
1184
  enumerable: true,
1185
- get: function () { return chunkYGVWY6KO_cjs.fullCollectionSync; }
1185
+ get: function () { return chunkNBDPIRQS_cjs.fullCollectionSync; }
1186
1186
  });
1187
1187
  Object.defineProperty(exports, "getAvailableCollectionNames", {
1188
1188
  enumerable: true,
1189
- get: function () { return chunkYGVWY6KO_cjs.getAvailableCollectionNames; }
1189
+ get: function () { return chunkNBDPIRQS_cjs.getAvailableCollectionNames; }
1190
1190
  });
1191
1191
  Object.defineProperty(exports, "getManagedCollections", {
1192
1192
  enumerable: true,
1193
- get: function () { return chunkYGVWY6KO_cjs.getManagedCollections; }
1193
+ get: function () { return chunkNBDPIRQS_cjs.getManagedCollections; }
1194
1194
  });
1195
1195
  Object.defineProperty(exports, "isCollectionManaged", {
1196
1196
  enumerable: true,
1197
- get: function () { return chunkYGVWY6KO_cjs.isCollectionManaged; }
1197
+ get: function () { return chunkNBDPIRQS_cjs.isCollectionManaged; }
1198
1198
  });
1199
1199
  Object.defineProperty(exports, "loadCollectionConfig", {
1200
1200
  enumerable: true,
1201
- get: function () { return chunkYGVWY6KO_cjs.loadCollectionConfig; }
1201
+ get: function () { return chunkNBDPIRQS_cjs.loadCollectionConfig; }
1202
1202
  });
1203
1203
  Object.defineProperty(exports, "loadCollectionConfigs", {
1204
1204
  enumerable: true,
1205
- get: function () { return chunkYGVWY6KO_cjs.loadCollectionConfigs; }
1205
+ get: function () { return chunkNBDPIRQS_cjs.loadCollectionConfigs; }
1206
+ });
1207
+ Object.defineProperty(exports, "registerCollections", {
1208
+ enumerable: true,
1209
+ get: function () { return chunkNBDPIRQS_cjs.registerCollections; }
1206
1210
  });
1207
1211
  Object.defineProperty(exports, "syncCollection", {
1208
1212
  enumerable: true,
1209
- get: function () { return chunkYGVWY6KO_cjs.syncCollection; }
1213
+ get: function () { return chunkNBDPIRQS_cjs.syncCollection; }
1210
1214
  });
1211
1215
  Object.defineProperty(exports, "syncCollections", {
1212
1216
  enumerable: true,
1213
- get: function () { return chunkYGVWY6KO_cjs.syncCollections; }
1217
+ get: function () { return chunkNBDPIRQS_cjs.syncCollections; }
1214
1218
  });
1215
1219
  Object.defineProperty(exports, "validateCollectionConfig", {
1216
1220
  enumerable: true,
1217
- get: function () { return chunkYGVWY6KO_cjs.validateCollectionConfig; }
1221
+ get: function () { return chunkNBDPIRQS_cjs.validateCollectionConfig; }
1218
1222
  });
1219
1223
  Object.defineProperty(exports, "renderFilterBar", {
1220
1224
  enumerable: true,
1221
- get: function () { return chunkKHNSPJ6X_cjs.renderFilterBar; }
1225
+ get: function () { return chunkMABBKINE_cjs.renderFilterBar; }
1222
1226
  });
1223
1227
  Object.defineProperty(exports, "getConfirmationDialogScript", {
1224
1228
  enumerable: true,
1225
- get: function () { return chunk7XEESVSX_cjs.getConfirmationDialogScript; }
1229
+ get: function () { return chunkEYMHWJTW_cjs.getConfirmationDialogScript; }
1226
1230
  });
1227
1231
  Object.defineProperty(exports, "renderAlert", {
1228
1232
  enumerable: true,
1229
- get: function () { return chunk7XEESVSX_cjs.renderAlert; }
1233
+ get: function () { return chunkEYMHWJTW_cjs.renderAlert; }
1230
1234
  });
1231
1235
  Object.defineProperty(exports, "renderConfirmationDialog", {
1232
1236
  enumerable: true,
1233
- get: function () { return chunk7XEESVSX_cjs.renderConfirmationDialog; }
1237
+ get: function () { return chunkEYMHWJTW_cjs.renderConfirmationDialog; }
1234
1238
  });
1235
1239
  Object.defineProperty(exports, "renderForm", {
1236
1240
  enumerable: true,
1237
- get: function () { return chunk7XEESVSX_cjs.renderForm; }
1241
+ get: function () { return chunkEYMHWJTW_cjs.renderForm; }
1238
1242
  });
1239
1243
  Object.defineProperty(exports, "renderFormField", {
1240
1244
  enumerable: true,
1241
- get: function () { return chunk7XEESVSX_cjs.renderFormField; }
1245
+ get: function () { return chunkEYMHWJTW_cjs.renderFormField; }
1242
1246
  });
1243
1247
  Object.defineProperty(exports, "renderPagination", {
1244
1248
  enumerable: true,
1245
- get: function () { return chunk7XEESVSX_cjs.renderPagination; }
1249
+ get: function () { return chunkEYMHWJTW_cjs.renderPagination; }
1246
1250
  });
1247
1251
  Object.defineProperty(exports, "renderTable", {
1248
1252
  enumerable: true,
1249
- get: function () { return chunk7XEESVSX_cjs.renderTable; }
1253
+ get: function () { return chunkEYMHWJTW_cjs.renderTable; }
1250
1254
  });
1251
1255
  Object.defineProperty(exports, "HookSystemImpl", {
1252
1256
  enumerable: true,
1253
- get: function () { return chunkHJZOA2O5_cjs.HookSystemImpl; }
1257
+ get: function () { return chunkF5ESJXI2_cjs.HookSystemImpl; }
1254
1258
  });
1255
1259
  Object.defineProperty(exports, "HookUtils", {
1256
1260
  enumerable: true,
1257
- get: function () { return chunkHJZOA2O5_cjs.HookUtils; }
1261
+ get: function () { return chunkF5ESJXI2_cjs.HookUtils; }
1258
1262
  });
1259
1263
  Object.defineProperty(exports, "PluginManagerClass", {
1260
1264
  enumerable: true,
1261
- get: function () { return chunkHJZOA2O5_cjs.PluginManager; }
1265
+ get: function () { return chunkF5ESJXI2_cjs.PluginManager; }
1262
1266
  });
1263
1267
  Object.defineProperty(exports, "PluginRegistryImpl", {
1264
1268
  enumerable: true,
1265
- get: function () { return chunkHJZOA2O5_cjs.PluginRegistryImpl; }
1269
+ get: function () { return chunkF5ESJXI2_cjs.PluginRegistryImpl; }
1266
1270
  });
1267
1271
  Object.defineProperty(exports, "PluginValidatorClass", {
1268
1272
  enumerable: true,
1269
- get: function () { return chunkHJZOA2O5_cjs.PluginValidator; }
1273
+ get: function () { return chunkF5ESJXI2_cjs.PluginValidator; }
1270
1274
  });
1271
1275
  Object.defineProperty(exports, "ScopedHookSystemClass", {
1272
1276
  enumerable: true,
1273
- get: function () { return chunkHJZOA2O5_cjs.ScopedHookSystem; }
1277
+ get: function () { return chunkF5ESJXI2_cjs.ScopedHookSystem; }
1274
1278
  });
1275
1279
  Object.defineProperty(exports, "QueryFilterBuilder", {
1276
1280
  enumerable: true,
1277
- get: function () { return chunkRSFXIU6A_cjs.QueryFilterBuilder; }
1281
+ get: function () { return chunkTMIRVVQ7_cjs.QueryFilterBuilder; }
1278
1282
  });
1279
1283
  Object.defineProperty(exports, "SONICJS_VERSION", {
1280
1284
  enumerable: true,
1281
- get: function () { return chunkRSFXIU6A_cjs.SONICJS_VERSION; }
1285
+ get: function () { return chunkTMIRVVQ7_cjs.SONICJS_VERSION; }
1282
1286
  });
1283
1287
  Object.defineProperty(exports, "TemplateRenderer", {
1284
1288
  enumerable: true,
1285
- get: function () { return chunkRSFXIU6A_cjs.TemplateRenderer; }
1289
+ get: function () { return chunkTMIRVVQ7_cjs.TemplateRenderer; }
1286
1290
  });
1287
1291
  Object.defineProperty(exports, "buildQuery", {
1288
1292
  enumerable: true,
1289
- get: function () { return chunkRSFXIU6A_cjs.buildQuery; }
1293
+ get: function () { return chunkTMIRVVQ7_cjs.buildQuery; }
1290
1294
  });
1291
1295
  Object.defineProperty(exports, "escapeHtml", {
1292
1296
  enumerable: true,
1293
- get: function () { return chunkRSFXIU6A_cjs.escapeHtml; }
1297
+ get: function () { return chunkTMIRVVQ7_cjs.escapeHtml; }
1294
1298
  });
1295
1299
  Object.defineProperty(exports, "getCoreVersion", {
1296
1300
  enumerable: true,
1297
- get: function () { return chunkRSFXIU6A_cjs.getCoreVersion; }
1301
+ get: function () { return chunkTMIRVVQ7_cjs.getCoreVersion; }
1298
1302
  });
1299
1303
  Object.defineProperty(exports, "renderTemplate", {
1300
1304
  enumerable: true,
1301
- get: function () { return chunkRSFXIU6A_cjs.renderTemplate; }
1305
+ get: function () { return chunkTMIRVVQ7_cjs.renderTemplate; }
1302
1306
  });
1303
1307
  Object.defineProperty(exports, "sanitizeInput", {
1304
1308
  enumerable: true,
1305
- get: function () { return chunkRSFXIU6A_cjs.sanitizeInput; }
1309
+ get: function () { return chunkTMIRVVQ7_cjs.sanitizeInput; }
1306
1310
  });
1307
1311
  Object.defineProperty(exports, "sanitizeObject", {
1308
1312
  enumerable: true,
1309
- get: function () { return chunkRSFXIU6A_cjs.sanitizeObject; }
1313
+ get: function () { return chunkTMIRVVQ7_cjs.sanitizeObject; }
1310
1314
  });
1311
1315
  Object.defineProperty(exports, "templateRenderer", {
1312
1316
  enumerable: true,
1313
- get: function () { return chunkRSFXIU6A_cjs.templateRenderer; }
1317
+ get: function () { return chunkTMIRVVQ7_cjs.templateRenderer; }
1314
1318
  });
1315
1319
  Object.defineProperty(exports, "metricsTracker", {
1316
1320
  enumerable: true,