@aiszlab/relax 1.3.15 → 1.3.16

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.
@@ -1,12 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var contains = function contains(root, node) {
3
+ var contains = function contains(root) {
4
+ var node = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
4
5
  if (!root) {
5
6
  return false;
6
7
  }
7
8
  // Use native if support
8
- if (root.contains) {
9
- return root.contains(node !== null && node !== void 0 ? node : null);
9
+ if (!!root.contains) {
10
+ return root.contains(node);
10
11
  }
11
12
  // `document.contains` not support with IE11
12
13
  var _node = node;
@@ -13,4 +13,4 @@ export type Containable = {
13
13
  */
14
14
  contains?: (node: Nullable<Node>) => boolean;
15
15
  };
16
- export declare const contains: (root: Voidable<Containable>, node: Voidable<Node>) => boolean;
16
+ export declare const contains: (root: Voidable<Containable>, node?: Voidable<Node>) => boolean;
@@ -1,10 +1,11 @@
1
- var contains = function contains(root, node) {
1
+ var contains = function contains(root) {
2
+ var node = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
2
3
  if (!root) {
3
4
  return false;
4
5
  }
5
6
  // Use native if support
6
- if (root.contains) {
7
- return root.contains(node !== null && node !== void 0 ? node : null);
7
+ if (!!root.contains) {
8
+ return root.contains(node);
8
9
  }
9
10
  // `document.contains` not support with IE11
10
11
  var _node = node;
@@ -1,5 +1,5 @@
1
1
  import { type MutableRefObject } from "react";
2
- import { type Containable } from "@aiszlab/relax/dom";
2
+ import { type Containable } from "../dom";
3
3
  import type { Nullable, Arrayable } from "@aiszlab/relax/types";
4
4
  /**
5
5
  * @description
@@ -7,10 +7,10 @@ var useRefs = function useRefs() {
7
7
  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
8
8
  refs[_key] = arguments[_key];
9
9
  }
10
- return useEvent.useEvent(function (_reference) {
10
+ return useEvent.useEvent(function (reference) {
11
11
  refs.forEach(function (ref) {
12
12
  if (!ref) return;
13
- mountRef.mountRef(ref, _reference);
13
+ mountRef.mountRef(ref, reference);
14
14
  });
15
15
  });
16
16
  };
@@ -1,3 +1,3 @@
1
1
  import type { Nullable, Voidable } from "@aiszlab/relax/types";
2
- import { type Refable } from "@aiszlab/relax/react";
3
- export declare const useRefs: <T>(...refs: Voidable<Refable<Nullable<T>>>[]) => (_reference: T) => void;
2
+ import { type Refable } from "../react";
3
+ export declare const useRefs: <T>(...refs: Voidable<Refable<Nullable<T>>>[]) => (reference: T) => void;
@@ -5,10 +5,10 @@ var useRefs = function useRefs() {
5
5
  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
6
6
  refs[_key] = arguments[_key];
7
7
  }
8
- return useEvent(function (_reference) {
8
+ return useEvent(function (reference) {
9
9
  refs.forEach(function (ref) {
10
10
  if (!ref) return;
11
- mountRef(ref, _reference);
11
+ mountRef(ref, reference);
12
12
  });
13
13
  });
14
14
  };
@@ -1,5 +1,5 @@
1
1
  import { type Key } from "react";
2
- import { type Orientation } from "@aiszlab/relax/dom";
2
+ import { type Orientation } from "../dom";
3
3
  interface UseScrollableProps {
4
4
  orientation?: Orientation;
5
5
  }
package/dist/index.cjs CHANGED
@@ -67,6 +67,7 @@ var replace = require('./utils/replace.cjs');
67
67
  var clsx = require('./utils/clsx.cjs');
68
68
  var first = require('./utils/first.cjs');
69
69
  var last = require('./utils/last.cjs');
70
+ var merge = require('./utils/merge.cjs');
70
71
 
71
72
 
72
73
 
@@ -138,3 +139,4 @@ exports.replace = replace.replace;
138
139
  exports.clsx = clsx.clsx;
139
140
  exports.first = first.first;
140
141
  exports.last = last.last;
142
+ exports.merge = merge.merge;
package/dist/index.d.ts CHANGED
@@ -77,3 +77,4 @@ export { replace } from "./utils/replace";
77
77
  export { clsx } from "./utils/clsx";
78
78
  export { first } from "./utils/first";
79
79
  export { last } from "./utils/last";
80
+ export { merge } from "./utils/merge";
package/dist/index.mjs CHANGED
@@ -65,3 +65,4 @@ export { replace } from './utils/replace.mjs';
65
65
  export { clsx } from './utils/clsx.mjs';
66
66
  export { first } from './utils/first.mjs';
67
67
  export { last } from './utils/last.mjs';
68
+ export { merge } from './utils/merge.mjs';
@@ -21,7 +21,7 @@ var isEmpty = function isEmpty(value) {
21
21
  if (isObject.isObject(value)) {
22
22
  return Object.keys(value).length === 0;
23
23
  }
24
- return !!value;
24
+ return !value;
25
25
  };
26
26
 
27
27
  exports.isEmpty = isEmpty;
@@ -19,7 +19,7 @@ var isEmpty = function isEmpty(value) {
19
19
  if (isObject(value)) {
20
20
  return Object.keys(value).length === 0;
21
21
  }
22
- return !!value;
22
+ return !value;
23
23
  };
24
24
 
25
25
  export { isEmpty };
@@ -2,7 +2,8 @@
2
2
 
3
3
  /**
4
4
  * @description
5
- * string/number/... is primitive type
5
+ * primitive type
6
+ * string | number | symbol | boolean | null | undefined
6
7
  */
7
8
  var isPrimitive = function isPrimitive(value) {
8
9
  return value !== Object(value);
@@ -1,5 +1,7 @@
1
+ export type Primitive = string | number | symbol | boolean | null | undefined;
1
2
  /**
2
3
  * @description
3
- * string/number/... is primitive type
4
+ * primitive type
5
+ * string | number | symbol | boolean | null | undefined
4
6
  */
5
- export declare const isPrimitive: (value: unknown) => boolean;
7
+ export declare const isPrimitive: <T extends Primitive>(value: unknown) => value is T;
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @description
3
- * string/number/... is primitive type
3
+ * primitive type
4
+ * string | number | symbol | boolean | null | undefined
4
5
  */
5
6
  var isPrimitive = function isPrimitive(value) {
6
7
  return value !== Object(value);
@@ -2,18 +2,18 @@
2
2
 
3
3
  var isFunction = require('../is/is-function.cjs');
4
4
 
5
- var mountRef = function mountRef(ref, trigger) {
6
- if (isFunction.isFunction(ref)) {
7
- ref(trigger);
5
+ var mountRef = function mountRef(refable, reference) {
6
+ if (isFunction.isFunction(refable)) {
7
+ refable(reference);
8
8
  return;
9
9
  }
10
10
  // in deprecated react, class component can use string ref
11
11
  // but there are many problems, in relax, we just make it not work
12
12
  // issue for react: https://github.com/facebook/react/pull/8333#issuecomment-271648615
13
- if (typeof ref === "string") {
13
+ if (typeof refable === "string") {
14
14
  return;
15
15
  }
16
- ref.current = trigger;
16
+ refable.current = reference;
17
17
  };
18
18
 
19
19
  exports.mountRef = mountRef;
@@ -1,3 +1,3 @@
1
1
  import type { MutableRefObject, RefCallback } from "react";
2
2
  export type Refable<T> = RefCallback<T> | MutableRefObject<T> | string;
3
- export declare const mountRef: <T>(ref: Refable<T>, trigger: T) => void;
3
+ export declare const mountRef: <T>(refable: Refable<T>, reference: T) => void;
@@ -1,17 +1,17 @@
1
1
  import { isFunction } from '../is/is-function.mjs';
2
2
 
3
- var mountRef = function mountRef(ref, trigger) {
4
- if (isFunction(ref)) {
5
- ref(trigger);
3
+ var mountRef = function mountRef(refable, reference) {
4
+ if (isFunction(refable)) {
5
+ refable(reference);
6
6
  return;
7
7
  }
8
8
  // in deprecated react, class component can use string ref
9
9
  // but there are many problems, in relax, we just make it not work
10
10
  // issue for react: https://github.com/facebook/react/pull/8333#issuecomment-271648615
11
- if (typeof ref === "string") {
11
+ if (typeof refable === "string") {
12
12
  return;
13
13
  }
14
- ref.current = trigger;
14
+ refable.current = reference;
15
15
  };
16
16
 
17
17
  export { mountRef };
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
3
4
  var isArray = require('../is/is-array.cjs');
4
5
  var isPrimitive = require('../is/is-primitive.cjs');
5
6
 
@@ -8,12 +9,38 @@ var isPrimitive = require('../is/is-primitive.cjs');
8
9
  * in develop, there are many cases to clone a string/number/object/array
9
10
  * this util is planning to resolve it
10
11
  */
11
- var clone = function clone(value) {
12
+ var _clone = function clone(value) {
12
13
  if (isPrimitive.isPrimitive(value)) return value;
13
- if (value instanceof Map) return new Map(value);
14
- if (value instanceof Set) return new Set(value);
15
- if (isArray.isArray(value)) return Array.from(value);
16
- return Object(value);
14
+ if (value instanceof Map) {
15
+ // @ts-ignore
16
+ return new Map(Array.from(value.entries()).map(function (_ref) {
17
+ var _ref2 = _slicedToArray(_ref, 2),
18
+ _key = _ref2[0],
19
+ _value = _ref2[1];
20
+ return [_key, _clone(_value)];
21
+ }));
22
+ }
23
+ if (value instanceof Set) {
24
+ // @ts-ignore
25
+ return new Set(Array.from(value.values()).map(function (_value) {
26
+ return _clone(_value);
27
+ }));
28
+ }
29
+ if (isArray.isArray(value)) {
30
+ // @ts-ignore
31
+ return value.map(function (_value) {
32
+ return _clone(_value);
33
+ });
34
+ }
35
+ // @ts-ignore
36
+ return Object.entries(value).reduce(function (cloned, _ref3) {
37
+ var _ref4 = _slicedToArray(_ref3, 2),
38
+ _key = _ref4[0],
39
+ _value = _ref4[1];
40
+ // @ts-ignore
41
+ cloned[_key] = _clone(_value);
42
+ return cloned;
43
+ }, {});
17
44
  };
18
45
 
19
- exports.clone = clone;
46
+ exports.clone = _clone;
@@ -3,4 +3,4 @@
3
3
  * in develop, there are many cases to clone a string/number/object/array
4
4
  * this util is planning to resolve it
5
5
  */
6
- export declare const clone: (value: unknown) => any;
6
+ export declare const clone: <T>(value: T) => T;
@@ -1,3 +1,4 @@
1
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
1
2
  import { isArray } from '../is/is-array.mjs';
2
3
  import { isPrimitive } from '../is/is-primitive.mjs';
3
4
 
@@ -6,12 +7,38 @@ import { isPrimitive } from '../is/is-primitive.mjs';
6
7
  * in develop, there are many cases to clone a string/number/object/array
7
8
  * this util is planning to resolve it
8
9
  */
9
- var clone = function clone(value) {
10
+ var _clone = function clone(value) {
10
11
  if (isPrimitive(value)) return value;
11
- if (value instanceof Map) return new Map(value);
12
- if (value instanceof Set) return new Set(value);
13
- if (isArray(value)) return Array.from(value);
14
- return Object(value);
12
+ if (value instanceof Map) {
13
+ // @ts-ignore
14
+ return new Map(Array.from(value.entries()).map(function (_ref) {
15
+ var _ref2 = _slicedToArray(_ref, 2),
16
+ _key = _ref2[0],
17
+ _value = _ref2[1];
18
+ return [_key, _clone(_value)];
19
+ }));
20
+ }
21
+ if (value instanceof Set) {
22
+ // @ts-ignore
23
+ return new Set(Array.from(value.values()).map(function (_value) {
24
+ return _clone(_value);
25
+ }));
26
+ }
27
+ if (isArray(value)) {
28
+ // @ts-ignore
29
+ return value.map(function (_value) {
30
+ return _clone(_value);
31
+ });
32
+ }
33
+ // @ts-ignore
34
+ return Object.entries(value).reduce(function (cloned, _ref3) {
35
+ var _ref4 = _slicedToArray(_ref3, 2),
36
+ _key = _ref4[0],
37
+ _value = _ref4[1];
38
+ // @ts-ignore
39
+ cloned[_key] = _clone(_value);
40
+ return cloned;
41
+ }, {});
15
42
  };
16
43
 
17
- export { clone };
44
+ export { _clone as clone };
@@ -1,4 +1,4 @@
1
- import { type First } from "../types";
1
+ import { type First } from "@aiszlab/relax/types";
2
2
  /**
3
3
  * @description
4
4
  * first element of array
@@ -1,4 +1,4 @@
1
- import { type Last } from "../types";
1
+ import { type Last } from "@aiszlab/relax/types";
2
2
  /**
3
3
  * @description
4
4
  * last element of array
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
4
+ var isArray = require('../is/is-array.cjs');
5
+ var isFunction = require('../is/is-function.cjs');
6
+ var isPrimitive = require('../is/is-primitive.cjs');
7
+ var clone = require('./clone.cjs');
8
+ var unique = require('./unique.cjs');
9
+
10
+ var _merge2 = function _merge(previous, next) {
11
+ if (isPrimitive.isPrimitive(previous) || isPrimitive.isPrimitive(next) || isFunction.isFunction(previous) || isFunction.isFunction(next) || previous === next) {
12
+ return clone.clone(next);
13
+ }
14
+ var _previous = new Map(Object.entries(previous));
15
+ var _next = new Map(Object.entries(next));
16
+ var _uniqueKeys = unique.unique(_previous.keys(), _next.keys());
17
+ var merged = _uniqueKeys.reduce(function (_merged, _key) {
18
+ var _previousValue = _previous.get(_key);
19
+ var _nextValue = _next.get(_key);
20
+ if (!_next.has(_key)) {
21
+ _merged[_key] = clone.clone(_previousValue);
22
+ return _merged;
23
+ }
24
+ // deep merge child value
25
+ _merged[_key] = _merge2(_previousValue, _nextValue);
26
+ return _merged;
27
+ }, {});
28
+ // convert value type same as previous
29
+ // if `previous` is object, use merged object directly
30
+ if (!isArray.isArray(previous)) return merged;
31
+ // else `previous` is array, check next value type
32
+ // but length will be merged when next value is array
33
+ return Array.from(_objectSpread(_objectSpread({}, merged), {}, {
34
+ length: isArray.isArray(next) ? Object.keys(merged).length : previous.length
35
+ }));
36
+ };
37
+ /**
38
+ * @description
39
+ * deep merge api
40
+ * use unique values to avoid duplicate
41
+ */
42
+ var merge = function merge() {
43
+ for (var _len = arguments.length, values = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {
44
+ values[_key2] = arguments[_key2];
45
+ }
46
+ // @ts-ignore
47
+ return unique.unique(values).reduce(function (_merged, _value) {
48
+ // @ts-ignore
49
+ return _merge2(_merged, _value !== null && _value !== void 0 ? _value : {});
50
+ }, null);
51
+ };
52
+
53
+ exports.merge = merge;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @description
3
+ * deep merge api
4
+ * use unique values to avoid duplicate
5
+ */
6
+ declare const merge: <T>(values_0: T, ...values: unknown[]) => T;
7
+ export { merge };
@@ -0,0 +1,51 @@
1
+ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
+ import { isArray } from '../is/is-array.mjs';
3
+ import { isFunction } from '../is/is-function.mjs';
4
+ import { isPrimitive } from '../is/is-primitive.mjs';
5
+ import { clone as _clone } from './clone.mjs';
6
+ import { unique } from './unique.mjs';
7
+
8
+ var _merge2 = function _merge(previous, next) {
9
+ if (isPrimitive(previous) || isPrimitive(next) || isFunction(previous) || isFunction(next) || previous === next) {
10
+ return _clone(next);
11
+ }
12
+ var _previous = new Map(Object.entries(previous));
13
+ var _next = new Map(Object.entries(next));
14
+ var _uniqueKeys = unique(_previous.keys(), _next.keys());
15
+ var merged = _uniqueKeys.reduce(function (_merged, _key) {
16
+ var _previousValue = _previous.get(_key);
17
+ var _nextValue = _next.get(_key);
18
+ if (!_next.has(_key)) {
19
+ _merged[_key] = _clone(_previousValue);
20
+ return _merged;
21
+ }
22
+ // deep merge child value
23
+ _merged[_key] = _merge2(_previousValue, _nextValue);
24
+ return _merged;
25
+ }, {});
26
+ // convert value type same as previous
27
+ // if `previous` is object, use merged object directly
28
+ if (!isArray(previous)) return merged;
29
+ // else `previous` is array, check next value type
30
+ // but length will be merged when next value is array
31
+ return Array.from(_objectSpread(_objectSpread({}, merged), {}, {
32
+ length: isArray(next) ? Object.keys(merged).length : previous.length
33
+ }));
34
+ };
35
+ /**
36
+ * @description
37
+ * deep merge api
38
+ * use unique values to avoid duplicate
39
+ */
40
+ var merge = function merge() {
41
+ for (var _len = arguments.length, values = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {
42
+ values[_key2] = arguments[_key2];
43
+ }
44
+ // @ts-ignore
45
+ return unique(values).reduce(function (_merged, _value) {
46
+ // @ts-ignore
47
+ return _merge2(_merged, _value !== null && _value !== void 0 ? _value : {});
48
+ }, null);
49
+ };
50
+
51
+ export { merge };
@@ -4,8 +4,13 @@
4
4
  * @description
5
5
  * unique
6
6
  */
7
- var unique = function unique(value) {
8
- return Array.from(new Set(value));
7
+ var unique = function unique() {
8
+ for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
9
+ values[_key] = arguments[_key];
10
+ }
11
+ return Array.from(values.reduce(function (unionize, _value) {
12
+ return unionize.union(new Set(_value));
13
+ }, new Set()));
9
14
  };
10
15
  /**
11
16
  * @description
@@ -2,7 +2,7 @@
2
2
  * @description
3
3
  * unique
4
4
  */
5
- export declare const unique: <T = unknown>(value: Iterable<T>) => T[];
5
+ export declare const unique: <T = unknown>(...values: Array<Iterable<T>>) => T[];
6
6
  /**
7
7
  * @description
8
8
  * unique by
@@ -2,8 +2,13 @@
2
2
  * @description
3
3
  * unique
4
4
  */
5
- var unique = function unique(value) {
6
- return Array.from(new Set(value));
5
+ var unique = function unique() {
6
+ for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
7
+ values[_key] = arguments[_key];
8
+ }
9
+ return Array.from(values.reduce(function (unionize, _value) {
10
+ return unionize.union(new Set(_value));
11
+ }, new Set()));
7
12
  };
8
13
  /**
9
14
  * @description
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiszlab/relax",
3
- "version": "1.3.15",
3
+ "version": "1.3.16",
4
4
  "description": "react utils collection",
5
5
  "exports": {
6
6
  ".": {
@@ -32,6 +32,7 @@
32
32
  "clean:build": "rm -rf dist",
33
33
  "prepublishOnly": "npm run clean:build && npm run build",
34
34
  "test": "jest",
35
+ "test:coverage": "jest --coverage",
35
36
  "publish:npm": "npm publish"
36
37
  },
37
38
  "dependencies": {
@@ -50,6 +51,7 @@
50
51
  "@rollup/plugin-node-resolve": "^15.2.3",
51
52
  "@rollup/plugin-typescript": "^11.1.6",
52
53
  "@testing-library/react": "^16.0.1",
54
+ "@types/babel__core": "^7.20.5",
53
55
  "@types/react": "^18.3.6",
54
56
  "@types/react-dom": "^18.3.0",
55
57
  "@types/react-is": "^18.3.0",