@modern-js/server 1.4.22-beta.1 → 1.5.1-beta.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @modern-js/server
2
2
 
3
+ ## 1.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 77a8e9e: feat: support bff operators
8
+
9
+ ### Patch Changes
10
+
11
+ - d9564f2: feat: add watchOptions for server watcher
12
+ - Updated dependencies [550e2bd]
13
+ - Updated dependencies [87eb9f8]
14
+ - Updated dependencies [2b06fe3]
15
+ - Updated dependencies [3050acc]
16
+ - Updated dependencies [f29e9ba]
17
+ - Updated dependencies [2dacc89]
18
+ - Updated dependencies [338496c]
19
+ - Updated dependencies [a90bc96]
20
+ - @modern-js/webpack@1.11.3
21
+ - @modern-js/prod-server@1.1.9
22
+ - @modern-js/utils@1.7.9
23
+ - @modern-js/server-utils@1.2.11
24
+
3
25
  ## 1.4.21
4
26
 
5
27
  ### Patch Changes
@@ -1,9 +1,18 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+
1
5
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
6
 
3
7
  import path from 'path';
4
8
  import { fs, chokidar } from '@modern-js/utils';
5
9
  import { DependencyTree } from "./dependency-tree";
6
10
  import { StatsCache } from "./stats-cache";
11
+ export const defaultWatchOptions = {
12
+ // 初始化的时候不触发 add、addDir 事件
13
+ ignoreInitial: true,
14
+ ignored: /api\/typings\/.*/
15
+ };
7
16
  export const getWatchedFiles = watcher => {
8
17
  const watched = watcher.getWatched();
9
18
  const files = [];
@@ -14,6 +23,24 @@ export const getWatchedFiles = watcher => {
14
23
  });
15
24
  return files;
16
25
  };
26
+ export const mergeWatchOptions = options => {
27
+ const watchOptions = _objectSpread({}, options);
28
+
29
+ if (watchOptions) {
30
+ const {
31
+ ignored
32
+ } = watchOptions;
33
+ const finalIgnored = ignored ? [defaultWatchOptions.ignored, ...(Array.isArray(ignored) ? ignored : [ignored])] : ignored;
34
+
35
+ if (finalIgnored) {
36
+ watchOptions.ignored = finalIgnored;
37
+ }
38
+ }
39
+
40
+ const finalWatchOptions = _objectSpread(_objectSpread({}, defaultWatchOptions), watchOptions);
41
+
42
+ return finalWatchOptions;
43
+ };
17
44
  export default class Watcher {
18
45
  constructor() {
19
46
  _defineProperty(this, "dependencyTree", null);
@@ -32,18 +59,18 @@ export default class Watcher {
32
59
  watcher.on('change', changed => {
33
60
  if (!fs.existsSync(changed) || cache.isDiff(changed)) {
34
61
  cache.refresh(changed);
35
- callback(changed);
62
+ callback(changed, 'change');
36
63
  }
37
64
  });
38
65
  watcher.on('add', changed => {
39
66
  if (!cache.has(changed)) {
40
67
  cache.add([changed]);
41
- callback(changed);
68
+ callback(changed, 'add');
42
69
  }
43
70
  });
44
71
  watcher.on('unlink', changed => {
45
72
  cache.del(changed);
46
- callback(changed);
73
+ callback(changed, 'unlink');
47
74
  });
48
75
  this.watcher = watcher;
49
76
  }
@@ -15,7 +15,7 @@ import { createMockHandler } from "../dev-tools/mock";
15
15
  import SocketServer from "../dev-tools/socket-server";
16
16
  import DevServerPlugin from "../dev-tools/dev-server-plugin";
17
17
  import { enableRegister } from "../dev-tools/babel/register";
18
- import Watcher from "../dev-tools/watcher";
18
+ import Watcher, { mergeWatchOptions } from "../dev-tools/watcher";
19
19
  export class ModernDevServer extends ModernServer {
20
20
  constructor(options) {
21
21
  super(options); // dev server should work in pwd
@@ -195,7 +195,8 @@ export class ModernDevServer extends ModernServer {
195
195
  }
196
196
 
197
197
  onServerChange({
198
- filepath
198
+ filepath,
199
+ event
199
200
  }) {
200
201
  const {
201
202
  pwd
@@ -212,9 +213,16 @@ export class ModernDevServer extends ModernServer {
212
213
  });
213
214
  } else {
214
215
  try {
215
- super.onServerChange({
216
- filepath
217
- });
216
+ const success = this.runner.onApiChange([{
217
+ filename: filepath,
218
+ event
219
+ }]);
220
+
221
+ if (!success) {
222
+ super.onServerChange({
223
+ filepath
224
+ });
225
+ }
218
226
  } catch (e) {
219
227
  this.logger.error(e);
220
228
  }
@@ -349,27 +357,17 @@ export class ModernDevServer extends ModernServer {
349
357
  mock
350
358
  } = AGGRED_DIR;
351
359
  const defaultWatched = [`${mock}/**/*`, `${SERVER_DIR}/**/*`, `${API_DIR}/**`, `${SHARED_DIR}/**/*`];
352
- const defaultWatchOptions = {
353
- // 初始化的时候不触发 add、addDir 事件
354
- ignoreInitial: true,
355
- ignored: /api\/typings\/.*/
356
- };
357
- const {
358
- watchOptions
359
- } = this.conf.server;
360
-
361
- const finalWatchOptions = _objectSpread(_objectSpread({}, defaultWatchOptions), watchOptions);
362
-
360
+ const watchOptions = mergeWatchOptions(this.conf.server.watchOptions);
363
361
  const defaultWatchedPaths = defaultWatched.map(p => path.normalize(path.join(pwd, p)));
364
- console.log('finalWatchOptions', finalWatchOptions);
365
362
  const watcher = new Watcher();
366
363
  watcher.createDepTree(); // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
367
364
 
368
- watcher.listen(defaultWatchedPaths, finalWatchOptions, filepath => {
365
+ watcher.listen(defaultWatchedPaths, watchOptions, (filepath, event) => {
369
366
  watcher.updateDepTree();
370
367
  watcher.cleanDepCache(filepath);
371
368
  this.onServerChange({
372
- filepath
369
+ filepath,
370
+ event
373
371
  });
374
372
  });
375
373
  this.watcher = watcher;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getWatchedFiles = exports.default = void 0;
6
+ exports.mergeWatchOptions = exports.getWatchedFiles = exports.defaultWatchOptions = exports.default = void 0;
7
7
 
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
 
@@ -15,8 +15,19 @@ var _statsCache = require("./stats-cache");
15
15
 
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
+
20
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
+
18
22
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
23
 
24
+ const defaultWatchOptions = {
25
+ // 初始化的时候不触发 add、addDir 事件
26
+ ignoreInitial: true,
27
+ ignored: /api\/typings\/.*/
28
+ };
29
+ exports.defaultWatchOptions = defaultWatchOptions;
30
+
20
31
  const getWatchedFiles = watcher => {
21
32
  const watched = watcher.getWatched();
22
33
  const files = [];
@@ -30,6 +41,27 @@ const getWatchedFiles = watcher => {
30
41
 
31
42
  exports.getWatchedFiles = getWatchedFiles;
32
43
 
44
+ const mergeWatchOptions = options => {
45
+ const watchOptions = _objectSpread({}, options);
46
+
47
+ if (watchOptions) {
48
+ const {
49
+ ignored
50
+ } = watchOptions;
51
+ const finalIgnored = ignored ? [defaultWatchOptions.ignored, ...(Array.isArray(ignored) ? ignored : [ignored])] : ignored;
52
+
53
+ if (finalIgnored) {
54
+ watchOptions.ignored = finalIgnored;
55
+ }
56
+ }
57
+
58
+ const finalWatchOptions = _objectSpread(_objectSpread({}, defaultWatchOptions), watchOptions);
59
+
60
+ return finalWatchOptions;
61
+ };
62
+
63
+ exports.mergeWatchOptions = mergeWatchOptions;
64
+
33
65
  class Watcher {
34
66
  constructor() {
35
67
  _defineProperty(this, "dependencyTree", null);
@@ -50,18 +82,18 @@ class Watcher {
50
82
  watcher.on('change', changed => {
51
83
  if (!_utils.fs.existsSync(changed) || cache.isDiff(changed)) {
52
84
  cache.refresh(changed);
53
- callback(changed);
85
+ callback(changed, 'change');
54
86
  }
55
87
  });
56
88
  watcher.on('add', changed => {
57
89
  if (!cache.has(changed)) {
58
90
  cache.add([changed]);
59
- callback(changed);
91
+ callback(changed, 'add');
60
92
  }
61
93
  });
62
94
  watcher.on('unlink', changed => {
63
95
  cache.del(changed);
64
- callback(changed);
96
+ callback(changed, 'unlink');
65
97
  });
66
98
  this.watcher = watcher;
67
99
  }
@@ -27,7 +27,11 @@ var _devServerPlugin = _interopRequireDefault(require("../dev-tools/dev-server-p
27
27
 
28
28
  var _register = require("../dev-tools/babel/register");
29
29
 
30
- var _watcher = _interopRequireDefault(require("../dev-tools/watcher"));
30
+ var _watcher = _interopRequireWildcard(require("../dev-tools/watcher"));
31
+
32
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
+
34
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
35
 
32
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
37
 
@@ -216,7 +220,8 @@ class ModernDevServer extends _prodServer.ModernServer {
216
220
  }
217
221
 
218
222
  onServerChange({
219
- filepath
223
+ filepath,
224
+ event
220
225
  }) {
221
226
  const {
222
227
  pwd
@@ -235,9 +240,16 @@ class ModernDevServer extends _prodServer.ModernServer {
235
240
  });
236
241
  } else {
237
242
  try {
238
- super.onServerChange({
239
- filepath
240
- });
243
+ const success = this.runner.onApiChange([{
244
+ filename: filepath,
245
+ event
246
+ }]);
247
+
248
+ if (!success) {
249
+ super.onServerChange({
250
+ filepath
251
+ });
252
+ }
241
253
  } catch (e) {
242
254
  this.logger.error(e);
243
255
  }
@@ -372,27 +384,17 @@ class ModernDevServer extends _prodServer.ModernServer {
372
384
  mock
373
385
  } = _prodServer.AGGRED_DIR;
374
386
  const defaultWatched = [`${mock}/**/*`, `${_utils.SERVER_DIR}/**/*`, `${_utils.API_DIR}/**`, `${_utils.SHARED_DIR}/**/*`];
375
- const defaultWatchOptions = {
376
- // 初始化的时候不触发 add、addDir 事件
377
- ignoreInitial: true,
378
- ignored: /api\/typings\/.*/
379
- };
380
- const {
381
- watchOptions
382
- } = this.conf.server;
383
-
384
- const finalWatchOptions = _objectSpread(_objectSpread({}, defaultWatchOptions), watchOptions);
385
-
387
+ const watchOptions = (0, _watcher.mergeWatchOptions)(this.conf.server.watchOptions);
386
388
  const defaultWatchedPaths = defaultWatched.map(p => _path.default.normalize(_path.default.join(pwd, p)));
387
- console.log('finalWatchOptions', finalWatchOptions);
388
389
  const watcher = new _watcher.default();
389
390
  watcher.createDepTree(); // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
390
391
 
391
- watcher.listen(defaultWatchedPaths, finalWatchOptions, filepath => {
392
+ watcher.listen(defaultWatchedPaths, watchOptions, (filepath, event) => {
392
393
  watcher.updateDepTree();
393
394
  watcher.cleanDepCache(filepath);
394
395
  this.onServerChange({
395
- filepath
396
+ filepath,
397
+ event
396
398
  });
397
399
  });
398
400
  this.watcher = watcher;
@@ -1,9 +1,30 @@
1
1
  import { FSWatcher, WatchOptions } from '@modern-js/utils';
2
+ export declare const defaultWatchOptions: {
3
+ ignoreInitial: boolean;
4
+ ignored: RegExp;
5
+ };
2
6
  export declare const getWatchedFiles: (watcher: FSWatcher) => string[];
7
+ export declare const mergeWatchOptions: (options?: WatchOptions) => {
8
+ persistent?: boolean | undefined;
9
+ ignored: import("@modern-js/utils/compiled/chokidar/anymatch").Matcher;
10
+ ignoreInitial: boolean;
11
+ followSymlinks?: boolean | undefined;
12
+ cwd?: string | undefined;
13
+ disableGlobbing?: boolean | undefined;
14
+ usePolling?: boolean | undefined;
15
+ useFsEvents?: boolean | undefined;
16
+ alwaysStat?: boolean | undefined;
17
+ depth?: number | undefined;
18
+ interval?: number | undefined;
19
+ binaryInterval?: number | undefined;
20
+ ignorePermissionErrors?: boolean | undefined;
21
+ atomic?: number | boolean | undefined;
22
+ awaitWriteFinish?: boolean | import("@modern-js/utils/compiled/chokidar").AwaitWriteFinishOptions | undefined;
23
+ };
3
24
  export default class Watcher {
4
25
  private dependencyTree;
5
26
  private watcher;
6
- listen(files: string[], options: WatchOptions, callback: (changed: string) => void): void;
27
+ listen(files: string[], options: WatchOptions, callback: (changed: string, event: 'add' | 'change' | 'unlink') => void): void;
7
28
  createDepTree(): void;
8
29
  updateDepTree(): void;
9
30
  cleanDepCache(filepath: string): void;
@@ -19,9 +19,11 @@ export declare class ModernDevServer extends ModernServer {
19
19
  createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<http.Server | import("https").Server>;
20
20
  protected warmupSSRBundle(): void;
21
21
  protected onServerChange({
22
- filepath
22
+ filepath,
23
+ event
23
24
  }: {
24
25
  filepath: string;
26
+ event: 'add' | 'unlink' | 'change';
25
27
  }): void;
26
28
  private setupCompiler;
27
29
  private setupDevServerPlugin;
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "1.4.22-beta.1",
14
+ "version": "1.5.1-beta.0",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/js/node/index.js",
@@ -31,19 +31,19 @@
31
31
  "@babel/core": "^7.18.0",
32
32
  "@babel/register": "^7.17.7",
33
33
  "@modern-js/hmr-client": "^1.2.8",
34
- "@modern-js/prod-server": "^1.1.8",
34
+ "@modern-js/prod-server": "^1.1.9",
35
35
  "@modern-js/server-utils": "^1.2.11",
36
- "@modern-js/webpack": "^1.11.1",
37
- "@modern-js/utils": "^1.7.8",
36
+ "@modern-js/webpack": "^1.11.5",
37
+ "@modern-js/utils": "^1.7.12",
38
38
  "devcert": "^1.2.2",
39
39
  "minimatch": "^3.0.4",
40
40
  "path-to-regexp": "^6.2.0",
41
41
  "ws": "^8.2.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@modern-js/core": "1.12.2-beta.0",
45
- "@modern-js/server-core": "1.3.5",
46
- "@modern-js/types": "1.5.4",
44
+ "@modern-js/core": "1.12.4",
45
+ "@modern-js/server-core": "1.4.0",
46
+ "@modern-js/types": "1.5.6",
47
47
  "@scripts/build": "0.0.0",
48
48
  "@scripts/jest-config": "0.0.0",
49
49
  "@types/jest": "^27",