sculp-js 1.13.3-beta.0 → 1.13.6
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/_virtual/_commonjsHelpers.js +3 -3
- package/dist/cjs/array.js +36 -46
- package/dist/cjs/async.js +41 -43
- package/dist/cjs/base64.js +77 -66
- package/dist/cjs/clipboard.js +54 -53
- package/dist/cjs/cloneDeep.js +90 -91
- package/dist/cjs/cookie.js +27 -30
- package/dist/cjs/date.js +101 -98
- package/dist/cjs/dom.js +114 -121
- package/dist/cjs/download.js +77 -78
- package/dist/cjs/easing.js +29 -32
- package/dist/cjs/file.js +147 -152
- package/dist/cjs/func.js +64 -78
- package/dist/cjs/index.js +1 -3
- package/dist/cjs/math.js +32 -38
- package/dist/cjs/node_modules/bezier-easing/src/index.js +35 -23
- package/dist/cjs/number.js +58 -61
- package/dist/cjs/object.js +112 -126
- package/dist/cjs/path.js +39 -43
- package/dist/cjs/qs.js +34 -41
- package/dist/cjs/random.js +31 -34
- package/dist/cjs/string.js +62 -63
- package/dist/cjs/tooltip.js +66 -69
- package/dist/cjs/tree.js +265 -263
- package/dist/cjs/type.js +42 -46
- package/dist/cjs/unique.js +39 -42
- package/dist/cjs/url.js +47 -48
- package/dist/cjs/validator.js +38 -38
- package/dist/cjs/variable.js +27 -21
- package/dist/cjs/watermark.js +78 -67
- package/dist/esm/array.js +36 -46
- package/dist/esm/async.js +41 -43
- package/dist/esm/base64.js +77 -66
- package/dist/esm/clipboard.js +55 -54
- package/dist/esm/cloneDeep.js +90 -91
- package/dist/esm/cookie.js +27 -30
- package/dist/esm/date.js +101 -98
- package/dist/esm/dom.js +114 -121
- package/dist/esm/download.js +78 -79
- package/dist/esm/easing.js +29 -32
- package/dist/esm/file.js +147 -152
- package/dist/esm/func.js +64 -78
- package/dist/esm/index.js +96 -8
- package/dist/esm/math.js +32 -38
- package/dist/esm/number.js +58 -61
- package/dist/esm/object.js +124 -127
- package/dist/esm/path.js +39 -43
- package/dist/esm/qs.js +34 -41
- package/dist/esm/random.js +31 -34
- package/dist/esm/string.js +74 -64
- package/dist/esm/tooltip.js +66 -69
- package/dist/esm/tree.js +265 -263
- package/dist/esm/type.js +68 -47
- package/dist/esm/unique.js +39 -42
- package/dist/esm/url.js +47 -48
- package/dist/esm/validator.js +56 -39
- package/dist/esm/variable.js +27 -21
- package/dist/esm/watermark.js +79 -68
- package/dist/types/array.d.ts +0 -1
- package/dist/types/async.d.ts +0 -1
- package/dist/types/base64.d.ts +0 -1
- package/dist/types/clipboard.d.ts +0 -1
- package/dist/types/cloneDeep.d.ts +0 -1
- package/dist/types/cookie.d.ts +0 -1
- package/dist/types/date.d.ts +0 -1
- package/dist/types/dom.d.ts +0 -1
- package/dist/types/download.d.ts +0 -1
- package/dist/types/easing.d.ts +0 -1
- package/dist/types/file.d.ts +0 -1
- package/dist/types/func.d.ts +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/math.d.ts +0 -1
- package/dist/types/number.d.ts +0 -1
- package/dist/types/object.d.ts +0 -1
- package/dist/types/path.d.ts +0 -1
- package/dist/types/qs.d.ts +0 -1
- package/dist/types/random.d.ts +0 -1
- package/dist/types/string.d.ts +0 -1
- package/dist/types/tooltip.d.ts +0 -1
- package/dist/types/tree.d.ts +2 -2
- package/dist/types/type.d.ts +0 -1
- package/dist/types/unique.d.ts +0 -1
- package/dist/types/url.d.ts +0 -1
- package/dist/types/validator.d.ts +0 -1
- package/dist/types/variable.d.ts +0 -1
- package/dist/types/watermark.d.ts +0 -1
- package/dist/umd/index.min.js +2 -2
- package/package.json +12 -6
- package/dist/types/array.d.ts.map +0 -1
- package/dist/types/async.d.ts.map +0 -1
- package/dist/types/base64.d.ts.map +0 -1
- package/dist/types/clipboard.d.ts.map +0 -1
- package/dist/types/cloneDeep.d.ts.map +0 -1
- package/dist/types/cookie.d.ts.map +0 -1
- package/dist/types/core-index.d.ts +0 -17
- package/dist/types/core-index.d.ts.map +0 -1
- package/dist/types/date.d.ts.map +0 -1
- package/dist/types/dom.d.ts.map +0 -1
- package/dist/types/download.d.ts.map +0 -1
- package/dist/types/easing.d.ts.map +0 -1
- package/dist/types/file.d.ts.map +0 -1
- package/dist/types/func.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -3278
- package/dist/types/math.d.ts.map +0 -1
- package/dist/types/number.d.ts.map +0 -1
- package/dist/types/object.d.ts.map +0 -1
- package/dist/types/path.d.ts.map +0 -1
- package/dist/types/qs.d.ts.map +0 -1
- package/dist/types/random.d.ts.map +0 -1
- package/dist/types/string.d.ts.map +0 -1
- package/dist/types/tooltip.d.ts.map +0 -1
- package/dist/types/tree.d.ts.map +0 -1
- package/dist/types/type.d.ts.map +0 -1
- package/dist/types/unique.d.ts.map +0 -1
- package/dist/types/url.d.ts.map +0 -1
- package/dist/types/validator.d.ts.map +0 -1
- package/dist/types/variable.d.ts.map +0 -1
- package/dist/types/watermark.d.ts.map +0 -1
package/dist/esm/clipboard.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.6
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { select } from './dom.js';
|
|
8
|
-
import {
|
|
8
|
+
import { isNullOrUnDef, isFunction } from './type.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* 复制文本,优先使用navigator.clipboard,仅在安全上下文(HTTPS/localhost)下生效,若不支持则回退使用execCommand方式
|
|
@@ -15,23 +15,22 @@ import { isFunction, isNullOrUnDef } from './type.js';
|
|
|
15
15
|
* 解决脱离文档流的元素无法复制的问题,如Modal内复制操作)
|
|
16
16
|
*/
|
|
17
17
|
function copyText(text, options) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
fallbackCopyText(text, options);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
// 使用旧版execCommand方法
|
|
18
|
+
const { successCallback = void 0, failCallback = void 0 } = isNullOrUnDef(options) ? {} : options;
|
|
19
|
+
if (navigator.clipboard) {
|
|
20
|
+
navigator.clipboard
|
|
21
|
+
.writeText(text)
|
|
22
|
+
.then(() => {
|
|
23
|
+
if (isFunction(successCallback)) {
|
|
24
|
+
successCallback();
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
.catch(err => {
|
|
33
28
|
fallbackCopyText(text, options);
|
|
34
|
-
|
|
29
|
+
});
|
|
30
|
+
} else {
|
|
31
|
+
// 使用旧版execCommand方法
|
|
32
|
+
fallbackCopyText(text, options);
|
|
33
|
+
}
|
|
35
34
|
}
|
|
36
35
|
/**
|
|
37
36
|
* 使用execCommand方式复制文本
|
|
@@ -39,27 +38,29 @@ function copyText(text, options) {
|
|
|
39
38
|
* @param options
|
|
40
39
|
*/
|
|
41
40
|
function fallbackCopyText(text, options) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
failCallback(err);
|
|
55
|
-
}
|
|
41
|
+
const {
|
|
42
|
+
successCallback = void 0,
|
|
43
|
+
failCallback = void 0,
|
|
44
|
+
container = document.body
|
|
45
|
+
} = isNullOrUnDef(options) ? {} : options;
|
|
46
|
+
let textEl = createFakeElement(text);
|
|
47
|
+
container.appendChild(textEl);
|
|
48
|
+
select(textEl);
|
|
49
|
+
try {
|
|
50
|
+
const res = document.execCommand('copy');
|
|
51
|
+
if (res && isFunction(successCallback)) {
|
|
52
|
+
successCallback();
|
|
56
53
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
textEl = null;
|
|
61
|
-
window.getSelection()?.removeAllRanges(); // 清除选区
|
|
54
|
+
} catch (err) {
|
|
55
|
+
if (isFunction(failCallback)) {
|
|
56
|
+
failCallback(err);
|
|
62
57
|
}
|
|
58
|
+
} finally {
|
|
59
|
+
container.removeChild(textEl);
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
textEl = null;
|
|
62
|
+
window.getSelection()?.removeAllRanges(); // 清除选区
|
|
63
|
+
}
|
|
63
64
|
}
|
|
64
65
|
/**
|
|
65
66
|
* Creates a fake textarea element with a value.
|
|
@@ -67,23 +68,23 @@ function fallbackCopyText(text, options) {
|
|
|
67
68
|
* @return {HTMLElement}
|
|
68
69
|
*/
|
|
69
70
|
function createFakeElement(value) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
71
|
+
const isRTL = document.documentElement.getAttribute('dir') === 'rtl';
|
|
72
|
+
const fakeElement = document.createElement('textarea');
|
|
73
|
+
// Prevent zooming on iOS
|
|
74
|
+
fakeElement.style.fontSize = '12pt';
|
|
75
|
+
// Reset box model
|
|
76
|
+
fakeElement.style.border = '0';
|
|
77
|
+
fakeElement.style.padding = '0';
|
|
78
|
+
fakeElement.style.margin = '0';
|
|
79
|
+
// Move element out of screen horizontally
|
|
80
|
+
fakeElement.style.position = 'absolute';
|
|
81
|
+
fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px';
|
|
82
|
+
// Move element to the same position vertically
|
|
83
|
+
const yPosition = window.pageYOffset || document.documentElement.scrollTop;
|
|
84
|
+
fakeElement.style.top = `${yPosition}px`;
|
|
85
|
+
fakeElement.setAttribute('readonly', '');
|
|
86
|
+
fakeElement.value = value;
|
|
87
|
+
return fakeElement;
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
export { copyText, fallbackCopyText };
|
package/dist/esm/cloneDeep.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.6
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -15,101 +15,100 @@
|
|
|
15
15
|
* @returns {T}
|
|
16
16
|
*/
|
|
17
17
|
function cloneDeep(source, map = new WeakMap()) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
map.set(source, copy);
|
|
43
|
-
return copy;
|
|
44
|
-
}
|
|
45
|
-
// 处理 RegExp 对象
|
|
46
|
-
if (source instanceof RegExp) {
|
|
47
|
-
const copy = new RegExp(source.source, source.flags);
|
|
48
|
-
copy.lastIndex = source.lastIndex; // 保留匹配状态
|
|
49
|
-
map.set(source, copy);
|
|
50
|
-
return copy;
|
|
51
|
-
}
|
|
52
|
-
// 处理 Map
|
|
53
|
-
if (source instanceof Map) {
|
|
54
|
-
const copy = new Map();
|
|
55
|
-
map.set(source, copy);
|
|
56
|
-
source.forEach((value, key) => {
|
|
57
|
-
copy.set(cloneDeep(key, map), cloneDeep(value, map));
|
|
58
|
-
});
|
|
59
|
-
return copy;
|
|
60
|
-
}
|
|
61
|
-
// 处理 Set
|
|
62
|
-
if (source instanceof Set) {
|
|
63
|
-
const copy = new Set();
|
|
64
|
-
map.set(source, copy);
|
|
65
|
-
source.forEach(value => {
|
|
66
|
-
copy.add(cloneDeep(value, map));
|
|
67
|
-
});
|
|
68
|
-
return copy;
|
|
69
|
-
}
|
|
70
|
-
// 处理数组 (包含稀疏数组)
|
|
71
|
-
if (Array.isArray(source)) {
|
|
72
|
-
const copy = new Array(source.length);
|
|
73
|
-
map.set(source, copy);
|
|
74
|
-
// 克隆所有有效索引
|
|
75
|
-
for (let i = 0, len = source.length; i < len; i++) {
|
|
76
|
-
if (i in source) {
|
|
77
|
-
// 保留空位
|
|
78
|
-
copy[i] = cloneDeep(source[i], map);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// 克隆数组的自定义属性
|
|
82
|
-
const descriptors = Object.getOwnPropertyDescriptors(source);
|
|
83
|
-
for (const key of Reflect.ownKeys(descriptors)) {
|
|
84
|
-
Object.defineProperty(copy, key, {
|
|
85
|
-
...descriptors[key],
|
|
86
|
-
value: cloneDeep(descriptors[key].value, map)
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return copy;
|
|
90
|
-
}
|
|
91
|
-
// 处理普通对象和类实例
|
|
92
|
-
const copy = Object.create(Object.getPrototypeOf(source));
|
|
18
|
+
// 处理原始类型和 null/undefined
|
|
19
|
+
if (source === null || typeof source !== 'object') {
|
|
20
|
+
return source;
|
|
21
|
+
}
|
|
22
|
+
// 处理循环引用
|
|
23
|
+
if (map.has(source)) {
|
|
24
|
+
return map.get(source);
|
|
25
|
+
}
|
|
26
|
+
// 处理 ArrayBuffer
|
|
27
|
+
if (source instanceof ArrayBuffer) {
|
|
28
|
+
const copy = new ArrayBuffer(source.byteLength);
|
|
29
|
+
new Uint8Array(copy).set(new Uint8Array(source));
|
|
30
|
+
map.set(source, copy);
|
|
31
|
+
return copy;
|
|
32
|
+
}
|
|
33
|
+
// 处理 DataView 和 TypedArray (Uint8Array 等)
|
|
34
|
+
if (ArrayBuffer.isView(source)) {
|
|
35
|
+
const constructor = source.constructor;
|
|
36
|
+
const bufferCopy = cloneDeep(source.buffer, map);
|
|
37
|
+
return new constructor(bufferCopy, source.byteOffset, source.length);
|
|
38
|
+
}
|
|
39
|
+
// 处理 Date 对象
|
|
40
|
+
if (source instanceof Date) {
|
|
41
|
+
const copy = new Date(source.getTime());
|
|
93
42
|
map.set(source, copy);
|
|
43
|
+
return copy;
|
|
44
|
+
}
|
|
45
|
+
// 处理 RegExp 对象
|
|
46
|
+
if (source instanceof RegExp) {
|
|
47
|
+
const copy = new RegExp(source.source, source.flags);
|
|
48
|
+
copy.lastIndex = source.lastIndex; // 保留匹配状态
|
|
49
|
+
map.set(source, copy);
|
|
50
|
+
return copy;
|
|
51
|
+
}
|
|
52
|
+
// 处理 Map
|
|
53
|
+
if (source instanceof Map) {
|
|
54
|
+
const copy = new Map();
|
|
55
|
+
map.set(source, copy);
|
|
56
|
+
source.forEach((value, key) => {
|
|
57
|
+
copy.set(cloneDeep(key, map), cloneDeep(value, map));
|
|
58
|
+
});
|
|
59
|
+
return copy;
|
|
60
|
+
}
|
|
61
|
+
// 处理 Set
|
|
62
|
+
if (source instanceof Set) {
|
|
63
|
+
const copy = new Set();
|
|
64
|
+
map.set(source, copy);
|
|
65
|
+
source.forEach(value => {
|
|
66
|
+
copy.add(cloneDeep(value, map));
|
|
67
|
+
});
|
|
68
|
+
return copy;
|
|
69
|
+
}
|
|
70
|
+
// 处理数组 (包含稀疏数组)
|
|
71
|
+
if (Array.isArray(source)) {
|
|
72
|
+
const copy = new Array(source.length);
|
|
73
|
+
map.set(source, copy);
|
|
74
|
+
// 克隆所有有效索引
|
|
75
|
+
for (let i = 0, len = source.length; i < len; i++) {
|
|
76
|
+
if (i in source) {
|
|
77
|
+
// 保留空位
|
|
78
|
+
copy[i] = cloneDeep(source[i], map);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// 克隆数组的自定义属性
|
|
94
82
|
const descriptors = Object.getOwnPropertyDescriptors(source);
|
|
95
83
|
for (const key of Reflect.ownKeys(descriptors)) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
// 处理访问器属性 (getter/setter)
|
|
103
|
-
if (descriptor.get) {
|
|
104
|
-
descriptor.get = cloneDeep(descriptor.get, map);
|
|
105
|
-
}
|
|
106
|
-
if (descriptor.set) {
|
|
107
|
-
descriptor.set = cloneDeep(descriptor.set, map);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
Object.defineProperty(copy, key, descriptor);
|
|
84
|
+
Object.defineProperty(copy, key, {
|
|
85
|
+
...descriptors[key],
|
|
86
|
+
value: cloneDeep(descriptors[key].value, map)
|
|
87
|
+
});
|
|
111
88
|
}
|
|
112
89
|
return copy;
|
|
90
|
+
}
|
|
91
|
+
// 处理普通对象和类实例
|
|
92
|
+
const copy = Object.create(Object.getPrototypeOf(source));
|
|
93
|
+
map.set(source, copy);
|
|
94
|
+
const descriptors = Object.getOwnPropertyDescriptors(source);
|
|
95
|
+
for (const key of Reflect.ownKeys(descriptors)) {
|
|
96
|
+
const descriptor = descriptors[key];
|
|
97
|
+
if ('value' in descriptor) {
|
|
98
|
+
// 克隆数据属性
|
|
99
|
+
descriptor.value = cloneDeep(descriptor.value, map);
|
|
100
|
+
} else {
|
|
101
|
+
// 处理访问器属性 (getter/setter)
|
|
102
|
+
if (descriptor.get) {
|
|
103
|
+
descriptor.get = cloneDeep(descriptor.get, map);
|
|
104
|
+
}
|
|
105
|
+
if (descriptor.set) {
|
|
106
|
+
descriptor.set = cloneDeep(descriptor.set, map);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
Object.defineProperty(copy, key, descriptor);
|
|
110
|
+
}
|
|
111
|
+
return copy;
|
|
113
112
|
}
|
|
114
113
|
|
|
115
114
|
export { cloneDeep };
|
package/dist/esm/cookie.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.6
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -12,17 +12,15 @@ import { isNumber, isDate } from './type.js';
|
|
|
12
12
|
* @returns {string}
|
|
13
13
|
*/
|
|
14
14
|
function cookieGet(name) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
return '';
|
|
15
|
+
const { cookie } = document;
|
|
16
|
+
if (!cookie) return '';
|
|
17
|
+
const result = cookie.split(';');
|
|
18
|
+
for (let i = 0; i < result.length; i++) {
|
|
19
|
+
const item = result[i];
|
|
20
|
+
const [key, val = ''] = item.split('=');
|
|
21
|
+
if (key === name) return decodeURIComponent(val);
|
|
22
|
+
}
|
|
23
|
+
return '';
|
|
26
24
|
}
|
|
27
25
|
/**
|
|
28
26
|
* 设置 cookie
|
|
@@ -31,29 +29,28 @@ function cookieGet(name) {
|
|
|
31
29
|
* @param {number | Date} [maxAge]
|
|
32
30
|
*/
|
|
33
31
|
function cookieSet(name, value, maxAge) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return `${key}=${val}`;
|
|
32
|
+
const metas = [];
|
|
33
|
+
const EXPIRES = 'expires';
|
|
34
|
+
metas.push([name, encodeURIComponent(value)]);
|
|
35
|
+
if (isNumber(maxAge)) {
|
|
36
|
+
const d = new Date();
|
|
37
|
+
d.setTime(d.getTime() + maxAge);
|
|
38
|
+
metas.push([EXPIRES, d.toUTCString()]);
|
|
39
|
+
} else if (isDate(maxAge)) {
|
|
40
|
+
metas.push([EXPIRES, maxAge.toUTCString()]);
|
|
41
|
+
}
|
|
42
|
+
metas.push(['path', '/']);
|
|
43
|
+
document.cookie = metas
|
|
44
|
+
.map(item => {
|
|
45
|
+
const [key, val] = item;
|
|
46
|
+
return `${key}=${val}`;
|
|
50
47
|
})
|
|
51
|
-
|
|
48
|
+
.join(';');
|
|
52
49
|
}
|
|
53
50
|
/**
|
|
54
51
|
* 删除单个 cookie
|
|
55
52
|
* @param name cookie 名称
|
|
56
53
|
*/
|
|
57
|
-
const cookieDel =
|
|
54
|
+
const cookieDel = name => cookieSet(name, '', -1);
|
|
58
55
|
|
|
59
56
|
export { cookieDel, cookieGet, cookieSet };
|