@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.
- package/LICENSE +22 -202
- package/README.md +108 -152
- 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 +316 -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 +411 -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 +385 -0
- package/dist/caching/service-worker.d.ts +154 -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 +23 -0
- package/dist/client/admin/utils/auth.d.ts.map +1 -0
- package/dist/client/admin/utils/auth.js +52 -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 +11 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +13 -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 +34 -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/safe-parse.d.ts +26 -0
- package/dist/database/safe-parse.d.ts.map +1 -0
- package/dist/database/safe-parse.js +42 -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 +176 -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 +214 -0
- package/dist/error-handling/error-reporter.d.ts.map +1 -0
- package/dist/error-handling/error-reporter.js +477 -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 +86 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +92 -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 +16 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +21 -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 +126 -33
- package/dist/instance/RevealUIInstance.d.ts +6 -0
- package/dist/instance/RevealUIInstance.d.ts.map +1 -0
- package/dist/instance/RevealUIInstance.js +306 -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 +41 -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 +27 -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 +34 -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 +45 -0
- package/dist/license.d.ts +82 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +193 -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 +375 -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 +131 -0
- package/dist/optimization/code-splitting.d.ts.map +1 -0
- package/dist/optimization/code-splitting.js +277 -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 +255 -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 +476 -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 +517 -0
- package/dist/security/gdpr.d.ts +300 -0
- package/dist/security/gdpr.d.ts.map +1 -0
- package/dist/security/gdpr.js +465 -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 +12 -0
- package/dist/types/generated.d.ts.map +1 -0
- package/dist/types/generated.js +10 -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 +241 -724
- package/LICENSE_SUMMARY.md +0 -55
- package/NOTICE +0 -34
- 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 -5
- 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/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,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 @@
|
|
|
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
|
+
}
|