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.
- package/bin/cli.js +16 -0
- package/dist/build/index.d.ts +83 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +1553 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/manifest-generator.d.ts +34 -0
- package/dist/build/manifest-generator.d.ts.map +1 -0
- package/dist/build/manifest-generator.js +86 -0
- package/dist/build/manifest-generator.js.map +1 -0
- package/dist/build/security.test.d.ts +6 -0
- package/dist/build/security.test.d.ts.map +1 -0
- package/dist/build/security.test.js +88 -0
- package/dist/build/security.test.js.map +1 -0
- package/dist/build/types.d.ts +21 -0
- package/dist/build/types.d.ts.map +1 -0
- package/dist/build/types.js +5 -0
- package/dist/build/types.js.map +1 -0
- package/dist/build/vite-config.test.d.ts +2 -0
- package/dist/build/vite-config.test.d.ts.map +1 -0
- package/dist/build/vite-config.test.js +53 -0
- package/dist/build/vite-config.test.js.map +1 -0
- package/dist/build/vite-markdown-plugin.d.ts +13 -0
- package/dist/build/vite-markdown-plugin.d.ts.map +1 -0
- package/dist/build/vite-markdown-plugin.js +134 -0
- package/dist/build/vite-markdown-plugin.js.map +1 -0
- package/dist/build/vite-markdown-plugin.test.d.ts +2 -0
- package/dist/build/vite-markdown-plugin.test.d.ts.map +1 -0
- package/dist/build/vite-markdown-plugin.test.js +41 -0
- package/dist/build/vite-markdown-plugin.test.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +75 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/app-root.d.ts +11 -0
- package/dist/config/app-root.d.ts.map +1 -0
- package/dist/config/app-root.js +24 -0
- package/dist/config/app-root.js.map +1 -0
- package/dist/config/app-root.test.d.ts +2 -0
- package/dist/config/app-root.test.d.ts.map +1 -0
- package/dist/config/app-root.test.js +71 -0
- package/dist/config/app-root.test.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +25 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +187 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/loader.test.d.ts +2 -0
- package/dist/config/loader.test.d.ts.map +1 -0
- package/dist/config/loader.test.js +24 -0
- package/dist/config/loader.test.js.map +1 -0
- package/dist/config/types.d.ts +149 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +5 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +188 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +139 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/content/index.d.ts +6 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +6 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/registry.d.ts +29 -0
- package/dist/content/registry.d.ts.map +1 -0
- package/dist/content/registry.js +45 -0
- package/dist/content/registry.js.map +1 -0
- package/dist/content/scanner.d.ts +9 -0
- package/dist/content/scanner.d.ts.map +1 -0
- package/dist/content/scanner.js +115 -0
- package/dist/content/scanner.js.map +1 -0
- package/dist/content/types.d.ts +41 -0
- package/dist/content/types.d.ts.map +1 -0
- package/dist/content/types.js +5 -0
- package/dist/content/types.js.map +1 -0
- package/dist/dev/index.d.ts +18 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +93 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown/code.d.ts +79 -0
- package/dist/markdown/code.d.ts.map +1 -0
- package/dist/markdown/code.js +305 -0
- package/dist/markdown/code.js.map +1 -0
- package/dist/markdown/containers.d.ts +17 -0
- package/dist/markdown/containers.d.ts.map +1 -0
- package/dist/markdown/containers.js +143 -0
- package/dist/markdown/containers.js.map +1 -0
- package/dist/markdown/includes.d.ts +18 -0
- package/dist/markdown/includes.d.ts.map +1 -0
- package/dist/markdown/includes.js +9 -0
- package/dist/markdown/includes.js.map +1 -0
- package/dist/markdown/index.d.ts +8 -0
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +8 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/loader.d.ts +31 -0
- package/dist/markdown/loader.d.ts.map +1 -0
- package/dist/markdown/loader.js +325 -0
- package/dist/markdown/loader.js.map +1 -0
- package/dist/markdown/preserve-tags.d.ts +16 -0
- package/dist/markdown/preserve-tags.d.ts.map +1 -0
- package/dist/markdown/preserve-tags.js +233 -0
- package/dist/markdown/preserve-tags.js.map +1 -0
- package/dist/markdown/renderer.d.ts +28 -0
- package/dist/markdown/renderer.d.ts.map +1 -0
- package/dist/markdown/renderer.js +146 -0
- package/dist/markdown/renderer.js.map +1 -0
- package/dist/markdown/tag-validator.d.ts +64 -0
- package/dist/markdown/tag-validator.d.ts.map +1 -0
- package/dist/markdown/tag-validator.js +118 -0
- package/dist/markdown/tag-validator.js.map +1 -0
- package/dist/markdown/types.d.ts +44 -0
- package/dist/markdown/types.d.ts.map +1 -0
- package/dist/markdown/types.js +5 -0
- package/dist/markdown/types.js.map +1 -0
- package/dist/plugin/compat.d.ts +14 -0
- package/dist/plugin/compat.d.ts.map +1 -0
- package/dist/plugin/compat.js +78 -0
- package/dist/plugin/compat.js.map +1 -0
- package/dist/plugin/context.d.ts +38 -0
- package/dist/plugin/context.d.ts.map +1 -0
- package/dist/plugin/context.js +103 -0
- package/dist/plugin/context.js.map +1 -0
- package/dist/plugin/index.d.ts +6 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +6 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/manager.d.ts +112 -0
- package/dist/plugin/manager.d.ts.map +1 -0
- package/dist/plugin/manager.js +385 -0
- package/dist/plugin/manager.js.map +1 -0
- package/dist/plugin/types.d.ts +182 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/plugin/types.js +5 -0
- package/dist/plugin/types.js.map +1 -0
- package/dist/plugins/blog-index/index.d.ts +18 -0
- package/dist/plugins/blog-index/index.d.ts.map +1 -0
- package/dist/plugins/blog-index/index.js +158 -0
- package/dist/plugins/blog-index/index.js.map +1 -0
- package/dist/plugins/sidenav/index.d.ts +36 -0
- package/dist/plugins/sidenav/index.d.ts.map +1 -0
- package/dist/plugins/sidenav/index.js +86 -0
- package/dist/plugins/sidenav/index.js.map +1 -0
- package/dist/plugins/toc/index.d.ts +38 -0
- package/dist/plugins/toc/index.d.ts.map +1 -0
- package/dist/plugins/toc/index.js +79 -0
- package/dist/plugins/toc/index.js.map +1 -0
- package/dist/preview/index.d.ts +7 -0
- package/dist/preview/index.d.ts.map +1 -0
- package/dist/preview/index.js +25 -0
- package/dist/preview/index.js.map +1 -0
- package/dist/theme/default/build/generate-all.d.ts +9 -0
- package/dist/theme/default/build/generate-all.d.ts.map +1 -0
- package/dist/theme/default/build/generate-all.js +85 -0
- package/dist/theme/default/build/generate-all.js.map +1 -0
- package/dist/theme/default/build/generate-css.d.ts +19 -0
- package/dist/theme/default/build/generate-css.d.ts.map +1 -0
- package/dist/theme/default/build/generate-css.js +199 -0
- package/dist/theme/default/build/generate-css.js.map +1 -0
- package/dist/theme/default/build/index.d.ts +5 -0
- package/dist/theme/default/build/index.d.ts.map +1 -0
- package/dist/theme/default/build/index.js +5 -0
- package/dist/theme/default/build/index.js.map +1 -0
- package/dist/theme/default/design-systems/default.d.ts +12 -0
- package/dist/theme/default/design-systems/default.d.ts.map +1 -0
- package/dist/theme/default/design-systems/default.js +289 -0
- package/dist/theme/default/design-systems/default.js.map +1 -0
- package/dist/theme/default/design-systems/docusaurus.d.ts +12 -0
- package/dist/theme/default/design-systems/docusaurus.d.ts.map +1 -0
- package/dist/theme/default/design-systems/docusaurus.js +299 -0
- package/dist/theme/default/design-systems/docusaurus.js.map +1 -0
- package/dist/theme/default/design-systems/index.d.ts +50 -0
- package/dist/theme/default/design-systems/index.d.ts.map +1 -0
- package/dist/theme/default/design-systems/index.js +54 -0
- package/dist/theme/default/design-systems/index.js.map +1 -0
- package/dist/theme/default/design-systems/rspress.d.ts +12 -0
- package/dist/theme/default/design-systems/rspress.d.ts.map +1 -0
- package/dist/theme/default/design-systems/rspress.js +299 -0
- package/dist/theme/default/design-systems/rspress.js.map +1 -0
- package/dist/theme/default/design-systems/types.d.ts +238 -0
- package/dist/theme/default/design-systems/types.d.ts.map +1 -0
- package/dist/theme/default/design-systems/types.js +6 -0
- package/dist/theme/default/design-systems/types.js.map +1 -0
- package/dist/theme/default/design-systems/vitepress.d.ts +12 -0
- package/dist/theme/default/design-systems/vitepress.d.ts.map +1 -0
- package/dist/theme/default/design-systems/vitepress.js +299 -0
- package/dist/theme/default/design-systems/vitepress.js.map +1 -0
- package/dist/theme/default/index.d.ts +60 -0
- package/dist/theme/default/index.d.ts.map +1 -0
- package/dist/theme/default/index.js +44 -0
- package/dist/theme/default/index.js.map +1 -0
- package/dist/theme/default/theme.d.ts +14 -0
- package/dist/theme/default/theme.d.ts.map +1 -0
- package/dist/theme/default/theme.js +58 -0
- package/dist/theme/default/theme.js.map +1 -0
- package/dist/theme/index.d.ts +6 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +6 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/loader.d.ts +21 -0
- package/dist/theme/loader.d.ts.map +1 -0
- package/dist/theme/loader.js +125 -0
- package/dist/theme/loader.js.map +1 -0
- package/dist/theme/types.d.ts +73 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +5 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/vite/index.d.ts +6 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +6 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/markdownPlugin.d.ts +15 -0
- package/dist/vite/markdownPlugin.d.ts.map +1 -0
- package/dist/vite/markdownPlugin.js +111 -0
- package/dist/vite/markdownPlugin.js.map +1 -0
- package/dist/vite/plugin.d.ts +18 -0
- package/dist/vite/plugin.d.ts.map +1 -0
- package/dist/vite/plugin.js +94 -0
- package/dist/vite/plugin.js.map +1 -0
- package/marko.json +3 -0
- package/package.json +109 -0
- package/src/theme/default/build/generate-all.ts +99 -0
- package/src/theme/default/build/generate-css.ts +234 -0
- package/src/theme/default/build/index.ts +5 -0
- package/src/theme/default/components/doc-footer.marko +180 -0
- package/src/theme/default/components/footer.marko +32 -0
- package/src/theme/default/components/header.marko +49 -0
- package/src/theme/default/components/nav-bar.marko +191 -0
- package/src/theme/default/components/page-header.marko +20 -0
- package/src/theme/default/components/reading-progress.marko +36 -0
- package/src/theme/default/components/search.marko +239 -0
- package/src/theme/default/components/sidebar.marko +211 -0
- package/src/theme/default/components/site-footer.marko +211 -0
- package/src/theme/default/components/skip-link.marko +49 -0
- package/src/theme/default/components/theme/theme-aside-bottom.marko +1 -0
- package/src/theme/default/components/theme/theme-aside-top.marko +1 -0
- package/src/theme/default/components/theme/theme-body-bottom.marko +1 -0
- package/src/theme/default/components/theme/theme-body-top.marko +1 -0
- package/src/theme/default/components/theme/theme-doc-bottom.marko +1 -0
- package/src/theme/default/components/theme/theme-doc-footer-after.marko +1 -0
- package/src/theme/default/components/theme/theme-doc-footer-before.marko +1 -0
- package/src/theme/default/components/theme/theme-doc-top.marko +1 -0
- package/src/theme/default/components/theme/theme-head-bottom.marko +1 -0
- package/src/theme/default/components/theme/theme-head-top.marko +1 -0
- package/src/theme/default/components/theme/theme-home-features-after.marko +1 -0
- package/src/theme/default/components/theme/theme-home-hero-after.marko +1 -0
- package/src/theme/default/components/theme/theme-home-hero-before.marko +1 -0
- package/src/theme/default/components/theme/theme-navbar-center.marko +5 -0
- package/src/theme/default/components/theme/theme-navbar-end.marko +30 -0
- package/src/theme/default/components/theme/theme-navbar-start.marko +1 -0
- package/src/theme/default/components/theme/theme-page-bottom.marko +1 -0
- package/src/theme/default/components/theme/theme-page-top.marko +1 -0
- package/src/theme/default/components/theme/theme-sidebar-bottom.marko +1 -0
- package/src/theme/default/components/theme/theme-sidebar-top.marko +1 -0
- package/src/theme/default/components/theme/theme-toc-item.marko +1 -0
- package/src/theme/default/components/theme-toggle.marko +122 -0
- package/src/theme/default/components/toc.marko +140 -0
- package/src/theme/default/design-systems/default.ts +331 -0
- package/src/theme/default/design-systems/docusaurus.ts +341 -0
- package/src/theme/default/design-systems/index.ts +67 -0
- package/src/theme/default/design-systems/rspress.ts +341 -0
- package/src/theme/default/design-systems/types.ts +296 -0
- package/src/theme/default/design-systems/vitepress.ts +341 -0
- package/src/theme/default/index.ts +107 -0
- package/src/theme/default/layouts/blog.marko +65 -0
- package/src/theme/default/layouts/content-page.marko +41 -0
- package/src/theme/default/layouts/default.marko +209 -0
- package/src/theme/default/layouts/docs.marko +81 -0
- package/src/theme/default/layouts/home-page.marko +19 -0
- package/src/theme/default/layouts/page.marko +51 -0
- package/src/theme/default/public/theme-default.css +1081 -0
- package/src/theme/default/public/theme-docusaurus.css +1081 -0
- package/src/theme/default/public/theme-vitepress.css +1081 -0
- package/src/theme/default/public/theme.css +2 -0
- package/src/theme/default/routes/+layout.marko +57 -0
- package/src/theme/default/styles/main.css +249 -0
- package/src/theme/default/styles-base.css +757 -0
- package/src/theme/default/styles.css +899 -0
- package/src/theme/default/taglib.json +18 -0
- package/src/theme/default/tags/doc-footer.marko +180 -0
- package/src/theme/default/tags/footer.marko +32 -0
- package/src/theme/default/tags/header.marko +49 -0
- package/src/theme/default/tags/nav-bar.marko +191 -0
- package/src/theme/default/tags/page-header.marko +20 -0
- package/src/theme/default/tags/reading-progress.marko +36 -0
- package/src/theme/default/tags/search.marko +239 -0
- package/src/theme/default/tags/sidebar.marko +211 -0
- package/src/theme/default/tags/site-footer.marko +211 -0
- package/src/theme/default/tags/skip-link.marko +49 -0
- package/src/theme/default/tags/theme-aside-bottom.marko +1 -0
- package/src/theme/default/tags/theme-aside-top.marko +1 -0
- package/src/theme/default/tags/theme-body-bottom.marko +1 -0
- package/src/theme/default/tags/theme-body-top.marko +1 -0
- package/src/theme/default/tags/theme-doc-bottom.marko +1 -0
- package/src/theme/default/tags/theme-doc-footer-after.marko +1 -0
- package/src/theme/default/tags/theme-doc-footer-before.marko +1 -0
- package/src/theme/default/tags/theme-doc-top.marko +1 -0
- package/src/theme/default/tags/theme-head-bottom.marko +1 -0
- package/src/theme/default/tags/theme-head-top.marko +1 -0
- package/src/theme/default/tags/theme-home-features-after.marko +1 -0
- package/src/theme/default/tags/theme-home-hero-after.marko +1 -0
- package/src/theme/default/tags/theme-home-hero-before.marko +1 -0
- package/src/theme/default/tags/theme-navbar-center.marko +5 -0
- package/src/theme/default/tags/theme-navbar-end.marko +30 -0
- package/src/theme/default/tags/theme-navbar-start.marko +1 -0
- package/src/theme/default/tags/theme-page-bottom.marko +1 -0
- package/src/theme/default/tags/theme-page-top.marko +1 -0
- package/src/theme/default/tags/theme-sidebar-bottom.marko +1 -0
- package/src/theme/default/tags/theme-sidebar-top.marko +1 -0
- package/src/theme/default/tags/theme-toc-item.marko +1 -0
- package/src/theme/default/tags/theme-toggle.marko +122 -0
- package/src/theme/default/tags/toc.marko +140 -0
- package/src/theme/default/theme.ts +83 -0
- package/templates/blog-post.marko.template +13 -0
- package/templates/catch-all-handler.js.template +90 -0
- package/templates/catch-all-page.marko.template +69 -0
- package/templates/doc.marko.template +6 -0
- package/templates/example-tags/README.md +212 -0
- package/templates/example-tags/alert-box.marko +98 -0
- package/templates/example-tags/button-primary.marko +28 -0
- package/templates/example-tags/button-secondary.marko +28 -0
- package/templates/example-tags/button.marko +6 -0
- package/templates/example-tags/card-body.marko +8 -0
- package/templates/example-tags/card-footer.marko +7 -0
- package/templates/example-tags/card-header.marko +7 -0
- package/templates/example-tags/card.marko +20 -0
- package/templates/example-tags/icon.marko +149 -0
- package/templates/layout.marko.template +64 -0
- package/templates/page.marko.template +6 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request-time markdown renderer
|
|
3
|
+
* Lazy-loads MarkdownIt + Shiki on first use
|
|
4
|
+
* Used by route handlers to render markdown on demand
|
|
5
|
+
*/
|
|
6
|
+
import matter from 'gray-matter';
|
|
7
|
+
import MarkdownIt from 'markdown-it';
|
|
8
|
+
import { getMarkdownIt } from './loader.js';
|
|
9
|
+
/**
|
|
10
|
+
* Cached MarkdownIt instance (lazy-loaded on first use)
|
|
11
|
+
*/
|
|
12
|
+
let mdInstance = null;
|
|
13
|
+
let mdOptions;
|
|
14
|
+
/**
|
|
15
|
+
* Render markdown source to HTML at request time
|
|
16
|
+
*
|
|
17
|
+
* This function lazy-loads MarkdownIt + Shiki on first call,
|
|
18
|
+
* then reuses the instance for subsequent renders.
|
|
19
|
+
*
|
|
20
|
+
* @param source - Raw markdown source with frontmatter
|
|
21
|
+
* @param options - Markdown parsing options (only used on first call)
|
|
22
|
+
* @returns Processed markdown with frontmatter, HTML, and headers
|
|
23
|
+
*/
|
|
24
|
+
export async function renderMarkdown(source, options) {
|
|
25
|
+
// Lazy init MarkdownIt (one-time cost)
|
|
26
|
+
if (!mdInstance) {
|
|
27
|
+
// Always enable markoTags for component support
|
|
28
|
+
const opts = {
|
|
29
|
+
...options,
|
|
30
|
+
markoTags: {
|
|
31
|
+
enabled: true,
|
|
32
|
+
...options?.markoTags
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
mdInstance = await getMarkdownIt(opts);
|
|
36
|
+
mdOptions = opts;
|
|
37
|
+
}
|
|
38
|
+
// Parse frontmatter
|
|
39
|
+
const { data: frontmatter, content: rawContent, excerpt } = matter(source, {
|
|
40
|
+
excerpt: true,
|
|
41
|
+
excerpt_separator: '<!-- more -->',
|
|
42
|
+
});
|
|
43
|
+
// Render markdown to HTML
|
|
44
|
+
const html = mdInstance.render(rawContent);
|
|
45
|
+
// Extract headers for TOC
|
|
46
|
+
const headers = extractHeaders(rawContent);
|
|
47
|
+
return {
|
|
48
|
+
frontmatter,
|
|
49
|
+
content: rawContent,
|
|
50
|
+
html,
|
|
51
|
+
excerpt,
|
|
52
|
+
headers: buildHeaderTree(headers),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Reset the cached MarkdownIt instance
|
|
57
|
+
* Useful for testing or when options change
|
|
58
|
+
*/
|
|
59
|
+
export function resetRendererCache() {
|
|
60
|
+
mdInstance = null;
|
|
61
|
+
mdOptions = undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the current MarkdownIt instance if initialized
|
|
65
|
+
*/
|
|
66
|
+
export function getRendererInstance() {
|
|
67
|
+
return mdInstance;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Strip markdown formatting from text for cleaner TOC entries
|
|
71
|
+
*/
|
|
72
|
+
function stripMarkdownFormatting(text) {
|
|
73
|
+
return text
|
|
74
|
+
.replace(/`([^`]+)`/g, '$1')
|
|
75
|
+
.replace(/\*\*\*\+([^*]+)\*\*\+/g, '$1')
|
|
76
|
+
.replace(/___+([^_]+)___+/g, '$1')
|
|
77
|
+
.replace(/\*\*([^*]+)\*\*/g, '$1')
|
|
78
|
+
.replace(/__([^_]+)__/g, '$1')
|
|
79
|
+
.replace(/\*([^*]+)\*/g, '$1')
|
|
80
|
+
.replace(/_([^_]+)_/g, '$1')
|
|
81
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
|
|
82
|
+
.replace(/\[([^\]]+)\]\[[^\]]+\]/g, '$1')
|
|
83
|
+
.trim();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Extract headers from markdown content
|
|
87
|
+
*/
|
|
88
|
+
function extractHeaders(content) {
|
|
89
|
+
const headers = [];
|
|
90
|
+
const withoutCodeBlocks = content
|
|
91
|
+
.replace(/```[\s\S]*?```/g, '')
|
|
92
|
+
.replace(/~~~[\s\S]*?~~~/g, '')
|
|
93
|
+
.replace(/^(\t| {4}).+$/gm, '');
|
|
94
|
+
const headerRegex = /^(#{1,6})\s+(.+)$/gm;
|
|
95
|
+
let match;
|
|
96
|
+
while ((match = headerRegex.exec(withoutCodeBlocks)) !== null) {
|
|
97
|
+
const level = match[1].length;
|
|
98
|
+
const rawTitle = match[2].trim();
|
|
99
|
+
const title = stripMarkdownFormatting(rawTitle);
|
|
100
|
+
const slug = slugify(rawTitle);
|
|
101
|
+
headers.push({ level, title, slug });
|
|
102
|
+
}
|
|
103
|
+
return headers;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Build header tree from flat list
|
|
107
|
+
*/
|
|
108
|
+
function buildHeaderTree(headers) {
|
|
109
|
+
const result = [];
|
|
110
|
+
const stack = [];
|
|
111
|
+
for (const header of headers) {
|
|
112
|
+
const node = {
|
|
113
|
+
level: header.level,
|
|
114
|
+
title: header.title,
|
|
115
|
+
slug: header.slug,
|
|
116
|
+
children: [],
|
|
117
|
+
};
|
|
118
|
+
while (stack.length > 0 && stack[stack.length - 1].level >= header.level) {
|
|
119
|
+
stack.pop();
|
|
120
|
+
}
|
|
121
|
+
if (stack.length === 0) {
|
|
122
|
+
result.push(node);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
stack[stack.length - 1].children.push(node);
|
|
126
|
+
}
|
|
127
|
+
stack.push(node);
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Slugify text for URL-safe IDs
|
|
133
|
+
*/
|
|
134
|
+
function slugify(text) {
|
|
135
|
+
return text
|
|
136
|
+
.trim()
|
|
137
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
138
|
+
.replace(/([0-9])([a-zA-Z])/g, '$1-$2')
|
|
139
|
+
.replace(/([a-zA-Z])([0-9])/g, '$1-$2')
|
|
140
|
+
.toLowerCase()
|
|
141
|
+
.replace(/\s+/g, '-')
|
|
142
|
+
.replace(/[^\w\u00A0-\uFFFF\-]+/g, '')
|
|
143
|
+
.replace(/^-+|-+$/g, '')
|
|
144
|
+
.replace(/-+/g, '-');
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/markdown/renderer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,IAAI,UAAU,GAAsB,IAAI,CAAC;AACzC,IAAI,SAAsC,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,OAAyB;IAEzB,uCAAuC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,gDAAgD;QAChD,MAAM,IAAI,GAAG;YACX,GAAG,OAAO;YACV,SAAS,EAAE;gBACT,OAAO,EAAE,IAAI;gBACb,GAAG,OAAO,EAAE,SAAS;aACtB;SACF,CAAC;QACF,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QACvC,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,oBAAoB;IACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;QACzE,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,eAAe;KACnC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE3C,0BAA0B;IAC1B,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3C,OAAO;QACL,WAAW;QACX,OAAO,EAAE,UAAU;QACnB,IAAI;QACJ,OAAO;QACP,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;KAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,UAAU,GAAG,IAAI,CAAC;IAClB,SAAS,GAAG,SAAS,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,IAAY;IAC3C,OAAO,IAAI;SACR,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC;SACvC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC;SACjC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC;SACjC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAC7B,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAC7B,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC;SACvC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC;SACxC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,OAAO,GAA0D,EAAE,CAAC;IAC1E,MAAM,iBAAiB,GAAG,OAAO;SAC9B,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;SAC9B,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;SAC9B,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAElC,MAAM,WAAW,GAAG,qBAAqB,CAAC;IAC1C,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,OAA8D;IAE9D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAW;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACzE,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,IAAI,EAAE;SACN,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;SACrC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tag Validator for Marko components in markdown
|
|
3
|
+
*
|
|
4
|
+
* Tracks all detected Marko tags during the build process,
|
|
5
|
+
* scans the tags/ directory for available components,
|
|
6
|
+
* and validates that all detected tags have corresponding component files.
|
|
7
|
+
*/
|
|
8
|
+
export interface DetectedTag {
|
|
9
|
+
/** Tag name (kebab-case, e.g., "alert-box") */
|
|
10
|
+
tagName: string;
|
|
11
|
+
/** File path where tag was used */
|
|
12
|
+
fileName: string;
|
|
13
|
+
/** Line number where tag was used */
|
|
14
|
+
lineNumber: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ValidationResult {
|
|
17
|
+
/** True if all detected tags have corresponding component files */
|
|
18
|
+
success: boolean;
|
|
19
|
+
/** List of missing tags with their usage locations */
|
|
20
|
+
missingTags: DetectedTag[];
|
|
21
|
+
}
|
|
22
|
+
export declare class TagValidator {
|
|
23
|
+
private detectedTags;
|
|
24
|
+
private availableTags;
|
|
25
|
+
/**
|
|
26
|
+
* Add a detected tag for tracking
|
|
27
|
+
*/
|
|
28
|
+
addDetectedTag(tagName: string, fileName: string, lineNumber: number): void;
|
|
29
|
+
/**
|
|
30
|
+
* Scan tags directory to find all available Marko components
|
|
31
|
+
*/
|
|
32
|
+
loadAvailableTags(tagsDir: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Get count of available tags
|
|
35
|
+
*/
|
|
36
|
+
getAvailableTagsCount(): number;
|
|
37
|
+
/**
|
|
38
|
+
* Get list of available tags
|
|
39
|
+
*/
|
|
40
|
+
getAvailableTags(): string[];
|
|
41
|
+
/**
|
|
42
|
+
* Get all detected tags (grouped by tag name)
|
|
43
|
+
*/
|
|
44
|
+
getDetectedTags(): Map<string, DetectedTag[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Validate that all detected tags exist in the tags directory
|
|
47
|
+
*
|
|
48
|
+
* @returns Validation result with success flag and list of missing tags
|
|
49
|
+
*/
|
|
50
|
+
validate(): ValidationResult;
|
|
51
|
+
/**
|
|
52
|
+
* Clear state for new build
|
|
53
|
+
*/
|
|
54
|
+
reset(): void;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Format validation error message
|
|
58
|
+
*/
|
|
59
|
+
export declare function formatValidationError(missingTags: DetectedTag[]): string;
|
|
60
|
+
/**
|
|
61
|
+
* Create a global validator instance
|
|
62
|
+
*/
|
|
63
|
+
export declare const globalTagValidator: TagValidator;
|
|
64
|
+
//# sourceMappingURL=tag-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-validator.d.ts","sourceRoot":"","sources":["../../src/markdown/tag-validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAEhB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;IAEjB,sDAAsD;IACtD,WAAW,EAAE,WAAW,EAAE,CAAC;CAC5B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,aAAa,CAA0B;IAE/C;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAY3E;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvD;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAI/B;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IAI7C;;;;OAIG;IACH,QAAQ,IAAI,gBAAgB;IAiB5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,CAoBxE;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,cAAqB,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tag Validator for Marko components in markdown
|
|
3
|
+
*
|
|
4
|
+
* Tracks all detected Marko tags during the build process,
|
|
5
|
+
* scans the tags/ directory for available components,
|
|
6
|
+
* and validates that all detected tags have corresponding component files.
|
|
7
|
+
*/
|
|
8
|
+
import { promises as fs } from 'node:fs';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
export class TagValidator {
|
|
11
|
+
detectedTags = new Map();
|
|
12
|
+
availableTags = new Set();
|
|
13
|
+
/**
|
|
14
|
+
* Add a detected tag for tracking
|
|
15
|
+
*/
|
|
16
|
+
addDetectedTag(tagName, fileName, lineNumber) {
|
|
17
|
+
const normalized = tagName.toLowerCase();
|
|
18
|
+
if (!this.detectedTags.has(normalized)) {
|
|
19
|
+
this.detectedTags.set(normalized, []);
|
|
20
|
+
}
|
|
21
|
+
this.detectedTags.get(normalized).push({
|
|
22
|
+
tagName: normalized,
|
|
23
|
+
fileName,
|
|
24
|
+
lineNumber,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Scan tags directory to find all available Marko components
|
|
29
|
+
*/
|
|
30
|
+
async loadAvailableTags(tagsDir) {
|
|
31
|
+
try {
|
|
32
|
+
await fs.access(tagsDir);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Directory doesn't exist, that's OK (no tags available)
|
|
36
|
+
console.warn(`Warning: tags directory not found at ${tagsDir}`);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const files = await fs.readdir(tagsDir);
|
|
40
|
+
for (const file of files) {
|
|
41
|
+
if (file.endsWith('.marko')) {
|
|
42
|
+
const tagName = file.replace('.marko', '');
|
|
43
|
+
this.availableTags.add(tagName);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get count of available tags
|
|
49
|
+
*/
|
|
50
|
+
getAvailableTagsCount() {
|
|
51
|
+
return this.availableTags.size;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get list of available tags
|
|
55
|
+
*/
|
|
56
|
+
getAvailableTags() {
|
|
57
|
+
return Array.from(this.availableTags).sort();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get all detected tags (grouped by tag name)
|
|
61
|
+
*/
|
|
62
|
+
getDetectedTags() {
|
|
63
|
+
return this.detectedTags;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validate that all detected tags exist in the tags directory
|
|
67
|
+
*
|
|
68
|
+
* @returns Validation result with success flag and list of missing tags
|
|
69
|
+
*/
|
|
70
|
+
validate() {
|
|
71
|
+
const missingTags = [];
|
|
72
|
+
// Check each detected tag
|
|
73
|
+
for (const [tagName, occurrences] of this.detectedTags) {
|
|
74
|
+
if (!this.availableTags.has(tagName)) {
|
|
75
|
+
// Tag is missing - add all occurrences
|
|
76
|
+
missingTags.push(...occurrences);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
success: missingTags.length === 0,
|
|
81
|
+
missingTags,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Clear state for new build
|
|
86
|
+
*/
|
|
87
|
+
reset() {
|
|
88
|
+
this.detectedTags.clear();
|
|
89
|
+
this.availableTags.clear();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Format validation error message
|
|
94
|
+
*/
|
|
95
|
+
export function formatValidationError(missingTags) {
|
|
96
|
+
// Group by tag name
|
|
97
|
+
const uniqueTags = new Map();
|
|
98
|
+
for (const tag of missingTags) {
|
|
99
|
+
if (!uniqueTags.has(tag.tagName)) {
|
|
100
|
+
uniqueTags.set(tag.tagName, []);
|
|
101
|
+
}
|
|
102
|
+
uniqueTags.get(tag.tagName).push(tag);
|
|
103
|
+
}
|
|
104
|
+
let output = '\n❌ Marko tags not found:\n';
|
|
105
|
+
for (const [tagName, occurrences] of uniqueTags) {
|
|
106
|
+
output += `\n <${tagName}> used in:\n`;
|
|
107
|
+
for (const occ of occurrences) {
|
|
108
|
+
output += ` ${occ.fileName}:${occ.lineNumber}\n`;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
output += '\nCreate missing files in tags/ directory or remove tags from markdown.\n';
|
|
112
|
+
return output;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create a global validator instance
|
|
116
|
+
*/
|
|
117
|
+
export const globalTagValidator = new TagValidator();
|
|
118
|
+
//# sourceMappingURL=tag-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-validator.js","sourceRoot":"","sources":["../../src/markdown/tag-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown processing types
|
|
3
|
+
*/
|
|
4
|
+
export interface MarkdownOptions {
|
|
5
|
+
lineNumbers?: boolean;
|
|
6
|
+
theme?: {
|
|
7
|
+
light?: string;
|
|
8
|
+
dark?: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Marko tags support
|
|
12
|
+
*/
|
|
13
|
+
markoTags?: {
|
|
14
|
+
/** Enable Marko tags in markdown (default: false) */
|
|
15
|
+
enabled?: boolean;
|
|
16
|
+
/** Directory containing Marko component files (default: 'tags/') */
|
|
17
|
+
tagsDir?: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface MarkdownProcessor {
|
|
21
|
+
process(src: string, filePath?: string): Promise<ProcessedMarkdown>;
|
|
22
|
+
}
|
|
23
|
+
export interface ProcessedMarkdown {
|
|
24
|
+
frontmatter: Record<string, unknown>;
|
|
25
|
+
content: string;
|
|
26
|
+
html: string;
|
|
27
|
+
headers: Header[];
|
|
28
|
+
excerpt?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface Header {
|
|
31
|
+
level: number;
|
|
32
|
+
title: string;
|
|
33
|
+
slug: string;
|
|
34
|
+
children: Header[];
|
|
35
|
+
}
|
|
36
|
+
export interface MarkdownEnv {
|
|
37
|
+
path?: string;
|
|
38
|
+
relativePath?: string;
|
|
39
|
+
rootDir?: string;
|
|
40
|
+
filePath?: string;
|
|
41
|
+
/** Enable TOC extraction for this file (default: false) */
|
|
42
|
+
extractToc?: boolean;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/markdown/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,qDAAqD;QACrD,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB,oEAAoE;QACpE,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/markdown/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backward compatibility utilities for plugins
|
|
3
|
+
*/
|
|
4
|
+
import type { MarkoPressPlugin } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Wrap legacy plugin to support new hooks
|
|
7
|
+
* Ensures old plugins work without modification
|
|
8
|
+
*/
|
|
9
|
+
export declare function wrapLegacyPlugin(plugin: any): MarkoPressPlugin;
|
|
10
|
+
/**
|
|
11
|
+
* Check if plugin is using legacy signature
|
|
12
|
+
*/
|
|
13
|
+
export declare function isLegacyPlugin(plugin: any): boolean;
|
|
14
|
+
//# sourceMappingURL=compat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compat.d.ts","sourceRoot":"","sources":["../../src/plugin/compat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,gBAAgB,CAqD9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAmBnD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backward compatibility utilities for plugins
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Wrap legacy plugin to support new hooks
|
|
6
|
+
* Ensures old plugins work without modification
|
|
7
|
+
*/
|
|
8
|
+
export function wrapLegacyPlugin(plugin) {
|
|
9
|
+
// If plugin already has new hooks, return as-is
|
|
10
|
+
if (plugin.loadContent || plugin.allContentLoaded || plugin.postBuild) {
|
|
11
|
+
return plugin;
|
|
12
|
+
}
|
|
13
|
+
// Wrap old contentLoaded signature
|
|
14
|
+
const originalContentLoaded = plugin.contentLoaded;
|
|
15
|
+
if (originalContentLoaded) {
|
|
16
|
+
plugin.contentLoaded = function (ctx) {
|
|
17
|
+
// Old signature: contentLoaded(ctx: ContentContext)
|
|
18
|
+
// New signature: contentLoaded(ctx: { content, allContent, actions })
|
|
19
|
+
// Check if using old signature (has addPage, addPost but no allContent)
|
|
20
|
+
if (ctx.addPage && ctx.addPost && !ctx.allContent) {
|
|
21
|
+
// Old plugin - provide backward compatible context
|
|
22
|
+
return originalContentLoaded.call(this, ctx);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// New signature - call as-is
|
|
26
|
+
return originalContentLoaded.call(this, ctx);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Convert beforeBuild to allContentLoaded (for migration)
|
|
31
|
+
if (plugin.beforeBuild && !plugin.allContentLoaded) {
|
|
32
|
+
const originalBeforeBuild = plugin.beforeBuild;
|
|
33
|
+
plugin.allContentLoaded = function (ctx) {
|
|
34
|
+
// Map old beforeBuild context to new allContentLoaded context
|
|
35
|
+
const oldContext = {
|
|
36
|
+
content: ctx.allContent,
|
|
37
|
+
routes: ctx.routes,
|
|
38
|
+
config: ctx.config,
|
|
39
|
+
};
|
|
40
|
+
return originalBeforeBuild.call(this, oldContext);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Convert afterBuild to postBuild (for migration)
|
|
44
|
+
if (plugin.afterBuild && !plugin.postBuild) {
|
|
45
|
+
const originalAfterBuild = plugin.afterBuild;
|
|
46
|
+
plugin.postBuild = function (ctx) {
|
|
47
|
+
// Map old afterBuild context to new postBuild context
|
|
48
|
+
const oldContext = {
|
|
49
|
+
outDir: ctx.outDir,
|
|
50
|
+
routes: ctx.routes,
|
|
51
|
+
content: ctx.allContent,
|
|
52
|
+
};
|
|
53
|
+
return originalAfterBuild.call(this, oldContext);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return plugin;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if plugin is using legacy signature
|
|
60
|
+
*/
|
|
61
|
+
export function isLegacyPlugin(plugin) {
|
|
62
|
+
// Check if plugin has old contentLoaded signature but not new one
|
|
63
|
+
if (plugin.contentLoaded) {
|
|
64
|
+
// Can't determine without checking the function signature
|
|
65
|
+
// We'll detect at runtime
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
// Has beforeBuild but not allContentLoaded -> likely legacy
|
|
69
|
+
if (plugin.beforeBuild && !plugin.allContentLoaded) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
// Has afterBuild but not postBuild -> likely legacy
|
|
73
|
+
if (plugin.afterBuild && !plugin.postBuild) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compat.js","sourceRoot":"","sources":["../../src/plugin/compat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAW;IAC1C,gDAAgD;IAChD,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mCAAmC;IACnC,MAAM,qBAAqB,GAAG,MAAM,CAAC,aAAa,CAAC;IACnD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,CAAC,aAAa,GAAG,UAAS,GAAQ;YACtC,oDAAoD;YACpD,sEAAsE;YAEtE,wEAAwE;YACxE,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAClD,mDAAmD;gBACnD,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC;QAC/C,MAAM,CAAC,gBAAgB,GAAG,UAAS,GAAQ;YACzC,8DAA8D;YAC9D,MAAM,UAAU,GAAG;gBACjB,OAAO,EAAE,GAAG,CAAC,UAAU;gBACvB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC;YACF,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7C,MAAM,CAAC,SAAS,GAAG,UAAS,GAAQ;YAClC,sDAAsD;YACtD,MAAM,UAAU,GAAG;gBACjB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,GAAG,CAAC,UAAU;aACxB,CAAC;YACF,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACnD,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAA0B,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAW;IACxC,kEAAkE;IAClE,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,0DAA0D;QAC1D,0BAA0B;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4DAA4D;IAC5D,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oDAAoD;IACpD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin context implementations
|
|
3
|
+
* Provides isolated contexts for each plugin lifecycle stage
|
|
4
|
+
*/
|
|
5
|
+
import type { PluginContent, AllContent, ContentActions, RouteConfig } from './types.js';
|
|
6
|
+
import type { ContentFile } from '../content/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* AllContent implementation
|
|
9
|
+
* Aggregates content from all plugins
|
|
10
|
+
*/
|
|
11
|
+
export declare class AllContentImpl implements AllContent {
|
|
12
|
+
private contentMap;
|
|
13
|
+
private pageCache?;
|
|
14
|
+
private docCache?;
|
|
15
|
+
private postCache?;
|
|
16
|
+
addPluginContent(pluginName: string, content: PluginContent | null): void;
|
|
17
|
+
private invalidateCache;
|
|
18
|
+
getPages(): ContentFile[];
|
|
19
|
+
getDocs(): ContentFile[];
|
|
20
|
+
getPosts(): ContentFile[];
|
|
21
|
+
getContent(type: string): unknown[];
|
|
22
|
+
clear(): void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Content actions implementation
|
|
26
|
+
* Manages routes and data added by plugins
|
|
27
|
+
*/
|
|
28
|
+
export declare class ContentActionsImpl implements ContentActions {
|
|
29
|
+
private routes;
|
|
30
|
+
private data;
|
|
31
|
+
addRoute(route: RouteConfig): void;
|
|
32
|
+
addData(key: string, value: unknown): void;
|
|
33
|
+
getRoute(path: string): RouteConfig | undefined;
|
|
34
|
+
getAllRoutes(): RouteConfig[];
|
|
35
|
+
getData(): Map<string, unknown>;
|
|
36
|
+
clear(): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/plugin/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,SAAS,CAAC,CAAgB;IAElC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAOzE,OAAO,CAAC,eAAe;IAMvB,QAAQ,IAAI,WAAW,EAAE;IAazB,OAAO,IAAI,WAAW,EAAE;IAaxB,QAAQ,IAAI,WAAW,EAAE;IAazB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAUnC,KAAK,IAAI,IAAI;CAId;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,IAAI,CAA8B;IAE1C,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAKlC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/C,YAAY,IAAI,WAAW,EAAE;IAI7B,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAI/B,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,103 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/plugin/context.ts"],"names":[],"mappings":"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"}
|