@etsoo/shared 1.1.98 → 1.1.99

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
@@ -103,7 +103,9 @@ Array related utilities
103
103
  |---:|---|
104
104
  |differences|Array 1 items do not exist in Array 2 or reverse match|
105
105
  |max|Get max number item or number item property|
106
+ |maxItem|Get max field value item|
106
107
  |min|Get min number item or number item property|
108
+ |minItem|Get min field value item|
107
109
  |sum|Sum number items or number item properties|
108
110
  |toUnique|Make all items are unique|
109
111
 
@@ -44,8 +44,21 @@ test('Tests for max / min fields', () => {
44
44
  const items = [
45
45
  { id: 1, label: 'a', amount: 3.14 },
46
46
  { id: 2, label: 'b', amount: 4.54 },
47
- { id: 2, label: 'b', amount: 1.52 }
47
+ { id: 3, label: 'b', amount: 1.52 }
48
48
  ];
49
49
  expect(items.max('amount')).toBe(4.54);
50
50
  expect(items.min('amount')).toBe(1.52);
51
51
  });
52
+
53
+ test('Tests for maxItem / minItem', () => {
54
+ const items = [
55
+ { id: 1, label: 'a', amount: 3.14 },
56
+ { id: 2, label: 'b', amount: 4.54 },
57
+ { id: 3, label: 'b', amount: 1.52 }
58
+ ];
59
+ expect(items.maxItem('amount')?.id).toBe(2);
60
+ expect(items.minItem('amount')?.id).toBe(3);
61
+
62
+ const emptyItems: { id: string; amount: number }[] = [];
63
+ expect(emptyItems.maxItem('amount')).toBeUndefined();
64
+ });
@@ -12,11 +12,21 @@ declare global {
12
12
  * @param field Object field to calculate
13
13
  */
14
14
  max(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
15
+ /**
16
+ * Get max field value item
17
+ * @param field Object field to calculate
18
+ */
19
+ maxItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined;
15
20
  /**
16
21
  * Get min number item or number item property
17
22
  * @param field Object field to calculate
18
23
  */
19
24
  min(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
25
+ /**
26
+ * Get min field value item
27
+ * @param field Object field to calculate
28
+ */
29
+ minItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined;
20
30
  /**
21
31
  * Sum number items or number item properties
22
32
  * @param field Object field to calculate
@@ -25,12 +25,22 @@ Array.prototype.max = function (field) {
25
25
  }
26
26
  return Math.max(...this.map((item) => item[field]));
27
27
  };
28
+ Array.prototype.maxItem = function (field) {
29
+ if (this.length === 0)
30
+ return undefined;
31
+ return this.reduce((prev, curr) => prev[field] > curr[field] ? prev : curr);
32
+ };
28
33
  Array.prototype.min = function (field) {
29
34
  if (field == null) {
30
35
  return Math.min(...this);
31
36
  }
32
37
  return Math.min(...this.map((item) => item[field]));
33
38
  };
39
+ Array.prototype.minItem = function (field) {
40
+ if (this.length === 0)
41
+ return undefined;
42
+ return this.reduce((prev, curr) => prev[field] < curr[field] ? prev : curr);
43
+ };
34
44
  Array.prototype.sum = function (field) {
35
45
  if (field == null) {
36
46
  return this.reduce((total, num) => total + num, 0);
@@ -12,11 +12,21 @@ declare global {
12
12
  * @param field Object field to calculate
13
13
  */
14
14
  max(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
15
+ /**
16
+ * Get max field value item
17
+ * @param field Object field to calculate
18
+ */
19
+ maxItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined;
15
20
  /**
16
21
  * Get min number item or number item property
17
22
  * @param field Object field to calculate
18
23
  */
19
24
  min(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number;
25
+ /**
26
+ * Get min field value item
27
+ * @param field Object field to calculate
28
+ */
29
+ minItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined;
20
30
  /**
21
31
  * Sum number items or number item properties
22
32
  * @param field Object field to calculate
@@ -19,12 +19,22 @@ Array.prototype.max = function (field) {
19
19
  }
20
20
  return Math.max(...this.map((item) => item[field]));
21
21
  };
22
+ Array.prototype.maxItem = function (field) {
23
+ if (this.length === 0)
24
+ return undefined;
25
+ return this.reduce((prev, curr) => prev[field] > curr[field] ? prev : curr);
26
+ };
22
27
  Array.prototype.min = function (field) {
23
28
  if (field == null) {
24
29
  return Math.min(...this);
25
30
  }
26
31
  return Math.min(...this.map((item) => item[field]));
27
32
  };
33
+ Array.prototype.minItem = function (field) {
34
+ if (this.length === 0)
35
+ return undefined;
36
+ return this.reduce((prev, curr) => prev[field] < curr[field] ? prev : curr);
37
+ };
28
38
  Array.prototype.sum = function (field) {
29
39
  if (field == null) {
30
40
  return this.reduce((total, num) => total + num, 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etsoo/shared",
3
- "version": "1.1.98",
3
+ "version": "1.1.99",
4
4
  "description": "TypeScript shared utilities and functions",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/mjs/index.js",
package/src/ArrayUtils.ts CHANGED
@@ -22,6 +22,14 @@ declare global {
22
22
  : [never]
23
23
  ): number;
24
24
 
25
+ /**
26
+ * Get max field value item
27
+ * @param field Object field to calculate
28
+ */
29
+ maxItem(
30
+ field: T extends object ? DataTypes.Keys<T, number> : never
31
+ ): T | undefined;
32
+
25
33
  /**
26
34
  * Get min number item or number item property
27
35
  * @param field Object field to calculate
@@ -34,6 +42,14 @@ declare global {
34
42
  : [never]
35
43
  ): number;
36
44
 
45
+ /**
46
+ * Get min field value item
47
+ * @param field Object field to calculate
48
+ */
49
+ minItem(
50
+ field: T extends object ? DataTypes.Keys<T, number> : never
51
+ ): T | undefined;
52
+
37
53
  /**
38
54
  * Sum number items or number item properties
39
55
  * @param field Object field to calculate
@@ -85,6 +101,17 @@ Array.prototype.max = function <T>(
85
101
  return Math.max(...this.map((item) => item[field] as number));
86
102
  };
87
103
 
104
+ Array.prototype.maxItem = function <T>(
105
+ this: Array<T>,
106
+ field: T extends object ? DataTypes.Keys<T, number> : never
107
+ ) {
108
+ if (this.length === 0) return undefined;
109
+
110
+ return this.reduce((prev, curr) =>
111
+ prev[field] > curr[field] ? prev : curr
112
+ );
113
+ };
114
+
88
115
  Array.prototype.min = function <T>(
89
116
  this: Array<T>,
90
117
  field: T extends object ? DataTypes.Keys<T, number> : undefined
@@ -96,6 +123,17 @@ Array.prototype.min = function <T>(
96
123
  return Math.min(...this.map((item) => item[field] as number));
97
124
  };
98
125
 
126
+ Array.prototype.minItem = function <T>(
127
+ this: Array<T>,
128
+ field: T extends object ? DataTypes.Keys<T, number> : never
129
+ ) {
130
+ if (this.length === 0) return undefined;
131
+
132
+ return this.reduce((prev, curr) =>
133
+ prev[field] < curr[field] ? prev : curr
134
+ );
135
+ };
136
+
99
137
  Array.prototype.sum = function <T>(
100
138
  this: Array<T>,
101
139
  field: T extends object ? DataTypes.Keys<T, number> : undefined