@revealui/core 0.0.1-pre.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -202
- package/README.md +29 -180
- package/dist/api/compression.d.ts +83 -0
- package/dist/api/compression.d.ts.map +1 -0
- package/dist/api/compression.js +233 -0
- package/dist/api/payload-optimization.d.ts +138 -0
- package/dist/api/payload-optimization.d.ts.map +1 -0
- package/dist/api/payload-optimization.js +320 -0
- package/dist/api/rate-limit.d.ts +113 -0
- package/dist/api/rate-limit.d.ts.map +1 -0
- package/dist/api/rate-limit.js +301 -0
- package/dist/api/response-cache.d.ts +125 -0
- package/dist/api/response-cache.d.ts.map +1 -0
- package/dist/api/response-cache.js +335 -0
- package/dist/api/rest.d.ts +54 -0
- package/dist/api/rest.d.ts.map +1 -0
- package/dist/api/rest.js +464 -0
- package/dist/auth/access.d.ts +25 -0
- package/dist/auth/access.d.ts.map +1 -0
- package/dist/auth/access.js +20 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/cache/query-cache.d.ts +98 -0
- package/dist/cache/query-cache.d.ts.map +1 -0
- package/dist/cache/query-cache.js +260 -0
- package/dist/caching/app-cache.d.ts +237 -0
- package/dist/caching/app-cache.d.ts.map +1 -0
- package/dist/caching/app-cache.js +430 -0
- package/dist/caching/cdn-config.d.ts +155 -0
- package/dist/caching/cdn-config.d.ts.map +1 -0
- package/dist/caching/cdn-config.js +425 -0
- package/dist/caching/edge-cache.d.ts +177 -0
- package/dist/caching/edge-cache.d.ts.map +1 -0
- package/dist/caching/edge-cache.js +381 -0
- package/dist/caching/service-worker.d.ts +165 -0
- package/dist/caching/service-worker.d.ts.map +1 -0
- package/dist/caching/service-worker.js +437 -0
- package/dist/client/admin/RichText.d.ts +12 -0
- package/dist/client/admin/RichText.d.ts.map +1 -0
- package/dist/client/admin/RichText.js +5 -0
- package/dist/client/admin/components/AdminDashboard.d.ts +7 -0
- package/dist/client/admin/components/AdminDashboard.d.ts.map +1 -0
- package/dist/client/admin/components/AdminDashboard.js +318 -0
- package/dist/client/admin/components/CollectionList.d.ts +16 -0
- package/dist/client/admin/components/CollectionList.d.ts.map +1 -0
- package/dist/client/admin/components/CollectionList.js +67 -0
- package/dist/client/admin/components/DocumentForm.d.ts +11 -0
- package/dist/client/admin/components/DocumentForm.d.ts.map +1 -0
- package/dist/client/admin/components/DocumentForm.js +99 -0
- package/dist/client/admin/components/GlobalForm.d.ts +11 -0
- package/dist/client/admin/components/GlobalForm.d.ts.map +1 -0
- package/dist/client/admin/components/GlobalForm.js +74 -0
- package/dist/client/admin/i18n/en.d.ts +25 -0
- package/dist/client/admin/i18n/en.d.ts.map +1 -0
- package/dist/client/admin/i18n/en.js +25 -0
- package/dist/client/admin/index.d.ts +10 -0
- package/dist/client/admin/index.d.ts.map +1 -0
- package/dist/client/admin/index.js +10 -0
- package/dist/client/admin/layout.d.ts +10 -0
- package/dist/client/admin/layout.d.ts.map +1 -0
- package/dist/client/admin/layout.js +6 -0
- package/dist/client/admin/page.d.ts +38 -0
- package/dist/client/admin/page.d.ts.map +1 -0
- package/dist/client/admin/page.js +15 -0
- package/dist/client/admin/utils/apiClient.d.ts +110 -0
- package/dist/client/admin/utils/apiClient.d.ts.map +1 -0
- package/dist/client/admin/utils/apiClient.js +220 -0
- package/dist/client/admin/utils/auth.d.ts +27 -0
- package/dist/client/admin/utils/auth.d.ts.map +1 -0
- package/dist/client/admin/utils/auth.js +58 -0
- package/dist/client/admin/utils/index.d.ts +6 -0
- package/dist/client/admin/utils/index.d.ts.map +1 -0
- package/dist/client/admin/utils/index.js +5 -0
- package/dist/client/admin/utils/serializeConfig.d.ts +7 -0
- package/dist/client/admin/utils/serializeConfig.d.ts.map +1 -0
- package/dist/client/admin/utils/serializeConfig.js +35 -0
- package/dist/client/hooks.d.ts +18 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +29 -0
- package/dist/client/http/client.d.ts +15 -0
- package/dist/client/http/client.d.ts.map +1 -0
- package/dist/client/http/client.js +49 -0
- package/dist/client/http/fetchBanner.d.ts +18 -0
- package/dist/client/http/fetchBanner.d.ts.map +1 -0
- package/dist/client/http/fetchBanner.js +44 -0
- package/dist/client/http/fetchCard.d.ts +18 -0
- package/dist/client/http/fetchCard.d.ts.map +1 -0
- package/dist/client/http/fetchCard.js +46 -0
- package/dist/client/http/fetchEvents.d.ts +18 -0
- package/dist/client/http/fetchEvents.d.ts.map +1 -0
- package/dist/client/http/fetchEvents.js +44 -0
- package/dist/client/http/fetchHero.d.ts +17 -0
- package/dist/client/http/fetchHero.d.ts.map +1 -0
- package/dist/client/http/fetchHero.js +55 -0
- package/dist/client/http/fetchMainInfos.d.ts +17 -0
- package/dist/client/http/fetchMainInfos.d.ts.map +1 -0
- package/dist/client/http/fetchMainInfos.js +44 -0
- package/dist/client/http/fetchVideos.d.ts +13 -0
- package/dist/client/http/fetchVideos.d.ts.map +1 -0
- package/dist/client/http/fetchVideos.js +36 -0
- package/dist/client/http/index.d.ts +19 -0
- package/dist/client/http/index.d.ts.map +1 -0
- package/dist/client/http/index.js +11 -0
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +15 -0
- package/dist/client/richtext/RichTextEditor.d.ts +48 -0
- package/dist/client/richtext/RichTextEditor.d.ts.map +1 -0
- package/dist/client/richtext/RichTextEditor.js +360 -0
- package/dist/client/richtext/components/ImageNodeComponent.d.ts +9 -0
- package/dist/client/richtext/components/ImageNodeComponent.d.ts.map +1 -0
- package/dist/client/richtext/components/ImageNodeComponent.js +99 -0
- package/dist/client/richtext/components/ImageUploadButton.d.ts +11 -0
- package/dist/client/richtext/components/ImageUploadButton.d.ts.map +1 -0
- package/dist/client/richtext/components/ImageUploadButton.js +103 -0
- package/dist/client/richtext/index.d.ts +92 -0
- package/dist/client/richtext/index.d.ts.map +1 -0
- package/dist/client/richtext/index.js +74 -0
- package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts +20 -0
- package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts.map +1 -0
- package/dist/client/richtext/nodes/DecoratorBlockNode.js +29 -0
- package/dist/client/richtext/nodes/ImageNode.d.ts +51 -0
- package/dist/client/richtext/nodes/ImageNode.d.ts.map +1 -0
- package/dist/client/richtext/nodes/ImageNode.js +95 -0
- package/dist/client/richtext/plugins/CollaborationPlugin.d.ts +13 -0
- package/dist/client/richtext/plugins/CollaborationPlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/CollaborationPlugin.js +8 -0
- package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts +4 -0
- package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/CursorsOverlayPlugin.js +50 -0
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts +7 -0
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.js +248 -0
- package/dist/client/richtext/plugins/ImagePlugin.d.ts +3 -0
- package/dist/client/richtext/plugins/ImagePlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/ImagePlugin.js +73 -0
- package/dist/client/richtext/plugins/PastePlugin.d.ts +2 -0
- package/dist/client/richtext/plugins/PastePlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/PastePlugin.js +36 -0
- package/dist/client/richtext/plugins/ToolbarPlugin.d.ts +8 -0
- package/dist/client/richtext/plugins/ToolbarPlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/ToolbarPlugin.js +204 -0
- package/dist/client/ui/index.d.ts +111 -0
- package/dist/client/ui/index.d.ts.map +1 -0
- package/dist/client/ui/index.js +130 -0
- package/dist/collections/CollectionOperations.d.ts +27 -0
- package/dist/collections/CollectionOperations.d.ts.map +1 -0
- package/dist/collections/CollectionOperations.js +34 -0
- package/dist/collections/hooks.d.ts +11 -0
- package/dist/collections/hooks.d.ts.map +1 -0
- package/dist/collections/hooks.js +35 -0
- package/dist/collections/index.d.ts +2 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +1 -0
- package/dist/collections/operations/create.d.ts +10 -0
- package/dist/collections/operations/create.d.ts.map +1 -0
- package/dist/collections/operations/create.js +101 -0
- package/dist/collections/operations/delete.d.ts +10 -0
- package/dist/collections/operations/delete.d.ts.map +1 -0
- package/dist/collections/operations/delete.js +16 -0
- package/dist/collections/operations/fieldHooks.d.ts +21 -0
- package/dist/collections/operations/fieldHooks.d.ts.map +1 -0
- package/dist/collections/operations/fieldHooks.js +51 -0
- package/dist/collections/operations/find.d.ts +10 -0
- package/dist/collections/operations/find.d.ts.map +1 -0
- package/dist/collections/operations/find.js +124 -0
- package/dist/collections/operations/findById.d.ts +15 -0
- package/dist/collections/operations/findById.d.ts.map +1 -0
- package/dist/collections/operations/findById.js +59 -0
- package/dist/collections/operations/update.d.ts +10 -0
- package/dist/collections/operations/update.d.ts.map +1 -0
- package/dist/collections/operations/update.js +134 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +61 -0
- package/dist/config/runtime.d.ts +22 -0
- package/dist/config/runtime.d.ts.map +1 -0
- package/dist/config/runtime.js +32 -0
- package/dist/config/utils.d.ts +12 -0
- package/dist/config/utils.d.ts.map +1 -0
- package/dist/config/utils.js +20 -0
- package/dist/database/index.d.ts +1 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +6 -0
- package/dist/database/ssl-config.d.ts +9 -0
- package/dist/database/ssl-config.d.ts.map +1 -0
- package/dist/database/ssl-config.js +7 -0
- package/dist/database/type-adapter.d.ts +113 -0
- package/dist/database/type-adapter.d.ts.map +1 -0
- package/dist/database/type-adapter.js +97 -0
- package/dist/database/universal-postgres.d.ts +45 -0
- package/dist/database/universal-postgres.d.ts.map +1 -0
- package/dist/database/universal-postgres.js +526 -0
- package/dist/dataloader.d.ts +26 -0
- package/dist/dataloader.d.ts.map +1 -0
- package/dist/dataloader.js +162 -0
- package/dist/error-handling/circuit-breaker.d.ts +262 -0
- package/dist/error-handling/circuit-breaker.d.ts.map +1 -0
- package/dist/error-handling/circuit-breaker.js +542 -0
- package/dist/error-handling/error-boundary.d.ts +94 -0
- package/dist/error-handling/error-boundary.d.ts.map +1 -0
- package/dist/error-handling/error-boundary.js +285 -0
- package/dist/error-handling/error-reporter.d.ts +213 -0
- package/dist/error-handling/error-reporter.d.ts.map +1 -0
- package/dist/error-handling/error-reporter.js +506 -0
- package/dist/error-handling/fallback-components.d.ts +131 -0
- package/dist/error-handling/fallback-components.d.ts.map +1 -0
- package/dist/error-handling/fallback-components.js +371 -0
- package/dist/error-handling/index.d.ts +16 -0
- package/dist/error-handling/index.d.ts.map +1 -0
- package/dist/error-handling/index.js +15 -0
- package/dist/error-handling/retry.d.ts +194 -0
- package/dist/error-handling/retry.d.ts.map +1 -0
- package/dist/error-handling/retry.js +450 -0
- package/dist/errors/index.d.ts +23 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +40 -0
- package/dist/factories/builders.d.ts +50 -0
- package/dist/factories/builders.d.ts.map +1 -0
- package/dist/factories/builders.js +77 -0
- package/dist/factories/index.d.ts +2 -0
- package/dist/factories/index.d.ts.map +1 -0
- package/dist/factories/index.js +1 -0
- package/dist/features.d.ts +82 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +89 -0
- package/dist/fieldTraversal.d.ts +26 -0
- package/dist/fieldTraversal.d.ts.map +1 -0
- package/dist/fieldTraversal.js +132 -0
- package/dist/fields/config/types.d.ts +48 -0
- package/dist/fields/config/types.d.ts.map +1 -0
- package/dist/fields/config/types.js +20 -0
- package/dist/fields/getDefaultValue.d.ts +16 -0
- package/dist/fields/getDefaultValue.d.ts.map +1 -0
- package/dist/fields/getDefaultValue.js +20 -0
- package/dist/fields/getFieldPaths.d.ts +25 -0
- package/dist/fields/getFieldPaths.d.ts.map +1 -0
- package/dist/fields/getFieldPaths.js +23 -0
- package/dist/fields/hooks/afterRead/index.d.ts +36 -0
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -0
- package/dist/fields/hooks/afterRead/index.js +70 -0
- package/dist/fields/hooks/afterRead/promise.d.ts +46 -0
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -0
- package/dist/fields/hooks/afterRead/promise.js +178 -0
- package/dist/fields/hooks/afterRead/traverseFields.d.ts +44 -0
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -0
- package/dist/fields/hooks/afterRead/traverseFields.js +37 -0
- package/dist/generated/agents/index.d.ts +8 -0
- package/dist/generated/agents/index.d.ts.map +1 -0
- package/dist/generated/agents/index.js +7 -0
- package/dist/generated/components/index.d.ts +8 -0
- package/dist/generated/components/index.d.ts.map +1 -0
- package/dist/generated/components/index.js +7 -0
- package/dist/generated/functions/index.d.ts +8 -0
- package/dist/generated/functions/index.d.ts.map +1 -0
- package/dist/generated/functions/index.js +7 -0
- package/dist/generated/hooks/index.d.ts +8 -0
- package/dist/generated/hooks/index.d.ts.map +1 -0
- package/dist/generated/hooks/index.js +7 -0
- package/dist/generated/index.d.ts +10 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +9 -0
- package/dist/generated/plans/index.d.ts +8 -0
- package/dist/generated/plans/index.d.ts.map +1 -0
- package/dist/generated/plans/index.js +7 -0
- package/dist/generated/prompts/index.d.ts +8 -0
- package/dist/generated/prompts/index.d.ts.map +1 -0
- package/dist/generated/prompts/index.js +7 -0
- package/dist/generated/tools/index.d.ts +8 -0
- package/dist/generated/tools/index.d.ts.map +1 -0
- package/dist/generated/tools/index.js +7 -0
- package/dist/generated/types/cms.d.ts +1766 -0
- package/dist/generated/types/cms.d.ts.map +1 -0
- package/dist/generated/types/cms.js +12 -0
- package/dist/generated/types/index.d.ts +19 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +28 -0
- package/dist/generated/types/neon.d.ts +11 -0
- package/dist/generated/types/neon.d.ts.map +1 -0
- package/dist/generated/types/neon.js +11 -0
- package/dist/generated/types/supabase.d.ts +193 -0
- package/dist/generated/types/supabase.d.ts.map +1 -0
- package/dist/generated/types/supabase.js +5 -0
- package/dist/globals/GlobalOperations.d.ts +24 -0
- package/dist/globals/GlobalOperations.d.ts.map +1 -0
- package/dist/globals/GlobalOperations.js +149 -0
- package/dist/globals/index.d.ts +2 -0
- package/dist/globals/index.d.ts.map +1 -0
- package/dist/globals/index.js +1 -0
- package/dist/index.d.ts +64 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -33
- package/dist/instance/RevealUIInstance.d.ts +6 -0
- package/dist/instance/RevealUIInstance.d.ts.map +1 -0
- package/dist/instance/RevealUIInstance.js +312 -0
- package/dist/instance/index.d.ts +3 -0
- package/dist/instance/index.d.ts.map +1 -0
- package/dist/instance/index.js +2 -0
- package/dist/instance/logger.d.ts +31 -0
- package/dist/instance/logger.d.ts.map +1 -0
- package/dist/instance/logger.js +42 -0
- package/dist/instance/methods/create.d.ts +10 -0
- package/dist/instance/methods/create.d.ts.map +1 -0
- package/dist/instance/methods/create.js +38 -0
- package/dist/instance/methods/delete.d.ts +10 -0
- package/dist/instance/methods/delete.d.ts.map +1 -0
- package/dist/instance/methods/delete.js +24 -0
- package/dist/instance/methods/find.d.ts +10 -0
- package/dist/instance/methods/find.d.ts.map +1 -0
- package/dist/instance/methods/find.js +23 -0
- package/dist/instance/methods/findById.d.ts +13 -0
- package/dist/instance/methods/findById.d.ts.map +1 -0
- package/dist/instance/methods/findById.js +23 -0
- package/dist/instance/methods/hooks.d.ts +14 -0
- package/dist/instance/methods/hooks.d.ts.map +1 -0
- package/dist/instance/methods/hooks.js +32 -0
- package/dist/instance/methods/update.d.ts +10 -0
- package/dist/instance/methods/update.d.ts.map +1 -0
- package/dist/instance/methods/update.js +42 -0
- package/dist/license.d.ts +73 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +157 -0
- package/dist/monitoring/alerts.d.ts +118 -0
- package/dist/monitoring/alerts.d.ts.map +1 -0
- package/dist/monitoring/alerts.js +324 -0
- package/dist/monitoring/cleanup-manager.d.ts +71 -0
- package/dist/monitoring/cleanup-manager.d.ts.map +1 -0
- package/dist/monitoring/cleanup-manager.js +226 -0
- package/dist/monitoring/health-monitor.d.ts +22 -0
- package/dist/monitoring/health-monitor.d.ts.map +1 -0
- package/dist/monitoring/health-monitor.js +142 -0
- package/dist/monitoring/index.d.ts +14 -0
- package/dist/monitoring/index.d.ts.map +1 -0
- package/dist/monitoring/index.js +17 -0
- package/dist/monitoring/process-registry.d.ts +97 -0
- package/dist/monitoring/process-registry.d.ts.map +1 -0
- package/dist/monitoring/process-registry.js +222 -0
- package/dist/monitoring/query-monitor.d.ts +153 -0
- package/dist/monitoring/query-monitor.d.ts.map +1 -0
- package/dist/monitoring/query-monitor.js +209 -0
- package/dist/monitoring/types.d.ts +231 -0
- package/dist/monitoring/types.d.ts.map +1 -0
- package/dist/monitoring/types.js +42 -0
- package/dist/monitoring/zombie-detector.d.ts +81 -0
- package/dist/monitoring/zombie-detector.d.ts.map +1 -0
- package/dist/monitoring/zombie-detector.js +231 -0
- package/dist/nextjs/index.d.ts +4 -0
- package/dist/nextjs/index.d.ts.map +1 -0
- package/dist/nextjs/index.js +3 -0
- package/dist/nextjs/utilities.d.ts +5 -0
- package/dist/nextjs/utilities.d.ts.map +1 -0
- package/dist/nextjs/utilities.js +16 -0
- package/dist/nextjs/withRevealUI.d.ts +20 -0
- package/dist/nextjs/withRevealUI.d.ts.map +1 -0
- package/dist/nextjs/withRevealUI.js +181 -0
- package/dist/observability/alerts.d.ts +138 -0
- package/dist/observability/alerts.d.ts.map +1 -0
- package/dist/observability/alerts.js +390 -0
- package/dist/observability/health-check.d.ts +95 -0
- package/dist/observability/health-check.d.ts.map +1 -0
- package/dist/observability/health-check.js +345 -0
- package/dist/observability/index.d.ts +12 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +11 -0
- package/dist/observability/logger.d.ts +47 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +140 -0
- package/dist/observability/metrics.d.ts +205 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +429 -0
- package/dist/observability/tracing.d.ts +149 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +381 -0
- package/dist/optimization/asset-optimizer.d.ts +202 -0
- package/dist/optimization/asset-optimizer.d.ts.map +1 -0
- package/dist/optimization/asset-optimizer.js +312 -0
- package/dist/optimization/build-optimizer.d.ts +202 -0
- package/dist/optimization/build-optimizer.d.ts.map +1 -0
- package/dist/optimization/build-optimizer.js +271 -0
- package/dist/optimization/bundle-analyzer.d.ts +98 -0
- package/dist/optimization/bundle-analyzer.d.ts.map +1 -0
- package/dist/optimization/bundle-analyzer.js +322 -0
- package/dist/optimization/code-splitting.d.ts +144 -0
- package/dist/optimization/code-splitting.d.ts.map +1 -0
- package/dist/optimization/code-splitting.js +290 -0
- package/dist/plugin/index.d.ts +12 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +4 -0
- package/dist/plugins/form-builder.d.ts +115 -0
- package/dist/plugins/form-builder.d.ts.map +1 -0
- package/dist/plugins/form-builder.js +239 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/nested-docs.d.ts +8 -0
- package/dist/plugins/nested-docs.d.ts.map +1 -0
- package/dist/plugins/nested-docs.js +67 -0
- package/dist/plugins/redirects.d.ts +17 -0
- package/dist/plugins/redirects.d.ts.map +1 -0
- package/dist/plugins/redirects.js +62 -0
- package/dist/queries/index.d.ts +2 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +1 -0
- package/dist/queries/queryBuilder.d.ts +47 -0
- package/dist/queries/queryBuilder.d.ts.map +1 -0
- package/dist/queries/queryBuilder.js +252 -0
- package/dist/relationships/analyzer.d.ts +39 -0
- package/dist/relationships/analyzer.d.ts.map +1 -0
- package/dist/relationships/analyzer.js +127 -0
- package/dist/relationships/index.d.ts +3 -0
- package/dist/relationships/index.d.ts.map +1 -0
- package/dist/relationships/index.js +2 -0
- package/dist/relationships/populate-helpers.d.ts +104 -0
- package/dist/relationships/populate-helpers.d.ts.map +1 -0
- package/dist/relationships/populate-helpers.js +187 -0
- package/dist/relationships/population.d.ts +42 -0
- package/dist/relationships/population.d.ts.map +1 -0
- package/dist/relationships/population.js +188 -0
- package/dist/revealui.d.ts +46 -0
- package/dist/revealui.d.ts.map +1 -0
- package/dist/revealui.js +92 -0
- package/dist/richtext/exports/client/rcc.d.ts +37 -0
- package/dist/richtext/exports/client/rcc.d.ts.map +1 -0
- package/dist/richtext/exports/client/rcc.js +182 -0
- package/dist/richtext/exports/server/rsc.d.ts +117 -0
- package/dist/richtext/exports/server/rsc.d.ts.map +1 -0
- package/dist/richtext/exports/server/rsc.js +288 -0
- package/dist/richtext/index.d.ts +161 -0
- package/dist/richtext/index.d.ts.map +1 -0
- package/dist/richtext/index.js +243 -0
- package/dist/richtext/lexical.d.ts +23 -0
- package/dist/richtext/lexical.d.ts.map +1 -0
- package/dist/richtext/lexical.js +35 -0
- package/dist/security/audit.d.ts +188 -0
- package/dist/security/audit.d.ts.map +1 -0
- package/dist/security/audit.js +431 -0
- package/dist/security/auth.d.ts +241 -0
- package/dist/security/auth.d.ts.map +1 -0
- package/dist/security/auth.js +474 -0
- package/dist/security/authorization.d.ts +235 -0
- package/dist/security/authorization.d.ts.map +1 -0
- package/dist/security/authorization.js +434 -0
- package/dist/security/encryption.d.ts +214 -0
- package/dist/security/encryption.d.ts.map +1 -0
- package/dist/security/encryption.js +506 -0
- package/dist/security/gdpr.d.ts +300 -0
- package/dist/security/gdpr.d.ts.map +1 -0
- package/dist/security/gdpr.js +470 -0
- package/dist/security/headers.d.ts +182 -0
- package/dist/security/headers.d.ts.map +1 -0
- package/dist/security/headers.js +402 -0
- package/dist/security/index.d.ts +19 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +18 -0
- package/dist/server/index.d.ts +21 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +28 -0
- package/dist/server/renderPage.d.ts +69 -0
- package/dist/server/renderPage.d.ts.map +1 -0
- package/dist/server/renderPage.js +109 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/vercel-blob.d.ts +17 -0
- package/dist/storage/vercel-blob.d.ts.map +1 -0
- package/dist/storage/vercel-blob.js +83 -0
- package/dist/translations/index.d.ts +17 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +1 -0
- package/dist/types/access.d.ts +67 -0
- package/dist/types/access.d.ts.map +1 -0
- package/dist/types/access.js +8 -0
- package/dist/types/api.d.ts +57 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +8 -0
- package/dist/types/cms.d.ts +8 -0
- package/dist/types/cms.d.ts.map +1 -0
- package/dist/types/cms.js +6 -0
- package/dist/types/config.d.ts +152 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +9 -0
- package/dist/types/core.d.ts +11 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +9 -0
- package/dist/types/extensions.d.ts +116 -0
- package/dist/types/extensions.d.ts.map +1 -0
- package/dist/types/extensions.js +8 -0
- package/dist/types/frontend.d.ts +53 -0
- package/dist/types/frontend.d.ts.map +1 -0
- package/dist/types/frontend.js +7 -0
- package/dist/types/generated.d.ts +14 -0
- package/dist/types/generated.d.ts.map +1 -0
- package/dist/types/generated.js +11 -0
- package/dist/types/hooks.d.ts +53 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +8 -0
- package/dist/types/index.d.ts +49 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +61 -0
- package/dist/types/interfaces/app.d.ts +50 -0
- package/dist/types/interfaces/app.d.ts.map +1 -0
- package/dist/types/interfaces/app.js +5 -0
- package/dist/types/jobs.d.ts +112 -0
- package/dist/types/jobs.d.ts.map +1 -0
- package/dist/types/jobs.js +7 -0
- package/dist/types/legacy.d.ts +147 -0
- package/dist/types/legacy.d.ts.map +1 -0
- package/dist/types/legacy.js +8 -0
- package/dist/types/plugins.d.ts +17 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +8 -0
- package/dist/types/query.d.ts +99 -0
- package/dist/types/query.d.ts.map +1 -0
- package/dist/types/query.js +24 -0
- package/dist/types/request.d.ts +40 -0
- package/dist/types/request.d.ts.map +1 -0
- package/dist/types/request.js +8 -0
- package/dist/types/richtext.d.ts +23 -0
- package/dist/types/richtext.d.ts.map +1 -0
- package/dist/types/richtext.js +8 -0
- package/dist/types/runtime.d.ts +216 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/runtime.js +9 -0
- package/dist/types/schema.d.ts +9 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +7 -0
- package/dist/types/user.d.ts +48 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +8 -0
- package/dist/utils/access-conversion.d.ts +17 -0
- package/dist/utils/access-conversion.d.ts.map +1 -0
- package/dist/utils/access-conversion.js +96 -0
- package/dist/utils/api-wrapper.d.ts +63 -0
- package/dist/utils/api-wrapper.d.ts.map +1 -0
- package/dist/utils/api-wrapper.js +151 -0
- package/dist/utils/block-conversion.d.ts +21 -0
- package/dist/utils/block-conversion.d.ts.map +1 -0
- package/dist/utils/block-conversion.js +109 -0
- package/dist/utils/cache.d.ts +86 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +154 -0
- package/dist/utils/deep-clone.d.ts +25 -0
- package/dist/utils/deep-clone.d.ts.map +1 -0
- package/dist/utils/deep-clone.js +115 -0
- package/dist/utils/error-responses.d.ts +57 -0
- package/dist/utils/error-responses.d.ts.map +1 -0
- package/dist/utils/error-responses.js +96 -0
- package/dist/utils/errors.d.ts +97 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +397 -0
- package/dist/utils/field-conversion.d.ts +40 -0
- package/dist/utils/field-conversion.d.ts.map +1 -0
- package/dist/utils/field-conversion.js +275 -0
- package/dist/utils/flattenResult.d.ts +7 -0
- package/dist/utils/flattenResult.d.ts.map +1 -0
- package/dist/utils/flattenResult.js +23 -0
- package/dist/utils/getBlockSelect.d.ts +12 -0
- package/dist/utils/getBlockSelect.d.ts.map +1 -0
- package/dist/utils/getBlockSelect.js +12 -0
- package/dist/utils/getSelectMode.d.ts +8 -0
- package/dist/utils/getSelectMode.d.ts.map +1 -0
- package/dist/utils/getSelectMode.js +21 -0
- package/dist/utils/isValidID.d.ts +5 -0
- package/dist/utils/isValidID.d.ts.map +1 -0
- package/dist/utils/isValidID.js +13 -0
- package/dist/utils/json-parsing.d.ts +48 -0
- package/dist/utils/json-parsing.d.ts.map +1 -0
- package/dist/utils/json-parsing.js +130 -0
- package/dist/utils/jwt-validation.d.ts +14 -0
- package/dist/utils/jwt-validation.d.ts.map +1 -0
- package/dist/utils/jwt-validation.js +36 -0
- package/dist/utils/logger-client.d.ts +32 -0
- package/dist/utils/logger-client.d.ts.map +1 -0
- package/dist/utils/logger-client.js +55 -0
- package/dist/utils/logger-server.d.ts +32 -0
- package/dist/utils/logger-server.d.ts.map +1 -0
- package/dist/utils/logger-server.js +68 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +12 -0
- package/dist/utils/request-context.d.ts +143 -0
- package/dist/utils/request-context.d.ts.map +1 -0
- package/dist/utils/request-context.js +168 -0
- package/dist/utils/request-headers.d.ts +15 -0
- package/dist/utils/request-headers.d.ts.map +1 -0
- package/dist/utils/request-headers.js +31 -0
- package/dist/utils/stripUnselectedFields.d.ts +10 -0
- package/dist/utils/stripUnselectedFields.d.ts.map +1 -0
- package/dist/utils/stripUnselectedFields.js +20 -0
- package/dist/utils/type-guards.d.ts +33 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +63 -0
- package/dist/utils/user.d.ts +14 -0
- package/dist/utils/user.d.ts.map +1 -0
- package/dist/utils/user.js +15 -0
- package/package.json +250 -697
- package/LICENSE_SUMMARY.md +0 -55
- package/NOTICE +0 -34
- package/dist/core/gaurds/logger/log404/index.spec.snapshot-1 +0 -8
- package/dist/core/gaurds/logger/log404/index.spec.snapshot-2 +0 -9
- package/dist/exports/RenderErrorPage.js +0 -3
- package/dist/exports/__internal.js +0 -3
- package/dist/exports/abort.js +0 -3
- package/dist/exports/bin-entry.js +0 -17
- package/dist/exports/cli.js +0 -3
- package/dist/exports/client.js +0 -3
- package/dist/exports/config.js +0 -1
- package/dist/exports/helpers.js +0 -1
- package/dist/exports/index.js +0 -33
- package/dist/exports/plugin.js +0 -3
- package/dist/exports/prerender.js +0 -3
- package/dist/exports/router.js +0 -3
- package/dist/exports/routing.js +0 -3
- package/dist/exports/server.js +0 -3
- package/dist/exports/setup.js +0 -3
- package/dist/exports/types.js +0 -1
- package/dist/integration/styles.css +0 -141
- package/dist/node/cli/index.js +0 -18
- package/dist/shared/RenderErrorPage.d.ts +0 -3
- package/dist/shared/RenderErrorPage.js +0 -3
- package/dist/shared/abort.js +0 -3
- package/dist/shared/route/routing.js +0 -3
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RevealUI CMS UI Components
|
|
3
|
+
*
|
|
4
|
+
* Provides form field components and utilities for the CMS admin interface.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
export interface TextInputProps {
|
|
8
|
+
path: string;
|
|
9
|
+
value?: string;
|
|
10
|
+
onChange?: (value: string) => void;
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
readOnly?: boolean;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface FieldLabelProps {
|
|
17
|
+
htmlFor?: string;
|
|
18
|
+
label: string;
|
|
19
|
+
required?: boolean;
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare const TextInput: React.FC<TextInputProps>;
|
|
23
|
+
export declare const FieldLabel: React.FC<FieldLabelProps>;
|
|
24
|
+
export interface FormField {
|
|
25
|
+
value: unknown;
|
|
26
|
+
setValue: (value: unknown) => void;
|
|
27
|
+
path: string;
|
|
28
|
+
}
|
|
29
|
+
export interface UseFormFieldsOptions {
|
|
30
|
+
fields: string[];
|
|
31
|
+
}
|
|
32
|
+
export declare function useFormFields<T = unknown>(selectorOrOptions: ((fields: [Record<string, FormField>, unknown]) => T) | UseFormFieldsOptions): T | Record<string, FormField>;
|
|
33
|
+
export interface UseFieldOptions {
|
|
34
|
+
path: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function useField<T = unknown>(options: UseFieldOptions): {
|
|
37
|
+
value: T | undefined;
|
|
38
|
+
setValue: (value: T) => void;
|
|
39
|
+
path: string;
|
|
40
|
+
};
|
|
41
|
+
export interface ButtonProps {
|
|
42
|
+
children: React.ReactNode;
|
|
43
|
+
onClick?: (e?: React.MouseEvent<HTMLButtonElement>) => void;
|
|
44
|
+
type?: 'button' | 'submit' | 'reset';
|
|
45
|
+
variant?: 'primary' | 'secondary' | 'ghost';
|
|
46
|
+
buttonStyle?: string;
|
|
47
|
+
size?: 'sm' | 'md' | 'lg';
|
|
48
|
+
disabled?: boolean;
|
|
49
|
+
className?: string;
|
|
50
|
+
el?: string;
|
|
51
|
+
icon?: string;
|
|
52
|
+
round?: boolean;
|
|
53
|
+
tooltip?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare const Button: React.FC<ButtonProps>;
|
|
56
|
+
export interface SelectOption {
|
|
57
|
+
label: string;
|
|
58
|
+
value: string;
|
|
59
|
+
}
|
|
60
|
+
export interface SelectInputProps {
|
|
61
|
+
path: string;
|
|
62
|
+
value?: string;
|
|
63
|
+
options: SelectOption[];
|
|
64
|
+
onChange?: (value: string) => void;
|
|
65
|
+
placeholder?: string;
|
|
66
|
+
className?: string;
|
|
67
|
+
disabled?: boolean;
|
|
68
|
+
}
|
|
69
|
+
export declare const SelectInput: React.FC<SelectInputProps>;
|
|
70
|
+
export interface TextareaProps {
|
|
71
|
+
path: string;
|
|
72
|
+
value?: string;
|
|
73
|
+
onChange?: (value: string) => void;
|
|
74
|
+
placeholder?: string;
|
|
75
|
+
className?: string;
|
|
76
|
+
rows?: number;
|
|
77
|
+
disabled?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export declare const Textarea: React.FC<TextareaProps>;
|
|
80
|
+
export interface CheckboxProps {
|
|
81
|
+
path: string;
|
|
82
|
+
checked?: boolean;
|
|
83
|
+
onChange?: (checked: boolean) => void;
|
|
84
|
+
label?: string;
|
|
85
|
+
className?: string;
|
|
86
|
+
disabled?: boolean;
|
|
87
|
+
}
|
|
88
|
+
export declare const Checkbox: React.FC<CheckboxProps>;
|
|
89
|
+
interface ModalContextType {
|
|
90
|
+
openModals: Set<string>;
|
|
91
|
+
toggleModal: (slug: string) => void;
|
|
92
|
+
closeModal: (slug: string) => void;
|
|
93
|
+
isModalOpen: (slug: string) => boolean;
|
|
94
|
+
}
|
|
95
|
+
export declare function useModal(): ModalContextType;
|
|
96
|
+
export interface ModalProviderProps {
|
|
97
|
+
children: React.ReactNode;
|
|
98
|
+
}
|
|
99
|
+
export declare const ModalProvider: React.FC<ModalProviderProps>;
|
|
100
|
+
export interface FieldsDrawerProps {
|
|
101
|
+
data: Record<string, unknown>;
|
|
102
|
+
drawerSlug: string;
|
|
103
|
+
drawerTitle: string;
|
|
104
|
+
featureKey: string;
|
|
105
|
+
schemaPath: string;
|
|
106
|
+
schemaPathSuffix?: string;
|
|
107
|
+
handleDrawerSubmit: (fields: unknown, data: Record<string, unknown>) => void;
|
|
108
|
+
}
|
|
109
|
+
export declare const FieldsDrawer: React.FC<FieldsDrawerProps>;
|
|
110
|
+
export {};
|
|
111
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/ui/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RevealUI CMS UI Components
|
|
3
|
+
*
|
|
4
|
+
* Provides form field components and utilities for the CMS admin interface.
|
|
5
|
+
*/
|
|
6
|
+
'use client';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { logger } from '@revealui/core/utils/logger';
|
|
9
|
+
import React from 'react';
|
|
10
|
+
// Text input component
|
|
11
|
+
export const TextInput = ({ path, value = '', onChange, placeholder, className, readOnly, disabled, }) => {
|
|
12
|
+
return (_jsx("input", { type: "text", name: path, value: value, onChange: (e) => onChange?.(e.target.value), placeholder: placeholder, className: className, readOnly: readOnly, disabled: disabled }));
|
|
13
|
+
};
|
|
14
|
+
// Field label component
|
|
15
|
+
export const FieldLabel = ({ htmlFor, label, required, className }) => {
|
|
16
|
+
return (_jsxs("label", { htmlFor: htmlFor, className: className, children: [label, required && _jsx("span", { className: "required", children: "*" })] }));
|
|
17
|
+
};
|
|
18
|
+
// Hook for accessing form fields (RevealUI-compatible signature)
|
|
19
|
+
export function useFormFields(selectorOrOptions) {
|
|
20
|
+
const [fieldValues, setFieldValues] = React.useState({});
|
|
21
|
+
// If a selector function is provided
|
|
22
|
+
if (typeof selectorOrOptions === 'function') {
|
|
23
|
+
// Create a dispatch placeholder
|
|
24
|
+
const dispatch = (action) => {
|
|
25
|
+
logger.debug('Form dispatch', { action });
|
|
26
|
+
};
|
|
27
|
+
// Convert field values to FormField objects for the selector
|
|
28
|
+
const formFields = {};
|
|
29
|
+
Object.keys(fieldValues).forEach((fieldPath) => {
|
|
30
|
+
formFields[fieldPath] = {
|
|
31
|
+
value: fieldValues[fieldPath],
|
|
32
|
+
setValue: (value) => {
|
|
33
|
+
setFieldValues((prev) => ({
|
|
34
|
+
...prev,
|
|
35
|
+
[fieldPath]: value,
|
|
36
|
+
}));
|
|
37
|
+
},
|
|
38
|
+
path: fieldPath,
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
return selectorOrOptions([formFields, dispatch]);
|
|
42
|
+
}
|
|
43
|
+
// Legacy options-based usage
|
|
44
|
+
const result = {};
|
|
45
|
+
for (const fieldPath of selectorOrOptions.fields) {
|
|
46
|
+
result[fieldPath] = {
|
|
47
|
+
value: fieldValues[fieldPath],
|
|
48
|
+
setValue: (value) => {
|
|
49
|
+
setFieldValues((prev) => ({
|
|
50
|
+
...prev,
|
|
51
|
+
[fieldPath]: value,
|
|
52
|
+
}));
|
|
53
|
+
},
|
|
54
|
+
path: fieldPath,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
export function useField(options) {
|
|
60
|
+
const [value, setValueState] = React.useState(undefined);
|
|
61
|
+
const setValue = React.useCallback((newValue) => {
|
|
62
|
+
setValueState(newValue);
|
|
63
|
+
}, []);
|
|
64
|
+
return {
|
|
65
|
+
value,
|
|
66
|
+
setValue,
|
|
67
|
+
path: options.path,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export const Button = ({ children, onClick, type = 'button', variant = 'primary', size = 'md', disabled, className, }) => {
|
|
71
|
+
return (_jsx("button", { type: type, onClick: onClick, disabled: disabled, className: `btn btn-${variant} btn-${size} ${className || ''}`, children: children }));
|
|
72
|
+
};
|
|
73
|
+
export const SelectInput = ({ path, value = '', options, onChange, placeholder, className, disabled, }) => {
|
|
74
|
+
return (_jsxs("select", { name: path, value: value, onChange: (e) => onChange?.(e.target.value), className: className, disabled: disabled, children: [placeholder && (_jsx("option", { value: "", disabled: true, children: placeholder })), options.map((option) => (_jsx("option", { value: option.value, children: option.label }, option.value)))] }));
|
|
75
|
+
};
|
|
76
|
+
export const Textarea = ({ path, value = '', onChange, placeholder, className, rows = 3, disabled, }) => {
|
|
77
|
+
return (_jsx("textarea", { name: path, value: value, onChange: (e) => onChange?.(e.target.value), placeholder: placeholder, className: className, rows: rows, disabled: disabled }));
|
|
78
|
+
};
|
|
79
|
+
export const Checkbox = ({ path, checked = false, onChange, label, className, disabled, }) => {
|
|
80
|
+
return (_jsxs("label", { className: className, children: [_jsx("input", { type: "checkbox", name: path, checked: checked, onChange: (e) => onChange?.(e.target.checked), disabled: disabled }), label && _jsx("span", { children: label })] }));
|
|
81
|
+
};
|
|
82
|
+
const ModalContext = React.createContext({
|
|
83
|
+
openModals: new Set(),
|
|
84
|
+
toggleModal: () => undefined,
|
|
85
|
+
closeModal: () => undefined,
|
|
86
|
+
isModalOpen: () => false,
|
|
87
|
+
});
|
|
88
|
+
export function useModal() {
|
|
89
|
+
const context = React.useContext(ModalContext);
|
|
90
|
+
return context;
|
|
91
|
+
}
|
|
92
|
+
export const ModalProvider = ({ children }) => {
|
|
93
|
+
const [openModals, setOpenModals] = React.useState(new Set());
|
|
94
|
+
const toggleModal = React.useCallback((slug) => {
|
|
95
|
+
setOpenModals((prev) => {
|
|
96
|
+
const next = new Set(prev);
|
|
97
|
+
if (next.has(slug)) {
|
|
98
|
+
next.delete(slug);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
next.add(slug);
|
|
102
|
+
}
|
|
103
|
+
return next;
|
|
104
|
+
});
|
|
105
|
+
}, []);
|
|
106
|
+
const closeModal = React.useCallback((slug) => {
|
|
107
|
+
setOpenModals((prev) => {
|
|
108
|
+
const next = new Set(prev);
|
|
109
|
+
next.delete(slug);
|
|
110
|
+
return next;
|
|
111
|
+
});
|
|
112
|
+
}, []);
|
|
113
|
+
const isModalOpen = React.useCallback((slug) => openModals.has(slug), [openModals]);
|
|
114
|
+
return (_jsx(ModalContext.Provider, { value: { openModals, toggleModal, closeModal, isModalOpen }, children: children }));
|
|
115
|
+
};
|
|
116
|
+
export const FieldsDrawer = ({ data, drawerSlug, drawerTitle, handleDrawerSubmit, }) => {
|
|
117
|
+
const { isModalOpen, closeModal } = useModal();
|
|
118
|
+
const [formData, setFormData] = React.useState(data);
|
|
119
|
+
React.useEffect(() => {
|
|
120
|
+
setFormData(data);
|
|
121
|
+
}, [data]);
|
|
122
|
+
if (!isModalOpen(drawerSlug)) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const handleSubmit = (e) => {
|
|
126
|
+
e.preventDefault();
|
|
127
|
+
handleDrawerSubmit(null, formData);
|
|
128
|
+
};
|
|
129
|
+
return (_jsx("div", { className: "fields-drawer-overlay", children: _jsxs("div", { className: "fields-drawer", children: [_jsxs("div", { className: "fields-drawer-header", children: [_jsx("h3", { children: drawerTitle }), _jsx("button", { type: "button", onClick: () => closeModal(drawerSlug), children: "\u00D7" })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsx("div", { className: "fields-drawer-content", children: _jsx(TextInput, { path: "url", value: formData.url || '', onChange: (value) => setFormData({ ...formData, url: value }), placeholder: "Enter URL" }) }), _jsxs("div", { className: "fields-drawer-footer", children: [_jsx(Button, { type: "submit", variant: "primary", children: "Submit" }), _jsx(Button, { type: "button", variant: "secondary", onClick: () => closeModal(drawerSlug), children: "Cancel" })] })] })] }) }));
|
|
130
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Operations
|
|
3
|
+
*
|
|
4
|
+
* Handles CRUD operations for collections with relationship population,
|
|
5
|
+
* hooks, and query building.
|
|
6
|
+
*/
|
|
7
|
+
import type { DatabaseResult, PopulateType, RevealCollectionConfig, RevealCreateOptions, RevealDeleteOptions, RevealDocument, RevealFindOptions, RevealPaginatedResult, RevealRequest, RevealUpdateOptions } from '../types/index.js';
|
|
8
|
+
export declare class RevealUICollection {
|
|
9
|
+
config: RevealCollectionConfig;
|
|
10
|
+
db: {
|
|
11
|
+
query: (query: string, values?: unknown[]) => Promise<DatabaseResult>;
|
|
12
|
+
} | null;
|
|
13
|
+
constructor(config: RevealCollectionConfig, db: {
|
|
14
|
+
query: (query: string, values?: unknown[]) => Promise<DatabaseResult>;
|
|
15
|
+
} | null);
|
|
16
|
+
find(options: RevealFindOptions): Promise<RevealPaginatedResult>;
|
|
17
|
+
findByID(options: {
|
|
18
|
+
id: string | number;
|
|
19
|
+
depth?: number;
|
|
20
|
+
req?: RevealRequest;
|
|
21
|
+
populate?: PopulateType;
|
|
22
|
+
}): Promise<RevealDocument | null>;
|
|
23
|
+
create(options: RevealCreateOptions): Promise<RevealDocument>;
|
|
24
|
+
update(options: RevealUpdateOptions): Promise<RevealDocument>;
|
|
25
|
+
delete(options: RevealDeleteOptions): Promise<RevealDocument>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=CollectionOperations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionOperations.d.ts","sourceRoot":"","sources":["../../src/collections/CollectionOperations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACpB,MAAM,mBAAmB,CAAA;AAO1B,qBAAa,kBAAkB;IAC7B,MAAM,EAAE,sBAAsB,CAAA;IAC9B,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;KACtE,GAAG,IAAI,CAAA;gBAGN,MAAM,EAAE,sBAAsB,EAC9B,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;KACtE,GAAG,IAAI;IAMJ,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIhE,QAAQ,CAAC,OAAO,EAAE;QACtB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,GAAG,CAAC,EAAE,aAAa,CAAA;QACnB,QAAQ,CAAC,EAAE,YAAY,CAAA;KACxB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI5B,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAI7D,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAI7D,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;CAGpE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Operations
|
|
3
|
+
*
|
|
4
|
+
* Handles CRUD operations for collections with relationship population,
|
|
5
|
+
* hooks, and query building.
|
|
6
|
+
*/
|
|
7
|
+
import { create } from './operations/create.js';
|
|
8
|
+
import { deleteDocument } from './operations/delete.js';
|
|
9
|
+
import { find } from './operations/find.js';
|
|
10
|
+
import { findByID } from './operations/findById.js';
|
|
11
|
+
import { update } from './operations/update.js';
|
|
12
|
+
export class RevealUICollection {
|
|
13
|
+
config;
|
|
14
|
+
db;
|
|
15
|
+
constructor(config, db) {
|
|
16
|
+
this.config = config;
|
|
17
|
+
this.db = db;
|
|
18
|
+
}
|
|
19
|
+
async find(options) {
|
|
20
|
+
return find(this.config, this.db, options);
|
|
21
|
+
}
|
|
22
|
+
async findByID(options) {
|
|
23
|
+
return findByID(this.config, this.db, options);
|
|
24
|
+
}
|
|
25
|
+
async create(options) {
|
|
26
|
+
return create(this.config, this.db, options);
|
|
27
|
+
}
|
|
28
|
+
async update(options) {
|
|
29
|
+
return update(this.config, this.db, options);
|
|
30
|
+
}
|
|
31
|
+
async delete(options) {
|
|
32
|
+
return deleteDocument(this.config, this.db, options);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Hooks
|
|
3
|
+
*
|
|
4
|
+
* Utilities for calling collection hooks.
|
|
5
|
+
*/
|
|
6
|
+
import type { RevealCollectionConfig, RevealDocument, RevealRequest, RevealUIInstance } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Call afterChange hooks for a collection
|
|
9
|
+
*/
|
|
10
|
+
export declare function callAfterChangeHooks(config: RevealCollectionConfig, doc: RevealDocument, req: RevealRequest, operation: 'create' | 'update', previousDoc?: RevealDocument, revealui?: RevealUIInstance): Promise<RevealDocument>;
|
|
11
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/collections/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAE1B;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAC9B,WAAW,CAAC,EAAE,cAAc,EAC5B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,cAAc,CAAC,CA2CzB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Hooks
|
|
3
|
+
*
|
|
4
|
+
* Utilities for calling collection hooks.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Call afterChange hooks for a collection
|
|
8
|
+
*/
|
|
9
|
+
export async function callAfterChangeHooks(config, doc, req, operation, previousDoc, revealui) {
|
|
10
|
+
if (!config.hooks?.afterChange) {
|
|
11
|
+
return doc;
|
|
12
|
+
}
|
|
13
|
+
const hooks = config.hooks.afterChange;
|
|
14
|
+
let result = doc;
|
|
15
|
+
for (const hook of hooks) {
|
|
16
|
+
const hookResult = await hook({
|
|
17
|
+
doc: result,
|
|
18
|
+
context: {
|
|
19
|
+
revealui,
|
|
20
|
+
collection: config.slug,
|
|
21
|
+
operation,
|
|
22
|
+
previousDoc,
|
|
23
|
+
req,
|
|
24
|
+
},
|
|
25
|
+
req,
|
|
26
|
+
operation,
|
|
27
|
+
previousDoc,
|
|
28
|
+
collection: config.slug,
|
|
29
|
+
});
|
|
30
|
+
if (hookResult !== undefined) {
|
|
31
|
+
result = hookResult;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { RevealUICollection } from './CollectionOperations.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Operation
|
|
3
|
+
*
|
|
4
|
+
* Creates a new document with validation, password hashing, and JSON field handling.
|
|
5
|
+
*/
|
|
6
|
+
import type { DatabaseResult, RevealCollectionConfig, RevealCreateOptions, RevealDocument } from '../../types/index.js';
|
|
7
|
+
export declare function create(config: RevealCollectionConfig, db: {
|
|
8
|
+
query: (query: string, values?: unknown[]) => Promise<DatabaseResult>;
|
|
9
|
+
} | null, options: RevealCreateOptions): Promise<RevealDocument>;
|
|
10
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EAEf,MAAM,sBAAsB,CAAA;AAM7B,wBAAsB,MAAM,CAC1B,MAAM,EAAE,sBAAsB,EAC9B,EAAE,EAAE;IACF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;CACtE,GAAG,IAAI,EACR,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CAmHzB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Operation
|
|
3
|
+
*
|
|
4
|
+
* Creates a new document with validation, password hashing, and JSON field handling.
|
|
5
|
+
*/
|
|
6
|
+
import bcrypt from 'bcryptjs';
|
|
7
|
+
import { collectJsonFields, serializeValueForDatabase } from '../../utils/json-parsing.js';
|
|
8
|
+
import { flattenFields, isJsonFieldType } from '../../utils/type-guards.js';
|
|
9
|
+
import { runBeforeFieldHooks } from './fieldHooks.js';
|
|
10
|
+
import { findByID } from './findById.js';
|
|
11
|
+
export async function create(config, db, options) {
|
|
12
|
+
const { data } = options;
|
|
13
|
+
// Run beforeValidate field hooks first so they can generate values (e.g. slug from title)
|
|
14
|
+
// before the required-field check below throws for missing values.
|
|
15
|
+
await runBeforeFieldHooks(config, data, 'create', 'beforeValidate');
|
|
16
|
+
// Validate required fields and field types
|
|
17
|
+
if (config.fields) {
|
|
18
|
+
for (const field of config.fields) {
|
|
19
|
+
// Skip fields without a name (should not happen, but TypeScript requires this check)
|
|
20
|
+
if (!field.name) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (field.required && !(field.name in data)) {
|
|
24
|
+
throw new Error(`Field '${field.name}' is required but was not provided`);
|
|
25
|
+
}
|
|
26
|
+
// Validate email format if field type is email OR field name is "email"
|
|
27
|
+
// This handles cases where field is named "email" but type might be "text"
|
|
28
|
+
const isEmailField = field.type === 'email' || field.name.toLowerCase() === 'email';
|
|
29
|
+
if (isEmailField &&
|
|
30
|
+
field.name in data &&
|
|
31
|
+
data[field.name] !== null &&
|
|
32
|
+
data[field.name] !== undefined) {
|
|
33
|
+
const emailValue = data[field.name];
|
|
34
|
+
if (typeof emailValue !== 'string') {
|
|
35
|
+
throw new Error(`Field '${field.name}' must be a string`);
|
|
36
|
+
}
|
|
37
|
+
// Stricter email validation regex (RFC 5322 compliant subset)
|
|
38
|
+
// Allows: alphanumeric, dots, hyphens, plus signs, underscores before @
|
|
39
|
+
// Requires: valid domain with at least one dot (TLD required)
|
|
40
|
+
const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/;
|
|
41
|
+
if (!emailRegex.test(emailValue)) {
|
|
42
|
+
throw new Error(`Field '${field.name}' must be a valid email address`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Run beforeChange field hooks after validation but before the DB write.
|
|
48
|
+
await runBeforeFieldHooks(config, data, 'create', 'beforeChange');
|
|
49
|
+
// Hash password if present and not already hashed (doesn't start with $2a$ or $2b$)
|
|
50
|
+
if (data.password && typeof data.password === 'string' && !data.password.startsWith('$2')) {
|
|
51
|
+
const saltRounds = 10;
|
|
52
|
+
data.password = await bcrypt.hash(data.password, saltRounds);
|
|
53
|
+
}
|
|
54
|
+
if (db?.query) {
|
|
55
|
+
const tableName = config.slug;
|
|
56
|
+
// Generate ID if not provided - always ensure it's a string
|
|
57
|
+
const id = String(typeof data.id === 'string' || typeof data.id === 'number'
|
|
58
|
+
? data.id
|
|
59
|
+
: `rvl_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`);
|
|
60
|
+
// Build INSERT query (PostgreSQL uses $1, $2 style)
|
|
61
|
+
// Serialize complex values (objects, arrays) to JSON strings for SQLite
|
|
62
|
+
// Filter out fields that should be stored as JSON (not as columns)
|
|
63
|
+
const jsonFieldNames = new Set(flattenFields(config.fields || [])
|
|
64
|
+
.filter((field) => isJsonFieldType(field) && field.name)
|
|
65
|
+
.map((field) => field.name)
|
|
66
|
+
.filter((name) => typeof name === 'string'));
|
|
67
|
+
const columns = Object.keys(data).filter((k) => k !== 'id' && !jsonFieldNames.has(k));
|
|
68
|
+
// Collect JSON fields into a single object using collectJsonFields utility
|
|
69
|
+
const jsonData = collectJsonFields(data, jsonFieldNames);
|
|
70
|
+
// Include _json column if there are JSON fields to store
|
|
71
|
+
const hasJsonFields = Object.keys(jsonData).length > 0;
|
|
72
|
+
if (hasJsonFields) {
|
|
73
|
+
columns.push('_json');
|
|
74
|
+
}
|
|
75
|
+
const placeholders = columns.map((_, i) => `$${i + 2}`).join(', ');
|
|
76
|
+
const values = columns.map((key) => {
|
|
77
|
+
if (key === '_json') {
|
|
78
|
+
// Serialize JSON fields object to JSON string
|
|
79
|
+
return serializeValueForDatabase(jsonData);
|
|
80
|
+
}
|
|
81
|
+
// Serialize non-primitive values to JSON strings for SQLite compatibility
|
|
82
|
+
return serializeValueForDatabase(data[key]);
|
|
83
|
+
});
|
|
84
|
+
const query = `INSERT INTO "${tableName}" (id, ${columns.map((c) => `"${c}"`).join(', ')}) VALUES ($1, ${placeholders})`;
|
|
85
|
+
await db.query(query, [id, ...values]);
|
|
86
|
+
// For SQLite with WAL mode, writes are immediately visible to readers on the same connection
|
|
87
|
+
// Return the created document by fetching it from the database
|
|
88
|
+
// This ensures we return what was actually stored (with proper JSON deserialization)
|
|
89
|
+
// ID is already a string, so use it directly
|
|
90
|
+
const createdDoc = await findByID(config, db, { id });
|
|
91
|
+
if (!createdDoc) {
|
|
92
|
+
throw new Error(`Failed to retrieve created document with id ${id}. Document not found in database.`);
|
|
93
|
+
}
|
|
94
|
+
return createdDoc;
|
|
95
|
+
}
|
|
96
|
+
// Fallback
|
|
97
|
+
const id = typeof data.id === 'string' || typeof data.id === 'number'
|
|
98
|
+
? data.id
|
|
99
|
+
: `rvl_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
100
|
+
return { ...data, id };
|
|
101
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delete Operation
|
|
3
|
+
*
|
|
4
|
+
* Deletes a document by ID.
|
|
5
|
+
*/
|
|
6
|
+
import type { DatabaseResult, RevealCollectionConfig, RevealDeleteOptions, RevealDocument } from '../../types/index.js';
|
|
7
|
+
export declare function deleteDocument(config: RevealCollectionConfig, db: {
|
|
8
|
+
query: (query: string, values?: unknown[]) => Promise<DatabaseResult>;
|
|
9
|
+
} | null, options: RevealDeleteOptions): Promise<RevealDocument>;
|
|
10
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/delete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAE7B,wBAAsB,cAAc,CAClC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,EAAE;IACF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;CACtE,GAAG,IAAI,EACR,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CAYzB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delete Operation
|
|
3
|
+
*
|
|
4
|
+
* Deletes a document by ID.
|
|
5
|
+
*/
|
|
6
|
+
export async function deleteDocument(config, db, options) {
|
|
7
|
+
const { id } = options;
|
|
8
|
+
if (db?.query) {
|
|
9
|
+
const tableName = config.slug;
|
|
10
|
+
// Ensure id is a string for consistent comparison
|
|
11
|
+
const idString = String(id);
|
|
12
|
+
const query = `DELETE FROM "${tableName}" WHERE id = $1`;
|
|
13
|
+
await db.query(query, [idString]);
|
|
14
|
+
}
|
|
15
|
+
return { id };
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field Hook Execution
|
|
3
|
+
*
|
|
4
|
+
* Runs field-level beforeValidate and beforeChange hooks during create/update operations.
|
|
5
|
+
* Mutates the data object in-place, mirroring the password-hashing pattern already used
|
|
6
|
+
* by create.ts and update.ts.
|
|
7
|
+
*/
|
|
8
|
+
import type { RevealCollectionConfig, RevealDocument } from '../../types/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Executes all hooks of `hookType` for every field in the collection that has them.
|
|
11
|
+
*
|
|
12
|
+
* Runs sequentially: each hook in a field's array receives the value returned by the
|
|
13
|
+
* previous hook, so hooks compose (later hooks see the output of earlier ones).
|
|
14
|
+
*
|
|
15
|
+
* Called twice per write operation:
|
|
16
|
+
* 1. `beforeValidate` — before required-field checks, so hooks can generate values
|
|
17
|
+
* (e.g. slug auto-generation from title) that satisfy required constraints.
|
|
18
|
+
* 2. `beforeChange` — after validation, before the DB write.
|
|
19
|
+
*/
|
|
20
|
+
export declare function runBeforeFieldHooks(config: RevealCollectionConfig, data: Record<string, unknown>, operation: 'create' | 'update', hookType: 'beforeValidate' | 'beforeChange', originalDoc?: RevealDocument): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=fieldHooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldHooks.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/fieldHooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAA;AAGjG;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAC9B,QAAQ,EAAE,gBAAgB,GAAG,cAAc,EAC3C,WAAW,CAAC,EAAE,cAAc,GAC3B,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field Hook Execution
|
|
3
|
+
*
|
|
4
|
+
* Runs field-level beforeValidate and beforeChange hooks during create/update operations.
|
|
5
|
+
* Mutates the data object in-place, mirroring the password-hashing pattern already used
|
|
6
|
+
* by create.ts and update.ts.
|
|
7
|
+
*/
|
|
8
|
+
import { flattenFields } from '../../utils/type-guards.js';
|
|
9
|
+
/**
|
|
10
|
+
* Executes all hooks of `hookType` for every field in the collection that has them.
|
|
11
|
+
*
|
|
12
|
+
* Runs sequentially: each hook in a field's array receives the value returned by the
|
|
13
|
+
* previous hook, so hooks compose (later hooks see the output of earlier ones).
|
|
14
|
+
*
|
|
15
|
+
* Called twice per write operation:
|
|
16
|
+
* 1. `beforeValidate` — before required-field checks, so hooks can generate values
|
|
17
|
+
* (e.g. slug auto-generation from title) that satisfy required constraints.
|
|
18
|
+
* 2. `beforeChange` — after validation, before the DB write.
|
|
19
|
+
*/
|
|
20
|
+
export async function runBeforeFieldHooks(config, data, operation, hookType, originalDoc) {
|
|
21
|
+
const fields = flattenFields(config.fields || []);
|
|
22
|
+
for (const field of fields) {
|
|
23
|
+
if (!field.name)
|
|
24
|
+
continue;
|
|
25
|
+
const hooks = field.hooks?.[hookType];
|
|
26
|
+
if (!hooks?.length)
|
|
27
|
+
continue;
|
|
28
|
+
let value = data[field.name];
|
|
29
|
+
for (const hook of hooks) {
|
|
30
|
+
// Hooks in this codebase receive the contract-defined FieldBeforeChangeHookArgs.
|
|
31
|
+
// req is required by the type but none of the existing write hooks use it;
|
|
32
|
+
// cast an empty object to avoid threading req through the entire operation chain.
|
|
33
|
+
value = await hook({
|
|
34
|
+
value,
|
|
35
|
+
data,
|
|
36
|
+
siblingData: data,
|
|
37
|
+
req: {},
|
|
38
|
+
operation,
|
|
39
|
+
originalDoc,
|
|
40
|
+
context: {},
|
|
41
|
+
field,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Only write back if the hook produced a defined value. If the hook returns
|
|
45
|
+
// undefined for a field that was not in the original data, skip the assignment
|
|
46
|
+
// so we don't inject undefined-valued column references into the INSERT.
|
|
47
|
+
if (value !== undefined) {
|
|
48
|
+
data[field.name] = value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find Operation
|
|
3
|
+
*
|
|
4
|
+
* Finds multiple documents with pagination, filtering, sorting, and relationship population.
|
|
5
|
+
*/
|
|
6
|
+
import type { DatabaseResult, RevealCollectionConfig, RevealFindOptions, RevealPaginatedResult } from '../../types/index.js';
|
|
7
|
+
export declare function find(config: RevealCollectionConfig, db: {
|
|
8
|
+
query: (query: string, values?: unknown[]) => Promise<DatabaseResult>;
|
|
9
|
+
} | null, options: RevealFindOptions): Promise<RevealPaginatedResult>;
|
|
10
|
+
//# sourceMappingURL=find.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/find.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,sBAAsB,CAAA;AAG7B,wBAAsB,IAAI,CACxB,MAAM,EAAE,sBAAsB,EAC9B,EAAE,EAAE;IACF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;CACtE,GAAG,IAAI,EACR,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAyIhC"}
|