@rsbuild/core 0.2.1 → 0.2.3

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.
@@ -84,7 +84,7 @@ async function init({
84
84
  }
85
85
  }
86
86
  function runCli() {
87
- import_commander.program.name("rsbuild").usage("<command> [options]").version("0.2.1");
87
+ import_commander.program.name("rsbuild").usage("<command> [options]").version("0.2.3");
88
88
  import_commander.program.command("dev").option("--open", "open the page in browser on startup").option(
89
89
  "--port <port>",
90
90
  "specify a port number for Rsbuild Server to listen"
@@ -34,7 +34,7 @@ function prepareCli() {
34
34
  if (!npm_execpath || npm_execpath.includes("npx-cli.js")) {
35
35
  console.log();
36
36
  }
37
- import_rslog.logger.greet(` ${`Rsbuild v${"0.2.1"}`}
37
+ import_rslog.logger.greet(` ${`Rsbuild v${"0.2.3"}`}
38
38
  `);
39
39
  }
40
40
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,6 @@
1
1
  import { type RsbuildInstance, type RsbuildProvider, type CreateRsbuildOptions } from '@rsbuild/shared';
2
2
  import type { RsbuildConfig } from './types';
3
3
  export declare function createRsbuild(options: CreateRsbuildOptions & {
4
- rsbuildConfig: RsbuildConfig;
5
4
  provider?: ({
6
5
  rsbuildConfig
7
6
  }: {
@@ -40,10 +40,11 @@ const getRspackProvider = async (rsbuildConfig) => {
40
40
  });
41
41
  };
42
42
  async function createRsbuild(options) {
43
- const { rsbuildConfig } = options;
43
+ const { rsbuildConfig = {} } = options;
44
44
  const provider = options.provider ? options.provider({ rsbuildConfig }) : await getRspackProvider(rsbuildConfig);
45
45
  const rsbuildOptions = {
46
46
  cwd: process.cwd(),
47
+ rsbuildConfig,
47
48
  ...options
48
49
  };
49
50
  const pluginStore = (0, import_shared.createPluginStore)();
@@ -55,7 +56,7 @@ async function createRsbuild(options) {
55
56
  initConfigs,
56
57
  inspectConfig,
57
58
  createCompiler,
58
- createDevServer,
59
+ getServerAPIs,
59
60
  startDevServer,
60
61
  applyDefaultPlugins
61
62
  } = await provider({
@@ -88,7 +89,7 @@ async function createRsbuild(options) {
88
89
  createCompiler,
89
90
  initConfigs,
90
91
  inspectConfig,
91
- createDevServer,
92
+ getServerAPIs,
92
93
  startDevServer,
93
94
  context: publicContext
94
95
  };
package/dist/loadEnv.js CHANGED
@@ -39,6 +39,7 @@ const getEnvFiles = () => {
39
39
  const { NODE_ENV } = process.env;
40
40
  return [".env", ".env.local", `.env.${NODE_ENV}`, `.env.${NODE_ENV}.local`];
41
41
  };
42
+ let lastParsed;
42
43
  async function loadEnv({
43
44
  cwd = process.cwd(),
44
45
  prefixes = ["PUBLIC_"]
@@ -50,6 +51,13 @@ async function loadEnv({
50
51
  envPaths.forEach((envPath) => {
51
52
  Object.assign(parsed, parse(import_fs.default.readFileSync(envPath)));
52
53
  });
54
+ if (lastParsed) {
55
+ Object.keys(lastParsed).forEach((key) => {
56
+ if (process.env[key] === lastParsed[key]) {
57
+ delete process.env[key];
58
+ }
59
+ });
60
+ }
53
61
  expand({ parsed });
54
62
  const publicVars = {};
55
63
  Object.keys(process.env).forEach((key) => {
@@ -58,6 +66,7 @@ async function loadEnv({
58
66
  publicVars[`process.env.${key}`] = JSON.stringify(val);
59
67
  }
60
68
  });
69
+ lastParsed = parsed;
61
70
  return {
62
71
  parsed,
63
72
  publicVars
@@ -59,7 +59,7 @@ function createContextByConfig(options, bundlerType, config = {}) {
59
59
  const context = {
60
60
  entry: config.source?.entry || getDefaultEntry(rootPath),
61
61
  targets: config.output?.targets || [],
62
- version: "0.2.1",
62
+ version: "0.2.3",
63
63
  rootPath,
64
64
  distPath,
65
65
  cachePath,
@@ -67,11 +67,11 @@ function rspackProvider({
67
67
  rspackConfigs
68
68
  });
69
69
  },
70
- async createDevServer(options) {
71
- const { createDevServer } = await Promise.resolve().then(() => __toESM(require("../server/devServer")));
70
+ async getServerAPIs(options) {
71
+ const { getServerAPIs } = await Promise.resolve().then(() => __toESM(require("../server/devServer")));
72
72
  const { createDevMiddleware } = await Promise.resolve().then(() => __toESM(require("./core/createCompiler")));
73
73
  await (0, import_initConfigs.initRsbuildConfig)({ context, pluginStore });
74
- return createDevServer(
74
+ return getServerAPIs(
75
75
  { context, pluginStore, rsbuildOptions },
76
76
  createDevMiddleware,
77
77
  options
@@ -1,12 +1,19 @@
1
1
  /// <reference types="node" />
2
- import type { Server } from 'http';
2
+ /// <reference types="node" />
3
+ import type { IncomingMessage } from 'http';
4
+ import type { Socket } from 'net';
3
5
  import type { RsbuildDevMiddlewareOptions, DevMiddlewareAPI, DevMiddleware as CustomDevMiddleware } from '@rsbuild/shared';
4
6
  type Options = {
5
7
  publicPaths: string[];
6
8
  dev: RsbuildDevMiddlewareOptions['dev'];
7
9
  devMiddleware?: CustomDevMiddleware;
8
10
  };
9
- export default class DevMiddleware {
11
+ /**
12
+ * Setup compiler-related logic:
13
+ * 1. setup webpack-dev-middleware
14
+ * 2. establish webSocket connect
15
+ */
16
+ export declare class CompilerDevMiddleware {
10
17
  middleware?: DevMiddlewareAPI;
11
18
  private devOptions;
12
19
  private devMiddleware?;
@@ -17,7 +24,8 @@ export default class DevMiddleware {
17
24
  devMiddleware,
18
25
  publicPaths
19
26
  }: Options);
20
- init(app: Server): void;
27
+ init(): void;
28
+ upgrade(req: IncomingMessage, sock: Socket, head: any): void;
21
29
  close(): void;
22
30
  sockWrite(type: string, data?: Record<string, any> | string | boolean): void;
23
31
  private setupDevMiddleware;
@@ -26,12 +26,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var compiler_dev_middleware_exports = {};
30
- __export(compiler_dev_middleware_exports, {
31
- default: () => DevMiddleware
29
+ var compilerDevMiddleware_exports = {};
30
+ __export(compilerDevMiddleware_exports, {
31
+ CompilerDevMiddleware: () => CompilerDevMiddleware
32
32
  });
33
- module.exports = __toCommonJS(compiler_dev_middleware_exports);
34
- var import_socketServer = __toESM(require("./socketServer"));
33
+ module.exports = __toCommonJS(compilerDevMiddleware_exports);
34
+ var import_socketServer = require("./socketServer");
35
35
  const noop = () => {
36
36
  };
37
37
  function getHMRClientPath(client) {
@@ -42,23 +42,24 @@ function getHMRClientPath(client) {
42
42
  const clientEntry = `${require.resolve("@rsbuild/core/client/hmr")}?${host}${path}${port}${protocol}`;
43
43
  return clientEntry;
44
44
  }
45
- class DevMiddleware {
45
+ class CompilerDevMiddleware {
46
46
  constructor({ dev, devMiddleware, publicPaths }) {
47
47
  this.devOptions = dev;
48
48
  this.publicPaths = publicPaths;
49
- this.socketServer = new import_socketServer.default(dev);
49
+ this.socketServer = new import_socketServer.SocketServer(dev);
50
50
  this.devMiddleware = devMiddleware;
51
51
  }
52
- init(app) {
52
+ init() {
53
53
  if (this.devMiddleware) {
54
54
  this.middleware = this.setupDevMiddleware(
55
55
  this.devMiddleware,
56
56
  this.publicPaths
57
57
  );
58
58
  }
59
- app.on("listening", () => {
60
- this.socketServer.prepare(app);
61
- });
59
+ this.socketServer.prepare();
60
+ }
61
+ upgrade(req, sock, head) {
62
+ this.socketServer.upgrade(req, sock, head);
62
63
  }
63
64
  close() {
64
65
  this.socketServer.close();
@@ -88,7 +89,7 @@ class DevMiddleware {
88
89
  writeToDisk: devOptions.writeToDisk
89
90
  });
90
91
  const warp = async (req, res, next) => {
91
- const url = req.url;
92
+ const { url } = req;
92
93
  const assetPrefix = url && publicPaths.find((prefix) => url.startsWith(prefix));
93
94
  if (assetPrefix && assetPrefix !== "/") {
94
95
  req.url = url.slice(assetPrefix.length - 1);
@@ -104,3 +105,7 @@ class DevMiddleware {
104
105
  return warp;
105
106
  }
106
107
  }
108
+ // Annotate the CommonJS export names for ESM import in node:
109
+ 0 && (module.exports = {
110
+ CompilerDevMiddleware
111
+ });
@@ -1,13 +1,13 @@
1
- import { CreateDevMiddlewareReturns, StartDevServerOptions, StartServerResult, DevServerAPI } from '@rsbuild/shared';
1
+ import { CreateDevMiddlewareReturns, StartDevServerOptions, StartServerResult, DevServerAPIs } from '@rsbuild/shared';
2
2
  import type { Context } from '../types';
3
- export declare function createDevServer<Options extends {
3
+ export declare function getServerAPIs<Options extends {
4
4
  context: Context;
5
5
  }>(options: Options, createDevMiddleware: (options: Options, compiler: StartDevServerOptions['compiler']) => Promise<CreateDevMiddlewareReturns>, {
6
6
  compiler: customCompiler,
7
7
  getPortSilently
8
8
  }?: StartDevServerOptions & {
9
9
  defaultPort?: number;
10
- }): Promise<DevServerAPI>;
10
+ }): Promise<DevServerAPIs>;
11
11
  export declare function startDevServer<Options extends {
12
12
  context: Context;
13
13
  }>(options: Options, createDevMiddleware: (options: Options, compiler: StartDevServerOptions['compiler']) => Promise<CreateDevMiddlewareReturns>, {
@@ -28,7 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var devServer_exports = {};
30
30
  __export(devServer_exports, {
31
- createDevServer: () => createDevServer,
31
+ getServerAPIs: () => getServerAPIs,
32
32
  startDevServer: () => startDevServer
33
33
  });
34
34
  module.exports = __toCommonJS(devServer_exports);
@@ -36,8 +36,9 @@ var import_shared = require("@rsbuild/shared");
36
36
  var import_connect = __toESM(require("@rsbuild/shared/connect"));
37
37
  var import_restart = require("./restart");
38
38
  var import_httpServer = require("./httpServer");
39
- var import_devMiddlewares = require("./devMiddlewares");
40
- async function createDevServer(options, createDevMiddleware, {
39
+ var import_getDevMiddlewares = require("./getDevMiddlewares");
40
+ var import_middlewares = require("./middlewares");
41
+ async function getServerAPIs(options, createDevMiddleware, {
41
42
  compiler: customCompiler,
42
43
  getPortSilently
43
44
  } = {}) {
@@ -65,31 +66,28 @@ async function createDevServer(options, createDevMiddleware, {
65
66
  );
66
67
  const publicPaths = compiler.compilers ? compiler.compilers.map(import_shared.getPublicPathFromCompiler) : [(0, import_shared.getPublicPathFromCompiler)(compiler)];
67
68
  return {
68
- resolvedConfig: { devServerConfig, port, host, https, defaultRoutes },
69
+ config: { devServerConfig, port, host, https, defaultRoutes },
69
70
  beforeStart: async () => {
70
71
  await options.context.hooks.onBeforeStartDevServerHook.call();
71
72
  },
72
- afterStart: async ({ port: port2, routes }) => {
73
+ afterStart: async (params = {}) => {
73
74
  await options.context.hooks.onAfterStartDevServerHook.call({
74
- port: port2,
75
- routes
75
+ port: params.port || port,
76
+ routes: params.routes || defaultRoutes
76
77
  });
77
78
  },
78
- getMiddlewares: async ({
79
- dev,
80
- app
81
- }) => await (0, import_devMiddlewares.getMiddlewares)(
82
- {
83
- pwd: options.context.rootPath,
84
- devMiddleware,
85
- dev,
86
- output: {
87
- distPath: rsbuildConfig.output?.distPath?.root || import_shared.ROOT_DIST_DIR,
88
- publicPaths
89
- }
79
+ getMiddlewares: async (overrides = {}) => await (0, import_getDevMiddlewares.getMiddlewares)({
80
+ pwd: options.context.rootPath,
81
+ devMiddleware,
82
+ dev: {
83
+ ...devServerConfig,
84
+ ...overrides
90
85
  },
91
- app
92
- )
86
+ output: {
87
+ distPath: rsbuildConfig.output?.distPath?.root || import_shared.ROOT_DIST_DIR,
88
+ publicPaths
89
+ }
90
+ })
93
91
  };
94
92
  }
95
93
  async function startDevServer(options, createDevMiddleware, {
@@ -99,15 +97,15 @@ async function startDevServer(options, createDevMiddleware, {
99
97
  getPortSilently
100
98
  } = {}) {
101
99
  (0, import_shared.debug)("create dev server");
102
- const rsbuildServer = await createDevServer(options, createDevMiddleware, {
100
+ const serverAPIs = await getServerAPIs(options, createDevMiddleware, {
103
101
  compiler,
104
102
  printURLs,
105
103
  logger: customLogger,
106
104
  getPortSilently
107
105
  });
108
106
  const {
109
- resolvedConfig: { devServerConfig, port, host, https, defaultRoutes }
110
- } = rsbuildServer;
107
+ config: { devServerConfig, port, host, https, defaultRoutes }
108
+ } = serverAPIs;
111
109
  const logger = customLogger ?? import_shared.logger;
112
110
  const middlewares = (0, import_connect.default)();
113
111
  const httpServer = await (0, import_httpServer.createHttpServer)({
@@ -115,7 +113,7 @@ async function startDevServer(options, createDevMiddleware, {
115
113
  middlewares
116
114
  });
117
115
  (0, import_shared.debug)("create dev server done");
118
- await rsbuildServer.beforeStart();
116
+ await serverAPIs.beforeStart();
119
117
  const protocol = https ? "https" : "http";
120
118
  let urls = (0, import_shared.getAddressUrls)(protocol, port, host);
121
119
  if (printURLs) {
@@ -127,12 +125,11 @@ async function startDevServer(options, createDevMiddleware, {
127
125
  }
128
126
  (0, import_shared.printServerURLs)(urls, defaultRoutes, logger);
129
127
  }
130
- const devMiddlewares = await rsbuildServer.getMiddlewares({
131
- dev: devServerConfig,
132
- app: httpServer
133
- });
128
+ const devMiddlewares = await serverAPIs.getMiddlewares();
134
129
  devMiddlewares.middlewares.forEach((m) => middlewares.use(m));
130
+ middlewares.use(import_middlewares.notFoundMiddleware);
135
131
  (0, import_shared.debug)("listen dev server");
132
+ httpServer.on("upgrade", devMiddlewares.onUpgrade);
136
133
  return new Promise((resolve) => {
137
134
  httpServer.listen(
138
135
  {
@@ -144,10 +141,7 @@ async function startDevServer(options, createDevMiddleware, {
144
141
  throw err;
145
142
  }
146
143
  (0, import_shared.debug)("listen dev server done");
147
- await rsbuildServer.afterStart({
148
- port,
149
- routes: defaultRoutes
150
- });
144
+ await serverAPIs.afterStart();
151
145
  const onClose = async () => {
152
146
  await devMiddlewares.close();
153
147
  httpServer.close();
@@ -168,6 +162,6 @@ async function startDevServer(options, createDevMiddleware, {
168
162
  }
169
163
  // Annotate the CommonJS export names for ESM import in node:
170
164
  0 && (module.exports = {
171
- createDevServer,
165
+ getServerAPIs,
172
166
  startDevServer
173
167
  });
@@ -0,0 +1,6 @@
1
+ import type { UpgradeEvent, RequestHandler, RsbuildDevMiddlewareOptions } from '@rsbuild/shared';
2
+ export declare const getMiddlewares: (options: RsbuildDevMiddlewareOptions) => Promise<{
3
+ close: () => Promise<void>;
4
+ onUpgrade: UpgradeEvent;
5
+ middlewares: RequestHandler[];
6
+ }>;
@@ -26,13 +26,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var devMiddlewares_exports = {};
30
- __export(devMiddlewares_exports, {
29
+ var getDevMiddlewares_exports = {};
30
+ __export(getDevMiddlewares_exports, {
31
31
  getMiddlewares: () => getMiddlewares
32
32
  });
33
- module.exports = __toCommonJS(devMiddlewares_exports);
33
+ module.exports = __toCommonJS(getDevMiddlewares_exports);
34
34
  var import_url = __toESM(require("url"));
35
- var import_compiler_dev_middleware = __toESM(require("./compiler-dev-middleware"));
35
+ var import_compilerDevMiddleware = require("./compilerDevMiddleware");
36
36
  var import_middlewares = require("./middlewares");
37
37
  var import_path = require("path");
38
38
  const applySetupMiddlewares = (dev, devMiddleware) => {
@@ -54,13 +54,13 @@ const applySetupMiddlewares = (dev, devMiddleware) => {
54
54
  return { before, after };
55
55
  };
56
56
  const applyDefaultMiddlewares = async ({
57
- app,
58
57
  middlewares,
59
58
  dev,
60
59
  devMiddleware,
61
60
  output,
62
61
  pwd
63
62
  }) => {
63
+ const upgradeEvents = [];
64
64
  if (dev.compress) {
65
65
  const { default: compression } = await Promise.resolve().then(() => __toESM(require("../../compiled/http-compression")));
66
66
  middlewares.push((req, res, next) => {
@@ -86,16 +86,17 @@ const applyDefaultMiddlewares = async ({
86
86
  });
87
87
  if (dev.proxy) {
88
88
  const { createProxyMiddleware } = await Promise.resolve().then(() => __toESM(require("./proxy")));
89
- const { middlewares: proxyMiddlewares } = createProxyMiddleware(
90
- dev.proxy,
91
- app
89
+ const { middlewares: proxyMiddlewares, upgrade } = createProxyMiddleware(
90
+ dev.proxy
92
91
  );
92
+ upgradeEvents.push(upgrade);
93
93
  proxyMiddlewares.forEach((middleware) => {
94
94
  middlewares.push(middleware);
95
95
  });
96
96
  }
97
- devMiddleware.init(app);
97
+ devMiddleware.init();
98
98
  devMiddleware.middleware && middlewares.push(devMiddleware.middleware);
99
+ upgradeEvents.push(devMiddleware.upgrade.bind(devMiddleware));
99
100
  if (dev.publicDir && dev.publicDir.name) {
100
101
  const { default: sirv } = await Promise.resolve().then(() => __toESM(require("../../compiled/sirv")));
101
102
  const { name } = dev.publicDir;
@@ -123,19 +124,22 @@ const applyDefaultMiddlewares = async ({
123
124
  devMiddleware.middleware && middlewares.push(devMiddleware.middleware);
124
125
  }
125
126
  middlewares.push(import_middlewares.faviconFallbackMiddleware);
126
- middlewares.push(import_middlewares.notFoundMiddleware);
127
+ return {
128
+ onUpgrade: (...args) => {
129
+ upgradeEvents.forEach((cb) => cb(...args));
130
+ }
131
+ };
127
132
  };
128
- const getMiddlewares = async (options, app) => {
133
+ const getMiddlewares = async (options) => {
129
134
  const middlewares = [];
130
- const devMiddleware = new import_compiler_dev_middleware.default({
135
+ const devMiddleware = new import_compilerDevMiddleware.CompilerDevMiddleware({
131
136
  dev: options.dev,
132
137
  publicPaths: options.output.publicPaths,
133
138
  devMiddleware: options.devMiddleware
134
139
  });
135
140
  const { before, after } = applySetupMiddlewares(options.dev, devMiddleware);
136
141
  before.forEach((fn) => middlewares.push(fn));
137
- await applyDefaultMiddlewares({
138
- app,
142
+ const { onUpgrade } = await applyDefaultMiddlewares({
139
143
  middlewares,
140
144
  dev: options.dev,
141
145
  devMiddleware,
@@ -147,6 +151,7 @@ const getMiddlewares = async (options, app) => {
147
151
  close: async () => {
148
152
  devMiddleware.close();
149
153
  },
154
+ onUpgrade,
150
155
  middlewares
151
156
  };
152
157
  };
@@ -32,15 +32,12 @@ __export(httpServer_exports, {
32
32
  });
33
33
  module.exports = __toCommonJS(httpServer_exports);
34
34
  const createHttpServer = async (options) => {
35
- let app;
36
35
  if (options.https) {
37
- const { createServer } = await Promise.resolve().then(() => __toESM(require("https")));
38
- app = createServer(options.https, options.middlewares);
39
- } else {
40
- const { createServer } = await Promise.resolve().then(() => __toESM(require("http")));
41
- app = createServer(options.middlewares);
36
+ const { createServer: createServer2 } = await Promise.resolve().then(() => __toESM(require("https")));
37
+ return createServer2(options.https, options.middlewares);
42
38
  }
43
- return app;
39
+ const { createServer } = await Promise.resolve().then(() => __toESM(require("http")));
40
+ return createServer(options.middlewares);
44
41
  };
45
42
  // Annotate the CommonJS export names for ESM import in node:
46
43
  0 && (module.exports = {
@@ -1,2 +1,2 @@
1
- export { startDevServer, createDevServer } from './devServer';
1
+ export { startDevServer, getServerAPIs } from './devServer';
2
2
  export { startProdServer } from './prodServer';
@@ -18,7 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var server_exports = {};
20
20
  __export(server_exports, {
21
- createDevServer: () => import_devServer.createDevServer,
21
+ getServerAPIs: () => import_devServer.getServerAPIs,
22
22
  startDevServer: () => import_devServer.startDevServer,
23
23
  startProdServer: () => import_prodServer.startProdServer
24
24
  });
@@ -27,7 +27,7 @@ var import_devServer = require("./devServer");
27
27
  var import_prodServer = require("./prodServer");
28
28
  // Annotate the CommonJS export names for ESM import in node:
29
29
  0 && (module.exports = {
30
- createDevServer,
30
+ getServerAPIs,
31
31
  startDevServer,
32
32
  startProdServer
33
33
  });
@@ -69,10 +69,11 @@ class RsbuildProdServer {
69
69
  }
70
70
  if (proxy) {
71
71
  const { createProxyMiddleware } = await Promise.resolve().then(() => __toESM(require("./proxy")));
72
- const { middlewares } = createProxyMiddleware(proxy, this.app);
72
+ const { middlewares, upgrade } = createProxyMiddleware(proxy);
73
73
  middlewares.forEach((middleware) => {
74
74
  this.middlewares.use(middleware);
75
75
  });
76
+ this.app.on("upgrade", upgrade);
76
77
  }
77
78
  this.applyStaticAssetMiddleware();
78
79
  if (historyApiFallback) {
@@ -1,9 +1,6 @@
1
- /// <reference types="node" />
2
- import http from 'http';
3
- import { RequestHandler } from '@rsbuild/shared/http-proxy-middleware';
4
- import { type ProxyDetail, type RequestHandler as Middleware, type ProxyOptions } from '@rsbuild/shared';
1
+ import { type ProxyDetail, type RequestHandler as Middleware, type ProxyOptions, type UpgradeEvent } from '@rsbuild/shared';
5
2
  export declare function formatProxyOptions(proxyOptions: ProxyOptions): ProxyDetail[];
6
- export type HttpUpgradeHandler = NonNullable<RequestHandler['upgrade']>;
7
- export declare const createProxyMiddleware: (proxyOptions: ProxyOptions, app: http.Server) => {
3
+ export declare const createProxyMiddleware: (proxyOptions: ProxyOptions) => {
8
4
  middlewares: Middleware[];
5
+ upgrade: UpgradeEvent;
9
6
  };
@@ -51,7 +51,7 @@ function formatProxyOptions(proxyOptions) {
51
51
  }
52
52
  return ret;
53
53
  }
54
- const createProxyMiddleware = (proxyOptions, app) => {
54
+ const createProxyMiddleware = (proxyOptions) => {
55
55
  const formattedOptionsList = formatProxyOptions(proxyOptions);
56
56
  const proxyMiddlewares = [];
57
57
  const middlewares = [];
@@ -79,8 +79,10 @@ const createProxyMiddleware = (proxyOptions, app) => {
79
79
  }
80
80
  }
81
81
  };
82
- app.on("upgrade", handleUpgrade);
83
- return { middlewares };
82
+ return {
83
+ middlewares,
84
+ upgrade: handleUpgrade
85
+ };
84
86
  };
85
87
  // Annotate the CommonJS export names for ESM import in node:
86
88
  0 && (module.exports = {
@@ -1,16 +1,18 @@
1
1
  /// <reference types="node" />
2
- import type { Server } from 'http';
3
- import ws from '../../../compiled/ws';
2
+ /// <reference types="node" />
3
+ import type { IncomingMessage } from 'http';
4
+ import type { Socket } from 'net';
5
+ import ws from '../../compiled/ws';
4
6
  import { type Stats, type RsbuildDevMiddlewareOptions } from '@rsbuild/shared';
5
- export default class SocketServer {
7
+ export declare class SocketServer {
6
8
  private wsServer;
7
9
  private readonly sockets;
8
10
  private readonly options;
9
- private app?;
10
11
  private stats?;
11
12
  private timer;
12
13
  constructor(options: RsbuildDevMiddlewareOptions['dev']);
13
- prepare(app: Server): void;
14
+ upgrade(req: IncomingMessage, sock: Socket, head: any): void;
15
+ prepare(): void;
14
16
  updateStats(stats: Stats): void;
15
17
  sockWrite(type: string, data?: Record<string, any> | string | boolean): void;
16
18
  singleWrite(socket: ws, type: string, data?: Record<string, any> | string | boolean): void;
@@ -28,10 +28,10 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var socketServer_exports = {};
30
30
  __export(socketServer_exports, {
31
- default: () => SocketServer
31
+ SocketServer: () => SocketServer
32
32
  });
33
33
  module.exports = __toCommonJS(socketServer_exports);
34
- var import_ws = __toESM(require("../../../compiled/ws"));
34
+ var import_ws = __toESM(require("../../compiled/ws"));
35
35
  var import_shared = require("@rsbuild/shared");
36
36
  class SocketServer {
37
37
  constructor(options) {
@@ -39,21 +39,20 @@ class SocketServer {
39
39
  this.timer = null;
40
40
  this.options = options;
41
41
  }
42
+ upgrade(req, sock, head) {
43
+ if (!this.wsServer.shouldHandle(req)) {
44
+ return;
45
+ }
46
+ this.wsServer.handleUpgrade(req, sock, head, (connection) => {
47
+ this.wsServer.emit("connection", connection, req);
48
+ });
49
+ }
42
50
  // create socket, install socket handler, bind socket event
43
- prepare(app) {
44
- this.app = app;
51
+ prepare() {
45
52
  this.wsServer = new import_ws.default.Server({
46
53
  noServer: true,
47
54
  path: this.options.client?.path
48
55
  });
49
- this.app.on("upgrade", (req, sock, head) => {
50
- if (!this.wsServer.shouldHandle(req)) {
51
- return;
52
- }
53
- this.wsServer.handleUpgrade(req, sock, head, (connection) => {
54
- this.wsServer.emit("connection", connection, req);
55
- });
56
- });
57
56
  this.wsServer.on("error", (err) => {
58
57
  import_shared.logger.error(err);
59
58
  });
@@ -147,11 +146,11 @@ class SocketServer {
147
146
  this.sockWrite("hash", stats.hash);
148
147
  if (stats.errors && stats.errors.length > 0) {
149
148
  return this.sockWrite("errors", stats.errors);
150
- } else if (stats.warnings && stats.warnings.length > 0) {
149
+ }
150
+ if (stats.warnings && stats.warnings.length > 0) {
151
151
  return this.sockWrite("warnings", stats.warnings);
152
- } else {
153
- return this.sockWrite("ok");
154
152
  }
153
+ return this.sockWrite("ok");
155
154
  }
156
155
  // send message to connecting socket
157
156
  send(connection, message) {
@@ -161,3 +160,7 @@ class SocketServer {
161
160
  connection.send(message);
162
161
  }
163
162
  }
163
+ // Annotate the CommonJS export names for ESM import in node:
164
+ 0 && (module.exports = {
165
+ SocketServer
166
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsbuild/core",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Unleash the power of Rspack with the out-of-the-box build tool.",
5
5
  "homepage": "https://rsbuild.dev",
6
6
  "bugs": {
@@ -56,11 +56,11 @@
56
56
  "types.d.ts"
57
57
  ],
58
58
  "dependencies": {
59
- "@rspack/core": "0.4.2",
59
+ "@rspack/core": "0.4.3",
60
60
  "core-js": "~3.32.2",
61
61
  "html-webpack-plugin": "npm:html-rspack-plugin@5.5.7",
62
62
  "postcss": "8.4.31",
63
- "@rsbuild/shared": "0.2.1"
63
+ "@rsbuild/shared": "0.2.3"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@types/node": "16.x",
@@ -1,7 +0,0 @@
1
- /// <reference types="node" />
2
- import { Server } from 'http';
3
- import { RequestHandler, RsbuildDevMiddlewareOptions } from '@rsbuild/shared';
4
- export declare const getMiddlewares: (options: RsbuildDevMiddlewareOptions, app: Server) => Promise<{
5
- close: () => Promise<void>;
6
- middlewares: RequestHandler[];
7
- }>;