webpack-dev-service 0.12.7 → 0.12.9

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 (60) hide show
  1. package/cjs/client/client.cjs +1 -1
  2. package/cjs/client/events.cjs +1 -1
  3. package/cjs/client/hot.cjs +1 -1
  4. package/cjs/client/index.cjs +1 -1
  5. package/cjs/client/main.cjs +1 -1
  6. package/cjs/client/ui/Overlay.cjs +1 -1
  7. package/cjs/client/ui/Progress.cjs +1 -1
  8. package/cjs/client/ui/utils.cjs +1 -1
  9. package/cjs/server/compose.cjs +1 -1
  10. package/cjs/server/dev/Service.cjs +1 -1
  11. package/cjs/server/dev/index.cjs +1 -1
  12. package/cjs/server/dev/middleware.cjs +1 -1
  13. package/cjs/server/dev/utils/fs.cjs +1 -1
  14. package/cjs/server/dev/utils/hash.cjs +1 -1
  15. package/cjs/server/dev/utils/http.cjs +1 -1
  16. package/cjs/server/dev/utils/path.cjs +1 -1
  17. package/cjs/server/dev/utils/paths.cjs +1 -1
  18. package/cjs/server/dev/utils/ready.cjs +1 -1
  19. package/cjs/server/dev/utils/setupHooks.cjs +1 -1
  20. package/cjs/server/dev/utils/setupOutputFileSystem.cjs +1 -1
  21. package/cjs/server/dev/utils/setupWatching.cjs +1 -1
  22. package/cjs/server/dev/utils/setupWriteToDisk.cjs +1 -1
  23. package/cjs/server/dev/utils/stream.cjs +54 -16
  24. package/cjs/server/hot/Socket.cjs +1 -1
  25. package/cjs/server/hot/index.cjs +1 -1
  26. package/cjs/server/hot/utils.cjs +1 -1
  27. package/cjs/server/index.cjs +1 -1
  28. package/cjs/server/schema.cjs +1 -1
  29. package/cjs/server/utils.cjs +1 -1
  30. package/esm/client/client.js +1 -1
  31. package/esm/client/events.js +1 -1
  32. package/esm/client/hot.js +1 -1
  33. package/esm/client/index.js +1 -1
  34. package/esm/client/main.js +1 -1
  35. package/esm/client/ui/Overlay.js +1 -1
  36. package/esm/client/ui/Progress.js +1 -1
  37. package/esm/client/ui/utils.js +1 -1
  38. package/esm/server/compose.js +1 -1
  39. package/esm/server/dev/Service.js +1 -1
  40. package/esm/server/dev/index.js +1 -1
  41. package/esm/server/dev/middleware.js +1 -1
  42. package/esm/server/dev/utils/fs.js +1 -1
  43. package/esm/server/dev/utils/hash.js +1 -1
  44. package/esm/server/dev/utils/http.js +1 -1
  45. package/esm/server/dev/utils/path.js +1 -1
  46. package/esm/server/dev/utils/paths.js +1 -1
  47. package/esm/server/dev/utils/ready.js +1 -1
  48. package/esm/server/dev/utils/setupHooks.js +1 -1
  49. package/esm/server/dev/utils/setupOutputFileSystem.js +1 -1
  50. package/esm/server/dev/utils/setupWatching.js +1 -1
  51. package/esm/server/dev/utils/setupWriteToDisk.js +1 -1
  52. package/esm/server/dev/utils/stream.js +54 -16
  53. package/esm/server/hot/Socket.js +1 -1
  54. package/esm/server/hot/index.js +1 -1
  55. package/esm/server/hot/utils.js +1 -1
  56. package/esm/server/index.js +1 -1
  57. package/esm/server/schema.js +1 -1
  58. package/esm/server/utils.js +1 -1
  59. package/package.json +2 -2
  60. package/types/server/dev/utils/stream.d.ts +8 -1
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -15,12 +15,13 @@ const node_stream = require('node:stream');
15
15
  /**
16
16
  * @module stream
17
17
  */
18
+ const DISPOSE_EVENT = Symbol('dispose');
18
19
  class FileReadStream extends node_stream.Readable {
19
- fd;
20
20
  fs;
21
21
  path;
22
22
  ranges;
23
23
  bytesRead = 0;
24
+ fd = null;
24
25
  reading = false;
25
26
  currentRangeIndex = 0;
26
27
  readState = 0 /* ReadState.PREFIX */;
@@ -31,7 +32,7 @@ class FileReadStream extends node_stream.Readable {
31
32
  * @param options The stream options.
32
33
  */
33
34
  constructor(path, ranges, options) {
34
- const { fs, encoding, highWaterMark } = options;
35
+ const { fs, encoding, highWaterMark = 65536 } = options;
35
36
  super({ encoding, highWaterMark });
36
37
  this.fs = fs;
37
38
  this.path = path;
@@ -81,6 +82,7 @@ class FileReadStream extends node_stream.Readable {
81
82
  let bytesRead = 0;
82
83
  const padding = this.getPadding(range);
83
84
  const hasRangePadding = padding != null;
85
+ // If padding exists.
84
86
  if (hasRangePadding) {
85
87
  const { length } = padding;
86
88
  const begin = this.bytesRead;
@@ -91,9 +93,11 @@ class FileReadStream extends node_stream.Readable {
91
93
  this.bytesRead = end;
92
94
  }
93
95
  }
96
+ // If no padding or read completed.
94
97
  if (bytesRead <= 0) {
95
98
  this.bytesRead = 0;
96
99
  const { readState } = this;
100
+ // Change read state.
97
101
  switch (readState) {
98
102
  case 0 /* ReadState.PREFIX */:
99
103
  this.readState = 1 /* ReadState.RANGE */;
@@ -123,21 +127,35 @@ class FileReadStream extends node_stream.Readable {
123
127
  this.reading = true;
124
128
  const { bytesRead } = this;
125
129
  const position = range.offset + bytesRead;
126
- const buffer = node_buffer.Buffer.alloc(Math.min(size, range.length - bytesRead));
130
+ const buffer = node_buffer.Buffer.allocUnsafeSlow(Math.min(size, range.length - bytesRead));
131
+ // Read file range.
127
132
  this.fs.read(fd, buffer, 0, buffer.length, position, (readError, bytesRead, buffer) => {
128
- if (readError != null) {
129
- this.destroy(readError);
133
+ this.reading = false;
134
+ // Tell ._destroy() that it's safe to close the fd now.
135
+ if (this.destroyed) {
136
+ this.emit(DISPOSE_EVENT, readError);
130
137
  } else {
131
- if (bytesRead > 0) {
132
- this.push(buffer.subarray(0, bytesRead));
133
- this.bytesRead += bytesRead;
138
+ if (readError != null) {
139
+ this.destroy(readError);
134
140
  } else {
135
- this.bytesRead = 0;
136
- this.readState = 2 /* ReadState.SUFFIX */;
137
- this.readFilePadding(fd, range, size);
141
+ if (bytesRead > 0) {
142
+ if (bytesRead !== buffer.length) {
143
+ // Slow path. Shrink to fit.
144
+ // Copy instead of slice so that we don't retain
145
+ // large backing buffer for small reads.
146
+ const chunk = node_buffer.Buffer.allocUnsafeSlow(bytesRead);
147
+ buffer.copy(chunk, 0, 0, bytesRead);
148
+ buffer = chunk;
149
+ }
150
+ this.push(buffer);
151
+ this.bytesRead += bytesRead;
152
+ } else {
153
+ this.bytesRead = 0;
154
+ this.readState = 2 /* ReadState.SUFFIX */;
155
+ this.readFilePadding(fd, range, size);
156
+ }
138
157
  }
139
158
  }
140
- this.reading = false;
141
159
  });
142
160
  }
143
161
  /**
@@ -149,10 +167,12 @@ class FileReadStream extends node_stream.Readable {
149
167
  if (!this.reading) {
150
168
  const { fd } = this;
151
169
  const range = this.getRange();
170
+ // If fd or range is null, finish stream.
152
171
  if (fd == null || range == null) {
153
172
  this.push(null);
154
173
  } else {
155
174
  const { readState } = this;
175
+ // Read bytes from range.
156
176
  switch (readState) {
157
177
  case 0 /* ReadState.PREFIX */:
158
178
  case 2 /* ReadState.SUFFIX */:
@@ -166,14 +186,16 @@ class FileReadStream extends node_stream.Readable {
166
186
  }
167
187
  }
168
188
  /**
169
- * @override
170
- * @method _destroy
189
+ * @private
190
+ * @method dispose
171
191
  * @param error The error.
172
192
  * @param callback The callback.
173
193
  */
174
- _destroy(error, callback) {
194
+ dispose(error, callback) {
175
195
  const { fd } = this;
176
196
  if (fd != null) {
197
+ this.fd = null;
198
+ // Close the fd.
177
199
  this.fs.close(fd, closeError => {
178
200
  callback(error ?? closeError);
179
201
  });
@@ -181,6 +203,22 @@ class FileReadStream extends node_stream.Readable {
181
203
  callback(error);
182
204
  }
183
205
  }
206
+ /**
207
+ * @override
208
+ * @method _destroy
209
+ * @param error The error.
210
+ * @param callback The callback.
211
+ */
212
+ _destroy(error, callback) {
213
+ // Wait I/O completion.
214
+ if (this.reading) {
215
+ this.once(DISPOSE_EVENT, disposeError => {
216
+ this.dispose(error ?? disposeError, callback);
217
+ });
218
+ } else {
219
+ this.dispose(error, callback);
220
+ }
221
+ }
184
222
  }
185
223
 
186
224
  exports.FileReadStream = FileReadStream;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
package/esm/client/hot.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -13,12 +13,13 @@ import { Readable } from 'node:stream';
13
13
  /**
14
14
  * @module stream
15
15
  */
16
+ const DISPOSE_EVENT = Symbol('dispose');
16
17
  class FileReadStream extends Readable {
17
- fd;
18
18
  fs;
19
19
  path;
20
20
  ranges;
21
21
  bytesRead = 0;
22
+ fd = null;
22
23
  reading = false;
23
24
  currentRangeIndex = 0;
24
25
  readState = 0 /* ReadState.PREFIX */;
@@ -29,7 +30,7 @@ class FileReadStream extends Readable {
29
30
  * @param options The stream options.
30
31
  */
31
32
  constructor(path, ranges, options) {
32
- const { fs, encoding, highWaterMark } = options;
33
+ const { fs, encoding, highWaterMark = 65536 } = options;
33
34
  super({ encoding, highWaterMark });
34
35
  this.fs = fs;
35
36
  this.path = path;
@@ -79,6 +80,7 @@ class FileReadStream extends Readable {
79
80
  let bytesRead = 0;
80
81
  const padding = this.getPadding(range);
81
82
  const hasRangePadding = padding != null;
83
+ // If padding exists.
82
84
  if (hasRangePadding) {
83
85
  const { length } = padding;
84
86
  const begin = this.bytesRead;
@@ -89,9 +91,11 @@ class FileReadStream extends Readable {
89
91
  this.bytesRead = end;
90
92
  }
91
93
  }
94
+ // If no padding or read completed.
92
95
  if (bytesRead <= 0) {
93
96
  this.bytesRead = 0;
94
97
  const { readState } = this;
98
+ // Change read state.
95
99
  switch (readState) {
96
100
  case 0 /* ReadState.PREFIX */:
97
101
  this.readState = 1 /* ReadState.RANGE */;
@@ -121,21 +125,35 @@ class FileReadStream extends Readable {
121
125
  this.reading = true;
122
126
  const { bytesRead } = this;
123
127
  const position = range.offset + bytesRead;
124
- const buffer = Buffer.alloc(Math.min(size, range.length - bytesRead));
128
+ const buffer = Buffer.allocUnsafeSlow(Math.min(size, range.length - bytesRead));
129
+ // Read file range.
125
130
  this.fs.read(fd, buffer, 0, buffer.length, position, (readError, bytesRead, buffer) => {
126
- if (readError != null) {
127
- this.destroy(readError);
131
+ this.reading = false;
132
+ // Tell ._destroy() that it's safe to close the fd now.
133
+ if (this.destroyed) {
134
+ this.emit(DISPOSE_EVENT, readError);
128
135
  } else {
129
- if (bytesRead > 0) {
130
- this.push(buffer.subarray(0, bytesRead));
131
- this.bytesRead += bytesRead;
136
+ if (readError != null) {
137
+ this.destroy(readError);
132
138
  } else {
133
- this.bytesRead = 0;
134
- this.readState = 2 /* ReadState.SUFFIX */;
135
- this.readFilePadding(fd, range, size);
139
+ if (bytesRead > 0) {
140
+ if (bytesRead !== buffer.length) {
141
+ // Slow path. Shrink to fit.
142
+ // Copy instead of slice so that we don't retain
143
+ // large backing buffer for small reads.
144
+ const chunk = Buffer.allocUnsafeSlow(bytesRead);
145
+ buffer.copy(chunk, 0, 0, bytesRead);
146
+ buffer = chunk;
147
+ }
148
+ this.push(buffer);
149
+ this.bytesRead += bytesRead;
150
+ } else {
151
+ this.bytesRead = 0;
152
+ this.readState = 2 /* ReadState.SUFFIX */;
153
+ this.readFilePadding(fd, range, size);
154
+ }
136
155
  }
137
156
  }
138
- this.reading = false;
139
157
  });
140
158
  }
141
159
  /**
@@ -147,10 +165,12 @@ class FileReadStream extends Readable {
147
165
  if (!this.reading) {
148
166
  const { fd } = this;
149
167
  const range = this.getRange();
168
+ // If fd or range is null, finish stream.
150
169
  if (fd == null || range == null) {
151
170
  this.push(null);
152
171
  } else {
153
172
  const { readState } = this;
173
+ // Read bytes from range.
154
174
  switch (readState) {
155
175
  case 0 /* ReadState.PREFIX */:
156
176
  case 2 /* ReadState.SUFFIX */:
@@ -164,14 +184,16 @@ class FileReadStream extends Readable {
164
184
  }
165
185
  }
166
186
  /**
167
- * @override
168
- * @method _destroy
187
+ * @private
188
+ * @method dispose
169
189
  * @param error The error.
170
190
  * @param callback The callback.
171
191
  */
172
- _destroy(error, callback) {
192
+ dispose(error, callback) {
173
193
  const { fd } = this;
174
194
  if (fd != null) {
195
+ this.fd = null;
196
+ // Close the fd.
175
197
  this.fs.close(fd, closeError => {
176
198
  callback(error ?? closeError);
177
199
  });
@@ -179,6 +201,22 @@ class FileReadStream extends Readable {
179
201
  callback(error);
180
202
  }
181
203
  }
204
+ /**
205
+ * @override
206
+ * @method _destroy
207
+ * @param error The error.
208
+ * @param callback The callback.
209
+ */
210
+ _destroy(error, callback) {
211
+ // Wait I/O completion.
212
+ if (this.reading) {
213
+ this.once(DISPOSE_EVENT, disposeError => {
214
+ this.dispose(error ?? disposeError, callback);
215
+ });
216
+ } else {
217
+ this.dispose(error, callback);
218
+ }
219
+ }
182
220
  }
183
221
 
184
222
  export { FileReadStream };
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @package webpack-dev-service
3
3
  * @license MIT
4
- * @version 0.12.7
4
+ * @version 0.12.9
5
5
  * @author nuintun <nuintun@qq.com>
6
6
  * @description A koa 2 middleware for webpack development and hot reloading.
7
7
  * @see https://github.com/nuintun/webpack-dev-service#readme
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webpack-dev-service",
3
- "version": "0.12.7",
3
+ "version": "0.12.9",
4
4
  "description": "A koa 2 middleware for webpack development and hot reloading.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -91,7 +91,7 @@
91
91
  "@swc/core": "^1.7.36",
92
92
  "@swc/helpers": "^0.5.13",
93
93
  "@types/etag": "^1.8.3",
94
- "@types/node": "^22.7.5",
94
+ "@types/node": "^22.7.6",
95
95
  "@types/range-parser": "^1.2.7",
96
96
  "@types/react": "^18.3.11",
97
97
  "@types/react-dom": "^18.3.1",
@@ -18,11 +18,11 @@ interface Callback {
18
18
  (error?: Error | null): void;
19
19
  }
20
20
  export declare class FileReadStream extends Readable {
21
- private fd?;
22
21
  private fs;
23
22
  private path;
24
23
  private ranges;
25
24
  private bytesRead;
25
+ private fd;
26
26
  private reading;
27
27
  private currentRangeIndex;
28
28
  private readState;
@@ -72,6 +72,13 @@ export declare class FileReadStream extends Readable {
72
72
  * @param size The number of bytes to read.
73
73
  */
74
74
  _read(size: number): void;
75
+ /**
76
+ * @private
77
+ * @method dispose
78
+ * @param error The error.
79
+ * @param callback The callback.
80
+ */
81
+ private dispose;
75
82
  /**
76
83
  * @override
77
84
  * @method _destroy