nextblogkit 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +951 -0
  3. package/dist/admin/index.cjs +2465 -0
  4. package/dist/admin/index.cjs.map +1 -0
  5. package/dist/admin/index.d.cts +44 -0
  6. package/dist/admin/index.d.ts +44 -0
  7. package/dist/admin/index.js +2438 -0
  8. package/dist/admin/index.js.map +1 -0
  9. package/dist/api/categories.cjs +82 -0
  10. package/dist/api/categories.cjs.map +1 -0
  11. package/dist/api/categories.d.cts +27 -0
  12. package/dist/api/categories.d.ts +27 -0
  13. package/dist/api/categories.js +77 -0
  14. package/dist/api/categories.js.map +1 -0
  15. package/dist/api/media.cjs +113 -0
  16. package/dist/api/media.cjs.map +1 -0
  17. package/dist/api/media.d.cts +22 -0
  18. package/dist/api/media.d.ts +22 -0
  19. package/dist/api/media.js +109 -0
  20. package/dist/api/media.js.map +1 -0
  21. package/dist/api/posts.cjs +103 -0
  22. package/dist/api/posts.cjs.map +1 -0
  23. package/dist/api/posts.d.cts +27 -0
  24. package/dist/api/posts.d.ts +27 -0
  25. package/dist/api/posts.js +98 -0
  26. package/dist/api/posts.js.map +1 -0
  27. package/dist/api/rss.cjs +25 -0
  28. package/dist/api/rss.cjs.map +1 -0
  29. package/dist/api/rss.d.cts +5 -0
  30. package/dist/api/rss.d.ts +5 -0
  31. package/dist/api/rss.js +23 -0
  32. package/dist/api/rss.js.map +1 -0
  33. package/dist/api/settings.cjs +40 -0
  34. package/dist/api/settings.cjs.map +1 -0
  35. package/dist/api/settings.d.cts +17 -0
  36. package/dist/api/settings.d.ts +17 -0
  37. package/dist/api/settings.js +37 -0
  38. package/dist/api/settings.js.map +1 -0
  39. package/dist/api/sitemap.cjs +25 -0
  40. package/dist/api/sitemap.cjs.map +1 -0
  41. package/dist/api/sitemap.d.cts +5 -0
  42. package/dist/api/sitemap.d.ts +5 -0
  43. package/dist/api/sitemap.js +23 -0
  44. package/dist/api/sitemap.js.map +1 -0
  45. package/dist/chunk-4NKOJYWJ.js +68 -0
  46. package/dist/chunk-4NKOJYWJ.js.map +1 -0
  47. package/dist/chunk-4PY224XM.js +103 -0
  48. package/dist/chunk-4PY224XM.js.map +1 -0
  49. package/dist/chunk-64HUVJOZ.js +446 -0
  50. package/dist/chunk-64HUVJOZ.js.map +1 -0
  51. package/dist/chunk-6HKMZOI4.cjs +48 -0
  52. package/dist/chunk-6HKMZOI4.cjs.map +1 -0
  53. package/dist/chunk-A2S32RZN.js +138 -0
  54. package/dist/chunk-A2S32RZN.js.map +1 -0
  55. package/dist/chunk-E2QLTHKN.cjs +70 -0
  56. package/dist/chunk-E2QLTHKN.cjs.map +1 -0
  57. package/dist/chunk-JLPJKNRZ.js +37 -0
  58. package/dist/chunk-JLPJKNRZ.js.map +1 -0
  59. package/dist/chunk-JM7QRXXK.js +330 -0
  60. package/dist/chunk-JM7QRXXK.js.map +1 -0
  61. package/dist/chunk-KDZER3PU.cjs +43 -0
  62. package/dist/chunk-KDZER3PU.cjs.map +1 -0
  63. package/dist/chunk-N5MKAD7J.cjs +109 -0
  64. package/dist/chunk-N5MKAD7J.cjs.map +1 -0
  65. package/dist/chunk-QE4VLQYN.cjs +337 -0
  66. package/dist/chunk-QE4VLQYN.cjs.map +1 -0
  67. package/dist/chunk-R6MO3QIP.js +46 -0
  68. package/dist/chunk-R6MO3QIP.js.map +1 -0
  69. package/dist/chunk-U2ROR6AY.cjs +476 -0
  70. package/dist/chunk-U2ROR6AY.cjs.map +1 -0
  71. package/dist/chunk-ZP5XRVVH.cjs +141 -0
  72. package/dist/chunk-ZP5XRVVH.cjs.map +1 -0
  73. package/dist/cli/index.cjs +1308 -0
  74. package/dist/components/index.cjs +541 -0
  75. package/dist/components/index.cjs.map +1 -0
  76. package/dist/components/index.d.cts +165 -0
  77. package/dist/components/index.d.ts +165 -0
  78. package/dist/components/index.js +527 -0
  79. package/dist/components/index.js.map +1 -0
  80. package/dist/editor/index.cjs +1083 -0
  81. package/dist/editor/index.cjs.map +1 -0
  82. package/dist/editor/index.d.cts +133 -0
  83. package/dist/editor/index.d.ts +133 -0
  84. package/dist/editor/index.js +1051 -0
  85. package/dist/editor/index.js.map +1 -0
  86. package/dist/index-Cgzphklp.d.ts +266 -0
  87. package/dist/index-vjlZDWNr.d.cts +266 -0
  88. package/dist/index.cjs +368 -0
  89. package/dist/index.cjs.map +1 -0
  90. package/dist/index.d.cts +27 -0
  91. package/dist/index.d.ts +27 -0
  92. package/dist/index.js +208 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/lib/index.cjs +120 -0
  95. package/dist/lib/index.cjs.map +1 -0
  96. package/dist/lib/index.d.cts +4 -0
  97. package/dist/lib/index.d.ts +4 -0
  98. package/dist/lib/index.js +7 -0
  99. package/dist/lib/index.js.map +1 -0
  100. package/dist/styles/admin.css +657 -0
  101. package/dist/styles/blog.css +851 -0
  102. package/dist/styles/editor.css +452 -0
  103. package/dist/styles/globals.css +270 -0
  104. package/dist/styles/prose.css +299 -0
  105. package/dist/types-CBEEBR4A.d.cts +732 -0
  106. package/dist/types-CBEEBR4A.d.ts +732 -0
  107. package/package.json +134 -0
@@ -0,0 +1,27 @@
1
+ export { R as R2StorageProvider, c as calculateReadingTime, a as calculateSEOScore, b as countWords, d as createCategory, e as createMedia, f as createPost, g as defineConfig, h as deleteCategory, i as deleteMedia, j as deletePost, k as ensureIndexes, l as ensureUniqueSlug, m as extractTextFromBlocks, n as extractTextFromHTML, o as generateBreadcrumbs, p as generateFAQStructuredData, q as generateMetaTags, r as generateRSSFeed, s as generateSitemap, t as generateSlug, u as generateStructuredData, v as getBlogConfig, w as getCategoryBySlug, x as getCollection, y as getConfig, z as getDb, A as getEnvConfig, B as getPostById, C as getPostBySlug, D as getSettings, E as listCategories, F as listMedia, G as listPosts, H as processImage, I as searchPosts, J as updateCategory, K as updatePost, L as updateSettings } from './index-vjlZDWNr.cjs';
2
+ import { B as BlockContent } from './types-CBEEBR4A.cjs';
3
+ export { A as ApiErrorResponse, a as ApiResponse, b as ApiSuccessResponse, c as Author, d as BlockType, e as BlogPost, f as BlogSettings, C as Category, g as CreateCategoryInput, h as CreatePostInput, M as Media, i as MediaListQuery, j as MediaReference, N as NextBlogKitConfig, P as PostListQuery, k as PostSEO, l as PostStatus, R as Revision, S as SEOCheck, m as SEOCheckStatus, n as SEOOverallScore, o as SEOScore, U as UpdateCategoryInput, p as UpdatePostInput } from './types-CBEEBR4A.cjs';
4
+ import 'zod';
5
+ import 'mongodb';
6
+
7
+ declare function renderBlocksToHTML(doc: {
8
+ type: string;
9
+ content?: BlockContent[];
10
+ }): string;
11
+ declare function extractHeadings(doc: {
12
+ type: string;
13
+ content?: BlockContent[];
14
+ }): {
15
+ id: string;
16
+ text: string;
17
+ level: number;
18
+ }[];
19
+ declare function extractFAQItems(doc: {
20
+ type: string;
21
+ content?: BlockContent[];
22
+ }): {
23
+ question: string;
24
+ answer: string;
25
+ }[];
26
+
27
+ export { BlockContent, extractFAQItems, extractHeadings, renderBlocksToHTML };
@@ -0,0 +1,27 @@
1
+ export { R as R2StorageProvider, c as calculateReadingTime, a as calculateSEOScore, b as countWords, d as createCategory, e as createMedia, f as createPost, g as defineConfig, h as deleteCategory, i as deleteMedia, j as deletePost, k as ensureIndexes, l as ensureUniqueSlug, m as extractTextFromBlocks, n as extractTextFromHTML, o as generateBreadcrumbs, p as generateFAQStructuredData, q as generateMetaTags, r as generateRSSFeed, s as generateSitemap, t as generateSlug, u as generateStructuredData, v as getBlogConfig, w as getCategoryBySlug, x as getCollection, y as getConfig, z as getDb, A as getEnvConfig, B as getPostById, C as getPostBySlug, D as getSettings, E as listCategories, F as listMedia, G as listPosts, H as processImage, I as searchPosts, J as updateCategory, K as updatePost, L as updateSettings } from './index-Cgzphklp.js';
2
+ import { B as BlockContent } from './types-CBEEBR4A.js';
3
+ export { A as ApiErrorResponse, a as ApiResponse, b as ApiSuccessResponse, c as Author, d as BlockType, e as BlogPost, f as BlogSettings, C as Category, g as CreateCategoryInput, h as CreatePostInput, M as Media, i as MediaListQuery, j as MediaReference, N as NextBlogKitConfig, P as PostListQuery, k as PostSEO, l as PostStatus, R as Revision, S as SEOCheck, m as SEOCheckStatus, n as SEOOverallScore, o as SEOScore, U as UpdateCategoryInput, p as UpdatePostInput } from './types-CBEEBR4A.js';
4
+ import 'zod';
5
+ import 'mongodb';
6
+
7
+ declare function renderBlocksToHTML(doc: {
8
+ type: string;
9
+ content?: BlockContent[];
10
+ }): string;
11
+ declare function extractHeadings(doc: {
12
+ type: string;
13
+ content?: BlockContent[];
14
+ }): {
15
+ id: string;
16
+ text: string;
17
+ level: number;
18
+ }[];
19
+ declare function extractFAQItems(doc: {
20
+ type: string;
21
+ content?: BlockContent[];
22
+ }): {
23
+ question: string;
24
+ answer: string;
25
+ }[];
26
+
27
+ export { BlockContent, extractFAQItems, extractHeadings, renderBlocksToHTML };
package/dist/index.js ADDED
@@ -0,0 +1,208 @@
1
+ export { calculateSEOScore, generateBreadcrumbs, generateFAQStructuredData, generateMetaTags, generateStructuredData, searchPosts } from './chunk-JM7QRXXK.js';
2
+ export { R2StorageProvider, processImage } from './chunk-A2S32RZN.js';
3
+ export { generateSitemap } from './chunk-4NKOJYWJ.js';
4
+ export { generateRSSFeed } from './chunk-R6MO3QIP.js';
5
+ export { calculateReadingTime, countWords, createCategory, createMedia, createPost, defineConfig, deleteCategory, deleteMedia, deletePost, ensureIndexes, ensureUniqueSlug, extractTextFromBlocks, extractTextFromHTML, generateSlug, getBlogConfig, getCategoryBySlug, getCollection, getConfig, getDb, getEnvConfig, getPostById, getPostBySlug, getSettings, listCategories, listMedia, listPosts, updateCategory, updatePost, updateSettings } from './chunk-64HUVJOZ.js';
6
+
7
+ // src/editor/renderer.ts
8
+ function renderBlocksToHTML(doc) {
9
+ if (!doc.content) return "";
10
+ return doc.content.map(renderNode).join("");
11
+ }
12
+ function renderNode(node) {
13
+ switch (node.type) {
14
+ case "paragraph":
15
+ return `<p>${renderInline(node)}</p>`;
16
+ case "heading": {
17
+ const level = node.attrs?.level || 2;
18
+ const text = renderInline(node);
19
+ const id = slugify(stripTags(text));
20
+ return `<h${level} id="${id}">${text}</h${level}>`;
21
+ }
22
+ case "bulletList":
23
+ return `<ul>${renderChildren(node)}</ul>`;
24
+ case "orderedList":
25
+ return `<ol>${renderChildren(node)}</ol>`;
26
+ case "listItem":
27
+ return `<li>${renderChildren(node)}</li>`;
28
+ case "taskList":
29
+ return `<ul class="nbk-task-list">${renderChildren(node)}</ul>`;
30
+ case "taskItem": {
31
+ const checked = node.attrs?.checked ? "checked" : "";
32
+ return `<li class="nbk-task-item" data-checked="${checked}"><input type="checkbox" ${checked} disabled />${renderChildren(node)}</li>`;
33
+ }
34
+ case "blockquote":
35
+ return `<blockquote>${renderChildren(node)}</blockquote>`;
36
+ case "codeBlock": {
37
+ const lang = node.attrs?.language || "plaintext";
38
+ const filename = node.attrs?.filename;
39
+ const code = escapeHtml(getTextContent(node));
40
+ const header = filename ? `<div class="nbk-code-header">${escapeHtml(filename)}</div>` : "";
41
+ return `${header}<pre><code class="language-${lang}">${code}</code></pre>`;
42
+ }
43
+ case "image": {
44
+ const src = node.attrs?.src || "";
45
+ const alt = node.attrs?.alt || "";
46
+ const caption = node.attrs?.caption;
47
+ const width = node.attrs?.width;
48
+ const height = node.attrs?.height;
49
+ let img = `<img src="${escapeAttr(src)}" alt="${escapeAttr(alt)}"`;
50
+ if (width) img += ` width="${width}"`;
51
+ if (height) img += ` height="${height}"`;
52
+ img += ' loading="lazy" />';
53
+ if (caption) {
54
+ return `<figure>${img}<figcaption>${escapeHtml(caption)}</figcaption></figure>`;
55
+ }
56
+ return img;
57
+ }
58
+ case "horizontalRule":
59
+ return "<hr />";
60
+ case "table":
61
+ return `<table>${renderChildren(node)}</table>`;
62
+ case "tableRow":
63
+ return `<tr>${renderChildren(node)}</tr>`;
64
+ case "tableHeader":
65
+ return `<th>${renderInline(node)}</th>`;
66
+ case "tableCell":
67
+ return `<td>${renderInline(node)}</td>`;
68
+ case "callout": {
69
+ const calloutType = node.attrs?.type || "info";
70
+ const icons = {
71
+ info: "\u2139\uFE0F",
72
+ warning: "\u26A0\uFE0F",
73
+ tip: "\u{1F4A1}",
74
+ danger: "\u{1F6A8}"
75
+ };
76
+ return `<div class="nbk-callout nbk-callout-${calloutType}"><span class="nbk-callout-icon">${icons[calloutType] || ""}</span><div class="nbk-callout-content">${renderChildren(node)}</div></div>`;
77
+ }
78
+ case "faq":
79
+ return `<div class="nbk-faq" itemscope itemtype="https://schema.org/FAQPage">${renderChildren(node)}</div>`;
80
+ case "faqItem":
81
+ return `<div class="nbk-faq-item" itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">${renderChildren(node)}</div>`;
82
+ case "faqQuestion":
83
+ return `<h3 itemprop="name">${renderInline(node)}</h3>`;
84
+ case "faqAnswer":
85
+ return `<div itemprop="acceptedAnswer" itemscope itemtype="https://schema.org/Answer"><div itemprop="text">${renderChildren(node)}</div></div>`;
86
+ case "tableOfContents":
87
+ return '<div data-toc="true" class="nbk-toc"></div>';
88
+ case "html":
89
+ return getTextContent(node);
90
+ case "embed": {
91
+ const embedUrl = node.attrs?.src || "";
92
+ return `<div class="nbk-embed"><iframe src="${escapeAttr(embedUrl)}" frameborder="0" allowfullscreen loading="lazy"></iframe></div>`;
93
+ }
94
+ case "text":
95
+ return renderTextNode(node);
96
+ case "hardBreak":
97
+ return "<br />";
98
+ default:
99
+ if (node.content) return renderChildren(node);
100
+ if (node.text) return escapeHtml(node.text);
101
+ return "";
102
+ }
103
+ }
104
+ function renderChildren(node) {
105
+ if (!node.content) return "";
106
+ return node.content.map(renderNode).join("");
107
+ }
108
+ function renderInline(node) {
109
+ if (!node.content) return "";
110
+ return node.content.map(renderNode).join("");
111
+ }
112
+ function renderTextNode(node) {
113
+ let text = escapeHtml(node.text || "");
114
+ if (node.marks) {
115
+ for (const mark of node.marks) {
116
+ switch (mark.type) {
117
+ case "bold":
118
+ text = `<strong>${text}</strong>`;
119
+ break;
120
+ case "italic":
121
+ text = `<em>${text}</em>`;
122
+ break;
123
+ case "strike":
124
+ text = `<s>${text}</s>`;
125
+ break;
126
+ case "code":
127
+ text = `<code>${text}</code>`;
128
+ break;
129
+ case "underline":
130
+ text = `<u>${text}</u>`;
131
+ break;
132
+ case "highlight":
133
+ text = `<mark>${text}</mark>`;
134
+ break;
135
+ case "link": {
136
+ const href = mark.attrs?.href || "";
137
+ const target = href.startsWith("http") ? ' target="_blank" rel="noopener noreferrer"' : "";
138
+ text = `<a href="${escapeAttr(href)}"${target}>${text}</a>`;
139
+ break;
140
+ }
141
+ }
142
+ }
143
+ }
144
+ return text;
145
+ }
146
+ function getTextContent(node) {
147
+ if (node.text) return node.text;
148
+ if (!node.content) return "";
149
+ return node.content.map(getTextContent).join("");
150
+ }
151
+ function escapeHtml(str) {
152
+ return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
153
+ }
154
+ function escapeAttr(str) {
155
+ return str.replace(/"/g, "&quot;").replace(/&/g, "&amp;");
156
+ }
157
+ function stripTags(html) {
158
+ return html.replace(/<[^>]+>/g, "");
159
+ }
160
+ function slugify(text) {
161
+ return text.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_]+/g, "-").replace(/-+/g, "-");
162
+ }
163
+ function extractHeadings(doc) {
164
+ const headings = [];
165
+ function walk(node) {
166
+ if (node.type === "heading") {
167
+ const text = getTextContent(node);
168
+ headings.push({
169
+ id: slugify(text),
170
+ text,
171
+ level: node.attrs?.level || 2
172
+ });
173
+ }
174
+ if (node.content) {
175
+ node.content.forEach(walk);
176
+ }
177
+ }
178
+ if (doc.content) {
179
+ doc.content.forEach(walk);
180
+ }
181
+ return headings;
182
+ }
183
+ function extractFAQItems(doc) {
184
+ const items = [];
185
+ function walk(node) {
186
+ if (node.type === "faqItem" && node.content) {
187
+ const question = node.content.find((c) => c.type === "faqQuestion");
188
+ const answer = node.content.find((c) => c.type === "faqAnswer");
189
+ if (question && answer) {
190
+ items.push({
191
+ question: getTextContent(question),
192
+ answer: renderChildren(answer)
193
+ });
194
+ }
195
+ }
196
+ if (node.content) {
197
+ node.content.forEach(walk);
198
+ }
199
+ }
200
+ if (doc.content) {
201
+ doc.content.forEach(walk);
202
+ }
203
+ return items;
204
+ }
205
+
206
+ export { extractFAQItems, extractHeadings, renderBlocksToHTML };
207
+ //# sourceMappingURL=index.js.map
208
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editor/renderer.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { BlockContent } from '../lib/types';\n\nexport function renderBlocksToHTML(doc: { type: string; content?: BlockContent[] }): string {\n if (!doc.content) return '';\n return doc.content.map(renderNode).join('');\n}\n\nfunction renderNode(node: BlockContent): string {\n switch (node.type) {\n case 'paragraph':\n return `<p>${renderInline(node)}</p>`;\n\n case 'heading': {\n const level = (node.attrs?.level as number) || 2;\n const text = renderInline(node);\n const id = slugify(stripTags(text));\n return `<h${level} id=\"${id}\">${text}</h${level}>`;\n }\n\n case 'bulletList':\n return `<ul>${renderChildren(node)}</ul>`;\n\n case 'orderedList':\n return `<ol>${renderChildren(node)}</ol>`;\n\n case 'listItem':\n return `<li>${renderChildren(node)}</li>`;\n\n case 'taskList':\n return `<ul class=\"nbk-task-list\">${renderChildren(node)}</ul>`;\n\n case 'taskItem': {\n const checked = node.attrs?.checked ? 'checked' : '';\n return `<li class=\"nbk-task-item\" data-checked=\"${checked}\"><input type=\"checkbox\" ${checked} disabled />${renderChildren(node)}</li>`;\n }\n\n case 'blockquote':\n return `<blockquote>${renderChildren(node)}</blockquote>`;\n\n case 'codeBlock': {\n const lang = (node.attrs?.language as string) || 'plaintext';\n const filename = node.attrs?.filename as string;\n const code = escapeHtml(getTextContent(node));\n const header = filename ? `<div class=\"nbk-code-header\">${escapeHtml(filename)}</div>` : '';\n return `${header}<pre><code class=\"language-${lang}\">${code}</code></pre>`;\n }\n\n case 'image': {\n const src = node.attrs?.src as string || '';\n const alt = node.attrs?.alt as string || '';\n const caption = node.attrs?.caption as string;\n const width = node.attrs?.width;\n const height = node.attrs?.height;\n let img = `<img src=\"${escapeAttr(src)}\" alt=\"${escapeAttr(alt)}\"`;\n if (width) img += ` width=\"${width}\"`;\n if (height) img += ` height=\"${height}\"`;\n img += ' loading=\"lazy\" />';\n if (caption) {\n return `<figure>${img}<figcaption>${escapeHtml(caption)}</figcaption></figure>`;\n }\n return img;\n }\n\n case 'horizontalRule':\n return '<hr />';\n\n case 'table':\n return `<table>${renderChildren(node)}</table>`;\n\n case 'tableRow':\n return `<tr>${renderChildren(node)}</tr>`;\n\n case 'tableHeader':\n return `<th>${renderInline(node)}</th>`;\n\n case 'tableCell':\n return `<td>${renderInline(node)}</td>`;\n\n case 'callout': {\n const calloutType = (node.attrs?.type as string) || 'info';\n const icons: Record<string, string> = {\n info: 'ℹ️',\n warning: '⚠️',\n tip: '💡',\n danger: '🚨',\n };\n return `<div class=\"nbk-callout nbk-callout-${calloutType}\"><span class=\"nbk-callout-icon\">${icons[calloutType] || ''}</span><div class=\"nbk-callout-content\">${renderChildren(node)}</div></div>`;\n }\n\n case 'faq':\n return `<div class=\"nbk-faq\" itemscope itemtype=\"https://schema.org/FAQPage\">${renderChildren(node)}</div>`;\n\n case 'faqItem':\n return `<div class=\"nbk-faq-item\" itemscope itemprop=\"mainEntity\" itemtype=\"https://schema.org/Question\">${renderChildren(node)}</div>`;\n\n case 'faqQuestion':\n return `<h3 itemprop=\"name\">${renderInline(node)}</h3>`;\n\n case 'faqAnswer':\n return `<div itemprop=\"acceptedAnswer\" itemscope itemtype=\"https://schema.org/Answer\"><div itemprop=\"text\">${renderChildren(node)}</div></div>`;\n\n case 'tableOfContents':\n return '<div data-toc=\"true\" class=\"nbk-toc\"></div>';\n\n case 'html':\n return getTextContent(node);\n\n case 'embed': {\n const embedUrl = node.attrs?.src as string || '';\n return `<div class=\"nbk-embed\"><iframe src=\"${escapeAttr(embedUrl)}\" frameborder=\"0\" allowfullscreen loading=\"lazy\"></iframe></div>`;\n }\n\n case 'text':\n return renderTextNode(node);\n\n case 'hardBreak':\n return '<br />';\n\n default:\n if (node.content) return renderChildren(node);\n if (node.text) return escapeHtml(node.text);\n return '';\n }\n}\n\nfunction renderChildren(node: BlockContent): string {\n if (!node.content) return '';\n return node.content.map(renderNode).join('');\n}\n\nfunction renderInline(node: BlockContent): string {\n if (!node.content) return '';\n return node.content.map(renderNode).join('');\n}\n\nfunction renderTextNode(node: BlockContent): string {\n let text = escapeHtml(node.text || '');\n\n if (node.marks) {\n for (const mark of node.marks) {\n switch (mark.type) {\n case 'bold':\n text = `<strong>${text}</strong>`;\n break;\n case 'italic':\n text = `<em>${text}</em>`;\n break;\n case 'strike':\n text = `<s>${text}</s>`;\n break;\n case 'code':\n text = `<code>${text}</code>`;\n break;\n case 'underline':\n text = `<u>${text}</u>`;\n break;\n case 'highlight':\n text = `<mark>${text}</mark>`;\n break;\n case 'link': {\n const href = mark.attrs?.href as string || '';\n const target = href.startsWith('http') ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : '';\n text = `<a href=\"${escapeAttr(href)}\"${target}>${text}</a>`;\n break;\n }\n }\n }\n }\n\n return text;\n}\n\nfunction getTextContent(node: BlockContent): string {\n if (node.text) return node.text;\n if (!node.content) return '';\n return node.content.map(getTextContent).join('');\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\nfunction escapeAttr(str: string): string {\n return str.replace(/\"/g, '&quot;').replace(/&/g, '&amp;');\n}\n\nfunction stripTags(html: string): string {\n return html.replace(/<[^>]+>/g, '');\n}\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_]+/g, '-')\n .replace(/-+/g, '-');\n}\n\nexport function extractHeadings(\n doc: { type: string; content?: BlockContent[] }\n): { id: string; text: string; level: number }[] {\n const headings: { id: string; text: string; level: number }[] = [];\n\n function walk(node: BlockContent) {\n if (node.type === 'heading') {\n const text = getTextContent(node);\n headings.push({\n id: slugify(text),\n text,\n level: (node.attrs?.level as number) || 2,\n });\n }\n if (node.content) {\n node.content.forEach(walk);\n }\n }\n\n if (doc.content) {\n doc.content.forEach(walk);\n }\n\n return headings;\n}\n\nexport function extractFAQItems(\n doc: { type: string; content?: BlockContent[] }\n): { question: string; answer: string }[] {\n const items: { question: string; answer: string }[] = [];\n\n function walk(node: BlockContent) {\n if (node.type === 'faqItem' && node.content) {\n const question = node.content.find((c) => c.type === 'faqQuestion');\n const answer = node.content.find((c) => c.type === 'faqAnswer');\n if (question && answer) {\n items.push({\n question: getTextContent(question),\n answer: renderChildren(answer),\n });\n }\n }\n if (node.content) {\n node.content.forEach(walk);\n }\n }\n\n if (doc.content) {\n doc.content.forEach(walk);\n }\n\n return items;\n}\n"]}
@@ -0,0 +1,120 @@
1
+ 'use strict';
2
+
3
+ var chunkQE4VLQYN_cjs = require('../chunk-QE4VLQYN.cjs');
4
+ var chunkZP5XRVVH_cjs = require('../chunk-ZP5XRVVH.cjs');
5
+ var chunkE2QLTHKN_cjs = require('../chunk-E2QLTHKN.cjs');
6
+ var chunk6HKMZOI4_cjs = require('../chunk-6HKMZOI4.cjs');
7
+ var chunkU2ROR6AY_cjs = require('../chunk-U2ROR6AY.cjs');
8
+
9
+
10
+
11
+ Object.defineProperty(exports, "calculateSEOScore", {
12
+ enumerable: true,
13
+ get: function () { return chunkQE4VLQYN_cjs.calculateSEOScore; }
14
+ });
15
+ Object.defineProperty(exports, "generateBreadcrumbs", {
16
+ enumerable: true,
17
+ get: function () { return chunkQE4VLQYN_cjs.generateBreadcrumbs; }
18
+ });
19
+ Object.defineProperty(exports, "generateMetaTags", {
20
+ enumerable: true,
21
+ get: function () { return chunkQE4VLQYN_cjs.generateMetaTags; }
22
+ });
23
+ Object.defineProperty(exports, "generateStructuredData", {
24
+ enumerable: true,
25
+ get: function () { return chunkQE4VLQYN_cjs.generateStructuredData; }
26
+ });
27
+ Object.defineProperty(exports, "searchPosts", {
28
+ enumerable: true,
29
+ get: function () { return chunkQE4VLQYN_cjs.searchPosts; }
30
+ });
31
+ Object.defineProperty(exports, "R2StorageProvider", {
32
+ enumerable: true,
33
+ get: function () { return chunkZP5XRVVH_cjs.R2StorageProvider; }
34
+ });
35
+ Object.defineProperty(exports, "processImage", {
36
+ enumerable: true,
37
+ get: function () { return chunkZP5XRVVH_cjs.processImage; }
38
+ });
39
+ Object.defineProperty(exports, "generateSitemap", {
40
+ enumerable: true,
41
+ get: function () { return chunkE2QLTHKN_cjs.generateSitemap; }
42
+ });
43
+ Object.defineProperty(exports, "generateRSSFeed", {
44
+ enumerable: true,
45
+ get: function () { return chunk6HKMZOI4_cjs.generateRSSFeed; }
46
+ });
47
+ Object.defineProperty(exports, "calculateReadingTime", {
48
+ enumerable: true,
49
+ get: function () { return chunkU2ROR6AY_cjs.calculateReadingTime; }
50
+ });
51
+ Object.defineProperty(exports, "countWords", {
52
+ enumerable: true,
53
+ get: function () { return chunkU2ROR6AY_cjs.countWords; }
54
+ });
55
+ Object.defineProperty(exports, "defineConfig", {
56
+ enumerable: true,
57
+ get: function () { return chunkU2ROR6AY_cjs.defineConfig; }
58
+ });
59
+ Object.defineProperty(exports, "ensureIndexes", {
60
+ enumerable: true,
61
+ get: function () { return chunkU2ROR6AY_cjs.ensureIndexes; }
62
+ });
63
+ Object.defineProperty(exports, "ensureUniqueSlug", {
64
+ enumerable: true,
65
+ get: function () { return chunkU2ROR6AY_cjs.ensureUniqueSlug; }
66
+ });
67
+ Object.defineProperty(exports, "extractTextFromBlocks", {
68
+ enumerable: true,
69
+ get: function () { return chunkU2ROR6AY_cjs.extractTextFromBlocks; }
70
+ });
71
+ Object.defineProperty(exports, "extractTextFromHTML", {
72
+ enumerable: true,
73
+ get: function () { return chunkU2ROR6AY_cjs.extractTextFromHTML; }
74
+ });
75
+ Object.defineProperty(exports, "generateSlug", {
76
+ enumerable: true,
77
+ get: function () { return chunkU2ROR6AY_cjs.generateSlug; }
78
+ });
79
+ Object.defineProperty(exports, "getBlogConfig", {
80
+ enumerable: true,
81
+ get: function () { return chunkU2ROR6AY_cjs.getBlogConfig; }
82
+ });
83
+ Object.defineProperty(exports, "getCategoryBySlug", {
84
+ enumerable: true,
85
+ get: function () { return chunkU2ROR6AY_cjs.getCategoryBySlug; }
86
+ });
87
+ Object.defineProperty(exports, "getCollection", {
88
+ enumerable: true,
89
+ get: function () { return chunkU2ROR6AY_cjs.getCollection; }
90
+ });
91
+ Object.defineProperty(exports, "getConfig", {
92
+ enumerable: true,
93
+ get: function () { return chunkU2ROR6AY_cjs.getConfig; }
94
+ });
95
+ Object.defineProperty(exports, "getDb", {
96
+ enumerable: true,
97
+ get: function () { return chunkU2ROR6AY_cjs.getDb; }
98
+ });
99
+ Object.defineProperty(exports, "getEnvConfig", {
100
+ enumerable: true,
101
+ get: function () { return chunkU2ROR6AY_cjs.getEnvConfig; }
102
+ });
103
+ Object.defineProperty(exports, "getPostById", {
104
+ enumerable: true,
105
+ get: function () { return chunkU2ROR6AY_cjs.getPostById; }
106
+ });
107
+ Object.defineProperty(exports, "getPostBySlug", {
108
+ enumerable: true,
109
+ get: function () { return chunkU2ROR6AY_cjs.getPostBySlug; }
110
+ });
111
+ Object.defineProperty(exports, "listCategories", {
112
+ enumerable: true,
113
+ get: function () { return chunkU2ROR6AY_cjs.listCategories; }
114
+ });
115
+ Object.defineProperty(exports, "listPosts", {
116
+ enumerable: true,
117
+ get: function () { return chunkU2ROR6AY_cjs.listPosts; }
118
+ });
119
+ //# sourceMappingURL=index.cjs.map
120
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -0,0 +1,4 @@
1
+ export { R as R2StorageProvider, c as calculateReadingTime, a as calculateSEOScore, b as countWords, g as defineConfig, k as ensureIndexes, l as ensureUniqueSlug, m as extractTextFromBlocks, n as extractTextFromHTML, o as generateBreadcrumbs, q as generateMetaTags, r as generateRSSFeed, s as generateSitemap, t as generateSlug, u as generateStructuredData, v as getBlogConfig, w as getCategoryBySlug, x as getCollection, y as getConfig, z as getDb, A as getEnvConfig, B as getPostById, C as getPostBySlug, E as listCategories, G as listPosts, H as processImage, I as searchPosts } from '../index-vjlZDWNr.cjs';
2
+ export { A as ApiErrorResponse, a as ApiResponse, b as ApiSuccessResponse, c as Author, q as AuthorSchema, B as BlockContent, d as BlockType, r as BlockTypeSchema, e as BlogPost, f as BlogSettings, s as BlogSettingsSchema, C as Category, g as CreateCategoryInput, t as CreateCategorySchema, h as CreatePostInput, u as CreatePostSchema, M as Media, i as MediaListQuery, j as MediaReference, v as MediaSchema, N as NextBlogKitConfig, P as PostListQuery, k as PostSEO, w as PostSEOSchema, l as PostStatus, x as PostStatusSchema, R as Revision, S as SEOCheck, m as SEOCheckStatus, n as SEOOverallScore, o as SEOScore, U as UpdateCategoryInput, y as UpdateCategorySchema, p as UpdatePostInput, z as UpdatePostSchema } from '../types-CBEEBR4A.cjs';
3
+ import 'zod';
4
+ import 'mongodb';
@@ -0,0 +1,4 @@
1
+ export { R as R2StorageProvider, c as calculateReadingTime, a as calculateSEOScore, b as countWords, g as defineConfig, k as ensureIndexes, l as ensureUniqueSlug, m as extractTextFromBlocks, n as extractTextFromHTML, o as generateBreadcrumbs, q as generateMetaTags, r as generateRSSFeed, s as generateSitemap, t as generateSlug, u as generateStructuredData, v as getBlogConfig, w as getCategoryBySlug, x as getCollection, y as getConfig, z as getDb, A as getEnvConfig, B as getPostById, C as getPostBySlug, E as listCategories, G as listPosts, H as processImage, I as searchPosts } from '../index-Cgzphklp.js';
2
+ export { A as ApiErrorResponse, a as ApiResponse, b as ApiSuccessResponse, c as Author, q as AuthorSchema, B as BlockContent, d as BlockType, r as BlockTypeSchema, e as BlogPost, f as BlogSettings, s as BlogSettingsSchema, C as Category, g as CreateCategoryInput, t as CreateCategorySchema, h as CreatePostInput, u as CreatePostSchema, M as Media, i as MediaListQuery, j as MediaReference, v as MediaSchema, N as NextBlogKitConfig, P as PostListQuery, k as PostSEO, w as PostSEOSchema, l as PostStatus, x as PostStatusSchema, R as Revision, S as SEOCheck, m as SEOCheckStatus, n as SEOOverallScore, o as SEOScore, U as UpdateCategoryInput, y as UpdateCategorySchema, p as UpdatePostInput, z as UpdatePostSchema } from '../types-CBEEBR4A.js';
3
+ import 'zod';
4
+ import 'mongodb';
@@ -0,0 +1,7 @@
1
+ export { calculateSEOScore, generateBreadcrumbs, generateMetaTags, generateStructuredData, searchPosts } from '../chunk-JM7QRXXK.js';
2
+ export { R2StorageProvider, processImage } from '../chunk-A2S32RZN.js';
3
+ export { generateSitemap } from '../chunk-4NKOJYWJ.js';
4
+ export { generateRSSFeed } from '../chunk-R6MO3QIP.js';
5
+ export { calculateReadingTime, countWords, defineConfig, ensureIndexes, ensureUniqueSlug, extractTextFromBlocks, extractTextFromHTML, generateSlug, getBlogConfig, getCategoryBySlug, getCollection, getConfig, getDb, getEnvConfig, getPostById, getPostBySlug, listCategories, listPosts } from '../chunk-64HUVJOZ.js';
6
+ //# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}