@stacksjs/objects 0.39.1 → 0.41.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/dist/index.d.ts CHANGED
@@ -1 +1,76 @@
1
+ import type { DeepMerge } from '@stacksjs/types';
1
2
  export { Collection, collect } from '@stacksjs/collections';
3
+ /**
4
+ * Map key/value pairs for an object, and construct a new one
5
+ *
6
+ *
7
+ * @category Object
8
+ *
9
+ * Transform:
10
+ * @example
11
+ * ```
12
+ * objectMap({ a: 1, b: 2 }, (k, v) => [k.toString().toUpperCase(), v.toString()])
13
+ * // { A: '1', B: '2' }
14
+ * ```
15
+ *
16
+ * Swap key/value:
17
+ * @example
18
+ * ```
19
+ * objectMap({ a: 1, b: 2 }, (k, v) => [v, k])
20
+ * // { 1: 'a', 2: 'b' }
21
+ * ```
22
+ *
23
+ * Filter keys:
24
+ * @example
25
+ * ```
26
+ * objectMap({ a: 1, b: 2 }, (k, v) => k === 'a' ? undefined : [k, v])
27
+ * // { b: 2 }
28
+ * ```
29
+ */
30
+ export declare function objectMap<K extends string, V, NK = K, NV = V>(obj: Record<K, V>, fn: (key: K, value: V) => [NK, NV] | undefined): Record<K, V>;
31
+ /**
32
+ * Type guard for any key, `k`.
33
+ * Marks `k` as a key of `T` if `k` is in `obj`.
34
+ *
35
+ * @category Object
36
+ * @param obj object to query for key `k`
37
+ * @param k key to check existence in `obj`
38
+ */
39
+ export declare function isKeyOf<T extends object>(obj: T, k: keyof any): k is keyof T;
40
+ /**
41
+ * Strict typed `Object.keys`
42
+ *
43
+ * @category Object
44
+ */
45
+ export declare function objectKeys<T extends object>(obj: T): (`${keyof T & undefined}` | `${keyof T & null}` | `${keyof T & string}` | `${keyof T & number}` | `${keyof T & false}` | `${keyof T & true}`)[];
46
+ /**
47
+ * Strict typed `Object.entries`
48
+ *
49
+ * @category Object
50
+ */
51
+ export declare function objectEntries<T extends object>(obj: T): [keyof T, T[keyof T]][];
52
+ /**
53
+ * Deep merge :P
54
+ *
55
+ * @category Object
56
+ */
57
+ export declare function deepMerge<T extends object = object, S extends object = T>(target: T, ...sources: S[]): DeepMerge<T, S>;
58
+ /**
59
+ * Create a new subset object by giving keys
60
+ *
61
+ * @category Object
62
+ */
63
+ export declare function objectPick<O, T extends keyof O>(obj: O, keys: T[], omitUndefined?: boolean): Pick<O, T>;
64
+ /**
65
+ * Clear undefined fields from an object. It mutates the object
66
+ *
67
+ * @category Object
68
+ */
69
+ export declare function clearUndefined<T extends object>(obj: T): T;
70
+ /**
71
+ * Determines whether an object has a property with the specified name
72
+ *
73
+ * @see https://eslint.org/docs/rules/no-prototype-builtins
74
+ * @category Object
75
+ */
76
+ export declare function hasOwnProperty<T>(obj: T, v: PropertyKey): any;
package/dist/index.mjs CHANGED
@@ -1 +1,56 @@
1
+ import { isObject, notNullish } from "@stacksjs/utils";
1
2
  export { Collection, collect } from "@stacksjs/collections";
3
+ export function objectMap(obj, fn) {
4
+ return Object.fromEntries(
5
+ Object.entries(obj).map(([k, v]) => fn(k, v)).filter(notNullish)
6
+ );
7
+ }
8
+ export function isKeyOf(obj, k) {
9
+ return k in obj;
10
+ }
11
+ export function objectKeys(obj) {
12
+ return Object.keys(obj);
13
+ }
14
+ export function objectEntries(obj) {
15
+ return Object.entries(obj);
16
+ }
17
+ export function deepMerge(target, ...sources) {
18
+ if (!sources.length)
19
+ return target;
20
+ const source = sources.shift();
21
+ if (source === void 0)
22
+ return target;
23
+ if (isMergeableObject(target) && isMergeableObject(source)) {
24
+ objectKeys(source).forEach((key) => {
25
+ if (isMergeableObject(source[key])) {
26
+ if (!target[key])
27
+ target[key] = {};
28
+ deepMerge(target[key], source[key]);
29
+ } else {
30
+ target[key] = source[key];
31
+ }
32
+ });
33
+ }
34
+ return deepMerge(target, ...sources);
35
+ }
36
+ function isMergeableObject(item) {
37
+ return isObject(item) && !Array.isArray(item);
38
+ }
39
+ export function objectPick(obj, keys, omitUndefined = false) {
40
+ return keys.reduce((n, k) => {
41
+ if (k in obj) {
42
+ if (!omitUndefined || obj[k] !== void 0)
43
+ n[k] = obj[k];
44
+ }
45
+ return n;
46
+ }, {});
47
+ }
48
+ export function clearUndefined(obj) {
49
+ Object.keys(obj).forEach((key) => obj[key] === void 0 ? delete obj[key] : {});
50
+ return obj;
51
+ }
52
+ export function hasOwnProperty(obj, v) {
53
+ if (obj == null)
54
+ return false;
55
+ return Object.prototype.hasOwnProperty.call(obj, v);
56
+ }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@stacksjs/objects",
3
3
  "type": "module",
4
- "version": "0.39.1",
5
- "packageManager": "pnpm@7.15.0",
4
+ "version": "0.41.0",
5
+ "packageManager": "pnpm@7.16.0",
6
6
  "description": "The Stacks objects.",
7
7
  "author": "Chris Breuer",
8
8
  "license": "MIT",
@@ -34,13 +34,13 @@
34
34
  ],
35
35
  "engines": {
36
36
  "node": ">=v18.12.1",
37
- "pnpm": ">=7.15.0"
37
+ "pnpm": ">=7.16.0"
38
38
  },
39
39
  "dependencies": {
40
- "@stacksjs/collections": "0.39.1"
40
+ "@stacksjs/collections": "0.41.0"
41
41
  },
42
42
  "devDependencies": {
43
- "mkdist": "^0.4.0",
43
+ "mkdist": "^1.0.0",
44
44
  "typescript": "^4.8.4"
45
45
  },
46
46
  "scripts": {