@h3ravel/support 0.14.3 → 0.15.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.cjs CHANGED
@@ -461,23 +461,6 @@ const toHumanTime = (seconds = 0, worded = false) => {
461
461
 
462
462
  //#endregion
463
463
  //#region src/Helpers/Obj.ts
464
- var Obj_exports = /* @__PURE__ */ __export({
465
- Obj: () => Obj,
466
- data_fill: () => data_fill,
467
- data_forget: () => data_forget,
468
- data_get: () => data_get,
469
- data_set: () => data_set,
470
- dot: () => dot,
471
- extractProperties: () => extractProperties,
472
- getValue: () => getValue,
473
- modObj: () => modObj,
474
- safeDot: () => safeDot,
475
- setNested: () => setNested,
476
- slugifyKeys: () => slugifyKeys,
477
- toCssClasses: () => toCssClasses,
478
- toCssStyles: () => toCssStyles,
479
- undot: () => undot
480
- });
481
464
  /**
482
465
  * Flattens a nested object into a single-level object
483
466
  * with dot-separated keys.
@@ -737,6 +720,15 @@ function data_forget(obj, path) {
737
720
  }
738
721
  }
739
722
  }
723
+ /**
724
+ * Checks if a value is a plain object (not array, function, etc.)
725
+ *
726
+ * @param value
727
+ * @returns
728
+ */
729
+ function isPlainObject(value) {
730
+ return value !== null && typeof value === "object" && !Array.isArray(value) && Object.prototype.toString.call(value) === "[object Object]";
731
+ }
740
732
  var Obj = class Obj {
741
733
  /**
742
734
  * Check if the value is a non-null object (associative/accessible).
@@ -757,6 +749,27 @@ var Obj = class Obj {
757
749
  return obj;
758
750
  }
759
751
  /**
752
+ * Deeply merges two or more objects.
753
+ * - Arrays are replaced (not concatenated)
754
+ * - Objects are merged recursively
755
+ * - Non-object values overwrite previous ones
756
+ *
757
+ * @param objects
758
+ * @returns
759
+ */
760
+ static deepMerge(...objects) {
761
+ const result = {};
762
+ for (const obj of objects) {
763
+ if (!obj || typeof obj !== "object") continue;
764
+ for (const [key, value] of Object.entries(obj)) {
765
+ const existing = result[key];
766
+ if (isPlainObject(existing) && isPlainObject(value)) result[key] = Obj.deepMerge(existing, value);
767
+ else result[key] = value;
768
+ }
769
+ }
770
+ return result;
771
+ }
772
+ /**
760
773
  * Split object into [keys, values]
761
774
  */
762
775
  static divide(obj) {
@@ -1546,6 +1559,15 @@ var DateTime = class DateTime extends TimeClass {
1546
1559
  return this.startOf(unit);
1547
1560
  }
1548
1561
  /**
1562
+ * Set the timezone for the instance
1563
+ *
1564
+ * @param timezone
1565
+ * @returns
1566
+ */
1567
+ setTimezone(timezone$1, keepLocalTime) {
1568
+ return new DateTime(this.tz(timezone$1, keepLocalTime));
1569
+ }
1570
+ /**
1549
1571
  * End time of a specific unit.
1550
1572
  *
1551
1573
  * @returns
@@ -1600,7 +1622,7 @@ var DateTime = class DateTime extends TimeClass {
1600
1622
  * @return {Date} object
1601
1623
  */
1602
1624
  static fromTimestamp(timestamp) {
1603
- return /* @__PURE__ */ new Date(timestamp * 1e3);
1625
+ return new DateTime(timestamp * 1e3);
1604
1626
  }
1605
1627
  /**
1606
1628
  * Get current time instance.
@@ -6202,12 +6224,6 @@ Object.defineProperty(exports, 'Crypto', {
6202
6224
  }
6203
6225
  });
6204
6226
  exports.DateTime = DateTime;
6205
- Object.defineProperty(exports, 'DumpDie', {
6206
- enumerable: true,
6207
- get: function () {
6208
- return DumpDie_exports;
6209
- }
6210
- });
6211
6227
  exports.HtmlString = HtmlString;
6212
6228
  exports.InvalidArgumentException = InvalidArgumentException;
6213
6229
  exports.Mode = Mode;
@@ -6217,12 +6233,7 @@ Object.defineProperty(exports, 'Number', {
6217
6233
  return Number_exports;
6218
6234
  }
6219
6235
  });
6220
- Object.defineProperty(exports, 'Obj', {
6221
- enumerable: true,
6222
- get: function () {
6223
- return Obj_exports;
6224
- }
6225
- });
6236
+ exports.Obj = Obj;
6226
6237
  exports.RuntimeException = RuntimeException;
6227
6238
  exports.Str = Str;
6228
6239
  exports.Stringable = Stringable;
@@ -6245,6 +6256,7 @@ exports.getValue = getValue;
6245
6256
  exports.hash = hash;
6246
6257
  exports.hmac = hmac;
6247
6258
  exports.humanize = humanize;
6259
+ exports.isPlainObject = isPlainObject;
6248
6260
  exports.loadHelpers = loadHelpers;
6249
6261
  exports.modObj = modObj;
6250
6262
  exports.random = random;
package/dist/index.d.cts CHANGED
@@ -240,7 +240,7 @@ declare const toBytes: (bytes?: number, decimals?: number, bits?: boolean) => st
240
240
  */
241
241
  declare const toHumanTime: (seconds?: number, worded?: boolean) => string;
242
242
  declare namespace Obj_d_exports {
243
- export { Obj, data_fill, data_forget, data_get, data_set, dot, extractProperties, getValue, modObj, safeDot, setNested, slugifyKeys, toCssClasses, toCssStyles, undot };
243
+ export { Obj, data_fill, data_forget, data_get, data_set, dot, extractProperties, getValue, isPlainObject, modObj, safeDot, setNested, slugifyKeys, toCssClasses, toCssStyles, undot };
244
244
  }
245
245
  /**
246
246
  * Flattens a nested object into a single-level object
@@ -369,6 +369,13 @@ declare function data_fill(obj: Record<string, any>, path: string | string[], va
369
369
  * Remove a key from an object using dot notation.
370
370
  */
371
371
  declare function data_forget(obj: Record<string, any>, path: string | string[]): void;
372
+ /**
373
+ * Checks if a value is a plain object (not array, function, etc.)
374
+ *
375
+ * @param value
376
+ * @returns
377
+ */
378
+ declare function isPlainObject(value: any): value is Record<string, any>;
372
379
  declare class Obj {
373
380
  /**
374
381
  * Check if the value is a non-null object (associative/accessible).
@@ -380,6 +387,16 @@ declare class Obj {
380
387
  * Returns a new object (does not mutate original).
381
388
  */
382
389
  static add<T extends Record<string, any>, K extends string, V>(obj: T, key: K, value: V): T & Record<K, V>;
390
+ /**
391
+ * Deeply merges two or more objects.
392
+ * - Arrays are replaced (not concatenated)
393
+ * - Objects are merged recursively
394
+ * - Non-object values overwrite previous ones
395
+ *
396
+ * @param objects
397
+ * @returns
398
+ */
399
+ static deepMerge<T extends Record<string, any>>(...objects: (Partial<T> | undefined | null)[]): T;
383
400
  /**
384
401
  * Split object into [keys, values]
385
402
  */
@@ -467,7 +484,7 @@ declare class Arr {
467
484
  * Arr.divide(['a','b']) -> [[0,1], ['a','b']]
468
485
  * Arr.divide({x:1,y:2}) -> [['x','y'], [1,2]]
469
486
  */
470
- static divide<A>(input: A[] | Record<string, A>): (A[] | number[])[] | (string[] | A[])[];
487
+ static divide<A>(input: A[] | Record<string, A>): (A[] | number[])[] | (A[] | string[])[];
471
488
  /**
472
489
  * Flatten a nested array/object structure into a single-level object
473
490
  * with dot-notated keys.
@@ -818,6 +835,13 @@ declare class DateTime extends TimeClass {
818
835
  * @returns
819
836
  */
820
837
  start(unit?: OpUnitType): dayjs.Dayjs;
838
+ /**
839
+ * Set the timezone for the instance
840
+ *
841
+ * @param timezone
842
+ * @returns
843
+ */
844
+ setTimezone(timezone?: string | undefined, keepLocalTime?: boolean | undefined): DateTime;
821
845
  /**
822
846
  * End time of a specific unit.
823
847
  *
@@ -854,7 +878,7 @@ declare class DateTime extends TimeClass {
854
878
  *
855
879
  * @return {Date} object
856
880
  */
857
- static fromTimestamp(timestamp: number): Date;
881
+ static fromTimestamp(timestamp: number): DateTime;
858
882
  /**
859
883
  * Get current time instance.
860
884
  *
@@ -3195,4 +3219,4 @@ declare function loadHelpers(target?: any): void;
3195
3219
  */
3196
3220
  declare function cleanHelpers(target?: any): void;
3197
3221
  //#endregion
3198
- export { Arr, Arrayable, Callback, CamelToSnakeCase, Crypto_d_exports as Crypto, DateTime, DotPath, DumpDie_d_exports as DumpDie, ExcerptOptions, Fallback, Function, GlobalHelpers, HtmlString, HtmlStringType, InvalidArgumentException, JsonSerializable, Jsonable, KeysToSnakeCase, Mode, Number_d_exports as Number, Obj_d_exports as Obj, RuntimeException, SnakeToCamelCase, SnakeToTitleCase, Str, Stringable, TGeneric, Value, XGeneric, abbreviate, base64Decode, base64Encode, caesarCipher, checksum, cleanHelpers, data_fill, data_forget, data_get, data_set, dd, dot, dump, extractProperties, format, getValue, hash, hmac, humanize, loadHelpers, modObj, random, randomColor, randomPassword, randomSecure, safeDot, secureToken, setNested, slugifyKeys, str, toBytes, toCssClasses, toCssStyles, toHumanTime, undot, uuid, verifyChecksum, xor };
3222
+ export { Arr, Arrayable, Callback, CamelToSnakeCase, Crypto_d_exports as Crypto, DateTime, DotPath, ExcerptOptions, Fallback, Function, GlobalHelpers, HtmlString, HtmlStringType, InvalidArgumentException, JsonSerializable, Jsonable, KeysToSnakeCase, Mode, Number_d_exports as Number, Obj, RuntimeException, SnakeToCamelCase, SnakeToTitleCase, Str, Stringable, TGeneric, Value, XGeneric, abbreviate, base64Decode, base64Encode, caesarCipher, checksum, cleanHelpers, data_fill, data_forget, data_get, data_set, dd, dot, dump, extractProperties, format, getValue, hash, hmac, humanize, isPlainObject, loadHelpers, modObj, random, randomColor, randomPassword, randomSecure, safeDot, secureToken, setNested, slugifyKeys, str, toBytes, toCssClasses, toCssStyles, toHumanTime, undot, uuid, verifyChecksum, xor };
package/dist/index.d.ts CHANGED
@@ -238,7 +238,7 @@ declare const toBytes: (bytes?: number, decimals?: number, bits?: boolean) => st
238
238
  */
239
239
  declare const toHumanTime: (seconds?: number, worded?: boolean) => string;
240
240
  declare namespace Obj_d_exports {
241
- export { Obj, data_fill, data_forget, data_get, data_set, dot, extractProperties, getValue, modObj, safeDot, setNested, slugifyKeys, toCssClasses, toCssStyles, undot };
241
+ export { Obj, data_fill, data_forget, data_get, data_set, dot, extractProperties, getValue, isPlainObject, modObj, safeDot, setNested, slugifyKeys, toCssClasses, toCssStyles, undot };
242
242
  }
243
243
  /**
244
244
  * Flattens a nested object into a single-level object
@@ -367,6 +367,13 @@ declare function data_fill(obj: Record<string, any>, path: string | string[], va
367
367
  * Remove a key from an object using dot notation.
368
368
  */
369
369
  declare function data_forget(obj: Record<string, any>, path: string | string[]): void;
370
+ /**
371
+ * Checks if a value is a plain object (not array, function, etc.)
372
+ *
373
+ * @param value
374
+ * @returns
375
+ */
376
+ declare function isPlainObject(value: any): value is Record<string, any>;
370
377
  declare class Obj {
371
378
  /**
372
379
  * Check if the value is a non-null object (associative/accessible).
@@ -378,6 +385,16 @@ declare class Obj {
378
385
  * Returns a new object (does not mutate original).
379
386
  */
380
387
  static add<T extends Record<string, any>, K extends string, V>(obj: T, key: K, value: V): T & Record<K, V>;
388
+ /**
389
+ * Deeply merges two or more objects.
390
+ * - Arrays are replaced (not concatenated)
391
+ * - Objects are merged recursively
392
+ * - Non-object values overwrite previous ones
393
+ *
394
+ * @param objects
395
+ * @returns
396
+ */
397
+ static deepMerge<T extends Record<string, any>>(...objects: (Partial<T> | undefined | null)[]): T;
381
398
  /**
382
399
  * Split object into [keys, values]
383
400
  */
@@ -465,7 +482,7 @@ declare class Arr {
465
482
  * Arr.divide(['a','b']) -> [[0,1], ['a','b']]
466
483
  * Arr.divide({x:1,y:2}) -> [['x','y'], [1,2]]
467
484
  */
468
- static divide<A>(input: A[] | Record<string, A>): (A[] | number[])[] | (string[] | A[])[];
485
+ static divide<A>(input: A[] | Record<string, A>): (A[] | number[])[] | (A[] | string[])[];
469
486
  /**
470
487
  * Flatten a nested array/object structure into a single-level object
471
488
  * with dot-notated keys.
@@ -816,6 +833,13 @@ declare class DateTime extends TimeClass {
816
833
  * @returns
817
834
  */
818
835
  start(unit?: OpUnitType): dayjs.Dayjs;
836
+ /**
837
+ * Set the timezone for the instance
838
+ *
839
+ * @param timezone
840
+ * @returns
841
+ */
842
+ setTimezone(timezone?: string | undefined, keepLocalTime?: boolean | undefined): DateTime;
819
843
  /**
820
844
  * End time of a specific unit.
821
845
  *
@@ -852,7 +876,7 @@ declare class DateTime extends TimeClass {
852
876
  *
853
877
  * @return {Date} object
854
878
  */
855
- static fromTimestamp(timestamp: number): Date;
879
+ static fromTimestamp(timestamp: number): DateTime;
856
880
  /**
857
881
  * Get current time instance.
858
882
  *
@@ -3193,4 +3217,4 @@ declare function loadHelpers(target?: any): void;
3193
3217
  */
3194
3218
  declare function cleanHelpers(target?: any): void;
3195
3219
  //#endregion
3196
- export { Arr, Arrayable, Callback, CamelToSnakeCase, Crypto_d_exports as Crypto, DateTime, DotPath, DumpDie_d_exports as DumpDie, ExcerptOptions, Fallback, Function, GlobalHelpers, HtmlString, HtmlStringType, InvalidArgumentException, JsonSerializable, Jsonable, KeysToSnakeCase, Mode, Number_d_exports as Number, Obj_d_exports as Obj, RuntimeException, SnakeToCamelCase, SnakeToTitleCase, Str, Stringable, TGeneric, Value, XGeneric, abbreviate, base64Decode, base64Encode, caesarCipher, checksum, cleanHelpers, data_fill, data_forget, data_get, data_set, dd, dot, dump, extractProperties, format, getValue, hash, hmac, humanize, loadHelpers, modObj, random, randomColor, randomPassword, randomSecure, safeDot, secureToken, setNested, slugifyKeys, str, toBytes, toCssClasses, toCssStyles, toHumanTime, undot, uuid, verifyChecksum, xor };
3220
+ export { Arr, Arrayable, Callback, CamelToSnakeCase, Crypto_d_exports as Crypto, DateTime, DotPath, ExcerptOptions, Fallback, Function, GlobalHelpers, HtmlString, HtmlStringType, InvalidArgumentException, JsonSerializable, Jsonable, KeysToSnakeCase, Mode, Number_d_exports as Number, Obj, RuntimeException, SnakeToCamelCase, SnakeToTitleCase, Str, Stringable, TGeneric, Value, XGeneric, abbreviate, base64Decode, base64Encode, caesarCipher, checksum, cleanHelpers, data_fill, data_forget, data_get, data_set, dd, dot, dump, extractProperties, format, getValue, hash, hmac, humanize, isPlainObject, loadHelpers, modObj, random, randomColor, randomPassword, randomSecure, safeDot, secureToken, setNested, slugifyKeys, str, toBytes, toCssClasses, toCssStyles, toHumanTime, undot, uuid, verifyChecksum, xor };
package/dist/index.js CHANGED
@@ -419,23 +419,6 @@ const toHumanTime = (seconds = 0, worded = false) => {
419
419
 
420
420
  //#endregion
421
421
  //#region src/Helpers/Obj.ts
422
- var Obj_exports = /* @__PURE__ */ __export({
423
- Obj: () => Obj,
424
- data_fill: () => data_fill,
425
- data_forget: () => data_forget,
426
- data_get: () => data_get,
427
- data_set: () => data_set,
428
- dot: () => dot,
429
- extractProperties: () => extractProperties,
430
- getValue: () => getValue,
431
- modObj: () => modObj,
432
- safeDot: () => safeDot,
433
- setNested: () => setNested,
434
- slugifyKeys: () => slugifyKeys,
435
- toCssClasses: () => toCssClasses,
436
- toCssStyles: () => toCssStyles,
437
- undot: () => undot
438
- });
439
422
  /**
440
423
  * Flattens a nested object into a single-level object
441
424
  * with dot-separated keys.
@@ -695,6 +678,15 @@ function data_forget(obj, path) {
695
678
  }
696
679
  }
697
680
  }
681
+ /**
682
+ * Checks if a value is a plain object (not array, function, etc.)
683
+ *
684
+ * @param value
685
+ * @returns
686
+ */
687
+ function isPlainObject(value) {
688
+ return value !== null && typeof value === "object" && !Array.isArray(value) && Object.prototype.toString.call(value) === "[object Object]";
689
+ }
698
690
  var Obj = class Obj {
699
691
  /**
700
692
  * Check if the value is a non-null object (associative/accessible).
@@ -715,6 +707,27 @@ var Obj = class Obj {
715
707
  return obj;
716
708
  }
717
709
  /**
710
+ * Deeply merges two or more objects.
711
+ * - Arrays are replaced (not concatenated)
712
+ * - Objects are merged recursively
713
+ * - Non-object values overwrite previous ones
714
+ *
715
+ * @param objects
716
+ * @returns
717
+ */
718
+ static deepMerge(...objects) {
719
+ const result = {};
720
+ for (const obj of objects) {
721
+ if (!obj || typeof obj !== "object") continue;
722
+ for (const [key, value] of Object.entries(obj)) {
723
+ const existing = result[key];
724
+ if (isPlainObject(existing) && isPlainObject(value)) result[key] = Obj.deepMerge(existing, value);
725
+ else result[key] = value;
726
+ }
727
+ }
728
+ return result;
729
+ }
730
+ /**
718
731
  * Split object into [keys, values]
719
732
  */
720
733
  static divide(obj) {
@@ -1504,6 +1517,15 @@ var DateTime = class DateTime extends TimeClass {
1504
1517
  return this.startOf(unit);
1505
1518
  }
1506
1519
  /**
1520
+ * Set the timezone for the instance
1521
+ *
1522
+ * @param timezone
1523
+ * @returns
1524
+ */
1525
+ setTimezone(timezone$1, keepLocalTime) {
1526
+ return new DateTime(this.tz(timezone$1, keepLocalTime));
1527
+ }
1528
+ /**
1507
1529
  * End time of a specific unit.
1508
1530
  *
1509
1531
  * @returns
@@ -1558,7 +1580,7 @@ var DateTime = class DateTime extends TimeClass {
1558
1580
  * @return {Date} object
1559
1581
  */
1560
1582
  static fromTimestamp(timestamp) {
1561
- return /* @__PURE__ */ new Date(timestamp * 1e3);
1583
+ return new DateTime(timestamp * 1e3);
1562
1584
  }
1563
1585
  /**
1564
1586
  * Get current time instance.
@@ -6152,4 +6174,4 @@ function cleanHelpers(target = globalThis) {
6152
6174
  }
6153
6175
 
6154
6176
  //#endregion
6155
- export { Arr, Crypto_exports as Crypto, DateTime, DumpDie_exports as DumpDie, HtmlString, InvalidArgumentException, Mode, Number_exports as Number, Obj_exports as Obj, RuntimeException, Str, Stringable, abbreviate, base64Decode, base64Encode, caesarCipher, checksum, cleanHelpers, data_fill, data_forget, data_get, data_set, dd, dot, dump, extractProperties, format, getValue, hash, hmac, humanize, loadHelpers, modObj, random, randomColor, randomPassword, randomSecure, safeDot, secureToken, setNested, slugifyKeys, str, toBytes, toCssClasses, toCssStyles, toHumanTime, undot, uuid, verifyChecksum, xor };
6177
+ export { Arr, Crypto_exports as Crypto, DateTime, HtmlString, InvalidArgumentException, Mode, Number_exports as Number, Obj, RuntimeException, Str, Stringable, abbreviate, base64Decode, base64Encode, caesarCipher, checksum, cleanHelpers, data_fill, data_forget, data_get, data_set, dd, dot, dump, extractProperties, format, getValue, hash, hmac, humanize, isPlainObject, loadHelpers, modObj, random, randomColor, randomPassword, randomSecure, safeDot, secureToken, setNested, slugifyKeys, str, toBytes, toCssClasses, toCssStyles, toHumanTime, undot, uuid, verifyChecksum, xor };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@h3ravel/support",
3
- "version": "0.14.3",
3
+ "version": "0.15.0",
4
4
  "description": "Shared helpers, facades and utilities for H3ravel.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -38,7 +38,7 @@
38
38
  "devDependencies": {
39
39
  "@types/luxon": "^3.7.1",
40
40
  "typescript": "^5.4.0",
41
- "@h3ravel/shared": "^0.24.0"
41
+ "@h3ravel/shared": "^0.27.0"
42
42
  },
43
43
  "dependencies": {
44
44
  "dayjs": "^1.11.18",