@revealui/core 0.2.0 → 0.3.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/README.md +137 -30
- package/dist/api/compression.d.ts.map +1 -1
- package/dist/api/payload-optimization.d.ts.map +1 -1
- package/dist/api/rate-limit.d.ts +30 -29
- package/dist/api/rate-limit.d.ts.map +1 -1
- package/dist/api/rate-limit.js +79 -4
- package/dist/api/response-cache.d.ts.map +1 -1
- package/dist/api/response-cache.js +1 -1
- package/dist/api/rest.d.ts.map +1 -1
- package/dist/api/rest.js +5 -4
- package/dist/auth/access.d.ts.map +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/cache/query-cache.d.ts +12 -10
- package/dist/cache/query-cache.d.ts.map +1 -1
- package/dist/cache/query-cache.js +38 -42
- package/dist/caching/app-cache.d.ts +5 -0
- package/dist/caching/app-cache.d.ts.map +1 -1
- package/dist/caching/app-cache.js +9 -1
- package/dist/caching/cdn-config.d.ts +2 -2
- package/dist/caching/cdn-config.d.ts.map +1 -1
- package/dist/caching/cdn-config.js +5 -15
- package/dist/caching/edge-cache.d.ts +1 -1
- package/dist/caching/edge-cache.d.ts.map +1 -1
- package/dist/caching/edge-cache.js +44 -11
- package/dist/caching/index.d.ts +6 -0
- package/dist/caching/index.d.ts.map +1 -0
- package/dist/caching/index.js +5 -0
- package/dist/caching/service-worker.d.ts +10 -18
- package/dist/caching/service-worker.d.ts.map +1 -1
- package/dist/caching/service-worker.js +5 -4
- package/dist/client/admin/RichText.d.ts +1 -1
- package/dist/client/admin/RichText.d.ts.map +1 -1
- package/dist/client/admin/components/AdminDashboard.d.ts.map +1 -1
- package/dist/client/admin/components/AdminDashboard.js +178 -205
- package/dist/client/admin/components/CollectionList.d.ts.map +1 -1
- package/dist/client/admin/components/DocumentForm.d.ts.map +1 -1
- package/dist/client/admin/components/DocumentForm.js +130 -6
- package/dist/client/admin/components/GlobalForm.d.ts.map +1 -1
- package/dist/client/admin/context/ServerFunctionContext.d.ts +8 -0
- package/dist/client/admin/context/ServerFunctionContext.d.ts.map +1 -0
- package/dist/client/admin/context/ServerFunctionContext.js +15 -0
- package/dist/client/admin/i18n/en.d.ts.map +1 -1
- package/dist/client/admin/index.d.ts +1 -0
- package/dist/client/admin/index.d.ts.map +1 -1
- package/dist/client/admin/index.js +1 -0
- package/dist/client/admin/layout.d.ts +1 -1
- package/dist/client/admin/layout.d.ts.map +1 -1
- package/dist/client/admin/layout.js +3 -2
- package/dist/client/admin/page.d.ts.map +1 -1
- package/dist/client/admin/utils/apiClient.d.ts.map +1 -1
- package/dist/client/admin/utils/apiClient.js +0 -4
- package/dist/client/admin/utils/auth.d.ts +0 -4
- package/dist/client/admin/utils/auth.d.ts.map +1 -1
- package/dist/client/admin/utils/auth.js +0 -6
- package/dist/client/admin/utils/index.d.ts +0 -1
- package/dist/client/admin/utils/index.d.ts.map +1 -1
- package/dist/client/admin/utils/index.js +0 -1
- package/dist/client/admin/utils/serializeConfig.d.ts.map +1 -1
- package/dist/client/hooks.d.ts.map +1 -1
- package/dist/client/index.d.ts +0 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +0 -2
- package/dist/client/richtext/RichTextEditor.d.ts.map +1 -1
- package/dist/client/richtext/components/ImageNodeComponent.d.ts.map +1 -1
- package/dist/client/richtext/components/ImageNodeComponent.js +0 -1
- package/dist/client/richtext/components/ImageUploadButton.d.ts +2 -0
- package/dist/client/richtext/components/ImageUploadButton.d.ts.map +1 -1
- package/dist/client/richtext/components/ImageUploadButton.js +30 -15
- package/dist/client/richtext/index.d.ts.map +1 -1
- package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts.map +1 -1
- package/dist/client/richtext/nodes/ImageNode.d.ts.map +1 -1
- package/dist/client/richtext/plugins/CollaborationPlugin.d.ts.map +1 -1
- package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts.map +1 -1
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts.map +1 -1
- package/dist/client/richtext/plugins/ImagePlugin.d.ts.map +1 -1
- package/dist/client/richtext/plugins/ToolbarPlugin.d.ts.map +1 -1
- package/dist/client/ui/index.d.ts.map +1 -1
- package/dist/client/ui/index.js +1 -1
- package/dist/collections/CollectionOperations.d.ts +7 -7
- package/dist/collections/CollectionOperations.d.ts.map +1 -1
- package/dist/collections/CollectionOperations.js +15 -1
- package/dist/collections/hooks.d.ts.map +1 -1
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/operations/create.d.ts +2 -4
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +9 -7
- package/dist/collections/operations/createMany.d.ts +12 -0
- package/dist/collections/operations/createMany.d.ts.map +1 -0
- package/dist/collections/operations/createMany.js +43 -0
- package/dist/collections/operations/delete.d.ts +1 -1
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +31 -2
- package/dist/collections/operations/deleteMany.d.ts +11 -0
- package/dist/collections/operations/deleteMany.d.ts.map +1 -0
- package/dist/collections/operations/deleteMany.js +50 -0
- package/dist/collections/operations/fieldHooks.d.ts +2 -2
- package/dist/collections/operations/fieldHooks.d.ts.map +1 -1
- package/dist/collections/operations/fieldHooks.js +4 -4
- package/dist/collections/operations/find.d.ts +2 -4
- package/dist/collections/operations/find.d.ts.map +1 -1
- package/dist/collections/operations/find.js +115 -8
- package/dist/collections/operations/findById.d.ts +3 -4
- package/dist/collections/operations/findById.d.ts.map +1 -1
- package/dist/collections/operations/findById.js +53 -1
- package/dist/collections/operations/sqlAdapter.d.ts +23 -0
- package/dist/collections/operations/sqlAdapter.d.ts.map +1 -0
- package/dist/collections/operations/sqlAdapter.js +76 -0
- package/dist/collections/operations/update.d.ts +3 -5
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +103 -11
- package/dist/collections/operations/updateMany.d.ts +11 -0
- package/dist/collections/operations/updateMany.d.ts.map +1 -0
- package/dist/collections/operations/updateMany.js +52 -0
- package/dist/collections/registry.d.ts +12 -0
- package/dist/collections/registry.d.ts.map +1 -0
- package/dist/collections/registry.js +38 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/utils.d.ts +0 -10
- package/dist/config/utils.d.ts.map +1 -1
- package/dist/config/utils.js +18 -17
- package/dist/database/index.d.ts +3 -0
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +1 -5
- 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.map +1 -1
- package/dist/database/type-adapter.d.ts.map +1 -1
- package/dist/database/universal-postgres.d.ts.map +1 -1
- package/dist/database/universal-postgres.js +18 -13
- package/dist/dataloader.d.ts.map +1 -1
- package/dist/dataloader.js +16 -2
- package/dist/error-handling/circuit-breaker.d.ts +1 -1
- package/dist/error-handling/circuit-breaker.d.ts.map +1 -1
- package/dist/error-handling/circuit-breaker.js +11 -3
- package/dist/error-handling/error-boundary.d.ts.map +1 -1
- package/dist/error-handling/error-reporter.d.ts +6 -5
- package/dist/error-handling/error-reporter.d.ts.map +1 -1
- package/dist/error-handling/error-reporter.js +26 -41
- package/dist/error-handling/fallback-components.d.ts.map +1 -1
- package/dist/error-handling/fallback-components.js +1 -1
- package/dist/error-handling/index.d.ts +3 -5
- package/dist/error-handling/index.d.ts.map +1 -1
- package/dist/error-handling/index.js +2 -5
- package/dist/error-handling/retry.d.ts.map +1 -1
- package/dist/error-handling/retry.js +13 -8
- package/dist/factories/builders.d.ts.map +1 -1
- package/dist/factories/index.d.ts.map +1 -1
- package/dist/features.d.ts +5 -5
- package/dist/features.d.ts.map +1 -1
- package/dist/features.js +6 -5
- package/dist/fieldTraversal.d.ts.map +1 -1
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/getDefaultValue.d.ts.map +1 -1
- package/dist/fields/getFieldPaths.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/generated/types/cms.d.ts.map +1 -1
- package/dist/generated/types/cms.js +0 -1
- package/dist/generated/types/index.d.ts +0 -3
- package/dist/generated/types/index.d.ts.map +1 -1
- package/dist/generated/types/index.js +0 -7
- package/dist/generated/types/neon.d.ts.map +1 -1
- package/dist/generated/types/neon.js +4 -2
- package/dist/globals/GlobalOperations.d.ts.map +1 -1
- package/dist/globals/GlobalOperations.js +4 -2
- package/dist/globals/index.d.ts.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -6
- package/dist/instance/RevealUIInstance.d.ts.map +1 -1
- package/dist/instance/RevealUIInstance.js +50 -69
- package/dist/instance/index.d.ts.map +1 -1
- package/dist/instance/logger.d.ts.map +1 -1
- package/dist/instance/methods/create.d.ts.map +1 -1
- package/dist/instance/methods/create.js +4 -4
- package/dist/instance/methods/delete.d.ts.map +1 -1
- package/dist/instance/methods/delete.js +5 -5
- package/dist/instance/methods/find.d.ts.map +1 -1
- package/dist/instance/methods/find.js +0 -3
- package/dist/instance/methods/findById.d.ts.map +1 -1
- package/dist/instance/methods/findById.js +0 -3
- package/dist/instance/methods/hooks.d.ts.map +1 -1
- package/dist/instance/methods/hooks.js +3 -1
- package/dist/instance/methods/update.d.ts.map +1 -1
- package/dist/instance/methods/update.js +4 -4
- package/dist/jobs/index.d.ts +16 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +14 -0
- package/dist/jobs/queue.d.ts +57 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +134 -0
- package/dist/license-encryption.d.ts +21 -0
- package/dist/license-encryption.d.ts.map +1 -0
- package/dist/license-encryption.js +74 -0
- package/dist/license.d.ts +33 -7
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +119 -16
- package/dist/monitoring/alerts.d.ts.map +1 -1
- package/dist/monitoring/cleanup-manager.d.ts.map +1 -1
- package/dist/monitoring/health-monitor.d.ts.map +1 -1
- package/dist/monitoring/index.d.ts.map +1 -1
- package/dist/monitoring/process-registry.d.ts.map +1 -1
- package/dist/monitoring/query-monitor.d.ts.map +1 -1
- package/dist/monitoring/types.d.ts.map +1 -1
- package/dist/monitoring/zombie-detector.d.ts.map +1 -1
- package/dist/monitoring/zombie-detector.js +5 -0
- package/dist/nextjs/index.d.ts.map +1 -1
- package/dist/nextjs/utilities.d.ts.map +1 -1
- package/dist/nextjs/withRevealUI.d.ts.map +1 -1
- package/dist/observability/alerts.d.ts.map +1 -1
- package/dist/observability/alerts.js +1 -2
- package/dist/observability/health-check.d.ts +1 -5
- package/dist/observability/health-check.d.ts.map +1 -1
- package/dist/observability/health-check.js +37 -43
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/logger.d.ts.map +1 -1
- package/dist/observability/logger.js +1 -1
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/tracing.d.ts.map +1 -1
- package/dist/observability/tracing.js +0 -1
- package/dist/optimization/asset-optimizer.d.ts +6 -2
- package/dist/optimization/asset-optimizer.d.ts.map +1 -1
- package/dist/optimization/asset-optimizer.js +31 -7
- package/dist/optimization/bundle-analyzer.d.ts +1 -1
- package/dist/optimization/bundle-analyzer.d.ts.map +1 -1
- package/dist/optimization/bundle-analyzer.js +29 -5
- package/dist/optimization/code-splitting.d.ts +0 -23
- package/dist/optimization/code-splitting.d.ts.map +1 -1
- package/dist/optimization/code-splitting.js +0 -29
- package/dist/plugins/form-builder.d.ts.map +1 -1
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/nested-docs.d.ts +4 -0
- package/dist/plugins/nested-docs.d.ts.map +1 -1
- package/dist/plugins/nested-docs.js +50 -5
- package/dist/plugins/redirects.d.ts.map +1 -1
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/queryBuilder.d.ts.map +1 -1
- package/dist/queries/queryBuilder.js +15 -5
- package/dist/relationships/analyzer.d.ts.map +1 -1
- package/dist/relationships/analyzer.js +8 -0
- package/dist/relationships/index.d.ts.map +1 -1
- package/dist/relationships/populate-core.d.ts +57 -0
- package/dist/relationships/populate-core.d.ts.map +1 -0
- package/dist/relationships/populate-core.js +116 -0
- package/dist/relationships/populate-helpers.d.ts +5 -51
- package/dist/relationships/populate-helpers.d.ts.map +1 -1
- package/dist/relationships/populate-helpers.js +4 -109
- package/dist/relationships/population.d.ts +1 -9
- package/dist/relationships/population.d.ts.map +1 -1
- package/dist/relationships/population.js +8 -3
- package/dist/revealui.d.ts.map +1 -1
- package/dist/richtext/exports/client/rcc.d.ts.map +1 -1
- package/dist/richtext/exports/client/rcc.js +1 -1
- package/dist/richtext/exports/server/rsc.d.ts +17 -0
- package/dist/richtext/exports/server/rsc.d.ts.map +1 -1
- package/dist/richtext/exports/server/rsc.js +61 -5
- package/dist/richtext/index.d.ts.map +1 -1
- package/dist/richtext/lexical.d.ts.map +1 -1
- package/dist/security/audit.d.ts +1 -1
- package/dist/security/audit.d.ts.map +1 -1
- package/dist/security/audit.js +4 -2
- package/dist/security/auth.d.ts +29 -160
- package/dist/security/auth.d.ts.map +1 -1
- package/dist/security/auth.js +150 -367
- package/dist/security/authorization.d.ts +7 -31
- package/dist/security/authorization.d.ts.map +1 -1
- package/dist/security/authorization.js +72 -14
- package/dist/security/encryption.d.ts +56 -44
- package/dist/security/encryption.d.ts.map +1 -1
- package/dist/security/encryption.js +128 -100
- package/dist/security/gdpr-storage.d.ts +102 -0
- package/dist/security/gdpr-storage.d.ts.map +1 -0
- package/dist/security/gdpr-storage.js +65 -0
- package/dist/security/gdpr.d.ts +57 -37
- package/dist/security/gdpr.d.ts.map +1 -1
- package/dist/security/gdpr.js +155 -94
- package/dist/security/headers.d.ts +4 -2
- package/dist/security/headers.d.ts.map +1 -1
- package/dist/security/headers.js +35 -17
- package/dist/security/index.d.ts +3 -16
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +3 -16
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/renderPage.d.ts.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +2 -4
- package/dist/storage/vercel-blob.d.ts.map +1 -1
- package/dist/translations/index.d.ts.map +1 -1
- package/dist/types/access.d.ts.map +1 -1
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/cms.d.ts.map +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/extensions.d.ts.map +1 -1
- package/dist/types/frontend.d.ts.map +1 -1
- package/dist/types/generated.d.ts +0 -2
- package/dist/types/generated.d.ts.map +1 -1
- package/dist/types/generated.js +0 -1
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/interfaces/app.d.ts.map +1 -1
- package/dist/types/jobs.d.ts.map +1 -1
- package/dist/types/legacy.d.ts.map +1 -1
- package/dist/types/plugins.d.ts.map +1 -1
- package/dist/types/query.d.ts.map +1 -1
- package/dist/types/request.d.ts.map +1 -1
- package/dist/types/richtext.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +59 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types/schema.d.ts.map +1 -1
- package/dist/types/user.d.ts.map +1 -1
- package/dist/utils/access-conversion.d.ts.map +1 -1
- package/dist/utils/api-wrapper.d.ts.map +1 -1
- package/dist/utils/api-wrapper.js +1 -1
- package/dist/utils/block-conversion.d.ts.map +1 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/deep-clone.js +0 -1
- package/dist/utils/error-responses.d.ts.map +1 -1
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +103 -0
- package/dist/utils/field-conversion.d.ts +1 -1
- package/dist/utils/field-conversion.d.ts.map +1 -1
- package/dist/utils/flattenResult.d.ts.map +1 -1
- package/dist/utils/flattenResult.js +0 -1
- package/dist/utils/getBlockSelect.d.ts.map +1 -1
- package/dist/utils/getSelectMode.d.ts.map +1 -1
- package/dist/utils/isValidID.d.ts.map +1 -1
- package/dist/utils/json-parsing.d.ts.map +1 -1
- package/dist/utils/logger-client.d.ts.map +1 -1
- package/dist/utils/logger-server.d.ts.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/request-context.d.ts.map +1 -1
- package/dist/utils/stripUnselectedFields.d.ts.map +1 -1
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/package.json +39 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neon.d.ts","sourceRoot":"","sources":["../../../src/generated/types/neon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"neon.d.ts","sourceRoot":"","sources":["../../../src/generated/types/neon.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAGH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAEzB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAEhB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAEhB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,+BAA+B,CAAA;AAGtC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/* tslint:disable */
|
|
2
|
-
/* eslint-disable */
|
|
3
2
|
/**
|
|
4
3
|
* Generated Database Types for NeonDB
|
|
5
4
|
*
|
|
@@ -8,4 +7,7 @@
|
|
|
8
7
|
*
|
|
9
8
|
* Last updated: 2026-01-25T00:00:00.000Z
|
|
10
9
|
*/
|
|
11
|
-
export
|
|
10
|
+
// Re-export all database types from contracts
|
|
11
|
+
export {} from '@revealui/contracts/generated';
|
|
12
|
+
// TableName is exported from main contracts package, not generated
|
|
13
|
+
export {} from '@revealui/contracts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalOperations.d.ts","sourceRoot":"","sources":["../../src/globals/GlobalOperations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,aAAa,EAEd,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"GlobalOperations.d.ts","sourceRoot":"","sources":["../../src/globals/GlobalOperations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAG3B;;;;GAIG;AACH,qBAAa,cAAc;IACzB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;KACvE,GAAG,IAAI,CAAC;gBAGP,MAAM,EAAE,kBAAkB,EAC1B,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;KACvE,GAAG,IAAI;IAMJ,IAAI,CACR,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,mBAAmB,EAAE,YAAY,CAAC;QACpD,GAAG,CAAC,EAAE,aAAa,CAAC;KAChB,GACL,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgG3B,MAAM,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;CAmElF"}
|
|
@@ -106,7 +106,9 @@ export class RevealUIGlobal {
|
|
|
106
106
|
// Update (PostgreSQL uses $1, $2 style)
|
|
107
107
|
// Serialize complex values (objects, arrays) to JSON strings for SQLite
|
|
108
108
|
const keys = Object.keys(data);
|
|
109
|
-
const setClause = keys
|
|
109
|
+
const setClause = keys
|
|
110
|
+
.map((key, i) => `"${key.replace(/"/g, '""')}" = $${i + 1}`)
|
|
111
|
+
.join(', ');
|
|
110
112
|
const values = keys.map((key) => {
|
|
111
113
|
const value = data[key];
|
|
112
114
|
// Serialize non-primitive values to JSON strings for SQLite compatibility
|
|
@@ -135,7 +137,7 @@ export class RevealUIGlobal {
|
|
|
135
137
|
}
|
|
136
138
|
return value;
|
|
137
139
|
});
|
|
138
|
-
const query = `INSERT INTO "${tableName}" (id, ${columns.map((c) => `"${c}"`).join(', ')}) VALUES ($1, ${placeholders})`;
|
|
140
|
+
const query = `INSERT INTO "${tableName}" (id, ${columns.map((c) => `"${c.replace(/"/g, '""')}"`).join(', ')}) VALUES ($1, ${placeholders})`;
|
|
139
141
|
await this.db.query(query, [id, ...values]);
|
|
140
142
|
}
|
|
141
143
|
const updatedDoc = await this.find();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/globals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/globals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createRESTHandlers, handleRESTRequest } from './api/rest.js';
|
|
2
2
|
export { anyone, authenticated } from './auth/access.js';
|
|
3
3
|
export type { FloatingToolbarPluginProps, ImageNodeData, RichTextEditorProps, SerializedImageNode, ToolbarPluginProps, } from './client/index.js';
|
|
4
|
-
export { $createImageNode, $isImageNode, AdminDashboard, APIError, APIErrorType, apiClient, CollectionList,
|
|
4
|
+
export { $createImageNode, $isImageNode, AdminDashboard, APIError, APIErrorType, apiClient, CollectionList, DocumentForm, FloatingToolbarPlugin, generatePageMetadata, ImageNode, ImageNodeComponent, ImagePlugin, ImageUploadButton, INSERT_IMAGE_COMMAND, NotFoundPage, OPEN_IMAGE_UPLOAD_COMMAND, RootLayout, RootPage, richTextEditorStyles, serializeConfig, ToolbarPlugin, useRevealUI, withRevealUIAccess, } from './client/index.js';
|
|
5
5
|
export { buildConfig } from './config/index.js';
|
|
6
6
|
export { getRevealUI } from './config/runtime.js';
|
|
7
7
|
export { deepMerge } from './config/utils.js';
|
|
@@ -9,7 +9,7 @@ export type { UniversalPostgresAdapterConfig } from './database/universal-postgr
|
|
|
9
9
|
export { universalPostgresAdapter } from './database/universal-postgres.js';
|
|
10
10
|
export { createRevealUI, createRevealUIAccessRule, createRevealUIBlock, createRevealUICollection, createRevealUIField, } from './factories/index.js';
|
|
11
11
|
export { type FeatureFlags, getFeatures, getFeaturesForTier, getRequiredTier, isFeatureEnabled, } from './features.js';
|
|
12
|
-
export { generateLicenseKey, getCurrentTier, getLicensePayload, getMaxSites, getMaxUsers, initializeLicense, isLicensed, type LicensePayload, type LicenseTier, resetLicenseState, validateLicenseKey, } from './license.js';
|
|
12
|
+
export { computeKeyId, configureLicenseCache, generateLicenseKey, getCurrentTier, getLicensePayload, getMaxSites, getMaxUsers, initializeLicense, isLicensed, type LicenseCacheConfig, type LicensePayload, type LicenseTier, resetLicenseState, validateLicenseKey, } from './license.js';
|
|
13
13
|
export { getRevealUI as getRevealUINext, withRevealUI, } from './nextjs/index.js';
|
|
14
14
|
export { formBuilderPlugin } from './plugins/form-builder.js';
|
|
15
15
|
export { nestedDocsPlugin } from './plugins/nested-docs.js';
|
|
@@ -20,11 +20,11 @@ export { vercelBlobStorage } from './storage/vercel-blob.js';
|
|
|
20
20
|
export { LRUCache, type LRUCacheOptions } from './utils/cache.js';
|
|
21
21
|
export { deepClone } from './utils/deep-clone.js';
|
|
22
22
|
export { createApplicationErrorResponseData, createErrorResponseData, createSuccessResponseData, createValidationErrorResponseData, type ErrorResponseData, } from './utils/error-responses.js';
|
|
23
|
-
export { ApplicationError, handleApiError, handleDatabaseError, ValidationError, } from './utils/errors.js';
|
|
23
|
+
export { ApplicationError, AuthenticationError, AuthorizationError, ConflictError, DatabaseError, handleApiError, handleDatabaseError, NotFoundError, PostgresErrorCode, RateLimitError, ValidationError, } from './utils/errors.js';
|
|
24
24
|
export { createLogger, type LogContext, type LogLevel, logger, } from './utils/logger.js';
|
|
25
25
|
export { flattenFields, isJsonFieldType, isObject } from './utils/type-guards.js';
|
|
26
26
|
export { type AccessArgs, type AccessFunction, type AccessResult, type AfterChangeHookArgs, type AfterReadHookArgs, applyPluginExtensions, assertValidSlug, type BeforeChangeHookArgs, type CollectionAccessConfig, type CollectionAfterChangeHook, type CollectionAfterReadHook, type CollectionBeforeChangeHook, type CollectionBeforeValidateHook, type CollectionConfig, type CollectionHooksConfig, type Config, ConfigValidationError, defineCollection, defineField, defineGlobal, type Field, type FieldAccessConfig, type FieldValidateArgs, fromCMSCollectionConfig, fromCMSGlobalConfig, type GlobalAccessConfig, type GlobalConfig, type GlobalHooksConfig, getCustomFieldType, getRevealUIExtensions, hasRevealUIExtensions, isValidFieldType, isValidSlug, mergeCollectionConfigs, mergeFields, registerCustomFieldType, registerPluginExtension, type SanitizedCollectionConfig, type SanitizedConfig, type SanitizedGlobalConfig, safeValidate, toCMSCollectionConfig, toCMSGlobalConfig, toSlug, validateWithErrors, type Where, } from '@revealui/contracts/cms';
|
|
27
|
-
export type { Block, BlocksField, CheckboxField, DatabaseAdapter, DatabaseResult, FindArgs, JsonObject, OperationOptions, PaginatedDocs, Permission, Plugin, PluginOptions, PopulateType, RequestContext, RevealAfterChangeHook, RevealAfterReadHook, RevealBeforeChangeHook, RevealCollection, RevealCollectionConfig, RevealCollectionHooks, RevealConfig, RevealCreateOptions, RevealDataObject, RevealDeleteOptions, RevealDocument, RevealDocumentWithMeta, RevealFindOptions, RevealGlobal, RevealGlobalConfig, RevealHookContext, RevealOperator, RevealPaginatedResult, RevealRequest, RevealSelect, RevealSort, RevealUI, RevealUIAccessContext, RevealUIAccessResult, RevealUIAccessRule, RevealUICollectionConfig, RevealUIContext, RevealUIEnhancedField, RevealUIField, RevealUIFieldHook, RevealUIFieldType, RevealUIFieldValidator, RevealUIFilterResult, RevealUIFrameworkContext, RevealUIHookContext, RevealUIInstance, RevealUIPermission, RevealUITenant, RevealUIUser, RevealUIValidationRule, RevealUpdateOptions, RevealUser, RevealValue, RevealWhere, RichTextEditor, RichTextFeature, SelectType, StorageAdapter, TypeWithID, WhereClause, } from './types/index.js';
|
|
27
|
+
export type { BatchCreateOptions, BatchDeleteOptions, BatchResult, BatchUpdateOptions, Block, BlocksField, CheckboxField, DatabaseAdapter, DatabaseResult, FindArgs, JsonObject, OperationOptions, PaginatedDocs, Permission, Plugin, PluginOptions, PopulateType, RequestContext, RevealAfterChangeHook, RevealAfterReadHook, RevealBeforeChangeHook, RevealCollection, RevealCollectionConfig, RevealCollectionHooks, RevealConfig, RevealCreateOptions, RevealDataObject, RevealDeleteOptions, RevealDocument, RevealDocumentWithMeta, RevealFindOptions, RevealGlobal, RevealGlobalConfig, RevealHookContext, RevealOperator, RevealPaginatedResult, RevealRequest, RevealSelect, RevealSort, RevealUI, RevealUIAccessContext, RevealUIAccessResult, RevealUIAccessRule, RevealUICollectionConfig, RevealUIContext, RevealUIEnhancedField, RevealUIField, RevealUIFieldHook, RevealUIFieldType, RevealUIFieldValidator, RevealUIFilterResult, RevealUIFrameworkContext, RevealUIHookContext, RevealUIInstance, RevealUIPermission, RevealUITenant, RevealUIUser, RevealUIValidationRule, RevealUpdateOptions, RevealUser, RevealValue, RevealWhere, RichTextEditor, RichTextFeature, SelectType, StorageAdapter, TypeWithID, WhereClause, } from './types/index.js';
|
|
28
28
|
export { serializeLexicalState } from './richtext/index.js';
|
|
29
29
|
export type { Access, ArrayField, AuthConfig, ClientCollectionConfig, ClientConfig, CollectionAccess, CollectionAdminConfig, CollectionLabels, CustomComponent, CustomFieldTypeConfig, Document, EndpointHandler, EndpointHandlerArgs, FieldAccess, FieldAccessArgs, FieldAccessConfig as SchemaFieldAccessConfig, FieldAdminConfig, FieldHooksConfig, FieldOption, FieldType, GlobalAccess, GlobalAdminConfig, GlobalLabels, GlobalVersionsConfig, GroupField, PluginFieldExtension, RevealHandler, RevealUIAccessArgs, RevealUIBlock, RevealUIComponent, RevealUIDependencyCheckArgs, RevealUIExtensions, RevealUIRichTextAdapter, RevealUISchemaArgs, RevealUITraverseFieldsArgs, RevealUITraverseFieldsResult, SelectMode, TabDefinition, TextField, TypedFallbackLocale, UploadConfig, ValidationResult, VersionConfig, } from './types/index.js';
|
|
30
30
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,11 +10,9 @@ export { $createImageNode, $isImageNode,
|
|
|
10
10
|
// Admin
|
|
11
11
|
AdminDashboard, APIError, APIErrorType,
|
|
12
12
|
// Re-export admin utils
|
|
13
|
-
apiClient, CollectionList,
|
|
14
|
-
// HTTP
|
|
15
|
-
fetchFromCMS, fetchHero, fetchMainInfos, fetchVideos, generatePageMetadata, getAuthHeader, getAuthToken, ImageNode, ImageNodeComponent, ImagePlugin, ImageUploadButton, INSERT_IMAGE_COMMAND, NotFoundPage, OPEN_IMAGE_UPLOAD_COMMAND, RootLayout, RootPage,
|
|
13
|
+
apiClient, CollectionList, DocumentForm, FloatingToolbarPlugin, generatePageMetadata, ImageNode, ImageNodeComponent, ImagePlugin, ImageUploadButton, INSERT_IMAGE_COMMAND, NotFoundPage, OPEN_IMAGE_UPLOAD_COMMAND, RootLayout, RootPage,
|
|
16
14
|
// Rich text (exclude RichTextEditor component - use richtext/client)
|
|
17
|
-
richTextEditorStyles, serializeConfig,
|
|
15
|
+
richTextEditorStyles, serializeConfig,
|
|
18
16
|
// UI
|
|
19
17
|
ToolbarPlugin,
|
|
20
18
|
// Hooks
|
|
@@ -28,7 +26,7 @@ export { universalPostgresAdapter } from './database/universal-postgres.js';
|
|
|
28
26
|
export { createRevealUI, createRevealUIAccessRule, createRevealUIBlock, createRevealUICollection, createRevealUIField, } from './factories/index.js';
|
|
29
27
|
export { getFeatures, getFeaturesForTier, getRequiredTier, isFeatureEnabled, } from './features.js';
|
|
30
28
|
// License and feature flags
|
|
31
|
-
export { generateLicenseKey, getCurrentTier, getLicensePayload, getMaxSites, getMaxUsers, initializeLicense, isLicensed, resetLicenseState, validateLicenseKey, } from './license.js';
|
|
29
|
+
export { computeKeyId, configureLicenseCache, generateLicenseKey, getCurrentTier, getLicensePayload, getMaxSites, getMaxUsers, initializeLicense, isLicensed, resetLicenseState, validateLicenseKey, } from './license.js';
|
|
32
30
|
// Next.js integration
|
|
33
31
|
export { getRevealUI as getRevealUINext, withRevealUI, } from './nextjs/index.js';
|
|
34
32
|
// Plugins
|
|
@@ -61,7 +59,7 @@ export { LRUCache } from './utils/cache.js';
|
|
|
61
59
|
export { deepClone } from './utils/deep-clone.js';
|
|
62
60
|
// Error response utilities (framework-agnostic)
|
|
63
61
|
export { createApplicationErrorResponseData, createErrorResponseData, createSuccessResponseData, createValidationErrorResponseData, } from './utils/error-responses.js';
|
|
64
|
-
export { ApplicationError, handleApiError, handleDatabaseError, ValidationError, } from './utils/errors.js';
|
|
62
|
+
export { ApplicationError, AuthenticationError, AuthorizationError, ConflictError, DatabaseError, handleApiError, handleDatabaseError, NotFoundError, PostgresErrorCode, RateLimitError, ValidationError, } from './utils/errors.js';
|
|
65
63
|
// Utilities
|
|
66
64
|
export { createLogger, logger, } from './utils/logger.js';
|
|
67
65
|
// Type guards
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RevealUIInstance.d.ts","sourceRoot":"","sources":["../../src/instance/RevealUIInstance.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,YAAY,EAQZ,gBAAgB,EAGjB,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"RevealUIInstance.d.ts","sourceRoot":"","sources":["../../src/instance/RevealUIInstance.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,YAAY,EAQZ,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkY5F"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { randomBytes } from 'node:crypto';
|
|
2
2
|
import bcrypt from 'bcryptjs';
|
|
3
|
-
import { SignJWT } from 'jose';
|
|
4
3
|
import { RevealUICollection } from '../collections/CollectionOperations.js';
|
|
4
|
+
import { buildCollectionStorageRegistry } from '../collections/registry.js';
|
|
5
5
|
import { getDataLoader } from '../dataloader.js';
|
|
6
6
|
import { afterRead } from '../fields/hooks/afterRead/index.js';
|
|
7
7
|
import { RevealUIGlobal } from '../globals/GlobalOperations.js';
|
|
@@ -17,71 +17,66 @@ import { update } from './methods/update.js';
|
|
|
17
17
|
*/
|
|
18
18
|
export async function createRevealUIInstance(config) {
|
|
19
19
|
const logger = createLogger();
|
|
20
|
-
// Database connection is
|
|
20
|
+
// Database connection is lazy — only connect on first query.
|
|
21
|
+
// A single shared promise guards against concurrent init from multiple requests.
|
|
21
22
|
let dbConnected = false;
|
|
23
|
+
let dbInitPromise = null;
|
|
22
24
|
const ensureDbConnected = async () => {
|
|
23
|
-
if (dbConnected)
|
|
25
|
+
if (dbConnected)
|
|
24
26
|
return;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
.
|
|
43
|
-
|
|
44
|
-
type: field.type || 'text',
|
|
45
|
-
required: field.required,
|
|
46
|
-
unique: field.unique,
|
|
47
|
-
}));
|
|
48
|
-
config.db.createTable(collection.slug, tableFields);
|
|
27
|
+
if (!dbInitPromise && config.db) {
|
|
28
|
+
const db = config.db; // capture to satisfy narrowing inside async IIFE
|
|
29
|
+
dbInitPromise = (async () => {
|
|
30
|
+
await db.init?.();
|
|
31
|
+
// Queue table creation BEFORE connect()
|
|
32
|
+
// createTable() pushes promises to a queue that connect() will await
|
|
33
|
+
if (config.collections && db.createTable) {
|
|
34
|
+
for (const collection of config.collections) {
|
|
35
|
+
const fields = collection.fields || [];
|
|
36
|
+
const tableFields = fields
|
|
37
|
+
.filter((field) => field.name && !isJsonFieldType(field))
|
|
38
|
+
.map((field) => ({
|
|
39
|
+
name: field.name || '',
|
|
40
|
+
type: field.type || 'text',
|
|
41
|
+
required: field.required,
|
|
42
|
+
unique: field.unique,
|
|
43
|
+
}));
|
|
44
|
+
db.createTable(collection.slug, tableFields);
|
|
45
|
+
}
|
|
49
46
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// Extract fields from global config
|
|
55
|
-
const fields = global.fields || [];
|
|
56
|
-
// Convert RevealUIField to Field format for createGlobalTable
|
|
57
|
-
// Only include top-level fields that should be stored as columns
|
|
58
|
-
const tableFields = fields
|
|
59
|
-
.filter((field) => {
|
|
60
|
-
// Filter out fields that should be stored as JSON
|
|
47
|
+
// Queue global table creation BEFORE connect()
|
|
48
|
+
if (config.globals && db.createGlobalTable) {
|
|
49
|
+
for (const global of config.globals) {
|
|
50
|
+
const fields = global.fields || [];
|
|
61
51
|
const jsonTypes = ['array', 'group', 'blocks', 'richText'];
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
52
|
+
const tableFields = fields
|
|
53
|
+
.filter((field) => field.name && !jsonTypes.includes(field.type || ''))
|
|
54
|
+
.map((field) => ({
|
|
55
|
+
name: field.name || '',
|
|
56
|
+
type: field.type || 'text',
|
|
57
|
+
required: field.required,
|
|
58
|
+
unique: field.unique,
|
|
59
|
+
}));
|
|
60
|
+
db.createGlobalTable(global.slug, tableFields);
|
|
61
|
+
}
|
|
71
62
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
63
|
+
// Now connect() will wait for all queued table creation promises
|
|
64
|
+
await db.connect?.();
|
|
65
|
+
dbConnected = true;
|
|
66
|
+
})();
|
|
67
|
+
}
|
|
68
|
+
if (dbInitPromise) {
|
|
69
|
+
await dbInitPromise;
|
|
76
70
|
}
|
|
77
71
|
};
|
|
78
72
|
// Initialize collections and globals
|
|
79
73
|
const collections = {};
|
|
80
74
|
const globals = {};
|
|
75
|
+
const collectionStorageRegistry = buildCollectionStorageRegistry(config.collections);
|
|
81
76
|
// Initialize collections
|
|
82
77
|
if (config.collections) {
|
|
83
78
|
for (const collectionConfig of config.collections) {
|
|
84
|
-
collections[collectionConfig.slug] = new RevealUICollection(collectionConfig, config.db || null);
|
|
79
|
+
collections[collectionConfig.slug] = new RevealUICollection(collectionConfig, config.db || null, collectionStorageRegistry[collectionConfig.slug] ?? null);
|
|
85
80
|
}
|
|
86
81
|
}
|
|
87
82
|
// Initialize globals
|
|
@@ -97,6 +92,7 @@ export async function createRevealUIInstance(config) {
|
|
|
97
92
|
};
|
|
98
93
|
const revealUIInstance = {
|
|
99
94
|
collections,
|
|
95
|
+
collectionStorageRegistry,
|
|
100
96
|
globals,
|
|
101
97
|
config,
|
|
102
98
|
db: config.db || null,
|
|
@@ -145,23 +141,8 @@ export async function createRevealUIInstance(config) {
|
|
|
145
141
|
if (!isPasswordValid) {
|
|
146
142
|
throw new Error('Invalid credentials');
|
|
147
143
|
}
|
|
148
|
-
// Generate
|
|
149
|
-
const
|
|
150
|
-
if (!secret || secret.length < 32) {
|
|
151
|
-
throw new Error('REVEALUI_SECRET must be set to a secure random value (minimum 32 characters). ' +
|
|
152
|
-
'Generate one with: openssl rand -base64 32');
|
|
153
|
-
}
|
|
154
|
-
const secretKey = new TextEncoder().encode(secret);
|
|
155
|
-
const token = await new SignJWT({
|
|
156
|
-
id: user.id,
|
|
157
|
-
email: user.email,
|
|
158
|
-
collection,
|
|
159
|
-
})
|
|
160
|
-
.setProtectedHeader({ alg: 'HS256' })
|
|
161
|
-
.setIssuedAt()
|
|
162
|
-
.setExpirationTime('7d')
|
|
163
|
-
.setJti(`${user.id}-${Date.now()}-${randomBytes(8).toString('hex')}`)
|
|
164
|
-
.sign(secretKey);
|
|
144
|
+
// Generate opaque session token for session fixation prevention
|
|
145
|
+
const token = randomBytes(32).toString('hex');
|
|
165
146
|
// Remove password from user object before returning
|
|
166
147
|
const userWithoutPassword = { ...user, password: undefined };
|
|
167
148
|
return { user: userWithoutPassword, token };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instance/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,KAAK,cAAc,GACpB,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instance/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/instance/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/instance/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,MAAO,YAAW,cAAc;IAC3C,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAO9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAO9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAKhC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,cAAc,CAE7C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,cAA6B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGlG,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EAAE,mBAAmB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,cAAc,CAAC,CAyCzB"}
|
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates a new document in a collection with hook handling.
|
|
5
5
|
*/
|
|
6
|
-
import { validateJWTFromRequest } from '../../utils/jwt-validation.js';
|
|
7
6
|
import { callHooks } from './hooks.js';
|
|
8
7
|
export async function create(instance, ensureDbConnected, options) {
|
|
9
8
|
await ensureDbConnected();
|
|
10
9
|
const { collection, req } = options;
|
|
11
|
-
// Validate JWT token if authorization header is provided
|
|
12
|
-
await validateJWTFromRequest(req);
|
|
13
10
|
if (!instance.collections[collection]) {
|
|
14
11
|
throw new Error(`Collection '${collection}' not found`);
|
|
15
12
|
}
|
|
16
13
|
const collectionConfig = instance.config.collections?.find((c) => c.slug === collection);
|
|
17
14
|
// Enforce collection-level access control
|
|
18
15
|
if (collectionConfig?.access?.create && options.req) {
|
|
19
|
-
const canCreate = await collectionConfig.access.create({
|
|
16
|
+
const canCreate = await collectionConfig.access.create({
|
|
17
|
+
req: options.req,
|
|
18
|
+
data: options.data,
|
|
19
|
+
});
|
|
20
20
|
if (!canCreate) {
|
|
21
21
|
throw new Error('Access denied: you do not have permission to create in this collection');
|
|
22
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/delete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/delete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAElG,wBAAsB,YAAY,CAChC,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EAAE,mBAAmB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,cAAc,CAAC,CAqBzB"}
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Deletes a document from a collection.
|
|
5
5
|
*/
|
|
6
|
-
import { validateJWTFromRequest } from '../../utils/jwt-validation.js';
|
|
7
6
|
export async function deleteMethod(instance, ensureDbConnected, options) {
|
|
8
7
|
await ensureDbConnected();
|
|
9
|
-
const { collection
|
|
10
|
-
// Validate JWT token if authorization header is provided
|
|
11
|
-
await validateJWTFromRequest(req);
|
|
8
|
+
const { collection } = options;
|
|
12
9
|
if (!instance.collections[collection]) {
|
|
13
10
|
throw new Error(`Collection '${collection}' not found`);
|
|
14
11
|
}
|
|
15
12
|
// Enforce collection-level access control
|
|
16
13
|
const collectionConfig = instance.config.collections?.find((c) => c.slug === collection);
|
|
17
14
|
if (collectionConfig?.access?.delete && options.req) {
|
|
18
|
-
const canDelete = await collectionConfig.access.delete({
|
|
15
|
+
const canDelete = await collectionConfig.access.delete({
|
|
16
|
+
req: options.req,
|
|
17
|
+
id: options.id,
|
|
18
|
+
});
|
|
19
19
|
if (!canDelete) {
|
|
20
20
|
throw new Error('Access denied: you do not have permission to delete in this collection');
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/find.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/find.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B,wBAAsB,IAAI,CACxB,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EAAE,iBAAiB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC,qBAAqB,CAAC,CAgBhC"}
|
|
@@ -4,12 +4,9 @@
|
|
|
4
4
|
* Finds multiple documents from a collection with validation and DataLoader setup.
|
|
5
5
|
*/
|
|
6
6
|
import { getDataLoader } from '../../dataloader.js';
|
|
7
|
-
import { validateJWTFromRequest } from '../../utils/jwt-validation.js';
|
|
8
7
|
export async function find(instance, ensureDbConnected, options) {
|
|
9
8
|
await ensureDbConnected();
|
|
10
9
|
const { collection, req } = options;
|
|
11
|
-
// Validate JWT token if authorization header is provided
|
|
12
|
-
await validateJWTFromRequest(req);
|
|
13
10
|
if (!instance.collections[collection]) {
|
|
14
11
|
throw new Error(`Collection '${collection}' not found`);
|
|
15
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findById.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/findById.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"findById.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/findById.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE5F,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB,GACA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAgBhC"}
|
|
@@ -4,12 +4,9 @@
|
|
|
4
4
|
* Finds a single document by ID from a collection with validation and DataLoader setup.
|
|
5
5
|
*/
|
|
6
6
|
import { getDataLoader } from '../../dataloader.js';
|
|
7
|
-
import { validateJWTFromRequest } from '../../utils/jwt-validation.js';
|
|
8
7
|
export async function findByID(instance, ensureDbConnected, options) {
|
|
9
8
|
await ensureDbConnected();
|
|
10
9
|
const { collection, req } = options;
|
|
11
|
-
// Validate JWT token if authorization header is provided
|
|
12
|
-
await validateJWTFromRequest(req);
|
|
13
10
|
if (!instance.collections[collection]) {
|
|
14
11
|
throw new Error(`Collection '${collection}' not found`);
|
|
15
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,qBAAqB,EAAE,GAAG,SAAS,EAC1C,IAAI,EAAE;IACJ,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,EACD,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,CAAC,CA0BzB"}
|
|
@@ -25,7 +25,9 @@ export async function callHooks(hooks, args, revealui) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
catch (error) {
|
|
28
|
-
|
|
28
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
29
|
+
revealui.logger.error(`Hook execution failed: ${msg}`);
|
|
30
|
+
throw error;
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGlG,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EAAE,mBAAmB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,cAAc,CAAC,CA6CzB"}
|
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Updates an existing document in a collection with hook handling.
|
|
5
5
|
*/
|
|
6
|
-
import { validateJWTFromRequest } from '../../utils/jwt-validation.js';
|
|
7
6
|
import { callHooks } from './hooks.js';
|
|
8
7
|
export async function update(instance, ensureDbConnected, options) {
|
|
9
8
|
await ensureDbConnected();
|
|
10
9
|
const { collection, req } = options;
|
|
11
|
-
// Validate JWT token if authorization header is provided
|
|
12
|
-
await validateJWTFromRequest(req);
|
|
13
10
|
if (!instance.collections[collection]) {
|
|
14
11
|
throw new Error(`Collection '${collection}' not found`);
|
|
15
12
|
}
|
|
16
13
|
const collectionConfig = instance.config.collections?.find((c) => c.slug === collection);
|
|
17
14
|
// Enforce collection-level access control
|
|
18
15
|
if (collectionConfig?.access?.update && options.req) {
|
|
19
|
-
const canUpdate = await collectionConfig.access.update({
|
|
16
|
+
const canUpdate = await collectionConfig.access.update({
|
|
17
|
+
req: options.req,
|
|
18
|
+
id: options.id,
|
|
19
|
+
});
|
|
20
20
|
if (!canUpdate) {
|
|
21
21
|
throw new Error('Access denied: you do not have permission to update in this collection');
|
|
22
22
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Job Queue
|
|
3
|
+
*
|
|
4
|
+
* PostgreSQL-backed job queue using raw SQL for portability.
|
|
5
|
+
* No external dependencies (no Redis, no pg-boss).
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* import { createJobQueue } from '@revealui/core/jobs';
|
|
9
|
+
*
|
|
10
|
+
* const queue = createJobQueue(dbExecutor);
|
|
11
|
+
* await queue.send('email.send', { to: 'user@example.com', subject: '...' });
|
|
12
|
+
* queue.work('email.send', async (job) => { await sendEmail(job.data); });
|
|
13
|
+
*/
|
|
14
|
+
export type { DatabaseExecutor, JobHandler, JobPayload, JobQueue, JobQueueConfig, SendOptions, } from './queue.js';
|
|
15
|
+
export { createJobQueue } from './queue.js';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Job Queue
|
|
3
|
+
*
|
|
4
|
+
* PostgreSQL-backed job queue using raw SQL for portability.
|
|
5
|
+
* No external dependencies (no Redis, no pg-boss).
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* import { createJobQueue } from '@revealui/core/jobs';
|
|
9
|
+
*
|
|
10
|
+
* const queue = createJobQueue(dbExecutor);
|
|
11
|
+
* await queue.send('email.send', { to: 'user@example.com', subject: '...' });
|
|
12
|
+
* queue.work('email.send', async (job) => { await sendEmail(job.data); });
|
|
13
|
+
*/
|
|
14
|
+
export { createJobQueue } from './queue.js';
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL-backed Job Queue
|
|
3
|
+
*
|
|
4
|
+
* Uses raw SQL via a database executor for portability.
|
|
5
|
+
* Supports: delayed jobs, retries with exponential backoff, priorities, expiration.
|
|
6
|
+
*
|
|
7
|
+
* The jobs table must exist (see packages/db/src/schema/jobs.ts).
|
|
8
|
+
*/
|
|
9
|
+
/** Minimal database executor — accepts raw SQL strings */
|
|
10
|
+
export interface DatabaseExecutor {
|
|
11
|
+
execute(query: string, params?: unknown[]): Promise<{
|
|
12
|
+
rows: Record<string, unknown>[];
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export interface JobQueueConfig {
|
|
16
|
+
/** Polling interval in milliseconds (default: 5000) */
|
|
17
|
+
pollingIntervalMs: number;
|
|
18
|
+
/** Maximum concurrent jobs per worker (default: 5) */
|
|
19
|
+
concurrency: number;
|
|
20
|
+
/** Default retry limit for jobs without explicit limit (default: 3) */
|
|
21
|
+
defaultRetryLimit: number;
|
|
22
|
+
/** Base delay for exponential backoff in ms (default: 1000) */
|
|
23
|
+
retryBackoffMs: number;
|
|
24
|
+
/** Logger with error method */
|
|
25
|
+
logger?: {
|
|
26
|
+
error: (msg: string) => void;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface SendOptions {
|
|
30
|
+
/** Higher priority = processed first (default: 0) */
|
|
31
|
+
priority?: number;
|
|
32
|
+
/** Maximum retry attempts (default: config.defaultRetryLimit) */
|
|
33
|
+
retryLimit?: number;
|
|
34
|
+
/** Delay before first processing (Date or milliseconds from now) */
|
|
35
|
+
startAfter?: Date | number;
|
|
36
|
+
/** Job expires at this time (unprocessed jobs are skipped) */
|
|
37
|
+
expireAt?: Date;
|
|
38
|
+
}
|
|
39
|
+
export interface JobPayload {
|
|
40
|
+
id: string;
|
|
41
|
+
name: string;
|
|
42
|
+
data: Record<string, unknown>;
|
|
43
|
+
retryCount: number;
|
|
44
|
+
}
|
|
45
|
+
export type JobHandler = (job: JobPayload) => Promise<void>;
|
|
46
|
+
export interface JobQueue {
|
|
47
|
+
/** Enqueue a job for background processing */
|
|
48
|
+
send(name: string, data: Record<string, unknown>, options?: SendOptions): Promise<string>;
|
|
49
|
+
/** Register a handler for a job type and start polling */
|
|
50
|
+
work(name: string, handler: JobHandler): void;
|
|
51
|
+
/** Stop all polling workers */
|
|
52
|
+
stop(): void;
|
|
53
|
+
/** Get counts by state for monitoring */
|
|
54
|
+
getQueueStats(): Promise<Record<string, number>>;
|
|
55
|
+
}
|
|
56
|
+
export declare function createJobQueue(executor: DatabaseExecutor, overrides?: Partial<JobQueueConfig>): JobQueue;
|
|
57
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/jobs/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CAC3C;AASD,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,8CAA8C;IAC9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,0DAA0D;IAC1D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9C,+BAA+B;IAC/B,IAAI,IAAI,IAAI,CAAC;IACb,yCAAyC;IACzC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClD;AAMD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAClC,QAAQ,CAwJV"}
|