rspack-dev-middleware 0.1.32 → 0.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.
- package/README.md +38 -29
- package/cjs/client/HotUpdate.cjs +78 -0
- package/cjs/client/HotUpdate.d.cts +26 -0
- package/cjs/client/client.cjs +15 -17
- package/cjs/client/events.cjs +1 -1
- package/cjs/client/index.cjs +1 -1
- package/cjs/client/main.cjs +1 -1
- package/cjs/client/ui/Overlay.cjs +1 -1
- package/cjs/client/ui/Progress.cjs +1 -1
- package/cjs/client/ui/images/rspack-logo.svg.cjs +1 -1
- package/cjs/client/ui/utils.cjs +1 -1
- package/cjs/server/compose.cjs +1 -1
- package/cjs/server/dev/ReadStream.cjs +1 -1
- package/cjs/server/dev/Service.cjs +1 -1
- package/cjs/server/dev/index.cjs +3 -10
- package/cjs/server/dev/index.d.cts +1 -1
- package/cjs/server/dev/interface.d.cts +0 -3
- package/cjs/server/dev/middleware.cjs +8 -15
- package/cjs/server/dev/middleware.d.cts +1 -1
- package/cjs/server/dev/utils/fs.cjs +1 -1
- package/cjs/server/dev/utils/hash.cjs +1 -1
- package/cjs/server/dev/utils/http.cjs +1 -1
- package/cjs/server/dev/utils/path.cjs +1 -1
- package/cjs/server/dev/utils/paths.cjs +1 -1
- package/cjs/server/dev/utils/ready.cjs +1 -1
- package/cjs/server/dev/utils/setupHooks.cjs +9 -6
- package/cjs/server/dev/utils/setupOutputFileSystem.cjs +1 -1
- package/cjs/server/dev/utils/setupWatching.cjs +1 -1
- package/cjs/server/dev/utils/setupWriteToDisk.cjs +1 -1
- package/cjs/server/hot/Socket.cjs +8 -1
- package/cjs/server/hot/index.cjs +3 -3
- package/cjs/server/hot/utils.cjs +1 -1
- package/cjs/server/index.cjs +4 -5
- package/cjs/server/index.d.cts +1 -1
- package/cjs/server/schema.cjs +1 -1
- package/cjs/server/utils.cjs +1 -1
- package/esm/client/HotUpdate.d.ts +26 -0
- package/esm/client/HotUpdate.js +76 -0
- package/esm/client/client.js +16 -18
- package/esm/client/events.js +1 -1
- package/esm/client/index.js +1 -1
- package/esm/client/main.js +1 -1
- package/esm/client/ui/Overlay.js +1 -1
- package/esm/client/ui/Progress.js +1 -1
- package/esm/client/ui/images/rspack-logo.svg.js +1 -1
- package/esm/client/ui/utils.js +1 -1
- package/esm/server/compose.js +1 -1
- package/esm/server/dev/ReadStream.js +1 -1
- package/esm/server/dev/Service.js +1 -1
- package/esm/server/dev/index.d.ts +1 -1
- package/esm/server/dev/index.js +3 -10
- package/esm/server/dev/interface.d.ts +0 -3
- package/esm/server/dev/middleware.d.ts +1 -1
- package/esm/server/dev/middleware.js +8 -15
- package/esm/server/dev/utils/fs.js +1 -1
- package/esm/server/dev/utils/hash.js +1 -1
- package/esm/server/dev/utils/http.js +1 -1
- package/esm/server/dev/utils/path.js +1 -1
- package/esm/server/dev/utils/paths.js +1 -1
- package/esm/server/dev/utils/ready.js +1 -1
- package/esm/server/dev/utils/setupHooks.js +9 -6
- package/esm/server/dev/utils/setupOutputFileSystem.js +1 -1
- package/esm/server/dev/utils/setupWatching.js +1 -1
- package/esm/server/dev/utils/setupWriteToDisk.js +1 -1
- package/esm/server/hot/Socket.js +8 -1
- package/esm/server/hot/index.js +3 -3
- package/esm/server/hot/utils.js +1 -1
- package/esm/server/index.d.ts +1 -1
- package/esm/server/index.js +4 -5
- package/esm/server/schema.js +1 -1
- package/esm/server/utils.js +1 -1
- package/global.d.ts +0 -2
- package/package.json +6 -6
- package/cjs/client/hot.cjs +0 -111
- package/cjs/client/hot.d.cts +0 -16
- package/esm/client/hot.d.ts +0 -16
- package/esm/client/hot.js +0 -108
package/README.md
CHANGED
|
@@ -19,20 +19,19 @@
|
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
import Koa from 'koa';
|
|
22
|
-
import memfs from 'memfs';
|
|
23
22
|
import path from 'node:path';
|
|
24
23
|
import rspack from '@rspack/core';
|
|
25
24
|
import compress from 'koa-compress';
|
|
25
|
+
import { Volume, createFsFromVolume } from 'memfs';
|
|
26
26
|
import { server as dev } from 'rspack-dev-middleware';
|
|
27
27
|
import ReactRefreshPlugin from '@rspack/plugin-react-refresh';
|
|
28
28
|
|
|
29
29
|
const entryHTML = path.resolve('wwwroot/index.html');
|
|
30
30
|
|
|
31
31
|
function createMemfs() {
|
|
32
|
-
const volume = new
|
|
33
|
-
const fs = memfs.createFsFromVolume(volume);
|
|
32
|
+
const volume = new Volume();
|
|
34
33
|
|
|
35
|
-
return
|
|
34
|
+
return createFsFromVolume(volume);
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
function httpError(error) {
|
|
@@ -50,6 +49,7 @@ const html = {
|
|
|
50
49
|
};
|
|
51
50
|
|
|
52
51
|
const compiler = rspack({
|
|
52
|
+
cache: true,
|
|
53
53
|
name: 'React',
|
|
54
54
|
mode: 'development',
|
|
55
55
|
context: path.resolve('src'),
|
|
@@ -61,25 +61,6 @@ const compiler = rspack({
|
|
|
61
61
|
path: path.resolve('wwwroot/public'),
|
|
62
62
|
assetModuleFilename: `[path][name][ext]`
|
|
63
63
|
},
|
|
64
|
-
experiments: {
|
|
65
|
-
css: true
|
|
66
|
-
},
|
|
67
|
-
watchOptions: {
|
|
68
|
-
aggregateTimeout: 256
|
|
69
|
-
},
|
|
70
|
-
stats: {
|
|
71
|
-
colors: true,
|
|
72
|
-
chunks: false,
|
|
73
|
-
children: false,
|
|
74
|
-
entrypoints: false,
|
|
75
|
-
runtimeModules: false,
|
|
76
|
-
dependentModules: false
|
|
77
|
-
},
|
|
78
|
-
devtool: 'eval-cheap-module-source-map',
|
|
79
|
-
resolve: {
|
|
80
|
-
fallback: { url: false },
|
|
81
|
-
extensions: ['.ts', '.tsx', '.js', '.jsx']
|
|
82
|
-
},
|
|
83
64
|
module: {
|
|
84
65
|
parser: {
|
|
85
66
|
'css/auto': {
|
|
@@ -129,20 +110,50 @@ const compiler = rspack({
|
|
|
129
110
|
}
|
|
130
111
|
]
|
|
131
112
|
},
|
|
113
|
+
resolve: {
|
|
114
|
+
extensions: ['.ts', '.tsx', '.js', '.jsx']
|
|
115
|
+
},
|
|
132
116
|
plugins: [
|
|
133
117
|
new ReactRefreshPlugin(),
|
|
134
118
|
new rspack.ProgressPlugin({
|
|
135
119
|
prefix: '[Rspack]',
|
|
136
120
|
progressChars: '█▒'
|
|
137
121
|
}),
|
|
138
|
-
new rspack.HtmlRspackPlugin(html)
|
|
139
|
-
|
|
122
|
+
new rspack.HtmlRspackPlugin(html),
|
|
123
|
+
new rspack.WarnCaseSensitiveModulesPlugin()
|
|
124
|
+
],
|
|
125
|
+
watchOptions: {
|
|
126
|
+
aggregateTimeout: 256
|
|
127
|
+
},
|
|
128
|
+
stats: {
|
|
129
|
+
all: false,
|
|
130
|
+
assets: true,
|
|
131
|
+
colors: true,
|
|
132
|
+
errors: true,
|
|
133
|
+
timings: true,
|
|
134
|
+
version: true,
|
|
135
|
+
warnings: true,
|
|
136
|
+
errorsCount: true,
|
|
137
|
+
warningsCount: true,
|
|
138
|
+
groupAssetsByPath: true
|
|
139
|
+
},
|
|
140
|
+
devtool: 'eval-cheap-module-source-map',
|
|
141
|
+
experiments: {
|
|
142
|
+
css: true,
|
|
143
|
+
cache: {
|
|
144
|
+
type: 'persistent',
|
|
145
|
+
storage: {
|
|
146
|
+
type: 'filesystem',
|
|
147
|
+
directory: path.resolve('../node_modules/.cache/rspack')
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
140
151
|
});
|
|
141
152
|
|
|
142
153
|
const port = 8000;
|
|
143
154
|
const app = new Koa();
|
|
144
155
|
const fs = createMemfs();
|
|
145
|
-
const server = dev(compiler, {
|
|
156
|
+
const server = await dev(compiler, {
|
|
146
157
|
fs,
|
|
147
158
|
headers: {
|
|
148
159
|
'Cache-Control': 'no-cache',
|
|
@@ -168,9 +179,7 @@ app.on('error', error => {
|
|
|
168
179
|
});
|
|
169
180
|
|
|
170
181
|
app.listen(port, () => {
|
|
171
|
-
server.
|
|
172
|
-
server.logger.info(`server run at: \u001B[36mhttp://127.0.0.1:${port}\u001B[0m`);
|
|
173
|
-
});
|
|
182
|
+
server.logger.info(`server run at: \x1b[36mhttp://127.0.0.1:${port}\x1b[0m`);
|
|
174
183
|
});
|
|
175
184
|
```
|
|
176
185
|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package rspack-dev-middleware
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @version 0.2.0
|
|
5
|
+
* @author nuintun <nuintun@qq.com>
|
|
6
|
+
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
|
+
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @module HotUpdate
|
|
14
|
+
*/
|
|
15
|
+
class HotUpdate {
|
|
16
|
+
#hmr;
|
|
17
|
+
#fallback;
|
|
18
|
+
#pending = false;
|
|
19
|
+
#hash = __webpack_hash__;
|
|
20
|
+
#hot = module.hot;
|
|
21
|
+
/**
|
|
22
|
+
* @constructor
|
|
23
|
+
* @param hmr Whether to enable HMR hot update.
|
|
24
|
+
* @param fallback Fallback handler for update failures.
|
|
25
|
+
*/
|
|
26
|
+
constructor(hmr = true, fallback) {
|
|
27
|
+
this.#hmr = hmr;
|
|
28
|
+
this.#fallback = fallback;
|
|
29
|
+
// Listen to status changes
|
|
30
|
+
this.#hot?.addStatusHandler(async status => {
|
|
31
|
+
if (this.#pending && status === 'idle') {
|
|
32
|
+
this.#pending = false;
|
|
33
|
+
await this.performUpdate();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @method updateHash
|
|
39
|
+
* @description Update hash value.
|
|
40
|
+
* @param hash New hash value.
|
|
41
|
+
*/
|
|
42
|
+
updateHash(hash) {
|
|
43
|
+
this.#hash = hash;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @method #isUpdateAvailable
|
|
47
|
+
* @description Check if new updates are available.
|
|
48
|
+
*/
|
|
49
|
+
#isUpdateAvailable() {
|
|
50
|
+
return this.#hash !== __webpack_hash__;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @method performUpdate
|
|
54
|
+
* @description Execute update strategy.
|
|
55
|
+
*/
|
|
56
|
+
async performUpdate() {
|
|
57
|
+
if (this.#isUpdateAvailable()) {
|
|
58
|
+
if (!this.#hmr || !this.#hot) {
|
|
59
|
+
await this.#fallback();
|
|
60
|
+
} else if (this.#hot.status() === 'idle') {
|
|
61
|
+
try {
|
|
62
|
+
const outdated = await this.#hot.check(true);
|
|
63
|
+
if (outdated == null || outdated.length <= 0) {
|
|
64
|
+
if (this.#isUpdateAvailable()) {
|
|
65
|
+
await this.#fallback();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
} catch (error) {
|
|
69
|
+
await this.#fallback(error);
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
this.#pending = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
exports.HotUpdate = HotUpdate;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module HotUpdate
|
|
3
|
+
*/
|
|
4
|
+
export interface Fallback {
|
|
5
|
+
(error?: Error): Promise<void> | void;
|
|
6
|
+
}
|
|
7
|
+
export declare class HotUpdate {
|
|
8
|
+
#private;
|
|
9
|
+
/**
|
|
10
|
+
* @constructor
|
|
11
|
+
* @param hmr Whether to enable HMR hot update.
|
|
12
|
+
* @param fallback Fallback handler for update failures.
|
|
13
|
+
*/
|
|
14
|
+
constructor(hmr: boolean | undefined, fallback: Fallback);
|
|
15
|
+
/**
|
|
16
|
+
* @method updateHash
|
|
17
|
+
* @description Update hash value.
|
|
18
|
+
* @param hash New hash value.
|
|
19
|
+
*/
|
|
20
|
+
updateHash(hash: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* @method performUpdate
|
|
23
|
+
* @description Execute update strategy.
|
|
24
|
+
*/
|
|
25
|
+
performUpdate(): Promise<void>;
|
|
26
|
+
}
|
package/cjs/client/client.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -12,31 +12,29 @@
|
|
|
12
12
|
const events = require('./events.cjs');
|
|
13
13
|
const Overlay = require('./ui/Overlay.cjs');
|
|
14
14
|
const Progress = require('./ui/Progress.cjs');
|
|
15
|
-
const
|
|
15
|
+
const HotUpdate = require('./HotUpdate.cjs');
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* @module client
|
|
19
19
|
*/
|
|
20
20
|
function createClient(options) {
|
|
21
|
-
let updateTimer;
|
|
22
|
-
const UPDATE_DELAY = 128;
|
|
23
21
|
const RETRY_INTERVAL = 3000;
|
|
24
22
|
const progress = new Progress.Progress();
|
|
25
23
|
const overlay = new Overlay.Overlay(options.name);
|
|
26
24
|
const fallback = () => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
25
|
+
return new Promise(resolve => {
|
|
26
|
+
queueMicrotask(() => {
|
|
27
|
+
if (options.reload) {
|
|
28
|
+
self.location.reload();
|
|
29
|
+
} else {
|
|
30
|
+
console.warn('[HMR] Hot update failed. Please reload the page manually.');
|
|
31
|
+
}
|
|
32
|
+
resolve();
|
|
33
|
+
});
|
|
34
|
+
});
|
|
37
35
|
};
|
|
36
|
+
const hot = new HotUpdate.HotUpdate(options.hmr, fallback);
|
|
38
37
|
const onInvalid = () => {
|
|
39
|
-
clearTimeout(updateTimer);
|
|
40
38
|
if (options.progress) {
|
|
41
39
|
progress.update(0);
|
|
42
40
|
progress.show();
|
|
@@ -74,14 +72,14 @@ function createClient(options) {
|
|
|
74
72
|
overlay.show();
|
|
75
73
|
}
|
|
76
74
|
if (errors.length <= 0) {
|
|
77
|
-
|
|
75
|
+
hot.performUpdate();
|
|
78
76
|
}
|
|
79
77
|
};
|
|
80
78
|
const onOk = () => {
|
|
81
79
|
progress.update(1);
|
|
82
80
|
progress.hide();
|
|
83
81
|
overlay.hide();
|
|
84
|
-
|
|
82
|
+
hot.performUpdate();
|
|
85
83
|
};
|
|
86
84
|
const parseMessage = message => {
|
|
87
85
|
try {
|
package/cjs/client/events.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
package/cjs/client/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
package/cjs/client/main.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
package/cjs/client/ui/utils.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
package/cjs/server/compose.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
package/cjs/server/dev/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
-
const ready = require('./utils/ready.cjs');
|
|
13
12
|
const fs = require('./utils/fs.cjs');
|
|
14
13
|
const middleware = require('./middleware.cjs');
|
|
15
14
|
const setupHooks = require('./utils/setupHooks.cjs');
|
|
@@ -38,18 +37,12 @@ function setup(compiler, options) {
|
|
|
38
37
|
setupWatching.setupWatching(context);
|
|
39
38
|
return context;
|
|
40
39
|
}
|
|
41
|
-
function dev(compiler, options) {
|
|
40
|
+
async function dev(compiler, options) {
|
|
42
41
|
const context = setup(compiler, options);
|
|
43
|
-
return Object.assign(middleware.middleware(context), {
|
|
44
|
-
get state() {
|
|
45
|
-
return !!context.stats;
|
|
46
|
-
},
|
|
42
|
+
return Object.assign(await middleware.middleware(context), {
|
|
47
43
|
get logger() {
|
|
48
44
|
return context.logger;
|
|
49
45
|
},
|
|
50
|
-
ready(callback) {
|
|
51
|
-
ready.ready(context, callback);
|
|
52
|
-
},
|
|
53
46
|
close(callback) {
|
|
54
47
|
context.watching.close(callback);
|
|
55
48
|
},
|
|
@@ -5,4 +5,4 @@ import { Middleware } from 'koa';
|
|
|
5
5
|
import { UnionCompiler } from '../interface.cjs';
|
|
6
6
|
import { Expose, Options } from './interface.cjs';
|
|
7
7
|
export { Expose, Options };
|
|
8
|
-
export declare function dev(compiler: UnionCompiler, options: Options): Middleware & Expose
|
|
8
|
+
export declare function dev(compiler: UnionCompiler, options: Options): Promise<Middleware & Expose>;
|
|
@@ -13,8 +13,6 @@ export interface ErrorCallback {
|
|
|
13
13
|
}
|
|
14
14
|
export interface Expose {
|
|
15
15
|
readonly logger: Logger;
|
|
16
|
-
readonly state: boolean;
|
|
17
|
-
readonly ready: (callback: Callback) => void;
|
|
18
16
|
readonly close: (callback: ErrorCallback) => void;
|
|
19
17
|
readonly invalidate: (callback: ErrorCallback) => void;
|
|
20
18
|
}
|
|
@@ -29,7 +27,6 @@ export interface Context {
|
|
|
29
27
|
callbacks: Callback[];
|
|
30
28
|
compiler: UnionCompiler;
|
|
31
29
|
watching: UnionWatching;
|
|
32
|
-
services?: FileService[];
|
|
33
30
|
stats: UnionStats | null;
|
|
34
31
|
options: Options & {
|
|
35
32
|
fs: FileSystem;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -18,11 +18,6 @@ const paths = require('./utils/paths.cjs');
|
|
|
18
18
|
* @module middleware
|
|
19
19
|
*/
|
|
20
20
|
function getFileServices(context, stats) {
|
|
21
|
-
const cached = context.services;
|
|
22
|
-
// Cache hit.
|
|
23
|
-
if (cached) {
|
|
24
|
-
return cached;
|
|
25
|
-
}
|
|
26
21
|
const { options } = context;
|
|
27
22
|
const paths$1 = paths.getPaths(stats);
|
|
28
23
|
const services = [];
|
|
@@ -30,8 +25,6 @@ function getFileServices(context, stats) {
|
|
|
30
25
|
for (const [outputPath, publicPath] of paths$1) {
|
|
31
26
|
services.push([publicPath, new Service.Service(outputPath, options)]);
|
|
32
27
|
}
|
|
33
|
-
// Cache services.
|
|
34
|
-
context.services = services;
|
|
35
28
|
// Return services.
|
|
36
29
|
return services;
|
|
37
30
|
}
|
|
@@ -49,24 +42,24 @@ function getFileServicesAsync(context) {
|
|
|
49
42
|
}
|
|
50
43
|
});
|
|
51
44
|
}
|
|
52
|
-
function middleware(context) {
|
|
45
|
+
async function middleware(context) {
|
|
46
|
+
// Get the file services.
|
|
47
|
+
const services = await getFileServicesAsync(context);
|
|
53
48
|
// Middleware.
|
|
54
|
-
return async (
|
|
55
|
-
const { request } =
|
|
49
|
+
return async (context, next) => {
|
|
50
|
+
const { request } = context;
|
|
56
51
|
const pathname = http.decodeURI(request.path);
|
|
57
52
|
// Pathname decode failed or includes null byte(s).
|
|
58
53
|
if (pathname === -1 || pathname.includes('\0')) {
|
|
59
|
-
return
|
|
54
|
+
return context.throw(400);
|
|
60
55
|
}
|
|
61
56
|
// Get request method.
|
|
62
57
|
const { method } = request;
|
|
63
58
|
// Only support GET and HEAD (405).
|
|
64
59
|
if (method === 'GET' || method === 'HEAD') {
|
|
65
|
-
// Get the file services.
|
|
66
|
-
const services = await getFileServicesAsync(context);
|
|
67
60
|
// Try to respond.
|
|
68
61
|
for (const [publicPath, service] of services) {
|
|
69
|
-
if (await service.respond(pathname,
|
|
62
|
+
if (await service.respond(pathname, context, publicPath)) {
|
|
70
63
|
return;
|
|
71
64
|
}
|
|
72
65
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -87,11 +87,14 @@ function setupHooks(context) {
|
|
|
87
87
|
onCompilationDone(stats, statsOptions);
|
|
88
88
|
// Callbacks.
|
|
89
89
|
const { callbacks } = context;
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
// Call callbacks if there are any.
|
|
91
|
+
if (callbacks.length > 0) {
|
|
92
|
+
// Clear callbacks.
|
|
93
|
+
context.callbacks = [];
|
|
94
|
+
// Call callbacks.
|
|
95
|
+
for (const callback of callbacks) {
|
|
96
|
+
callback(stats);
|
|
97
|
+
}
|
|
95
98
|
}
|
|
96
99
|
// Log compilation finished.
|
|
97
100
|
context.logger.log('compilation finished');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package rspack-dev-middleware
|
|
3
3
|
* @license MIT
|
|
4
|
-
* @version 0.
|
|
4
|
+
* @version 0.2.0
|
|
5
5
|
* @author nuintun <nuintun@qq.com>
|
|
6
6
|
* @description A koa 2 middleware for rspack development and hot reloading.
|
|
7
7
|
* @see https://github.com/nuintun/rspack-dev-middleware#readme
|