import MonacoEditorWebpackPlugin from 'monaco-editor-webpack-plugin'; // import HtmlWebpackPlugin from 'html-webpack-plugin'; const fs = require('fs'); const packageJson = JSON.parse(fs.readFileSync('../nc-lib-gui/package.json', 'utf8')); export default { /* ** Nuxt rendering mode ** See https://nuxtjs.org/api/configuration-mode */ mode: 'spa', // ssr: false, /* ** Nuxt target ** See https://nuxtjs.org/api/configuration-target */ target: 'server', /* ** Headers of the page ** See https://nuxtjs.org/api/configuration-head */ head: { titleTemplate: '', title: 'NocoDB', meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1', }, { hid: 'description', name: 'description', content: process.env.npm_package_description || '', }, ], link: [ { rel: 'icon', type: 'image/x-icon', href: './favicon.ico', }, ], }, /* ** Global CSS */ /* ** Plugins to load before mounting the App ** https://nuxtjs.org/guide/plugins */ plugins: [ { src: '~plugins/api.js' }, '~/plugins/xutils.js', { src: '~plugins/localStorage.js', ssr: false, }, { src: '~plugins/confetti.js', ssr: false, }, { src: '~plugins/domPurify.js', ssr: false, }, { src: '~plugins/axiosInterceptor.js', ssr: false, }, '@/plugins/veeValidate', '@/plugins/vueTour', { src: '@/plugins/vueShortkey', ssr: false, }, '@/plugins/vueClipboard', '@/plugins/globalComponentLoader', '@/plugins/globalMixin', '@/plugins/globalEventBus', '@/plugins/ncApis', '~/plugins/i18n.js', { src: '~plugins/projectLoader.js', ssr: false, }, { src: '~/plugins/tele.js', ssr: false, }, ], /* ** Auto import components ** See https://nuxtjs.org/api/configuration-components */ // components: true, /* ** Nuxt.js dev-modules */ buildModules: ['@nuxtjs/vuetify'], /* ** Nuxt.js modules */ modules: [ // Doc: https://axios.nuxtjs.org/usage '@nuxtjs/axios', 'vue-github-buttons/nuxt', '@nuxtjs/toast', ], toast: { position: 'top-center', }, /* ** Axios module configuration ** See https://axios.nuxtjs.org/options */ axios: { baseURL: process.env.NC_BACKEND_URL || (process.env.NODE_ENV === 'production' ? '..' : 'http://localhost:8080'), }, /* ** vuetify module configuration ** https://github.com/nuxt-community/vuetify-module */ router: { mode: 'hash', // base: '/xc/', middleware: ['auth'], }, vuetify: { defaultAssets: { // font: false, icons: false, }, optionsPath: '@/config/vuetify.options.js', treeShake: true, customVariables: ['./config/variables.scss'], }, /* ** Build configuration ** See https://nuxtjs.org/api/configuration-build/ */ build: { parallel: true, plugins: [ new MonacoEditorWebpackPlugin({ // https://github.com/Microsoft/monaco-editor-webpack-plugin#options // Include a subset of languages support // Some language extensions like typescript are so huge that may impact build performance // e.g. Build full languages support with webpack 4.0 takes over 80 seconds // Languages are loaded on demand at runtime languages: ['sql', 'json', 'javascript'], features: ['!gotoSymbol'], }), ], // publicPath: process.env.NODE_ENV === 'production' ? `https://cdn.jsdelivr.net/npm/nc-lib-gui@${version}/lib/dist/` : undefined, publicPath: process.env.NODE_ENV === 'production' ? './_nuxt/' : undefined, extend(config, { isDev, isClient }) { if (isDev) { config.devtool = isClient ? 'source-map' : 'inline-source-map'; } config.externals = config.externals || {}; config.externals['@microsoft/typescript-etw'] = 'FakeModule'; // config.plugins.push(new MonacoEditorWebpackPlugin({ // languages: ['javascript', 'typescript', 'json', 'mysql', 'sql', 'pgsql'], // features: ['!gotoSymbol', '!goToCommands'] // })) if (!isDev) { // const WebpackObfuscator = require('webpack-obfuscator'); // config.plugins.push(new WebpackObfuscator({ // compact: true, // controlFlowFlattening: false, // deadCodeInjection: false, // debugProtection: false, // debugProtectionInterval: false, // disableConsoleOutput: true, // identifierNamesGenerator: 'hexadecimal', // log: false, // numbersToExpressions: false, // renameGlobals: false, // rotateStringArray: true, // selfDefending: true, // shuffleStringArray: true, // simplify: true, // splitStrings: false, // stringArray: true, // stringArrayEncoding: false, // stringArrayThreshold: 0.75, // unicodeEscapeSequence: false // })) // relative links, please. // config.output.publicPath = "http://35.244.225.21/_nuxt/"; // config.output.publicPath = "./_nuxt/"; // NOTE: future release version of xc-lib-gui if (process.env.targetEnv === 'DEV') { // nightly build // e.g. 0.84.2-20220220-1250 packageJson.version = `${packageJson.version}-${process.env.targetVersion}`; packageJson.name += '-daily'; } else { packageJson.version = process.env.targetVersion; } fs.writeFileSync('../nc-lib-gui/package.json', JSON.stringify(packageJson, 0, 2)); // config.output.publicPath = `https://cdn.jsdelivr.net/npm/nc-lib-gui@${version}/lib/dist/`; // const htmlWebpack = config.plugins.find(w => w instanceof HtmlWebpackPlugin); // htmlWebpack.options.publicPath = `https://cdn.jsdelivr.net/npm/xc-lib-gui@${version}/lib/dist/_nuxt/`; // const templateParams = htmlWebpack.templateParameters // htmlWebpack.templateParameters = (...args) =>{ // const res = templateParams(...args); // return res; // }; } if (!isDev) { config.output.publicPath = './_nuxt/'; } return config; }, }, loading: { color: '#13f4ef', height: '0px', continuous: true, duration: 3000, }, css: [ '@/assets/style/fonts.css', '@/assets/css/global.css', // "~/assets/style/app.styl", '@mdi/font/css/materialdesignicons.css', '~/assets/style/style.css', '~/assets/style.css', 'material-design-icons-iconfont/dist/material-design-icons.css', ], env: { EE: !!process.env.EE, NC_API_URL: 'https://nocodb.com', }, pwa: { workbox: { /* workbox options */ assetsURLPattern: './_nuxt/', pagesURLPattern: './', }, manifest: { publicPath: './', }, }, }; /** * @copyright Copyright (c) 2021, Xgene Cloud Ltd * * @author Naveen MR * @author Pranav C Balan * @author Wing-Kam Wong * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */