markopress 0.0.2 → 0.0.3

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 (283) 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/code.d.ts +0 -1
  30. package/dist/markdown/code.js +1 -305
  31. package/dist/markdown/containers.d.ts +0 -1
  32. package/dist/markdown/containers.js +1 -143
  33. package/dist/markdown/includes.d.ts +0 -1
  34. package/dist/markdown/includes.js +1 -9
  35. package/dist/markdown/index.d.ts +0 -1
  36. package/dist/markdown/index.js +1 -8
  37. package/dist/markdown/loader.d.ts +0 -1
  38. package/dist/markdown/loader.js +1 -325
  39. package/dist/markdown/preserve-tags.d.ts +0 -1
  40. package/dist/markdown/preserve-tags.js +1 -233
  41. package/dist/markdown/renderer.d.ts +0 -1
  42. package/dist/markdown/renderer.js +1 -146
  43. package/dist/markdown/tag-validator.d.ts +0 -1
  44. package/dist/markdown/tag-validator.js +1 -118
  45. package/dist/markdown/types.d.ts +0 -1
  46. package/dist/markdown/types.js +1 -5
  47. package/dist/plugin/compat.d.ts +0 -1
  48. package/dist/plugin/compat.js +1 -78
  49. package/dist/plugin/context.d.ts +0 -1
  50. package/dist/plugin/context.js +1 -103
  51. package/dist/plugin/index.d.ts +0 -1
  52. package/dist/plugin/index.js +1 -6
  53. package/dist/plugin/manager.d.ts +0 -1
  54. package/dist/plugin/manager.js +1 -385
  55. package/dist/plugin/types.d.ts +0 -1
  56. package/dist/plugin/types.js +1 -5
  57. package/dist/plugins/blog-index/index.d.ts +0 -1
  58. package/dist/plugins/blog-index/index.js +1 -158
  59. package/dist/plugins/sidenav/index.d.ts +0 -1
  60. package/dist/plugins/sidenav/index.js +1 -86
  61. package/dist/plugins/toc/index.d.ts +0 -1
  62. package/dist/plugins/toc/index.js +1 -79
  63. package/dist/preview/index.d.ts +0 -1
  64. package/dist/preview/index.js +1 -25
  65. package/dist/theme/default/design-systems/default.d.ts +0 -1
  66. package/dist/theme/default/design-systems/default.js +1 -289
  67. package/dist/theme/default/design-systems/docusaurus.d.ts +0 -1
  68. package/dist/theme/default/design-systems/docusaurus.js +1 -299
  69. package/dist/theme/default/design-systems/index.d.ts +0 -1
  70. package/dist/theme/default/design-systems/index.js +1 -54
  71. package/dist/theme/default/design-systems/rspress.d.ts +0 -1
  72. package/dist/theme/default/design-systems/rspress.js +1 -299
  73. package/dist/theme/default/design-systems/types.d.ts +0 -1
  74. package/dist/theme/default/design-systems/types.js +1 -6
  75. package/dist/theme/default/design-systems/vitepress.d.ts +0 -1
  76. package/dist/theme/default/design-systems/vitepress.js +1 -299
  77. package/dist/theme/default/index.d.ts +0 -1
  78. package/dist/theme/default/index.js +1 -44
  79. package/dist/theme/default/theme.d.ts +0 -1
  80. package/dist/theme/default/theme.js +1 -58
  81. package/dist/theme/index.d.ts +0 -1
  82. package/dist/theme/index.js +1 -6
  83. package/dist/theme/loader.d.ts +0 -1
  84. package/dist/theme/loader.js +1 -125
  85. package/dist/theme/types.d.ts +1 -1
  86. package/dist/theme/types.js +1 -5
  87. package/dist/vite/index.d.ts +0 -1
  88. package/dist/vite/index.js +1 -6
  89. package/dist/vite/markdownPlugin.d.ts +0 -1
  90. package/dist/vite/markdownPlugin.js +1 -111
  91. package/dist/vite/plugin.d.ts +0 -1
  92. package/dist/vite/plugin.js +1 -94
  93. package/package.json +3 -2
  94. package/src/theme/default/layouts/blog.marko +1 -1
  95. package/src/theme/default/layouts/default.marko +5 -5
  96. package/src/theme/default/layouts/docs.marko +6 -6
  97. package/src/theme/default/layouts/page.marko +1 -1
  98. package/dist/build/index.d.ts.map +0 -1
  99. package/dist/build/index.js.map +0 -1
  100. package/dist/build/manifest-generator.d.ts +0 -34
  101. package/dist/build/manifest-generator.d.ts.map +0 -1
  102. package/dist/build/manifest-generator.js +0 -86
  103. package/dist/build/manifest-generator.js.map +0 -1
  104. package/dist/build/security.test.d.ts +0 -6
  105. package/dist/build/security.test.d.ts.map +0 -1
  106. package/dist/build/security.test.js +0 -88
  107. package/dist/build/security.test.js.map +0 -1
  108. package/dist/build/types.d.ts.map +0 -1
  109. package/dist/build/types.js.map +0 -1
  110. package/dist/build/vite-config.test.d.ts +0 -2
  111. package/dist/build/vite-config.test.d.ts.map +0 -1
  112. package/dist/build/vite-config.test.js +0 -53
  113. package/dist/build/vite-config.test.js.map +0 -1
  114. package/dist/build/vite-markdown-plugin.d.ts.map +0 -1
  115. package/dist/build/vite-markdown-plugin.js.map +0 -1
  116. package/dist/build/vite-markdown-plugin.test.d.ts +0 -2
  117. package/dist/build/vite-markdown-plugin.test.d.ts.map +0 -1
  118. package/dist/build/vite-markdown-plugin.test.js +0 -41
  119. package/dist/build/vite-markdown-plugin.test.js.map +0 -1
  120. package/dist/cli/index.d.ts.map +0 -1
  121. package/dist/cli/index.js.map +0 -1
  122. package/dist/config/app-root.d.ts.map +0 -1
  123. package/dist/config/app-root.js.map +0 -1
  124. package/dist/config/app-root.test.d.ts +0 -2
  125. package/dist/config/app-root.test.d.ts.map +0 -1
  126. package/dist/config/app-root.test.js +0 -71
  127. package/dist/config/app-root.test.js.map +0 -1
  128. package/dist/config/index.d.ts.map +0 -1
  129. package/dist/config/index.js.map +0 -1
  130. package/dist/config/loader.d.ts.map +0 -1
  131. package/dist/config/loader.js.map +0 -1
  132. package/dist/config/loader.test.d.ts +0 -2
  133. package/dist/config/loader.test.d.ts.map +0 -1
  134. package/dist/config/loader.test.js +0 -24
  135. package/dist/config/loader.test.js.map +0 -1
  136. package/dist/config/types.d.ts.map +0 -1
  137. package/dist/config/types.js.map +0 -1
  138. package/dist/config/validation.d.ts.map +0 -1
  139. package/dist/config/validation.js.map +0 -1
  140. package/dist/content/index.d.ts.map +0 -1
  141. package/dist/content/index.js.map +0 -1
  142. package/dist/content/registry.d.ts.map +0 -1
  143. package/dist/content/registry.js.map +0 -1
  144. package/dist/content/scanner.d.ts +0 -9
  145. package/dist/content/scanner.d.ts.map +0 -1
  146. package/dist/content/scanner.js +0 -115
  147. package/dist/content/scanner.js.map +0 -1
  148. package/dist/content/types.d.ts.map +0 -1
  149. package/dist/content/types.js.map +0 -1
  150. package/dist/dev/index.d.ts.map +0 -1
  151. package/dist/dev/index.js.map +0 -1
  152. package/dist/index.d.ts.map +0 -1
  153. package/dist/index.js.map +0 -1
  154. package/dist/markdown/code.d.ts.map +0 -1
  155. package/dist/markdown/code.js.map +0 -1
  156. package/dist/markdown/containers.d.ts.map +0 -1
  157. package/dist/markdown/containers.js.map +0 -1
  158. package/dist/markdown/includes.d.ts.map +0 -1
  159. package/dist/markdown/includes.js.map +0 -1
  160. package/dist/markdown/index.d.ts.map +0 -1
  161. package/dist/markdown/index.js.map +0 -1
  162. package/dist/markdown/loader.d.ts.map +0 -1
  163. package/dist/markdown/loader.js.map +0 -1
  164. package/dist/markdown/preserve-tags.d.ts.map +0 -1
  165. package/dist/markdown/preserve-tags.js.map +0 -1
  166. package/dist/markdown/renderer.d.ts.map +0 -1
  167. package/dist/markdown/renderer.js.map +0 -1
  168. package/dist/markdown/tag-validator.d.ts.map +0 -1
  169. package/dist/markdown/tag-validator.js.map +0 -1
  170. package/dist/markdown/types.d.ts.map +0 -1
  171. package/dist/markdown/types.js.map +0 -1
  172. package/dist/plugin/compat.d.ts.map +0 -1
  173. package/dist/plugin/compat.js.map +0 -1
  174. package/dist/plugin/context.d.ts.map +0 -1
  175. package/dist/plugin/context.js.map +0 -1
  176. package/dist/plugin/index.d.ts.map +0 -1
  177. package/dist/plugin/index.js.map +0 -1
  178. package/dist/plugin/manager.d.ts.map +0 -1
  179. package/dist/plugin/manager.js.map +0 -1
  180. package/dist/plugin/types.d.ts.map +0 -1
  181. package/dist/plugin/types.js.map +0 -1
  182. package/dist/plugins/blog-index/index.d.ts.map +0 -1
  183. package/dist/plugins/blog-index/index.js.map +0 -1
  184. package/dist/plugins/sidenav/index.d.ts.map +0 -1
  185. package/dist/plugins/sidenav/index.js.map +0 -1
  186. package/dist/plugins/toc/index.d.ts.map +0 -1
  187. package/dist/plugins/toc/index.js.map +0 -1
  188. package/dist/preview/index.d.ts.map +0 -1
  189. package/dist/preview/index.js.map +0 -1
  190. package/dist/theme/default/build/generate-all.d.ts +0 -9
  191. package/dist/theme/default/build/generate-all.d.ts.map +0 -1
  192. package/dist/theme/default/build/generate-all.js +0 -85
  193. package/dist/theme/default/build/generate-all.js.map +0 -1
  194. package/dist/theme/default/build/generate-css.d.ts +0 -19
  195. package/dist/theme/default/build/generate-css.d.ts.map +0 -1
  196. package/dist/theme/default/build/generate-css.js +0 -199
  197. package/dist/theme/default/build/generate-css.js.map +0 -1
  198. package/dist/theme/default/build/index.d.ts +0 -5
  199. package/dist/theme/default/build/index.d.ts.map +0 -1
  200. package/dist/theme/default/build/index.js +0 -5
  201. package/dist/theme/default/build/index.js.map +0 -1
  202. package/dist/theme/default/design-systems/default.d.ts.map +0 -1
  203. package/dist/theme/default/design-systems/default.js.map +0 -1
  204. package/dist/theme/default/design-systems/docusaurus.d.ts.map +0 -1
  205. package/dist/theme/default/design-systems/docusaurus.js.map +0 -1
  206. package/dist/theme/default/design-systems/index.d.ts.map +0 -1
  207. package/dist/theme/default/design-systems/index.js.map +0 -1
  208. package/dist/theme/default/design-systems/rspress.d.ts.map +0 -1
  209. package/dist/theme/default/design-systems/rspress.js.map +0 -1
  210. package/dist/theme/default/design-systems/types.d.ts.map +0 -1
  211. package/dist/theme/default/design-systems/types.js.map +0 -1
  212. package/dist/theme/default/design-systems/vitepress.d.ts.map +0 -1
  213. package/dist/theme/default/design-systems/vitepress.js.map +0 -1
  214. package/dist/theme/default/index.d.ts.map +0 -1
  215. package/dist/theme/default/index.js.map +0 -1
  216. package/dist/theme/default/theme.d.ts.map +0 -1
  217. package/dist/theme/default/theme.js.map +0 -1
  218. package/dist/theme/index.d.ts.map +0 -1
  219. package/dist/theme/index.js.map +0 -1
  220. package/dist/theme/loader.d.ts.map +0 -1
  221. package/dist/theme/loader.js.map +0 -1
  222. package/dist/theme/types.d.ts.map +0 -1
  223. package/dist/theme/types.js.map +0 -1
  224. package/dist/vite/index.d.ts.map +0 -1
  225. package/dist/vite/index.js.map +0 -1
  226. package/dist/vite/markdownPlugin.d.ts.map +0 -1
  227. package/dist/vite/markdownPlugin.js.map +0 -1
  228. package/dist/vite/plugin.d.ts.map +0 -1
  229. package/dist/vite/plugin.js.map +0 -1
  230. package/src/theme/default/build/generate-all.ts +0 -99
  231. package/src/theme/default/build/generate-css.ts +0 -234
  232. package/src/theme/default/build/index.ts +0 -5
  233. package/src/theme/default/components/doc-footer.marko +0 -180
  234. package/src/theme/default/components/footer.marko +0 -32
  235. package/src/theme/default/components/header.marko +0 -49
  236. package/src/theme/default/components/nav-bar.marko +0 -191
  237. package/src/theme/default/components/page-header.marko +0 -20
  238. package/src/theme/default/components/reading-progress.marko +0 -36
  239. package/src/theme/default/components/search.marko +0 -239
  240. package/src/theme/default/components/sidebar.marko +0 -211
  241. package/src/theme/default/components/site-footer.marko +0 -211
  242. package/src/theme/default/components/skip-link.marko +0 -49
  243. package/src/theme/default/components/theme/theme-aside-bottom.marko +0 -1
  244. package/src/theme/default/components/theme/theme-aside-top.marko +0 -1
  245. package/src/theme/default/components/theme/theme-body-bottom.marko +0 -1
  246. package/src/theme/default/components/theme/theme-body-top.marko +0 -1
  247. package/src/theme/default/components/theme/theme-doc-bottom.marko +0 -1
  248. package/src/theme/default/components/theme/theme-doc-footer-after.marko +0 -1
  249. package/src/theme/default/components/theme/theme-doc-footer-before.marko +0 -1
  250. package/src/theme/default/components/theme/theme-doc-top.marko +0 -1
  251. package/src/theme/default/components/theme/theme-head-bottom.marko +0 -1
  252. package/src/theme/default/components/theme/theme-head-top.marko +0 -1
  253. package/src/theme/default/components/theme/theme-home-features-after.marko +0 -1
  254. package/src/theme/default/components/theme/theme-home-hero-after.marko +0 -1
  255. package/src/theme/default/components/theme/theme-home-hero-before.marko +0 -1
  256. package/src/theme/default/components/theme/theme-navbar-center.marko +0 -5
  257. package/src/theme/default/components/theme/theme-navbar-end.marko +0 -30
  258. package/src/theme/default/components/theme/theme-navbar-start.marko +0 -1
  259. package/src/theme/default/components/theme/theme-page-bottom.marko +0 -1
  260. package/src/theme/default/components/theme/theme-page-top.marko +0 -1
  261. package/src/theme/default/components/theme/theme-sidebar-bottom.marko +0 -1
  262. package/src/theme/default/components/theme/theme-sidebar-top.marko +0 -1
  263. package/src/theme/default/components/theme/theme-toc-item.marko +0 -1
  264. package/src/theme/default/components/theme-toggle.marko +0 -122
  265. package/src/theme/default/components/toc.marko +0 -140
  266. package/src/theme/default/design-systems/default.ts +0 -331
  267. package/src/theme/default/design-systems/docusaurus.ts +0 -341
  268. package/src/theme/default/design-systems/index.ts +0 -67
  269. package/src/theme/default/design-systems/rspress.ts +0 -341
  270. package/src/theme/default/design-systems/types.ts +0 -296
  271. package/src/theme/default/design-systems/vitepress.ts +0 -341
  272. package/src/theme/default/index.ts +0 -107
  273. package/src/theme/default/theme.ts +0 -83
  274. package/templates/example-tags/README.md +0 -212
  275. package/templates/example-tags/alert-box.marko +0 -98
  276. package/templates/example-tags/button-primary.marko +0 -28
  277. package/templates/example-tags/button-secondary.marko +0 -28
  278. package/templates/example-tags/button.marko +0 -6
  279. package/templates/example-tags/card-body.marko +0 -8
  280. package/templates/example-tags/card-footer.marko +0 -7
  281. package/templates/example-tags/card-header.marko +0 -7
  282. package/templates/example-tags/card.marko +0 -20
  283. 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}}}
@@ -179,4 +179,3 @@ export interface MarkoPressPlugin {
179
179
  * Plugin configuration
180
180
  */
181
181
  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