@helpers4/object 3.0.2 → 3.0.3

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/meta/api.json CHANGED
@@ -1,7 +1,48 @@
1
1
  {
2
2
  "category": "object",
3
- "version": "3.0.2",
3
+ "version": "3.0.3",
4
4
  "functions": [
5
+ {
6
+ "name": "camelCaseKeys",
7
+ "kind": "function",
8
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to camelCase. Handles snake_case, kebab-case, PascalCase, and space-separated\nkeys. Non-plain-object values (arrays' items aside) — `Date`, `Map`, `Set`, class instances,\nprimitives — are left untouched, only their position is walked into. An entry whose\ntransformed key is a prototype-polluting string (`__proto__`, `constructor`, `prototype`) is\nsilently skipped, same as the rest of `@helpers4/object`.",
9
+ "since": "3.0.3",
10
+ "signatures": [
11
+ {
12
+ "signature": "camelCaseKeys<T>(value: T): T",
13
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to camelCase. Handles snake_case, kebab-case, PascalCase, and space-separated\nkeys. Non-plain-object values (arrays' items aside) — `Date`, `Map`, `Set`, class instances,\nprimitives — are left untouched, only their position is walked into. An entry whose\ntransformed key is a prototype-polluting string (`__proto__`, `constructor`, `prototype`) is\nsilently skipped, same as the rest of `@helpers4/object`.",
14
+ "params": [
15
+ {
16
+ "name": "value",
17
+ "type": "T",
18
+ "description": "The object (or array of objects) to transform"
19
+ }
20
+ ],
21
+ "returns": {
22
+ "type": "T",
23
+ "description": "A new value with every plain-object key converted to camelCase"
24
+ },
25
+ "typeParameters": [
26
+ {
27
+ "name": "T"
28
+ }
29
+ ]
30
+ }
31
+ ],
32
+ "examples": [
33
+ {
34
+ "title": "Convert a snake_case API response",
35
+ "description": "Recursively converts every key, including nested objects, to camelCase.",
36
+ "code": "camelCaseKeys({ user_name: 'Alice', home_address: { zip_code: '12345' } })\n// => { userName: 'Alice', homeAddress: { zipCode: '12345' } }"
37
+ },
38
+ {
39
+ "title": "Arrays of objects are walked too",
40
+ "description": "Each object inside an array gets its keys converted.",
41
+ "code": "camelCaseKeys({ user_list: [{ first_name: 'A' }] })\n// => { userList: [{ firstName: 'A' }] }"
42
+ }
43
+ ],
44
+ "sourceFile": "camelCaseKeys.ts"
45
+ },
5
46
  {
6
47
  "name": "clone",
7
48
  "kind": "function",
@@ -603,6 +644,42 @@
603
644
  ],
604
645
  "sourceFile": "isNonEmpty.ts"
605
646
  },
647
+ {
648
+ "name": "kebabCaseKeys",
649
+ "kind": "function",
650
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to kebab-case. Handles snake_case, camelCase, PascalCase, and space-separated\nkeys. Non-plain-object values — `Date`, `Map`, `Set`, class instances, primitives — are left\nuntouched, only their position is walked into. An entry whose transformed key is a\nprototype-polluting string (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.",
651
+ "since": "3.0.3",
652
+ "signatures": [
653
+ {
654
+ "signature": "kebabCaseKeys<T>(value: T): T",
655
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to kebab-case. Handles snake_case, camelCase, PascalCase, and space-separated\nkeys. Non-plain-object values — `Date`, `Map`, `Set`, class instances, primitives — are left\nuntouched, only their position is walked into. An entry whose transformed key is a\nprototype-polluting string (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.",
656
+ "params": [
657
+ {
658
+ "name": "value",
659
+ "type": "T",
660
+ "description": "The object (or array of objects) to transform"
661
+ }
662
+ ],
663
+ "returns": {
664
+ "type": "T",
665
+ "description": "A new value with every plain-object key converted to kebab-case"
666
+ },
667
+ "typeParameters": [
668
+ {
669
+ "name": "T"
670
+ }
671
+ ]
672
+ }
673
+ ],
674
+ "examples": [
675
+ {
676
+ "title": "Convert object keys for a kebab-case config format",
677
+ "description": "Recursively converts every key, including nested objects, to kebab-case.",
678
+ "code": "kebabCaseKeys({ userName: 'Alice', homeAddress: { zipCode: '12345' } })\n// => { 'user-name': 'Alice', 'home-address': { 'zip-code': '12345' } }"
679
+ }
680
+ ],
681
+ "sourceFile": "kebabCaseKeys.ts"
682
+ },
606
683
  {
607
684
  "name": "map",
608
685
  "kind": "function",
@@ -671,6 +748,64 @@
671
748
  ],
672
749
  "sourceFile": "map.ts"
673
750
  },
751
+ {
752
+ "name": "mapDeep",
753
+ "kind": "function",
754
+ "description": "Recursively transforms the keys and/or values of a plain object — the deep counterpart to\nmap, which only transforms the top level. Descends into nested plain objects and\narrays of them; `Date`, `Map`, `Set`, class instances, and primitives are left untouched\n(only their position is walked into, matching cloneDeep's notion of what counts\nas a plain-data node worth recursing into).\n\nBoth callbacks are optional and default to identity (no transformation). `mapKey` is called\nwith the *original* key and value (before any recursive value transform); `mapValue` receives\nthe already-recursed value. Entries whose mapped key is a prototype-polluting string\n(`__proto__`, `constructor`, `prototype`) are silently skipped, same as map.\n\nArray elements also go through `mapValue` (with their stringified index as `key`, since\narrays have no property keys of their own) — so values inside a plain array, not just object\nproperties, get transformed too. `mapKey` is never called for array elements, since there is\nno key to rename.",
755
+ "since": "3.0.3",
756
+ "signatures": [
757
+ {
758
+ "signature": "mapDeep<T>(obj: T, mapValue?: function, mapKey?: function): T",
759
+ "description": "Recursively transforms the keys and/or values of a plain object — the deep counterpart to\nmap, which only transforms the top level. Descends into nested plain objects and\narrays of them; `Date`, `Map`, `Set`, class instances, and primitives are left untouched\n(only their position is walked into, matching cloneDeep's notion of what counts\nas a plain-data node worth recursing into).\n\nBoth callbacks are optional and default to identity (no transformation). `mapKey` is called\nwith the *original* key and value (before any recursive value transform); `mapValue` receives\nthe already-recursed value. Entries whose mapped key is a prototype-polluting string\n(`__proto__`, `constructor`, `prototype`) are silently skipped, same as map.\n\nArray elements also go through `mapValue` (with their stringified index as `key`, since\narrays have no property keys of their own) — so values inside a plain array, not just object\nproperties, get transformed too. `mapKey` is never called for array elements, since there is\nno key to rename.",
760
+ "params": [
761
+ {
762
+ "name": "obj",
763
+ "type": "T",
764
+ "description": "The value to transform (typically an object, or an array of objects)"
765
+ },
766
+ {
767
+ "name": "mapValue",
768
+ "type": "function",
769
+ "description": "Callback called with `(value, key)` for each entry's (already-recursed) value.\n For array elements, `key` is the element's index as a string. Defaults to identity.",
770
+ "optional": true
771
+ },
772
+ {
773
+ "name": "mapKey",
774
+ "type": "function",
775
+ "description": "Callback called with `(key, value)` for each object entry. Defaults to identity.",
776
+ "optional": true
777
+ }
778
+ ],
779
+ "returns": {
780
+ "type": "T",
781
+ "description": "A new value with every plain-object key/value transformed"
782
+ },
783
+ "typeParameters": [
784
+ {
785
+ "name": "T"
786
+ }
787
+ ]
788
+ }
789
+ ],
790
+ "examples": [
791
+ {
792
+ "title": "Transform every key, recursively",
793
+ "description": "Unlike map(), mapDeep() walks into nested objects and arrays of objects.",
794
+ "code": "mapDeep({ a: { b: 1 } }, undefined, key => key.toUpperCase())\n// => { A: { B: 1 } }"
795
+ },
796
+ {
797
+ "title": "Transform every value, recursively",
798
+ "description": "Values are visited after their own nested content has already been transformed.",
799
+ "code": "mapDeep({ a: { b: 1, c: 2 } }, v => typeof v === 'number' ? v * 10 : v)\n// => { a: { b: 10, c: 20 } }"
800
+ },
801
+ {
802
+ "title": "Transform values inside arrays too",
803
+ "description": "Array elements are visited by mapValue as well, keyed by their stringified index.",
804
+ "code": "mapDeep({ tags: [1, 2, 3] }, v => typeof v === 'number' ? v * 10 : v)\n// => { tags: [10, 20, 30] }"
805
+ }
806
+ ],
807
+ "sourceFile": "mapDeep.ts"
808
+ },
674
809
  {
675
810
  "name": "mergeDeep",
676
811
  "kind": "function",
@@ -882,6 +1017,42 @@
882
1017
  ],
883
1018
  "sourceFile": "parsePropertyPath.ts"
884
1019
  },
1020
+ {
1021
+ "name": "pascalCaseKeys",
1022
+ "kind": "function",
1023
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to PascalCase. Handles camelCase, snake_case, kebab-case, and space-separated\nkeys. Non-plain-object values — `Date`, `Map`, `Set`, class instances, primitives — are left\nuntouched, only their position is walked into. An entry whose transformed key is a\nprototype-polluting string (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.",
1024
+ "since": "3.0.3",
1025
+ "signatures": [
1026
+ {
1027
+ "signature": "pascalCaseKeys<T>(value: T): T",
1028
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to PascalCase. Handles camelCase, snake_case, kebab-case, and space-separated\nkeys. Non-plain-object values — `Date`, `Map`, `Set`, class instances, primitives — are left\nuntouched, only their position is walked into. An entry whose transformed key is a\nprototype-polluting string (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.",
1029
+ "params": [
1030
+ {
1031
+ "name": "value",
1032
+ "type": "T",
1033
+ "description": "The object (or array of objects) to transform"
1034
+ }
1035
+ ],
1036
+ "returns": {
1037
+ "type": "T",
1038
+ "description": "A new value with every plain-object key converted to PascalCase"
1039
+ },
1040
+ "typeParameters": [
1041
+ {
1042
+ "name": "T"
1043
+ }
1044
+ ]
1045
+ }
1046
+ ],
1047
+ "examples": [
1048
+ {
1049
+ "title": "Convert object keys to PascalCase (e.g. for a C#/JSON.NET consumer)",
1050
+ "description": "Recursively converts every key, including nested objects, to PascalCase.",
1051
+ "code": "pascalCaseKeys({ user_name: 'Alice', home_address: { zip_code: '12345' } })\n// => { UserName: 'Alice', HomeAddress: { ZipCode: '12345' } }"
1052
+ }
1053
+ ],
1054
+ "sourceFile": "pascalCaseKeys.ts"
1055
+ },
885
1056
  {
886
1057
  "name": "pick",
887
1058
  "kind": "function",
@@ -1223,6 +1394,121 @@
1223
1394
  ],
1224
1395
  "sourceFile": "set.ts"
1225
1396
  },
1397
+ {
1398
+ "name": "snakeCaseKeys",
1399
+ "kind": "function",
1400
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to snake_case. Handles camelCase, PascalCase, kebab-case, and space-separated\nkeys. Non-plain-object values — `Date`, `Map`, `Set`, class instances, primitives — are left\nuntouched, only their position is walked into. An entry whose transformed key is a\nprototype-polluting string (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.",
1401
+ "since": "3.0.3",
1402
+ "signatures": [
1403
+ {
1404
+ "signature": "snakeCaseKeys<T>(value: T): T",
1405
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to snake_case. Handles camelCase, PascalCase, kebab-case, and space-separated\nkeys. Non-plain-object values — `Date`, `Map`, `Set`, class instances, primitives — are left\nuntouched, only their position is walked into. An entry whose transformed key is a\nprototype-polluting string (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.",
1406
+ "params": [
1407
+ {
1408
+ "name": "value",
1409
+ "type": "T",
1410
+ "description": "The object (or array of objects) to transform"
1411
+ }
1412
+ ],
1413
+ "returns": {
1414
+ "type": "T",
1415
+ "description": "A new value with every plain-object key converted to snake_case"
1416
+ },
1417
+ "typeParameters": [
1418
+ {
1419
+ "name": "T"
1420
+ }
1421
+ ]
1422
+ }
1423
+ ],
1424
+ "examples": [
1425
+ {
1426
+ "title": "Convert a camelCase object for a snake_case API",
1427
+ "description": "Recursively converts every key, including nested objects, to snake_case.",
1428
+ "code": "snakeCaseKeys({ userName: 'Alice', homeAddress: { zipCode: '12345' } })\n// => { user_name: 'Alice', home_address: { zip_code: '12345' } }"
1429
+ }
1430
+ ],
1431
+ "sourceFile": "snakeCaseKeys.ts"
1432
+ },
1433
+ {
1434
+ "name": "sortKeys",
1435
+ "kind": "function",
1436
+ "description": "Creates a new object with the same entries as the input, but with its own keys sorted.\nShallow only — nested objects are copied as-is, their keys are not re-sorted.\nKey order matters for things like `JSON.stringify` diffs and snapshot stability; this does\nnot change equality (`{a:1,b:2}` and `{b:2,a:1}` are already equal), just iteration/serialization order.\nNote: integer-index-like keys (`\"0\"`, `\"1\"`, `\"42\"`...) are always iterated first, in numeric\norder, by the JS engine itself — no object key ordering can override that language behavior.\nA prototype-polluting key (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.",
1437
+ "since": "3.0.3",
1438
+ "signatures": [
1439
+ {
1440
+ "signature": "sortKeys<T extends Record<string, unknown>>(obj: T, compareFn?: function): T",
1441
+ "description": "Creates a new object with the same entries as the input, but with its own keys sorted.\nShallow only — nested objects are copied as-is, their keys are not re-sorted.\nKey order matters for things like `JSON.stringify` diffs and snapshot stability; this does\nnot change equality (`{a:1,b:2}` and `{b:2,a:1}` are already equal), just iteration/serialization order.\nNote: integer-index-like keys (`\"0\"`, `\"1\"`, `\"42\"`...) are always iterated first, in numeric\norder, by the JS engine itself — no object key ordering can override that language behavior.\nA prototype-polluting key (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.",
1442
+ "params": [
1443
+ {
1444
+ "name": "obj",
1445
+ "type": "T",
1446
+ "description": "The object whose keys to sort"
1447
+ },
1448
+ {
1449
+ "name": "compareFn",
1450
+ "type": "function",
1451
+ "description": "Optional custom comparator, passed directly to `Array.prototype.sort`",
1452
+ "optional": true
1453
+ }
1454
+ ],
1455
+ "returns": {
1456
+ "type": "T",
1457
+ "description": "A new object with the same entries, own keys in sorted order"
1458
+ },
1459
+ "typeParameters": [
1460
+ {
1461
+ "name": "T",
1462
+ "constraint": "Record<string, unknown>"
1463
+ }
1464
+ ]
1465
+ }
1466
+ ],
1467
+ "examples": [
1468
+ {
1469
+ "title": "Sort object keys alphabetically",
1470
+ "description": "Useful for stable JSON.stringify output or predictable snapshot tests.",
1471
+ "code": "sortKeys({ b: 2, a: 1, c: 3 })\n// => { a: 1, b: 2, c: 3 }"
1472
+ }
1473
+ ],
1474
+ "sourceFile": "sortKeys.ts"
1475
+ },
1476
+ {
1477
+ "name": "titleCaseKeys",
1478
+ "kind": "function",
1479
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to Title Case. Handles camelCase, snake_case, kebab-case, and space-separated\nkeys. Non-plain-object values — `Date`, `Map`, `Set`, class instances, primitives — are left\nuntouched, only their position is walked into. An entry whose transformed key is a\nprototype-polluting string (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.\n\nNote: unlike the other `*CaseKeys` variants, `titleCase` joins words with spaces (e.g.\n`'User Name'`) — those keys are only usable via bracket access (`obj['User Name']`), not dot\nnotation. Useful for display-facing structures (form labels, table headers), not wire formats.",
1480
+ "since": "3.0.3",
1481
+ "signatures": [
1482
+ {
1483
+ "signature": "titleCaseKeys<T>(value: T): T",
1484
+ "description": "Recursively transforms every key of a plain object (including keys nested inside arrays and\nnested objects) to Title Case. Handles camelCase, snake_case, kebab-case, and space-separated\nkeys. Non-plain-object values — `Date`, `Map`, `Set`, class instances, primitives — are left\nuntouched, only their position is walked into. An entry whose transformed key is a\nprototype-polluting string (`__proto__`, `constructor`, `prototype`) is silently skipped,\nsame as the rest of `@helpers4/object`.\n\nNote: unlike the other `*CaseKeys` variants, `titleCase` joins words with spaces (e.g.\n`'User Name'`) — those keys are only usable via bracket access (`obj['User Name']`), not dot\nnotation. Useful for display-facing structures (form labels, table headers), not wire formats.",
1485
+ "params": [
1486
+ {
1487
+ "name": "value",
1488
+ "type": "T",
1489
+ "description": "The object (or array of objects) to transform"
1490
+ }
1491
+ ],
1492
+ "returns": {
1493
+ "type": "T",
1494
+ "description": "A new value with every plain-object key converted to Title Case"
1495
+ },
1496
+ "typeParameters": [
1497
+ {
1498
+ "name": "T"
1499
+ }
1500
+ ]
1501
+ }
1502
+ ],
1503
+ "examples": [
1504
+ {
1505
+ "title": "Convert object keys into display-friendly labels",
1506
+ "description": "Recursively converts every key to Title Case — useful for form labels or table headers.",
1507
+ "code": "titleCaseKeys({ user_name: 'Alice', home_address: { zip_code: '12345' } })\n// => { 'User Name': 'Alice', 'Home Address': { 'Zip Code': '12345' } }"
1508
+ }
1509
+ ],
1510
+ "sourceFile": "titleCaseKeys.ts"
1511
+ },
1226
1512
  {
1227
1513
  "name": "unflatten",
1228
1514
  "kind": "function",
@@ -1,6 +1,21 @@
1
1
  {
2
2
  "category": "object",
3
3
  "functions": [
4
+ {
5
+ "name": "camelCaseKeys",
6
+ "examples": [
7
+ {
8
+ "title": "Convert a snake_case API response",
9
+ "description": "Recursively converts every key, including nested objects, to camelCase.",
10
+ "code": "camelCaseKeys({ user_name: 'Alice', home_address: { zip_code: '12345' } })\n// => { userName: 'Alice', homeAddress: { zipCode: '12345' } }"
11
+ },
12
+ {
13
+ "title": "Arrays of objects are walked too",
14
+ "description": "Each object inside an array gets its keys converted.",
15
+ "code": "camelCaseKeys({ user_list: [{ first_name: 'A' }] })\n// => { userList: [{ firstName: 'A' }] }"
16
+ }
17
+ ]
18
+ },
4
19
  {
5
20
  "name": "clone",
6
21
  "examples": [
@@ -176,6 +191,16 @@
176
191
  }
177
192
  ]
178
193
  },
194
+ {
195
+ "name": "kebabCaseKeys",
196
+ "examples": [
197
+ {
198
+ "title": "Convert object keys for a kebab-case config format",
199
+ "description": "Recursively converts every key, including nested objects, to kebab-case.",
200
+ "code": "kebabCaseKeys({ userName: 'Alice', homeAddress: { zipCode: '12345' } })\n// => { 'user-name': 'Alice', 'home-address': { 'zip-code': '12345' } }"
201
+ }
202
+ ]
203
+ },
179
204
  {
180
205
  "name": "map",
181
206
  "examples": [
@@ -196,6 +221,26 @@
196
221
  }
197
222
  ]
198
223
  },
224
+ {
225
+ "name": "mapDeep",
226
+ "examples": [
227
+ {
228
+ "title": "Transform every key, recursively",
229
+ "description": "Unlike map(), mapDeep() walks into nested objects and arrays of objects.",
230
+ "code": "mapDeep({ a: { b: 1 } }, undefined, key => key.toUpperCase())\n// => { A: { B: 1 } }"
231
+ },
232
+ {
233
+ "title": "Transform every value, recursively",
234
+ "description": "Values are visited after their own nested content has already been transformed.",
235
+ "code": "mapDeep({ a: { b: 1, c: 2 } }, v => typeof v === 'number' ? v * 10 : v)\n// => { a: { b: 10, c: 20 } }"
236
+ },
237
+ {
238
+ "title": "Transform values inside arrays too",
239
+ "description": "Array elements are visited by mapValue as well, keyed by their stringified index.",
240
+ "code": "mapDeep({ tags: [1, 2, 3] }, v => typeof v === 'number' ? v * 10 : v)\n// => { tags: [10, 20, 30] }"
241
+ }
242
+ ]
243
+ },
199
244
  {
200
245
  "name": "mergeDeep",
201
246
  "examples": [
@@ -251,6 +296,16 @@
251
296
  }
252
297
  ]
253
298
  },
299
+ {
300
+ "name": "pascalCaseKeys",
301
+ "examples": [
302
+ {
303
+ "title": "Convert object keys to PascalCase (e.g. for a C#/JSON.NET consumer)",
304
+ "description": "Recursively converts every key, including nested objects, to PascalCase.",
305
+ "code": "pascalCaseKeys({ user_name: 'Alice', home_address: { zip_code: '12345' } })\n// => { UserName: 'Alice', HomeAddress: { ZipCode: '12345' } }"
306
+ }
307
+ ]
308
+ },
254
309
  {
255
310
  "name": "pick",
256
311
  "examples": [
@@ -331,6 +386,36 @@
331
386
  }
332
387
  ]
333
388
  },
389
+ {
390
+ "name": "snakeCaseKeys",
391
+ "examples": [
392
+ {
393
+ "title": "Convert a camelCase object for a snake_case API",
394
+ "description": "Recursively converts every key, including nested objects, to snake_case.",
395
+ "code": "snakeCaseKeys({ userName: 'Alice', homeAddress: { zipCode: '12345' } })\n// => { user_name: 'Alice', home_address: { zip_code: '12345' } }"
396
+ }
397
+ ]
398
+ },
399
+ {
400
+ "name": "sortKeys",
401
+ "examples": [
402
+ {
403
+ "title": "Sort object keys alphabetically",
404
+ "description": "Useful for stable JSON.stringify output or predictable snapshot tests.",
405
+ "code": "sortKeys({ b: 2, a: 1, c: 3 })\n// => { a: 1, b: 2, c: 3 }"
406
+ }
407
+ ]
408
+ },
409
+ {
410
+ "name": "titleCaseKeys",
411
+ "examples": [
412
+ {
413
+ "title": "Convert object keys into display-friendly labels",
414
+ "description": "Recursively converts every key to Title Case — useful for form labels or table headers.",
415
+ "code": "titleCaseKeys({ user_name: 'Alice', home_address: { zip_code: '12345' } })\n// => { 'User Name': 'Alice', 'Home Address': { 'Zip Code': '12345' } }"
416
+ }
417
+ ]
418
+ },
334
419
  {
335
420
  "name": "unflatten",
336
421
  "examples": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helpers4/object",
3
- "version": "3.0.2",
3
+ "version": "3.0.3",
4
4
  "description": "A set of helpers in TS/JS, compatible with tree-shaking, for object.",
5
5
  "author": "baxyz <baxy@etik.com>",
6
6
  "license": "LGPL-3.0",
@@ -27,6 +27,7 @@
27
27
  "keywords": [
28
28
  "helpers",
29
29
  "object",
30
+ "camelCaseKeys",
30
31
  "clone",
31
32
  "cloneDeep",
32
33
  "compact",
@@ -39,16 +40,22 @@
39
40
  "invert",
40
41
  "isEmpty",
41
42
  "isNonEmpty",
43
+ "kebabCaseKeys",
42
44
  "map",
45
+ "mapDeep",
43
46
  "mergeDeep",
44
47
  "omit",
45
48
  "omitBy",
46
49
  "parsePropertyPath",
50
+ "pascalCaseKeys",
47
51
  "pick",
48
52
  "pickBy",
49
53
  "removeUndefinedNull",
50
54
  "safeJsonParse",
51
55
  "set",
56
+ "snakeCaseKeys",
57
+ "sortKeys",
58
+ "titleCaseKeys",
52
59
  "unflatten",
53
60
  "unset",
54
61
  "update"