create-riebeckite 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +3 -3
  2. package/README_ja.md +1 -1
  3. package/dist/src/index.js +24 -24
  4. package/dist/src/scaffold/index.js +24 -24
  5. package/dist/src/scaffold/version.d.ts +1 -1
  6. package/dist/src/scaffold/wrangler-defaults.d.ts +1 -1
  7. package/package.json +2 -2
  8. package/templates/scaffold/base/app/global.d.ts +9 -3
  9. package/templates/scaffold/base/app/server.ts +2 -2
  10. package/templates/scaffold/base/vite.config.ts +3 -25
  11. package/templates/scaffold/presets/empty/app/routes/_404.tsx +18 -0
  12. package/templates/scaffold/presets/empty/app/routes/_renderer.tsx +1 -1
  13. package/templates/scaffold/presets/empty/app/routes/index.tsx +1 -1
  14. package/templates/scaffold/presets/empty/app/style.css +11 -0
  15. package/templates/scaffold/presets/minimal/app/routes/[slug{.+}].tsx +13 -32
  16. package/templates/scaffold/presets/minimal/app/routes/_404.tsx +18 -0
  17. package/templates/scaffold/presets/minimal/app/routes/_renderer.tsx +17 -53
  18. package/templates/scaffold/presets/minimal/app/routes/index.tsx +9 -19
  19. package/templates/scaffold/presets/minimal/app/style.css +13 -17
  20. package/templates/scaffold/presets/minimal/content/index.en.md +16 -6
  21. package/templates/scaffold/presets/showcase/app/components/site-header.tsx +10 -64
  22. package/templates/scaffold/presets/showcase/app/routes/[slug{.+}].tsx +15 -34
  23. package/templates/scaffold/presets/showcase/app/routes/_404.tsx +18 -0
  24. package/templates/scaffold/presets/showcase/app/routes/_renderer.tsx +31 -49
  25. package/templates/scaffold/presets/showcase/app/routes/index.tsx +19 -25
  26. package/templates/scaffold/presets/showcase/app/style.css +25 -37
  27. package/templates/scaffold/presets/showcase/content/Daily/2026-09-28.md +8 -0
  28. package/templates/scaffold/presets/showcase/content/Daily/2026-09-30.md +8 -0
  29. package/templates/scaffold/presets/showcase/content/Daily/2026-10-02.md +11 -0
  30. package/templates/scaffold/presets/showcase/content/index.de.md +16 -5
  31. package/templates/scaffold/presets/showcase/content/index.en.md +16 -5
  32. package/templates/scaffold/presets/showcase/content/index.es.md +16 -5
  33. package/templates/scaffold/presets/showcase/content/index.fr.md +16 -5
  34. package/templates/scaffold/presets/showcase/content/index.ja.md +16 -5
  35. package/templates/scaffold/presets/showcase/content/index.ko.md +16 -5
  36. package/templates/scaffold/presets/showcase/content/index.zh-CN.md +16 -5
  37. package/templates/scaffold/presets/starter/app/components/site-header.tsx +10 -64
  38. package/templates/scaffold/presets/starter/app/routes/[slug{.+}].tsx +15 -34
  39. package/templates/scaffold/presets/starter/app/routes/_404.tsx +18 -0
  40. package/templates/scaffold/presets/starter/app/routes/_renderer.tsx +31 -49
  41. package/templates/scaffold/presets/starter/app/routes/index.tsx +17 -25
  42. package/templates/scaffold/presets/starter/app/style.css +25 -37
  43. package/templates/scaffold/base/app/config.ts +0 -18
  44. package/templates/scaffold/base/app/constants/paths.ts +0 -10
  45. package/templates/scaffold/base/app/content.ts +0 -12
package/README.md CHANGED
@@ -36,9 +36,9 @@ The prompts ask, in order:
36
36
 
37
37
  `Separate GitHub repository` also asks for the content and site repositories,
38
38
  and GitHub Actions deployment is then configured for you. That setup is covered
39
- in the [content repository guide](../../docs/docs/guides/content-repositories.en.md).
39
+ in the [content repository guide](../../docs/docs/guides/content-repositories.md).
40
40
  Deployment can be added later, described in
41
- [Deployment](../../docs/docs/getting-started/deployment.en.md).
41
+ [Deployment](../../docs/docs/getting-started/deployment.md).
42
42
 
43
43
  ## Options
44
44
 
@@ -94,7 +94,7 @@ npx create-riebeckite my-site --github-actions \
94
94
  Set `content.directory` to `"content"`, add the documented repository secrets,
95
95
  then copy `github/notify-site.yml` into the content repository as
96
96
  `.github/workflows/notify-site.yml`. See the [separate-content deployment
97
- guide](https://github.com/Rerurate514/riebeckite/blob/main/docs/docs/guides/deployment/separate-content-repository.en.md).
97
+ guide](https://github.com/Rerurate514/riebeckite/blob/main/docs/docs/guides/deployment/separate-content-repository.md).
98
98
 
99
99
  `--content-repository` automatically configures the external checkout, the
100
100
  `content-updated` repository-dispatch receiver, and `github/notify-site.yml`.
package/README_ja.md CHANGED
@@ -35,7 +35,7 @@ npm exec riebeckite build
35
35
  | Content source | `This project`、`Separate GitHub repository` | 最初は `This project` |
36
36
  | デプロイ設定 | `GitHub Actions + Cloudflare Workers`、`Not now` | 手元で試すなら `Not now` |
37
37
 
38
- `Separate GitHub repository` を選ぶと content と site のリポジトリ名も入力し、GitHub Actions のデプロイ設定が自動で構成されます。この構成は[content repository ガイド](../../docs/docs/guides/content-repositories.md)に、デプロイの追加方法は [Deployment](../../docs/docs/getting-started/deployment.md) にあります。
38
+ `Separate GitHub repository` を選ぶと content と site のリポジトリ名も入力し、GitHub Actions のデプロイ設定が自動で構成されます。この構成は[content repository ガイド](../../docs/docs/guides/content-repositories.ja.md)に、デプロイの追加方法は [Deployment](../../docs/docs/getting-started/deployment.ja.md) にあります。
39
39
 
40
40
  ## オプション
41
41
 
package/dist/src/index.js CHANGED
@@ -633,7 +633,7 @@ var minimalTheme = {
633
633
  };
634
634
  var empty = {
635
635
  name: "empty",
636
- description: "A blank application shell: no plugins, no theme, no content, no components.",
636
+ description: "A blank canvas with only the Riebeckite wiring. Add the theme, plugins, and content yourself.",
637
637
  languages: [],
638
638
  theme: null,
639
639
  plugins: [],
@@ -642,7 +642,7 @@ var empty = {
642
642
  };
643
643
  var minimal = {
644
644
  name: "minimal",
645
- description: "The smallest useful site: Obsidian Markdown, the minimal theme, and one page.",
645
+ description: "The smallest readable site, for learning how a Riebeckite site is assembled.",
646
646
  languages: ["en"],
647
647
  theme: minimalTheme,
648
648
  plugins: [obsidianMarkdown],
@@ -651,7 +651,7 @@ var minimal = {
651
651
  };
652
652
  var starter = {
653
653
  name: "starter",
654
- description: "Recommended for most sites: a practical Markdown garden with search, discovery, and reading essentials.",
654
+ description: "Recommended default: a practical Markdown garden with search, navigation, and reading essentials.",
655
655
  languages: [...SCAFFOLD_LANGUAGES],
656
656
  theme: defaultTheme,
657
657
  plugins: [
@@ -679,7 +679,7 @@ var starter = {
679
679
  };
680
680
  var showcase = {
681
681
  name: "showcase",
682
- description: "Explore the complete Riebeckite ecosystem with rendered examples, reference pages, and local fixtures.",
682
+ description: "A feature-rich example that demonstrates the Riebeckite plugin ecosystem with rendered samples and references.",
683
683
  languages: [...SCAFFOLD_LANGUAGES],
684
684
  theme: showCaseTheme,
685
685
  plugins: [
@@ -1189,8 +1189,8 @@ import path3 from "node:path";
1189
1189
 
1190
1190
  // src/scaffold/content-pages.ts
1191
1191
  var HELPERS = {
1192
- en: "https://github.com/Rerurate514/riebeckite/blob/main/docs/README.en.md",
1193
- ja: "https://github.com/Rerurate514/riebeckite/blob/main/docs/README.md"
1192
+ en: "https://github.com/Rerurate514/riebeckite/blob/main/docs/README.md",
1193
+ ja: "https://github.com/Rerurate514/riebeckite/blob/main/docs/README.ja.md"
1194
1194
  };
1195
1195
  var PLUGIN_INDEX_URL = "https://github.com/Rerurate514/riebeckite/tree/main/packages/plugins";
1196
1196
  var THEMES_INDEX_URL = "https://github.com/Rerurate514/riebeckite/tree/main/packages/themes";
@@ -1349,7 +1349,7 @@ var PLUGIN_MARKDOWN_GUIDES = {
1349
1349
  },
1350
1350
  "@riebeckite/plugin-shortcodes": {
1351
1351
  summary: "Expands built-in shortcode syntax inside Markdown.",
1352
- markdown: '{{< youtube dQw4w9WgXcQ >}}\n\n{{< figure src="/images/demo.png" caption="Demo image" >}}'
1352
+ markdown: '::youtube[id=dQw4w9WgXcQ]\n\n::figure[Demo image]{src="/images/demo.png"}'
1353
1353
  },
1354
1354
  "@riebeckite/plugin-series": {
1355
1355
  summary: "Groups Markdown pages into a reading series using frontmatter.",
@@ -2589,7 +2589,7 @@ function referenceThemesContent(preset) {
2589
2589
  }
2590
2590
 
2591
2591
  // src/scaffold/version.ts
2592
- var RIEBECKITE_VERSION = "^0.0.19";
2592
+ var RIEBECKITE_VERSION = "^0.0.20";
2593
2593
 
2594
2594
  // src/scaffold/templates.ts
2595
2595
  function siteTemplateFiles(preset, variables, options = {}) {
@@ -2743,16 +2743,16 @@ var README_INTRO = {
2743
2743
  ja: "空の Riebeckite アプリケーションシェルです。テーマもプラグインもコンポーネントもコンテンツもなく、すべてを自由に追加できます。"
2744
2744
  },
2745
2745
  minimal: {
2746
- en: "The smallest useful Riebeckite site: Obsidian Markdown, the minimal theme, and a single page.",
2747
- ja: "最小限で実用的な Riebeckite サイトです。Obsidian マークダウン・minimal テーマ・1 ページ構成。"
2746
+ en: "The smallest readable Riebeckite site: Obsidian Markdown, the minimal theme, and a single page you can read end to end.",
2747
+ ja: "最小で読みやすい Riebeckite サイトです。Obsidian マークダウン・minimal テーマ・1 ページだけで、サイトの組み立て方を学べます。"
2748
2748
  },
2749
2749
  starter: {
2750
- en: "Recommended for most sites: a practical Markdown garden with search, discovery, and reading essentials.",
2751
- ja: "大半のサイトにおすすめの構成です。検索・発見・閲覧に必要な機能を備えた実用的な Markdown サイトを作れます。"
2750
+ en: "Recommended default: a practical Markdown garden with search, navigation, and reading essentials.",
2751
+ ja: "大半のサイトにおすすめの既定構成です。検索・ナビゲーション・閲覧に必要な機能を備えた実用的な Markdown サイトを作れます。"
2752
2752
  },
2753
2753
  showcase: {
2754
- en: "Explore the complete Riebeckite ecosystem with rendered examples, reference pages, and local fixtures.",
2755
- ja: "描画例・リファレンスページ・ローカルのフィクスチャで、Riebeckite のエコシステム全体を確認できる構成です。"
2754
+ en: "A feature-rich example that demonstrates the Riebeckite plugin ecosystem with rendered samples, reference pages, and local fixtures.",
2755
+ ja: "Riebeckite の Plugin エコシステムを実際に確認できる機能紹介用の構成です。描画例・リファレンスページ・ローカルのフィクスチャを含みます。"
2756
2756
  }
2757
2757
  };
2758
2758
  var README_WORDS = {
@@ -2771,7 +2771,7 @@ var README_WORDS = {
2771
2771
  noPlugins: "no plugins",
2772
2772
  single: "single language",
2773
2773
  configReference: "Configuration reference",
2774
- configReferenceBody: "`riebeckite.config.ts` already registers every plugin below with its full option set — the file doubles as the settings reference. Every option is documented in the plugin's package README.",
2774
+ configReferenceBody: "`riebeckite.config.ts` registers every plugin below with its full option set. Treat it as a starting point; the documented options live in the [configuration reference](https://riebeckite.dev/docs/reference/configuration-reference) and each plugin's package README.",
2775
2775
  factory: "Factory",
2776
2776
  options: "Options",
2777
2777
  emDash: "—",
@@ -2795,7 +2795,7 @@ var README_WORDS = {
2795
2795
  noPlugins: "プラグインなし",
2796
2796
  single: "単一言語",
2797
2797
  configReference: "設定リファレンス",
2798
- configReferenceBody: "`riebeckite.config.ts` には、以下の全プラグインがあらかじめ全オプション付きで登録されています。このファイル自体を設定リファレンスとして利用できます。各オプションの詳しい説明はプラグインパッケージの README を参照してください。",
2798
+ configReferenceBody: "`riebeckite.config.ts` には、以下の全プラグインが全オプション付きで登録されています。これは出発点として使い、設定の仕様は[設定リファレンス](https://riebeckite.dev/docs/reference/configuration-reference)と各プラグインパッケージの README を確認してください。",
2799
2799
  factory: "ファクトリ",
2800
2800
  options: "オプション",
2801
2801
  emDash: "—",
@@ -2863,8 +2863,8 @@ function readmeEn(preset, variables) {
2863
2863
  lines.push(`## ${words.extending}`, "");
2864
2864
  lines.push(words.extendingBody, "");
2865
2865
  lines.push(
2866
- `- Docs: [English](${REPO}/blob/main/docs/README.en.md)`,
2867
- ` · [日本語](${REPO}/blob/main/docs/README.md)`,
2866
+ `- Docs: [English](${REPO}/blob/main/docs/README.md)`,
2867
+ ` · [日本語](${REPO}/blob/main/docs/README.ja.md)`,
2868
2868
  ""
2869
2869
  );
2870
2870
  }
@@ -2924,8 +2924,8 @@ function readmeJa(preset, variables) {
2924
2924
  lines.push(`## ${words.extending}`, "");
2925
2925
  lines.push(words.extendingBody, "");
2926
2926
  lines.push(
2927
- `- ドキュメント: [English](${REPO}/blob/main/docs/README.en.md)`,
2928
- ` · [日本語](${REPO}/blob/main/docs/README.md)`,
2927
+ `- ドキュメント: [English](${REPO}/blob/main/docs/README.md)`,
2928
+ ` · [日本語](${REPO}/blob/main/docs/README.ja.md)`,
2929
2929
  ""
2930
2930
  );
2931
2931
  }
@@ -2955,7 +2955,7 @@ function deploymentSecretLines(language) {
2955
2955
  `- \`${GITHUB_ACTIONS_SECRETS.SITE_DISPATCH_TOKEN}\` — in the **content repository**. Lets its \`notify-site.yml\` dispatch updates to this site. Use a fine-grained token scoped to this site repository with **Contents: read and write**.`,
2956
2956
  `- \`${GITHUB_ACTIONS_SECRETS.CLOUDFLARE_API_TOKEN}\` and \`${GITHUB_ACTIONS_SECRETS.CLOUDFLARE_ACCOUNT_ID}\` — in **this site repository** for the Cloudflare deploy.`,
2957
2957
  "",
2958
- `The workflows reference these secret names and never contain their values. Never commit the values. See the [separate content repository guide](${REPO}/blob/main/docs/docs/guides/deployment/separate-content-repository.en.md) for the full setup.`,
2958
+ `The workflows reference these secret names and never contain their values. Never commit the values. See the [separate content repository guide](${REPO}/blob/main/docs/docs/guides/deployment/separate-content-repository.md) for the full setup.`,
2959
2959
  ""
2960
2960
  ];
2961
2961
  }
@@ -3198,15 +3198,15 @@ var README_DEMOS = {
3198
3198
  " - title: Default",
3199
3199
  " description: A clean, typographic theme.",
3200
3200
  " meta: v0.0.5",
3201
- " href: https://example.com/themes/default/",
3201
+ " href: https://riebeckite.dev/docs/themes/default",
3202
3202
  " - title: Minimal",
3203
3203
  " description: Stripped back to the essentials.",
3204
3204
  " meta: v0.0.5",
3205
- " href: https://example.com/themes/minimal/",
3205
+ " href: https://riebeckite.dev/docs/themes/minimal",
3206
3206
  " - title: Gruvbox",
3207
3207
  " description: A warm, high-contrast palette.",
3208
3208
  " meta: v0.0.5",
3209
- " href: https://example.com/themes/gruvbox/"
3209
+ " href: https://riebeckite.dev/docs/themes/gruvbox"
3210
3210
  ].join("\n")
3211
3211
  )
3212
3212
  },
@@ -633,7 +633,7 @@ var minimalTheme = {
633
633
  };
634
634
  var empty = {
635
635
  name: "empty",
636
- description: "A blank application shell: no plugins, no theme, no content, no components.",
636
+ description: "A blank canvas with only the Riebeckite wiring. Add the theme, plugins, and content yourself.",
637
637
  languages: [],
638
638
  theme: null,
639
639
  plugins: [],
@@ -642,7 +642,7 @@ var empty = {
642
642
  };
643
643
  var minimal = {
644
644
  name: "minimal",
645
- description: "The smallest useful site: Obsidian Markdown, the minimal theme, and one page.",
645
+ description: "The smallest readable site, for learning how a Riebeckite site is assembled.",
646
646
  languages: ["en"],
647
647
  theme: minimalTheme,
648
648
  plugins: [obsidianMarkdown],
@@ -651,7 +651,7 @@ var minimal = {
651
651
  };
652
652
  var starter = {
653
653
  name: "starter",
654
- description: "Recommended for most sites: a practical Markdown garden with search, discovery, and reading essentials.",
654
+ description: "Recommended default: a practical Markdown garden with search, navigation, and reading essentials.",
655
655
  languages: [...SCAFFOLD_LANGUAGES],
656
656
  theme: defaultTheme,
657
657
  plugins: [
@@ -679,7 +679,7 @@ var starter = {
679
679
  };
680
680
  var showcase = {
681
681
  name: "showcase",
682
- description: "Explore the complete Riebeckite ecosystem with rendered examples, reference pages, and local fixtures.",
682
+ description: "A feature-rich example that demonstrates the Riebeckite plugin ecosystem with rendered samples and references.",
683
683
  languages: [...SCAFFOLD_LANGUAGES],
684
684
  theme: showCaseTheme,
685
685
  plugins: [
@@ -776,8 +776,8 @@ function resolveScaffoldPreset(value) {
776
776
 
777
777
  // src/scaffold/content-pages.ts
778
778
  var HELPERS = {
779
- en: "https://github.com/Rerurate514/riebeckite/blob/main/docs/README.en.md",
780
- ja: "https://github.com/Rerurate514/riebeckite/blob/main/docs/README.md"
779
+ en: "https://github.com/Rerurate514/riebeckite/blob/main/docs/README.md",
780
+ ja: "https://github.com/Rerurate514/riebeckite/blob/main/docs/README.ja.md"
781
781
  };
782
782
  var PLUGIN_INDEX_URL = "https://github.com/Rerurate514/riebeckite/tree/main/packages/plugins";
783
783
  var THEMES_INDEX_URL = "https://github.com/Rerurate514/riebeckite/tree/main/packages/themes";
@@ -936,7 +936,7 @@ var PLUGIN_MARKDOWN_GUIDES = {
936
936
  },
937
937
  "@riebeckite/plugin-shortcodes": {
938
938
  summary: "Expands built-in shortcode syntax inside Markdown.",
939
- markdown: '{{< youtube dQw4w9WgXcQ >}}\n\n{{< figure src="/images/demo.png" caption="Demo image" >}}'
939
+ markdown: '::youtube[id=dQw4w9WgXcQ]\n\n::figure[Demo image]{src="/images/demo.png"}'
940
940
  },
941
941
  "@riebeckite/plugin-series": {
942
942
  summary: "Groups Markdown pages into a reading series using frontmatter.",
@@ -2259,7 +2259,7 @@ function utilityTemplateFiles(utilities) {
2259
2259
  }
2260
2260
 
2261
2261
  // src/scaffold/version.ts
2262
- var RIEBECKITE_VERSION = "^0.0.19";
2262
+ var RIEBECKITE_VERSION = "^0.0.20";
2263
2263
 
2264
2264
  // src/scaffold/templates.ts
2265
2265
  function siteTemplateFiles(preset, variables, options = {}) {
@@ -2413,16 +2413,16 @@ var README_INTRO = {
2413
2413
  ja: "空の Riebeckite アプリケーションシェルです。テーマもプラグインもコンポーネントもコンテンツもなく、すべてを自由に追加できます。"
2414
2414
  },
2415
2415
  minimal: {
2416
- en: "The smallest useful Riebeckite site: Obsidian Markdown, the minimal theme, and a single page.",
2417
- ja: "最小限で実用的な Riebeckite サイトです。Obsidian マークダウン・minimal テーマ・1 ページ構成。"
2416
+ en: "The smallest readable Riebeckite site: Obsidian Markdown, the minimal theme, and a single page you can read end to end.",
2417
+ ja: "最小で読みやすい Riebeckite サイトです。Obsidian マークダウン・minimal テーマ・1 ページだけで、サイトの組み立て方を学べます。"
2418
2418
  },
2419
2419
  starter: {
2420
- en: "Recommended for most sites: a practical Markdown garden with search, discovery, and reading essentials.",
2421
- ja: "大半のサイトにおすすめの構成です。検索・発見・閲覧に必要な機能を備えた実用的な Markdown サイトを作れます。"
2420
+ en: "Recommended default: a practical Markdown garden with search, navigation, and reading essentials.",
2421
+ ja: "大半のサイトにおすすめの既定構成です。検索・ナビゲーション・閲覧に必要な機能を備えた実用的な Markdown サイトを作れます。"
2422
2422
  },
2423
2423
  showcase: {
2424
- en: "Explore the complete Riebeckite ecosystem with rendered examples, reference pages, and local fixtures.",
2425
- ja: "描画例・リファレンスページ・ローカルのフィクスチャで、Riebeckite のエコシステム全体を確認できる構成です。"
2424
+ en: "A feature-rich example that demonstrates the Riebeckite plugin ecosystem with rendered samples, reference pages, and local fixtures.",
2425
+ ja: "Riebeckite の Plugin エコシステムを実際に確認できる機能紹介用の構成です。描画例・リファレンスページ・ローカルのフィクスチャを含みます。"
2426
2426
  }
2427
2427
  };
2428
2428
  var README_WORDS = {
@@ -2441,7 +2441,7 @@ var README_WORDS = {
2441
2441
  noPlugins: "no plugins",
2442
2442
  single: "single language",
2443
2443
  configReference: "Configuration reference",
2444
- configReferenceBody: "`riebeckite.config.ts` already registers every plugin below with its full option set — the file doubles as the settings reference. Every option is documented in the plugin's package README.",
2444
+ configReferenceBody: "`riebeckite.config.ts` registers every plugin below with its full option set. Treat it as a starting point; the documented options live in the [configuration reference](https://riebeckite.dev/docs/reference/configuration-reference) and each plugin's package README.",
2445
2445
  factory: "Factory",
2446
2446
  options: "Options",
2447
2447
  emDash: "—",
@@ -2465,7 +2465,7 @@ var README_WORDS = {
2465
2465
  noPlugins: "プラグインなし",
2466
2466
  single: "単一言語",
2467
2467
  configReference: "設定リファレンス",
2468
- configReferenceBody: "`riebeckite.config.ts` には、以下の全プラグインがあらかじめ全オプション付きで登録されています。このファイル自体を設定リファレンスとして利用できます。各オプションの詳しい説明はプラグインパッケージの README を参照してください。",
2468
+ configReferenceBody: "`riebeckite.config.ts` には、以下の全プラグインが全オプション付きで登録されています。これは出発点として使い、設定の仕様は[設定リファレンス](https://riebeckite.dev/docs/reference/configuration-reference)と各プラグインパッケージの README を確認してください。",
2469
2469
  factory: "ファクトリ",
2470
2470
  options: "オプション",
2471
2471
  emDash: "—",
@@ -2533,8 +2533,8 @@ function readmeEn(preset, variables) {
2533
2533
  lines.push(`## ${words.extending}`, "");
2534
2534
  lines.push(words.extendingBody, "");
2535
2535
  lines.push(
2536
- `- Docs: [English](${REPO}/blob/main/docs/README.en.md)`,
2537
- ` · [日本語](${REPO}/blob/main/docs/README.md)`,
2536
+ `- Docs: [English](${REPO}/blob/main/docs/README.md)`,
2537
+ ` · [日本語](${REPO}/blob/main/docs/README.ja.md)`,
2538
2538
  ""
2539
2539
  );
2540
2540
  }
@@ -2594,8 +2594,8 @@ function readmeJa(preset, variables) {
2594
2594
  lines.push(`## ${words.extending}`, "");
2595
2595
  lines.push(words.extendingBody, "");
2596
2596
  lines.push(
2597
- `- ドキュメント: [English](${REPO}/blob/main/docs/README.en.md)`,
2598
- ` · [日本語](${REPO}/blob/main/docs/README.md)`,
2597
+ `- ドキュメント: [English](${REPO}/blob/main/docs/README.md)`,
2598
+ ` · [日本語](${REPO}/blob/main/docs/README.ja.md)`,
2599
2599
  ""
2600
2600
  );
2601
2601
  }
@@ -2625,7 +2625,7 @@ function deploymentSecretLines(language) {
2625
2625
  `- \`${GITHUB_ACTIONS_SECRETS.SITE_DISPATCH_TOKEN}\` — in the **content repository**. Lets its \`notify-site.yml\` dispatch updates to this site. Use a fine-grained token scoped to this site repository with **Contents: read and write**.`,
2626
2626
  `- \`${GITHUB_ACTIONS_SECRETS.CLOUDFLARE_API_TOKEN}\` and \`${GITHUB_ACTIONS_SECRETS.CLOUDFLARE_ACCOUNT_ID}\` — in **this site repository** for the Cloudflare deploy.`,
2627
2627
  "",
2628
- `The workflows reference these secret names and never contain their values. Never commit the values. See the [separate content repository guide](${REPO}/blob/main/docs/docs/guides/deployment/separate-content-repository.en.md) for the full setup.`,
2628
+ `The workflows reference these secret names and never contain their values. Never commit the values. See the [separate content repository guide](${REPO}/blob/main/docs/docs/guides/deployment/separate-content-repository.md) for the full setup.`,
2629
2629
  ""
2630
2630
  ];
2631
2631
  }
@@ -2868,15 +2868,15 @@ var README_DEMOS = {
2868
2868
  " - title: Default",
2869
2869
  " description: A clean, typographic theme.",
2870
2870
  " meta: v0.0.5",
2871
- " href: https://example.com/themes/default/",
2871
+ " href: https://riebeckite.dev/docs/themes/default",
2872
2872
  " - title: Minimal",
2873
2873
  " description: Stripped back to the essentials.",
2874
2874
  " meta: v0.0.5",
2875
- " href: https://example.com/themes/minimal/",
2875
+ " href: https://riebeckite.dev/docs/themes/minimal",
2876
2876
  " - title: Gruvbox",
2877
2877
  " description: A warm, high-contrast palette.",
2878
2878
  " meta: v0.0.5",
2879
- " href: https://example.com/themes/gruvbox/"
2879
+ " href: https://riebeckite.dev/docs/themes/gruvbox"
2880
2880
  ].join("\n")
2881
2881
  )
2882
2882
  },
@@ -1 +1 @@
1
- export declare const RIEBECKITE_VERSION = "^0.0.19";
1
+ export declare const RIEBECKITE_VERSION = "^0.0.20";
@@ -37,7 +37,7 @@ export declare const PACKAGE_MANAGER: "npm";
37
37
  /** Lockfile name that must be committed */
38
38
  export declare const LOCKFILE_NAME: "package-lock.json";
39
39
  /** Files/directories that must be in .gitignore */
40
- export declare const GITIGNORE_REQUIRED: readonly ["node_modules/", "dist/", ".riebeckite/", "app/.riebeckite/"];
40
+ export declare const GITIGNORE_REQUIRED: readonly ["node_modules/", "dist/", ".riebeckite/", "app/.riebeckite/", ".wrangler/", ".dev.vars"];
41
41
  /** Files that must NOT be in .gitignore */
42
42
  export declare const GITIGNORE_FORBIDDEN: readonly ["package-lock.json"];
43
43
  /** Starter preset content pages (base names without language suffixes) */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-riebeckite",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "esbuild": "^0.28.2",
42
- "@riebeckite/test": "0.0.19"
42
+ "@riebeckite/test": "0.0.20"
43
43
  },
44
44
  "repository": {
45
45
  "type": "git",
@@ -1,13 +1,19 @@
1
- import type { PluginHeadTag } from "@riebeckite/core";
2
-
3
1
  declare module "virtual:riebeckite/client" {
4
2
  export function initRiebeckiteClient(): void;
5
3
  }
6
4
 
5
+ declare module "virtual:riebeckite/config" {
6
+ export const config: import("@riebeckite/core").ResolvedRiebeckiteConfig;
7
+ }
8
+
9
+ declare module "virtual:riebeckite/content" {
10
+ export const content: import("@riebeckite/core").ContentManager;
11
+ }
12
+
7
13
  declare module "hono" {
8
14
  interface Env {
9
15
  Variables: {
10
- headTags?: readonly PluginHeadTag[];
16
+ headTags?: readonly import("@riebeckite/core").PluginHeadTag[];
11
17
  htmlLanguage?: string;
12
18
  };
13
19
  Bindings: Record<string, never>;
@@ -1,7 +1,7 @@
1
1
  import { mountRiebeckiteEndpoints } from "@riebeckite/honox/server";
2
2
  import { createApp } from "honox/server";
3
- import { config } from "./config";
4
- import { content } from "./content";
3
+ import { config } from "virtual:riebeckite/config";
4
+ import { content } from "virtual:riebeckite/content";
5
5
 
6
6
  const app = createApp({
7
7
  init: (app) => {
@@ -1,34 +1,12 @@
1
- import path from "node:path";
2
- import { fileURLToPath } from "node:url";
3
1
  import build from "@hono/vite-build/node";
4
- import {
5
- defaultSsrExternals,
6
- riebeckite,
7
- riebeckiteSsg,
8
- riebeckiteSsgExtensionMap,
9
- } from "@riebeckite/honox";
2
+ import { riebeckiteVite } from "@riebeckite/honox";
10
3
  import honox from "honox/vite";
11
4
  import { defineConfig } from "vite";
12
5
 
13
- const appRoot = fileURLToPath(new URL(".", import.meta.url));
14
-
15
6
  export default defineConfig({
16
7
  plugins: [
17
- honox({
18
- client: { input: ["/app/client.ts", "/app/style.css"] },
19
- }),
20
- riebeckite({ appRoot }),
8
+ honox({ client: { input: ["/app/client.ts", "/app/style.css"] } }),
9
+ ...riebeckiteVite(),
21
10
  build(),
22
- riebeckiteSsg({
23
- entry: path.join(appRoot, "app/server.ts"),
24
- extensionMap: riebeckiteSsgExtensionMap(),
25
- }),
26
11
  ],
27
- environments: {
28
- ssr: {
29
- resolve: {
30
- external: [...defaultSsrExternals],
31
- },
32
- },
33
- },
34
12
  });
@@ -0,0 +1,18 @@
1
+ import type { NotFoundHandler } from "hono";
2
+
3
+ const handler: NotFoundHandler = (c) => {
4
+ c.status(404);
5
+
6
+ return c.render(
7
+ <main class="not-found">
8
+ <p class="not-found__status">404</p>
9
+ <h1>Page not found</h1>
10
+ <p>The page you requested does not exist or is not available.</p>
11
+ <p>
12
+ <a href="/">Back to home</a>
13
+ </p>
14
+ </main>,
15
+ );
16
+ };
17
+
18
+ export default handler;
@@ -1,6 +1,6 @@
1
1
  import { jsxRenderer } from "hono/jsx-renderer";
2
2
  import { Link, Script } from "honox/server";
3
- import { config } from "../config";
3
+ import { config } from "virtual:riebeckite/config";
4
4
 
5
5
  // Riebeckite plugin client entries need the HonoX client bundle even without
6
6
  // an island component.
@@ -1,5 +1,5 @@
1
1
  import { createRoute } from "honox/factory";
2
- import { config } from "../config";
2
+ import { config } from "virtual:riebeckite/config";
3
3
 
4
4
  export default createRoute((c) =>
5
5
  c.render(
@@ -15,3 +15,14 @@ body {
15
15
  padding: 4rem 1rem;
16
16
  margin: 0 auto;
17
17
  }
18
+
19
+ .not-found {
20
+ max-width: 48rem;
21
+ padding: 4rem 1rem;
22
+ margin: 0 auto;
23
+ }
24
+
25
+ .not-found__status {
26
+ margin: 0;
27
+ font-weight: 700;
28
+ }
@@ -1,48 +1,29 @@
1
- import { getEntryLanguage } from "@riebeckite/core";
2
1
  import {
3
2
  contentRouteSsgParams,
4
- pluginPageSsgParams,
5
- resolveRiebeckiteRoute,
3
+ resolveRiebeckiteContentRequest,
4
+ riebeckiteSsgParams,
6
5
  } from "@riebeckite/honox/server";
6
+ import { PageBody } from "@riebeckite/honox/ui";
7
7
  import { createRoute } from "honox/factory";
8
8
  import { SiteArticle } from "../components/article";
9
- import { content } from "../content";
9
+ import { content } from "virtual:riebeckite/content";
10
10
 
11
11
  export default createRoute(
12
- contentRouteSsgParams("/:slug{.+}", async () => {
13
- const manifest = await content.getManifest();
14
- const contentPaths = manifest.publicEntries
15
- .filter((entry) => entry.permalink !== "/")
16
- .map((entry) => ({ slug: entry.permalink.replace(/^\/+/, "") }));
17
- return [...contentPaths, ...(await pluginPageSsgParams(content))];
18
- }),
12
+ contentRouteSsgParams("/:slug{.+}", () => riebeckiteSsgParams(content)),
19
13
  async (c) => {
20
- const requestedSlug = c.req.param("slug");
21
- if (!requestedSlug) return c.notFound();
22
- if (/\.[a-zA-Z0-9]+$/.test(requestedSlug)) return c.notFound();
14
+ const resolved = await resolveRiebeckiteContentRequest(c, content);
23
15
 
24
- const route = await resolveRiebeckiteRoute(content, c.req.path);
25
- if (!route) return c.notFound();
26
- if (route.kind === "redirect")
27
- return c.redirect(route.location, route.status);
28
- if (route.kind === "page") {
29
- c.set("headTags", route.page.headTags ?? []);
30
- c.set("htmlLanguage", route.page.language);
31
- return c.render(
32
- <div dangerouslySetInnerHTML={{ __html: route.page.body }} />,
33
- );
34
- }
35
-
36
- const post = await content.getProcessedContent(route.entry.slug);
16
+ if (resolved.kind === "response") return resolved.response;
37
17
 
38
- c.set("htmlLanguage", getEntryLanguage(route.entry));
39
- c.set("headTags", route.entry.headTags ?? []);
18
+ if (resolved.kind === "page") {
19
+ return c.render(<PageBody html={resolved.page.body} />);
20
+ }
40
21
 
41
22
  return c.render(
42
23
  <SiteArticle
43
- post={post}
44
- bodySlots={route.entry.bodySlots}
24
+ post={resolved.post}
25
+ bodySlots={resolved.entry.bodySlots}
45
26
  />,
46
27
  );
47
28
  },
48
- );
29
+ );
@@ -0,0 +1,18 @@
1
+ import type { NotFoundHandler } from "hono";
2
+
3
+ const handler: NotFoundHandler = (c) => {
4
+ c.status(404);
5
+
6
+ return c.render(
7
+ <main class="not-found">
8
+ <p class="not-found__status">404</p>
9
+ <h1>Page not found</h1>
10
+ <p>The page you requested does not exist or is not available.</p>
11
+ <p>
12
+ <a href="/">Back to home</a>
13
+ </p>
14
+ </main>,
15
+ );
16
+ };
17
+
18
+ export default handler;