A self hosted chat application with end-to-end encrypted messaging.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
3.8 KiB

4 years ago
  1. module.exports = function (grunt) {
  2. const dedent = require("dedent-js");
  3. // Project configuration.
  4. grunt.initConfig({
  5. pkg: grunt.file.readJSON("package.json"),
  6. terser: {
  7. options: {
  8. // Task-specific options go here.
  9. },
  10. build: {
  11. // Target-specific file lists and/or options go here.
  12. src: "src/main/resources/static/js/bundle.js",
  13. dest: "src/main/resources/static/js/bundle.min.js",
  14. },
  15. chat_worker: {
  16. src: "src/main/resources/static/js/chatWorker.js",
  17. dest: "src/main/resources/static/js/chatWorker.min.js",
  18. },
  19. admin_bundle: {
  20. src: "src/main/resources/static/js/adminBundle.js",
  21. dest: "src/main/resources/static/js/adminBundle.min.js",
  22. },
  23. },
  24. banner: dedent(`
  25. /*
  26. * -----------------------------------------
  27. * @date <%= grunt.template.today("yyyy-mm-dd") %>
  28. * @project Chatto
  29. * @author nova
  30. * @license GPL
  31. * -----------------------------------------
  32. */
  33. `),
  34. usebanner: {
  35. dist: {
  36. options: {
  37. position: "top",
  38. banner: "<%= banner %>",
  39. },
  40. files: {
  41. src: [
  42. "src/main/resources/static/js/bundle.min.js",
  43. "src/main/resources/static/js/adminBundle.min.js",
  44. "src/main/resources/static/js/chatWorker.min.js",
  45. ],
  46. },
  47. },
  48. },
  49. browserify: {
  50. chat_worker_dev: {
  51. src: "src/main/frontend/workers/encryption-worker/main.ts",
  52. dest: "src/main/resources/static/js/chatWorker.js",
  53. options: {
  54. browserifyOptions: {
  55. debug: true,
  56. },
  57. },
  58. },
  59. dev: {
  60. src: "src/main/frontend/chat/main.ts",
  61. dest: "src/main/resources/static/js/bundle.js",
  62. options: {
  63. browserifyOptions: {
  64. debug: true,
  65. },
  66. },
  67. },
  68. prod: {
  69. src: "src/main/frontend/chat/main.ts",
  70. dest: "src/main/resources/static/js/bundle.js",
  71. banner: '/*! Chat.js <%= grunt.template.today("yyyy-mm-dd") %> */ ',
  72. options: {
  73. browserifyOptions: {
  74. debug: false,
  75. },
  76. },
  77. },
  78. chat_worker_prod: {
  79. src: "src/main/frontend/workers/encryption-worker/main.ts",
  80. dest: "src/main/resources/static/js/chatWorker.js",
  81. },
  82. admin_bundle_dev: {
  83. src: "src/main/frontend/admin/main.ts",
  84. dest: "src/main/resources/static/js/adminBundle.js",
  85. options: {
  86. browserifyOptions: {
  87. debug: true,
  88. },
  89. },
  90. },
  91. admin_bundle_prod: {
  92. src: "src/main/frontend/admin/main.ts",
  93. dest: "src/main/resources/static/js/adminBundle.js",
  94. banner: '/*! Chat.js <%= grunt.template.today("yyyy-mm-dd") %> */ ',
  95. options: {
  96. browserifyOptions: {
  97. debug: false,
  98. },
  99. },
  100. },
  101. options: {
  102. plugin: [
  103. [
  104. "tsify",
  105. {
  106. target: "ES6",
  107. noImplicitAny: true,
  108. esModuleInterop: true,
  109. allowSyntheticDefaultImports: true,
  110. },
  111. ], // register plugin by name
  112. ],
  113. browserifyOptions: {},
  114. },
  115. },
  116. });
  117. // Load the plugin that provides the "uglify" task.
  118. grunt.loadNpmTasks("grunt-terser");
  119. // // Default task(s).
  120. // grunt.registerTask('default', ['uglify']);
  121. grunt.loadNpmTasks("grunt-browserify");
  122. grunt.loadNpmTasks("grunt-banner");
  123. grunt.registerTask("default", [
  124. "browserify:dev",
  125. "browserify:chat_worker_dev",
  126. "browserify:admin_bundle_dev",
  127. ]);
  128. grunt.registerTask("prod", [
  129. "browserify:prod",
  130. "browserify:chat_worker_prod",
  131. "browserify:admin_bundle_prod",
  132. "terser",
  133. "usebanner",
  134. ]);
  135. };