wails/website/docusaurus.config.js
Lea Anthony 17bb94bbbf
[Snyk] Fix for 11 vulnerabilities (#4695)
* fix: website/package.json to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-TRIM-1017038
- https://snyk.io/vuln/SNYK-JS-AXIOS-6032459
- https://snyk.io/vuln/SNYK-JS-WEBPACKDEVSERVER-10300775
- https://snyk.io/vuln/SNYK-JS-AXIOS-12613773
- https://snyk.io/vuln/SNYK-JS-AXIOS-9292519
- https://snyk.io/vuln/SNYK-JS-INFLIGHT-6095116
- https://snyk.io/vuln/SNYK-JS-WEBPACKDEVSERVER-10300777
- https://snyk.io/vuln/SNYK-JS-AXIOS-6124857
- https://snyk.io/vuln/SNYK-JS-AXIOS-9403194
- https://snyk.io/vuln/SNYK-JS-GOT-2932019
- https://snyk.io/vuln/SNYK-JS-SIRV-12558119

* Upgrade Docusaurus to v3.9.0 and fix compatibility issues

This commit upgrades Docusaurus from v2.4.3 to v3.9.0 to resolve the
security vulnerabilities identified by Snyk while ensuring the website
builds and runs correctly.

Changes:
- Upgraded React to v18 (required by Docusaurus v3)
- Updated @mdx-js/react to v3 (required by Docusaurus v3)
- Updated prism-react-renderer to v2 and modernized theme imports
- Removed custom webpack config (incompatible with v3)
- Converted Carousel import to ES6 syntax
- Fixed MDX syntax errors in French translations (removed Pandoc footnote syntax)

Result: Build succeeds for all 7 locales with 0 vulnerabilities.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Cloudflare build: upgrade Node version requirement

Cloudflare was using Node 18.14.0 which lacks URL.canParse (added in 18.17.0).
Docusaurus v3 and its dependencies require Node 20+.

Changes:
- Added .node-version file to specify Node 20.18.0
- Updated package.json engines to require Node >=20.0.0
- Added packageManager field hinting Bun usage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove incompatible packageManager field

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove .node-version to allow Bun-only builds

Cloudflare will use Bun directly without Node.js installation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove engines field to prevent Node auto-detection

Cloudflare was auto-installing Node 18.14.0 based on engines field.
Remove it to allow Bun-only builds via dashboard configuration.

Configure in Cloudflare dashboard:
- Build command: bun run build
- Install command: bun install
- Environment variable: NODE_VERSION=20.18.0 (if needed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Docusaurus v4 deprecation warning

Migrated onBrokenMarkdownLinks from root config to markdown.hooks
as required by Docusaurus v3.9+ (deprecated in v4).

Old: siteConfig.onBrokenMarkdownLinks
New: siteConfig.markdown.hooks.onBrokenMarkdownLinks

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix MDX syntax errors in remaining French translation files

Fixed v2.11.0 and v2.8.1 French translations that had invalid
Pandoc footnote syntax {.footnote-backref} incompatible with MDX v3.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-09 10:07:19 +11:00

260 lines
7 KiB
JavaScript

// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const { themes } = require("prism-react-renderer");
const lightCodeTheme = themes.github;
const darkCodeTheme = themes.dracula;
const { getTranslationProgress } = require("./src/api/crowdin.js");
module.exports = async function configCreatorAsync() {
const translationProgress = await getTranslationProgress();
return {
title: "Wails",
tagline: "",
url: "https://wails.io",
baseUrl: "/",
onBrokenLinks: "warn",
favicon: "img/favicon.ico",
organizationName: "wailsapp",
projectName: "wails",
markdown: {
hooks: {
onBrokenMarkdownLinks: "warn",
},
},
i18n: {
defaultLocale: "en",
locales: ["en", "zh-Hans", "ja", "ru", "ko", "fr", "pt"],
localeConfigs: {
en: {
label: "English",
direction: "ltr",
htmlLang: "en-US",
},
"zh-Hans": {
label: `简体中文 (${translationProgress["zh-CN"]}%)`,
direction: "ltr",
htmlLang: "zh-Hans",
},
ja: {
label: `日本語 (${translationProgress["ja"]}%)`,
direction: "ltr",
htmlLang: "ja-JP",
},
ru: {
label: `Русский (${translationProgress["ru"]}%)`,
direction: "ltr",
htmlLang: "ru-RU",
},
ko: {
label: `한국어 (${translationProgress["ko"]}%)`,
direction: "ltr",
htmlLang: "ko-KR",
},
fr: {
label: `Français (${translationProgress["fr"]}%)`,
direction: "ltr",
htmlLang: "fr",
},
pt: {
label: `Português (${translationProgress["pt-PT"]}%)`,
direction: "ltr",
htmlLang: "pt-PT",
},
},
},
plugins: [],
presets: [
[
"classic",
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
sidebarPath: require.resolve("./sidebars.js"),
// Please change this to your repo.
editUrl: "https://github.com/wailsapp/wails/edit/master/website",
},
blog: {
showReadingTime: true,
// Please change this to your repo.
editUrl:
"https://github.com/wailsapp/wails/edit/master/website/blog",
},
theme: {
customCss: [
require.resolve("./src/css/custom.css"),
require.resolve("./src/css/carousel.css"),
],
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: "",
logo: {
alt: "Wails Logo",
src: "img/wails-logo-horizontal.svg",
srcDark: "img/wails-logo-horizontal-dark.svg",
},
items: [
{
type: "docsVersionDropdown", //version
position: "left",
dropdownActiveClassDisabled: true,
dropdownItemsAfter: [],
},
{
to: "https://github.com/sponsors/leaanthony",
label: "Sponsor",
position: "left",
},
{
type: "doc",
docId: "introduction",
position: "right",
label: "Docs",
},
{
to: "/blog",
label: "Blog",
position: "right",
},
{
type: "dropdown",
label: "About",
position: "right",
items: [
{
to: "/faq",
label: "FAQ",
},
{
to: "/changelog",
label: "Changelog",
},
{
to: "/community-guide",
label: "Community Guide",
},
{
to: "/coc",
label: "Code of Conduct",
},
{
to: "/credits",
label: "Credits",
},
],
},
{
type: "localeDropdown",
position: "right",
dropdownItemsAfter: [
{
to: "/community-guide#documenting",
label: "Help Us Translate ❤",
},
],
},
{
href: "https://github.com/wailsapp/wails",
label: "GitHub",
position: "right",
},
{
type: "search",
position: "right",
},
],
},
footer: {
style: "dark",
logo: {
alt: "Wails Logo",
src: "img/wails-logo-horizontal.svg",
srcDark: "img/wails-logo-horizontal-dark.svg",
href: "https://github.com/wailsapp/wails",
width: 160,
height: 50,
},
links: [
{
title: "Docs",
items: [
{
label: "Introduction",
to: "/docs/introduction",
},
{
label: "Getting Started",
to: "/docs/gettingstarted/installation",
},
{
label: "Changelog",
to: "/changelog",
},
],
},
{
title: "Community",
items: [
{
label: "Github",
href: "https://github.com/wailsapp/wails",
},
{
label: "Twitter",
href: "https://twitter.com/wailsapp",
},
{
label: "Discord",
href: "https://discord.gg/JDdSxwjhGf",
},
],
},
{
title: "More",
items: [
{
label: "Blog",
to: "/blog",
},
{
label: "Awesome",
href: "https://github.com/wailsapp/awesome-wails",
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} Lea Anthony`,
},
tableOfContents: {
minHeadingLevel: 2,
maxHeadingLevel: 5,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
additionalLanguages: ["json5"],
},
colorMode: {
defaultMode: "light",
disableSwitch: false,
respectPrefersColorScheme: true,
},
algolia: {
appId: "AWTCNFZ4FF",
apiKey: "a6c0adbe611ee2535f3da5e8fd7b2200",
indexName: "wails",
contextualSearch: true,
},
}),
};
};