@norcy/react-native-toolkit 0.1.21 → 0.1.22
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/lib/commonjs/Tool.js +64 -11
- package/lib/commonjs/Tool.js.map +1 -1
- package/lib/module/Tool.js +63 -11
- package/lib/module/Tool.js.map +1 -1
- package/lib/typescript/Tool.d.ts +17 -2
- package/package.json +5 -3
- package/src/Tool.ts +84 -18
package/lib/commonjs/Tool.js
CHANGED
|
@@ -4,6 +4,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Tool = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNativeSimpleToast = _interopRequireDefault(require("react-native-simple-toast"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
const _isPlainObject = target => {
|
|
11
|
+
return target && target.toString() === '[object Object]' && Object.getPrototypeOf(target) === Object.prototype;
|
|
12
|
+
};
|
|
13
|
+
const _jsonify = target => {
|
|
14
|
+
if (target && typeof target.toJSON === 'function') return target.toJSON();
|
|
15
|
+
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
16
|
+
if (Array.isArray(target)) return target.map(_jsonify);
|
|
17
|
+
return target;
|
|
18
|
+
};
|
|
7
19
|
const Tool = exports.Tool = {
|
|
8
20
|
sleep: delay => new Promise(resolve => setTimeout(resolve, delay)),
|
|
9
21
|
formatDate(date, fmt) {
|
|
@@ -35,18 +47,59 @@ const Tool = exports.Tool = {
|
|
|
35
47
|
}
|
|
36
48
|
return fmt;
|
|
37
49
|
},
|
|
38
|
-
|
|
39
|
-
|
|
50
|
+
jsonify: target => _isPlainObject(target) ? Object.keys(target).reduce((result, key) => ({
|
|
51
|
+
...result,
|
|
52
|
+
[key]: _jsonify(target[key])
|
|
53
|
+
}), {}) : _jsonify(target),
|
|
54
|
+
isChinese: value => {
|
|
55
|
+
return /[\u4E00-\u9FA5]+/g.test(value);
|
|
40
56
|
},
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
44
|
-
if (Array.isArray(target)) return target.map(Tool._jsonify);
|
|
45
|
-
return target;
|
|
57
|
+
isRemoteURL: str => {
|
|
58
|
+
return str.startsWith('http');
|
|
46
59
|
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
60
|
+
get_url_extension: url => {
|
|
61
|
+
var _url$split$;
|
|
62
|
+
return (_url$split$ = url.split(/[#?]/)[0]) === null || _url$split$ === void 0 || (_url$split$ = _url$split$.split('.')) === null || _url$split$ === void 0 || (_url$split$ = _url$split$.pop()) === null || _url$split$ === void 0 ? void 0 : _url$split$.trim();
|
|
63
|
+
},
|
|
64
|
+
generateObjectId: () => {
|
|
65
|
+
var timestamp = (new Date().getTime() / 1000 | 0).toString(16); // eslint-disable-line no-bitwise
|
|
66
|
+
return timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {
|
|
67
|
+
return (Math.random() * 16 | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Format bytes as human-readable text.
|
|
73
|
+
*
|
|
74
|
+
* @param bytes Number of bytes.
|
|
75
|
+
* @param si True to use metric (SI) units, aka powers of 1000. False to use
|
|
76
|
+
* binary (IEC), aka powers of 1024.
|
|
77
|
+
* @param dp Number of decimal places to display.
|
|
78
|
+
*
|
|
79
|
+
* @return Formatted string.
|
|
80
|
+
*/
|
|
81
|
+
humanFileSize: function (bytes) {
|
|
82
|
+
let si = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
83
|
+
let dp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
84
|
+
const thresh = si ? 1000 : 1024;
|
|
85
|
+
if (Math.abs(bytes) < thresh) {
|
|
86
|
+
return bytes + ' B';
|
|
87
|
+
}
|
|
88
|
+
const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
89
|
+
let u = -1;
|
|
90
|
+
const r = 10 ** dp;
|
|
91
|
+
do {
|
|
92
|
+
bytes /= thresh;
|
|
93
|
+
++u;
|
|
94
|
+
} while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);
|
|
95
|
+
return bytes.toFixed(dp) + ' ' + units[u];
|
|
96
|
+
},
|
|
97
|
+
useForceUpdate: () => {
|
|
98
|
+
const [, setValue] = (0, _react.useState)(0);
|
|
99
|
+
return () => setValue(value => value + 1);
|
|
100
|
+
},
|
|
101
|
+
showToast: toast => {
|
|
102
|
+
_reactNativeSimpleToast.default.showWithGravity(toast, _reactNativeSimpleToast.default.SHORT, _reactNativeSimpleToast.default.CENTER);
|
|
103
|
+
}
|
|
51
104
|
};
|
|
52
105
|
//# sourceMappingURL=Tool.js.map
|
package/lib/commonjs/Tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Tool","exports","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeSimpleToast","_interopRequireDefault","obj","__esModule","default","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","Tool","exports","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","undefined","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","useState","showToast","toast","Toast","showWithGravity","SHORT","CENTER"],"sources":["Tool.ts"],"sourcesContent":["import { useState } from 'react';\nimport Toast from 'react-native-simple-toast';\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n },\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAA8C,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,MAAMG,cAAc,GAAIC,MAAW,IAAK;EACtC,OACEA,MAAM,IACNA,MAAM,CAACC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,IACvCC,MAAM,CAACC,cAAc,CAACH,MAAM,CAAC,KAAKE,MAAM,CAACE,SAAS;AAEtD,CAAC;AAED,MAAMC,QAAQ,GAAIL,MAAW,IAAU;EACrC,IAAIA,MAAM,IAAI,OAAOA,MAAM,CAACM,MAAM,KAAK,UAAU,EAAE,OAAON,MAAM,CAACM,MAAM,CAAC,CAAC;EACzE;EACA,IAAIC,KAAK,CAACC,OAAO,CAACR,MAAM,CAAC,EAAE,OAAOA,MAAM,CAACS,GAAG,CAACJ,QAAQ,CAAC;EACtD,OAAOL,MAAM;AACf,CAAC;AAEM,MAAMU,IAAI,GAAAC,OAAA,CAAAD,IAAA,GAAG;EAClBE,KAAK,EAAGC,KAAa,IACnB,IAAIC,OAAO,CAAEC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAEF,KAAK,CAAC,CAAC;EAEtDI,UAAUA,CAACC,IAAU,EAAEC,GAAW,EAAU;IAC1CA,GAAG,GAAGA,GAAG,GAAGA,GAAG,GAAG,YAAY;IAC9B,IAAIC,CAA4B,GAAG;MACjC,IAAI,EAAEF,IAAI,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC;MAAE;MAC3B,IAAI,EAAEH,IAAI,CAACI,OAAO,CAAC,CAAC;MAAE;MACtB,IAAI,EAAEJ,IAAI,CAACK,QAAQ,CAAC,CAAC;MAAE;MACvB,IAAI,EAAEL,IAAI,CAACM,UAAU,CAAC,CAAC;MAAE;MACzB,IAAI,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;MAAE;MACzB,IAAI,EAAEC,IAAI,CAACC,KAAK,CAAC,CAACT,IAAI,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;MAAE;MAC7C,GAAG,EAAEH,IAAI,CAACU,eAAe,CAAC,CAAC,CAAE;IAC/B,CAAC;;IAED;IACA,IAAI,OAAO,CAACC,IAAI,CAACV,GAAG,CAAC,EAAE;MACrBA,GAAG,GAAGA,GAAG,CAACW,OAAO,CACfC,MAAM,CAACC,EAAE,EACT,CAACd,IAAI,CAACe,WAAW,CAAC,CAAC,GAAG,EAAE,EAAEC,MAAM,CAAC,CAAC,GAAGH,MAAM,CAACC,EAAE,CAACG,MAAM,CACvD,CAAC;IACH;IAEA,KAAK,IAAIC,CAAC,IAAIhB,CAAC,EAAE;MACf,IAAI,IAAIW,MAAM,CAAC,GAAG,GAAGK,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAACP,IAAI,CAACV,GAAG,CAAC,EAAE;QAC5CA,GAAG,GAAGA,GAAG,CAACW,OAAO,CACfC,MAAM,CAACC,EAAE,EACT,CAACD,MAAM,CAACC,EAAE,CAACG,MAAM,KAAK,CAAC,GACnBf,CAAC,CAACgB,CAAC,CAAC,GACJ,CAAC,IAAI,GAAGhB,CAAC,CAACgB,CAAC,CAAC,EAAEF,MAAM,CAAC,CAAC,EAAE,GAAGd,CAAC,CAACgB,CAAC,CAAC,EAAED,MAAM,CAAC,EAC1ClC,QAAQ,CAAC,CACb,CAAC;MACH;IACF;IACA,OAAOkB,GAAG;EACZ,CAAC;EAEDkB,OAAO,EAAGrC,MAAW,IACnBD,cAAc,CAACC,MAAM,CAAC,GAClBE,MAAM,CAACoC,IAAI,CAACtC,MAAM,CAAC,CAACuC,MAAM,CACxB,CAACC,MAAM,EAAEC,GAAG,MAAM;IAChB,GAAGD,MAAM;IACT,CAACC,GAAG,GAAGpC,QAAQ,CAACL,MAAM,CAACyC,GAAG,CAAC;EAC7B,CAAC,CAAC,EACF,CAAC,CACH,CAAC,GACDpC,QAAQ,CAACL,MAAM,CAAC;EAEtB0C,SAAS,EAAGC,KAAa,IAAK;IAC5B,OAAO,mBAAmB,CAACd,IAAI,CAACc,KAAK,CAAC;EACxC,CAAC;EAEDC,WAAW,EAAGC,GAAW,IAAK;IAC5B,OAAOA,GAAG,CAACC,UAAU,CAAC,MAAM,CAAC;EAC/B,CAAC;EAEDC,iBAAiB,EAAGC,GAAW,IAAK;IAAA,IAAAC,WAAA;IAClC,QAAAA,WAAA,GAAOD,GAAG,CAACE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAAD,WAAA,gBAAAA,WAAA,GAApBA,WAAA,CAAsBC,KAAK,CAAC,GAAG,CAAC,cAAAD,WAAA,gBAAAA,WAAA,GAAhCA,WAAA,CAAkCE,GAAG,CAAC,CAAC,cAAAF,WAAA,uBAAvCA,WAAA,CAAyCG,IAAI,CAAC,CAAC;EACxD,CAAC;EAEDC,gBAAgB,EAAEA,CAAA,KAAM;IACtB,IAAIC,SAAS,GAAG,CAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAI,CAAC,EAAEvD,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,OACEqD,SAAS,GACT,kBAAkB,CAACxB,OAAO,CAAC,MAAM,EAAE,YAAY;MAC7C,OAAO,CAAEJ,IAAI,CAAC+B,MAAM,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC,EAAExD,QAAQ,CAAC,EAAE,CAAC,CAACyD,WAAW,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;EAEN,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,aAAa,EAAE,SAAAA,CAACC,KAAa,EAAyB;IAAA,IAAvBC,EAAE,GAAAC,SAAA,CAAA3B,MAAA,QAAA2B,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAAA,IAAEE,EAAE,GAAAF,SAAA,CAAA3B,MAAA,QAAA2B,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC;IAC/C,MAAMG,MAAM,GAAGJ,EAAE,GAAG,IAAI,GAAG,IAAI;IAE/B,IAAInC,IAAI,CAACwC,GAAG,CAACN,KAAK,CAAC,GAAGK,MAAM,EAAE;MAC5B,OAAOL,KAAK,GAAG,IAAI;IACrB;IAEA,MAAMO,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9D,IAAIC,CAAC,GAAG,CAAC,CAAC;IACV,MAAMC,CAAC,GAAG,EAAE,IAAIL,EAAE;IAElB,GAAG;MACDJ,KAAK,IAAIK,MAAM;MACf,EAAEG,CAAC;IACL,CAAC,QACC1C,IAAI,CAAC4C,KAAK,CAAC5C,IAAI,CAACwC,GAAG,CAACN,KAAK,CAAC,GAAGS,CAAC,CAAC,GAAGA,CAAC,IAAIJ,MAAM,IAC7CG,CAAC,GAAGD,KAAK,CAAChC,MAAM,GAAG,CAAC;IAGtB,OAAOyB,KAAK,CAACW,OAAO,CAACP,EAAE,CAAC,GAAG,GAAG,GAAGG,KAAK,CAACC,CAAC,CAAC;EAC3C,CAAC;EAEDI,cAAc,EAAEA,CAAA,KAAM;IACpB,MAAM,GAAGC,QAAQ,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAAC,CAAC;IAChC,OAAO,MAAMD,QAAQ,CAAE9B,KAAK,IAAKA,KAAK,GAAG,CAAC,CAAC;EAC7C,CAAC;EAEDgC,SAAS,EAAGC,KAAa,IAAK;IAC5BC,+BAAK,CAACC,eAAe,CAACF,KAAK,EAAEC,+BAAK,CAACE,KAAK,EAAEF,+BAAK,CAACG,MAAM,CAAC;EACzD;AACF,CAAC"}
|
package/lib/module/Tool.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import Toast from 'react-native-simple-toast';
|
|
3
|
+
const _isPlainObject = target => {
|
|
4
|
+
return target && target.toString() === '[object Object]' && Object.getPrototypeOf(target) === Object.prototype;
|
|
5
|
+
};
|
|
6
|
+
const _jsonify = target => {
|
|
7
|
+
if (target && typeof target.toJSON === 'function') return target.toJSON();
|
|
8
|
+
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
9
|
+
if (Array.isArray(target)) return target.map(_jsonify);
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
1
12
|
export const Tool = {
|
|
2
13
|
sleep: delay => new Promise(resolve => setTimeout(resolve, delay)),
|
|
3
14
|
formatDate(date, fmt) {
|
|
@@ -29,18 +40,59 @@ export const Tool = {
|
|
|
29
40
|
}
|
|
30
41
|
return fmt;
|
|
31
42
|
},
|
|
32
|
-
|
|
33
|
-
|
|
43
|
+
jsonify: target => _isPlainObject(target) ? Object.keys(target).reduce((result, key) => ({
|
|
44
|
+
...result,
|
|
45
|
+
[key]: _jsonify(target[key])
|
|
46
|
+
}), {}) : _jsonify(target),
|
|
47
|
+
isChinese: value => {
|
|
48
|
+
return /[\u4E00-\u9FA5]+/g.test(value);
|
|
34
49
|
},
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
38
|
-
if (Array.isArray(target)) return target.map(Tool._jsonify);
|
|
39
|
-
return target;
|
|
50
|
+
isRemoteURL: str => {
|
|
51
|
+
return str.startsWith('http');
|
|
40
52
|
},
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
53
|
+
get_url_extension: url => {
|
|
54
|
+
var _url$split$;
|
|
55
|
+
return (_url$split$ = url.split(/[#?]/)[0]) === null || _url$split$ === void 0 || (_url$split$ = _url$split$.split('.')) === null || _url$split$ === void 0 || (_url$split$ = _url$split$.pop()) === null || _url$split$ === void 0 ? void 0 : _url$split$.trim();
|
|
56
|
+
},
|
|
57
|
+
generateObjectId: () => {
|
|
58
|
+
var timestamp = (new Date().getTime() / 1000 | 0).toString(16); // eslint-disable-line no-bitwise
|
|
59
|
+
return timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {
|
|
60
|
+
return (Math.random() * 16 | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Format bytes as human-readable text.
|
|
66
|
+
*
|
|
67
|
+
* @param bytes Number of bytes.
|
|
68
|
+
* @param si True to use metric (SI) units, aka powers of 1000. False to use
|
|
69
|
+
* binary (IEC), aka powers of 1024.
|
|
70
|
+
* @param dp Number of decimal places to display.
|
|
71
|
+
*
|
|
72
|
+
* @return Formatted string.
|
|
73
|
+
*/
|
|
74
|
+
humanFileSize: function (bytes) {
|
|
75
|
+
let si = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
76
|
+
let dp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
77
|
+
const thresh = si ? 1000 : 1024;
|
|
78
|
+
if (Math.abs(bytes) < thresh) {
|
|
79
|
+
return bytes + ' B';
|
|
80
|
+
}
|
|
81
|
+
const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
82
|
+
let u = -1;
|
|
83
|
+
const r = 10 ** dp;
|
|
84
|
+
do {
|
|
85
|
+
bytes /= thresh;
|
|
86
|
+
++u;
|
|
87
|
+
} while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);
|
|
88
|
+
return bytes.toFixed(dp) + ' ' + units[u];
|
|
89
|
+
},
|
|
90
|
+
useForceUpdate: () => {
|
|
91
|
+
const [, setValue] = useState(0);
|
|
92
|
+
return () => setValue(value => value + 1);
|
|
93
|
+
},
|
|
94
|
+
showToast: toast => {
|
|
95
|
+
Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);
|
|
96
|
+
}
|
|
45
97
|
};
|
|
46
98
|
//# sourceMappingURL=Tool.js.map
|
package/lib/module/Tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","
|
|
1
|
+
{"version":3,"names":["useState","Toast","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","undefined","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","showToast","toast","showWithGravity","SHORT","CENTER"],"sources":["Tool.ts"],"sourcesContent":["import { useState } from 'react';\nimport Toast from 'react-native-simple-toast';\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n },\n};\n"],"mappings":"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"}
|
package/lib/typescript/Tool.d.ts
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
export declare const Tool: {
|
|
2
2
|
sleep: (delay: number) => Promise<unknown>;
|
|
3
3
|
formatDate(date: Date, fmt: string): string;
|
|
4
|
-
isPlainObject: (target: any) => any;
|
|
5
|
-
_jsonify: (target: any) => any;
|
|
6
4
|
jsonify: (target: any) => any;
|
|
5
|
+
isChinese: (value: string) => boolean;
|
|
6
|
+
isRemoteURL: (str: string) => boolean;
|
|
7
|
+
get_url_extension: (url: string) => string | undefined;
|
|
8
|
+
generateObjectId: () => string;
|
|
9
|
+
/**
|
|
10
|
+
* Format bytes as human-readable text.
|
|
11
|
+
*
|
|
12
|
+
* @param bytes Number of bytes.
|
|
13
|
+
* @param si True to use metric (SI) units, aka powers of 1000. False to use
|
|
14
|
+
* binary (IEC), aka powers of 1024.
|
|
15
|
+
* @param dp Number of decimal places to display.
|
|
16
|
+
*
|
|
17
|
+
* @return Formatted string.
|
|
18
|
+
*/
|
|
19
|
+
humanFileSize: (bytes: number, si?: boolean, dp?: number) => string;
|
|
20
|
+
useForceUpdate: () => () => void;
|
|
21
|
+
showToast: (toast: string) => void;
|
|
7
22
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@norcy/react-native-toolkit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22",
|
|
4
4
|
"description": "My Toolkit",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -68,7 +68,8 @@
|
|
|
68
68
|
"@react-native-community/async-storage": "^1.12.0",
|
|
69
69
|
"i18n-js": "^4.2.2",
|
|
70
70
|
"react-native-wechat-lib": "^1.1.26",
|
|
71
|
-
"react-native-purchases": "5.6.0"
|
|
71
|
+
"react-native-purchases": "5.6.0",
|
|
72
|
+
"react-native-simple-toast": "^1.1.3"
|
|
72
73
|
},
|
|
73
74
|
"peerDependencies": {
|
|
74
75
|
"react": "*",
|
|
@@ -80,7 +81,8 @@
|
|
|
80
81
|
"@react-native-community/async-storage": "*",
|
|
81
82
|
"i18n-js": "*",
|
|
82
83
|
"react-native-wechat-lib": "*",
|
|
83
|
-
"react-native-purchases": "*"
|
|
84
|
+
"react-native-purchases": "*",
|
|
85
|
+
"react-native-simple-toast": "*"
|
|
84
86
|
},
|
|
85
87
|
"jest": {
|
|
86
88
|
"preset": "react-native",
|
package/src/Tool.ts
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import Toast from 'react-native-simple-toast';
|
|
3
|
+
|
|
4
|
+
const _isPlainObject = (target: any) => {
|
|
5
|
+
return (
|
|
6
|
+
target &&
|
|
7
|
+
target.toString() === '[object Object]' &&
|
|
8
|
+
Object.getPrototypeOf(target) === Object.prototype
|
|
9
|
+
);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const _jsonify = (target: any): any => {
|
|
13
|
+
if (target && typeof target.toJSON === 'function') return target.toJSON();
|
|
14
|
+
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
15
|
+
if (Array.isArray(target)) return target.map(_jsonify);
|
|
16
|
+
return target;
|
|
17
|
+
};
|
|
18
|
+
|
|
1
19
|
export const Tool = {
|
|
2
20
|
sleep: (delay: number) =>
|
|
3
21
|
new Promise((resolve) => setTimeout(resolve, delay)),
|
|
@@ -36,29 +54,77 @@ export const Tool = {
|
|
|
36
54
|
return fmt;
|
|
37
55
|
},
|
|
38
56
|
|
|
39
|
-
isPlainObject: (target: any) => {
|
|
40
|
-
return (
|
|
41
|
-
target &&
|
|
42
|
-
target.toString() === '[object Object]' &&
|
|
43
|
-
Object.getPrototypeOf(target) === Object.prototype
|
|
44
|
-
);
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
_jsonify: (target: any): any => {
|
|
48
|
-
if (target && typeof target.toJSON === 'function') return target.toJSON();
|
|
49
|
-
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
50
|
-
if (Array.isArray(target)) return target.map(Tool._jsonify);
|
|
51
|
-
return target;
|
|
52
|
-
},
|
|
53
|
-
|
|
54
57
|
jsonify: (target: any) =>
|
|
55
|
-
|
|
58
|
+
_isPlainObject(target)
|
|
56
59
|
? Object.keys(target).reduce(
|
|
57
60
|
(result, key) => ({
|
|
58
61
|
...result,
|
|
59
|
-
[key]:
|
|
62
|
+
[key]: _jsonify(target[key]),
|
|
60
63
|
}),
|
|
61
64
|
{}
|
|
62
65
|
)
|
|
63
|
-
:
|
|
66
|
+
: _jsonify(target),
|
|
67
|
+
|
|
68
|
+
isChinese: (value: string) => {
|
|
69
|
+
return /[\u4E00-\u9FA5]+/g.test(value);
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
isRemoteURL: (str: string) => {
|
|
73
|
+
return str.startsWith('http');
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
get_url_extension: (url: string) => {
|
|
77
|
+
return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
generateObjectId: () => {
|
|
81
|
+
var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise
|
|
82
|
+
return (
|
|
83
|
+
timestamp +
|
|
84
|
+
'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {
|
|
85
|
+
return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise
|
|
86
|
+
})
|
|
87
|
+
);
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Format bytes as human-readable text.
|
|
92
|
+
*
|
|
93
|
+
* @param bytes Number of bytes.
|
|
94
|
+
* @param si True to use metric (SI) units, aka powers of 1000. False to use
|
|
95
|
+
* binary (IEC), aka powers of 1024.
|
|
96
|
+
* @param dp Number of decimal places to display.
|
|
97
|
+
*
|
|
98
|
+
* @return Formatted string.
|
|
99
|
+
*/
|
|
100
|
+
humanFileSize: (bytes: number, si = false, dp = 1) => {
|
|
101
|
+
const thresh = si ? 1000 : 1024;
|
|
102
|
+
|
|
103
|
+
if (Math.abs(bytes) < thresh) {
|
|
104
|
+
return bytes + ' B';
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
108
|
+
let u = -1;
|
|
109
|
+
const r = 10 ** dp;
|
|
110
|
+
|
|
111
|
+
do {
|
|
112
|
+
bytes /= thresh;
|
|
113
|
+
++u;
|
|
114
|
+
} while (
|
|
115
|
+
Math.round(Math.abs(bytes) * r) / r >= thresh &&
|
|
116
|
+
u < units.length - 1
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
return bytes.toFixed(dp) + ' ' + units[u];
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
useForceUpdate: () => {
|
|
123
|
+
const [, setValue] = useState(0);
|
|
124
|
+
return () => setValue((value) => value + 1);
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
showToast: (toast: string) => {
|
|
128
|
+
Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);
|
|
129
|
+
},
|
|
64
130
|
};
|