@equinor/cpl-utils 0.2.2 → 0.3.1

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/dist/index.d.mts CHANGED
@@ -1,3 +1,35 @@
1
+ /**
2
+ * Creates a sort function that orders items by a numeric property
3
+ *
4
+ * @param key - The property key to sort by (must be a number type)
5
+ * @param order - Sort order: 'asc' for ascending, 'desc' for descending
6
+ * @returns A comparator function for use with Array.sort()
7
+ *
8
+ * @example
9
+ * const users = [{ age: 30 }, { age: 25 }, { age: 35 }]
10
+ * users.sort(buildObjectNumberCompareFn('age', 'asc')) // 25, 30, 35
11
+ * users.sort(buildObjectNumberCompareFn('age', 'desc')) // 35, 30, 25
12
+ */
13
+ declare function buildObjectNumberCompareFn<T>(key: {
14
+ [K in keyof T]: T[K] extends number | undefined | null ? K : never;
15
+ }[keyof T], order?: 'asc' | 'desc'): (a: T, b: T) => number;
16
+
17
+ /**
18
+ * Creates a sort function that orders items by a string property
19
+ *
20
+ * @param key - The property key to sort by (must be a string type)
21
+ * @param order - Sort order: 'asc' for ascending, 'desc' for descending
22
+ * @returns A comparator function for use with Array.sort()
23
+ *
24
+ * @example
25
+ * const users = [{ name: 'John' }, { name: 'Alice' }]
26
+ * users.sort(buildObjectStringCompareFn('name', 'asc')) // Alice, John
27
+ * users.sort(buildObjectStringCompareFn('name', 'desc')) // John, Alice
28
+ */
29
+ declare function buildObjectStringCompareFn<T>(key: {
30
+ [K in keyof T]: T[K] extends string | undefined | null ? K : never;
31
+ }[keyof T], order?: 'asc' | 'desc'): (a: T, b: T) => number;
32
+
1
33
  type TreeNode<T> = T & {
2
34
  children?: TreeNode<T>[];
3
35
  };
@@ -205,4 +237,4 @@ declare function objectHasOwnNestedProperty<K extends readonly string[]>(object:
205
237
  */
206
238
  declare function objectHasOwnProperty<Key extends PropertyKey>(object: object, key: Key): object is Record<Key, unknown>;
207
239
 
208
- export { type TreeNode, buildTreeNodes, hasCircularDependency, itemIsDefined, objectHasOwnNestedProperty, objectHasOwnProperty };
240
+ export { type TreeNode, buildObjectNumberCompareFn, buildObjectStringCompareFn, buildTreeNodes, hasCircularDependency, itemIsDefined, objectHasOwnNestedProperty, objectHasOwnProperty };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,35 @@
1
+ /**
2
+ * Creates a sort function that orders items by a numeric property
3
+ *
4
+ * @param key - The property key to sort by (must be a number type)
5
+ * @param order - Sort order: 'asc' for ascending, 'desc' for descending
6
+ * @returns A comparator function for use with Array.sort()
7
+ *
8
+ * @example
9
+ * const users = [{ age: 30 }, { age: 25 }, { age: 35 }]
10
+ * users.sort(buildObjectNumberCompareFn('age', 'asc')) // 25, 30, 35
11
+ * users.sort(buildObjectNumberCompareFn('age', 'desc')) // 35, 30, 25
12
+ */
13
+ declare function buildObjectNumberCompareFn<T>(key: {
14
+ [K in keyof T]: T[K] extends number | undefined | null ? K : never;
15
+ }[keyof T], order?: 'asc' | 'desc'): (a: T, b: T) => number;
16
+
17
+ /**
18
+ * Creates a sort function that orders items by a string property
19
+ *
20
+ * @param key - The property key to sort by (must be a string type)
21
+ * @param order - Sort order: 'asc' for ascending, 'desc' for descending
22
+ * @returns A comparator function for use with Array.sort()
23
+ *
24
+ * @example
25
+ * const users = [{ name: 'John' }, { name: 'Alice' }]
26
+ * users.sort(buildObjectStringCompareFn('name', 'asc')) // Alice, John
27
+ * users.sort(buildObjectStringCompareFn('name', 'desc')) // John, Alice
28
+ */
29
+ declare function buildObjectStringCompareFn<T>(key: {
30
+ [K in keyof T]: T[K] extends string | undefined | null ? K : never;
31
+ }[keyof T], order?: 'asc' | 'desc'): (a: T, b: T) => number;
32
+
1
33
  type TreeNode<T> = T & {
2
34
  children?: TreeNode<T>[];
3
35
  };
@@ -205,4 +237,4 @@ declare function objectHasOwnNestedProperty<K extends readonly string[]>(object:
205
237
  */
206
238
  declare function objectHasOwnProperty<Key extends PropertyKey>(object: object, key: Key): object is Record<Key, unknown>;
207
239
 
208
- export { type TreeNode, buildTreeNodes, hasCircularDependency, itemIsDefined, objectHasOwnNestedProperty, objectHasOwnProperty };
240
+ export { type TreeNode, buildObjectNumberCompareFn, buildObjectStringCompareFn, buildTreeNodes, hasCircularDependency, itemIsDefined, objectHasOwnNestedProperty, objectHasOwnProperty };
package/dist/index.js CHANGED
@@ -34,6 +34,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
34
34
  // src/index.ts
35
35
  var index_exports = {};
36
36
  __export(index_exports, {
37
+ buildObjectNumberCompareFn: () => buildObjectNumberCompareFn,
38
+ buildObjectStringCompareFn: () => buildObjectStringCompareFn,
37
39
  buildTreeNodes: () => buildTreeNodes,
38
40
  hasCircularDependency: () => hasCircularDependency,
39
41
  itemIsDefined: () => itemIsDefined,
@@ -42,6 +44,38 @@ __export(index_exports, {
42
44
  });
43
45
  module.exports = __toCommonJS(index_exports);
44
46
 
47
+ // src/build-object-number-compare-fn.ts
48
+ function buildObjectNumberCompareFn(key, order = "asc") {
49
+ return (a, b) => {
50
+ const aValue = Number(a[key] || 0);
51
+ const bValue = Number(b[key] || 0);
52
+ const aNum = isNaN(aValue) ? 0 : aValue;
53
+ const bNum = isNaN(bValue) ? 0 : bValue;
54
+ if (aNum < bNum) {
55
+ return order === "asc" ? -1 : 1;
56
+ }
57
+ if (aNum > bNum) {
58
+ return order === "asc" ? 1 : -1;
59
+ }
60
+ return 0;
61
+ };
62
+ }
63
+
64
+ // src/build-object-string-compare-fn.ts
65
+ function buildObjectStringCompareFn(key, order = "asc") {
66
+ return (a, b) => {
67
+ const aValue = String(a[key] || "").toLowerCase();
68
+ const bValue = String(b[key] || "").toLowerCase();
69
+ if (aValue < bValue) {
70
+ return order === "asc" ? -1 : 1;
71
+ }
72
+ if (aValue > bValue) {
73
+ return order === "asc" ? 1 : -1;
74
+ }
75
+ return 0;
76
+ };
77
+ }
78
+
45
79
  // src/has-circular-dependency.ts
46
80
  function hasCircularDependency(items, idKey, parentIdKey) {
47
81
  const parentMap = /* @__PURE__ */ new Map();
@@ -140,6 +174,8 @@ function objectHasOwnNestedProperty(object, ...keys) {
140
174
  }
141
175
  // Annotate the CommonJS export names for ESM import in node:
142
176
  0 && (module.exports = {
177
+ buildObjectNumberCompareFn,
178
+ buildObjectStringCompareFn,
143
179
  buildTreeNodes,
144
180
  hasCircularDependency,
145
181
  itemIsDefined,
package/dist/index.mjs CHANGED
@@ -15,6 +15,38 @@ var __spreadValues = (a, b) => {
15
15
  return a;
16
16
  };
17
17
 
18
+ // src/build-object-number-compare-fn.ts
19
+ function buildObjectNumberCompareFn(key, order = "asc") {
20
+ return (a, b) => {
21
+ const aValue = Number(a[key] || 0);
22
+ const bValue = Number(b[key] || 0);
23
+ const aNum = isNaN(aValue) ? 0 : aValue;
24
+ const bNum = isNaN(bValue) ? 0 : bValue;
25
+ if (aNum < bNum) {
26
+ return order === "asc" ? -1 : 1;
27
+ }
28
+ if (aNum > bNum) {
29
+ return order === "asc" ? 1 : -1;
30
+ }
31
+ return 0;
32
+ };
33
+ }
34
+
35
+ // src/build-object-string-compare-fn.ts
36
+ function buildObjectStringCompareFn(key, order = "asc") {
37
+ return (a, b) => {
38
+ const aValue = String(a[key] || "").toLowerCase();
39
+ const bValue = String(b[key] || "").toLowerCase();
40
+ if (aValue < bValue) {
41
+ return order === "asc" ? -1 : 1;
42
+ }
43
+ if (aValue > bValue) {
44
+ return order === "asc" ? 1 : -1;
45
+ }
46
+ return 0;
47
+ };
48
+ }
49
+
18
50
  // src/has-circular-dependency.ts
19
51
  function hasCircularDependency(items, idKey, parentIdKey) {
20
52
  const parentMap = /* @__PURE__ */ new Map();
@@ -112,6 +144,8 @@ function objectHasOwnNestedProperty(object, ...keys) {
112
144
  return true;
113
145
  }
114
146
  export {
147
+ buildObjectNumberCompareFn,
148
+ buildObjectStringCompareFn,
115
149
  buildTreeNodes,
116
150
  hasCircularDependency,
117
151
  itemIsDefined,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/cpl-utils",
3
- "version": "0.2.2",
3
+ "version": "0.3.1",
4
4
  "license": "MIT",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -10,11 +10,11 @@
10
10
  ],
11
11
  "devDependencies": {
12
12
  "eslint": "^9.21.0",
13
- "tsup": "^8.3.6",
13
+ "tsup": "^8.5.1",
14
14
  "typedoc": "^0.27.6",
15
15
  "typedoc-plugin-markdown": "^4.4.1",
16
16
  "vitest": "^3.2.4",
17
- "@equinor/cpl-eslint-config": "0.0.9",
17
+ "@equinor/cpl-eslint-config": "1.0.0",
18
18
  "@equinor/cpl-typescript-config": "0.0.2"
19
19
  },
20
20
  "publishConfig": {