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.

esbuild-config.js 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2023 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. const autoprefixer = require('autoprefixer');
  21. const postCssPlugin = require('./esbuild-postcss-plugin');
  22. const postcss = require('postcss');
  23. const postCssCalc = require('postcss-calc');
  24. const postCssCustomProperties = require('postcss-custom-properties');
  25. const tailwindcss = require('tailwindcss');
  26. const htmlPlugin = require('./esbuild-html-plugin');
  27. const htmlTemplate = require('./indexHtmlTemplate');
  28. const {
  29. getCustomProperties,
  30. ESBUILD_TARGET_BROWSERS,
  31. AUTOPREFIXER_BROWSER_LIST,
  32. } = require('./utils');
  33. module.exports = (release) => {
  34. const plugins = [
  35. postCssPlugin({
  36. plugins: [
  37. autoprefixer({ overrideBrowserslist: AUTOPREFIXER_BROWSER_LIST }),
  38. postCssCustomProperties({
  39. importFrom: { customProperties: getCustomProperties() },
  40. preserve: false,
  41. }),
  42. postCssCalc,
  43. tailwindcss('./tailwind.config.js'),
  44. ],
  45. postcss,
  46. }),
  47. ];
  48. if (release) {
  49. // Only create index.html from template when releasing
  50. // The devserver will generate its own index file from the template
  51. plugins.push(htmlPlugin());
  52. }
  53. return {
  54. entryPoints: ['src/main/js/app/index.ts'],
  55. tsconfig: './tsconfig.json',
  56. external: ['/images/*', '/fonts/*'],
  57. loader: {
  58. '.png': 'dataurl',
  59. '.md': 'text',
  60. },
  61. define: {
  62. 'process.cwd': 'dummy_process_cwd',
  63. },
  64. inject: ['config/process-shim.js'],
  65. bundle: true,
  66. minify: release,
  67. metafile: true,
  68. sourcemap: true,
  69. target: ESBUILD_TARGET_BROWSERS,
  70. outdir: 'build/webapp/js',
  71. entryNames: release ? 'out[hash]' : 'out',
  72. plugins,
  73. };
  74. };