@bleedingdev/modern-js-server 3.5.0-ultramodern.10 → 3.5.0-ultramodern.100
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/dist/cjs/createDevServer.js +66 -20
- package/dist/cjs/dev-tools/reloadManager.js +226 -0
- package/dist/cjs/dev-tools/runtimeOptions.js +73 -0
- package/dist/cjs/dev-tools/watcher/dependencyTree.js +14 -2
- package/dist/cjs/dev.js +67 -34
- package/dist/cjs/helpers/index.js +26 -65
- package/dist/cjs/helpers/mock.js +21 -9
- package/dist/esm/createDevServer.mjs +67 -21
- package/dist/esm/dev-tools/reloadManager.mjs +185 -0
- package/dist/esm/dev-tools/runtimeOptions.mjs +35 -0
- package/dist/esm/dev-tools/watcher/dependencyTree.mjs +4 -2
- package/dist/esm/dev.mjs +64 -34
- package/dist/esm/helpers/index.mjs +5 -38
- package/dist/esm/helpers/mock.mjs +15 -9
- package/dist/esm-node/createDevServer.mjs +67 -21
- package/dist/esm-node/dev-tools/reloadManager.mjs +186 -0
- package/dist/esm-node/dev-tools/runtimeOptions.mjs +36 -0
- package/dist/esm-node/dev-tools/watcher/dependencyTree.mjs +4 -2
- package/dist/esm-node/dev.mjs +64 -34
- package/dist/esm-node/helpers/index.mjs +5 -38
- package/dist/esm-node/helpers/mock.mjs +15 -9
- package/dist/types/dev-tools/reloadManager.d.ts +88 -0
- package/dist/types/dev-tools/runtimeOptions.d.ts +27 -0
- package/dist/types/dev.d.ts +61 -2
- package/dist/types/helpers/index.d.ts +9 -4
- package/dist/types/helpers/mock.d.ts +4 -2
- package/package.json +14 -16
- package/rstest.config.mts +1 -0
|
@@ -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
|
|
79
|
-
var
|
|
80
|
-
var
|
|
81
|
-
var
|
|
82
|
-
var
|
|
83
|
-
var
|
|
84
|
-
var
|
|
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
|
|
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] = ()=>
|
|
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
|
|
85
|
+
var _fileReader__rspack_import_5 = __webpack_require__("./fileReader");
|
|
94
86
|
var __rspack_reexport = {};
|
|
95
|
-
for(const __rspack_import_key in
|
|
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] = ()=>
|
|
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
|
|
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] = ()=>
|
|
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
|
|
98
|
+
var _repack__rspack_import_6 = __webpack_require__("./repack");
|
|
107
99
|
var __rspack_reexport = {};
|
|
108
|
-
for(const __rspack_import_key in
|
|
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] = ()=>
|
|
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
|
-
|
|
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
|
-
|
|
142
|
-
`${
|
|
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}/${
|
|
111
|
+
`${distDir}/${_modern_js_utils__rspack_import_0.SERVER_BUNDLE_DIRECTORY}/*-server-loaders.js`
|
|
146
112
|
];
|
|
147
|
-
const mergedWatchOptions = (0,
|
|
113
|
+
const mergedWatchOptions = (0, _dev_tools_watcher__rspack_import_2.mergeWatchOptions)(watchOptions);
|
|
148
114
|
const defaultWatchedPaths = defaultWatched.map((p)=>{
|
|
149
|
-
const finalPath =
|
|
150
|
-
return
|
|
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 (
|
|
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
|
-
|
|
159
|
-
pwd,
|
|
160
|
-
filepath,
|
|
161
|
-
event,
|
|
162
|
-
server
|
|
163
|
-
});
|
|
124
|
+
onChange(filepath, event);
|
|
164
125
|
});
|
|
165
126
|
return watcher;
|
|
166
127
|
}
|
package/dist/cjs/helpers/mock.js
CHANGED
|
@@ -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(
|
|
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
|
|
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 {
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
45
|
-
|
|
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));
|