extra-utils 5.2.0 → 5.4.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/README.md CHANGED
@@ -9,6 +9,12 @@ yarn add extra-utils
9
9
  ```
10
10
 
11
11
  ## API
12
+ ### ArrayLike
13
+ ```ts
14
+ function first<T>(arr: ArrayLike<T>): T | undefined
15
+ function last<T>(arr: ArrayLike<T>): T | undefined
16
+ ```
17
+
12
18
  ### Array
13
19
  ```ts
14
20
  function isArray<T>(val: unknown): val is Array<T>
@@ -86,6 +92,10 @@ function isntPlainObject<T>(
86
92
 
87
93
  function isEmptyObject(val: object): boolean
88
94
  function isntEmptyObject(val: object): boolean
95
+
96
+ function isReferenceEqual(a: unknown, b: unknown): boolean
97
+ function isShallowEqual(a: unknown, b: unknown): boolean
98
+ function isDeepEqual(a: unknown, b: unknown): boolean
89
99
  ```
90
100
 
91
101
  ### String
@@ -0,0 +1 @@
1
+ export declare function first<T>(arr: ArrayLike<T>): T | undefined;
@@ -0,0 +1,6 @@
1
+ export function first(arr) {
2
+ return arr.length
3
+ ? arr[0]
4
+ : undefined;
5
+ }
6
+ //# sourceMappingURL=first.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first.js","sourceRoot":"","sources":["../../src/array-like/first.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAI,GAAiB;IACxC,OAAO,GAAG,CAAC,MAAM;QACZ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './first.js';
2
+ export * from './last.js';
@@ -0,0 +1,3 @@
1
+ export * from './first.js';
2
+ export * from './last.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/array-like/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function last<T>(arr: ArrayLike<T>): T | undefined;
@@ -0,0 +1,6 @@
1
+ export function last(arr) {
2
+ return arr.length
3
+ ? arr[arr.length - 1]
4
+ : undefined;
5
+ }
6
+ //# sourceMappingURL=last.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"last.js","sourceRoot":"","sources":["../../src/array-like/last.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAAI,GAAiB;IACvC,OAAO,GAAG,CAAC,MAAM;QACZ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,SAAS,CAAA;AAClB,CAAC"}
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './array-like/index.js';
1
2
  export * from './array/index.js';
2
3
  export * from './boolean/index.js';
3
4
  export * from './number/index.js';
package/lib/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './array-like/index.js';
1
2
  export * from './array/index.js';
2
3
  export * from './boolean/index.js';
3
4
  export * from './number/index.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
@@ -1,3 +1,6 @@
1
1
  export * from './is-empty-object.js';
2
2
  export * from './is-object.js';
3
3
  export * from './is-plain-object.js';
4
+ export * from './is-reference-equal.js';
5
+ export * from './is-shallow-equal.js';
6
+ export * from './is-deep-equal.js';
@@ -1,4 +1,7 @@
1
1
  export * from './is-empty-object.js';
2
2
  export * from './is-object.js';
3
3
  export * from './is-plain-object.js';
4
+ export * from './is-reference-equal.js';
5
+ export * from './is-shallow-equal.js';
6
+ export * from './is-deep-equal.js';
4
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function isDeepEqual(a: unknown, b: unknown): boolean;
@@ -0,0 +1,21 @@
1
+ import { isReferenceEqual } from './is-reference-equal.js';
2
+ import { isObject } from './is-object.js';
3
+ export function isDeepEqual(a, b) {
4
+ if (isReferenceEqual(a, b))
5
+ return true;
6
+ if (isObject(a) && isObject(b)) {
7
+ const keysA = Reflect.ownKeys(a);
8
+ const keysB = Reflect.ownKeys(b);
9
+ if (keysA.length === keysB.length) {
10
+ for (const key of keysA) {
11
+ if (!Object.prototype.hasOwnProperty.call(b, key) ||
12
+ !isDeepEqual(a[key], b[key])) {
13
+ return false;
14
+ }
15
+ }
16
+ return true;
17
+ }
18
+ }
19
+ return false;
20
+ }
21
+ //# sourceMappingURL=is-deep-equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-deep-equal.js","sourceRoot":"","sources":["../../src/object/is-deep-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,WAAW,CAAC,CAAU,EAAE,CAAU;IAChD,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;YACjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;gBACvB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;oBAC7C,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAC5B;oBACA,OAAO,KAAK,CAAA;iBACb;aACF;YAED,OAAO,IAAI,CAAA;SACZ;KACF;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isReferenceEqual(a: unknown, b: unknown): boolean;
@@ -0,0 +1,4 @@
1
+ export function isReferenceEqual(a, b) {
2
+ return a === b;
3
+ }
4
+ //# sourceMappingURL=is-reference-equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-reference-equal.js","sourceRoot":"","sources":["../../src/object/is-reference-equal.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,CAAU,EAAE,CAAU;IACrD,OAAO,CAAC,KAAK,CAAC,CAAA;AAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isShallowEqual(a: unknown, b: unknown): boolean;
@@ -0,0 +1,21 @@
1
+ import { isReferenceEqual } from './is-reference-equal.js';
2
+ import { isObject } from './is-object.js';
3
+ export function isShallowEqual(a, b) {
4
+ if (isReferenceEqual(a, b))
5
+ return true;
6
+ if (isObject(a) && isObject(b)) {
7
+ const keysA = Reflect.ownKeys(a);
8
+ const keysB = Reflect.ownKeys(b);
9
+ if (keysA.length === keysB.length) {
10
+ for (const key of keysA) {
11
+ if (!Object.prototype.hasOwnProperty.call(b, key) ||
12
+ a[key] !== b[key]) {
13
+ return false;
14
+ }
15
+ }
16
+ return true;
17
+ }
18
+ }
19
+ return false;
20
+ }
21
+ //# sourceMappingURL=is-shallow-equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-shallow-equal.js","sourceRoot":"","sources":["../../src/object/is-shallow-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,cAAc,CAAC,CAAU,EAAE,CAAU;IACnD,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;YACjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;gBACvB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;oBAC7C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EACjB;oBACA,OAAO,KAAK,CAAA;iBACb;aACF;YAED,OAAO,IAAI,CAAA;SACZ;KACF;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "extra-utils",
3
- "version": "5.2.0",
3
+ "version": "5.4.0",
4
4
  "description": "Utilities for JavaScript and Typescript",
5
5
  "files": [
6
6
  "src",
@@ -34,32 +34,32 @@
34
34
  }
35
35
  },
36
36
  "devDependencies": {
37
- "@blackglory/jest-resolver": "^0.3.0",
38
- "@blackglory/pass": "^1.1.0",
39
- "@commitlint/cli": "^17.6.1",
40
- "@commitlint/config-conventional": "^17.6.1",
41
- "@types/jest": "^29.5.0",
37
+ "@blackglory/jest-resolver": "^0.3.1",
38
+ "@blackglory/pass": "^1.1.1",
39
+ "@commitlint/cli": "^17.6.7",
40
+ "@commitlint/config-conventional": "^17.6.7",
41
+ "@types/jest": "^29.5.3",
42
42
  "@types/jsdom": "^21.1.1",
43
- "@types/lodash-es": "^4.17.7",
44
- "@typescript-eslint/eslint-plugin": "^5.58.0",
45
- "@typescript-eslint/parser": "^5.58.0",
43
+ "@types/lodash-es": "^4.17.8",
44
+ "@typescript-eslint/eslint-plugin": "^6.1.0",
45
+ "@typescript-eslint/parser": "^6.1.0",
46
46
  "cross-env": "^7.0.3",
47
- "eslint": "^8.38.0",
47
+ "eslint": "^8.45.0",
48
48
  "husky": "^4.3.8",
49
- "jest": "^29.5.0",
50
- "jest-resolve": "^29.5.0",
49
+ "jest": "^29.6.1",
50
+ "jest-resolve": "^29.6.1",
51
51
  "npm-run-all": "^4.1.5",
52
- "rimraf": "^3.0.2",
52
+ "rimraf": "^5.0.1",
53
53
  "standard-version": "^9.5.0",
54
- "ts-jest": "^29.1.0",
55
- "ts-patch": "^2.1.0",
54
+ "ts-jest": "^29.1.1",
55
+ "ts-patch": "^3.0.2",
56
56
  "tsd": "^0.28.1",
57
- "tslib": "^2.5.0",
58
- "typescript": "4.8",
57
+ "tslib": "^2.6.0",
58
+ "typescript": "5.1.6",
59
59
  "typescript-transform-paths": "^3.4.6"
60
60
  },
61
61
  "dependencies": {
62
- "justypes": "^4.2.0",
62
+ "justypes": "^4.2.1",
63
63
  "lodash-es": "^4.17.21"
64
64
  }
65
65
  }
@@ -0,0 +1,5 @@
1
+ export function first<T>(arr: ArrayLike<T>): T | undefined {
2
+ return arr.length
3
+ ? arr[0]
4
+ : undefined
5
+ }
@@ -0,0 +1,2 @@
1
+ export * from './first.js'
2
+ export * from './last.js'
@@ -0,0 +1,5 @@
1
+ export function last<T>(arr: ArrayLike<T>): T | undefined {
2
+ return arr.length
3
+ ? arr[arr.length - 1]
4
+ : undefined
5
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './array-like/index.js'
1
2
  export * from './array/index.js'
2
3
  export * from './boolean/index.js'
3
4
  export * from './number/index.js'
@@ -1,3 +1,6 @@
1
1
  export * from './is-empty-object.js'
2
2
  export * from './is-object.js'
3
3
  export * from './is-plain-object.js'
4
+ export * from './is-reference-equal.js'
5
+ export * from './is-shallow-equal.js'
6
+ export * from './is-deep-equal.js'
@@ -0,0 +1,26 @@
1
+ import { isReferenceEqual } from './is-reference-equal.js'
2
+ import { isObject } from './is-object.js'
3
+
4
+ export function isDeepEqual(a: unknown, b: unknown): boolean {
5
+ if (isReferenceEqual(a, b)) return true
6
+
7
+ if (isObject(a) && isObject(b)) {
8
+ const keysA = Reflect.ownKeys(a)
9
+ const keysB = Reflect.ownKeys(b)
10
+
11
+ if (keysA.length === keysB.length) {
12
+ for (const key of keysA) {
13
+ if (
14
+ !Object.prototype.hasOwnProperty.call(b, key) ||
15
+ !isDeepEqual(a[key], b[key])
16
+ ) {
17
+ return false
18
+ }
19
+ }
20
+
21
+ return true
22
+ }
23
+ }
24
+
25
+ return false
26
+ }
@@ -0,0 +1,3 @@
1
+ export function isReferenceEqual(a: unknown, b: unknown): boolean {
2
+ return a === b
3
+ }
@@ -0,0 +1,26 @@
1
+ import { isReferenceEqual } from './is-reference-equal.js'
2
+ import { isObject } from './is-object.js'
3
+
4
+ export function isShallowEqual(a: unknown, b: unknown): boolean {
5
+ if (isReferenceEqual(a, b)) return true
6
+
7
+ if (isObject(a) && isObject(b)) {
8
+ const keysA = Reflect.ownKeys(a)
9
+ const keysB = Reflect.ownKeys(b)
10
+
11
+ if (keysA.length === keysB.length) {
12
+ for (const key of keysA) {
13
+ if (
14
+ !Object.prototype.hasOwnProperty.call(b, key) ||
15
+ a[key] !== b[key]
16
+ ) {
17
+ return false
18
+ }
19
+ }
20
+
21
+ return true
22
+ }
23
+ }
24
+
25
+ return false
26
+ }