@jhits/plugin-blog 0.0.9 → 0.0.11

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.
Files changed (276) hide show
  1. package/package.json +58 -59
  2. package/src/api/categories.ts +0 -43
  3. package/src/api/check-title.ts +0 -60
  4. package/src/api/config-handler.ts +0 -76
  5. package/src/api/handler.ts +0 -418
  6. package/src/api/index.ts +0 -33
  7. package/src/api/route.ts +0 -116
  8. package/src/api/router.ts +0 -128
  9. package/src/api-server.ts +0 -11
  10. package/src/config.ts +0 -161
  11. package/src/hooks/index.d.ts +0 -8
  12. package/src/hooks/index.d.ts.map +0 -1
  13. package/src/hooks/index.js +0 -7
  14. package/src/hooks/index.ts +0 -9
  15. package/src/hooks/useBlog.d.ts +0 -31
  16. package/src/hooks/useBlog.d.ts.map +0 -1
  17. package/src/hooks/useBlog.js +0 -57
  18. package/src/hooks/useBlog.ts +0 -85
  19. package/src/hooks/useBlogs.d.ts +0 -39
  20. package/src/hooks/useBlogs.d.ts.map +0 -1
  21. package/src/hooks/useBlogs.js +0 -82
  22. package/src/hooks/useBlogs.ts +0 -123
  23. package/src/hooks/useCategories.d.ts +0 -9
  24. package/src/hooks/useCategories.d.ts.map +0 -1
  25. package/src/hooks/useCategories.js +0 -70
  26. package/src/hooks/useCategories.ts +0 -76
  27. package/src/index.d.ts +0 -55
  28. package/src/index.d.ts.map +0 -1
  29. package/src/index.js +0 -228
  30. package/src/index.server.ts +0 -14
  31. package/src/index.tsx +0 -335
  32. package/src/init.d.ts +0 -40
  33. package/src/init.d.ts.map +0 -1
  34. package/src/init.js +0 -41
  35. package/src/init.tsx +0 -63
  36. package/src/lib/blocks/BlockRenderer.d.ts +0 -54
  37. package/src/lib/blocks/BlockRenderer.d.ts.map +0 -1
  38. package/src/lib/blocks/BlockRenderer.js +0 -54
  39. package/src/lib/blocks/BlockRenderer.tsx +0 -141
  40. package/src/lib/blocks/index.ts +0 -6
  41. package/src/lib/config-storage.d.ts +0 -30
  42. package/src/lib/config-storage.d.ts.map +0 -1
  43. package/src/lib/config-storage.js +0 -31
  44. package/src/lib/config-storage.ts +0 -65
  45. package/src/lib/index.ts +0 -9
  46. package/src/lib/layouts/blocks/ColumnsBlock.d.ts +0 -25
  47. package/src/lib/layouts/blocks/ColumnsBlock.d.ts.map +0 -1
  48. package/src/lib/layouts/blocks/ColumnsBlock.js +0 -182
  49. package/src/lib/layouts/blocks/ColumnsBlock.tsx +0 -298
  50. package/src/lib/layouts/blocks/ColumnsBlock.tsx.tmp +0 -81
  51. package/src/lib/layouts/blocks/SectionBlock.d.ts +0 -25
  52. package/src/lib/layouts/blocks/SectionBlock.d.ts.map +0 -1
  53. package/src/lib/layouts/blocks/SectionBlock.js +0 -44
  54. package/src/lib/layouts/blocks/SectionBlock.tsx +0 -104
  55. package/src/lib/layouts/blocks/index.ts +0 -8
  56. package/src/lib/layouts/index.d.ts +0 -23
  57. package/src/lib/layouts/index.d.ts.map +0 -1
  58. package/src/lib/layouts/index.js +0 -45
  59. package/src/lib/layouts/index.ts +0 -52
  60. package/src/lib/layouts/registerLayoutBlocks.d.ts +0 -9
  61. package/src/lib/layouts/registerLayoutBlocks.d.ts.map +0 -1
  62. package/src/lib/layouts/registerLayoutBlocks.js +0 -60
  63. package/src/lib/layouts/registerLayoutBlocks.ts +0 -64
  64. package/src/lib/mappers/apiMapper.d.ts +0 -66
  65. package/src/lib/mappers/apiMapper.d.ts.map +0 -1
  66. package/src/lib/mappers/apiMapper.js +0 -191
  67. package/src/lib/mappers/apiMapper.ts +0 -254
  68. package/src/lib/migration/index.ts +0 -6
  69. package/src/lib/migration/mapper.ts +0 -140
  70. package/src/lib/rich-text/RichTextEditor.d.ts +0 -45
  71. package/src/lib/rich-text/RichTextEditor.d.ts.map +0 -1
  72. package/src/lib/rich-text/RichTextEditor.js +0 -564
  73. package/src/lib/rich-text/RichTextEditor.tsx +0 -826
  74. package/src/lib/rich-text/RichTextPreview.d.ts +0 -16
  75. package/src/lib/rich-text/RichTextPreview.d.ts.map +0 -1
  76. package/src/lib/rich-text/RichTextPreview.js +0 -144
  77. package/src/lib/rich-text/RichTextPreview.tsx +0 -210
  78. package/src/lib/rich-text/index.d.ts +0 -9
  79. package/src/lib/rich-text/index.d.ts.map +0 -1
  80. package/src/lib/rich-text/index.js +0 -6
  81. package/src/lib/rich-text/index.ts +0 -10
  82. package/src/lib/utils/blockHelpers.d.ts +0 -23
  83. package/src/lib/utils/blockHelpers.d.ts.map +0 -1
  84. package/src/lib/utils/blockHelpers.js +0 -65
  85. package/src/lib/utils/blockHelpers.ts +0 -72
  86. package/src/lib/utils/configValidation.d.ts +0 -23
  87. package/src/lib/utils/configValidation.d.ts.map +0 -1
  88. package/src/lib/utils/configValidation.js +0 -113
  89. package/src/lib/utils/configValidation.ts +0 -137
  90. package/src/lib/utils/index.ts +0 -8
  91. package/src/lib/utils/slugify.ts +0 -79
  92. package/src/registry/BlockRegistry.d.ts +0 -62
  93. package/src/registry/BlockRegistry.d.ts.map +0 -1
  94. package/src/registry/BlockRegistry.js +0 -112
  95. package/src/registry/BlockRegistry.ts +0 -139
  96. package/src/registry/index.d.ts +0 -6
  97. package/src/registry/index.d.ts.map +0 -1
  98. package/src/registry/index.js +0 -4
  99. package/src/registry/index.ts +0 -11
  100. package/src/state/EditorContext.d.ts +0 -45
  101. package/src/state/EditorContext.d.ts.map +0 -1
  102. package/src/state/EditorContext.js +0 -215
  103. package/src/state/EditorContext.tsx +0 -283
  104. package/src/state/index.d.ts +0 -7
  105. package/src/state/index.d.ts.map +0 -1
  106. package/src/state/index.js +0 -6
  107. package/src/state/index.ts +0 -8
  108. package/src/state/reducer.d.ts +0 -11
  109. package/src/state/reducer.d.ts.map +0 -1
  110. package/src/state/reducer.js +0 -443
  111. package/src/state/reducer.ts +0 -694
  112. package/src/state/types.d.ts +0 -162
  113. package/src/state/types.d.ts.map +0 -1
  114. package/src/state/types.js +0 -27
  115. package/src/state/types.ts +0 -160
  116. package/src/types/block.d.ts +0 -221
  117. package/src/types/block.d.ts.map +0 -1
  118. package/src/types/block.js +0 -6
  119. package/src/types/block.ts +0 -269
  120. package/src/types/index.d.ts +0 -8
  121. package/src/types/index.d.ts.map +0 -1
  122. package/src/types/index.js +0 -5
  123. package/src/types/index.ts +0 -17
  124. package/src/types/post.d.ts +0 -136
  125. package/src/types/post.d.ts.map +0 -1
  126. package/src/types/post.js +0 -5
  127. package/src/types/post.ts +0 -169
  128. package/src/utils/client.d.ts +0 -48
  129. package/src/utils/client.d.ts.map +0 -1
  130. package/src/utils/client.js +0 -77
  131. package/src/utils/client.ts +0 -122
  132. package/src/utils/index.ts +0 -7
  133. package/src/views/CanvasEditor/BlockWrapper.d.ts +0 -16
  134. package/src/views/CanvasEditor/BlockWrapper.d.ts.map +0 -1
  135. package/src/views/CanvasEditor/BlockWrapper.js +0 -276
  136. package/src/views/CanvasEditor/BlockWrapper.tsx +0 -522
  137. package/src/views/CanvasEditor/CanvasEditorView.d.ts +0 -14
  138. package/src/views/CanvasEditor/CanvasEditorView.d.ts.map +0 -1
  139. package/src/views/CanvasEditor/CanvasEditorView.js +0 -209
  140. package/src/views/CanvasEditor/CanvasEditorView.tsx +0 -337
  141. package/src/views/CanvasEditor/EditorBody.d.ts +0 -22
  142. package/src/views/CanvasEditor/EditorBody.d.ts.map +0 -1
  143. package/src/views/CanvasEditor/EditorBody.js +0 -505
  144. package/src/views/CanvasEditor/EditorBody.tsx +0 -665
  145. package/src/views/CanvasEditor/EditorHeader.d.ts +0 -18
  146. package/src/views/CanvasEditor/EditorHeader.d.ts.map +0 -1
  147. package/src/views/CanvasEditor/EditorHeader.js +0 -101
  148. package/src/views/CanvasEditor/EditorHeader.tsx +0 -268
  149. package/src/views/CanvasEditor/LayoutContainer.d.ts +0 -17
  150. package/src/views/CanvasEditor/LayoutContainer.d.ts.map +0 -1
  151. package/src/views/CanvasEditor/LayoutContainer.js +0 -222
  152. package/src/views/CanvasEditor/LayoutContainer.tsx +0 -322
  153. package/src/views/CanvasEditor/SaveConfirmationModal.d.ts +0 -13
  154. package/src/views/CanvasEditor/SaveConfirmationModal.d.ts.map +0 -1
  155. package/src/views/CanvasEditor/SaveConfirmationModal.js +0 -78
  156. package/src/views/CanvasEditor/SaveConfirmationModal.tsx +0 -233
  157. package/src/views/CanvasEditor/components/CustomBlockItem.d.ts +0 -14
  158. package/src/views/CanvasEditor/components/CustomBlockItem.d.ts.map +0 -1
  159. package/src/views/CanvasEditor/components/CustomBlockItem.js +0 -44
  160. package/src/views/CanvasEditor/components/CustomBlockItem.tsx +0 -92
  161. package/src/views/CanvasEditor/components/EditorCanvas.d.ts +0 -29
  162. package/src/views/CanvasEditor/components/EditorCanvas.d.ts.map +0 -1
  163. package/src/views/CanvasEditor/components/EditorCanvas.js +0 -32
  164. package/src/views/CanvasEditor/components/EditorCanvas.tsx +0 -160
  165. package/src/views/CanvasEditor/components/EditorLibrary.d.ts +0 -7
  166. package/src/views/CanvasEditor/components/EditorLibrary.d.ts.map +0 -1
  167. package/src/views/CanvasEditor/components/EditorLibrary.js +0 -25
  168. package/src/views/CanvasEditor/components/EditorLibrary.tsx +0 -122
  169. package/src/views/CanvasEditor/components/EditorSidebar.d.ts +0 -13
  170. package/src/views/CanvasEditor/components/EditorSidebar.d.ts.map +0 -1
  171. package/src/views/CanvasEditor/components/EditorSidebar.js +0 -20
  172. package/src/views/CanvasEditor/components/EditorSidebar.tsx +0 -181
  173. package/src/views/CanvasEditor/components/ErrorBanner.d.ts +0 -6
  174. package/src/views/CanvasEditor/components/ErrorBanner.d.ts.map +0 -1
  175. package/src/views/CanvasEditor/components/ErrorBanner.js +0 -8
  176. package/src/views/CanvasEditor/components/ErrorBanner.tsx +0 -31
  177. package/src/views/CanvasEditor/components/FeaturedMediaSection.d.ts +0 -25
  178. package/src/views/CanvasEditor/components/FeaturedMediaSection.d.ts.map +0 -1
  179. package/src/views/CanvasEditor/components/FeaturedMediaSection.js +0 -182
  180. package/src/views/CanvasEditor/components/FeaturedMediaSection.tsx +0 -341
  181. package/src/views/CanvasEditor/components/LibraryItem.d.ts +0 -14
  182. package/src/views/CanvasEditor/components/LibraryItem.d.ts.map +0 -1
  183. package/src/views/CanvasEditor/components/LibraryItem.js +0 -43
  184. package/src/views/CanvasEditor/components/LibraryItem.tsx +0 -80
  185. package/src/views/CanvasEditor/components/PrivacySettingsSection.d.ts +0 -15
  186. package/src/views/CanvasEditor/components/PrivacySettingsSection.d.ts.map +0 -1
  187. package/src/views/CanvasEditor/components/PrivacySettingsSection.js +0 -63
  188. package/src/views/CanvasEditor/components/PrivacySettingsSection.tsx +0 -212
  189. package/src/views/CanvasEditor/components/index.d.ts +0 -21
  190. package/src/views/CanvasEditor/components/index.d.ts.map +0 -1
  191. package/src/views/CanvasEditor/components/index.js +0 -12
  192. package/src/views/CanvasEditor/components/index.ts +0 -28
  193. package/src/views/CanvasEditor/hooks/index.d.ts +0 -10
  194. package/src/views/CanvasEditor/hooks/index.d.ts.map +0 -1
  195. package/src/views/CanvasEditor/hooks/index.js +0 -9
  196. package/src/views/CanvasEditor/hooks/index.ts +0 -10
  197. package/src/views/CanvasEditor/hooks/useHeroBlock.d.ts +0 -8
  198. package/src/views/CanvasEditor/hooks/useHeroBlock.d.ts.map +0 -1
  199. package/src/views/CanvasEditor/hooks/useHeroBlock.js +0 -79
  200. package/src/views/CanvasEditor/hooks/useHeroBlock.ts +0 -103
  201. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts +0 -3
  202. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  203. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.js +0 -114
  204. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.ts +0 -142
  205. package/src/views/CanvasEditor/hooks/usePostLoader.d.ts +0 -5
  206. package/src/views/CanvasEditor/hooks/usePostLoader.d.ts.map +0 -1
  207. package/src/views/CanvasEditor/hooks/usePostLoader.js +0 -32
  208. package/src/views/CanvasEditor/hooks/usePostLoader.ts +0 -39
  209. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts +0 -2
  210. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts.map +0 -1
  211. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.js +0 -47
  212. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.ts +0 -55
  213. package/src/views/CanvasEditor/hooks/useUnsavedChanges.d.ts +0 -25
  214. package/src/views/CanvasEditor/hooks/useUnsavedChanges.d.ts.map +0 -1
  215. package/src/views/CanvasEditor/hooks/useUnsavedChanges.js +0 -285
  216. package/src/views/CanvasEditor/hooks/useUnsavedChanges.ts +0 -339
  217. package/src/views/CanvasEditor/index.d.ts +0 -16
  218. package/src/views/CanvasEditor/index.d.ts.map +0 -1
  219. package/src/views/CanvasEditor/index.js +0 -9
  220. package/src/views/CanvasEditor/index.ts +0 -16
  221. package/src/views/PostManager/EmptyState.d.ts +0 -10
  222. package/src/views/PostManager/EmptyState.d.ts.map +0 -1
  223. package/src/views/PostManager/EmptyState.js +0 -12
  224. package/src/views/PostManager/EmptyState.tsx +0 -42
  225. package/src/views/PostManager/PostActionsMenu.d.ts +0 -12
  226. package/src/views/PostManager/PostActionsMenu.d.ts.map +0 -1
  227. package/src/views/PostManager/PostActionsMenu.js +0 -58
  228. package/src/views/PostManager/PostActionsMenu.tsx +0 -112
  229. package/src/views/PostManager/PostCards.d.ts +0 -15
  230. package/src/views/PostManager/PostCards.d.ts.map +0 -1
  231. package/src/views/PostManager/PostCards.js +0 -79
  232. package/src/views/PostManager/PostCards.tsx +0 -197
  233. package/src/views/PostManager/PostFilters.d.ts +0 -16
  234. package/src/views/PostManager/PostFilters.d.ts.map +0 -1
  235. package/src/views/PostManager/PostFilters.js +0 -10
  236. package/src/views/PostManager/PostFilters.tsx +0 -95
  237. package/src/views/PostManager/PostManagerView.d.ts +0 -11
  238. package/src/views/PostManager/PostManagerView.d.ts.map +0 -1
  239. package/src/views/PostManager/PostManagerView.js +0 -174
  240. package/src/views/PostManager/PostManagerView.tsx +0 -289
  241. package/src/views/PostManager/PostStats.d.ts +0 -11
  242. package/src/views/PostManager/PostStats.d.ts.map +0 -1
  243. package/src/views/PostManager/PostStats.js +0 -46
  244. package/src/views/PostManager/PostStats.tsx +0 -81
  245. package/src/views/PostManager/PostTable.d.ts +0 -15
  246. package/src/views/PostManager/PostTable.d.ts.map +0 -1
  247. package/src/views/PostManager/PostTable.js +0 -79
  248. package/src/views/PostManager/PostTable.tsx +0 -230
  249. package/src/views/PostManager/index.d.ts +0 -12
  250. package/src/views/PostManager/index.d.ts.map +0 -1
  251. package/src/views/PostManager/index.js +0 -11
  252. package/src/views/PostManager/index.ts +0 -15
  253. package/src/views/Preview/PreviewBridgeView.d.ts +0 -12
  254. package/src/views/Preview/PreviewBridgeView.d.ts.map +0 -1
  255. package/src/views/Preview/PreviewBridgeView.js +0 -11
  256. package/src/views/Preview/PreviewBridgeView.tsx +0 -64
  257. package/src/views/Preview/index.d.ts +0 -6
  258. package/src/views/Preview/index.d.ts.map +0 -1
  259. package/src/views/Preview/index.js +0 -4
  260. package/src/views/Preview/index.ts +0 -7
  261. package/src/views/Settings/SettingsView.d.ts +0 -10
  262. package/src/views/Settings/SettingsView.d.ts.map +0 -1
  263. package/src/views/Settings/SettingsView.js +0 -111
  264. package/src/views/Settings/SettingsView.tsx +0 -298
  265. package/src/views/Settings/index.d.ts +0 -6
  266. package/src/views/Settings/index.d.ts.map +0 -1
  267. package/src/views/Settings/index.js +0 -4
  268. package/src/views/Settings/index.ts +0 -7
  269. package/src/views/SlugSEO/SlugSEOManagerView.d.ts +0 -12
  270. package/src/views/SlugSEO/SlugSEOManagerView.d.ts.map +0 -1
  271. package/src/views/SlugSEO/SlugSEOManagerView.js +0 -11
  272. package/src/views/SlugSEO/SlugSEOManagerView.tsx +0 -94
  273. package/src/views/SlugSEO/index.d.ts +0 -6
  274. package/src/views/SlugSEO/index.d.ts.map +0 -1
  275. package/src/views/SlugSEO/index.js +0 -4
  276. package/src/views/SlugSEO/index.ts +0 -7
package/package.json CHANGED
@@ -1,61 +1,60 @@
1
1
  {
2
- "name": "@jhits/plugin-blog",
3
- "version": "0.0.9",
4
- "description": "Professional blog management system for the JHITS ecosystem",
5
- "publishConfig": {
6
- "access": "public"
2
+ "name": "@jhits/plugin-blog",
3
+ "version": "0.0.11",
4
+ "description": "Professional blog management system for the JHITS ecosystem",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
7
14
  },
8
- "main": "./dist/index.js",
9
- "types": "./dist/index.d.ts",
10
- "exports": {
11
- ".": {
12
- "types": "./dist/index.d.ts",
13
- "default": "./dist/index.js"
14
- },
15
- "./server": {
16
- "types": "./dist/index.server.d.ts",
17
- "default": "./dist/index.server.js"
18
- }
19
- },
20
- "scripts": {
21
- "build": "tsc"
22
- },
23
- "dependencies": {
24
- "@jhits/plugin-content": "workspace:*",
25
- "@jhits/plugin-core": "workspace:*",
26
- "@jhits/plugin-images": "workspace:*",
27
- "bcrypt": "^6.0.0",
28
- "framer-motion": "^12.34.0",
29
- "lucide-react": "^0.564.0",
30
- "mongodb": "^7.1.0",
31
- "next-auth": "^4.24.13"
32
- },
33
- "peerDependencies": {
34
- "next": ">=15.0.0",
35
- "next-intl": ">=4.0.0",
36
- "next-themes": ">=0.4.0",
37
- "react": ">=18.0.0",
38
- "react-dom": ">=18.0.0"
39
- },
40
- "devDependencies": {
41
- "@tailwindcss/postcss": "^4.1.18",
42
- "@types/bcrypt": "^6.0.0",
43
- "@types/node": "^25.2.3",
44
- "@types/react": "^19.2.14",
45
- "@types/react-dom": "^19.2.3",
46
- "eslint": "^10.0.0",
47
- "eslint-config-next": "16.1.6",
48
- "next": "16.1.6",
49
- "next-intl": "4.8.2",
50
- "next-themes": "0.4.6",
51
- "react": "19.2.4",
52
- "react-dom": "19.2.4",
53
- "tailwindcss": "^4.1.18",
54
- "typescript": "^5.9.3"
55
- },
56
- "files": [
57
- "dist",
58
- "src",
59
- "package.json"
60
- ]
61
- }
15
+ "./server": {
16
+ "types": "./dist/index.server.d.ts",
17
+ "default": "./dist/index.server.js"
18
+ }
19
+ },
20
+ "dependencies": {
21
+ "bcrypt": "^6.0.0",
22
+ "framer-motion": "^12.34.0",
23
+ "lucide-react": "^0.564.0",
24
+ "mongodb": "^7.1.0",
25
+ "next-auth": "^4.24.13",
26
+ "@jhits/plugin-content": "0.0.8",
27
+ "@jhits/plugin-images": "0.0.9",
28
+ "@jhits/plugin-core": "0.0.5"
29
+ },
30
+ "peerDependencies": {
31
+ "next": ">=15.0.0",
32
+ "next-intl": ">=4.0.0",
33
+ "next-themes": ">=0.4.0",
34
+ "react": ">=18.0.0",
35
+ "react-dom": ">=18.0.0"
36
+ },
37
+ "devDependencies": {
38
+ "@tailwindcss/postcss": "^4.1.18",
39
+ "@types/bcrypt": "^6.0.0",
40
+ "@types/node": "^25.2.3",
41
+ "@types/react": "^19.2.14",
42
+ "@types/react-dom": "^19.2.3",
43
+ "eslint": "^10.0.0",
44
+ "eslint-config-next": "16.1.6",
45
+ "next": "16.1.6",
46
+ "next-intl": "4.8.2",
47
+ "next-themes": "0.4.6",
48
+ "react": "19.2.4",
49
+ "react-dom": "19.2.4",
50
+ "tailwindcss": "^4.1.18",
51
+ "typescript": "^5.9.3"
52
+ },
53
+ "files": [
54
+ "dist",
55
+ "package.json"
56
+ ],
57
+ "scripts": {
58
+ "build": "tsc"
59
+ }
60
+ }
@@ -1,43 +0,0 @@
1
- /**
2
- * Blog Categories API Handler
3
- * GET /api/plugin-blog/categories - Get all unique categories
4
- */
5
-
6
- import { NextRequest, NextResponse } from 'next/server';
7
- import { BlogApiConfig } from './handler';
8
-
9
- export async function GET(req: NextRequest, config: BlogApiConfig): Promise<NextResponse> {
10
- try {
11
- const dbConnection = await config.getDb();
12
- const db = dbConnection.db();
13
- const blogs = db.collection(config.collectionName || 'blogs');
14
-
15
- // Get all unique categories from blog posts
16
- const categories = await blogs.distinct('categoryTags.category');
17
-
18
- // Also get categories from Hero blocks in contentBlocks
19
- const heroBlocks = await blogs.aggregate([
20
- { $unwind: '$contentBlocks' },
21
- { $match: { 'contentBlocks.type': 'hero' } },
22
- { $project: { category: '$contentBlocks.data.category' } },
23
- { $match: { category: { $exists: true, $ne: null, $nin: [''] } } },
24
- { $group: { _id: '$category' } },
25
- ]).toArray();
26
-
27
- const heroCategories = heroBlocks.map((block: any) => block._id);
28
-
29
- // Combine and deduplicate
30
- const allCategories = Array.from(
31
- new Set([...categories.filter(Boolean), ...heroCategories.filter(Boolean)])
32
- ).sort();
33
-
34
- return NextResponse.json({ categories: allCategories });
35
- } catch (err: any) {
36
- console.error('[BlogAPI] Categories error:', err);
37
- return NextResponse.json(
38
- { error: 'Failed to fetch categories', detail: err.message },
39
- { status: 500 }
40
- );
41
- }
42
- }
43
-
@@ -1,60 +0,0 @@
1
- /**
2
- * Blog Check Title API Handler
3
- * GET /api/plugin-blog/check-title - Check if a blog title already exists
4
- */
5
-
6
- import { NextRequest, NextResponse } from 'next/server';
7
- import { BlogApiConfig } from './handler';
8
-
9
- export async function GET(req: NextRequest, config: BlogApiConfig): Promise<NextResponse> {
10
- try {
11
- const url = new URL(req.url);
12
- const title = url.searchParams.get('title');
13
- const excludeSlug = url.searchParams.get('excludeSlug');
14
-
15
- // If title is empty or too short, don't bother the database
16
- if (!title || title.trim().length < 3) {
17
- return NextResponse.json({ duplicate: false });
18
- }
19
-
20
- const dbConnection = await config.getDb();
21
- const db = dbConnection.db();
22
- const blogs = db.collection(config.collectionName || 'blogs');
23
-
24
- /**
25
- * We search for a title match using:
26
- * 1. A case-insensitive regex (^ and $ ensure it's the exact full string)
27
- * 2. An exclusion of the current slug (so editing an article doesn't flag itself)
28
- */
29
- const query: any = {
30
- title: {
31
- $regex: new RegExp(`^${title.trim().replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}$`, 'i')
32
- }
33
- };
34
-
35
- if (excludeSlug) {
36
- query.slug = { $ne: excludeSlug };
37
- }
38
-
39
- const duplicate = await blogs.findOne(query);
40
-
41
- if (duplicate) {
42
- return NextResponse.json({
43
- duplicate: true,
44
- blog: {
45
- title: duplicate.title,
46
- slug: duplicate.slug
47
- }
48
- });
49
- }
50
-
51
- return NextResponse.json({ duplicate: false });
52
- } catch (err: any) {
53
- console.error('[BlogAPI] Check title error:', err);
54
- return NextResponse.json(
55
- { error: 'Internal server error', detail: err.message },
56
- { status: 500 }
57
- );
58
- }
59
- }
60
-
@@ -1,76 +0,0 @@
1
- /**
2
- * Blog Config API Handler
3
- * Handles saving/loading plugin configuration
4
- */
5
-
6
- import { NextRequest, NextResponse } from 'next/server';
7
- import { getPluginConfig, savePluginConfig } from '../lib/config-storage';
8
-
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- export interface ConfigApiConfig {
11
- getDb: () => Promise<{ db: any }>;
12
- getUserId: (req: NextRequest) => Promise<string | null>;
13
- siteId?: string;
14
- }
15
-
16
- /**
17
- * GET /api/plugin-blog/config - Get plugin config
18
- */
19
- export async function GET(req: NextRequest, config: ConfigApiConfig): Promise<NextResponse> {
20
- try {
21
- const siteId = config.siteId || 'default';
22
-
23
- const pluginConfig = await getPluginConfig(
24
- config.getDb,
25
- 'plugin-blog',
26
- siteId
27
- );
28
-
29
- if (!pluginConfig) {
30
- return NextResponse.json({ config: null });
31
- }
32
-
33
- return NextResponse.json({ config: pluginConfig.config });
34
- } catch (err: any) {
35
- console.error('[BlogConfigAPI] GET error:', err);
36
- return NextResponse.json(
37
- { error: 'Failed to get config', detail: err.message },
38
- { status: 500 }
39
- );
40
- }
41
- }
42
-
43
- /**
44
- * POST /api/plugin-blog/config - Save plugin config
45
- */
46
- export async function POST(req: NextRequest, config: ConfigApiConfig): Promise<NextResponse> {
47
- try {
48
- const userId = await config.getUserId(req);
49
- if (!userId) {
50
- return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
51
- }
52
-
53
- const body = await req.json();
54
- const siteId = body.siteId || config.siteId || 'default';
55
- const pluginConfig = body.config;
56
-
57
- if (!pluginConfig) {
58
- return NextResponse.json({ error: 'Config is required' }, { status: 400 });
59
- }
60
-
61
- await savePluginConfig(
62
- config.getDb,
63
- 'plugin-blog',
64
- siteId,
65
- pluginConfig
66
- );
67
-
68
- return NextResponse.json({ message: 'Config saved successfully' });
69
- } catch (err: any) {
70
- console.error('[BlogConfigAPI] POST error:', err);
71
- return NextResponse.json(
72
- { error: 'Failed to save config', detail: err.message },
73
- { status: 500 }
74
- );
75
- }
76
- }