sculp-js 0.0.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +1 -1
- package/README.md +22 -1
- package/lib/cjs/array.js +32 -55
- package/lib/cjs/async.js +3 -3
- package/lib/cjs/clipboard.js +3 -3
- package/lib/cjs/cookie.js +5 -5
- package/lib/cjs/date.js +142 -24
- package/lib/cjs/dom.js +24 -10
- package/lib/cjs/download.js +9 -9
- package/lib/cjs/easing.js +1 -1
- package/lib/cjs/file.js +5 -4
- package/lib/cjs/func.js +160 -0
- package/lib/cjs/index.js +28 -2
- package/lib/cjs/number.js +82 -0
- package/lib/cjs/object.js +13 -11
- package/lib/cjs/path.js +1 -1
- package/lib/cjs/qs.js +5 -5
- package/lib/cjs/random.js +72 -0
- package/lib/cjs/string.js +40 -7
- package/lib/cjs/type.js +12 -2
- package/lib/cjs/unique.js +83 -0
- package/lib/cjs/url.js +1 -1
- package/lib/cjs/watermark.js +8 -9
- package/lib/es/array.js +33 -55
- package/lib/es/async.js +3 -3
- package/lib/es/clipboard.js +3 -3
- package/lib/es/cookie.js +5 -5
- package/lib/es/date.js +139 -25
- package/lib/es/dom.js +24 -11
- package/lib/es/download.js +9 -9
- package/lib/es/easing.js +1 -1
- package/lib/es/file.js +5 -4
- package/lib/es/func.js +154 -0
- package/lib/es/index.js +10 -6
- package/lib/es/number.js +77 -0
- package/lib/es/object.js +12 -10
- package/lib/es/path.js +1 -1
- package/lib/es/qs.js +5 -5
- package/lib/es/random.js +67 -0
- package/lib/es/string.js +40 -8
- package/lib/es/type.js +12 -3
- package/lib/es/unique.js +79 -0
- package/lib/es/url.js +1 -1
- package/lib/es/watermark.js +8 -9
- package/lib/index.d.ts +254 -80
- package/lib/umd/index.js +637 -132
- package/package.json +36 -12
package/lib/es/type.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js
|
|
2
|
+
* sculp-js v1.0.0
|
|
3
3
|
* (c) 2023-2023 chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* 判断任意值的数据类型
|
|
9
|
+
* @param {unknown} any
|
|
10
|
+
* @returns {string}
|
|
11
|
+
*/
|
|
7
12
|
const typeIs = (any) => Object.prototype.toString.call(any).slice(8, -1);
|
|
8
13
|
// 基本数据类型判断
|
|
9
14
|
const isString = (any) => typeof any === 'string';
|
|
@@ -17,7 +22,11 @@ const isPrimitive = (any) => any === null || typeof any !== 'object';
|
|
|
17
22
|
// 复合数据类型判断
|
|
18
23
|
const isObject = (any) => typeIs(any) === 'Object';
|
|
19
24
|
const isArray = (any) => Array.isArray(any);
|
|
20
|
-
|
|
25
|
+
/**
|
|
26
|
+
* 判断是否为函数
|
|
27
|
+
* @param {unknown} any
|
|
28
|
+
* @returns {boolean}
|
|
29
|
+
*/
|
|
21
30
|
const isFunction = (any) => typeof any === 'function';
|
|
22
31
|
// 对象类型判断
|
|
23
32
|
const isNaN = (any) => Number.isNaN(any);
|
|
@@ -25,4 +34,4 @@ const isDate = (any) => typeIs(any) === 'Date';
|
|
|
25
34
|
const isError = (any) => typeIs(any) === 'Error';
|
|
26
35
|
const isRegExp = (any) => typeIs(any) === 'RegExp';
|
|
27
36
|
|
|
28
|
-
export { typeIs as default, isArray, isBigInt, isBoolean, isDate, isError, isFunction, isNaN, isNull, isNumber, isObject, isPrimitive, isRegExp, isString, isSymbol, isUndefined };
|
|
37
|
+
export { typeIs as default, isArray, isBigInt, isBoolean, isDate, isError, isFunction, isNaN, isNull, isNumber, isObject, isPrimitive, isRegExp, isString, isSymbol, isUndefined, typeIs };
|
package/lib/es/unique.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* sculp-js v1.0.0
|
|
3
|
+
* (c) 2023-2023 chandq
|
|
4
|
+
* Released under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { numberToHex, HEX_POOL } from './number.js';
|
|
8
|
+
import { randomNumber } from './random.js';
|
|
9
|
+
import { isString, isNumber } from './type.js';
|
|
10
|
+
|
|
11
|
+
const padStartWithZero = (str, maxLength = 2) => String(str).padStart(maxLength, '0');
|
|
12
|
+
let safeNo = 0;
|
|
13
|
+
let lastTimestamp = 0;
|
|
14
|
+
// 安全后缀长度,按 1 毫秒运算 99999 次 JS 代码来进行估算
|
|
15
|
+
// 那么,补足长度为 5
|
|
16
|
+
// 时间戳模式长度为 13
|
|
17
|
+
// 取最长 5 + 13 = 18
|
|
18
|
+
const UNIQUE_NUMBER_SAFE_LENGTH = 18;
|
|
19
|
+
const FIX_SAFE_LENGTH = 5;
|
|
20
|
+
const TIMESTAMP_LENGTH = 13;
|
|
21
|
+
/**
|
|
22
|
+
* 生成唯一不重复数值
|
|
23
|
+
* @param {number} length
|
|
24
|
+
* @returns {string}
|
|
25
|
+
*/
|
|
26
|
+
const uniqueNumber = (length = UNIQUE_NUMBER_SAFE_LENGTH) => {
|
|
27
|
+
const now = Date.now();
|
|
28
|
+
length = Math.max(length, UNIQUE_NUMBER_SAFE_LENGTH);
|
|
29
|
+
if (now !== lastTimestamp) {
|
|
30
|
+
lastTimestamp = now;
|
|
31
|
+
safeNo = 0;
|
|
32
|
+
}
|
|
33
|
+
const timestamp = `${now}`;
|
|
34
|
+
let random = '';
|
|
35
|
+
const rndLength = length - FIX_SAFE_LENGTH - TIMESTAMP_LENGTH;
|
|
36
|
+
if (rndLength > 0) {
|
|
37
|
+
const rndMin = 10 ** (rndLength - 1);
|
|
38
|
+
const rndMax = 10 ** rndLength - 1;
|
|
39
|
+
const rnd = randomNumber(rndMin, rndMax);
|
|
40
|
+
random = `${rnd}`;
|
|
41
|
+
}
|
|
42
|
+
const safe = padStartWithZero(safeNo, FIX_SAFE_LENGTH);
|
|
43
|
+
safeNo++;
|
|
44
|
+
return `${timestamp}${random}${safe}`;
|
|
45
|
+
};
|
|
46
|
+
const randomFromPool = (pool) => {
|
|
47
|
+
const poolIndex = randomNumber(0, pool.length - 1);
|
|
48
|
+
return pool[poolIndex];
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* 生成唯一不重复字符串
|
|
52
|
+
* @param {number | string} length
|
|
53
|
+
* @param {string} pool
|
|
54
|
+
* @returns {string}
|
|
55
|
+
*/
|
|
56
|
+
const uniqueString = (length, pool) => {
|
|
57
|
+
let _length = 0;
|
|
58
|
+
let _pool = HEX_POOL;
|
|
59
|
+
if (isString(pool)) {
|
|
60
|
+
_length = length;
|
|
61
|
+
_pool = pool;
|
|
62
|
+
}
|
|
63
|
+
else if (isNumber(length)) {
|
|
64
|
+
_length = length;
|
|
65
|
+
}
|
|
66
|
+
else if (isString(length)) {
|
|
67
|
+
_pool = length;
|
|
68
|
+
}
|
|
69
|
+
let uniqueString = numberToHex(uniqueNumber(), _pool);
|
|
70
|
+
let insertLength = _length - uniqueString.length;
|
|
71
|
+
if (insertLength <= 0)
|
|
72
|
+
return uniqueString;
|
|
73
|
+
while (insertLength--) {
|
|
74
|
+
uniqueString += randomFromPool(_pool);
|
|
75
|
+
}
|
|
76
|
+
return uniqueString;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export { UNIQUE_NUMBER_SAFE_LENGTH, uniqueNumber, uniqueString };
|
package/lib/es/url.js
CHANGED
package/lib/es/watermark.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js
|
|
2
|
+
* sculp-js v1.0.0
|
|
3
3
|
* (c) 2023-2023 chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -11,17 +11,18 @@
|
|
|
11
11
|
* @desc 网页加水印的工具类
|
|
12
12
|
*/
|
|
13
13
|
/**
|
|
14
|
-
* canvas 实现
|
|
14
|
+
* canvas 实现 水印, 具备防删除功能
|
|
15
15
|
* @param {ICanvasWM} canvasWM
|
|
16
|
+
* @example genCanvasWM({ content: 'QQMusicFE' })
|
|
16
17
|
*/
|
|
17
|
-
|
|
18
|
+
function genCanvasWM(canvasWM) {
|
|
18
19
|
const { container = document.body, width = '300px', height = '200px', textAlign = 'center', textBaseline = 'middle', font = '20px PingFangSC-Medium,PingFang SC',
|
|
19
20
|
// fontWeight = 500,
|
|
20
21
|
fillStyle = 'rgba(189, 177, 167, .3)', content = '请勿外传', rotate = 30, zIndex = 2147483647 } = canvasWM;
|
|
21
22
|
// 仅限主页面添加水印
|
|
22
|
-
if (!location.pathname.includes('/home')) {
|
|
23
|
-
|
|
24
|
-
}
|
|
23
|
+
// if (!location.pathname.includes('/home')) {
|
|
24
|
+
// return;
|
|
25
|
+
// }
|
|
25
26
|
const args = canvasWM;
|
|
26
27
|
const canvas = document.createElement('canvas');
|
|
27
28
|
canvas.setAttribute('width', width);
|
|
@@ -82,8 +83,6 @@ const genCanvasWM = (canvasWM) => {
|
|
|
82
83
|
});
|
|
83
84
|
mo.observe(container, { attributes: true, subtree: true, childList: true });
|
|
84
85
|
}
|
|
85
|
-
}
|
|
86
|
-
// 调用
|
|
87
|
-
// __canvasWM({ content: 'QQMusicFE' })
|
|
86
|
+
}
|
|
88
87
|
|
|
89
88
|
export { genCanvasWM };
|