@silvermine/toolbox 0.4.0 → 0.5.1
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/.vscode/settings.json +3 -0
- package/CHANGELOG.md +24 -0
- package/dist/commonjs/types/KeyValueStringObject.js +4 -6
- package/dist/commonjs/types/KeyValueStringObject.js.map +1 -1
- package/dist/commonjs/types/StrictUnion.js +0 -1
- package/dist/commonjs/types/StrictUnion.js.map +1 -1
- package/dist/commonjs/types/StringArrayOfStringsMap.js +3 -5
- package/dist/commonjs/types/StringArrayOfStringsMap.js.map +1 -1
- package/dist/commonjs/types/StringMap.js +3 -5
- package/dist/commonjs/types/StringMap.js.map +1 -1
- package/dist/commonjs/types/StringUnknownMap.js.map +1 -1
- package/dist/commonjs/types/UnionKeys.js +3 -0
- package/dist/commonjs/types/UnionKeys.js.map +1 -0
- package/dist/commonjs/utils/get-tag-string.js.map +1 -1
- package/dist/commonjs/utils/get.js +3 -0
- package/dist/commonjs/utils/get.js.map +1 -1
- package/dist/commonjs/utils/has-defined.js.map +1 -1
- package/dist/commonjs/utils/is-array-of-strings.js +1 -1
- package/dist/commonjs/utils/is-array-of-strings.js.map +1 -1
- package/dist/commonjs/utils/is-empty.js +10 -11
- package/dist/commonjs/utils/is-empty.js.map +1 -1
- package/dist/commonjs/utils/is-map-with-values-of-type.js +1 -1
- package/dist/commonjs/utils/is-map-with-values-of-type.js.map +1 -1
- package/dist/commonjs/utils/is-object.js +1 -1
- package/dist/commonjs/utils/is-object.js.map +1 -1
- package/dist/commonjs/utils/is-promise-like.js.map +1 -1
- package/dist/commonjs/utils/make-template.js +3 -6
- package/dist/commonjs/utils/make-template.js.map +1 -1
- package/dist/commonjs/utils/uniq.js +2 -2
- package/dist/commonjs/utils/uniq.js.map +1 -1
- package/dist/esm/types/KeyValueStringObject.js +4 -6
- package/dist/esm/types/KeyValueStringObject.js.map +1 -1
- package/dist/esm/types/StrictUnion.js +0 -1
- package/dist/esm/types/StrictUnion.js.map +1 -1
- package/dist/esm/types/StringArrayOfStringsMap.js +3 -5
- package/dist/esm/types/StringArrayOfStringsMap.js.map +1 -1
- package/dist/esm/types/StringMap.js +3 -5
- package/dist/esm/types/StringMap.js.map +1 -1
- package/dist/esm/types/StringUnknownMap.js.map +1 -1
- package/dist/esm/types/UnionKeys.js +1 -0
- package/dist/esm/types/UnionKeys.js.map +1 -0
- package/dist/esm/utils/get-tag-string.js.map +1 -1
- package/dist/esm/utils/get.js +3 -0
- package/dist/esm/utils/get.js.map +1 -1
- package/dist/esm/utils/has-defined.js.map +1 -1
- package/dist/esm/utils/is-array-of-strings.js +1 -1
- package/dist/esm/utils/is-array-of-strings.js.map +1 -1
- package/dist/esm/utils/is-empty.js +10 -11
- package/dist/esm/utils/is-empty.js.map +1 -1
- package/dist/esm/utils/is-map-with-values-of-type.js +1 -1
- package/dist/esm/utils/is-map-with-values-of-type.js.map +1 -1
- package/dist/esm/utils/is-object.js +1 -1
- package/dist/esm/utils/is-object.js.map +1 -1
- package/dist/esm/utils/is-promise-like.js.map +1 -1
- package/dist/esm/utils/make-template.js +3 -6
- package/dist/esm/utils/make-template.js.map +1 -1
- package/dist/esm/utils/uniq.js +2 -2
- package/dist/esm/utils/uniq.js.map +1 -1
- package/dist/types/types/KeyValueStringObject.d.ts +1 -1
- package/dist/types/types/StrictUnion.d.ts +1 -1
- package/dist/types/types/StringArrayOfStringsMap.d.ts +1 -1
- package/dist/types/types/StringMap.d.ts +1 -1
- package/dist/types/types/StringUnknownMap.d.ts +1 -1
- package/dist/types/types/UnionKeys.d.ts +9 -0
- package/dist/types/utils/get-tag-string.d.ts +1 -1
- package/dist/types/utils/has-defined.d.ts +4 -1
- package/dist/types/utils/is-empty.d.ts +11 -1
- package/dist/types/utils/is-map-with-values-of-type.d.ts +1 -1
- package/dist/types/utils/make-template.d.ts +1 -1
- package/eslint.config.js +15 -0
- package/package.json +5 -5
- package/src/types/KeyValueStringObject.ts +5 -7
- package/src/types/StrictUnion.ts +1 -2
- package/src/types/StringArrayOfStringsMap.ts +5 -7
- package/src/types/StringMap.ts +5 -7
- package/src/types/StringUnknownMap.ts +1 -1
- package/src/types/UnionKeys.ts +9 -0
- package/src/utils/get-tag-string.ts +1 -1
- package/src/utils/get.ts +3 -0
- package/src/utils/has-defined.ts +2 -1
- package/src/utils/is-array-of-strings.ts +1 -1
- package/src/utils/is-empty.ts +35 -3
- package/src/utils/is-map-with-values-of-type.ts +3 -3
- package/src/utils/is-object.ts +1 -1
- package/src/utils/is-promise-like.ts +1 -1
- package/src/utils/make-template.ts +8 -11
- package/src/utils/uniq.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-map-with-values-of-type.js","sourceRoot":"","sources":["../../../src/utils/is-map-with-values-of-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAI,
|
|
1
|
+
{"version":3,"file":"is-map-with-values-of-type.js","sourceRoot":"","sources":["../../../src/utils/is-map-with-values-of-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAI,KAA6B,EAAE,CAAU;IAC/E,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;QACzB,OAAO,KAAK,CAAC;KACf;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACf,OAAO,KAAK,CAAC;SACf;KACH;IAED,OAAO,IAAI,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../src/utils/is-object.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAU;IAChC,
|
|
1
|
+
{"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../src/utils/is-object.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAU;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC;IAEtB,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-promise-like.js","sourceRoot":"","sources":["../../../src/utils/is-promise-like.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,CAAU;IACrC,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAQ,
|
|
1
|
+
{"version":3,"file":"is-promise-like.js","sourceRoot":"","sources":["../../../src/utils/is-promise-like.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,CAAU;IACrC,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAQ,CAA0B,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AAClG,CAAC"}
|
|
@@ -4,6 +4,7 @@ const DEFAULT_SETTINGS = {
|
|
|
4
4
|
escape: /<%-([\s\S]+?)%>/g,
|
|
5
5
|
interpolate: /<%=([\s\S]+?)%>/g,
|
|
6
6
|
};
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
8
|
function getValue(path, data) {
|
|
8
9
|
return get(data, (path || '').trim(), '');
|
|
9
10
|
}
|
|
@@ -37,12 +38,8 @@ function getValue(path, data) {
|
|
|
37
38
|
* an empty string placed in that location.
|
|
38
39
|
*/
|
|
39
40
|
export function makeTemplate(text, userSettings) {
|
|
40
|
-
let
|
|
41
|
-
regExpPattern = [
|
|
42
|
-
settings.escape.source,
|
|
43
|
-
settings.interpolate.source,
|
|
44
|
-
];
|
|
45
|
-
matcher = new RegExp(regExpPattern.join('|') + '|$', 'g');
|
|
41
|
+
let index = 0;
|
|
42
|
+
const parts = [], settings = Object.assign({}, DEFAULT_SETTINGS, userSettings || {}), regExpPattern = [settings.escape.source, settings.interpolate.source], matcher = new RegExp(regExpPattern.join('|') + '|$', 'g');
|
|
46
43
|
text.replace(matcher, (match, escape, interpolate, offset) => {
|
|
47
44
|
parts.push(text.slice(index, offset));
|
|
48
45
|
index = offset + match.length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-template.js","sourceRoot":"","sources":["../../../src/utils/make-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,gBAAgB,GAA4B;IAC/C,MAAM,EAAE,kBAAkB;IAC1B,WAAW,EAAE,kBAAkB;CACjC,CAAC;AAEF,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAS;IACtC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,YAAsC;IAG9E,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"make-template.js","sourceRoot":"","sources":["../../../src/utils/make-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,gBAAgB,GAA4B;IAC/C,MAAM,EAAE,kBAAkB;IAC1B,WAAW,EAAE,kBAAkB;CACjC,CAAC;AAEF,8DAA8D;AAC9D,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAS;IACtC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,YAAsC;IAG9E,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,KAAK,GAAkC,EAAE,EACzC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,YAAY,IAAI,EAAE,CAAC,EAClE,aAAa,GAAG,CAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAE,EACvE,OAAO,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;IAEhE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE;QAC1D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACtC,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAE9B,IAAI,MAAM,EAAE;YACT,KAAK,CAAC,IAAI,CAAC,CAAC,IAAa,EAAE,EAAE;gBAC1B,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;SACL;aAAM,IAAI,WAAW,EAAE;YACrB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;SAC/C;QAED,iFAAiF;QACjF,oFAAoF;QACpF,QAAQ;QACR,OAAO,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAa,EAAU,EAAE;QAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAU,EAAE;YACxC,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAErE,OAAO,IAAI,GAAG,MAAM,CAAC;QACxB,CAAC,EAAE,EAAE,CAAW,CAAC;IACpB,CAAC,CAAC;AACL,CAAC"}
|
package/dist/esm/utils/uniq.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const iterateeUniq = (arr, iteratee) => {
|
|
2
2
|
const result = [], seen = [];
|
|
3
3
|
for (let i = 0, length = arr.length; i < length; i++) {
|
|
4
|
-
|
|
4
|
+
const value = arr[i], computed = iteratee(value, i, arr);
|
|
5
5
|
if (seen.indexOf(computed) === -1) {
|
|
6
6
|
seen.push(computed);
|
|
7
7
|
result.push(value);
|
|
@@ -13,7 +13,7 @@ const sortedUniq = (arr) => {
|
|
|
13
13
|
const result = [];
|
|
14
14
|
let lastSeen;
|
|
15
15
|
for (let i = 0, length = arr.length; i < length; i++) {
|
|
16
|
-
|
|
16
|
+
const value = arr[i];
|
|
17
17
|
if (i === 0 || lastSeen !== value) {
|
|
18
18
|
result.push(value);
|
|
19
19
|
}
|
|
@@ -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;QACnD,
|
|
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;QACnD,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;YAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrB;KACH;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;QACnD,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,KAAK,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrB;QACD,QAAQ,GAAG,KAAK,CAAC;KACnB;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;QACX,OAAO,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KACrC;IACD,IAAI,QAAQ,EAAE;QACX,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;KACzB;IACD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC"}
|
|
@@ -27,4 +27,4 @@ export interface KeyValueStringObject {
|
|
|
27
27
|
*
|
|
28
28
|
* @returns `true` if `o` is a `KeyValueStringObject`
|
|
29
29
|
*/
|
|
30
|
-
export declare function isKeyValueStringObject(o:
|
|
30
|
+
export declare function isKeyValueStringObject(o: unknown): o is KeyValueStringObject;
|
|
@@ -17,4 +17,4 @@ export interface StringArrayOfStringsMap {
|
|
|
17
17
|
*
|
|
18
18
|
* @returns `true` if `o` is a `StringArrayOfStringsMap`
|
|
19
19
|
*/
|
|
20
|
-
export declare function isStringArrayOfStringsMap(o:
|
|
20
|
+
export declare function isStringArrayOfStringsMap(o: unknown): o is StringArrayOfStringsMap;
|
|
@@ -34,4 +34,4 @@
|
|
|
34
34
|
* @see https://github.com/jashkenas/underscore/blob/d5fe0fd4060f13b40608cb9d92eda6d857e8752c/underscore.js#L1326
|
|
35
35
|
* @see https://github.com/lodash/lodash/blob/750067f42d3aa5f927604ece2c6df0ff2b2e9d72/isNumber.js#L31
|
|
36
36
|
*/
|
|
37
|
-
export declare function getTagString(o:
|
|
37
|
+
export declare function getTagString(o: unknown): string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RequireDefined } from '../types/RequireDefined';
|
|
2
|
+
import { UnionKeys } from '../types/UnionKeys';
|
|
2
3
|
/**
|
|
3
4
|
* Tests that an optional or possibly-undefined property on type `T` is defined (that is,
|
|
4
5
|
* not undefined) on object `o`. This is necessary if you want to pass an object that is
|
|
@@ -16,4 +17,6 @@ import { RequireDefined } from '../types/RequireDefined';
|
|
|
16
17
|
* @param propName the name of the optional or possibly-undefined property that you want
|
|
17
18
|
* to be required
|
|
18
19
|
*/
|
|
19
|
-
export declare function hasDefined<T, U extends keyof T
|
|
20
|
+
export declare function hasDefined<T extends object, U extends keyof T | UnionKeys<T>>(o: T, propName: U): o is RequireDefined<Extract<T, {
|
|
21
|
+
[key in U]?: unknown;
|
|
22
|
+
}>, U>;
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
interface IEmptyArguments extends IArguments {
|
|
2
|
+
length: 0;
|
|
3
|
+
}
|
|
4
|
+
interface IEmptyObj {
|
|
5
|
+
[s: string]: never;
|
|
6
|
+
}
|
|
7
|
+
declare type IEmptyTypes = (null | undefined | boolean | number | never[] | '' | IEmptyArguments | Set<never> | IEmptyObj);
|
|
1
8
|
/**
|
|
2
9
|
* Checks if `o` is an empty object. An object is "empty" if it:
|
|
3
10
|
*
|
|
@@ -7,4 +14,7 @@
|
|
|
7
14
|
*
|
|
8
15
|
* @returns `true` if `o` is empty
|
|
9
16
|
*/
|
|
10
|
-
export declare function isEmpty(o:
|
|
17
|
+
export declare function isEmpty(o: unknown[]): boolean;
|
|
18
|
+
export declare function isEmpty(o: object): boolean;
|
|
19
|
+
export declare function isEmpty(o: unknown): o is IEmptyTypes;
|
|
20
|
+
export {};
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* @returns `true` if `o` is a map with `string` keys and values that pass the provided
|
|
5
5
|
* type guard.
|
|
6
6
|
*/
|
|
7
|
-
export declare function isMapWithValuesOfType<T>(guard: (x:
|
|
7
|
+
export declare function isMapWithValuesOfType<T>(guard: (x: unknown) => x is T, o: unknown): o is Record<string, T>;
|
|
@@ -7,7 +7,7 @@ export interface ToolboxTemplateSettings {
|
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
9
|
export interface ToolboxTemplateFunction {
|
|
10
|
-
(data: Record<string,
|
|
10
|
+
(data: Record<string, unknown>): string;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* A simple replacement for _.template from either Underscore or Lodash that removes the
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const config = require('@silvermine/eslint-config'),
|
|
2
|
+
node = require('@silvermine/eslint-config/partials/node'),
|
|
3
|
+
nodeTests = require('@silvermine/eslint-config/partials/node-tests');
|
|
4
|
+
|
|
5
|
+
module.exports = [
|
|
6
|
+
...config,
|
|
7
|
+
{
|
|
8
|
+
files: [ 'tests/**.ts' ],
|
|
9
|
+
...nodeTests,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
files: [ '**/*.ts', '**/*.js' ],
|
|
13
|
+
...node,
|
|
14
|
+
},
|
|
15
|
+
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silvermine/toolbox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
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",
|
|
@@ -37,19 +37,19 @@
|
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@silvermine/chai-strictly-equal": "1.1.1",
|
|
40
|
-
"@silvermine/eslint-config": "github:silvermine/eslint-config-silvermine#
|
|
40
|
+
"@silvermine/eslint-config": "github:silvermine/eslint-config-silvermine#634db8f6cfb2314070ba59339faf86f089c8e65d",
|
|
41
41
|
"@silvermine/standardization": "2.0.0",
|
|
42
42
|
"@silvermine/typescript-config": "git+https://github.com/silvermine/typescript-config#23213e33077089e723629dead5342abe6f3b3c8c",
|
|
43
|
-
"@types/chai": "4.3.
|
|
43
|
+
"@types/chai": "4.3.20",
|
|
44
44
|
"@types/mocha": "5.2.7",
|
|
45
45
|
"@types/node": "12.20.45",
|
|
46
46
|
"@types/sinon": "5.0.7",
|
|
47
47
|
"chai": "4.5.0",
|
|
48
48
|
"check-node-version": "4.2.1",
|
|
49
49
|
"coveralls": "3.1.1",
|
|
50
|
-
"eslint": "8.57.
|
|
50
|
+
"eslint": "8.57.1",
|
|
51
51
|
"grunt": "1.6.1",
|
|
52
|
-
"grunt-cli": "1.
|
|
52
|
+
"grunt-cli": "1.5.0",
|
|
53
53
|
"grunt-concurrent": "3.0.0",
|
|
54
54
|
"grunt-contrib-clean": "2.0.1",
|
|
55
55
|
"grunt-contrib-watch": "1.1.0",
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { isObject } from '../utils/is-object';
|
|
2
|
-
import { isArray } from '../utils/is-array';
|
|
3
|
-
import { isArguments } from '../utils/is-arguments';
|
|
4
1
|
import { isArrayOfStrings } from '../utils/is-array-of-strings';
|
|
5
2
|
import { isString } from '../utils/is-string';
|
|
3
|
+
import { isStringUnknownMap } from './StringUnknownMap';
|
|
6
4
|
|
|
7
5
|
/**
|
|
8
6
|
* `KeyValueStringObject`s have `string`s as keys and one of:
|
|
@@ -32,15 +30,15 @@ export interface KeyValueStringObject { [k: string]: (string | string[] | KeyVal
|
|
|
32
30
|
*
|
|
33
31
|
* @returns `true` if `o` is a `KeyValueStringObject`
|
|
34
32
|
*/
|
|
35
|
-
export function isKeyValueStringObject(o:
|
|
33
|
+
export function isKeyValueStringObject(o: unknown): o is KeyValueStringObject {
|
|
36
34
|
// Arrays and the array-like `arguments` variable are objects, so they would not be
|
|
37
35
|
// caught by an `isObject` check
|
|
38
|
-
if (!
|
|
36
|
+
if (!isStringUnknownMap(o)) {
|
|
39
37
|
return false;
|
|
40
38
|
}
|
|
41
39
|
|
|
42
|
-
for (
|
|
43
|
-
|
|
40
|
+
for (const k of Object.keys(o)) {
|
|
41
|
+
const v: unknown = o[k];
|
|
44
42
|
|
|
45
43
|
if (!isString(v) && !isArrayOfStrings(v) && !isKeyValueStringObject(v)) {
|
|
46
44
|
return false;
|
package/src/types/StrictUnion.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { UnionKeys } from './UnionKeys';
|
|
2
2
|
|
|
3
|
-
type UnionKeys<T> = T extends unknown ? keyof T : never;
|
|
4
3
|
type InvalidKeys<K extends string | number | symbol> = { [P in K]?: never };
|
|
5
4
|
type StrictUnionHelper<T, TAll> = T extends unknown ? (T & InvalidKeys<Exclude<UnionKeys<TAll>, keyof T>>) : never;
|
|
6
5
|
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { isArguments } from '../utils/is-arguments';
|
|
2
1
|
import { isArrayOfStrings } from '../utils/is-array-of-strings';
|
|
3
|
-
import {
|
|
4
|
-
import { isArray } from '../utils/is-array';
|
|
2
|
+
import { isStringUnknownMap } from './StringUnknownMap';
|
|
5
3
|
|
|
6
4
|
/**
|
|
7
5
|
* `StringArrayOfStringsMap`s have `string`s as keys and `string[]` as values. For
|
|
@@ -21,15 +19,15 @@ export interface StringArrayOfStringsMap { [s: string]: string[] }
|
|
|
21
19
|
*
|
|
22
20
|
* @returns `true` if `o` is a `StringArrayOfStringsMap`
|
|
23
21
|
*/
|
|
24
|
-
export function isStringArrayOfStringsMap(o:
|
|
22
|
+
export function isStringArrayOfStringsMap(o: unknown): o is StringArrayOfStringsMap {
|
|
25
23
|
// Arrays and the array-like `arguments` variable are objects, so they would not be
|
|
26
24
|
// caught by an `isObject` check
|
|
27
|
-
if (!
|
|
25
|
+
if (!isStringUnknownMap(o)) {
|
|
28
26
|
return false;
|
|
29
27
|
}
|
|
30
28
|
|
|
31
|
-
for (
|
|
32
|
-
if (!isArrayOfStrings(
|
|
29
|
+
for (const k of Object.keys(o)) {
|
|
30
|
+
if (!isArrayOfStrings(o[k])) {
|
|
33
31
|
return false;
|
|
34
32
|
}
|
|
35
33
|
}
|
package/src/types/StringMap.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { isObject } from '../utils/is-object';
|
|
2
|
-
import { isArray } from '../utils/is-array';
|
|
3
|
-
import { isArguments } from '../utils/is-arguments';
|
|
4
1
|
import { isString } from '../utils/is-string';
|
|
2
|
+
import { isStringUnknownMap } from './StringUnknownMap';
|
|
5
3
|
|
|
6
4
|
/**
|
|
7
5
|
* `StringMap`s have `string`s as keys and `string`s as values. For example:
|
|
@@ -19,15 +17,15 @@ export interface StringMap { [s: string]: string }
|
|
|
19
17
|
*
|
|
20
18
|
* @returns `true` if `o` is a `StringMap`
|
|
21
19
|
*/
|
|
22
|
-
export function isStringMap(o:
|
|
20
|
+
export function isStringMap(o: unknown): o is StringMap {
|
|
23
21
|
// Arrays and the array-like `arguments` variable are objects, so they would not be
|
|
24
22
|
// caught by an `isObject` check
|
|
25
|
-
if (!
|
|
23
|
+
if (!isStringUnknownMap(o)) {
|
|
26
24
|
return false;
|
|
27
25
|
}
|
|
28
26
|
|
|
29
|
-
for (
|
|
30
|
-
if (!isString(
|
|
27
|
+
for (const k of Object.keys(o)) {
|
|
28
|
+
if (!isString(o[k])) {
|
|
31
29
|
return false;
|
|
32
30
|
}
|
|
33
31
|
}
|
|
@@ -57,6 +57,6 @@ export interface StringUnknownMap { [s: string]: unknown }
|
|
|
57
57
|
*
|
|
58
58
|
* @returns `true` if `o` is a `StringUnknownMap`
|
|
59
59
|
*/
|
|
60
|
-
export function isStringUnknownMap(o:
|
|
60
|
+
export function isStringUnknownMap(o: unknown): o is StringUnknownMap {
|
|
61
61
|
return isObject(o) && !isArray(o) && !isArguments(o);
|
|
62
62
|
}
|
|
@@ -34,6 +34,6 @@
|
|
|
34
34
|
* @see https://github.com/jashkenas/underscore/blob/d5fe0fd4060f13b40608cb9d92eda6d857e8752c/underscore.js#L1326
|
|
35
35
|
* @see https://github.com/lodash/lodash/blob/750067f42d3aa5f927604ece2c6df0ff2b2e9d72/isNumber.js#L31
|
|
36
36
|
*/
|
|
37
|
-
export function getTagString(o:
|
|
37
|
+
export function getTagString(o: unknown): string {
|
|
38
38
|
return Object.prototype.toString.call(o);
|
|
39
39
|
}
|
package/src/utils/get.ts
CHANGED
|
@@ -32,6 +32,7 @@ function toKey(value: unknown): string | symbol {
|
|
|
32
32
|
const IS_DEEP_PROP_REGEX = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
|
|
33
33
|
IS_PLAIN_PROP_REGEX = /^\w*$/;
|
|
34
34
|
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
35
36
|
function isKey(value: any, object: any): boolean {
|
|
36
37
|
if (Array.isArray(value)) {
|
|
37
38
|
return false;
|
|
@@ -93,6 +94,7 @@ function stringToPath(str: string): string[] {
|
|
|
93
94
|
return result;
|
|
94
95
|
}
|
|
95
96
|
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
96
98
|
function createPathArray(value: any, object: any): string[] {
|
|
97
99
|
if (Array.isArray(value)) {
|
|
98
100
|
return value;
|
|
@@ -139,6 +141,7 @@ function get<TResult = unknown>(
|
|
|
139
141
|
resultObj: unknown = obj;
|
|
140
142
|
|
|
141
143
|
while (resultObj !== null && resultObj !== undefined && index < length) {
|
|
144
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
142
145
|
resultObj = (resultObj as any)[toKey(pathArray[index])];
|
|
143
146
|
|
|
144
147
|
index += 1;
|
package/src/utils/has-defined.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isUndefined } from './is-undefined';
|
|
2
2
|
import { RequireDefined } from '../types/RequireDefined';
|
|
3
|
+
import { UnionKeys } from '../types/UnionKeys';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Tests that an optional or possibly-undefined property on type `T` is defined (that is,
|
|
@@ -18,6 +19,6 @@ import { RequireDefined } from '../types/RequireDefined';
|
|
|
18
19
|
* @param propName the name of the optional or possibly-undefined property that you want
|
|
19
20
|
* to be required
|
|
20
21
|
*/
|
|
21
|
-
export function hasDefined<T, U extends keyof T
|
|
22
|
+
export function hasDefined<T extends object, U extends keyof T | UnionKeys<T>>(o: T, propName: U): o is RequireDefined<Extract<T, { [key in U]?: unknown }>, U> {
|
|
22
23
|
return Object.prototype.hasOwnProperty.call(o, propName) && !isUndefined(o[propName]);
|
|
23
24
|
}
|
package/src/utils/is-empty.ts
CHANGED
|
@@ -2,6 +2,32 @@ import { isArray } from './is-array';
|
|
|
2
2
|
import { isString } from './is-string';
|
|
3
3
|
import { isArguments } from './is-arguments';
|
|
4
4
|
import { isUndefined } from './is-undefined';
|
|
5
|
+
import { isNull } from './is-null';
|
|
6
|
+
import { isBoolean } from './is-boolean';
|
|
7
|
+
import { isNumber } from './is-number';
|
|
8
|
+
import { isSet } from './is-set';
|
|
9
|
+
import { isObject } from './is-object';
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
interface IEmptyArguments extends IArguments {
|
|
13
|
+
length: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface IEmptyObj {
|
|
17
|
+
[s: string]: never;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type IEmptyTypes = (
|
|
21
|
+
null |
|
|
22
|
+
undefined |
|
|
23
|
+
boolean |
|
|
24
|
+
number |
|
|
25
|
+
never[] |
|
|
26
|
+
'' |
|
|
27
|
+
IEmptyArguments |
|
|
28
|
+
Set<never> |
|
|
29
|
+
IEmptyObj
|
|
30
|
+
);
|
|
5
31
|
|
|
6
32
|
/**
|
|
7
33
|
* Checks if `o` is an empty object. An object is "empty" if it:
|
|
@@ -12,12 +38,18 @@ import { isUndefined } from './is-undefined';
|
|
|
12
38
|
*
|
|
13
39
|
* @returns `true` if `o` is empty
|
|
14
40
|
*/
|
|
15
|
-
export function isEmpty(o:
|
|
16
|
-
|
|
41
|
+
export function isEmpty(o: unknown[]): boolean;
|
|
42
|
+
export function isEmpty(o: object): boolean;
|
|
43
|
+
export function isEmpty(o: unknown): o is IEmptyTypes;
|
|
44
|
+
export function isEmpty(o: unknown): boolean {
|
|
45
|
+
if (isNull(o) || isUndefined(o) || isBoolean(o) || isNumber(o)) {
|
|
17
46
|
return true;
|
|
18
47
|
}
|
|
19
48
|
if (isArray(o) || isString(o) || isArguments(o)) {
|
|
20
49
|
return o.length === 0;
|
|
21
50
|
}
|
|
22
|
-
|
|
51
|
+
if (isSet(o)) {
|
|
52
|
+
return o.size === 0;
|
|
53
|
+
}
|
|
54
|
+
return isObject(o) && Object.keys(o).length === 0;
|
|
23
55
|
}
|
|
@@ -6,13 +6,13 @@ import { isStringUnknownMap } from '../types/StringUnknownMap';
|
|
|
6
6
|
* @returns `true` if `o` is a map with `string` keys and values that pass the provided
|
|
7
7
|
* type guard.
|
|
8
8
|
*/
|
|
9
|
-
export function isMapWithValuesOfType<T>(guard: (x:
|
|
9
|
+
export function isMapWithValuesOfType<T>(guard: (x: unknown) => x is T, o: unknown): o is Record<string, T> {
|
|
10
10
|
if (!isStringUnknownMap(o)) {
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
for (
|
|
15
|
-
if (!guard(
|
|
14
|
+
for (const k of Object.keys(o)) {
|
|
15
|
+
if (!guard(o[k])) {
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
}
|
package/src/utils/is-object.ts
CHANGED
|
@@ -9,5 +9,5 @@ import { isObject } from './is-object';
|
|
|
9
9
|
* @returns `true` if `o` is `Promise`-like (i.e. has a `then` function)
|
|
10
10
|
*/
|
|
11
11
|
export function isPromiseLike(o: unknown): o is PromiseLike<unknown> {
|
|
12
|
-
return isPromise(o) || (isObject(o) && typeof (o as
|
|
12
|
+
return isPromise(o) || (isObject(o) && typeof (o as PromiseLike<unknown>).then === 'function');
|
|
13
13
|
}
|
|
@@ -6,6 +6,7 @@ const DEFAULT_SETTINGS: ToolboxTemplateSettings = {
|
|
|
6
6
|
interpolate: /<%=([\s\S]+?)%>/g,
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
10
|
function getValue(path: string, data: any): unknown {
|
|
10
11
|
return get(data, (path || '').trim(), '');
|
|
11
12
|
}
|
|
@@ -16,7 +17,7 @@ export interface ToolboxTemplateSettings {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
export interface ToolboxTemplateFunction {
|
|
19
|
-
(data: Record<string,
|
|
20
|
+
(data: Record<string, unknown>): string;
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
/**
|
|
@@ -51,23 +52,19 @@ export interface ToolboxTemplateFunction {
|
|
|
51
52
|
export function makeTemplate(text: string, userSettings?: ToolboxTemplateSettings): (data: unknown) => string {
|
|
52
53
|
type TemplateFunction = (data: unknown) => unknown;
|
|
53
54
|
|
|
54
|
-
let
|
|
55
|
-
index = 0,
|
|
56
|
-
settings = Object.assign({}, DEFAULT_SETTINGS, userSettings || {}),
|
|
57
|
-
regExpPattern, matcher;
|
|
55
|
+
let index = 0;
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
matcher = new RegExp(regExpPattern.join('|') + '|$', 'g');
|
|
57
|
+
const parts: (TemplateFunction | string)[] = [],
|
|
58
|
+
settings = Object.assign({}, DEFAULT_SETTINGS, userSettings || {}),
|
|
59
|
+
regExpPattern = [ settings.escape.source, settings.interpolate.source ],
|
|
60
|
+
matcher = new RegExp(regExpPattern.join('|') + '|$', 'g');
|
|
64
61
|
|
|
65
62
|
text.replace(matcher, (match, escape, interpolate, offset) => {
|
|
66
63
|
parts.push(text.slice(index, offset));
|
|
67
64
|
index = offset + match.length;
|
|
68
65
|
|
|
69
66
|
if (escape) {
|
|
70
|
-
parts.push((data:
|
|
67
|
+
parts.push((data: unknown) => {
|
|
71
68
|
return escapeHTML(getValue(escape, data));
|
|
72
69
|
});
|
|
73
70
|
} else if (interpolate) {
|
package/src/utils/uniq.ts
CHANGED
|
@@ -3,8 +3,8 @@ const iterateeUniq = <T, U>(arr: T[], iteratee: (value: T, i: number, arr: T[])
|
|
|
3
3
|
seen: U[] = [];
|
|
4
4
|
|
|
5
5
|
for (let i = 0, length = arr.length; i < length; i++) {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const value = arr[i],
|
|
7
|
+
computed = iteratee(value, i, arr);
|
|
8
8
|
|
|
9
9
|
if (seen.indexOf(computed) === -1) {
|
|
10
10
|
seen.push(computed);
|
|
@@ -21,7 +21,7 @@ const sortedUniq = <T, U>(arr: T[]): T[] => {
|
|
|
21
21
|
let lastSeen: T | U | undefined;
|
|
22
22
|
|
|
23
23
|
for (let i = 0, length = arr.length; i < length; i++) {
|
|
24
|
-
|
|
24
|
+
const value = arr[i];
|
|
25
25
|
|
|
26
26
|
if (i === 0 || lastSeen !== value) {
|
|
27
27
|
result.push(value);
|