@bleedingdev/modern-js-server 3.5.0-ultramodern.97 → 3.5.0-ultramodern.99

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.
@@ -15,12 +15,6 @@ var __webpack_modules__ = {
15
15
  "./repack" (module) {
16
16
  module.exports = require("./repack.js");
17
17
  },
18
- "./utils" (module) {
19
- module.exports = require("./utils.js");
20
- },
21
- "@modern-js/server-core" (module) {
22
- module.exports = require("@modern-js/server-core");
23
- },
24
18
  "@modern-js/utils" (module) {
25
19
  module.exports = require("@modern-js/utils");
26
20
  },
@@ -75,92 +69,59 @@ function __webpack_require__(moduleId) {
75
69
  var __webpack_exports__ = {};
76
70
  (()=>{
77
71
  __webpack_require__.r(__webpack_exports__);
78
- var _modern_js_server_core__rspack_import_0 = __webpack_require__("@modern-js/server-core");
79
- var _modern_js_utils__rspack_import_1 = __webpack_require__("@modern-js/utils");
80
- var path__rspack_import_2 = __webpack_require__("path");
81
- var path__rspack_import_2_default = /*#__PURE__*/ __webpack_require__.n(path__rspack_import_2);
82
- var _dev_tools_watcher__rspack_import_3 = __webpack_require__("../dev-tools/watcher");
83
- var _dev_tools_watcher__rspack_import_3_default = /*#__PURE__*/ __webpack_require__.n(_dev_tools_watcher__rspack_import_3);
84
- var _mock__rspack_import_4 = __webpack_require__("./mock");
85
- var _utils__rspack_import_5 = __webpack_require__("./utils");
86
- var _devOptions__rspack_import_6 = __webpack_require__("./devOptions");
72
+ var _modern_js_utils__rspack_import_0 = __webpack_require__("@modern-js/utils");
73
+ var path__rspack_import_1 = __webpack_require__("path");
74
+ var path__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(path__rspack_import_1);
75
+ var _dev_tools_watcher__rspack_import_2 = __webpack_require__("../dev-tools/watcher");
76
+ var _dev_tools_watcher__rspack_import_2_default = /*#__PURE__*/ __webpack_require__.n(_dev_tools_watcher__rspack_import_2);
77
+ var _mock__rspack_import_3 = __webpack_require__("./mock");
78
+ var _devOptions__rspack_import_4 = __webpack_require__("./devOptions");
87
79
  var __rspack_reexport = {};
88
- for(const __rspack_import_key in _devOptions__rspack_import_6)if ([
80
+ for(const __rspack_import_key in _devOptions__rspack_import_4)if ([
89
81
  "startWatcher",
90
82
  "default"
91
- ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_devOptions__rspack_import_6[__rspack_import_key];
83
+ ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_devOptions__rspack_import_4[__rspack_import_key];
92
84
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
93
- var _fileReader__rspack_import_7 = __webpack_require__("./fileReader");
85
+ var _fileReader__rspack_import_5 = __webpack_require__("./fileReader");
94
86
  var __rspack_reexport = {};
95
- for(const __rspack_import_key in _fileReader__rspack_import_7)if ([
87
+ for(const __rspack_import_key in _fileReader__rspack_import_5)if ([
96
88
  "startWatcher",
97
89
  "default"
98
- ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_fileReader__rspack_import_7[__rspack_import_key];
90
+ ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_fileReader__rspack_import_5[__rspack_import_key];
99
91
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
100
92
  var __rspack_reexport = {};
101
- for(const __rspack_import_key in _mock__rspack_import_4)if ([
93
+ for(const __rspack_import_key in _mock__rspack_import_3)if ([
102
94
  "startWatcher",
103
95
  "default"
104
- ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_mock__rspack_import_4[__rspack_import_key];
96
+ ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_mock__rspack_import_3[__rspack_import_key];
105
97
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
106
- var _repack__rspack_import_8 = __webpack_require__("./repack");
98
+ var _repack__rspack_import_6 = __webpack_require__("./repack");
107
99
  var __rspack_reexport = {};
108
- for(const __rspack_import_key in _repack__rspack_import_8)if ([
100
+ for(const __rspack_import_key in _repack__rspack_import_6)if ([
109
101
  "startWatcher",
110
102
  "default"
111
- ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_repack__rspack_import_8[__rspack_import_key];
103
+ ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_repack__rspack_import_6[__rspack_import_key];
112
104
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
113
- async function onServerChange({ pwd, filepath, event, server }) {
114
- const { mock } = _modern_js_server_core__rspack_import_0.AGGRED_DIR;
115
- const mockPath = path__rspack_import_2_default().normalize(path__rspack_import_2_default().join(pwd, mock));
116
- const { hooks } = server;
117
- if (filepath.startsWith(mockPath)) {
118
- await (0, _mock__rspack_import_4.initOrUpdateMockMiddlewares)(pwd);
119
- _modern_js_utils__rspack_import_1.logger.info('Finish update the mock handlers');
120
- } else try {
121
- const fileChangeEvent = {
122
- type: 'file-change',
123
- payload: [
124
- {
125
- filename: filepath,
126
- event
127
- }
128
- ]
129
- };
130
- await hooks.onReset.call({
131
- event: fileChangeEvent
132
- });
133
- (0, _utils__rspack_import_5.debug)(`Finish reload server, trigger by ${filepath} ${event}`);
134
- } catch (e) {
135
- _modern_js_utils__rspack_import_1.logger.error(e);
136
- }
137
- }
138
- function startWatcher({ pwd, distDir, apiDir, sharedDir, watchOptions, server }) {
139
- const { mock } = _modern_js_server_core__rspack_import_0.AGGRED_DIR;
105
+ function startWatcher({ pwd, distDir, apiDir, sharedDir, mockDir, watchOptions, onChange }) {
140
106
  const defaultWatched = [
141
- `${mock}/**/*`,
142
- `${_modern_js_utils__rspack_import_1.SERVER_DIR}/**/*`,
107
+ path__rspack_import_1_default().join((0, _mock__rspack_import_3.resolveMockDirectory)(pwd, mockDir), '**/*'),
108
+ `${_modern_js_utils__rspack_import_0.SERVER_DIR}/**/*`,
143
109
  `${apiDir}/**`,
144
110
  `${sharedDir}/**/*`,
145
- `${distDir}/${_modern_js_utils__rspack_import_1.SERVER_BUNDLE_DIRECTORY}/*-server-loaders.js`
111
+ `${distDir}/${_modern_js_utils__rspack_import_0.SERVER_BUNDLE_DIRECTORY}/*-server-loaders.js`
146
112
  ];
147
- const mergedWatchOptions = (0, _dev_tools_watcher__rspack_import_3.mergeWatchOptions)(watchOptions);
113
+ const mergedWatchOptions = (0, _dev_tools_watcher__rspack_import_2.mergeWatchOptions)(watchOptions);
148
114
  const defaultWatchedPaths = defaultWatched.map((p)=>{
149
- const finalPath = path__rspack_import_2_default().isAbsolute(p) ? p : path__rspack_import_2_default().join(pwd, p);
150
- return path__rspack_import_2_default().normalize(finalPath);
115
+ const finalPath = path__rspack_import_1_default().isAbsolute(p) ? p : path__rspack_import_1_default().join(pwd, p);
116
+ return path__rspack_import_1_default().normalize(finalPath);
151
117
  });
152
- const watcher = new (_dev_tools_watcher__rspack_import_3_default())();
118
+ const watcher = new (_dev_tools_watcher__rspack_import_2_default())();
153
119
  watcher.createDepTree();
154
120
  watcher.listen(defaultWatchedPaths, mergedWatchOptions, (filepath, event)=>{
155
121
  if (filepath.includes('-server-loaders.js')) return void delete require.cache[filepath];
156
122
  watcher.updateDepTree();
157
123
  watcher.cleanDepCache(filepath);
158
- onServerChange({
159
- pwd,
160
- filepath,
161
- event,
162
- server
163
- });
124
+ onChange(filepath, event);
164
125
  });
165
126
  return watcher;
166
127
  }
@@ -39,7 +39,9 @@ __webpack_require__.r(__webpack_exports__);
39
39
  __webpack_require__.d(__webpack_exports__, {
40
40
  getMatched: ()=>getMatched,
41
41
  getMockMiddleware: ()=>getMockMiddleware,
42
- initOrUpdateMockMiddlewares: ()=>initOrUpdateMockMiddlewares
42
+ initOrUpdateMockMiddlewares: ()=>initOrUpdateMockMiddlewares,
43
+ isPathInsideDirectory: ()=>isPathInsideDirectory,
44
+ resolveMockDirectory: ()=>resolveMockDirectory
43
45
  });
44
46
  const external_node_path_namespaceObject = require("node:path");
45
47
  var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
@@ -49,6 +51,11 @@ const utils_namespaceObject = require("@modern-js/utils");
49
51
  const external_path_to_regexp_namespaceObject = require("path-to-regexp");
50
52
  let mockAPIs = [];
51
53
  let mockConfig;
54
+ const resolveMockDirectory = (pwd, mockDir = server_core_namespaceObject.AGGRED_DIR.mock)=>external_node_path_default().resolve(pwd, mockDir);
55
+ const isPathInsideDirectory = (filepath, directory)=>{
56
+ const relativePath = external_node_path_default().relative(directory, external_node_path_default().resolve(filepath));
57
+ return '' === relativePath || '..' !== relativePath && !relativePath.startsWith(`..${external_node_path_default().sep}`) && !external_node_path_default().isAbsolute(relativePath);
58
+ };
52
59
  const parseKey = (key)=>{
53
60
  const _blank = ' ';
54
61
  const splitted = key.split(_blank).filter(Boolean);
@@ -64,21 +71,22 @@ const parseKey = (key)=>{
64
71
  path: key
65
72
  };
66
73
  };
67
- const getMockModule = async (pwd)=>{
74
+ const getMockModule = async (pwd, mockDir)=>{
68
75
  const exts = [
69
76
  '.ts',
70
77
  '.js'
71
78
  ];
72
79
  let mockFilePath = '';
80
+ const mockDirectory = resolveMockDirectory(pwd, mockDir);
73
81
  for (const ext of exts){
74
- const maybeMatch = external_node_path_default().join(pwd, `${server_core_namespaceObject.AGGRED_DIR.mock}/index${ext}`);
82
+ const maybeMatch = external_node_path_default().join(mockDirectory, `index${ext}`);
75
83
  if (await utils_namespaceObject.fs.pathExists(maybeMatch)) {
76
84
  mockFilePath = maybeMatch;
77
85
  break;
78
86
  }
79
87
  }
80
88
  if (!mockFilePath) return;
81
- const { default: mockHandlers, config } = await import(mockFilePath);
89
+ const { default: mockHandlers, config } = await (0, utils_namespaceObject.compatibleRequire)(mockFilePath, false);
82
90
  const enable = config?.enable;
83
91
  if (false === enable) return;
84
92
  if (!mockHandlers) throw new Error(`Mock file ${mockFilePath} parsed failed!`);
@@ -98,8 +106,8 @@ const getMatched = (request, mockApis)=>{
98
106
  });
99
107
  return matched;
100
108
  };
101
- async function initOrUpdateMockMiddlewares(pwd) {
102
- const mockModule = await getMockModule(pwd);
109
+ async function initOrUpdateMockMiddlewares(pwd, mockDir) {
110
+ const mockModule = await getMockModule(pwd, mockDir);
103
111
  mockConfig = mockModule?.config;
104
112
  mockAPIs = Object.entries(mockModule?.mockHandlers || {}).map(([key, handler])=>{
105
113
  const { method, path } = parseKey(key);
@@ -110,8 +118,8 @@ async function initOrUpdateMockMiddlewares(pwd) {
110
118
  };
111
119
  });
112
120
  }
113
- async function getMockMiddleware(pwd) {
114
- await initOrUpdateMockMiddlewares(pwd);
121
+ async function getMockMiddleware(pwd, mockDir) {
122
+ await initOrUpdateMockMiddlewares(pwd, mockDir);
115
123
  const mockMiddleware = async (c, next)=>{
116
124
  if ('function' == typeof mockConfig?.enable) {
117
125
  const isEnabled = mockConfig.enable(c.env.node.req, c.env.node.res);
@@ -130,10 +138,14 @@ async function getMockMiddleware(pwd) {
130
138
  exports.getMatched = __webpack_exports__.getMatched;
131
139
  exports.getMockMiddleware = __webpack_exports__.getMockMiddleware;
132
140
  exports.initOrUpdateMockMiddlewares = __webpack_exports__.initOrUpdateMockMiddlewares;
141
+ exports.isPathInsideDirectory = __webpack_exports__.isPathInsideDirectory;
142
+ exports.resolveMockDirectory = __webpack_exports__.resolveMockDirectory;
133
143
  for(var __rspack_i in __webpack_exports__)if (-1 === [
134
144
  "getMatched",
135
145
  "getMockMiddleware",
136
- "initOrUpdateMockMiddlewares"
146
+ "initOrUpdateMockMiddlewares",
147
+ "isPathInsideDirectory",
148
+ "resolveMockDirectory"
137
149
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
138
150
  Object.defineProperty(exports, '__esModule', {
139
151
  value: true
@@ -1,7 +1,10 @@
1
1
  import node_path from "node:path";
2
2
  import { createServerBase } from "@modern-js/server-core";
3
3
  import { createNodeServer, loadServerRuntimeConfig } from "@modern-js/server-core/node";
4
- import { devPlugin } from "./dev.mjs";
4
+ import { logger } from "@modern-js/utils";
5
+ import { devRuntimeMiddlewarePlugin, setupDevInfra } from "./dev.mjs";
6
+ import { createReloadManager } from "./dev-tools/reloadManager.mjs";
7
+ import { createRuntimeServerOptions } from "./dev-tools/runtimeOptions.mjs";
5
8
  import { getDevAssetPrefix, getDevOptions } from "./helpers/index.mjs";
6
9
  async function createDevServer(options, applyPlugins) {
7
10
  const { config, pwd, serverConfigPath, builder } = options;
@@ -20,33 +23,76 @@ async function createDevServer(options, applyPlugins) {
20
23
  ...options.plugins || []
21
24
  ]
22
25
  };
23
- const server = createServerBase(prodServerOptions);
24
- const devHttpsOption = 'object' == typeof dev && dev.https;
25
- const isHttp2 = !!devHttpsOption;
26
- let nodeServer;
27
- if (devHttpsOption) {
28
- const { genHttpsOptions } = await import("./dev-tools/https/index.mjs");
29
- const httpsOptions = await genHttpsOptions(devHttpsOption, pwd);
30
- nodeServer = await createNodeServer(server.handle.bind(server), httpsOptions, isHttp2);
31
- } else nodeServer = await createNodeServer(server.handle.bind(server));
32
- const promise = getDevAssetPrefix(builder);
33
26
  let compiler = null;
34
27
  builder?.onAfterCreateCompiler((context)=>{
35
28
  compiler = context.compiler;
36
29
  });
30
+ const assetPrefixPromise = getDevAssetPrefix(builder);
37
31
  const builderDevServer = await builder?.createDevServer({
38
32
  runCompile: options.runCompile
39
33
  });
40
- server.addPlugins([
41
- devPlugin({
42
- ...options,
43
- builderDevServer
44
- }, compiler)
45
- ]);
46
- const assetPrefix = await promise;
47
- if (assetPrefix) prodServerOptions.config.output.assetPrefix = assetPrefix;
48
- await applyPlugins(server, prodServerOptions, nodeServer);
49
- await server.init();
34
+ const assetPrefix = await assetPrefixPromise;
35
+ let currentRuntimeServer;
36
+ let nodeServer;
37
+ const buildRuntimeServer = async ()=>{
38
+ const freshServerConfig = await loadServerRuntimeConfig(serverConfigPath) || {};
39
+ const runtimeOptions = createRuntimeServerOptions({
40
+ ...prodServerOptions,
41
+ serverConfig: {
42
+ ...freshServerConfig,
43
+ ...options.serverConfig
44
+ },
45
+ plugins: [
46
+ ...freshServerConfig.plugins || [],
47
+ ...options.plugins || []
48
+ ]
49
+ }, assetPrefix);
50
+ const runtimeServer = createServerBase(runtimeOptions);
51
+ runtimeServer.addPlugins([
52
+ devRuntimeMiddlewarePlugin({
53
+ ...options,
54
+ builderDevServer
55
+ }, compiler)
56
+ ]);
57
+ await applyPlugins(runtimeServer, runtimeOptions, nodeServer);
58
+ await runtimeServer.init();
59
+ currentRuntimeServer = runtimeServer;
60
+ return runtimeServer.handle;
61
+ };
62
+ const pendingReloadFiles = new Set();
63
+ const reloadManager = createReloadManager({
64
+ build: buildRuntimeServer,
65
+ onReload: ()=>{
66
+ const files = Array.from(pendingReloadFiles);
67
+ pendingReloadFiles.clear();
68
+ logger.info(files.length > 0 ? `Server runtime reloaded (${files.join(', ')})` : 'Server runtime reloaded');
69
+ }
70
+ });
71
+ const devHttpsOption = 'object' == typeof dev && dev.https;
72
+ const isHttp2 = !!devHttpsOption;
73
+ if (devHttpsOption) {
74
+ const { genHttpsOptions } = await import("./dev-tools/https/index.mjs");
75
+ const httpsOptions = await genHttpsOptions(devHttpsOption, pwd);
76
+ nodeServer = await createNodeServer(reloadManager.handle, httpsOptions, isHttp2);
77
+ } else nodeServer = await createNodeServer(reloadManager.handle);
78
+ reloadManager.setHandle(await buildRuntimeServer());
79
+ setupDevInfra({
80
+ config,
81
+ pwd,
82
+ distDir,
83
+ apiDir: options.appContext?.apiDirectory,
84
+ sharedDir: options.appContext?.sharedDirectory,
85
+ builder,
86
+ builderDevServer,
87
+ compiler,
88
+ nodeServer,
89
+ getRuntimeServer: ()=>currentRuntimeServer,
90
+ onFileChange: (filepath)=>{
91
+ pendingReloadFiles.add(node_path.relative(pwd, filepath));
92
+ reloadManager.schedule();
93
+ },
94
+ onClose: ()=>reloadManager.close()
95
+ });
50
96
  const afterListen = async ()=>{
51
97
  await builderDevServer?.afterListen();
52
98
  };
@@ -0,0 +1,185 @@
1
+ import { logger } from "@modern-js/utils";
2
+ function _check_private_redeclaration(obj, privateCollection) {
3
+ if (privateCollection.has(obj)) throw new TypeError("Cannot initialize the same private elements twice on an object");
4
+ }
5
+ function _class_apply_descriptor_get(receiver, descriptor) {
6
+ if (descriptor.get) return descriptor.get.call(receiver);
7
+ return descriptor.value;
8
+ }
9
+ function _class_apply_descriptor_set(receiver, descriptor, value) {
10
+ if (descriptor.set) descriptor.set.call(receiver, value);
11
+ else {
12
+ if (!descriptor.writable) throw new TypeError("attempted to set read only private field");
13
+ descriptor.value = value;
14
+ }
15
+ }
16
+ function _class_extract_field_descriptor(receiver, privateMap, action) {
17
+ if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
18
+ return privateMap.get(receiver);
19
+ }
20
+ function _class_private_field_get(receiver, privateMap) {
21
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
22
+ return _class_apply_descriptor_get(receiver, descriptor);
23
+ }
24
+ function _class_private_field_init(obj, privateMap, value) {
25
+ _check_private_redeclaration(obj, privateMap);
26
+ privateMap.set(obj, value);
27
+ }
28
+ function _class_private_field_set(receiver, privateMap, value) {
29
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
30
+ _class_apply_descriptor_set(receiver, descriptor, value);
31
+ return value;
32
+ }
33
+ function _class_private_method_get(receiver, privateSet, fn) {
34
+ if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
35
+ return fn;
36
+ }
37
+ function _class_private_method_init(obj, privateSet) {
38
+ _check_private_redeclaration(obj, privateSet);
39
+ privateSet.add(obj);
40
+ }
41
+ const DEFAULT_DEBOUNCE_MS = 300;
42
+ const notReadyHandle = ()=>new Response('Dev server is starting…', {
43
+ status: 503,
44
+ headers: {
45
+ 'content-type': 'text/plain; charset=utf-8'
46
+ }
47
+ });
48
+ var _current = /*#__PURE__*/ new WeakMap(), _build = /*#__PURE__*/ new WeakMap(), _debounceMs = /*#__PURE__*/ new WeakMap(), _onReload = /*#__PURE__*/ new WeakMap(), _onError = /*#__PURE__*/ new WeakMap(), _onReloadError = /*#__PURE__*/ new WeakMap(), _debounceTimer = /*#__PURE__*/ new WeakMap(), _running = /*#__PURE__*/ new WeakMap(), _pending = /*#__PURE__*/ new WeakMap(), _runningPromise = /*#__PURE__*/ new WeakMap(), _closed = /*#__PURE__*/ new WeakMap(), _runLoop = /*#__PURE__*/ new WeakSet(), _reportBuildError = /*#__PURE__*/ new WeakSet(), _reportReloadCallbackError = /*#__PURE__*/ new WeakSet();
49
+ class ReloadManager {
50
+ setHandle(handle) {
51
+ _class_private_field_set(this, _current, handle);
52
+ }
53
+ get handle() {
54
+ return (request, ...args)=>_class_private_field_get(this, _current).call(this, request, ...args);
55
+ }
56
+ get currentHandle() {
57
+ return _class_private_field_get(this, _current);
58
+ }
59
+ get isReloading() {
60
+ return _class_private_field_get(this, _running);
61
+ }
62
+ schedule() {
63
+ if (_class_private_field_get(this, _closed)) return;
64
+ if (_class_private_field_get(this, _debounceTimer)) clearTimeout(_class_private_field_get(this, _debounceTimer));
65
+ _class_private_field_set(this, _debounceTimer, setTimeout(()=>{
66
+ _class_private_field_set(this, _debounceTimer, null);
67
+ this.reloadNow();
68
+ }, _class_private_field_get(this, _debounceMs)));
69
+ }
70
+ async reloadNow() {
71
+ if (_class_private_field_get(this, _closed)) return;
72
+ if (_class_private_field_get(this, _running)) {
73
+ _class_private_field_set(this, _pending, true);
74
+ return _class_private_field_get(this, _runningPromise) ?? Promise.resolve();
75
+ }
76
+ _class_private_field_set(this, _running, true);
77
+ _class_private_field_set(this, _runningPromise, _class_private_method_get(this, _runLoop, runLoop).call(this));
78
+ try {
79
+ await _class_private_field_get(this, _runningPromise);
80
+ } finally{
81
+ _class_private_field_set(this, _running, false);
82
+ _class_private_field_set(this, _runningPromise, null);
83
+ }
84
+ }
85
+ close() {
86
+ _class_private_field_set(this, _closed, true);
87
+ _class_private_field_set(this, _pending, false);
88
+ if (_class_private_field_get(this, _debounceTimer)) {
89
+ clearTimeout(_class_private_field_get(this, _debounceTimer));
90
+ _class_private_field_set(this, _debounceTimer, null);
91
+ }
92
+ }
93
+ constructor(options){
94
+ _class_private_method_init(this, _runLoop);
95
+ _class_private_method_init(this, _reportBuildError);
96
+ _class_private_method_init(this, _reportReloadCallbackError);
97
+ _class_private_field_init(this, _current, {
98
+ writable: true,
99
+ value: void 0
100
+ });
101
+ _class_private_field_init(this, _build, {
102
+ writable: true,
103
+ value: void 0
104
+ });
105
+ _class_private_field_init(this, _debounceMs, {
106
+ writable: true,
107
+ value: void 0
108
+ });
109
+ _class_private_field_init(this, _onReload, {
110
+ writable: true,
111
+ value: void 0
112
+ });
113
+ _class_private_field_init(this, _onError, {
114
+ writable: true,
115
+ value: void 0
116
+ });
117
+ _class_private_field_init(this, _onReloadError, {
118
+ writable: true,
119
+ value: void 0
120
+ });
121
+ _class_private_field_init(this, _debounceTimer, {
122
+ writable: true,
123
+ value: void 0
124
+ });
125
+ _class_private_field_init(this, _running, {
126
+ writable: true,
127
+ value: void 0
128
+ });
129
+ _class_private_field_init(this, _pending, {
130
+ writable: true,
131
+ value: void 0
132
+ });
133
+ _class_private_field_init(this, _runningPromise, {
134
+ writable: true,
135
+ value: void 0
136
+ });
137
+ _class_private_field_init(this, _closed, {
138
+ writable: true,
139
+ value: void 0
140
+ });
141
+ _class_private_field_set(this, _debounceTimer, null);
142
+ _class_private_field_set(this, _running, false);
143
+ _class_private_field_set(this, _pending, false);
144
+ _class_private_field_set(this, _runningPromise, null);
145
+ _class_private_field_set(this, _closed, false);
146
+ _class_private_field_set(this, _current, options.initialHandle ?? notReadyHandle);
147
+ _class_private_field_set(this, _build, options.build);
148
+ _class_private_field_set(this, _debounceMs, options.debounceMs ?? DEFAULT_DEBOUNCE_MS);
149
+ _class_private_field_set(this, _onReload, options.onReload);
150
+ _class_private_field_set(this, _onError, options.onError);
151
+ _class_private_field_set(this, _onReloadError, options.onReloadError);
152
+ }
153
+ }
154
+ async function runLoop() {
155
+ var _this, _this1;
156
+ do {
157
+ _class_private_field_set(this, _pending, false);
158
+ let next;
159
+ try {
160
+ next = await _class_private_field_get(this, _build).call(this);
161
+ } catch (error) {
162
+ _class_private_method_get(this, _reportBuildError, reportBuildError).call(this, error);
163
+ continue;
164
+ }
165
+ if (_class_private_field_get(this, _closed)) return;
166
+ _class_private_field_set(this, _current, next);
167
+ try {
168
+ null == (_this = _class_private_field_get(_this1 = this, _onReload)) || _this.call(_this1, next);
169
+ } catch (callbackError) {
170
+ _class_private_method_get(this, _reportReloadCallbackError, reportReloadCallbackError).call(this, callbackError);
171
+ }
172
+ }while (_class_private_field_get(this, _pending) && !_class_private_field_get(this, _closed))
173
+ }
174
+ function reportBuildError(error) {
175
+ if (_class_private_field_get(this, _onError)) _class_private_field_get(this, _onError).call(this, error);
176
+ else logger.error(`[dev-server] runtime reload build failed, keep serving previous handle:\n${error instanceof Error ? error.stack ?? error.message : error}`);
177
+ }
178
+ function reportReloadCallbackError(error) {
179
+ if (_class_private_field_get(this, _onReloadError)) _class_private_field_get(this, _onReloadError).call(this, error);
180
+ else logger.warn(`[dev-server] onReload callback failed after a successful swap (handle is already active):\n${error instanceof Error ? error.stack ?? error.message : error}`);
181
+ }
182
+ function createReloadManager(options) {
183
+ return new ReloadManager(options);
184
+ }
185
+ export { ReloadManager, createReloadManager };
@@ -0,0 +1,35 @@
1
+ function createRuntimeServerOptions(base, assetPrefix) {
2
+ const baseConfig = base.config ?? {};
3
+ const baseOutput = baseConfig.output ?? {};
4
+ const baseServerConfig = base.serverConfig ?? {};
5
+ return {
6
+ ...base,
7
+ config: {
8
+ ...baseConfig,
9
+ output: {
10
+ ...baseOutput,
11
+ ...assetPrefix ? {
12
+ assetPrefix
13
+ } : {}
14
+ }
15
+ },
16
+ serverConfig: {
17
+ ...baseServerConfig,
18
+ middlewares: [
19
+ ...baseServerConfig.middlewares ?? []
20
+ ],
21
+ renderMiddlewares: [
22
+ ...baseServerConfig.renderMiddlewares ?? []
23
+ ],
24
+ ...baseServerConfig.plugins ? {
25
+ plugins: [
26
+ ...baseServerConfig.plugins
27
+ ]
28
+ } : {}
29
+ },
30
+ plugins: [
31
+ ...base.plugins ?? []
32
+ ]
33
+ };
34
+ }
35
+ export { createRuntimeServerOptions };
@@ -1,3 +1,4 @@
1
+ import node_path from "node:path";
1
2
  import * as __rspack_external_minimatch from "minimatch";
2
3
  const defaultIgnores = [
3
4
  '**/coverage/**',
@@ -41,8 +42,9 @@ class DependencyTree {
41
42
  }
42
43
  }
43
44
  shouldIgnore(path) {
44
- return !path || Boolean(this.ignore.find((rule)=>__rspack_external_minimatch.match([
45
- path
45
+ const matchPath = path && node_path.isAbsolute(path) ? node_path.relative(process.cwd(), path) : path;
46
+ return !matchPath || Boolean(this.ignore.find((rule)=>__rspack_external_minimatch.match([
47
+ matchPath
46
48
  ], rule, {
47
49
  dot: true
48
50
  }).length > 0));