@zlooks.cn/blog-server 1.0.6 → 1.0.7
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/blog/blog-application.d.ts +14 -0
- package/dist/blog/blog-application.d.ts.map +1 -1
- package/dist/blog/blog-application.js +5 -3
- package/dist/blog/blog-application.js.map +1 -1
- package/dist/blog/comment-client-metadata.d.ts +6 -3
- package/dist/blog/comment-client-metadata.d.ts.map +1 -1
- package/dist/blog/comment-client-metadata.js +13 -3
- package/dist/blog/comment-client-metadata.js.map +1 -1
- package/dist/blog/errors.d.ts +6 -0
- package/dist/blog/errors.d.ts.map +1 -1
- package/dist/blog/errors.js +42 -2
- package/dist/blog/errors.js.map +1 -1
- package/dist/blog/post-content-audit.d.ts.map +1 -1
- package/dist/blog/post-content-audit.js +48 -11
- package/dist/blog/post-content-audit.js.map +1 -1
- package/dist/blog/public-blog-service.d.ts +47 -18
- package/dist/blog/public-blog-service.d.ts.map +1 -1
- package/dist/blog/public-blog-service.js +132 -91
- package/dist/blog/public-blog-service.js.map +1 -1
- package/dist/browser-api/http-message.d.ts +53 -0
- package/dist/browser-api/http-message.d.ts.map +1 -0
- package/dist/browser-api/http-message.js +157 -0
- package/dist/browser-api/http-message.js.map +1 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +10 -3
- package/dist/config/schema.js.map +1 -1
- package/dist/contracts/public-api.d.ts +1 -1
- package/dist/contracts/public-api.d.ts.map +1 -1
- package/dist/contracts/public-api.js +1 -1
- package/dist/contracts/public-api.js.map +1 -1
- package/dist/events/blog-domain-events.d.ts.map +1 -1
- package/dist/events/blog-domain-events.js +54 -21
- package/dist/events/blog-domain-events.js.map +1 -1
- package/dist/mcp/blog-provider.d.ts +2 -3
- package/dist/mcp/blog-provider.d.ts.map +1 -1
- package/dist/mcp/blog-provider.js +3 -3
- package/dist/mcp/blog-provider.js.map +1 -1
- package/dist/mcp/blog-resources.d.ts +2 -1
- package/dist/mcp/blog-resources.d.ts.map +1 -1
- package/dist/mcp/blog-resources.js +25 -63
- package/dist/mcp/blog-resources.js.map +1 -1
- package/dist/mcp/category-tools.d.ts +2 -2
- package/dist/mcp/category-tools.d.ts.map +1 -1
- package/dist/mcp/category-tools.js +17 -7
- package/dist/mcp/category-tools.js.map +1 -1
- package/dist/mcp/comment-tools.d.ts +2 -2
- package/dist/mcp/comment-tools.d.ts.map +1 -1
- package/dist/mcp/comment-tools.js +23 -9
- package/dist/mcp/comment-tools.js.map +1 -1
- package/dist/mcp/friend-link-tools.d.ts +2 -2
- package/dist/mcp/friend-link-tools.d.ts.map +1 -1
- package/dist/mcp/friend-link-tools.js +22 -10
- package/dist/mcp/friend-link-tools.js.map +1 -1
- package/dist/mcp/page-tools.d.ts +2 -2
- package/dist/mcp/page-tools.d.ts.map +1 -1
- package/dist/mcp/page-tools.js +13 -14
- package/dist/mcp/page-tools.js.map +1 -1
- package/dist/mcp/post-tools.d.ts +2 -2
- package/dist/mcp/post-tools.d.ts.map +1 -1
- package/dist/mcp/post-tools.js +104 -70
- package/dist/mcp/post-tools.js.map +1 -1
- package/dist/mcp/tag-tools.d.ts +2 -2
- package/dist/mcp/tag-tools.d.ts.map +1 -1
- package/dist/mcp/tag-tools.js +15 -7
- package/dist/mcp/tag-tools.js.map +1 -1
- package/dist/mcp/theme-tools.d.ts +2 -2
- package/dist/mcp/theme-tools.d.ts.map +1 -1
- package/dist/mcp/theme-tools.js +69 -40
- package/dist/mcp/theme-tools.js.map +1 -1
- package/dist/mcp/tool-support.d.ts +16 -111
- package/dist/mcp/tool-support.d.ts.map +1 -1
- package/dist/mcp/tool-support.js +84 -93
- package/dist/mcp/tool-support.js.map +1 -1
- package/dist/messages/api/blog/[path+]/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/[path+]/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/[path+]/index.msg.js +7 -0
- package/dist/messages/api/blog/[path+]/index.msg.js.map +1 -0
- package/dist/messages/api/blog/categories/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/categories/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/categories/index.msg.js +9 -0
- package/dist/messages/api/blog/categories/index.msg.js.map +1 -0
- package/dist/messages/api/blog/friend-links/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/friend-links/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/friend-links/index.msg.js +9 -0
- package/dist/messages/api/blog/friend-links/index.msg.js.map +1 -0
- package/dist/messages/api/blog/likes/[slug]/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/likes/[slug]/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/likes/[slug]/index.msg.js +17 -0
- package/dist/messages/api/blog/likes/[slug]/index.msg.js.map +1 -0
- package/dist/messages/api/blog/posts/[slug]/comments/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/posts/[slug]/comments/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/posts/[slug]/comments/index.msg.js +21 -0
- package/dist/messages/api/blog/posts/[slug]/comments/index.msg.js.map +1 -0
- package/dist/messages/api/blog/posts/[slug]/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/posts/[slug]/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/posts/[slug]/index.msg.js +14 -0
- package/dist/messages/api/blog/posts/[slug]/index.msg.js.map +1 -0
- package/dist/messages/api/blog/posts/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/posts/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/posts/index.msg.js +15 -0
- package/dist/messages/api/blog/posts/index.msg.js.map +1 -0
- package/dist/messages/api/blog/search/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/search/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/search/index.msg.js +12 -0
- package/dist/messages/api/blog/search/index.msg.js.map +1 -0
- package/dist/messages/api/blog/tags/index.msg.d.ts +3 -0
- package/dist/messages/api/blog/tags/index.msg.d.ts.map +1 -0
- package/dist/messages/api/blog/tags/index.msg.js +9 -0
- package/dist/messages/api/blog/tags/index.msg.js.map +1 -0
- package/dist/messages/management/categories.msg.d.ts +3 -0
- package/dist/messages/management/categories.msg.d.ts.map +1 -0
- package/dist/messages/management/categories.msg.js +21 -0
- package/dist/messages/management/categories.msg.js.map +1 -0
- package/dist/messages/{browser/dispatch.msg.d.ts → management/comments.msg.d.ts} +1 -1
- package/dist/messages/management/comments.msg.d.ts.map +1 -0
- package/dist/messages/management/comments.msg.js +24 -0
- package/dist/messages/management/comments.msg.js.map +1 -0
- package/dist/messages/management/friend-links.msg.d.ts +3 -0
- package/dist/messages/management/friend-links.msg.d.ts.map +1 -0
- package/dist/messages/management/friend-links.msg.js +27 -0
- package/dist/messages/management/friend-links.msg.js.map +1 -0
- package/dist/messages/management/pages.msg.d.ts +3 -0
- package/dist/messages/management/pages.msg.d.ts.map +1 -0
- package/dist/messages/management/pages.msg.js +27 -0
- package/dist/messages/management/pages.msg.js.map +1 -0
- package/dist/messages/management/posts.msg.d.ts +3 -0
- package/dist/messages/management/posts.msg.d.ts.map +1 -0
- package/dist/messages/management/posts.msg.js +48 -0
- package/dist/messages/management/posts.msg.js.map +1 -0
- package/dist/messages/management/tags.msg.d.ts +3 -0
- package/dist/messages/management/tags.msg.d.ts.map +1 -0
- package/dist/messages/management/tags.msg.js +21 -0
- package/dist/messages/management/tags.msg.js.map +1 -0
- package/dist/messages/management/themes.msg.d.ts +3 -0
- package/dist/messages/management/themes.msg.d.ts.map +1 -0
- package/dist/messages/management/themes.msg.js +18 -0
- package/dist/messages/management/themes.msg.js.map +1 -0
- package/dist/messages/model-message.d.ts +5 -0
- package/dist/messages/model-message.d.ts.map +1 -0
- package/dist/messages/model-message.js +9 -0
- package/dist/messages/model-message.js.map +1 -0
- package/dist/messages/public/categories/list.msg.js +3 -7
- package/dist/messages/public/categories/list.msg.js.map +1 -1
- package/dist/messages/public/comments/create.msg.d.ts +3 -0
- package/dist/messages/public/comments/create.msg.d.ts.map +1 -0
- package/dist/messages/public/comments/create.msg.js +38 -0
- package/dist/messages/public/comments/create.msg.js.map +1 -0
- package/dist/messages/public/comments/list.msg.js +20 -4
- package/dist/messages/public/comments/list.msg.js.map +1 -1
- package/dist/messages/public/comments/recent.msg.js +12 -4
- package/dist/messages/public/comments/recent.msg.js.map +1 -1
- package/dist/messages/public/friend-links/list.msg.js +3 -7
- package/dist/messages/public/friend-links/list.msg.js.map +1 -1
- package/dist/messages/public/pages/list.msg.js +3 -7
- package/dist/messages/public/pages/list.msg.js.map +1 -1
- package/dist/messages/public/pages/read.msg.js +3 -7
- package/dist/messages/public/pages/read.msg.js.map +1 -1
- package/dist/messages/public/posts/archive.msg.js +3 -7
- package/dist/messages/public/posts/archive.msg.js.map +1 -1
- package/dist/messages/public/posts/connections.msg.js +3 -7
- package/dist/messages/public/posts/connections.msg.js.map +1 -1
- package/dist/messages/public/posts/list.msg.js +20 -4
- package/dist/messages/public/posts/list.msg.js.map +1 -1
- package/dist/messages/public/posts/open.msg.js +12 -4
- package/dist/messages/public/posts/open.msg.js.map +1 -1
- package/dist/messages/public/posts/read.msg.js +3 -7
- package/dist/messages/public/posts/read.msg.js.map +1 -1
- package/dist/messages/public/posts/search.msg.d.ts +3 -0
- package/dist/messages/public/posts/search.msg.d.ts.map +1 -0
- package/dist/messages/public/posts/search.msg.js +4 -0
- package/dist/messages/public/posts/search.msg.js.map +1 -0
- package/dist/messages/public/posts/set-liked.msg.d.ts +3 -0
- package/dist/messages/public/posts/set-liked.msg.d.ts.map +1 -0
- package/dist/messages/public/posts/set-liked.msg.js +36 -0
- package/dist/messages/public/posts/set-liked.msg.js.map +1 -0
- package/dist/messages/public/tags/list.msg.js +3 -7
- package/dist/messages/public/tags/list.msg.js.map +1 -1
- package/dist/messages/resources/event-catalog.msg.d.ts +3 -0
- package/dist/messages/resources/event-catalog.msg.d.ts.map +1 -0
- package/dist/messages/resources/event-catalog.msg.js +4 -0
- package/dist/messages/resources/event-catalog.msg.js.map +1 -0
- package/dist/messages/resources/theme-authoring-contract.msg.d.ts +3 -0
- package/dist/messages/resources/theme-authoring-contract.msg.d.ts.map +1 -0
- package/dist/messages/resources/theme-authoring-contract.msg.js +4 -0
- package/dist/messages/resources/theme-authoring-contract.msg.js.map +1 -0
- package/dist/messages/sitemap/entries.msg.d.ts +3 -0
- package/dist/messages/sitemap/entries.msg.d.ts.map +1 -0
- package/dist/messages/sitemap/entries.msg.js +9 -0
- package/dist/messages/sitemap/entries.msg.js.map +1 -0
- package/dist/messages/user-context.d.ts +21 -0
- package/dist/messages/user-context.d.ts.map +1 -0
- package/dist/messages/user-context.js +47 -0
- package/dist/messages/user-context.js.map +1 -0
- package/dist/migrations/index.d.ts +2 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +6 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/models/blog-resource-documents.d.ts +33 -0
- package/dist/models/blog-resource-documents.d.ts.map +1 -0
- package/dist/models/blog-resource-documents.js +60 -0
- package/dist/models/blog-resource-documents.js.map +1 -0
- package/dist/models/management/approve-comment.model.d.ts +23 -0
- package/dist/models/management/approve-comment.model.d.ts.map +1 -0
- package/dist/models/management/approve-comment.model.js +14 -0
- package/dist/models/management/approve-comment.model.js.map +1 -0
- package/dist/models/management/archive-page.model.d.ts +21 -0
- package/dist/models/management/archive-page.model.d.ts.map +1 -0
- package/dist/models/management/archive-page.model.js +14 -0
- package/dist/models/management/archive-page.model.js.map +1 -0
- package/dist/models/management/archive-post.model.d.ts +28 -0
- package/dist/models/management/archive-post.model.d.ts.map +1 -0
- package/dist/models/management/archive-post.model.js +14 -0
- package/dist/models/management/archive-post.model.js.map +1 -0
- package/dist/models/management/audit-post-content.model.d.ts +21 -0
- package/dist/models/management/audit-post-content.model.d.ts.map +1 -0
- package/dist/models/management/audit-post-content.model.js +12 -0
- package/dist/models/management/audit-post-content.model.js.map +1 -0
- package/dist/models/management/create-category.model.d.ts +17 -0
- package/dist/models/management/create-category.model.d.ts.map +1 -0
- package/dist/models/management/create-category.model.js +14 -0
- package/dist/models/management/create-category.model.js.map +1 -0
- package/dist/models/management/create-friend-link.model.d.ts +19 -0
- package/dist/models/management/create-friend-link.model.d.ts.map +1 -0
- package/dist/models/management/create-friend-link.model.js +14 -0
- package/dist/models/management/create-friend-link.model.js.map +1 -0
- package/dist/models/management/create-page.model.d.ts +21 -0
- package/dist/models/management/create-page.model.d.ts.map +1 -0
- package/dist/models/management/create-page.model.js +14 -0
- package/dist/models/management/create-page.model.js.map +1 -0
- package/dist/models/management/create-post.model.d.ts +28 -0
- package/dist/models/management/create-post.model.d.ts.map +1 -0
- package/dist/models/management/create-post.model.js +14 -0
- package/dist/models/management/create-post.model.js.map +1 -0
- package/dist/models/management/create-tag.model.d.ts +15 -0
- package/dist/models/management/create-tag.model.d.ts.map +1 -0
- package/dist/models/management/create-tag.model.js +14 -0
- package/dist/models/management/create-tag.model.js.map +1 -0
- package/dist/models/management/delete-category.model.d.ts +10 -0
- package/dist/models/management/delete-category.model.d.ts.map +1 -0
- package/dist/models/management/delete-category.model.js +12 -0
- package/dist/models/management/delete-category.model.js.map +1 -0
- package/dist/models/management/delete-comment.model.d.ts +10 -0
- package/dist/models/management/delete-comment.model.d.ts.map +1 -0
- package/dist/models/management/delete-comment.model.js +12 -0
- package/dist/models/management/delete-comment.model.js.map +1 -0
- package/dist/models/management/delete-friend-link.model.d.ts +10 -0
- package/dist/models/management/delete-friend-link.model.d.ts.map +1 -0
- package/dist/models/management/delete-friend-link.model.js +12 -0
- package/dist/models/management/delete-friend-link.model.js.map +1 -0
- package/dist/models/management/delete-page.model.d.ts +10 -0
- package/dist/models/management/delete-page.model.d.ts.map +1 -0
- package/dist/models/management/delete-page.model.js +12 -0
- package/dist/models/management/delete-page.model.js.map +1 -0
- package/dist/models/management/delete-post.model.d.ts +10 -0
- package/dist/models/management/delete-post.model.d.ts.map +1 -0
- package/dist/models/management/delete-post.model.js +12 -0
- package/dist/models/management/delete-post.model.js.map +1 -0
- package/dist/models/management/delete-tag.model.d.ts +10 -0
- package/dist/models/management/delete-tag.model.d.ts.map +1 -0
- package/dist/models/management/delete-tag.model.js +12 -0
- package/dist/models/management/delete-tag.model.js.map +1 -0
- package/dist/models/management/disable-friend-link.model.d.ts +19 -0
- package/dist/models/management/disable-friend-link.model.d.ts.map +1 -0
- package/dist/models/management/disable-friend-link.model.js +14 -0
- package/dist/models/management/disable-friend-link.model.js.map +1 -0
- package/dist/models/management/enable-friend-link.model.d.ts +19 -0
- package/dist/models/management/enable-friend-link.model.d.ts.map +1 -0
- package/dist/models/management/enable-friend-link.model.js +14 -0
- package/dist/models/management/enable-friend-link.model.js.map +1 -0
- package/dist/models/management/list-category.model.d.ts +18 -0
- package/dist/models/management/list-category.model.d.ts.map +1 -0
- package/dist/models/management/list-category.model.js +13 -0
- package/dist/models/management/list-category.model.js.map +1 -0
- package/dist/models/management/list-comment.model.d.ts +24 -0
- package/dist/models/management/list-comment.model.d.ts.map +1 -0
- package/dist/models/management/list-comment.model.js +13 -0
- package/dist/models/management/list-comment.model.js.map +1 -0
- package/dist/models/management/list-friend-link.model.d.ts +20 -0
- package/dist/models/management/list-friend-link.model.d.ts.map +1 -0
- package/dist/models/management/list-friend-link.model.js +16 -0
- package/dist/models/management/list-friend-link.model.js.map +1 -0
- package/dist/models/management/list-page.model.d.ts +22 -0
- package/dist/models/management/list-page.model.d.ts.map +1 -0
- package/dist/models/management/list-page.model.js +13 -0
- package/dist/models/management/list-page.model.js.map +1 -0
- package/dist/models/management/list-post-archive.model.d.ts +30 -0
- package/dist/models/management/list-post-archive.model.d.ts.map +1 -0
- package/dist/models/management/list-post-archive.model.js +32 -0
- package/dist/models/management/list-post-archive.model.js.map +1 -0
- package/dist/models/management/list-post.model.d.ts +29 -0
- package/dist/models/management/list-post.model.d.ts.map +1 -0
- package/dist/models/management/list-post.model.js +13 -0
- package/dist/models/management/list-post.model.js.map +1 -0
- package/dist/models/management/list-tag.model.d.ts +16 -0
- package/dist/models/management/list-tag.model.d.ts.map +1 -0
- package/dist/models/management/list-tag.model.js +13 -0
- package/dist/models/management/list-tag.model.js.map +1 -0
- package/dist/models/management/list-theme.model.d.ts +3 -0
- package/dist/models/management/list-theme.model.d.ts.map +1 -0
- package/dist/models/management/list-theme.model.js +12 -0
- package/dist/models/management/list-theme.model.js.map +1 -0
- package/dist/models/management/publish-page.model.d.ts +21 -0
- package/dist/models/management/publish-page.model.d.ts.map +1 -0
- package/dist/models/management/publish-page.model.js +14 -0
- package/dist/models/management/publish-page.model.js.map +1 -0
- package/dist/models/management/publish-post.model.d.ts +28 -0
- package/dist/models/management/publish-post.model.d.ts.map +1 -0
- package/dist/models/management/publish-post.model.js +14 -0
- package/dist/models/management/publish-post.model.js.map +1 -0
- package/dist/models/management/read-category.model.d.ts +17 -0
- package/dist/models/management/read-category.model.d.ts.map +1 -0
- package/dist/models/management/read-category.model.js +14 -0
- package/dist/models/management/read-category.model.js.map +1 -0
- package/dist/models/management/read-comment.model.d.ts +23 -0
- package/dist/models/management/read-comment.model.d.ts.map +1 -0
- package/dist/models/management/read-comment.model.js +14 -0
- package/dist/models/management/read-comment.model.js.map +1 -0
- package/dist/models/management/read-friend-link.model.d.ts +19 -0
- package/dist/models/management/read-friend-link.model.d.ts.map +1 -0
- package/dist/models/management/read-friend-link.model.js +14 -0
- package/dist/models/management/read-friend-link.model.js.map +1 -0
- package/dist/models/management/read-page.model.d.ts +21 -0
- package/dist/models/management/read-page.model.d.ts.map +1 -0
- package/dist/models/management/read-page.model.js +14 -0
- package/dist/models/management/read-page.model.js.map +1 -0
- package/dist/models/management/read-post.model.d.ts +28 -0
- package/dist/models/management/read-post.model.d.ts.map +1 -0
- package/dist/models/management/read-post.model.js +14 -0
- package/dist/models/management/read-post.model.js.map +1 -0
- package/dist/models/management/read-tag.model.d.ts +15 -0
- package/dist/models/management/read-tag.model.d.ts.map +1 -0
- package/dist/models/management/read-tag.model.js +14 -0
- package/dist/models/management/read-tag.model.js.map +1 -0
- package/dist/models/management/read-theme-selection.model.d.ts +8 -0
- package/dist/models/management/read-theme-selection.model.d.ts.map +1 -0
- package/dist/models/management/read-theme-selection.model.js +12 -0
- package/dist/models/management/read-theme-selection.model.js.map +1 -0
- package/dist/models/management/read-theme-status.model.d.ts +3 -0
- package/dist/models/management/read-theme-status.model.d.ts.map +1 -0
- package/dist/models/management/read-theme-status.model.js +14 -0
- package/dist/models/management/read-theme-status.model.js.map +1 -0
- package/dist/models/management/reject-comment.model.d.ts +23 -0
- package/dist/models/management/reject-comment.model.d.ts.map +1 -0
- package/dist/models/management/reject-comment.model.js +14 -0
- package/dist/models/management/reject-comment.model.js.map +1 -0
- package/dist/models/management/reply-comment.model.d.ts +23 -0
- package/dist/models/management/reply-comment.model.d.ts.map +1 -0
- package/dist/models/management/reply-comment.model.js +18 -0
- package/dist/models/management/reply-comment.model.js.map +1 -0
- package/dist/models/management/search-post.model.d.ts +27 -0
- package/dist/models/management/search-post.model.d.ts.map +1 -0
- package/dist/models/management/search-post.model.js +18 -0
- package/dist/models/management/search-post.model.js.map +1 -0
- package/dist/models/management/select-theme.model.d.ts +3 -0
- package/dist/models/management/select-theme.model.d.ts.map +1 -0
- package/dist/models/management/select-theme.model.js +16 -0
- package/dist/models/management/select-theme.model.js.map +1 -0
- package/dist/models/management/update-category.model.d.ts +17 -0
- package/dist/models/management/update-category.model.d.ts.map +1 -0
- package/dist/models/management/update-category.model.js +16 -0
- package/dist/models/management/update-category.model.js.map +1 -0
- package/dist/models/management/update-friend-link.model.d.ts +19 -0
- package/dist/models/management/update-friend-link.model.d.ts.map +1 -0
- package/dist/models/management/update-friend-link.model.js +16 -0
- package/dist/models/management/update-friend-link.model.js.map +1 -0
- package/dist/models/management/update-page.model.d.ts +21 -0
- package/dist/models/management/update-page.model.d.ts.map +1 -0
- package/dist/models/management/update-page.model.js +16 -0
- package/dist/models/management/update-page.model.js.map +1 -0
- package/dist/models/management/update-post.model.d.ts +28 -0
- package/dist/models/management/update-post.model.d.ts.map +1 -0
- package/dist/models/management/update-post.model.js +16 -0
- package/dist/models/management/update-post.model.js.map +1 -0
- package/dist/models/management/update-tag.model.d.ts +15 -0
- package/dist/models/management/update-tag.model.d.ts.map +1 -0
- package/dist/models/management/update-tag.model.js +16 -0
- package/dist/models/management/update-tag.model.js.map +1 -0
- package/dist/models/management-projection.d.ts +97 -0
- package/dist/models/management-projection.d.ts.map +1 -0
- package/dist/models/management-projection.js +76 -0
- package/dist/models/management-projection.js.map +1 -0
- package/dist/models/public/create-comment.model.d.ts +24 -0
- package/dist/models/public/create-comment.model.d.ts.map +1 -0
- package/dist/models/public/create-comment.model.js +12 -0
- package/dist/models/public/create-comment.model.js.map +1 -0
- package/dist/models/public/list-categories.model.d.ts +14 -0
- package/dist/models/public/list-categories.model.d.ts.map +1 -0
- package/dist/models/public/list-categories.model.js +11 -0
- package/dist/models/public/list-categories.model.js.map +1 -0
- package/dist/models/public/list-comments.model.d.ts +13 -0
- package/dist/models/public/list-comments.model.d.ts.map +1 -0
- package/dist/models/public/list-comments.model.js +16 -0
- package/dist/models/public/list-comments.model.js.map +1 -0
- package/dist/models/public/list-friend-links.model.d.ts +14 -0
- package/dist/models/public/list-friend-links.model.d.ts.map +1 -0
- package/dist/models/public/list-friend-links.model.js +11 -0
- package/dist/models/public/list-friend-links.model.js.map +1 -0
- package/dist/models/public/list-pages.model.d.ts +16 -0
- package/dist/models/public/list-pages.model.d.ts.map +1 -0
- package/dist/models/public/list-pages.model.js +11 -0
- package/dist/models/public/list-pages.model.js.map +1 -0
- package/dist/models/public/list-post-archive.model.d.ts +36 -0
- package/dist/models/public/list-post-archive.model.d.ts.map +1 -0
- package/dist/models/public/list-post-archive.model.js +11 -0
- package/dist/models/public/list-post-archive.model.js.map +1 -0
- package/dist/models/public/list-posts.model.d.ts +31 -0
- package/dist/models/public/list-posts.model.d.ts.map +1 -0
- package/dist/models/public/list-posts.model.js +17 -0
- package/dist/models/public/list-posts.model.js.map +1 -0
- package/dist/models/public/list-recent-comments.model.d.ts +10 -0
- package/dist/models/public/list-recent-comments.model.d.ts.map +1 -0
- package/dist/models/public/list-recent-comments.model.js +15 -0
- package/dist/models/public/list-recent-comments.model.js.map +1 -0
- package/dist/models/public/list-tags.model.d.ts +11 -0
- package/dist/models/public/list-tags.model.d.ts.map +1 -0
- package/dist/models/public/list-tags.model.js +11 -0
- package/dist/models/public/list-tags.model.js.map +1 -0
- package/dist/models/public/open-post.model.d.ts +38 -0
- package/dist/models/public/open-post.model.d.ts.map +1 -0
- package/dist/models/public/open-post.model.js +13 -0
- package/dist/models/public/open-post.model.js.map +1 -0
- package/dist/models/public/project-comments.model.d.ts +27 -0
- package/dist/models/public/project-comments.model.d.ts.map +1 -0
- package/dist/models/public/project-comments.model.js +12 -0
- package/dist/models/public/project-comments.model.js.map +1 -0
- package/dist/models/public/project-recent-comments.model.d.ts +31 -0
- package/dist/models/public/project-recent-comments.model.d.ts.map +1 -0
- package/dist/models/public/project-recent-comments.model.js +12 -0
- package/dist/models/public/project-recent-comments.model.js.map +1 -0
- package/dist/models/public/public-model-inputs.d.ts +99 -0
- package/dist/models/public/public-model-inputs.d.ts.map +1 -0
- package/dist/models/public/public-model-inputs.js +102 -0
- package/dist/models/public/public-model-inputs.js.map +1 -0
- package/dist/models/public/read-page.model.d.ts +22 -0
- package/dist/models/public/read-page.model.d.ts.map +1 -0
- package/dist/models/public/read-page.model.js +12 -0
- package/dist/models/public/read-page.model.js.map +1 -0
- package/dist/models/public/read-post-connections.model.d.ts +76 -0
- package/dist/models/public/read-post-connections.model.d.ts.map +1 -0
- package/dist/models/public/read-post-connections.model.js +12 -0
- package/dist/models/public/read-post-connections.model.js.map +1 -0
- package/dist/models/public/read-post.model.d.ts +33 -0
- package/dist/models/public/read-post.model.d.ts.map +1 -0
- package/dist/models/public/read-post.model.js +12 -0
- package/dist/models/public/read-post.model.js.map +1 -0
- package/dist/models/public/search-posts.model.d.ts +29 -0
- package/dist/models/public/search-posts.model.d.ts.map +1 -0
- package/dist/models/public/search-posts.model.js +11 -0
- package/dist/models/public/search-posts.model.js.map +1 -0
- package/dist/models/public/set-post-liked.model.d.ts +10 -0
- package/dist/models/public/set-post-liked.model.d.ts.map +1 -0
- package/dist/models/public/set-post-liked.model.js +12 -0
- package/dist/models/public/set-post-liked.model.js.map +1 -0
- package/dist/models/read-event-catalog.model.d.ts +3 -0
- package/dist/models/read-event-catalog.model.d.ts.map +1 -0
- package/dist/models/read-event-catalog.model.js +9 -0
- package/dist/models/read-event-catalog.model.js.map +1 -0
- package/dist/models/read-theme-authoring-contract.model.d.ts +33 -0
- package/dist/models/read-theme-authoring-contract.model.d.ts.map +1 -0
- package/dist/models/read-theme-authoring-contract.model.js +9 -0
- package/dist/models/read-theme-authoring-contract.model.js.map +1 -0
- package/dist/persistence/category-store.d.ts.map +1 -1
- package/dist/persistence/category-store.js +28 -11
- package/dist/persistence/category-store.js.map +1 -1
- package/dist/persistence/comment-store.d.ts.map +1 -1
- package/dist/persistence/comment-store.js +61 -20
- package/dist/persistence/comment-store.js.map +1 -1
- package/dist/persistence/entities.d.ts.map +1 -1
- package/dist/persistence/entities.js +15 -3
- package/dist/persistence/entities.js.map +1 -1
- package/dist/persistence/friend-link-store.d.ts.map +1 -1
- package/dist/persistence/friend-link-store.js +24 -7
- package/dist/persistence/friend-link-store.js.map +1 -1
- package/dist/persistence/page-store.d.ts +12 -0
- package/dist/persistence/page-store.d.ts.map +1 -1
- package/dist/persistence/page-store.js +33 -0
- package/dist/persistence/page-store.js.map +1 -1
- package/dist/persistence/post-store.d.ts +12 -0
- package/dist/persistence/post-store.d.ts.map +1 -1
- package/dist/persistence/post-store.js +240 -62
- package/dist/persistence/post-store.js.map +1 -1
- package/dist/persistence/tag-store.d.ts.map +1 -1
- package/dist/persistence/tag-store.js +23 -8
- package/dist/persistence/tag-store.js.map +1 -1
- package/dist/services/blog-runtime.service.d.ts +4 -4
- package/dist/services/blog-runtime.service.d.ts.map +1 -1
- package/dist/services/blog-runtime.service.js +10 -15
- package/dist/services/blog-runtime.service.js.map +1 -1
- package/dist/services/blog.boot.d.ts +1 -1
- package/dist/services/blog.boot.js +4 -4
- package/dist/services/blog.boot.js.map +1 -1
- package/dist/services/database.service.js +18 -3
- package/dist/services/database.service.js.map +1 -1
- package/dist/services/mcp-provider.service.js +3 -6
- package/dist/services/mcp-provider.service.js.map +1 -1
- package/dist/services/sitemap-provider.service.d.ts +4 -0
- package/dist/services/sitemap-provider.service.d.ts.map +1 -0
- package/dist/services/sitemap-provider.service.js +25 -0
- package/dist/services/sitemap-provider.service.js.map +1 -0
- package/dist/sitemap/blog-sitemap-provider.d.ts +34 -0
- package/dist/sitemap/blog-sitemap-provider.d.ts.map +1 -0
- package/dist/sitemap/blog-sitemap-provider.js +116 -0
- package/dist/sitemap/blog-sitemap-provider.js.map +1 -0
- package/dist/themes/theme-catalog.d.ts.map +1 -1
- package/dist/themes/theme-catalog.js +43 -26
- package/dist/themes/theme-catalog.js.map +1 -1
- package/dist/themes/theme-control.d.ts.map +1 -1
- package/dist/themes/theme-control.js +17 -7
- package/dist/themes/theme-control.js.map +1 -1
- package/dist/themes/theme-discovery-runtime.d.ts.map +1 -1
- package/dist/themes/theme-discovery-runtime.js +17 -7
- package/dist/themes/theme-discovery-runtime.js.map +1 -1
- package/dist/themes/theme-generation-store.d.ts.map +1 -1
- package/dist/themes/theme-generation-store.js +10 -5
- package/dist/themes/theme-generation-store.js.map +1 -1
- package/dist/themes/theme-selection-publisher.d.ts.map +1 -1
- package/dist/themes/theme-selection-publisher.js +11 -5
- package/dist/themes/theme-selection-publisher.js.map +1 -1
- package/package.json +23 -20
- package/dist/blog/micro-user-directory.d.ts +0 -11
- package/dist/blog/micro-user-directory.d.ts.map +0 -1
- package/dist/blog/micro-user-directory.js +0 -18
- package/dist/blog/micro-user-directory.js.map +0 -1
- package/dist/blog/public-blog-micro.d.ts +0 -291
- package/dist/blog/public-blog-micro.d.ts.map +0 -1
- package/dist/blog/public-blog-micro.js +0 -71
- package/dist/blog/public-blog-micro.js.map +0 -1
- package/dist/browser-api/dispatch-stream.d.ts +0 -5
- package/dist/browser-api/dispatch-stream.d.ts.map +0 -1
- package/dist/browser-api/dispatch-stream.js +0 -4
- package/dist/browser-api/dispatch-stream.js.map +0 -1
- package/dist/browser-api/dispatcher.d.ts +0 -15
- package/dist/browser-api/dispatcher.d.ts.map +0 -1
- package/dist/browser-api/dispatcher.js +0 -145
- package/dist/browser-api/dispatcher.js.map +0 -1
- package/dist/browser-api/provider-publisher.d.ts +0 -24
- package/dist/browser-api/provider-publisher.d.ts.map +0 -1
- package/dist/browser-api/provider-publisher.js +0 -107
- package/dist/browser-api/provider-publisher.js.map +0 -1
- package/dist/messages/browser/dispatch.msg.d.ts.map +0 -1
- package/dist/messages/browser/dispatch.msg.js +0 -9
- package/dist/messages/browser/dispatch.msg.js.map +0 -1
- package/dist/services/browser-api-provider.service.d.ts +0 -4
- package/dist/services/browser-api-provider.service.d.ts.map +0 -1
- package/dist/services/browser-api-provider.service.js +0 -25
- package/dist/services/browser-api-provider.service.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-store.js","sourceRoot":"","sources":["../../src/persistence/page-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAA0C,MAAM,SAAS,CAAC;AAG1F,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EACL,0BAA0B,EAC1B,oCAAoC,EACpC,2BAA2B,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAA2C,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"page-store.js","sourceRoot":"","sources":["../../src/persistence/page-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,11 @@ export interface PostInput {
|
|
|
13
13
|
export interface PostView extends BlogPostRow {
|
|
14
14
|
readonly tags: readonly BlogTagRow[];
|
|
15
15
|
}
|
|
16
|
+
export interface PublishedPostReference {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly slug: string;
|
|
19
|
+
readonly updatedAt: Date;
|
|
20
|
+
}
|
|
16
21
|
export interface PostConnections {
|
|
17
22
|
readonly previousPost: PostView | null;
|
|
18
23
|
readonly nextPost: PostView | null;
|
|
@@ -55,6 +60,13 @@ export declare class PostStore {
|
|
|
55
60
|
nextCursor: string | null;
|
|
56
61
|
total: number;
|
|
57
62
|
}>;
|
|
63
|
+
listPublishedReferences(input: {
|
|
64
|
+
readonly limit: number;
|
|
65
|
+
readonly cursor?: string;
|
|
66
|
+
}, signal?: AbortSignal): Promise<Readonly<{
|
|
67
|
+
items: readonly PublishedPostReference[];
|
|
68
|
+
nextCursor: string | null;
|
|
69
|
+
}>>;
|
|
58
70
|
listPublishedArchive(options: {
|
|
59
71
|
limit: number;
|
|
60
72
|
monthLimit: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-store.d.ts","sourceRoot":"","sources":["../../src/persistence/post-store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"post-store.d.ts","sourceRoot":"","sources":["../../src/persistence/post-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { And, Equal, ILike, In, LessThan, MoreThan, MoreThanOrEqual } from 'typeorm';
|
|
2
|
-
import { BlogConflictError, BlogCursorError, BlogNotFoundError, PostContentBlockedError } from '../blog/errors.js';
|
|
1
|
+
import { And, Equal, ILike, In, LessThan, MoreThan, MoreThanOrEqual, } from 'typeorm';
|
|
2
|
+
import { BlogConflictError, BlogCursorError, BlogNotFoundError, PostContentBlockedError, } from '../blog/errors.js';
|
|
3
3
|
import { auditPostContent } from '../blog/post-content-audit.js';
|
|
4
4
|
import { buildBlogPostArchivedEvent, buildBlogPostPublicationUpdatedEvent, buildBlogPostPublishedEvent, } from '../events/blog-domain-events.js';
|
|
5
5
|
import { BlogCategoryEntity, BlogPostEntity, BlogPostTagEntity, BlogTagEntity, } from './entities.js';
|
|
@@ -15,7 +15,8 @@ export class PostStore {
|
|
|
15
15
|
}
|
|
16
16
|
async countPublishedByCategory(signal) {
|
|
17
17
|
signal?.throwIfAborted();
|
|
18
|
-
const rows = await this.dataSource
|
|
18
|
+
const rows = await this.dataSource
|
|
19
|
+
.getRepository(BlogPostEntity)
|
|
19
20
|
.createQueryBuilder('post')
|
|
20
21
|
.select('post.categoryId', 'categoryId')
|
|
21
22
|
.addSelect('COUNT(post.id)', 'postCount')
|
|
@@ -23,44 +24,75 @@ export class PostStore {
|
|
|
23
24
|
.groupBy('post.categoryId')
|
|
24
25
|
.getRawMany();
|
|
25
26
|
signal?.throwIfAborted();
|
|
26
|
-
return new Map(rows.map(({ categoryId, postCount }) => [
|
|
27
|
+
return new Map(rows.map(({ categoryId, postCount }) => [
|
|
28
|
+
categoryId,
|
|
29
|
+
parsePostCount(postCount),
|
|
30
|
+
]));
|
|
27
31
|
}
|
|
28
32
|
async list(input, signal) {
|
|
29
33
|
signal?.throwIfAborted();
|
|
30
|
-
const base = {
|
|
31
|
-
|
|
34
|
+
const base = {
|
|
35
|
+
...(input.status ? { status: input.status } : {}),
|
|
36
|
+
...(input.categoryId ? { categoryId: input.categoryId } : {}),
|
|
37
|
+
};
|
|
38
|
+
const cursor = input.cursor
|
|
39
|
+
? await this.dataSource
|
|
40
|
+
.getRepository(BlogPostEntity)
|
|
41
|
+
.findOne({ where: { id: input.cursor, ...base } })
|
|
42
|
+
: undefined;
|
|
32
43
|
signal?.throwIfAborted();
|
|
33
44
|
if (input.cursor && !cursor)
|
|
34
45
|
throw new BlogCursorError('Post cursor not found in current filter');
|
|
35
46
|
const where = cursor
|
|
36
|
-
? [
|
|
47
|
+
? [
|
|
48
|
+
{ ...base, createdAt: LessThan(cursor.createdAt) },
|
|
49
|
+
{
|
|
50
|
+
...base,
|
|
51
|
+
createdAt: Equal(cursor.createdAt),
|
|
52
|
+
id: LessThan(cursor.id),
|
|
53
|
+
},
|
|
54
|
+
]
|
|
37
55
|
: base;
|
|
38
|
-
const posts = await this.dataSource
|
|
56
|
+
const posts = await this.dataSource
|
|
57
|
+
.getRepository(BlogPostEntity)
|
|
58
|
+
.find({
|
|
59
|
+
where,
|
|
60
|
+
order: { createdAt: 'DESC', id: 'DESC' },
|
|
61
|
+
take: input.limit + 1,
|
|
62
|
+
});
|
|
39
63
|
signal?.throwIfAborted();
|
|
40
64
|
const hasMore = posts.length > input.limit;
|
|
41
65
|
const bounded = hasMore ? posts.slice(0, input.limit) : posts;
|
|
42
|
-
return {
|
|
66
|
+
return {
|
|
67
|
+
items: await this.withTags(bounded, this.dataSource.manager, signal),
|
|
68
|
+
nextCursor: hasMore ? (bounded.at(-1)?.id ?? null) : null,
|
|
69
|
+
};
|
|
43
70
|
}
|
|
44
71
|
async listPublished(options, signal) {
|
|
45
72
|
signal?.throwIfAborted();
|
|
46
73
|
let categoryId;
|
|
47
74
|
let tagId;
|
|
48
75
|
if (options.categorySlug) {
|
|
49
|
-
const category = await this.dataSource
|
|
76
|
+
const category = await this.dataSource
|
|
77
|
+
.getRepository(BlogCategoryEntity)
|
|
78
|
+
.findOneBy({ slug: options.categorySlug });
|
|
50
79
|
signal?.throwIfAborted();
|
|
51
80
|
if (!category)
|
|
52
81
|
return { items: [], nextCursor: null, total: 0 };
|
|
53
82
|
categoryId = category.id;
|
|
54
83
|
}
|
|
55
84
|
if (options.tagSlug) {
|
|
56
|
-
const tag = await this.dataSource
|
|
85
|
+
const tag = await this.dataSource
|
|
86
|
+
.getRepository(BlogTagEntity)
|
|
87
|
+
.findOneBy({ slug: options.tagSlug });
|
|
57
88
|
signal?.throwIfAborted();
|
|
58
89
|
if (!tag)
|
|
59
90
|
return { items: [], nextCursor: null, total: 0 };
|
|
60
91
|
tagId = tag.id;
|
|
61
92
|
}
|
|
62
93
|
const base = {
|
|
63
|
-
status: 'published',
|
|
94
|
+
status: 'published',
|
|
95
|
+
...(categoryId ? { categoryId } : {}),
|
|
64
96
|
...(tagId ? { postTags: { tagId } } : {}),
|
|
65
97
|
};
|
|
66
98
|
const repository = this.dataSource.getRepository(BlogPostEntity);
|
|
@@ -76,7 +108,9 @@ export class PostStore {
|
|
|
76
108
|
signal?.throwIfAborted();
|
|
77
109
|
return {
|
|
78
110
|
items: await this.withTags(posts, this.dataSource.manager, signal),
|
|
79
|
-
nextCursor: options.page * options.limit < total
|
|
111
|
+
nextCursor: options.page * options.limit < total
|
|
112
|
+
? (posts.at(-1)?.id ?? null)
|
|
113
|
+
: null,
|
|
80
114
|
total,
|
|
81
115
|
};
|
|
82
116
|
}
|
|
@@ -91,16 +125,69 @@ export class PostStore {
|
|
|
91
125
|
const where = cursor?.publishedAt
|
|
92
126
|
? [
|
|
93
127
|
{ ...base, publishedAt: LessThan(cursor.publishedAt) },
|
|
94
|
-
{
|
|
128
|
+
{
|
|
129
|
+
...base,
|
|
130
|
+
publishedAt: Equal(cursor.publishedAt),
|
|
131
|
+
id: LessThan(cursor.id),
|
|
132
|
+
},
|
|
95
133
|
]
|
|
96
134
|
: base;
|
|
97
135
|
const posts = await repository.find({
|
|
98
|
-
where,
|
|
136
|
+
where,
|
|
137
|
+
order: { publishedAt: 'DESC', id: 'DESC' },
|
|
138
|
+
take: options.limit + 1,
|
|
99
139
|
});
|
|
100
140
|
signal?.throwIfAborted();
|
|
101
141
|
const hasMore = posts.length > options.limit;
|
|
102
142
|
const bounded = hasMore ? posts.slice(0, options.limit) : posts;
|
|
103
|
-
return {
|
|
143
|
+
return {
|
|
144
|
+
items: await this.withTags(bounded, this.dataSource.manager, signal),
|
|
145
|
+
nextCursor: hasMore ? (bounded.at(-1)?.id ?? null) : null,
|
|
146
|
+
total,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
async listPublishedReferences(input, signal) {
|
|
150
|
+
signal?.throwIfAborted();
|
|
151
|
+
const repository = this.dataSource.getRepository(BlogPostEntity);
|
|
152
|
+
const cursor = input.cursor
|
|
153
|
+
? await repository.findOne({
|
|
154
|
+
select: { id: true, publishedAt: true },
|
|
155
|
+
where: { id: input.cursor, status: 'published' },
|
|
156
|
+
})
|
|
157
|
+
: undefined;
|
|
158
|
+
signal?.throwIfAborted();
|
|
159
|
+
if (input.cursor && !cursor)
|
|
160
|
+
throw new BlogCursorError('Post cursor not found in current filter');
|
|
161
|
+
if (cursor && !cursor.publishedAt)
|
|
162
|
+
throw new Error('Published post cursor is incomplete');
|
|
163
|
+
const base = { status: 'published' };
|
|
164
|
+
const where = cursor
|
|
165
|
+
? [
|
|
166
|
+
{ ...base, publishedAt: LessThan(cursor.publishedAt) },
|
|
167
|
+
{
|
|
168
|
+
...base,
|
|
169
|
+
publishedAt: Equal(cursor.publishedAt),
|
|
170
|
+
id: LessThan(cursor.id),
|
|
171
|
+
},
|
|
172
|
+
]
|
|
173
|
+
: base;
|
|
174
|
+
const rows = await repository.find({
|
|
175
|
+
select: { id: true, slug: true, updatedAt: true, publishedAt: true },
|
|
176
|
+
where,
|
|
177
|
+
order: { publishedAt: 'DESC', id: 'DESC' },
|
|
178
|
+
take: input.limit + 1,
|
|
179
|
+
});
|
|
180
|
+
signal?.throwIfAborted();
|
|
181
|
+
const hasMore = rows.length > input.limit;
|
|
182
|
+
const bounded = hasMore ? rows.slice(0, input.limit) : rows;
|
|
183
|
+
return {
|
|
184
|
+
items: bounded.map(({ id, slug, updatedAt }) => ({
|
|
185
|
+
id,
|
|
186
|
+
slug,
|
|
187
|
+
updatedAt,
|
|
188
|
+
})),
|
|
189
|
+
nextCursor: hasMore ? (bounded.at(-1)?.id ?? null) : null,
|
|
190
|
+
};
|
|
104
191
|
}
|
|
105
192
|
async listPublishedArchive(options, signal) {
|
|
106
193
|
signal?.throwIfAborted();
|
|
@@ -136,7 +223,9 @@ export class PostStore {
|
|
|
136
223
|
return {
|
|
137
224
|
items: await this.withTags(posts, this.dataSource.manager, signal),
|
|
138
225
|
months,
|
|
139
|
-
nextCursor: options.page * options.limit < total
|
|
226
|
+
nextCursor: options.page * options.limit < total
|
|
227
|
+
? (posts.at(-1)?.id ?? null)
|
|
228
|
+
: null,
|
|
140
229
|
total,
|
|
141
230
|
};
|
|
142
231
|
}
|
|
@@ -156,11 +245,17 @@ export class PostStore {
|
|
|
156
245
|
? And(publishedAt, LessThan(cursor.publishedAt))
|
|
157
246
|
: LessThan(cursor.publishedAt),
|
|
158
247
|
},
|
|
159
|
-
{
|
|
248
|
+
{
|
|
249
|
+
...base,
|
|
250
|
+
publishedAt: Equal(cursor.publishedAt),
|
|
251
|
+
id: LessThan(cursor.id),
|
|
252
|
+
},
|
|
160
253
|
]
|
|
161
254
|
: base;
|
|
162
255
|
const posts = await repository.find({
|
|
163
|
-
where,
|
|
256
|
+
where,
|
|
257
|
+
order: { publishedAt: 'DESC', id: 'DESC' },
|
|
258
|
+
take: options.limit + 1,
|
|
164
259
|
});
|
|
165
260
|
signal?.throwIfAborted();
|
|
166
261
|
const hasMore = posts.length > options.limit;
|
|
@@ -168,7 +263,7 @@ export class PostStore {
|
|
|
168
263
|
return {
|
|
169
264
|
items: await this.withTags(bounded, this.dataSource.manager, signal),
|
|
170
265
|
months,
|
|
171
|
-
nextCursor: hasMore ? bounded.at(-1)?.id ?? null : null,
|
|
266
|
+
nextCursor: hasMore ? (bounded.at(-1)?.id ?? null) : null,
|
|
172
267
|
total,
|
|
173
268
|
};
|
|
174
269
|
}
|
|
@@ -190,7 +285,9 @@ export class PostStore {
|
|
|
190
285
|
}
|
|
191
286
|
async read(id, signal) {
|
|
192
287
|
signal?.throwIfAborted();
|
|
193
|
-
const post = await this.dataSource
|
|
288
|
+
const post = await this.dataSource
|
|
289
|
+
.getRepository(BlogPostEntity)
|
|
290
|
+
.findOneBy({ id });
|
|
194
291
|
signal?.throwIfAborted();
|
|
195
292
|
if (!post)
|
|
196
293
|
throw new BlogNotFoundError('Post not found');
|
|
@@ -198,9 +295,13 @@ export class PostStore {
|
|
|
198
295
|
}
|
|
199
296
|
async readPublishedBySlug(slug, signal) {
|
|
200
297
|
signal?.throwIfAborted();
|
|
201
|
-
const post = await this.dataSource
|
|
298
|
+
const post = await this.dataSource
|
|
299
|
+
.getRepository(BlogPostEntity)
|
|
300
|
+
.findOneBy({ slug, status: 'published' });
|
|
202
301
|
signal?.throwIfAborted();
|
|
203
|
-
return post
|
|
302
|
+
return post
|
|
303
|
+
? (await this.withTags([post], this.dataSource.manager, signal))[0]
|
|
304
|
+
: undefined;
|
|
204
305
|
}
|
|
205
306
|
async readPublishedByIds(ids, signal) {
|
|
206
307
|
signal?.throwIfAborted();
|
|
@@ -222,7 +323,11 @@ export class PostStore {
|
|
|
222
323
|
const previous = await repository.find({
|
|
223
324
|
where: [
|
|
224
325
|
{ status: 'published', publishedAt: LessThan(current.publishedAt) },
|
|
225
|
-
{
|
|
326
|
+
{
|
|
327
|
+
status: 'published',
|
|
328
|
+
publishedAt: Equal(current.publishedAt),
|
|
329
|
+
id: LessThan(current.id),
|
|
330
|
+
},
|
|
226
331
|
],
|
|
227
332
|
order: { publishedAt: 'DESC', id: 'DESC' },
|
|
228
333
|
take: 1,
|
|
@@ -231,7 +336,11 @@ export class PostStore {
|
|
|
231
336
|
const next = await repository.find({
|
|
232
337
|
where: [
|
|
233
338
|
{ status: 'published', publishedAt: MoreThan(current.publishedAt) },
|
|
234
|
-
{
|
|
339
|
+
{
|
|
340
|
+
status: 'published',
|
|
341
|
+
publishedAt: Equal(current.publishedAt),
|
|
342
|
+
id: MoreThan(current.id),
|
|
343
|
+
},
|
|
235
344
|
],
|
|
236
345
|
order: { publishedAt: 'ASC', id: 'ASC' },
|
|
237
346
|
take: 1,
|
|
@@ -241,14 +350,13 @@ export class PostStore {
|
|
|
241
350
|
? await this.listRelated(current.id, relatedLimit, signal)
|
|
242
351
|
: [];
|
|
243
352
|
signal?.throwIfAborted();
|
|
244
|
-
const adjacentPosts = await this.withTags([
|
|
245
|
-
...(previous[0] ? [previous[0]] : []),
|
|
246
|
-
...(next[0] ? [next[0]] : []),
|
|
247
|
-
], this.dataSource.manager, signal);
|
|
353
|
+
const adjacentPosts = await this.withTags([...(previous[0] ? [previous[0]] : []), ...(next[0] ? [next[0]] : [])], this.dataSource.manager, signal);
|
|
248
354
|
const adjacentById = new Map(adjacentPosts.map((post) => [post.id, post]));
|
|
249
355
|
return {
|
|
250
|
-
previousPost: previous[0]
|
|
251
|
-
|
|
356
|
+
previousPost: previous[0]
|
|
357
|
+
? (adjacentById.get(previous[0].id) ?? null)
|
|
358
|
+
: null,
|
|
359
|
+
nextPost: next[0] ? (adjacentById.get(next[0].id) ?? null) : null,
|
|
252
360
|
relatedPosts: related,
|
|
253
361
|
};
|
|
254
362
|
}
|
|
@@ -259,7 +367,10 @@ export class PostStore {
|
|
|
259
367
|
signal?.throwIfAborted();
|
|
260
368
|
const repository = manager.getRepository(BlogPostEntity);
|
|
261
369
|
const post = await repository.save(repository.create({
|
|
262
|
-
...withoutTagIds(input),
|
|
370
|
+
...withoutTagIds(input),
|
|
371
|
+
status: 'draft',
|
|
372
|
+
publishedAt: null,
|
|
373
|
+
viewCount: 0,
|
|
263
374
|
}));
|
|
264
375
|
signal?.throwIfAborted();
|
|
265
376
|
await this.replaceTags(manager, post.id, input.tagIds, signal);
|
|
@@ -271,7 +382,8 @@ export class PostStore {
|
|
|
271
382
|
signal?.throwIfAborted();
|
|
272
383
|
const result = await this.dataSource.transaction(async (manager) => {
|
|
273
384
|
const current = await manager.getRepository(BlogPostEntity).findOne({
|
|
274
|
-
where: { id },
|
|
385
|
+
where: { id },
|
|
386
|
+
lock: { mode: 'pessimistic_write' },
|
|
275
387
|
});
|
|
276
388
|
signal?.throwIfAborted();
|
|
277
389
|
if (!current)
|
|
@@ -285,11 +397,15 @@ export class PostStore {
|
|
|
285
397
|
if (!changedFields.length)
|
|
286
398
|
return { value: currentView };
|
|
287
399
|
const occurredAt = this.clock();
|
|
288
|
-
await manager
|
|
400
|
+
await manager
|
|
401
|
+
.getRepository(BlogPostEntity)
|
|
402
|
+
.update({ id }, { ...withoutTagIds(input), updatedAt: occurredAt });
|
|
289
403
|
signal?.throwIfAborted();
|
|
290
404
|
await this.replaceTags(manager, id, input.tagIds, signal);
|
|
291
405
|
signal?.throwIfAborted();
|
|
292
|
-
const post = await manager
|
|
406
|
+
const post = await manager
|
|
407
|
+
.getRepository(BlogPostEntity)
|
|
408
|
+
.findOneByOrFail({ id });
|
|
293
409
|
signal?.throwIfAborted();
|
|
294
410
|
const updated = (await this.withTags([post], manager, signal))[0];
|
|
295
411
|
const event = current.status === 'published'
|
|
@@ -305,22 +421,34 @@ export class PostStore {
|
|
|
305
421
|
signal?.throwIfAborted();
|
|
306
422
|
const result = await this.dataSource.transaction(async (manager) => {
|
|
307
423
|
const repository = manager.getRepository(BlogPostEntity);
|
|
308
|
-
const post = await repository.findOne({
|
|
424
|
+
const post = await repository.findOne({
|
|
425
|
+
where: { id },
|
|
426
|
+
lock: { mode: 'pessimistic_write' },
|
|
427
|
+
});
|
|
309
428
|
signal?.throwIfAborted();
|
|
310
429
|
if (!post)
|
|
311
430
|
throw new BlogNotFoundError('Post not found');
|
|
312
431
|
assertPublishableContent(post);
|
|
313
432
|
if (post.status !== 'published') {
|
|
314
433
|
const occurredAt = this.clock();
|
|
315
|
-
await repository.update({ id }, {
|
|
434
|
+
await repository.update({ id }, {
|
|
435
|
+
status: 'published',
|
|
436
|
+
publishedAt: occurredAt,
|
|
437
|
+
updatedAt: occurredAt,
|
|
438
|
+
});
|
|
316
439
|
signal?.throwIfAborted();
|
|
317
440
|
const updated = await repository.findOneByOrFail({ id });
|
|
318
441
|
const view = (await this.withTags([updated], manager, signal))[0];
|
|
319
|
-
return {
|
|
442
|
+
return {
|
|
443
|
+
value: view,
|
|
444
|
+
event: await buildBlogPostPublishedEvent(manager, view, occurredAt),
|
|
445
|
+
};
|
|
320
446
|
}
|
|
321
447
|
const updated = await repository.findOneByOrFail({ id });
|
|
322
448
|
signal?.throwIfAborted();
|
|
323
|
-
return {
|
|
449
|
+
return {
|
|
450
|
+
value: (await this.withTags([updated], manager, signal))[0],
|
|
451
|
+
};
|
|
324
452
|
});
|
|
325
453
|
if (result.event)
|
|
326
454
|
await this.events.publish(result.event);
|
|
@@ -330,7 +458,10 @@ export class PostStore {
|
|
|
330
458
|
signal?.throwIfAborted();
|
|
331
459
|
const result = await this.dataSource.transaction(async (manager) => {
|
|
332
460
|
const repository = manager.getRepository(BlogPostEntity);
|
|
333
|
-
const post = await repository.findOne({
|
|
461
|
+
const post = await repository.findOne({
|
|
462
|
+
where: { id },
|
|
463
|
+
lock: { mode: 'pessimistic_write' },
|
|
464
|
+
});
|
|
334
465
|
signal?.throwIfAborted();
|
|
335
466
|
if (!post)
|
|
336
467
|
throw new BlogNotFoundError('Post not found');
|
|
@@ -340,12 +471,16 @@ export class PostStore {
|
|
|
340
471
|
signal?.throwIfAborted();
|
|
341
472
|
const updated = await repository.findOneByOrFail({ id });
|
|
342
473
|
const view = (await this.withTags([updated], manager, signal))[0];
|
|
343
|
-
const event = post.status === 'published'
|
|
474
|
+
const event = post.status === 'published'
|
|
475
|
+
? await buildBlogPostArchivedEvent(manager, view, occurredAt)
|
|
476
|
+
: undefined;
|
|
344
477
|
return { value: view, event };
|
|
345
478
|
}
|
|
346
479
|
const updated = await repository.findOneByOrFail({ id });
|
|
347
480
|
signal?.throwIfAborted();
|
|
348
|
-
return {
|
|
481
|
+
return {
|
|
482
|
+
value: (await this.withTags([updated], manager, signal))[0],
|
|
483
|
+
};
|
|
349
484
|
});
|
|
350
485
|
if (result.event)
|
|
351
486
|
await this.events.publish(result.event);
|
|
@@ -355,7 +490,10 @@ export class PostStore {
|
|
|
355
490
|
signal?.throwIfAborted();
|
|
356
491
|
return this.dataSource.transaction(async (manager) => {
|
|
357
492
|
const repository = manager.getRepository(BlogPostEntity);
|
|
358
|
-
const post = await repository.findOne({
|
|
493
|
+
const post = await repository.findOne({
|
|
494
|
+
where: { id },
|
|
495
|
+
lock: { mode: 'pessimistic_write' },
|
|
496
|
+
});
|
|
359
497
|
signal?.throwIfAborted();
|
|
360
498
|
if (!post)
|
|
361
499
|
throw new BlogNotFoundError('Post not found');
|
|
@@ -367,7 +505,9 @@ export class PostStore {
|
|
|
367
505
|
}
|
|
368
506
|
async assertReferences(manager, input, signal) {
|
|
369
507
|
signal?.throwIfAborted();
|
|
370
|
-
const category = await manager
|
|
508
|
+
const category = await manager
|
|
509
|
+
.getRepository(BlogCategoryEntity)
|
|
510
|
+
.findOneBy({ id: input.categoryId });
|
|
371
511
|
signal?.throwIfAborted();
|
|
372
512
|
if (!category)
|
|
373
513
|
throw new BlogNotFoundError('Category not found');
|
|
@@ -377,7 +517,9 @@ export class PostStore {
|
|
|
377
517
|
throw new BlogConflictError('Post cannot contain more than 20 tags');
|
|
378
518
|
if (!input.tagIds.length)
|
|
379
519
|
return;
|
|
380
|
-
const tags = await manager
|
|
520
|
+
const tags = await manager
|
|
521
|
+
.getRepository(BlogTagEntity)
|
|
522
|
+
.countBy({ id: In([...input.tagIds]) });
|
|
381
523
|
signal?.throwIfAborted();
|
|
382
524
|
if (tags !== input.tagIds.length)
|
|
383
525
|
throw new BlogNotFoundError('Tag not found');
|
|
@@ -387,7 +529,9 @@ export class PostStore {
|
|
|
387
529
|
await manager.getRepository(BlogPostTagEntity).delete({ postId });
|
|
388
530
|
signal?.throwIfAborted();
|
|
389
531
|
if (tagIds.length) {
|
|
390
|
-
await manager
|
|
532
|
+
await manager
|
|
533
|
+
.getRepository(BlogPostTagEntity)
|
|
534
|
+
.insert(tagIds.map((tagId) => ({ postId, tagId })));
|
|
391
535
|
signal?.throwIfAborted();
|
|
392
536
|
}
|
|
393
537
|
}
|
|
@@ -396,10 +540,14 @@ export class PostStore {
|
|
|
396
540
|
if (!posts.length)
|
|
397
541
|
return [];
|
|
398
542
|
const postIds = posts.map(({ id }) => id);
|
|
399
|
-
const links = await manager
|
|
543
|
+
const links = await manager
|
|
544
|
+
.getRepository(BlogPostTagEntity)
|
|
545
|
+
.findBy({ postId: In(postIds) });
|
|
400
546
|
signal?.throwIfAborted();
|
|
401
547
|
const tagIds = [...new Set(links.map(({ tagId }) => tagId))];
|
|
402
|
-
const tags = tagIds.length
|
|
548
|
+
const tags = tagIds.length
|
|
549
|
+
? await manager.getRepository(BlogTagEntity).findBy({ id: In(tagIds) })
|
|
550
|
+
: [];
|
|
403
551
|
signal?.throwIfAborted();
|
|
404
552
|
const tagById = new Map(tags.map((tag) => [tag.id, tag]));
|
|
405
553
|
const tagsByPost = new Map();
|
|
@@ -411,15 +559,21 @@ export class PostStore {
|
|
|
411
559
|
current.push(tag);
|
|
412
560
|
tagsByPost.set(link.postId, current);
|
|
413
561
|
}
|
|
414
|
-
return posts.map((post) => ({
|
|
562
|
+
return posts.map((post) => ({
|
|
563
|
+
...post,
|
|
564
|
+
tags: tagsByPost.get(post.id) ?? [],
|
|
565
|
+
}));
|
|
415
566
|
}
|
|
416
567
|
async listRelated(postId, limit, signal) {
|
|
417
|
-
const currentLinks = await this.dataSource
|
|
568
|
+
const currentLinks = await this.dataSource
|
|
569
|
+
.getRepository(BlogPostTagEntity)
|
|
570
|
+
.findBy({ postId });
|
|
418
571
|
signal?.throwIfAborted();
|
|
419
572
|
if (!currentLinks.length)
|
|
420
573
|
return [];
|
|
421
574
|
const tagIds = currentLinks.map(({ tagId }) => tagId);
|
|
422
|
-
const ranked = await this.dataSource
|
|
575
|
+
const ranked = await this.dataSource
|
|
576
|
+
.getRepository(BlogPostTagEntity)
|
|
423
577
|
.createQueryBuilder('postTag')
|
|
424
578
|
.select('postTag.postId', 'postId')
|
|
425
579
|
.addSelect('COUNT(postTag.tagId)', 'sharedTagCount')
|
|
@@ -439,10 +593,12 @@ export class PostStore {
|
|
|
439
593
|
const ids = ranked.map(({ postId: id }) => id);
|
|
440
594
|
if (!ids.length)
|
|
441
595
|
return [];
|
|
442
|
-
const posts = await this.dataSource
|
|
596
|
+
const posts = await this.dataSource
|
|
597
|
+
.getRepository(BlogPostEntity)
|
|
598
|
+
.findBy({ id: In(ids) });
|
|
443
599
|
signal?.throwIfAborted();
|
|
444
600
|
const byId = new Map(posts.map((post) => [post.id, post]));
|
|
445
|
-
return this.withTags(ids.flatMap((id) => byId.get(id) ? [byId.get(id)] : []), this.dataSource.manager, signal);
|
|
601
|
+
return this.withTags(ids.flatMap((id) => (byId.get(id) ? [byId.get(id)] : [])), this.dataSource.manager, signal);
|
|
446
602
|
}
|
|
447
603
|
}
|
|
448
604
|
function parsePostCount(value) {
|
|
@@ -459,13 +615,21 @@ function assertPublishableContent(input) {
|
|
|
459
615
|
}
|
|
460
616
|
function postChangedFields(current, input) {
|
|
461
617
|
const changed = [];
|
|
462
|
-
for (const field of [
|
|
618
|
+
for (const field of [
|
|
619
|
+
'categoryId',
|
|
620
|
+
'title',
|
|
621
|
+
'slug',
|
|
622
|
+
'summary',
|
|
623
|
+
'coverUrl',
|
|
624
|
+
'content',
|
|
625
|
+
]) {
|
|
463
626
|
if (current[field] !== input[field])
|
|
464
627
|
changed.push(field);
|
|
465
628
|
}
|
|
466
629
|
const currentTags = current.tags.map(({ id }) => id).sort();
|
|
467
630
|
const nextTags = [...input.tagIds].sort();
|
|
468
|
-
if (currentTags.length !== nextTags.length ||
|
|
631
|
+
if (currentTags.length !== nextTags.length ||
|
|
632
|
+
currentTags.some((id, index) => id !== nextTags[index])) {
|
|
469
633
|
changed.push('tagIds');
|
|
470
634
|
}
|
|
471
635
|
return changed;
|
|
@@ -474,18 +638,32 @@ function escapeLikePattern(value) {
|
|
|
474
638
|
return value.replace(/[\\%_]/g, (character) => `\\${character}`);
|
|
475
639
|
}
|
|
476
640
|
function archivePublishedAtRange(options) {
|
|
477
|
-
const isRange = options.startYear !== undefined &&
|
|
478
|
-
|
|
641
|
+
const isRange = options.startYear !== undefined &&
|
|
642
|
+
options.startMonth !== undefined &&
|
|
643
|
+
options.endYear !== undefined &&
|
|
644
|
+
options.endMonth !== undefined;
|
|
479
645
|
if (!isRange && options.year === undefined)
|
|
480
646
|
return undefined;
|
|
481
|
-
const startYear = isRange
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
const
|
|
647
|
+
const startYear = isRange
|
|
648
|
+
? options.startYear
|
|
649
|
+
: options.year;
|
|
650
|
+
const startMonth = isRange
|
|
651
|
+
? options.startMonth - 1
|
|
652
|
+
: options.month === undefined
|
|
653
|
+
? 0
|
|
654
|
+
: options.month - 1;
|
|
655
|
+
const selectedEndYear = isRange
|
|
656
|
+
? options.endYear
|
|
657
|
+
: options.year;
|
|
658
|
+
const selectedEndMonth = isRange
|
|
659
|
+
? options.endMonth
|
|
660
|
+
: options.month;
|
|
485
661
|
const endYear = selectedEndMonth === undefined || selectedEndMonth === 12
|
|
486
662
|
? selectedEndYear + 1
|
|
487
663
|
: selectedEndYear;
|
|
488
|
-
const endMonth = selectedEndMonth === undefined || selectedEndMonth === 12
|
|
664
|
+
const endMonth = selectedEndMonth === undefined || selectedEndMonth === 12
|
|
665
|
+
? 0
|
|
666
|
+
: selectedEndMonth;
|
|
489
667
|
return And(MoreThanOrEqual(new Date(Date.UTC(startYear, startMonth, 1))), LessThan(new Date(Date.UTC(endYear, endMonth, 1))));
|
|
490
668
|
}
|
|
491
669
|
function aggregateArchiveMonths(posts, limit) {
|