livemark 0.0.0-dev
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/LICENSE.md +9 -0
- package/README.md +3 -0
- package/build/actions/config/define.d.ts +6 -0
- package/build/actions/config/define.js +8 -0
- package/build/actions/config/define.unit.d.ts +1 -0
- package/build/actions/config/define.unit.js +34 -0
- package/build/actions/config/load.d.ts +5 -0
- package/build/actions/config/load.js +22 -0
- package/build/actions/config/load.unit.d.ts +1 -0
- package/build/actions/config/load.unit.js +23 -0
- package/build/commands/build.d.ts +5 -0
- package/build/commands/build.js +13 -0
- package/build/commands/preview.d.ts +5 -0
- package/build/commands/preview.js +18 -0
- package/build/commands/start.d.ts +5 -0
- package/build/commands/start.js +19 -0
- package/build/docs/markdown/includes/example.d.ts +9 -0
- package/build/docs/markdown/includes/example.js +5 -0
- package/build/entrypoints/main.d.ts +2 -0
- package/build/entrypoints/main.js +12 -0
- package/build/helpers/program.d.ts +2 -0
- package/build/helpers/program.js +5 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +2 -0
- package/build/livemark.config.d.ts +9 -0
- package/build/livemark.config.js +5 -0
- package/build/models/config.d.ts +33 -0
- package/build/models/config.js +14 -0
- package/build/program.d.ts +2 -0
- package/build/program.js +14 -0
- package/build/vite.config.d.ts +2 -0
- package/build/vite.config.js +48 -0
- package/build/website/client.tsx +10 -0
- package/build/website/components/Abbr.tsx +17 -0
- package/build/website/components/AnsiCode.tsx +15 -0
- package/build/website/components/Banner.tsx +32 -0
- package/build/website/components/Breadcrumbs.tsx +19 -0
- package/build/website/components/Callout.tsx +72 -0
- package/build/website/components/Cards.tsx +66 -0
- package/build/website/components/CodeBlock.tsx +118 -0
- package/build/website/components/CodeTabs.tsx +83 -0
- package/build/website/components/Columns.tsx +17 -0
- package/build/website/components/Content.tsx +7 -0
- package/build/website/components/ContentTab.tsx +7 -0
- package/build/website/components/ContentTabs.tsx +82 -0
- package/build/website/components/DefaultCatchBoundary.tsx +54 -0
- package/build/website/components/DefinitionList.tsx +21 -0
- package/build/website/components/Details.tsx +30 -0
- package/build/website/components/FileTree.tsx +52 -0
- package/build/website/components/Footer.tsx +9 -0
- package/build/website/components/FootnoteRef.tsx +52 -0
- package/build/website/components/Heading.tsx +20 -0
- package/build/website/components/InlineBadge.tsx +9 -0
- package/build/website/components/InlineIcon.tsx +21 -0
- package/build/website/components/InlineToc.tsx +31 -0
- package/build/website/components/Layout.tsx +220 -0
- package/build/website/components/LinkButton.tsx +31 -0
- package/build/website/components/Mermaid.tsx +37 -0
- package/build/website/components/NotFound.tsx +27 -0
- package/build/website/components/PackageTabs.tsx +74 -0
- package/build/website/components/PageToolbar.tsx +65 -0
- package/build/website/components/PrevNext.tsx +52 -0
- package/build/website/components/SearchDialog.tsx +245 -0
- package/build/website/components/Section.tsx +24 -0
- package/build/website/components/SectionHeader.tsx +35 -0
- package/build/website/components/SiteTitle.tsx +16 -0
- package/build/website/components/SortableTable.tsx +81 -0
- package/build/website/components/SoundCloud.tsx +16 -0
- package/build/website/components/Theme.tsx +40 -0
- package/build/website/components/Toc.tsx +99 -0
- package/build/website/components/YouTube.tsx +16 -0
- package/build/website/components/ZoomImage.tsx +30 -0
- package/build/website/content-collections.ts +181 -0
- package/build/website/elements/accordion.tsx +78 -0
- package/build/website/elements/alert-dialog.tsx +185 -0
- package/build/website/elements/alert.tsx +74 -0
- package/build/website/elements/aspect-ratio.tsx +22 -0
- package/build/website/elements/avatar.tsx +107 -0
- package/build/website/elements/badge.tsx +51 -0
- package/build/website/elements/breadcrumb.tsx +120 -0
- package/build/website/elements/button-group.tsx +87 -0
- package/build/website/elements/button.tsx +57 -0
- package/build/website/elements/calendar.tsx +229 -0
- package/build/website/elements/card.tsx +102 -0
- package/build/website/elements/carousel.tsx +240 -0
- package/build/website/elements/chart.tsx +372 -0
- package/build/website/elements/checkbox.tsx +26 -0
- package/build/website/elements/collapsible.tsx +19 -0
- package/build/website/elements/command.tsx +210 -0
- package/build/website/elements/context-menu.tsx +270 -0
- package/build/website/elements/dialog.tsx +152 -0
- package/build/website/elements/direction.tsx +4 -0
- package/build/website/elements/drawer.tsx +127 -0
- package/build/website/elements/dropdown-menu.tsx +260 -0
- package/build/website/elements/empty.tsx +104 -0
- package/build/website/elements/field.tsx +235 -0
- package/build/website/elements/hover-card.tsx +49 -0
- package/build/website/elements/input-group.tsx +171 -0
- package/build/website/elements/input-otp.tsx +84 -0
- package/build/website/elements/input.tsx +18 -0
- package/build/website/elements/item.tsx +199 -0
- package/build/website/elements/kbd.tsx +26 -0
- package/build/website/elements/label.tsx +17 -0
- package/build/website/elements/menubar.tsx +282 -0
- package/build/website/elements/native-select.tsx +56 -0
- package/build/website/elements/navigation-menu.tsx +171 -0
- package/build/website/elements/pagination.tsx +133 -0
- package/build/website/elements/popover.tsx +88 -0
- package/build/website/elements/progress.tsx +81 -0
- package/build/website/elements/radio-group.tsx +36 -0
- package/build/website/elements/resizable.tsx +48 -0
- package/build/website/elements/scroll-area.tsx +51 -0
- package/build/website/elements/select.tsx +200 -0
- package/build/website/elements/separator.tsx +22 -0
- package/build/website/elements/sheet.tsx +130 -0
- package/build/website/elements/sidebar.tsx +717 -0
- package/build/website/elements/skeleton.tsx +13 -0
- package/build/website/elements/slider.tsx +57 -0
- package/build/website/elements/sonner.tsx +40 -0
- package/build/website/elements/spinner.tsx +16 -0
- package/build/website/elements/switch.tsx +30 -0
- package/build/website/elements/table.tsx +112 -0
- package/build/website/elements/tabs.tsx +79 -0
- package/build/website/elements/textarea.tsx +16 -0
- package/build/website/elements/toggle-group.tsx +87 -0
- package/build/website/elements/toggle.tsx +43 -0
- package/build/website/elements/tooltip.tsx +67 -0
- package/build/website/env.d.ts +10 -0
- package/build/website/globals.d.ts +8 -0
- package/build/website/helpers/article-icon.ts +59 -0
- package/build/website/helpers/articles.ts +24 -0
- package/build/website/helpers/resolve-includes.ts +131 -0
- package/build/website/helpers/resolve-includes.unit.ts +126 -0
- package/build/website/helpers/search-text.ts +15 -0
- package/build/website/helpers/style.ts +6 -0
- package/build/website/helpers/theme.ts +27 -0
- package/build/website/helpers/toc-context.ts +10 -0
- package/build/website/helpers/toc.ts +51 -0
- package/build/website/helpers/toc.unit.ts +74 -0
- package/build/website/hooks/in-view.ts +30 -0
- package/build/website/hooks/media.ts +19 -0
- package/build/website/models/article.ts +40 -0
- package/build/website/plugins/rehype-inline-code.ts +107 -0
- package/build/website/plugins/remark-abbr.ts +46 -0
- package/build/website/plugins/remark-abbr.unit.ts +99 -0
- package/build/website/plugins/remark-ansi.ts +247 -0
- package/build/website/plugins/remark-ansi.unit.ts +197 -0
- package/build/website/plugins/remark-badge.ts +50 -0
- package/build/website/plugins/remark-badge.unit.ts +96 -0
- package/build/website/plugins/remark-button.ts +60 -0
- package/build/website/plugins/remark-button.unit.ts +147 -0
- package/build/website/plugins/remark-callout.ts +57 -0
- package/build/website/plugins/remark-card.ts +80 -0
- package/build/website/plugins/remark-code-tabs.ts +87 -0
- package/build/website/plugins/remark-columns.ts +66 -0
- package/build/website/plugins/remark-custom-heading-id.ts +70 -0
- package/build/website/plugins/remark-custom-heading-id.unit.ts +131 -0
- package/build/website/plugins/remark-deflist.ts +36 -0
- package/build/website/plugins/remark-details.ts +49 -0
- package/build/website/plugins/remark-filetree.ts +89 -0
- package/build/website/plugins/remark-filetree.unit.ts +137 -0
- package/build/website/plugins/remark-github-callout.ts +71 -0
- package/build/website/plugins/remark-icon.ts +42 -0
- package/build/website/plugins/remark-image.ts +25 -0
- package/build/website/plugins/remark-media.ts +62 -0
- package/build/website/plugins/remark-media.unit.ts +74 -0
- package/build/website/plugins/remark-mermaid.ts +23 -0
- package/build/website/plugins/remark-npm.ts +52 -0
- package/build/website/plugins/remark-steps.ts +36 -0
- package/build/website/plugins/remark-steps.unit.ts +97 -0
- package/build/website/plugins/remark-tab.ts +100 -0
- package/build/website/plugins/remark-tab.unit.ts +181 -0
- package/build/website/plugins/remark-toc.ts +39 -0
- package/build/website/plugins/remark-toc.unit.ts +82 -0
- package/build/website/plugins/shiki-icon.ts +82 -0
- package/build/website/plugins/shiki-line-highlight.ts +174 -0
- package/build/website/public/logo.svg +72 -0
- package/build/website/routeTree.gen.ts +86 -0
- package/build/website/router.tsx +34 -0
- package/build/website/routes/$.tsx +149 -0
- package/build/website/routes/__root.tsx +84 -0
- package/build/website/routes/index.tsx +13 -0
- package/build/website/server.ts +7 -0
- package/build/website/styles/general.css +347 -0
- package/build/website/vite.config.ts +36 -0
- package/entrypoints/main.ts +12 -0
- package/package.json +120 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright © 2025 Evgeny Karev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { UserConfig } from "../../models/config.js";
|
|
2
|
+
/**
|
|
3
|
+
* Validate and fill defaults for a partial config object.
|
|
4
|
+
*/
|
|
5
|
+
export function defineConfig(input) {
|
|
6
|
+
return UserConfig.parse(input);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWN0aW9ucy9jb25maWcvZGVmaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUVuRDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLEtBQWlDO0lBRWpDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBVc2VyQ29uZmlnIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcudHNcIlxuXG4vKipcbiAqIFZhbGlkYXRlIGFuZCBmaWxsIGRlZmF1bHRzIGZvciBhIHBhcnRpYWwgY29uZmlnIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhcbiAgaW5wdXQ6IHouaW5wdXQ8dHlwZW9mIFVzZXJDb25maWc+LFxuKTogei5vdXRwdXQ8dHlwZW9mIFVzZXJDb25maWc+IHtcbiAgcmV0dXJuIFVzZXJDb25maWcucGFyc2UoaW5wdXQpXG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
2
|
+
import { defineConfig } from "./define.js";
|
|
3
|
+
describe("defineConfig", () => {
|
|
4
|
+
it("should accept include as a string", () => {
|
|
5
|
+
const config = defineConfig({ articles: { include: "articles/**/*.mdx" } });
|
|
6
|
+
expect(config.articles.include).toBe("articles/**/*.mdx");
|
|
7
|
+
});
|
|
8
|
+
it("should accept include as an array", () => {
|
|
9
|
+
const config = defineConfig({
|
|
10
|
+
articles: { include: ["articles/**/*.mdx", "guides/**/*.mdx"] },
|
|
11
|
+
});
|
|
12
|
+
expect(config.articles.include).toEqual([
|
|
13
|
+
"articles/**/*.mdx",
|
|
14
|
+
"guides/**/*.mdx",
|
|
15
|
+
]);
|
|
16
|
+
});
|
|
17
|
+
it("should accept optional exclude", () => {
|
|
18
|
+
const config = defineConfig({
|
|
19
|
+
articles: { include: "**/*.mdx", exclude: "drafts/**" },
|
|
20
|
+
});
|
|
21
|
+
expect(config.articles.exclude).toBe("drafts/**");
|
|
22
|
+
});
|
|
23
|
+
it("should allow omitting exclude", () => {
|
|
24
|
+
const config = defineConfig({ articles: { include: "**/*.mdx" } });
|
|
25
|
+
expect(config.articles.exclude).toBeUndefined();
|
|
26
|
+
});
|
|
27
|
+
it("should reject missing articles", () => {
|
|
28
|
+
expect(() => defineConfig({})).toThrow();
|
|
29
|
+
});
|
|
30
|
+
it("should reject missing include", () => {
|
|
31
|
+
expect(() => defineConfig({ articles: {} })).toThrow();
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLnVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hY3Rpb25zL2NvbmZpZy9kZWZpbmUudW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzNFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQzNELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFDMUIsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtTQUNoRSxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDdEMsbUJBQW1CO1lBQ25CLGlCQUFpQjtTQUNsQixDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7UUFDeEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBQzFCLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRTtTQUN4RCxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDbkQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDakQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNqRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDdkMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDL0QsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGUtcGx1cy90ZXN0XCJcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCIuL2RlZmluZS50c1wiXG5cbmRlc2NyaWJlKFwiZGVmaW5lQ29uZmlnXCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgYWNjZXB0IGluY2x1ZGUgYXMgYSBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGRlZmluZUNvbmZpZyh7IGFydGljbGVzOiB7IGluY2x1ZGU6IFwiYXJ0aWNsZXMvKiovKi5tZHhcIiB9IH0pXG4gICAgZXhwZWN0KGNvbmZpZy5hcnRpY2xlcy5pbmNsdWRlKS50b0JlKFwiYXJ0aWNsZXMvKiovKi5tZHhcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBhY2NlcHQgaW5jbHVkZSBhcyBhbiBhcnJheVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gZGVmaW5lQ29uZmlnKHtcbiAgICAgIGFydGljbGVzOiB7IGluY2x1ZGU6IFtcImFydGljbGVzLyoqLyoubWR4XCIsIFwiZ3VpZGVzLyoqLyoubWR4XCJdIH0sXG4gICAgfSlcbiAgICBleHBlY3QoY29uZmlnLmFydGljbGVzLmluY2x1ZGUpLnRvRXF1YWwoW1xuICAgICAgXCJhcnRpY2xlcy8qKi8qLm1keFwiLFxuICAgICAgXCJndWlkZXMvKiovKi5tZHhcIixcbiAgICBdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGFjY2VwdCBvcHRpb25hbCBleGNsdWRlXCIsICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBkZWZpbmVDb25maWcoe1xuICAgICAgYXJ0aWNsZXM6IHsgaW5jbHVkZTogXCIqKi8qLm1keFwiLCBleGNsdWRlOiBcImRyYWZ0cy8qKlwiIH0sXG4gICAgfSlcbiAgICBleHBlY3QoY29uZmlnLmFydGljbGVzLmV4Y2x1ZGUpLnRvQmUoXCJkcmFmdHMvKipcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBhbGxvdyBvbWl0dGluZyBleGNsdWRlXCIsICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBkZWZpbmVDb25maWcoeyBhcnRpY2xlczogeyBpbmNsdWRlOiBcIioqLyoubWR4XCIgfSB9KVxuICAgIGV4cGVjdChjb25maWcuYXJ0aWNsZXMuZXhjbHVkZSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmVqZWN0IG1pc3NpbmcgYXJ0aWNsZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBkZWZpbmVDb25maWcoe30gYXMgYW55KSkudG9UaHJvdygpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmVqZWN0IG1pc3NpbmcgaW5jbHVkZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IGRlZmluZUNvbmZpZyh7IGFydGljbGVzOiB7fSB9IGFzIGFueSkpLnRvVGhyb3coKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import { dirname, resolve } from "node:path";
|
|
10
|
+
import { defineConfig } from "./define.js";
|
|
11
|
+
/**
|
|
12
|
+
* Load and validate a config file, checking --config/-c CLI arg, then cwd.
|
|
13
|
+
*/
|
|
14
|
+
export async function loadConfig(path) {
|
|
15
|
+
const configIndex = process.argv.findIndex(a => a === "-c" || a === "--config");
|
|
16
|
+
const cliPath = configIndex !== -1 ? process.argv[configIndex + 1] : undefined;
|
|
17
|
+
const resolved = resolve(path ?? cliPath ?? "livemark.config.ts");
|
|
18
|
+
const module = await import(__rewriteRelativeImportExtension(resolved));
|
|
19
|
+
const input = defineConfig(module.default);
|
|
20
|
+
return { ...input, root: dirname(resolved) };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FjdGlvbnMvY29uZmlnL2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUk1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTFDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQUMsSUFBYTtJQUM1QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxVQUFVLENBQ3BDLENBQUE7SUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDOUUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksb0JBQW9CLENBQUMsQ0FBQTtJQUNqRSxNQUFNLE1BQU0sR0FBNEIsTUFBTSxNQUFNLGtDQUFDLFFBQVEsRUFBQyxDQUFBO0lBQzlELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBcUMsQ0FBQyxDQUFBO0lBQ3hFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUE7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgeyBVc2VyQ29uZmlnIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcudHNcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcIi4vZGVmaW5lLnRzXCJcblxuLyoqXG4gKiBMb2FkIGFuZCB2YWxpZGF0ZSBhIGNvbmZpZyBmaWxlLCBjaGVja2luZyAtLWNvbmZpZy8tYyBDTEkgYXJnLCB0aGVuIGN3ZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb25maWcocGF0aD86IHN0cmluZyk6IFByb21pc2U8Q29uZmlnPiB7XG4gIGNvbnN0IGNvbmZpZ0luZGV4ID0gcHJvY2Vzcy5hcmd2LmZpbmRJbmRleChcbiAgICBhID0+IGEgPT09IFwiLWNcIiB8fCBhID09PSBcIi0tY29uZmlnXCIsXG4gIClcbiAgY29uc3QgY2xpUGF0aCA9IGNvbmZpZ0luZGV4ICE9PSAtMSA/IHByb2Nlc3MuYXJndltjb25maWdJbmRleCArIDFdIDogdW5kZWZpbmVkXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShwYXRoID8/IGNsaVBhdGggPz8gXCJsaXZlbWFyay5jb25maWcudHNcIilcbiAgY29uc3QgbW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGF3YWl0IGltcG9ydChyZXNvbHZlZClcbiAgY29uc3QgaW5wdXQgPSBkZWZpbmVDb25maWcobW9kdWxlLmRlZmF1bHQgYXMgei5pbnB1dDx0eXBlb2YgVXNlckNvbmZpZz4pXG4gIHJldHVybiB7IC4uLmlucHV0LCByb290OiBkaXJuYW1lKHJlc29sdmVkKSB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { temporaryDirectoryTask } from "tempy";
|
|
4
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
5
|
+
import { loadConfig } from "./load.js";
|
|
6
|
+
describe("loadConfig", () => {
|
|
7
|
+
it("should throw when no config file exists", async () => {
|
|
8
|
+
await expect(loadConfig("/nonexistent/config.ts")).rejects.toThrow();
|
|
9
|
+
});
|
|
10
|
+
it("should load config from explicit path", () => temporaryDirectoryTask(async (tmpDir) => {
|
|
11
|
+
const configPath = join(tmpDir, "livemark.config.ts");
|
|
12
|
+
fs.writeFileSync(configPath, 'export default { articles: { include: "articles/**/*.mdx" } }\n');
|
|
13
|
+
const config = await loadConfig(configPath);
|
|
14
|
+
expect(config.articles.include).toBe("articles/**/*.mdx");
|
|
15
|
+
expect(config.root).toBe(tmpDir);
|
|
16
|
+
}));
|
|
17
|
+
it("should validate loaded config", () => temporaryDirectoryTask(async (tmpDir) => {
|
|
18
|
+
const configPath = join(tmpDir, "livemark.config.ts");
|
|
19
|
+
fs.writeFileSync(configPath, "export default {}\n");
|
|
20
|
+
await expect(loadConfig(configPath)).rejects.toThrow();
|
|
21
|
+
}));
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC51bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWN0aW9ucy9jb25maWcvbG9hZC51bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXRDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN0RSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUUsQ0FDL0Msc0JBQXNCLENBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtRQUNyRCxFQUFFLENBQUMsYUFBYSxDQUNkLFVBQVUsRUFDVixpRUFBaUUsQ0FDbEUsQ0FBQTtRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFTCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFLENBQ3ZDLHNCQUFzQixDQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsRUFBRTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUE7UUFDckQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FBQTtRQUNuRCxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDeEQsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNQLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IHRlbXBvcmFyeURpcmVjdG9yeVRhc2sgfSBmcm9tIFwidGVtcHlcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZS1wbHVzL3Rlc3RcIlxuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gXCIuL2xvYWQudHNcIlxuXG5kZXNjcmliZShcImxvYWRDb25maWdcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCB0aHJvdyB3aGVuIG5vIGNvbmZpZyBmaWxlIGV4aXN0c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KGxvYWRDb25maWcoXCIvbm9uZXhpc3RlbnQvY29uZmlnLnRzXCIpKS5yZWplY3RzLnRvVGhyb3coKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgY29uZmlnIGZyb20gZXhwbGljaXQgcGF0aFwiLCAoKSA9PlxuICAgIHRlbXBvcmFyeURpcmVjdG9yeVRhc2soYXN5bmMgdG1wRGlyID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKHRtcERpciwgXCJsaXZlbWFyay5jb25maWcudHNcIilcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgIGNvbmZpZ1BhdGgsXG4gICAgICAgICdleHBvcnQgZGVmYXVsdCB7IGFydGljbGVzOiB7IGluY2x1ZGU6IFwiYXJ0aWNsZXMvKiovKi5tZHhcIiB9IH1cXG4nLFxuICAgICAgKVxuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyhjb25maWdQYXRoKVxuICAgICAgZXhwZWN0KGNvbmZpZy5hcnRpY2xlcy5pbmNsdWRlKS50b0JlKFwiYXJ0aWNsZXMvKiovKi5tZHhcIilcbiAgICAgIGV4cGVjdChjb25maWcucm9vdCkudG9CZSh0bXBEaXIpXG4gICAgfSkpXG5cbiAgaXQoXCJzaG91bGQgdmFsaWRhdGUgbG9hZGVkIGNvbmZpZ1wiLCAoKSA9PlxuICAgIHRlbXBvcmFyeURpcmVjdG9yeVRhc2soYXN5bmMgdG1wRGlyID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKHRtcERpciwgXCJsaXZlbWFyay5jb25maWcudHNcIilcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgXCJleHBvcnQgZGVmYXVsdCB7fVxcblwiKVxuICAgICAgYXdhaXQgZXhwZWN0KGxvYWRDb25maWcoY29uZmlnUGF0aCkpLnJlamVjdHMudG9UaHJvdygpXG4gICAgfSkpXG59KVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { build as viteBuild } from "vite";
|
|
4
|
+
const configFile = join(import.meta.dirname, "..", "website", "vite.config.ts");
|
|
5
|
+
/**
|
|
6
|
+
* Build the site for production.
|
|
7
|
+
*/
|
|
8
|
+
export const build = new Command("build")
|
|
9
|
+
.description("Build the site for production")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
await viteBuild({ configFile });
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb21tYW5kcy9idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUE7QUFFL0U7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ3RDLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQztLQUM1QyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDakIsTUFBTSxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0FBQ2pDLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuaW1wb3J0IHsgYnVpbGQgYXMgdml0ZUJ1aWxkIH0gZnJvbSBcInZpdGVcIlxuXG5jb25zdCBjb25maWdGaWxlID0gam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwid2Vic2l0ZVwiLCBcInZpdGUuY29uZmlnLnRzXCIpXG5cbi8qKlxuICogQnVpbGQgdGhlIHNpdGUgZm9yIHByb2R1Y3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZCA9IG5ldyBDb21tYW5kKFwiYnVpbGRcIilcbiAgLmRlc2NyaXB0aW9uKFwiQnVpbGQgdGhlIHNpdGUgZm9yIHByb2R1Y3Rpb25cIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdml0ZUJ1aWxkKHsgY29uZmlnRmlsZSB9KVxuICB9KVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { preview as vitePreview } from "vite";
|
|
4
|
+
const configFile = join(import.meta.dirname, "..", "website", "vite.config.ts");
|
|
5
|
+
/**
|
|
6
|
+
* Preview the production build locally.
|
|
7
|
+
*/
|
|
8
|
+
export const preview = new Command("preview")
|
|
9
|
+
.description("Preview the production build locally")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
const server = await vitePreview({
|
|
12
|
+
configFile,
|
|
13
|
+
preview: { port: 8000, host: true },
|
|
14
|
+
});
|
|
15
|
+
server.printUrls();
|
|
16
|
+
server.bindCLIShortcuts({ print: true });
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbW1hbmRzL3ByZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRTdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0FBRS9FOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQztLQUMxQyxXQUFXLENBQUMsc0NBQXNDLENBQUM7S0FDbkQsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDO1FBQy9CLFVBQVU7UUFDVixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7S0FDcEMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ2xCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQzFDLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuaW1wb3J0IHsgcHJldmlldyBhcyB2aXRlUHJldmlldyB9IGZyb20gXCJ2aXRlXCJcblxuY29uc3QgY29uZmlnRmlsZSA9IGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIndlYnNpdGVcIiwgXCJ2aXRlLmNvbmZpZy50c1wiKVxuXG4vKipcbiAqIFByZXZpZXcgdGhlIHByb2R1Y3Rpb24gYnVpbGQgbG9jYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXZpZXcgPSBuZXcgQ29tbWFuZChcInByZXZpZXdcIilcbiAgLmRlc2NyaXB0aW9uKFwiUHJldmlldyB0aGUgcHJvZHVjdGlvbiBidWlsZCBsb2NhbGx5XCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IHZpdGVQcmV2aWV3KHtcbiAgICAgIGNvbmZpZ0ZpbGUsXG4gICAgICBwcmV2aWV3OiB7IHBvcnQ6IDgwMDAsIGhvc3Q6IHRydWUgfSxcbiAgICB9KVxuICAgIHNlcnZlci5wcmludFVybHMoKVxuICAgIHNlcnZlci5iaW5kQ0xJU2hvcnRjdXRzKHsgcHJpbnQ6IHRydWUgfSlcbiAgfSlcbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { createServer } from "vite";
|
|
4
|
+
const configFile = join(import.meta.dirname, "..", "website", "vite.config.ts");
|
|
5
|
+
/**
|
|
6
|
+
* Start a development server.
|
|
7
|
+
*/
|
|
8
|
+
export const start = new Command("start")
|
|
9
|
+
.description("Start a live server")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
const server = await createServer({
|
|
12
|
+
configFile,
|
|
13
|
+
server: { port: 8000, host: true },
|
|
14
|
+
});
|
|
15
|
+
await server.listen();
|
|
16
|
+
server.printUrls();
|
|
17
|
+
server.bindCLIShortcuts({ print: true });
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb21tYW5kcy9zdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUVuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtBQUUvRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDdEMsV0FBVyxDQUFDLHFCQUFxQixDQUFDO0tBQ2xDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNqQixNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQztRQUNoQyxVQUFVO1FBQ1YsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0tBQ25DLENBQUMsQ0FBQTtJQUNGLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3JCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNsQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUMxQyxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCB7IGNyZWF0ZVNlcnZlciB9IGZyb20gXCJ2aXRlXCJcblxuY29uc3QgY29uZmlnRmlsZSA9IGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIndlYnNpdGVcIiwgXCJ2aXRlLmNvbmZpZy50c1wiKVxuXG4vKipcbiAqIFN0YXJ0IGEgZGV2ZWxvcG1lbnQgc2VydmVyLlxuICovXG5leHBvcnQgY29uc3Qgc3RhcnQgPSBuZXcgQ29tbWFuZChcInN0YXJ0XCIpXG4gIC5kZXNjcmlwdGlvbihcIlN0YXJ0IGEgbGl2ZSBzZXJ2ZXJcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgY3JlYXRlU2VydmVyKHtcbiAgICAgIGNvbmZpZ0ZpbGUsXG4gICAgICBzZXJ2ZXI6IHsgcG9ydDogODAwMCwgaG9zdDogdHJ1ZSB9LFxuICAgIH0pXG4gICAgYXdhaXQgc2VydmVyLmxpc3RlbigpXG4gICAgc2VydmVyLnByaW50VXJscygpXG4gICAgc2VydmVyLmJpbmRDTElTaG9ydGN1dHMoeyBwcmludDogdHJ1ZSB9KVxuICB9KVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { defineConfig } from "livemark";
|
|
2
|
+
export default defineConfig({
|
|
3
|
+
articles: { include: "docs/*.md" },
|
|
4
|
+
});
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RvY3MvbWFya2Rvd24vaW5jbHVkZXMvZXhhbXBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXZDLGVBQWUsWUFBWSxDQUFDO0lBQzFCLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUU7Q0FDbkMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcImxpdmVtYXJrXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgYXJ0aWNsZXM6IHsgaW5jbHVkZTogXCJkb2NzLyoubWRcIiB9LFxufSlcbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
process.removeAllListeners("warning");
|
|
3
|
+
process.on("warning", warning => {
|
|
4
|
+
if (warning.name === "ExperimentalWarning") {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
console.warn(warning);
|
|
8
|
+
});
|
|
9
|
+
const { program } = await import("../program.js");
|
|
10
|
+
program.parse();
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2VudHJ5cG9pbnRzL21haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUNyQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtJQUM5QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztRQUMzQyxPQUFNO0lBQ1IsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDdkIsQ0FBQyxDQUFDLENBQUE7QUFFRixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7QUFDakQsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyhcIndhcm5pbmdcIilcbnByb2Nlc3Mub24oXCJ3YXJuaW5nXCIsIHdhcm5pbmcgPT4ge1xuICBpZiAod2FybmluZy5uYW1lID09PSBcIkV4cGVyaW1lbnRhbFdhcm5pbmdcIikge1xuICAgIHJldHVyblxuICB9XG4gIGNvbnNvbGUud2Fybih3YXJuaW5nKVxufSlcblxuY29uc3QgeyBwcm9ncmFtIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9wcm9ncmFtLnRzXCIpXG5wcm9ncmFtLnBhcnNlKClcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
export const helpConfiguration = {
|
|
3
|
+
styleTitle: str => pc.bold(str.toUpperCase().replace(":", "")),
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2hlbHBlcnMvcHJvZ3JhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFM0IsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQXNCO0lBQ2xELFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDL0QsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSGVscENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCBwYyBmcm9tIFwicGljb2NvbG9yc1wiXG5cbmV4cG9ydCBjb25zdCBoZWxwQ29uZmlndXJhdGlvbjogSGVscENvbmZpZ3VyYXRpb24gPSB7XG4gIHN0eWxlVGl0bGU6IHN0ciA9PiBwYy5ib2xkKHN0ci50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoXCI6XCIsIFwiXCIpKSxcbn1cbiJdfQ==
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { defineConfig } from "./actions/config/define.ts";
|
package/build/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { defineConfig } from "./actions/config/define.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwiLi9hY3Rpb25zL2NvbmZpZy9kZWZpbmUudHNcIlxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { defineConfig } from "./index.js";
|
|
2
|
+
export default defineConfig({
|
|
3
|
+
articles: { include: "docs/**/*.md", exclude: "docs/**/includes/**" },
|
|
4
|
+
});
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZW1hcmsuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGl2ZW1hcmsuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFekMsZUFBZSxZQUFZLENBQUM7SUFDMUIsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUU7Q0FDdEUsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcIi4vaW5kZXgudHNcIlxuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBhcnRpY2xlczogeyBpbmNsdWRlOiBcImRvY3MvKiovKi5tZFwiLCBleGNsdWRlOiBcImRvY3MvKiovaW5jbHVkZXMvKipcIiB9LFxufSlcbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* User-provided configuration for Livemark.
|
|
4
|
+
*/
|
|
5
|
+
export type UserConfig = z.infer<typeof UserConfig>;
|
|
6
|
+
export declare const UserConfig: z.ZodObject<{
|
|
7
|
+
title: z.ZodDefault<z.ZodString>;
|
|
8
|
+
description: z.ZodDefault<z.ZodString>;
|
|
9
|
+
articles: z.ZodObject<{
|
|
10
|
+
include: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
11
|
+
exclude: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
/**
|
|
15
|
+
* System-computed configuration derived from the config file location.
|
|
16
|
+
*/
|
|
17
|
+
export type SystemConfig = z.infer<typeof SystemConfig>;
|
|
18
|
+
export declare const SystemConfig: z.ZodObject<{
|
|
19
|
+
root: z.ZodString;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
/**
|
|
22
|
+
* Fully resolved Livemark configuration.
|
|
23
|
+
*/
|
|
24
|
+
export type Config = z.infer<typeof Config>;
|
|
25
|
+
export declare const Config: z.ZodObject<{
|
|
26
|
+
title: z.ZodDefault<z.ZodString>;
|
|
27
|
+
description: z.ZodDefault<z.ZodString>;
|
|
28
|
+
articles: z.ZodObject<{
|
|
29
|
+
include: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
30
|
+
exclude: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
root: z.ZodString;
|
|
33
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const UserConfig = z.object({
|
|
3
|
+
title: z.string().default("Livemark"),
|
|
4
|
+
description: z.string().default("Markdown site generator"),
|
|
5
|
+
articles: z.object({
|
|
6
|
+
include: z.union([z.string(), z.array(z.string())]),
|
|
7
|
+
exclude: z.union([z.string(), z.array(z.string())]).optional(),
|
|
8
|
+
}),
|
|
9
|
+
});
|
|
10
|
+
export const SystemConfig = z.object({
|
|
11
|
+
root: z.string(),
|
|
12
|
+
});
|
|
13
|
+
export const Config = UserConfig.merge(SystemConfig);
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbW9kZWxzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBTXZCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztJQUMxRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQy9ELENBQUM7Q0FDSCxDQUFDLENBQUE7QUFNRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNuQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNqQixDQUFDLENBQUE7QUFNRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcblxuLyoqXG4gKiBVc2VyLXByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gZm9yIExpdmVtYXJrLlxuICovXG5leHBvcnQgdHlwZSBVc2VyQ29uZmlnID0gei5pbmZlcjx0eXBlb2YgVXNlckNvbmZpZz5cbmV4cG9ydCBjb25zdCBVc2VyQ29uZmlnID0gei5vYmplY3Qoe1xuICB0aXRsZTogei5zdHJpbmcoKS5kZWZhdWx0KFwiTGl2ZW1hcmtcIiksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLmRlZmF1bHQoXCJNYXJrZG93biBzaXRlIGdlbmVyYXRvclwiKSxcbiAgYXJ0aWNsZXM6IHoub2JqZWN0KHtcbiAgICBpbmNsdWRlOiB6LnVuaW9uKFt6LnN0cmluZygpLCB6LmFycmF5KHouc3RyaW5nKCkpXSksXG4gICAgZXhjbHVkZTogei51bmlvbihbei5zdHJpbmcoKSwgei5hcnJheSh6LnN0cmluZygpKV0pLm9wdGlvbmFsKCksXG4gIH0pLFxufSlcblxuLyoqXG4gKiBTeXN0ZW0tY29tcHV0ZWQgY29uZmlndXJhdGlvbiBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZyBmaWxlIGxvY2F0aW9uLlxuICovXG5leHBvcnQgdHlwZSBTeXN0ZW1Db25maWcgPSB6LmluZmVyPHR5cGVvZiBTeXN0ZW1Db25maWc+XG5leHBvcnQgY29uc3QgU3lzdGVtQ29uZmlnID0gei5vYmplY3Qoe1xuICByb290OiB6LnN0cmluZygpLFxufSlcblxuLyoqXG4gKiBGdWxseSByZXNvbHZlZCBMaXZlbWFyayBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgdHlwZSBDb25maWcgPSB6LmluZmVyPHR5cGVvZiBDb25maWc+XG5leHBvcnQgY29uc3QgQ29uZmlnID0gVXNlckNvbmZpZy5tZXJnZShTeXN0ZW1Db25maWcpXG4iXX0=
|
package/build/program.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { build } from "./commands/build.js";
|
|
3
|
+
import { preview } from "./commands/preview.js";
|
|
4
|
+
import { start } from "./commands/start.js";
|
|
5
|
+
import { helpConfiguration } from "./helpers/program.js";
|
|
6
|
+
export const program = new Command()
|
|
7
|
+
.name("livemark")
|
|
8
|
+
.description("Livemark static site generator")
|
|
9
|
+
.option("-c, --config <path>", "path to config file")
|
|
10
|
+
.configureHelp(helpConfiguration)
|
|
11
|
+
.addCommand(start)
|
|
12
|
+
.addCommand(build)
|
|
13
|
+
.addCommand(preview);
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUV4RCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7S0FDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUNoQixXQUFXLENBQUMsZ0NBQWdDLENBQUM7S0FDN0MsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDO0tBQ3BELGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztLQUNoQyxVQUFVLENBQUMsS0FBSyxDQUFDO0tBQ2pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7S0FDakIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuaW1wb3J0IHsgYnVpbGQgfSBmcm9tIFwiLi9jb21tYW5kcy9idWlsZC50c1wiXG5pbXBvcnQgeyBwcmV2aWV3IH0gZnJvbSBcIi4vY29tbWFuZHMvcHJldmlldy50c1wiXG5pbXBvcnQgeyBzdGFydCB9IGZyb20gXCIuL2NvbW1hbmRzL3N0YXJ0LnRzXCJcbmltcG9ydCB7IGhlbHBDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vaGVscGVycy9wcm9ncmFtLnRzXCJcblxuZXhwb3J0IGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwibGl2ZW1hcmtcIilcbiAgLmRlc2NyaXB0aW9uKFwiTGl2ZW1hcmsgc3RhdGljIHNpdGUgZ2VuZXJhdG9yXCIpXG4gIC5vcHRpb24oXCItYywgLS1jb25maWcgPHBhdGg+XCIsIFwicGF0aCB0byBjb25maWcgZmlsZVwiKVxuICAuY29uZmlndXJlSGVscChoZWxwQ29uZmlndXJhdGlvbilcbiAgLmFkZENvbW1hbmQoc3RhcnQpXG4gIC5hZGRDb21tYW5kKGJ1aWxkKVxuICAuYWRkQ29tbWFuZChwcmV2aWV3KVxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { basename, dirname, join } from "node:path";
|
|
2
|
+
import { coverageConfigDefaults, defineConfig } from "vite-plus";
|
|
3
|
+
const ignorePatterns = ["**/generated/**", "**.gen.**"];
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
fmt: {
|
|
6
|
+
semi: false,
|
|
7
|
+
printWidth: 80,
|
|
8
|
+
arrowParens: "avoid",
|
|
9
|
+
ignorePatterns,
|
|
10
|
+
},
|
|
11
|
+
lint: {
|
|
12
|
+
ignorePatterns,
|
|
13
|
+
options: {
|
|
14
|
+
typeAware: false,
|
|
15
|
+
typeCheck: false,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
test: {
|
|
19
|
+
include: ["**/*.unit.(ts|tsx)"],
|
|
20
|
+
exclude: ["**/node_modules/**", "**/build/**"],
|
|
21
|
+
env: { NODE_OPTIONS: "--no-warnings" },
|
|
22
|
+
testTimeout: 60 * 1000,
|
|
23
|
+
passWithNoTests: true,
|
|
24
|
+
silent: "passed-only",
|
|
25
|
+
coverage: {
|
|
26
|
+
enabled: true,
|
|
27
|
+
reporter: ["html", "json"],
|
|
28
|
+
exclude: [
|
|
29
|
+
...coverageConfigDefaults.exclude,
|
|
30
|
+
"**/@*",
|
|
31
|
+
"**/build/**",
|
|
32
|
+
"**/compile/**",
|
|
33
|
+
"**/coverage/**",
|
|
34
|
+
"**/entrypoints/**",
|
|
35
|
+
"**/examples/**",
|
|
36
|
+
"**/messages.js",
|
|
37
|
+
"**/program.ts",
|
|
38
|
+
"**/index.ts",
|
|
39
|
+
"**/main.ts",
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
resolveSnapshotPath: (testPath, snapExtension) => {
|
|
43
|
+
return (join(dirname(testPath), "fixtures", "generated", basename(testPath)) +
|
|
44
|
+
snapExtension);
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi92aXRlLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVoRSxNQUFNLGNBQWMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFBO0FBRXZELGVBQWUsWUFBWSxDQUFDO0lBQzFCLEdBQUcsRUFBRTtRQUNILElBQUksRUFBRSxLQUFLO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxXQUFXLEVBQUUsT0FBTztRQUNwQixjQUFjO0tBQ2Y7SUFDRCxJQUFJLEVBQUU7UUFDSixjQUFjO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsU0FBUyxFQUFFLEtBQUs7WUFDaEIsU0FBUyxFQUFFLEtBQUs7U0FDakI7S0FDRjtJQUNELElBQUksRUFBRTtRQUNKLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO1FBQy9CLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQztRQUM5QyxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFO1FBQ3RDLFdBQVcsRUFBRSxFQUFFLEdBQUcsSUFBSTtRQUN0QixlQUFlLEVBQUUsSUFBSTtRQUNyQixNQUFNLEVBQUUsYUFBYTtRQUNyQixRQUFRLEVBQUU7WUFDUixPQUFPLEVBQUUsSUFBSTtZQUNiLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDMUIsT0FBTyxFQUFFO2dCQUNQLEdBQUcsc0JBQXNCLENBQUMsT0FBTztnQkFDakMsT0FBTztnQkFDUCxhQUFhO2dCQUNiLGVBQWU7Z0JBQ2YsZ0JBQWdCO2dCQUNoQixtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsZ0JBQWdCO2dCQUNoQixlQUFlO2dCQUNmLGFBQWE7Z0JBQ2IsWUFBWTthQUNiO1NBQ0Y7UUFDRCxtQkFBbUIsRUFBRSxDQUFDLFFBQWdCLEVBQUUsYUFBcUIsRUFBRSxFQUFFO1lBQy9ELE9BQU8sQ0FDTCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRSxhQUFhLENBQ2QsQ0FBQTtRQUNILENBQUM7S0FDRjtDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBjb3ZlcmFnZUNvbmZpZ0RlZmF1bHRzLCBkZWZpbmVDb25maWcgfSBmcm9tIFwidml0ZS1wbHVzXCJcblxuY29uc3QgaWdub3JlUGF0dGVybnMgPSBbXCIqKi9nZW5lcmF0ZWQvKipcIiwgXCIqKi5nZW4uKipcIl1cblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgZm10OiB7XG4gICAgc2VtaTogZmFsc2UsXG4gICAgcHJpbnRXaWR0aDogODAsXG4gICAgYXJyb3dQYXJlbnM6IFwiYXZvaWRcIixcbiAgICBpZ25vcmVQYXR0ZXJucyxcbiAgfSxcbiAgbGludDoge1xuICAgIGlnbm9yZVBhdHRlcm5zLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGVBd2FyZTogZmFsc2UsXG4gICAgICB0eXBlQ2hlY2s6IGZhbHNlLFxuICAgIH0sXG4gIH0sXG4gIHRlc3Q6IHtcbiAgICBpbmNsdWRlOiBbXCIqKi8qLnVuaXQuKHRzfHRzeClcIl0sXG4gICAgZXhjbHVkZTogW1wiKiovbm9kZV9tb2R1bGVzLyoqXCIsIFwiKiovYnVpbGQvKipcIl0sXG4gICAgZW52OiB7IE5PREVfT1BUSU9OUzogXCItLW5vLXdhcm5pbmdzXCIgfSxcbiAgICB0ZXN0VGltZW91dDogNjAgKiAxMDAwLFxuICAgIHBhc3NXaXRoTm9UZXN0czogdHJ1ZSxcbiAgICBzaWxlbnQ6IFwicGFzc2VkLW9ubHlcIixcbiAgICBjb3ZlcmFnZToge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHJlcG9ydGVyOiBbXCJodG1sXCIsIFwianNvblwiXSxcbiAgICAgIGV4Y2x1ZGU6IFtcbiAgICAgICAgLi4uY292ZXJhZ2VDb25maWdEZWZhdWx0cy5leGNsdWRlLFxuICAgICAgICBcIioqL0AqXCIsXG4gICAgICAgIFwiKiovYnVpbGQvKipcIixcbiAgICAgICAgXCIqKi9jb21waWxlLyoqXCIsXG4gICAgICAgIFwiKiovY292ZXJhZ2UvKipcIixcbiAgICAgICAgXCIqKi9lbnRyeXBvaW50cy8qKlwiLFxuICAgICAgICBcIioqL2V4YW1wbGVzLyoqXCIsXG4gICAgICAgIFwiKiovbWVzc2FnZXMuanNcIixcbiAgICAgICAgXCIqKi9wcm9ncmFtLnRzXCIsXG4gICAgICAgIFwiKiovaW5kZXgudHNcIixcbiAgICAgICAgXCIqKi9tYWluLnRzXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgcmVzb2x2ZVNuYXBzaG90UGF0aDogKHRlc3RQYXRoOiBzdHJpbmcsIHNuYXBFeHRlbnNpb246IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgam9pbihkaXJuYW1lKHRlc3RQYXRoKSwgXCJmaXh0dXJlc1wiLCBcImdlbmVyYXRlZFwiLCBiYXNlbmFtZSh0ZXN0UGF0aCkpICtcbiAgICAgICAgc25hcEV4dGVuc2lvblxuICAgICAgKVxuICAgIH0sXG4gIH0sXG59KVxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Tooltip,
|
|
3
|
+
TooltipContent,
|
|
4
|
+
TooltipTrigger,
|
|
5
|
+
} from "../elements/tooltip.tsx"
|
|
6
|
+
|
|
7
|
+
/** Renders an abbreviation with a shadcn tooltip showing its full form */
|
|
8
|
+
export function Abbr(props: { text: string; title: string }) {
|
|
9
|
+
return (
|
|
10
|
+
<Tooltip>
|
|
11
|
+
<TooltipTrigger className="border-b border-dotted border-muted-foreground cursor-help">
|
|
12
|
+
{props.text}
|
|
13
|
+
</TooltipTrigger>
|
|
14
|
+
<TooltipContent>{props.title}</TooltipContent>
|
|
15
|
+
</Tooltip>
|
|
16
|
+
)
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Renders pre-formatted HTML produced from ANSI escape sequences */
|
|
2
|
+
export function AnsiCode(props: { html: string }) {
|
|
3
|
+
return (
|
|
4
|
+
<figure className="shiki not-prose my-4 relative rounded-xl border shadow-sm overflow-hidden text-sm bg-sidebar dark:bg-sidebar">
|
|
5
|
+
<div className="text-[0.8125rem] py-3.5 overflow-auto">
|
|
6
|
+
<pre className="min-w-full w-max">
|
|
7
|
+
<code
|
|
8
|
+
className="flex flex-col"
|
|
9
|
+
dangerouslySetInnerHTML={{ __html: props.html }}
|
|
10
|
+
/>
|
|
11
|
+
</pre>
|
|
12
|
+
</div>
|
|
13
|
+
</figure>
|
|
14
|
+
)
|
|
15
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Star, MessageCircle } from "lucide-react"
|
|
2
|
+
|
|
3
|
+
/** Technical preview banner displayed in the header */
|
|
4
|
+
export function Banner() {
|
|
5
|
+
return (
|
|
6
|
+
<div className="flex flex-1 items-center justify-end">
|
|
7
|
+
<div className="rounded-xl border border-primary/20 bg-primary/5 shadow-xs px-3 py-1.5 text-sm text-primary">
|
|
8
|
+
<span>
|
|
9
|
+
This project is in technical preview.{" "}
|
|
10
|
+
<a
|
|
11
|
+
href="https://github.com/datisthq/livemark"
|
|
12
|
+
target="_blank"
|
|
13
|
+
rel="noopener noreferrer"
|
|
14
|
+
className="font-semibold hover:underline underline-offset-2"
|
|
15
|
+
>
|
|
16
|
+
<Star className="inline size-3.5 align-[-0.125em]" /> Star on GitHub
|
|
17
|
+
</a>{" "}
|
|
18
|
+
and{" "}
|
|
19
|
+
<a
|
|
20
|
+
href="https://github.com/datisthq/livemark/discussions"
|
|
21
|
+
target="_blank"
|
|
22
|
+
rel="noopener noreferrer"
|
|
23
|
+
className="font-semibold hover:underline underline-offset-2"
|
|
24
|
+
>
|
|
25
|
+
<MessageCircle className="inline size-3.5 align-[-0.125em]" /> share
|
|
26
|
+
feedback!
|
|
27
|
+
</a>
|
|
28
|
+
</span>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
)
|
|
32
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Link, useMatches } from "@tanstack/react-router"
|
|
2
|
+
|
|
3
|
+
export function Breadcrumbs() {
|
|
4
|
+
const matches = useMatches()
|
|
5
|
+
const last = matches[matches.length - 1]
|
|
6
|
+
const loaderData = last?.loaderData as { title?: string } | undefined
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<nav className="flex items-center gap-1.5 text-sm text-muted-foreground">
|
|
10
|
+
<Link to="/" className="hover:text-foreground transition-colors">
|
|
11
|
+
Docs
|
|
12
|
+
</Link>
|
|
13
|
+
<span>/</span>
|
|
14
|
+
{loaderData?.title && (
|
|
15
|
+
<span className="text-foreground font-medium">{loaderData.title}</span>
|
|
16
|
+
)}
|
|
17
|
+
</nav>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { AlertTriangle, Flame, Info, Lightbulb } from "lucide-react"
|
|
2
|
+
import { cn } from "../helpers/style.ts"
|
|
3
|
+
|
|
4
|
+
type CalloutType = "note" | "tip" | "info" | "warning" | "danger"
|
|
5
|
+
|
|
6
|
+
interface CalloutConfig {
|
|
7
|
+
icon: React.ElementType
|
|
8
|
+
label: string
|
|
9
|
+
classes: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const configs: Record<CalloutType, CalloutConfig> = {
|
|
13
|
+
note: {
|
|
14
|
+
icon: Info,
|
|
15
|
+
label: "Note",
|
|
16
|
+
classes:
|
|
17
|
+
"border-blue-500/30 bg-blue-50/50 text-blue-900 dark:bg-blue-950/30 dark:text-blue-200",
|
|
18
|
+
},
|
|
19
|
+
info: {
|
|
20
|
+
icon: Info,
|
|
21
|
+
label: "Info",
|
|
22
|
+
classes:
|
|
23
|
+
"border-blue-500/30 bg-blue-50/50 text-blue-900 dark:bg-blue-950/30 dark:text-blue-200",
|
|
24
|
+
},
|
|
25
|
+
tip: {
|
|
26
|
+
icon: Lightbulb,
|
|
27
|
+
label: "Tip",
|
|
28
|
+
classes:
|
|
29
|
+
"border-green-500/30 bg-green-50/50 text-green-900 dark:bg-green-950/30 dark:text-green-200",
|
|
30
|
+
},
|
|
31
|
+
warning: {
|
|
32
|
+
icon: AlertTriangle,
|
|
33
|
+
label: "Warning",
|
|
34
|
+
classes:
|
|
35
|
+
"border-yellow-500/30 bg-yellow-50/50 text-yellow-900 dark:bg-yellow-950/30 dark:text-yellow-200",
|
|
36
|
+
},
|
|
37
|
+
danger: {
|
|
38
|
+
icon: Flame,
|
|
39
|
+
label: "Danger",
|
|
40
|
+
classes:
|
|
41
|
+
"border-red-500/30 bg-red-50/50 text-red-900 dark:bg-red-950/30 dark:text-red-200",
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Styled callout block for notes, tips, warnings, and other admonitions */
|
|
46
|
+
export function Callout(props: {
|
|
47
|
+
type?: CalloutType
|
|
48
|
+
title?: string
|
|
49
|
+
children: React.ReactNode
|
|
50
|
+
}) {
|
|
51
|
+
const type = props.type ?? "note"
|
|
52
|
+
const config = configs[type]
|
|
53
|
+
const Icon = config.icon
|
|
54
|
+
const title = props.title ?? config.label
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<aside
|
|
58
|
+
className={cn(
|
|
59
|
+
"not-prose my-4 rounded-xl border px-4 py-3",
|
|
60
|
+
config.classes,
|
|
61
|
+
)}
|
|
62
|
+
>
|
|
63
|
+
<div className="flex items-center gap-2 font-semibold text-sm mb-2">
|
|
64
|
+
<Icon className="size-4 shrink-0" />
|
|
65
|
+
<span>{title}</span>
|
|
66
|
+
</div>
|
|
67
|
+
<div className="text-sm [&>p]:my-1 [&>p:first-child]:mt-0 [&>p:last-child]:mb-0">
|
|
68
|
+
{props.children}
|
|
69
|
+
</div>
|
|
70
|
+
</aside>
|
|
71
|
+
)
|
|
72
|
+
}
|