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 @@
|
|
|
1
|
+
{"version":3,"file":"vite-markdown-plugin.js","sourceRoot":"","sources":["../../src/build/vite-markdown-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-markdown-plugin.test.d.ts","sourceRoot":"","sources":["../../src/build/vite-markdown-plugin.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { loadMarkdownModule, markdownContentPlugin, registerMarkdownContent } from './vite-markdown-plugin.js';
|
|
3
|
+
describe('loadMarkdownModule', () => {
|
|
4
|
+
it('uses the Marko Run dev server to load virtual modules', async () => {
|
|
5
|
+
const ssrLoadModule = vi.fn(async (id) => ({ default: `loaded:${id}` }));
|
|
6
|
+
const previous = globalThis.__marko_run_dev__;
|
|
7
|
+
globalThis.__marko_run_dev__ = {
|
|
8
|
+
devServers: new Set([{ ssrLoadModule }]),
|
|
9
|
+
};
|
|
10
|
+
try {
|
|
11
|
+
const mod = await loadMarkdownModule('virtual:markdown-content/pages/index');
|
|
12
|
+
expect(ssrLoadModule).toHaveBeenCalledWith('virtual:markdown-content/pages/index');
|
|
13
|
+
expect(mod.default).toBe('loaded:virtual:markdown-content/pages/index');
|
|
14
|
+
}
|
|
15
|
+
finally {
|
|
16
|
+
globalThis.__marko_run_dev__ = previous;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe('markdownContentPlugin', () => {
|
|
21
|
+
it('emits Marko source so kebab-case tags compile as components', () => {
|
|
22
|
+
const plugin = markdownContentPlugin();
|
|
23
|
+
plugin.configResolved?.({ root: '/tmp/site' });
|
|
24
|
+
const contentId = 'pages/marko-tags-test';
|
|
25
|
+
registerMarkdownContent(contentId, '<h2>Demo</h2>\n<alert-box type="warning">Hello</alert-box>');
|
|
26
|
+
const resolvedId = plugin.resolveId?.(`virtual:markdown-content/${contentId}`);
|
|
27
|
+
const source = plugin.load?.(resolvedId);
|
|
28
|
+
expect(source).toContain('<alert-box type="warning">Hello</alert-box>');
|
|
29
|
+
expect(source).not.toContain('$!{`');
|
|
30
|
+
});
|
|
31
|
+
it('escapes markdown text that looks like a Marko expression', () => {
|
|
32
|
+
const plugin = markdownContentPlugin();
|
|
33
|
+
plugin.configResolved?.({ root: '/tmp/site' });
|
|
34
|
+
const contentId = 'pages/interpolation-literal';
|
|
35
|
+
registerMarkdownContent(contentId, '<p>literal ${value}</p>');
|
|
36
|
+
const resolvedId = plugin.resolveId?.(`virtual:markdown-content/${contentId}`);
|
|
37
|
+
const source = plugin.load?.(resolvedId);
|
|
38
|
+
expect(source).toContain('literal ${value}');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=vite-markdown-plugin.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-markdown-plugin.test.js","sourceRoot":"","sources":["../../src/build/vite-markdown-plugin.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAE/G,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAI,UAA8C,CAAC,iBAAiB,CAAC;QAClF,UAA8C,CAAC,iBAAiB,GAAG;YAClE,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;SACzC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,sCAAsC,CAAC,CAAC;YAC7E,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,sCAAsC,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC1E,CAAC;gBAAS,CAAC;YACR,UAA8C,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,uBAAuB,CAAC;QAC1C,uBAAuB,CACrB,SAAS,EACT,4DAA4D,CAC7D,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,4BAA4B,SAAS,EAAE,CAAW,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAW,CAAC;QAEnD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,6BAA6B,CAAC;QAChD,uBAAuB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,4BAA4B,SAAS,EAAE,CAAW,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAW,CAAC;QAEnD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MarkoPress CLI
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { resolveAppRoot } from '../config/app-root.js';
|
|
7
|
+
import { startDevServer } from '../dev/index.js';
|
|
8
|
+
import { build } from '../build/index.js';
|
|
9
|
+
import { preview } from '../preview/index.js';
|
|
10
|
+
// Resolve the app root (e.g., website/.markopress)
|
|
11
|
+
const appRoot = resolveAppRoot();
|
|
12
|
+
const program = new Command();
|
|
13
|
+
program
|
|
14
|
+
.name('markopress')
|
|
15
|
+
.description('A general-purpose static site generator using Marko.js v6')
|
|
16
|
+
.version('0.1.0');
|
|
17
|
+
program
|
|
18
|
+
.command('dev')
|
|
19
|
+
.description('Start development server')
|
|
20
|
+
.option('-p, --port <port>', 'Port to run server on', '3000')
|
|
21
|
+
.option('--host <host>', 'Host to run server on', 'localhost')
|
|
22
|
+
.option('--open', 'Open browser automatically', false)
|
|
23
|
+
.option('--catch-all', 'Use catch-all dynamic routes')
|
|
24
|
+
.action(async (options) => {
|
|
25
|
+
await startDevServer({
|
|
26
|
+
port: parseInt(options.port),
|
|
27
|
+
host: options.host,
|
|
28
|
+
open: options.open,
|
|
29
|
+
useCatchAllRoutes: options.catchAll,
|
|
30
|
+
root: appRoot,
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
program
|
|
34
|
+
.command('build')
|
|
35
|
+
.description('Build for production')
|
|
36
|
+
.option('--debug', 'Debug mode', false)
|
|
37
|
+
.option('-o, --output <dir>', 'Output directory', 'dist')
|
|
38
|
+
.option('--catch-all', 'Use catch-all dynamic routes')
|
|
39
|
+
.action(async (options) => {
|
|
40
|
+
const result = await build({
|
|
41
|
+
debug: options.debug,
|
|
42
|
+
outDir: options.output,
|
|
43
|
+
useCatchAllRoutes: options.catchAll,
|
|
44
|
+
root: appRoot,
|
|
45
|
+
});
|
|
46
|
+
if (!result.success) {
|
|
47
|
+
console.error('\n❌ Build failed!');
|
|
48
|
+
result.errors.forEach((error) => console.error(` ${error}`));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
program
|
|
53
|
+
.command('preview')
|
|
54
|
+
.description('Preview production build')
|
|
55
|
+
.option('-p, --port <port>', 'Port to run server on', '4173')
|
|
56
|
+
.option('--host <host>', 'Host to run server on', 'localhost')
|
|
57
|
+
.action(async (options) => {
|
|
58
|
+
await preview({
|
|
59
|
+
port: parseInt(options.port),
|
|
60
|
+
host: options.host,
|
|
61
|
+
root: appRoot,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
program
|
|
65
|
+
.command('init [site-dir]')
|
|
66
|
+
.description('Create a new MarkoPress site')
|
|
67
|
+
.option('-t, --template <template>', 'Template to use', 'default')
|
|
68
|
+
.action(async (siteDir, options) => {
|
|
69
|
+
const dir = siteDir || '.';
|
|
70
|
+
console.log(`Initializing MarkoPress site in ${dir}...`);
|
|
71
|
+
console.log(`Template: ${options.template}`);
|
|
72
|
+
// TODO: Implement init
|
|
73
|
+
});
|
|
74
|
+
program.parse();
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ResolveAppRootOptions {
|
|
2
|
+
cwd?: string;
|
|
3
|
+
appDirName?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Resolve the app root directory.
|
|
7
|
+
* If appDirName exists as a directory under cwd, returns that path.
|
|
8
|
+
* Otherwise returns cwd.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveAppRoot(options?: ResolveAppRootOptions): string;
|
|
11
|
+
//# sourceMappingURL=app-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-root.d.ts","sourceRoot":"","sources":["../../src/config/app-root.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAgB1E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the app root directory.
|
|
5
|
+
* If appDirName exists as a directory under cwd, returns that path.
|
|
6
|
+
* Otherwise returns cwd.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveAppRoot(options = {}) {
|
|
9
|
+
const cwd = options.cwd ?? process.cwd();
|
|
10
|
+
const appDirName = options.appDirName ?? '.markopress';
|
|
11
|
+
const candidate = path.join(cwd, appDirName);
|
|
12
|
+
// Check if candidate exists and is a directory
|
|
13
|
+
try {
|
|
14
|
+
const stat = fs.statSync(candidate);
|
|
15
|
+
if (stat.isDirectory()) {
|
|
16
|
+
return candidate;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Doesn't exist or isn't accessible, fall through to returning cwd
|
|
21
|
+
}
|
|
22
|
+
return cwd;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=app-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../src/config/app-root.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAOzB;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,aAAa,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAE7C,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-root.test.d.ts","sourceRoot":"","sources":["../../src/config/app-root.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import { resolveAppRoot } from './app-root.js';
|
|
5
|
+
// Mock fs.statSync
|
|
6
|
+
const statSyncMock = vi.spyOn(fs, 'statSync');
|
|
7
|
+
describe('resolveAppRoot', () => {
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
vi.clearAllMocks();
|
|
10
|
+
});
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
statSyncMock.mockReset();
|
|
13
|
+
});
|
|
14
|
+
it('resolves .markopress when present', () => {
|
|
15
|
+
const cwd = path.join('/repo', 'website');
|
|
16
|
+
const markopressPath = path.join(cwd, '.markopress');
|
|
17
|
+
// Mock directory exists
|
|
18
|
+
statSyncMock.mockImplementation((filePath) => {
|
|
19
|
+
if (filePath === markopressPath) {
|
|
20
|
+
return { isDirectory: () => true };
|
|
21
|
+
}
|
|
22
|
+
throw new Error('ENOENT');
|
|
23
|
+
});
|
|
24
|
+
const appRoot = resolveAppRoot({ cwd, appDirName: '.markopress' });
|
|
25
|
+
expect(appRoot).toBe(markopressPath);
|
|
26
|
+
});
|
|
27
|
+
it('returns cwd when .markopress is not present', () => {
|
|
28
|
+
const cwd = path.join('/repo', 'website');
|
|
29
|
+
// Mock directory doesn't exist
|
|
30
|
+
statSyncMock.mockImplementation(() => {
|
|
31
|
+
throw new Error('ENOENT');
|
|
32
|
+
});
|
|
33
|
+
const appRoot = resolveAppRoot({ cwd, appDirName: '.notexist' });
|
|
34
|
+
expect(appRoot).toBe(cwd);
|
|
35
|
+
});
|
|
36
|
+
it('uses process.cwd() when cwd is not provided', () => {
|
|
37
|
+
// Mock directory doesn't exist
|
|
38
|
+
statSyncMock.mockImplementation(() => {
|
|
39
|
+
throw new Error('ENOENT');
|
|
40
|
+
});
|
|
41
|
+
const appRoot = resolveAppRoot();
|
|
42
|
+
expect(appRoot).toBe(process.cwd());
|
|
43
|
+
});
|
|
44
|
+
it('defaults to .markopress as appDirName', () => {
|
|
45
|
+
const cwd = path.join('/repo', 'website');
|
|
46
|
+
const markopressPath = path.join(cwd, '.markopress');
|
|
47
|
+
// Mock directory exists
|
|
48
|
+
statSyncMock.mockImplementation((filePath) => {
|
|
49
|
+
if (filePath === markopressPath) {
|
|
50
|
+
return { isDirectory: () => true };
|
|
51
|
+
}
|
|
52
|
+
throw new Error('ENOENT');
|
|
53
|
+
});
|
|
54
|
+
const appRoot = resolveAppRoot({ cwd });
|
|
55
|
+
expect(appRoot).toBe(markopressPath);
|
|
56
|
+
});
|
|
57
|
+
it('returns cwd when appDirName exists but is a file not directory', () => {
|
|
58
|
+
const cwd = path.join('/repo', 'website');
|
|
59
|
+
const markopressPath = path.join(cwd, '.markopress');
|
|
60
|
+
// Mock exists as a file, not directory
|
|
61
|
+
statSyncMock.mockImplementation((filePath) => {
|
|
62
|
+
if (filePath === markopressPath) {
|
|
63
|
+
return { isDirectory: () => false };
|
|
64
|
+
}
|
|
65
|
+
throw new Error('ENOENT');
|
|
66
|
+
});
|
|
67
|
+
const appRoot = resolveAppRoot({ cwd, appDirName: '.markopress' });
|
|
68
|
+
expect(appRoot).toBe(cwd);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=app-root.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-root.test.js","sourceRoot":"","sources":["../../src/config/app-root.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader for MarkoPress
|
|
3
|
+
*/
|
|
4
|
+
import type { UserConfig, ResolvedConfig, ConfigEnv } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Find and load the configuration file
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadConfigFromFile(root: string, env: ConfigEnv): Promise<{
|
|
9
|
+
file: string;
|
|
10
|
+
config: UserConfig;
|
|
11
|
+
} | null>;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the configuration with defaults
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveConfig(userConfig: UserConfig, root: string): ResolvedConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Load the configuration from a directory
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadConfig(root?: string, env?: ConfigEnv): Promise<ResolvedConfig>;
|
|
20
|
+
/**
|
|
21
|
+
* Define configuration helper with type safety
|
|
22
|
+
*/
|
|
23
|
+
export declare function defineConfig(config: UserConfig): UserConfig;
|
|
24
|
+
export declare function defineConfigWithCallback(config: (env: ConfigEnv) => UserConfig | Promise<UserConfig>): (env: ConfigEnv) => UserConfig | Promise<UserConfig>;
|
|
25
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,SAAS,EAEV,MAAM,YAAY,CAAC;AAmFpB;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAAC,CA6DtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,cAAc,CAmChB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,GAAE,MAAsB,EAC5B,GAAG,GAAE,SAAmD,GACvD,OAAO,CAAC,cAAc,CAAC,CASzB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAC3D,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAEtD"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader for MarkoPress
|
|
3
|
+
*/
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import fs from 'node:fs/promises';
|
|
6
|
+
import { pathToFileURL } from 'node:url';
|
|
7
|
+
import { ZodError } from 'zod';
|
|
8
|
+
import { validateConfigSafe } from './validation.js';
|
|
9
|
+
const DEFAULT_CONFIG = {
|
|
10
|
+
site: {
|
|
11
|
+
title: 'MarkoPress Site',
|
|
12
|
+
description: '',
|
|
13
|
+
base: '/',
|
|
14
|
+
lang: 'en-US',
|
|
15
|
+
head: [],
|
|
16
|
+
},
|
|
17
|
+
content: {
|
|
18
|
+
pages: '../content/pages',
|
|
19
|
+
// No default 'docs' - users should use generic module names
|
|
20
|
+
blog: '../content/blog',
|
|
21
|
+
},
|
|
22
|
+
theme: {
|
|
23
|
+
name: '@markopress/theme-default',
|
|
24
|
+
options: {},
|
|
25
|
+
},
|
|
26
|
+
markdown: {
|
|
27
|
+
lineNumbers: false, // Changed default to false to avoid Marko parser issues
|
|
28
|
+
theme: {
|
|
29
|
+
light: 'github-light',
|
|
30
|
+
dark: 'github-dark',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
build: {
|
|
34
|
+
useCatchAllRoutes: false,
|
|
35
|
+
outDir: 'dist',
|
|
36
|
+
assetsDir: 'assets',
|
|
37
|
+
},
|
|
38
|
+
plugins: [],
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Deep merge two objects
|
|
42
|
+
*/
|
|
43
|
+
function deepMerge(target, source) {
|
|
44
|
+
const result = { ...target };
|
|
45
|
+
for (const key in source) {
|
|
46
|
+
const sourceValue = source[key];
|
|
47
|
+
const targetValue = result[key];
|
|
48
|
+
if (sourceValue === undefined) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (isObject(targetValue) && isObject(sourceValue)) {
|
|
52
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
result[key] = sourceValue;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
function isObject(value) {
|
|
61
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validate configuration using Zod schema
|
|
65
|
+
* @returns Validated configuration or errors
|
|
66
|
+
*/
|
|
67
|
+
function validateConfig(config) {
|
|
68
|
+
const result = validateConfigSafe(config);
|
|
69
|
+
if (!result.success) {
|
|
70
|
+
return {
|
|
71
|
+
valid: false,
|
|
72
|
+
errors: result.errors.map((err) => `${err.path}: ${err.message}`),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
valid: true,
|
|
77
|
+
errors: [],
|
|
78
|
+
data: result.data, // Cast to UserConfig to handle Zod's passthrough index signature
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Find and load the configuration file
|
|
83
|
+
*/
|
|
84
|
+
export async function loadConfigFromFile(root, env) {
|
|
85
|
+
// Check for config files at the root level
|
|
86
|
+
// When root is already the app root (e.g., website/.markopress), look for config.*
|
|
87
|
+
// When root is the project root (e.g., website/), look for .markopress/config.*
|
|
88
|
+
const configFiles = [
|
|
89
|
+
'config.ts',
|
|
90
|
+
'config.js',
|
|
91
|
+
'config.mjs',
|
|
92
|
+
'.markopress/config.ts',
|
|
93
|
+
'.markopress/config.js',
|
|
94
|
+
'.markopress/config.mjs',
|
|
95
|
+
];
|
|
96
|
+
for (const file of configFiles) {
|
|
97
|
+
const filePath = path.resolve(root, file);
|
|
98
|
+
try {
|
|
99
|
+
await fs.access(filePath);
|
|
100
|
+
// Use pathToFileURL for better cross-platform support
|
|
101
|
+
const fileUrl = pathToFileURL(filePath).href;
|
|
102
|
+
// Add timestamp to bypass module cache during development
|
|
103
|
+
const importUrl = `${fileUrl}?t=${Date.now()}`;
|
|
104
|
+
const configModule = await import(importUrl);
|
|
105
|
+
const configExport = configModule.default;
|
|
106
|
+
if (!configExport) {
|
|
107
|
+
throw new Error(`Config file ${file} must have a default export`);
|
|
108
|
+
}
|
|
109
|
+
let config;
|
|
110
|
+
if (typeof configExport === 'function') {
|
|
111
|
+
config = await configExport(env);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
config = configExport;
|
|
115
|
+
}
|
|
116
|
+
// Validate the loaded config
|
|
117
|
+
const validation = validateConfig(config);
|
|
118
|
+
if (!validation.valid) {
|
|
119
|
+
throw new Error(`Invalid configuration in ${file}:\n${validation.errors.map((e) => ` - ${e}`).join('\n')}`);
|
|
120
|
+
}
|
|
121
|
+
console.log(`✓ Loaded config from ${file}`);
|
|
122
|
+
return { file: filePath, config: validation.data };
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
// Only throw if file exists but failed to load/parse
|
|
126
|
+
if (error && typeof error === 'object' && 'code' in error && error.code !== 'ENOENT') {
|
|
127
|
+
throw new Error(`Failed to load config from ${file}: ${error instanceof Error ? error.message : String(error)}`);
|
|
128
|
+
}
|
|
129
|
+
// File doesn't exist, continue to next option
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Resolve the configuration with defaults
|
|
136
|
+
*/
|
|
137
|
+
export function resolveConfig(userConfig, root) {
|
|
138
|
+
// For content and build, use user config directly if provided, otherwise use defaults
|
|
139
|
+
// This allows arbitrary module names (not just pages/docs/blog) and custom build options
|
|
140
|
+
const content = userConfig.content ? { ...userConfig.content } : DEFAULT_CONFIG.content;
|
|
141
|
+
const build = userConfig.build ? { ...userConfig.build } : DEFAULT_CONFIG.build;
|
|
142
|
+
// Use deep merge for other nested configurations
|
|
143
|
+
const site = deepMerge(DEFAULT_CONFIG.site, userConfig.site || {});
|
|
144
|
+
const theme = deepMerge(DEFAULT_CONFIG.theme, userConfig.theme || {});
|
|
145
|
+
const markdown = deepMerge(DEFAULT_CONFIG.markdown, userConfig.markdown || {});
|
|
146
|
+
// Plugins need special handling - don't merge, just replace
|
|
147
|
+
const plugins = userConfig.plugins || DEFAULT_CONFIG.plugins;
|
|
148
|
+
// Add theme CSS based on style option
|
|
149
|
+
const style = theme.options?.style || 'default';
|
|
150
|
+
const themeCssPath = `/_markopress/theme/theme-${style}.css`;
|
|
151
|
+
// Inject theme CSS link into head
|
|
152
|
+
const themeCssHeadTag = ['link', {
|
|
153
|
+
rel: 'stylesheet',
|
|
154
|
+
href: themeCssPath,
|
|
155
|
+
}];
|
|
156
|
+
site.head = [...(site.head || []), themeCssHeadTag];
|
|
157
|
+
return {
|
|
158
|
+
root,
|
|
159
|
+
site,
|
|
160
|
+
content,
|
|
161
|
+
theme,
|
|
162
|
+
markdown,
|
|
163
|
+
build,
|
|
164
|
+
plugins,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Load the configuration from a directory
|
|
169
|
+
*/
|
|
170
|
+
export async function loadConfig(root = process.cwd(), env = { mode: 'development', command: 'dev' }) {
|
|
171
|
+
const loaded = await loadConfigFromFile(root, env);
|
|
172
|
+
if (!loaded) {
|
|
173
|
+
// Return default config if no config file found
|
|
174
|
+
return resolveConfig({ site: DEFAULT_CONFIG.site }, root);
|
|
175
|
+
}
|
|
176
|
+
return resolveConfig(loaded.config, root);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Define configuration helper with type safety
|
|
180
|
+
*/
|
|
181
|
+
export function defineConfig(config) {
|
|
182
|
+
return config;
|
|
183
|
+
}
|
|
184
|
+
export function defineConfigWithCallback(config) {
|
|
185
|
+
return config;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../src/config/loader.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { resolveConfig } from './loader.js';
|
|
4
|
+
describe('resolveConfig', () => {
|
|
5
|
+
it('defaults content paths relative to app root', () => {
|
|
6
|
+
const appRoot = '/repo/website/.markopress';
|
|
7
|
+
const resolved = resolveConfig({ site: { title: 'Test' } }, appRoot);
|
|
8
|
+
expect(resolved.content.pages).toBe('../content/pages');
|
|
9
|
+
});
|
|
10
|
+
it('preserves user config when content paths are explicitly set', () => {
|
|
11
|
+
const appRoot = '/repo/website/.markopress';
|
|
12
|
+
const resolved = resolveConfig({
|
|
13
|
+
site: { title: 'Test' },
|
|
14
|
+
content: { pages: 'custom/pages' }
|
|
15
|
+
}, appRoot);
|
|
16
|
+
expect(resolved.content.pages).toBe('custom/pages');
|
|
17
|
+
});
|
|
18
|
+
it('uses default blog path relative to app root', () => {
|
|
19
|
+
const appRoot = '/repo/website/.markopress';
|
|
20
|
+
const resolved = resolveConfig({ site: { title: 'Test' } }, appRoot);
|
|
21
|
+
expect(resolved.content.blog).toBe('../content/blog');
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=loader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/config/loader.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC7B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YACvB,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;SACnC,EAAE,OAAO,CAAC,CAAC;QACZ,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|