@h3ravel/support 0.14.2 → 0.14.4
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/{chunk-PECeCxCb.js → chunk-Bop6jNiL.js} +1 -1
- package/dist/index.cjs +32 -29
- package/dist/index.d.cts +36 -19
- package/dist/index.d.ts +37 -19
- package/dist/index.js +32 -19
- package/package.json +2 -2
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) {
|
|
@@ -6202,12 +6215,6 @@ Object.defineProperty(exports, 'Crypto', {
|
|
|
6202
6215
|
}
|
|
6203
6216
|
});
|
|
6204
6217
|
exports.DateTime = DateTime;
|
|
6205
|
-
Object.defineProperty(exports, 'DumpDie', {
|
|
6206
|
-
enumerable: true,
|
|
6207
|
-
get: function () {
|
|
6208
|
-
return DumpDie_exports;
|
|
6209
|
-
}
|
|
6210
|
-
});
|
|
6211
6218
|
exports.HtmlString = HtmlString;
|
|
6212
6219
|
exports.InvalidArgumentException = InvalidArgumentException;
|
|
6213
6220
|
exports.Mode = Mode;
|
|
@@ -6217,12 +6224,7 @@ Object.defineProperty(exports, 'Number', {
|
|
|
6217
6224
|
return Number_exports;
|
|
6218
6225
|
}
|
|
6219
6226
|
});
|
|
6220
|
-
|
|
6221
|
-
enumerable: true,
|
|
6222
|
-
get: function () {
|
|
6223
|
-
return Obj_exports;
|
|
6224
|
-
}
|
|
6225
|
-
});
|
|
6227
|
+
exports.Obj = Obj;
|
|
6226
6228
|
exports.RuntimeException = RuntimeException;
|
|
6227
6229
|
exports.Str = Str;
|
|
6228
6230
|
exports.Stringable = Stringable;
|
|
@@ -6245,6 +6247,7 @@ exports.getValue = getValue;
|
|
|
6245
6247
|
exports.hash = hash;
|
|
6246
6248
|
exports.hmac = hmac;
|
|
6247
6249
|
exports.humanize = humanize;
|
|
6250
|
+
exports.isPlainObject = isPlainObject;
|
|
6248
6251
|
exports.loadHelpers = loadHelpers;
|
|
6249
6252
|
exports.modObj = modObj;
|
|
6250
6253
|
exports.random = random;
|
package/dist/index.d.cts
CHANGED
|
@@ -23,9 +23,9 @@ type ExcerptOptions = {
|
|
|
23
23
|
radius?: number;
|
|
24
24
|
omission?: string;
|
|
25
25
|
};
|
|
26
|
-
type Value<T> = boolean | ((instance: T) => boolean);
|
|
27
|
-
type Callback<T> = (instance: T, value: boolean) => T | void | undefined;
|
|
28
|
-
type Fallback<T> = Callback<T> | null;
|
|
26
|
+
type Value<T$1> = boolean | ((instance: T$1) => boolean);
|
|
27
|
+
type Callback<T$1> = (instance: T$1, value: boolean) => T$1 | void | undefined;
|
|
28
|
+
type Fallback<T$1> = Callback<T$1> | null;
|
|
29
29
|
interface Function {
|
|
30
30
|
(...args: any[]): any;
|
|
31
31
|
}
|
|
@@ -34,12 +34,12 @@ interface Function {
|
|
|
34
34
|
/**
|
|
35
35
|
* Convert CamelCased Object keys to snake_case
|
|
36
36
|
*/
|
|
37
|
-
type KeysToSnakeCase<T> = { [K in keyof T as CamelToSnakeCase<string & K>]: T[K] };
|
|
38
|
-
type TGeneric<V = any, K extends string = string> = Record<K, V>;
|
|
39
|
-
type XGeneric<V = TGeneric, T = any> = {
|
|
40
|
-
[key: string]: T;
|
|
41
|
-
} & V;
|
|
42
|
-
type DotPath<T> = T extends object ? { [K in keyof T & (string | number)]: T[K] extends object ? `${K}` | `${K}.${DotPath<T[K]>}` : `${K}` }[keyof T & (string | number)] : never;
|
|
37
|
+
type KeysToSnakeCase<T$1> = { [K in keyof T$1 as CamelToSnakeCase<string & K>]: T$1[K] };
|
|
38
|
+
type TGeneric<V$1 = any, K$1 extends string = string> = Record<K$1, V$1>;
|
|
39
|
+
type XGeneric<V$1 = TGeneric, T$1 = any> = {
|
|
40
|
+
[key: string]: T$1;
|
|
41
|
+
} & V$1;
|
|
42
|
+
type DotPath<T$1> = T$1 extends object ? { [K in keyof T$1 & (string | number)]: T$1[K] extends object ? `${K}` | `${K}.${DotPath<T$1[K]>}` : `${K}` }[keyof T$1 & (string | number)] : never;
|
|
43
43
|
//#endregion
|
|
44
44
|
//#region src/Contracts/TypeCast.d.ts
|
|
45
45
|
type Arrayable = {
|
|
@@ -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
|
|
@@ -294,8 +294,8 @@ declare const getValue: <T extends Record<string, any>>(key: string | [keyof T,
|
|
|
294
294
|
* @returns A new object with transformed entries
|
|
295
295
|
*/
|
|
296
296
|
declare const modObj: <T extends object, R>(obj: T, callback: (_entry: [keyof T & string, T[keyof T]]) => [string, R]) => Record<string, R>;
|
|
297
|
-
declare function safeDot<T extends Record<string, any>>(_data: T): T;
|
|
298
|
-
declare function safeDot<T extends Record<string, any>, K extends DotNestedKeys<T>>(_data: T, _key?: K): DotNestedValue<T, K>;
|
|
297
|
+
declare function safeDot<T$1 extends Record<string, any>>(_data: T$1): T$1;
|
|
298
|
+
declare function safeDot<T$1 extends Record<string, any>, K$1 extends DotNestedKeys<T$1>>(_data: T$1, _key?: K$1): DotNestedValue<T$1, K$1>;
|
|
299
299
|
/**
|
|
300
300
|
* Sets a nested property on an object using dot notation.
|
|
301
301
|
*
|
|
@@ -328,14 +328,14 @@ declare const slugifyKeys: <T extends object>(obj: T, only?: string[], separator
|
|
|
328
328
|
* - Objects: keys included if value is truthy
|
|
329
329
|
* - Strings: included as-is
|
|
330
330
|
*/
|
|
331
|
-
declare function toCssClasses<T extends string | Record<string, boolean> | Array<string | false | null | undefined>>(input: T): string;
|
|
331
|
+
declare function toCssClasses<T$1 extends string | Record<string, boolean> | Array<string | false | null | undefined>>(input: T$1): string;
|
|
332
332
|
/**
|
|
333
333
|
* toCssStyles
|
|
334
334
|
*
|
|
335
335
|
* Convert object input into CSS style string.
|
|
336
336
|
* - Only includes truthy values (ignores null/undefined/false)
|
|
337
337
|
*/
|
|
338
|
-
declare function toCssStyles<T extends Record<string, string | number | boolean | null | undefined>>(styles: T): string;
|
|
338
|
+
declare function toCssStyles<T$1 extends Record<string, string | number | boolean | null | undefined>>(styles: T$1): string;
|
|
339
339
|
/**
|
|
340
340
|
* undot
|
|
341
341
|
*
|
|
@@ -350,13 +350,13 @@ declare function undot(obj: Record<string, any>): Record<string, any>;
|
|
|
350
350
|
*
|
|
351
351
|
* Get a value from an object using dot notation.
|
|
352
352
|
*/
|
|
353
|
-
declare function data_get<T extends object, P extends DotPath<T> | DotPath<T>[], D = undefined>(obj: T, path: P, defaultValue?: D): T | any;
|
|
353
|
+
declare function data_get<T$1 extends object, P$1 extends DotPath<T$1> | DotPath<T$1>[], D$1 = undefined>(obj: T$1, path: P$1, defaultValue?: D$1): T$1 | any;
|
|
354
354
|
/**
|
|
355
355
|
* data_set
|
|
356
356
|
*
|
|
357
357
|
* Set a value in an object using dot notation. Mutates the object.
|
|
358
358
|
*/
|
|
359
|
-
declare function data_set<T extends Record<string, any>, P extends string | string[], V>(obj: T, path: P, value: V): asserts obj is T & Record<P extends string ? P : P[0], V>;
|
|
359
|
+
declare function data_set<T$1 extends Record<string, any>, P$1 extends string | string[], V$1>(obj: T$1, path: P$1, value: V$1): asserts obj is T$1 & Record<P$1 extends string ? P$1 : P$1[0], V$1>;
|
|
360
360
|
/**
|
|
361
361
|
* data_fill
|
|
362
362
|
*
|
|
@@ -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>): (
|
|
487
|
+
static divide<A>(input: A[] | Record<string, A>): (number[] | A[])[] | (string[] | A[])[];
|
|
471
488
|
/**
|
|
472
489
|
* Flatten a nested array/object structure into a single-level object
|
|
473
490
|
* with dot-notated keys.
|
|
@@ -3147,7 +3164,7 @@ declare class HtmlString {
|
|
|
3147
3164
|
declare function str(string?: string): Stringable;
|
|
3148
3165
|
//#endregion
|
|
3149
3166
|
//#region src/GlobalBootstrap.d.ts
|
|
3150
|
-
type CollapseStatics<T extends Record<string, any>> = { [K in keyof T]: T[K] };
|
|
3167
|
+
type CollapseStatics<T$1 extends Record<string, any>> = { [K in keyof T$1]: T$1[K] };
|
|
3151
3168
|
type Omitables = 'start' | 'take' | 'reverse' | 'chunk' | 'find' | 'pop' | 'end' | 'shift' | 'push' | 'at' | 'prototype' | 'concat' | 'join' | 'slice' | 'sort' | 'splice' | 'includes' | 'indexOf' | 'lastIndexOf' | 'findIndex' | 'every' | 'some' | 'forEach' | 'map' | 'filter' | 'reduce' | 'unshift' | 'flat' | 'flatMap' | 'keys' | 'fill' | 'copyWithin' | 'entries' | 'values' | 'reduceRight' | 'length' | 'of' | '_isObject' | '_clone' | 'crossJoin' | 'divide' | 'wrap' | 'except' | 'hasAny' | 'isList' | 'keyBy' | 'mapWithKeys' | 'only' | 'pluck' | 'pull' | 'shuffle' | 'sortDesc' | 'sortRecursive' | 'sortRecursiveDesc' | 'where' | 'whereNotNull' | 'head' | 'string' | 'boolean' | 'array' | 'float' | 'from' | 'hasAll' | 'integer' | 'mapSpread' | 'partition' | 'reject' | 'select' | 'sole' | 'alternate' | 'combine' | 'isEmpty' | 'isNotEmpty' | 'range' | typeof Symbol.unscopables | typeof Symbol.iterator;
|
|
3152
3169
|
type TakeTime = Pick<typeof DateTime, 'now' | 'format' | 'fromTimestamp' | 'randomTime' | 'firstDayOfMonth' | 'lastDayOfMonth' | 'parse'>;
|
|
3153
3170
|
type TakeString = Pick<typeof Str, 'after' | 'afterLast' | 'apa' | 'ascii' | 'before' | 'beforeLast' | 'between' | 'betweenFirst' | 'capitalize' | 'plural' | 'singular' | 'title'>;
|
|
@@ -3195,4 +3212,4 @@ declare function loadHelpers(target?: any): void;
|
|
|
3195
3212
|
*/
|
|
3196
3213
|
declare function cleanHelpers(target?: any): void;
|
|
3197
3214
|
//#endregion
|
|
3198
|
-
export { Arr, Arrayable, Callback, CamelToSnakeCase, Crypto_d_exports as Crypto, DateTime, DotPath,
|
|
3215
|
+
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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference path="./app.globals.d.ts" />
|
|
2
|
+
import { t as __export } from "./chunk-Bop6jNiL.js";
|
|
2
3
|
import dayjs, { ConfigType, Dayjs, OpUnitType } from "dayjs";
|
|
3
4
|
import { DotFlatten, DotNestedKeys, DotNestedValue } from "@h3ravel/shared";
|
|
4
5
|
|
|
@@ -20,9 +21,9 @@ type ExcerptOptions = {
|
|
|
20
21
|
radius?: number;
|
|
21
22
|
omission?: string;
|
|
22
23
|
};
|
|
23
|
-
type Value<T> = boolean | ((instance: T) => boolean);
|
|
24
|
-
type Callback<T> = (instance: T, value: boolean) => T | void | undefined;
|
|
25
|
-
type Fallback<T> = Callback<T> | null;
|
|
24
|
+
type Value<T$1> = boolean | ((instance: T$1) => boolean);
|
|
25
|
+
type Callback<T$1> = (instance: T$1, value: boolean) => T$1 | void | undefined;
|
|
26
|
+
type Fallback<T$1> = Callback<T$1> | null;
|
|
26
27
|
interface Function {
|
|
27
28
|
(...args: any[]): any;
|
|
28
29
|
}
|
|
@@ -31,12 +32,12 @@ interface Function {
|
|
|
31
32
|
/**
|
|
32
33
|
* Convert CamelCased Object keys to snake_case
|
|
33
34
|
*/
|
|
34
|
-
type KeysToSnakeCase<T> = { [K in keyof T as CamelToSnakeCase<string & K>]: T[K] };
|
|
35
|
-
type TGeneric<V = any, K extends string = string> = Record<K, V>;
|
|
36
|
-
type XGeneric<V = TGeneric, T = any> = {
|
|
37
|
-
[key: string]: T;
|
|
38
|
-
} & V;
|
|
39
|
-
type DotPath<T> = T extends object ? { [K in keyof T & (string | number)]: T[K] extends object ? `${K}` | `${K}.${DotPath<T[K]>}` : `${K}` }[keyof T & (string | number)] : never;
|
|
35
|
+
type KeysToSnakeCase<T$1> = { [K in keyof T$1 as CamelToSnakeCase<string & K>]: T$1[K] };
|
|
36
|
+
type TGeneric<V$1 = any, K$1 extends string = string> = Record<K$1, V$1>;
|
|
37
|
+
type XGeneric<V$1 = TGeneric, T$1 = any> = {
|
|
38
|
+
[key: string]: T$1;
|
|
39
|
+
} & V$1;
|
|
40
|
+
type DotPath<T$1> = T$1 extends object ? { [K in keyof T$1 & (string | number)]: T$1[K] extends object ? `${K}` | `${K}.${DotPath<T$1[K]>}` : `${K}` }[keyof T$1 & (string | number)] : never;
|
|
40
41
|
//#endregion
|
|
41
42
|
//#region src/Contracts/TypeCast.d.ts
|
|
42
43
|
type Arrayable = {
|
|
@@ -237,7 +238,7 @@ declare const toBytes: (bytes?: number, decimals?: number, bits?: boolean) => st
|
|
|
237
238
|
*/
|
|
238
239
|
declare const toHumanTime: (seconds?: number, worded?: boolean) => string;
|
|
239
240
|
declare namespace Obj_d_exports {
|
|
240
|
-
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 };
|
|
241
242
|
}
|
|
242
243
|
/**
|
|
243
244
|
* Flattens a nested object into a single-level object
|
|
@@ -291,8 +292,8 @@ declare const getValue: <T extends Record<string, any>>(key: string | [keyof T,
|
|
|
291
292
|
* @returns A new object with transformed entries
|
|
292
293
|
*/
|
|
293
294
|
declare const modObj: <T extends object, R>(obj: T, callback: (_entry: [keyof T & string, T[keyof T]]) => [string, R]) => Record<string, R>;
|
|
294
|
-
declare function safeDot<T extends Record<string, any>>(_data: T): T;
|
|
295
|
-
declare function safeDot<T extends Record<string, any>, K extends DotNestedKeys<T>>(_data: T, _key?: K): DotNestedValue<T, K>;
|
|
295
|
+
declare function safeDot<T$1 extends Record<string, any>>(_data: T$1): T$1;
|
|
296
|
+
declare function safeDot<T$1 extends Record<string, any>, K$1 extends DotNestedKeys<T$1>>(_data: T$1, _key?: K$1): DotNestedValue<T$1, K$1>;
|
|
296
297
|
/**
|
|
297
298
|
* Sets a nested property on an object using dot notation.
|
|
298
299
|
*
|
|
@@ -325,14 +326,14 @@ declare const slugifyKeys: <T extends object>(obj: T, only?: string[], separator
|
|
|
325
326
|
* - Objects: keys included if value is truthy
|
|
326
327
|
* - Strings: included as-is
|
|
327
328
|
*/
|
|
328
|
-
declare function toCssClasses<T extends string | Record<string, boolean> | Array<string | false | null | undefined>>(input: T): string;
|
|
329
|
+
declare function toCssClasses<T$1 extends string | Record<string, boolean> | Array<string | false | null | undefined>>(input: T$1): string;
|
|
329
330
|
/**
|
|
330
331
|
* toCssStyles
|
|
331
332
|
*
|
|
332
333
|
* Convert object input into CSS style string.
|
|
333
334
|
* - Only includes truthy values (ignores null/undefined/false)
|
|
334
335
|
*/
|
|
335
|
-
declare function toCssStyles<T extends Record<string, string | number | boolean | null | undefined>>(styles: T): string;
|
|
336
|
+
declare function toCssStyles<T$1 extends Record<string, string | number | boolean | null | undefined>>(styles: T$1): string;
|
|
336
337
|
/**
|
|
337
338
|
* undot
|
|
338
339
|
*
|
|
@@ -347,13 +348,13 @@ declare function undot(obj: Record<string, any>): Record<string, any>;
|
|
|
347
348
|
*
|
|
348
349
|
* Get a value from an object using dot notation.
|
|
349
350
|
*/
|
|
350
|
-
declare function data_get<T extends object, P extends DotPath<T> | DotPath<T>[], D = undefined>(obj: T, path: P, defaultValue?: D): T | any;
|
|
351
|
+
declare function data_get<T$1 extends object, P$1 extends DotPath<T$1> | DotPath<T$1>[], D$1 = undefined>(obj: T$1, path: P$1, defaultValue?: D$1): T$1 | any;
|
|
351
352
|
/**
|
|
352
353
|
* data_set
|
|
353
354
|
*
|
|
354
355
|
* Set a value in an object using dot notation. Mutates the object.
|
|
355
356
|
*/
|
|
356
|
-
declare function data_set<T extends Record<string, any>, P extends string | string[], V>(obj: T, path: P, value: V): asserts obj is T & Record<P extends string ? P : P[0], V>;
|
|
357
|
+
declare function data_set<T$1 extends Record<string, any>, P$1 extends string | string[], V$1>(obj: T$1, path: P$1, value: V$1): asserts obj is T$1 & Record<P$1 extends string ? P$1 : P$1[0], V$1>;
|
|
357
358
|
/**
|
|
358
359
|
* data_fill
|
|
359
360
|
*
|
|
@@ -366,6 +367,13 @@ declare function data_fill(obj: Record<string, any>, path: string | string[], va
|
|
|
366
367
|
* Remove a key from an object using dot notation.
|
|
367
368
|
*/
|
|
368
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>;
|
|
369
377
|
declare class Obj {
|
|
370
378
|
/**
|
|
371
379
|
* Check if the value is a non-null object (associative/accessible).
|
|
@@ -377,6 +385,16 @@ declare class Obj {
|
|
|
377
385
|
* Returns a new object (does not mutate original).
|
|
378
386
|
*/
|
|
379
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;
|
|
380
398
|
/**
|
|
381
399
|
* Split object into [keys, values]
|
|
382
400
|
*/
|
|
@@ -464,7 +482,7 @@ declare class Arr {
|
|
|
464
482
|
* Arr.divide(['a','b']) -> [[0,1], ['a','b']]
|
|
465
483
|
* Arr.divide({x:1,y:2}) -> [['x','y'], [1,2]]
|
|
466
484
|
*/
|
|
467
|
-
static divide<A>(input: A[] | Record<string, A>): (
|
|
485
|
+
static divide<A>(input: A[] | Record<string, A>): (number[] | A[])[] | (string[] | A[])[];
|
|
468
486
|
/**
|
|
469
487
|
* Flatten a nested array/object structure into a single-level object
|
|
470
488
|
* with dot-notated keys.
|
|
@@ -3144,7 +3162,7 @@ declare class HtmlString {
|
|
|
3144
3162
|
declare function str(string?: string): Stringable;
|
|
3145
3163
|
//#endregion
|
|
3146
3164
|
//#region src/GlobalBootstrap.d.ts
|
|
3147
|
-
type CollapseStatics<T extends Record<string, any>> = { [K in keyof T]: T[K] };
|
|
3165
|
+
type CollapseStatics<T$1 extends Record<string, any>> = { [K in keyof T$1]: T$1[K] };
|
|
3148
3166
|
type Omitables = 'start' | 'take' | 'reverse' | 'chunk' | 'find' | 'pop' | 'end' | 'shift' | 'push' | 'at' | 'prototype' | 'concat' | 'join' | 'slice' | 'sort' | 'splice' | 'includes' | 'indexOf' | 'lastIndexOf' | 'findIndex' | 'every' | 'some' | 'forEach' | 'map' | 'filter' | 'reduce' | 'unshift' | 'flat' | 'flatMap' | 'keys' | 'fill' | 'copyWithin' | 'entries' | 'values' | 'reduceRight' | 'length' | 'of' | '_isObject' | '_clone' | 'crossJoin' | 'divide' | 'wrap' | 'except' | 'hasAny' | 'isList' | 'keyBy' | 'mapWithKeys' | 'only' | 'pluck' | 'pull' | 'shuffle' | 'sortDesc' | 'sortRecursive' | 'sortRecursiveDesc' | 'where' | 'whereNotNull' | 'head' | 'string' | 'boolean' | 'array' | 'float' | 'from' | 'hasAll' | 'integer' | 'mapSpread' | 'partition' | 'reject' | 'select' | 'sole' | 'alternate' | 'combine' | 'isEmpty' | 'isNotEmpty' | 'range' | typeof Symbol.unscopables | typeof Symbol.iterator;
|
|
3149
3167
|
type TakeTime = Pick<typeof DateTime, 'now' | 'format' | 'fromTimestamp' | 'randomTime' | 'firstDayOfMonth' | 'lastDayOfMonth' | 'parse'>;
|
|
3150
3168
|
type TakeString = Pick<typeof Str, 'after' | 'afterLast' | 'apa' | 'ascii' | 'before' | 'beforeLast' | 'between' | 'betweenFirst' | 'capitalize' | 'plural' | 'singular' | 'title'>;
|
|
@@ -3192,4 +3210,4 @@ declare function loadHelpers(target?: any): void;
|
|
|
3192
3210
|
*/
|
|
3193
3211
|
declare function cleanHelpers(target?: any): void;
|
|
3194
3212
|
//#endregion
|
|
3195
|
-
export { Arr, Arrayable, Callback, CamelToSnakeCase, Crypto_d_exports as Crypto, DateTime, DotPath,
|
|
3213
|
+
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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __export } from "./chunk-
|
|
1
|
+
import { t as __export } from "./chunk-Bop6jNiL.js";
|
|
2
2
|
import { createHash, createHmac, randomBytes, randomUUID } from "crypto";
|
|
3
3
|
import process from "process";
|
|
4
4
|
import util from "util";
|
|
@@ -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) {
|
|
@@ -6152,4 +6165,4 @@ function cleanHelpers(target = globalThis) {
|
|
|
6152
6165
|
}
|
|
6153
6166
|
|
|
6154
6167
|
//#endregion
|
|
6155
|
-
export { Arr, Crypto_exports as Crypto, DateTime,
|
|
6168
|
+
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
|
+
"version": "0.14.4",
|
|
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.
|
|
41
|
+
"@h3ravel/shared": "^0.25.0"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"dayjs": "^1.11.18",
|