import { NuxtConfig } from '@nuxt/types' import { getTheme } from './server/theme' const config = async (): Promise => { const theme = getTheme() const PORT = process.env.PORT || '3000' return { // Global page headers (https://go.nuxtjs.dev/config-head) head: { title: theme.title, meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { hid: 'description', name: 'description', content: theme.description || '', }, ], link: [ { rel: 'icon', type: 'image/x-icon', href: '/media/favicon.ico' }, { rel: 'stylesheet', href: theme.awsm ? `https://unpkg.com/awsm.css/dist/awsm_theme_${theme.awsm}.min.css` : 'https://unpkg.com/awsm.css/dist/awsm.min.css', }, ], script: [ ...(theme.analytics?.plausible ? [ { src: 'https://plausible.io/js/plausible.js', async: true, defer: true, 'data-domain': theme.analytics?.plausible, }, ] : []), { src: 'https://unpkg.com/@webcomponents/webcomponentsjs/webcomponents-loader.js', defer: true, }, { type: 'module', src: '/webcomponents.js', }, ], }, // Global CSS (https://go.nuxtjs.dev/config-css) css: [], // Plugins to run before rendering page (https://go.nuxtjs.dev/config-plugins) plugins: [ '~/plugins/axios-fix.ts', '~/plugins/format.ts', '~/plugins/remark42.client.js', ], // Auto import components (https://go.nuxtjs.dev/config-components) components: true, // Modules for dev and build (recommended) (https://go.nuxtjs.dev/config-modules) buildModules: [ // https://go.nuxtjs.dev/typescript '@nuxt/typescript-build', ], // Modules (https://go.nuxtjs.dev/config-modules) modules: ['@nuxtjs/axios'], // Build Configuration (https://go.nuxtjs.dev/config-build) build: {}, env: { THEME: JSON.stringify(theme), PORT, }, serverMiddleware: [{ path: '/api', handler: '~/server/index.ts' }], } } export default config