@rsbuild/core 0.0.17 → 0.0.19
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/bin/rsbuild.js +11 -0
- package/dist/cli/commands.d.ts +3 -0
- package/dist/cli/commands.js +4 -2
- package/dist/cli/config.d.ts +4 -0
- package/dist/cli/index.js +2 -1
- package/dist/plugins/define.js +8 -18
- package/dist/plugins/index.js +0 -1
- package/dist/plugins/nodeAddons.js +10 -17
- package/dist/plugins/startUrl.js +11 -15
- package/dist/rspack-provider/core/createCompiler.d.ts +4 -1
- package/dist/rspack-provider/core/createCompiler.js +26 -7
- package/dist/rspack-provider/core/devMiddleware.d.ts +2 -4
- package/dist/rspack-provider/plugins/progress.js +5 -1
- package/dist/rspack-provider/plugins/swc.js +2 -3
- package/dist/rspack-provider/provider.js +5 -3
- package/dist/rspack-provider/shared/plugin.js +0 -1
- package/dist/server/constants.d.ts +6 -0
- package/dist/server/constants.js +49 -0
- package/dist/server/dev-middleware/hmr-client/createSocketUrl.d.ts +16 -0
- package/dist/server/dev-middleware/hmr-client/createSocketUrl.js +68 -0
- package/dist/server/dev-middleware/hmr-client/index.d.ts +1 -0
- package/dist/server/dev-middleware/hmr-client/index.js +164 -0
- package/dist/server/dev-middleware/index.d.ts +22 -0
- package/dist/server/dev-middleware/index.js +90 -0
- package/dist/server/dev-middleware/socketServer.d.ts +22 -0
- package/dist/server/dev-middleware/socketServer.js +167 -0
- package/dist/server/devServer.d.ts +35 -0
- package/dist/server/devServer.js +235 -0
- package/dist/server/https.d.ts +6 -0
- package/dist/server/https.js +50 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +31 -0
- package/dist/server/middlewares.d.ts +2 -0
- package/dist/server/middlewares.js +35 -0
- package/dist/server/prodServer.d.ts +27 -0
- package/dist/server/prodServer.js +136 -0
- package/dist/server/proxy.d.ts +9 -0
- package/dist/server/proxy.js +92 -0
- package/package.json +32 -5
- package/types.d.ts +130 -0
- package/dist/plugins/assetsRetry.d.ts +0 -2
- package/dist/plugins/assetsRetry.js +0 -66
- package/dist/rspack-provider/core/startDevServer.d.ts +0 -6
- package/dist/rspack-provider/core/startDevServer.js +0 -84
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var devServer_exports = {};
|
|
30
|
+
__export(devServer_exports, {
|
|
31
|
+
RsbuildDevServer: () => RsbuildDevServer,
|
|
32
|
+
startDevServer: () => startDevServer
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(devServer_exports);
|
|
35
|
+
var import_http = require("http");
|
|
36
|
+
var import_https = require("https");
|
|
37
|
+
var import_url = __toESM(require("url"));
|
|
38
|
+
var import_shared = require("@rsbuild/shared");
|
|
39
|
+
var import_constants = require("./constants");
|
|
40
|
+
var import_dev_middleware = __toESM(require("./dev-middleware"));
|
|
41
|
+
var import_deepmerge = require("@rsbuild/shared/deepmerge");
|
|
42
|
+
var import_connect = __toESM(require("connect"));
|
|
43
|
+
var import_proxy = require("./proxy");
|
|
44
|
+
var import_middlewares = require("./middlewares");
|
|
45
|
+
class RsbuildDevServer {
|
|
46
|
+
constructor(options) {
|
|
47
|
+
this.middlewares = (0, import_connect.default)();
|
|
48
|
+
this.pwd = options.pwd;
|
|
49
|
+
this.dev = this.getDevOptions(options);
|
|
50
|
+
this.devMiddleware = new import_dev_middleware.default({
|
|
51
|
+
dev: this.dev,
|
|
52
|
+
devMiddleware: options.devMiddleware
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
getDevOptions(options) {
|
|
56
|
+
const devOptions = typeof options.dev === "boolean" ? {} : options.dev;
|
|
57
|
+
const defaultOptions = (0, import_constants.getDefaultDevOptions)();
|
|
58
|
+
return (0, import_deepmerge.deepmerge)(defaultOptions, devOptions);
|
|
59
|
+
}
|
|
60
|
+
applySetupMiddlewares() {
|
|
61
|
+
const setupMiddlewares = this.dev.setupMiddlewares || [];
|
|
62
|
+
const serverOptions = {
|
|
63
|
+
sockWrite: (type, data) => this.devMiddleware.sockWrite(type, data)
|
|
64
|
+
};
|
|
65
|
+
const before = [];
|
|
66
|
+
const after = [];
|
|
67
|
+
setupMiddlewares.forEach((handler) => {
|
|
68
|
+
handler(
|
|
69
|
+
{
|
|
70
|
+
unshift: (...handlers) => before.unshift(...handlers),
|
|
71
|
+
push: (...handlers) => after.push(...handlers)
|
|
72
|
+
},
|
|
73
|
+
serverOptions
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
return { before, after };
|
|
77
|
+
}
|
|
78
|
+
// Complete the preparation of services
|
|
79
|
+
async onInit(app) {
|
|
80
|
+
this.app = app;
|
|
81
|
+
const { before, after } = this.applySetupMiddlewares();
|
|
82
|
+
before.forEach((fn) => this.middlewares.use(fn));
|
|
83
|
+
await this.applyDefaultMiddlewares(app);
|
|
84
|
+
after.forEach((fn) => this.middlewares.use(fn));
|
|
85
|
+
}
|
|
86
|
+
async applyDefaultMiddlewares(app) {
|
|
87
|
+
const { dev, devMiddleware } = this;
|
|
88
|
+
if (dev.compress) {
|
|
89
|
+
const { default: compression } = await Promise.resolve().then(() => __toESM(require("http-compression")));
|
|
90
|
+
this.middlewares.use((req, res, next) => {
|
|
91
|
+
compression({
|
|
92
|
+
gzip: true,
|
|
93
|
+
brotli: false
|
|
94
|
+
})(req, res, next);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
this.middlewares.use((req, res, next) => {
|
|
98
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
99
|
+
const path = req.url ? import_url.default.parse(req.url).pathname : "";
|
|
100
|
+
if (path == null ? void 0 : path.includes("hot-update")) {
|
|
101
|
+
res.setHeader("Access-Control-Allow-Credentials", "false");
|
|
102
|
+
}
|
|
103
|
+
const confHeaders = dev.headers;
|
|
104
|
+
if (confHeaders) {
|
|
105
|
+
for (const [key, value] of Object.entries(confHeaders)) {
|
|
106
|
+
res.setHeader(key, value);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
next();
|
|
110
|
+
});
|
|
111
|
+
if (dev.proxy) {
|
|
112
|
+
const { middlewares, handleUpgrade } = (0, import_proxy.createProxyMiddleware)(dev.proxy);
|
|
113
|
+
app && handleUpgrade(app);
|
|
114
|
+
middlewares.forEach((middleware) => {
|
|
115
|
+
this.middlewares.use(middleware);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
devMiddleware.init(app);
|
|
119
|
+
devMiddleware.middleware && this.middlewares.use(devMiddleware.middleware);
|
|
120
|
+
if (dev.historyApiFallback) {
|
|
121
|
+
const { default: connectHistoryApiFallback } = await Promise.resolve().then(() => __toESM(require("connect-history-api-fallback")));
|
|
122
|
+
const historyApiFallbackMiddleware = connectHistoryApiFallback(
|
|
123
|
+
// @ts-expect-error
|
|
124
|
+
typeof dev.historyApiFallback === "boolean" ? {} : dev.historyApiFallback
|
|
125
|
+
);
|
|
126
|
+
this.middlewares.use(historyApiFallbackMiddleware);
|
|
127
|
+
devMiddleware.middleware && this.middlewares.use(devMiddleware.middleware);
|
|
128
|
+
}
|
|
129
|
+
this.middlewares.use(import_middlewares.faviconFallbackMiddleware);
|
|
130
|
+
}
|
|
131
|
+
async createHTTPServer() {
|
|
132
|
+
const { dev } = this;
|
|
133
|
+
const devHttpsOption = typeof dev === "object" && dev.https;
|
|
134
|
+
if (devHttpsOption) {
|
|
135
|
+
const { genHttpsOptions } = require("./https");
|
|
136
|
+
const httpsOptions = await genHttpsOptions(devHttpsOption, this.pwd);
|
|
137
|
+
return (0, import_https.createServer)(httpsOptions, this.middlewares);
|
|
138
|
+
} else {
|
|
139
|
+
return (0, import_http.createServer)(this.middlewares);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
listen(options, listener) {
|
|
143
|
+
const callback = () => {
|
|
144
|
+
listener == null ? void 0 : listener();
|
|
145
|
+
};
|
|
146
|
+
if (typeof options === "object") {
|
|
147
|
+
this.app.listen(options, callback);
|
|
148
|
+
} else {
|
|
149
|
+
this.app.listen(options || 8080, callback);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
close() {
|
|
153
|
+
this.app.close();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async function startDevServer(options, startDevCompile, {
|
|
157
|
+
open,
|
|
158
|
+
compiler,
|
|
159
|
+
printURLs = true,
|
|
160
|
+
strictPort = false,
|
|
161
|
+
serverOptions = {},
|
|
162
|
+
logger: customLogger,
|
|
163
|
+
getPortSilently
|
|
164
|
+
} = {}) {
|
|
165
|
+
var _a;
|
|
166
|
+
if (!process.env.NODE_ENV) {
|
|
167
|
+
process.env.NODE_ENV = "development";
|
|
168
|
+
}
|
|
169
|
+
const rsbuildConfig = options.context.config;
|
|
170
|
+
const logger = customLogger != null ? customLogger : import_shared.logger;
|
|
171
|
+
const { devServerConfig, port, host, https } = await (0, import_shared.getDevOptions)({
|
|
172
|
+
rsbuildConfig,
|
|
173
|
+
serverOptions,
|
|
174
|
+
strictPort,
|
|
175
|
+
getPortSilently
|
|
176
|
+
});
|
|
177
|
+
options.context.devServer = {
|
|
178
|
+
hostname: host,
|
|
179
|
+
port,
|
|
180
|
+
https,
|
|
181
|
+
open
|
|
182
|
+
};
|
|
183
|
+
const protocol = https ? "https" : "http";
|
|
184
|
+
let urls = (0, import_shared.getAddressUrls)(protocol, port, (_a = rsbuildConfig.dev) == null ? void 0 : _a.host);
|
|
185
|
+
if (printURLs) {
|
|
186
|
+
if ((0, import_shared.isFunction)(printURLs)) {
|
|
187
|
+
urls = printURLs(urls);
|
|
188
|
+
if (!Array.isArray(urls)) {
|
|
189
|
+
throw new Error("Please return an array in the `printURLs` function.");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
(0, import_shared.printServerURLs)(urls, logger);
|
|
193
|
+
}
|
|
194
|
+
(0, import_shared.debug)("create dev server");
|
|
195
|
+
const devMiddleware = await startDevCompile(options, compiler);
|
|
196
|
+
const server = new RsbuildDevServer({
|
|
197
|
+
pwd: options.context.rootPath,
|
|
198
|
+
devMiddleware,
|
|
199
|
+
dev: devServerConfig
|
|
200
|
+
});
|
|
201
|
+
(0, import_shared.debug)("create dev server done");
|
|
202
|
+
await options.context.hooks.onBeforeStartDevServerHook.call();
|
|
203
|
+
const httpServer = await server.createHTTPServer();
|
|
204
|
+
await server.onInit(httpServer);
|
|
205
|
+
(0, import_shared.debug)("listen dev server");
|
|
206
|
+
return new Promise((resolve) => {
|
|
207
|
+
server.listen(
|
|
208
|
+
{
|
|
209
|
+
host,
|
|
210
|
+
port
|
|
211
|
+
},
|
|
212
|
+
async (err) => {
|
|
213
|
+
if (err) {
|
|
214
|
+
throw err;
|
|
215
|
+
}
|
|
216
|
+
(0, import_shared.debug)("listen dev server done");
|
|
217
|
+
await options.context.hooks.onAfterStartDevServerHook.call({ port });
|
|
218
|
+
resolve({
|
|
219
|
+
port,
|
|
220
|
+
urls: urls.map((item) => item.url),
|
|
221
|
+
server: {
|
|
222
|
+
close: () => {
|
|
223
|
+
server.close();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
);
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
232
|
+
0 && (module.exports = {
|
|
233
|
+
RsbuildDevServer,
|
|
234
|
+
startDevServer
|
|
235
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var https_exports = {};
|
|
20
|
+
__export(https_exports, {
|
|
21
|
+
genHttpsOptions: () => genHttpsOptions
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(https_exports);
|
|
24
|
+
var import_shared = require("@rsbuild/shared");
|
|
25
|
+
const genHttpsOptions = async (userOptions, pwd) => {
|
|
26
|
+
const httpsOptions = typeof userOptions === "boolean" ? {} : userOptions;
|
|
27
|
+
if (!httpsOptions.key || !httpsOptions.cert) {
|
|
28
|
+
let devcertPath;
|
|
29
|
+
try {
|
|
30
|
+
devcertPath = require.resolve("devcert", { paths: [pwd, __dirname] });
|
|
31
|
+
} catch (err) {
|
|
32
|
+
const command = import_shared.color.bold(import_shared.color.yellow(`npm add devcert@1.2.2 -D`));
|
|
33
|
+
import_shared.logger.error(
|
|
34
|
+
`You have enabled "dev.https" option, but the "devcert" package is not installed.`
|
|
35
|
+
);
|
|
36
|
+
import_shared.logger.error(
|
|
37
|
+
`Please run ${command} to install manually, otherwise the https can not work.`
|
|
38
|
+
);
|
|
39
|
+
throw new Error('[https] "devcert" is not found.');
|
|
40
|
+
}
|
|
41
|
+
const devcert = require(devcertPath);
|
|
42
|
+
const selfsign = await devcert.certificateFor(["localhost"]);
|
|
43
|
+
return selfsign;
|
|
44
|
+
}
|
|
45
|
+
return httpsOptions;
|
|
46
|
+
};
|
|
47
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
48
|
+
0 && (module.exports = {
|
|
49
|
+
genHttpsOptions
|
|
50
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var server_exports = {};
|
|
20
|
+
__export(server_exports, {
|
|
21
|
+
startDevServer: () => import_devServer.startDevServer,
|
|
22
|
+
startProdServer: () => import_prodServer.startProdServer
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(server_exports);
|
|
25
|
+
var import_devServer = require("./devServer");
|
|
26
|
+
var import_prodServer = require("./prodServer");
|
|
27
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
28
|
+
0 && (module.exports = {
|
|
29
|
+
startDevServer,
|
|
30
|
+
startProdServer
|
|
31
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var middlewares_exports = {};
|
|
20
|
+
__export(middlewares_exports, {
|
|
21
|
+
faviconFallbackMiddleware: () => faviconFallbackMiddleware
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(middlewares_exports);
|
|
24
|
+
const faviconFallbackMiddleware = (req, res, next) => {
|
|
25
|
+
if (req.url === "/favicon.ico") {
|
|
26
|
+
res.statusCode = 204;
|
|
27
|
+
res.end();
|
|
28
|
+
} else {
|
|
29
|
+
next();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
33
|
+
0 && (module.exports = {
|
|
34
|
+
faviconFallbackMiddleware
|
|
35
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import type { ListenOptions } from 'net';
|
|
4
|
+
import { Server } from 'http';
|
|
5
|
+
import connect from 'connect';
|
|
6
|
+
import { Context, RsbuildConfig, StartServerResult } from '@rsbuild/shared';
|
|
7
|
+
type RsbuildProdServerOptions = {
|
|
8
|
+
pwd: string;
|
|
9
|
+
output: {
|
|
10
|
+
path: string;
|
|
11
|
+
assetPrefix?: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export declare class RsbuildProdServer {
|
|
15
|
+
private app;
|
|
16
|
+
private options;
|
|
17
|
+
middlewares: connect.Server;
|
|
18
|
+
constructor(options: RsbuildProdServerOptions);
|
|
19
|
+
onInit(app: Server): Promise<void>;
|
|
20
|
+
private applyDefaultMiddlewares;
|
|
21
|
+
private applyStaticAssetMiddleware;
|
|
22
|
+
createHTTPServer(): Promise<Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>>;
|
|
23
|
+
listen(options?: number | ListenOptions | undefined, listener?: () => void): void;
|
|
24
|
+
close(): void;
|
|
25
|
+
}
|
|
26
|
+
export declare function startProdServer(context: Context, rsbuildConfig: RsbuildConfig): Promise<StartServerResult>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var prodServer_exports = {};
|
|
30
|
+
__export(prodServer_exports, {
|
|
31
|
+
RsbuildProdServer: () => RsbuildProdServer,
|
|
32
|
+
startProdServer: () => startProdServer
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(prodServer_exports);
|
|
35
|
+
var import_http = require("http");
|
|
36
|
+
var import_connect = __toESM(require("connect"));
|
|
37
|
+
var import_path = require("path");
|
|
38
|
+
var import_sirv = __toESM(require("sirv"));
|
|
39
|
+
var import_shared = require("@rsbuild/shared");
|
|
40
|
+
var import_middlewares = require("./middlewares");
|
|
41
|
+
class RsbuildProdServer {
|
|
42
|
+
constructor(options) {
|
|
43
|
+
this.middlewares = (0, import_connect.default)();
|
|
44
|
+
this.options = options;
|
|
45
|
+
}
|
|
46
|
+
// Complete the preparation of services
|
|
47
|
+
async onInit(app) {
|
|
48
|
+
this.app = app;
|
|
49
|
+
await this.applyDefaultMiddlewares();
|
|
50
|
+
}
|
|
51
|
+
async applyDefaultMiddlewares() {
|
|
52
|
+
this.applyStaticAssetMiddleware();
|
|
53
|
+
this.middlewares.use(import_middlewares.faviconFallbackMiddleware);
|
|
54
|
+
}
|
|
55
|
+
applyStaticAssetMiddleware() {
|
|
56
|
+
const {
|
|
57
|
+
output: { path, assetPrefix },
|
|
58
|
+
pwd
|
|
59
|
+
} = this.options;
|
|
60
|
+
const assetMiddleware = (0, import_sirv.default)((0, import_path.join)(pwd, path), {
|
|
61
|
+
etag: true,
|
|
62
|
+
dev: true,
|
|
63
|
+
ignores: false
|
|
64
|
+
});
|
|
65
|
+
this.middlewares.use((req, res, next) => {
|
|
66
|
+
const url = req.url;
|
|
67
|
+
if (assetPrefix && (url == null ? void 0 : url.startsWith(assetPrefix))) {
|
|
68
|
+
req.url = url.slice(assetPrefix.length);
|
|
69
|
+
assetMiddleware(req, res, (...args) => {
|
|
70
|
+
req.url = url;
|
|
71
|
+
next(...args);
|
|
72
|
+
});
|
|
73
|
+
} else {
|
|
74
|
+
assetMiddleware(req, res, next);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async createHTTPServer() {
|
|
79
|
+
return (0, import_http.createServer)(this.middlewares);
|
|
80
|
+
}
|
|
81
|
+
listen(options, listener) {
|
|
82
|
+
const callback = () => {
|
|
83
|
+
listener == null ? void 0 : listener();
|
|
84
|
+
};
|
|
85
|
+
if (typeof options === "object") {
|
|
86
|
+
this.app.listen(options, callback);
|
|
87
|
+
} else {
|
|
88
|
+
this.app.listen(options || 8080, callback);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
close() {
|
|
92
|
+
this.app.close();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async function startProdServer(context, rsbuildConfig) {
|
|
96
|
+
var _a, _b, _c, _d;
|
|
97
|
+
if (!process.env.NODE_ENV) {
|
|
98
|
+
process.env.NODE_ENV = "production";
|
|
99
|
+
}
|
|
100
|
+
const port = await (0, import_shared.getPort)(((_a = rsbuildConfig.dev) == null ? void 0 : _a.port) || import_shared.DEFAULT_PORT);
|
|
101
|
+
const server = new RsbuildProdServer({
|
|
102
|
+
pwd: context.rootPath,
|
|
103
|
+
output: {
|
|
104
|
+
path: ((_c = (_b = rsbuildConfig.output) == null ? void 0 : _b.distPath) == null ? void 0 : _c.root) || import_shared.ROOT_DIST_DIR,
|
|
105
|
+
assetPrefix: (_d = rsbuildConfig.output) == null ? void 0 : _d.assetPrefix
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
const httpServer = await server.createHTTPServer();
|
|
109
|
+
await server.onInit(httpServer);
|
|
110
|
+
return new Promise((resolve) => {
|
|
111
|
+
server.listen(
|
|
112
|
+
{
|
|
113
|
+
host: import_shared.DEFAULT_DEV_HOST,
|
|
114
|
+
port
|
|
115
|
+
},
|
|
116
|
+
() => {
|
|
117
|
+
const urls = (0, import_shared.getAddressUrls)("http", port);
|
|
118
|
+
(0, import_shared.printServerURLs)(urls);
|
|
119
|
+
resolve({
|
|
120
|
+
port,
|
|
121
|
+
urls: urls.map((item) => item.url),
|
|
122
|
+
server: {
|
|
123
|
+
close: () => {
|
|
124
|
+
server.close();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
133
|
+
0 && (module.exports = {
|
|
134
|
+
RsbuildProdServer,
|
|
135
|
+
startProdServer
|
|
136
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import http from 'http';
|
|
2
|
+
import { RequestHandler } from 'http-proxy-middleware';
|
|
3
|
+
import { ProxyDetail, RequestHandler as Middleware, RsbuildProxyOptions } from '@rsbuild/shared';
|
|
4
|
+
export declare function formatProxyOptions(proxyOptions: RsbuildProxyOptions): ProxyDetail[];
|
|
5
|
+
export type HttpUpgradeHandler = NonNullable<RequestHandler['upgrade']>;
|
|
6
|
+
export declare const createProxyMiddleware: (proxyOptions: RsbuildProxyOptions) => {
|
|
7
|
+
middlewares: Middleware[];
|
|
8
|
+
handleUpgrade: (server: http.Server) => void;
|
|
9
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var proxy_exports = {};
|
|
20
|
+
__export(proxy_exports, {
|
|
21
|
+
createProxyMiddleware: () => createProxyMiddleware,
|
|
22
|
+
formatProxyOptions: () => formatProxyOptions
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(proxy_exports);
|
|
25
|
+
var import_http_proxy_middleware2 = require("http-proxy-middleware/dist/http-proxy-middleware");
|
|
26
|
+
function formatProxyOptions(proxyOptions) {
|
|
27
|
+
var _a;
|
|
28
|
+
const ret = [];
|
|
29
|
+
if (Array.isArray(proxyOptions)) {
|
|
30
|
+
ret.push(...proxyOptions);
|
|
31
|
+
} else if ("target" in proxyOptions) {
|
|
32
|
+
ret.push(proxyOptions);
|
|
33
|
+
} else {
|
|
34
|
+
for (const [context, options] of Object.entries(proxyOptions)) {
|
|
35
|
+
const opts = {
|
|
36
|
+
context,
|
|
37
|
+
changeOrigin: true,
|
|
38
|
+
logLevel: "warn"
|
|
39
|
+
};
|
|
40
|
+
if (typeof options === "string") {
|
|
41
|
+
opts.target = options;
|
|
42
|
+
} else {
|
|
43
|
+
Object.assign(opts, options);
|
|
44
|
+
}
|
|
45
|
+
ret.push(opts);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const handleError = (err, _req, _res, _target) => {
|
|
49
|
+
console.error(err);
|
|
50
|
+
};
|
|
51
|
+
for (const opts of ret) {
|
|
52
|
+
(_a = opts.onError) != null ? _a : opts.onError = handleError;
|
|
53
|
+
}
|
|
54
|
+
return ret;
|
|
55
|
+
}
|
|
56
|
+
const createProxyMiddleware = (proxyOptions) => {
|
|
57
|
+
const formattedOptionsList = formatProxyOptions(proxyOptions);
|
|
58
|
+
const proxies = [];
|
|
59
|
+
const middlewares = [];
|
|
60
|
+
for (const opts of formattedOptionsList) {
|
|
61
|
+
const proxy = new import_http_proxy_middleware2.HttpProxyMiddleware(opts.context, opts);
|
|
62
|
+
const middleware = async (req, res, next) => {
|
|
63
|
+
const bypassUrl = typeof opts.bypass === "function" ? opts.bypass(req, res, opts) : null;
|
|
64
|
+
if (typeof bypassUrl === "boolean") {
|
|
65
|
+
res.statusCode = 404;
|
|
66
|
+
next();
|
|
67
|
+
} else if (typeof bypassUrl === "string") {
|
|
68
|
+
req.url = bypassUrl;
|
|
69
|
+
next();
|
|
70
|
+
} else {
|
|
71
|
+
proxy.middleware(req, res, next);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
proxies.push(proxy);
|
|
75
|
+
middlewares.push(middleware);
|
|
76
|
+
}
|
|
77
|
+
const handleUpgrade = (server) => {
|
|
78
|
+
for (const proxy of proxies) {
|
|
79
|
+
const raw = proxy;
|
|
80
|
+
if (raw.proxyOptions.ws === true && !raw.wsInternalSubscribed) {
|
|
81
|
+
server.on("upgrade", raw.handleUpgrade);
|
|
82
|
+
raw.wsInternalSubscribed = true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
return { middlewares, handleUpgrade };
|
|
87
|
+
};
|
|
88
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
89
|
+
0 && (module.exports = {
|
|
90
|
+
createProxyMiddleware,
|
|
91
|
+
formatProxyOptions
|
|
92
|
+
});
|