markopress 0.0.2 → 0.0.4

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 (288) hide show
  1. package/dist/build/index.d.ts +0 -1
  2. package/dist/build/index.js +1 -1627
  3. package/dist/build/types.d.ts +0 -1
  4. package/dist/build/types.js +1 -5
  5. package/dist/build/vite-markdown-plugin.d.ts +0 -1
  6. package/dist/build/vite-markdown-plugin.js +1 -147
  7. package/dist/cli/index.d.ts +0 -1
  8. package/dist/cli/index.js +1 -74
  9. package/dist/config/app-root.d.ts +0 -1
  10. package/dist/config/app-root.js +1 -24
  11. package/dist/config/index.d.ts +0 -1
  12. package/dist/config/index.js +1 -6
  13. package/dist/config/loader.d.ts +0 -1
  14. package/dist/config/loader.js +1 -188
  15. package/dist/config/types.d.ts +0 -1
  16. package/dist/config/types.js +1 -5
  17. package/dist/config/validation.d.ts +0 -1
  18. package/dist/config/validation.js +1 -139
  19. package/dist/content/index.d.ts +0 -1
  20. package/dist/content/index.js +1 -6
  21. package/dist/content/registry.d.ts +0 -1
  22. package/dist/content/registry.js +1 -45
  23. package/dist/content/types.d.ts +0 -1
  24. package/dist/content/types.js +1 -5
  25. package/dist/dev/index.d.ts +0 -1
  26. package/dist/dev/index.js +1 -93
  27. package/dist/index.d.ts +0 -1
  28. package/dist/index.js +1 -17
  29. package/dist/markdown/base-path-plugin.d.ts +16 -0
  30. package/dist/markdown/base-path-plugin.js +1 -0
  31. package/dist/markdown/code.d.ts +0 -1
  32. package/dist/markdown/code.js +1 -305
  33. package/dist/markdown/containers.d.ts +0 -1
  34. package/dist/markdown/containers.js +1 -143
  35. package/dist/markdown/includes.d.ts +0 -1
  36. package/dist/markdown/includes.js +1 -9
  37. package/dist/markdown/index.d.ts +0 -1
  38. package/dist/markdown/index.js +1 -8
  39. package/dist/markdown/loader.d.ts +0 -1
  40. package/dist/markdown/loader.js +1 -325
  41. package/dist/markdown/md-link-plugin.d.ts +14 -0
  42. package/dist/markdown/md-link-plugin.js +1 -0
  43. package/dist/markdown/preserve-tags.d.ts +0 -1
  44. package/dist/markdown/preserve-tags.js +1 -233
  45. package/dist/markdown/renderer.d.ts +0 -1
  46. package/dist/markdown/renderer.js +1 -146
  47. package/dist/markdown/tag-validator.d.ts +0 -1
  48. package/dist/markdown/tag-validator.js +1 -118
  49. package/dist/markdown/types.d.ts +2 -1
  50. package/dist/markdown/types.js +1 -5
  51. package/dist/plugin/compat.d.ts +0 -1
  52. package/dist/plugin/compat.js +1 -78
  53. package/dist/plugin/context.d.ts +0 -1
  54. package/dist/plugin/context.js +1 -103
  55. package/dist/plugin/index.d.ts +0 -1
  56. package/dist/plugin/index.js +1 -6
  57. package/dist/plugin/manager.d.ts +0 -1
  58. package/dist/plugin/manager.js +1 -385
  59. package/dist/plugin/types.d.ts +1 -1
  60. package/dist/plugin/types.js +1 -5
  61. package/dist/plugins/blog-index/index.d.ts +0 -1
  62. package/dist/plugins/blog-index/index.js +1 -158
  63. package/dist/plugins/sidenav/index.d.ts +0 -1
  64. package/dist/plugins/sidenav/index.js +1 -86
  65. package/dist/plugins/toc/index.d.ts +0 -1
  66. package/dist/plugins/toc/index.js +1 -79
  67. package/dist/preview/index.d.ts +0 -1
  68. package/dist/preview/index.js +1 -25
  69. package/dist/theme/default/design-systems/default.d.ts +0 -1
  70. package/dist/theme/default/design-systems/default.js +1 -289
  71. package/dist/theme/default/design-systems/docusaurus.d.ts +0 -1
  72. package/dist/theme/default/design-systems/docusaurus.js +1 -299
  73. package/dist/theme/default/design-systems/index.d.ts +0 -1
  74. package/dist/theme/default/design-systems/index.js +1 -54
  75. package/dist/theme/default/design-systems/rspress.d.ts +0 -1
  76. package/dist/theme/default/design-systems/rspress.js +1 -299
  77. package/dist/theme/default/design-systems/types.d.ts +0 -1
  78. package/dist/theme/default/design-systems/types.js +1 -6
  79. package/dist/theme/default/design-systems/vitepress.d.ts +0 -1
  80. package/dist/theme/default/design-systems/vitepress.js +1 -299
  81. package/dist/theme/default/index.d.ts +0 -1
  82. package/dist/theme/default/index.js +1 -44
  83. package/dist/theme/default/theme.d.ts +0 -1
  84. package/dist/theme/default/theme.js +1 -58
  85. package/dist/theme/index.d.ts +0 -1
  86. package/dist/theme/index.js +1 -6
  87. package/dist/theme/loader.d.ts +0 -1
  88. package/dist/theme/loader.js +1 -125
  89. package/dist/theme/types.d.ts +1 -1
  90. package/dist/theme/types.js +1 -5
  91. package/dist/vite/index.d.ts +0 -1
  92. package/dist/vite/index.js +1 -6
  93. package/dist/vite/markdownPlugin.d.ts +0 -1
  94. package/dist/vite/markdownPlugin.js +1 -111
  95. package/dist/vite/plugin.d.ts +0 -1
  96. package/dist/vite/plugin.js +1 -94
  97. package/package.json +3 -2
  98. package/src/theme/default/layouts/blog.marko +1 -1
  99. package/src/theme/default/layouts/default.marko +5 -5
  100. package/src/theme/default/layouts/docs.marko +6 -6
  101. package/src/theme/default/layouts/page.marko +1 -1
  102. package/templates/catch-all-handler.js.template +2 -17
  103. package/dist/build/index.d.ts.map +0 -1
  104. package/dist/build/index.js.map +0 -1
  105. package/dist/build/manifest-generator.d.ts +0 -34
  106. package/dist/build/manifest-generator.d.ts.map +0 -1
  107. package/dist/build/manifest-generator.js +0 -86
  108. package/dist/build/manifest-generator.js.map +0 -1
  109. package/dist/build/security.test.d.ts +0 -6
  110. package/dist/build/security.test.d.ts.map +0 -1
  111. package/dist/build/security.test.js +0 -88
  112. package/dist/build/security.test.js.map +0 -1
  113. package/dist/build/types.d.ts.map +0 -1
  114. package/dist/build/types.js.map +0 -1
  115. package/dist/build/vite-config.test.d.ts +0 -2
  116. package/dist/build/vite-config.test.d.ts.map +0 -1
  117. package/dist/build/vite-config.test.js +0 -53
  118. package/dist/build/vite-config.test.js.map +0 -1
  119. package/dist/build/vite-markdown-plugin.d.ts.map +0 -1
  120. package/dist/build/vite-markdown-plugin.js.map +0 -1
  121. package/dist/build/vite-markdown-plugin.test.d.ts +0 -2
  122. package/dist/build/vite-markdown-plugin.test.d.ts.map +0 -1
  123. package/dist/build/vite-markdown-plugin.test.js +0 -41
  124. package/dist/build/vite-markdown-plugin.test.js.map +0 -1
  125. package/dist/cli/index.d.ts.map +0 -1
  126. package/dist/cli/index.js.map +0 -1
  127. package/dist/config/app-root.d.ts.map +0 -1
  128. package/dist/config/app-root.js.map +0 -1
  129. package/dist/config/app-root.test.d.ts +0 -2
  130. package/dist/config/app-root.test.d.ts.map +0 -1
  131. package/dist/config/app-root.test.js +0 -71
  132. package/dist/config/app-root.test.js.map +0 -1
  133. package/dist/config/index.d.ts.map +0 -1
  134. package/dist/config/index.js.map +0 -1
  135. package/dist/config/loader.d.ts.map +0 -1
  136. package/dist/config/loader.js.map +0 -1
  137. package/dist/config/loader.test.d.ts +0 -2
  138. package/dist/config/loader.test.d.ts.map +0 -1
  139. package/dist/config/loader.test.js +0 -24
  140. package/dist/config/loader.test.js.map +0 -1
  141. package/dist/config/types.d.ts.map +0 -1
  142. package/dist/config/types.js.map +0 -1
  143. package/dist/config/validation.d.ts.map +0 -1
  144. package/dist/config/validation.js.map +0 -1
  145. package/dist/content/index.d.ts.map +0 -1
  146. package/dist/content/index.js.map +0 -1
  147. package/dist/content/registry.d.ts.map +0 -1
  148. package/dist/content/registry.js.map +0 -1
  149. package/dist/content/scanner.d.ts +0 -9
  150. package/dist/content/scanner.d.ts.map +0 -1
  151. package/dist/content/scanner.js +0 -115
  152. package/dist/content/scanner.js.map +0 -1
  153. package/dist/content/types.d.ts.map +0 -1
  154. package/dist/content/types.js.map +0 -1
  155. package/dist/dev/index.d.ts.map +0 -1
  156. package/dist/dev/index.js.map +0 -1
  157. package/dist/index.d.ts.map +0 -1
  158. package/dist/index.js.map +0 -1
  159. package/dist/markdown/code.d.ts.map +0 -1
  160. package/dist/markdown/code.js.map +0 -1
  161. package/dist/markdown/containers.d.ts.map +0 -1
  162. package/dist/markdown/containers.js.map +0 -1
  163. package/dist/markdown/includes.d.ts.map +0 -1
  164. package/dist/markdown/includes.js.map +0 -1
  165. package/dist/markdown/index.d.ts.map +0 -1
  166. package/dist/markdown/index.js.map +0 -1
  167. package/dist/markdown/loader.d.ts.map +0 -1
  168. package/dist/markdown/loader.js.map +0 -1
  169. package/dist/markdown/preserve-tags.d.ts.map +0 -1
  170. package/dist/markdown/preserve-tags.js.map +0 -1
  171. package/dist/markdown/renderer.d.ts.map +0 -1
  172. package/dist/markdown/renderer.js.map +0 -1
  173. package/dist/markdown/tag-validator.d.ts.map +0 -1
  174. package/dist/markdown/tag-validator.js.map +0 -1
  175. package/dist/markdown/types.d.ts.map +0 -1
  176. package/dist/markdown/types.js.map +0 -1
  177. package/dist/plugin/compat.d.ts.map +0 -1
  178. package/dist/plugin/compat.js.map +0 -1
  179. package/dist/plugin/context.d.ts.map +0 -1
  180. package/dist/plugin/context.js.map +0 -1
  181. package/dist/plugin/index.d.ts.map +0 -1
  182. package/dist/plugin/index.js.map +0 -1
  183. package/dist/plugin/manager.d.ts.map +0 -1
  184. package/dist/plugin/manager.js.map +0 -1
  185. package/dist/plugin/types.d.ts.map +0 -1
  186. package/dist/plugin/types.js.map +0 -1
  187. package/dist/plugins/blog-index/index.d.ts.map +0 -1
  188. package/dist/plugins/blog-index/index.js.map +0 -1
  189. package/dist/plugins/sidenav/index.d.ts.map +0 -1
  190. package/dist/plugins/sidenav/index.js.map +0 -1
  191. package/dist/plugins/toc/index.d.ts.map +0 -1
  192. package/dist/plugins/toc/index.js.map +0 -1
  193. package/dist/preview/index.d.ts.map +0 -1
  194. package/dist/preview/index.js.map +0 -1
  195. package/dist/theme/default/build/generate-all.d.ts +0 -9
  196. package/dist/theme/default/build/generate-all.d.ts.map +0 -1
  197. package/dist/theme/default/build/generate-all.js +0 -85
  198. package/dist/theme/default/build/generate-all.js.map +0 -1
  199. package/dist/theme/default/build/generate-css.d.ts +0 -19
  200. package/dist/theme/default/build/generate-css.d.ts.map +0 -1
  201. package/dist/theme/default/build/generate-css.js +0 -199
  202. package/dist/theme/default/build/generate-css.js.map +0 -1
  203. package/dist/theme/default/build/index.d.ts +0 -5
  204. package/dist/theme/default/build/index.d.ts.map +0 -1
  205. package/dist/theme/default/build/index.js +0 -5
  206. package/dist/theme/default/build/index.js.map +0 -1
  207. package/dist/theme/default/design-systems/default.d.ts.map +0 -1
  208. package/dist/theme/default/design-systems/default.js.map +0 -1
  209. package/dist/theme/default/design-systems/docusaurus.d.ts.map +0 -1
  210. package/dist/theme/default/design-systems/docusaurus.js.map +0 -1
  211. package/dist/theme/default/design-systems/index.d.ts.map +0 -1
  212. package/dist/theme/default/design-systems/index.js.map +0 -1
  213. package/dist/theme/default/design-systems/rspress.d.ts.map +0 -1
  214. package/dist/theme/default/design-systems/rspress.js.map +0 -1
  215. package/dist/theme/default/design-systems/types.d.ts.map +0 -1
  216. package/dist/theme/default/design-systems/types.js.map +0 -1
  217. package/dist/theme/default/design-systems/vitepress.d.ts.map +0 -1
  218. package/dist/theme/default/design-systems/vitepress.js.map +0 -1
  219. package/dist/theme/default/index.d.ts.map +0 -1
  220. package/dist/theme/default/index.js.map +0 -1
  221. package/dist/theme/default/theme.d.ts.map +0 -1
  222. package/dist/theme/default/theme.js.map +0 -1
  223. package/dist/theme/index.d.ts.map +0 -1
  224. package/dist/theme/index.js.map +0 -1
  225. package/dist/theme/loader.d.ts.map +0 -1
  226. package/dist/theme/loader.js.map +0 -1
  227. package/dist/theme/types.d.ts.map +0 -1
  228. package/dist/theme/types.js.map +0 -1
  229. package/dist/vite/index.d.ts.map +0 -1
  230. package/dist/vite/index.js.map +0 -1
  231. package/dist/vite/markdownPlugin.d.ts.map +0 -1
  232. package/dist/vite/markdownPlugin.js.map +0 -1
  233. package/dist/vite/plugin.d.ts.map +0 -1
  234. package/dist/vite/plugin.js.map +0 -1
  235. package/src/theme/default/build/generate-all.ts +0 -99
  236. package/src/theme/default/build/generate-css.ts +0 -234
  237. package/src/theme/default/build/index.ts +0 -5
  238. package/src/theme/default/components/doc-footer.marko +0 -180
  239. package/src/theme/default/components/footer.marko +0 -32
  240. package/src/theme/default/components/header.marko +0 -49
  241. package/src/theme/default/components/nav-bar.marko +0 -191
  242. package/src/theme/default/components/page-header.marko +0 -20
  243. package/src/theme/default/components/reading-progress.marko +0 -36
  244. package/src/theme/default/components/search.marko +0 -239
  245. package/src/theme/default/components/sidebar.marko +0 -211
  246. package/src/theme/default/components/site-footer.marko +0 -211
  247. package/src/theme/default/components/skip-link.marko +0 -49
  248. package/src/theme/default/components/theme/theme-aside-bottom.marko +0 -1
  249. package/src/theme/default/components/theme/theme-aside-top.marko +0 -1
  250. package/src/theme/default/components/theme/theme-body-bottom.marko +0 -1
  251. package/src/theme/default/components/theme/theme-body-top.marko +0 -1
  252. package/src/theme/default/components/theme/theme-doc-bottom.marko +0 -1
  253. package/src/theme/default/components/theme/theme-doc-footer-after.marko +0 -1
  254. package/src/theme/default/components/theme/theme-doc-footer-before.marko +0 -1
  255. package/src/theme/default/components/theme/theme-doc-top.marko +0 -1
  256. package/src/theme/default/components/theme/theme-head-bottom.marko +0 -1
  257. package/src/theme/default/components/theme/theme-head-top.marko +0 -1
  258. package/src/theme/default/components/theme/theme-home-features-after.marko +0 -1
  259. package/src/theme/default/components/theme/theme-home-hero-after.marko +0 -1
  260. package/src/theme/default/components/theme/theme-home-hero-before.marko +0 -1
  261. package/src/theme/default/components/theme/theme-navbar-center.marko +0 -5
  262. package/src/theme/default/components/theme/theme-navbar-end.marko +0 -30
  263. package/src/theme/default/components/theme/theme-navbar-start.marko +0 -1
  264. package/src/theme/default/components/theme/theme-page-bottom.marko +0 -1
  265. package/src/theme/default/components/theme/theme-page-top.marko +0 -1
  266. package/src/theme/default/components/theme/theme-sidebar-bottom.marko +0 -1
  267. package/src/theme/default/components/theme/theme-sidebar-top.marko +0 -1
  268. package/src/theme/default/components/theme/theme-toc-item.marko +0 -1
  269. package/src/theme/default/components/theme-toggle.marko +0 -122
  270. package/src/theme/default/components/toc.marko +0 -140
  271. package/src/theme/default/design-systems/default.ts +0 -331
  272. package/src/theme/default/design-systems/docusaurus.ts +0 -341
  273. package/src/theme/default/design-systems/index.ts +0 -67
  274. package/src/theme/default/design-systems/rspress.ts +0 -341
  275. package/src/theme/default/design-systems/types.ts +0 -296
  276. package/src/theme/default/design-systems/vitepress.ts +0 -341
  277. package/src/theme/default/index.ts +0 -107
  278. package/src/theme/default/theme.ts +0 -83
  279. package/templates/example-tags/README.md +0 -212
  280. package/templates/example-tags/alert-box.marko +0 -98
  281. package/templates/example-tags/button-primary.marko +0 -28
  282. package/templates/example-tags/button-secondary.marko +0 -28
  283. package/templates/example-tags/button.marko +0 -6
  284. package/templates/example-tags/card-body.marko +0 -8
  285. package/templates/example-tags/card-footer.marko +0 -7
  286. package/templates/example-tags/card-header.marko +0 -7
  287. package/templates/example-tags/card.marko +0 -20
  288. package/templates/example-tags/icon.marko +0 -149
@@ -1,103 +1 @@
1
- /**
2
- * Plugin context implementations
3
- * Provides isolated contexts for each plugin lifecycle stage
4
- */
5
- /**
6
- * AllContent implementation
7
- * Aggregates content from all plugins
8
- */
9
- export class AllContentImpl {
10
- contentMap = new Map();
11
- pageCache;
12
- docCache;
13
- postCache;
14
- addPluginContent(pluginName, content) {
15
- if (content) {
16
- this.contentMap.set(pluginName, content);
17
- this.invalidateCache();
18
- }
19
- }
20
- invalidateCache() {
21
- this.pageCache = undefined;
22
- this.docCache = undefined;
23
- this.postCache = undefined;
24
- }
25
- getPages() {
26
- if (!this.pageCache) {
27
- const pages = [];
28
- for (const content of this.contentMap.values()) {
29
- if (content.pages) {
30
- pages.push(...content.pages);
31
- }
32
- }
33
- this.pageCache = pages;
34
- }
35
- return this.pageCache;
36
- }
37
- getDocs() {
38
- if (!this.docCache) {
39
- const docs = [];
40
- for (const content of this.contentMap.values()) {
41
- if (content.docs) {
42
- docs.push(...content.docs);
43
- }
44
- }
45
- this.docCache = docs;
46
- }
47
- return this.docCache;
48
- }
49
- getPosts() {
50
- if (!this.postCache) {
51
- const posts = [];
52
- for (const content of this.contentMap.values()) {
53
- if (content.blog) {
54
- posts.push(...content.blog);
55
- }
56
- }
57
- this.postCache = posts;
58
- }
59
- return this.postCache;
60
- }
61
- getContent(type) {
62
- const items = [];
63
- for (const content of this.contentMap.values()) {
64
- if (content[type]) {
65
- items.push(...content[type]);
66
- }
67
- }
68
- return items;
69
- }
70
- clear() {
71
- this.contentMap.clear();
72
- this.invalidateCache();
73
- }
74
- }
75
- /**
76
- * Content actions implementation
77
- * Manages routes and data added by plugins
78
- */
79
- export class ContentActionsImpl {
80
- routes = new Map();
81
- data = new Map();
82
- addRoute(route) {
83
- const key = `${route.path}-${route.component || 'default'}`;
84
- this.routes.set(key, route);
85
- }
86
- addData(key, value) {
87
- this.data.set(key, value);
88
- }
89
- getRoute(path) {
90
- return Array.from(this.routes.values()).find(r => r.path === path);
91
- }
92
- getAllRoutes() {
93
- return Array.from(this.routes.values());
94
- }
95
- getData() {
96
- return this.data;
97
- }
98
- clear() {
99
- this.routes.clear();
100
- this.data.clear();
101
- }
102
- }
103
- //# sourceMappingURL=context.js.map
1
+ export class AllContentImpl{contentMap=new Map;pageCache;docCache;postCache;addPluginContent(t,e){e&&(this.contentMap.set(t,e),this.invalidateCache())}invalidateCache(){this.pageCache=void 0,this.docCache=void 0,this.postCache=void 0}getPages(){if(!this.pageCache){const t=[];for(const e of this.contentMap.values())e.pages&&t.push(...e.pages);this.pageCache=t}return this.pageCache}getDocs(){if(!this.docCache){const t=[];for(const e of this.contentMap.values())e.docs&&t.push(...e.docs);this.docCache=t}return this.docCache}getPosts(){if(!this.postCache){const t=[];for(const e of this.contentMap.values())e.blog&&t.push(...e.blog);this.postCache=t}return this.postCache}getContent(t){const e=[];for(const a of this.contentMap.values())a[t]&&e.push(...a[t]);return e}clear(){this.contentMap.clear(),this.invalidateCache()}}export class ContentActionsImpl{routes=new Map;data=new Map;addRoute(t){const e=`${t.path}-${t.component||"default"}`;this.routes.set(e,t)}addData(t,e){this.data.set(t,e)}getRoute(t){return Array.from(this.routes.values()).find(e=>e.path===t)}getAllRoutes(){return Array.from(this.routes.values())}getData(){return this.data}clear(){this.routes.clear(),this.data.clear()}}
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export * from './manager.js';
5
5
  export * from './types.js';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1 @@
1
- /**
2
- * Plugin module exports
3
- */
4
- export * from './manager.js';
5
- export * from './types.js';
6
- //# sourceMappingURL=index.js.map
1
+ export*from"./manager.js";export*from"./types.js";
@@ -109,4 +109,3 @@ export declare class PluginManager {
109
109
  */
110
110
  createBuildContext(manifest: ContentManifest, routes: RouteManifest): BuildContext;
111
111
  }
112
- //# sourceMappingURL=manager.d.ts.map
@@ -1,385 +1 @@
1
- /**
2
- * Plugin manager for MarkoPress
3
- * Manages plugin lifecycle, dependencies, and hook execution
4
- */
5
- import MarkdownIt from 'markdown-it';
6
- import { AllContentImpl, ContentActionsImpl } from './context.js';
7
- import { wrapLegacyPlugin } from './compat.js';
8
- export class PluginManager {
9
- plugins = [];
10
- config;
11
- pluginLoadOrder = [];
12
- loadResults = [];
13
- allContent = new AllContentImpl();
14
- contentActions = new ContentActionsImpl();
15
- constructor(config) {
16
- this.config = config;
17
- }
18
- /**
19
- * Load plugins from configuration with dependency resolution
20
- */
21
- async loadPlugins(pluginConfigs) {
22
- // Resolve plugin dependencies
23
- const orderedConfigs = await this.resolvePluginDependencies(pluginConfigs);
24
- // Load plugins in dependency order
25
- for (const pluginConfig of orderedConfigs) {
26
- const result = await this.loadPlugin(pluginConfig);
27
- if (result) {
28
- // Wrap plugin for backward compatibility
29
- const wrappedPlugin = wrapLegacyPlugin(result.plugin);
30
- this.plugins.push(wrappedPlugin);
31
- this.loadResults.push(result);
32
- this.pluginLoadOrder.push(wrappedPlugin.name);
33
- }
34
- }
35
- console.log(`✓ Loaded ${this.plugins.length} plugins: ${this.pluginLoadOrder.join(', ')}`);
36
- }
37
- /**
38
- * Resolve plugin dependencies using topological sort
39
- */
40
- async resolvePluginDependencies(pluginConfigs) {
41
- const visited = new Set();
42
- const visiting = new Set();
43
- const sorted = [];
44
- const pluginMap = new Map();
45
- // Map plugin names to configs
46
- for (const config of pluginConfigs) {
47
- const name = this.getPluginName(config);
48
- pluginMap.set(name, config);
49
- }
50
- const visit = async (name) => {
51
- if (visited.has(name)) {
52
- return;
53
- }
54
- if (visiting.has(name)) {
55
- throw new Error(`Circular dependency detected among plugins: ${name}`);
56
- }
57
- visiting.add(name);
58
- const config = pluginMap.get(name);
59
- if (!config) {
60
- throw new Error(`Plugin not found: ${name}`);
61
- }
62
- // Get plugin dependencies
63
- const deps = await this.getPluginDependencies(config);
64
- for (const dep of deps) {
65
- if (pluginMap.has(dep)) {
66
- await visit(dep);
67
- }
68
- }
69
- visiting.delete(name);
70
- visited.add(name);
71
- sorted.push(config);
72
- };
73
- // Visit all plugins
74
- for (const name of pluginMap.keys()) {
75
- await visit(name);
76
- }
77
- return sorted;
78
- }
79
- /**
80
- * Get plugin name from config
81
- */
82
- getPluginName(config) {
83
- if (typeof config === 'string') {
84
- return config;
85
- }
86
- else if (Array.isArray(config)) {
87
- return config[0];
88
- }
89
- else {
90
- return config.name;
91
- }
92
- }
93
- /**
94
- * Get plugin dependencies
95
- */
96
- async getPluginDependencies(config) {
97
- try {
98
- const plugin = await this.loadPluginModule(config);
99
- if (plugin && plugin.dependencies) {
100
- return plugin.dependencies;
101
- }
102
- }
103
- catch {
104
- // Ignore errors during dependency checking
105
- }
106
- return [];
107
- }
108
- /**
109
- * Resolve plugin name to import path
110
- * Built-in plugins are resolved from markopress/plugins/*
111
- * External plugins are resolved by package name
112
- */
113
- resolvePluginPath(name) {
114
- // Built-in plugins - simple names like 'sidenav', 'toc', 'blog-index'
115
- const builtInPlugins = ['sidenav', 'toc', 'blog-index'];
116
- if (builtInPlugins.includes(name)) {
117
- return `../plugins/${name}/index.js`;
118
- }
119
- return name;
120
- }
121
- /**
122
- * Load plugin module without executing it
123
- */
124
- async loadPluginModule(config) {
125
- try {
126
- if (typeof config === 'string') {
127
- const module = await import(this.resolvePluginPath(config));
128
- return module.default;
129
- }
130
- else if (Array.isArray(config)) {
131
- const [name] = config;
132
- const module = await import(this.resolvePluginPath(name));
133
- return module.default;
134
- }
135
- else {
136
- return config;
137
- }
138
- }
139
- catch {
140
- return null;
141
- }
142
- }
143
- /**
144
- * Load a single plugin with error isolation
145
- */
146
- async loadPlugin(pluginConfig) {
147
- const pluginName = this.getPluginName(pluginConfig);
148
- try {
149
- let plugin;
150
- if (typeof pluginConfig === 'string') {
151
- // Load from package name (resolve built-in or external)
152
- const module = await import(this.resolvePluginPath(pluginConfig));
153
- // Check if default export is a function (plugin factory)
154
- plugin = typeof module.default === 'function'
155
- ? await module.default()
156
- : module.default;
157
- }
158
- else if (Array.isArray(pluginConfig)) {
159
- // Load with options
160
- const [name, options] = pluginConfig;
161
- const module = await import(this.resolvePluginPath(name));
162
- plugin = typeof module.default === 'function'
163
- ? await module.default(options)
164
- : module.default;
165
- }
166
- else {
167
- // Inline plugin
168
- plugin = pluginConfig;
169
- }
170
- if (!plugin || !plugin.name) {
171
- throw new Error(`Invalid plugin: ${pluginName} - must have a 'name' property`);
172
- }
173
- // Execute config hook if present
174
- if (plugin.config) {
175
- const originalConfig = { ...this.config };
176
- try {
177
- this.config = await plugin.config(this.config);
178
- }
179
- catch (error) {
180
- console.error(`Plugin ${plugin.name} config hook failed, using original config:`, error);
181
- this.config = originalConfig;
182
- }
183
- }
184
- return { plugin, config: pluginConfig };
185
- }
186
- catch (error) {
187
- const errorMsg = error instanceof Error ? error.message : String(error);
188
- console.error(`Failed to load plugin ${pluginName}: ${errorMsg}`);
189
- return {
190
- plugin: { name: pluginName },
191
- config: pluginConfig,
192
- error: error instanceof Error ? error : new Error(errorMsg),
193
- };
194
- }
195
- }
196
- /**
197
- * Get all loaded plugins
198
- */
199
- getPlugins() {
200
- return this.plugins;
201
- }
202
- /**
203
- * Get plugin load results (including errors)
204
- */
205
- getLoadResults() {
206
- return this.loadResults;
207
- }
208
- /**
209
- * Execute markdown hooks on all plugins
210
- */
211
- async execMarkdownHooks(md) {
212
- for (const plugin of this.plugins) {
213
- if (plugin.extendMarkdown) {
214
- try {
215
- await plugin.extendMarkdown(md);
216
- }
217
- catch (error) {
218
- console.error(`Plugin ${plugin.name} extendMarkdown hook failed:`, error);
219
- }
220
- }
221
- }
222
- }
223
- /**
224
- * Execute extendRoutes hooks on all plugins
225
- */
226
- async execExtendRoutesHooks(routes) {
227
- let result = routes;
228
- for (const plugin of this.plugins) {
229
- if (plugin.extendRoutes) {
230
- try {
231
- result = await plugin.extendRoutes(result) || result;
232
- }
233
- catch (error) {
234
- console.error(`Plugin ${plugin.name} extendRoutes hook failed:`, error);
235
- }
236
- }
237
- }
238
- return result;
239
- }
240
- /**
241
- * Execute loadContent hooks on all plugins
242
- * Allows plugins to load content from external sources
243
- */
244
- async execLoadContentHooks() {
245
- for (const plugin of this.plugins) {
246
- if (plugin.loadContent) {
247
- try {
248
- const content = await plugin.loadContent();
249
- this.allContent.addPluginContent(plugin.name, content);
250
- }
251
- catch (error) {
252
- console.error(`Plugin ${plugin.name} loadContent hook failed:`, error);
253
- }
254
- }
255
- }
256
- }
257
- /**
258
- * Execute enhanceModules hooks on all plugins
259
- * Allows plugins to enhance content modules with metadata
260
- */
261
- async execEnhanceModulesHooks(modules) {
262
- for (const plugin of this.plugins) {
263
- if (plugin.enhanceModules) {
264
- try {
265
- // Filter modules based on plugin's modules declaration
266
- let modulesToEnhance = modules;
267
- if (plugin.modules && plugin.modules.length > 0) {
268
- modulesToEnhance = modules.filter(m => plugin.modules.includes(m.id));
269
- }
270
- await plugin.enhanceModules(modulesToEnhance);
271
- }
272
- catch (error) {
273
- console.error(`Plugin ${plugin.name} enhanceModules hook failed:`, error);
274
- }
275
- }
276
- }
277
- }
278
- /**
279
- * Execute contentLoaded hooks with enhanced context
280
- */
281
- async execContentLoadedHooks(manifest) {
282
- // No need to merge manifest - plugins work directly with dynamic modules
283
- for (const plugin of this.plugins) {
284
- if (plugin.contentLoaded) {
285
- try {
286
- // Get plugin's own content
287
- const pluginContent = this.allContent.getContent(plugin.name)[0] || {};
288
- await plugin.contentLoaded({
289
- content: pluginContent,
290
- allContent: this.allContent,
291
- actions: this.contentActions,
292
- });
293
- }
294
- catch (error) {
295
- console.error(`Plugin ${plugin.name} contentLoaded hook failed:`, error);
296
- }
297
- }
298
- }
299
- }
300
- /**
301
- * Execute allContentLoaded hooks on all plugins
302
- * Called after all plugins have processed their content
303
- */
304
- async execAllContentLoadedHooks(routes) {
305
- for (const plugin of this.plugins) {
306
- if (plugin.allContentLoaded) {
307
- try {
308
- await plugin.allContentLoaded({
309
- allContent: this.allContent,
310
- routes,
311
- actions: this.contentActions,
312
- });
313
- }
314
- catch (error) {
315
- console.error(`Plugin ${plugin.name} allContentLoaded hook failed:`, error);
316
- }
317
- }
318
- }
319
- }
320
- /**
321
- * Execute postBuild hooks on all plugins
322
- */
323
- async execPostBuildHooks(outDir, routes, assets) {
324
- // Execute postBuild hooks
325
- for (const plugin of this.plugins) {
326
- if (plugin.postBuild) {
327
- try {
328
- await plugin.postBuild({
329
- outDir,
330
- routes,
331
- assets,
332
- allContent: this.allContent,
333
- });
334
- }
335
- catch (error) {
336
- console.error(`Plugin ${plugin.name} postBuild hook failed:`, error);
337
- }
338
- }
339
- }
340
- }
341
- /**
342
- * Get plugin-generated routes
343
- */
344
- getPluginRoutes() {
345
- return this.contentActions.getAllRoutes();
346
- }
347
- /**
348
- * Get plugin data
349
- */
350
- getPluginData() {
351
- return this.contentActions.getData();
352
- }
353
- /**
354
- * Clear plugin state
355
- */
356
- clear() {
357
- this.allContent = new AllContentImpl();
358
- this.contentActions = new ContentActionsImpl();
359
- }
360
- /**
361
- * Create plugin context
362
- */
363
- createPluginContext() {
364
- return {
365
- config: this.config,
366
- utils: {
367
- log: (msg) => console.log(`[markopress] ${msg}`),
368
- warn: (msg) => console.warn(`[markopress] ${msg}`),
369
- error: (msg) => console.error(`[markopress] ${msg}`),
370
- },
371
- };
372
- }
373
- /**
374
- * Create build context
375
- */
376
- createBuildContext(manifest, routes) {
377
- const baseContext = this.createPluginContext();
378
- return {
379
- ...baseContext,
380
- content: manifest,
381
- routes,
382
- };
383
- }
384
- }
385
- //# sourceMappingURL=manager.js.map
1
+ import t from"markdown-it";import{AllContentImpl as n,ContentActionsImpl as e}from"./context.js";import{wrapLegacyPlugin as o}from"./compat.js";export class PluginManager{plugins=[];config;pluginLoadOrder=[];loadResults=[];allContent=new n;contentActions=new e;constructor(t){this.config=t}async loadPlugins(t){const n=await this.resolvePluginDependencies(t);for(const t of n){const n=await this.loadPlugin(t);if(n){const t=o(n.plugin);this.plugins.push(t),this.loadResults.push(n),this.pluginLoadOrder.push(t.name)}}console.log(`✓ Loaded ${this.plugins.length} plugins: ${this.pluginLoadOrder.join(", ")}`)}async resolvePluginDependencies(t){const n=new Set,e=new Set,o=[],i=new Map;for(const n of t){const t=this.getPluginName(n);i.set(t,n)}const s=async t=>{if(n.has(t))return;if(e.has(t))throw Error("Circular dependency detected among plugins: "+t);e.add(t);const a=i.get(t);if(!a)throw Error("Plugin not found: "+t);const r=await this.getPluginDependencies(a);for(const t of r)i.has(t)&&await s(t);e.delete(t),n.add(t),o.push(a)};for(const t of i.keys())await s(t);return o}getPluginName(t){return"string"==typeof t?t:Array.isArray(t)?t[0]:t.name}async getPluginDependencies(t){try{const n=await this.loadPluginModule(t);if(n&&n.dependencies)return n.dependencies}catch{}return[]}resolvePluginPath(t){return["sidenav","toc","blog-index"].includes(t)?`../plugins/${t}/index.js`:t}async loadPluginModule(t){try{if("string"==typeof t)return(await import(this.resolvePluginPath(t))).default;if(Array.isArray(t)){const[n]=t;return(await import(this.resolvePluginPath(n))).default}return t}catch{return null}}async loadPlugin(t){const n=this.getPluginName(t);try{let e;if("string"==typeof t){const n=await import(this.resolvePluginPath(t));e="function"==typeof n.default?await n.default():n.default}else if(Array.isArray(t)){const[n,o]=t,i=await import(this.resolvePluginPath(n));e="function"==typeof i.default?await i.default(o):i.default}else e=t;if(!e||!e.name)throw Error(`Invalid plugin: ${n} - must have a 'name' property`);if(e.config){const t={...this.config};try{this.config=await e.config(this.config)}catch(n){console.error(`Plugin ${e.name} config hook failed, using original config:`,n),this.config=t}}return{plugin:e,config:t}}catch(e){const o=e instanceof Error?e.message:e+"";return console.error(`Failed to load plugin ${n}: ${o}`),{plugin:{name:n},config:t,error:e instanceof Error?e:Error(o)}}}getPlugins(){return this.plugins}getLoadResults(){return this.loadResults}async execMarkdownHooks(t){for(const n of this.plugins)if(n.extendMarkdown)try{await n.extendMarkdown(t)}catch(t){console.error(`Plugin ${n.name} extendMarkdown hook failed:`,t)}}async execExtendRoutesHooks(t){let n=t;for(const t of this.plugins)if(t.extendRoutes)try{n=await t.extendRoutes(n)||n}catch(n){console.error(`Plugin ${t.name} extendRoutes hook failed:`,n)}return n}async execLoadContentHooks(){for(const t of this.plugins)if(t.loadContent)try{const n=await t.loadContent();this.allContent.addPluginContent(t.name,n)}catch(n){console.error(`Plugin ${t.name} loadContent hook failed:`,n)}}async execEnhanceModulesHooks(t){for(const n of this.plugins)if(n.enhanceModules)try{let e=t;n.modules&&n.modules.length>0&&(e=t.filter(t=>n.modules.includes(t.id))),await n.enhanceModules(e)}catch(t){console.error(`Plugin ${n.name} enhanceModules hook failed:`,t)}}async execContentLoadedHooks(t){for(const t of this.plugins)if(t.contentLoaded)try{const n=this.allContent.getContent(t.name)[0]||{};await t.contentLoaded({content:n,allContent:this.allContent,actions:this.contentActions})}catch(n){console.error(`Plugin ${t.name} contentLoaded hook failed:`,n)}}async execAllContentLoadedHooks(t){for(const n of this.plugins)if(n.allContentLoaded)try{await n.allContentLoaded({allContent:this.allContent,routes:t,actions:this.contentActions})}catch(t){console.error(`Plugin ${n.name} allContentLoaded hook failed:`,t)}}async execPostBuildHooks(t,n,e){for(const o of this.plugins)if(o.postBuild)try{await o.postBuild({outDir:t,routes:n,assets:e,allContent:this.allContent})}catch(t){console.error(`Plugin ${o.name} postBuild hook failed:`,t)}}getPluginRoutes(){return this.contentActions.getAllRoutes()}getPluginData(){return this.contentActions.getData()}clear(){this.allContent=new n,this.contentActions=new e}createPluginContext(){return{config:this.config,utils:{log:t=>console.log("[markopress] "+t),warn:t=>console.warn("[markopress] "+t),error:t=>console.error("[markopress] "+t)}}}createBuildContext(t,n){return{...this.createPluginContext(),content:t,routes:n}}}
@@ -101,6 +101,7 @@ export interface PostData extends PageData {
101
101
  export interface RouteData {
102
102
  path: string;
103
103
  component?: string;
104
+ handler?: string;
104
105
  layout?: string;
105
106
  meta?: Record<string, unknown>;
106
107
  }
@@ -179,4 +180,3 @@ export interface MarkoPressPlugin {
179
180
  * Plugin configuration
180
181
  */
181
182
  export type PluginConfig = string | [string, Record<string, unknown>] | MarkoPressPlugin;
182
- //# sourceMappingURL=types.d.ts.map
@@ -1,5 +1 @@
1
- /**
2
- * Plugin system types
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
1
+ export{};
@@ -15,4 +15,3 @@ export interface BlogIndexOptions {
15
15
  * Create blog index plugin
16
16
  */
17
17
  export default function blogIndexPlugin(options?: BlogIndexOptions): MarkoPressPlugin;
18
- //# sourceMappingURL=index.d.ts.map