nova-ui/nuxt.config.ts
Tornado Contrib 355e1e88ce
Build worker by additional webpack config and transpile services by hand
Either ts-loader or babel-loader to bundle workers didn't work properly so I transpiled them by hand
2024-05-08 20:13:37 +00:00

169 lines
4.4 KiB
TypeScript

import type { NuxtConfig } from '@nuxt/types'
import webpack from 'webpack'
import { execSync } from 'child_process'
function getCurrentCommit() {
try {
const from = 0
const length = 7
return execSync('git rev-parse HEAD').toString().trim().substr(from, length)
} catch (e) {
console.error('Failed to get git commit', e.message)
return 'debug'
}
}
const config: NuxtConfig = {
target: 'static',
ssr: false,
generate: {
concurrency: 1,
fallback: true,
},
head: {
title: 'Tornado Cash Nova',
htmlAttrs: {
lang: 'en',
},
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1.0' },
{
hid: 'description',
name: 'description',
content: 'Non-custodial Ethereum Privacy solution with arbitrary amounts and shielded transfers.',
},
{
name: 'keywords',
content: 'Privacy, Ethereum, ERC20, dapp, smart contract, decentralized, metamask, zksnark, zero knowledge',
},
{
name: 'author',
content: 'Tornado.cash',
},
{
name: 'msapplication-TileColor',
content: '#1d1e23',
},
{ name: 'theme-color', content: '#1d1e23' },
{ property: 'og:type', content: 'website' },
{ property: 'og:title', content: 'Tornado.cash Nova' },
{ property: 'og:site_name', content: 'Tornado.cash Nova' },
{ property: 'og:image:type', content: 'image/png' },
{ property: 'og:image:width', content: '1200' },
{ property: 'og:image:height', content: '1200' },
{ property: 'og:image', content: 'https://tornado.cash/nova.png' },
{ name: 'twitter:card', content: 'summary' },
{ name: 'twitter:site', content: '@TornadoCash' },
{ name: 'twitter:domain', content: 'https://tornado.cash' },
{ name: 'twitter:title', content: 'Tornado.cash Nova' },
{
name: 'twitter:description',
content: 'Non-custodial Ethereum Privacy solution with arbitrary amounts and shielded transfers.',
},
{ name: 'twitter:image:src', content: 'https://tornado.cash/nova.png' },
{ name: 'twitter:image:alt', content: 'Tornado.cash' },
],
link: [
{ rel: 'icon', href: '/icons/favicon.ico', sizes: 'any' },
{ rel: 'icon', href: '/icons/icon.svg', type: 'image/svg+xml' },
{ rel: 'apple-touch-icon', href: '/icons/apple-touch-icon.png' },
{ rel: 'manifest', href: '/manifest.webmanifest' },
{ rel: 'preconnect', href: 'https://fonts.gstatic.com' },
{
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap',
},
],
},
css: ['@/assets/styles/index.scss'],
plugins: [
'@/plugins/idb.ts',
'@/plugins/ipfs.ts',
'@/plugins/persist.ts',
'@/plugins/vue-tooltip.ts',
'@/plugins/vue-js-modal.ts',
'@/plugins/vue-notification.ts',
'@/plugins/prevent-multitabs.ts',
],
typescript: {
typeCheck: false,
},
styleResources: {
scss: ['@/assets/styles/_variables.scss', '@/assets/styles/*.scss'],
},
components: true,
router: {
extendRoutes(routes, resolve) {
routes.push({
path: '/',
component: resolve(__dirname, 'pages/fund.vue'),
})
},
},
buildModules: ['@nuxt/typescript-build'],
modules: ['@nuxtjs/style-resources'],
build: {
extend(config, { isClient }) {
if (config?.output != null) {
config.output.globalObject = 'this'
}
if (config?.module != null) {
/**
if (isClient) {
config.module.rules.push({
test: /\.worker\.js$/,
loader: 'worker-loader',
exclude: /(node_modules)/,
options: {
filename: 'workers/[name].js',
},
})
}
**/
config.module.rules.push({
test: /\.bin$/,
use: 'arraybuffer-loader',
})
}
},
plugins: [new webpack.IgnorePlugin(/worker_threads/)],
html: {
minify: {
collapseWhitespace: true, // as @dario30186 mentioned
removeComments: true, // 👈 add this line
},
},
loaders: {
fontUrl: { limit: 25000 },
imgUrl: { limit: 15000 },
},
splitChunks: {
layouts: false,
pages: false,
commons: false,
},
},
env: {
commit: getCurrentCommit(),
},
}
export default config