@silvermine/toolbox 0.5.1 → 0.7.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/CHANGELOG.md +22 -0
- package/dist/commonjs/index.js +3 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/types/KeyValueStringObject.js +3 -4
- package/dist/commonjs/types/KeyValueStringObject.js.map +1 -1
- package/dist/commonjs/types/StringArrayOfStringsMap.js +3 -4
- package/dist/commonjs/types/StringArrayOfStringsMap.js.map +1 -1
- package/dist/commonjs/types/StringMap.js +3 -4
- package/dist/commonjs/types/StringMap.js.map +1 -1
- package/dist/commonjs/types/StringUnknownMap.js +2 -3
- package/dist/commonjs/types/StringUnknownMap.js.map +1 -1
- package/dist/commonjs/utils/chunk.js +1 -2
- package/dist/commonjs/utils/chunk.js.map +1 -1
- package/dist/commonjs/utils/compact.js +1 -2
- package/dist/commonjs/utils/compact.js.map +1 -1
- package/dist/commonjs/utils/delay.js +1 -2
- package/dist/commonjs/utils/delay.js.map +1 -1
- package/dist/commonjs/utils/escape-html.js +3 -4
- package/dist/commonjs/utils/escape-html.js.map +1 -1
- package/dist/commonjs/utils/flatten.js +1 -2
- package/dist/commonjs/utils/flatten.js.map +1 -1
- package/dist/commonjs/utils/get-tag-string.js +1 -2
- package/dist/commonjs/utils/get-tag-string.js.map +1 -1
- package/dist/commonjs/utils/get.js +3 -4
- package/dist/commonjs/utils/get.js.map +1 -1
- package/dist/commonjs/utils/group-by.js +30 -0
- package/dist/commonjs/utils/group-by.js.map +1 -0
- package/dist/commonjs/utils/has-defined.js +2 -3
- package/dist/commonjs/utils/has-defined.js.map +1 -1
- package/dist/commonjs/utils/is-arguments.js +2 -3
- package/dist/commonjs/utils/is-arguments.js.map +1 -1
- package/dist/commonjs/utils/is-array-of-strings.js +3 -4
- package/dist/commonjs/utils/is-array-of-strings.js.map +1 -1
- package/dist/commonjs/utils/is-array.js +1 -2
- package/dist/commonjs/utils/is-array.js.map +1 -1
- package/dist/commonjs/utils/is-boolean.js +1 -2
- package/dist/commonjs/utils/is-boolean.js.map +1 -1
- package/dist/commonjs/utils/is-empty.js +5 -6
- package/dist/commonjs/utils/is-empty.js.map +1 -1
- package/dist/commonjs/utils/is-enum-value.js +1 -2
- package/dist/commonjs/utils/is-enum-value.js.map +1 -1
- package/dist/commonjs/utils/is-function.js +12 -0
- package/dist/commonjs/utils/is-function.js.map +1 -0
- package/dist/commonjs/utils/is-map-with-values-of-type.js +2 -3
- package/dist/commonjs/utils/is-map-with-values-of-type.js.map +1 -1
- package/dist/commonjs/utils/is-not-null-or-undefined.js +2 -3
- package/dist/commonjs/utils/is-not-null-or-undefined.js.map +1 -1
- package/dist/commonjs/utils/is-null.js +1 -2
- package/dist/commonjs/utils/is-null.js.map +1 -1
- package/dist/commonjs/utils/is-number.js +2 -3
- package/dist/commonjs/utils/is-number.js.map +1 -1
- package/dist/commonjs/utils/is-object.js +1 -2
- package/dist/commonjs/utils/is-object.js.map +1 -1
- package/dist/commonjs/utils/is-promise-like.js +2 -3
- package/dist/commonjs/utils/is-promise-like.js.map +1 -1
- package/dist/commonjs/utils/is-promise.js +2 -3
- package/dist/commonjs/utils/is-promise.js.map +1 -1
- package/dist/commonjs/utils/is-set.js +1 -2
- package/dist/commonjs/utils/is-set.js.map +1 -1
- package/dist/commonjs/utils/is-string.js +2 -3
- package/dist/commonjs/utils/is-string.js.map +1 -1
- package/dist/commonjs/utils/is-undefined.js +1 -2
- package/dist/commonjs/utils/is-undefined.js.map +1 -1
- package/dist/commonjs/utils/make-template.js +3 -4
- package/dist/commonjs/utils/make-template.js.map +1 -1
- package/dist/commonjs/utils/pick.js +2 -3
- package/dist/commonjs/utils/pick.js.map +1 -1
- package/dist/commonjs/utils/pluck.js +1 -2
- package/dist/commonjs/utils/pluck.js.map +1 -1
- package/dist/commonjs/utils/range.js +1 -2
- package/dist/commonjs/utils/range.js.map +1 -1
- package/dist/commonjs/utils/sort-keys-replacer.js +23 -0
- package/dist/commonjs/utils/sort-keys-replacer.js.map +1 -0
- package/dist/commonjs/utils/uniq.js +2 -1
- package/dist/commonjs/utils/uniq.js.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/KeyValueStringObject.js.map +1 -1
- package/dist/esm/types/Omit.js +1 -0
- package/dist/esm/types/Optional.js +1 -0
- package/dist/esm/types/PropsWithType.js +1 -0
- package/dist/esm/types/RequireDefined.js +1 -0
- package/dist/esm/types/RequireOptional.js +1 -0
- package/dist/esm/types/StrictUnion.js +1 -0
- package/dist/esm/types/StringArrayOfStringsMap.js.map +1 -1
- package/dist/esm/types/StringMap.js.map +1 -1
- package/dist/esm/types/UnionKeys.js +1 -0
- package/dist/esm/types/Writable.js +1 -0
- package/dist/esm/utils/chunk.js.map +1 -1
- package/dist/esm/utils/delay.js.map +1 -1
- package/dist/esm/utils/escape-html.js +1 -1
- package/dist/esm/utils/escape-html.js.map +1 -1
- package/dist/esm/utils/get.js.map +1 -1
- package/dist/esm/utils/group-by.js +27 -0
- package/dist/esm/utils/group-by.js.map +1 -0
- package/dist/esm/utils/is-array-of-strings.js.map +1 -1
- package/dist/esm/utils/is-empty.js.map +1 -1
- package/dist/esm/utils/is-enum-value.js.map +1 -1
- package/dist/esm/utils/is-function.js +9 -0
- package/dist/esm/utils/is-function.js.map +1 -0
- package/dist/esm/utils/is-map-with-values-of-type.js.map +1 -1
- package/dist/esm/utils/make-template.js.map +1 -1
- package/dist/esm/utils/pick.js.map +1 -1
- package/dist/esm/utils/range.js.map +1 -1
- package/dist/esm/utils/sort-keys-replacer.js +20 -0
- package/dist/esm/utils/sort-keys-replacer.js.map +1 -0
- package/dist/esm/utils/uniq.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/types/Omit.d.ts +1 -1
- package/dist/types/types/Optional.d.ts +1 -1
- package/dist/types/types/PropsWithType.d.ts +1 -1
- package/dist/types/types/RequireDefined.d.ts +1 -1
- package/dist/types/types/RequireOptional.d.ts +1 -1
- package/dist/types/types/StrictUnion.d.ts +3 -3
- package/dist/types/types/UnionKeys.d.ts +1 -1
- package/dist/types/types/Writable.d.ts +1 -1
- package/dist/types/utils/compact.d.ts +1 -1
- package/dist/types/utils/delay.d.ts +2 -1
- package/dist/types/utils/group-by.d.ts +7 -0
- package/dist/types/utils/is-empty.d.ts +1 -1
- package/dist/types/utils/is-enum-value.d.ts +1 -1
- package/dist/types/utils/is-function.d.ts +6 -0
- package/dist/types/utils/sort-keys-replacer.d.ts +9 -0
- package/dist/types/utils/uniq.d.ts +1 -1
- package/package.json +3 -3
- package/src/index.ts +3 -0
- package/src/utils/delay.ts +3 -1
- package/src/utils/group-by.ts +32 -0
- package/src/utils/is-enum-value.ts +1 -1
- package/src/utils/is-function.ts +8 -0
- package/src/utils/sort-keys-replacer.ts +20 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isStringUnknownMap } from '../types/StringUnknownMap';
|
|
2
|
+
import { isFunction } from './is-function';
|
|
3
|
+
/**
|
|
4
|
+
* JSON replacer that recursively sorts object keys to ensure consistent serialization.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```
|
|
8
|
+
* JSON.stringify(query, sortKeysReplacer);
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export function sortKeysReplacer(_key, value) {
|
|
12
|
+
if (isStringUnknownMap(value) && !isFunction(value)) {
|
|
13
|
+
return Object.keys(value).sort().reduce((memo, k) => {
|
|
14
|
+
memo[k] = value[k];
|
|
15
|
+
return memo;
|
|
16
|
+
}, {});
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=sort-keys-replacer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-keys-replacer.js","sourceRoot":"","sources":["../../../src/utils/sort-keys-replacer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAoB,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAc;IAC1D,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACjD,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACf,CAAC,EAAE,EAAsB,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniq.js","sourceRoot":"","sources":["../../../src/utils/uniq.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,CAAO,GAAQ,EAAE,QAA8C,EAAO,EAAE;IAC1F,MAAM,MAAM,GAAQ,EAAE,EAChB,IAAI,GAAQ,EAAE,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"uniq.js","sourceRoot":"","sources":["../../../src/utils/uniq.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,CAAO,GAAQ,EAAE,QAA8C,EAAO,EAAE;IAC1F,MAAM,MAAM,GAAQ,EAAE,EAChB,IAAI,GAAQ,EAAE,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EACd,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACjB,CAAC,CAAC;AAGF,MAAM,UAAU,GAAG,CAAO,GAAQ,EAAO,EAAE;IACxC,MAAM,MAAM,GAAQ,EAAE,CAAC;IAEvB,IAAI,QAA2B,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AACjB,CAAC,CAAC;AAGF,MAAM,YAAY,GAAG,CAAI,GAAQ,EAAO,EAAE;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACjB,CAAC,CAAC;AAGF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAO,GAAQ,EAAE,QAAkB,EAAE,QAA+C,EAAO,EAAE;IAC9G,IAAI,QAAQ,EAAE,CAAC;QACZ,OAAO,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACZ,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from './utils/is-array-of-strings';
|
|
|
16
16
|
export * from './utils/is-boolean';
|
|
17
17
|
export * from './utils/is-empty';
|
|
18
18
|
export * from './utils/is-enum-value';
|
|
19
|
+
export * from './utils/is-function';
|
|
19
20
|
export * from './utils/is-map-with-values-of-type';
|
|
20
21
|
export * from './utils/is-number';
|
|
21
22
|
export * from './utils/is-object';
|
|
@@ -33,7 +34,9 @@ export * from './utils/pick';
|
|
|
33
34
|
export * from './utils/pluck';
|
|
34
35
|
export * from './utils/delay';
|
|
35
36
|
export * from './utils/get';
|
|
37
|
+
export * from './utils/group-by';
|
|
36
38
|
export * from './utils/escape-html';
|
|
37
39
|
export * from './utils/make-template';
|
|
38
40
|
export * from './utils/uniq';
|
|
39
41
|
export * from './utils/range';
|
|
42
|
+
export * from './utils/sort-keys-replacer';
|
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
* @deprecated This will be removed once the TS version for this project has been upgraded
|
|
6
6
|
* to TS 3.5 or greater
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { UnionKeys } from './UnionKeys';
|
|
2
|
-
|
|
2
|
+
type InvalidKeys<K extends string | number | symbol> = {
|
|
3
3
|
[P in K]?: never;
|
|
4
4
|
};
|
|
5
|
-
|
|
5
|
+
type StrictUnionHelper<T, TAll> = T extends unknown ? (T & InvalidKeys<Exclude<UnionKeys<TAll>, keyof T>>) : never;
|
|
6
6
|
/**
|
|
7
7
|
* A basic TypeScript union (e.g. A | B) results in a type containing the available
|
|
8
8
|
* properties from the provided types. When StrictUnion is used (e.g. StrictUnion<A | B>),
|
|
@@ -11,5 +11,5 @@ declare type StrictUnionHelper<T, TAll> = T extends unknown ? (T & InvalidKeys<E
|
|
|
11
11
|
*
|
|
12
12
|
* See: https://github.com/microsoft/TypeScript/issues/20863#issuecomment-520551758
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
14
|
+
export type StrictUnion<T> = StrictUnionHelper<T, T>;
|
|
15
15
|
export {};
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export declare function delay
|
|
1
|
+
export declare function delay(ms: number): Promise<undefined>;
|
|
2
|
+
export declare function delay<T>(ms: number, value: T): Promise<T>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PropsWithType } from '../types/PropsWithType';
|
|
2
|
+
/**
|
|
3
|
+
* Given an array of items and a function that returns a key, groups the items by the key.
|
|
4
|
+
* If the returned key is `undefined`, the item is not included in the result. If a string
|
|
5
|
+
* is passed as the second argument, the item is grouped by the values of that property.
|
|
6
|
+
*/
|
|
7
|
+
export declare function groupBy<T, U extends string>(items: T[], fn: ((item: T) => string | undefined) | PropsWithType<T, string>): Record<U, T[] | undefined>;
|
|
@@ -4,7 +4,7 @@ interface IEmptyArguments extends IArguments {
|
|
|
4
4
|
interface IEmptyObj {
|
|
5
5
|
[s: string]: never;
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
type IEmptyTypes = (null | undefined | boolean | number | never[] | '' | IEmptyArguments | Set<never> | IEmptyObj);
|
|
8
8
|
/**
|
|
9
9
|
* Checks if `o` is an empty object. An object is "empty" if it:
|
|
10
10
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type guard to check to see if the given value is a valid value for the enum.
|
|
3
3
|
*/
|
|
4
|
-
export declare function isEnumValue<T>(enumType: T, value: unknown): value is T[keyof T];
|
|
4
|
+
export declare function isEnumValue<T extends object>(enumType: T, value: unknown): value is T[keyof T];
|
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
* is not a one-to-one function, so providing an iteratee will disable
|
|
6
6
|
* the faster algorithm.
|
|
7
7
|
*/
|
|
8
|
-
export declare const uniq: <T, U>(arr: T[], isSorted?: boolean
|
|
8
|
+
export declare const uniq: <T, U>(arr: T[], isSorted?: boolean, iteratee?: (value: T, i: number, arr: T[]) => U) => T[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silvermine/toolbox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "A library of common TypeScript types, custom type guards, and utility functions.",
|
|
5
5
|
"main": "./dist/commonjs/index",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@silvermine/typescript-config": "git+https://github.com/silvermine/typescript-config#23213e33077089e723629dead5342abe6f3b3c8c",
|
|
43
43
|
"@types/chai": "4.3.20",
|
|
44
44
|
"@types/mocha": "5.2.7",
|
|
45
|
-
"@types/node": "12.
|
|
45
|
+
"@types/node": "20.12.2",
|
|
46
46
|
"@types/sinon": "5.0.7",
|
|
47
47
|
"chai": "4.5.0",
|
|
48
48
|
"check-node-version": "4.2.1",
|
|
@@ -60,6 +60,6 @@
|
|
|
60
60
|
"source-map-support": "0.5.21",
|
|
61
61
|
"ts-node": "7.0.1",
|
|
62
62
|
"tslib": "2.6.3",
|
|
63
|
-
"typescript": "
|
|
63
|
+
"typescript": "5.7.2"
|
|
64
64
|
}
|
|
65
65
|
}
|
package/src/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ export * from './utils/is-array-of-strings';
|
|
|
17
17
|
export * from './utils/is-boolean';
|
|
18
18
|
export * from './utils/is-empty';
|
|
19
19
|
export * from './utils/is-enum-value';
|
|
20
|
+
export * from './utils/is-function';
|
|
20
21
|
export * from './utils/is-map-with-values-of-type';
|
|
21
22
|
export * from './utils/is-number';
|
|
22
23
|
export * from './utils/is-object';
|
|
@@ -35,7 +36,9 @@ export * from './utils/pick';
|
|
|
35
36
|
export * from './utils/pluck';
|
|
36
37
|
export * from './utils/delay';
|
|
37
38
|
export * from './utils/get';
|
|
39
|
+
export * from './utils/group-by';
|
|
38
40
|
export * from './utils/escape-html';
|
|
39
41
|
export * from './utils/make-template';
|
|
40
42
|
export * from './utils/uniq';
|
|
41
43
|
export * from './utils/range';
|
|
44
|
+
export * from './utils/sort-keys-replacer';
|
package/src/utils/delay.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export function delay
|
|
1
|
+
export function delay(ms: number): Promise<undefined>;
|
|
2
|
+
export function delay<T>(ms: number, value: T): Promise<T>;
|
|
3
|
+
export function delay<T>(ms: number, value?: T): Promise<T | undefined> {
|
|
2
4
|
return new Promise((resolve) => {
|
|
3
5
|
setTimeout(() => { resolve(value); }, ms);
|
|
4
6
|
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { PropsWithType } from '../types/PropsWithType';
|
|
2
|
+
import { hasDefined } from './has-defined';
|
|
3
|
+
import { isString } from './is-string';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Given an array of items and a function that returns a key, groups the items by the key.
|
|
7
|
+
* If the returned key is `undefined`, the item is not included in the result. If a string
|
|
8
|
+
* is passed as the second argument, the item is grouped by the values of that property.
|
|
9
|
+
*/
|
|
10
|
+
export function groupBy<T, U extends string>(items: T[], fn: ((item: T) => string | undefined) | PropsWithType<T, string>): Record<U, T[] | undefined> {
|
|
11
|
+
const keyFn = typeof fn === 'function' ? fn : (item: T) => {
|
|
12
|
+
const key = item[fn];
|
|
13
|
+
|
|
14
|
+
return isString(key) ? key : undefined;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return items.reduce((memo, item) => {
|
|
18
|
+
const key = keyFn(item);
|
|
19
|
+
|
|
20
|
+
if (key === undefined) {
|
|
21
|
+
return memo;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (hasDefined(memo, key)) {
|
|
25
|
+
memo[key].push(item);
|
|
26
|
+
} else {
|
|
27
|
+
memo[key] = [ item ];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return memo;
|
|
31
|
+
}, {} as Record<string, T[] | undefined>);
|
|
32
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type guard to check to see if the given value is a valid value for the enum.
|
|
3
3
|
*/
|
|
4
|
-
export function isEnumValue<T>(enumType: T, value: unknown): value is T[keyof T] {
|
|
4
|
+
export function isEnumValue<T extends object>(enumType: T, value: unknown): value is T[keyof T] {
|
|
5
5
|
return (Object.keys(enumType) as Array<keyof T>)
|
|
6
6
|
.map((key) => {
|
|
7
7
|
return enumType[key];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isStringUnknownMap, StringUnknownMap } from '../types/StringUnknownMap';
|
|
2
|
+
import { isFunction } from './is-function';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* JSON replacer that recursively sorts object keys to ensure consistent serialization.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```
|
|
9
|
+
* JSON.stringify(query, sortKeysReplacer);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export function sortKeysReplacer(_key: string, value: unknown): unknown {
|
|
13
|
+
if (isStringUnknownMap(value) && !isFunction(value)) {
|
|
14
|
+
return Object.keys(value).sort().reduce((memo, k) => {
|
|
15
|
+
memo[k] = value[k];
|
|
16
|
+
return memo;
|
|
17
|
+
}, {} as StringUnknownMap);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|