@modern-js/utils 1.3.4 → 1.3.7

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,23 @@
1
1
  # @modern-js/utils
2
2
 
3
+ ## 1.3.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 132f7b53: feat: move config declarations to @modern-js/core
8
+
9
+ ## 1.3.6
10
+
11
+ ### Patch Changes
12
+
13
+ - c2046f37: fix: plugin unbundle schema define
14
+
15
+ ## 1.3.5
16
+
17
+ ### Patch Changes
18
+
19
+ - 5bf5868d: fix: isObject should return false when input is null
20
+
3
21
  ## 1.3.4
4
22
 
5
23
  ### Patch Changes
@@ -233,12 +233,7 @@ export const PLUGIN_SCHEMAS = {
233
233
  }
234
234
  }],
235
235
  '@modern-js/plugin-unbundle': [{
236
- target: 'source.disableAutoImportStyle',
237
- schema: {
238
- type: 'boolean'
239
- }
240
- }, {
241
- target: 'server.https',
236
+ target: 'output.disableAutoImportStyle',
242
237
  schema: {
243
238
  type: 'boolean'
244
239
  }
@@ -5,23 +5,20 @@ export function isUndefined(obj) {
5
5
  return typeof obj === 'undefined';
6
6
  }
7
7
  export function isArray(obj) {
8
- return Object.prototype.toString.call(obj) === '[object Array]';
8
+ return Array.isArray(obj);
9
9
  } // eslint-disable-next-line @typescript-eslint/ban-types
10
10
 
11
11
  export function isFunction(func) {
12
12
  return typeof func === 'function';
13
- } // eslint-disable-next-line @typescript-eslint/ban-types
14
-
13
+ }
15
14
  export function isObject(obj) {
16
- return typeof obj === 'object';
15
+ return obj !== null && typeof obj === 'object';
17
16
  }
18
17
  export function isPlainObject(obj) {
19
- return obj && typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]';
18
+ return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]';
20
19
  }
21
20
  export function isPromise(obj) {
22
- /* eslint-disable promise/prefer-await-to-then */
23
21
  return Boolean(obj) && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
24
- /* eslint-enable promise/prefer-await-to-then */
25
22
  }
26
23
  export function isRegExp(obj) {
27
24
  return Object.prototype.toString.call(obj) === '[object RegExp]';
@@ -252,12 +252,7 @@ const PLUGIN_SCHEMAS = {
252
252
  }
253
253
  }],
254
254
  '@modern-js/plugin-unbundle': [{
255
- target: 'source.disableAutoImportStyle',
256
- schema: {
257
- type: 'boolean'
258
- }
259
- }, {
260
- target: 'server.https',
255
+ target: 'output.disableAutoImportStyle',
261
256
  schema: {
262
257
  type: 'boolean'
263
258
  }
@@ -21,27 +21,24 @@ function isUndefined(obj) {
21
21
  }
22
22
 
23
23
  function isArray(obj) {
24
- return Object.prototype.toString.call(obj) === '[object Array]';
24
+ return Array.isArray(obj);
25
25
  } // eslint-disable-next-line @typescript-eslint/ban-types
26
26
 
27
27
 
28
28
  function isFunction(func) {
29
29
  return typeof func === 'function';
30
- } // eslint-disable-next-line @typescript-eslint/ban-types
31
-
30
+ }
32
31
 
33
32
  function isObject(obj) {
34
- return typeof obj === 'object';
33
+ return obj !== null && typeof obj === 'object';
35
34
  }
36
35
 
37
36
  function isPlainObject(obj) {
38
- return obj && typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]';
37
+ return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]';
39
38
  }
40
39
 
41
40
  function isPromise(obj) {
42
- /* eslint-disable promise/prefer-await-to-then */
43
41
  return Boolean(obj) && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
44
- /* eslint-enable promise/prefer-await-to-then */
45
42
  }
46
43
 
47
44
  function isRegExp(obj) {
@@ -233,12 +233,7 @@ export var PLUGIN_SCHEMAS = {
233
233
  }
234
234
  }],
235
235
  '@modern-js/plugin-unbundle': [{
236
- target: 'source.disableAutoImportStyle',
237
- schema: {
238
- type: 'boolean'
239
- }
240
- }, {
241
- target: 'server.https',
236
+ target: 'output.disableAutoImportStyle',
242
237
  schema: {
243
238
  type: 'boolean'
244
239
  }
@@ -7,23 +7,20 @@ export function isUndefined(obj) {
7
7
  return typeof obj === 'undefined';
8
8
  }
9
9
  export function isArray(obj) {
10
- return Object.prototype.toString.call(obj) === '[object Array]';
10
+ return Array.isArray(obj);
11
11
  } // eslint-disable-next-line @typescript-eslint/ban-types
12
12
 
13
13
  export function isFunction(func) {
14
14
  return typeof func === 'function';
15
- } // eslint-disable-next-line @typescript-eslint/ban-types
16
-
15
+ }
17
16
  export function isObject(obj) {
18
- return _typeof(obj) === 'object';
17
+ return obj !== null && _typeof(obj) === 'object';
19
18
  }
20
19
  export function isPlainObject(obj) {
21
- return obj && _typeof(obj) === 'object' && Object.prototype.toString.call(obj) === '[object Object]';
20
+ return isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]';
22
21
  }
23
22
  export function isPromise(obj) {
24
- /* eslint-disable promise/prefer-await-to-then */
25
23
  return Boolean(obj) && (_typeof(obj) === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
26
- /* eslint-enable promise/prefer-await-to-then */
27
24
  }
28
25
  export function isRegExp(obj) {
29
26
  return Object.prototype.toString.call(obj) === '[object RegExp]';
@@ -6,11 +6,11 @@
6
6
  * https://github.com/facebook/create-react-app/blob/master/LICENSE
7
7
  */
8
8
  import { StatsCompilation } from 'webpack';
9
- import { ProxyDetail, ProxyOptions } from '@modern-js/types';
9
+ import type { ProxyDetail, BffProxyOptions } from '@modern-js/types';
10
10
  declare function formatWebpackMessages(json: StatsCompilation): {
11
11
  errors: string[];
12
12
  warnings: string[];
13
13
  };
14
14
  export { formatWebpackMessages };
15
- declare function formatProxyOptions(proxyOptions: ProxyOptions): ProxyDetail[];
15
+ declare function formatProxyOptions(proxyOptions: BffProxyOptions): ProxyDetail[];
16
16
  export { formatProxyOptions };
@@ -1,8 +1,8 @@
1
1
  export declare function isString(str: any): str is string;
2
2
  export declare function isUndefined(obj: any): obj is undefined;
3
- export declare function isArray(obj: any): obj is any[];
3
+ export declare function isArray(obj: unknown): obj is any[];
4
4
  export declare function isFunction(func: any): func is Function;
5
- export declare function isObject(obj: any): obj is object;
6
- export declare function isPlainObject(obj: any): obj is Record<string, any>;
5
+ export declare function isObject(obj: unknown): obj is Record<string, any>;
6
+ export declare function isPlainObject(obj: unknown): obj is Record<string, any>;
7
7
  export declare function isPromise(obj: any): obj is Promise<any>;
8
8
  export declare function isRegExp(obj: any): obj is RegExp;
package/jest.config.js CHANGED
@@ -2,7 +2,6 @@ const sharedConfig = require('@scripts/jest-config');
2
2
 
3
3
  /** @type {import('@jest/types').Config.InitialOptions} */
4
4
  module.exports = {
5
- // eslint-disable-next-line node/no-unsupported-features/es-syntax
6
5
  ...sharedConfig,
7
6
  rootDir: __dirname,
8
7
  modulePathIgnorePatterns: [
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "1.3.4",
14
+ "version": "1.3.7",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/js/node/index.js",
@@ -52,6 +52,7 @@
52
52
  "chalk": "^4.1.2",
53
53
  "chokidar": "^3.5.2",
54
54
  "debug": "^4.3.2",
55
+ "execa": "5",
55
56
  "filesize": "^7.0.0",
56
57
  "fs-extra": "^10.0.0",
57
58
  "glob": "^7.1.7",
@@ -60,23 +61,22 @@
60
61
  "pkg-up": "^3.1.0",
61
62
  "recursive-readdir": "^2.2.2",
62
63
  "strip-ansi": "6.0.0",
64
+ "typescript": "^4",
63
65
  "upath": "^2.0.1",
64
- "yaml": "^1.10.2",
65
- "execa": "5",
66
- "typescript": "^4"
66
+ "yaml": "^1.10.2"
67
67
  },
68
68
  "devDependencies": {
69
+ "@modern-js/types": "^1.3.6",
70
+ "@scripts/build": "0.0.0",
71
+ "@scripts/jest-config": "0.0.0",
69
72
  "@types/debug": "^4.1.7",
70
73
  "@types/fs-extra": "^9.0.12",
71
74
  "@types/glob": "^7.1.4",
72
75
  "@types/jest": "^26",
73
76
  "@types/node": "^14",
74
77
  "@types/recursive-readdir": "^2.2.0",
75
- "webpack": "^5.54.0",
76
- "@scripts/build": "0.0.0",
77
78
  "jest": "^27",
78
- "@scripts/jest-config": "0.0.0",
79
- "@modern-js/types": "^1.3.4"
79
+ "webpack": "^5.71.0"
80
80
  },
81
81
  "sideEffects": false,
82
82
  "publishConfig": {
@@ -0,0 +1,27 @@
1
+ import { isEmpty, isFastRefresh } from '../src/is';
2
+
3
+ describe('validate', () => {
4
+ it('should validate empty object correctly', () => {
5
+ expect(isEmpty({})).toBeTruthy();
6
+ expect(isEmpty({ foo: 'bar' })).toBeFalsy();
7
+ });
8
+
9
+ it('should validate fast refresh correctly', () => {
10
+ const { NODE_ENV, FAST_REFRESH } = process.env;
11
+
12
+ process.env.NODE_ENV = 'development';
13
+ process.env.FAST_REFRESH = 'true';
14
+ expect(isFastRefresh()).toBeTruthy();
15
+
16
+ process.env.NODE_ENV = 'production';
17
+ process.env.FAST_REFRESH = 'true';
18
+ expect(isFastRefresh()).toBeFalsy();
19
+
20
+ process.env.NODE_ENV = 'development';
21
+ process.env.FAST_REFRESH = 'false';
22
+ expect(isFastRefresh()).toBeFalsy();
23
+
24
+ process.env.NODE_ENV = NODE_ENV;
25
+ process.env.FAST_REFRESH = FAST_REFRESH;
26
+ });
27
+ });
@@ -0,0 +1,19 @@
1
+ import { isNodeJS, isBrowser } from '../src/is/platform';
2
+
3
+ describe('validate platform', () => {
4
+ it('should validate Node.js correctly', () => {
5
+ expect(isNodeJS()).toBeTruthy();
6
+ });
7
+
8
+ it('should validate browser correctly', () => {
9
+ const windowSpy = jest.spyOn(window, 'window', 'get');
10
+
11
+ windowSpy.mockImplementation((): any => undefined);
12
+ expect(isBrowser()).toBeFalsy();
13
+
14
+ windowSpy.mockImplementation((): any => global);
15
+ expect(isBrowser()).toBeTruthy();
16
+
17
+ windowSpy.mockRestore();
18
+ });
19
+ });
@@ -1,4 +1,12 @@
1
- import { isString, isUndefined } from '../src/is/type';
1
+ import {
2
+ isArray,
3
+ isObject,
4
+ isString,
5
+ isRegExp,
6
+ isPromise,
7
+ isUndefined,
8
+ isPlainObject,
9
+ } from '../src/is/type';
2
10
 
3
11
  describe('validate type', () => {
4
12
  it('should validate string correctly', () => {
@@ -8,10 +16,70 @@ describe('validate type', () => {
8
16
  expect(isString(123)).toBeFalsy();
9
17
  });
10
18
 
11
- it('should validate undeinfed correctly', () => {
19
+ it('should validate undefined correctly', () => {
12
20
  expect(isUndefined(undefined)).toBeTruthy();
13
21
  expect(isUndefined(null)).toBeFalsy();
14
22
  expect(isUndefined('')).toBeFalsy();
15
23
  expect(isUndefined(123)).toBeFalsy();
16
24
  });
25
+
26
+ it('should validate array correctly', () => {
27
+ expect(isArray(undefined)).toBeFalsy();
28
+ expect(isArray(null)).toBeFalsy();
29
+ expect(isArray('')).toBeFalsy();
30
+ expect(isArray(123)).toBeFalsy();
31
+ expect(isArray({})).toBeFalsy();
32
+ expect(isArray([])).toBeTruthy();
33
+ });
34
+
35
+ it('should validate object correctly', () => {
36
+ expect(isObject(1)).toBeFalsy();
37
+ expect(isObject('1')).toBeFalsy();
38
+ expect(isObject(undefined)).toBeFalsy();
39
+ expect(isObject(null)).toBeFalsy();
40
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
41
+ expect(isObject(() => {})).toBeFalsy();
42
+ expect(isObject({})).toBeTruthy();
43
+ expect(isObject([])).toBeTruthy();
44
+ expect(isObject(/foo/)).toBeTruthy();
45
+ });
46
+
47
+ it('should validate plain object correctly', () => {
48
+ expect(isPlainObject(1)).toBeFalsy();
49
+ expect(isPlainObject('1')).toBeFalsy();
50
+ expect(isPlainObject(undefined)).toBeFalsy();
51
+ expect(isPlainObject(null)).toBeFalsy();
52
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
53
+ expect(isPlainObject(() => {})).toBeFalsy();
54
+ expect(isPlainObject({})).toBeTruthy();
55
+ expect(isPlainObject([])).toBeFalsy();
56
+ expect(isPlainObject(/foo/)).toBeFalsy();
57
+ });
58
+
59
+ it('should validate RegExp correctly', () => {
60
+ expect(isRegExp(1)).toBeFalsy();
61
+ expect(isRegExp('1')).toBeFalsy();
62
+ expect(isRegExp(undefined)).toBeFalsy();
63
+ expect(isRegExp(null)).toBeFalsy();
64
+ expect(isRegExp({})).toBeFalsy();
65
+ expect(isRegExp([])).toBeFalsy();
66
+ expect(isRegExp(/foo/)).toBeTruthy();
67
+ });
68
+
69
+ it('should validate Promise correctly', () => {
70
+ expect(isPromise(1)).toBeFalsy();
71
+ expect(isPromise('1')).toBeFalsy();
72
+ expect(isPromise(undefined)).toBeFalsy();
73
+ expect(isPromise(null)).toBeFalsy();
74
+ expect(isPromise({})).toBeFalsy();
75
+ expect(isPromise([])).toBeFalsy();
76
+ expect(isPromise(/foo/)).toBeFalsy();
77
+ expect(
78
+ isPromise(
79
+ new Promise<void>(resolve => {
80
+ resolve();
81
+ }),
82
+ ),
83
+ ).toBeTruthy();
84
+ });
17
85
  });