wasp/web/docusaurus.config.js
Mihovil Ilakovac 481e85901b
Add proxied Plausible analytics using Docosaurus (#2370)
Signed-off-by: Mihovil Ilakovac <mihovil@ilakovac.com>
2024-11-14 17:00:28 +01:00

321 lines
9.9 KiB
JavaScript

const lightCodeTheme = require('prism-react-renderer/themes/github')
const autoImportTabs = require('./src/remark/auto-import-tabs')
const fileExtSwitcher = require('./src/remark/file-ext-switcher')
const includeCurrentVersion =
process.env.DOCS_INCLUDE_CURRENT_VERSION === 'true'
const isProduction = process.env.NODE_ENV === 'production'
/** @type {import('@docusaurus/types').DocusaurusConfig} */
module.exports = {
title: 'Wasp',
tagline:
'A simple language for developing full-stack web apps with less code.',
// url, baseUrl, organizationName, projectName and trailingSlash are set according to the
// instructions in https://docusaurus.io/docs/deployment#deploying-to-github-pages .
url: 'https://wasp-lang.dev',
baseUrl: '/', // Should be name of repo if hosted on Github Pages, but can be just '/' if custom domain is used.
organizationName: 'wasp-lang', // Should be GitHub org/user name if hosted on Github Pages.
projectName: 'wasp', // Should be repo name if hosted on Github Pages.
trailingSlash: false,
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
stylesheets: [
'https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap',
],
themeConfig: {
announcementBar: {
id: 'LW7',
content:
'<b>Wasp v0.15 is here!</b> 🐝 <a href="/blog/2024/09/30/wasp-launch-week-7">See what\'s new ⚙️</a>',
backgroundColor: '#eab307',
textColor: '#fff',
isCloseable: false,
},
imageZoom: {
// CSS selector to apply the plugin to, defaults to '.markdown img'
//selector: '.markdown img',
// Optional medium-zoom options
// see: https://www.npmjs.com/package/medium-zoom#options
options: {
/*
margin: 24,
background: '#BADA55',
scrollOffset: 0,
container: '#zoom-container',
template: '#zoom-template',
*/
},
},
navbar: {
title: '.wasp (beta)',
logo: {
alt: 'Wasp logo',
src: 'img/wasp-logo-eqpar-circle.png',
href: 'https://wasp-lang.dev/',
target: '_self',
},
items: [
{
type: 'docsVersion',
position: 'left',
label: 'Docs',
className: 'navbar-item-docs navbar-item-outside',
},
{
type: 'docsVersionDropdown',
position: 'left',
className: 'navbar-item-docs-version-dropdown',
},
{
to: 'blog',
label: 'Blog',
position: 'left',
},
{
href: 'https://github.com/wasp-lang/wasp',
className: 'navbar-item-github',
position: 'right',
},
{
href: 'https://twitter.com/WaspLang',
className: 'navbar-item-twitter',
position: 'right',
},
{
href: 'https://discord.gg/rzdnErX',
className: 'navbar-item-discord',
position: 'right',
},
],
},
prism: {
additionalLanguages: ['shell-session', 'haskell'],
theme: lightCodeTheme,
},
footer: {
style: 'dark',
links: [
{
title: 'Docs',
items: [
{
label: 'Getting started',
to: 'docs',
},
{
label: 'Todo app tutorial',
to: 'docs/tutorial/create',
},
],
},
{
title: 'Community',
items: [
{
label: 'Discord',
href: 'https://discord.gg/rzdnErX',
},
],
},
{
title: 'More',
items: [
{
label: 'GitHub',
href: 'https://github.com/wasp-lang/wasp',
},
{
label: 'Contact',
to: 'docs/contact',
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} Wasp.`,
},
algolia: {
appId: 'RG0JSZOWH4',
apiKey: 'feaa2a25dc596d40418c82cd040e2cbe',
indexName: 'wasp-lang',
// ContextualSearch is useful when you are doing versioning,
// it searches only in v1 docs if you are searching from v1 docs.
// Therefore we have it enabled, since we have multiple doc versions.
contextualSearch: true,
},
image: 'img/wasp_twitter_cover.png',
metadata: [{ name: 'twitter:card', content: 'summary_large_image' }],
},
presets: [
[
'@docusaurus/preset-classic',
{
gtag: {
trackingID: 'GTM-PQ4JFCK',
anonymizeIP: true,
},
docs: {
sidebarPath: require.resolve('./sidebars.js'),
sidebarCollapsible: true,
editUrl: 'https://github.com/wasp-lang/wasp/edit/release/web',
remarkPlugins: [autoImportTabs, fileExtSwitcher],
// ------ Configuration for multiple docs versions ------ //
// "current" docs (under /docs) are in-progress docs, so we show them only in development.
includeCurrentVersion,
// In development, we want "current" docs to be the default docs (served at /docs),
// to make it easier for us a bit. Otherwise, by default, the latest versioned docs
// will be served under /docs.
lastVersion: includeCurrentVersion ? 'current' : undefined,
// Uncomment line below to build and show only current docs, for faster build times
// during development, if/when needed.
// onlyIncludeVersions: includeCurrentVersion ? ["current"] : undefined,
// "versions" option here enables us to customize each version of docs individually,
// and there are also other options if we ever need to customize versioned docs further.
versions: {
// We provide config for `current` only during development because otherwise
// we don't even build them (due to includeCurrentVersion above), so this config
// would cause error in that case.
...(includeCurrentVersion
? {
current: {
label: 'Next', // Label shown in the documentation to address this version of docs.
noIndex: true, // these are un-released docs, we don't want search engines indexing them.
},
}
: {}),
// Configuration example:
// "0.11.1": {
// path: "0.11.1", // default, but can be anything.
// label: "0.11.1", // default, but can be anything.
// banner: "unmaintained"
// // and more!
// },
},
// ------------------------------------------------------ //
},
blog: {
showReadingTime: true,
blogSidebarCount: 'ALL',
blogSidebarTitle: 'All our posts',
postsPerPage: 'ALL',
editUrl: 'https://github.com/wasp-lang/wasp/edit/release/web',
},
theme: {
customCss: [require.resolve('./src/css/custom.css')],
},
},
],
],
scripts: getScripts(),
plugins: [
'plugin-image-zoom',
async function myPlugin(context, options) {
return {
name: 'docusaurus-tailwindcss',
configurePostCss(postcssOptions) {
// Appends TailwindCSS and AutoPrefixer.
postcssOptions.plugins.push(require('tailwindcss'))
postcssOptions.plugins.push(require('autoprefixer'))
return postcssOptions
},
}
},
// This plugin is always inactive in development and only active in
// production because it works on the build output.
[
'@docusaurus/plugin-client-redirects',
{
redirects: [
{
from: '/docs/guides/auth-ui',
to: '/docs/auth/ui',
},
{
from: '/docs/deploying',
to: '/docs/advanced/deployment/overview',
},
{
from: '/docs/guides/username-password',
to: '/docs/auth/username-and-pass',
},
{
from: '/docs/guides/websockets',
to: '/docs/advanced/web-sockets',
},
{
from: '/docs/guides/testing',
to: '/docs/project/testing',
},
{
from: '/docs/guides/middleware-customization',
to: '/docs/advanced/middleware-config',
},
{
from: '/docs/guides/email-auth',
to: '/docs/auth/email',
},
{
from: '/docs/guides/crud',
to: '/docs/data-model/crud',
},
{
from: '/docs/integrations/google',
to: '/docs/auth/social-auth/google',
},
{
from: '/docs/integrations/github',
to: '/docs/auth/social-auth/github',
},
{
from: '/docs/integrations/css-frameworks',
to: '/docs/project/css-frameworks',
},
{
from: '/docs/tutorials/todo-app',
to: '/docs/tutorial/create',
},
{
from: '/docs/migrate-from-0-11-to-0-12',
to: '/docs/migration-guides/migrate-from-0-11-to-0-12',
},
{
from: '/docs/migrate-from-0-12-to-0-13',
to: '/docs/migration-guides/migrate-from-0-12-to-0-13',
},
{
from: '/docs/migrate-from-0-13-to-0-14',
to: '/docs/migration-guides/migrate-from-0-13-to-0-14',
},
],
},
],
],
}
function getScripts() {
const scripts = [
'/scripts/posthog.js',
'/js/fix-multiple-trailing-slashes.js',
]
if (isProduction) {
// Using Cloudflare Workers to proxy the analytics script
scripts.push({
src: '/waspara/wasp/script.js',
defer: true,
'data-domain': 'wasp-lang.dev',
'data-api': '/waspara/wasp/event',
})
}
return scripts
}