@silvermine/toolbox 0.1.0 → 0.3.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/.github/workflows/ci.yml +49 -0
- package/.markdownlint.json +3 -0
- package/.nvmrc +1 -1
- package/CHANGELOG.md +20 -0
- package/README.md +7 -3
- package/commitlint.config.js +1 -1
- package/dist/commonjs/index.js +15 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/types/KeyValueStringObject.js +8 -8
- package/dist/commonjs/types/KeyValueStringObject.js.map +1 -1
- package/dist/commonjs/types/StrictUnion.js +4 -0
- package/dist/commonjs/types/StrictUnion.js.map +1 -0
- package/dist/commonjs/types/StringArrayOfStringsMap.js +6 -6
- package/dist/commonjs/types/StringArrayOfStringsMap.js.map +1 -1
- package/dist/commonjs/types/StringMap.js +6 -6
- package/dist/commonjs/types/StringMap.js.map +1 -1
- package/dist/commonjs/types/StringUnknownMap.js +4 -3
- package/dist/commonjs/types/StringUnknownMap.js.map +1 -1
- package/dist/commonjs/utils/chunk.js +3 -2
- package/dist/commonjs/utils/chunk.js.map +1 -1
- package/dist/commonjs/utils/delay.js +3 -2
- package/dist/commonjs/utils/delay.js.map +1 -1
- package/dist/commonjs/utils/escape-html.js +23 -0
- package/dist/commonjs/utils/escape-html.js.map +1 -0
- package/dist/commonjs/utils/flatten.js +3 -6
- package/dist/commonjs/utils/flatten.js.map +1 -1
- package/dist/commonjs/utils/get-tag-string.js +1 -0
- package/dist/commonjs/utils/get-tag-string.js.map +1 -1
- package/dist/commonjs/utils/get.js +99 -0
- package/dist/commonjs/utils/get.js.map +1 -0
- package/dist/commonjs/utils/has-defined.js +2 -1
- package/dist/commonjs/utils/has-defined.js.map +1 -1
- package/dist/commonjs/utils/is-arguments.js +2 -1
- package/dist/commonjs/utils/is-arguments.js.map +1 -1
- package/dist/commonjs/utils/is-array-of-strings.js +4 -4
- package/dist/commonjs/utils/is-array-of-strings.js.map +1 -1
- package/dist/commonjs/utils/is-array.js +1 -0
- package/dist/commonjs/utils/is-array.js.map +1 -1
- package/dist/commonjs/utils/is-empty.js +5 -4
- package/dist/commonjs/utils/is-empty.js.map +1 -1
- package/dist/commonjs/utils/is-enum-value.js +3 -2
- package/dist/commonjs/utils/is-enum-value.js.map +1 -1
- package/dist/commonjs/utils/is-map-with-values-of-type.js +3 -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 +13 -0
- package/dist/commonjs/utils/is-not-null-or-undefined.js.map +1 -0
- package/dist/commonjs/utils/is-null.js +8 -0
- package/dist/commonjs/utils/is-null.js.map +1 -0
- package/dist/commonjs/utils/is-number.js +3 -2
- package/dist/commonjs/utils/is-number.js.map +1 -1
- package/dist/commonjs/utils/is-object.js +2 -1
- package/dist/commonjs/utils/is-object.js.map +1 -1
- package/dist/commonjs/utils/is-promise-like.js +3 -2
- package/dist/commonjs/utils/is-promise-like.js.map +1 -1
- package/dist/commonjs/utils/is-promise.js +3 -2
- package/dist/commonjs/utils/is-promise.js.map +1 -1
- package/dist/commonjs/utils/is-string.js +3 -2
- package/dist/commonjs/utils/is-string.js.map +1 -1
- package/dist/commonjs/utils/is-undefined.js +1 -0
- package/dist/commonjs/utils/is-undefined.js.map +1 -1
- package/dist/commonjs/utils/make-template.js +73 -0
- package/dist/commonjs/utils/make-template.js.map +1 -0
- package/dist/commonjs/utils/pick.js +15 -0
- package/dist/commonjs/utils/pick.js.map +1 -0
- package/dist/commonjs/utils/pluck.js +2 -1
- package/dist/commonjs/utils/pluck.js.map +1 -1
- package/dist/commonjs/utils/uniq.js +49 -0
- package/dist/commonjs/utils/uniq.js.map +1 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/StrictUnion.js +2 -0
- package/dist/esm/types/StrictUnion.js.map +1 -0
- package/dist/esm/utils/chunk.js.map +1 -1
- package/dist/esm/utils/escape-html.js +19 -0
- package/dist/esm/utils/escape-html.js.map +1 -0
- package/dist/esm/utils/flatten.js.map +1 -1
- package/dist/esm/utils/get.js +96 -0
- package/dist/esm/utils/get.js.map +1 -0
- package/dist/esm/utils/is-not-null-or-undefined.js +9 -0
- package/dist/esm/utils/is-not-null-or-undefined.js.map +1 -0
- package/dist/esm/utils/is-null.js +4 -0
- package/dist/esm/utils/is-null.js.map +1 -0
- package/dist/esm/utils/is-undefined.js.map +1 -1
- package/dist/esm/utils/make-template.js +69 -0
- package/dist/esm/utils/make-template.js.map +1 -0
- package/dist/esm/utils/pick.js +11 -0
- package/dist/esm/utils/pick.js.map +1 -0
- package/dist/esm/utils/pluck.js.map +1 -1
- package/dist/esm/utils/uniq.js +46 -0
- package/dist/esm/utils/uniq.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/types/StrictUnion.d.ts +15 -0
- package/dist/types/utils/chunk.d.ts +1 -1
- package/dist/types/utils/escape-html.d.ts +1 -0
- package/dist/types/utils/flatten.d.ts +1 -1
- package/dist/types/utils/get.d.ts +8 -0
- package/dist/types/utils/is-not-null-or-undefined.d.ts +4 -0
- package/dist/types/utils/is-null.d.ts +1 -0
- package/dist/types/utils/is-undefined.d.ts +1 -1
- package/dist/types/utils/make-template.d.ts +41 -0
- package/dist/types/utils/pick.d.ts +2 -0
- package/dist/types/utils/pluck.d.ts +1 -1
- package/dist/types/utils/uniq.d.ts +8 -0
- package/package.json +18 -21
- package/src/index.ts +8 -0
- package/src/types/StrictUnion.ts +15 -0
- package/src/utils/chunk.ts +1 -1
- package/src/utils/escape-html.ts +24 -0
- package/src/utils/flatten.ts +2 -2
- package/src/utils/get.ts +156 -0
- package/src/utils/is-not-null-or-undefined.ts +10 -0
- package/src/utils/is-null.ts +3 -0
- package/src/utils/is-undefined.ts +1 -1
- package/src/utils/make-template.ts +90 -0
- package/src/utils/pick.ts +24 -0
- package/src/utils/pluck.ts +1 -1
- package/src/utils/uniq.ts +59 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isArray } from './is-array';
|
|
2
|
+
|
|
3
|
+
// NOTE: If changing these types, ensure the following cases cause a type error:
|
|
4
|
+
//
|
|
5
|
+
// const noProps = pick({ a: 1 });
|
|
6
|
+
//
|
|
7
|
+
// noProps.a; // Property 'a' does not exist on type 'Pick<{ a: number; }, never>'.
|
|
8
|
+
//
|
|
9
|
+
// const emptyArr = pick({ a: 1 }, []);
|
|
10
|
+
//
|
|
11
|
+
// emptyArr.a; // Property 'a' does not exist on type 'Pick<{ a: number; }, never>'.
|
|
12
|
+
|
|
13
|
+
export function pick<T extends object, K extends keyof T>(obj: T, props: K[]): Pick<T, K>;
|
|
14
|
+
export function pick<T extends object, K extends keyof T = never>(obj: T, ...props: K[]): Pick<T, K>;
|
|
15
|
+
export function pick<T extends object, K extends keyof T>(obj: T, ...args: K[] | [ K[] ]): Pick<T, K> {
|
|
16
|
+
const props = ((args.length === 1 && isArray(args[0])) ? args[0] : args) as K[];
|
|
17
|
+
|
|
18
|
+
return props.reduce((memo, prop) => {
|
|
19
|
+
if (prop in obj) {
|
|
20
|
+
memo[prop] = obj[prop];
|
|
21
|
+
}
|
|
22
|
+
return memo;
|
|
23
|
+
}, {} as Pick<T, K>);
|
|
24
|
+
}
|
package/src/utils/pluck.ts
CHANGED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const iterateeUniq = <T, U>(arr: T[], iteratee: (value: T, i: number, arr: T[]) => U): T[] => {
|
|
2
|
+
const result: T[] = [],
|
|
3
|
+
seen: U[] = [];
|
|
4
|
+
|
|
5
|
+
for (let i = 0, length = arr.length; i < length; i++) {
|
|
6
|
+
let value = arr[i],
|
|
7
|
+
computed = iteratee(value, i, arr);
|
|
8
|
+
|
|
9
|
+
if (seen.indexOf(computed) === -1) {
|
|
10
|
+
seen.push(computed);
|
|
11
|
+
result.push(value);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
const sortedUniq = <T, U>(arr: T[]): T[] => {
|
|
19
|
+
const result: T[] = [];
|
|
20
|
+
|
|
21
|
+
let lastSeen: T | U | undefined;
|
|
22
|
+
|
|
23
|
+
for (let i = 0, length = arr.length; i < length; i++) {
|
|
24
|
+
let value = arr[i];
|
|
25
|
+
|
|
26
|
+
if (i === 0 || lastSeen !== value) {
|
|
27
|
+
result.push(value);
|
|
28
|
+
}
|
|
29
|
+
lastSeen = value;
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
const standardUniq = <T>(arr: T[]): T[] => {
|
|
36
|
+
const result = arr.filter((value, index, _arr) => {
|
|
37
|
+
return _arr.indexOf(value) === index;
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Produce a duplicate-free version of the array. If the array has already
|
|
46
|
+
* been sorted, you have the option of using a faster algorithm.
|
|
47
|
+
* The faster algorithm will not work with an iteratee if the iteratee
|
|
48
|
+
* is not a one-to-one function, so providing an iteratee will disable
|
|
49
|
+
* the faster algorithm.
|
|
50
|
+
*/
|
|
51
|
+
export const uniq = <T, U>(arr: T[], isSorted?: boolean, iteratee?: (value: T, i: number, arr: T[]) => U): T[] => {
|
|
52
|
+
if (iteratee) {
|
|
53
|
+
return iterateeUniq(arr, iteratee);
|
|
54
|
+
}
|
|
55
|
+
if (isSorted) {
|
|
56
|
+
return sortedUniq(arr);
|
|
57
|
+
}
|
|
58
|
+
return standardUniq(arr);
|
|
59
|
+
};
|