@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.
@@ -43,7 +43,10 @@ const external_node_path_namespaceObject = require("node:path");
43
43
  var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
44
44
  const server_core_namespaceObject = require("@modern-js/server-core");
45
45
  const node_namespaceObject = require("@modern-js/server-core/node");
46
+ const utils_namespaceObject = require("@modern-js/utils");
46
47
  const external_dev_js_namespaceObject = require("./dev.js");
48
+ const reloadManager_js_namespaceObject = require("./dev-tools/reloadManager.js");
49
+ const runtimeOptions_js_namespaceObject = require("./dev-tools/runtimeOptions.js");
47
50
  const index_js_namespaceObject = require("./helpers/index.js");
48
51
  async function createDevServer(options, applyPlugins) {
49
52
  const { config, pwd, serverConfigPath, builder } = options;
@@ -62,33 +65,76 @@ async function createDevServer(options, applyPlugins) {
62
65
  ...options.plugins || []
63
66
  ]
64
67
  };
65
- const server = (0, server_core_namespaceObject.createServerBase)(prodServerOptions);
66
- const devHttpsOption = 'object' == typeof dev && dev.https;
67
- const isHttp2 = !!devHttpsOption;
68
- let nodeServer;
69
- if (devHttpsOption) {
70
- const { genHttpsOptions } = await import("./dev-tools/https/index.js");
71
- const httpsOptions = await genHttpsOptions(devHttpsOption, pwd);
72
- nodeServer = await (0, node_namespaceObject.createNodeServer)(server.handle.bind(server), httpsOptions, isHttp2);
73
- } else nodeServer = await (0, node_namespaceObject.createNodeServer)(server.handle.bind(server));
74
- const promise = (0, index_js_namespaceObject.getDevAssetPrefix)(builder);
75
68
  let compiler = null;
76
69
  builder?.onAfterCreateCompiler((context)=>{
77
70
  compiler = context.compiler;
78
71
  });
72
+ const assetPrefixPromise = (0, index_js_namespaceObject.getDevAssetPrefix)(builder);
79
73
  const builderDevServer = await builder?.createDevServer({
80
74
  runCompile: options.runCompile
81
75
  });
82
- server.addPlugins([
83
- (0, external_dev_js_namespaceObject.devPlugin)({
84
- ...options,
85
- builderDevServer
86
- }, compiler)
87
- ]);
88
- const assetPrefix = await promise;
89
- if (assetPrefix) prodServerOptions.config.output.assetPrefix = assetPrefix;
90
- await applyPlugins(server, prodServerOptions, nodeServer);
91
- await server.init();
76
+ const assetPrefix = await assetPrefixPromise;
77
+ let currentRuntimeServer;
78
+ let nodeServer;
79
+ const buildRuntimeServer = async ()=>{
80
+ const freshServerConfig = await (0, node_namespaceObject.loadServerRuntimeConfig)(serverConfigPath) || {};
81
+ const runtimeOptions = (0, runtimeOptions_js_namespaceObject.createRuntimeServerOptions)({
82
+ ...prodServerOptions,
83
+ serverConfig: {
84
+ ...freshServerConfig,
85
+ ...options.serverConfig
86
+ },
87
+ plugins: [
88
+ ...freshServerConfig.plugins || [],
89
+ ...options.plugins || []
90
+ ]
91
+ }, assetPrefix);
92
+ const runtimeServer = (0, server_core_namespaceObject.createServerBase)(runtimeOptions);
93
+ runtimeServer.addPlugins([
94
+ (0, external_dev_js_namespaceObject.devRuntimeMiddlewarePlugin)({
95
+ ...options,
96
+ builderDevServer
97
+ }, compiler)
98
+ ]);
99
+ await applyPlugins(runtimeServer, runtimeOptions, nodeServer);
100
+ await runtimeServer.init();
101
+ currentRuntimeServer = runtimeServer;
102
+ return runtimeServer.handle;
103
+ };
104
+ const pendingReloadFiles = new Set();
105
+ const reloadManager = (0, reloadManager_js_namespaceObject.createReloadManager)({
106
+ build: buildRuntimeServer,
107
+ onReload: ()=>{
108
+ const files = Array.from(pendingReloadFiles);
109
+ pendingReloadFiles.clear();
110
+ utils_namespaceObject.logger.info(files.length > 0 ? `Server runtime reloaded (${files.join(', ')})` : 'Server runtime reloaded');
111
+ }
112
+ });
113
+ const devHttpsOption = 'object' == typeof dev && dev.https;
114
+ const isHttp2 = !!devHttpsOption;
115
+ if (devHttpsOption) {
116
+ const { genHttpsOptions } = await import("./dev-tools/https/index.js");
117
+ const httpsOptions = await genHttpsOptions(devHttpsOption, pwd);
118
+ nodeServer = await (0, node_namespaceObject.createNodeServer)(reloadManager.handle, httpsOptions, isHttp2);
119
+ } else nodeServer = await (0, node_namespaceObject.createNodeServer)(reloadManager.handle);
120
+ reloadManager.setHandle(await buildRuntimeServer());
121
+ (0, external_dev_js_namespaceObject.setupDevInfra)({
122
+ config,
123
+ pwd,
124
+ distDir,
125
+ apiDir: options.appContext?.apiDirectory,
126
+ sharedDir: options.appContext?.sharedDirectory,
127
+ builder,
128
+ builderDevServer,
129
+ compiler,
130
+ nodeServer,
131
+ getRuntimeServer: ()=>currentRuntimeServer,
132
+ onFileChange: (filepath)=>{
133
+ pendingReloadFiles.add(external_node_path_default().relative(pwd, filepath));
134
+ reloadManager.schedule();
135
+ },
136
+ onClose: ()=>reloadManager.close()
137
+ });
92
138
  const afterListen = async ()=>{
93
139
  await builderDevServer?.afterListen();
94
140
  };
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ ReloadManager: ()=>ReloadManager,
32
+ createReloadManager: ()=>createReloadManager
33
+ });
34
+ const utils_namespaceObject = require("@modern-js/utils");
35
+ function _check_private_redeclaration(obj, privateCollection) {
36
+ if (privateCollection.has(obj)) throw new TypeError("Cannot initialize the same private elements twice on an object");
37
+ }
38
+ function _class_apply_descriptor_get(receiver, descriptor) {
39
+ if (descriptor.get) return descriptor.get.call(receiver);
40
+ return descriptor.value;
41
+ }
42
+ function _class_apply_descriptor_set(receiver, descriptor, value) {
43
+ if (descriptor.set) descriptor.set.call(receiver, value);
44
+ else {
45
+ if (!descriptor.writable) throw new TypeError("attempted to set read only private field");
46
+ descriptor.value = value;
47
+ }
48
+ }
49
+ function _class_extract_field_descriptor(receiver, privateMap, action) {
50
+ if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
51
+ return privateMap.get(receiver);
52
+ }
53
+ function _class_private_field_get(receiver, privateMap) {
54
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
55
+ return _class_apply_descriptor_get(receiver, descriptor);
56
+ }
57
+ function _class_private_field_init(obj, privateMap, value) {
58
+ _check_private_redeclaration(obj, privateMap);
59
+ privateMap.set(obj, value);
60
+ }
61
+ function _class_private_field_set(receiver, privateMap, value) {
62
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
63
+ _class_apply_descriptor_set(receiver, descriptor, value);
64
+ return value;
65
+ }
66
+ function _class_private_method_get(receiver, privateSet, fn) {
67
+ if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
68
+ return fn;
69
+ }
70
+ function _class_private_method_init(obj, privateSet) {
71
+ _check_private_redeclaration(obj, privateSet);
72
+ privateSet.add(obj);
73
+ }
74
+ const DEFAULT_DEBOUNCE_MS = 300;
75
+ const notReadyHandle = ()=>new Response('Dev server is starting…', {
76
+ status: 503,
77
+ headers: {
78
+ 'content-type': 'text/plain; charset=utf-8'
79
+ }
80
+ });
81
+ 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();
82
+ class ReloadManager {
83
+ setHandle(handle) {
84
+ _class_private_field_set(this, _current, handle);
85
+ }
86
+ get handle() {
87
+ return (request, ...args)=>_class_private_field_get(this, _current).call(this, request, ...args);
88
+ }
89
+ get currentHandle() {
90
+ return _class_private_field_get(this, _current);
91
+ }
92
+ get isReloading() {
93
+ return _class_private_field_get(this, _running);
94
+ }
95
+ schedule() {
96
+ if (_class_private_field_get(this, _closed)) return;
97
+ if (_class_private_field_get(this, _debounceTimer)) clearTimeout(_class_private_field_get(this, _debounceTimer));
98
+ _class_private_field_set(this, _debounceTimer, setTimeout(()=>{
99
+ _class_private_field_set(this, _debounceTimer, null);
100
+ this.reloadNow();
101
+ }, _class_private_field_get(this, _debounceMs)));
102
+ }
103
+ async reloadNow() {
104
+ if (_class_private_field_get(this, _closed)) return;
105
+ if (_class_private_field_get(this, _running)) {
106
+ _class_private_field_set(this, _pending, true);
107
+ return _class_private_field_get(this, _runningPromise) ?? Promise.resolve();
108
+ }
109
+ _class_private_field_set(this, _running, true);
110
+ _class_private_field_set(this, _runningPromise, _class_private_method_get(this, _runLoop, runLoop).call(this));
111
+ try {
112
+ await _class_private_field_get(this, _runningPromise);
113
+ } finally{
114
+ _class_private_field_set(this, _running, false);
115
+ _class_private_field_set(this, _runningPromise, null);
116
+ }
117
+ }
118
+ close() {
119
+ _class_private_field_set(this, _closed, true);
120
+ _class_private_field_set(this, _pending, false);
121
+ if (_class_private_field_get(this, _debounceTimer)) {
122
+ clearTimeout(_class_private_field_get(this, _debounceTimer));
123
+ _class_private_field_set(this, _debounceTimer, null);
124
+ }
125
+ }
126
+ constructor(options){
127
+ _class_private_method_init(this, _runLoop);
128
+ _class_private_method_init(this, _reportBuildError);
129
+ _class_private_method_init(this, _reportReloadCallbackError);
130
+ _class_private_field_init(this, _current, {
131
+ writable: true,
132
+ value: void 0
133
+ });
134
+ _class_private_field_init(this, _build, {
135
+ writable: true,
136
+ value: void 0
137
+ });
138
+ _class_private_field_init(this, _debounceMs, {
139
+ writable: true,
140
+ value: void 0
141
+ });
142
+ _class_private_field_init(this, _onReload, {
143
+ writable: true,
144
+ value: void 0
145
+ });
146
+ _class_private_field_init(this, _onError, {
147
+ writable: true,
148
+ value: void 0
149
+ });
150
+ _class_private_field_init(this, _onReloadError, {
151
+ writable: true,
152
+ value: void 0
153
+ });
154
+ _class_private_field_init(this, _debounceTimer, {
155
+ writable: true,
156
+ value: void 0
157
+ });
158
+ _class_private_field_init(this, _running, {
159
+ writable: true,
160
+ value: void 0
161
+ });
162
+ _class_private_field_init(this, _pending, {
163
+ writable: true,
164
+ value: void 0
165
+ });
166
+ _class_private_field_init(this, _runningPromise, {
167
+ writable: true,
168
+ value: void 0
169
+ });
170
+ _class_private_field_init(this, _closed, {
171
+ writable: true,
172
+ value: void 0
173
+ });
174
+ _class_private_field_set(this, _debounceTimer, null);
175
+ _class_private_field_set(this, _running, false);
176
+ _class_private_field_set(this, _pending, false);
177
+ _class_private_field_set(this, _runningPromise, null);
178
+ _class_private_field_set(this, _closed, false);
179
+ _class_private_field_set(this, _current, options.initialHandle ?? notReadyHandle);
180
+ _class_private_field_set(this, _build, options.build);
181
+ _class_private_field_set(this, _debounceMs, options.debounceMs ?? DEFAULT_DEBOUNCE_MS);
182
+ _class_private_field_set(this, _onReload, options.onReload);
183
+ _class_private_field_set(this, _onError, options.onError);
184
+ _class_private_field_set(this, _onReloadError, options.onReloadError);
185
+ }
186
+ }
187
+ async function runLoop() {
188
+ var _this, _this1;
189
+ do {
190
+ _class_private_field_set(this, _pending, false);
191
+ let next;
192
+ try {
193
+ next = await _class_private_field_get(this, _build).call(this);
194
+ } catch (error) {
195
+ _class_private_method_get(this, _reportBuildError, reportBuildError).call(this, error);
196
+ continue;
197
+ }
198
+ if (_class_private_field_get(this, _closed)) return;
199
+ _class_private_field_set(this, _current, next);
200
+ try {
201
+ null == (_this = _class_private_field_get(_this1 = this, _onReload)) || _this.call(_this1, next);
202
+ } catch (callbackError) {
203
+ _class_private_method_get(this, _reportReloadCallbackError, reportReloadCallbackError).call(this, callbackError);
204
+ }
205
+ }while (_class_private_field_get(this, _pending) && !_class_private_field_get(this, _closed));
206
+ }
207
+ function reportBuildError(error) {
208
+ if (_class_private_field_get(this, _onError)) _class_private_field_get(this, _onError).call(this, error);
209
+ else utils_namespaceObject.logger.error(`[dev-server] runtime reload build failed, keep serving previous handle:\n${error instanceof Error ? error.stack ?? error.message : error}`);
210
+ }
211
+ function reportReloadCallbackError(error) {
212
+ if (_class_private_field_get(this, _onReloadError)) _class_private_field_get(this, _onReloadError).call(this, error);
213
+ else utils_namespaceObject.logger.warn(`[dev-server] onReload callback failed after a successful swap (handle is already active):\n${error instanceof Error ? error.stack ?? error.message : error}`);
214
+ }
215
+ function createReloadManager(options) {
216
+ return new ReloadManager(options);
217
+ }
218
+ exports.ReloadManager = __webpack_exports__.ReloadManager;
219
+ exports.createReloadManager = __webpack_exports__.createReloadManager;
220
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
221
+ "ReloadManager",
222
+ "createReloadManager"
223
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
224
+ Object.defineProperty(exports, '__esModule', {
225
+ value: true
226
+ });
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ function createRuntimeServerOptions(base, assetPrefix) {
31
+ const baseConfig = base.config ?? {};
32
+ const baseOutput = baseConfig.output ?? {};
33
+ const baseServerConfig = base.serverConfig ?? {};
34
+ return {
35
+ ...base,
36
+ config: {
37
+ ...baseConfig,
38
+ output: {
39
+ ...baseOutput,
40
+ ...assetPrefix ? {
41
+ assetPrefix
42
+ } : {}
43
+ }
44
+ },
45
+ serverConfig: {
46
+ ...baseServerConfig,
47
+ middlewares: [
48
+ ...baseServerConfig.middlewares ?? []
49
+ ],
50
+ renderMiddlewares: [
51
+ ...baseServerConfig.renderMiddlewares ?? []
52
+ ],
53
+ ...baseServerConfig.plugins ? {
54
+ plugins: [
55
+ ...baseServerConfig.plugins
56
+ ]
57
+ } : {}
58
+ },
59
+ plugins: [
60
+ ...base.plugins ?? []
61
+ ]
62
+ };
63
+ }
64
+ __webpack_require__.d(__webpack_exports__, {
65
+ createRuntimeServerOptions: ()=>createRuntimeServerOptions
66
+ });
67
+ exports.createRuntimeServerOptions = __webpack_exports__.createRuntimeServerOptions;
68
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
69
+ "createRuntimeServerOptions"
70
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
71
+ Object.defineProperty(exports, '__esModule', {
72
+ value: true
73
+ });
@@ -1,5 +1,14 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
3
12
  (()=>{
4
13
  __webpack_require__.d = (exports1, getters, values)=>{
5
14
  var define = (defs, kind)=>{
@@ -31,6 +40,8 @@ __webpack_require__.d(__webpack_exports__, {
31
40
  DependencyTree: ()=>DependencyTree,
32
41
  defaultIgnores: ()=>defaultIgnores
33
42
  });
43
+ const external_node_path_namespaceObject = require("node:path");
44
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
34
45
  const external_minimatch_namespaceObject = require("minimatch");
35
46
  const defaultIgnores = [
36
47
  '**/coverage/**',
@@ -74,8 +85,9 @@ class DependencyTree {
74
85
  }
75
86
  }
76
87
  shouldIgnore(path) {
77
- return !path || Boolean(this.ignore.find((rule)=>external_minimatch_namespaceObject.match([
78
- path
88
+ const matchPath = path && external_node_path_default().isAbsolute(path) ? external_node_path_default().relative(process.cwd(), path) : path;
89
+ return !matchPath || Boolean(this.ignore.find((rule)=>external_minimatch_namespaceObject.match([
90
+ matchPath
79
91
  ], rule, {
80
92
  dot: true
81
93
  }).length > 0));
package/dist/cjs/dev.js CHANGED
@@ -28,45 +28,20 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
- devPlugin: ()=>devPlugin
31
+ devRuntimeMiddlewarePlugin: ()=>devRuntimeMiddlewarePlugin,
32
+ setupDevInfra: ()=>setupDevInfra
32
33
  });
33
34
  const node_namespaceObject = require("@modern-js/server-core/node");
34
35
  const utils_namespaceObject = require("@modern-js/utils");
35
36
  const index_js_namespaceObject = require("./helpers/index.js");
36
- const devPlugin = (options, compiler)=>({
37
+ const devRuntimeMiddlewarePlugin = (options, compiler)=>({
37
38
  name: '@modern-js/plugin-dev',
38
39
  setup (api) {
39
- const { config, pwd, builder, builderDevServer } = options;
40
- const closeCb = [];
40
+ const { pwd, builderDevServer } = options;
41
41
  const dev = (0, index_js_namespaceObject.getDevOptions)(options.dev);
42
42
  api.onPrepare(async ()=>{
43
- const { middlewares: builderMiddlewares, close, connectWebSocket } = builderDevServer || {};
44
- close && closeCb.push(close);
45
- const { middlewares, distDirectory, nodeServer, apiDirectory, sharedDirectory, serverBase } = api.getServerContext();
46
- connectWebSocket && nodeServer && connectWebSocket({
47
- server: nodeServer
48
- });
49
- const hooks = api.getHooks();
50
- builder?.onDevCompileDone(({ stats })=>{
51
- if ('server' !== stats.toJson({
52
- all: false
53
- }).name) (0, index_js_namespaceObject.onRepack)(distDirectory, hooks);
54
- });
55
- const { watchOptions } = config.server;
56
- const watcher = (0, index_js_namespaceObject.startWatcher)({
57
- pwd,
58
- distDir: distDirectory,
59
- apiDir: apiDirectory || utils_namespaceObject.API_DIR,
60
- sharedDir: sharedDirectory || utils_namespaceObject.SHARED_DIR,
61
- watchOptions,
62
- server: serverBase
63
- });
64
- closeCb.push(watcher.close.bind(watcher));
65
- closeCb.length > 0 && nodeServer?.on('close', ()=>{
66
- closeCb.forEach((cb)=>{
67
- cb();
68
- });
69
- });
43
+ const { middlewares: builderMiddlewares } = builderDevServer || {};
44
+ const { middlewares } = api.getServerContext();
70
45
  const before = [];
71
46
  const after = [];
72
47
  const { setupMiddlewares = [] } = dev;
@@ -84,7 +59,7 @@ const devPlugin = (options, compiler)=>({
84
59
  handler: (0, node_namespaceObject.connectMid2HonoMid)(middleware)
85
60
  });
86
61
  });
87
- const mockMiddleware = await (0, index_js_namespaceObject.getMockMiddleware)(pwd);
62
+ const mockMiddleware = await (0, index_js_namespaceObject.getMockMiddleware)(pwd, options.config?.dev?.mockDir);
88
63
  middlewares.push({
89
64
  name: 'mock-dev',
90
65
  handler: mockMiddleware
@@ -106,9 +81,67 @@ const devPlugin = (options, compiler)=>({
106
81
  });
107
82
  }
108
83
  });
109
- exports.devPlugin = __webpack_exports__.devPlugin;
84
+ function setupDevInfra({ config, pwd, distDir, apiDir, sharedDir, builder, builderDevServer, getRuntimeServer, onFileChange, onClose, nodeServer }) {
85
+ const { close, connectWebSocket } = builderDevServer || {};
86
+ const closeCb = [];
87
+ close && closeCb.push(close);
88
+ connectWebSocket && nodeServer && connectWebSocket({
89
+ server: nodeServer
90
+ });
91
+ builder?.onDevCompileDone(({ stats })=>{
92
+ if ('server' !== stats.toJson({
93
+ all: false
94
+ }).name) {
95
+ const runtimeServer = getRuntimeServer();
96
+ if (runtimeServer) (0, index_js_namespaceObject.onRepack)(distDir, runtimeServer.hooks);
97
+ }
98
+ });
99
+ const { watchOptions } = config.server;
100
+ const mockDir = config.dev?.mockDir;
101
+ const mockPath = (0, index_js_namespaceObject.resolveMockDirectory)(pwd, mockDir);
102
+ const watcher = (0, index_js_namespaceObject.startWatcher)({
103
+ pwd,
104
+ distDir,
105
+ apiDir: apiDir || utils_namespaceObject.API_DIR,
106
+ sharedDir: sharedDir || utils_namespaceObject.SHARED_DIR,
107
+ mockDir,
108
+ watchOptions,
109
+ onChange: (filepath, event)=>{
110
+ const runtimeServer = getRuntimeServer();
111
+ if (runtimeServer && !(0, index_js_namespaceObject.isPathInsideDirectory)(filepath, mockPath)) {
112
+ const fileChangeEvent = {
113
+ type: 'file-change',
114
+ payload: [
115
+ {
116
+ filename: filepath,
117
+ event
118
+ }
119
+ ]
120
+ };
121
+ Promise.resolve(runtimeServer.hooks.onReset.call({
122
+ event: fileChangeEvent
123
+ })).catch((error)=>utils_namespaceObject.logger.error(error));
124
+ }
125
+ onFileChange(filepath, event);
126
+ }
127
+ });
128
+ closeCb.push(watcher.close.bind(watcher));
129
+ onClose && closeCb.push(onClose);
130
+ const close$ = ()=>{
131
+ closeCb.forEach((cb)=>{
132
+ cb();
133
+ });
134
+ };
135
+ closeCb.length > 0 && nodeServer?.on('close', close$);
136
+ return {
137
+ close: close$
138
+ };
139
+ }
140
+ exports.devRuntimeMiddlewarePlugin = __webpack_exports__.devRuntimeMiddlewarePlugin;
141
+ exports.setupDevInfra = __webpack_exports__.setupDevInfra;
110
142
  for(var __rspack_i in __webpack_exports__)if (-1 === [
111
- "devPlugin"
143
+ "devRuntimeMiddlewarePlugin",
144
+ "setupDevInfra"
112
145
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
113
146
  Object.defineProperty(exports, '__esModule', {
114
147
  value: true