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.

100 lines
2.6 KiB

  1. const path = require('path')
  2. const webpackConfig = require('@nextcloud/webpack-vue-config')
  3. const webpackRules = require('@nextcloud/webpack-vue-config/rules')
  4. const BabelLoaderExcludeNodeModulesExcept = require('babel-loader-exclude-node-modules-except')
  5. webpackConfig.entry = {
  6. 'admin-settings': path.join(__dirname, 'src', 'mainAdminSettings.js'),
  7. collections: path.join(__dirname, 'src', 'collections.js'),
  8. main: path.join(__dirname, 'src', 'main.js'),
  9. 'files-sidebar': [
  10. path.join(__dirname, 'src', 'mainFilesSidebar.js'),
  11. path.join(__dirname, 'src', 'mainFilesSidebarLoader.js'),
  12. ],
  13. 'public-share-auth-sidebar': path.join(__dirname, 'src', 'mainPublicShareAuthSidebar.js'),
  14. 'public-share-sidebar': path.join(__dirname, 'src', 'mainPublicShareSidebar.js'),
  15. flow: path.join(__dirname, 'src', 'flow.js'),
  16. dashboard: path.join(__dirname, 'src', 'dashboard.js'),
  17. deck: path.join(__dirname, 'src', 'deck.js'),
  18. maps: path.join(__dirname, 'src', 'maps.js'),
  19. }
  20. webpackConfig.output.assetModuleFilename = '[name][ext]?v=[contenthash]'
  21. // Edit JS rule
  22. webpackRules.RULE_JS.exclude = BabelLoaderExcludeNodeModulesExcept([
  23. '@nextcloud/vue-richtext',
  24. '@nextcloud/event-bus',
  25. 'ansi-regex',
  26. 'color.js',
  27. 'fast-xml-parser',
  28. 'hot-patcher',
  29. 'nextcloud-vue-collections',
  30. 'semver',
  31. 'strip-ansi',
  32. 'tributejs',
  33. 'vue-resize',
  34. 'webdav',
  35. ])
  36. // Replaces rules array
  37. webpackConfig.module.rules = Object.values(webpackRules)
  38. webpackConfig.module.rules.push({
  39. /**
  40. * webrtc-adapter main module does no longer provide
  41. * "module.exports", which is expected by some elements using it
  42. * (like "attachmediastream"), so it needs to be added back with
  43. * a plugin.
  44. */
  45. test: /node_modules\/webrtc-adapter\/.*\.js$/,
  46. loader: 'babel-loader',
  47. options: {
  48. plugins: ['add-module-exports'],
  49. presets: [
  50. /**
  51. * From "add-module-exports" documentation:
  52. * "webpack doesn't perform commonjs transformation for
  53. * codesplitting. Need to set commonjs conversion."
  54. */
  55. ['@babel/env', { modules: 'commonjs' }],
  56. ],
  57. },
  58. })
  59. webpackConfig.module.rules.push({
  60. test: /\.wasm$/i,
  61. type: 'asset/resource',
  62. })
  63. webpackConfig.module.rules.push({
  64. test: /\.tflite$/i,
  65. type: 'asset/resource',
  66. })
  67. webpackConfig.module.rules.push({
  68. test: /\.worker\.js$/,
  69. use: { loader: 'worker-loader' },
  70. })
  71. // Add typescript rule
  72. webpackConfig.module.rules.push({
  73. test: /\.tsx?$/,
  74. use: [
  75. {
  76. loader: 'babel-loader',
  77. },
  78. {
  79. loader: 'ts-loader',
  80. options: { appendTsSuffixTo: [/\.vue$/] },
  81. },
  82. ],
  83. exclude: /node_modules/,
  84. })
  85. // Add typescript extension resolver
  86. webpackConfig.resolve.extensions.push('.tsx')
  87. webpackConfig.cache = true
  88. module.exports = webpackConfig