@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.
Files changed (117) hide show
  1. package/.github/workflows/ci.yml +49 -0
  2. package/.markdownlint.json +3 -0
  3. package/.nvmrc +1 -1
  4. package/CHANGELOG.md +20 -0
  5. package/README.md +7 -3
  6. package/commitlint.config.js +1 -1
  7. package/dist/commonjs/index.js +15 -1
  8. package/dist/commonjs/index.js.map +1 -1
  9. package/dist/commonjs/types/KeyValueStringObject.js +8 -8
  10. package/dist/commonjs/types/KeyValueStringObject.js.map +1 -1
  11. package/dist/commonjs/types/StrictUnion.js +4 -0
  12. package/dist/commonjs/types/StrictUnion.js.map +1 -0
  13. package/dist/commonjs/types/StringArrayOfStringsMap.js +6 -6
  14. package/dist/commonjs/types/StringArrayOfStringsMap.js.map +1 -1
  15. package/dist/commonjs/types/StringMap.js +6 -6
  16. package/dist/commonjs/types/StringMap.js.map +1 -1
  17. package/dist/commonjs/types/StringUnknownMap.js +4 -3
  18. package/dist/commonjs/types/StringUnknownMap.js.map +1 -1
  19. package/dist/commonjs/utils/chunk.js +3 -2
  20. package/dist/commonjs/utils/chunk.js.map +1 -1
  21. package/dist/commonjs/utils/delay.js +3 -2
  22. package/dist/commonjs/utils/delay.js.map +1 -1
  23. package/dist/commonjs/utils/escape-html.js +23 -0
  24. package/dist/commonjs/utils/escape-html.js.map +1 -0
  25. package/dist/commonjs/utils/flatten.js +3 -6
  26. package/dist/commonjs/utils/flatten.js.map +1 -1
  27. package/dist/commonjs/utils/get-tag-string.js +1 -0
  28. package/dist/commonjs/utils/get-tag-string.js.map +1 -1
  29. package/dist/commonjs/utils/get.js +99 -0
  30. package/dist/commonjs/utils/get.js.map +1 -0
  31. package/dist/commonjs/utils/has-defined.js +2 -1
  32. package/dist/commonjs/utils/has-defined.js.map +1 -1
  33. package/dist/commonjs/utils/is-arguments.js +2 -1
  34. package/dist/commonjs/utils/is-arguments.js.map +1 -1
  35. package/dist/commonjs/utils/is-array-of-strings.js +4 -4
  36. package/dist/commonjs/utils/is-array-of-strings.js.map +1 -1
  37. package/dist/commonjs/utils/is-array.js +1 -0
  38. package/dist/commonjs/utils/is-array.js.map +1 -1
  39. package/dist/commonjs/utils/is-empty.js +5 -4
  40. package/dist/commonjs/utils/is-empty.js.map +1 -1
  41. package/dist/commonjs/utils/is-enum-value.js +3 -2
  42. package/dist/commonjs/utils/is-enum-value.js.map +1 -1
  43. package/dist/commonjs/utils/is-map-with-values-of-type.js +3 -3
  44. package/dist/commonjs/utils/is-map-with-values-of-type.js.map +1 -1
  45. package/dist/commonjs/utils/is-not-null-or-undefined.js +13 -0
  46. package/dist/commonjs/utils/is-not-null-or-undefined.js.map +1 -0
  47. package/dist/commonjs/utils/is-null.js +8 -0
  48. package/dist/commonjs/utils/is-null.js.map +1 -0
  49. package/dist/commonjs/utils/is-number.js +3 -2
  50. package/dist/commonjs/utils/is-number.js.map +1 -1
  51. package/dist/commonjs/utils/is-object.js +2 -1
  52. package/dist/commonjs/utils/is-object.js.map +1 -1
  53. package/dist/commonjs/utils/is-promise-like.js +3 -2
  54. package/dist/commonjs/utils/is-promise-like.js.map +1 -1
  55. package/dist/commonjs/utils/is-promise.js +3 -2
  56. package/dist/commonjs/utils/is-promise.js.map +1 -1
  57. package/dist/commonjs/utils/is-string.js +3 -2
  58. package/dist/commonjs/utils/is-string.js.map +1 -1
  59. package/dist/commonjs/utils/is-undefined.js +1 -0
  60. package/dist/commonjs/utils/is-undefined.js.map +1 -1
  61. package/dist/commonjs/utils/make-template.js +73 -0
  62. package/dist/commonjs/utils/make-template.js.map +1 -0
  63. package/dist/commonjs/utils/pick.js +15 -0
  64. package/dist/commonjs/utils/pick.js.map +1 -0
  65. package/dist/commonjs/utils/pluck.js +2 -1
  66. package/dist/commonjs/utils/pluck.js.map +1 -1
  67. package/dist/commonjs/utils/uniq.js +49 -0
  68. package/dist/commonjs/utils/uniq.js.map +1 -0
  69. package/dist/esm/index.js +14 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/types/StrictUnion.js +2 -0
  72. package/dist/esm/types/StrictUnion.js.map +1 -0
  73. package/dist/esm/utils/chunk.js.map +1 -1
  74. package/dist/esm/utils/escape-html.js +19 -0
  75. package/dist/esm/utils/escape-html.js.map +1 -0
  76. package/dist/esm/utils/flatten.js.map +1 -1
  77. package/dist/esm/utils/get.js +96 -0
  78. package/dist/esm/utils/get.js.map +1 -0
  79. package/dist/esm/utils/is-not-null-or-undefined.js +9 -0
  80. package/dist/esm/utils/is-not-null-or-undefined.js.map +1 -0
  81. package/dist/esm/utils/is-null.js +4 -0
  82. package/dist/esm/utils/is-null.js.map +1 -0
  83. package/dist/esm/utils/is-undefined.js.map +1 -1
  84. package/dist/esm/utils/make-template.js +69 -0
  85. package/dist/esm/utils/make-template.js.map +1 -0
  86. package/dist/esm/utils/pick.js +11 -0
  87. package/dist/esm/utils/pick.js.map +1 -0
  88. package/dist/esm/utils/pluck.js.map +1 -1
  89. package/dist/esm/utils/uniq.js +46 -0
  90. package/dist/esm/utils/uniq.js.map +1 -0
  91. package/dist/types/index.d.ts +8 -0
  92. package/dist/types/types/StrictUnion.d.ts +15 -0
  93. package/dist/types/utils/chunk.d.ts +1 -1
  94. package/dist/types/utils/escape-html.d.ts +1 -0
  95. package/dist/types/utils/flatten.d.ts +1 -1
  96. package/dist/types/utils/get.d.ts +8 -0
  97. package/dist/types/utils/is-not-null-or-undefined.d.ts +4 -0
  98. package/dist/types/utils/is-null.d.ts +1 -0
  99. package/dist/types/utils/is-undefined.d.ts +1 -1
  100. package/dist/types/utils/make-template.d.ts +41 -0
  101. package/dist/types/utils/pick.d.ts +2 -0
  102. package/dist/types/utils/pluck.d.ts +1 -1
  103. package/dist/types/utils/uniq.d.ts +8 -0
  104. package/package.json +18 -21
  105. package/src/index.ts +8 -0
  106. package/src/types/StrictUnion.ts +15 -0
  107. package/src/utils/chunk.ts +1 -1
  108. package/src/utils/escape-html.ts +24 -0
  109. package/src/utils/flatten.ts +2 -2
  110. package/src/utils/get.ts +156 -0
  111. package/src/utils/is-not-null-or-undefined.ts +10 -0
  112. package/src/utils/is-null.ts +3 -0
  113. package/src/utils/is-undefined.ts +1 -1
  114. package/src/utils/make-template.ts +90 -0
  115. package/src/utils/pick.ts +24 -0
  116. package/src/utils/pluck.ts +1 -1
  117. 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
+ }
@@ -1,4 +1,4 @@
1
- export function pluck<T, K extends keyof T>(sources: T[], key: K): T[K][] {
1
+ export function pluck<T, K extends keyof T>(sources: readonly T[], key: K): T[K][] {
2
2
  return sources.map((o) => {
3
3
  return o[key];
4
4
  });
@@ -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
+ };