@highjumpdigitalsoftware/blog-kit 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 (397) hide show
  1. package/INTEGRATION.md +76 -0
  2. package/LICENSE +74 -0
  3. package/README.md +102 -0
  4. package/astro/AdPreview.astro +64 -0
  5. package/astro/AdPreviewPair.astro +10 -0
  6. package/astro/AuditFindings.astro +29 -0
  7. package/astro/AuditScores.astro +60 -0
  8. package/astro/AuthorCard.astro +32 -0
  9. package/astro/BeforeAfter.astro +26 -0
  10. package/astro/BlogBehaviors.astro +15 -0
  11. package/astro/CTABanner.astro +28 -0
  12. package/astro/CalloutBox.astro +28 -0
  13. package/astro/CaseStudyHero.astro +45 -0
  14. package/astro/ChannelMixBars.astro +33 -0
  15. package/astro/Checklist.astro +24 -0
  16. package/astro/ChecklistItem.astro +15 -0
  17. package/astro/CodeSnippet.astro +20 -0
  18. package/astro/ComparisonTable.astro +103 -0
  19. package/astro/Definition.astro +30 -0
  20. package/astro/DeliveryComparison.astro +40 -0
  21. package/astro/FAQList.astro +43 -0
  22. package/astro/FurtherReading.astro +34 -0
  23. package/astro/ImageFeature.astro +22 -0
  24. package/astro/Infographic.astro +12 -0
  25. package/astro/KeyMetric.astro +40 -0
  26. package/astro/KeywordTable.astro +69 -0
  27. package/astro/List.astro +46 -0
  28. package/astro/MetricHighlight.astro +77 -0
  29. package/astro/NewsletterCTA.astro +40 -0
  30. package/astro/NumberedCard.astro +6 -0
  31. package/astro/ProConBlock.astro +38 -0
  32. package/astro/ProseList.astro +46 -0
  33. package/astro/QuoteBlock.astro +72 -0
  34. package/astro/RegionCallout.astro +24 -0
  35. package/astro/RelatedPosts.astro +47 -0
  36. package/astro/ResultsStrip.astro +59 -0
  37. package/astro/ScoreBar.astro +19 -0
  38. package/astro/SerpPreview.astro +35 -0
  39. package/astro/ServicePromoCard.astro +21 -0
  40. package/astro/StatCard.astro +48 -0
  41. package/astro/StepBlock.astro +5 -0
  42. package/astro/TableOfContents.astro +12 -0
  43. package/astro/TimelineBlock.astro +30 -0
  44. package/astro/TipBox.astro +14 -0
  45. package/astro/TrafficChart.astro +61 -0
  46. package/astro/VerdictCard.astro +48 -0
  47. package/astro/blogkit/Article.astro +63 -0
  48. package/astro/blogkit/BlogIndex.astro +144 -0
  49. package/core/behaviors/code.js +78 -0
  50. package/core/behaviors/comparison.js +52 -0
  51. package/core/behaviors/delivery-comparison.js +52 -0
  52. package/core/behaviors/faq.js +61 -0
  53. package/core/behaviors/index.d.ts +3 -0
  54. package/core/behaviors/index.js +35 -0
  55. package/core/behaviors/keyword-table.js +52 -0
  56. package/core/behaviors/toc.js +130 -0
  57. package/core/css/base.css +146 -0
  58. package/core/css/components.css +2632 -0
  59. package/core/css/index-listing.css +207 -0
  60. package/core/css/index.css +13 -0
  61. package/core/css/tokens.css +127 -0
  62. package/core/icons.ts +20 -0
  63. package/core/lib.ts +70 -0
  64. package/core/manifest/components.json +573 -0
  65. package/core/manifest/frontmatter.json +19 -0
  66. package/core/manifest/templates.json +77 -0
  67. package/dist/core/behaviors/code.js +78 -0
  68. package/dist/core/behaviors/comparison.js +52 -0
  69. package/dist/core/behaviors/delivery-comparison.js +52 -0
  70. package/dist/core/behaviors/faq.js +61 -0
  71. package/dist/core/behaviors/index.d.ts +3 -0
  72. package/dist/core/behaviors/index.js +35 -0
  73. package/dist/core/behaviors/keyword-table.js +52 -0
  74. package/dist/core/behaviors/toc.js +130 -0
  75. package/dist/core/css/base.css +146 -0
  76. package/dist/core/css/components.css +2632 -0
  77. package/dist/core/css/index-listing.css +207 -0
  78. package/dist/core/css/index.css +13 -0
  79. package/dist/core/css/tokens.css +127 -0
  80. package/dist/core/icons.d.ts +2 -0
  81. package/dist/core/icons.d.ts.map +1 -0
  82. package/dist/core/icons.js +20 -0
  83. package/dist/core/icons.js.map +1 -0
  84. package/dist/core/lib.d.ts +21 -0
  85. package/dist/core/lib.d.ts.map +1 -0
  86. package/dist/core/lib.js +57 -0
  87. package/dist/core/lib.js.map +1 -0
  88. package/dist/core/manifest/components.json +573 -0
  89. package/dist/core/manifest/frontmatter.json +19 -0
  90. package/dist/core/manifest/templates.json +77 -0
  91. package/dist/package/adapters/hjd-api.d.ts +14 -0
  92. package/dist/package/adapters/hjd-api.d.ts.map +1 -0
  93. package/dist/package/adapters/hjd-api.js +57 -0
  94. package/dist/package/adapters/hjd-api.js.map +1 -0
  95. package/dist/package/adapters/index.d.ts +13 -0
  96. package/dist/package/adapters/index.d.ts.map +1 -0
  97. package/dist/package/adapters/index.js +16 -0
  98. package/dist/package/adapters/index.js.map +1 -0
  99. package/dist/package/adapters/local.d.ts +13 -0
  100. package/dist/package/adapters/local.d.ts.map +1 -0
  101. package/dist/package/adapters/local.js +72 -0
  102. package/dist/package/adapters/local.js.map +1 -0
  103. package/dist/package/adapters/source.d.ts +39 -0
  104. package/dist/package/adapters/source.d.ts.map +1 -0
  105. package/dist/package/adapters/source.js +19 -0
  106. package/dist/package/adapters/source.js.map +1 -0
  107. package/dist/package/article.d.ts +17 -0
  108. package/dist/package/article.d.ts.map +1 -0
  109. package/dist/package/article.js +37 -0
  110. package/dist/package/article.js.map +1 -0
  111. package/dist/package/astro/data.d.ts +45 -0
  112. package/dist/package/astro/data.d.ts.map +1 -0
  113. package/dist/package/astro/data.js +81 -0
  114. package/dist/package/astro/data.js.map +1 -0
  115. package/dist/package/astro/freshness.d.ts +11 -0
  116. package/dist/package/astro/freshness.d.ts.map +1 -0
  117. package/dist/package/astro/freshness.js +48 -0
  118. package/dist/package/astro/freshness.js.map +1 -0
  119. package/dist/package/astro/index.d.ts +12 -0
  120. package/dist/package/astro/index.d.ts.map +1 -0
  121. package/dist/package/astro/index.js +31 -0
  122. package/dist/package/astro/index.js.map +1 -0
  123. package/dist/package/blog-index.d.ts +10 -0
  124. package/dist/package/blog-index.d.ts.map +1 -0
  125. package/dist/package/blog-index.js +27 -0
  126. package/dist/package/blog-index.js.map +1 -0
  127. package/dist/package/cli/exchange.d.ts +27 -0
  128. package/dist/package/cli/exchange.d.ts.map +1 -0
  129. package/dist/package/cli/exchange.js +94 -0
  130. package/dist/package/cli/exchange.js.map +1 -0
  131. package/dist/package/cli/index.d.ts +3 -0
  132. package/dist/package/cli/index.d.ts.map +1 -0
  133. package/dist/package/cli/index.js +301 -0
  134. package/dist/package/cli/index.js.map +1 -0
  135. package/dist/package/config/define.d.ts +13 -0
  136. package/dist/package/config/define.d.ts.map +1 -0
  137. package/dist/package/config/define.js +14 -0
  138. package/dist/package/config/define.js.map +1 -0
  139. package/dist/package/config/resolve.d.ts +11 -0
  140. package/dist/package/config/resolve.d.ts.map +1 -0
  141. package/dist/package/config/resolve.js +43 -0
  142. package/dist/package/config/resolve.js.map +1 -0
  143. package/dist/package/config/types.d.ts +74 -0
  144. package/dist/package/config/types.d.ts.map +1 -0
  145. package/dist/package/config/types.js +13 -0
  146. package/dist/package/config/types.js.map +1 -0
  147. package/dist/package/index-core.d.ts +28 -0
  148. package/dist/package/index-core.d.ts.map +1 -0
  149. package/dist/package/index-core.js +102 -0
  150. package/dist/package/index-core.js.map +1 -0
  151. package/dist/package/index.d.ts +13 -0
  152. package/dist/package/index.d.ts.map +1 -0
  153. package/dist/package/index.js +25 -0
  154. package/dist/package/index.js.map +1 -0
  155. package/dist/package/mdx/render-astro.d.ts +18 -0
  156. package/dist/package/mdx/render-astro.d.ts.map +1 -0
  157. package/dist/package/mdx/render-astro.js +75 -0
  158. package/dist/package/mdx/render-astro.js.map +1 -0
  159. package/dist/package/mdx/render.d.ts +13 -0
  160. package/dist/package/mdx/render.d.ts.map +1 -0
  161. package/dist/package/mdx/render.js +37 -0
  162. package/dist/package/mdx/render.js.map +1 -0
  163. package/dist/react/AdPreview.d.ts +26 -0
  164. package/dist/react/AdPreview.d.ts.map +1 -0
  165. package/dist/react/AdPreview.js +8 -0
  166. package/dist/react/AdPreview.js.map +1 -0
  167. package/dist/react/AdPreviewPair.d.ts +7 -0
  168. package/dist/react/AdPreviewPair.d.ts.map +1 -0
  169. package/dist/react/AdPreviewPair.js +5 -0
  170. package/dist/react/AdPreviewPair.js.map +1 -0
  171. package/dist/react/AuditFindings.d.ts +14 -0
  172. package/dist/react/AuditFindings.d.ts.map +1 -0
  173. package/dist/react/AuditFindings.js +5 -0
  174. package/dist/react/AuditFindings.js.map +1 -0
  175. package/dist/react/AuditScores.d.ts +12 -0
  176. package/dist/react/AuditScores.d.ts.map +1 -0
  177. package/dist/react/AuditScores.js +25 -0
  178. package/dist/react/AuditScores.js.map +1 -0
  179. package/dist/react/AuthorCard.d.ts +10 -0
  180. package/dist/react/AuthorCard.d.ts.map +1 -0
  181. package/dist/react/AuthorCard.js +6 -0
  182. package/dist/react/AuthorCard.js.map +1 -0
  183. package/dist/react/BeforeAfter.d.ts +12 -0
  184. package/dist/react/BeforeAfter.d.ts.map +1 -0
  185. package/dist/react/BeforeAfter.js +7 -0
  186. package/dist/react/BeforeAfter.js.map +1 -0
  187. package/dist/react/BlogBehaviors.d.ts +10 -0
  188. package/dist/react/BlogBehaviors.d.ts.map +1 -0
  189. package/dist/react/BlogBehaviors.js +20 -0
  190. package/dist/react/BlogBehaviors.js.map +1 -0
  191. package/dist/react/CTABanner.d.ts +8 -0
  192. package/dist/react/CTABanner.d.ts.map +1 -0
  193. package/dist/react/CTABanner.js +9 -0
  194. package/dist/react/CTABanner.js.map +1 -0
  195. package/dist/react/CalloutBox.d.ts +13 -0
  196. package/dist/react/CalloutBox.d.ts.map +1 -0
  197. package/dist/react/CalloutBox.js +9 -0
  198. package/dist/react/CalloutBox.js.map +1 -0
  199. package/dist/react/CaseStudyHero.d.ts +20 -0
  200. package/dist/react/CaseStudyHero.d.ts.map +1 -0
  201. package/dist/react/CaseStudyHero.js +7 -0
  202. package/dist/react/CaseStudyHero.js.map +1 -0
  203. package/dist/react/ChannelMixBars.d.ts +18 -0
  204. package/dist/react/ChannelMixBars.d.ts.map +1 -0
  205. package/dist/react/ChannelMixBars.js +6 -0
  206. package/dist/react/ChannelMixBars.js.map +1 -0
  207. package/dist/react/Checklist.d.ts +10 -0
  208. package/dist/react/Checklist.d.ts.map +1 -0
  209. package/dist/react/Checklist.js +7 -0
  210. package/dist/react/Checklist.js.map +1 -0
  211. package/dist/react/ChecklistItem.d.ts +7 -0
  212. package/dist/react/ChecklistItem.d.ts.map +1 -0
  213. package/dist/react/ChecklistItem.js +5 -0
  214. package/dist/react/ChecklistItem.js.map +1 -0
  215. package/dist/react/CodeSnippet.d.ts +17 -0
  216. package/dist/react/CodeSnippet.d.ts.map +1 -0
  217. package/dist/react/CodeSnippet.js +14 -0
  218. package/dist/react/CodeSnippet.js.map +1 -0
  219. package/dist/react/ComparisonTable.d.ts +22 -0
  220. package/dist/react/ComparisonTable.d.ts.map +1 -0
  221. package/dist/react/ComparisonTable.js +35 -0
  222. package/dist/react/ComparisonTable.js.map +1 -0
  223. package/dist/react/Definition.d.ts +9 -0
  224. package/dist/react/Definition.d.ts.map +1 -0
  225. package/dist/react/Definition.js +19 -0
  226. package/dist/react/Definition.js.map +1 -0
  227. package/dist/react/DeliveryComparison.d.ts +16 -0
  228. package/dist/react/DeliveryComparison.d.ts.map +1 -0
  229. package/dist/react/DeliveryComparison.js +7 -0
  230. package/dist/react/DeliveryComparison.js.map +1 -0
  231. package/dist/react/FAQList.d.ts +20 -0
  232. package/dist/react/FAQList.d.ts.map +1 -0
  233. package/dist/react/FAQList.js +19 -0
  234. package/dist/react/FAQList.js.map +1 -0
  235. package/dist/react/FurtherReading.d.ts +21 -0
  236. package/dist/react/FurtherReading.d.ts.map +1 -0
  237. package/dist/react/FurtherReading.js +13 -0
  238. package/dist/react/FurtherReading.js.map +1 -0
  239. package/dist/react/ImageFeature.d.ts +9 -0
  240. package/dist/react/ImageFeature.d.ts.map +1 -0
  241. package/dist/react/ImageFeature.js +6 -0
  242. package/dist/react/ImageFeature.js.map +1 -0
  243. package/dist/react/Infographic.d.ts +6 -0
  244. package/dist/react/Infographic.d.ts.map +1 -0
  245. package/dist/react/Infographic.js +7 -0
  246. package/dist/react/Infographic.js.map +1 -0
  247. package/dist/react/KeyMetric.d.ts +16 -0
  248. package/dist/react/KeyMetric.d.ts.map +1 -0
  249. package/dist/react/KeyMetric.js +15 -0
  250. package/dist/react/KeyMetric.js.map +1 -0
  251. package/dist/react/KeywordTable.d.ts +18 -0
  252. package/dist/react/KeywordTable.d.ts.map +1 -0
  253. package/dist/react/KeywordTable.js +23 -0
  254. package/dist/react/KeywordTable.js.map +1 -0
  255. package/dist/react/List.d.ts +11 -0
  256. package/dist/react/List.d.ts.map +1 -0
  257. package/dist/react/List.js +21 -0
  258. package/dist/react/List.js.map +1 -0
  259. package/dist/react/MetricHighlight.d.ts +15 -0
  260. package/dist/react/MetricHighlight.d.ts.map +1 -0
  261. package/dist/react/MetricHighlight.js +26 -0
  262. package/dist/react/MetricHighlight.js.map +1 -0
  263. package/dist/react/NewsletterCTA.d.ts +9 -0
  264. package/dist/react/NewsletterCTA.d.ts.map +1 -0
  265. package/dist/react/NewsletterCTA.js +5 -0
  266. package/dist/react/NewsletterCTA.js.map +1 -0
  267. package/dist/react/NumberedCard.d.ts +9 -0
  268. package/dist/react/NumberedCard.d.ts.map +1 -0
  269. package/dist/react/NumberedCard.js +7 -0
  270. package/dist/react/NumberedCard.js.map +1 -0
  271. package/dist/react/ProConBlock.d.ts +6 -0
  272. package/dist/react/ProConBlock.d.ts.map +1 -0
  273. package/dist/react/ProConBlock.js +7 -0
  274. package/dist/react/ProConBlock.js.map +1 -0
  275. package/dist/react/ProseList.d.ts +17 -0
  276. package/dist/react/ProseList.d.ts.map +1 -0
  277. package/dist/react/ProseList.js +26 -0
  278. package/dist/react/ProseList.js.map +1 -0
  279. package/dist/react/QuoteBlock.d.ts +17 -0
  280. package/dist/react/QuoteBlock.d.ts.map +1 -0
  281. package/dist/react/QuoteBlock.js +26 -0
  282. package/dist/react/QuoteBlock.js.map +1 -0
  283. package/dist/react/RegionCallout.d.ts +13 -0
  284. package/dist/react/RegionCallout.d.ts.map +1 -0
  285. package/dist/react/RegionCallout.js +5 -0
  286. package/dist/react/RegionCallout.js.map +1 -0
  287. package/dist/react/RelatedPosts.d.ts +20 -0
  288. package/dist/react/RelatedPosts.d.ts.map +1 -0
  289. package/dist/react/RelatedPosts.js +7 -0
  290. package/dist/react/RelatedPosts.js.map +1 -0
  291. package/dist/react/ResultsStrip.d.ts +18 -0
  292. package/dist/react/ResultsStrip.d.ts.map +1 -0
  293. package/dist/react/ResultsStrip.js +22 -0
  294. package/dist/react/ResultsStrip.js.map +1 -0
  295. package/dist/react/ScoreBar.d.ts +8 -0
  296. package/dist/react/ScoreBar.d.ts.map +1 -0
  297. package/dist/react/ScoreBar.js +6 -0
  298. package/dist/react/ScoreBar.js.map +1 -0
  299. package/dist/react/SerpPreview.d.ts +18 -0
  300. package/dist/react/SerpPreview.d.ts.map +1 -0
  301. package/dist/react/SerpPreview.js +13 -0
  302. package/dist/react/SerpPreview.js.map +1 -0
  303. package/dist/react/ServicePromoCard.d.ts +14 -0
  304. package/dist/react/ServicePromoCard.d.ts.map +1 -0
  305. package/dist/react/ServicePromoCard.js +12 -0
  306. package/dist/react/ServicePromoCard.js.map +1 -0
  307. package/dist/react/StatCard.d.ts +13 -0
  308. package/dist/react/StatCard.d.ts.map +1 -0
  309. package/dist/react/StatCard.js +20 -0
  310. package/dist/react/StatCard.js.map +1 -0
  311. package/dist/react/StepBlock.d.ts +8 -0
  312. package/dist/react/StepBlock.d.ts.map +1 -0
  313. package/dist/react/StepBlock.js +5 -0
  314. package/dist/react/StepBlock.js.map +1 -0
  315. package/dist/react/TableOfContents.d.ts +14 -0
  316. package/dist/react/TableOfContents.d.ts.map +1 -0
  317. package/dist/react/TableOfContents.js +12 -0
  318. package/dist/react/TableOfContents.js.map +1 -0
  319. package/dist/react/TimelineBlock.d.ts +14 -0
  320. package/dist/react/TimelineBlock.d.ts.map +1 -0
  321. package/dist/react/TimelineBlock.js +8 -0
  322. package/dist/react/TimelineBlock.js.map +1 -0
  323. package/dist/react/TipBox.d.ts +6 -0
  324. package/dist/react/TipBox.d.ts.map +1 -0
  325. package/dist/react/TipBox.js +5 -0
  326. package/dist/react/TipBox.js.map +1 -0
  327. package/dist/react/TrafficChart.d.ts +16 -0
  328. package/dist/react/TrafficChart.d.ts.map +1 -0
  329. package/dist/react/TrafficChart.js +14 -0
  330. package/dist/react/TrafficChart.js.map +1 -0
  331. package/dist/react/VerdictCard.d.ts +15 -0
  332. package/dist/react/VerdictCard.d.ts.map +1 -0
  333. package/dist/react/VerdictCard.js +5 -0
  334. package/dist/react/VerdictCard.js.map +1 -0
  335. package/dist/react/components-map.d.ts +133 -0
  336. package/dist/react/components-map.d.ts.map +1 -0
  337. package/dist/react/components-map.js +120 -0
  338. package/dist/react/components-map.js.map +1 -0
  339. package/dist/react/index.d.ts +5 -0
  340. package/dist/react/index.d.ts.map +1 -0
  341. package/dist/react/index.js +13 -0
  342. package/dist/react/index.js.map +1 -0
  343. package/package.json +116 -0
  344. package/react/AdPreview.tsx +94 -0
  345. package/react/AdPreviewPair.tsx +16 -0
  346. package/react/AuditFindings.tsx +43 -0
  347. package/react/AuditScores.tsx +73 -0
  348. package/react/AuthorCard.tsx +35 -0
  349. package/react/BeforeAfter.tsx +27 -0
  350. package/react/BlogBehaviors.tsx +21 -0
  351. package/react/CTABanner.tsx +32 -0
  352. package/react/CalloutBox.tsx +31 -0
  353. package/react/CaseStudyHero.tsx +71 -0
  354. package/react/ChannelMixBars.tsx +50 -0
  355. package/react/Checklist.tsx +31 -0
  356. package/react/ChecklistItem.tsx +19 -0
  357. package/react/CodeSnippet.tsx +36 -0
  358. package/react/ComparisonTable.tsx +114 -0
  359. package/react/Definition.tsx +36 -0
  360. package/react/DeliveryComparison.tsx +62 -0
  361. package/react/FAQList.tsx +61 -0
  362. package/react/FurtherReading.tsx +46 -0
  363. package/react/ImageFeature.tsx +26 -0
  364. package/react/Infographic.tsx +18 -0
  365. package/react/KeyMetric.tsx +61 -0
  366. package/react/KeywordTable.tsx +92 -0
  367. package/react/List.tsx +58 -0
  368. package/react/MetricHighlight.tsx +86 -0
  369. package/react/NewsletterCTA.tsx +48 -0
  370. package/react/NumberedCard.tsx +7 -0
  371. package/react/ProConBlock.tsx +42 -0
  372. package/react/ProseList.tsx +72 -0
  373. package/react/QuoteBlock.tsx +89 -0
  374. package/react/RegionCallout.tsx +38 -0
  375. package/react/RelatedPosts.tsx +58 -0
  376. package/react/ResultsStrip.tsx +77 -0
  377. package/react/ScoreBar.tsx +27 -0
  378. package/react/SerpPreview.tsx +59 -0
  379. package/react/ServicePromoCard.tsx +43 -0
  380. package/react/StatCard.tsx +62 -0
  381. package/react/StepBlock.tsx +5 -0
  382. package/react/TableOfContents.tsx +27 -0
  383. package/react/TimelineBlock.tsx +35 -0
  384. package/react/TipBox.tsx +16 -0
  385. package/react/TrafficChart.tsx +79 -0
  386. package/react/VerdictCard.tsx +60 -0
  387. package/react/components-map.ts +122 -0
  388. package/react/index.ts +13 -0
  389. package/templates/blogkit/app/api/blogkit/revalidate/route.ts.tmpl +32 -0
  390. package/templates/blogkit/app/blog/[slug]/page.tsx.tmpl +41 -0
  391. package/templates/blogkit/app/blog/page.tsx.tmpl +18 -0
  392. package/templates/blogkit/blogkit.config.ts.tmpl +23 -0
  393. package/templates/blogkit-astro/BLOGKIT_ASTRO_SETUP.md.tmpl +49 -0
  394. package/templates/blogkit-astro/src/blogkit.config.ts.tmpl +29 -0
  395. package/templates/blogkit-astro/src/pages/api/blogkit/revalidate.ts.tmpl +46 -0
  396. package/templates/blogkit-astro/src/pages/blog/[slug].astro.tmpl +39 -0
  397. package/templates/blogkit-astro/src/pages/blog/index.astro.tmpl +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../../package/astro/freshness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;kEAqBkE;AAQlE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEhD,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB;IAC/B,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,GAAW,EACX,UAAkB,EAClB,MAAwB;IAExB,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,MAAM,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAyB,CAAC;IACnD,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,GAAG,GAAG;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { defineConfig } from "../config/define";
2
+ export { resolveConfig } from "../config/resolve";
3
+ export type { BlogKitConfig, ResolvedConfig, SourceConfig, SourceMode, LocalSourceConfig, HjdApiSourceConfig, BrandConfig, ListingConfig, FreshnessConfig, } from "../config/types";
4
+ export { createSource, LocalSource, HjdApiSource } from "../adapters";
5
+ export type { ContentSource, PostMeta, PostWithBody, PostFrontmatter, } from "../adapters";
6
+ export { renderMdxToHtml } from "../mdx/render-astro";
7
+ export type { RenderMdxToHtmlOptions } from "../mdx/render-astro";
8
+ export { loadPosts, loadSlugs, loadPost, loadArticle, loadIndex, } from "./data";
9
+ export type { ArticleData, IndexData } from "./data";
10
+ export { clearBlogkitCache, clearBlogkitCacheKey, cached } from "./freshness";
11
+ export * from "../index-core";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../package/astro/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,GACV,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGrD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG9E,cAAc,eAAe,CAAC"}
@@ -0,0 +1,31 @@
1
+ /* ============================================================
2
+ @highjumpdigitalsoftware/blog-kit/astro — Astro managed-path entry.
3
+ ------------------------------------------------------------
4
+ The Astro counterpart of the package root export. A site's
5
+ `.astro` routes import data loaders + config from here:
6
+
7
+ import { resolveConfig, loadIndex, loadArticle }
8
+ from "@highjumpdigitalsoftware/blog-kit/astro";
9
+
10
+ and the render-surface .astro components from
11
+ "@highjumpdigitalsoftware/blog-kit/astro/Article.astro" etc. (shipped raw).
12
+
13
+ This barrel pulls ONLY Next-free modules (config + adapters +
14
+ the runtime-MDX render + the Astro data/freshness layer), so it
15
+ imports cleanly under raw Astro/Node SSR — it never touches the
16
+ React barrel's <BlogBehaviors> (which imports next/navigation).
17
+ ============================================================ */
18
+ // Config (shared with the Next path)
19
+ export { defineConfig } from "../config/define.js";
20
+ export { resolveConfig } from "../config/resolve.js";
21
+ // Source adapters (the swap point — identical to the Next path)
22
+ export { createSource, LocalSource, HjdApiSource } from "../adapters/index.js";
23
+ // Runtime MDX render (remote string -> HTML, request-time)
24
+ export { renderMdxToHtml } from "../mdx/render-astro.js";
25
+ // Astro data layer (what the .astro routes call)
26
+ export { loadPosts, loadSlugs, loadPost, loadArticle, loadIndex, } from "./data.js";
27
+ // Freshness (cache + the revalidate hook)
28
+ export { clearBlogkitCache, clearBlogkitCacheKey, cached } from "./freshness.js";
29
+ // Pure listing helpers (category/pagination/href) — reused by .astro routes
30
+ export * from "../index-core.js";
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../package/astro/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;kEAgBkE;AAElE,qCAAqC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAalD,gEAAgE;AAChE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQtE,2DAA2D;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,iDAAiD;AACjD,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,GACV,MAAM,QAAQ,CAAC;AAGhB,0CAA0C;AAC1C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE9E,4EAA4E;AAC5E,cAAc,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ResolvedConfig } from "./config/types";
2
+ export interface BlogIndexProps {
3
+ config: ResolvedConfig;
4
+ /** 1-based page (from the route params). Default 1. */
5
+ page?: number;
6
+ /** Optional category slug to filter by. */
7
+ categorySlug?: string;
8
+ }
9
+ export declare function BlogIndex({ config, page, categorySlug }: BlogIndexProps): Promise<import("react").JSX.Element>;
10
+ //# sourceMappingURL=blog-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-index.d.ts","sourceRoot":"","sources":["../../package/blog-index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAgBrD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAyCD,wBAAsB,SAAS,CAAC,EAAE,MAAM,EAAE,IAAQ,EAAE,YAAY,EAAE,EAAE,cAAc,wCAmFjF"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createSource } from "./adapters/index.js";
3
+ import { getCategories, getFeatured, paginate, postsInCategory, categoryHref, listingHref, articleHref, formatDate, readingLabel, } from "./index-core.js";
4
+ function Card({ post, config, featured = false, }) {
5
+ const href = articleHref(config.listing.articleBasePath, post.slug);
6
+ const cls = featured ? "bk-idx-card bk-idx-card--featured" : "bk-idx-card";
7
+ return (_jsxs("a", { className: cls, href: href, children: [_jsx("div", { className: `bk-idx-thumb${post.featuredImage ? "" : " bk-idx-thumb--ph"}`, "aria-hidden": post.featuredImage ? undefined : true, children: post.featuredImage && (_jsx("img", { className: "bk-idx-img", src: post.featuredImage, alt: post.featuredImageAlt ?? post.title, loading: "lazy" })) }), _jsxs("div", { className: "bk-idx-body", children: [post.category && _jsx("span", { className: "bk-idx-cat", children: post.category }), _jsx("h3", { className: "bk-idx-title", children: post.title }), _jsx("p", { className: "bk-idx-desc", children: post.description }), _jsxs("p", { className: "bk-idx-meta", children: [formatDate(post.date, config.listing.dateLocale), post.readingTime ? ` · ${readingLabel(post.readingTime)}` : ""] })] })] }));
8
+ }
9
+ export async function BlogIndex({ config, page = 1, categorySlug }) {
10
+ const source = createSource(config);
11
+ const all = await source.listPosts();
12
+ const { listing } = config;
13
+ const scoped = categorySlug ? postsInCategory(all, categorySlug) : all;
14
+ const featured = !categorySlug && listing.showFeaturedHero && page <= 1
15
+ ? getFeatured(scoped, listing.pinnedSlug)
16
+ : null;
17
+ const pool = featured ? scoped.filter((p) => p.slug !== featured.slug) : scoped;
18
+ const paged = paginate(pool, page, listing.pageSize);
19
+ const cats = getCategories(all, listing.categoryLabels, listing.categoryOrder);
20
+ const base = categorySlug
21
+ ? (p) => categoryHref(listing.listingBasePath, categorySlug, p)
22
+ : (p) => listingHref(listing.listingBasePath, p);
23
+ return (_jsxs("div", { className: "blog-root bk-idx", children: [_jsxs("header", { className: "bk-idx-head", children: [_jsx("p", { className: "bk-idx-eyebrow", children: config.brand.name }), _jsx("h1", { className: "bk-idx-h1", children: categorySlug
24
+ ? cats.find((c) => c.slug === categorySlug)?.label ?? "Articles"
25
+ : "Latest articles" })] }), listing.showCategoryNav && cats.length > 0 && (_jsxs("nav", { className: "bk-idx-nav", "aria-label": "Categories", children: [_jsx("a", { className: `bk-idx-pill${!categorySlug ? " is-active" : ""}`, href: listingHref(listing.listingBasePath, 1), children: "All" }), cats.map((c) => (_jsxs("a", { className: `bk-idx-pill${c.slug === categorySlug ? " is-active" : ""}`, href: categoryHref(listing.listingBasePath, c.slug, 1), children: [c.label, " ", _jsx("span", { className: "bk-idx-pill-count", children: c.count })] }, c.slug)))] })), featured && (_jsx("section", { className: "bk-idx-featured", children: _jsx(Card, { post: featured, config: config, featured: true }) })), paged.items.length > 0 ? (_jsx("section", { className: "bk-idx-grid", children: paged.items.map((p) => (_jsx(Card, { post: p, config: config }, p.slug))) })) : featured ? null : (_jsx("p", { className: "bk-idx-empty", children: "No articles yet." })), paged.totalPages > 1 && (_jsxs("nav", { className: "bk-idx-pager", "aria-label": "Pagination", children: [paged.page > 1 && (_jsx("a", { className: "bk-idx-pagelink", href: base(paged.page - 1), children: "\u2190 Newer" })), _jsxs("span", { className: "bk-idx-pageinfo", children: ["Page ", paged.page, " of ", paged.totalPages] }), paged.page < paged.totalPages && (_jsx("a", { className: "bk-idx-pagelink", href: base(paged.page + 1), children: "Older \u2192" }))] }))] }));
26
+ }
27
+ //# sourceMappingURL=blog-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-index.js","sourceRoot":"","sources":["../../package/blog-index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface ExchangeResult {
2
+ /** Per-tenant content endpoint (no trailing slash). -> BLOGKIT_CONTENT_URL */
3
+ contentUrl: string;
4
+ /** Per-site bearer token. -> BLOGKIT_SITE_TOKEN (secret) */
5
+ siteToken: string;
6
+ /** Optional shared secret for the on-demand revalidate route. -> BLOGKIT_REVALIDATE_SECRET */
7
+ revalidateSecret?: string;
8
+ /** Display name for the site (drives the scaffolded config). */
9
+ brand: string;
10
+ /** Framework target. Default "next". */
11
+ framework?: "next" | "astro";
12
+ /** Echoed company id (provenance only — the token is the real binding). */
13
+ companyId?: string;
14
+ }
15
+ export interface ExchangeOptions {
16
+ /** Override the exchange base (for staging/local hjd-app or the Phase 0 mock). */
17
+ exchangeUrl?: string;
18
+ /** Package version, sent for diagnostics. */
19
+ version?: string;
20
+ }
21
+ /**
22
+ * Exchange a pairing code for the site's content URL + token.
23
+ * Phase 0: point --exchange-url at the local mock server (see
24
+ * scripts/mock-exchange.mjs). Phase 1: hjd-app serves the real route.
25
+ */
26
+ export declare function exchangePairingCode(pairingCode: string, opts?: ExchangeOptions): Promise<ExchangeResult>;
27
+ //# sourceMappingURL=exchange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../../package/cli/exchange.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyBD,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,cAAc,CAAC,CAgDzB"}
@@ -0,0 +1,94 @@
1
+ /* ============================================================
2
+ Pairing-code EXCHANGE CONTRACT (CLI ⇄ hjd-app)
3
+ ------------------------------------------------------------
4
+ `npx @highjumpdigitalsoftware/blog-kit connect <pairing-code>` trades a
5
+ short-lived, single-use pairing code for the per-site content
6
+ URL + token, so the client never copy-pastes a secret.
7
+
8
+ THE CONTRACT (Phase 1 hjd-app implements the endpoint;
9
+ Phase 0 stubs it):
10
+
11
+ POST {EXCHANGE_BASE}/connect/blogkit/v1/exchange
12
+ Content-Type: application/json
13
+ Body: { "pairingCode": "<code>", "client": "blog-kit-cli", "version": "<pkg ver>" }
14
+
15
+ 200 OK ExchangeResult (below) — code valid, not expired, unused
16
+ 400 { error: "invalid_code" | "expired" | "already_used" }
17
+ 429 { error: "rate_limited" }
18
+
19
+ The pairing code is minted by the /connect/blogkit wizard in
20
+ hjd-app (mirrors the existing 7-day connect-link JWT pattern,
21
+ but SHORT-lived — minutes — and single-use). Exchanging it
22
+ marks it used and returns the site's long-lived token.
23
+
24
+ EXCHANGE_BASE resolves from --exchange-url, else
25
+ BLOGKIT_EXCHANGE_URL env, else the production default.
26
+ ============================================================ */
27
+ const PROD_EXCHANGE_BASE = "https://apis.highjumpdigital.com";
28
+ /**
29
+ * Allow https everywhere; allow http ONLY for loopback (local dev / the Phase-0
30
+ * mock), where no real secret leaves the machine. Everything else (plain http to
31
+ * a remote host) is refused so a pairing code + site token can never be sent in
32
+ * cleartext over the network.
33
+ */
34
+ function isExchangeUrlAllowed(base) {
35
+ let u;
36
+ try {
37
+ u = new URL(base);
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ if (u.protocol === "https:")
43
+ return true;
44
+ if (u.protocol === "http:") {
45
+ const h = u.hostname;
46
+ return h === "localhost" || h === "127.0.0.1" || h === "::1" || h === "[::1]";
47
+ }
48
+ return false;
49
+ }
50
+ /**
51
+ * Exchange a pairing code for the site's content URL + token.
52
+ * Phase 0: point --exchange-url at the local mock server (see
53
+ * scripts/mock-exchange.mjs). Phase 1: hjd-app serves the real route.
54
+ */
55
+ export async function exchangePairingCode(pairingCode, opts = {}) {
56
+ const base = (opts.exchangeUrl ||
57
+ process.env.BLOGKIT_EXCHANGE_URL ||
58
+ PROD_EXCHANGE_BASE).replace(/\/+$/, "");
59
+ // The pairing code AND the returned long-lived site token travel over this
60
+ // request, so the channel must be encrypted. Refuse a plaintext-http base
61
+ // unless it's an explicit loopback override (the Phase-0 mock / a local
62
+ // hjd-app dev server), which never carries a real token off-box.
63
+ if (!isExchangeUrlAllowed(base)) {
64
+ throw new Error(`Refusing to exchange a pairing code over an insecure URL (${base}). ` +
65
+ `The exchange must be https:// (loopback http://localhost is allowed for local dev).`);
66
+ }
67
+ const url = `${base}/connect/blogkit/v1/exchange`;
68
+ const res = await fetch(url, {
69
+ method: "POST",
70
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
71
+ body: JSON.stringify({
72
+ pairingCode,
73
+ client: "blog-kit-cli",
74
+ version: opts.version ?? "0.1.0",
75
+ }),
76
+ });
77
+ if (!res.ok) {
78
+ let detail = "";
79
+ try {
80
+ detail = (await res.json())?.error ?? "";
81
+ }
82
+ catch {
83
+ /* ignore */
84
+ }
85
+ throw new Error(`Pairing exchange failed (${res.status}${detail ? ` ${detail}` : ""}). ` +
86
+ `Codes are short-lived and single-use — generate a fresh one in the connect wizard.`);
87
+ }
88
+ const data = (await res.json());
89
+ if (!data.contentUrl || !data.siteToken) {
90
+ throw new Error("Exchange response missing contentUrl/siteToken.");
91
+ }
92
+ return data;
93
+ }
94
+ //# sourceMappingURL=exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.js","sourceRoot":"","sources":["../../../package/cli/exchange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;kEAyBkE;AAiBlE,MAAM,kBAAkB,GAAG,kCAAkC,CAAC;AAE9D;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,CAAM,CAAC;IACX,IAAI,CAAC;QACH,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACrB,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,OAAwB,EAAE;IAE1B,MAAM,IAAI,GAAG,CACX,IAAI,CAAC,WAAW;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAChC,kBAAkB,CACnB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEtB,2EAA2E;IAC3E,0EAA0E;IAC1E,wEAAwE;IACxE,iEAAiE;IACjE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,6DAA6D,IAAI,KAAK;YACpE,qFAAqF,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,IAAI,8BAA8B,CAAC;IAElD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;QAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,WAAW;YACX,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO;SACjC,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK;YACtE,oFAAoF,CACvF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../package/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,301 @@
1
+ #!/usr/bin/env node
2
+ /* ============================================================
3
+ @highjumpdigitalsoftware/blog-kit CLI
4
+ ------------------------------------------------------------
5
+ blog-kit connect <pairing-code> exchange code → write config
6
+ + env + scaffold ISR routes
7
+ blog-kit init [--mode local|hjd-api] [--brand NAME]
8
+ scaffold without exchange (manual)
9
+ blog-kit eject (stub) flip hjd-api → local + dump
10
+ ============================================================ */
11
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync } from "node:fs";
12
+ import { dirname, join, resolve } from "node:path";
13
+ import { fileURLToPath } from "node:url";
14
+ import { exchangePairingCode } from "./exchange.js";
15
+ function readJson(p) {
16
+ try {
17
+ return JSON.parse(readFileSync(p, "utf-8"));
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ /** Walk up from the built CLI file until we find the dir holding the package's
24
+ own package.json. Robust to how deep tsc nests the emitted cli (dist/cli or
25
+ dist/package/cli) — we never assume a fixed number of "..". */
26
+ function findPkgRoot(start) {
27
+ let dir = start;
28
+ for (let i = 0; i < 8; i++) {
29
+ if (existsSync(join(dir, "package.json"))) {
30
+ const pj = readJson(join(dir, "package.json"));
31
+ if (pj?.name === "@highjumpdigitalsoftware/blog-kit")
32
+ return dir;
33
+ }
34
+ const parent = dirname(dir);
35
+ if (parent === dir)
36
+ break;
37
+ dir = parent;
38
+ }
39
+ // Fallback: two levels up (dist/cli -> root), the historical layout.
40
+ return resolve(start, "..", "..");
41
+ }
42
+ const PKG_ROOT = findPkgRoot(dirname(fileURLToPath(import.meta.url)));
43
+ /** CLI scaffold templates live at <root>/templates/blogkit{,-astro} (shipped
44
+ via package.json#files, NOT under dist). The framework selects which set. */
45
+ const TEMPLATES_NEXT = join(PKG_ROOT, "templates", "blogkit");
46
+ const TEMPLATES_ASTRO = join(PKG_ROOT, "templates", "blogkit-astro");
47
+ const PKG_VERSION = readJson(join(PKG_ROOT, "package.json"))?.version ?? "0.0.0";
48
+ // ── arg parsing ──────────────────────────────────────────────
49
+ function parseArgs(argv) {
50
+ const [cmd, ...rest] = argv;
51
+ const flags = {};
52
+ const positional = [];
53
+ for (let i = 0; i < rest.length; i++) {
54
+ const a = rest[i];
55
+ if (a.startsWith("--")) {
56
+ const key = a.slice(2);
57
+ const next = rest[i + 1];
58
+ if (next && !next.startsWith("--")) {
59
+ flags[key] = next;
60
+ i++;
61
+ }
62
+ else
63
+ flags[key] = true;
64
+ }
65
+ else
66
+ positional.push(a);
67
+ }
68
+ return { cmd, positional, flags };
69
+ }
70
+ // ── framework detection ──────────────────────────────────────
71
+ /** Sniff the project's framework from its files. The exchange/flag value wins;
72
+ this is the fallback when none was given. */
73
+ function detectFramework(cwd) {
74
+ // Astro: an astro.config.* or src/pages with .astro files
75
+ for (const c of ["astro.config.mjs", "astro.config.ts", "astro.config.js"]) {
76
+ if (existsSync(join(cwd, c)))
77
+ return "astro";
78
+ }
79
+ const pkg = readJson(join(cwd, "package.json"));
80
+ const deps = { ...(pkg?.dependencies ?? {}), ...(pkg?.devDependencies ?? {}) };
81
+ if (deps.astro && !deps.next)
82
+ return "astro";
83
+ if (deps.next)
84
+ return "next";
85
+ // default: Next (the historical behaviour)
86
+ return "next";
87
+ }
88
+ // ── project detection (Next) ─────────────────────────────────
89
+ function findAppDir(cwd) {
90
+ // Next.js App Router: src/app or app
91
+ for (const c of ["src/app", "app"]) {
92
+ if (existsSync(join(cwd, c)))
93
+ return join(cwd, c);
94
+ }
95
+ // create it under src/app if there's a src dir, else app
96
+ const target = existsSync(join(cwd, "src")) ? "src/app" : "app";
97
+ const full = join(cwd, target);
98
+ mkdirSync(full, { recursive: true });
99
+ console.log(` · created ${target}/ (no App Router found)`);
100
+ return full;
101
+ }
102
+ // recursively copy a templates tree into <destBase>/, stripping .tmpl and
103
+ // substituting __BRAND__ / __MODE__ as it writes. `apiMarker` is the sub-path
104
+ // fragment of the optional revalidate route, skipped unless requested — Next
105
+ // uses app/api/blogkit, Astro uses pages/api/blogkit.
106
+ function walkCopy(from, to, withRevalidate, apiMarker, brand, mode) {
107
+ for (const entry of readdirSync(from)) {
108
+ const fp = join(from, entry);
109
+ if (statSync(fp).isDirectory()) {
110
+ // skip the revalidate route dir unless requested
111
+ if (!withRevalidate && fp.includes(apiMarker))
112
+ continue;
113
+ walkCopy(fp, join(to, entry), withRevalidate, apiMarker, brand, mode);
114
+ }
115
+ else if (entry.endsWith(".tmpl")) {
116
+ const destName = entry.replace(/\.tmpl$/, "");
117
+ const dest = join(to, destName);
118
+ mkdirSync(dirname(dest), { recursive: true });
119
+ if (existsSync(dest)) {
120
+ console.log(` · skip (exists) ${rel(dest)}`);
121
+ continue;
122
+ }
123
+ const raw = readFileSync(fp, "utf-8");
124
+ const out = raw.replace(/__BRAND__/g, brand).replace(/__MODE__/g, mode);
125
+ writeFileSync(dest, out);
126
+ console.log(` · wrote ${rel(dest)}`);
127
+ }
128
+ }
129
+ }
130
+ function rel(p) {
131
+ return p.replace(process.cwd() + "/", "");
132
+ }
133
+ // ── Next.js scaffolding ──────────────────────────────────────
134
+ function scaffoldNext(cwd, brand, mode, withRevalidate) {
135
+ const appDir = findAppDir(cwd);
136
+ // config (templates/blogkit/blogkit.config.ts.tmpl -> appDir/blogkit.config.ts)
137
+ const cfgDest = join(appDir, "blogkit.config.ts");
138
+ if (existsSync(cfgDest)) {
139
+ console.log(` · skip (exists) ${rel(cfgDest)}`);
140
+ }
141
+ else {
142
+ const raw = readFileSync(join(TEMPLATES_NEXT, "blogkit.config.ts.tmpl"), "utf-8");
143
+ writeFileSync(cfgDest, raw.replace(/__BRAND__/g, brand).replace(/__MODE__/g, mode));
144
+ console.log(` · wrote ${rel(cfgDest)}`);
145
+ }
146
+ // routes (templates/blogkit/app/* -> appDir/*)
147
+ walkCopy(join(TEMPLATES_NEXT, "app"), appDir, withRevalidate, join("api", "blogkit"), brand, mode);
148
+ }
149
+ // ── Astro scaffolding ────────────────────────────────────────
150
+ function scaffoldAstro(cwd, brand, mode, withRevalidate) {
151
+ // The Astro template tree carries its own src/ prefix + a top-level setup doc,
152
+ // so it copies straight into cwd. config lands at src/blogkit.config.ts and
153
+ // the routes at src/pages/blog/*.
154
+ walkCopy(TEMPLATES_ASTRO, cwd, withRevalidate, join("api", "blogkit"), brand, mode);
155
+ }
156
+ function writeEnv(cwd, vars) {
157
+ const file = join(cwd, ".env.local");
158
+ let existing = existsSync(file) ? readFileSync(file, "utf-8") : "";
159
+ const lines = [];
160
+ for (const [k, v] of Object.entries(vars)) {
161
+ if (!v)
162
+ continue;
163
+ if (new RegExp(`^${k}=`, "m").test(existing)) {
164
+ existing = existing.replace(new RegExp(`^${k}=.*$`, "m"), `${k}=${v}`);
165
+ }
166
+ else {
167
+ lines.push(`${k}=${v}`);
168
+ }
169
+ }
170
+ const blob = existing.trimEnd() + (lines.length ? "\n" + lines.join("\n") + "\n" : "\n");
171
+ writeFileSync(file, blob);
172
+ console.log(` · wrote ${rel(file)} (${Object.keys(vars).filter((k) => vars[k]).join(", ")})`);
173
+ }
174
+ /** Resolve the framework: explicit flag > exchange value > sniff the project. */
175
+ function resolveFramework(cwd, flagValue, fromExchange) {
176
+ if (flagValue === "astro" || flagValue === "next")
177
+ return flagValue;
178
+ if (fromExchange === "astro" || fromExchange === "next")
179
+ return fromExchange;
180
+ return detectFramework(cwd);
181
+ }
182
+ function scaffold(framework, cwd, brand, mode, withRevalidate) {
183
+ if (framework === "astro")
184
+ scaffoldAstro(cwd, brand, mode, withRevalidate);
185
+ else
186
+ scaffoldNext(cwd, brand, mode, withRevalidate);
187
+ }
188
+ /** Per-framework next-steps banner. */
189
+ function nextSteps(framework, mode) {
190
+ console.log(`\nConnected. Next:`);
191
+ console.log(` 1. Put BLOGKIT_CONTENT_URL + BLOGKIT_SITE_TOKEN in your host's Secrets/Env.`);
192
+ if (framework === "astro") {
193
+ console.log(` 2. Run Astro in SSR mode so posts update with no redeploy:`);
194
+ console.log(` npx astro add node # or vercel / netlify / cloudflare`);
195
+ console.log(` # then set output: "server" in astro.config — see BLOGKIT_ASTRO_SETUP.md`);
196
+ console.log(` 3. Install the peer deps if you haven't:`);
197
+ console.log(` npm i @mdx-js/mdx react react-dom remark-gfm rehype-slug rehype-autolink-headings`);
198
+ console.log(` 4. Deploy. Your blog is at /blog (SSR, updates with no redeploy).\n`);
199
+ }
200
+ else {
201
+ console.log(` 2. Deploy. Your blog is at /blog (ISR, updates with no redeploy).`);
202
+ console.log(` 3. Install the peer deps if you haven't:`);
203
+ console.log(` npm i next-mdx-remote remark-gfm rehype-slug rehype-autolink-headings rehype-pretty-code\n`);
204
+ }
205
+ }
206
+ // ── commands ─────────────────────────────────────────────────
207
+ async function cmdConnect(code, flags) {
208
+ if (!code)
209
+ die("Usage: blog-kit connect <pairing-code>");
210
+ console.log(`\n@highjumpdigitalsoftware/blog-kit — connecting (code ${code.slice(0, 4)}…)\n`);
211
+ const result = await exchangePairingCode(code, {
212
+ exchangeUrl: typeof flags["exchange-url"] === "string" ? flags["exchange-url"] : undefined,
213
+ version: PKG_VERSION,
214
+ });
215
+ const cwd = process.cwd();
216
+ const framework = resolveFramework(cwd, flags["framework"], result.framework);
217
+ console.log(` ✓ exchanged — site "${result.brand}"${result.companyId ? ` (company ${result.companyId})` : ""} [${framework}]`);
218
+ const withReval = !!result.revalidateSecret || flags["revalidate"] === true;
219
+ scaffold(framework, cwd, result.brand, "hjd-api", withReval);
220
+ writeEnv(cwd, {
221
+ BLOGKIT_CONTENT_URL: result.contentUrl,
222
+ BLOGKIT_SITE_TOKEN: result.siteToken,
223
+ BLOGKIT_REVALIDATE_SECRET: result.revalidateSecret,
224
+ });
225
+ nextSteps(framework, "hjd-api");
226
+ }
227
+ function cmdInit(flags) {
228
+ const mode = flags["mode"] === "local" ? "local" : "hjd-api";
229
+ const brand = flags["brand"] || "Your Brand";
230
+ const cwd = process.cwd();
231
+ const framework = resolveFramework(cwd, flags["framework"], undefined);
232
+ console.log(`\n@highjumpdigitalsoftware/blog-kit — init (framework: ${framework}, mode: ${mode})\n`);
233
+ scaffold(framework, cwd, brand, mode, flags["revalidate"] === true);
234
+ if (mode === "local") {
235
+ const posts = join(cwd, "content", "posts");
236
+ mkdirSync(posts, { recursive: true });
237
+ console.log(` · ensured ${rel(posts)}/ (drop .mdx here)`);
238
+ }
239
+ else {
240
+ writeEnv(cwd, {
241
+ BLOGKIT_CONTENT_URL: "https://REPLACE-ME",
242
+ BLOGKIT_SITE_TOKEN: "REPLACE-ME",
243
+ });
244
+ console.log(` · set BLOGKIT_CONTENT_URL / BLOGKIT_SITE_TOKEN placeholders in .env.local`);
245
+ }
246
+ const cfgPath = framework === "astro" ? "src/blogkit.config.ts" : "app/blogkit.config.ts (or src/app)";
247
+ console.log(`\nScaffolded (${framework}). Edit ${cfgPath}, then deploy.\n`);
248
+ }
249
+ function cmdEject() {
250
+ console.log("\n`blog-kit eject` is implemented in Phase 4 (cutover):\n" +
251
+ " · download all posts → content/posts/*.mdx\n" +
252
+ " · download images → public/blog/… and rewrite URLs to relative paths\n" +
253
+ " · flip blogkit.config source.mode: 'hjd-api' → 'local'\n" +
254
+ "The flip itself already works today — set source.mode:'local' and provide the .mdx.\n");
255
+ }
256
+ function die(msg) {
257
+ console.error(`\nerror: ${msg}\n`);
258
+ process.exit(1);
259
+ }
260
+ function help() {
261
+ console.log(`@highjumpdigitalsoftware/blog-kit ${PKG_VERSION}
262
+
263
+ Usage:
264
+ npx @highjumpdigitalsoftware/blog-kit connect <pairing-code> Connect this site to High Jump Digital
265
+ npx @highjumpdigitalsoftware/blog-kit init [--mode local|hjd-api] [--framework next|astro] [--brand "Name"] [--revalidate]
266
+ npx @highjumpdigitalsoftware/blog-kit eject (Phase 4)
267
+
268
+ The framework (next | astro) is taken from the exchange, else --framework, else
269
+ sniffed from the project (astro.config / package.json). Next scaffolds App-Router
270
+ ISR routes; Astro scaffolds SSR routes that compile remote MDX at request time.
271
+
272
+ Flags:
273
+ --framework next|astro Force the target framework (overrides detection)
274
+ --exchange-url <url> Override the exchange endpoint (staging/local/mock)
275
+ --revalidate Also scaffold the /api/blogkit/revalidate route (instant cache bust)
276
+ `);
277
+ }
278
+ async function main() {
279
+ const { cmd, positional, flags } = parseArgs(process.argv.slice(2));
280
+ switch (cmd) {
281
+ case "connect":
282
+ await cmdConnect(positional[0], flags);
283
+ break;
284
+ case "init":
285
+ cmdInit(flags);
286
+ break;
287
+ case "eject":
288
+ cmdEject();
289
+ break;
290
+ case undefined:
291
+ case "help":
292
+ case "--help":
293
+ case "-h":
294
+ help();
295
+ break;
296
+ default:
297
+ die(`unknown command "${cmd}". Run \`blog-kit help\`.`);
298
+ }
299
+ }
300
+ main().catch((err) => die(err?.message ?? String(err)));
301
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../package/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { BlogKitConfig } from "./types";
2
+ /**
3
+ * Identity helper for editor autocomplete + type-checking of the site's
4
+ * blogkit.config. Returns the config unchanged; routes pass it through
5
+ * resolveConfig().
6
+ *
7
+ * export default defineConfig({
8
+ * source: { mode: "hjd-api" }, // URL+token from env
9
+ * brand: { name: "Acme Co" },
10
+ * });
11
+ */
12
+ export declare function defineConfig(cfg: BlogKitConfig): BlogKitConfig;
13
+ //# sourceMappingURL=define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../package/config/define.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa,CAE9D"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Identity helper for editor autocomplete + type-checking of the site's
3
+ * blogkit.config. Returns the config unchanged; routes pass it through
4
+ * resolveConfig().
5
+ *
6
+ * export default defineConfig({
7
+ * source: { mode: "hjd-api" }, // URL+token from env
8
+ * brand: { name: "Acme Co" },
9
+ * });
10
+ */
11
+ export function defineConfig(cfg) {
12
+ return cfg;
13
+ }
14
+ //# sourceMappingURL=define.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["../../../package/config/define.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { BlogKitConfig, ResolvedConfig } from "./types";
2
+ /**
3
+ * Resolve a user config (+ env) into a fully-defaulted shape.
4
+ *
5
+ * Env precedence for the remote source: an explicit value in the config
6
+ * file wins; otherwise BLOGKIT_CONTENT_URL / BLOGKIT_SITE_TOKEN are used.
7
+ * This lets a site commit `mode: "hjd-api"` while keeping the URL+token
8
+ * out of source control (host Secrets / Vercel Env).
9
+ */
10
+ export declare function resolveConfig(cfg: BlogKitConfig): ResolvedConfig;
11
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../package/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAgB,MAAM,SAAS,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,cAAc,CAmBhE"}