Chatto/Gruntfile.js

141 lines
3.8 KiB
JavaScript

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_dev",
"browserify:admin_bundle_prod",
"terser",
"usebanner",
]);
};