@wener/utils 1.1.2 → 1.1.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/cjs/index.js +1 -578
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server.js +2 -0
- package/dist/cjs/server.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/server.js +2 -0
- package/dist/esm/server.js.map +1 -0
- package/dist/system/index.js +2 -0
- package/dist/system/index.js.map +1 -0
- package/dist/system/server.js +2 -0
- package/dist/system/server.js.map +1 -0
- package/index.ts +1 -0
- package/lib/arrays/MaybeArray.js +30 -0
- package/lib/arrays/MaybeArray.js.map +1 -0
- package/lib/asyncs/AsyncInterval.js +15 -0
- package/lib/asyncs/AsyncInterval.js.map +1 -0
- package/lib/asyncs/LazyPromise.js +27 -0
- package/lib/asyncs/LazyPromise.js.map +1 -0
- package/lib/asyncs/isPromise.js +6 -0
- package/lib/asyncs/isPromise.js.map +1 -0
- package/lib/{esm/asyncs/sleep.mjs → asyncs/sleep.js} +1 -1
- package/lib/asyncs/sleep.js.map +1 -0
- package/lib/asyncs/timeout.js +27 -0
- package/lib/asyncs/timeout.js.map +1 -0
- package/lib/browsers/copy.js +51 -0
- package/lib/browsers/copy.js.map +1 -0
- package/lib/browsers/download.js +28 -0
- package/lib/browsers/download.js.map +1 -0
- package/lib/browsers/getFileFromDataTransfer.js +31 -0
- package/lib/browsers/getFileFromDataTransfer.js.map +1 -0
- package/lib/browsers/loaders.js +50 -0
- package/lib/browsers/loaders.js.map +1 -0
- package/lib/crypto/hashing.js +24 -0
- package/lib/crypto/hashing.js.map +1 -0
- package/lib/crypto/hex.js +6 -0
- package/lib/crypto/hex.js.map +1 -0
- package/lib/crypto/randomUUID.js +13 -0
- package/lib/crypto/randomUUID.js.map +1 -0
- package/lib/formats/formatBytes.js +17 -0
- package/lib/formats/formatBytes.js.map +1 -0
- package/lib/index.js +31 -0
- package/lib/index.js.map +1 -0
- package/lib/io/isBuffer.js +6 -0
- package/lib/io/isBuffer.js.map +1 -0
- package/lib/isomorphics/getGlobalThis.js +14 -0
- package/lib/isomorphics/getGlobalThis.js.map +1 -0
- package/lib/logging/createChildLogger.js +18 -0
- package/lib/logging/createChildLogger.js.map +1 -0
- package/lib/logging/createNoopLogger.js +14 -0
- package/lib/logging/createNoopLogger.js.map +1 -0
- package/lib/logging/createWriteLogger.js +13 -0
- package/lib/logging/createWriteLogger.js.map +1 -0
- package/lib/maths/random.js +17 -0
- package/lib/maths/random.js.map +1 -0
- package/lib/modules/isModule.js +6 -0
- package/lib/modules/isModule.js.map +1 -0
- package/lib/modules/parseModuleId.js +31 -0
- package/lib/modules/parseModuleId.js.map +1 -0
- package/lib/server/polyfill.js +8 -0
- package/lib/server/polyfill.js.map +1 -0
- package/lib/server.js +2 -0
- package/lib/server.js.map +1 -0
- package/lib/shim/urljoin.js +51 -0
- package/lib/shim/urljoin.js.map +1 -0
- package/lib/strings/camelCase.js +56 -0
- package/lib/strings/camelCase.js.map +1 -0
- package/lib/strings/templates.js +8 -0
- package/lib/strings/templates.js.map +1 -0
- package/lib/validations/dequal.js +95 -0
- package/lib/validations/dequal.js.map +1 -0
- package/lib/validations/isClass.js +6 -0
- package/lib/validations/isClass.js.map +1 -0
- package/lib/validations/isDefined.js +6 -0
- package/lib/validations/isDefined.js.map +1 -0
- package/lib/validations/isEmptyObject.js +9 -0
- package/lib/validations/isEmptyObject.js.map +1 -0
- package/lib/validations/shallow.js +21 -0
- package/lib/validations/shallow.js.map +1 -0
- package/package.json +37 -34
- package/server.ts +1 -0
- package/src/arrays/MaybeArray.ts +8 -4
- package/src/crypto/randomUUID.ts +3 -0
- package/src/index.ts +20 -1
- package/src/logging/Logger.ts +19 -0
- package/src/logging/createChildLogger.ts +16 -0
- package/src/logging/createNoopLogger.ts +13 -0
- package/src/logging/createWriteLogger.ts +15 -0
- package/src/logging/logger.test.ts +16 -0
- package/src/modules/isModule.ts +3 -0
- package/src/modules/parseModuleId.test.ts +68 -0
- package/src/modules/parseModuleId.ts +46 -0
- package/src/server/polyfill.ts +5 -0
- package/src/server.ts +1 -0
- package/src/shim/urljoin.test.ts +1 -1
- package/src/validations/dequal.test.ts +17 -0
- package/src/validations/dequal.ts +105 -0
- package/src/validations/shallow.ts +26 -0
- package/dist/esm/index.development.js +0 -545
- package/dist/esm/index.development.js.map +0 -1
- package/dist/esm/index.min.js +0 -2
- package/dist/esm/index.min.js.map +0 -1
- package/dist/system/index.development.js +0 -585
- package/dist/system/index.development.js.map +0 -1
- package/dist/system/index.min.js +0 -2
- package/dist/system/index.min.js.map +0 -1
- package/lib/esm/arrays/MaybeArray.mjs +0 -30
- package/lib/esm/arrays/MaybeArray.mjs.map +0 -1
- package/lib/esm/asyncs/AsyncInterval.mjs +0 -15
- package/lib/esm/asyncs/AsyncInterval.mjs.map +0 -1
- package/lib/esm/asyncs/LazyPromise.mjs +0 -24
- package/lib/esm/asyncs/LazyPromise.mjs.map +0 -1
- package/lib/esm/asyncs/isPromise.mjs +0 -6
- package/lib/esm/asyncs/isPromise.mjs.map +0 -1
- package/lib/esm/asyncs/sleep.mjs.map +0 -1
- package/lib/esm/asyncs/timeout.mjs +0 -24
- package/lib/esm/asyncs/timeout.mjs.map +0 -1
- package/lib/esm/browsers/copy.mjs +0 -57
- package/lib/esm/browsers/copy.mjs.map +0 -1
- package/lib/esm/browsers/download.mjs +0 -40
- package/lib/esm/browsers/download.mjs.map +0 -1
- package/lib/esm/browsers/getFileFromDataTransfer.mjs +0 -39
- package/lib/esm/browsers/getFileFromDataTransfer.mjs.map +0 -1
- package/lib/esm/browsers/loaders.mjs +0 -52
- package/lib/esm/browsers/loaders.mjs.map +0 -1
- package/lib/esm/crypto/hashing.mjs +0 -25
- package/lib/esm/crypto/hashing.mjs.map +0 -1
- package/lib/esm/crypto/hex.mjs +0 -8
- package/lib/esm/crypto/hex.mjs.map +0 -1
- package/lib/esm/crypto/randomUUID.mjs +0 -13
- package/lib/esm/crypto/randomUUID.mjs.map +0 -1
- package/lib/esm/formats/formatBytes.mjs +0 -29
- package/lib/esm/formats/formatBytes.mjs.map +0 -1
- package/lib/esm/index.mjs +0 -24
- package/lib/esm/index.mjs.map +0 -1
- package/lib/esm/io/isBuffer.mjs +0 -10
- package/lib/esm/io/isBuffer.mjs.map +0 -1
- package/lib/esm/isomorphics/getGlobalThis.mjs +0 -23
- package/lib/esm/isomorphics/getGlobalThis.mjs.map +0 -1
- package/lib/esm/maths/random.mjs +0 -18
- package/lib/esm/maths/random.mjs.map +0 -1
- package/lib/esm/shim/urljoin.mjs +0 -65
- package/lib/esm/shim/urljoin.mjs.map +0 -1
- package/lib/esm/strings/camelCase.mjs +0 -70
- package/lib/esm/strings/camelCase.mjs.map +0 -1
- package/lib/esm/strings/templates.mjs +0 -16
- package/lib/esm/strings/templates.mjs.map +0 -1
- package/lib/esm/validations/isClass.mjs +0 -6
- package/lib/esm/validations/isClass.mjs.map +0 -1
- package/lib/esm/validations/isDefined.mjs +0 -6
- package/lib/esm/validations/isDefined.mjs.map +0 -1
- package/lib/esm/validations/isEmptyObject.mjs +0 -9
- package/lib/esm/validations/isEmptyObject.mjs.map +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
function preserveCamelCase(string) {
|
|
2
|
+
let isLastCharLower = false;
|
|
3
|
+
let isLastCharUpper = false;
|
|
4
|
+
let isLastLastCharUpper = false;
|
|
5
|
+
for (let i = 0; i < string.length; i++) {
|
|
6
|
+
const character = string[i];
|
|
7
|
+
if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {
|
|
8
|
+
string = string.slice(0, i) + "-" + string.slice(i);
|
|
9
|
+
isLastCharLower = false;
|
|
10
|
+
isLastLastCharUpper = isLastCharUpper;
|
|
11
|
+
isLastCharUpper = true;
|
|
12
|
+
i++;
|
|
13
|
+
} else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {
|
|
14
|
+
string = string.slice(0, i - 1) + "-" + string.slice(i - 1);
|
|
15
|
+
isLastLastCharUpper = isLastCharUpper;
|
|
16
|
+
isLastCharUpper = false;
|
|
17
|
+
isLastCharLower = true;
|
|
18
|
+
} else {
|
|
19
|
+
isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;
|
|
20
|
+
isLastLastCharUpper = isLastCharUpper;
|
|
21
|
+
isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return string;
|
|
25
|
+
}
|
|
26
|
+
function pascalCase(input) {
|
|
27
|
+
return camelCase(input, { pascalCase: true });
|
|
28
|
+
}
|
|
29
|
+
function camelCase(input, options = {
|
|
30
|
+
pascalCase: false
|
|
31
|
+
}) {
|
|
32
|
+
if (!(typeof input === "string" || Array.isArray(input))) {
|
|
33
|
+
throw new TypeError("Expected the input to be `string | string[]`");
|
|
34
|
+
}
|
|
35
|
+
const postProcess = (x) => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;
|
|
36
|
+
if (Array.isArray(input)) {
|
|
37
|
+
input = input.map((x) => x.trim()).filter((x) => x.length).join("-");
|
|
38
|
+
} else {
|
|
39
|
+
input = input.trim();
|
|
40
|
+
}
|
|
41
|
+
if (input.length === 0) {
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
if (input.length === 1) {
|
|
45
|
+
return options.pascalCase ? input.toUpperCase() : input.toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
const hasUpperCase = input !== input.toLowerCase();
|
|
48
|
+
if (hasUpperCase) {
|
|
49
|
+
input = preserveCamelCase(input);
|
|
50
|
+
}
|
|
51
|
+
input = input.replace(/^[_.\- ]+/, "").toLowerCase().replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase()).replace(/\d+(\w|$)/g, (m) => m.toUpperCase());
|
|
52
|
+
return postProcess(input);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { camelCase, pascalCase };
|
|
56
|
+
//# sourceMappingURL=camelCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camelCase.js","sources":["../../src/strings/camelCase.ts"],"sourcesContent":["// https://github.com/sindresorhus/camelcase/blob/master/index.js\n\nfunction preserveCamelCase(string: string) {\n let isLastCharLower = false;\n let isLastCharUpper = false;\n let isLastLastCharUpper = false;\n\n for (let i = 0; i < string.length; i++) {\n const character = string[i];\n\n if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {\n string = string.slice(0, i) + '-' + string.slice(i);\n isLastCharLower = false;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = true;\n i++;\n } else if (\n isLastCharUpper &&\n isLastLastCharUpper &&\n /[a-zA-Z]/.test(character) &&\n character.toLowerCase() === character\n ) {\n string = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = false;\n isLastCharLower = true;\n } else {\n isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n }\n }\n\n return string;\n}\n\nexport function pascalCase(input: string | string[]) {\n return camelCase(input, { pascalCase: true });\n}\n\nexport function camelCase(\n input: string | string[],\n options: { pascalCase: boolean } = {\n pascalCase: false,\n },\n) {\n if (!(typeof input === 'string' || Array.isArray(input))) {\n throw new TypeError('Expected the input to be `string | string[]`');\n }\n\n const postProcess = (x: string) => (options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x);\n\n if (Array.isArray(input)) {\n input = input\n .map((x) => x.trim())\n .filter((x) => x.length)\n .join('-');\n } else {\n input = input.trim();\n }\n\n if (input.length === 0) {\n return '';\n }\n\n if (input.length === 1) {\n return options.pascalCase ? input.toUpperCase() : input.toLowerCase();\n }\n\n const hasUpperCase = input !== input.toLowerCase();\n\n if (hasUpperCase) {\n input = preserveCamelCase(input);\n }\n\n input = input\n .replace(/^[_.\\- ]+/, '')\n .toLowerCase()\n .replace(/[_.\\- ]+(\\w|$)/g, (_, p1) => p1.toUpperCase())\n .replace(/\\d+(\\w|$)/g, (m) => m.toUpperCase());\n\n return postProcess(input);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sources":["../../src/strings/templates.ts"],"sourcesContent":["/**\n * 替换类似于 JS 的模板字符串\n *\n * @example\n * templateString('My name is ${name}',{name:'wener'})\n */\nexport function templateString(template: string, getter: (v: string) => any) {\n return template.replace(/\\${(.*?)}/g, (_, g) => {\n // variables[g.trim()]\n // 支持路径 - 例如 a.b[0]\n return getter(g.trim());\n });\n}\n"],"names":[],"mappings":"AAMgB,SAAA,cAAA,CAAe,UAAkB,MAA4B,EAAA;AAC3E,EAAA,OAAO,QAAS,CAAA,OAAA,CAAQ,YAAc,EAAA,CAAC,GAAG,CAAM,KAAA;AAG9C,IAAO,OAAA,MAAA,CAAO,CAAE,CAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GACvB,CAAA,CAAA;AACH;;;;"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
const has = Object.prototype.hasOwnProperty;
|
|
2
|
+
const hasElementType = typeof Element !== "undefined";
|
|
3
|
+
function find(iter, tar, key) {
|
|
4
|
+
for (key of iter.keys()) {
|
|
5
|
+
if (dequal(key, tar))
|
|
6
|
+
return key;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function dequal(foo, bar) {
|
|
10
|
+
let ctor, len, tmp;
|
|
11
|
+
if (foo === bar)
|
|
12
|
+
return true;
|
|
13
|
+
if (foo && bar && (ctor = foo.constructor) === bar.constructor) {
|
|
14
|
+
if (ctor === Date)
|
|
15
|
+
return foo.getTime() === bar.getTime();
|
|
16
|
+
if (ctor === RegExp)
|
|
17
|
+
return foo.toString() === bar.toString();
|
|
18
|
+
if (ctor === Array) {
|
|
19
|
+
if ((len = foo.length) === bar.length) {
|
|
20
|
+
while (len-- && dequal(foo[len], bar[len]))
|
|
21
|
+
;
|
|
22
|
+
}
|
|
23
|
+
return len === -1;
|
|
24
|
+
}
|
|
25
|
+
if (ctor === Set) {
|
|
26
|
+
if (foo.size !== bar.size) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
for (len of foo) {
|
|
30
|
+
tmp = len;
|
|
31
|
+
if (tmp && typeof tmp === "object") {
|
|
32
|
+
tmp = find(bar, tmp);
|
|
33
|
+
if (!tmp)
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (!bar.has(tmp))
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (ctor === Map) {
|
|
42
|
+
if (foo.size !== bar.size) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
for (len of foo) {
|
|
46
|
+
tmp = len[0];
|
|
47
|
+
if (tmp && typeof tmp === "object") {
|
|
48
|
+
tmp = find(bar, tmp);
|
|
49
|
+
if (!tmp)
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (!dequal(len[1], bar.get(tmp))) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
if (ctor === ArrayBuffer) {
|
|
59
|
+
foo = new Uint8Array(foo);
|
|
60
|
+
bar = new Uint8Array(bar);
|
|
61
|
+
} else if (ctor === DataView) {
|
|
62
|
+
if ((len = foo.byteLength) === bar.byteLength) {
|
|
63
|
+
while (len-- && foo.getInt8(len) === bar.getInt8(len))
|
|
64
|
+
;
|
|
65
|
+
}
|
|
66
|
+
return len === -1;
|
|
67
|
+
}
|
|
68
|
+
if (ArrayBuffer.isView(foo)) {
|
|
69
|
+
if ((len = foo.byteLength) === bar.byteLength) {
|
|
70
|
+
while (len-- && foo[len] === bar[len])
|
|
71
|
+
;
|
|
72
|
+
}
|
|
73
|
+
return len === -1;
|
|
74
|
+
}
|
|
75
|
+
if (hasElementType && foo instanceof Element)
|
|
76
|
+
return false;
|
|
77
|
+
if (!ctor || typeof foo === "object") {
|
|
78
|
+
len = 0;
|
|
79
|
+
for (ctor in foo) {
|
|
80
|
+
if ((ctor === "_owner" || ctor === "__v" || ctor === "__o") && foo.$$typeof) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (has.call(foo, ctor) && ++len && !has.call(bar, ctor))
|
|
84
|
+
return false;
|
|
85
|
+
if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor]))
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return Object.keys(bar).length === len;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return foo !== foo && bar !== bar;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { dequal };
|
|
95
|
+
//# sourceMappingURL=dequal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dequal.js","sources":["../../src/validations/dequal.ts"],"sourcesContent":["const has = Object.prototype.hasOwnProperty;\nconst hasElementType = typeof Element !== 'undefined';\n\nfunction find(iter: any, tar: any, key?: any) {\n for (key of iter.keys()) {\n if (dequal(key, tar)) return key;\n }\n}\n\n/**\n * deep equal - support react, dom, Date, RegExp, Array, ArrayBuffer, Set, Map, Object\n * @see {@link https://github.com/lukeed/dequal/blob/master/src/lite.js dequal/src/lite.js}\n * @see {@link https://github.com/FormidableLabs/react-fast-compare/blob/master/index.js react-fast-compare/index.js}\n */\nexport function dequal(foo: any, bar: any) {\n let ctor, len, tmp;\n if (foo === bar) return true;\n\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date) return foo.getTime() === bar.getTime();\n if (ctor === RegExp) return foo.toString() === bar.toString();\n\n if (ctor === Array) {\n if ((len = foo.length) === bar.length) {\n while (len-- && dequal(foo[len], bar[len]));\n }\n return len === -1;\n }\n\n if (ctor === Set) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len;\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (!bar.has(tmp)) return false;\n }\n return true;\n }\n\n if (ctor === Map) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len[0];\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (!dequal(len[1], bar.get(tmp))) {\n return false;\n }\n }\n return true;\n }\n\n if (ctor === ArrayBuffer) {\n foo = new Uint8Array(foo);\n bar = new Uint8Array(bar);\n } else if (ctor === DataView) {\n if ((len = foo.byteLength) === bar.byteLength) {\n while (len-- && foo.getInt8(len) === bar.getInt8(len));\n }\n return len === -1;\n }\n\n if (ArrayBuffer.isView(foo)) {\n if ((len = foo.byteLength) === bar.byteLength) {\n while (len-- && (foo as any)[len] === bar[len]);\n }\n return len === -1;\n }\n\n // react & dom\n if (hasElementType && foo instanceof Element) return false;\n\n if (!ctor || typeof foo === 'object') {\n len = 0;\n for (ctor in foo) {\n if ((ctor === '_owner' || ctor === '__v' || ctor === '__o') && foo.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n }\n return Object.keys(bar).length === len;\n }\n }\n\n return foo !== foo && bar !== bar;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isClass.js","sources":["../../src/validations/isClass.ts"],"sourcesContent":["export function isClass(func: any) {\n return typeof func === 'function' && /^class\\s/.test(Function.prototype.toString.call(func));\n}\n"],"names":[],"mappings":"AAAO,SAAS,QAAQ,IAAW,EAAA;AACjC,EAAO,OAAA,OAAO,IAAS,KAAA,UAAA,IAAc,UAAW,CAAA,IAAA,CAAK,SAAS,SAAU,CAAA,QAAA,CAAS,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA;AAC7F;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isDefined.js","sources":["../../src/validations/isDefined.ts"],"sourcesContent":["export function isDefined<T = any>(v: T): v is NonNullable<T> {\n return v !== null && v !== undefined;\n}\n"],"names":[],"mappings":"AAAO,SAAS,UAAmB,CAA2B,EAAA;AAC5D,EAAO,OAAA,CAAA,KAAM,QAAQ,CAAM,KAAA,KAAA,CAAA,CAAA;AAC7B;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isEmptyObject.js","sources":["../../src/validations/isEmptyObject.ts"],"sourcesContent":["export function isEmptyObject(o: any) {\n if (o === null || o === undefined) {\n return true;\n }\n return o.constructor === Object && Object.keys(o).length === 0;\n}\n"],"names":[],"mappings":"AAAO,SAAS,cAAc,CAAQ,EAAA;AACpC,EAAI,IAAA,CAAA,KAAM,IAAQ,IAAA,CAAA,KAAM,KAAW,CAAA,EAAA;AACjC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,EAAE,WAAgB,KAAA,MAAA,IAAU,OAAO,IAAK,CAAA,CAAC,EAAE,MAAW,KAAA,CAAA,CAAA;AAC/D;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
function shallow(objA, objB) {
|
|
2
|
+
if (Object.is(objA, objB)) {
|
|
3
|
+
return true;
|
|
4
|
+
}
|
|
5
|
+
if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const keysA = Object.keys(objA);
|
|
9
|
+
if (keysA.length !== Object.keys(objB).length) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
13
|
+
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { shallow };
|
|
21
|
+
//# sourceMappingURL=shallow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shallow.js","sources":["../../src/validations/shallow.ts"],"sourcesContent":["/**\n * shallow compare - support object, array\n *\n * @see {@link https://github.com/pmndrs/zustand/blob/main/src/shallow.ts zustand/src/shallow.ts}\n */\nexport function shallow<T, U>(objA: T, objB: U) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof U])\n ) {\n return false;\n }\n }\n return true;\n}\n"],"names":[],"mappings":"AAKgB,SAAA,OAAA,CAAc,MAAS,IAAS,EAAA;AAC9C,EAAA,IAAI,MAAO,CAAA,EAAA,CAAG,IAAM,EAAA,IAAI,CAAG,EAAA;AACzB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,OAAO,SAAS,QAAY,IAAA,IAAA,KAAS,QAAQ,OAAO,IAAA,KAAS,QAAY,IAAA,IAAA,KAAS,IAAM,EAAA;AAC1F,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAC9B,EAAA,IAAI,MAAM,MAAW,KAAA,MAAA,CAAO,IAAK,CAAA,IAAI,EAAE,MAAQ,EAAA;AAC7C,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,IAAA,IACE,CAAC,MAAO,CAAA,SAAA,CAAU,eAAe,IAAK,CAAA,IAAA,EAAM,MAAM,CAAY,CAAA,CAAA,IAC9D,CAAC,MAAA,CAAO,GAAG,IAAK,CAAA,KAAA,CAAM,KAAgB,IAAK,CAAA,KAAA,CAAM,GAAc,CAC/D,EAAA;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACF;AACA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
|
package/package.json
CHANGED
|
@@ -1,71 +1,68 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wener/utils",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Utils for daily use",
|
|
3
|
+
"version": "1.1.4",
|
|
5
4
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"keywords": [
|
|
8
|
-
"utils",
|
|
9
|
-
"core library",
|
|
10
|
-
"helper"
|
|
11
|
-
],
|
|
5
|
+
"description": "Utils for daily use",
|
|
12
6
|
"repository": {
|
|
13
7
|
"type": "git",
|
|
14
8
|
"url": "git+https://github.com/wener/wode.git"
|
|
15
9
|
},
|
|
16
|
-
"
|
|
10
|
+
"homepage": "https://github.com/wenerme/wode#readme",
|
|
17
11
|
"author": "wener",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": "16",
|
|
15
|
+
"npm": "8"
|
|
16
|
+
},
|
|
17
|
+
"main": "dist/cjs/index.js",
|
|
18
|
+
"module": "lib/index.js",
|
|
18
19
|
"exports": {
|
|
19
20
|
".": {
|
|
20
21
|
"types": "./src/index.ts",
|
|
21
|
-
"import": "./lib/
|
|
22
|
+
"import": "./lib/index.js",
|
|
22
23
|
"system": {
|
|
23
|
-
"
|
|
24
|
-
"default": "./dist/system/index.min.js"
|
|
24
|
+
"default": "./dist/system/index.js"
|
|
25
25
|
},
|
|
26
26
|
"require": "./dist/cjs/index.js"
|
|
27
27
|
},
|
|
28
28
|
"./types": {
|
|
29
29
|
"types": "./src/types.d.ts"
|
|
30
30
|
},
|
|
31
|
+
"./server": {
|
|
32
|
+
"types": "./src/server.ts",
|
|
33
|
+
"import": "./lib/server.js",
|
|
34
|
+
"system": {
|
|
35
|
+
"default": "./dist/system/server.js"
|
|
36
|
+
},
|
|
37
|
+
"require": "./dist/cjs/server.js"
|
|
38
|
+
},
|
|
31
39
|
"./src/*": "./src/*",
|
|
32
40
|
"./package.json": "./package.json"
|
|
33
41
|
},
|
|
34
|
-
"main": "dist/cjs/index.js",
|
|
35
|
-
"import": "lib/esm/index.mjs",
|
|
36
42
|
"types": "src/index.ts",
|
|
37
|
-
"homepage": "https://github.com/wenerme/wode#readme",
|
|
38
43
|
"files": [
|
|
39
|
-
"index.js",
|
|
40
|
-
"index.d.ts",
|
|
41
|
-
"lib",
|
|
42
44
|
"dist",
|
|
45
|
+
"index.ts",
|
|
46
|
+
"lib",
|
|
47
|
+
"server.ts",
|
|
43
48
|
"src",
|
|
44
|
-
"README.md",
|
|
45
|
-
"rollup.config.ts",
|
|
46
|
-
"jest.config.js",
|
|
47
|
-
"jest.setup.js",
|
|
48
|
-
"tsconfig.rollup.json",
|
|
49
|
-
"tsconfig.jest.json",
|
|
50
49
|
"tsconfig.json"
|
|
51
50
|
],
|
|
51
|
+
"keywords": [
|
|
52
|
+
"utils",
|
|
53
|
+
"core library",
|
|
54
|
+
"helper"
|
|
55
|
+
],
|
|
52
56
|
"devDependencies": {
|
|
53
57
|
"@types/lodash": "^4",
|
|
54
|
-
"@types/node": "^16",
|
|
55
58
|
"ava": "^4.3.3",
|
|
56
|
-
"
|
|
57
|
-
"esbuild": "^0.14",
|
|
58
|
-
"lodash": "^4",
|
|
59
|
-
"tslib": "^2",
|
|
60
|
-
"typescript": "^4"
|
|
59
|
+
"lodash": "^4"
|
|
61
60
|
},
|
|
62
61
|
"publishConfig": {
|
|
62
|
+
"registry": "https://registry.npmjs.org",
|
|
63
63
|
"access": "public"
|
|
64
64
|
},
|
|
65
|
-
"
|
|
66
|
-
"node": "16",
|
|
67
|
-
"npm": "8"
|
|
68
|
-
},
|
|
65
|
+
"sideEffects": false,
|
|
69
66
|
"ava": {
|
|
70
67
|
"extensions": {
|
|
71
68
|
"ts": "module"
|
|
@@ -74,6 +71,12 @@
|
|
|
74
71
|
"--loader=tsx"
|
|
75
72
|
]
|
|
76
73
|
},
|
|
74
|
+
"rollup": {
|
|
75
|
+
"input": [
|
|
76
|
+
"./src/index.ts",
|
|
77
|
+
"./src/server.ts"
|
|
78
|
+
]
|
|
79
|
+
},
|
|
77
80
|
"scripts": {
|
|
78
81
|
"build": "make prepublish",
|
|
79
82
|
"clean": "make clean",
|
package/server.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './src/server';
|
package/src/arrays/MaybeArray.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array or element of an array
|
|
3
|
+
*/
|
|
1
4
|
export type MaybeArray<T> = T | T[];
|
|
2
5
|
|
|
6
|
+
/**
|
|
7
|
+
* convert to single value object
|
|
8
|
+
*/
|
|
3
9
|
export function objectOfMaybeArray<T = any>(
|
|
4
10
|
o: Record<string, MaybeArray<T>>,
|
|
5
11
|
keys: string[] | null = null,
|
|
6
|
-
picker = firstOfMaybeArray
|
|
12
|
+
picker = firstOfMaybeArray,
|
|
7
13
|
): Record<string, T> {
|
|
8
14
|
if (keys === null) {
|
|
9
|
-
return Object.fromEntries(
|
|
10
|
-
Object.entries(o).map(([k, v]) => [k, picker(v)])
|
|
11
|
-
);
|
|
15
|
+
return Object.fromEntries(Object.entries(o).map(([k, v]) => [k, picker(v)]));
|
|
12
16
|
}
|
|
13
17
|
return Object.fromEntries(keys.map((v) => [v, picker(v)])) as any;
|
|
14
18
|
}
|
package/src/crypto/randomUUID.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// arrays
|
|
1
2
|
export {
|
|
2
3
|
firstOfMaybeArray,
|
|
3
4
|
lastOfMaybeArray,
|
|
@@ -6,6 +7,7 @@ export {
|
|
|
6
7
|
type MaybeArray,
|
|
7
8
|
} from './arrays/MaybeArray';
|
|
8
9
|
|
|
10
|
+
// async
|
|
9
11
|
export { createLazyPromise, type LazyPromise } from './asyncs/LazyPromise';
|
|
10
12
|
export { setAsyncInterval, clearAsyncInterval } from './asyncs/AsyncInterval';
|
|
11
13
|
export { type MaybePromise } from './asyncs/MaybePromise';
|
|
@@ -15,24 +17,41 @@ export { timeout, TimeoutError } from './asyncs/timeout';
|
|
|
15
17
|
export { isPromise } from './asyncs/isPromise';
|
|
16
18
|
// export * from './async/promiseOfCallback';
|
|
17
19
|
|
|
18
|
-
//
|
|
20
|
+
// validations
|
|
19
21
|
export { isClass } from './validations/isClass';
|
|
20
22
|
export { isDefined } from './validations/isDefined';
|
|
21
23
|
export { isEmptyObject } from './validations/isEmptyObject';
|
|
24
|
+
export { shallow } from './validations/shallow';
|
|
25
|
+
export { dequal } from './validations/dequal';
|
|
22
26
|
|
|
27
|
+
// modules
|
|
28
|
+
export { parseModuleId, type ParsedModuleId } from './modules/parseModuleId';
|
|
29
|
+
export { isModule } from './modules/isModule';
|
|
30
|
+
|
|
31
|
+
// logging
|
|
32
|
+
export { type Logger, type LogLevel } from './logging/Logger';
|
|
33
|
+
export { createWriteLogger } from './logging/createWriteLogger';
|
|
34
|
+
export { createNoopLogger } from './logging/createNoopLogger';
|
|
35
|
+
export { createChildLogger } from './logging/createChildLogger';
|
|
36
|
+
|
|
37
|
+
// strings
|
|
23
38
|
export { pascalCase, camelCase } from './strings/camelCase';
|
|
24
39
|
export { templateString } from './strings/templates';
|
|
40
|
+
|
|
25
41
|
export { createRandom } from './maths/random';
|
|
26
42
|
export { isBuffer } from './io/isBuffer';
|
|
43
|
+
|
|
27
44
|
export { copy } from './browsers/copy';
|
|
28
45
|
export { download } from './browsers/download';
|
|
29
46
|
export { loadScripts, loadStyles } from './browsers/loaders';
|
|
30
47
|
export { getFileFromDataTransfer } from './browsers/getFileFromDataTransfer';
|
|
31
48
|
|
|
32
49
|
export { getGlobalThis } from './isomorphics/getGlobalThis';
|
|
50
|
+
|
|
33
51
|
export { formatBytes } from './formats/formatBytes';
|
|
34
52
|
export { urljoin } from './shim/urljoin';
|
|
35
53
|
|
|
54
|
+
// crypto
|
|
36
55
|
export { randomUUID } from './crypto/randomUUID';
|
|
37
56
|
export { sha1, sha256, sha384, sha512 } from './crypto/hashing';
|
|
38
57
|
export { hex } from './crypto/hex';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface Logger {
|
|
2
|
+
trace(...data: any[]): void;
|
|
3
|
+
|
|
4
|
+
debug(...data: any[]): void;
|
|
5
|
+
|
|
6
|
+
info(...data: any[]): void;
|
|
7
|
+
|
|
8
|
+
warn(...data: any[]): void;
|
|
9
|
+
|
|
10
|
+
error(...data: any[]): void;
|
|
11
|
+
|
|
12
|
+
child?: (o: object) => Logger;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface LoggerWithChild extends Logger {
|
|
16
|
+
child: (o: object) => LoggerWithChild;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Logger, LoggerWithChild } from './Logger';
|
|
2
|
+
import { createWriteLogger } from './createWriteLogger';
|
|
3
|
+
|
|
4
|
+
export function createChildLogger(l: Logger, ctx: object): LoggerWithChild {
|
|
5
|
+
if (l.child) {
|
|
6
|
+
return l.child(ctx) as LoggerWithChild;
|
|
7
|
+
}
|
|
8
|
+
return createWriteLogger((o) => {
|
|
9
|
+
const { level, values, ...c } = o;
|
|
10
|
+
if (Object.keys(c).length) {
|
|
11
|
+
l[level](c, ...values);
|
|
12
|
+
} else {
|
|
13
|
+
l[level](...values);
|
|
14
|
+
}
|
|
15
|
+
}, ctx);
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LoggerWithChild } from './Logger';
|
|
2
|
+
|
|
3
|
+
export function createNoopLogger(): LoggerWithChild {
|
|
4
|
+
const noop = (..._: any[]) => void 0;
|
|
5
|
+
return {
|
|
6
|
+
trace: noop,
|
|
7
|
+
debug: noop,
|
|
8
|
+
info: noop,
|
|
9
|
+
warn: noop,
|
|
10
|
+
error: noop,
|
|
11
|
+
child: () => createNoopLogger(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { LoggerWithChild, LogLevel } from './Logger';
|
|
2
|
+
|
|
3
|
+
export function createWriteLogger(
|
|
4
|
+
write: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void,
|
|
5
|
+
context: object = {},
|
|
6
|
+
): LoggerWithChild {
|
|
7
|
+
return {
|
|
8
|
+
trace: (...values) => write({ ...context, level: 'trace', values }),
|
|
9
|
+
debug: (...values) => write({ ...context, level: 'debug', values }),
|
|
10
|
+
info: (...values) => write({ ...context, level: 'info', values }),
|
|
11
|
+
warn: (...values) => write({ ...context, level: 'warn', values }),
|
|
12
|
+
error: (...values) => write({ ...context, level: 'error', values }),
|
|
13
|
+
child: (ctx) => createWriteLogger(write, { ...context, ...ctx }),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { createChildLogger } from './createChildLogger';
|
|
3
|
+
import { createWriteLogger } from './createWriteLogger';
|
|
4
|
+
|
|
5
|
+
test('logger', (t) => {
|
|
6
|
+
{
|
|
7
|
+
let logs: any[] = [];
|
|
8
|
+
const base = createWriteLogger((o) => logs.push(o));
|
|
9
|
+
let l = createChildLogger(base, { c: 'test' });
|
|
10
|
+
l.info('hello');
|
|
11
|
+
t.deepEqual(logs.shift(), { level: 'info', values: ['hello'], c: 'test' });
|
|
12
|
+
l.child({ m: 1 }).trace('trace');
|
|
13
|
+
t.deepEqual(logs.shift(), { level: 'trace', values: ['trace'], c: 'test', m: 1 });
|
|
14
|
+
}
|
|
15
|
+
createChildLogger(console, { c: 'test' }).info('hello');
|
|
16
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { parseModuleId } from './parseModuleId';
|
|
3
|
+
|
|
4
|
+
test('parseModuleId', (t) => {
|
|
5
|
+
const tests = {
|
|
6
|
+
'@wener/reaction': {
|
|
7
|
+
id: `@wener/reaction@latest`,
|
|
8
|
+
name: '@wener/reaction',
|
|
9
|
+
range: 'latest',
|
|
10
|
+
scoped: true,
|
|
11
|
+
org: 'wener',
|
|
12
|
+
pkg: 'reaction',
|
|
13
|
+
},
|
|
14
|
+
reaction: {
|
|
15
|
+
id: `reaction@latest`,
|
|
16
|
+
name: 'reaction',
|
|
17
|
+
range: 'latest',
|
|
18
|
+
pkg: 'reaction',
|
|
19
|
+
scoped: false,
|
|
20
|
+
},
|
|
21
|
+
'reaction@1': {
|
|
22
|
+
id: `reaction@1`,
|
|
23
|
+
name: 'reaction',
|
|
24
|
+
range: '1',
|
|
25
|
+
pkg: 'reaction',
|
|
26
|
+
scoped: false,
|
|
27
|
+
},
|
|
28
|
+
'reaction@1.1.1': {
|
|
29
|
+
id: `reaction@1.1.1`,
|
|
30
|
+
name: 'reaction',
|
|
31
|
+
version: '1.1.1',
|
|
32
|
+
range: '1.1.1',
|
|
33
|
+
pkg: 'reaction',
|
|
34
|
+
scoped: false,
|
|
35
|
+
},
|
|
36
|
+
'reaction@1.1.1-alpha': {
|
|
37
|
+
id: `reaction@1.1.1-alpha`,
|
|
38
|
+
name: 'reaction',
|
|
39
|
+
version: '1.1.1-alpha',
|
|
40
|
+
range: '1.1.1-alpha',
|
|
41
|
+
pkg: 'reaction',
|
|
42
|
+
|
|
43
|
+
scoped: false,
|
|
44
|
+
},
|
|
45
|
+
'reaction@1.1.1/index.js': {
|
|
46
|
+
id: `reaction@1.1.1`,
|
|
47
|
+
name: 'reaction',
|
|
48
|
+
version: '1.1.1',
|
|
49
|
+
range: '1.1.1',
|
|
50
|
+
scoped: false,
|
|
51
|
+
pkg: 'reaction',
|
|
52
|
+
|
|
53
|
+
path: '/index.js',
|
|
54
|
+
},
|
|
55
|
+
'reaction@1.1.1/': {
|
|
56
|
+
id: `reaction@1.1.1`,
|
|
57
|
+
name: 'reaction',
|
|
58
|
+
version: '1.1.1',
|
|
59
|
+
range: '1.1.1',
|
|
60
|
+
scoped: false,
|
|
61
|
+
pkg: 'reaction',
|
|
62
|
+
path: '/',
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
for (const [k, v] of Object.entries(tests)) {
|
|
66
|
+
t.deepEqual(parseModuleId(k), v);
|
|
67
|
+
}
|
|
68
|
+
});
|