-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnuxt.config.ts
125 lines (113 loc) · 3.44 KB
/
nuxt.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
devtools: { enabled: true },
modules: [
'@nuxtjs/tailwindcss',
'nuxt-icon',
'@nuxt/image',
'@vueuse/nuxt',
'@nuxt/fonts',
'nuxt-rate-limit',
],
experimental: {
typedPages: true,
},
routeRules: {
'/': { prerender: true },
'/listings/**': { swr: true },
'/users/**': { swr: true },
'/new-password': { prerender: true },
'/login': { prerender: true, appMiddleware: 'unauthenticated' },
'/register': { prerender: true, appMiddleware: 'unauthenticated' },
'/reset-password': { prerender: true, appMiddleware: 'unauthenticated' },
'/verify-email': { prerender: true, appMiddleware: ['email-verified'] },
'/favorites': { prerender: true, appMiddleware: 'authenticated' },
'/properties/**': { prerender: true, appMiddleware: 'authenticated' },
'/reservations': { prerender: true, appMiddleware: 'authenticated' },
'/trips': { prerender: true, appMiddleware: 'authenticated' },
'/create-listing': { prerender: true, appMiddleware: 'authenticated' },
'/account-settings': { prerender: true, appMiddleware: 'authenticated' },
'/account-settings/info': { prerender: true, appMiddleware: 'authenticated' },
'/account-settings/profile': { prerender: true, appMiddleware: 'authenticated' },
},
nuxtRateLimit: {
routes: {
'/api/v1/auth/**': { maxRequests: 10, intervalSeconds: 300 },
'/api/v1/favorites/**': {
maxRequests: 20,
intervalSeconds: 60,
},
'/api/v1/email/request-verification': {
maxRequests: 2,
intervalSeconds: 60 * 60 * 24,
},
'/api/v1/email/reset-password': {
maxRequests: 2,
intervalSeconds: 60 * 60 * 24,
},
},
},
build: {
transpile: ['vue-toastification'],
},
nitro: {
compressPublicAssets: true,
prerender: {
autoSubfolderIndex: false,
},
},
hooks: {
'build:manifest': manifest => {
const css = manifest['node_modules/nuxt/dist/app/entry.js']?.css
if (css) {
for (let i = css.length - 1; i >= 0; i--) {
if (css[i].startsWith('entry')) css.splice(i, 1)
}
}
for (let key in manifest) {
const cssFiles = manifest[key]?.css
if (cssFiles) {
for (let i = cssFiles.length - 1; i >= 0; i--) {
if (
/Calendar\..*\.css/.test(cssFiles[i]) ||
/Map\..*\.css/.test(cssFiles[i])
) {
cssFiles.splice(i, 1)
}
}
}
}
},
},
app: {
head: {
htmlAttrs: {
lang: 'en',
},
link: [
{ rel: 'icon', type: 'image/webp', href: '/logo.webp' },
{ rel: 'preconnect', href: 'https://www.googletagmanager.com' },
{ rel: 'preconnect', href: 'https://upload-widget.cloudinary.com' },
],
script: [
{ src: 'https://upload-widget.cloudinary.com/global/all.js', defer: true },
],
},
},
runtimeConfig: {
cloud_name: process.env.CLOUDINARY_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
public: {
imageUrl: process.env.CLOUDINARY_PATH,
cloudinaryName: process.env.CLOUDINARY_NAME,
cloudinaryFolder: process.env.CLOUDINARY_FOLDER,
gtagId: process.env.GTAG_ID,
},
},
image: {
cloudinary: {
baseURL: process.env.CLOUDINARY_PATH,
},
},
})