@revealui/core 0.0.1-pre.4 → 0.2.1

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 (622) hide show
  1. package/LICENSE +22 -202
  2. package/README.md +108 -152
  3. package/dist/api/compression.d.ts +83 -0
  4. package/dist/api/compression.d.ts.map +1 -0
  5. package/dist/api/compression.js +233 -0
  6. package/dist/api/payload-optimization.d.ts +138 -0
  7. package/dist/api/payload-optimization.d.ts.map +1 -0
  8. package/dist/api/payload-optimization.js +320 -0
  9. package/dist/api/rate-limit.d.ts +113 -0
  10. package/dist/api/rate-limit.d.ts.map +1 -0
  11. package/dist/api/rate-limit.js +316 -0
  12. package/dist/api/response-cache.d.ts +125 -0
  13. package/dist/api/response-cache.d.ts.map +1 -0
  14. package/dist/api/response-cache.js +335 -0
  15. package/dist/api/rest.d.ts +54 -0
  16. package/dist/api/rest.d.ts.map +1 -0
  17. package/dist/api/rest.js +464 -0
  18. package/dist/auth/access.d.ts +25 -0
  19. package/dist/auth/access.d.ts.map +1 -0
  20. package/dist/auth/access.js +20 -0
  21. package/dist/auth/index.d.ts +2 -0
  22. package/dist/auth/index.d.ts.map +1 -0
  23. package/dist/auth/index.js +2 -0
  24. package/dist/cache/query-cache.d.ts +98 -0
  25. package/dist/cache/query-cache.d.ts.map +1 -0
  26. package/dist/cache/query-cache.js +260 -0
  27. package/dist/caching/app-cache.d.ts +237 -0
  28. package/dist/caching/app-cache.d.ts.map +1 -0
  29. package/dist/caching/app-cache.js +430 -0
  30. package/dist/caching/cdn-config.d.ts +155 -0
  31. package/dist/caching/cdn-config.d.ts.map +1 -0
  32. package/dist/caching/cdn-config.js +411 -0
  33. package/dist/caching/edge-cache.d.ts +177 -0
  34. package/dist/caching/edge-cache.d.ts.map +1 -0
  35. package/dist/caching/edge-cache.js +385 -0
  36. package/dist/caching/service-worker.d.ts +154 -0
  37. package/dist/caching/service-worker.d.ts.map +1 -0
  38. package/dist/caching/service-worker.js +437 -0
  39. package/dist/client/admin/RichText.d.ts +12 -0
  40. package/dist/client/admin/RichText.d.ts.map +1 -0
  41. package/dist/client/admin/RichText.js +5 -0
  42. package/dist/client/admin/components/AdminDashboard.d.ts +7 -0
  43. package/dist/client/admin/components/AdminDashboard.d.ts.map +1 -0
  44. package/dist/client/admin/components/AdminDashboard.js +318 -0
  45. package/dist/client/admin/components/CollectionList.d.ts +16 -0
  46. package/dist/client/admin/components/CollectionList.d.ts.map +1 -0
  47. package/dist/client/admin/components/CollectionList.js +67 -0
  48. package/dist/client/admin/components/DocumentForm.d.ts +11 -0
  49. package/dist/client/admin/components/DocumentForm.d.ts.map +1 -0
  50. package/dist/client/admin/components/DocumentForm.js +99 -0
  51. package/dist/client/admin/components/GlobalForm.d.ts +11 -0
  52. package/dist/client/admin/components/GlobalForm.d.ts.map +1 -0
  53. package/dist/client/admin/components/GlobalForm.js +74 -0
  54. package/dist/client/admin/i18n/en.d.ts +25 -0
  55. package/dist/client/admin/i18n/en.d.ts.map +1 -0
  56. package/dist/client/admin/i18n/en.js +25 -0
  57. package/dist/client/admin/index.d.ts +10 -0
  58. package/dist/client/admin/index.d.ts.map +1 -0
  59. package/dist/client/admin/index.js +10 -0
  60. package/dist/client/admin/layout.d.ts +10 -0
  61. package/dist/client/admin/layout.d.ts.map +1 -0
  62. package/dist/client/admin/layout.js +6 -0
  63. package/dist/client/admin/page.d.ts +38 -0
  64. package/dist/client/admin/page.d.ts.map +1 -0
  65. package/dist/client/admin/page.js +15 -0
  66. package/dist/client/admin/utils/apiClient.d.ts +110 -0
  67. package/dist/client/admin/utils/apiClient.d.ts.map +1 -0
  68. package/dist/client/admin/utils/apiClient.js +220 -0
  69. package/dist/client/admin/utils/auth.d.ts +23 -0
  70. package/dist/client/admin/utils/auth.d.ts.map +1 -0
  71. package/dist/client/admin/utils/auth.js +52 -0
  72. package/dist/client/admin/utils/index.d.ts +6 -0
  73. package/dist/client/admin/utils/index.d.ts.map +1 -0
  74. package/dist/client/admin/utils/index.js +5 -0
  75. package/dist/client/admin/utils/serializeConfig.d.ts +7 -0
  76. package/dist/client/admin/utils/serializeConfig.d.ts.map +1 -0
  77. package/dist/client/admin/utils/serializeConfig.js +35 -0
  78. package/dist/client/hooks.d.ts +18 -0
  79. package/dist/client/hooks.d.ts.map +1 -0
  80. package/dist/client/hooks.js +29 -0
  81. package/dist/client/http/client.d.ts +15 -0
  82. package/dist/client/http/client.d.ts.map +1 -0
  83. package/dist/client/http/client.js +49 -0
  84. package/dist/client/http/fetchBanner.d.ts +18 -0
  85. package/dist/client/http/fetchBanner.d.ts.map +1 -0
  86. package/dist/client/http/fetchBanner.js +44 -0
  87. package/dist/client/http/fetchCard.d.ts +18 -0
  88. package/dist/client/http/fetchCard.d.ts.map +1 -0
  89. package/dist/client/http/fetchCard.js +46 -0
  90. package/dist/client/http/fetchEvents.d.ts +18 -0
  91. package/dist/client/http/fetchEvents.d.ts.map +1 -0
  92. package/dist/client/http/fetchEvents.js +44 -0
  93. package/dist/client/http/fetchHero.d.ts +17 -0
  94. package/dist/client/http/fetchHero.d.ts.map +1 -0
  95. package/dist/client/http/fetchHero.js +55 -0
  96. package/dist/client/http/fetchMainInfos.d.ts +17 -0
  97. package/dist/client/http/fetchMainInfos.d.ts.map +1 -0
  98. package/dist/client/http/fetchMainInfos.js +44 -0
  99. package/dist/client/http/fetchVideos.d.ts +13 -0
  100. package/dist/client/http/fetchVideos.d.ts.map +1 -0
  101. package/dist/client/http/fetchVideos.js +36 -0
  102. package/dist/client/http/index.d.ts +19 -0
  103. package/dist/client/http/index.d.ts.map +1 -0
  104. package/dist/client/http/index.js +11 -0
  105. package/dist/client/index.d.ts +11 -0
  106. package/dist/client/index.d.ts.map +1 -0
  107. package/dist/client/index.js +13 -0
  108. package/dist/client/richtext/RichTextEditor.d.ts +48 -0
  109. package/dist/client/richtext/RichTextEditor.d.ts.map +1 -0
  110. package/dist/client/richtext/RichTextEditor.js +360 -0
  111. package/dist/client/richtext/components/ImageNodeComponent.d.ts +9 -0
  112. package/dist/client/richtext/components/ImageNodeComponent.d.ts.map +1 -0
  113. package/dist/client/richtext/components/ImageNodeComponent.js +99 -0
  114. package/dist/client/richtext/components/ImageUploadButton.d.ts +11 -0
  115. package/dist/client/richtext/components/ImageUploadButton.d.ts.map +1 -0
  116. package/dist/client/richtext/components/ImageUploadButton.js +103 -0
  117. package/dist/client/richtext/index.d.ts +92 -0
  118. package/dist/client/richtext/index.d.ts.map +1 -0
  119. package/dist/client/richtext/index.js +74 -0
  120. package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts +20 -0
  121. package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts.map +1 -0
  122. package/dist/client/richtext/nodes/DecoratorBlockNode.js +29 -0
  123. package/dist/client/richtext/nodes/ImageNode.d.ts +51 -0
  124. package/dist/client/richtext/nodes/ImageNode.d.ts.map +1 -0
  125. package/dist/client/richtext/nodes/ImageNode.js +95 -0
  126. package/dist/client/richtext/plugins/CollaborationPlugin.d.ts +13 -0
  127. package/dist/client/richtext/plugins/CollaborationPlugin.d.ts.map +1 -0
  128. package/dist/client/richtext/plugins/CollaborationPlugin.js +8 -0
  129. package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts +4 -0
  130. package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts.map +1 -0
  131. package/dist/client/richtext/plugins/CursorsOverlayPlugin.js +50 -0
  132. package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts +7 -0
  133. package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts.map +1 -0
  134. package/dist/client/richtext/plugins/FloatingToolbarPlugin.js +248 -0
  135. package/dist/client/richtext/plugins/ImagePlugin.d.ts +3 -0
  136. package/dist/client/richtext/plugins/ImagePlugin.d.ts.map +1 -0
  137. package/dist/client/richtext/plugins/ImagePlugin.js +73 -0
  138. package/dist/client/richtext/plugins/PastePlugin.d.ts +2 -0
  139. package/dist/client/richtext/plugins/PastePlugin.d.ts.map +1 -0
  140. package/dist/client/richtext/plugins/PastePlugin.js +36 -0
  141. package/dist/client/richtext/plugins/ToolbarPlugin.d.ts +8 -0
  142. package/dist/client/richtext/plugins/ToolbarPlugin.d.ts.map +1 -0
  143. package/dist/client/richtext/plugins/ToolbarPlugin.js +204 -0
  144. package/dist/client/ui/index.d.ts +111 -0
  145. package/dist/client/ui/index.d.ts.map +1 -0
  146. package/dist/client/ui/index.js +130 -0
  147. package/dist/collections/CollectionOperations.d.ts +27 -0
  148. package/dist/collections/CollectionOperations.d.ts.map +1 -0
  149. package/dist/collections/CollectionOperations.js +34 -0
  150. package/dist/collections/hooks.d.ts +11 -0
  151. package/dist/collections/hooks.d.ts.map +1 -0
  152. package/dist/collections/hooks.js +35 -0
  153. package/dist/collections/index.d.ts +2 -0
  154. package/dist/collections/index.d.ts.map +1 -0
  155. package/dist/collections/index.js +1 -0
  156. package/dist/collections/operations/create.d.ts +10 -0
  157. package/dist/collections/operations/create.d.ts.map +1 -0
  158. package/dist/collections/operations/create.js +101 -0
  159. package/dist/collections/operations/delete.d.ts +10 -0
  160. package/dist/collections/operations/delete.d.ts.map +1 -0
  161. package/dist/collections/operations/delete.js +16 -0
  162. package/dist/collections/operations/fieldHooks.d.ts +21 -0
  163. package/dist/collections/operations/fieldHooks.d.ts.map +1 -0
  164. package/dist/collections/operations/fieldHooks.js +51 -0
  165. package/dist/collections/operations/find.d.ts +10 -0
  166. package/dist/collections/operations/find.d.ts.map +1 -0
  167. package/dist/collections/operations/find.js +124 -0
  168. package/dist/collections/operations/findById.d.ts +15 -0
  169. package/dist/collections/operations/findById.d.ts.map +1 -0
  170. package/dist/collections/operations/findById.js +59 -0
  171. package/dist/collections/operations/update.d.ts +10 -0
  172. package/dist/collections/operations/update.d.ts.map +1 -0
  173. package/dist/collections/operations/update.js +134 -0
  174. package/dist/config/index.d.ts +9 -0
  175. package/dist/config/index.d.ts.map +1 -0
  176. package/dist/config/index.js +61 -0
  177. package/dist/config/runtime.d.ts +22 -0
  178. package/dist/config/runtime.d.ts.map +1 -0
  179. package/dist/config/runtime.js +32 -0
  180. package/dist/config/utils.d.ts +12 -0
  181. package/dist/config/utils.d.ts.map +1 -0
  182. package/dist/config/utils.js +34 -0
  183. package/dist/database/index.d.ts +1 -0
  184. package/dist/database/index.d.ts.map +1 -0
  185. package/dist/database/index.js +6 -0
  186. package/dist/database/safe-parse.d.ts +26 -0
  187. package/dist/database/safe-parse.d.ts.map +1 -0
  188. package/dist/database/safe-parse.js +42 -0
  189. package/dist/database/ssl-config.d.ts +9 -0
  190. package/dist/database/ssl-config.d.ts.map +1 -0
  191. package/dist/database/ssl-config.js +7 -0
  192. package/dist/database/type-adapter.d.ts +113 -0
  193. package/dist/database/type-adapter.d.ts.map +1 -0
  194. package/dist/database/type-adapter.js +97 -0
  195. package/dist/database/universal-postgres.d.ts +45 -0
  196. package/dist/database/universal-postgres.d.ts.map +1 -0
  197. package/dist/database/universal-postgres.js +526 -0
  198. package/dist/dataloader.d.ts +26 -0
  199. package/dist/dataloader.d.ts.map +1 -0
  200. package/dist/dataloader.js +176 -0
  201. package/dist/error-handling/circuit-breaker.d.ts +262 -0
  202. package/dist/error-handling/circuit-breaker.d.ts.map +1 -0
  203. package/dist/error-handling/circuit-breaker.js +542 -0
  204. package/dist/error-handling/error-boundary.d.ts +94 -0
  205. package/dist/error-handling/error-boundary.d.ts.map +1 -0
  206. package/dist/error-handling/error-boundary.js +285 -0
  207. package/dist/error-handling/error-reporter.d.ts +214 -0
  208. package/dist/error-handling/error-reporter.d.ts.map +1 -0
  209. package/dist/error-handling/error-reporter.js +477 -0
  210. package/dist/error-handling/fallback-components.d.ts +131 -0
  211. package/dist/error-handling/fallback-components.d.ts.map +1 -0
  212. package/dist/error-handling/fallback-components.js +371 -0
  213. package/dist/error-handling/index.d.ts +16 -0
  214. package/dist/error-handling/index.d.ts.map +1 -0
  215. package/dist/error-handling/index.js +15 -0
  216. package/dist/error-handling/retry.d.ts +194 -0
  217. package/dist/error-handling/retry.d.ts.map +1 -0
  218. package/dist/error-handling/retry.js +450 -0
  219. package/dist/errors/index.d.ts +23 -0
  220. package/dist/errors/index.d.ts.map +1 -0
  221. package/dist/errors/index.js +40 -0
  222. package/dist/factories/builders.d.ts +50 -0
  223. package/dist/factories/builders.d.ts.map +1 -0
  224. package/dist/factories/builders.js +77 -0
  225. package/dist/factories/index.d.ts +2 -0
  226. package/dist/factories/index.d.ts.map +1 -0
  227. package/dist/factories/index.js +1 -0
  228. package/dist/features.d.ts +86 -0
  229. package/dist/features.d.ts.map +1 -0
  230. package/dist/features.js +92 -0
  231. package/dist/fieldTraversal.d.ts +26 -0
  232. package/dist/fieldTraversal.d.ts.map +1 -0
  233. package/dist/fieldTraversal.js +132 -0
  234. package/dist/fields/config/types.d.ts +48 -0
  235. package/dist/fields/config/types.d.ts.map +1 -0
  236. package/dist/fields/config/types.js +20 -0
  237. package/dist/fields/getDefaultValue.d.ts +16 -0
  238. package/dist/fields/getDefaultValue.d.ts.map +1 -0
  239. package/dist/fields/getDefaultValue.js +20 -0
  240. package/dist/fields/getFieldPaths.d.ts +25 -0
  241. package/dist/fields/getFieldPaths.d.ts.map +1 -0
  242. package/dist/fields/getFieldPaths.js +23 -0
  243. package/dist/fields/hooks/afterRead/index.d.ts +36 -0
  244. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -0
  245. package/dist/fields/hooks/afterRead/index.js +70 -0
  246. package/dist/fields/hooks/afterRead/promise.d.ts +46 -0
  247. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -0
  248. package/dist/fields/hooks/afterRead/promise.js +178 -0
  249. package/dist/fields/hooks/afterRead/traverseFields.d.ts +44 -0
  250. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -0
  251. package/dist/fields/hooks/afterRead/traverseFields.js +37 -0
  252. package/dist/generated/agents/index.d.ts +8 -0
  253. package/dist/generated/agents/index.d.ts.map +1 -0
  254. package/dist/generated/agents/index.js +7 -0
  255. package/dist/generated/components/index.d.ts +8 -0
  256. package/dist/generated/components/index.d.ts.map +1 -0
  257. package/dist/generated/components/index.js +7 -0
  258. package/dist/generated/functions/index.d.ts +8 -0
  259. package/dist/generated/functions/index.d.ts.map +1 -0
  260. package/dist/generated/functions/index.js +7 -0
  261. package/dist/generated/hooks/index.d.ts +8 -0
  262. package/dist/generated/hooks/index.d.ts.map +1 -0
  263. package/dist/generated/hooks/index.js +7 -0
  264. package/dist/generated/index.d.ts +10 -0
  265. package/dist/generated/index.d.ts.map +1 -0
  266. package/dist/generated/index.js +9 -0
  267. package/dist/generated/plans/index.d.ts +8 -0
  268. package/dist/generated/plans/index.d.ts.map +1 -0
  269. package/dist/generated/plans/index.js +7 -0
  270. package/dist/generated/prompts/index.d.ts +8 -0
  271. package/dist/generated/prompts/index.d.ts.map +1 -0
  272. package/dist/generated/prompts/index.js +7 -0
  273. package/dist/generated/tools/index.d.ts +8 -0
  274. package/dist/generated/tools/index.d.ts.map +1 -0
  275. package/dist/generated/tools/index.js +7 -0
  276. package/dist/generated/types/cms.d.ts +1766 -0
  277. package/dist/generated/types/cms.d.ts.map +1 -0
  278. package/dist/generated/types/cms.js +12 -0
  279. package/dist/generated/types/index.d.ts +16 -0
  280. package/dist/generated/types/index.d.ts.map +1 -0
  281. package/dist/generated/types/index.js +21 -0
  282. package/dist/generated/types/neon.d.ts +11 -0
  283. package/dist/generated/types/neon.d.ts.map +1 -0
  284. package/dist/generated/types/neon.js +11 -0
  285. package/dist/generated/types/supabase.d.ts +193 -0
  286. package/dist/generated/types/supabase.d.ts.map +1 -0
  287. package/dist/generated/types/supabase.js +5 -0
  288. package/dist/globals/GlobalOperations.d.ts +24 -0
  289. package/dist/globals/GlobalOperations.d.ts.map +1 -0
  290. package/dist/globals/GlobalOperations.js +149 -0
  291. package/dist/globals/index.d.ts +2 -0
  292. package/dist/globals/index.d.ts.map +1 -0
  293. package/dist/globals/index.js +1 -0
  294. package/dist/index.d.ts +64 -1
  295. package/dist/index.d.ts.map +1 -0
  296. package/dist/index.js +126 -33
  297. package/dist/instance/RevealUIInstance.d.ts +6 -0
  298. package/dist/instance/RevealUIInstance.d.ts.map +1 -0
  299. package/dist/instance/RevealUIInstance.js +306 -0
  300. package/dist/instance/index.d.ts +3 -0
  301. package/dist/instance/index.d.ts.map +1 -0
  302. package/dist/instance/index.js +2 -0
  303. package/dist/instance/logger.d.ts +31 -0
  304. package/dist/instance/logger.d.ts.map +1 -0
  305. package/dist/instance/logger.js +42 -0
  306. package/dist/instance/methods/create.d.ts +10 -0
  307. package/dist/instance/methods/create.d.ts.map +1 -0
  308. package/dist/instance/methods/create.js +41 -0
  309. package/dist/instance/methods/delete.d.ts +10 -0
  310. package/dist/instance/methods/delete.d.ts.map +1 -0
  311. package/dist/instance/methods/delete.js +27 -0
  312. package/dist/instance/methods/find.d.ts +10 -0
  313. package/dist/instance/methods/find.d.ts.map +1 -0
  314. package/dist/instance/methods/find.js +23 -0
  315. package/dist/instance/methods/findById.d.ts +13 -0
  316. package/dist/instance/methods/findById.d.ts.map +1 -0
  317. package/dist/instance/methods/findById.js +23 -0
  318. package/dist/instance/methods/hooks.d.ts +14 -0
  319. package/dist/instance/methods/hooks.d.ts.map +1 -0
  320. package/dist/instance/methods/hooks.js +34 -0
  321. package/dist/instance/methods/update.d.ts +10 -0
  322. package/dist/instance/methods/update.d.ts.map +1 -0
  323. package/dist/instance/methods/update.js +45 -0
  324. package/dist/license.d.ts +82 -0
  325. package/dist/license.d.ts.map +1 -0
  326. package/dist/license.js +193 -0
  327. package/dist/monitoring/alerts.d.ts +118 -0
  328. package/dist/monitoring/alerts.d.ts.map +1 -0
  329. package/dist/monitoring/alerts.js +324 -0
  330. package/dist/monitoring/cleanup-manager.d.ts +71 -0
  331. package/dist/monitoring/cleanup-manager.d.ts.map +1 -0
  332. package/dist/monitoring/cleanup-manager.js +226 -0
  333. package/dist/monitoring/health-monitor.d.ts +22 -0
  334. package/dist/monitoring/health-monitor.d.ts.map +1 -0
  335. package/dist/monitoring/health-monitor.js +142 -0
  336. package/dist/monitoring/index.d.ts +14 -0
  337. package/dist/monitoring/index.d.ts.map +1 -0
  338. package/dist/monitoring/index.js +17 -0
  339. package/dist/monitoring/process-registry.d.ts +97 -0
  340. package/dist/monitoring/process-registry.d.ts.map +1 -0
  341. package/dist/monitoring/process-registry.js +222 -0
  342. package/dist/monitoring/query-monitor.d.ts +153 -0
  343. package/dist/monitoring/query-monitor.d.ts.map +1 -0
  344. package/dist/monitoring/query-monitor.js +209 -0
  345. package/dist/monitoring/types.d.ts +231 -0
  346. package/dist/monitoring/types.d.ts.map +1 -0
  347. package/dist/monitoring/types.js +42 -0
  348. package/dist/monitoring/zombie-detector.d.ts +81 -0
  349. package/dist/monitoring/zombie-detector.d.ts.map +1 -0
  350. package/dist/monitoring/zombie-detector.js +231 -0
  351. package/dist/nextjs/index.d.ts +4 -0
  352. package/dist/nextjs/index.d.ts.map +1 -0
  353. package/dist/nextjs/index.js +3 -0
  354. package/dist/nextjs/utilities.d.ts +5 -0
  355. package/dist/nextjs/utilities.d.ts.map +1 -0
  356. package/dist/nextjs/utilities.js +16 -0
  357. package/dist/nextjs/withRevealUI.d.ts +20 -0
  358. package/dist/nextjs/withRevealUI.d.ts.map +1 -0
  359. package/dist/nextjs/withRevealUI.js +181 -0
  360. package/dist/observability/alerts.d.ts +138 -0
  361. package/dist/observability/alerts.d.ts.map +1 -0
  362. package/dist/observability/alerts.js +390 -0
  363. package/dist/observability/health-check.d.ts +95 -0
  364. package/dist/observability/health-check.d.ts.map +1 -0
  365. package/dist/observability/health-check.js +375 -0
  366. package/dist/observability/index.d.ts +12 -0
  367. package/dist/observability/index.d.ts.map +1 -0
  368. package/dist/observability/index.js +11 -0
  369. package/dist/observability/logger.d.ts +47 -0
  370. package/dist/observability/logger.d.ts.map +1 -0
  371. package/dist/observability/logger.js +140 -0
  372. package/dist/observability/metrics.d.ts +205 -0
  373. package/dist/observability/metrics.d.ts.map +1 -0
  374. package/dist/observability/metrics.js +429 -0
  375. package/dist/observability/tracing.d.ts +149 -0
  376. package/dist/observability/tracing.d.ts.map +1 -0
  377. package/dist/observability/tracing.js +381 -0
  378. package/dist/optimization/asset-optimizer.d.ts +202 -0
  379. package/dist/optimization/asset-optimizer.d.ts.map +1 -0
  380. package/dist/optimization/asset-optimizer.js +312 -0
  381. package/dist/optimization/build-optimizer.d.ts +202 -0
  382. package/dist/optimization/build-optimizer.d.ts.map +1 -0
  383. package/dist/optimization/build-optimizer.js +271 -0
  384. package/dist/optimization/bundle-analyzer.d.ts +98 -0
  385. package/dist/optimization/bundle-analyzer.d.ts.map +1 -0
  386. package/dist/optimization/bundle-analyzer.js +322 -0
  387. package/dist/optimization/code-splitting.d.ts +131 -0
  388. package/dist/optimization/code-splitting.d.ts.map +1 -0
  389. package/dist/optimization/code-splitting.js +277 -0
  390. package/dist/plugin/index.d.ts +12 -0
  391. package/dist/plugin/index.d.ts.map +1 -0
  392. package/dist/plugin/index.js +4 -0
  393. package/dist/plugins/form-builder.d.ts +115 -0
  394. package/dist/plugins/form-builder.d.ts.map +1 -0
  395. package/dist/plugins/form-builder.js +239 -0
  396. package/dist/plugins/index.d.ts +5 -0
  397. package/dist/plugins/index.d.ts.map +1 -0
  398. package/dist/plugins/index.js +4 -0
  399. package/dist/plugins/nested-docs.d.ts +8 -0
  400. package/dist/plugins/nested-docs.d.ts.map +1 -0
  401. package/dist/plugins/nested-docs.js +67 -0
  402. package/dist/plugins/redirects.d.ts +17 -0
  403. package/dist/plugins/redirects.d.ts.map +1 -0
  404. package/dist/plugins/redirects.js +62 -0
  405. package/dist/queries/index.d.ts +2 -0
  406. package/dist/queries/index.d.ts.map +1 -0
  407. package/dist/queries/index.js +1 -0
  408. package/dist/queries/queryBuilder.d.ts +47 -0
  409. package/dist/queries/queryBuilder.d.ts.map +1 -0
  410. package/dist/queries/queryBuilder.js +255 -0
  411. package/dist/relationships/analyzer.d.ts +39 -0
  412. package/dist/relationships/analyzer.d.ts.map +1 -0
  413. package/dist/relationships/analyzer.js +127 -0
  414. package/dist/relationships/index.d.ts +3 -0
  415. package/dist/relationships/index.d.ts.map +1 -0
  416. package/dist/relationships/index.js +2 -0
  417. package/dist/relationships/populate-helpers.d.ts +104 -0
  418. package/dist/relationships/populate-helpers.d.ts.map +1 -0
  419. package/dist/relationships/populate-helpers.js +187 -0
  420. package/dist/relationships/population.d.ts +42 -0
  421. package/dist/relationships/population.d.ts.map +1 -0
  422. package/dist/relationships/population.js +188 -0
  423. package/dist/revealui.d.ts +46 -0
  424. package/dist/revealui.d.ts.map +1 -0
  425. package/dist/revealui.js +92 -0
  426. package/dist/richtext/exports/client/rcc.d.ts +37 -0
  427. package/dist/richtext/exports/client/rcc.d.ts.map +1 -0
  428. package/dist/richtext/exports/client/rcc.js +182 -0
  429. package/dist/richtext/exports/server/rsc.d.ts +117 -0
  430. package/dist/richtext/exports/server/rsc.d.ts.map +1 -0
  431. package/dist/richtext/exports/server/rsc.js +288 -0
  432. package/dist/richtext/index.d.ts +161 -0
  433. package/dist/richtext/index.d.ts.map +1 -0
  434. package/dist/richtext/index.js +243 -0
  435. package/dist/richtext/lexical.d.ts +23 -0
  436. package/dist/richtext/lexical.d.ts.map +1 -0
  437. package/dist/richtext/lexical.js +35 -0
  438. package/dist/security/audit.d.ts +188 -0
  439. package/dist/security/audit.d.ts.map +1 -0
  440. package/dist/security/audit.js +431 -0
  441. package/dist/security/auth.d.ts +241 -0
  442. package/dist/security/auth.d.ts.map +1 -0
  443. package/dist/security/auth.js +476 -0
  444. package/dist/security/authorization.d.ts +235 -0
  445. package/dist/security/authorization.d.ts.map +1 -0
  446. package/dist/security/authorization.js +434 -0
  447. package/dist/security/encryption.d.ts +214 -0
  448. package/dist/security/encryption.d.ts.map +1 -0
  449. package/dist/security/encryption.js +517 -0
  450. package/dist/security/gdpr.d.ts +300 -0
  451. package/dist/security/gdpr.d.ts.map +1 -0
  452. package/dist/security/gdpr.js +465 -0
  453. package/dist/security/headers.d.ts +182 -0
  454. package/dist/security/headers.d.ts.map +1 -0
  455. package/dist/security/headers.js +402 -0
  456. package/dist/security/index.d.ts +19 -0
  457. package/dist/security/index.d.ts.map +1 -0
  458. package/dist/security/index.js +18 -0
  459. package/dist/server/index.d.ts +21 -0
  460. package/dist/server/index.d.ts.map +1 -0
  461. package/dist/server/index.js +28 -0
  462. package/dist/server/renderPage.d.ts +69 -0
  463. package/dist/server/renderPage.d.ts.map +1 -0
  464. package/dist/server/renderPage.js +109 -0
  465. package/dist/storage/index.d.ts +1 -0
  466. package/dist/storage/index.d.ts.map +1 -0
  467. package/dist/storage/index.js +4 -0
  468. package/dist/storage/vercel-blob.d.ts +17 -0
  469. package/dist/storage/vercel-blob.d.ts.map +1 -0
  470. package/dist/storage/vercel-blob.js +83 -0
  471. package/dist/translations/index.d.ts +17 -0
  472. package/dist/translations/index.d.ts.map +1 -0
  473. package/dist/translations/index.js +1 -0
  474. package/dist/types/access.d.ts +67 -0
  475. package/dist/types/access.d.ts.map +1 -0
  476. package/dist/types/access.js +8 -0
  477. package/dist/types/api.d.ts +57 -0
  478. package/dist/types/api.d.ts.map +1 -0
  479. package/dist/types/api.js +8 -0
  480. package/dist/types/cms.d.ts +8 -0
  481. package/dist/types/cms.d.ts.map +1 -0
  482. package/dist/types/cms.js +6 -0
  483. package/dist/types/config.d.ts +152 -0
  484. package/dist/types/config.d.ts.map +1 -0
  485. package/dist/types/config.js +9 -0
  486. package/dist/types/core.d.ts +11 -0
  487. package/dist/types/core.d.ts.map +1 -0
  488. package/dist/types/core.js +9 -0
  489. package/dist/types/extensions.d.ts +116 -0
  490. package/dist/types/extensions.d.ts.map +1 -0
  491. package/dist/types/extensions.js +8 -0
  492. package/dist/types/frontend.d.ts +53 -0
  493. package/dist/types/frontend.d.ts.map +1 -0
  494. package/dist/types/frontend.js +7 -0
  495. package/dist/types/generated.d.ts +12 -0
  496. package/dist/types/generated.d.ts.map +1 -0
  497. package/dist/types/generated.js +10 -0
  498. package/dist/types/hooks.d.ts +53 -0
  499. package/dist/types/hooks.d.ts.map +1 -0
  500. package/dist/types/hooks.js +8 -0
  501. package/dist/types/index.d.ts +49 -0
  502. package/dist/types/index.d.ts.map +1 -0
  503. package/dist/types/index.js +61 -0
  504. package/dist/types/interfaces/app.d.ts +50 -0
  505. package/dist/types/interfaces/app.d.ts.map +1 -0
  506. package/dist/types/interfaces/app.js +5 -0
  507. package/dist/types/jobs.d.ts +112 -0
  508. package/dist/types/jobs.d.ts.map +1 -0
  509. package/dist/types/jobs.js +7 -0
  510. package/dist/types/legacy.d.ts +147 -0
  511. package/dist/types/legacy.d.ts.map +1 -0
  512. package/dist/types/legacy.js +8 -0
  513. package/dist/types/plugins.d.ts +17 -0
  514. package/dist/types/plugins.d.ts.map +1 -0
  515. package/dist/types/plugins.js +8 -0
  516. package/dist/types/query.d.ts +99 -0
  517. package/dist/types/query.d.ts.map +1 -0
  518. package/dist/types/query.js +24 -0
  519. package/dist/types/request.d.ts +40 -0
  520. package/dist/types/request.d.ts.map +1 -0
  521. package/dist/types/request.js +8 -0
  522. package/dist/types/richtext.d.ts +23 -0
  523. package/dist/types/richtext.d.ts.map +1 -0
  524. package/dist/types/richtext.js +8 -0
  525. package/dist/types/runtime.d.ts +216 -0
  526. package/dist/types/runtime.d.ts.map +1 -0
  527. package/dist/types/runtime.js +9 -0
  528. package/dist/types/schema.d.ts +9 -0
  529. package/dist/types/schema.d.ts.map +1 -0
  530. package/dist/types/schema.js +7 -0
  531. package/dist/types/user.d.ts +48 -0
  532. package/dist/types/user.d.ts.map +1 -0
  533. package/dist/types/user.js +8 -0
  534. package/dist/utils/access-conversion.d.ts +17 -0
  535. package/dist/utils/access-conversion.d.ts.map +1 -0
  536. package/dist/utils/access-conversion.js +96 -0
  537. package/dist/utils/api-wrapper.d.ts +63 -0
  538. package/dist/utils/api-wrapper.d.ts.map +1 -0
  539. package/dist/utils/api-wrapper.js +151 -0
  540. package/dist/utils/block-conversion.d.ts +21 -0
  541. package/dist/utils/block-conversion.d.ts.map +1 -0
  542. package/dist/utils/block-conversion.js +109 -0
  543. package/dist/utils/cache.d.ts +86 -0
  544. package/dist/utils/cache.d.ts.map +1 -0
  545. package/dist/utils/cache.js +154 -0
  546. package/dist/utils/deep-clone.d.ts +25 -0
  547. package/dist/utils/deep-clone.d.ts.map +1 -0
  548. package/dist/utils/deep-clone.js +115 -0
  549. package/dist/utils/error-responses.d.ts +57 -0
  550. package/dist/utils/error-responses.d.ts.map +1 -0
  551. package/dist/utils/error-responses.js +96 -0
  552. package/dist/utils/errors.d.ts +97 -0
  553. package/dist/utils/errors.d.ts.map +1 -0
  554. package/dist/utils/errors.js +397 -0
  555. package/dist/utils/field-conversion.d.ts +40 -0
  556. package/dist/utils/field-conversion.d.ts.map +1 -0
  557. package/dist/utils/field-conversion.js +275 -0
  558. package/dist/utils/flattenResult.d.ts +7 -0
  559. package/dist/utils/flattenResult.d.ts.map +1 -0
  560. package/dist/utils/flattenResult.js +23 -0
  561. package/dist/utils/getBlockSelect.d.ts +12 -0
  562. package/dist/utils/getBlockSelect.d.ts.map +1 -0
  563. package/dist/utils/getBlockSelect.js +12 -0
  564. package/dist/utils/getSelectMode.d.ts +8 -0
  565. package/dist/utils/getSelectMode.d.ts.map +1 -0
  566. package/dist/utils/getSelectMode.js +21 -0
  567. package/dist/utils/isValidID.d.ts +5 -0
  568. package/dist/utils/isValidID.d.ts.map +1 -0
  569. package/dist/utils/isValidID.js +13 -0
  570. package/dist/utils/json-parsing.d.ts +48 -0
  571. package/dist/utils/json-parsing.d.ts.map +1 -0
  572. package/dist/utils/json-parsing.js +130 -0
  573. package/dist/utils/jwt-validation.d.ts +14 -0
  574. package/dist/utils/jwt-validation.d.ts.map +1 -0
  575. package/dist/utils/jwt-validation.js +36 -0
  576. package/dist/utils/logger-client.d.ts +32 -0
  577. package/dist/utils/logger-client.d.ts.map +1 -0
  578. package/dist/utils/logger-client.js +55 -0
  579. package/dist/utils/logger-server.d.ts +32 -0
  580. package/dist/utils/logger-server.d.ts.map +1 -0
  581. package/dist/utils/logger-server.js +68 -0
  582. package/dist/utils/logger.d.ts +14 -0
  583. package/dist/utils/logger.d.ts.map +1 -0
  584. package/dist/utils/logger.js +12 -0
  585. package/dist/utils/request-context.d.ts +143 -0
  586. package/dist/utils/request-context.d.ts.map +1 -0
  587. package/dist/utils/request-context.js +168 -0
  588. package/dist/utils/request-headers.d.ts +15 -0
  589. package/dist/utils/request-headers.d.ts.map +1 -0
  590. package/dist/utils/request-headers.js +31 -0
  591. package/dist/utils/stripUnselectedFields.d.ts +10 -0
  592. package/dist/utils/stripUnselectedFields.d.ts.map +1 -0
  593. package/dist/utils/stripUnselectedFields.js +20 -0
  594. package/dist/utils/type-guards.d.ts +33 -0
  595. package/dist/utils/type-guards.d.ts.map +1 -0
  596. package/dist/utils/type-guards.js +63 -0
  597. package/dist/utils/user.d.ts +14 -0
  598. package/dist/utils/user.d.ts.map +1 -0
  599. package/dist/utils/user.js +15 -0
  600. package/package.json +241 -724
  601. package/LICENSE_SUMMARY.md +0 -55
  602. package/NOTICE +0 -34
  603. package/dist/exports/RenderErrorPage.js +0 -3
  604. package/dist/exports/__internal.js +0 -3
  605. package/dist/exports/abort.js +0 -3
  606. package/dist/exports/bin-entry.js +0 -5
  607. package/dist/exports/client.js +0 -3
  608. package/dist/exports/config.js +0 -1
  609. package/dist/exports/helpers.js +0 -1
  610. package/dist/exports/index.js +0 -33
  611. package/dist/exports/plugin.js +0 -3
  612. package/dist/exports/prerender.js +0 -3
  613. package/dist/exports/router.js +0 -3
  614. package/dist/exports/routing.js +0 -3
  615. package/dist/exports/server.js +0 -3
  616. package/dist/exports/setup.js +0 -3
  617. package/dist/exports/types.js +0 -1
  618. package/dist/integration/styles.css +0 -141
  619. package/dist/shared/RenderErrorPage.d.ts +0 -3
  620. package/dist/shared/RenderErrorPage.js +0 -3
  621. package/dist/shared/abort.js +0 -3
  622. package/dist/shared/route/routing.js +0 -3
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Field Conversion Utilities
3
+ *
4
+ * Converts between standard Field types and RevealUIField types.
5
+ *
6
+ * NOTE ON TYPE ASSERTIONS:
7
+ * The type assertions in this file are necessary due to TypeScript's limitation
8
+ * with narrowing separate variables. Here's why:
9
+ *
10
+ * 1. `baseField` is initialized as `RevealUIField` (a union type) or `Field` (a union type)
11
+ * 2. TypeScript can narrow `field` or `revealUIField` in conditionals/switches
12
+ * 3. However, TypeScript CANNOT narrow `baseField` because it's a separate variable
13
+ * that was explicitly typed, not derived from the narrowed value
14
+ *
15
+ * The assertions (`as RevealUITextField`, etc.) are used to tell TypeScript that
16
+ * after type narrowing checks, we're assigning type-specific properties that exist
17
+ * on the narrowed type but not on the base union type.
18
+ *
19
+ * Alternative approaches considered:
20
+ * - Returning different object literals per type: Would work but duplicates code
21
+ * - Using type predicates on baseField: Not possible without runtime checks
22
+ * - Restructuring to avoid mutations: Would require significant refactoring
23
+ *
24
+ * These assertions are safe because they're guarded by runtime type checks
25
+ * (isTextField, isArrayField, switch on field.type).
26
+ */
27
+ import { isArrayField, isTextField } from '@revealui/contracts/cms';
28
+ const getFieldLabel = (field) => {
29
+ if (typeof field.label === 'string' && field.label.length > 0) {
30
+ return field.label;
31
+ }
32
+ if (typeof field.name === 'string' && field.name.length > 0) {
33
+ return field.name;
34
+ }
35
+ return 'Field';
36
+ };
37
+ // Convert from standard field to RevealUI field
38
+ export function convertToRevealUIField(field) {
39
+ const labelText = getFieldLabel(field);
40
+ const baseField = {
41
+ name: field.name || '',
42
+ type: field.type,
43
+ label: field.label,
44
+ required: field.required,
45
+ revealUI: {
46
+ searchable: false,
47
+ permissions: ['read', 'write'],
48
+ tenantScoped: false,
49
+ auditLog: false,
50
+ validation: field.required
51
+ ? [
52
+ {
53
+ type: 'required',
54
+ message: `${labelText} is required`,
55
+ },
56
+ ]
57
+ : [],
58
+ },
59
+ admin: field.admin,
60
+ validate: field.validate
61
+ ? (value, args) => {
62
+ // Pass through the validation args directly
63
+ // Field.validate expects (value, args) where args is FieldValidateArgs
64
+ if (field.validate) {
65
+ const result = field.validate(value, args);
66
+ if (result === true || typeof result === 'string') {
67
+ return result;
68
+ }
69
+ return true;
70
+ }
71
+ return true;
72
+ }
73
+ : undefined,
74
+ };
75
+ // Add type-specific properties using type guards and switch narrowing
76
+ // NOTE: Type assertions are necessary here because TypeScript cannot narrow
77
+ // `baseField` even though we've narrowed `field`. See file-level comment.
78
+ if (isTextField(field)) {
79
+ // TypeScript narrows field to TextField here, but baseField remains RevealUIField
80
+ // Assertion is safe because we've verified field.type === 'text'
81
+ const textBaseField = baseField;
82
+ textBaseField.maxLength = field.maxLength;
83
+ textBaseField.minLength = field.minLength;
84
+ }
85
+ else if (isArrayField(field)) {
86
+ // TypeScript narrows field to ArrayField here, but baseField remains RevealUIField
87
+ // Assertion is safe because we've verified field.type === 'array'
88
+ const arrayBaseField = baseField;
89
+ if (field.fields) {
90
+ arrayBaseField.fields = field.fields.map((f) => convertToRevealUIField(f));
91
+ }
92
+ arrayBaseField.minRows = field.minRows;
93
+ arrayBaseField.maxRows = field.maxRows;
94
+ }
95
+ else {
96
+ // Use switch for types without type guards
97
+ switch (field.type) {
98
+ case 'checkbox': {
99
+ // TypeScript narrows field in switch statement, but baseField needs assertion
100
+ // Assertion on field is needed because CheckboxField might not be properly discriminated
101
+ const checkboxBaseField = baseField;
102
+ checkboxBaseField.defaultValue = field.defaultValue;
103
+ break;
104
+ }
105
+ case 'richText': {
106
+ // TypeScript narrows field in switch statement, but baseField needs assertion
107
+ // Assertion on field is needed because RichTextField might not be properly discriminated
108
+ const richTextBaseField = baseField;
109
+ richTextBaseField.editor = field.editor;
110
+ break;
111
+ }
112
+ }
113
+ }
114
+ return baseField;
115
+ }
116
+ // Convert from RevealUI field to standard field
117
+ export function convertFromRevealUIField(revealUIField) {
118
+ const baseField = {
119
+ name: revealUIField.name || '',
120
+ type: revealUIField.type,
121
+ label: revealUIField.label,
122
+ required: revealUIField.required,
123
+ admin: revealUIField.admin,
124
+ validate: revealUIField.validate
125
+ ? (value, args) => {
126
+ // Pass through the validation args directly
127
+ // RevealUIField.validate should accept FieldValidateArgs
128
+ if (revealUIField.validate) {
129
+ const result = revealUIField.validate(value, args);
130
+ if (result === true || typeof result === 'string') {
131
+ return result;
132
+ }
133
+ return true;
134
+ }
135
+ return true;
136
+ }
137
+ : undefined,
138
+ };
139
+ // Add type-specific properties using type guards and switch narrowing
140
+ // NOTE: Type assertions are necessary here because TypeScript cannot narrow
141
+ // `baseField` even though we've narrowed `revealUIField`. See file-level comment.
142
+ if (revealUIField.type === 'text') {
143
+ // TypeScript narrows revealUIField to RevealUITextField, but baseField remains Field
144
+ // Assertions are safe because we've verified revealUIField.type === 'text'
145
+ const textBaseField = baseField;
146
+ const textField = revealUIField;
147
+ textBaseField.maxLength = textField.maxLength;
148
+ textBaseField.minLength = textField.minLength;
149
+ }
150
+ else if (revealUIField.type === 'array') {
151
+ // TypeScript narrows revealUIField to RevealUIArrayField, but baseField remains Field
152
+ // Assertions are safe because we've verified revealUIField.type === 'array'
153
+ const arrayBaseField = baseField;
154
+ const arrayField = revealUIField;
155
+ if (arrayField.fields) {
156
+ // Convert RevealUIField[] to Field[] - this is safe because RevealUIField extends Field
157
+ arrayBaseField.fields = arrayField.fields.map((f) => convertFromRevealUIField(f));
158
+ }
159
+ arrayBaseField.minRows = arrayField.minRows;
160
+ arrayBaseField.maxRows = arrayField.maxRows;
161
+ }
162
+ else {
163
+ // Use switch for types without type guards
164
+ switch (revealUIField.type) {
165
+ case 'checkbox': {
166
+ // TypeScript narrows revealUIField in switch statement, but baseField needs assertion
167
+ // Assertion on revealUIField is needed because RevealUICheckboxField might not be properly discriminated
168
+ const checkboxBaseField = baseField;
169
+ checkboxBaseField.defaultValue = revealUIField.defaultValue;
170
+ break;
171
+ }
172
+ case 'richText': {
173
+ // TypeScript narrows revealUIField in switch statement, but baseField needs assertion
174
+ // Assertion on revealUIField is needed because RevealUIRichTextField might not be properly discriminated
175
+ const richTextBaseField = baseField;
176
+ richTextBaseField.editor = revealUIField.editor;
177
+ break;
178
+ }
179
+ }
180
+ }
181
+ return baseField;
182
+ }
183
+ // Enhance a standard field with RevealUI features
184
+ export function enhanceFieldWithRevealUI(field, revealUIOptions) {
185
+ const revealUIField = convertToRevealUIField(field);
186
+ if (revealUIOptions) {
187
+ revealUIField.revealUI = {
188
+ ...revealUIField.revealUI,
189
+ ...revealUIOptions,
190
+ };
191
+ }
192
+ return revealUIField;
193
+ }
194
+ // Validate a RevealUI field
195
+ export function validateRevealUIField(field, value, context) {
196
+ const labelText = getFieldLabel(field);
197
+ // Run RevealUI-specific validations
198
+ if (field.revealUI?.validation) {
199
+ for (const rule of field.revealUI.validation) {
200
+ // Convert context to RevealUIHookContext for rule validation
201
+ const hookContext = {
202
+ revealui: undefined,
203
+ operation: context.operation,
204
+ user: context.user,
205
+ tenant: context.tenant || '',
206
+ };
207
+ switch (rule.type) {
208
+ case 'required':
209
+ if (!value) {
210
+ return rule.message || `${labelText} is required`;
211
+ }
212
+ break;
213
+ case 'min':
214
+ {
215
+ const minValue = typeof rule.value === 'number' ? rule.value : undefined;
216
+ // For string values, check length
217
+ if (typeof value === 'string' && minValue !== undefined && value.length < minValue) {
218
+ return rule.message || `${labelText} must be at least ${minValue} characters`;
219
+ }
220
+ // For number values, check value
221
+ if (typeof value === 'number' && minValue !== undefined && value < minValue) {
222
+ return rule.message || `${labelText} must be at least ${minValue}`;
223
+ }
224
+ }
225
+ break;
226
+ case 'max':
227
+ {
228
+ const maxValue = typeof rule.value === 'number' ? rule.value : undefined;
229
+ // For string values, check length
230
+ if (typeof value === 'string' && maxValue !== undefined && value.length > maxValue) {
231
+ return rule.message || `${labelText} must be no more than ${maxValue} characters`;
232
+ }
233
+ // For number values, check value
234
+ if (typeof value === 'number' && maxValue !== undefined && value > maxValue) {
235
+ return rule.message || `${labelText} must be no more than ${maxValue}`;
236
+ }
237
+ }
238
+ break;
239
+ case 'pattern':
240
+ if (typeof value === 'string' &&
241
+ rule.value instanceof RegExp &&
242
+ !rule.value.test(value)) {
243
+ return rule.message || `${labelText} format is invalid`;
244
+ }
245
+ break;
246
+ case 'custom':
247
+ if (rule.validate) {
248
+ const result = rule.validate(value, hookContext);
249
+ if (result !== true) {
250
+ return typeof result === 'string' ? result : `${labelText} is invalid`;
251
+ }
252
+ }
253
+ break;
254
+ }
255
+ }
256
+ }
257
+ // Run the original field validator if it exists
258
+ if (field.validate) {
259
+ // Convert context to FieldValidateArgs format
260
+ const validateArgs = {
261
+ value,
262
+ data: context.data,
263
+ siblingData: context.siblingData,
264
+ req: {
265
+ user: context.user,
266
+ },
267
+ operation: context.operation,
268
+ };
269
+ const result = field.validate(value, validateArgs);
270
+ if (result !== true) {
271
+ return typeof result === 'string' ? result : `${labelText} is invalid`;
272
+ }
273
+ }
274
+ return true;
275
+ }
@@ -0,0 +1,7 @@
1
+ import type { RevealDocument } from '../types/index.js';
2
+ /**
3
+ * Flattens SQL result with dotted notation into nested objects
4
+ * e.g., { 'author.title': 'John', 'author.id': 1 } -> { author: { title: 'John', id: 1 } }
5
+ */
6
+ export declare function flattenResult(doc: RevealDocument): RevealDocument;
7
+ //# sourceMappingURL=flattenResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flattenResult.d.ts","sourceRoot":"","sources":["../../src/utils/flattenResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAoBjE"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Flattens SQL result with dotted notation into nested objects
3
+ * e.g., { 'author.title': 'John', 'author.id': 1 } -> { author: { title: 'John', id: 1 } }
4
+ */
5
+ export function flattenResult(doc) {
6
+ const result = { ...doc };
7
+ for (const key of Object.keys(doc)) {
8
+ if (key.includes('.')) {
9
+ const parts = key.split('.', 2);
10
+ const parentKey = parts[0];
11
+ const childKey = parts[1];
12
+ if (parentKey && childKey) {
13
+ if (!result[parentKey]) {
14
+ result[parentKey] = {};
15
+ }
16
+ ;
17
+ result[parentKey][childKey] = doc[key];
18
+ Reflect.deleteProperty(result, key);
19
+ }
20
+ }
21
+ }
22
+ return result;
23
+ }
@@ -0,0 +1,12 @@
1
+ import type { SelectType } from '../types/index.js';
2
+ /**
3
+ * Gets the select configuration for a specific block
4
+ */
5
+ export declare const getBlockSelect: ({ block, select, selectMode, }: {
6
+ block: {
7
+ slug: string;
8
+ };
9
+ select: SelectType;
10
+ selectMode: "include" | "exclude";
11
+ }) => SelectType | undefined;
12
+ //# sourceMappingURL=getBlockSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBlockSelect.d.ts","sourceRoot":"","sources":["../../src/utils/getBlockSelect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,gCAI5B;IACD,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,MAAM,EAAE,UAAU,CAAA;IAClB,UAAU,EAAE,SAAS,GAAG,SAAS,CAAA;CAClC,KAAG,UAAU,GAAG,SAShB,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Gets the select configuration for a specific block
3
+ */
4
+ export const getBlockSelect = ({ block, select, selectMode, }) => {
5
+ if (!select || selectMode === 'exclude')
6
+ return undefined;
7
+ const blockSelect = select[block.slug];
8
+ if (typeof blockSelect === 'object' && blockSelect !== null) {
9
+ return blockSelect;
10
+ }
11
+ return undefined;
12
+ };
@@ -0,0 +1,8 @@
1
+ import type { SelectMode, SelectType } from '../types/index.js';
2
+ /**
3
+ * Determines if a select object is in 'include' or 'exclude' mode
4
+ * - include: only specified fields are included
5
+ * - exclude: all fields except specified are included
6
+ */
7
+ export declare const getSelectMode: (select: SelectType) => SelectMode;
8
+ //# sourceMappingURL=getSelectMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSelectMode.d.ts","sourceRoot":"","sources":["../../src/utils/getSelectMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE/D;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,UAAU,KAAG,UAgBlD,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Determines if a select object is in 'include' or 'exclude' mode
3
+ * - include: only specified fields are included
4
+ * - exclude: all fields except specified are included
5
+ */
6
+ export const getSelectMode = (select) => {
7
+ for (const selectValue of Object.values(select)) {
8
+ if (selectValue === false) {
9
+ return 'exclude';
10
+ }
11
+ if (typeof selectValue === 'object' && selectValue !== null && !Array.isArray(selectValue)) {
12
+ // Recursively check nested objects - if any nested object is exclude mode, return exclude
13
+ const nestedMode = getSelectMode(selectValue);
14
+ if (nestedMode === 'exclude') {
15
+ return 'exclude';
16
+ }
17
+ // Continue checking other keys even if this nested object is include mode
18
+ }
19
+ }
20
+ return 'include';
21
+ };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Validates if an ID is valid based on the ID type
3
+ */
4
+ export declare const isValidID: (id: unknown, idType?: "number" | "text") => boolean;
5
+ //# sourceMappingURL=isValidID.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidID.d.ts","sourceRoot":"","sources":["../../src/utils/isValidID.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,IAAI,OAAO,EAAE,SAAQ,QAAQ,GAAG,MAAe,KAAG,OAW3E,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Validates if an ID is valid based on the ID type
3
+ */
4
+ export const isValidID = (id, idType = 'text') => {
5
+ if (idType === 'number') {
6
+ return typeof id === 'number' && !Number.isNaN(id) && Number.isFinite(id);
7
+ }
8
+ // For text IDs, allow strings and convert numbers to strings
9
+ if (typeof id === 'number') {
10
+ return !Number.isNaN(id) && Number.isFinite(id);
11
+ }
12
+ return typeof id === 'string' && id.length > 0;
13
+ };
@@ -0,0 +1,48 @@
1
+ /**
2
+ * JSON Parsing Utilities
3
+ *
4
+ * Utilities for serializing and deserializing JSON fields in database operations.
5
+ * Handles the _json column pattern used for storing complex field types.
6
+ */
7
+ import type { RevealDocument } from '../types/index.js';
8
+ /**
9
+ * Parse a JSON field value safely
10
+ *
11
+ * @param value - Value to parse (may be string or already parsed object)
12
+ * @returns Parsed value or original value if not JSON
13
+ */
14
+ export declare function parseJsonField(value: unknown): unknown;
15
+ /**
16
+ * Deserialize JSON fields from database document
17
+ *
18
+ * Handles the _json column pattern:
19
+ * - PostgreSQL JSONB returns as object
20
+ * - SQLite TEXT returns as string
21
+ * - Merges _json fields into document
22
+ * - Removes _json column from result
23
+ * - Deserializes other JSON strings (backwards compatibility)
24
+ *
25
+ * @param doc - Raw document from database
26
+ * @param tableName - Table name (for logging)
27
+ * @returns Deserialized document
28
+ */
29
+ export declare function deserializeJsonFields(doc: Record<string, unknown>, tableName?: string): RevealDocument;
30
+ /**
31
+ * Collect JSON fields into an object for the _json column
32
+ *
33
+ * @param data - Data object
34
+ * @param jsonFieldNames - Set of field names that should be stored as JSON
35
+ * @returns Object containing JSON fields
36
+ */
37
+ export declare function collectJsonFields(data: Record<string, unknown>, jsonFieldNames: Set<string>): Record<string, unknown>;
38
+ /**
39
+ * Serialize a value for database storage
40
+ *
41
+ * Converts objects and arrays to JSON strings for SQLite compatibility.
42
+ * Primitives are returned as-is.
43
+ *
44
+ * @param value - Value to serialize
45
+ * @returns Serialized value (string for objects/arrays, otherwise original value)
46
+ */
47
+ export declare function serializeValueForDatabase(value: unknown): unknown;
48
+ //# sourceMappingURL=json-parsing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-parsing.d.ts","sourceRoot":"","sources":["../../src/utils/json-parsing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAetD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CA2DhB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASjE"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * JSON Parsing Utilities
3
+ *
4
+ * Utilities for serializing and deserializing JSON fields in database operations.
5
+ * Handles the _json column pattern used for storing complex field types.
6
+ */
7
+ import { defaultLogger } from '../instance/logger.js';
8
+ /**
9
+ * Parse a JSON field value safely
10
+ *
11
+ * @param value - Value to parse (may be string or already parsed object)
12
+ * @returns Parsed value or original value if not JSON
13
+ */
14
+ export function parseJsonField(value) {
15
+ if (value === null || value === undefined) {
16
+ return value;
17
+ }
18
+ if (typeof value === 'string' && (value.startsWith('{') || value.startsWith('['))) {
19
+ try {
20
+ return JSON.parse(value);
21
+ }
22
+ catch {
23
+ // Not valid JSON, keep as string
24
+ return value;
25
+ }
26
+ }
27
+ return value;
28
+ }
29
+ /**
30
+ * Deserialize JSON fields from database document
31
+ *
32
+ * Handles the _json column pattern:
33
+ * - PostgreSQL JSONB returns as object
34
+ * - SQLite TEXT returns as string
35
+ * - Merges _json fields into document
36
+ * - Removes _json column from result
37
+ * - Deserializes other JSON strings (backwards compatibility)
38
+ *
39
+ * @param doc - Raw document from database
40
+ * @param tableName - Table name (for logging)
41
+ * @returns Deserialized document
42
+ */
43
+ export function deserializeJsonFields(doc, tableName) {
44
+ // Ensure id field exists (required by RevealDocument type)
45
+ const rawId = doc.id;
46
+ const fallbackId = rawId === null || rawId === undefined
47
+ ? ''
48
+ : typeof rawId === 'string' ||
49
+ typeof rawId === 'number' ||
50
+ typeof rawId === 'boolean' ||
51
+ typeof rawId === 'bigint'
52
+ ? String(rawId)
53
+ : '';
54
+ const result = {
55
+ id: typeof rawId === 'string' || typeof rawId === 'number' ? rawId : fallbackId,
56
+ ...doc,
57
+ };
58
+ // Handle _json column: deserialize and merge JSON fields into document
59
+ if (result._json !== null && result._json !== undefined) {
60
+ try {
61
+ // PostgreSQL JSONB returns as object, SQLite TEXT returns as string
62
+ const jsonFields = typeof result._json === 'string' ? JSON.parse(result._json) : result._json;
63
+ // Merge JSON fields into document
64
+ if (jsonFields && typeof jsonFields === 'object') {
65
+ Object.assign(result, jsonFields);
66
+ }
67
+ }
68
+ catch (error) {
69
+ // Invalid JSON - log for debugging but continue
70
+ defaultLogger.warn(`Failed to parse _json in ${tableName || 'unknown'}:`, error);
71
+ }
72
+ }
73
+ // Remove _json from result (internal column)
74
+ Reflect.deleteProperty(result, '_json');
75
+ // Deserialize other JSON strings (for backwards compatibility with non-JSON fields)
76
+ for (const [key, value] of Object.entries(result)) {
77
+ if (value === null || value === undefined) {
78
+ result[key] = value;
79
+ continue;
80
+ }
81
+ // Check for JSON string pattern
82
+ if (typeof value === 'string' && (value.startsWith('{') || value.startsWith('['))) {
83
+ try {
84
+ const parsed = JSON.parse(value);
85
+ result[key] = parsed;
86
+ }
87
+ catch {
88
+ // Not valid JSON, keep as string
89
+ result[key] = value;
90
+ }
91
+ }
92
+ else {
93
+ result[key] = value;
94
+ }
95
+ }
96
+ return result;
97
+ }
98
+ /**
99
+ * Collect JSON fields into an object for the _json column
100
+ *
101
+ * @param data - Data object
102
+ * @param jsonFieldNames - Set of field names that should be stored as JSON
103
+ * @returns Object containing JSON fields
104
+ */
105
+ export function collectJsonFields(data, jsonFieldNames) {
106
+ const jsonData = {};
107
+ jsonFieldNames.forEach((name) => {
108
+ if (name in data && data[name] !== undefined) {
109
+ jsonData[name] = data[name];
110
+ }
111
+ });
112
+ return jsonData;
113
+ }
114
+ /**
115
+ * Serialize a value for database storage
116
+ *
117
+ * Converts objects and arrays to JSON strings for SQLite compatibility.
118
+ * Primitives are returned as-is.
119
+ *
120
+ * @param value - Value to serialize
121
+ * @returns Serialized value (string for objects/arrays, otherwise original value)
122
+ */
123
+ export function serializeValueForDatabase(value) {
124
+ if (value !== null &&
125
+ value !== undefined &&
126
+ (typeof value === 'object' || Array.isArray(value))) {
127
+ return JSON.stringify(value);
128
+ }
129
+ return value;
130
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * JWT Validation Utilities
3
+ *
4
+ * Utilities for validating JWT tokens from RevealRequest objects.
5
+ */
6
+ import type { RevealRequest } from '../types/index.js';
7
+ /**
8
+ * Validate JWT token from request authorization header
9
+ *
10
+ * @param req - RevealRequest object
11
+ * @throws Error if token is invalid or expired
12
+ */
13
+ export declare function validateJWTFromRequest(req?: RevealRequest): Promise<void>;
14
+ //# sourceMappingURL=jwt-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-validation.d.ts","sourceRoot":"","sources":["../../src/utils/jwt-validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/E"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * JWT Validation Utilities
3
+ *
4
+ * Utilities for validating JWT tokens from RevealRequest objects.
5
+ */
6
+ import { jwtVerify } from 'jose';
7
+ import { extractAuthHeader } from './request-headers.js';
8
+ /**
9
+ * Validate JWT token from request authorization header
10
+ *
11
+ * @param req - RevealRequest object
12
+ * @throws Error if token is invalid or expired
13
+ */
14
+ export async function validateJWTFromRequest(req) {
15
+ const authHeader = extractAuthHeader(req);
16
+ if (!authHeader || typeof authHeader !== 'string') {
17
+ return; // No auth header, skip validation
18
+ }
19
+ // Extract token from "JWT <token>" format
20
+ if (!authHeader.startsWith('JWT ')) {
21
+ return; // Not a JWT token, skip validation
22
+ }
23
+ const token = authHeader.substring(4);
24
+ const secret = process.env.REVEALUI_SECRET;
25
+ if (!secret || secret.length < 32) {
26
+ throw new Error('REVEALUI_SECRET must be set to a secure random value (minimum 32 characters). ' +
27
+ 'Generate one with: openssl rand -base64 32');
28
+ }
29
+ try {
30
+ await jwtVerify(token, new TextEncoder().encode(secret));
31
+ }
32
+ catch (_error) {
33
+ // Token is invalid, expired, or tampered
34
+ throw new Error('Invalid or expired token');
35
+ }
36
+ }