@rakun-kit/core 1.5.13 → 1.6.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 +105 -20
- package/dist/cjs/api/operations/manager-contract.js +8 -0
- package/dist/cjs/api/operations/manager-contract.js.map +1 -1
- package/dist/cjs/api/operations/manager-manifest.js +5 -0
- package/dist/cjs/api/operations/manager-manifest.js.map +1 -1
- package/dist/cjs/api/operations/manager.js +4 -0
- package/dist/cjs/api/operations/manager.js.map +1 -1
- package/dist/cjs/api/routes/manager/auth/markTourSeen.js +4 -1
- package/dist/cjs/api/routes/manager/auth/markTourSeen.js.map +1 -1
- package/dist/cjs/api/routes/manager/localeVariants.js +20 -14
- package/dist/cjs/api/routes/manager/localeVariants.js.map +1 -1
- package/dist/cjs/api/routes/manager/media/deleteMediaStorage.js +14 -9
- package/dist/cjs/api/routes/manager/media/deleteMediaStorage.js.map +1 -1
- package/dist/cjs/api/routes/manager/media/finalizeUpload.js +4 -0
- package/dist/cjs/api/routes/manager/media/finalizeUpload.js.map +1 -1
- package/dist/cjs/api/routes/manager/media/reimportMedia.js +20 -10
- package/dist/cjs/api/routes/manager/media/reimportMedia.js.map +1 -1
- package/dist/cjs/api/routes/manager/media/replaceMedia.js +224 -0
- package/dist/cjs/api/routes/manager/media/replaceMedia.js.map +1 -0
- package/dist/cjs/api/routes/manager/media/resolveMediaRecordUrls.js +14 -12
- package/dist/cjs/api/routes/manager/media/resolveMediaRecordUrls.js.map +1 -1
- package/dist/cjs/api/routes/manager/media/uploadBinary.js +112 -39
- package/dist/cjs/api/routes/manager/media/uploadBinary.js.map +1 -1
- package/dist/cjs/api/routes/web/llms.js +53 -52
- package/dist/cjs/api/routes/web/llms.js.map +1 -1
- package/dist/cjs/api/routes/web/page.js +47 -14
- package/dist/cjs/api/routes/web/page.js.map +1 -1
- package/dist/cjs/api/routes/web/sitemap.js +12 -2
- package/dist/cjs/api/routes/web/sitemap.js.map +1 -1
- package/dist/cjs/api/routes/web/staticPaths.js +4 -2
- package/dist/cjs/api/routes/web/staticPaths.js.map +1 -1
- package/dist/cjs/api/utils/dynamicData.js +193 -130
- package/dist/cjs/api/utils/dynamicData.js.map +1 -1
- package/dist/cjs/api/utils/index.js +2 -1
- package/dist/cjs/api/utils/index.js.map +1 -1
- package/dist/cjs/api/utils/mediaUploadKey.js +11 -1
- package/dist/cjs/api/utils/mediaUploadKey.js.map +1 -1
- package/dist/cjs/api/utils/populates/populateLinks.js +27 -55
- package/dist/cjs/api/utils/populates/populateLinks.js.map +1 -1
- package/dist/cjs/api/utils/populates/populateRelations.js +78 -43
- package/dist/cjs/api/utils/populates/populateRelations.js.map +1 -1
- package/dist/cjs/api/utils/routes/routeMapHelpers.js +44 -10
- package/dist/cjs/api/utils/routes/routeMapHelpers.js.map +1 -1
- package/dist/cjs/api/utils/routes/updateRoutesMap.js +12 -7
- package/dist/cjs/api/utils/routes/updateRoutesMap.js.map +1 -1
- package/dist/cjs/client.js +1 -0
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/contracts.js +1 -0
- package/dist/cjs/contracts.js.map +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal-content-types/Backup.js +3 -3
- package/dist/cjs/internal-content-types/Backup.js.map +1 -1
- package/dist/cjs/internal-content-types/ContentComment.js +2 -2
- package/dist/cjs/internal-content-types/ContentComment.js.map +1 -1
- package/dist/cjs/internal-content-types/ContentReview.js +31 -18
- package/dist/cjs/internal-content-types/ContentReview.js.map +1 -1
- package/dist/cjs/internal-content-types/ContentReviewDecision.js +1 -1
- package/dist/cjs/internal-content-types/ContentReviewDecision.js.map +1 -1
- package/dist/cjs/internal-content-types/ContentReviewPolicy.js +2 -2
- package/dist/cjs/internal-content-types/ContentReviewPolicy.js.map +1 -1
- package/dist/cjs/internal-content-types/ContentVersion.js +4 -4
- package/dist/cjs/internal-content-types/ContentVersion.js.map +1 -1
- package/dist/cjs/internal-content-types/Language.js +1 -1
- package/dist/cjs/internal-content-types/Language.js.map +1 -1
- package/dist/cjs/internal-content-types/LlmsSettings.js +8 -9
- package/dist/cjs/internal-content-types/LlmsSettings.js.map +1 -1
- package/dist/cjs/internal-content-types/LoginIpBlock.js +1 -1
- package/dist/cjs/internal-content-types/LoginIpBlock.js.map +1 -1
- package/dist/cjs/internal-content-types/ManagerNotification.js +2 -2
- package/dist/cjs/internal-content-types/ManagerNotification.js.map +1 -1
- package/dist/cjs/internal-content-types/ManagerUser.js +9 -9
- package/dist/cjs/internal-content-types/ManagerUser.js.map +1 -1
- package/dist/cjs/internal-content-types/Media.js +18 -17
- package/dist/cjs/internal-content-types/Media.js.map +1 -1
- package/dist/cjs/internal-content-types/MediaFolder.js +2 -2
- package/dist/cjs/internal-content-types/MediaFolder.js.map +1 -1
- package/dist/cjs/internal-content-types/MfaChallenge.js +2 -2
- package/dist/cjs/internal-content-types/MfaChallenge.js.map +1 -1
- package/dist/cjs/internal-content-types/Migration.js +5 -5
- package/dist/cjs/internal-content-types/Migration.js.map +1 -1
- package/dist/cjs/internal-content-types/PasswordResetToken.js +1 -1
- package/dist/cjs/internal-content-types/PasswordResetToken.js.map +1 -1
- package/dist/cjs/internal-content-types/PreviewSnapshot.js +2 -2
- package/dist/cjs/internal-content-types/PreviewSnapshot.js.map +1 -1
- package/dist/cjs/internal-content-types/Redirect.js +4 -4
- package/dist/cjs/internal-content-types/Redirect.js.map +1 -1
- package/dist/cjs/internal-content-types/RobotsRule.js +3 -3
- package/dist/cjs/internal-content-types/RobotsRule.js.map +1 -1
- package/dist/cjs/internal-content-types/Route.js +2 -2
- package/dist/cjs/internal-content-types/Route.js.map +1 -1
- package/dist/cjs/internal-content-types/RouteLayoutModule.js +1 -1
- package/dist/cjs/internal-content-types/RouteLayoutModule.js.map +1 -1
- package/dist/cjs/internal-content-types/RouteLayoutModuleOverride.js +1 -1
- package/dist/cjs/internal-content-types/RouteLayoutModuleOverride.js.map +1 -1
- package/dist/cjs/internal-content-types/RouteMap.js +2 -2
- package/dist/cjs/internal-content-types/RouteMap.js.map +1 -1
- package/dist/cjs/internal-content-types/RouteSettings.js +1 -1
- package/dist/cjs/internal-content-types/RouteSettings.js.map +1 -1
- package/dist/cjs/internal-content-types/Seo.js +34 -20
- package/dist/cjs/internal-content-types/Seo.js.map +1 -1
- package/dist/cjs/internal-content-types/SeoAudit.js +29 -0
- package/dist/cjs/internal-content-types/SeoAudit.js.map +1 -0
- package/dist/cjs/internal-content-types/SeoSettings.js +5 -5
- package/dist/cjs/internal-content-types/SeoSettings.js.map +1 -1
- package/dist/cjs/internal-content-types/StructuredData.js +102 -0
- package/dist/cjs/internal-content-types/StructuredData.js.map +1 -0
- package/dist/cjs/internal-content-types/UserMfa.js +6 -6
- package/dist/cjs/internal-content-types/UserMfa.js.map +1 -1
- package/dist/cjs/internal-content-types/WebAuthnRegChallenge.js +1 -1
- package/dist/cjs/internal-content-types/WebAuthnRegChallenge.js.map +1 -1
- package/dist/cjs/internal-content-types/index.js +2 -0
- package/dist/cjs/internal-content-types/index.js.map +1 -1
- package/dist/cjs/lib/ContentType.js +11 -3
- package/dist/cjs/lib/ContentType.js.map +1 -1
- package/dist/cjs/lib/Registry.js +1 -0
- package/dist/cjs/lib/Registry.js.map +1 -1
- package/dist/cjs/lib/fields/Boolean.js +5 -1
- package/dist/cjs/lib/fields/Boolean.js.map +1 -1
- package/dist/cjs/lib/fields/Breadcrums.js +5 -1
- package/dist/cjs/lib/fields/Breadcrums.js.map +1 -1
- package/dist/cjs/lib/fields/ContentReference.js +22 -6
- package/dist/cjs/lib/fields/ContentReference.js.map +1 -1
- package/dist/cjs/lib/fields/Date.js +11 -5
- package/dist/cjs/lib/fields/Date.js.map +1 -1
- package/dist/cjs/lib/fields/Field.js +71 -45
- package/dist/cjs/lib/fields/Field.js.map +1 -1
- package/dist/cjs/lib/fields/Fields.js +2 -0
- package/dist/cjs/lib/fields/Fields.js.map +1 -1
- package/dist/cjs/lib/fields/File.js +74 -25
- package/dist/cjs/lib/fields/File.js.map +1 -1
- package/dist/cjs/lib/fields/Iterator.js +1 -1
- package/dist/cjs/lib/fields/Iterator.js.map +1 -1
- package/dist/cjs/lib/fields/Link.js +26 -15
- package/dist/cjs/lib/fields/Link.js.map +1 -1
- package/dist/cjs/lib/fields/List.js +34 -12
- package/dist/cjs/lib/fields/List.js.map +1 -1
- package/dist/cjs/lib/fields/Menu.js +56 -0
- package/dist/cjs/lib/fields/Menu.js.map +1 -0
- package/dist/cjs/lib/fields/Number.js +3 -2
- package/dist/cjs/lib/fields/Number.js.map +1 -1
- package/dist/cjs/lib/fields/Relation.js +17 -15
- package/dist/cjs/lib/fields/Relation.js.map +1 -1
- package/dist/cjs/lib/fields/Select.js +20 -4
- package/dist/cjs/lib/fields/Select.js.map +1 -1
- package/dist/cjs/lib/fields/SelfRelation.js +4 -3
- package/dist/cjs/lib/fields/SelfRelation.js.map +1 -1
- package/dist/cjs/lib/fields/SimpleList.js +38 -14
- package/dist/cjs/lib/fields/SimpleList.js.map +1 -1
- package/dist/cjs/lib/fields/String.js +34 -36
- package/dist/cjs/lib/fields/String.js.map +1 -1
- package/dist/cjs/lib/fields/index.js +1 -0
- package/dist/cjs/lib/fields/index.js.map +1 -1
- package/dist/cjs/media/imageOptimization.js.map +1 -1
- package/dist/cjs/media/mediaOptimization.js +18 -0
- package/dist/cjs/media/mediaOptimization.js.map +1 -0
- package/dist/cjs/media/videoOptimization.js +142 -0
- package/dist/cjs/media/videoOptimization.js.map +1 -0
- package/dist/cjs/orm/createIndexes.js +4 -0
- package/dist/cjs/orm/createIndexes.js.map +1 -1
- package/dist/cjs/schemas/manager/media/finalizeUpload.js +10 -1
- package/dist/cjs/schemas/manager/media/finalizeUpload.js.map +1 -1
- package/dist/cjs/schemas/manager/media/reimportMedia.js.map +1 -1
- package/dist/cjs/schemas/manager/media/replaceMedia.js +21 -0
- package/dist/cjs/schemas/manager/media/replaceMedia.js.map +1 -0
- package/dist/cjs/schemas/web/page.js +2 -3
- package/dist/cjs/schemas/web/page.js.map +1 -1
- package/dist/cjs/web/page.js +1 -1
- package/dist/cjs/web/page.js.map +1 -1
- package/dist/docs/index.md +117 -18
- package/dist/esm/api/operations/index.d.ts +154 -26
- package/dist/esm/api/operations/index.d.ts.map +1 -1
- package/dist/esm/api/operations/manager-contract.d.ts +108 -8
- package/dist/esm/api/operations/manager-contract.d.ts.map +1 -1
- package/dist/esm/api/operations/manager-contract.js +9 -1
- package/dist/esm/api/operations/manager-contract.js.map +1 -1
- package/dist/esm/api/operations/manager-manifest.d.ts +5 -0
- package/dist/esm/api/operations/manager-manifest.d.ts.map +1 -1
- package/dist/esm/api/operations/manager-manifest.js +5 -0
- package/dist/esm/api/operations/manager-manifest.js.map +1 -1
- package/dist/esm/api/operations/manager.d.ts +108 -8
- package/dist/esm/api/operations/manager.d.ts.map +1 -1
- package/dist/esm/api/operations/manager.js +4 -0
- package/dist/esm/api/operations/manager.js.map +1 -1
- package/dist/esm/api/operations/web-contract.d.ts +46 -18
- package/dist/esm/api/operations/web-contract.d.ts.map +1 -1
- package/dist/esm/api/operations/web.d.ts +46 -18
- package/dist/esm/api/operations/web.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/auth/getSession.d.ts +2 -2
- package/dist/esm/api/routes/manager/auth/markTourSeen.d.ts +3 -3
- package/dist/esm/api/routes/manager/auth/markTourSeen.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/auth/markTourSeen.js +4 -1
- package/dist/esm/api/routes/manager/auth/markTourSeen.js.map +1 -1
- package/dist/esm/api/routes/manager/auth/updateAccount.d.ts +2 -2
- package/dist/esm/api/routes/manager/auth/updateTutorialPreferences.d.ts +2 -2
- package/dist/esm/api/routes/manager/media/deleteMediaStorage.d.ts +1 -0
- package/dist/esm/api/routes/manager/media/deleteMediaStorage.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/media/deleteMediaStorage.js +14 -9
- package/dist/esm/api/routes/manager/media/deleteMediaStorage.js.map +1 -1
- package/dist/esm/api/routes/manager/media/finalizeUpload.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/media/finalizeUpload.js +5 -1
- package/dist/esm/api/routes/manager/media/finalizeUpload.js.map +1 -1
- package/dist/esm/api/routes/manager/media/reimportMedia.d.ts +12 -3
- package/dist/esm/api/routes/manager/media/reimportMedia.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/media/reimportMedia.js +18 -8
- package/dist/esm/api/routes/manager/media/reimportMedia.js.map +1 -1
- package/dist/esm/api/routes/manager/media/replaceMedia.d.ts +32 -0
- package/dist/esm/api/routes/manager/media/replaceMedia.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/media/replaceMedia.js +218 -0
- package/dist/esm/api/routes/manager/media/replaceMedia.js.map +1 -0
- package/dist/esm/api/routes/manager/media/resolveMediaRecordUrls.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/media/resolveMediaRecordUrls.js +14 -12
- package/dist/esm/api/routes/manager/media/resolveMediaRecordUrls.js.map +1 -1
- package/dist/esm/api/routes/manager/media/uploadBinary.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/media/uploadBinary.js +112 -39
- package/dist/esm/api/routes/manager/media/uploadBinary.js.map +1 -1
- package/dist/esm/api/routes/web/llms.d.ts +1 -1
- package/dist/esm/api/routes/web/llms.d.ts.map +1 -1
- package/dist/esm/api/routes/web/llms.js +43 -50
- package/dist/esm/api/routes/web/llms.js.map +1 -1
- package/dist/esm/api/routes/web/page.d.ts +2 -0
- package/dist/esm/api/routes/web/page.d.ts.map +1 -1
- package/dist/esm/api/routes/web/page.js +45 -14
- package/dist/esm/api/routes/web/page.js.map +1 -1
- package/dist/esm/api/routes/web/previewPage.d.ts +23 -9
- package/dist/esm/api/routes/web/previewPage.d.ts.map +1 -1
- package/dist/esm/api/routes/web/sitemap.d.ts.map +1 -1
- package/dist/esm/api/routes/web/sitemap.js +12 -2
- package/dist/esm/api/routes/web/sitemap.js.map +1 -1
- package/dist/esm/api/routes/web/staticPaths.d.ts.map +1 -1
- package/dist/esm/api/routes/web/staticPaths.js +4 -2
- package/dist/esm/api/routes/web/staticPaths.js.map +1 -1
- package/dist/esm/api/utils/dynamicData.d.ts +6 -5
- package/dist/esm/api/utils/dynamicData.d.ts.map +1 -1
- package/dist/esm/api/utils/dynamicData.js +200 -138
- package/dist/esm/api/utils/dynamicData.js.map +1 -1
- package/dist/esm/api/utils/getUser.d.ts +2 -2
- package/dist/esm/api/utils/index.d.ts +25 -25
- package/dist/esm/api/utils/index.d.ts.map +1 -1
- package/dist/esm/api/utils/index.js +25 -25
- package/dist/esm/api/utils/index.js.map +1 -1
- package/dist/esm/api/utils/mediaUploadKey.d.ts +2 -0
- package/dist/esm/api/utils/mediaUploadKey.d.ts.map +1 -1
- package/dist/esm/api/utils/mediaUploadKey.js +9 -0
- package/dist/esm/api/utils/mediaUploadKey.js.map +1 -1
- package/dist/esm/api/utils/populates/populateLinks.d.ts +4 -2
- package/dist/esm/api/utils/populates/populateLinks.d.ts.map +1 -1
- package/dist/esm/api/utils/populates/populateLinks.js +30 -58
- package/dist/esm/api/utils/populates/populateLinks.js.map +1 -1
- package/dist/esm/api/utils/populates/populateRelations.d.ts +2 -2
- package/dist/esm/api/utils/populates/populateRelations.d.ts.map +1 -1
- package/dist/esm/api/utils/populates/populateRelations.js +85 -50
- package/dist/esm/api/utils/populates/populateRelations.js.map +1 -1
- package/dist/esm/api/utils/reviews.d.ts +2 -2
- package/dist/esm/api/utils/routes/routeMapHelpers.d.ts +4 -1
- package/dist/esm/api/utils/routes/routeMapHelpers.d.ts.map +1 -1
- package/dist/esm/api/utils/routes/routeMapHelpers.js +42 -9
- package/dist/esm/api/utils/routes/routeMapHelpers.js.map +1 -1
- package/dist/esm/api/utils/routes/updateRoutesMap.d.ts.map +1 -1
- package/dist/esm/api/utils/routes/updateRoutesMap.js +12 -7
- package/dist/esm/api/utils/routes/updateRoutesMap.js.map +1 -1
- package/dist/esm/client.d.ts +2 -0
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +1 -0
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/contracts.d.ts +1 -0
- package/dist/esm/contracts.d.ts.map +1 -1
- package/dist/esm/contracts.js +1 -0
- package/dist/esm/contracts.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal-content-types/ApiOperation.d.ts +56 -16
- package/dist/esm/internal-content-types/ApiOperation.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Backup.d.ts +1044 -99
- package/dist/esm/internal-content-types/Backup.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Backup.js +3 -3
- package/dist/esm/internal-content-types/Backup.js.map +1 -1
- package/dist/esm/internal-content-types/BackupDocument.d.ts +56 -16
- package/dist/esm/internal-content-types/BackupDocument.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentComment.d.ts +5833 -614
- package/dist/esm/internal-content-types/ContentComment.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentComment.js +2 -2
- package/dist/esm/internal-content-types/ContentComment.js.map +1 -1
- package/dist/esm/internal-content-types/ContentCommentReadState.d.ts +4384 -896
- package/dist/esm/internal-content-types/ContentCommentReadState.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentReview.d.ts +33582 -9735
- package/dist/esm/internal-content-types/ContentReview.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentReview.js +31 -18
- package/dist/esm/internal-content-types/ContentReview.js.map +1 -1
- package/dist/esm/internal-content-types/ContentReviewDecision.d.ts +4777 -914
- package/dist/esm/internal-content-types/ContentReviewDecision.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentReviewDecision.js +1 -1
- package/dist/esm/internal-content-types/ContentReviewDecision.js.map +1 -1
- package/dist/esm/internal-content-types/ContentReviewPolicy.d.ts +1547 -40
- package/dist/esm/internal-content-types/ContentReviewPolicy.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentReviewPolicy.js +2 -2
- package/dist/esm/internal-content-types/ContentReviewPolicy.js.map +1 -1
- package/dist/esm/internal-content-types/ContentTemplate.d.ts +38 -12
- package/dist/esm/internal-content-types/ContentTemplate.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentVersion.d.ts +1168 -48
- package/dist/esm/internal-content-types/ContentVersion.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentVersion.js +4 -4
- package/dist/esm/internal-content-types/ContentVersion.js.map +1 -1
- package/dist/esm/internal-content-types/HelloWorld.d.ts +15 -5
- package/dist/esm/internal-content-types/HelloWorld.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Language.d.ts +109 -9
- package/dist/esm/internal-content-types/Language.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Language.js +1 -1
- package/dist/esm/internal-content-types/Language.js.map +1 -1
- package/dist/esm/internal-content-types/LiteralTranslation.d.ts +28 -8
- package/dist/esm/internal-content-types/LiteralTranslation.d.ts.map +1 -1
- package/dist/esm/internal-content-types/LlmsSettings.d.ts +2351 -914
- package/dist/esm/internal-content-types/LlmsSettings.d.ts.map +1 -1
- package/dist/esm/internal-content-types/LlmsSettings.js +8 -9
- package/dist/esm/internal-content-types/LlmsSettings.js.map +1 -1
- package/dist/esm/internal-content-types/LoginIpBlock.d.ts +119 -13
- package/dist/esm/internal-content-types/LoginIpBlock.d.ts.map +1 -1
- package/dist/esm/internal-content-types/LoginIpBlock.js +1 -1
- package/dist/esm/internal-content-types/LoginIpBlock.js.map +1 -1
- package/dist/esm/internal-content-types/ManagerFavorite.d.ts +4370 -892
- package/dist/esm/internal-content-types/ManagerFavorite.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ManagerNotification.d.ts +8876 -1441
- package/dist/esm/internal-content-types/ManagerNotification.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ManagerNotification.js +2 -2
- package/dist/esm/internal-content-types/ManagerNotification.js.map +1 -1
- package/dist/esm/internal-content-types/ManagerRole.d.ts +17 -5
- package/dist/esm/internal-content-types/ManagerRole.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ManagerUser.d.ts +1775 -48
- package/dist/esm/internal-content-types/ManagerUser.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ManagerUser.js +9 -9
- package/dist/esm/internal-content-types/ManagerUser.js.map +1 -1
- package/dist/esm/internal-content-types/Media.d.ts +6101 -774
- package/dist/esm/internal-content-types/Media.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Media.js +18 -17
- package/dist/esm/internal-content-types/Media.js.map +1 -1
- package/dist/esm/internal-content-types/MediaFolder.d.ts +401 -14
- package/dist/esm/internal-content-types/MediaFolder.d.ts.map +1 -1
- package/dist/esm/internal-content-types/MediaFolder.js +2 -2
- package/dist/esm/internal-content-types/MediaFolder.js.map +1 -1
- package/dist/esm/internal-content-types/MfaChallenge.d.ts +4915 -956
- package/dist/esm/internal-content-types/MfaChallenge.d.ts.map +1 -1
- package/dist/esm/internal-content-types/MfaChallenge.js +2 -2
- package/dist/esm/internal-content-types/MfaChallenge.js.map +1 -1
- package/dist/esm/internal-content-types/Migration.d.ts +1180 -39
- package/dist/esm/internal-content-types/Migration.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Migration.js +5 -5
- package/dist/esm/internal-content-types/Migration.js.map +1 -1
- package/dist/esm/internal-content-types/MigrationLock.d.ts +8 -4
- package/dist/esm/internal-content-types/MigrationLock.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Page.d.ts +45 -15
- package/dist/esm/internal-content-types/Page.d.ts.map +1 -1
- package/dist/esm/internal-content-types/PasswordResetToken.d.ts +4452 -894
- package/dist/esm/internal-content-types/PasswordResetToken.d.ts.map +1 -1
- package/dist/esm/internal-content-types/PasswordResetToken.js +1 -1
- package/dist/esm/internal-content-types/PasswordResetToken.js.map +1 -1
- package/dist/esm/internal-content-types/PreviewSnapshot.d.ts +646 -34
- package/dist/esm/internal-content-types/PreviewSnapshot.d.ts.map +1 -1
- package/dist/esm/internal-content-types/PreviewSnapshot.js +2 -2
- package/dist/esm/internal-content-types/PreviewSnapshot.js.map +1 -1
- package/dist/esm/internal-content-types/Redirect.d.ts +1462 -96
- package/dist/esm/internal-content-types/Redirect.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Redirect.js +4 -4
- package/dist/esm/internal-content-types/Redirect.js.map +1 -1
- package/dist/esm/internal-content-types/RobotsRule.d.ts +862 -23
- package/dist/esm/internal-content-types/RobotsRule.d.ts.map +1 -1
- package/dist/esm/internal-content-types/RobotsRule.js +3 -3
- package/dist/esm/internal-content-types/RobotsRule.js.map +1 -1
- package/dist/esm/internal-content-types/Route.d.ts +424 -27
- package/dist/esm/internal-content-types/Route.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Route.js +2 -2
- package/dist/esm/internal-content-types/Route.js.map +1 -1
- package/dist/esm/internal-content-types/RouteLayoutModule.d.ts +350 -25
- package/dist/esm/internal-content-types/RouteLayoutModule.d.ts.map +1 -1
- package/dist/esm/internal-content-types/RouteLayoutModule.js +1 -1
- package/dist/esm/internal-content-types/RouteLayoutModule.js.map +1 -1
- package/dist/esm/internal-content-types/RouteLayoutModuleOverride.d.ts +340 -21
- package/dist/esm/internal-content-types/RouteLayoutModuleOverride.d.ts.map +1 -1
- package/dist/esm/internal-content-types/RouteLayoutModuleOverride.js +1 -1
- package/dist/esm/internal-content-types/RouteLayoutModuleOverride.js.map +1 -1
- package/dist/esm/internal-content-types/RouteLocaleVariant.d.ts +84 -24
- package/dist/esm/internal-content-types/RouteLocaleVariant.d.ts.map +1 -1
- package/dist/esm/internal-content-types/RouteMap.d.ts +427 -22
- package/dist/esm/internal-content-types/RouteMap.d.ts.map +1 -1
- package/dist/esm/internal-content-types/RouteMap.js +2 -2
- package/dist/esm/internal-content-types/RouteMap.js.map +1 -1
- package/dist/esm/internal-content-types/RouteSettings.d.ts +1610 -534
- package/dist/esm/internal-content-types/RouteSettings.d.ts.map +1 -1
- package/dist/esm/internal-content-types/RouteSettings.js +1 -1
- package/dist/esm/internal-content-types/RouteSettings.js.map +1 -1
- package/dist/esm/internal-content-types/SchemaState.d.ts +32 -12
- package/dist/esm/internal-content-types/SchemaState.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Seo.d.ts +3188 -605
- package/dist/esm/internal-content-types/Seo.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Seo.js +34 -20
- package/dist/esm/internal-content-types/Seo.js.map +1 -1
- package/dist/esm/internal-content-types/SeoAudit.d.ts +2724 -0
- package/dist/esm/internal-content-types/SeoAudit.d.ts.map +1 -0
- package/dist/esm/internal-content-types/SeoAudit.js +23 -0
- package/dist/esm/internal-content-types/SeoAudit.js.map +1 -0
- package/dist/esm/internal-content-types/SeoSettings.d.ts +16072 -4113
- package/dist/esm/internal-content-types/SeoSettings.d.ts.map +1 -1
- package/dist/esm/internal-content-types/SeoSettings.js +5 -5
- package/dist/esm/internal-content-types/SeoSettings.js.map +1 -1
- package/dist/esm/internal-content-types/Session.d.ts +4365 -893
- package/dist/esm/internal-content-types/Session.d.ts.map +1 -1
- package/dist/esm/internal-content-types/StructuredData.d.ts +6095 -0
- package/dist/esm/internal-content-types/StructuredData.d.ts.map +1 -0
- package/dist/esm/internal-content-types/StructuredData.js +96 -0
- package/dist/esm/internal-content-types/StructuredData.js.map +1 -0
- package/dist/esm/internal-content-types/UserMfa.d.ts +5285 -903
- package/dist/esm/internal-content-types/UserMfa.d.ts.map +1 -1
- package/dist/esm/internal-content-types/UserMfa.js +6 -6
- package/dist/esm/internal-content-types/UserMfa.js.map +1 -1
- package/dist/esm/internal-content-types/WebAuthnCredential.d.ts +4409 -905
- package/dist/esm/internal-content-types/WebAuthnCredential.d.ts.map +1 -1
- package/dist/esm/internal-content-types/WebAuthnRegChallenge.d.ts +4466 -898
- package/dist/esm/internal-content-types/WebAuthnRegChallenge.d.ts.map +1 -1
- package/dist/esm/internal-content-types/WebAuthnRegChallenge.js +1 -1
- package/dist/esm/internal-content-types/WebAuthnRegChallenge.js.map +1 -1
- package/dist/esm/internal-content-types/index.d.ts +2 -0
- package/dist/esm/internal-content-types/index.d.ts.map +1 -1
- package/dist/esm/internal-content-types/index.js +2 -0
- package/dist/esm/internal-content-types/index.js.map +1 -1
- package/dist/esm/internal-content-types/syncAdminRole.d.ts +1 -1
- package/dist/esm/lib/ContentType.d.ts.map +1 -1
- package/dist/esm/lib/ContentType.js +11 -3
- package/dist/esm/lib/ContentType.js.map +1 -1
- package/dist/esm/lib/Registry.d.ts.map +1 -1
- package/dist/esm/lib/Registry.js +1 -0
- package/dist/esm/lib/Registry.js.map +1 -1
- package/dist/esm/lib/fields/Boolean.d.ts +4 -3
- package/dist/esm/lib/fields/Boolean.d.ts.map +1 -1
- package/dist/esm/lib/fields/Boolean.js +7 -3
- package/dist/esm/lib/fields/Boolean.js.map +1 -1
- package/dist/esm/lib/fields/Breadcrums.d.ts +2 -1
- package/dist/esm/lib/fields/Breadcrums.d.ts.map +1 -1
- package/dist/esm/lib/fields/Breadcrums.js +5 -1
- package/dist/esm/lib/fields/Breadcrums.js.map +1 -1
- package/dist/esm/lib/fields/ContentReference.d.ts +12 -5
- package/dist/esm/lib/fields/ContentReference.d.ts.map +1 -1
- package/dist/esm/lib/fields/ContentReference.js +25 -9
- package/dist/esm/lib/fields/ContentReference.js.map +1 -1
- package/dist/esm/lib/fields/Date.d.ts +5 -4
- package/dist/esm/lib/fields/Date.d.ts.map +1 -1
- package/dist/esm/lib/fields/Date.js +13 -7
- package/dist/esm/lib/fields/Date.js.map +1 -1
- package/dist/esm/lib/fields/Field.d.ts +105 -46
- package/dist/esm/lib/fields/Field.d.ts.map +1 -1
- package/dist/esm/lib/fields/Field.js +71 -45
- package/dist/esm/lib/fields/Field.js.map +1 -1
- package/dist/esm/lib/fields/Fields.d.ts +3 -0
- package/dist/esm/lib/fields/Fields.d.ts.map +1 -1
- package/dist/esm/lib/fields/Fields.js +2 -0
- package/dist/esm/lib/fields/Fields.js.map +1 -1
- package/dist/esm/lib/fields/File.d.ts +32 -6
- package/dist/esm/lib/fields/File.d.ts.map +1 -1
- package/dist/esm/lib/fields/File.js +76 -27
- package/dist/esm/lib/fields/File.js.map +1 -1
- package/dist/esm/lib/fields/Iterator.d.ts +2 -1
- package/dist/esm/lib/fields/Iterator.d.ts.map +1 -1
- package/dist/esm/lib/fields/Iterator.js +2 -2
- package/dist/esm/lib/fields/Iterator.js.map +1 -1
- package/dist/esm/lib/fields/Link.d.ts +32 -9
- package/dist/esm/lib/fields/Link.d.ts.map +1 -1
- package/dist/esm/lib/fields/Link.js +28 -18
- package/dist/esm/lib/fields/Link.js.map +1 -1
- package/dist/esm/lib/fields/List.d.ts +11 -10
- package/dist/esm/lib/fields/List.d.ts.map +1 -1
- package/dist/esm/lib/fields/List.js +37 -15
- package/dist/esm/lib/fields/List.js.map +1 -1
- package/dist/esm/lib/fields/Menu.d.ts +26 -0
- package/dist/esm/lib/fields/Menu.d.ts.map +1 -0
- package/dist/esm/lib/fields/Menu.js +49 -0
- package/dist/esm/lib/fields/Menu.js.map +1 -0
- package/dist/esm/lib/fields/Number.d.ts +4 -3
- package/dist/esm/lib/fields/Number.d.ts.map +1 -1
- package/dist/esm/lib/fields/Number.js +5 -4
- package/dist/esm/lib/fields/Number.js.map +1 -1
- package/dist/esm/lib/fields/Relation.d.ts +14 -13
- package/dist/esm/lib/fields/Relation.d.ts.map +1 -1
- package/dist/esm/lib/fields/Relation.js +21 -19
- package/dist/esm/lib/fields/Relation.js.map +1 -1
- package/dist/esm/lib/fields/Select.d.ts +10 -3
- package/dist/esm/lib/fields/Select.d.ts.map +1 -1
- package/dist/esm/lib/fields/Select.js +22 -6
- package/dist/esm/lib/fields/Select.js.map +1 -1
- package/dist/esm/lib/fields/SelfRelation.d.ts +5 -4
- package/dist/esm/lib/fields/SelfRelation.d.ts.map +1 -1
- package/dist/esm/lib/fields/SelfRelation.js +7 -6
- package/dist/esm/lib/fields/SelfRelation.js.map +1 -1
- package/dist/esm/lib/fields/SimpleList.d.ts +11 -4
- package/dist/esm/lib/fields/SimpleList.d.ts.map +1 -1
- package/dist/esm/lib/fields/SimpleList.js +40 -16
- package/dist/esm/lib/fields/SimpleList.js.map +1 -1
- package/dist/esm/lib/fields/String.d.ts +6 -5
- package/dist/esm/lib/fields/String.d.ts.map +1 -1
- package/dist/esm/lib/fields/String.js +38 -40
- package/dist/esm/lib/fields/String.js.map +1 -1
- package/dist/esm/lib/fields/index.d.ts +1 -0
- package/dist/esm/lib/fields/index.d.ts.map +1 -1
- package/dist/esm/lib/fields/index.js +1 -0
- package/dist/esm/lib/fields/index.js.map +1 -1
- package/dist/esm/manager.d.ts +5 -0
- package/dist/esm/manager.d.ts.map +1 -1
- package/dist/esm/media/imageOptimization.d.ts +7 -1
- package/dist/esm/media/imageOptimization.d.ts.map +1 -1
- package/dist/esm/media/imageOptimization.js.map +1 -1
- package/dist/esm/media/mediaOptimization.d.ts +12 -0
- package/dist/esm/media/mediaOptimization.d.ts.map +1 -0
- package/dist/esm/media/mediaOptimization.js +15 -0
- package/dist/esm/media/mediaOptimization.js.map +1 -0
- package/dist/esm/media/videoOptimization.d.ts +19 -0
- package/dist/esm/media/videoOptimization.d.ts.map +1 -0
- package/dist/esm/media/videoOptimization.js +136 -0
- package/dist/esm/media/videoOptimization.js.map +1 -0
- package/dist/esm/orm/createIndexes.d.ts.map +1 -1
- package/dist/esm/orm/createIndexes.js +5 -1
- package/dist/esm/orm/createIndexes.js.map +1 -1
- package/dist/esm/schemas/manager/media/finalizeUpload.d.ts +43 -0
- package/dist/esm/schemas/manager/media/finalizeUpload.d.ts.map +1 -1
- package/dist/esm/schemas/manager/media/finalizeUpload.js +9 -0
- package/dist/esm/schemas/manager/media/finalizeUpload.js.map +1 -1
- package/dist/esm/schemas/manager/media/reimportMedia.d.ts +17 -1
- package/dist/esm/schemas/manager/media/reimportMedia.d.ts.map +1 -1
- package/dist/esm/schemas/manager/media/reimportMedia.js.map +1 -1
- package/dist/esm/schemas/manager/media/replaceMedia.d.ts +107 -0
- package/dist/esm/schemas/manager/media/replaceMedia.d.ts.map +1 -0
- package/dist/esm/schemas/manager/media/replaceMedia.js +15 -0
- package/dist/esm/schemas/manager/media/replaceMedia.js.map +1 -0
- package/dist/esm/schemas/web/page.d.ts +147 -6
- package/dist/esm/schemas/web/page.d.ts.map +1 -1
- package/dist/esm/schemas/web/page.js +2 -3
- package/dist/esm/schemas/web/page.js.map +1 -1
- package/dist/esm/schemas/web/previewPage.d.ts +75 -6
- package/dist/esm/schemas/web/previewPage.d.ts.map +1 -1
- package/dist/esm/web/page.d.ts +7 -7
- package/dist/esm/web/page.d.ts.map +1 -1
- package/dist/esm/web/page.js +1 -1
- package/dist/esm/web/page.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +140 -138
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Route, RouteMap } from '../../../internal-content-types/index.js';
|
|
2
2
|
import { DEFAULT_STATIC_PAGE_TTL } from '../../../schemas/web/page.js';
|
|
3
3
|
import { getMongoService } from '../../../orm/index.js';
|
|
4
|
+
import { filterVisibleRouteMapEntries } from '../../utils/routes/routeMapHelpers.js';
|
|
4
5
|
export const buildStaticPathsOutput = (routes, routeMap) => {
|
|
5
6
|
const staticRouteIds = new Set(routes
|
|
6
7
|
.filter((route) => route.hasPage && route.dynamic === false)
|
|
@@ -27,10 +28,11 @@ export const getStaticPaths = async () => {
|
|
|
27
28
|
db.list(RouteMap, {
|
|
28
29
|
options: {
|
|
29
30
|
limit: 'all',
|
|
30
|
-
fields: ['path', 'routeId'],
|
|
31
|
+
fields: ['path', 'routeId', 'contentType', 'contentTypeId'],
|
|
31
32
|
},
|
|
32
33
|
}),
|
|
33
34
|
]);
|
|
34
|
-
|
|
35
|
+
const visibleRouteMap = await filterVisibleRouteMapEntries(db, routeMap.items);
|
|
36
|
+
return buildStaticPathsOutput(routes.items, visibleRouteMap);
|
|
35
37
|
};
|
|
36
38
|
//# sourceMappingURL=staticPaths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staticPaths.js","sourceRoot":"","sources":["../../../../../src/api/routes/web/staticPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"staticPaths.js","sourceRoot":"","sources":["../../../../../src/api/routes/web/staticPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AAEjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAkC,EAClC,QAAuC,EACpB,EAAE;IACrB,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,MAAM;SACH,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC;SAC3D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CACrC,CAAA;IAED,OAAO;QACL,KAAK,EAAE,QAAQ;aACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;aAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,uBAAuB;SAC7B,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KAChD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAgC,EAAE;IACnE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAA;IAClC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,OAAO,EAAE;gBACP,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;aAC/B;SACF,CAAC;QACF,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO,EAAE;gBACP,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,CAAC;aAC5D;SACF,CAAC;KACH,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,MAAM,4BAA4B,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE9E,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;AAC9D,CAAC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type ContentType from
|
|
2
|
-
import { type DynamicRelatedCollectionSource } from
|
|
3
|
-
import type { DataPopulatedWithoutApiOnly, DBOutput } from
|
|
4
|
-
import type { DBService } from
|
|
1
|
+
import type ContentType from '../../lib/ContentType.js';
|
|
2
|
+
import { type DynamicRelatedCollectionSource } from '../../lib/dynamicData.js';
|
|
3
|
+
import type { DataPopulatedWithoutApiOnly, DBOutput } from '../../lib/types/index.js';
|
|
4
|
+
import type { DBService } from '../../orm/dbService.js';
|
|
5
5
|
type ResolveOptions = {
|
|
6
6
|
db: DBService;
|
|
7
7
|
contentType?: ContentType;
|
|
@@ -9,7 +9,7 @@ type ResolveOptions = {
|
|
|
9
9
|
contentType: ContentType;
|
|
10
10
|
value: Record<string, unknown>;
|
|
11
11
|
};
|
|
12
|
-
surface:
|
|
12
|
+
surface: 'web' | 'preview';
|
|
13
13
|
};
|
|
14
14
|
export declare const resolveRelatedCollectionValue: ({ db, source, currentSource, currentContentType, populateDocument, }: {
|
|
15
15
|
db: DBService;
|
|
@@ -20,6 +20,7 @@ export declare const resolveRelatedCollectionValue: ({ db, source, currentSource
|
|
|
20
20
|
}) => Promise<any[] | undefined>;
|
|
21
21
|
export declare const getDynamicListItemContentTypeName: (field: ContentType["fields"][string] | undefined, itemName: string) => string;
|
|
22
22
|
export declare const mergeDynamicListItems: (currentValue: unknown, resolvedValue: unknown) => unknown[];
|
|
23
|
+
export declare const mergeDynamicArrayItems: (currentValue: unknown, resolvedValue: unknown) => any[];
|
|
23
24
|
export declare const resolveDynamicData: <T>(value: T, options: ResolveOptions) => Promise<T>;
|
|
24
25
|
export declare const stripDynamicBindings: <T>(value: T) => T;
|
|
25
26
|
export declare const resolveContentOutput: <T extends ContentType>({ db, contentType, data, surface, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamicData.d.ts","sourceRoot":"","sources":["../../../../src/api/utils/dynamicData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"dynamicData.d.ts","sourceRoot":"","sources":["../../../../src/api/utils/dynamicData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAUL,KAAK,8BAA8B,EACpC,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,2BAA2B,EAAE,QAAQ,EAAS,MAAM,iBAAiB,CAAA;AAEnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AASpD,KAAK,cAAc,GAAG;IACpB,EAAE,EAAE,SAAS,CAAA;IACb,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,WAAW,CAAA;QACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,CAAA;IACD,OAAO,EAAE,KAAK,GAAG,SAAS,CAAA;CAC3B,CAAA;AA6UD,eAAO,MAAM,6BAA6B,GAAU,sEAOjD;IACD,EAAE,EAAE,SAAS,CAAA;IACb,MAAM,EAAE,8BAA8B,CAAA;IACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,kBAAkB,EAAE,WAAW,CAAA;IAC/B,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC3F,+BA2CA,CAAA;AA+PD,eAAO,MAAM,iCAAiC,GAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,UAAU,MAAM,WAIjB,CAAA;AAyED,eAAO,MAAM,qBAAqB,GAAI,cAAc,OAAO,EAAE,eAAe,OAAO,cAiBlF,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,cAAc,OAAO,EAAE,eAAe,OAAO,UAYnF,CAAA;AAiED,eAAO,MAAM,kBAAkB,GAAU,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,cAAc,KAAG,OAAO,CAAC,CAAC,CAuCxF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CAYlD,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,CAAC,SAAS,WAAW,EAAE,qCAK/D;IACD,EAAE,EAAE,SAAS,CAAA;IACb,WAAW,EAAE,CAAC,CAAA;IACd,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAA;IACpC,OAAO,EAAE,KAAK,GAAG,SAAS,CAAA;CAC3B,uj5mBAiBA,CAAA"}
|
|
@@ -1,105 +1,113 @@
|
|
|
1
|
-
import { getRakunBootstrapOptions } from
|
|
2
|
-
import { DYNAMIC_BINDINGS_FIELD_NAME, DynamicQueryCurrentValueSchema, DynamicQueryDocumentValueSchema, getDynamicDocumentBindings, isDynamicDataSourceContentTypeAllowed, } from
|
|
3
|
-
import { Logger } from
|
|
4
|
-
import { getContentTypeByName } from
|
|
5
|
-
import { runOnGetHook } from
|
|
6
|
-
import { getLink } from
|
|
7
|
-
import {
|
|
8
|
-
import { populateRelations } from
|
|
9
|
-
import { parseSafeManagerQuery } from
|
|
1
|
+
import { getRakunBootstrapOptions } from '../../bootstrapState.js';
|
|
2
|
+
import { DYNAMIC_BINDINGS_FIELD_NAME, DynamicQueryCurrentValueSchema, DynamicQueryDocumentValueSchema, getDynamicDocumentBindings, isDynamicDataSourceContentTypeAllowed, } from '../../lib/dynamicData.js';
|
|
3
|
+
import { Logger } from '../../lib/Logger.js';
|
|
4
|
+
import { getContentTypeByName } from '../../lib/Registry.js';
|
|
5
|
+
import { runOnGetHook } from '../hooks/runContentHooks.js';
|
|
6
|
+
import { getLink } from './getLink.js';
|
|
7
|
+
import { populateFields } from './populates/populateLinks.js';
|
|
8
|
+
import { populateRelations } from './populates/populateRelations.js';
|
|
9
|
+
import { parseSafeManagerQuery } from './safeManagerQuery.js';
|
|
10
10
|
import { getContentHookContext } from '../hooks/context.js';
|
|
11
11
|
import { resolveBreadcrumsFields } from './breadcrums.js';
|
|
12
|
-
const isRecord = (value) => !!value &&
|
|
13
|
-
typeof value === "object" &&
|
|
14
|
-
!Array.isArray(value) &&
|
|
15
|
-
!(value instanceof Date);
|
|
12
|
+
const isRecord = (value) => !!value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date);
|
|
16
13
|
const getAtPath = (value, path) => {
|
|
17
14
|
if (!path)
|
|
18
15
|
return undefined;
|
|
19
|
-
return path.split(
|
|
16
|
+
return path.split('.').reduce((current, segment) => {
|
|
20
17
|
if (!isRecord(current))
|
|
21
18
|
return undefined;
|
|
22
19
|
return current[segment];
|
|
23
20
|
}, value);
|
|
24
21
|
};
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
const setAtPath = (target, path, value) => {
|
|
23
|
+
const segments = path.split('.');
|
|
24
|
+
let current = target;
|
|
25
|
+
for (const [index, segment] of segments.entries()) {
|
|
26
|
+
if (index === segments.length - 1) {
|
|
27
|
+
Object.defineProperty(current, segment, {
|
|
28
|
+
configurable: true,
|
|
29
|
+
enumerable: true,
|
|
30
|
+
value,
|
|
31
|
+
writable: true,
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const existing = current[segment];
|
|
36
|
+
const next = isRecord(existing) ? existing : {};
|
|
37
|
+
if (next !== existing) {
|
|
38
|
+
Object.defineProperty(current, segment, {
|
|
39
|
+
configurable: true,
|
|
40
|
+
enumerable: true,
|
|
41
|
+
value: next,
|
|
42
|
+
writable: true,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
current = next;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const isPublicDocument = (value) => value._trashed !== true && value._visibility !== 'draft' && value._visibility !== 'trash';
|
|
28
49
|
const getAllowedSourceContentType = (sourceContentTypeName) => {
|
|
29
50
|
const contentType = getContentTypeByName(sourceContentTypeName);
|
|
30
|
-
return isDynamicDataSourceContentTypeAllowed(contentType)
|
|
31
|
-
|
|
51
|
+
return isDynamicDataSourceContentTypeAllowed(contentType) ? contentType : undefined;
|
|
52
|
+
};
|
|
53
|
+
const getDynamicTargetField = (contentType, path) => {
|
|
54
|
+
const [fieldName, ...rest] = path.split('.');
|
|
55
|
+
const field = contentType.fields[fieldName];
|
|
56
|
+
if (!field || !contentType.allowsDynamicBindingForField(fieldName)) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
if (rest.length === 0)
|
|
60
|
+
return field;
|
|
61
|
+
return rest.length === 1 &&
|
|
62
|
+
field.meta.capabilities.dynamic?.mapProperties === true &&
|
|
63
|
+
field.meta.capabilities.dynamic?.properties?.[rest[0]]
|
|
64
|
+
? field
|
|
32
65
|
: undefined;
|
|
33
66
|
};
|
|
34
|
-
const fileSourcePaths = new Set([
|
|
35
|
-
"url",
|
|
36
|
-
"previewUrl",
|
|
37
|
-
"name",
|
|
38
|
-
"title",
|
|
39
|
-
"alt",
|
|
40
|
-
"mime",
|
|
41
|
-
"srcSet",
|
|
42
|
-
"width",
|
|
43
|
-
"height",
|
|
44
|
-
"size",
|
|
45
|
-
]);
|
|
46
|
-
const linkSourcePaths = new Set(["href", "title"]);
|
|
47
67
|
const isDynamicSourcePathAllowed = (contentType, path, depth = 0) => {
|
|
48
68
|
if (!path)
|
|
49
69
|
return false;
|
|
50
|
-
const [fieldName, ...rest] = path.split(
|
|
70
|
+
const [fieldName, ...rest] = path.split('.');
|
|
51
71
|
const field = contentType.fields[fieldName];
|
|
52
72
|
if (!field || !contentType.allowsDynamicBindingForField(fieldName)) {
|
|
53
73
|
return false;
|
|
54
74
|
}
|
|
55
75
|
if (rest.length === 0)
|
|
56
76
|
return true;
|
|
57
|
-
if (field.meta.
|
|
58
|
-
|
|
59
|
-
depth < 3) {
|
|
60
|
-
return isDynamicSourcePathAllowed(field.contentType, rest.join("."), depth + 1);
|
|
61
|
-
}
|
|
62
|
-
if (field.meta.type === "File") {
|
|
63
|
-
return rest.length === 1 && fileSourcePaths.has(rest[0]);
|
|
64
|
-
}
|
|
65
|
-
if (field.meta.type === "Link") {
|
|
66
|
-
return rest.length === 1 && linkSourcePaths.has(rest[0]);
|
|
77
|
+
if (field.meta.capabilities.dynamic?.relation === true && 'contentType' in field && depth < 3) {
|
|
78
|
+
return isDynamicSourcePathAllowed(field.contentType, rest.join('.'), depth + 1);
|
|
67
79
|
}
|
|
68
|
-
return
|
|
80
|
+
return rest.length === 1 && !!field.meta.capabilities.dynamic?.properties?.[rest[0]];
|
|
69
81
|
};
|
|
70
82
|
const getDynamicSourceField = (contentType, path, depth = 0) => {
|
|
71
83
|
if (!path)
|
|
72
84
|
return undefined;
|
|
73
|
-
const [fieldName, ...rest] = path.split(
|
|
85
|
+
const [fieldName, ...rest] = path.split('.');
|
|
74
86
|
const field = contentType.fields[fieldName];
|
|
75
87
|
if (!field || !contentType.allowsDynamicBindingForField(fieldName)) {
|
|
76
88
|
return undefined;
|
|
77
89
|
}
|
|
78
90
|
if (rest.length === 0)
|
|
79
91
|
return field;
|
|
80
|
-
if (field.meta.
|
|
81
|
-
|
|
82
|
-
depth < 3) {
|
|
83
|
-
return getDynamicSourceField(field.contentType, rest.join("."), depth + 1);
|
|
92
|
+
if (field.meta.capabilities.dynamic?.relation === true && 'contentType' in field && depth < 3) {
|
|
93
|
+
return getDynamicSourceField(field.contentType, rest.join('.'), depth + 1);
|
|
84
94
|
}
|
|
85
95
|
return undefined;
|
|
86
96
|
};
|
|
87
97
|
const isArraySourceField = (field) => {
|
|
88
98
|
if (!field)
|
|
89
99
|
return false;
|
|
90
|
-
|
|
91
|
-
return true;
|
|
92
|
-
return "isMultiple" in field.meta && field.meta.isMultiple === true;
|
|
100
|
+
return field.meta.capabilities.valueKind === 'array';
|
|
93
101
|
};
|
|
94
102
|
const getRelationTarget = (field) => {
|
|
95
103
|
if (!field || field.getIsTranslatable())
|
|
96
104
|
return undefined;
|
|
97
|
-
if (field.meta.
|
|
105
|
+
if (field.meta.capabilities.dynamic?.relation === true && 'contentType' in field) {
|
|
98
106
|
return field.contentType;
|
|
99
107
|
}
|
|
100
|
-
if (field.meta.
|
|
108
|
+
if (field.meta.capabilities.dynamic?.collection === 'homogeneous' && 'field' in field) {
|
|
101
109
|
const itemField = field.field;
|
|
102
|
-
if (itemField.meta.
|
|
110
|
+
if (itemField.meta.capabilities.dynamic?.relation === true && 'contentType' in itemField) {
|
|
103
111
|
return itemField.contentType;
|
|
104
112
|
}
|
|
105
113
|
}
|
|
@@ -109,8 +117,8 @@ const getDocumentListItemContentType = (field, itemName) => {
|
|
|
109
117
|
if (!field || !isArraySourceField(field) || field.getIsTranslatable()) {
|
|
110
118
|
return undefined;
|
|
111
119
|
}
|
|
112
|
-
if (
|
|
113
|
-
|
|
120
|
+
if (field.meta.capabilities.dynamic?.collection === 'heterogeneous' &&
|
|
121
|
+
'fields' in field &&
|
|
114
122
|
Array.isArray(field.fields)) {
|
|
115
123
|
if (!itemName)
|
|
116
124
|
return undefined;
|
|
@@ -140,7 +148,7 @@ const loadSourceDocument = async (db, source) => {
|
|
|
140
148
|
if (!item || !isPublicDocument(item)) {
|
|
141
149
|
return undefined;
|
|
142
150
|
}
|
|
143
|
-
return (await populateRelations(await
|
|
151
|
+
return (await populateRelations(await populateFields(item)));
|
|
144
152
|
};
|
|
145
153
|
const resolveSourceValue = async ({ db, source, currentSource, currentContentType, allowCurrentSource, contextSource, }) => {
|
|
146
154
|
const usesCurrentRecord = allowCurrentSource === true &&
|
|
@@ -163,8 +171,8 @@ const resolveSourceValue = async ({ db, source, currentSource, currentContentTyp
|
|
|
163
171
|
: await loadSourceDocument(db, source);
|
|
164
172
|
if (!sourceDocument)
|
|
165
173
|
return undefined;
|
|
166
|
-
if (source.virtual ===
|
|
167
|
-
const sourceId = typeof sourceDocument._id ===
|
|
174
|
+
if (source.virtual === 'href') {
|
|
175
|
+
const sourceId = typeof sourceDocument._id === 'string' ? sourceDocument._id : source.id;
|
|
168
176
|
return sourceId ? await resolveHref(source, sourceId) : undefined;
|
|
169
177
|
}
|
|
170
178
|
if (!isDynamicSourcePathAllowed(sourceContentType, source.path)) {
|
|
@@ -172,17 +180,17 @@ const resolveSourceValue = async ({ db, source, currentSource, currentContentTyp
|
|
|
172
180
|
}
|
|
173
181
|
return getAtPath(sourceDocument, source.path);
|
|
174
182
|
};
|
|
175
|
-
const isRelatedCollectionSource = (source) =>
|
|
176
|
-
const isNestedListSource = (source) =>
|
|
183
|
+
const isRelatedCollectionSource = (source) => 'kind' in source && source.kind === 'relatedCollection';
|
|
184
|
+
const isNestedListSource = (source) => 'kind' in source && source.kind === 'list';
|
|
177
185
|
const addPublicContentFilter = (query) => ({
|
|
178
186
|
...query,
|
|
179
187
|
filter: {
|
|
180
188
|
...query.filter,
|
|
181
189
|
_trashed: { $ne: true },
|
|
182
|
-
_visibility: { $nin: [
|
|
190
|
+
_visibility: { $nin: ['draft', 'trash'] },
|
|
183
191
|
},
|
|
184
192
|
});
|
|
185
|
-
const isDynamicQueryCurrentPathAllowed = (contentType, path) => path ===
|
|
193
|
+
const isDynamicQueryCurrentPathAllowed = (contentType, path) => path === '_id' || isDynamicSourcePathAllowed(contentType, path);
|
|
186
194
|
const resolveDynamicQueryValue = (value, currentItem, currentItemContentType, currentDocument, currentDocumentContentType) => {
|
|
187
195
|
const currentValue = DynamicQueryCurrentValueSchema.safeParse(value);
|
|
188
196
|
if (currentValue.success) {
|
|
@@ -191,9 +199,7 @@ const resolveDynamicQueryValue = (value, currentItem, currentItemContentType, cu
|
|
|
191
199
|
return { success: false };
|
|
192
200
|
}
|
|
193
201
|
const resolved = getAtPath(currentItem, path);
|
|
194
|
-
return resolved === undefined
|
|
195
|
-
? { success: false }
|
|
196
|
-
: { success: true, value: resolved };
|
|
202
|
+
return resolved === undefined ? { success: false } : { success: true, value: resolved };
|
|
197
203
|
}
|
|
198
204
|
const documentValue = DynamicQueryDocumentValueSchema.safeParse(value);
|
|
199
205
|
if (documentValue.success) {
|
|
@@ -202,9 +208,7 @@ const resolveDynamicQueryValue = (value, currentItem, currentItemContentType, cu
|
|
|
202
208
|
return { success: false };
|
|
203
209
|
}
|
|
204
210
|
const resolved = getAtPath(currentDocument, path);
|
|
205
|
-
return resolved === undefined
|
|
206
|
-
? { success: false }
|
|
207
|
-
: { success: true, value: resolved };
|
|
211
|
+
return resolved === undefined ? { success: false } : { success: true, value: resolved };
|
|
208
212
|
}
|
|
209
213
|
if (Array.isArray(value)) {
|
|
210
214
|
const items = [];
|
|
@@ -228,12 +232,12 @@ const resolveDynamicQueryValue = (value, currentItem, currentItemContentType, cu
|
|
|
228
232
|
}
|
|
229
233
|
return { success: true, value };
|
|
230
234
|
};
|
|
231
|
-
export const resolveRelatedCollectionValue = async ({ db, source, currentSource, currentContentType, populateDocument = async (sourceItem) => (await populateRelations(await
|
|
235
|
+
export const resolveRelatedCollectionValue = async ({ db, source, currentSource, currentContentType, populateDocument = async (sourceItem) => (await populateRelations(await populateFields(sourceItem))), }) => {
|
|
232
236
|
if (!isDynamicDataSourceContentTypeAllowed(currentContentType)) {
|
|
233
237
|
return undefined;
|
|
234
238
|
}
|
|
235
239
|
const sourceId = currentSource._id;
|
|
236
|
-
if (typeof sourceId !==
|
|
240
|
+
if (typeof sourceId !== 'string')
|
|
237
241
|
return undefined;
|
|
238
242
|
const relatedContentType = getAllowedSourceContentType(source.contentType);
|
|
239
243
|
if (!relatedContentType)
|
|
@@ -264,16 +268,16 @@ export const resolveRelatedCollectionValue = async ({ db, source, currentSource,
|
|
|
264
268
|
};
|
|
265
269
|
const resolveListMapSourceValue = async ({ db, source, targetField, currentSource, currentContentType, contextSource, }) => {
|
|
266
270
|
if (isNestedListSource(source)) {
|
|
267
|
-
|
|
268
|
-
if (!targetContentType)
|
|
271
|
+
if (!targetField || !getDynamicListTarget(targetField, source.itemName)) {
|
|
269
272
|
return undefined;
|
|
273
|
+
}
|
|
270
274
|
return await resolveListBinding({
|
|
271
275
|
db,
|
|
272
276
|
binding: source,
|
|
273
277
|
contextSource,
|
|
274
278
|
currentDocument: currentSource,
|
|
275
279
|
currentDocumentContentType: currentContentType,
|
|
276
|
-
|
|
280
|
+
targetField,
|
|
277
281
|
});
|
|
278
282
|
}
|
|
279
283
|
if (isRelatedCollectionSource(source)) {
|
|
@@ -293,7 +297,7 @@ const resolveListMapSourceValue = async ({ db, source, targetField, currentSourc
|
|
|
293
297
|
contextSource,
|
|
294
298
|
});
|
|
295
299
|
};
|
|
296
|
-
const resolveListBinding = async ({ db, binding, contextSource, currentDocument, currentDocumentContentType,
|
|
300
|
+
const resolveListBinding = async ({ db, binding, contextSource, currentDocument, currentDocumentContentType, targetField, }) => {
|
|
297
301
|
const documentSource = binding.source;
|
|
298
302
|
const rootDocumentSource = contextSource ?? {
|
|
299
303
|
contentType: currentDocumentContentType,
|
|
@@ -305,6 +309,9 @@ const resolveListBinding = async ({ db, binding, contextSource, currentDocument,
|
|
|
305
309
|
if (!sourceContentType) {
|
|
306
310
|
return undefined;
|
|
307
311
|
}
|
|
312
|
+
const target = getDynamicListTarget(targetField, binding.itemName);
|
|
313
|
+
if (!target)
|
|
314
|
+
return undefined;
|
|
308
315
|
let sourceItems;
|
|
309
316
|
if (documentSource) {
|
|
310
317
|
if (documentSource.contentType !== currentDocumentContentType.name) {
|
|
@@ -319,9 +326,7 @@ const resolveListBinding = async ({ db, binding, contextSource, currentDocument,
|
|
|
319
326
|
if (!Array.isArray(value))
|
|
320
327
|
return undefined;
|
|
321
328
|
sourceItems = documentSource.itemName
|
|
322
|
-
? value.flatMap((item) => isRecord(item) &&
|
|
323
|
-
item.name === documentSource.itemName &&
|
|
324
|
-
"value" in item
|
|
329
|
+
? value.flatMap((item) => isRecord(item) && item.name === documentSource.itemName && 'value' in item
|
|
325
330
|
? [item.value]
|
|
326
331
|
: [])
|
|
327
332
|
: value;
|
|
@@ -342,105 +347,147 @@ const resolveListBinding = async ({ db, binding, contextSource, currentDocument,
|
|
|
342
347
|
return undefined;
|
|
343
348
|
const populated = documentSource
|
|
344
349
|
? sourceItem
|
|
345
|
-
: (await populateRelations(await
|
|
346
|
-
const
|
|
347
|
-
|
|
348
|
-
targetField,
|
|
350
|
+
: (await populateRelations(await populateFields(sourceItem)));
|
|
351
|
+
const mappedEntries = await Promise.all(Object.entries(binding.map).map(async ([targetPath, source]) => [
|
|
352
|
+
targetPath,
|
|
349
353
|
await resolveListMapSourceValue({
|
|
350
354
|
db,
|
|
351
355
|
source,
|
|
352
|
-
targetField:
|
|
356
|
+
targetField: target.kind === 'linkArray'
|
|
357
|
+
? undefined
|
|
358
|
+
: getDynamicTargetField(target.contentType, targetPath),
|
|
353
359
|
currentSource: populated,
|
|
354
360
|
currentContentType: sourceContentType,
|
|
355
361
|
contextSource: rootDocumentSource,
|
|
356
362
|
}),
|
|
357
|
-
]))
|
|
363
|
+
]));
|
|
364
|
+
const mapped = {};
|
|
365
|
+
mappedEntries
|
|
366
|
+
.sort(([left], [right]) => left.split('.').length - right.split('.').length)
|
|
367
|
+
.forEach(([targetPath, value]) => setAtPath(mapped, targetPath, value));
|
|
368
|
+
if (target.kind === 'linkArray')
|
|
369
|
+
return mapped;
|
|
370
|
+
const targetValue = {
|
|
371
|
+
_id: typeof sourceItem._id === 'string'
|
|
372
|
+
? `${binding.itemName}:${sourceItem._id}`
|
|
373
|
+
: `${binding.itemName}:${index}`,
|
|
374
|
+
_type: target.contentType.name,
|
|
375
|
+
...mapped,
|
|
376
|
+
};
|
|
377
|
+
if (target.kind === 'relationArray')
|
|
378
|
+
return targetValue;
|
|
358
379
|
return {
|
|
359
380
|
name: binding.itemName,
|
|
360
|
-
value:
|
|
361
|
-
_id: typeof sourceItem._id === "string"
|
|
362
|
-
? `${binding.itemName}:${sourceItem._id}`
|
|
363
|
-
: `${binding.itemName}:${index}`,
|
|
364
|
-
_type: itemContentTypeName,
|
|
365
|
-
...mapped,
|
|
366
|
-
},
|
|
381
|
+
value: targetValue,
|
|
367
382
|
};
|
|
368
383
|
}));
|
|
369
384
|
return resolvedItems.filter((item) => item !== undefined);
|
|
370
385
|
};
|
|
371
|
-
const
|
|
372
|
-
if (!field ||
|
|
386
|
+
const getBlocksTargetContentType = (field, itemName) => {
|
|
387
|
+
if (!field || field.meta.capabilities.dynamic?.collection !== 'heterogeneous') {
|
|
373
388
|
return undefined;
|
|
374
389
|
}
|
|
375
|
-
if (!(
|
|
390
|
+
if (!('fields' in field) || !Array.isArray(field.fields)) {
|
|
376
391
|
return undefined;
|
|
377
392
|
}
|
|
378
393
|
const entry = field.fields.find((item) => item.name === itemName);
|
|
379
394
|
if (!entry ||
|
|
380
|
-
entry.field.meta.
|
|
381
|
-
!(
|
|
395
|
+
entry.field.meta.capabilities.dynamic?.relation !== true ||
|
|
396
|
+
!('contentType' in entry.field)) {
|
|
382
397
|
return undefined;
|
|
383
398
|
}
|
|
384
399
|
return entry.field.contentType;
|
|
385
400
|
};
|
|
386
|
-
|
|
401
|
+
const getSimpleListItemField = (field) => {
|
|
402
|
+
if (!field ||
|
|
403
|
+
field.meta.capabilities.dynamic?.collection !== 'homogeneous' ||
|
|
404
|
+
!('field' in field)) {
|
|
405
|
+
return undefined;
|
|
406
|
+
}
|
|
407
|
+
return field.field;
|
|
408
|
+
};
|
|
409
|
+
const getDynamicListTarget = (field, itemName) => {
|
|
410
|
+
const blocksContentType = getBlocksTargetContentType(field, itemName);
|
|
411
|
+
if (blocksContentType) {
|
|
412
|
+
return { kind: 'blocks', contentType: blocksContentType };
|
|
413
|
+
}
|
|
414
|
+
const itemField = getSimpleListItemField(field);
|
|
415
|
+
if (!itemField)
|
|
416
|
+
return undefined;
|
|
417
|
+
if (itemField.meta.capabilities.dynamic?.relation === true && 'contentType' in itemField) {
|
|
418
|
+
const contentType = itemField.contentType;
|
|
419
|
+
if (itemName !== contentType.name)
|
|
420
|
+
return undefined;
|
|
421
|
+
return {
|
|
422
|
+
kind: 'relationArray',
|
|
423
|
+
contentType,
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
const itemTypeName = itemField.meta.editor ?? itemField.meta.type;
|
|
427
|
+
return itemField.meta.capabilities.dynamic?.mapProperties === true &&
|
|
428
|
+
itemField.meta.capabilities.dynamic?.properties &&
|
|
429
|
+
itemName === itemTypeName
|
|
430
|
+
? { kind: 'linkArray' }
|
|
431
|
+
: undefined;
|
|
432
|
+
};
|
|
433
|
+
export const getDynamicListItemContentTypeName = (field, itemName) => {
|
|
434
|
+
const target = getDynamicListTarget(field, itemName);
|
|
435
|
+
return target && target.kind !== 'linkArray' ? target.contentType.name : itemName;
|
|
436
|
+
};
|
|
387
437
|
const filterListBindingMap = (contentType, fieldName, binding) => {
|
|
388
|
-
|
|
389
|
-
if (!targetContentType)
|
|
390
|
-
return binding;
|
|
391
|
-
return filterListBindingForTarget(targetContentType, binding);
|
|
438
|
+
return filterListBindingForTarget(contentType.fields[fieldName], binding);
|
|
392
439
|
};
|
|
393
|
-
const filterListBindingForTarget = (
|
|
440
|
+
const filterListBindingForTarget = (targetField, binding) => {
|
|
441
|
+
const target = getDynamicListTarget(targetField, binding.itemName);
|
|
442
|
+
if (!target)
|
|
443
|
+
return { ...binding, map: {} };
|
|
394
444
|
return {
|
|
395
445
|
...binding,
|
|
396
|
-
map: Object.fromEntries(Object.entries(binding.map).flatMap(([
|
|
397
|
-
if (
|
|
446
|
+
map: Object.fromEntries(Object.entries(binding.map).flatMap(([targetPath, source]) => {
|
|
447
|
+
if (target.kind === 'linkArray') {
|
|
448
|
+
return targetField &&
|
|
449
|
+
'field' in targetField &&
|
|
450
|
+
!!targetField.field.meta.capabilities.dynamic
|
|
451
|
+
?.properties?.[targetPath] &&
|
|
452
|
+
!isNestedListSource(source)
|
|
453
|
+
? [[targetPath, source]]
|
|
454
|
+
: [];
|
|
455
|
+
}
|
|
456
|
+
const field = getDynamicTargetField(target.contentType, targetPath);
|
|
457
|
+
if (!field) {
|
|
398
458
|
return [];
|
|
399
459
|
}
|
|
400
460
|
if (!isNestedListSource(source)) {
|
|
401
|
-
return [[
|
|
461
|
+
return [[targetPath, source]];
|
|
402
462
|
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
targetField,
|
|
408
|
-
filterListBindingForTarget(nestedTargetContentType, source),
|
|
409
|
-
],
|
|
410
|
-
]
|
|
411
|
-
: [];
|
|
463
|
+
if (targetPath.includes('.'))
|
|
464
|
+
return [];
|
|
465
|
+
const nestedTarget = getDynamicListTarget(field, source.itemName);
|
|
466
|
+
return nestedTarget ? [[targetPath, filterListBindingForTarget(field, source)]] : [];
|
|
412
467
|
})),
|
|
413
468
|
};
|
|
414
469
|
};
|
|
415
470
|
const getListItemStableKey = (item) => {
|
|
416
471
|
if (!isRecord(item))
|
|
417
472
|
return undefined;
|
|
418
|
-
const name = typeof item.name ===
|
|
473
|
+
const name = typeof item.name === 'string' ? item.name : '';
|
|
419
474
|
const value = item.value;
|
|
420
|
-
if (isRecord(value) && typeof value._id ===
|
|
421
|
-
const id = value._id.startsWith(`${name}:`)
|
|
422
|
-
? value._id.slice(name.length + 1)
|
|
423
|
-
: value._id;
|
|
475
|
+
if (isRecord(value) && typeof value._id === 'string') {
|
|
476
|
+
const id = value._id.startsWith(`${name}:`) ? value._id.slice(name.length + 1) : value._id;
|
|
424
477
|
return `${name}:${id}`;
|
|
425
478
|
}
|
|
426
|
-
if (isRecord(value) &&
|
|
427
|
-
isRecord(value.data) &&
|
|
428
|
-
typeof value.data._id === "string") {
|
|
479
|
+
if (isRecord(value) && isRecord(value.data) && typeof value.data._id === 'string') {
|
|
429
480
|
return `${name}:${value.data._id}`;
|
|
430
481
|
}
|
|
431
482
|
return undefined;
|
|
432
483
|
};
|
|
433
484
|
const isListValueItem = (item) => isRecord(item) &&
|
|
434
|
-
typeof item.name ===
|
|
435
|
-
Object.prototype.hasOwnProperty.call(item,
|
|
485
|
+
typeof item.name === 'string' &&
|
|
486
|
+
Object.prototype.hasOwnProperty.call(item, 'value') &&
|
|
436
487
|
item.value !== undefined;
|
|
437
488
|
export const mergeDynamicListItems = (currentValue, resolvedValue) => {
|
|
438
|
-
const currentItems = Array.isArray(currentValue)
|
|
439
|
-
|
|
440
|
-
: [];
|
|
441
|
-
const resolvedItems = Array.isArray(resolvedValue)
|
|
442
|
-
? resolvedValue.filter(isListValueItem)
|
|
443
|
-
: [];
|
|
489
|
+
const currentItems = Array.isArray(currentValue) ? currentValue.filter(isListValueItem) : [];
|
|
490
|
+
const resolvedItems = Array.isArray(resolvedValue) ? resolvedValue.filter(isListValueItem) : [];
|
|
444
491
|
const seen = new Set();
|
|
445
492
|
const merged = [];
|
|
446
493
|
for (const item of [...resolvedItems, ...currentItems]) {
|
|
@@ -454,6 +501,19 @@ export const mergeDynamicListItems = (currentValue, resolvedValue) => {
|
|
|
454
501
|
}
|
|
455
502
|
return merged;
|
|
456
503
|
};
|
|
504
|
+
export const mergeDynamicArrayItems = (currentValue, resolvedValue) => {
|
|
505
|
+
const currentItems = Array.isArray(currentValue) ? currentValue : [];
|
|
506
|
+
const resolvedItems = Array.isArray(resolvedValue) ? resolvedValue : [];
|
|
507
|
+
const seenIds = new Set();
|
|
508
|
+
return [...resolvedItems, ...currentItems].filter((item) => {
|
|
509
|
+
if (!isRecord(item) || typeof item._id !== 'string')
|
|
510
|
+
return true;
|
|
511
|
+
if (seenIds.has(item._id))
|
|
512
|
+
return false;
|
|
513
|
+
seenIds.add(item._id);
|
|
514
|
+
return true;
|
|
515
|
+
});
|
|
516
|
+
};
|
|
457
517
|
const resolveRecordBindings = async ({ db, contentType, value, contextSource, }) => {
|
|
458
518
|
const bindings = getDynamicDocumentBindings(value[DYNAMIC_BINDINGS_FIELD_NAME]);
|
|
459
519
|
if (!bindings)
|
|
@@ -475,13 +535,14 @@ const resolveRecordBindings = async ({ db, contentType, value, contextSource, })
|
|
|
475
535
|
}
|
|
476
536
|
}
|
|
477
537
|
catch (error) {
|
|
478
|
-
Logger.error(
|
|
538
|
+
Logger.error('dynamicData: field binding failed', error);
|
|
479
539
|
}
|
|
480
540
|
}
|
|
481
541
|
for (const [field, binding] of Object.entries(bindings.lists ?? {})) {
|
|
482
542
|
if (!contentType.allowsDynamicBindingForField(field))
|
|
483
543
|
continue;
|
|
484
544
|
try {
|
|
545
|
+
const targetField = contentType.fields[field];
|
|
485
546
|
const filteredBinding = filterListBindingMap(contentType, field, binding);
|
|
486
547
|
const resolved = await resolveListBinding({
|
|
487
548
|
db,
|
|
@@ -489,14 +550,17 @@ const resolveRecordBindings = async ({ db, contentType, value, contextSource, })
|
|
|
489
550
|
contextSource,
|
|
490
551
|
currentDocument: contextSource?.value ?? next,
|
|
491
552
|
currentDocumentContentType: contextSource?.contentType ?? contentType,
|
|
492
|
-
|
|
553
|
+
targetField,
|
|
493
554
|
});
|
|
494
555
|
if (resolved !== undefined) {
|
|
495
|
-
next[field] =
|
|
556
|
+
next[field] =
|
|
557
|
+
targetField.meta.capabilities.dynamic?.collection === 'homogeneous'
|
|
558
|
+
? mergeDynamicArrayItems(next[field], resolved)
|
|
559
|
+
: mergeDynamicListItems(next[field], resolved);
|
|
496
560
|
}
|
|
497
561
|
}
|
|
498
562
|
catch (error) {
|
|
499
|
-
Logger.error(
|
|
563
|
+
Logger.error('dynamicData: list binding failed', error);
|
|
500
564
|
}
|
|
501
565
|
}
|
|
502
566
|
return next;
|
|
@@ -508,9 +572,7 @@ export const resolveDynamicData = async (value, options) => {
|
|
|
508
572
|
if (!isRecord(value))
|
|
509
573
|
return value;
|
|
510
574
|
const contentType = options.contentType ??
|
|
511
|
-
(typeof value._type ===
|
|
512
|
-
? getContentTypeByName(value._type)
|
|
513
|
-
: undefined);
|
|
575
|
+
(typeof value._type === 'string' ? getContentTypeByName(value._type) : undefined);
|
|
514
576
|
const boundValue = contentType
|
|
515
577
|
? await resolveRecordBindings({
|
|
516
578
|
db: options.db,
|