@riebeckite/honox 0.0.12 → 0.0.13
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/README.md +106 -106
- package/README_ja.md +90 -90
- package/assets/favicon.ico +0 -0
- package/assets/riebeckite-logo.png +0 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +219 -182
- package/dist/server.d.ts +2 -2
- package/dist/server.js +23 -1
- package/dist/src/content_route.d.ts +13 -1
- package/dist/src/scaffold/deployment.d.ts +0 -1
- package/dist/src/scaffold/index.d.ts +0 -2
- package/dist/src/scaffold/presets.d.ts +6 -8
- package/dist/src/scaffold/presets.js +13 -131
- package/dist/src/scaffold/templates.d.ts +1 -1
- package/dist/src/scaffold/version.d.ts +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -255,7 +255,7 @@ function isJavaScriptModule(filePath) {
|
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
// src/scaffold/index.ts
|
|
258
|
-
import
|
|
258
|
+
import fs7 from "node:fs/promises";
|
|
259
259
|
import path7 from "node:path";
|
|
260
260
|
|
|
261
261
|
// src/scaffold/deployment.ts
|
|
@@ -275,9 +275,9 @@ function deploymentTemplateFiles(options) {
|
|
|
275
275
|
if (options.siteRepository !== void 0) {
|
|
276
276
|
assertGitHubRepository(options.siteRepository, "siteRepository");
|
|
277
277
|
}
|
|
278
|
-
if (
|
|
278
|
+
if (contentRepository !== void 0 && options.siteRepository === void 0) {
|
|
279
279
|
throw new Error(
|
|
280
|
-
"siteRepository is required when
|
|
280
|
+
"siteRepository is required when contentRepository is provided."
|
|
281
281
|
);
|
|
282
282
|
}
|
|
283
283
|
return [
|
|
@@ -286,7 +286,7 @@ function deploymentTemplateFiles(options) {
|
|
|
286
286
|
path: ".github/workflows/deploy.yml",
|
|
287
287
|
content: deployWorkflow(contentRepository)
|
|
288
288
|
},
|
|
289
|
-
...
|
|
289
|
+
...contentRepository !== void 0 && options.siteRepository !== void 0 ? [
|
|
290
290
|
{
|
|
291
291
|
path: "github/notify-site.yml",
|
|
292
292
|
content: notifySiteWorkflow(options.siteRepository)
|
|
@@ -326,7 +326,7 @@ on:
|
|
|
326
326
|
types: [content-updated]
|
|
327
327
|
|
|
328
328
|
concurrency:
|
|
329
|
-
group: deploy
|
|
329
|
+
group: riebeckite-deploy
|
|
330
330
|
cancel-in-progress: true
|
|
331
331
|
|
|
332
332
|
jobs:
|
|
@@ -418,13 +418,10 @@ function defaultLanguageForLocale(locale) {
|
|
|
418
418
|
return "en";
|
|
419
419
|
}
|
|
420
420
|
var SCAFFOLD_PRESET_NAMES = [
|
|
421
|
-
"empty",
|
|
422
|
-
"minimal",
|
|
423
421
|
"starter",
|
|
424
|
-
"
|
|
425
|
-
"
|
|
426
|
-
"
|
|
427
|
-
"ultra"
|
|
422
|
+
"minimal",
|
|
423
|
+
"showcase",
|
|
424
|
+
"empty"
|
|
428
425
|
];
|
|
429
426
|
function isScaffoldPresetName(value) {
|
|
430
427
|
return SCAFFOLD_PRESET_NAMES.includes(value);
|
|
@@ -809,38 +806,9 @@ var minimal = {
|
|
|
809
806
|
};
|
|
810
807
|
var starter = {
|
|
811
808
|
name: "starter",
|
|
812
|
-
description: "
|
|
809
|
+
description: "Recommended for most sites: a practical Markdown garden with search, discovery, and reading essentials.",
|
|
813
810
|
languages: [...SCAFFOLD_LANGUAGES],
|
|
814
811
|
theme: defaultTheme,
|
|
815
|
-
plugins: [obsidianMarkdown, colorMode, l10n],
|
|
816
|
-
contentPages: ["index"],
|
|
817
|
-
appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
|
|
818
|
-
readme: "standard"
|
|
819
|
-
};
|
|
820
|
-
var rich = {
|
|
821
|
-
name: "rich",
|
|
822
|
-
description: "A showcasing starter: publishing and reading plugins plus guided ecosystem tour pages in seven languages.",
|
|
823
|
-
languages: [...SCAFFOLD_LANGUAGES],
|
|
824
|
-
theme: showCaseTheme,
|
|
825
|
-
plugins: [
|
|
826
|
-
obsidianMarkdown,
|
|
827
|
-
colorMode,
|
|
828
|
-
l10n,
|
|
829
|
-
seo,
|
|
830
|
-
toc,
|
|
831
|
-
properties,
|
|
832
|
-
alias,
|
|
833
|
-
codeEnhance
|
|
834
|
-
],
|
|
835
|
-
contentPages: ["index", "framework/plugins", "framework/themes"],
|
|
836
|
-
appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
|
|
837
|
-
readme: "rich"
|
|
838
|
-
};
|
|
839
|
-
var full = {
|
|
840
|
-
name: "full",
|
|
841
|
-
description: "A ready blog: discovery, media, and reading plugins plus a build guide.",
|
|
842
|
-
languages: [...SCAFFOLD_LANGUAGES],
|
|
843
|
-
theme: showCaseTheme,
|
|
844
812
|
plugins: [
|
|
845
813
|
obsidianMarkdown,
|
|
846
814
|
colorMode,
|
|
@@ -853,102 +821,19 @@ var full = {
|
|
|
853
821
|
search,
|
|
854
822
|
backlinks,
|
|
855
823
|
relatedPosts,
|
|
856
|
-
share,
|
|
857
|
-
changelog,
|
|
858
|
-
webmention,
|
|
859
824
|
recentPosts,
|
|
860
|
-
attachment,
|
|
861
|
-
pdf,
|
|
862
|
-
media,
|
|
863
825
|
responsiveImage,
|
|
864
826
|
lightbox,
|
|
865
|
-
highlight,
|
|
866
|
-
codeTabs,
|
|
867
|
-
codeAnnotations,
|
|
868
|
-
shortcodes,
|
|
869
827
|
series,
|
|
870
|
-
taxonomy
|
|
871
|
-
autoCardLink,
|
|
872
|
-
richEmbed,
|
|
873
|
-
gallery
|
|
828
|
+
taxonomy
|
|
874
829
|
],
|
|
875
|
-
contentPages: ["index", "
|
|
830
|
+
contentPages: ["index", "guide", "examples"],
|
|
876
831
|
appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
|
|
877
|
-
readme: "
|
|
878
|
-
};
|
|
879
|
-
var max = {
|
|
880
|
-
name: "max",
|
|
881
|
-
description: "Diagram and knowledge plugins on top of full, with showcase example pages.",
|
|
882
|
-
languages: [...SCAFFOLD_LANGUAGES],
|
|
883
|
-
theme: showCaseTheme,
|
|
884
|
-
plugins: [
|
|
885
|
-
obsidianMarkdown,
|
|
886
|
-
colorMode,
|
|
887
|
-
l10n,
|
|
888
|
-
seo,
|
|
889
|
-
toc,
|
|
890
|
-
properties,
|
|
891
|
-
alias,
|
|
892
|
-
codeEnhance,
|
|
893
|
-
search,
|
|
894
|
-
backlinks,
|
|
895
|
-
relatedPosts,
|
|
896
|
-
share,
|
|
897
|
-
changelog,
|
|
898
|
-
webmention,
|
|
899
|
-
recentPosts,
|
|
900
|
-
attachment,
|
|
901
|
-
pdf,
|
|
902
|
-
media,
|
|
903
|
-
responsiveImage,
|
|
904
|
-
lightbox,
|
|
905
|
-
highlight,
|
|
906
|
-
codeTabs,
|
|
907
|
-
codeAnnotations,
|
|
908
|
-
shortcodes,
|
|
909
|
-
series,
|
|
910
|
-
taxonomy,
|
|
911
|
-
autoCardLink,
|
|
912
|
-
richEmbed,
|
|
913
|
-
gallery,
|
|
914
|
-
mermaid,
|
|
915
|
-
graphviz,
|
|
916
|
-
d2,
|
|
917
|
-
plantuml,
|
|
918
|
-
chartjs,
|
|
919
|
-
vegaLite,
|
|
920
|
-
wavedrom,
|
|
921
|
-
markmap,
|
|
922
|
-
map,
|
|
923
|
-
marp,
|
|
924
|
-
qrCode,
|
|
925
|
-
discordEmbed,
|
|
926
|
-
excalidraw,
|
|
927
|
-
excaliBrain,
|
|
928
|
-
canvas,
|
|
929
|
-
bases,
|
|
930
|
-
dataview,
|
|
931
|
-
flashcards,
|
|
932
|
-
kanban,
|
|
933
|
-
query,
|
|
934
|
-
localGraph,
|
|
935
|
-
hoverPreview,
|
|
936
|
-
gardenExplorer,
|
|
937
|
-
ux
|
|
938
|
-
],
|
|
939
|
-
contentPages: [
|
|
940
|
-
"index",
|
|
941
|
-
"framework/plugins",
|
|
942
|
-
"framework/themes",
|
|
943
|
-
"guide",
|
|
944
|
-
"examples"
|
|
945
|
-
],
|
|
946
|
-
appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
|
|
947
|
-
readme: "rich"
|
|
832
|
+
readme: "standard"
|
|
948
833
|
};
|
|
949
|
-
var
|
|
950
|
-
name: "
|
|
951
|
-
description: "
|
|
834
|
+
var showcase = {
|
|
835
|
+
name: "showcase",
|
|
836
|
+
description: "Explore the complete Riebeckite ecosystem with rendered examples, reference pages, and local fixtures.",
|
|
952
837
|
languages: [...SCAFFOLD_LANGUAGES],
|
|
953
838
|
theme: showCaseTheme,
|
|
954
839
|
plugins: [
|
|
@@ -1024,7 +909,7 @@ var ultra = {
|
|
|
1024
909
|
appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
|
|
1025
910
|
readme: "rich"
|
|
1026
911
|
};
|
|
1027
|
-
var scaffoldPresets = {
|
|
912
|
+
var scaffoldPresets = { starter, minimal, showcase, empty };
|
|
1028
913
|
var SCAFFOLD_DEFAULT_PRESET = "starter";
|
|
1029
914
|
function resolveScaffoldPreset(value) {
|
|
1030
915
|
if (value === void 0) return scaffoldPresets[SCAFFOLD_DEFAULT_PRESET];
|
|
@@ -1038,6 +923,9 @@ function resolveScaffoldPreset(value) {
|
|
|
1038
923
|
return preset;
|
|
1039
924
|
}
|
|
1040
925
|
|
|
926
|
+
// src/scaffold/templates.ts
|
|
927
|
+
import fs6 from "node:fs";
|
|
928
|
+
|
|
1041
929
|
// src/vite_plugin.ts
|
|
1042
930
|
import path6 from "node:path";
|
|
1043
931
|
|
|
@@ -1121,12 +1009,28 @@ function createClientModule(config) {
|
|
|
1121
1009
|
`import ${importTarget} from ${JSON.stringify(entry.moduleSpecifier)};`
|
|
1122
1010
|
);
|
|
1123
1011
|
const publicConfig = entry.publicConfig;
|
|
1012
|
+
const initializer = publicConfig === void 0 ? `${localName}()` : `${localName}(${serializePublicClientConfig(publicConfig)})`;
|
|
1124
1013
|
initializers.push(
|
|
1125
|
-
|
|
1014
|
+
`runPluginClientInitializer(${JSON.stringify(entry.moduleSpecifier)}, () => ${initializer})`
|
|
1126
1015
|
);
|
|
1127
1016
|
}
|
|
1128
1017
|
return `${imports.join("\n")}
|
|
1129
1018
|
|
|
1019
|
+
function runPluginClientInitializer(name, initialize) {
|
|
1020
|
+
try {
|
|
1021
|
+
const result = initialize();
|
|
1022
|
+
if (result && typeof result.then === "function") {
|
|
1023
|
+
result.catch((error) => reportPluginClientError(name, error));
|
|
1024
|
+
}
|
|
1025
|
+
} catch (error) {
|
|
1026
|
+
reportPluginClientError(name, error);
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
function reportPluginClientError(name, error) {
|
|
1031
|
+
console.error("[riebeckite] Plugin client initializer failed: " + name, error);
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1130
1034
|
export function initRiebeckiteClient() {
|
|
1131
1035
|
${initializers.map((initializer) => ` ${initializer};`).join("\n")}
|
|
1132
1036
|
}
|
|
@@ -1604,10 +1508,19 @@ function style(preset) {
|
|
|
1604
1508
|
"}",
|
|
1605
1509
|
"",
|
|
1606
1510
|
".site-header__home {",
|
|
1511
|
+
" display: inline-flex;",
|
|
1512
|
+
" align-items: center;",
|
|
1513
|
+
" gap: 0.5rem;",
|
|
1607
1514
|
" color: #111827;",
|
|
1608
1515
|
" font-weight: 700;",
|
|
1609
1516
|
" text-decoration: none;",
|
|
1610
1517
|
"}",
|
|
1518
|
+
"",
|
|
1519
|
+
".site-header__logo {",
|
|
1520
|
+
" width: 1.75rem;",
|
|
1521
|
+
" height: 1.75rem;",
|
|
1522
|
+
" object-fit: contain;",
|
|
1523
|
+
"}",
|
|
1611
1524
|
""
|
|
1612
1525
|
);
|
|
1613
1526
|
}
|
|
@@ -1642,6 +1555,13 @@ export function SiteHeader() {
|
|
|
1642
1555
|
return (
|
|
1643
1556
|
<header class="site-header">
|
|
1644
1557
|
<a href="/" class="site-header__home">
|
|
1558
|
+
<img
|
|
1559
|
+
src="/riebeckite-logo.png"
|
|
1560
|
+
alt=""
|
|
1561
|
+
class="site-header__logo"
|
|
1562
|
+
width="28"
|
|
1563
|
+
height="28"
|
|
1564
|
+
/>
|
|
1645
1565
|
{config.site.title}
|
|
1646
1566
|
</a>
|
|
1647
1567
|
<ColorModeToggle />
|
|
@@ -1704,6 +1624,10 @@ function themeAttributes() {
|
|
|
1704
1624
|
};
|
|
1705
1625
|
}
|
|
1706
1626
|
|
|
1627
|
+
// Riebeckite plugin client entries need the HonoX client bundle even without
|
|
1628
|
+
// an island component.
|
|
1629
|
+
export const __importing_islands = true;
|
|
1630
|
+
|
|
1707
1631
|
export default jsxRenderer(({ children }, c) => {
|
|
1708
1632
|
const headTags: readonly PluginHeadTag[] = c.get("headTags") ?? [];
|
|
1709
1633
|
|
|
@@ -1716,6 +1640,7 @@ export default jsxRenderer(({ children }, c) => {
|
|
|
1716
1640
|
<meta charset="utf-8" />
|
|
1717
1641
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
1718
1642
|
<title>{config.site.title}</title>
|
|
1643
|
+
<link rel="icon" href="/favicon.ico" />
|
|
1719
1644
|
${hasColorMode ? ` <ColorModeScript />
|
|
1720
1645
|
` : ""} <Link href="/app/style.css" rel="stylesheet" />
|
|
1721
1646
|
{headTags.map(renderHeadTag)}
|
|
@@ -1750,12 +1675,17 @@ function bareRenderer() {
|
|
|
1750
1675
|
import { Link, Script } from "honox/server";
|
|
1751
1676
|
import { config } from "../config";
|
|
1752
1677
|
|
|
1678
|
+
// Riebeckite plugin client entries need the HonoX client bundle even without
|
|
1679
|
+
// an island component.
|
|
1680
|
+
export const __importing_islands = true;
|
|
1681
|
+
|
|
1753
1682
|
export default jsxRenderer(({ children }, c) => (
|
|
1754
1683
|
<html lang={c.get("htmlLanguage") ?? config.site.locale}>
|
|
1755
1684
|
<head>
|
|
1756
1685
|
<meta charset="utf-8" />
|
|
1757
1686
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
1758
1687
|
<title>{config.site.title}</title>
|
|
1688
|
+
<link rel="icon" href="/favicon.ico" />
|
|
1759
1689
|
<Link href="/app/style.css" rel="stylesheet" />
|
|
1760
1690
|
<Script src="/app/client.ts" async />
|
|
1761
1691
|
</head>
|
|
@@ -1816,7 +1746,8 @@ function slugRoute() {
|
|
|
1816
1746
|
return `import { isPublished } from "@riebeckite/core";
|
|
1817
1747
|
import {
|
|
1818
1748
|
contentRouteSsgParams,
|
|
1819
|
-
|
|
1749
|
+
pluginPageSsgParams,
|
|
1750
|
+
resolveRiebeckiteRoute,
|
|
1820
1751
|
} from "@riebeckite/honox/server";
|
|
1821
1752
|
import { createRoute } from "honox/factory";
|
|
1822
1753
|
import { SiteArticle } from "../components/article";
|
|
@@ -1826,21 +1757,27 @@ import { content } from "../content";
|
|
|
1826
1757
|
export default createRoute(
|
|
1827
1758
|
contentRouteSsgParams("/:slug{.+}", async () => {
|
|
1828
1759
|
const manifest = await content.getManifest();
|
|
1829
|
-
|
|
1760
|
+
const contentPaths = manifest.entries
|
|
1830
1761
|
.filter((entry) => isPublished(config, entry.frontmatter))
|
|
1831
1762
|
.filter((entry) => entry.permalink !== "/")
|
|
1832
1763
|
.map((entry) => ({ slug: entry.permalink.replace(/^\\/+/, "") }));
|
|
1764
|
+
return [...contentPaths, ...(await pluginPageSsgParams(content))];
|
|
1833
1765
|
}),
|
|
1834
1766
|
async (c) => {
|
|
1835
1767
|
const requestedSlug = c.req.param("slug");
|
|
1836
1768
|
if (!requestedSlug) return c.notFound();
|
|
1837
1769
|
if (/\\.[a-zA-Z0-9]+$/.test(requestedSlug)) return c.notFound();
|
|
1838
1770
|
|
|
1839
|
-
const
|
|
1840
|
-
const route = resolveContentRoute(manifest, c.req.path);
|
|
1771
|
+
const route = await resolveRiebeckiteRoute(content, c.req.path);
|
|
1841
1772
|
if (!route) return c.notFound();
|
|
1842
1773
|
if (route.kind === "redirect")
|
|
1843
1774
|
return c.redirect(route.location, route.status);
|
|
1775
|
+
if (route.kind === "page") {
|
|
1776
|
+
c.set("headTags", route.page.headTags ?? []);
|
|
1777
|
+
return c.render(
|
|
1778
|
+
<div dangerouslySetInnerHTML={{ __html: route.page.body }} />,
|
|
1779
|
+
);
|
|
1780
|
+
}
|
|
1844
1781
|
|
|
1845
1782
|
const post = await content.getProcessedContent(route.entry.slug);
|
|
1846
1783
|
if (!isPublished(config, post.frontmatter)) {
|
|
@@ -2129,7 +2066,7 @@ var PLUGIN_MARKDOWN_GUIDES = {
|
|
|
2129
2066
|
"---",
|
|
2130
2067
|
"",
|
|
2131
2068
|
"```daily-snippet",
|
|
2132
|
-
"
|
|
2069
|
+
"Updated the showcase examples.",
|
|
2133
2070
|
"```"
|
|
2134
2071
|
].join("\n")
|
|
2135
2072
|
},
|
|
@@ -2208,7 +2145,10 @@ function localizedContentFiles(variables, preset) {
|
|
|
2208
2145
|
};
|
|
2209
2146
|
for (const page of preset.contentPages) {
|
|
2210
2147
|
if (page === "index") {
|
|
2211
|
-
pushLocalized(
|
|
2148
|
+
pushLocalized(
|
|
2149
|
+
"index",
|
|
2150
|
+
(language) => indexContent(variables, preset, language)
|
|
2151
|
+
);
|
|
2212
2152
|
} else if (page === "framework/plugins") {
|
|
2213
2153
|
pushLocalized(
|
|
2214
2154
|
"framework/plugins",
|
|
@@ -2235,6 +2175,12 @@ function localizedContentFiles(variables, preset) {
|
|
|
2235
2175
|
pushEnglishOnly("reference/themes", () => referenceThemesContent(preset));
|
|
2236
2176
|
}
|
|
2237
2177
|
}
|
|
2178
|
+
if (preset.name === "starter" || preset.name === "showcase") {
|
|
2179
|
+
files.push(...knowledgeFixtureFiles(preset));
|
|
2180
|
+
}
|
|
2181
|
+
if (preset.name === "showcase") {
|
|
2182
|
+
files.push(...showcaseAssetFiles());
|
|
2183
|
+
}
|
|
2238
2184
|
return files;
|
|
2239
2185
|
}
|
|
2240
2186
|
function read(text, language) {
|
|
@@ -2252,6 +2198,72 @@ ${code}
|
|
|
2252
2198
|
\`\`\`
|
|
2253
2199
|
`;
|
|
2254
2200
|
}
|
|
2201
|
+
function knowledgeFixtureFiles(preset) {
|
|
2202
|
+
const prefix = preset.name === "showcase" ? "demo" : "notes";
|
|
2203
|
+
return [
|
|
2204
|
+
{
|
|
2205
|
+
path: `content/${prefix}/planning.md`,
|
|
2206
|
+
content: [
|
|
2207
|
+
"---",
|
|
2208
|
+
"title: Planning a Markdown site",
|
|
2209
|
+
"description: A related note used by the generated discovery examples.",
|
|
2210
|
+
"date: 2026-09-30",
|
|
2211
|
+
"tags: [riebeckite, project]",
|
|
2212
|
+
"status: active",
|
|
2213
|
+
"aliases: [/start-here/]",
|
|
2214
|
+
"series: publish-a-site",
|
|
2215
|
+
"series_title: Publish a site",
|
|
2216
|
+
"series_order: 1",
|
|
2217
|
+
"publish: true",
|
|
2218
|
+
"---",
|
|
2219
|
+
"",
|
|
2220
|
+
"# Planning a Markdown site",
|
|
2221
|
+
"",
|
|
2222
|
+
"Start with [[writing]] to see backlinks, related posts, tags, and the series navigation working together."
|
|
2223
|
+
].join("\n")
|
|
2224
|
+
},
|
|
2225
|
+
{
|
|
2226
|
+
path: `content/${prefix}/writing.md`,
|
|
2227
|
+
content: [
|
|
2228
|
+
"---",
|
|
2229
|
+
"title: Writing the first note",
|
|
2230
|
+
"description: A second connected note for search and related-content examples.",
|
|
2231
|
+
"date: 2026-10-01",
|
|
2232
|
+
"tags: [riebeckite, project]",
|
|
2233
|
+
"status: active",
|
|
2234
|
+
"series: publish-a-site",
|
|
2235
|
+
"series_title: Publish a site",
|
|
2236
|
+
"series_order: 2",
|
|
2237
|
+
"publish: true",
|
|
2238
|
+
"---",
|
|
2239
|
+
"",
|
|
2240
|
+
"# Writing the first note",
|
|
2241
|
+
"",
|
|
2242
|
+
"This note links back to [[planning]]. Search for **Markdown site** or browse the generated tags."
|
|
2243
|
+
].join("\n")
|
|
2244
|
+
}
|
|
2245
|
+
];
|
|
2246
|
+
}
|
|
2247
|
+
function showcaseAssetFiles() {
|
|
2248
|
+
return [
|
|
2249
|
+
{
|
|
2250
|
+
path: "content/images/demo.svg",
|
|
2251
|
+
content: '<svg xmlns="http://www.w3.org/2000/svg" width="640" height="360" viewBox="0 0 640 360"><rect width="640" height="360" fill="#315b8c"/><text x="320" y="180" fill="white" font-size="32" text-anchor="middle">Riebeckite showcase</text></svg>\n'
|
|
2252
|
+
},
|
|
2253
|
+
{
|
|
2254
|
+
path: "content/attachments/project-brief.pdf",
|
|
2255
|
+
content: "%PDF-1.1\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj\n2 0 obj<</Type/Pages/Count 0/Kids[]>>endobj\ntrailer<</Root 1 0 R>>\n%%EOF\n"
|
|
2256
|
+
},
|
|
2257
|
+
{
|
|
2258
|
+
path: "content/drawings/Architecture.excalidraw",
|
|
2259
|
+
content: '{"type":"excalidraw","version":2,"elements":[],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}}\n'
|
|
2260
|
+
},
|
|
2261
|
+
{
|
|
2262
|
+
path: "content/drawings/site.canvas",
|
|
2263
|
+
content: '{"nodes":[{"id":"note","type":"text","text":"Note","x":0,"y":0,"width":200,"height":60}],"edges":[]}\n'
|
|
2264
|
+
}
|
|
2265
|
+
];
|
|
2266
|
+
}
|
|
2255
2267
|
var INDEX = {
|
|
2256
2268
|
lead: {
|
|
2257
2269
|
en: "Welcome to your Riebeckite site.",
|
|
@@ -2344,7 +2356,7 @@ var INDEX = {
|
|
|
2344
2356
|
ko: "번역 페이지는 기본 파일 옆에 `<base>.<lang>.md` 규칙으로 둡니다(예: `about.ja.md`). l10n 플러그인이 `/lang/` 경로로 서빙하며 자동으로 링크합니다."
|
|
2345
2357
|
}
|
|
2346
2358
|
};
|
|
2347
|
-
function indexContent(variables, language) {
|
|
2359
|
+
function indexContent(variables, preset, language) {
|
|
2348
2360
|
const title = variables.title;
|
|
2349
2361
|
return [
|
|
2350
2362
|
frontmatter(),
|
|
@@ -2353,9 +2365,17 @@ function indexContent(variables, language) {
|
|
|
2353
2365
|
read(INDEX.translatedNote, language),
|
|
2354
2366
|
heading(2, read(INDEX.whatHeading, language)),
|
|
2355
2367
|
read(INDEX.whatBody, language),
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2368
|
+
...preset.name === "showcase" ? [
|
|
2369
|
+
heading(2, read(INDEX.exploreHeading, language)),
|
|
2370
|
+
`- [${read(INDEX.explorePlugins, language)}](/framework/plugins)`,
|
|
2371
|
+
`- [${read(INDEX.exploreThemes, language)}](/framework/themes)`,
|
|
2372
|
+
"- [Working examples](/examples/)",
|
|
2373
|
+
"- [Plugin reference](/reference/plugins/)"
|
|
2374
|
+
] : preset.name === "starter" ? [
|
|
2375
|
+
heading(2, read(INDEX.exploreHeading, language)),
|
|
2376
|
+
"- [Getting started](/guide/)",
|
|
2377
|
+
"- [Example notes](/examples/)"
|
|
2378
|
+
] : [],
|
|
2359
2379
|
heading(2, read(INDEX.editHeading, language)),
|
|
2360
2380
|
read(INDEX.editLead, language),
|
|
2361
2381
|
read(INDEX.editL10n, language),
|
|
@@ -3223,10 +3243,16 @@ var EXAMPLES_COPY = {
|
|
|
3223
3243
|
ja: "サンプル集"
|
|
3224
3244
|
},
|
|
3225
3245
|
intro: {
|
|
3226
|
-
en: "
|
|
3227
|
-
ja: "
|
|
3246
|
+
en: "Rendered examples for the diagram, chart, and code features in this preset. Fenced code blocks are turned into output at build time by the relevant plugins, while code blocks gain toolbars from the code plugins. Each section below is copy-pasteable into a Markdown document.",
|
|
3247
|
+
ja: "このプリセットに含まれる図表・チャート・コード機能の描画例です。フェンス付きコードブロックは対応するプラグインによりビルド時に出力へ変換され、コードブロックにはツールバーが付きます。以下の各セクションは、Markdown 文書にそのままコピーして使えます。"
|
|
3228
3248
|
}
|
|
3229
3249
|
};
|
|
3250
|
+
var SHOWCASE_GUIDE_DEMOS = [
|
|
3251
|
+
"@riebeckite/plugin-plantuml",
|
|
3252
|
+
"@riebeckite/plugin-excalidraw",
|
|
3253
|
+
"@riebeckite/plugin-canvas",
|
|
3254
|
+
"@riebeckite/plugin-flashcards"
|
|
3255
|
+
];
|
|
3230
3256
|
function examplesContent(preset, language) {
|
|
3231
3257
|
const lines = [
|
|
3232
3258
|
frontmatter(),
|
|
@@ -3243,6 +3269,19 @@ function examplesContent(preset, language) {
|
|
|
3243
3269
|
lines.push(readSummary(demo.intro, language), "");
|
|
3244
3270
|
lines.push(demo.markdown, "");
|
|
3245
3271
|
}
|
|
3272
|
+
if (preset.name === "showcase") {
|
|
3273
|
+
for (const packageName of SHOWCASE_GUIDE_DEMOS) {
|
|
3274
|
+
if (!hasPlugin(preset, packageName)) continue;
|
|
3275
|
+
const guide = PLUGIN_MARKDOWN_GUIDES[packageName];
|
|
3276
|
+
if (!guide) continue;
|
|
3277
|
+
lines.push(
|
|
3278
|
+
heading(2, packageName.replace("@riebeckite/plugin-", "")),
|
|
3279
|
+
""
|
|
3280
|
+
);
|
|
3281
|
+
lines.push(guide.summary, "");
|
|
3282
|
+
lines.push(guide.markdown, "");
|
|
3283
|
+
}
|
|
3284
|
+
}
|
|
3246
3285
|
return lines.join("\n");
|
|
3247
3286
|
}
|
|
3248
3287
|
function referencePluginsContent(preset, variables) {
|
|
@@ -3334,7 +3373,7 @@ function referenceThemesContent(preset) {
|
|
|
3334
3373
|
}
|
|
3335
3374
|
|
|
3336
3375
|
// src/scaffold/version.ts
|
|
3337
|
-
var RIEBECKITE_VERSION = "^0.0.
|
|
3376
|
+
var RIEBECKITE_VERSION = "^0.0.13";
|
|
3338
3377
|
|
|
3339
3378
|
// src/scaffold/templates.ts
|
|
3340
3379
|
function siteTemplateFiles(preset, variables) {
|
|
@@ -3348,10 +3387,26 @@ function siteTemplateFiles(preset, variables) {
|
|
|
3348
3387
|
{ path: "tsconfig.json", content: tsconfig() },
|
|
3349
3388
|
{ path: ".gitignore", content: gitignore() },
|
|
3350
3389
|
{ path: "README.md", content: readme(preset, variables) },
|
|
3390
|
+
{ path: "public/favicon.ico", content: readPackageAsset("favicon.ico") },
|
|
3391
|
+
{
|
|
3392
|
+
path: "public/riebeckite-logo.png",
|
|
3393
|
+
content: readPackageAsset("riebeckite-logo.png")
|
|
3394
|
+
},
|
|
3351
3395
|
...localizedContentFiles(variables, preset),
|
|
3352
3396
|
...appFiles(preset)
|
|
3353
3397
|
];
|
|
3354
3398
|
}
|
|
3399
|
+
function readPackageAsset(fileName) {
|
|
3400
|
+
const candidates = [
|
|
3401
|
+
new URL(`../../assets/${fileName}`, import.meta.url),
|
|
3402
|
+
new URL(`../../../assets/${fileName}`, import.meta.url),
|
|
3403
|
+
new URL(`../assets/${fileName}`, import.meta.url)
|
|
3404
|
+
];
|
|
3405
|
+
for (const candidate of candidates) {
|
|
3406
|
+
if (fs6.existsSync(candidate)) return fs6.readFileSync(candidate);
|
|
3407
|
+
}
|
|
3408
|
+
throw new Error(`Missing Riebeckite scaffold asset: ${fileName}`);
|
|
3409
|
+
}
|
|
3355
3410
|
var APP_FILE_LABELS = [
|
|
3356
3411
|
"server",
|
|
3357
3412
|
"client",
|
|
@@ -3484,11 +3539,8 @@ function riebeckiteConfig(preset, variables) {
|
|
|
3484
3539
|
var OPTION_DEPTH = {
|
|
3485
3540
|
empty: 0,
|
|
3486
3541
|
minimal: 0,
|
|
3487
|
-
starter:
|
|
3488
|
-
|
|
3489
|
-
full: 2,
|
|
3490
|
-
max: 2,
|
|
3491
|
-
ultra: 3
|
|
3542
|
+
starter: 2,
|
|
3543
|
+
showcase: 3
|
|
3492
3544
|
};
|
|
3493
3545
|
function optionContext(preset, variables) {
|
|
3494
3546
|
return {
|
|
@@ -3605,24 +3657,12 @@ var README_INTRO = {
|
|
|
3605
3657
|
ja: "最小限で実用的な Riebeckite サイトです。Obsidian マークダウン・minimal テーマ・1 ページ構成。"
|
|
3606
3658
|
},
|
|
3607
3659
|
starter: {
|
|
3608
|
-
en: "
|
|
3609
|
-
ja: "
|
|
3660
|
+
en: "Recommended for most sites: a practical Markdown garden with search, discovery, and reading essentials.",
|
|
3661
|
+
ja: "大半のサイトにおすすめの構成です。検索・発見・閲覧に必要な機能を備えた実用的な Markdown サイトを作れます。"
|
|
3610
3662
|
},
|
|
3611
|
-
|
|
3612
|
-
en: "
|
|
3613
|
-
ja: "
|
|
3614
|
-
},
|
|
3615
|
-
full: {
|
|
3616
|
-
en: "A ready-to-use blog preset: discovery, media, and reading plugins plus a getting-started guide.",
|
|
3617
|
-
ja: "そのまま使えるブログ向けプリセットです。検索・メディア・読書体験のプラグインと入門ガイド付き。"
|
|
3618
|
-
},
|
|
3619
|
-
max: {
|
|
3620
|
-
en: "Diagram, chart, and knowledge plugins on top of full, with showcase example pages.",
|
|
3621
|
-
ja: "full に図解・チャート・ナレッジ系プラグインを加えた構成で、お試し用サンプルページ付き。"
|
|
3622
|
-
},
|
|
3623
|
-
ultra: {
|
|
3624
|
-
en: "The complete plugin catalog with plugin and theme reference pages.",
|
|
3625
|
-
ja: "全プラグインを有効化した最上位構成。プラグイン/テーマのリファレンスページ付き。"
|
|
3663
|
+
showcase: {
|
|
3664
|
+
en: "Explore the complete Riebeckite ecosystem with rendered examples, reference pages, and local fixtures.",
|
|
3665
|
+
ja: "描画例・リファレンスページ・ローカルのフィクスチャで、Riebeckite のエコシステム全体を確認できる構成です。"
|
|
3626
3666
|
}
|
|
3627
3667
|
};
|
|
3628
3668
|
var README_WORDS = {
|
|
@@ -4237,16 +4277,15 @@ async function scaffoldRiebeckiteSite(options) {
|
|
|
4237
4277
|
);
|
|
4238
4278
|
for (const file of files) {
|
|
4239
4279
|
const filePath = path7.join(targetDirectory, file.path);
|
|
4240
|
-
await
|
|
4241
|
-
await
|
|
4280
|
+
await fs7.mkdir(path7.dirname(filePath), { recursive: true });
|
|
4281
|
+
await fs7.writeFile(filePath, file.content);
|
|
4242
4282
|
}
|
|
4243
4283
|
return { targetDirectory, files: files.map((file) => file.path) };
|
|
4244
4284
|
}
|
|
4245
4285
|
function deploymentOptions(options) {
|
|
4246
4286
|
return {
|
|
4247
4287
|
contentRepository: options.contentRepository,
|
|
4248
|
-
siteRepository: options.siteRepository
|
|
4249
|
-
notifyOnContentPush: options.notifyOnContentPush
|
|
4288
|
+
siteRepository: options.siteRepository
|
|
4250
4289
|
};
|
|
4251
4290
|
}
|
|
4252
4291
|
function validateDeploymentOptions(options) {
|
|
@@ -4264,20 +4303,14 @@ function validateDeploymentOptions(options) {
|
|
|
4264
4303
|
}
|
|
4265
4304
|
if (options.contentRepository !== void 0 && !options.githubActions) {
|
|
4266
4305
|
throw new ScaffoldSiteError(
|
|
4267
|
-
"
|
|
4306
|
+
"--content-repository requires --github-actions."
|
|
4268
4307
|
);
|
|
4269
4308
|
}
|
|
4270
|
-
if (options.
|
|
4271
|
-
throw new ScaffoldSiteError("notifyOnContentPush requires githubActions.");
|
|
4272
|
-
}
|
|
4273
|
-
if (options.notifyOnContentPush && options.contentRepository === void 0) {
|
|
4309
|
+
if (options.contentRepository !== void 0 && options.siteRepository === void 0) {
|
|
4274
4310
|
throw new ScaffoldSiteError(
|
|
4275
|
-
"
|
|
4311
|
+
"--site-repository is required when --content-repository is used with --github-actions."
|
|
4276
4312
|
);
|
|
4277
4313
|
}
|
|
4278
|
-
if (options.notifyOnContentPush && options.siteRepository === void 0) {
|
|
4279
|
-
throw new ScaffoldSiteError("notifyOnContentPush requires siteRepository.");
|
|
4280
|
-
}
|
|
4281
4314
|
}
|
|
4282
4315
|
function templateVariables(options, targetDirectory) {
|
|
4283
4316
|
const name = normalizePackageName(
|
|
@@ -4294,7 +4327,7 @@ function templateVariables(options, targetDirectory) {
|
|
|
4294
4327
|
async function assertTargetWritable(targetDirectory, files, overwrite) {
|
|
4295
4328
|
let entries;
|
|
4296
4329
|
try {
|
|
4297
|
-
entries = await
|
|
4330
|
+
entries = await fs7.readdir(targetDirectory);
|
|
4298
4331
|
} catch (error) {
|
|
4299
4332
|
if (isNotFoundError2(error)) return;
|
|
4300
4333
|
throw error;
|
|
@@ -4338,9 +4371,11 @@ export {
|
|
|
4338
4371
|
createRiebeckiteSsg,
|
|
4339
4372
|
defaultSsgEntry,
|
|
4340
4373
|
defaultSsrExternals,
|
|
4374
|
+
empty,
|
|
4341
4375
|
formatScaffoldNextSteps,
|
|
4342
4376
|
isScaffoldPresetName,
|
|
4343
4377
|
loadRiebeckiteConfig,
|
|
4378
|
+
minimal,
|
|
4344
4379
|
replaceHonoxIslandDependencyPlugin,
|
|
4345
4380
|
resolveHonoxApplication,
|
|
4346
4381
|
resolveHonoxApplicationRoot,
|
|
@@ -4352,5 +4387,7 @@ export {
|
|
|
4352
4387
|
riebeckiteVite,
|
|
4353
4388
|
scaffoldPresets,
|
|
4354
4389
|
scaffoldRiebeckiteSite,
|
|
4355
|
-
|
|
4390
|
+
showcase,
|
|
4391
|
+
startHonoxDevServer,
|
|
4392
|
+
starter
|
|
4356
4393
|
};
|
package/dist/server.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { ResolvedContentRoute } from "./src/content_route.js";
|
|
2
|
-
export { contentRouteSsgParams, resolveContentRoute, ssgEnumerableHandler, } from "./src/content_route.js";
|
|
1
|
+
export type { ResolvedContentRoute, ResolvedRiebeckiteRoute, } from "./src/content_route.js";
|
|
2
|
+
export { contentRouteSsgParams, pluginPageSsgParams, resolveContentRoute, resolveRiebeckiteRoute, ssgEnumerableHandler, } from "./src/content_route.js";
|
|
3
3
|
export { mountRiebeckiteEndpoints } from "./src/endpoints.js";
|