convex-cms 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/admin.d.ts +16 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +88 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +18 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/detectConvexUrl.d.ts +13 -0
- package/dist/cli/utils/detectConvexUrl.d.ts.map +1 -0
- package/dist/cli/utils/detectConvexUrl.js +48 -0
- package/dist/cli/utils/detectConvexUrl.js.map +1 -0
- package/dist/cli/utils/openBrowser.d.ts +7 -0
- package/dist/cli/utils/openBrowser.d.ts.map +1 -0
- package/dist/cli/utils/openBrowser.js +17 -0
- package/dist/cli/utils/openBrowser.js.map +1 -0
- package/dist/client/admin-config.d.ts +126 -0
- package/dist/client/admin-config.d.ts.map +1 -0
- package/dist/client/admin-config.js +117 -0
- package/dist/client/admin-config.js.map +1 -0
- package/dist/client/adminApi.d.ts +2273 -0
- package/dist/client/adminApi.d.ts.map +1 -0
- package/dist/client/adminApi.js +716 -0
- package/dist/client/adminApi.js.map +1 -0
- package/dist/client/agentTools.d.ts +933 -0
- package/dist/client/agentTools.d.ts.map +1 -0
- package/dist/client/agentTools.js +1004 -0
- package/dist/client/agentTools.js.map +1 -0
- package/dist/client/argTypes.d.ts +212 -0
- package/dist/client/argTypes.d.ts.map +1 -0
- package/dist/client/argTypes.js +5 -0
- package/dist/client/argTypes.js.map +1 -0
- package/dist/client/field-types.d.ts +55 -0
- package/dist/client/field-types.d.ts.map +1 -0
- package/dist/client/field-types.js +152 -0
- package/dist/client/field-types.js.map +1 -0
- package/dist/client/index.d.ts +189 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +668 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/queryBuilder.d.ts +765 -0
- package/dist/client/queryBuilder.d.ts.map +1 -0
- package/dist/client/queryBuilder.js +970 -0
- package/dist/client/queryBuilder.js.map +1 -0
- package/dist/client/schema/codegen.d.ts +128 -0
- package/dist/client/schema/codegen.d.ts.map +1 -0
- package/dist/client/schema/codegen.js +318 -0
- package/dist/client/schema/codegen.js.map +1 -0
- package/dist/client/schema/defineContentType.d.ts +221 -0
- package/dist/client/schema/defineContentType.d.ts.map +1 -0
- package/dist/client/schema/defineContentType.js +380 -0
- package/dist/client/schema/defineContentType.js.map +1 -0
- package/dist/client/schema/index.d.ts +85 -0
- package/dist/client/schema/index.d.ts.map +1 -0
- package/dist/client/schema/index.js +92 -0
- package/dist/client/schema/index.js.map +1 -0
- package/dist/client/schema/schemaDrift.d.ts +199 -0
- package/dist/client/schema/schemaDrift.d.ts.map +1 -0
- package/dist/client/schema/schemaDrift.js +340 -0
- package/dist/client/schema/schemaDrift.js.map +1 -0
- package/dist/client/schema/typedClient.d.ts +401 -0
- package/dist/client/schema/typedClient.d.ts.map +1 -0
- package/dist/client/schema/typedClient.js +269 -0
- package/dist/client/schema/typedClient.js.map +1 -0
- package/dist/client/schema/types.d.ts +477 -0
- package/dist/client/schema/types.d.ts.map +1 -0
- package/dist/client/schema/types.js +39 -0
- package/dist/client/schema/types.js.map +1 -0
- package/dist/client/types.d.ts +449 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +149 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/workflows.d.ts +51 -0
- package/dist/client/workflows.d.ts.map +1 -0
- package/dist/client/workflows.js +103 -0
- package/dist/client/workflows.js.map +1 -0
- package/dist/client/wrapper.d.ts +2198 -0
- package/dist/client/wrapper.d.ts.map +1 -0
- package/dist/client/wrapper.js +2651 -0
- package/dist/client/wrapper.js.map +1 -0
- package/dist/component/_generated/api.d.ts +124 -0
- package/dist/component/_generated/api.d.ts.map +1 -0
- package/dist/component/_generated/api.js +31 -0
- package/dist/component/_generated/api.js.map +1 -0
- package/dist/component/_generated/component.d.ts +4321 -0
- package/dist/component/_generated/component.d.ts.map +1 -0
- package/dist/component/_generated/component.js +11 -0
- package/dist/component/_generated/component.js.map +1 -0
- package/dist/component/_generated/dataModel.d.ts +46 -0
- package/dist/component/_generated/dataModel.d.ts.map +1 -0
- package/dist/component/_generated/dataModel.js +11 -0
- package/dist/component/_generated/dataModel.js.map +1 -0
- package/dist/component/_generated/server.d.ts +121 -0
- package/dist/component/_generated/server.d.ts.map +1 -0
- package/dist/component/_generated/server.js +78 -0
- package/dist/component/_generated/server.js.map +1 -0
- package/dist/component/auditLog.d.ts +410 -0
- package/dist/component/auditLog.d.ts.map +1 -0
- package/dist/component/auditLog.js +607 -0
- package/dist/component/auditLog.js.map +1 -0
- package/dist/component/authorization.d.ts +323 -0
- package/dist/component/authorization.d.ts.map +1 -0
- package/dist/component/authorization.js +464 -0
- package/dist/component/authorization.js.map +1 -0
- package/dist/component/authorizationHooks.d.ts +184 -0
- package/dist/component/authorizationHooks.d.ts.map +1 -0
- package/dist/component/authorizationHooks.js +521 -0
- package/dist/component/authorizationHooks.js.map +1 -0
- package/dist/component/bulkOperations.d.ts +200 -0
- package/dist/component/bulkOperations.d.ts.map +1 -0
- package/dist/component/bulkOperations.js +568 -0
- package/dist/component/bulkOperations.js.map +1 -0
- package/dist/component/contentEntries.d.ts +719 -0
- package/dist/component/contentEntries.d.ts.map +1 -0
- package/dist/component/contentEntries.js +1617 -0
- package/dist/component/contentEntries.js.map +1 -0
- package/dist/component/contentEntryMutations.d.ts +505 -0
- package/dist/component/contentEntryMutations.d.ts.map +1 -0
- package/dist/component/contentEntryMutations.js +1009 -0
- package/dist/component/contentEntryMutations.js.map +1 -0
- package/dist/component/contentEntryValidation.d.ts +115 -0
- package/dist/component/contentEntryValidation.d.ts.map +1 -0
- package/dist/component/contentEntryValidation.js +546 -0
- package/dist/component/contentEntryValidation.js.map +1 -0
- package/dist/component/contentLock.d.ts +328 -0
- package/dist/component/contentLock.d.ts.map +1 -0
- package/dist/component/contentLock.js +471 -0
- package/dist/component/contentLock.js.map +1 -0
- package/dist/component/contentTypeMigration.d.ts +411 -0
- package/dist/component/contentTypeMigration.d.ts.map +1 -0
- package/dist/component/contentTypeMigration.js +805 -0
- package/dist/component/contentTypeMigration.js.map +1 -0
- package/dist/component/contentTypeMutations.d.ts +975 -0
- package/dist/component/contentTypeMutations.d.ts.map +1 -0
- package/dist/component/contentTypeMutations.js +768 -0
- package/dist/component/contentTypeMutations.js.map +1 -0
- package/dist/component/contentTypes.d.ts +538 -0
- package/dist/component/contentTypes.d.ts.map +1 -0
- package/dist/component/contentTypes.js +304 -0
- package/dist/component/contentTypes.js.map +1 -0
- package/dist/component/convex.config.d.ts +42 -0
- package/dist/component/convex.config.d.ts.map +1 -0
- package/dist/component/convex.config.js +43 -0
- package/dist/component/convex.config.js.map +1 -0
- package/dist/component/documentTypes.d.ts +186 -0
- package/dist/component/documentTypes.d.ts.map +1 -0
- package/dist/component/documentTypes.js +23 -0
- package/dist/component/documentTypes.js.map +1 -0
- package/dist/component/eventEmitter.d.ts +281 -0
- package/dist/component/eventEmitter.d.ts.map +1 -0
- package/dist/component/eventEmitter.js +300 -0
- package/dist/component/eventEmitter.js.map +1 -0
- package/dist/component/exportImport.d.ts +1120 -0
- package/dist/component/exportImport.d.ts.map +1 -0
- package/dist/component/exportImport.js +931 -0
- package/dist/component/exportImport.js.map +1 -0
- package/dist/component/index.d.ts +28 -0
- package/dist/component/index.d.ts.map +1 -0
- package/dist/component/index.js +142 -0
- package/dist/component/index.js.map +1 -0
- package/dist/component/lib/deepReferenceResolver.d.ts +252 -0
- package/dist/component/lib/deepReferenceResolver.d.ts.map +1 -0
- package/dist/component/lib/deepReferenceResolver.js +601 -0
- package/dist/component/lib/deepReferenceResolver.js.map +1 -0
- package/dist/component/lib/errors.d.ts +306 -0
- package/dist/component/lib/errors.d.ts.map +1 -0
- package/dist/component/lib/errors.js +407 -0
- package/dist/component/lib/errors.js.map +1 -0
- package/dist/component/lib/index.d.ts +10 -0
- package/dist/component/lib/index.d.ts.map +1 -0
- package/dist/component/lib/index.js +33 -0
- package/dist/component/lib/index.js.map +1 -0
- package/dist/component/lib/mediaReferenceResolver.d.ts +217 -0
- package/dist/component/lib/mediaReferenceResolver.d.ts.map +1 -0
- package/dist/component/lib/mediaReferenceResolver.js +326 -0
- package/dist/component/lib/mediaReferenceResolver.js.map +1 -0
- package/dist/component/lib/metadataExtractor.d.ts +245 -0
- package/dist/component/lib/metadataExtractor.d.ts.map +1 -0
- package/dist/component/lib/metadataExtractor.js +548 -0
- package/dist/component/lib/metadataExtractor.js.map +1 -0
- package/dist/component/lib/mutationAuth.d.ts +95 -0
- package/dist/component/lib/mutationAuth.d.ts.map +1 -0
- package/dist/component/lib/mutationAuth.js +146 -0
- package/dist/component/lib/mutationAuth.js.map +1 -0
- package/dist/component/lib/queries.d.ts +17 -0
- package/dist/component/lib/queries.d.ts.map +1 -0
- package/dist/component/lib/queries.js +49 -0
- package/dist/component/lib/queries.js.map +1 -0
- package/dist/component/lib/ragContentChunker.d.ts +423 -0
- package/dist/component/lib/ragContentChunker.d.ts.map +1 -0
- package/dist/component/lib/ragContentChunker.js +897 -0
- package/dist/component/lib/ragContentChunker.js.map +1 -0
- package/dist/component/lib/referenceResolver.d.ts +175 -0
- package/dist/component/lib/referenceResolver.d.ts.map +1 -0
- package/dist/component/lib/referenceResolver.js +293 -0
- package/dist/component/lib/referenceResolver.js.map +1 -0
- package/dist/component/lib/slugGenerator.d.ts +71 -0
- package/dist/component/lib/slugGenerator.d.ts.map +1 -0
- package/dist/component/lib/slugGenerator.js +207 -0
- package/dist/component/lib/slugGenerator.js.map +1 -0
- package/dist/component/lib/slugUniqueness.d.ts +131 -0
- package/dist/component/lib/slugUniqueness.d.ts.map +1 -0
- package/dist/component/lib/slugUniqueness.js +229 -0
- package/dist/component/lib/slugUniqueness.js.map +1 -0
- package/dist/component/lib/softDelete.d.ts +18 -0
- package/dist/component/lib/softDelete.d.ts.map +1 -0
- package/dist/component/lib/softDelete.js +29 -0
- package/dist/component/lib/softDelete.js.map +1 -0
- package/dist/component/localeFallbackChain.d.ts +410 -0
- package/dist/component/localeFallbackChain.d.ts.map +1 -0
- package/dist/component/localeFallbackChain.js +467 -0
- package/dist/component/localeFallbackChain.js.map +1 -0
- package/dist/component/localeFields.d.ts +508 -0
- package/dist/component/localeFields.d.ts.map +1 -0
- package/dist/component/localeFields.js +592 -0
- package/dist/component/localeFields.js.map +1 -0
- package/dist/component/mediaAssetMutations.d.ts +235 -0
- package/dist/component/mediaAssetMutations.d.ts.map +1 -0
- package/dist/component/mediaAssetMutations.js +558 -0
- package/dist/component/mediaAssetMutations.js.map +1 -0
- package/dist/component/mediaAssets.d.ts +168 -0
- package/dist/component/mediaAssets.d.ts.map +1 -0
- package/dist/component/mediaAssets.js +618 -0
- package/dist/component/mediaAssets.js.map +1 -0
- package/dist/component/mediaFolderMutations.d.ts +642 -0
- package/dist/component/mediaFolderMutations.d.ts.map +1 -0
- package/dist/component/mediaFolderMutations.js +849 -0
- package/dist/component/mediaFolderMutations.js.map +1 -0
- package/dist/component/mediaUploadMutations.d.ts +136 -0
- package/dist/component/mediaUploadMutations.d.ts.map +1 -0
- package/dist/component/mediaUploadMutations.js +205 -0
- package/dist/component/mediaUploadMutations.js.map +1 -0
- package/dist/component/mediaVariantMutations.d.ts +468 -0
- package/dist/component/mediaVariantMutations.d.ts.map +1 -0
- package/dist/component/mediaVariantMutations.js +737 -0
- package/dist/component/mediaVariantMutations.js.map +1 -0
- package/dist/component/mediaVariants.d.ts +525 -0
- package/dist/component/mediaVariants.d.ts.map +1 -0
- package/dist/component/mediaVariants.js +661 -0
- package/dist/component/mediaVariants.js.map +1 -0
- package/dist/component/ragContentIndexer.d.ts +595 -0
- package/dist/component/ragContentIndexer.d.ts.map +1 -0
- package/dist/component/ragContentIndexer.js +794 -0
- package/dist/component/ragContentIndexer.js.map +1 -0
- package/dist/component/rateLimitHooks.d.ts +266 -0
- package/dist/component/rateLimitHooks.d.ts.map +1 -0
- package/dist/component/rateLimitHooks.js +412 -0
- package/dist/component/rateLimitHooks.js.map +1 -0
- package/dist/component/roles.d.ts +649 -0
- package/dist/component/roles.d.ts.map +1 -0
- package/dist/component/roles.js +884 -0
- package/dist/component/roles.js.map +1 -0
- package/dist/component/scheduledPublish.d.ts +182 -0
- package/dist/component/scheduledPublish.d.ts.map +1 -0
- package/dist/component/scheduledPublish.js +304 -0
- package/dist/component/scheduledPublish.js.map +1 -0
- package/dist/component/schema.d.ts +4114 -0
- package/dist/component/schema.d.ts.map +1 -0
- package/dist/component/schema.js +469 -0
- package/dist/component/schema.js.map +1 -0
- package/dist/component/taxonomies.d.ts +476 -0
- package/dist/component/taxonomies.d.ts.map +1 -0
- package/dist/component/taxonomies.js +785 -0
- package/dist/component/taxonomies.js.map +1 -0
- package/dist/component/taxonomyMutations.d.ts +206 -0
- package/dist/component/taxonomyMutations.d.ts.map +1 -0
- package/dist/component/taxonomyMutations.js +1001 -0
- package/dist/component/taxonomyMutations.js.map +1 -0
- package/dist/component/trash.d.ts +265 -0
- package/dist/component/trash.d.ts.map +1 -0
- package/dist/component/trash.js +621 -0
- package/dist/component/trash.js.map +1 -0
- package/dist/component/types.d.ts +4 -0
- package/dist/component/types.d.ts.map +1 -0
- package/dist/component/types.js +2 -0
- package/dist/component/types.js.map +1 -0
- package/dist/component/userContext.d.ts +508 -0
- package/dist/component/userContext.d.ts.map +1 -0
- package/dist/component/userContext.js +615 -0
- package/dist/component/userContext.js.map +1 -0
- package/dist/component/validation.d.ts +387 -0
- package/dist/component/validation.d.ts.map +1 -0
- package/dist/component/validation.js +1052 -0
- package/dist/component/validation.js.map +1 -0
- package/dist/component/validators.d.ts +4645 -0
- package/dist/component/validators.d.ts.map +1 -0
- package/dist/component/validators.js +641 -0
- package/dist/component/validators.js.map +1 -0
- package/dist/component/versionMutations.d.ts +216 -0
- package/dist/component/versionMutations.d.ts.map +1 -0
- package/dist/component/versionMutations.js +321 -0
- package/dist/component/versionMutations.js.map +1 -0
- package/dist/component/webhookTrigger.d.ts +770 -0
- package/dist/component/webhookTrigger.d.ts.map +1 -0
- package/dist/component/webhookTrigger.js +1413 -0
- package/dist/component/webhookTrigger.js.map +1 -0
- package/dist/react/index.d.ts +316 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +558 -0
- package/dist/react/index.js.map +1 -0
- package/dist/test.d.ts +2230 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +1107 -0
- package/dist/test.js.map +1 -0
- package/package.json +95 -0
- package/src/cli/commands/admin.ts +104 -0
- package/src/cli/index.ts +21 -0
- package/src/cli/utils/detectConvexUrl.ts +54 -0
- package/src/cli/utils/openBrowser.ts +16 -0
- package/src/client/admin-config.ts +138 -0
- package/src/client/adminApi.ts +942 -0
- package/src/client/agentTools.ts +1311 -0
- package/src/client/argTypes.ts +316 -0
- package/src/client/field-types.ts +187 -0
- package/src/client/index.ts +1301 -0
- package/src/client/queryBuilder.ts +1100 -0
- package/src/client/schema/codegen.ts +500 -0
- package/src/client/schema/defineContentType.ts +501 -0
- package/src/client/schema/index.ts +169 -0
- package/src/client/schema/schemaDrift.ts +574 -0
- package/src/client/schema/typedClient.ts +688 -0
- package/src/client/schema/types.ts +666 -0
- package/src/client/types.ts +723 -0
- package/src/client/workflows.ts +141 -0
- package/src/client/wrapper.ts +4304 -0
- package/src/component/_generated/api.ts +140 -0
- package/src/component/_generated/component.ts +5029 -0
- package/src/component/_generated/dataModel.ts +60 -0
- package/src/component/_generated/server.ts +156 -0
- package/src/component/authorization.ts +647 -0
- package/src/component/authorizationHooks.ts +668 -0
- package/src/component/bulkOperations.ts +687 -0
- package/src/component/contentEntries.ts +1976 -0
- package/src/component/contentEntryMutations.ts +1223 -0
- package/src/component/contentEntryValidation.ts +707 -0
- package/src/component/contentLock.ts +550 -0
- package/src/component/contentTypeMigration.ts +1064 -0
- package/src/component/contentTypeMutations.ts +969 -0
- package/src/component/contentTypes.ts +346 -0
- package/src/component/convex.config.ts +44 -0
- package/src/component/documentTypes.ts +240 -0
- package/src/component/eventEmitter.ts +485 -0
- package/src/component/exportImport.ts +1169 -0
- package/src/component/index.ts +491 -0
- package/src/component/lib/deepReferenceResolver.ts +999 -0
- package/src/component/lib/errors.ts +816 -0
- package/src/component/lib/index.ts +145 -0
- package/src/component/lib/mediaReferenceResolver.ts +495 -0
- package/src/component/lib/metadataExtractor.ts +792 -0
- package/src/component/lib/mutationAuth.ts +199 -0
- package/src/component/lib/queries.ts +79 -0
- package/src/component/lib/ragContentChunker.ts +1371 -0
- package/src/component/lib/referenceResolver.ts +430 -0
- package/src/component/lib/slugGenerator.ts +262 -0
- package/src/component/lib/slugUniqueness.ts +333 -0
- package/src/component/lib/softDelete.ts +44 -0
- package/src/component/localeFallbackChain.ts +673 -0
- package/src/component/localeFields.ts +896 -0
- package/src/component/mediaAssetMutations.ts +725 -0
- package/src/component/mediaAssets.ts +932 -0
- package/src/component/mediaFolderMutations.ts +1046 -0
- package/src/component/mediaUploadMutations.ts +224 -0
- package/src/component/mediaVariantMutations.ts +900 -0
- package/src/component/mediaVariants.ts +793 -0
- package/src/component/ragContentIndexer.ts +1067 -0
- package/src/component/rateLimitHooks.ts +572 -0
- package/src/component/roles.ts +1360 -0
- package/src/component/scheduledPublish.ts +358 -0
- package/src/component/schema.ts +617 -0
- package/src/component/taxonomies.ts +949 -0
- package/src/component/taxonomyMutations.ts +1210 -0
- package/src/component/trash.ts +724 -0
- package/src/component/userContext.ts +898 -0
- package/src/component/validation.ts +1388 -0
- package/src/component/validators.ts +949 -0
- package/src/component/versionMutations.ts +392 -0
- package/src/component/webhookTrigger.ts +1922 -0
- package/src/react/index.ts +898 -0
- package/src/test.ts +1580 -0
|
@@ -0,0 +1,601 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep Reference Resolution Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for recursively resolving content and media references
|
|
5
|
+
* within content entries. Supports depth limiting and circular reference
|
|
6
|
+
* prevention to avoid infinite loops.
|
|
7
|
+
*
|
|
8
|
+
* This module extends the basic reference resolution with:
|
|
9
|
+
* - Recursive resolution of nested references
|
|
10
|
+
* - Configurable maximum depth
|
|
11
|
+
* - Circular reference detection and prevention
|
|
12
|
+
* - Combined content and media reference resolution
|
|
13
|
+
* - Selective field resolution
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // Resolve a blog post with author and related posts
|
|
18
|
+
* const resolvedEntry = await resolveEntryReferences(ctx, entry, contentType.fields, {
|
|
19
|
+
* maxDepth: 2,
|
|
20
|
+
* resolveMedia: true,
|
|
21
|
+
* publishedOnly: true,
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // The resolved entry will have:
|
|
25
|
+
* // - entry.data.author resolved to full author entry
|
|
26
|
+
* // - entry.data.author.data.profileImage resolved to media URL
|
|
27
|
+
* // - entry.data.relatedPosts resolved to array of entries (depth 1)
|
|
28
|
+
* // - entry.data.relatedPosts[].author NOT resolved (depth limit reached)
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import { isDeleted } from "./softDelete.js";
|
|
32
|
+
import { resolveReference,
|
|
33
|
+
// resolveReferences,
|
|
34
|
+
// ResolvedReference,
|
|
35
|
+
// ResolveOptions,
|
|
36
|
+
} from "./referenceResolver.js";
|
|
37
|
+
import { resolveMediaReference, } from "./mediaReferenceResolver.js";
|
|
38
|
+
// =============================================================================
|
|
39
|
+
// Core Resolution Functions
|
|
40
|
+
// =============================================================================
|
|
41
|
+
/**
|
|
42
|
+
* Resolve all references within a content entry's data.
|
|
43
|
+
*
|
|
44
|
+
* This function recursively resolves reference and media fields up to
|
|
45
|
+
* the specified depth, while preventing circular references.
|
|
46
|
+
*
|
|
47
|
+
* @param ctx - Convex query context
|
|
48
|
+
* @param entry - The content entry to resolve references for
|
|
49
|
+
* @param fields - Field definitions from the content type
|
|
50
|
+
* @param options - Resolution options
|
|
51
|
+
* @returns The entry with resolved references
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // Basic usage - resolve one level deep
|
|
56
|
+
* const resolved = await resolveEntryReferences(ctx, blogPost, contentType.fields);
|
|
57
|
+
*
|
|
58
|
+
* // Resolve two levels deep with only published entries
|
|
59
|
+
* const resolved = await resolveEntryReferences(ctx, blogPost, contentType.fields, {
|
|
60
|
+
* maxDepth: 2,
|
|
61
|
+
* publishedOnly: true,
|
|
62
|
+
* });
|
|
63
|
+
*
|
|
64
|
+
* // Resolve only specific fields
|
|
65
|
+
* const resolved = await resolveEntryReferences(ctx, blogPost, contentType.fields, {
|
|
66
|
+
* onlyFields: ["author", "featuredImage"],
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export async function resolveEntryReferences(ctx, entry, fields, options = {}) {
|
|
71
|
+
const { maxDepth = 1, resolveMedia = true, resolveContent = true, publishedOnly = false, includeDeleted = false, fields: selectFields, onlyFields, excludeFields, preserveOriginalIds = false, } = options;
|
|
72
|
+
// Get content type info
|
|
73
|
+
let contentTypeName = "";
|
|
74
|
+
let contentTypeDisplayName = "";
|
|
75
|
+
if (entry.contentTypeId) {
|
|
76
|
+
try {
|
|
77
|
+
const contentType = await ctx.db.get(entry.contentTypeId);
|
|
78
|
+
if (contentType) {
|
|
79
|
+
contentTypeName = contentType.name;
|
|
80
|
+
contentTypeDisplayName = contentType.displayName;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Content type not found, continue with empty names
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// If maxDepth is 0, return without resolving
|
|
88
|
+
if (maxDepth === 0) {
|
|
89
|
+
return {
|
|
90
|
+
id: entry._id,
|
|
91
|
+
contentTypeName,
|
|
92
|
+
contentTypeDisplayName,
|
|
93
|
+
slug: entry.slug,
|
|
94
|
+
status: entry.status,
|
|
95
|
+
data: entry.data,
|
|
96
|
+
exists: true,
|
|
97
|
+
locale: entry.locale,
|
|
98
|
+
version: entry.version,
|
|
99
|
+
...(preserveOriginalIds && { _originalId: entry._id }),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Initialize resolution context
|
|
103
|
+
const resolutionCtx = {
|
|
104
|
+
visitedEntries: new Set([entry._id]),
|
|
105
|
+
visitedMedia: new Set(),
|
|
106
|
+
currentDepth: 0,
|
|
107
|
+
maxDepth,
|
|
108
|
+
resolvedCache: new Map(),
|
|
109
|
+
mediaCache: new Map(),
|
|
110
|
+
circularReferences: [],
|
|
111
|
+
unresolvedReferences: {},
|
|
112
|
+
};
|
|
113
|
+
// Filter fields to resolve based on options
|
|
114
|
+
const fieldsToResolve = filterFieldsToResolve(fields, onlyFields, excludeFields);
|
|
115
|
+
// Resolve the entry data
|
|
116
|
+
const resolvedData = await resolveDataFields(ctx, entry.data, fieldsToResolve, resolutionCtx, {
|
|
117
|
+
resolveMedia,
|
|
118
|
+
resolveContent,
|
|
119
|
+
publishedOnly,
|
|
120
|
+
includeDeleted,
|
|
121
|
+
selectFields,
|
|
122
|
+
preserveOriginalIds,
|
|
123
|
+
});
|
|
124
|
+
const result = {
|
|
125
|
+
id: entry._id,
|
|
126
|
+
contentTypeName,
|
|
127
|
+
contentTypeDisplayName,
|
|
128
|
+
slug: entry.slug,
|
|
129
|
+
status: entry.status,
|
|
130
|
+
data: resolvedData,
|
|
131
|
+
exists: true,
|
|
132
|
+
locale: entry.locale,
|
|
133
|
+
version: entry.version,
|
|
134
|
+
};
|
|
135
|
+
// Add metadata about resolution issues
|
|
136
|
+
if (resolutionCtx.circularReferences.length > 0) {
|
|
137
|
+
result._circularReferences = resolutionCtx.circularReferences;
|
|
138
|
+
}
|
|
139
|
+
if (Object.keys(resolutionCtx.unresolvedReferences).length > 0) {
|
|
140
|
+
result._unresolvedReferences = resolutionCtx.unresolvedReferences;
|
|
141
|
+
}
|
|
142
|
+
if (preserveOriginalIds) {
|
|
143
|
+
result._originalId = entry._id;
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Resolve references for multiple content entries in batch.
|
|
149
|
+
*
|
|
150
|
+
* More efficient than calling resolveEntryReferences multiple times
|
|
151
|
+
* as it shares caches across entries.
|
|
152
|
+
*
|
|
153
|
+
* @param ctx - Convex query context
|
|
154
|
+
* @param entries - Array of content entries to resolve
|
|
155
|
+
* @param fields - Field definitions from the content type
|
|
156
|
+
* @param options - Resolution options
|
|
157
|
+
* @returns Batch result with resolved entries and unresolved IDs
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```typescript
|
|
161
|
+
* const { page } = await cms.contentEntries.list(ctx, { ... });
|
|
162
|
+
* const result = await resolveEntryReferencesBatch(ctx, page, contentType.fields, {
|
|
163
|
+
* maxDepth: 1,
|
|
164
|
+
* publishedOnly: true,
|
|
165
|
+
* });
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export async function resolveEntryReferencesBatch(ctx, entries, fields, options = {}) {
|
|
169
|
+
const resolved = [];
|
|
170
|
+
const unresolved = [];
|
|
171
|
+
let circularReferencesDetected = 0;
|
|
172
|
+
// Resolve each entry in parallel
|
|
173
|
+
const promises = entries.map(async (entry) => {
|
|
174
|
+
try {
|
|
175
|
+
const result = await resolveEntryReferences(ctx, entry, fields, options);
|
|
176
|
+
if (result._circularReferences) {
|
|
177
|
+
circularReferencesDetected += result._circularReferences.length;
|
|
178
|
+
}
|
|
179
|
+
return { success: true, result, id: entry._id };
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return { success: false, result: null, id: entry._id };
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
const results = await Promise.all(promises);
|
|
186
|
+
for (const { success, result, id } of results) {
|
|
187
|
+
if (success && result) {
|
|
188
|
+
resolved.push(result);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
unresolved.push(id);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
resolved,
|
|
196
|
+
unresolved,
|
|
197
|
+
circularReferencesDetected,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// =============================================================================
|
|
201
|
+
// Internal Resolution Functions
|
|
202
|
+
// =============================================================================
|
|
203
|
+
/**
|
|
204
|
+
* Filter fields based on onlyFields and excludeFields options.
|
|
205
|
+
*/
|
|
206
|
+
function filterFieldsToResolve(fields, onlyFields, excludeFields) {
|
|
207
|
+
let filtered = fields.filter((f) => f.type === "reference" || f.type === "media");
|
|
208
|
+
if (onlyFields && onlyFields.length > 0) {
|
|
209
|
+
filtered = filtered.filter((f) => onlyFields.includes(f.name));
|
|
210
|
+
}
|
|
211
|
+
if (excludeFields && excludeFields.length > 0) {
|
|
212
|
+
filtered = filtered.filter((f) => !excludeFields.includes(f.name));
|
|
213
|
+
}
|
|
214
|
+
return filtered;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Resolve all reference and media fields in a data object.
|
|
218
|
+
*/
|
|
219
|
+
async function resolveDataFields(ctx, data, fields, resolutionCtx, options) {
|
|
220
|
+
const resolvedData = { ...data };
|
|
221
|
+
// Process each resolvable field
|
|
222
|
+
for (const field of fields) {
|
|
223
|
+
const value = data[field.name];
|
|
224
|
+
if (value === null || value === undefined) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (field.type === "reference" && options.resolveContent) {
|
|
228
|
+
const resolved = await resolveReferenceField(ctx, field, value, resolutionCtx, options);
|
|
229
|
+
resolvedData[field.name] = resolved;
|
|
230
|
+
}
|
|
231
|
+
else if (field.type === "media" && options.resolveMedia) {
|
|
232
|
+
const resolved = await resolveMediaField(ctx, field, value, resolutionCtx, options);
|
|
233
|
+
resolvedData[field.name] = resolved;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return resolvedData;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Resolve a reference field value (single or multiple).
|
|
240
|
+
*/
|
|
241
|
+
async function resolveReferenceField(ctx, field, value, resolutionCtx, options) {
|
|
242
|
+
const isMultiple = field.options?.multiple ?? false;
|
|
243
|
+
if (isMultiple) {
|
|
244
|
+
// Resolve array of references
|
|
245
|
+
if (!Array.isArray(value)) {
|
|
246
|
+
return value; // Invalid, return as-is
|
|
247
|
+
}
|
|
248
|
+
const resolvedArray = [];
|
|
249
|
+
const unresolvedIds = [];
|
|
250
|
+
for (const refId of value) {
|
|
251
|
+
if (typeof refId !== "string") {
|
|
252
|
+
resolvedArray.push(refId);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const resolved = await resolveNestedReference(ctx, refId, field.name, resolutionCtx, options);
|
|
256
|
+
if (resolved) {
|
|
257
|
+
resolvedArray.push(resolved);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
unresolvedIds.push(refId);
|
|
261
|
+
// Keep the original ID for unresolved references
|
|
262
|
+
if (options.preserveOriginalIds) {
|
|
263
|
+
resolvedArray.push({ _unresolvedId: refId });
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (unresolvedIds.length > 0) {
|
|
268
|
+
resolutionCtx.unresolvedReferences[field.name] = unresolvedIds;
|
|
269
|
+
}
|
|
270
|
+
return resolvedArray;
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
// Resolve single reference
|
|
274
|
+
if (typeof value !== "string") {
|
|
275
|
+
return value; // Invalid, return as-is
|
|
276
|
+
}
|
|
277
|
+
const resolved = await resolveNestedReference(ctx, value, field.name, resolutionCtx, options);
|
|
278
|
+
if (!resolved) {
|
|
279
|
+
resolutionCtx.unresolvedReferences[field.name] = [value];
|
|
280
|
+
if (options.preserveOriginalIds) {
|
|
281
|
+
return { _unresolvedId: value };
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return resolved ?? value;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Resolve a nested content reference with circular detection.
|
|
289
|
+
*/
|
|
290
|
+
async function resolveNestedReference(ctx, refId, fieldName, resolutionCtx, options) {
|
|
291
|
+
// Check cache first
|
|
292
|
+
if (resolutionCtx.resolvedCache.has(refId)) {
|
|
293
|
+
return resolutionCtx.resolvedCache.get(refId) ?? null;
|
|
294
|
+
}
|
|
295
|
+
// Check for circular reference
|
|
296
|
+
if (resolutionCtx.visitedEntries.has(refId)) {
|
|
297
|
+
resolutionCtx.circularReferences.push(`${fieldName}:${refId}`);
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
// Check depth limit
|
|
301
|
+
if (resolutionCtx.currentDepth >= resolutionCtx.maxDepth) {
|
|
302
|
+
// At max depth, just return the basic resolved reference without recursing
|
|
303
|
+
const basicRef = await resolveReference(ctx, refId, {
|
|
304
|
+
publishedOnly: options.publishedOnly,
|
|
305
|
+
includeDeleted: options.includeDeleted,
|
|
306
|
+
fields: options.selectFields,
|
|
307
|
+
});
|
|
308
|
+
if (!basicRef) {
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
const result = {
|
|
312
|
+
id: basicRef.id,
|
|
313
|
+
contentTypeName: basicRef.contentTypeName,
|
|
314
|
+
contentTypeDisplayName: basicRef.contentTypeDisplayName,
|
|
315
|
+
slug: basicRef.slug,
|
|
316
|
+
status: basicRef.status,
|
|
317
|
+
data: basicRef.data,
|
|
318
|
+
exists: basicRef.exists,
|
|
319
|
+
...(options.preserveOriginalIds && { _originalId: refId }),
|
|
320
|
+
};
|
|
321
|
+
resolutionCtx.resolvedCache.set(refId, result);
|
|
322
|
+
return result;
|
|
323
|
+
}
|
|
324
|
+
// Mark as visiting
|
|
325
|
+
resolutionCtx.visitedEntries.add(refId);
|
|
326
|
+
resolutionCtx.currentDepth++;
|
|
327
|
+
try {
|
|
328
|
+
// Get the referenced entry
|
|
329
|
+
const entry = await ctx.db.get(refId);
|
|
330
|
+
if (!entry) {
|
|
331
|
+
resolutionCtx.resolvedCache.set(refId, null);
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
// Check soft-delete
|
|
335
|
+
if (!options.includeDeleted && isDeleted(entry)) {
|
|
336
|
+
resolutionCtx.resolvedCache.set(refId, null);
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
// Check published status
|
|
340
|
+
if (options.publishedOnly && entry.status !== "published") {
|
|
341
|
+
resolutionCtx.resolvedCache.set(refId, null);
|
|
342
|
+
return null;
|
|
343
|
+
}
|
|
344
|
+
// Get content type for field definitions
|
|
345
|
+
const contentType = await ctx.db.get(entry.contentTypeId);
|
|
346
|
+
if (!contentType || isDeleted(contentType)) {
|
|
347
|
+
resolutionCtx.resolvedCache.set(refId, null);
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
// Recursively resolve this entry's references
|
|
351
|
+
const nestedFields = contentType.fields.filter((f) => f.type === "reference" || f.type === "media");
|
|
352
|
+
const resolvedData = await resolveDataFields(ctx, entry.data, nestedFields, resolutionCtx, {
|
|
353
|
+
resolveMedia: true,
|
|
354
|
+
resolveContent: true,
|
|
355
|
+
publishedOnly: options.publishedOnly,
|
|
356
|
+
includeDeleted: options.includeDeleted,
|
|
357
|
+
selectFields: options.selectFields,
|
|
358
|
+
preserveOriginalIds: options.preserveOriginalIds,
|
|
359
|
+
});
|
|
360
|
+
// Filter fields if specified
|
|
361
|
+
let finalData = resolvedData;
|
|
362
|
+
if (options.selectFields && options.selectFields.length > 0) {
|
|
363
|
+
finalData = {};
|
|
364
|
+
for (const field of options.selectFields) {
|
|
365
|
+
if (field in resolvedData) {
|
|
366
|
+
finalData[field] = resolvedData[field];
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
const result = {
|
|
371
|
+
id: refId,
|
|
372
|
+
contentTypeName: contentType.name,
|
|
373
|
+
contentTypeDisplayName: contentType.displayName,
|
|
374
|
+
slug: entry.slug,
|
|
375
|
+
status: entry.status,
|
|
376
|
+
data: finalData,
|
|
377
|
+
exists: true,
|
|
378
|
+
locale: entry.locale,
|
|
379
|
+
version: entry.version,
|
|
380
|
+
...(options.preserveOriginalIds && { _originalId: refId }),
|
|
381
|
+
};
|
|
382
|
+
resolutionCtx.resolvedCache.set(refId, result);
|
|
383
|
+
return result;
|
|
384
|
+
}
|
|
385
|
+
finally {
|
|
386
|
+
// Unmark as visiting (allow visiting again from different paths)
|
|
387
|
+
resolutionCtx.visitedEntries.delete(refId);
|
|
388
|
+
resolutionCtx.currentDepth--;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Resolve a media field value (single or multiple).
|
|
393
|
+
*/
|
|
394
|
+
async function resolveMediaField(ctx, field, value, resolutionCtx, options) {
|
|
395
|
+
const isMultiple = field.options?.multiple ?? false;
|
|
396
|
+
const mediaOptions = {
|
|
397
|
+
includeDeleted: options.includeDeleted,
|
|
398
|
+
};
|
|
399
|
+
if (isMultiple) {
|
|
400
|
+
// Resolve array of media references
|
|
401
|
+
if (!Array.isArray(value)) {
|
|
402
|
+
return value;
|
|
403
|
+
}
|
|
404
|
+
const resolvedArray = [];
|
|
405
|
+
const unresolvedIds = [];
|
|
406
|
+
for (const mediaId of value) {
|
|
407
|
+
if (typeof mediaId !== "string") {
|
|
408
|
+
resolvedArray.push(mediaId);
|
|
409
|
+
continue;
|
|
410
|
+
}
|
|
411
|
+
// Check cache
|
|
412
|
+
if (resolutionCtx.mediaCache.has(mediaId)) {
|
|
413
|
+
const cached = resolutionCtx.mediaCache.get(mediaId);
|
|
414
|
+
if (cached) {
|
|
415
|
+
resolvedArray.push(options.preserveOriginalIds
|
|
416
|
+
? { ...cached, _originalId: mediaId }
|
|
417
|
+
: cached);
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
unresolvedIds.push(mediaId);
|
|
421
|
+
}
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
const resolved = await resolveMediaReference(ctx, mediaId, mediaOptions);
|
|
425
|
+
if (resolved) {
|
|
426
|
+
resolutionCtx.mediaCache.set(mediaId, resolved);
|
|
427
|
+
resolvedArray.push(options.preserveOriginalIds
|
|
428
|
+
? { ...resolved, _originalId: mediaId }
|
|
429
|
+
: resolved);
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
resolutionCtx.mediaCache.set(mediaId, null);
|
|
433
|
+
unresolvedIds.push(mediaId);
|
|
434
|
+
if (options.preserveOriginalIds) {
|
|
435
|
+
resolvedArray.push({ _unresolvedId: mediaId });
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (unresolvedIds.length > 0) {
|
|
440
|
+
resolutionCtx.unresolvedReferences[field.name] = unresolvedIds;
|
|
441
|
+
}
|
|
442
|
+
return resolvedArray;
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
// Resolve single media reference
|
|
446
|
+
if (typeof value !== "string") {
|
|
447
|
+
return value;
|
|
448
|
+
}
|
|
449
|
+
// Check cache
|
|
450
|
+
if (resolutionCtx.mediaCache.has(value)) {
|
|
451
|
+
const cached = resolutionCtx.mediaCache.get(value);
|
|
452
|
+
if (cached) {
|
|
453
|
+
return options.preserveOriginalIds
|
|
454
|
+
? { ...cached, _originalId: value }
|
|
455
|
+
: cached;
|
|
456
|
+
}
|
|
457
|
+
resolutionCtx.unresolvedReferences[field.name] = [value];
|
|
458
|
+
return options.preserveOriginalIds ? { _unresolvedId: value } : value;
|
|
459
|
+
}
|
|
460
|
+
const resolved = await resolveMediaReference(ctx, value, mediaOptions);
|
|
461
|
+
if (resolved) {
|
|
462
|
+
resolutionCtx.mediaCache.set(value, resolved);
|
|
463
|
+
return options.preserveOriginalIds
|
|
464
|
+
? { ...resolved, _originalId: value }
|
|
465
|
+
: resolved;
|
|
466
|
+
}
|
|
467
|
+
resolutionCtx.mediaCache.set(value, null);
|
|
468
|
+
resolutionCtx.unresolvedReferences[field.name] = [value];
|
|
469
|
+
return options.preserveOriginalIds ? { _unresolvedId: value } : value;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
// =============================================================================
|
|
473
|
+
// Utility Functions
|
|
474
|
+
// =============================================================================
|
|
475
|
+
/**
|
|
476
|
+
* Check if a value contains circular reference markers.
|
|
477
|
+
*
|
|
478
|
+
* @param data - Data object to check
|
|
479
|
+
* @returns Array of field paths with circular references
|
|
480
|
+
*/
|
|
481
|
+
export function findCircularReferenceMarkers(data) {
|
|
482
|
+
const markers = [];
|
|
483
|
+
function traverse(obj, path) {
|
|
484
|
+
if (obj === null || obj === undefined) {
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
if (typeof obj === "object") {
|
|
488
|
+
if (Array.isArray(obj)) {
|
|
489
|
+
obj.forEach((item, index) => traverse(item, `${path}[${index}]`));
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
const record = obj;
|
|
493
|
+
if ("_circularReferences" in record) {
|
|
494
|
+
markers.push(path);
|
|
495
|
+
}
|
|
496
|
+
for (const [key, value] of Object.entries(record)) {
|
|
497
|
+
traverse(value, path ? `${path}.${key}` : key);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
traverse(data, "");
|
|
503
|
+
return markers;
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Flatten resolved references to a simple lookup map.
|
|
507
|
+
* Useful for deduplicating references across multiple entries.
|
|
508
|
+
*
|
|
509
|
+
* @param entries - Array of resolved entries
|
|
510
|
+
* @returns Map of entry ID to resolved entry
|
|
511
|
+
*/
|
|
512
|
+
export function flattenResolvedReferences(entries) {
|
|
513
|
+
const map = new Map();
|
|
514
|
+
function extractReferences(data) {
|
|
515
|
+
for (const value of Object.values(data)) {
|
|
516
|
+
if (value === null || value === undefined) {
|
|
517
|
+
continue;
|
|
518
|
+
}
|
|
519
|
+
if (typeof value === "object") {
|
|
520
|
+
if (Array.isArray(value)) {
|
|
521
|
+
for (const item of value) {
|
|
522
|
+
if (isResolvedContentEntry(item)) {
|
|
523
|
+
map.set(item.id, item);
|
|
524
|
+
extractReferences(item.data);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
else if (isResolvedContentEntry(value)) {
|
|
529
|
+
const entry = value;
|
|
530
|
+
map.set(entry.id, entry);
|
|
531
|
+
extractReferences(entry.data);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
for (const entry of entries) {
|
|
537
|
+
map.set(entry.id, entry);
|
|
538
|
+
extractReferences(entry.data);
|
|
539
|
+
}
|
|
540
|
+
return map;
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Type guard to check if a value is a resolved content entry.
|
|
544
|
+
*/
|
|
545
|
+
function isResolvedContentEntry(value) {
|
|
546
|
+
if (typeof value !== "object" || value === null) {
|
|
547
|
+
return false;
|
|
548
|
+
}
|
|
549
|
+
const obj = value;
|
|
550
|
+
return ("id" in obj &&
|
|
551
|
+
"contentTypeName" in obj &&
|
|
552
|
+
"slug" in obj &&
|
|
553
|
+
"status" in obj &&
|
|
554
|
+
"data" in obj &&
|
|
555
|
+
"exists" in obj);
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Count the total number of references resolved in an entry.
|
|
559
|
+
*
|
|
560
|
+
* @param entry - Resolved entry to count
|
|
561
|
+
* @returns Object with counts of content and media references
|
|
562
|
+
*/
|
|
563
|
+
export function countResolvedReferences(entry) {
|
|
564
|
+
let content = 0;
|
|
565
|
+
let media = 0;
|
|
566
|
+
function count(value) {
|
|
567
|
+
if (value === null || value === undefined) {
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
if (typeof value === "object") {
|
|
571
|
+
if (Array.isArray(value)) {
|
|
572
|
+
for (const item of value) {
|
|
573
|
+
count(item);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
else {
|
|
577
|
+
const record = value;
|
|
578
|
+
// Check if it's a resolved content entry
|
|
579
|
+
if (isResolvedContentEntry(record)) {
|
|
580
|
+
content++;
|
|
581
|
+
count(record.data);
|
|
582
|
+
}
|
|
583
|
+
// Check if it's a resolved media reference
|
|
584
|
+
else if ("storageId" in record &&
|
|
585
|
+
"url" in record &&
|
|
586
|
+
"mimeType" in record) {
|
|
587
|
+
media++;
|
|
588
|
+
}
|
|
589
|
+
// Otherwise recurse into nested objects
|
|
590
|
+
else {
|
|
591
|
+
for (const val of Object.values(record)) {
|
|
592
|
+
count(val);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
count(entry.data);
|
|
599
|
+
return { content, media, total: content + media };
|
|
600
|
+
}
|
|
601
|
+
//# sourceMappingURL=deepReferenceResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepReferenceResolver.js","sourceRoot":"","sources":["../../../src/component/lib/deepReferenceResolver.ts"],"names":[],"mappings":"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"}
|