markopress 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/bin/cli.js +16 -0
  2. package/dist/build/index.d.ts +83 -0
  3. package/dist/build/index.d.ts.map +1 -0
  4. package/dist/build/index.js +1553 -0
  5. package/dist/build/index.js.map +1 -0
  6. package/dist/build/manifest-generator.d.ts +34 -0
  7. package/dist/build/manifest-generator.d.ts.map +1 -0
  8. package/dist/build/manifest-generator.js +86 -0
  9. package/dist/build/manifest-generator.js.map +1 -0
  10. package/dist/build/security.test.d.ts +6 -0
  11. package/dist/build/security.test.d.ts.map +1 -0
  12. package/dist/build/security.test.js +88 -0
  13. package/dist/build/security.test.js.map +1 -0
  14. package/dist/build/types.d.ts +21 -0
  15. package/dist/build/types.d.ts.map +1 -0
  16. package/dist/build/types.js +5 -0
  17. package/dist/build/types.js.map +1 -0
  18. package/dist/build/vite-config.test.d.ts +2 -0
  19. package/dist/build/vite-config.test.d.ts.map +1 -0
  20. package/dist/build/vite-config.test.js +53 -0
  21. package/dist/build/vite-config.test.js.map +1 -0
  22. package/dist/build/vite-markdown-plugin.d.ts +13 -0
  23. package/dist/build/vite-markdown-plugin.d.ts.map +1 -0
  24. package/dist/build/vite-markdown-plugin.js +134 -0
  25. package/dist/build/vite-markdown-plugin.js.map +1 -0
  26. package/dist/build/vite-markdown-plugin.test.d.ts +2 -0
  27. package/dist/build/vite-markdown-plugin.test.d.ts.map +1 -0
  28. package/dist/build/vite-markdown-plugin.test.js +41 -0
  29. package/dist/build/vite-markdown-plugin.test.js.map +1 -0
  30. package/dist/cli/index.d.ts +6 -0
  31. package/dist/cli/index.d.ts.map +1 -0
  32. package/dist/cli/index.js +75 -0
  33. package/dist/cli/index.js.map +1 -0
  34. package/dist/config/app-root.d.ts +11 -0
  35. package/dist/config/app-root.d.ts.map +1 -0
  36. package/dist/config/app-root.js +24 -0
  37. package/dist/config/app-root.js.map +1 -0
  38. package/dist/config/app-root.test.d.ts +2 -0
  39. package/dist/config/app-root.test.d.ts.map +1 -0
  40. package/dist/config/app-root.test.js +71 -0
  41. package/dist/config/app-root.test.js.map +1 -0
  42. package/dist/config/index.d.ts +6 -0
  43. package/dist/config/index.d.ts.map +1 -0
  44. package/dist/config/index.js +6 -0
  45. package/dist/config/index.js.map +1 -0
  46. package/dist/config/loader.d.ts +25 -0
  47. package/dist/config/loader.d.ts.map +1 -0
  48. package/dist/config/loader.js +187 -0
  49. package/dist/config/loader.js.map +1 -0
  50. package/dist/config/loader.test.d.ts +2 -0
  51. package/dist/config/loader.test.d.ts.map +1 -0
  52. package/dist/config/loader.test.js +24 -0
  53. package/dist/config/loader.test.js.map +1 -0
  54. package/dist/config/types.d.ts +149 -0
  55. package/dist/config/types.d.ts.map +1 -0
  56. package/dist/config/types.js +5 -0
  57. package/dist/config/types.js.map +1 -0
  58. package/dist/config/validation.d.ts +188 -0
  59. package/dist/config/validation.d.ts.map +1 -0
  60. package/dist/config/validation.js +139 -0
  61. package/dist/config/validation.js.map +1 -0
  62. package/dist/content/index.d.ts +6 -0
  63. package/dist/content/index.d.ts.map +1 -0
  64. package/dist/content/index.js +6 -0
  65. package/dist/content/index.js.map +1 -0
  66. package/dist/content/registry.d.ts +29 -0
  67. package/dist/content/registry.d.ts.map +1 -0
  68. package/dist/content/registry.js +45 -0
  69. package/dist/content/registry.js.map +1 -0
  70. package/dist/content/scanner.d.ts +9 -0
  71. package/dist/content/scanner.d.ts.map +1 -0
  72. package/dist/content/scanner.js +115 -0
  73. package/dist/content/scanner.js.map +1 -0
  74. package/dist/content/types.d.ts +41 -0
  75. package/dist/content/types.d.ts.map +1 -0
  76. package/dist/content/types.js +5 -0
  77. package/dist/content/types.js.map +1 -0
  78. package/dist/dev/index.d.ts +18 -0
  79. package/dist/dev/index.d.ts.map +1 -0
  80. package/dist/dev/index.js +93 -0
  81. package/dist/dev/index.js.map +1 -0
  82. package/dist/index.d.ts +14 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +17 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/markdown/code.d.ts +79 -0
  87. package/dist/markdown/code.d.ts.map +1 -0
  88. package/dist/markdown/code.js +305 -0
  89. package/dist/markdown/code.js.map +1 -0
  90. package/dist/markdown/containers.d.ts +17 -0
  91. package/dist/markdown/containers.d.ts.map +1 -0
  92. package/dist/markdown/containers.js +143 -0
  93. package/dist/markdown/containers.js.map +1 -0
  94. package/dist/markdown/includes.d.ts +18 -0
  95. package/dist/markdown/includes.d.ts.map +1 -0
  96. package/dist/markdown/includes.js +9 -0
  97. package/dist/markdown/includes.js.map +1 -0
  98. package/dist/markdown/index.d.ts +8 -0
  99. package/dist/markdown/index.d.ts.map +1 -0
  100. package/dist/markdown/index.js +8 -0
  101. package/dist/markdown/index.js.map +1 -0
  102. package/dist/markdown/loader.d.ts +31 -0
  103. package/dist/markdown/loader.d.ts.map +1 -0
  104. package/dist/markdown/loader.js +325 -0
  105. package/dist/markdown/loader.js.map +1 -0
  106. package/dist/markdown/preserve-tags.d.ts +16 -0
  107. package/dist/markdown/preserve-tags.d.ts.map +1 -0
  108. package/dist/markdown/preserve-tags.js +233 -0
  109. package/dist/markdown/preserve-tags.js.map +1 -0
  110. package/dist/markdown/renderer.d.ts +28 -0
  111. package/dist/markdown/renderer.d.ts.map +1 -0
  112. package/dist/markdown/renderer.js +146 -0
  113. package/dist/markdown/renderer.js.map +1 -0
  114. package/dist/markdown/tag-validator.d.ts +64 -0
  115. package/dist/markdown/tag-validator.d.ts.map +1 -0
  116. package/dist/markdown/tag-validator.js +118 -0
  117. package/dist/markdown/tag-validator.js.map +1 -0
  118. package/dist/markdown/types.d.ts +44 -0
  119. package/dist/markdown/types.d.ts.map +1 -0
  120. package/dist/markdown/types.js +5 -0
  121. package/dist/markdown/types.js.map +1 -0
  122. package/dist/plugin/compat.d.ts +14 -0
  123. package/dist/plugin/compat.d.ts.map +1 -0
  124. package/dist/plugin/compat.js +78 -0
  125. package/dist/plugin/compat.js.map +1 -0
  126. package/dist/plugin/context.d.ts +38 -0
  127. package/dist/plugin/context.d.ts.map +1 -0
  128. package/dist/plugin/context.js +103 -0
  129. package/dist/plugin/context.js.map +1 -0
  130. package/dist/plugin/index.d.ts +6 -0
  131. package/dist/plugin/index.d.ts.map +1 -0
  132. package/dist/plugin/index.js +6 -0
  133. package/dist/plugin/index.js.map +1 -0
  134. package/dist/plugin/manager.d.ts +112 -0
  135. package/dist/plugin/manager.d.ts.map +1 -0
  136. package/dist/plugin/manager.js +385 -0
  137. package/dist/plugin/manager.js.map +1 -0
  138. package/dist/plugin/types.d.ts +182 -0
  139. package/dist/plugin/types.d.ts.map +1 -0
  140. package/dist/plugin/types.js +5 -0
  141. package/dist/plugin/types.js.map +1 -0
  142. package/dist/plugins/blog-index/index.d.ts +18 -0
  143. package/dist/plugins/blog-index/index.d.ts.map +1 -0
  144. package/dist/plugins/blog-index/index.js +158 -0
  145. package/dist/plugins/blog-index/index.js.map +1 -0
  146. package/dist/plugins/sidenav/index.d.ts +36 -0
  147. package/dist/plugins/sidenav/index.d.ts.map +1 -0
  148. package/dist/plugins/sidenav/index.js +86 -0
  149. package/dist/plugins/sidenav/index.js.map +1 -0
  150. package/dist/plugins/toc/index.d.ts +38 -0
  151. package/dist/plugins/toc/index.d.ts.map +1 -0
  152. package/dist/plugins/toc/index.js +79 -0
  153. package/dist/plugins/toc/index.js.map +1 -0
  154. package/dist/preview/index.d.ts +7 -0
  155. package/dist/preview/index.d.ts.map +1 -0
  156. package/dist/preview/index.js +25 -0
  157. package/dist/preview/index.js.map +1 -0
  158. package/dist/theme/default/build/generate-all.d.ts +9 -0
  159. package/dist/theme/default/build/generate-all.d.ts.map +1 -0
  160. package/dist/theme/default/build/generate-all.js +85 -0
  161. package/dist/theme/default/build/generate-all.js.map +1 -0
  162. package/dist/theme/default/build/generate-css.d.ts +19 -0
  163. package/dist/theme/default/build/generate-css.d.ts.map +1 -0
  164. package/dist/theme/default/build/generate-css.js +199 -0
  165. package/dist/theme/default/build/generate-css.js.map +1 -0
  166. package/dist/theme/default/build/index.d.ts +5 -0
  167. package/dist/theme/default/build/index.d.ts.map +1 -0
  168. package/dist/theme/default/build/index.js +5 -0
  169. package/dist/theme/default/build/index.js.map +1 -0
  170. package/dist/theme/default/design-systems/default.d.ts +12 -0
  171. package/dist/theme/default/design-systems/default.d.ts.map +1 -0
  172. package/dist/theme/default/design-systems/default.js +289 -0
  173. package/dist/theme/default/design-systems/default.js.map +1 -0
  174. package/dist/theme/default/design-systems/docusaurus.d.ts +12 -0
  175. package/dist/theme/default/design-systems/docusaurus.d.ts.map +1 -0
  176. package/dist/theme/default/design-systems/docusaurus.js +299 -0
  177. package/dist/theme/default/design-systems/docusaurus.js.map +1 -0
  178. package/dist/theme/default/design-systems/index.d.ts +50 -0
  179. package/dist/theme/default/design-systems/index.d.ts.map +1 -0
  180. package/dist/theme/default/design-systems/index.js +54 -0
  181. package/dist/theme/default/design-systems/index.js.map +1 -0
  182. package/dist/theme/default/design-systems/rspress.d.ts +12 -0
  183. package/dist/theme/default/design-systems/rspress.d.ts.map +1 -0
  184. package/dist/theme/default/design-systems/rspress.js +299 -0
  185. package/dist/theme/default/design-systems/rspress.js.map +1 -0
  186. package/dist/theme/default/design-systems/types.d.ts +238 -0
  187. package/dist/theme/default/design-systems/types.d.ts.map +1 -0
  188. package/dist/theme/default/design-systems/types.js +6 -0
  189. package/dist/theme/default/design-systems/types.js.map +1 -0
  190. package/dist/theme/default/design-systems/vitepress.d.ts +12 -0
  191. package/dist/theme/default/design-systems/vitepress.d.ts.map +1 -0
  192. package/dist/theme/default/design-systems/vitepress.js +299 -0
  193. package/dist/theme/default/design-systems/vitepress.js.map +1 -0
  194. package/dist/theme/default/index.d.ts +60 -0
  195. package/dist/theme/default/index.d.ts.map +1 -0
  196. package/dist/theme/default/index.js +44 -0
  197. package/dist/theme/default/index.js.map +1 -0
  198. package/dist/theme/default/theme.d.ts +14 -0
  199. package/dist/theme/default/theme.d.ts.map +1 -0
  200. package/dist/theme/default/theme.js +58 -0
  201. package/dist/theme/default/theme.js.map +1 -0
  202. package/dist/theme/index.d.ts +6 -0
  203. package/dist/theme/index.d.ts.map +1 -0
  204. package/dist/theme/index.js +6 -0
  205. package/dist/theme/index.js.map +1 -0
  206. package/dist/theme/loader.d.ts +21 -0
  207. package/dist/theme/loader.d.ts.map +1 -0
  208. package/dist/theme/loader.js +125 -0
  209. package/dist/theme/loader.js.map +1 -0
  210. package/dist/theme/types.d.ts +73 -0
  211. package/dist/theme/types.d.ts.map +1 -0
  212. package/dist/theme/types.js +5 -0
  213. package/dist/theme/types.js.map +1 -0
  214. package/dist/vite/index.d.ts +6 -0
  215. package/dist/vite/index.d.ts.map +1 -0
  216. package/dist/vite/index.js +6 -0
  217. package/dist/vite/index.js.map +1 -0
  218. package/dist/vite/markdownPlugin.d.ts +15 -0
  219. package/dist/vite/markdownPlugin.d.ts.map +1 -0
  220. package/dist/vite/markdownPlugin.js +111 -0
  221. package/dist/vite/markdownPlugin.js.map +1 -0
  222. package/dist/vite/plugin.d.ts +18 -0
  223. package/dist/vite/plugin.d.ts.map +1 -0
  224. package/dist/vite/plugin.js +94 -0
  225. package/dist/vite/plugin.js.map +1 -0
  226. package/marko.json +3 -0
  227. package/package.json +109 -0
  228. package/src/theme/default/build/generate-all.ts +99 -0
  229. package/src/theme/default/build/generate-css.ts +234 -0
  230. package/src/theme/default/build/index.ts +5 -0
  231. package/src/theme/default/components/doc-footer.marko +180 -0
  232. package/src/theme/default/components/footer.marko +32 -0
  233. package/src/theme/default/components/header.marko +49 -0
  234. package/src/theme/default/components/nav-bar.marko +191 -0
  235. package/src/theme/default/components/page-header.marko +20 -0
  236. package/src/theme/default/components/reading-progress.marko +36 -0
  237. package/src/theme/default/components/search.marko +239 -0
  238. package/src/theme/default/components/sidebar.marko +211 -0
  239. package/src/theme/default/components/site-footer.marko +211 -0
  240. package/src/theme/default/components/skip-link.marko +49 -0
  241. package/src/theme/default/components/theme/theme-aside-bottom.marko +1 -0
  242. package/src/theme/default/components/theme/theme-aside-top.marko +1 -0
  243. package/src/theme/default/components/theme/theme-body-bottom.marko +1 -0
  244. package/src/theme/default/components/theme/theme-body-top.marko +1 -0
  245. package/src/theme/default/components/theme/theme-doc-bottom.marko +1 -0
  246. package/src/theme/default/components/theme/theme-doc-footer-after.marko +1 -0
  247. package/src/theme/default/components/theme/theme-doc-footer-before.marko +1 -0
  248. package/src/theme/default/components/theme/theme-doc-top.marko +1 -0
  249. package/src/theme/default/components/theme/theme-head-bottom.marko +1 -0
  250. package/src/theme/default/components/theme/theme-head-top.marko +1 -0
  251. package/src/theme/default/components/theme/theme-home-features-after.marko +1 -0
  252. package/src/theme/default/components/theme/theme-home-hero-after.marko +1 -0
  253. package/src/theme/default/components/theme/theme-home-hero-before.marko +1 -0
  254. package/src/theme/default/components/theme/theme-navbar-center.marko +5 -0
  255. package/src/theme/default/components/theme/theme-navbar-end.marko +30 -0
  256. package/src/theme/default/components/theme/theme-navbar-start.marko +1 -0
  257. package/src/theme/default/components/theme/theme-page-bottom.marko +1 -0
  258. package/src/theme/default/components/theme/theme-page-top.marko +1 -0
  259. package/src/theme/default/components/theme/theme-sidebar-bottom.marko +1 -0
  260. package/src/theme/default/components/theme/theme-sidebar-top.marko +1 -0
  261. package/src/theme/default/components/theme/theme-toc-item.marko +1 -0
  262. package/src/theme/default/components/theme-toggle.marko +122 -0
  263. package/src/theme/default/components/toc.marko +140 -0
  264. package/src/theme/default/design-systems/default.ts +331 -0
  265. package/src/theme/default/design-systems/docusaurus.ts +341 -0
  266. package/src/theme/default/design-systems/index.ts +67 -0
  267. package/src/theme/default/design-systems/rspress.ts +341 -0
  268. package/src/theme/default/design-systems/types.ts +296 -0
  269. package/src/theme/default/design-systems/vitepress.ts +341 -0
  270. package/src/theme/default/index.ts +107 -0
  271. package/src/theme/default/layouts/blog.marko +65 -0
  272. package/src/theme/default/layouts/content-page.marko +41 -0
  273. package/src/theme/default/layouts/default.marko +209 -0
  274. package/src/theme/default/layouts/docs.marko +81 -0
  275. package/src/theme/default/layouts/home-page.marko +19 -0
  276. package/src/theme/default/layouts/page.marko +51 -0
  277. package/src/theme/default/public/theme-default.css +1081 -0
  278. package/src/theme/default/public/theme-docusaurus.css +1081 -0
  279. package/src/theme/default/public/theme-vitepress.css +1081 -0
  280. package/src/theme/default/public/theme.css +2 -0
  281. package/src/theme/default/routes/+layout.marko +57 -0
  282. package/src/theme/default/styles/main.css +249 -0
  283. package/src/theme/default/styles-base.css +757 -0
  284. package/src/theme/default/styles.css +899 -0
  285. package/src/theme/default/taglib.json +18 -0
  286. package/src/theme/default/tags/doc-footer.marko +180 -0
  287. package/src/theme/default/tags/footer.marko +32 -0
  288. package/src/theme/default/tags/header.marko +49 -0
  289. package/src/theme/default/tags/nav-bar.marko +191 -0
  290. package/src/theme/default/tags/page-header.marko +20 -0
  291. package/src/theme/default/tags/reading-progress.marko +36 -0
  292. package/src/theme/default/tags/search.marko +239 -0
  293. package/src/theme/default/tags/sidebar.marko +211 -0
  294. package/src/theme/default/tags/site-footer.marko +211 -0
  295. package/src/theme/default/tags/skip-link.marko +49 -0
  296. package/src/theme/default/tags/theme-aside-bottom.marko +1 -0
  297. package/src/theme/default/tags/theme-aside-top.marko +1 -0
  298. package/src/theme/default/tags/theme-body-bottom.marko +1 -0
  299. package/src/theme/default/tags/theme-body-top.marko +1 -0
  300. package/src/theme/default/tags/theme-doc-bottom.marko +1 -0
  301. package/src/theme/default/tags/theme-doc-footer-after.marko +1 -0
  302. package/src/theme/default/tags/theme-doc-footer-before.marko +1 -0
  303. package/src/theme/default/tags/theme-doc-top.marko +1 -0
  304. package/src/theme/default/tags/theme-head-bottom.marko +1 -0
  305. package/src/theme/default/tags/theme-head-top.marko +1 -0
  306. package/src/theme/default/tags/theme-home-features-after.marko +1 -0
  307. package/src/theme/default/tags/theme-home-hero-after.marko +1 -0
  308. package/src/theme/default/tags/theme-home-hero-before.marko +1 -0
  309. package/src/theme/default/tags/theme-navbar-center.marko +5 -0
  310. package/src/theme/default/tags/theme-navbar-end.marko +30 -0
  311. package/src/theme/default/tags/theme-navbar-start.marko +1 -0
  312. package/src/theme/default/tags/theme-page-bottom.marko +1 -0
  313. package/src/theme/default/tags/theme-page-top.marko +1 -0
  314. package/src/theme/default/tags/theme-sidebar-bottom.marko +1 -0
  315. package/src/theme/default/tags/theme-sidebar-top.marko +1 -0
  316. package/src/theme/default/tags/theme-toc-item.marko +1 -0
  317. package/src/theme/default/tags/theme-toggle.marko +122 -0
  318. package/src/theme/default/tags/toc.marko +140 -0
  319. package/src/theme/default/theme.ts +83 -0
  320. package/templates/blog-post.marko.template +13 -0
  321. package/templates/catch-all-handler.js.template +90 -0
  322. package/templates/catch-all-page.marko.template +69 -0
  323. package/templates/doc.marko.template +6 -0
  324. package/templates/example-tags/README.md +212 -0
  325. package/templates/example-tags/alert-box.marko +98 -0
  326. package/templates/example-tags/button-primary.marko +28 -0
  327. package/templates/example-tags/button-secondary.marko +28 -0
  328. package/templates/example-tags/button.marko +6 -0
  329. package/templates/example-tags/card-body.marko +8 -0
  330. package/templates/example-tags/card-footer.marko +7 -0
  331. package/templates/example-tags/card-header.marko +7 -0
  332. package/templates/example-tags/card.marko +20 -0
  333. package/templates/example-tags/icon.marko +149 -0
  334. package/templates/layout.marko.template +64 -0
  335. package/templates/page.marko.template +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-markdown-plugin.js","sourceRoot":"","sources":["../../src/build/vite-markdown-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vite-markdown-plugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-markdown-plugin.test.d.ts","sourceRoot":"","sources":["../../src/build/vite-markdown-plugin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { loadMarkdownModule, markdownContentPlugin, registerMarkdownContent } from './vite-markdown-plugin.js';
3
+ describe('loadMarkdownModule', () => {
4
+ it('uses the Marko Run dev server to load virtual modules', async () => {
5
+ const ssrLoadModule = vi.fn(async (id) => ({ default: `loaded:${id}` }));
6
+ const previous = globalThis.__marko_run_dev__;
7
+ globalThis.__marko_run_dev__ = {
8
+ devServers: new Set([{ ssrLoadModule }]),
9
+ };
10
+ try {
11
+ const mod = await loadMarkdownModule('virtual:markdown-content/pages/index');
12
+ expect(ssrLoadModule).toHaveBeenCalledWith('virtual:markdown-content/pages/index');
13
+ expect(mod.default).toBe('loaded:virtual:markdown-content/pages/index');
14
+ }
15
+ finally {
16
+ globalThis.__marko_run_dev__ = previous;
17
+ }
18
+ });
19
+ });
20
+ describe('markdownContentPlugin', () => {
21
+ it('emits Marko source so kebab-case tags compile as components', () => {
22
+ const plugin = markdownContentPlugin();
23
+ plugin.configResolved?.({ root: '/tmp/site' });
24
+ const contentId = 'pages/marko-tags-test';
25
+ registerMarkdownContent(contentId, '<h2>Demo</h2>\n<alert-box type="warning">Hello</alert-box>');
26
+ const resolvedId = plugin.resolveId?.(`virtual:markdown-content/${contentId}`);
27
+ const source = plugin.load?.(resolvedId);
28
+ expect(source).toContain('<alert-box type="warning">Hello</alert-box>');
29
+ expect(source).not.toContain('$!{`');
30
+ });
31
+ it('escapes markdown text that looks like a Marko expression', () => {
32
+ const plugin = markdownContentPlugin();
33
+ plugin.configResolved?.({ root: '/tmp/site' });
34
+ const contentId = 'pages/interpolation-literal';
35
+ registerMarkdownContent(contentId, '<p>literal ${value}</p>');
36
+ const resolvedId = plugin.resolveId?.(`virtual:markdown-content/${contentId}`);
37
+ const source = plugin.load?.(resolvedId);
38
+ expect(source).toContain('literal &#36;{value}');
39
+ });
40
+ });
41
+ //# sourceMappingURL=vite-markdown-plugin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-markdown-plugin.test.js","sourceRoot":"","sources":["../../src/build/vite-markdown-plugin.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAE/G,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAI,UAA8C,CAAC,iBAAiB,CAAC;QAClF,UAA8C,CAAC,iBAAiB,GAAG;YAClE,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;SACzC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,sCAAsC,CAAC,CAAC;YAC7E,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,sCAAsC,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC1E,CAAC;gBAAS,CAAC;YACR,UAA8C,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,uBAAuB,CAAC;QAC1C,uBAAuB,CACrB,SAAS,EACT,4DAA4D,CAC7D,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,4BAA4B,SAAS,EAAE,CAAW,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAW,CAAC;QAEnD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,6BAA6B,CAAC;QAChD,uBAAuB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,4BAA4B,SAAS,EAAE,CAAW,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAW,CAAC;QAEnD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MarkoPress CLI
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;GAEG"}
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MarkoPress CLI
4
+ */
5
+ import { Command } from 'commander';
6
+ import { resolveAppRoot } from '../config/app-root.js';
7
+ import { startDevServer } from '../dev/index.js';
8
+ import { build } from '../build/index.js';
9
+ import { preview } from '../preview/index.js';
10
+ // Resolve the app root (e.g., website/.markopress)
11
+ const appRoot = resolveAppRoot();
12
+ const program = new Command();
13
+ program
14
+ .name('markopress')
15
+ .description('A general-purpose static site generator using Marko.js v6')
16
+ .version('0.1.0');
17
+ program
18
+ .command('dev')
19
+ .description('Start development server')
20
+ .option('-p, --port <port>', 'Port to run server on', '3000')
21
+ .option('--host <host>', 'Host to run server on', 'localhost')
22
+ .option('--open', 'Open browser automatically', false)
23
+ .option('--catch-all', 'Use catch-all dynamic routes')
24
+ .action(async (options) => {
25
+ await startDevServer({
26
+ port: parseInt(options.port),
27
+ host: options.host,
28
+ open: options.open,
29
+ useCatchAllRoutes: options.catchAll,
30
+ root: appRoot,
31
+ });
32
+ });
33
+ program
34
+ .command('build')
35
+ .description('Build for production')
36
+ .option('--debug', 'Debug mode', false)
37
+ .option('-o, --output <dir>', 'Output directory', 'dist')
38
+ .option('--catch-all', 'Use catch-all dynamic routes')
39
+ .action(async (options) => {
40
+ const result = await build({
41
+ debug: options.debug,
42
+ outDir: options.output,
43
+ useCatchAllRoutes: options.catchAll,
44
+ root: appRoot,
45
+ });
46
+ if (!result.success) {
47
+ console.error('\n❌ Build failed!');
48
+ result.errors.forEach((error) => console.error(` ${error}`));
49
+ process.exit(1);
50
+ }
51
+ });
52
+ program
53
+ .command('preview')
54
+ .description('Preview production build')
55
+ .option('-p, --port <port>', 'Port to run server on', '4173')
56
+ .option('--host <host>', 'Host to run server on', 'localhost')
57
+ .action(async (options) => {
58
+ await preview({
59
+ port: parseInt(options.port),
60
+ host: options.host,
61
+ root: appRoot,
62
+ });
63
+ });
64
+ program
65
+ .command('init [site-dir]')
66
+ .description('Create a new MarkoPress site')
67
+ .option('-t, --template <template>', 'Template to use', 'default')
68
+ .action(async (siteDir, options) => {
69
+ const dir = siteDir || '.';
70
+ console.log(`Initializing MarkoPress site in ${dir}...`);
71
+ console.log(`Template: ${options.template}`);
72
+ // TODO: Implement init
73
+ });
74
+ program.parse();
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface ResolveAppRootOptions {
2
+ cwd?: string;
3
+ appDirName?: string;
4
+ }
5
+ /**
6
+ * Resolve the app root directory.
7
+ * If appDirName exists as a directory under cwd, returns that path.
8
+ * Otherwise returns cwd.
9
+ */
10
+ export declare function resolveAppRoot(options?: ResolveAppRootOptions): string;
11
+ //# sourceMappingURL=app-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-root.d.ts","sourceRoot":"","sources":["../../src/config/app-root.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAgB1E"}
@@ -0,0 +1,24 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ /**
4
+ * Resolve the app root directory.
5
+ * If appDirName exists as a directory under cwd, returns that path.
6
+ * Otherwise returns cwd.
7
+ */
8
+ export function resolveAppRoot(options = {}) {
9
+ const cwd = options.cwd ?? process.cwd();
10
+ const appDirName = options.appDirName ?? '.markopress';
11
+ const candidate = path.join(cwd, appDirName);
12
+ // Check if candidate exists and is a directory
13
+ try {
14
+ const stat = fs.statSync(candidate);
15
+ if (stat.isDirectory()) {
16
+ return candidate;
17
+ }
18
+ }
19
+ catch {
20
+ // Doesn't exist or isn't accessible, fall through to returning cwd
21
+ }
22
+ return cwd;
23
+ }
24
+ //# sourceMappingURL=app-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../src/config/app-root.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAOzB;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,aAAa,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAE7C,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app-root.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-root.test.d.ts","sourceRoot":"","sources":["../../src/config/app-root.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import { resolveAppRoot } from './app-root.js';
5
+ // Mock fs.statSync
6
+ const statSyncMock = vi.spyOn(fs, 'statSync');
7
+ describe('resolveAppRoot', () => {
8
+ beforeEach(() => {
9
+ vi.clearAllMocks();
10
+ });
11
+ afterEach(() => {
12
+ statSyncMock.mockReset();
13
+ });
14
+ it('resolves .markopress when present', () => {
15
+ const cwd = path.join('/repo', 'website');
16
+ const markopressPath = path.join(cwd, '.markopress');
17
+ // Mock directory exists
18
+ statSyncMock.mockImplementation((filePath) => {
19
+ if (filePath === markopressPath) {
20
+ return { isDirectory: () => true };
21
+ }
22
+ throw new Error('ENOENT');
23
+ });
24
+ const appRoot = resolveAppRoot({ cwd, appDirName: '.markopress' });
25
+ expect(appRoot).toBe(markopressPath);
26
+ });
27
+ it('returns cwd when .markopress is not present', () => {
28
+ const cwd = path.join('/repo', 'website');
29
+ // Mock directory doesn't exist
30
+ statSyncMock.mockImplementation(() => {
31
+ throw new Error('ENOENT');
32
+ });
33
+ const appRoot = resolveAppRoot({ cwd, appDirName: '.notexist' });
34
+ expect(appRoot).toBe(cwd);
35
+ });
36
+ it('uses process.cwd() when cwd is not provided', () => {
37
+ // Mock directory doesn't exist
38
+ statSyncMock.mockImplementation(() => {
39
+ throw new Error('ENOENT');
40
+ });
41
+ const appRoot = resolveAppRoot();
42
+ expect(appRoot).toBe(process.cwd());
43
+ });
44
+ it('defaults to .markopress as appDirName', () => {
45
+ const cwd = path.join('/repo', 'website');
46
+ const markopressPath = path.join(cwd, '.markopress');
47
+ // Mock directory exists
48
+ statSyncMock.mockImplementation((filePath) => {
49
+ if (filePath === markopressPath) {
50
+ return { isDirectory: () => true };
51
+ }
52
+ throw new Error('ENOENT');
53
+ });
54
+ const appRoot = resolveAppRoot({ cwd });
55
+ expect(appRoot).toBe(markopressPath);
56
+ });
57
+ it('returns cwd when appDirName exists but is a file not directory', () => {
58
+ const cwd = path.join('/repo', 'website');
59
+ const markopressPath = path.join(cwd, '.markopress');
60
+ // Mock exists as a file, not directory
61
+ statSyncMock.mockImplementation((filePath) => {
62
+ if (filePath === markopressPath) {
63
+ return { isDirectory: () => false };
64
+ }
65
+ throw new Error('ENOENT');
66
+ });
67
+ const appRoot = resolveAppRoot({ cwd, appDirName: '.markopress' });
68
+ expect(appRoot).toBe(cwd);
69
+ });
70
+ });
71
+ //# sourceMappingURL=app-root.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-root.test.js","sourceRoot":"","sources":["../../src/config/app-root.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,mBAAmB;AACnB,MAAM,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAE9C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAErD,wBAAwB;QACxB,YAAY,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC3C,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAChC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EAAc,CAAC;YACjD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE1C,+BAA+B;QAC/B,YAAY,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,+BAA+B;QAC/B,YAAY,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAErD,wBAAwB;QACxB,YAAY,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC3C,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAChC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EAAc,CAAC;YACjD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAErD,uCAAuC;QACvC,YAAY,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC3C,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAChC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,EAAc,CAAC;YAClD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Configuration module exports
3
+ */
4
+ export * from './loader.js';
5
+ export * from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Configuration module exports
3
+ */
4
+ export * from './loader.js';
5
+ export * from './types.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Configuration loader for MarkoPress
3
+ */
4
+ import type { UserConfig, ResolvedConfig, ConfigEnv } from './types.js';
5
+ /**
6
+ * Find and load the configuration file
7
+ */
8
+ export declare function loadConfigFromFile(root: string, env: ConfigEnv): Promise<{
9
+ file: string;
10
+ config: UserConfig;
11
+ } | null>;
12
+ /**
13
+ * Resolve the configuration with defaults
14
+ */
15
+ export declare function resolveConfig(userConfig: UserConfig, root: string): ResolvedConfig;
16
+ /**
17
+ * Load the configuration from a directory
18
+ */
19
+ export declare function loadConfig(root?: string, env?: ConfigEnv): Promise<ResolvedConfig>;
20
+ /**
21
+ * Define configuration helper with type safety
22
+ */
23
+ export declare function defineConfig(config: UserConfig): UserConfig;
24
+ export declare function defineConfigWithCallback(config: (env: ConfigEnv) => UserConfig | Promise<UserConfig>): (env: ConfigEnv) => UserConfig | Promise<UserConfig>;
25
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,SAAS,EAEV,MAAM,YAAY,CAAC;AAmFpB;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAAC,CA6DtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,cAAc,CAmChB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,GAAE,MAAsB,EAC5B,GAAG,GAAE,SAAmD,GACvD,OAAO,CAAC,cAAc,CAAC,CASzB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAC3D,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAEtD"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Configuration loader for MarkoPress
3
+ */
4
+ import path from 'node:path';
5
+ import fs from 'node:fs/promises';
6
+ import { pathToFileURL } from 'node:url';
7
+ import { ZodError } from 'zod';
8
+ import { validateConfigSafe } from './validation.js';
9
+ const DEFAULT_CONFIG = {
10
+ site: {
11
+ title: 'MarkoPress Site',
12
+ description: '',
13
+ base: '/',
14
+ lang: 'en-US',
15
+ head: [],
16
+ },
17
+ content: {
18
+ pages: '../content/pages',
19
+ // No default 'docs' - users should use generic module names
20
+ blog: '../content/blog',
21
+ },
22
+ theme: {
23
+ name: '@markopress/theme-default',
24
+ options: {},
25
+ },
26
+ markdown: {
27
+ lineNumbers: false, // Changed default to false to avoid Marko parser issues
28
+ theme: {
29
+ light: 'github-light',
30
+ dark: 'github-dark',
31
+ },
32
+ },
33
+ build: {
34
+ useCatchAllRoutes: false,
35
+ outDir: 'dist',
36
+ assetsDir: 'assets',
37
+ },
38
+ plugins: [],
39
+ };
40
+ /**
41
+ * Deep merge two objects
42
+ */
43
+ function deepMerge(target, source) {
44
+ const result = { ...target };
45
+ for (const key in source) {
46
+ const sourceValue = source[key];
47
+ const targetValue = result[key];
48
+ if (sourceValue === undefined) {
49
+ continue;
50
+ }
51
+ if (isObject(targetValue) && isObject(sourceValue)) {
52
+ result[key] = deepMerge(targetValue, sourceValue);
53
+ }
54
+ else {
55
+ result[key] = sourceValue;
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ function isObject(value) {
61
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
62
+ }
63
+ /**
64
+ * Validate configuration using Zod schema
65
+ * @returns Validated configuration or errors
66
+ */
67
+ function validateConfig(config) {
68
+ const result = validateConfigSafe(config);
69
+ if (!result.success) {
70
+ return {
71
+ valid: false,
72
+ errors: result.errors.map((err) => `${err.path}: ${err.message}`),
73
+ };
74
+ }
75
+ return {
76
+ valid: true,
77
+ errors: [],
78
+ data: result.data, // Cast to UserConfig to handle Zod's passthrough index signature
79
+ };
80
+ }
81
+ /**
82
+ * Find and load the configuration file
83
+ */
84
+ export async function loadConfigFromFile(root, env) {
85
+ // Check for config files at the root level
86
+ // When root is already the app root (e.g., website/.markopress), look for config.*
87
+ // When root is the project root (e.g., website/), look for .markopress/config.*
88
+ const configFiles = [
89
+ 'config.ts',
90
+ 'config.js',
91
+ 'config.mjs',
92
+ '.markopress/config.ts',
93
+ '.markopress/config.js',
94
+ '.markopress/config.mjs',
95
+ ];
96
+ for (const file of configFiles) {
97
+ const filePath = path.resolve(root, file);
98
+ try {
99
+ await fs.access(filePath);
100
+ // Use pathToFileURL for better cross-platform support
101
+ const fileUrl = pathToFileURL(filePath).href;
102
+ // Add timestamp to bypass module cache during development
103
+ const importUrl = `${fileUrl}?t=${Date.now()}`;
104
+ const configModule = await import(importUrl);
105
+ const configExport = configModule.default;
106
+ if (!configExport) {
107
+ throw new Error(`Config file ${file} must have a default export`);
108
+ }
109
+ let config;
110
+ if (typeof configExport === 'function') {
111
+ config = await configExport(env);
112
+ }
113
+ else {
114
+ config = configExport;
115
+ }
116
+ // Validate the loaded config
117
+ const validation = validateConfig(config);
118
+ if (!validation.valid) {
119
+ throw new Error(`Invalid configuration in ${file}:\n${validation.errors.map((e) => ` - ${e}`).join('\n')}`);
120
+ }
121
+ console.log(`✓ Loaded config from ${file}`);
122
+ return { file: filePath, config: validation.data };
123
+ }
124
+ catch (error) {
125
+ // Only throw if file exists but failed to load/parse
126
+ if (error && typeof error === 'object' && 'code' in error && error.code !== 'ENOENT') {
127
+ throw new Error(`Failed to load config from ${file}: ${error instanceof Error ? error.message : String(error)}`);
128
+ }
129
+ // File doesn't exist, continue to next option
130
+ }
131
+ }
132
+ return null;
133
+ }
134
+ /**
135
+ * Resolve the configuration with defaults
136
+ */
137
+ export function resolveConfig(userConfig, root) {
138
+ // For content and build, use user config directly if provided, otherwise use defaults
139
+ // This allows arbitrary module names (not just pages/docs/blog) and custom build options
140
+ const content = userConfig.content ? { ...userConfig.content } : DEFAULT_CONFIG.content;
141
+ const build = userConfig.build ? { ...userConfig.build } : DEFAULT_CONFIG.build;
142
+ // Use deep merge for other nested configurations
143
+ const site = deepMerge(DEFAULT_CONFIG.site, userConfig.site || {});
144
+ const theme = deepMerge(DEFAULT_CONFIG.theme, userConfig.theme || {});
145
+ const markdown = deepMerge(DEFAULT_CONFIG.markdown, userConfig.markdown || {});
146
+ // Plugins need special handling - don't merge, just replace
147
+ const plugins = userConfig.plugins || DEFAULT_CONFIG.plugins;
148
+ // Add theme CSS based on style option
149
+ const style = theme.options?.style || 'default';
150
+ const themeCssPath = `/_markopress/theme/theme-${style}.css`;
151
+ // Inject theme CSS link into head
152
+ const themeCssHeadTag = ['link', {
153
+ rel: 'stylesheet',
154
+ href: themeCssPath,
155
+ }];
156
+ site.head = [...(site.head || []), themeCssHeadTag];
157
+ return {
158
+ root,
159
+ site,
160
+ content,
161
+ theme,
162
+ markdown,
163
+ build,
164
+ plugins,
165
+ };
166
+ }
167
+ /**
168
+ * Load the configuration from a directory
169
+ */
170
+ export async function loadConfig(root = process.cwd(), env = { mode: 'development', command: 'dev' }) {
171
+ const loaded = await loadConfigFromFile(root, env);
172
+ if (!loaded) {
173
+ // Return default config if no config file found
174
+ return resolveConfig({ site: DEFAULT_CONFIG.site }, root);
175
+ }
176
+ return resolveConfig(loaded.config, root);
177
+ }
178
+ /**
179
+ * Define configuration helper with type safety
180
+ */
181
+ export function defineConfig(config) {
182
+ return config;
183
+ }
184
+ export function defineConfigWithCallback(config) {
185
+ return config;
186
+ }
187
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../src/config/loader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import path from 'node:path';
3
+ import { resolveConfig } from './loader.js';
4
+ describe('resolveConfig', () => {
5
+ it('defaults content paths relative to app root', () => {
6
+ const appRoot = '/repo/website/.markopress';
7
+ const resolved = resolveConfig({ site: { title: 'Test' } }, appRoot);
8
+ expect(resolved.content.pages).toBe('../content/pages');
9
+ });
10
+ it('preserves user config when content paths are explicitly set', () => {
11
+ const appRoot = '/repo/website/.markopress';
12
+ const resolved = resolveConfig({
13
+ site: { title: 'Test' },
14
+ content: { pages: 'custom/pages' }
15
+ }, appRoot);
16
+ expect(resolved.content.pages).toBe('custom/pages');
17
+ });
18
+ it('uses default blog path relative to app root', () => {
19
+ const appRoot = '/repo/website/.markopress';
20
+ const resolved = resolveConfig({ site: { title: 'Test' } }, appRoot);
21
+ expect(resolved.content.blog).toBe('../content/blog');
22
+ });
23
+ });
24
+ //# sourceMappingURL=loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/config/loader.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC7B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YACvB,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;SACnC,EAAE,OAAO,CAAC,CAAC;QACZ,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}