@lordbex/thelounge 4.4.3-blowfish → 4.5.0-blowfish-pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/README.md +31 -7
  2. package/dist/defaults/config.js +31 -2
  3. package/dist/package.json +94 -91
  4. package/dist/server/client.js +188 -194
  5. package/dist/server/clientManager.js +75 -72
  6. package/dist/server/command-line/index.js +44 -43
  7. package/dist/server/command-line/install.js +37 -70
  8. package/dist/server/command-line/outdated.js +12 -17
  9. package/dist/server/command-line/start.js +25 -26
  10. package/dist/server/command-line/storage.js +26 -31
  11. package/dist/server/command-line/uninstall.js +16 -23
  12. package/dist/server/command-line/upgrade.js +20 -26
  13. package/dist/server/command-line/users/add.js +33 -40
  14. package/dist/server/command-line/users/edit.js +18 -24
  15. package/dist/server/command-line/users/index.js +12 -16
  16. package/dist/server/command-line/users/list.js +11 -39
  17. package/dist/server/command-line/users/remove.js +16 -22
  18. package/dist/server/command-line/users/reset.js +34 -35
  19. package/dist/server/command-line/utils.js +231 -87
  20. package/dist/server/config.js +61 -52
  21. package/dist/server/helper.js +29 -28
  22. package/dist/server/identification.js +39 -34
  23. package/dist/server/index.js +1 -3
  24. package/dist/server/log.js +19 -16
  25. package/dist/server/models/chan.js +36 -33
  26. package/dist/server/models/msg.js +15 -19
  27. package/dist/server/models/network.js +102 -104
  28. package/dist/server/models/prefix.js +4 -7
  29. package/dist/server/models/user.js +5 -10
  30. package/dist/server/path-helper.js +8 -0
  31. package/dist/server/plugins/auth/ldap.js +177 -112
  32. package/dist/server/plugins/auth/local.js +10 -15
  33. package/dist/server/plugins/auth.js +6 -35
  34. package/dist/server/plugins/changelog.js +30 -27
  35. package/dist/server/plugins/clientCertificate.js +33 -37
  36. package/dist/server/plugins/dev-server.js +15 -21
  37. package/dist/server/plugins/inputs/action.js +9 -14
  38. package/dist/server/plugins/inputs/away.js +1 -3
  39. package/dist/server/plugins/inputs/ban.js +9 -14
  40. package/dist/server/plugins/inputs/blow.js +9 -14
  41. package/dist/server/plugins/inputs/connect.js +5 -10
  42. package/dist/server/plugins/inputs/ctcp.js +7 -12
  43. package/dist/server/plugins/inputs/disconnect.js +1 -3
  44. package/dist/server/plugins/inputs/ignore.js +23 -29
  45. package/dist/server/plugins/inputs/ignorelist.js +12 -18
  46. package/dist/server/plugins/inputs/index.js +8 -34
  47. package/dist/server/plugins/inputs/invite.js +7 -12
  48. package/dist/server/plugins/inputs/kick.js +7 -12
  49. package/dist/server/plugins/inputs/kill.js +1 -3
  50. package/dist/server/plugins/inputs/list.js +1 -3
  51. package/dist/server/plugins/inputs/mode.js +10 -15
  52. package/dist/server/plugins/inputs/msg.js +13 -18
  53. package/dist/server/plugins/inputs/mute.js +9 -15
  54. package/dist/server/plugins/inputs/nick.js +9 -14
  55. package/dist/server/plugins/inputs/notice.js +5 -7
  56. package/dist/server/plugins/inputs/part.js +11 -16
  57. package/dist/server/plugins/inputs/quit.js +7 -13
  58. package/dist/server/plugins/inputs/rainbow.js +55 -0
  59. package/dist/server/plugins/inputs/raw.js +1 -3
  60. package/dist/server/plugins/inputs/rejoin.js +7 -12
  61. package/dist/server/plugins/inputs/topic.js +7 -12
  62. package/dist/server/plugins/inputs/whois.js +1 -3
  63. package/dist/server/plugins/irc-events/away.js +14 -20
  64. package/dist/server/plugins/irc-events/cap.js +16 -22
  65. package/dist/server/plugins/irc-events/chghost.js +14 -13
  66. package/dist/server/plugins/irc-events/connection.js +61 -63
  67. package/dist/server/plugins/irc-events/ctcp.js +22 -28
  68. package/dist/server/plugins/irc-events/error.js +20 -26
  69. package/dist/server/plugins/irc-events/help.js +7 -13
  70. package/dist/server/plugins/irc-events/info.js +7 -13
  71. package/dist/server/plugins/irc-events/invite.js +7 -13
  72. package/dist/server/plugins/irc-events/join.js +30 -27
  73. package/dist/server/plugins/irc-events/kick.js +21 -17
  74. package/dist/server/plugins/irc-events/link.js +122 -109
  75. package/dist/server/plugins/irc-events/list.js +23 -26
  76. package/dist/server/plugins/irc-events/message.js +46 -52
  77. package/dist/server/plugins/irc-events/mode.js +66 -63
  78. package/dist/server/plugins/irc-events/modelist.js +29 -35
  79. package/dist/server/plugins/irc-events/motd.js +10 -16
  80. package/dist/server/plugins/irc-events/names.js +3 -6
  81. package/dist/server/plugins/irc-events/nick.js +26 -23
  82. package/dist/server/plugins/irc-events/part.js +19 -15
  83. package/dist/server/plugins/irc-events/quit.js +17 -14
  84. package/dist/server/plugins/irc-events/sasl.js +9 -15
  85. package/dist/server/plugins/irc-events/spgroups.js +38 -0
  86. package/dist/server/plugins/irc-events/spjoin.js +52 -0
  87. package/dist/server/plugins/irc-events/topic.js +12 -18
  88. package/dist/server/plugins/irc-events/unhandled.js +12 -12
  89. package/dist/server/plugins/irc-events/welcome.js +7 -13
  90. package/dist/server/plugins/irc-events/whois.js +20 -24
  91. package/dist/server/plugins/massEventAggregator.js +214 -0
  92. package/dist/server/plugins/messageStorage/sqlite.js +322 -141
  93. package/dist/server/plugins/messageStorage/text.js +21 -26
  94. package/dist/server/plugins/packages/index.js +105 -74
  95. package/dist/server/plugins/packages/publicClient.js +7 -16
  96. package/dist/server/plugins/packages/themes.js +11 -16
  97. package/dist/server/plugins/storage.js +28 -33
  98. package/dist/server/plugins/sts.js +12 -17
  99. package/dist/server/plugins/uploader.js +40 -43
  100. package/dist/server/plugins/webpush.js +23 -51
  101. package/dist/server/server.js +318 -271
  102. package/dist/server/storageCleaner.js +29 -37
  103. package/dist/server/utils/fish.js +349 -389
  104. package/dist/shared/irc.js +3 -6
  105. package/dist/shared/linkify.js +7 -14
  106. package/dist/shared/types/chan.js +6 -9
  107. package/dist/shared/types/changelog.js +1 -2
  108. package/dist/shared/types/config.js +1 -2
  109. package/dist/shared/types/mention.js +1 -2
  110. package/dist/shared/types/msg.js +3 -5
  111. package/dist/shared/types/network.js +1 -2
  112. package/dist/shared/types/storage.js +1 -2
  113. package/dist/shared/types/user.js +1 -2
  114. package/index.js +14 -10
  115. package/package.json +94 -91
  116. package/public/css/style.css +9 -6
  117. package/public/css/style.css.map +1 -1
  118. package/public/fonts/font-awesome/fa-brands-400.ttf +0 -0
  119. package/public/fonts/font-awesome/fa-brands-400.woff2 +0 -0
  120. package/public/fonts/font-awesome/fa-duotone-900.ttf +0 -0
  121. package/public/fonts/font-awesome/fa-duotone-900.woff2 +0 -0
  122. package/public/fonts/font-awesome/fa-light-300.ttf +0 -0
  123. package/public/fonts/font-awesome/fa-light-300.woff2 +0 -0
  124. package/public/fonts/font-awesome/fa-regular-400.ttf +0 -0
  125. package/public/fonts/font-awesome/fa-regular-400.woff2 +0 -0
  126. package/public/fonts/font-awesome/fa-solid-900.ttf +0 -0
  127. package/public/fonts/font-awesome/fa-solid-900.woff2 +0 -0
  128. package/public/fonts/font-awesome/fa-thin-100.ttf +0 -0
  129. package/public/fonts/font-awesome/fa-thin-100.woff2 +0 -0
  130. package/public/fonts/font-awesome/fa-v4compatibility.ttf +0 -0
  131. package/public/fonts/font-awesome/fa-v4compatibility.woff2 +0 -0
  132. package/public/js/bundle.js +1 -1
  133. package/public/js/bundle.js.map +1 -1
  134. package/public/js/bundle.vendor.js +1 -1
  135. package/public/js/bundle.vendor.js.LICENSE.txt +24 -6
  136. package/public/js/bundle.vendor.js.map +1 -1
  137. package/public/js/loading-error-handlers.js +1 -1
  138. package/public/service-worker.js +1 -1
  139. package/public/themes/default.css +1 -1
  140. package/public/themes/morning.css +1 -1
  141. package/dist/webpack.config.js +0 -224
@@ -1 +1 @@
1
- "use strict";!function(){const e=document.getElementById("loading-page-message");e&&(e.textContent="Loading the app…"),document.getElementById("loading-reload")?.addEventListener("click",(()=>location.reload()));const t=()=>{const e=document.getElementById("loading-reload");e&&(e.style.visibility="visible")},n=setTimeout((()=>{const e=document.getElementById("loading-slow");e&&(e.style.visibility="visible"),t()}),5e3),o=o=>{if(!e)return;e.textContent="An error has occurred that prevented the client from loading correctly.";const r=document.createElement("summary");r.textContent="More details";const i=document.createElement("pre");i.textContent=o.message;const s=document.createElement("p");s.textContent="Open the developer tools of your browser for more information.";const a=document.createElement("details");a.appendChild(r),a.appendChild(i),a.appendChild(s),e.parentNode?.insertBefore(a,e.nextSibling),window.clearTimeout(n),t()};window.addEventListener("error",o),window.g_TheLoungeRemoveLoading=()=>{delete window.g_TheLoungeRemoveLoading,window.clearTimeout(n),window.removeEventListener("error",o),document.getElementById("loading")?.remove()};try{const e=JSON.parse(localStorage.getItem("settings")||"{}"),t=document.getElementById("theme");if(!t)return;if("string"==typeof e.theme&&t?.dataset.serverTheme!==e.theme&&t.setAttribute("href",`themes/${e.theme}.css`),"string"==typeof e.userStyles&&!/[?&]nocss/.test(window.location.search)){const t=document.getElementById("user-specified-css");if(!t)return;t.innerHTML=e.userStyles}}catch(e){}if("serviceWorker"in navigator){navigator.serviceWorker.register("service-worker.js");const e=t=>{"fetch-error"===t.data.type&&(o({message:`Service worker failed to fetch an url: ${t.data.message}`}),navigator.serviceWorker.removeEventListener("message",e))};navigator.serviceWorker.addEventListener("message",e)}}();
1
+ "use strict";!function(){const e=document.getElementById("loading-page-message");e&&(e.textContent="Loading the app…"),document.getElementById("loading-reload")?.addEventListener("click",()=>location.reload());const t=()=>{const e=document.getElementById("loading-reload");e&&(e.style.visibility="visible")},n=setTimeout(()=>{const e=document.getElementById("loading-slow");e&&(e.style.visibility="visible"),t()},5e3),o=o=>{if(!e)return;e.textContent="An error has occurred that prevented the client from loading correctly.";const r=document.createElement("summary");r.textContent="More details";const i=document.createElement("pre");i.textContent=o.message;const s=document.createElement("p");s.textContent="Open the developer tools of your browser for more information.";const a=document.createElement("details");a.appendChild(r),a.appendChild(i),a.appendChild(s),e.parentNode?.insertBefore(a,e.nextSibling),window.clearTimeout(n),t()};window.addEventListener("error",o),window.g_TheLoungeRemoveLoading=()=>{delete window.g_TheLoungeRemoveLoading,window.clearTimeout(n),window.removeEventListener("error",o),document.getElementById("loading")?.remove()};try{const e=JSON.parse(localStorage.getItem("settings")||"{}"),t=document.getElementById("theme");if(!t)return;if("string"==typeof e.theme&&t?.dataset.serverTheme!==e.theme&&t.setAttribute("href",`themes/${e.theme}.css`),"string"==typeof e.userStyles&&!/[?&]nocss/.test(window.location.search)){const t=document.getElementById("user-specified-css");if(!t)return;t.innerHTML=e.userStyles}}catch(e){}if("serviceWorker"in navigator){navigator.serviceWorker.register("service-worker.js");const e=t=>{"fetch-error"===t.data.type&&(o({message:`Service worker failed to fetch an url: ${t.data.message}`}),navigator.serviceWorker.removeEventListener("message",e))};navigator.serviceWorker.addEventListener("message",e)}}();
@@ -1 +1 @@
1
- "use strict";const cacheName="a81bce4c46",excludedPathsFromCache=/^(?:socket\.io|storage|uploads|cdn-cgi)\//;async function putInCache(e,t){const n=await caches.open(cacheName);await n.put(e,t)}async function cleanRedirect(e){const t="body"in e?Promise.resolve(e.body):e.blob(),n=await t;return new Response(n,{headers:e.headers,status:e.status,statusText:e.statusText})}async function networkOrCache(e){try{let t=await fetch(e.request,{cache:"no-cache",redirect:"follow"});if(t.redirected&&(t=await cleanRedirect(t.clone())),t.ok)return"dev"!==cacheName&&e.waitUntil(putInCache(e.request,t)),t.clone();throw new Error(`Request failed with HTTP ${t.status}`)}catch(t){if(console.error(t.message,e.request.url),e.clientId){const n=await clients.get(e.clientId);n&&n.postMessage({type:"fetch-error",message:t.message})}const n=await caches.open(cacheName);return await n.match(e.request)||Promise.reject("request-not-in-cache")}}function showNotification(e,t){"notification"===t.type&&e.waitUntil(self.registration.getNotifications({tag:`chan-${t.chanId}`}).then((e=>{for(const t of e)t.close();return self.registration.showNotification(t.title,{tag:`chan-${t.chanId}`,badge:"img/icon-alerted-black-transparent-bg-72x72px.png",icon:"img/icon-alerted-grey-bg-192x192px.png",body:t.body,timestamp:t.timestamp})})))}function findSuitableClient(e){for(let t=0;t<e.length;t++){const n=e[t];if(n.focused||"visible"===n.visibilityState)return n}return e[0]}self.addEventListener("install",(function(){self.skipWaiting()})),self.addEventListener("activate",(function(e){e.waitUntil(caches.keys().then((e=>Promise.all(e.filter((e=>e!==cacheName)).map((e=>caches.delete(e))))))),e.waitUntil(self.clients.claim())})),self.addEventListener("fetch",(function(e){if("GET"!==e.request.method)return;const t=e.request.url,n=self.registration.scope;if(!t.startsWith(n))return;const i=t.substring(n.length);excludedPathsFromCache.test(i)||e.respondWith(networkOrCache(e))})),self.addEventListener("message",(function(e){showNotification(e,e.data)})),self.addEventListener("push",(function(e){e.data&&showNotification(e,e.data.json())})),self.addEventListener("notificationclick",(function(e){e.notification.close(),e.waitUntil(clients.matchAll({includeUncontrolled:!0,type:"window"}).then((t=>{if(0===t.length)return clients.openWindow?clients.openWindow(`.#/${e.notification.tag}`):void 0;const n=findSuitableClient(t);n.postMessage({type:"open",channel:e.notification.tag}),"focus"in n&&n.focus()})))}));
1
+ "use strict";const cacheName="72f41c7b4a",excludedPathsFromCache=/^(?:socket\.io|storage|uploads|cdn-cgi)\//;async function putInCache(e,t){const n=await caches.open(cacheName);await n.put(e,t)}async function cleanRedirect(e){const t="body"in e?Promise.resolve(e.body):e.blob(),n=await t;return new Response(n,{headers:e.headers,status:e.status,statusText:e.statusText})}async function networkOrCache(e){try{let t=await fetch(e.request,{cache:"no-cache",redirect:"follow"});if(t.redirected&&(t=await cleanRedirect(t.clone())),t.ok)return e.waitUntil(putInCache(e.request,t)),t.clone();throw new Error(`Request failed with HTTP ${t.status}`)}catch(t){if(console.error(t.message,e.request.url),e.clientId){const n=await clients.get(e.clientId);n&&n.postMessage({type:"fetch-error",message:t.message})}const n=await caches.open(cacheName);return await n.match(e.request)||Promise.reject("request-not-in-cache")}}function showNotification(e,t){"notification"===t.type&&e.waitUntil(self.registration.getNotifications({tag:`chan-${t.chanId}`}).then(e=>{for(const t of e)t.close();return self.registration.showNotification(t.title,{tag:`chan-${t.chanId}`,badge:"img/icon-alerted-black-transparent-bg-72x72px.png",icon:"img/icon-alerted-grey-bg-192x192px.png",body:t.body,timestamp:t.timestamp})}))}function findSuitableClient(e){for(let t=0;t<e.length;t++){const n=e[t];if(n.focused||"visible"===n.visibilityState)return n}return e[0]}self.addEventListener("install",function(){self.skipWaiting()}),self.addEventListener("activate",function(e){e.waitUntil(caches.keys().then(e=>Promise.all(e.filter(e=>e!==cacheName).map(e=>caches.delete(e))))),e.waitUntil(self.clients.claim())}),self.addEventListener("fetch",function(e){if("GET"!==e.request.method)return;const t=e.request.url,n=self.registration.scope;if(!t.startsWith(n))return;const i=t.substring(n.length);excludedPathsFromCache.test(i)||e.respondWith(networkOrCache(e))}),self.addEventListener("message",function(e){showNotification(e,e.data)}),self.addEventListener("push",function(e){e.data&&showNotification(e,e.data.json())}),self.addEventListener("notificationclick",function(e){e.notification.close(),e.waitUntil(clients.matchAll({includeUncontrolled:!0,type:"window"}).then(t=>{if(0===t.length)return clients.openWindow?clients.openWindow(`.#/${e.notification.tag}`):void 0;const n=findSuitableClient(t);n.postMessage({type:"open",channel:e.notification.tag}),"focus"in n&&n.focus()}))});
@@ -15,7 +15,7 @@
15
15
  box-shadow: 0 0 25px rgb(0 0 0 / 50%);
16
16
  }
17
17
 
18
- @media (max-width: 768px) {
18
+ @media (width <= 768px) {
19
19
  #loading .window {
20
20
  margin: 0;
21
21
  }
@@ -1,4 +1,4 @@
1
- @import "default.css";
1
+ @import url("default.css");
2
2
 
3
3
  :root {
4
4
  --body-color: #f3f3f3;
@@ -1,224 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const webpack = __importStar(require("webpack"));
30
- const path = __importStar(require("path"));
31
- const copy_webpack_plugin_1 = __importDefault(require("copy-webpack-plugin"));
32
- const fork_ts_checker_webpack_plugin_1 = __importDefault(require("fork-ts-checker-webpack-plugin"));
33
- const mini_css_extract_plugin_1 = __importDefault(require("mini-css-extract-plugin"));
34
- const vue_loader_1 = require("vue-loader");
35
- const babel_config_cjs_1 = __importDefault(require("./babel.config.cjs"));
36
- const helper_1 = __importDefault(require("./server/helper"));
37
- const tsCheckerPlugin = new fork_ts_checker_webpack_plugin_1.default({
38
- typescript: {
39
- diagnosticOptions: {
40
- semantic: true,
41
- syntactic: true,
42
- },
43
- build: true,
44
- },
45
- });
46
- const vueLoaderPlugin = new vue_loader_1.VueLoaderPlugin();
47
- const miniCssExtractPlugin = new mini_css_extract_plugin_1.default({
48
- filename: "css/style.css",
49
- });
50
- const isProduction = process.env.NODE_ENV === "production";
51
- const config = {
52
- mode: isProduction ? "production" : "development",
53
- entry: {
54
- "js/bundle.js": [path.resolve(__dirname, "client/js/vue.ts")],
55
- },
56
- devtool: "source-map",
57
- output: {
58
- clean: true, // Clean the output directory before emit.
59
- path: path.resolve(__dirname, "public"),
60
- filename: "[name]",
61
- publicPath: "/",
62
- },
63
- performance: {
64
- hints: false,
65
- },
66
- resolve: {
67
- extensions: [".ts", ".js", ".vue"],
68
- },
69
- module: {
70
- rules: [
71
- {
72
- test: /\.vue$/,
73
- use: {
74
- loader: "vue-loader",
75
- options: {
76
- compilerOptions: {
77
- preserveWhitespace: false,
78
- },
79
- appendTsSuffixTo: [/\.vue$/],
80
- },
81
- },
82
- },
83
- {
84
- test: /\.ts$/i,
85
- include: [path.resolve(__dirname, "client"), path.resolve(__dirname, "shared")],
86
- exclude: path.resolve(__dirname, "node_modules"),
87
- use: {
88
- loader: "babel-loader",
89
- options: babel_config_cjs_1.default,
90
- },
91
- },
92
- {
93
- test: /\.css$/,
94
- use: [
95
- {
96
- loader: mini_css_extract_plugin_1.default.loader,
97
- options: {
98
- esModule: false,
99
- },
100
- },
101
- {
102
- loader: "css-loader",
103
- options: {
104
- url: false,
105
- importLoaders: 1,
106
- sourceMap: true,
107
- },
108
- },
109
- {
110
- loader: "postcss-loader",
111
- options: {
112
- sourceMap: true,
113
- },
114
- },
115
- ],
116
- },
117
- ],
118
- },
119
- optimization: {
120
- splitChunks: {
121
- cacheGroups: {
122
- commons: {
123
- test: /[\\/]node_modules[\\/]/,
124
- name: "js/bundle.vendor.js",
125
- chunks: "all",
126
- },
127
- },
128
- },
129
- },
130
- externals: {
131
- json3: "JSON", // socket.io uses json3.js, but we do not target any browsers that need it
132
- },
133
- plugins: [
134
- tsCheckerPlugin,
135
- vueLoaderPlugin,
136
- new webpack.DefinePlugin({
137
- __VUE_PROD_DEVTOOLS__: false,
138
- __VUE_OPTIONS_API__: false,
139
- }),
140
- miniCssExtractPlugin,
141
- new copy_webpack_plugin_1.default({
142
- patterns: [
143
- {
144
- from: path
145
- .resolve(__dirname, "node_modules/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff*")
146
- .replace(/\\/g, "/"),
147
- to: "fonts/[name][ext]",
148
- },
149
- {
150
- from: path.resolve(__dirname, "./client/js/loading-error-handlers.js"),
151
- to: "js/[name][ext]",
152
- },
153
- {
154
- from: path.resolve(__dirname, "./client/*").replace(/\\/g, "/"),
155
- to: "[name][ext]",
156
- globOptions: {
157
- ignore: [
158
- "**/index.html.tpl",
159
- "**/service-worker.js",
160
- "**/*.d.ts",
161
- "**/tsconfig.json",
162
- ],
163
- },
164
- },
165
- {
166
- from: path.resolve(__dirname, "./client/service-worker.js"),
167
- to: "[name][ext]",
168
- transform(content) {
169
- return content
170
- .toString()
171
- .replace("__HASH__", isProduction ? helper_1.default.getVersionCacheBust() : "dev");
172
- },
173
- },
174
- {
175
- from: path.resolve(__dirname, "./client/audio/*").replace(/\\/g, "/"),
176
- to: "audio/[name][ext]",
177
- },
178
- {
179
- from: path.resolve(__dirname, "./client/img/*").replace(/\\/g, "/"),
180
- to: "img/[name][ext]",
181
- },
182
- {
183
- from: path.resolve(__dirname, "./client/themes/*").replace(/\\/g, "/"),
184
- to: "themes/[name][ext]",
185
- },
186
- ],
187
- }),
188
- // socket.io uses debug, we don't need it
189
- new webpack.NormalModuleReplacementPlugin(/debug/, path.resolve(__dirname, "scripts/noop.js")),
190
- ],
191
- };
192
- exports.default = (env, argv) => {
193
- if (argv.mode === "development") {
194
- config.target = "node";
195
- config.devtool = "eval";
196
- config.stats = "errors-only";
197
- config.output.path = path.resolve(__dirname, "test/public");
198
- config.entry["testclient.js"] = [path.resolve(__dirname, "test/client/index.ts")];
199
- // Add the istanbul plugin to babel-loader options
200
- for (const rule of config.module.rules) {
201
- // @ts-expect-error Property 'use' does not exist on type 'RuleSetRule | "..."'.
202
- if (rule.use.loader === "babel-loader") {
203
- // @ts-expect-error Property 'use' does not exist on type 'RuleSetRule | "..."'.
204
- rule.use.options.plugins = ["istanbul"];
205
- }
206
- }
207
- // `optimization.splitChunks` is incompatible with a `target` of `node`. See:
208
- // - https://github.com/zinserjan/mocha-webpack/issues/84
209
- // - https://github.com/webpack/webpack/issues/6727#issuecomment-372589122
210
- config.optimization.splitChunks = false;
211
- // Disable plugins like copy files, it is not required
212
- config.plugins = [
213
- tsCheckerPlugin,
214
- vueLoaderPlugin,
215
- miniCssExtractPlugin,
216
- // Client tests that require Vue may end up requireing socket.io
217
- new webpack.NormalModuleReplacementPlugin(/js(\/|\\)socket\.js/, path.resolve(__dirname, "scripts/noop.js")),
218
- ];
219
- }
220
- if (argv?.mode === "production") {
221
- // ...
222
- }
223
- return config;
224
- };