sojs-utility
Advanced tools
| /** | ||
| * @file 文件gzip压缩类, 支持字符串和文件的gzip压缩. | ||
| * @author zhangziqiu@qq.com | ||
| */ | ||
| sojs.define({ | ||
| name: 'gzip', | ||
| namespace: 'sojs.utility', | ||
| $gzip: function () { | ||
| this.fs = require('fs'); | ||
| this.path = require('path'); | ||
| this.zlib = require('zlib'); | ||
| }, | ||
| processOption: function (option) { | ||
| option = option || {}; | ||
| option.level = option.level || 9; | ||
| return option; | ||
| }, | ||
| /** | ||
| gzip压缩字符串到文件 | ||
| @function gzip.zipFileSync | ||
| @static | ||
| @param {string} toFilePath 目标文件 | ||
| @param {string} sourceString 源字符串 | ||
| @param {Object} option 设置项. 目前仅支持option.level设置压缩等级,默认为最高压缩比9. | ||
| @return {boolean} 压缩成功返回true | ||
| */ | ||
| zipStringToFileSync: function (toFilePath, sourceString, option) { | ||
| option = this.processOption(option); | ||
| var tempSourceFilePath = this.path.resolve('./') + "/gzip_temp_file_" + parseInt(Math.random() * 1000000) + ".js"; | ||
| this.fs.writeFileSync(tempSourceFilePath, sourceString); | ||
| var gz = this.zlib.createGzip({ | ||
| level: option.level | ||
| }) | ||
| var inp = this.fs.createReadStream(tempSourceFilePath); | ||
| var out = this.fs.createWriteStream(toFilePath); | ||
| inp.pipe(gz).pipe(out); | ||
| this.fs.unlinkSync(tempSourceFilePath); | ||
| return true; | ||
| }, | ||
| /** | ||
| gzip压缩文件 | ||
| @function gzip.zipFileSync | ||
| @static | ||
| @param {string} toFilePath 目标文件 | ||
| @param {string} sourceFilePath 源文件 | ||
| @param {Object} option 设置项. 目前仅支持option.level设置压缩等级,默认为最高压缩比9. | ||
| @return {boolean} 压缩成功返回true | ||
| */ | ||
| zipFileSync: function (toFilePath, sourceFilePath, option) { | ||
| option = this.processOption(option); | ||
| var gz = this.zlib.createGzip({ | ||
| level: option.level | ||
| }) | ||
| var inp = this.fs.createReadStream(sourceFilePath); | ||
| var out = this.fs.createWriteStream(toFilePath); | ||
| inp.pipe(gz).pipe(out); | ||
| return true; | ||
| } | ||
| }); |
| /** | ||
| * @file 计算md5值 | ||
| * @author 413913697@qq.com | ||
| */ | ||
| sojs.define({ | ||
| name: 'md5', | ||
| namespace: 'sojs.utility', | ||
| rotateLeft: function (lValue, iShiftBits) { | ||
| return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); | ||
| }, | ||
| addUnsigned: function (lX, lY) { | ||
| var lX4, lY4, lX8, lY8, lResult; | ||
| lX8 = (lX & 0x80000000); | ||
| lY8 = (lY & 0x80000000); | ||
| lX4 = (lX & 0x40000000); | ||
| lY4 = (lY & 0x40000000); | ||
| lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); | ||
| if (lX4 & lY4) { | ||
| return (lResult ^ 0x80000000 ^ lX8 ^ lY8); | ||
| } | ||
| if (lX4 | lY4) { | ||
| if (lResult & 0x40000000) { | ||
| return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); | ||
| } else { | ||
| return (lResult ^ 0x40000000 ^ lX8 ^ lY8); | ||
| } | ||
| } else { | ||
| return (lResult ^ lX8 ^ lY8); | ||
| } | ||
| }, | ||
| f: function (x, y, z) { | ||
| return (x & y) | ((~x) & z); | ||
| }, | ||
| g: function (x, y, z) { | ||
| return (x & z) | (y & (~z)); | ||
| }, | ||
| h: function (x, y, z) { | ||
| return (x ^ y ^ z); | ||
| }, | ||
| i: function (x, y, z) { | ||
| return (y ^ (x | (~z))); | ||
| }, | ||
| ff: function (a, b, c, d, x, s, ac) { | ||
| a = this.addUnsigned(a, this.addUnsigned(this.addUnsigned(this.f(b, c, d), x), ac)); | ||
| return this.addUnsigned(this.rotateLeft(a, s), b); | ||
| }, | ||
| gg: function (a, b, c, d, x, s, ac) { | ||
| a = this.addUnsigned(a, this.addUnsigned(this.addUnsigned(this.g(b, c, d), x), ac)); | ||
| return this.addUnsigned(this.rotateLeft(a, s), b); | ||
| }, | ||
| hh: function (a, b, c, d, x, s, ac) { | ||
| a = this.addUnsigned(a, this.addUnsigned(this.addUnsigned(this.h(b, c, d), x), ac)); | ||
| return this.addUnsigned(this.rotateLeft(a, s), b); | ||
| }, | ||
| ii: function (a, b, c, d, x, s, ac) { | ||
| a = this.addUnsigned(a, this.addUnsigned(this.addUnsigned(this.i(b, c, d), x), ac)); | ||
| return this.addUnsigned(this.rotateLeft(a, s), b); | ||
| }, | ||
| convertToWordArray: function (string) { | ||
| var lWordCount; | ||
| var lMessageLength = string.length; | ||
| var lNumberOfWords_temp1 = lMessageLength + 8; | ||
| var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64; | ||
| var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; | ||
| var lWordArray = Array(lNumberOfWords - 1); | ||
| var lBytePosition = 0; | ||
| var lByteCount = 0; | ||
| while (lByteCount < lMessageLength) { | ||
| lWordCount = (lByteCount - (lByteCount % 4)) / 4; | ||
| lBytePosition = (lByteCount % 4) * 8; | ||
| lWordArray[lWordCount] = (lWordArray[lWordCount] | (string | ||
| .charCodeAt(lByteCount) << lBytePosition)); | ||
| lByteCount++; | ||
| } | ||
| lWordCount = (lByteCount - (lByteCount % 4)) / 4; | ||
| lBytePosition = (lByteCount % 4) * 8; | ||
| lWordArray[lWordCount] = lWordArray[lWordCount] | ||
| | (0x80 << lBytePosition); | ||
| lWordArray[lNumberOfWords - 2] = lMessageLength << 3; | ||
| lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; | ||
| return lWordArray; | ||
| }, | ||
| wordToHex: function (lValue) { | ||
| var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount; | ||
| for (lCount = 0; lCount <= 3; lCount++) { | ||
| lByte = (lValue >>> (lCount * 8)) & 255; | ||
| WordToHexValue_temp = "0" + lByte.toString(16); | ||
| WordToHexValue = WordToHexValue | ||
| + WordToHexValue_temp.substr( | ||
| WordToHexValue_temp.length - 2, 2); | ||
| } | ||
| return WordToHexValue; | ||
| }, | ||
| utf8Encode: function (string) { | ||
| string = string.replace(/\r\n/g, "\n"); | ||
| var utftext = ""; | ||
| for (var n = 0; n < string.length; n++) { | ||
| var c = string.charCodeAt(n); | ||
| if (c < 128) { | ||
| utftext += String.fromCharCode(c); | ||
| } else if ((c > 127) && (c < 2048)) { | ||
| utftext += String.fromCharCode((c >> 6) | 192); | ||
| utftext += String.fromCharCode((c & 63) | 128); | ||
| } else { | ||
| utftext += String.fromCharCode((c >> 12) | 224); | ||
| utftext += String.fromCharCode(((c >> 6) & 63) | 128); | ||
| utftext += String.fromCharCode((c & 63) | 128); | ||
| } | ||
| } | ||
| return utftext; | ||
| }, | ||
| /** | ||
| * 计算MD5值 | ||
| * | ||
| * @name this.md5 | ||
| * @function | ||
| * @param {String} string 要生成MD5签名的字符串 | ||
| * | ||
| * @return {String} MD5签名值 | ||
| */ | ||
| md5: function (string) { | ||
| var x = Array(); | ||
| var k, AA, BB, CC, DD, a, b, c, d; | ||
| var S11 = 7, S12 = 12, S13 = 17, S14 = 22; | ||
| var S21 = 5, S22 = 9, S23 = 14, S24 = 20; | ||
| var S31 = 4, S32 = 11, S33 = 16, S34 = 23; | ||
| var S41 = 6, S42 = 10, S43 = 15, S44 = 21; | ||
| string = this.utf8Encode(string); | ||
| x = this.convertToWordArray(string); | ||
| a = 0x67452301; | ||
| b = 0xEFCDAB89; | ||
| c = 0x98BADCFE; | ||
| d = 0x10325476; | ||
| for (k = 0; k < x.length; k += 16) { | ||
| AA = a; | ||
| BB = b; | ||
| CC = c; | ||
| DD = d; | ||
| a = this.ff(a, b, c, d, x[k + 0], S11, 0xD76AA478); | ||
| d = this.ff(d, a, b, c, x[k + 1], S12, 0xE8C7B756); | ||
| c = this.ff(c, d, a, b, x[k + 2], S13, 0x242070DB); | ||
| b = this.ff(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); | ||
| a = this.ff(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); | ||
| d = this.ff(d, a, b, c, x[k + 5], S12, 0x4787C62A); | ||
| c = this.ff(c, d, a, b, x[k + 6], S13, 0xA8304613); | ||
| b = this.ff(b, c, d, a, x[k + 7], S14, 0xFD469501); | ||
| a = this.ff(a, b, c, d, x[k + 8], S11, 0x698098D8); | ||
| d = this.ff(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); | ||
| c = this.ff(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); | ||
| b = this.ff(b, c, d, a, x[k + 11], S14, 0x895CD7BE); | ||
| a = this.ff(a, b, c, d, x[k + 12], S11, 0x6B901122); | ||
| d = this.ff(d, a, b, c, x[k + 13], S12, 0xFD987193); | ||
| c = this.ff(c, d, a, b, x[k + 14], S13, 0xA679438E); | ||
| b = this.ff(b, c, d, a, x[k + 15], S14, 0x49B40821); | ||
| a = this.gg(a, b, c, d, x[k + 1], S21, 0xF61E2562); | ||
| d = this.gg(d, a, b, c, x[k + 6], S22, 0xC040B340); | ||
| c = this.gg(c, d, a, b, x[k + 11], S23, 0x265E5A51); | ||
| b = this.gg(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); | ||
| a = this.gg(a, b, c, d, x[k + 5], S21, 0xD62F105D); | ||
| d = this.gg(d, a, b, c, x[k + 10], S22, 0x2441453); | ||
| c = this.gg(c, d, a, b, x[k + 15], S23, 0xD8A1E681); | ||
| b = this.gg(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); | ||
| a = this.gg(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); | ||
| d = this.gg(d, a, b, c, x[k + 14], S22, 0xC33707D6); | ||
| c = this.gg(c, d, a, b, x[k + 3], S23, 0xF4D50D87); | ||
| b = this.gg(b, c, d, a, x[k + 8], S24, 0x455A14ED); | ||
| a = this.gg(a, b, c, d, x[k + 13], S21, 0xA9E3E905); | ||
| d = this.gg(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); | ||
| c = this.gg(c, d, a, b, x[k + 7], S23, 0x676F02D9); | ||
| b = this.gg(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); | ||
| a = this.hh(a, b, c, d, x[k + 5], S31, 0xFFFA3942); | ||
| d = this.hh(d, a, b, c, x[k + 8], S32, 0x8771F681); | ||
| c = this.hh(c, d, a, b, x[k + 11], S33, 0x6D9D6122); | ||
| b = this.hh(b, c, d, a, x[k + 14], S34, 0xFDE5380C); | ||
| a = this.hh(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); | ||
| d = this.hh(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); | ||
| c = this.hh(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); | ||
| b = this.hh(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); | ||
| a = this.hh(a, b, c, d, x[k + 13], S31, 0x289B7EC6); | ||
| d = this.hh(d, a, b, c, x[k + 0], S32, 0xEAA127FA); | ||
| c = this.hh(c, d, a, b, x[k + 3], S33, 0xD4EF3085); | ||
| b = this.hh(b, c, d, a, x[k + 6], S34, 0x4881D05); | ||
| a = this.hh(a, b, c, d, x[k + 9], S31, 0xD9D4D039); | ||
| d = this.hh(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); | ||
| c = this.hh(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); | ||
| b = this.hh(b, c, d, a, x[k + 2], S34, 0xC4AC5665); | ||
| a = this.ii(a, b, c, d, x[k + 0], S41, 0xF4292244); | ||
| d = this.ii(d, a, b, c, x[k + 7], S42, 0x432AFF97); | ||
| c = this.ii(c, d, a, b, x[k + 14], S43, 0xAB9423A7); | ||
| b = this.ii(b, c, d, a, x[k + 5], S44, 0xFC93A039); | ||
| a = this.ii(a, b, c, d, x[k + 12], S41, 0x655B59C3); | ||
| d = this.ii(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); | ||
| c = this.ii(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); | ||
| b = this.ii(b, c, d, a, x[k + 1], S44, 0x85845DD1); | ||
| a = this.ii(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); | ||
| d = this.ii(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); | ||
| c = this.ii(c, d, a, b, x[k + 6], S43, 0xA3014314); | ||
| b = this.ii(b, c, d, a, x[k + 13], S44, 0x4E0811A1); | ||
| a = this.ii(a, b, c, d, x[k + 4], S41, 0xF7537E82); | ||
| d = this.ii(d, a, b, c, x[k + 11], S42, 0xBD3AF235); | ||
| c = this.ii(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); | ||
| b = this.ii(b, c, d, a, x[k + 9], S44, 0xEB86D391); | ||
| a = this.addUnsigned(a, AA); | ||
| b = this.addUnsigned(b, BB); | ||
| c = this.addUnsigned(c, CC); | ||
| d = this.addUnsigned(d, DD); | ||
| } | ||
| var fixedLength = function (source) { | ||
| var result = source; | ||
| for (var i = 0, count = 8 - source.length; i < count; i++) { | ||
| result = "0" + result; | ||
| } | ||
| return result; | ||
| } | ||
| var hightBit = ((parseInt("0x" + this.wordToHex(a), 16) + parseInt("0x" | ||
| + this.wordToHex(b), 16)) % 4294967296).toString(16); | ||
| var lowBit = ((parseInt("0x" + this.wordToHex(c), 16) + parseInt("0x" | ||
| + this.wordToHex(d), 16)) % 4294967296).toString(16); | ||
| if (hightBit.length < 8) { | ||
| hightBit = fixedLength(hightBit); | ||
| } | ||
| if (lowBit.length < 8) { | ||
| lowBit = fixedLength(lowBit); | ||
| } | ||
| return hightBit + lowBit; | ||
| } | ||
| }); |
| /** | ||
| * 启动性能测试工具类 | ||
| * @author zhangziqiu<zhangziqiu@qq.com> | ||
| */ | ||
| require('sojs'); | ||
| require('sojs-test'); | ||
| sojs.define({ | ||
| name: 'benchmark', | ||
| deps: { | ||
| benchmarkClass: 'sojs.test.benchmark' | ||
| }, | ||
| /** | ||
| * 静态构造函数 | ||
| */ | ||
| $benchmark: function () { | ||
| this.benchmarkClass.test(); | ||
| } | ||
| }); | ||
| /** | ||
| * 代码覆盖率检查 | ||
| * @author zhangziqiu<zhangziqiu@qq.com> | ||
| */ | ||
| require('sojs'); | ||
| require('sojs-test'); | ||
| sojs.define({ | ||
| name: 'coverage', | ||
| deps: { | ||
| coverageClass: 'sojs.test.coverage' | ||
| }, | ||
| /** | ||
| * 静态构造函数 | ||
| */ | ||
| $coverage: function () { | ||
| this.coverageClass.test(); | ||
| } | ||
| }); |
+21
| /** | ||
| * 单元测试 | ||
| * @author zhangziqiu<zhangziqiu@qq.com> | ||
| */ | ||
| require('sojs'); | ||
| require('sojs-test'); | ||
| sojs.define({ | ||
| name: 'unit', | ||
| deps: { | ||
| unitClass: 'sojs.test.unit' | ||
| }, | ||
| /** | ||
| * 静态构造函数 | ||
| */ | ||
| $unit: function () { | ||
| this.unitClass.test(); | ||
| } | ||
| }); |
+1
-1
| { | ||
| "name": "sojs-utility", | ||
| "version": "0.0.1", | ||
| "version": "0.0.2", | ||
| "description": "sojs工具集", | ||
@@ -5,0 +5,0 @@ "homepage": "http://www.develop.cc", |
+8
-5
@@ -1,4 +0,7 @@ | ||
| # sojs.utility.file | ||
| # sojs.utility | ||
| =================================== | ||
| 文件操作工具类 | ||
| sojs工具库. | ||
| 轻量级类库直接放在 sojs.utility 项目中. | ||
| 复杂的类库比如 sojs.utility.file, sojs.utility.url 等作为单独项目维护. | ||
| 使用时, 只需要引用 sojs.utility 即可.由sojs.utility负责加载其他子项目. | ||
@@ -9,3 +12,3 @@ --- | ||
| ``` | ||
| npm install sojs-utility-file | ||
| npm install sojs-utility | ||
| ``` | ||
@@ -15,5 +18,5 @@ | ||
| ``` | ||
| require('sojs'); | ||
| require('sojs-utility-file'); | ||
| require('sojs-utility'); | ||
| var file = sojs.using('sojs.utility.file'); | ||
@@ -20,0 +23,0 @@ var filePath = sojs.getClassPath('sojs.utility.file'); |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
15386
375.76%11
83.33%350
2816.67%46
6.98%1
Infinity%1
Infinity%