module.exports = function (grunt) { const dedent = require("dedent-js"); // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON("package.json"), terser: { options: { // Task-specific options go here. }, build: { // Target-specific file lists and/or options go here. src: "src/main/resources/static/js/bundle.js", dest: "src/main/resources/static/js/bundle.min.js", }, chat_worker: { src: "src/main/resources/static/js/chatWorker.js", dest: "src/main/resources/static/js/chatWorker.min.js", }, admin_bundle: { src: "src/main/resources/static/js/adminBundle.js", dest: "src/main/resources/static/js/adminBundle.min.js", }, }, banner: dedent(` /* * ----------------------------------------- * @date <%= grunt.template.today("yyyy-mm-dd") %> * @project Chatto * @author nova * @license GPL * ----------------------------------------- */ `), usebanner: { dist: { options: { position: "top", banner: "<%= banner %>", }, files: { src: [ "src/main/resources/static/js/bundle.min.js", "src/main/resources/static/js/adminBundle.min.js", "src/main/resources/static/js/chatWorker.min.js", ], }, }, }, browserify: { chat_worker_dev: { src: "src/main/frontend/workers/encryption-worker/main.ts", dest: "src/main/resources/static/js/chatWorker.js", options: { browserifyOptions: { debug: true, }, }, }, dev: { src: "src/main/frontend/chat/main.ts", dest: "src/main/resources/static/js/bundle.js", options: { browserifyOptions: { debug: true, }, }, }, prod: { src: "src/main/frontend/chat/main.ts", dest: "src/main/resources/static/js/bundle.js", banner: '/*! Chat.js <%= grunt.template.today("yyyy-mm-dd") %> */ ', options: { browserifyOptions: { debug: false, }, }, }, chat_worker_prod: { src: "src/main/frontend/workers/encryption-worker/main.ts", dest: "src/main/resources/static/js/chatWorker.js", }, admin_bundle_dev: { src: "src/main/frontend/admin/main.ts", dest: "src/main/resources/static/js/adminBundle.js", options: { browserifyOptions: { debug: true, }, }, }, admin_bundle_prod: { src: "src/main/frontend/admin/main.ts", dest: "src/main/resources/static/js/adminBundle.js", banner: '/*! Chat.js <%= grunt.template.today("yyyy-mm-dd") %> */ ', options: { browserifyOptions: { debug: false, }, }, }, options: { plugin: [ [ "tsify", { target: "ES6", noImplicitAny: true, esModuleInterop: true, allowSyntheticDefaultImports: true, }, ], // register plugin by name ], browserifyOptions: {}, }, }, }); // Load the plugin that provides the "uglify" task. grunt.loadNpmTasks("grunt-terser"); // // Default task(s). // grunt.registerTask('default', ['uglify']); grunt.loadNpmTasks("grunt-browserify"); grunt.loadNpmTasks("grunt-banner"); grunt.registerTask("default", [ "browserify:dev", "browserify:chat_worker_dev", "browserify:admin_bundle_dev", ]); grunt.registerTask("prod", [ "browserify:prod", "browserify:chat_worker_prod", "browserify:admin_bundle_prod", "terser", "usebanner", ]); };