@rspack/dev-server 1.1.4 → 1.2.0

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.
@@ -0,0 +1,60 @@
1
+ /**
2
+ * The following code is modified based on
3
+ * https://github.com/webpack/webpack-dev-server
4
+ *
5
+ * MIT Licensed
6
+ * Author Tobias Koppers @sokra
7
+ * Copyright (c) JS Foundation and other contributors
8
+ * https://github.com/webpack/webpack-dev-server/blob/main/LICENSE
9
+ */
10
+ import WebSocketClient from './clients/WebSocketClient.js';
11
+ import { log } from './utils/log.js';
12
+ // this WebsocketClient is here as a default fallback, in case the client is not injected
13
+ var Client = typeof __webpack_dev_server_client__ !== 'undefined'
14
+ ? typeof __webpack_dev_server_client__.default !== 'undefined'
15
+ ? __webpack_dev_server_client__.default
16
+ : __webpack_dev_server_client__
17
+ : WebSocketClient;
18
+ var retries = 0;
19
+ var maxRetries = 10;
20
+ // Initialized client is exported so external consumers can utilize the same instance
21
+ // It is mutable to enforce singleton
22
+ export var client = null;
23
+ var timeout;
24
+ function socket(url, handlers, reconnect) {
25
+ client = new Client(url);
26
+ client.onOpen(function () {
27
+ retries = 0;
28
+ if (timeout) {
29
+ clearTimeout(timeout);
30
+ }
31
+ if (typeof reconnect !== 'undefined') {
32
+ maxRetries = reconnect;
33
+ }
34
+ });
35
+ client.onClose(function () {
36
+ if (retries === 0) {
37
+ handlers.close();
38
+ }
39
+ // Try to reconnect.
40
+ client = null;
41
+ // After 10 retries stop trying, to prevent logspam.
42
+ if (retries < maxRetries) {
43
+ // Exponentially increase timeout to reconnect.
44
+ // Respectfully copied from the package `got`.
45
+ var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;
46
+ retries += 1;
47
+ log.info('Trying to reconnect...');
48
+ timeout = setTimeout(function () {
49
+ socket(url, handlers, reconnect);
50
+ }, retryInMs);
51
+ }
52
+ });
53
+ client.onMessage(function (data) {
54
+ var message = JSON.parse(data);
55
+ if (handlers[message.type]) {
56
+ handlers[message.type](message.data, message.params);
57
+ }
58
+ });
59
+ }
60
+ export default socket;
@@ -1,41 +1,41 @@
1
1
  // Reference to https://github.com/sindresorhus/ansi-regex
2
2
  var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/;
3
3
  var _defColors = {
4
- reset: ["fff", "000"],
5
- black: "000",
6
- red: "ff0000",
7
- green: "209805",
8
- yellow: "e8bf03",
9
- blue: "0000ff",
10
- magenta: "ff00ff",
11
- cyan: "00ffee",
12
- lightgrey: "f0f0f0",
13
- darkgrey: "888",
4
+ reset: ['fff', '000'],
5
+ black: '000',
6
+ red: 'ff0000',
7
+ green: '209805',
8
+ yellow: 'e8bf03',
9
+ blue: '0000ff',
10
+ magenta: 'ff00ff',
11
+ cyan: '00ffee',
12
+ lightgrey: 'f0f0f0',
13
+ darkgrey: '888',
14
14
  };
15
15
  var _styles = {
16
- 30: "black",
17
- 31: "red",
18
- 32: "green",
19
- 33: "yellow",
20
- 34: "blue",
21
- 35: "magenta",
22
- 36: "cyan",
23
- 37: "lightgrey",
16
+ 30: 'black',
17
+ 31: 'red',
18
+ 32: 'green',
19
+ 33: 'yellow',
20
+ 34: 'blue',
21
+ 35: 'magenta',
22
+ 36: 'cyan',
23
+ 37: 'lightgrey',
24
24
  };
25
25
  var _colorMode = {
26
- 2: "rgb",
26
+ 2: 'rgb',
27
27
  };
28
28
  var _openTags = {
29
- 1: "font-weight:bold",
30
- 2: "opacity:0.5",
31
- 3: "<i>",
32
- 4: "<u>",
33
- 8: "display:none",
34
- 9: "<del>",
29
+ 1: 'font-weight:bold',
30
+ 2: 'opacity:0.5',
31
+ 3: '<i>',
32
+ 4: '<u>',
33
+ 8: 'display:none',
34
+ 9: '<del>',
35
35
  38: function (match) {
36
36
  // color
37
37
  var mode = _colorMode[match[0]];
38
- if (mode === "rgb") {
38
+ if (mode === 'rgb') {
39
39
  var r = match[1];
40
40
  var g = match[2];
41
41
  var b = match[3];
@@ -46,7 +46,7 @@ var _openTags = {
46
46
  48: function (match) {
47
47
  // background color
48
48
  var mode = _colorMode[match[0]];
49
- if (mode === "rgb") {
49
+ if (mode === 'rgb') {
50
50
  var r = match[1];
51
51
  var g = match[2];
52
52
  var b = match[3];
@@ -56,35 +56,35 @@ var _openTags = {
56
56
  },
57
57
  };
58
58
  var _openTagToCloseTag = {
59
- 3: "23",
60
- 4: "24",
61
- 9: "29",
59
+ 3: '23',
60
+ 4: '24',
61
+ 9: '29',
62
62
  };
63
63
  var _closeTags = {
64
64
  0: function (ansiCodes) {
65
65
  if (!ansiCodes)
66
- return "</span>";
66
+ return '</span>';
67
67
  if (!ansiCodes.length)
68
- return "";
68
+ return '';
69
69
  var code;
70
- var ret = "";
70
+ var ret = '';
71
71
  while ((code = ansiCodes.pop())) {
72
72
  var closeTag = _openTagToCloseTag[code];
73
73
  if (closeTag) {
74
74
  ret += _closeTags[closeTag];
75
75
  continue;
76
76
  }
77
- ret += "</span>";
77
+ ret += '</span>';
78
78
  }
79
79
  return ret;
80
80
  },
81
- 23: "</i>",
82
- 24: "</u>",
83
- 29: "</del>", // reset delete
81
+ 23: '</i>',
82
+ 24: '</u>',
83
+ 29: '</del>', // reset delete
84
84
  };
85
85
  for (var _i = 0, _a = [21, 22, 27, 28, 39, 49]; _i < _a.length; _i++) {
86
86
  var n = _a[_i];
87
- _closeTags[n] = "</span>";
87
+ _closeTags[n] = '</span>';
88
88
  }
89
89
  /**
90
90
  * Normalize ';<seq>' | '<seq>' -> '<seq>'
@@ -92,7 +92,7 @@ for (var _i = 0, _a = [21, 22, 27, 28, 39, 49]; _i < _a.length; _i++) {
92
92
  function normalizeSeq(seq) {
93
93
  if (seq === null || seq === undefined)
94
94
  return null;
95
- if (seq.startsWith(";")) {
95
+ if (seq.startsWith(';')) {
96
96
  return seq.slice(1);
97
97
  }
98
98
  return seq;
@@ -108,16 +108,17 @@ export default function ansiHTML(text) {
108
108
  // Cache opened sequence.
109
109
  var ansiCodes = [];
110
110
  // Replace with markup.
111
+ var ret = text.replace(
111
112
  //@ts-ignore TS1487 error
112
- var ret = text.replace(/\033\[(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?m/g, function (m) {
113
+ /\033\[(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?m/g, function (m) {
113
114
  var _a;
114
115
  var match = (_a = m.match(/(;?\d+)/g)) === null || _a === void 0 ? void 0 : _a.map(normalizeSeq);
115
- Object.defineProperty(match, "advance", {
116
+ Object.defineProperty(match, 'advance', {
116
117
  value: function (count) {
117
118
  this.splice(0, count);
118
119
  },
119
120
  });
120
- var rep = "";
121
+ var rep = '';
121
122
  var seq;
122
123
  while ((seq = match[0])) {
123
124
  match.advance(1);
@@ -128,23 +129,23 @@ export default function ansiHTML(text) {
128
129
  var other = _openTags[seq];
129
130
  if (other &&
130
131
  (other =
131
- typeof other === "function" ? other(match) : other)) {
132
+ typeof other === 'function' ? other(match) : other)) {
132
133
  // If reset signal is encountered, we have to reset everything.
133
- var ret_1 = "";
134
- if (seq === "0") {
134
+ var ret_1 = '';
135
+ if (seq === '0') {
135
136
  ret_1 += _closeTags[seq](ansiCodes);
136
137
  }
137
138
  // If current sequence has been opened, close it.
138
139
  if (ansiCodes.indexOf(seq) !== -1) {
139
140
  ansiCodes.pop();
140
- return "</span>";
141
+ return '</span>';
141
142
  }
142
143
  // Open tag.
143
144
  ansiCodes.push(seq);
144
- return ret_1 + (other[0] === "<" ? other : "<span style=\"".concat(other, ";\">"));
145
+ return ret_1 + (other[0] === '<' ? other : "<span style=\"".concat(other, ";\">"));
145
146
  }
146
147
  var ct = _closeTags[seq];
147
- if (typeof ct === "function") {
148
+ if (typeof ct === 'function') {
148
149
  return ct(ansiCodes);
149
150
  }
150
151
  if (ct) {
@@ -152,21 +153,20 @@ export default function ansiHTML(text) {
152
153
  ansiCodes.pop();
153
154
  return ct;
154
155
  }
155
- return "";
156
+ return '';
156
157
  }
157
158
  });
158
159
  // Make sure tags are closed.
159
160
  var l = ansiCodes.length;
160
- l > 0 && (ret += Array(l + 1).join("</span>"));
161
+ l > 0 && (ret += Array(l + 1).join('</span>'));
161
162
  return ret;
162
163
  }
163
164
  /**
164
165
  * Customize colors.
165
- * @param {Object} colors reference to _defColors
166
166
  */
167
167
  ansiHTML.setColors = function (colors) {
168
- if (typeof colors !== "object") {
169
- throw new Error("`colors` parameter must be an Object.");
168
+ if (typeof colors !== 'object') {
169
+ throw new Error('`colors` parameter must be an Object.');
170
170
  }
171
171
  var _finalColors = {};
172
172
  for (var key in _defColors) {
@@ -175,13 +175,13 @@ ansiHTML.setColors = function (colors) {
175
175
  _finalColors[key] = _defColors[key];
176
176
  continue;
177
177
  }
178
- if ("reset" === key) {
179
- if (typeof hex === "string") {
178
+ if ('reset' === key) {
179
+ if (typeof hex === 'string') {
180
180
  hex = [hex];
181
181
  }
182
182
  if (!Array.isArray(hex) ||
183
183
  hex.length === 0 ||
184
- hex.some(function (h) { return typeof h !== "string"; })) {
184
+ hex.some(function (h) { return typeof h !== 'string'; })) {
185
185
  throw new Error("The value of `".concat(key, "` property must be an Array and each item could only be a hex string, e.g.: FF0000"));
186
186
  }
187
187
  var defHexColor = _defColors[key];
@@ -194,7 +194,7 @@ ansiHTML.setColors = function (colors) {
194
194
  }
195
195
  hex = hex.slice(0, 2);
196
196
  }
197
- else if (typeof hex !== "string") {
197
+ else if (typeof hex !== 'string') {
198
198
  throw new Error("The value of `".concat(key, "` property must be a hex string, e.g.: FF0000"));
199
199
  }
200
200
  _finalColors[key] = hex;
@@ -209,14 +209,13 @@ ansiHTML.reset = function () {
209
209
  };
210
210
  /**
211
211
  * Expose tags, including open and close.
212
- * @type {Object}
213
212
  */
214
213
  ansiHTML.tags = {};
215
214
  if (Object.defineProperty) {
216
- Object.defineProperty(ansiHTML.tags, "open", {
215
+ Object.defineProperty(ansiHTML.tags, 'open', {
217
216
  get: function () { return _openTags; },
218
217
  });
219
- Object.defineProperty(ansiHTML.tags, "close", {
218
+ Object.defineProperty(ansiHTML.tags, 'close', {
220
219
  get: function () { return _closeTags; },
221
220
  });
222
221
  }
@@ -226,15 +225,15 @@ else {
226
225
  }
227
226
  function _setTags(colors) {
228
227
  // reset all
229
- _openTags["0"] =
228
+ _openTags['0'] =
230
229
  "font-weight:normal;opacity:1;color:#".concat(colors.reset[0], ";background:#").concat(colors.reset[1]);
231
230
  // inverse
232
- _openTags["7"] = "color:#".concat(colors.reset[1], ";background:#").concat(colors.reset[0]);
231
+ _openTags['7'] = "color:#".concat(colors.reset[1], ";background:#").concat(colors.reset[0]);
233
232
  // dark grey
234
- _openTags["90"] = "color:#".concat(colors.darkgrey);
233
+ _openTags['90'] = "color:#".concat(colors.darkgrey);
235
234
  for (var code in _styles) {
236
235
  var color = _styles[code];
237
- var oriColor = colors[color] || "000";
236
+ var oriColor = colors[color] || '000';
238
237
  _openTags[code] = "color:#".concat(oriColor);
239
238
  var codeInt = Number.parseInt(code);
240
239
  _openTags[(codeInt + 10).toString()] = "background:#".concat(oriColor);
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The following code is modified based on
3
+ * https://github.com/webpack/webpack-dev-server
4
+ *
5
+ * MIT Licensed
6
+ * Author Tobias Koppers @sokra
7
+ * Copyright (c) JS Foundation and other contributors
8
+ * https://github.com/webpack/webpack-dev-server/blob/main/LICENSE
9
+ */
10
+ import logger from '../modules/logger/index';
11
+ var name = 'webpack-dev-server';
12
+ // default level is set on the client side, so it does not need
13
+ // to be set by the CLI or API
14
+ var defaultLevel = 'info';
15
+ // options new options, merge with old options
16
+ function setLogLevel(level) {
17
+ logger.configureDefaultLogger({ level: level });
18
+ }
19
+ setLogLevel(defaultLevel);
20
+ var log = logger.getLogger(name);
21
+ export { log, setLogLevel };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The following code is modified based on
3
+ * https://github.com/webpack/webpack-dev-server
4
+ *
5
+ * MIT Licensed
6
+ * Author Tobias Koppers @sokra
7
+ * Copyright (c) JS Foundation and other contributors
8
+ * https://github.com/webpack/webpack-dev-server/blob/main/LICENSE
9
+ */
10
+ function sendMsg(type, data) {
11
+ if (typeof self !== 'undefined' &&
12
+ (typeof WorkerGlobalScope === 'undefined' ||
13
+ !(self instanceof WorkerGlobalScope))) {
14
+ self.postMessage({ type: "webpack".concat(type), data: data }, '*');
15
+ }
16
+ }
17
+ export default sendMsg;
package/dist/config.d.ts CHANGED
@@ -1,24 +1,23 @@
1
- import type { DevServer } from "@rspack/core";
2
- import type WebpackDevServer from "webpack-dev-server";
3
- export type { DevServer };
1
+ /// <reference types="connect-history-api-fallback" />
2
+ import type { BonjourOptions, ClientConfiguration, ConnectHistoryApiFallbackOptions, DevServer, NormalizedStatic, Open, ServerConfiguration, WatchFiles, WebSocketServerConfiguration } from './types';
4
3
  export interface ResolvedDevServer extends DevServer {
5
4
  port: number | string;
6
- static: false | Array<WebpackDevServer.NormalizedStatic>;
7
- devMiddleware: DevServer["devMiddleware"];
8
- hot: boolean | "only";
5
+ static: false | Array<NormalizedStatic>;
6
+ devMiddleware: DevServer['devMiddleware'];
7
+ hot: boolean | 'only';
9
8
  host?: string;
10
- open: WebpackDevServer.Open[];
9
+ open: Open[];
11
10
  magicHtml: boolean;
12
11
  liveReload: boolean;
13
- webSocketServer: false | WebpackDevServer.WebSocketServerConfiguration;
14
- proxy: Required<DevServer["proxy"]>;
15
- client: WebpackDevServer.ClientConfiguration;
16
- allowedHosts: "auto" | string[] | "all";
17
- bonjour: false | Record<string, never> | WebpackDevServer.BonjourOptions;
12
+ webSocketServer: false | WebSocketServerConfiguration;
13
+ proxy: Required<DevServer['proxy']>;
14
+ client: ClientConfiguration;
15
+ allowedHosts: 'auto' | string[] | 'all';
16
+ bonjour: false | Record<string, never> | BonjourOptions;
18
17
  compress: boolean;
19
- historyApiFallback: false | WebpackDevServer.ConnectHistoryApiFallbackOptions;
20
- server: WebpackDevServer.ServerConfiguration;
18
+ historyApiFallback: false | ConnectHistoryApiFallbackOptions;
19
+ server: ServerConfiguration;
21
20
  ipc: string | undefined;
22
21
  setupExitSignals: boolean;
23
- watchFiles: WebpackDevServer.WatchFiles[];
22
+ watchFiles: WatchFiles[];
24
23
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The following code is modified based on
3
+ * https://github.com/webpack/webpack-dev-server
4
+ *
5
+ * MIT Licensed
6
+ * Author Tobias Koppers @sokra
7
+ * Copyright (c) JS Foundation and other contributors
8
+ * https://github.com/webpack/webpack-dev-server/blob/main/LICENSE
9
+ */
10
+ export {};
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * The following code is modified based on
4
+ * https://github.com/webpack/webpack-dev-server
5
+ *
6
+ * MIT Licensed
7
+ * Author Tobias Koppers @sokra
8
+ * Copyright (c) JS Foundation and other contributors
9
+ * https://github.com/webpack/webpack-dev-server/blob/main/LICENSE
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ /*
36
+ * Based on the packages get-port https://www.npmjs.com/package/get-port
37
+ * and portfinder https://www.npmjs.com/package/portfinder
38
+ * The code structure is similar to get-port, but it searches
39
+ * ports deterministically like portfinder
40
+ */
41
+ const net = __importStar(require("node:net"));
42
+ const os = __importStar(require("node:os"));
43
+ const minPort = 1024;
44
+ const maxPort = 65535;
45
+ /**
46
+ * Get all local hosts
47
+ */
48
+ const getLocalHosts = () => {
49
+ const interfaces = os.networkInterfaces();
50
+ // Add undefined value for createServer function to use default host,
51
+ // and default IPv4 host in case createServer defaults to IPv6.
52
+ const results = new Set([undefined, '0.0.0.0']);
53
+ for (const _interface of Object.values(interfaces)) {
54
+ if (_interface) {
55
+ for (const config of _interface) {
56
+ results.add(config.address);
57
+ }
58
+ }
59
+ }
60
+ return results;
61
+ };
62
+ /**
63
+ * Check if a port is available on a given host
64
+ */
65
+ const checkAvailablePort = (basePort, host) => new Promise((resolve, reject) => {
66
+ const server = net.createServer();
67
+ server.unref();
68
+ server.on('error', reject);
69
+ server.listen(basePort, host, () => {
70
+ // Next line should return AddressInfo because we're calling it after listen() and before close()
71
+ const { port } = server.address();
72
+ server.close(() => {
73
+ resolve(port);
74
+ });
75
+ });
76
+ });
77
+ /**
78
+ * Get available port from hosts
79
+ */
80
+ const getAvailablePort = async (port, hosts) => {
81
+ /**
82
+ * Errors that mean that host is not available.
83
+ */
84
+ const nonExistentInterfaceErrors = new Set(['EADDRNOTAVAIL', 'EINVAL']);
85
+ /* Check if the post is available on every local host name */
86
+ for (const host of hosts) {
87
+ try {
88
+ await checkAvailablePort(port, host);
89
+ }
90
+ catch (error) {
91
+ /* We throw an error only if the interface exists */
92
+ if (!nonExistentInterfaceErrors.has(error.code || '')) {
93
+ throw error;
94
+ }
95
+ }
96
+ }
97
+ return port;
98
+ };
99
+ /**
100
+ * Get available ports
101
+ */
102
+ async function getPorts(basePort, host) {
103
+ if (basePort < minPort || basePort > maxPort) {
104
+ throw new Error(`Port number must lie between ${minPort} and ${maxPort}`);
105
+ }
106
+ let port = basePort;
107
+ const localhosts = getLocalHosts();
108
+ const hosts = host && !localhosts.has(host)
109
+ ? new Set([host])
110
+ : /* If the host is equivalent to localhost
111
+ we need to check every equivalent host
112
+ else the port might falsely appear as available
113
+ on some operating systems */
114
+ localhosts;
115
+ const portUnavailableErrors = new Set(['EADDRINUSE', 'EACCES']);
116
+ while (port <= maxPort) {
117
+ try {
118
+ const availablePort = await getAvailablePort(port, hosts);
119
+ return availablePort;
120
+ }
121
+ catch (error) {
122
+ /* Try next port if port is busy; throw for any other error */
123
+ if (!portUnavailableErrors.has(error.code || '')) {
124
+ throw error;
125
+ }
126
+ port += 1;
127
+ }
128
+ }
129
+ throw new Error('No available ports found');
130
+ }
131
+ module.exports = getPorts;
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { RspackDevServer } from "./server";
2
- export type { DevServer as Configuration } from "@rspack/core";
1
+ export { default as RspackDevServer } from './server';
2
+ export type { DevServer as Configuration } from '@rspack/core';
package/dist/index.js CHANGED
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.RspackDevServer = void 0;
4
7
  var server_1 = require("./server");
5
- Object.defineProperty(exports, "RspackDevServer", { enumerable: true, get: function () { return server_1.RspackDevServer; } });
8
+ Object.defineProperty(exports, "RspackDevServer", { enumerable: true, get: function () { return __importDefault(server_1).default; } });