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,125 @@
1
+ /**
2
+ * Theme loader for MarkoPress
3
+ */
4
+ import path from 'node:path';
5
+ import fs from 'node:fs/promises';
6
+ import { fileURLToPath } from 'node:url';
7
+ const THEME_LOADER_DIR = path.dirname(fileURLToPath(import.meta.url));
8
+ const MARKOPRESS_PACKAGE_ROOT = path.resolve(THEME_LOADER_DIR, '..', '..');
9
+ const INTERNAL_DEFAULT_THEME_ROOT = path.join(MARKOPRESS_PACKAGE_ROOT, 'src', 'theme', 'default');
10
+ const INTERNAL_DEFAULT_THEME_NAMES = new Set([
11
+ '@markopress/theme-default',
12
+ 'theme-default',
13
+ 'default',
14
+ ]);
15
+ /**
16
+ * Default theme configuration
17
+ */
18
+ const DEFAULT_THEME = {
19
+ name: '@markopress/theme-default',
20
+ layouts: {
21
+ home: 'layouts/home.marko',
22
+ page: 'layouts/page.marko',
23
+ docs: 'layouts/docs.marko',
24
+ blog: 'layouts/blog.marko',
25
+ post: 'layouts/post.marko',
26
+ tag: 'layouts/tag.marko',
27
+ category: 'layouts/category.marko',
28
+ },
29
+ slots: {
30
+ header: { component: 'components/header.marko' },
31
+ footer: { component: 'components/footer.marko' },
32
+ sidebar: { component: 'components/sidebar.marko' },
33
+ toc: { component: 'components/toc.marko' },
34
+ nav: { component: 'components/nav.marko' },
35
+ },
36
+ styles: ['styles/main.css'],
37
+ };
38
+ /**
39
+ * Load theme from package name or local directory
40
+ */
41
+ export async function loadTheme(themeName, rootDir) {
42
+ let themeRoot;
43
+ // Internal default theme is bundled with markopress package.
44
+ if (INTERNAL_DEFAULT_THEME_NAMES.has(themeName)) {
45
+ themeRoot = INTERNAL_DEFAULT_THEME_ROOT;
46
+ }
47
+ else if (themeName.startsWith('./') || themeName.startsWith('../') || path.isAbsolute(themeName)) {
48
+ // Check if it's a local theme
49
+ themeRoot = path.resolve(rootDir, themeName);
50
+ }
51
+ else {
52
+ // Load from node_modules
53
+ themeRoot = path.resolve(rootDir, 'node_modules', themeName);
54
+ }
55
+ // Try to load theme config
56
+ const themeConfigPath = path.join(themeRoot, 'theme.config.js');
57
+ let themeConfig = {};
58
+ try {
59
+ await fs.access(themeConfigPath);
60
+ const module = await import(themeConfigPath);
61
+ themeConfig = module.default || {};
62
+ }
63
+ catch {
64
+ // Use default config
65
+ }
66
+ // Merge with defaults
67
+ const theme = {
68
+ ...DEFAULT_THEME,
69
+ ...themeConfig,
70
+ rootDir: themeRoot,
71
+ };
72
+ return theme;
73
+ }
74
+ /**
75
+ * Load theme with user overrides
76
+ */
77
+ export async function loadThemeWithOverrides(themeName, rootDir, overridesDir) {
78
+ const theme = await loadTheme(themeName, rootDir);
79
+ if (!overridesDir) {
80
+ return theme;
81
+ }
82
+ // Check for override layouts
83
+ const overridePath = path.resolve(rootDir, overridesDir);
84
+ const layoutsPath = path.join(overridePath, 'layouts');
85
+ try {
86
+ await fs.access(layoutsPath);
87
+ const layouts = await fs.readdir(layoutsPath);
88
+ const overrides = {};
89
+ for (const layout of layouts) {
90
+ const key = path.basename(layout, path.extname(layout));
91
+ overrides[key] = path.join(layoutsPath, layout);
92
+ }
93
+ theme.overrides = overrides;
94
+ }
95
+ catch {
96
+ // No overrides
97
+ }
98
+ return theme;
99
+ }
100
+ /**
101
+ * Get layout component path
102
+ */
103
+ export function getLayoutPath(theme, layoutName) {
104
+ // Check overrides first
105
+ if (theme.overrides && theme.overrides[layoutName]) {
106
+ return theme.overrides[layoutName];
107
+ }
108
+ // Use theme default
109
+ const layout = theme.layouts[layoutName];
110
+ if (!layout) {
111
+ return null;
112
+ }
113
+ return path.join(theme.rootDir, layout);
114
+ }
115
+ /**
116
+ * Get slot component path
117
+ */
118
+ export function getSlotPath(theme, slotName) {
119
+ const slot = theme.slots[slotName];
120
+ if (!slot || !slot.component) {
121
+ return null;
122
+ }
123
+ return path.join(theme.rootDir, slot.component);
124
+ }
125
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/theme/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Theme system types
3
+ */
4
+ /**
5
+ * Theme slot configuration
6
+ */
7
+ export interface SlotConfig {
8
+ component?: string;
9
+ props?: Record<string, unknown>;
10
+ }
11
+ /**
12
+ * Layout definitions
13
+ */
14
+ export interface Layouts {
15
+ home?: string;
16
+ page?: string;
17
+ docs?: string;
18
+ blog?: string;
19
+ post?: string;
20
+ tag?: string;
21
+ category?: string;
22
+ }
23
+ /**
24
+ * Theme configuration
25
+ */
26
+ export interface ThemeConfig {
27
+ name: string;
28
+ layouts: Layouts;
29
+ slots: Record<string, SlotConfig>;
30
+ styles: string[];
31
+ }
32
+ /**
33
+ * Resolved theme with overrides
34
+ */
35
+ export interface ResolvedTheme extends ThemeConfig {
36
+ rootDir: string;
37
+ overrides?: Partial<Layouts>;
38
+ }
39
+ /**
40
+ * Theme user options
41
+ */
42
+ export interface ThemeOptions {
43
+ name?: string;
44
+ options?: Record<string, unknown>;
45
+ navbar?: NavbarItem[];
46
+ sidebar?: SidebarConfig;
47
+ footer?: FooterConfig;
48
+ logo?: string;
49
+ }
50
+ export interface NavbarItem {
51
+ text: string;
52
+ link: string;
53
+ items?: NavbarItem[];
54
+ }
55
+ export interface SidebarConfig {
56
+ [prefix: string]: SidebarItem[] | undefined;
57
+ }
58
+ export interface SidebarItem {
59
+ text?: string;
60
+ link?: string;
61
+ items?: SidebarItem[];
62
+ collapsed?: boolean;
63
+ }
64
+ export interface FooterConfig {
65
+ message?: string;
66
+ copyright?: string;
67
+ links?: FooterLink[][];
68
+ }
69
+ export interface FooterLink {
70
+ text: string;
71
+ link: string;
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Theme system types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Vite module exports
3
+ */
4
+ export * from './plugin.js';
5
+ export * from './markdownPlugin.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Vite module exports
3
+ */
4
+ export * from './plugin.js';
5
+ export * from './markdownPlugin.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Vite plugin for MarkoPress - transforms .md files to virtual Marko components
3
+ * Based on VitePress architecture
4
+ */
5
+ import type { Plugin } from 'vite';
6
+ import type { ResolvedConfig } from '../config/index.js';
7
+ /**
8
+ * Create Vite plugin for transforming markdown to Marko
9
+ */
10
+ export declare function createMarkdownPlugin(config: ResolvedConfig): Plugin;
11
+ /**
12
+ * Create server middleware for markdown handling
13
+ */
14
+ export declare function createMarkdownMiddleware(config: ResolvedConfig): (req: any, res: any, next: any) => Promise<void>;
15
+ //# sourceMappingURL=markdownPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownPlugin.d.ts","sourceRoot":"","sources":["../../src/vite/markdownPlugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMzD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAiFnE;AAsBD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,IAC/C,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,mBAY5C"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Vite plugin for MarkoPress - transforms .md files to virtual Marko components
3
+ * Based on VitePress architecture
4
+ */
5
+ import { parseMarkdown } from '../markdown/index.js';
6
+ const MARKDOWN_REGEX = /\.md$/;
7
+ const MARKDOWN_ID_PREFIX = '@markopress/markdown:';
8
+ /**
9
+ * Create Vite plugin for transforming markdown to Marko
10
+ */
11
+ export function createMarkdownPlugin(config) {
12
+ const markdownCache = new Map();
13
+ return {
14
+ name: 'markopress:markdown',
15
+ // Resolve markdown files to virtual modules
16
+ resolveId(id) {
17
+ if (id.startsWith(MARKDOWN_ID_PREFIX)) {
18
+ return id;
19
+ }
20
+ return null;
21
+ },
22
+ // Load virtual markdown modules
23
+ async load(id) {
24
+ if (!id.startsWith(MARKDOWN_ID_PREFIX)) {
25
+ return null;
26
+ }
27
+ // Extract the actual file path
28
+ const filePath = id.slice(MARKDOWN_ID_PREFIX.length);
29
+ try {
30
+ // Read the markdown file
31
+ const fs = await import('node:fs/promises');
32
+ const content = await fs.readFile(filePath, 'utf-8');
33
+ // Parse the markdown
34
+ const processed = await parseMarkdown(content, config.markdown, {
35
+ path: filePath,
36
+ relativePath: filePath.replace(config.root, ''),
37
+ });
38
+ // Generate Marko component code
39
+ const markoCode = generateMarkoComponent(processed, filePath);
40
+ return markoCode;
41
+ }
42
+ catch (error) {
43
+ console.error(`Failed to load markdown: ${filePath}`, error);
44
+ return null;
45
+ }
46
+ },
47
+ // Transform .md files to virtual module imports
48
+ async transform(code, id) {
49
+ if (!MARKDOWN_REGEX.test(id)) {
50
+ return null;
51
+ }
52
+ // Skip node_modules
53
+ if (id.includes('node_modules')) {
54
+ return null;
55
+ }
56
+ // Check if file is in content directories
57
+ const contentDirs = Object.values(config.content).filter((dir) => typeof dir === 'string');
58
+ const isInContent = contentDirs.some((dir) => id.includes(dir));
59
+ if (!isInContent) {
60
+ return null;
61
+ }
62
+ // Return import statement to virtual module
63
+ const virtualId = `${MARKDOWN_ID_PREFIX}${id}`;
64
+ return `export { default } from '${virtualId}';`;
65
+ },
66
+ // Handle HMR
67
+ handleHotUpdate({ file, modules }) {
68
+ if (!MARKDOWN_REGEX.test(file)) {
69
+ return;
70
+ }
71
+ // Invalidate cache
72
+ markdownCache.delete(file);
73
+ // Trigger HMR for dependent modules
74
+ this.info(`[markopress] hot updated: ${file}`);
75
+ },
76
+ };
77
+ }
78
+ /**
79
+ * Generate Marko component code from processed markdown
80
+ */
81
+ function generateMarkoComponent(processed, filePath) {
82
+ const { frontmatter, headers, excerpt } = processed;
83
+ return `
84
+ <marko-press-page>
85
+ <class {
86
+ onCreate() {
87
+ this.frontmatter = ${JSON.stringify(frontmatter)};
88
+ this.headers = ${JSON.stringify(headers)};
89
+ this.excerpt = ${JSON.stringify(excerpt || '')};
90
+ }
91
+ }>
92
+ <${processed.html}>
93
+ </marko-press-page>
94
+ `.trim();
95
+ }
96
+ /**
97
+ * Create server middleware for markdown handling
98
+ */
99
+ export function createMarkdownMiddleware(config) {
100
+ return async (req, res, next) => {
101
+ const url = req.url;
102
+ // Check if this is a markdown route
103
+ if (url?.endsWith('.md')) {
104
+ // Convert to .html route
105
+ const htmlUrl = url.replace(/\.md$/, '.html');
106
+ req.url = htmlUrl;
107
+ }
108
+ next();
109
+ };
110
+ }
111
+ //# sourceMappingURL=markdownPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownPlugin.js","sourceRoot":"","sources":["../../src/vite/markdownPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Vite plugin for MarkoPress - transforms Markdown to virtual Marko components
3
+ */
4
+ import type { Plugin } from 'vite';
5
+ import type { ResolvedConfig } from '../config/index.js';
6
+ interface MarkoPressVitePluginOptions {
7
+ config: ResolvedConfig;
8
+ }
9
+ /**
10
+ * Create Vite plugin for MarkoPress
11
+ */
12
+ export declare function markoPressVitePlugin(options: MarkoPressVitePluginOptions): Plugin;
13
+ /**
14
+ * Resolve virtual module imports
15
+ */
16
+ export declare function markoPressVirtualModulePlugin(): Plugin;
17
+ export {};
18
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,UAAU,2BAA2B;IACnC,MAAM,EAAE,cAAc,CAAC;CACxB;AAKD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CA4DjF;AAoBD;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAmBtD"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Vite plugin for MarkoPress - transforms Markdown to virtual Marko components
3
+ */
4
+ import { parseMarkdown } from '../markdown/index.js';
5
+ const MARKDOWN_REGEX = /\.md$/;
6
+ const MARKO_VIRTUAL_PREFIX = '/@markopress/';
7
+ /**
8
+ * Create Vite plugin for MarkoPress
9
+ */
10
+ export function markoPressVitePlugin(options) {
11
+ const { config } = options;
12
+ const markdownCache = new Map();
13
+ return {
14
+ name: 'markopress:markdown',
15
+ // Transform markdown files to virtual Marko components
16
+ async transform(code, id) {
17
+ if (!MARKDOWN_REGEX.test(id)) {
18
+ return null;
19
+ }
20
+ // Skip files in node_modules
21
+ if (id.includes('node_modules')) {
22
+ return null;
23
+ }
24
+ // Check if file is in content directories
25
+ const contentDirs = Object.values(config.content).filter((dir) => typeof dir === 'string');
26
+ const isInContent = contentDirs.some((dir) => id.includes(dir));
27
+ if (!isInContent) {
28
+ return null;
29
+ }
30
+ try {
31
+ // Parse markdown
32
+ const processed = await parseMarkdown(code, config.markdown, { path: id, relativePath: id.replace(config.root, '') });
33
+ // Generate virtual Marko component code
34
+ const virtualCode = generateVirtualMarkoComponent(processed, id);
35
+ // Cache for HMR
36
+ markdownCache.set(id, virtualCode);
37
+ return {
38
+ code: virtualCode,
39
+ map: null,
40
+ };
41
+ }
42
+ catch (error) {
43
+ console.error(`Failed to transform markdown: ${id}`, error);
44
+ return null;
45
+ }
46
+ },
47
+ // Handle hot module replacement
48
+ handleHotUpdate({ file }) {
49
+ if (!MARKDOWN_REGEX.test(file)) {
50
+ return;
51
+ }
52
+ // Invalidate cache
53
+ markdownCache.delete(file);
54
+ },
55
+ };
56
+ }
57
+ /**
58
+ * Generate virtual Marko component code from processed markdown
59
+ */
60
+ function generateVirtualMarkoComponent(processed, filePath) {
61
+ const { frontmatter, html, headers, excerpt } = processed;
62
+ // Create a virtual Marko component that renders the markdown
63
+ return `
64
+ <marko-press-markdown
65
+ frontmatter=${JSON.stringify(frontmatter)}
66
+ html=${JSON.stringify(html)}
67
+ headers=${JSON.stringify(headers)}
68
+ excerpt=${JSON.stringify(excerpt)}
69
+ filePath="${filePath}"
70
+ />
71
+ `.trim();
72
+ }
73
+ /**
74
+ * Resolve virtual module imports
75
+ */
76
+ export function markoPressVirtualModulePlugin() {
77
+ return {
78
+ name: 'markopress:virtual-modules',
79
+ resolveId(id) {
80
+ if (id.startsWith(MARKO_VIRTUAL_PREFIX)) {
81
+ return id;
82
+ }
83
+ return null;
84
+ },
85
+ load(id) {
86
+ if (id.startsWith(MARKO_VIRTUAL_PREFIX)) {
87
+ // Return virtual module content
88
+ return `export default {}`;
89
+ }
90
+ return null;
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"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"}
package/marko.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "exports": "./src/theme/default/tags"
3
+ }
package/package.json ADDED
@@ -0,0 +1,109 @@
1
+ {
2
+ "name": "markopress",
3
+ "version": "0.0.1",
4
+ "description": "A general-purpose static site generator using Marko.js v6",
5
+ "type": "module",
6
+ "marko": {
7
+ "src": "src/theme/default"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "bin": {
12
+ "markopress": "./bin/cli.js"
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "import": "./dist/index.js",
17
+ "types": "./dist/index.d.ts"
18
+ },
19
+ "./config": {
20
+ "import": "./dist/config/index.js",
21
+ "types": "./dist/config/index.d.ts"
22
+ },
23
+ "./markdown": {
24
+ "import": "./dist/markdown/index.js",
25
+ "types": "./dist/markdown/index.d.ts"
26
+ },
27
+ "./content": {
28
+ "import": "./dist/content/index.js",
29
+ "types": "./dist/content/index.d.ts"
30
+ },
31
+ "./plugin": {
32
+ "import": "./dist/plugin/index.js",
33
+ "types": "./dist/plugin/index.d.ts"
34
+ },
35
+ "./theme": {
36
+ "import": "./dist/theme/index.js",
37
+ "types": "./dist/theme/index.d.ts"
38
+ },
39
+ "./build": {
40
+ "import": "./dist/build/vite-markdown-plugin.js"
41
+ },
42
+ "./vite": {
43
+ "import": "./dist/vite/index.js",
44
+ "types": "./dist/vite/index.d.ts"
45
+ },
46
+ "./plugins/*": {
47
+ "import": "./dist/plugins/*.js",
48
+ "types": "./dist/plugins/*.d.ts"
49
+ },
50
+ "./marko.json": "./marko.json",
51
+ "./src/theme/default/tags/*": "./src/theme/default/tags/*"
52
+ },
53
+ "dependencies": {
54
+ "chokidar": "^3.5.3",
55
+ "commander": "^12.0.0",
56
+ "fast-glob": "^3.3.0",
57
+ "gray-matter": "^4.0.3",
58
+ "markdown-it": "^14.0.0",
59
+ "markdown-it-anchor": "^8.6.7",
60
+ "markdown-it-attrs": "^4.1.6",
61
+ "markdown-it-container": "^4.0.0",
62
+ "markdown-it-emoji": "^3.0.0",
63
+ "p-limit": "^4.0.0",
64
+ "shiki": "^1.0.0",
65
+ "zod": "^4.3.5"
66
+ },
67
+ "peerDependencies": {
68
+ "@marko/run": "^0.9.0",
69
+ "marko": "^6.0.0",
70
+ "vite": "^7.0.0"
71
+ },
72
+ "peerDependenciesMeta": {
73
+ "vite": {
74
+ "optional": true
75
+ }
76
+ },
77
+ "devDependencies": {
78
+ "@marko/run": "^0.9.4",
79
+ "@types/markdown-it": "^14.0.0",
80
+ "@types/node": "^20.10.0",
81
+ "@vitest/ui": "^4.0.17",
82
+ "execa": "^9.6.1",
83
+ "picocolors": "^1.1.1",
84
+ "prompts": "^2.4.2",
85
+ "semver": "^7.7.4",
86
+ "typescript": "^5.3.0",
87
+ "vite": "^7.3.1",
88
+ "vitest": "^4.0.17"
89
+ },
90
+ "engines": {
91
+ "node": ">=18.0.0"
92
+ },
93
+ "files": [
94
+ "marko.json",
95
+ "dist",
96
+ "bin",
97
+ "templates",
98
+ "src/theme/default"
99
+ ],
100
+ "scripts": {
101
+ "build": "pnpm exec tsc",
102
+ "dev": "pnpm exec tsc --watch",
103
+ "typecheck": "pnpm exec tsc --noEmit",
104
+ "test": "vitest run",
105
+ "test:watch": "vitest",
106
+ "test:ui": "vitest --ui",
107
+ "release": "node scripts/release.js"
108
+ }
109
+ }