@cloudcome/utils-browser 1.1.0 → 1.1.1
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/CHANGELOG.md +27 -0
- package/LICENSE +21 -0
- package/package.json +122 -1
- package/src/base64.ts +25 -0
- package/{dist/cache.cjs → src/cache.ts} +48 -20
- package/src/canvas.ts +147 -0
- package/{dist/clipboard.d.ts → src/clipboard.ts} +12 -1
- package/src/cookie.ts +118 -0
- package/{dist/dom.d.ts → src/dom.ts} +21 -3
- package/src/download.ts +22 -0
- package/src/dts/global.d.ts +27 -0
- package/src/image.ts +45 -0
- package/src/index.ts +1 -0
- package/src/timer.ts +56 -0
- package/src/video.ts +19 -0
- package/test/base64.test.ts +47 -0
- package/test/cache.test.ts +199 -0
- package/test/canvas.test.ts +124 -0
- package/test/clipboard.test.ts +18 -0
- package/test/cookie.test.ts +52 -0
- package/test/dom.test.ts +67 -0
- package/test/download.test.ts +15 -0
- package/test/image.test.ts +75 -0
- package/test/index.test.ts +6 -0
- package/test/timer.test.ts +109 -0
- package/test/video.test.ts +36 -0
- package/tsconfig.json +31 -0
- package/vite.config.mts +100 -0
- package/dist/base64.cjs +0 -15
- package/dist/base64.cjs.map +0 -1
- package/dist/base64.d.ts +0 -14
- package/dist/base64.mjs +0 -15
- package/dist/base64.mjs.map +0 -1
- package/dist/cache.cjs.map +0 -1
- package/dist/cache.d.ts +0 -49
- package/dist/cache.mjs +0 -87
- package/dist/cache.mjs.map +0 -1
- package/dist/canvas.cjs +0 -58
- package/dist/canvas.cjs.map +0 -1
- package/dist/canvas.d.ts +0 -92
- package/dist/canvas.mjs +0 -58
- package/dist/canvas.mjs.map +0 -1
- package/dist/clipboard.cjs +0 -16
- package/dist/clipboard.cjs.map +0 -1
- package/dist/clipboard.mjs +0 -16
- package/dist/clipboard.mjs.map +0 -1
- package/dist/cookie.cjs +0 -50
- package/dist/cookie.cjs.map +0 -1
- package/dist/cookie.d.ts +0 -55
- package/dist/cookie.mjs +0 -50
- package/dist/cookie.mjs.map +0 -1
- package/dist/dom.cjs +0 -18
- package/dist/dom.cjs.map +0 -1
- package/dist/dom.mjs +0 -18
- package/dist/dom.mjs.map +0 -1
- package/dist/download.cjs +0 -16
- package/dist/download.cjs.map +0 -1
- package/dist/download.d.ts +0 -12
- package/dist/download.mjs +0 -16
- package/dist/download.mjs.map +0 -1
- package/dist/image.cjs +0 -35
- package/dist/image.cjs.map +0 -1
- package/dist/image.d.ts +0 -9
- package/dist/image.mjs +0 -35
- package/dist/image.mjs.map +0 -1
- package/dist/index.cjs +0 -5
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.mjs +0 -5
- package/dist/index.mjs.map +0 -1
- package/dist/timer.cjs +0 -41
- package/dist/timer.cjs.map +0 -1
- package/dist/timer.d.ts +0 -9
- package/dist/timer.mjs +0 -41
- package/dist/timer.mjs.map +0 -1
- package/dist/video.cjs +0 -14
- package/dist/video.cjs.map +0 -1
- package/dist/video.d.ts +0 -9
- package/dist/video.mjs +0 -14
- package/dist/video.mjs.map +0 -1
package/dist/canvas.d.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 将 Canvas 转换为 Base64 编码的字符串
|
|
3
|
-
* @param {HTMLCanvasElement} canvas - 需要转换的 Canvas 元素
|
|
4
|
-
* @param {string} [type] - 图片格式,默认为 'image/png'
|
|
5
|
-
* @param {number} [quality] - 图片质量,范围 0 到 1,仅适用于 'image/jpeg' 或 'image/webp'
|
|
6
|
-
* @returns {string} Base64 编码的图片数据
|
|
7
|
-
* @example
|
|
8
|
-
* const base64 = canvasToBase64(canvas, 'image/jpeg', 0.8);
|
|
9
|
-
*/
|
|
10
|
-
export declare function canvasToBase64(canvas: HTMLCanvasElement, type?: string, quality?: number): string;
|
|
11
|
-
/**
|
|
12
|
-
* 将 Canvas 转换为 Blob 对象
|
|
13
|
-
* @param {HTMLCanvasElement} canvas - 需要转换的 Canvas 元素
|
|
14
|
-
* @param {string} [type] - 图片格式,默认为 'image/png'
|
|
15
|
-
* @param {number} [quality] - 图片质量,范围 0 到 1,仅适用于 'image/jpeg' 或 'image/webp'
|
|
16
|
-
* @returns {Promise<Blob>} 返回一个包含 Blob 对象的 Promise
|
|
17
|
-
* @example
|
|
18
|
-
* const blob = await canvasToBlob(canvas, 'image/jpeg', 0.8);
|
|
19
|
-
*/
|
|
20
|
-
export declare function canvasToBlob(canvas: HTMLCanvasElement, type?: string, quality?: number): Promise<Blob>;
|
|
21
|
-
/**
|
|
22
|
-
* Canvas 绘制图片的配置选项
|
|
23
|
-
*/
|
|
24
|
-
export type CanvasDrawImageOptions = {
|
|
25
|
-
/**
|
|
26
|
-
* 源图片的左上角 x 坐标
|
|
27
|
-
* @type {number}
|
|
28
|
-
* @default 0
|
|
29
|
-
*/
|
|
30
|
-
srcLeft?: number;
|
|
31
|
-
/**
|
|
32
|
-
* 源图片的左上角 y 坐标
|
|
33
|
-
* @type {number}
|
|
34
|
-
* @default 0
|
|
35
|
-
*/
|
|
36
|
-
srcTop?: number;
|
|
37
|
-
/**
|
|
38
|
-
* 源图片的宽度
|
|
39
|
-
* @type {number}
|
|
40
|
-
* @default 图片的原始宽度
|
|
41
|
-
*/
|
|
42
|
-
srcWidth?: number;
|
|
43
|
-
/**
|
|
44
|
-
* 源图片的高度
|
|
45
|
-
* @type {number}
|
|
46
|
-
* @default 图片的原始高度
|
|
47
|
-
*/
|
|
48
|
-
srcHeight?: number;
|
|
49
|
-
/**
|
|
50
|
-
* 目标 Canvas 的左上角 x 坐标
|
|
51
|
-
* @type {number}
|
|
52
|
-
* @default 0
|
|
53
|
-
*/
|
|
54
|
-
destLeft?: number;
|
|
55
|
-
/**
|
|
56
|
-
* 目标 Canvas 的左上角 y 坐标
|
|
57
|
-
* @type {number}
|
|
58
|
-
* @default 0
|
|
59
|
-
*/
|
|
60
|
-
destTop?: number;
|
|
61
|
-
/**
|
|
62
|
-
* 目标 Canvas 的宽度
|
|
63
|
-
* @type {number}
|
|
64
|
-
* @default Canvas 的宽度
|
|
65
|
-
*/
|
|
66
|
-
destWidth?: number;
|
|
67
|
-
/**
|
|
68
|
-
* 目标 Canvas 的高度
|
|
69
|
-
* @type {number}
|
|
70
|
-
* @default Canvas 的高度
|
|
71
|
-
*/
|
|
72
|
-
destHeight?: number;
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* 在 Canvas 上绘制图片
|
|
76
|
-
* @param {HTMLCanvasElement} canvas - 目标 Canvas 元素
|
|
77
|
-
* @param {string} url - 图片的 URL
|
|
78
|
-
* @param {CanvasDrawImageOptions} [options] - 绘制图片的配置选项
|
|
79
|
-
* @returns {Promise<void>} 返回一个 Promise,表示绘制完成
|
|
80
|
-
* @example
|
|
81
|
-
* await canvasDrawImage(canvas, 'https://example.com/image.png', {
|
|
82
|
-
* srcLeft: 10,
|
|
83
|
-
* srcTop: 10,
|
|
84
|
-
* srcWidth: 100,
|
|
85
|
-
* srcHeight: 100,
|
|
86
|
-
* destLeft: 0,
|
|
87
|
-
* destTop: 0,
|
|
88
|
-
* destWidth: 200,
|
|
89
|
-
* destHeight: 200
|
|
90
|
-
* });
|
|
91
|
-
*/
|
|
92
|
-
export declare function canvasDrawImage(canvas: HTMLCanvasElement, url: string, options?: CanvasDrawImageOptions): Promise<void>;
|
package/dist/canvas.mjs
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { objectDefaults } from "@cloudcome/utils-core/object";
|
|
2
|
-
import { imageLoad } from "./image.mjs";
|
|
3
|
-
function canvasToBase64(canvas, type, quality) {
|
|
4
|
-
return canvas.toDataURL(type, quality);
|
|
5
|
-
}
|
|
6
|
-
async function canvasToBlob(canvas, type, quality) {
|
|
7
|
-
return new Promise((resolve, reject) => {
|
|
8
|
-
canvas.toBlob(
|
|
9
|
-
(blob) => {
|
|
10
|
-
if (blob) {
|
|
11
|
-
resolve(blob);
|
|
12
|
-
} else {
|
|
13
|
-
reject(new Error("canvas 导出二进制对象失败"));
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
type,
|
|
17
|
-
quality
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
async function canvasDrawImage(canvas, url, options) {
|
|
22
|
-
const ctx = canvas.getContext("2d");
|
|
23
|
-
if (!ctx) throw new Error("canvas context is null");
|
|
24
|
-
const img = await imageLoad(url);
|
|
25
|
-
const defaults = {
|
|
26
|
-
srcLeft: 0,
|
|
27
|
-
srcTop: 0,
|
|
28
|
-
srcWidth: img.width,
|
|
29
|
-
srcHeight: img.height,
|
|
30
|
-
destLeft: 0,
|
|
31
|
-
destTop: 0,
|
|
32
|
-
destWidth: canvas.width,
|
|
33
|
-
destHeight: canvas.height
|
|
34
|
-
};
|
|
35
|
-
const { srcLeft, srcTop, srcWidth, srcHeight, destLeft, destTop, destWidth, destHeight } = objectDefaults(
|
|
36
|
-
options || {},
|
|
37
|
-
defaults
|
|
38
|
-
);
|
|
39
|
-
ctx.drawImage(
|
|
40
|
-
img,
|
|
41
|
-
// source
|
|
42
|
-
srcLeft,
|
|
43
|
-
srcTop,
|
|
44
|
-
srcWidth,
|
|
45
|
-
srcHeight,
|
|
46
|
-
// dest
|
|
47
|
-
destLeft,
|
|
48
|
-
destTop,
|
|
49
|
-
destWidth,
|
|
50
|
-
destHeight
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
export {
|
|
54
|
-
canvasDrawImage,
|
|
55
|
-
canvasToBase64,
|
|
56
|
-
canvasToBlob
|
|
57
|
-
};
|
|
58
|
-
//# sourceMappingURL=canvas.mjs.map
|
package/dist/canvas.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.mjs","sources":["../src/canvas.ts"],"sourcesContent":["import { objectDefaults } from '@cloudcome/utils-core/object';\nimport { imageLoad } from './image';\n\n/**\n * 将 Canvas 转换为 Base64 编码的字符串\n * @param {HTMLCanvasElement} canvas - 需要转换的 Canvas 元素\n * @param {string} [type] - 图片格式,默认为 'image/png'\n * @param {number} [quality] - 图片质量,范围 0 到 1,仅适用于 'image/jpeg' 或 'image/webp'\n * @returns {string} Base64 编码的图片数据\n * @example\n * const base64 = canvasToBase64(canvas, 'image/jpeg', 0.8);\n */\nexport function canvasToBase64(canvas: HTMLCanvasElement, type?: string, quality?: number) {\n return canvas.toDataURL(type, quality);\n}\n\n/**\n * 将 Canvas 转换为 Blob 对象\n * @param {HTMLCanvasElement} canvas - 需要转换的 Canvas 元素\n * @param {string} [type] - 图片格式,默认为 'image/png'\n * @param {number} [quality] - 图片质量,范围 0 到 1,仅适用于 'image/jpeg' 或 'image/webp'\n * @returns {Promise<Blob>} 返回一个包含 Blob 对象的 Promise\n * @example\n * const blob = await canvasToBlob(canvas, 'image/jpeg', 0.8);\n */\nexport async function canvasToBlob(canvas: HTMLCanvasElement, type?: string, quality?: number) {\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new Error('canvas 导出二进制对象失败'));\n }\n },\n type,\n quality,\n );\n });\n}\n\n/**\n * Canvas 绘制图片的配置选项\n */\nexport type CanvasDrawImageOptions = {\n /**\n * 源图片的左上角 x 坐标\n * @type {number}\n * @default 0\n */\n srcLeft?: number;\n /**\n * 源图片的左上角 y 坐标\n * @type {number}\n * @default 0\n */\n srcTop?: number;\n /**\n * 源图片的宽度\n * @type {number}\n * @default 图片的原始宽度\n */\n srcWidth?: number;\n /**\n * 源图片的高度\n * @type {number}\n * @default 图片的原始高度\n */\n srcHeight?: number;\n\n /**\n * 目标 Canvas 的左上角 x 坐标\n * @type {number}\n * @default 0\n */\n destLeft?: number;\n /**\n * 目标 Canvas 的左上角 y 坐标\n * @type {number}\n * @default 0\n */\n destTop?: number;\n /**\n * 目标 Canvas 的宽度\n * @type {number}\n * @default Canvas 的宽度\n */\n destWidth?: number;\n /**\n * 目标 Canvas 的高度\n * @type {number}\n * @default Canvas 的高度\n */\n destHeight?: number;\n};\n\n/**\n * 在 Canvas 上绘制图片\n * @param {HTMLCanvasElement} canvas - 目标 Canvas 元素\n * @param {string} url - 图片的 URL\n * @param {CanvasDrawImageOptions} [options] - 绘制图片的配置选项\n * @returns {Promise<void>} 返回一个 Promise,表示绘制完成\n * @example\n * await canvasDrawImage(canvas, 'https://example.com/image.png', {\n * srcLeft: 10,\n * srcTop: 10,\n * srcWidth: 100,\n * srcHeight: 100,\n * destLeft: 0,\n * destTop: 0,\n * destWidth: 200,\n * destHeight: 200\n * });\n */\nexport async function canvasDrawImage(canvas: HTMLCanvasElement, url: string, options?: CanvasDrawImageOptions) {\n const ctx = canvas.getContext('2d');\n if (!ctx) throw new Error('canvas context is null');\n\n const img = await imageLoad(url);\n const defaults: CanvasDrawImageOptions = {\n srcLeft: 0,\n srcTop: 0,\n srcWidth: img.width,\n srcHeight: img.height,\n destLeft: 0,\n destTop: 0,\n destWidth: canvas.width,\n destHeight: canvas.height,\n };\n const { srcLeft, srcTop, srcWidth, srcHeight, destLeft, destTop, destWidth, destHeight } = objectDefaults(\n options || {},\n defaults,\n ) as Required<CanvasDrawImageOptions>;\n ctx.drawImage(\n img,\n // source\n srcLeft,\n srcTop,\n srcWidth,\n srcHeight,\n // dest\n destLeft,\n destTop,\n destWidth,\n destHeight,\n );\n}\n"],"names":[],"mappings":";;AAYgB,SAAA,eAAe,QAA2B,MAAe,SAAkB;AAClF,SAAA,OAAO,UAAU,MAAM,OAAO;AACvC;AAWsB,eAAA,aAAa,QAA2B,MAAe,SAAkB;AAC7F,SAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AACrC,WAAA;AAAA,MACL,CAAC,SAAS;AACR,YAAI,MAAM;AACR,kBAAQ,IAAI;AAAA,QAAA,OACP;AACE,iBAAA,IAAI,MAAM,kBAAkB,CAAC;AAAA,QAAA;AAAA,MAExC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA,CACD;AACH;AA2EsB,eAAA,gBAAgB,QAA2B,KAAa,SAAkC;AACxG,QAAA,MAAM,OAAO,WAAW,IAAI;AAClC,MAAI,CAAC,IAAW,OAAA,IAAI,MAAM,wBAAwB;AAE5C,QAAA,MAAM,MAAM,UAAU,GAAG;AAC/B,QAAM,WAAmC;AAAA,IACvC,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU,IAAI;AAAA,IACd,WAAW,IAAI;AAAA,IACf,UAAU;AAAA,IACV,SAAS;AAAA,IACT,WAAW,OAAO;AAAA,IAClB,YAAY,OAAO;AAAA,EACrB;AACM,QAAA,EAAE,SAAS,QAAQ,UAAU,WAAW,UAAU,SAAS,WAAW,WAAA,IAAe;AAAA,IACzF,WAAW,CAAC;AAAA,IACZ;AAAA,EACF;AACI,MAAA;AAAA,IACF;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;"}
|
package/dist/clipboard.cjs
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
function copyText(text) {
|
|
4
|
-
const textArea = document.createElement("textarea");
|
|
5
|
-
textArea.value = text;
|
|
6
|
-
textArea.style.position = "fixed";
|
|
7
|
-
textArea.style.left = "-9999px";
|
|
8
|
-
textArea.style.top = "-9999px";
|
|
9
|
-
document.body.appendChild(textArea);
|
|
10
|
-
textArea.focus();
|
|
11
|
-
textArea.select();
|
|
12
|
-
document.execCommand("copy");
|
|
13
|
-
document.body.removeChild(textArea);
|
|
14
|
-
}
|
|
15
|
-
exports.copyText = copyText;
|
|
16
|
-
//# sourceMappingURL=clipboard.cjs.map
|
package/dist/clipboard.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.cjs","sources":["../src/clipboard.ts"],"sourcesContent":["/**\n * 将文本复制到剪贴板\n * 该方法使用传统的 execCommand 方法实现文本复制\n *\n * @param text - 要复制到剪贴板的文本内容\n * @returns void\n *\n * @example\n * // 基本用法\n * await copyText('Hello World');\n *\n * @example\n * // 处理复制结果\n * copyText('Hello World')\n * .then(() => console.log('复制成功'))\n * .catch(() => console.error('复制失败'));\n */\nexport function copyText(text: string) {\n const textArea = document.createElement('textarea');\n textArea.value = text;\n textArea.style.position = 'fixed';\n textArea.style.left = '-9999px';\n textArea.style.top = '-9999px';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n document.execCommand('copy');\n document.body.removeChild(textArea);\n}\n"],"names":[],"mappings":";;AAiBO,SAAS,SAAS,MAAc;AAC/B,QAAA,WAAW,SAAS,cAAc,UAAU;AAClD,WAAS,QAAQ;AACjB,WAAS,MAAM,WAAW;AAC1B,WAAS,MAAM,OAAO;AACtB,WAAS,MAAM,MAAM;AACZ,WAAA,KAAK,YAAY,QAAQ;AAClC,WAAS,MAAM;AACf,WAAS,OAAO;AAChB,WAAS,YAAY,MAAM;AAClB,WAAA,KAAK,YAAY,QAAQ;AACpC;;"}
|
package/dist/clipboard.mjs
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
function copyText(text) {
|
|
2
|
-
const textArea = document.createElement("textarea");
|
|
3
|
-
textArea.value = text;
|
|
4
|
-
textArea.style.position = "fixed";
|
|
5
|
-
textArea.style.left = "-9999px";
|
|
6
|
-
textArea.style.top = "-9999px";
|
|
7
|
-
document.body.appendChild(textArea);
|
|
8
|
-
textArea.focus();
|
|
9
|
-
textArea.select();
|
|
10
|
-
document.execCommand("copy");
|
|
11
|
-
document.body.removeChild(textArea);
|
|
12
|
-
}
|
|
13
|
-
export {
|
|
14
|
-
copyText
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=clipboard.mjs.map
|
package/dist/clipboard.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.mjs","sources":["../src/clipboard.ts"],"sourcesContent":["/**\n * 将文本复制到剪贴板\n * 该方法使用传统的 execCommand 方法实现文本复制\n *\n * @param text - 要复制到剪贴板的文本内容\n * @returns void\n *\n * @example\n * // 基本用法\n * await copyText('Hello World');\n *\n * @example\n * // 处理复制结果\n * copyText('Hello World')\n * .then(() => console.log('复制成功'))\n * .catch(() => console.error('复制失败'));\n */\nexport function copyText(text: string) {\n const textArea = document.createElement('textarea');\n textArea.value = text;\n textArea.style.position = 'fixed';\n textArea.style.left = '-9999px';\n textArea.style.top = '-9999px';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n document.execCommand('copy');\n document.body.removeChild(textArea);\n}\n"],"names":[],"mappings":"AAiBO,SAAS,SAAS,MAAc;AAC/B,QAAA,WAAW,SAAS,cAAc,UAAU;AAClD,WAAS,QAAQ;AACjB,WAAS,MAAM,WAAW;AAC1B,WAAS,MAAM,OAAO;AACtB,WAAS,MAAM,MAAM;AACZ,WAAA,KAAK,YAAY,QAAQ;AAClC,WAAS,MAAM;AACf,WAAS,OAAO;AAChB,WAAS,YAAY,MAAM;AAClB,WAAA,KAAK,YAAY,QAAQ;AACpC;"}
|
package/dist/cookie.cjs
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const date = require("@cloudcome/utils-core/date");
|
|
4
|
-
function cookieGet(name) {
|
|
5
|
-
const cookies = document.cookie.split(";");
|
|
6
|
-
for (let i = 0; i < cookies.length; i++) {
|
|
7
|
-
const cookie = cookies[i].trim();
|
|
8
|
-
if (cookie.startsWith(`${name}=`)) {
|
|
9
|
-
return decodeURIComponent(cookie.slice(name.length + 1));
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
return "";
|
|
13
|
-
}
|
|
14
|
-
function cookieSet(name, value, options) {
|
|
15
|
-
const { expires, maxAge, path, domain, httpOnly, sameSite, secure } = options || {};
|
|
16
|
-
let cookie = `${name}=${encodeURIComponent(value)}`;
|
|
17
|
-
const expiresAt = expires ? date.dateParse(expires) : maxAge ? date.dateParse(Date.now() + maxAge) : null;
|
|
18
|
-
const metas = [];
|
|
19
|
-
if (expiresAt) {
|
|
20
|
-
metas.push(["expires", expiresAt.toISOString()]);
|
|
21
|
-
}
|
|
22
|
-
if (path) {
|
|
23
|
-
metas.push(["path", path]);
|
|
24
|
-
}
|
|
25
|
-
if (domain) {
|
|
26
|
-
metas.push(["domain", domain]);
|
|
27
|
-
}
|
|
28
|
-
if (httpOnly) {
|
|
29
|
-
metas.push(["httpOnly", "true"]);
|
|
30
|
-
}
|
|
31
|
-
if (sameSite) {
|
|
32
|
-
metas.push(["sameSite", sameSite]);
|
|
33
|
-
}
|
|
34
|
-
if (secure) {
|
|
35
|
-
metas.push(["secure", "true"]);
|
|
36
|
-
}
|
|
37
|
-
for (const [key, value2] of metas) {
|
|
38
|
-
cookie += `; ${key}=${value2}`;
|
|
39
|
-
}
|
|
40
|
-
document.cookie = cookie;
|
|
41
|
-
}
|
|
42
|
-
function cookieDel(name) {
|
|
43
|
-
cookieSet(name, "", {
|
|
44
|
-
expires: 0
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
exports.cookieDel = cookieDel;
|
|
48
|
-
exports.cookieGet = cookieGet;
|
|
49
|
-
exports.cookieSet = cookieSet;
|
|
50
|
-
//# sourceMappingURL=cookie.cjs.map
|
package/dist/cookie.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cookie.cjs","sources":["../src/cookie.ts"],"sourcesContent":["import type { TDateValue } from '@cloudcome/utils-core/date';\nimport { dateParse } from '@cloudcome/utils-core/date';\n\n/**\n * 获取指定名称的 Cookie 值。\n * @param {string} name - Cookie 的名称。\n * @returns {string} - 返回对应的 Cookie 值,如果不存在则返回空字符串。\n */\nexport function cookieGet(name: string) {\n const cookies = document.cookie.split(';');\n\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n\n if (cookie.startsWith(`${name}=`)) {\n return decodeURIComponent(cookie.slice(name.length + 1));\n }\n }\n\n return '';\n}\n\n/**\n * 设置 Cookie。\n * @param {string} name - Cookie 的名称。\n * @param {string} value - Cookie 的值。\n * @param {CookieOptions} [options] - 可选的 Cookie 配置项。\n */\nexport type CookieOptions = {\n /**\n * Cookie 的过期时间,可以是日期字符串、时间戳或 `Date` 对象。\n */\n expires?: TDateValue;\n\n /**\n * Cookie 的路径,默认为当前路径。\n */\n path?: string;\n\n /**\n * Cookie 的域名,默认为当前域名。\n */\n domain?: string;\n\n /**\n * 是否启用安全传输(HTTPS)。\n */\n secure?: boolean;\n\n /**\n * SameSite 属性,可选值为 `'strict'`、`'lax'` 或 `'none'`。\n */\n sameSite?: 'strict' | 'lax' | 'none';\n\n /**\n * 是否启用 HttpOnly 标志,防止 JavaScript 访问。\n */\n httpOnly?: boolean;\n\n /**\n * Cookie 的最大存活时间(秒)。\n */\n maxAge?: number;\n};\n\n/**\n * 设置 Cookie。\n * @param {string} name - Cookie 的名称。\n * @param {string} value - Cookie 的值。\n * @param {CookieOptions} [options] - 可选的 Cookie 配置项。\n */\nexport function cookieSet(name: string, value: string, options?: CookieOptions) {\n const { expires, maxAge, path, domain, httpOnly, sameSite, secure } = options || {};\n let cookie = `${name}=${encodeURIComponent(value)}`;\n\n const expiresAt = expires ? dateParse(expires) : maxAge ? dateParse(Date.now() + maxAge) : null;\n const metas: [string, string][] = [];\n\n if (expiresAt) {\n metas.push(['expires', expiresAt.toISOString()]);\n }\n\n if (path) {\n metas.push(['path', path]);\n }\n\n if (domain) {\n metas.push(['domain', domain]);\n }\n\n if (httpOnly) {\n metas.push(['httpOnly', 'true']);\n }\n\n if (sameSite) {\n metas.push(['sameSite', sameSite]);\n }\n\n if (secure) {\n metas.push(['secure', 'true']);\n }\n\n for (const [key, value] of metas) {\n cookie += `; ${key}=${value}`;\n }\n\n document.cookie = cookie;\n}\n\n/**\n * 删除指定名称的 Cookie。\n * @param {string} name - 要删除的 Cookie 名称。\n */\nexport function cookieDel(name: string) {\n cookieSet(name, '', {\n expires: 0,\n });\n}\n"],"names":["dateParse","value"],"mappings":";;;AAQO,SAAS,UAAU,MAAc;AACtC,QAAM,UAAU,SAAS,OAAO,MAAM,GAAG;AAEzC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,SAAS,QAAQ,CAAC,EAAE,KAAK;AAE/B,QAAI,OAAO,WAAW,GAAG,IAAI,GAAG,GAAG;AACjC,aAAO,mBAAmB,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC;AAAA,IAAA;AAAA,EACzD;AAGK,SAAA;AACT;AAmDgB,SAAA,UAAU,MAAc,OAAe,SAAyB;AACxE,QAAA,EAAE,SAAS,QAAQ,MAAM,QAAQ,UAAU,UAAU,WAAW,WAAW,CAAC;AAClF,MAAI,SAAS,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC;AAE3C,QAAA,YAAY,UAAUA,KAAA,UAAU,OAAO,IAAI,SAASA,KAAA,UAAU,KAAK,QAAQ,MAAM,IAAI;AAC3F,QAAM,QAA4B,CAAC;AAEnC,MAAI,WAAW;AACb,UAAM,KAAK,CAAC,WAAW,UAAU,YAAa,CAAA,CAAC;AAAA,EAAA;AAGjD,MAAI,MAAM;AACR,UAAM,KAAK,CAAC,QAAQ,IAAI,CAAC;AAAA,EAAA;AAG3B,MAAI,QAAQ;AACV,UAAM,KAAK,CAAC,UAAU,MAAM,CAAC;AAAA,EAAA;AAG/B,MAAI,UAAU;AACZ,UAAM,KAAK,CAAC,YAAY,MAAM,CAAC;AAAA,EAAA;AAGjC,MAAI,UAAU;AACZ,UAAM,KAAK,CAAC,YAAY,QAAQ,CAAC;AAAA,EAAA;AAGnC,MAAI,QAAQ;AACV,UAAM,KAAK,CAAC,UAAU,MAAM,CAAC;AAAA,EAAA;AAG/B,aAAW,CAAC,KAAKC,MAAK,KAAK,OAAO;AACtB,cAAA,KAAK,GAAG,IAAIA,MAAK;AAAA,EAAA;AAG7B,WAAS,SAAS;AACpB;AAMO,SAAS,UAAU,MAAc;AACtC,YAAU,MAAM,IAAI;AAAA,IAClB,SAAS;AAAA,EAAA,CACV;AACH;;;;"}
|
package/dist/cookie.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { TDateValue } from '@cloudcome/utils-core/date';
|
|
2
|
-
/**
|
|
3
|
-
* 获取指定名称的 Cookie 值。
|
|
4
|
-
* @param {string} name - Cookie 的名称。
|
|
5
|
-
* @returns {string} - 返回对应的 Cookie 值,如果不存在则返回空字符串。
|
|
6
|
-
*/
|
|
7
|
-
export declare function cookieGet(name: string): string;
|
|
8
|
-
/**
|
|
9
|
-
* 设置 Cookie。
|
|
10
|
-
* @param {string} name - Cookie 的名称。
|
|
11
|
-
* @param {string} value - Cookie 的值。
|
|
12
|
-
* @param {CookieOptions} [options] - 可选的 Cookie 配置项。
|
|
13
|
-
*/
|
|
14
|
-
export type CookieOptions = {
|
|
15
|
-
/**
|
|
16
|
-
* Cookie 的过期时间,可以是日期字符串、时间戳或 `Date` 对象。
|
|
17
|
-
*/
|
|
18
|
-
expires?: TDateValue;
|
|
19
|
-
/**
|
|
20
|
-
* Cookie 的路径,默认为当前路径。
|
|
21
|
-
*/
|
|
22
|
-
path?: string;
|
|
23
|
-
/**
|
|
24
|
-
* Cookie 的域名,默认为当前域名。
|
|
25
|
-
*/
|
|
26
|
-
domain?: string;
|
|
27
|
-
/**
|
|
28
|
-
* 是否启用安全传输(HTTPS)。
|
|
29
|
-
*/
|
|
30
|
-
secure?: boolean;
|
|
31
|
-
/**
|
|
32
|
-
* SameSite 属性,可选值为 `'strict'`、`'lax'` 或 `'none'`。
|
|
33
|
-
*/
|
|
34
|
-
sameSite?: 'strict' | 'lax' | 'none';
|
|
35
|
-
/**
|
|
36
|
-
* 是否启用 HttpOnly 标志,防止 JavaScript 访问。
|
|
37
|
-
*/
|
|
38
|
-
httpOnly?: boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Cookie 的最大存活时间(秒)。
|
|
41
|
-
*/
|
|
42
|
-
maxAge?: number;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* 设置 Cookie。
|
|
46
|
-
* @param {string} name - Cookie 的名称。
|
|
47
|
-
* @param {string} value - Cookie 的值。
|
|
48
|
-
* @param {CookieOptions} [options] - 可选的 Cookie 配置项。
|
|
49
|
-
*/
|
|
50
|
-
export declare function cookieSet(name: string, value: string, options?: CookieOptions): void;
|
|
51
|
-
/**
|
|
52
|
-
* 删除指定名称的 Cookie。
|
|
53
|
-
* @param {string} name - 要删除的 Cookie 名称。
|
|
54
|
-
*/
|
|
55
|
-
export declare function cookieDel(name: string): void;
|
package/dist/cookie.mjs
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { dateParse } from "@cloudcome/utils-core/date";
|
|
2
|
-
function cookieGet(name) {
|
|
3
|
-
const cookies = document.cookie.split(";");
|
|
4
|
-
for (let i = 0; i < cookies.length; i++) {
|
|
5
|
-
const cookie = cookies[i].trim();
|
|
6
|
-
if (cookie.startsWith(`${name}=`)) {
|
|
7
|
-
return decodeURIComponent(cookie.slice(name.length + 1));
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
return "";
|
|
11
|
-
}
|
|
12
|
-
function cookieSet(name, value, options) {
|
|
13
|
-
const { expires, maxAge, path, domain, httpOnly, sameSite, secure } = options || {};
|
|
14
|
-
let cookie = `${name}=${encodeURIComponent(value)}`;
|
|
15
|
-
const expiresAt = expires ? dateParse(expires) : maxAge ? dateParse(Date.now() + maxAge) : null;
|
|
16
|
-
const metas = [];
|
|
17
|
-
if (expiresAt) {
|
|
18
|
-
metas.push(["expires", expiresAt.toISOString()]);
|
|
19
|
-
}
|
|
20
|
-
if (path) {
|
|
21
|
-
metas.push(["path", path]);
|
|
22
|
-
}
|
|
23
|
-
if (domain) {
|
|
24
|
-
metas.push(["domain", domain]);
|
|
25
|
-
}
|
|
26
|
-
if (httpOnly) {
|
|
27
|
-
metas.push(["httpOnly", "true"]);
|
|
28
|
-
}
|
|
29
|
-
if (sameSite) {
|
|
30
|
-
metas.push(["sameSite", sameSite]);
|
|
31
|
-
}
|
|
32
|
-
if (secure) {
|
|
33
|
-
metas.push(["secure", "true"]);
|
|
34
|
-
}
|
|
35
|
-
for (const [key, value2] of metas) {
|
|
36
|
-
cookie += `; ${key}=${value2}`;
|
|
37
|
-
}
|
|
38
|
-
document.cookie = cookie;
|
|
39
|
-
}
|
|
40
|
-
function cookieDel(name) {
|
|
41
|
-
cookieSet(name, "", {
|
|
42
|
-
expires: 0
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
export {
|
|
46
|
-
cookieDel,
|
|
47
|
-
cookieGet,
|
|
48
|
-
cookieSet
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=cookie.mjs.map
|
package/dist/cookie.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cookie.mjs","sources":["../src/cookie.ts"],"sourcesContent":["import type { TDateValue } from '@cloudcome/utils-core/date';\nimport { dateParse } from '@cloudcome/utils-core/date';\n\n/**\n * 获取指定名称的 Cookie 值。\n * @param {string} name - Cookie 的名称。\n * @returns {string} - 返回对应的 Cookie 值,如果不存在则返回空字符串。\n */\nexport function cookieGet(name: string) {\n const cookies = document.cookie.split(';');\n\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n\n if (cookie.startsWith(`${name}=`)) {\n return decodeURIComponent(cookie.slice(name.length + 1));\n }\n }\n\n return '';\n}\n\n/**\n * 设置 Cookie。\n * @param {string} name - Cookie 的名称。\n * @param {string} value - Cookie 的值。\n * @param {CookieOptions} [options] - 可选的 Cookie 配置项。\n */\nexport type CookieOptions = {\n /**\n * Cookie 的过期时间,可以是日期字符串、时间戳或 `Date` 对象。\n */\n expires?: TDateValue;\n\n /**\n * Cookie 的路径,默认为当前路径。\n */\n path?: string;\n\n /**\n * Cookie 的域名,默认为当前域名。\n */\n domain?: string;\n\n /**\n * 是否启用安全传输(HTTPS)。\n */\n secure?: boolean;\n\n /**\n * SameSite 属性,可选值为 `'strict'`、`'lax'` 或 `'none'`。\n */\n sameSite?: 'strict' | 'lax' | 'none';\n\n /**\n * 是否启用 HttpOnly 标志,防止 JavaScript 访问。\n */\n httpOnly?: boolean;\n\n /**\n * Cookie 的最大存活时间(秒)。\n */\n maxAge?: number;\n};\n\n/**\n * 设置 Cookie。\n * @param {string} name - Cookie 的名称。\n * @param {string} value - Cookie 的值。\n * @param {CookieOptions} [options] - 可选的 Cookie 配置项。\n */\nexport function cookieSet(name: string, value: string, options?: CookieOptions) {\n const { expires, maxAge, path, domain, httpOnly, sameSite, secure } = options || {};\n let cookie = `${name}=${encodeURIComponent(value)}`;\n\n const expiresAt = expires ? dateParse(expires) : maxAge ? dateParse(Date.now() + maxAge) : null;\n const metas: [string, string][] = [];\n\n if (expiresAt) {\n metas.push(['expires', expiresAt.toISOString()]);\n }\n\n if (path) {\n metas.push(['path', path]);\n }\n\n if (domain) {\n metas.push(['domain', domain]);\n }\n\n if (httpOnly) {\n metas.push(['httpOnly', 'true']);\n }\n\n if (sameSite) {\n metas.push(['sameSite', sameSite]);\n }\n\n if (secure) {\n metas.push(['secure', 'true']);\n }\n\n for (const [key, value] of metas) {\n cookie += `; ${key}=${value}`;\n }\n\n document.cookie = cookie;\n}\n\n/**\n * 删除指定名称的 Cookie。\n * @param {string} name - 要删除的 Cookie 名称。\n */\nexport function cookieDel(name: string) {\n cookieSet(name, '', {\n expires: 0,\n });\n}\n"],"names":["value"],"mappings":";AAQO,SAAS,UAAU,MAAc;AACtC,QAAM,UAAU,SAAS,OAAO,MAAM,GAAG;AAEzC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,SAAS,QAAQ,CAAC,EAAE,KAAK;AAE/B,QAAI,OAAO,WAAW,GAAG,IAAI,GAAG,GAAG;AACjC,aAAO,mBAAmB,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC;AAAA,IAAA;AAAA,EACzD;AAGK,SAAA;AACT;AAmDgB,SAAA,UAAU,MAAc,OAAe,SAAyB;AACxE,QAAA,EAAE,SAAS,QAAQ,MAAM,QAAQ,UAAU,UAAU,WAAW,WAAW,CAAC;AAClF,MAAI,SAAS,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC;AAE3C,QAAA,YAAY,UAAU,UAAU,OAAO,IAAI,SAAS,UAAU,KAAK,QAAQ,MAAM,IAAI;AAC3F,QAAM,QAA4B,CAAC;AAEnC,MAAI,WAAW;AACb,UAAM,KAAK,CAAC,WAAW,UAAU,YAAa,CAAA,CAAC;AAAA,EAAA;AAGjD,MAAI,MAAM;AACR,UAAM,KAAK,CAAC,QAAQ,IAAI,CAAC;AAAA,EAAA;AAG3B,MAAI,QAAQ;AACV,UAAM,KAAK,CAAC,UAAU,MAAM,CAAC;AAAA,EAAA;AAG/B,MAAI,UAAU;AACZ,UAAM,KAAK,CAAC,YAAY,MAAM,CAAC;AAAA,EAAA;AAGjC,MAAI,UAAU;AACZ,UAAM,KAAK,CAAC,YAAY,QAAQ,CAAC;AAAA,EAAA;AAGnC,MAAI,QAAQ;AACV,UAAM,KAAK,CAAC,UAAU,MAAM,CAAC;AAAA,EAAA;AAG/B,aAAW,CAAC,KAAKA,MAAK,KAAK,OAAO;AACtB,cAAA,KAAK,GAAG,IAAIA,MAAK;AAAA,EAAA;AAG7B,WAAS,SAAS;AACpB;AAMO,SAAS,UAAU,MAAc;AACtC,YAAU,MAAM,IAAI;AAAA,IAClB,SAAS;AAAA,EAAA,CACV;AACH;"}
|
package/dist/dom.cjs
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const object = require("@cloudcome/utils-core/object");
|
|
4
|
-
function setStyle(el, style) {
|
|
5
|
-
if (typeof style === "string") {
|
|
6
|
-
el.style.cssText = style;
|
|
7
|
-
} else {
|
|
8
|
-
object.objectEach(style, (value, key) => {
|
|
9
|
-
el.style.setProperty(key, value);
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
function getStyle(el, style) {
|
|
14
|
-
return window.getComputedStyle(el).getPropertyValue(style);
|
|
15
|
-
}
|
|
16
|
-
exports.getStyle = getStyle;
|
|
17
|
-
exports.setStyle = setStyle;
|
|
18
|
-
//# sourceMappingURL=dom.cjs.map
|
package/dist/dom.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom.cjs","sources":["../src/dom.ts"],"sourcesContent":["import { objectEach } from '@cloudcome/utils-core/object';\n\n/**\n * 表示 CSS 样式声明的类型,仅包含可用的字符串或数字类型的属性\n * @typedef {Object} TStyle\n * @property {string | number} [K] - CSS 样式属性,K 为 CSSStyleDeclaration 的键名,且值为字符串或数字类型\n */\nexport type TStyle = {\n [K in keyof CSSStyleDeclaration as K extends number\n ? never\n : CSSStyleDeclaration[K] extends string | number\n ? K\n : never]: CSSStyleDeclaration[K];\n};\n\n/**\n * 设置元素的样式\n * @param {HTMLElement} el - 需要设置样式的 HTML 元素\n * @param {string | Partial<TStyle> | Record<string, string>} style - 样式字符串或样式对象\n * @example\n * // 设置 body 元素的颜色为红色,并设置一个自定义变量\n * setStyle(document.body, { color: 'red', '--var': 'value' });\n * @example\n * // 使用字符串设置样式\n * setStyle(document.body, 'color: red; --var: value;');\n */\nexport function setStyle(el: HTMLElement, style: string | Partial<TStyle> | Record<string, string>) {\n if (typeof style === 'string') {\n el.style.cssText = style;\n } else {\n objectEach(style, (value, key) => {\n el.style.setProperty(key as string, value as string | null);\n });\n }\n}\n\n/**\n * 获取元素的指定样式值\n * @param {HTMLElement} el - 需要获取样式的 HTML 元素\n * @param {keyof TStyle} style - 需要获取的样式属性\n * @returns {string} 返回指定样式的值\n * @example\n * // 获取 body 元素的颜色\n * const color = getStyle(document.body, 'color');\n */\nexport function getStyle(el: HTMLElement, style: keyof TStyle) {\n return window.getComputedStyle(el).getPropertyValue(style);\n}\n"],"names":["objectEach"],"mappings":";;;AA0BgB,SAAA,SAAS,IAAiB,OAA0D;AAC9F,MAAA,OAAO,UAAU,UAAU;AAC7B,OAAG,MAAM,UAAU;AAAA,EAAA,OACd;AACMA,WAAAA,WAAA,OAAO,CAAC,OAAO,QAAQ;AAC7B,SAAA,MAAM,YAAY,KAAe,KAAsB;AAAA,IAAA,CAC3D;AAAA,EAAA;AAEL;AAWgB,SAAA,SAAS,IAAiB,OAAqB;AAC7D,SAAO,OAAO,iBAAiB,EAAE,EAAE,iBAAiB,KAAK;AAC3D;;;"}
|
package/dist/dom.mjs
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { objectEach } from "@cloudcome/utils-core/object";
|
|
2
|
-
function setStyle(el, style) {
|
|
3
|
-
if (typeof style === "string") {
|
|
4
|
-
el.style.cssText = style;
|
|
5
|
-
} else {
|
|
6
|
-
objectEach(style, (value, key) => {
|
|
7
|
-
el.style.setProperty(key, value);
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
function getStyle(el, style) {
|
|
12
|
-
return window.getComputedStyle(el).getPropertyValue(style);
|
|
13
|
-
}
|
|
14
|
-
export {
|
|
15
|
-
getStyle,
|
|
16
|
-
setStyle
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=dom.mjs.map
|
package/dist/dom.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom.mjs","sources":["../src/dom.ts"],"sourcesContent":["import { objectEach } from '@cloudcome/utils-core/object';\n\n/**\n * 表示 CSS 样式声明的类型,仅包含可用的字符串或数字类型的属性\n * @typedef {Object} TStyle\n * @property {string | number} [K] - CSS 样式属性,K 为 CSSStyleDeclaration 的键名,且值为字符串或数字类型\n */\nexport type TStyle = {\n [K in keyof CSSStyleDeclaration as K extends number\n ? never\n : CSSStyleDeclaration[K] extends string | number\n ? K\n : never]: CSSStyleDeclaration[K];\n};\n\n/**\n * 设置元素的样式\n * @param {HTMLElement} el - 需要设置样式的 HTML 元素\n * @param {string | Partial<TStyle> | Record<string, string>} style - 样式字符串或样式对象\n * @example\n * // 设置 body 元素的颜色为红色,并设置一个自定义变量\n * setStyle(document.body, { color: 'red', '--var': 'value' });\n * @example\n * // 使用字符串设置样式\n * setStyle(document.body, 'color: red; --var: value;');\n */\nexport function setStyle(el: HTMLElement, style: string | Partial<TStyle> | Record<string, string>) {\n if (typeof style === 'string') {\n el.style.cssText = style;\n } else {\n objectEach(style, (value, key) => {\n el.style.setProperty(key as string, value as string | null);\n });\n }\n}\n\n/**\n * 获取元素的指定样式值\n * @param {HTMLElement} el - 需要获取样式的 HTML 元素\n * @param {keyof TStyle} style - 需要获取的样式属性\n * @returns {string} 返回指定样式的值\n * @example\n * // 获取 body 元素的颜色\n * const color = getStyle(document.body, 'color');\n */\nexport function getStyle(el: HTMLElement, style: keyof TStyle) {\n return window.getComputedStyle(el).getPropertyValue(style);\n}\n"],"names":[],"mappings":";AA0BgB,SAAA,SAAS,IAAiB,OAA0D;AAC9F,MAAA,OAAO,UAAU,UAAU;AAC7B,OAAG,MAAM,UAAU;AAAA,EAAA,OACd;AACM,eAAA,OAAO,CAAC,OAAO,QAAQ;AAC7B,SAAA,MAAM,YAAY,KAAe,KAAsB;AAAA,IAAA,CAC3D;AAAA,EAAA;AAEL;AAWgB,SAAA,SAAS,IAAiB,OAAqB;AAC7D,SAAO,OAAO,iBAAiB,EAAE,EAAE,iBAAiB,KAAK;AAC3D;"}
|
package/dist/download.cjs
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
function downloadURL(url, filename) {
|
|
4
|
-
const a = document.createElement("a");
|
|
5
|
-
a.href = url;
|
|
6
|
-
a.download = filename || "";
|
|
7
|
-
a.click();
|
|
8
|
-
}
|
|
9
|
-
function downloadBlob(blob, filename) {
|
|
10
|
-
const url = URL.createObjectURL(blob);
|
|
11
|
-
downloadURL(url, filename);
|
|
12
|
-
URL.revokeObjectURL(url);
|
|
13
|
-
}
|
|
14
|
-
exports.downloadBlob = downloadBlob;
|
|
15
|
-
exports.downloadURL = downloadURL;
|
|
16
|
-
//# sourceMappingURL=download.cjs.map
|
package/dist/download.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"download.cjs","sources":["../src/download.ts"],"sourcesContent":["/**\n * 下载 URL\n * @param {string} url\n * @param {string} filename\n */\nexport function downloadURL(url: string, filename?: string) {\n const a = document.createElement('a');\n a.href = url;\n a.download = filename || '';\n a.click();\n}\n\n/**\n * 下载 Blob 对象\n * @param blob Blob 对象\n * @param filename 文件名\n */\nexport function downloadBlob(blob: Blob, filename?: string) {\n const url = URL.createObjectURL(blob);\n downloadURL(url, filename);\n URL.revokeObjectURL(url);\n}\n"],"names":[],"mappings":";;AAKgB,SAAA,YAAY,KAAa,UAAmB;AACpD,QAAA,IAAI,SAAS,cAAc,GAAG;AACpC,IAAE,OAAO;AACT,IAAE,WAAW,YAAY;AACzB,IAAE,MAAM;AACV;AAOgB,SAAA,aAAa,MAAY,UAAmB;AACpD,QAAA,MAAM,IAAI,gBAAgB,IAAI;AACpC,cAAY,KAAK,QAAQ;AACzB,MAAI,gBAAgB,GAAG;AACzB;;;"}
|
package/dist/download.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 下载 URL
|
|
3
|
-
* @param {string} url
|
|
4
|
-
* @param {string} filename
|
|
5
|
-
*/
|
|
6
|
-
export declare function downloadURL(url: string, filename?: string): void;
|
|
7
|
-
/**
|
|
8
|
-
* 下载 Blob 对象
|
|
9
|
-
* @param blob Blob 对象
|
|
10
|
-
* @param filename 文件名
|
|
11
|
-
*/
|
|
12
|
-
export declare function downloadBlob(blob: Blob, filename?: string): void;
|
package/dist/download.mjs
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
function downloadURL(url, filename) {
|
|
2
|
-
const a = document.createElement("a");
|
|
3
|
-
a.href = url;
|
|
4
|
-
a.download = filename || "";
|
|
5
|
-
a.click();
|
|
6
|
-
}
|
|
7
|
-
function downloadBlob(blob, filename) {
|
|
8
|
-
const url = URL.createObjectURL(blob);
|
|
9
|
-
downloadURL(url, filename);
|
|
10
|
-
URL.revokeObjectURL(url);
|
|
11
|
-
}
|
|
12
|
-
export {
|
|
13
|
-
downloadBlob,
|
|
14
|
-
downloadURL
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=download.mjs.map
|
package/dist/download.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"download.mjs","sources":["../src/download.ts"],"sourcesContent":["/**\n * 下载 URL\n * @param {string} url\n * @param {string} filename\n */\nexport function downloadURL(url: string, filename?: string) {\n const a = document.createElement('a');\n a.href = url;\n a.download = filename || '';\n a.click();\n}\n\n/**\n * 下载 Blob 对象\n * @param blob Blob 对象\n * @param filename 文件名\n */\nexport function downloadBlob(blob: Blob, filename?: string) {\n const url = URL.createObjectURL(blob);\n downloadURL(url, filename);\n URL.revokeObjectURL(url);\n}\n"],"names":[],"mappings":"AAKgB,SAAA,YAAY,KAAa,UAAmB;AACpD,QAAA,IAAI,SAAS,cAAc,GAAG;AACpC,IAAE,OAAO;AACT,IAAE,WAAW,YAAY;AACzB,IAAE,MAAM;AACV;AAOgB,SAAA,aAAa,MAAY,UAAmB;AACpD,QAAA,MAAM,IAAI,gBAAgB,IAAI;AACpC,cAAY,KAAK,QAAQ;AACzB,MAAI,gBAAgB,GAAG;AACzB;"}
|
package/dist/image.cjs
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const dom = require("./dom.cjs");
|
|
4
|
-
async function imageLoad(url) {
|
|
5
|
-
return new Promise((resolve, reject) => {
|
|
6
|
-
const image = new Image();
|
|
7
|
-
const onFinish = (isError) => {
|
|
8
|
-
image.onload = image.onerror = null;
|
|
9
|
-
document.body.removeChild(image);
|
|
10
|
-
isError ? reject(new Error("图片加载失败")) : resolve(image);
|
|
11
|
-
};
|
|
12
|
-
image.onload = () => onFinish();
|
|
13
|
-
image.onerror = () => onFinish(true);
|
|
14
|
-
image.crossOrigin = "anonymous";
|
|
15
|
-
image.src = url;
|
|
16
|
-
dom.setStyle(image, {
|
|
17
|
-
visibility: "hidden",
|
|
18
|
-
position: "absolute",
|
|
19
|
-
top: "-99999%",
|
|
20
|
-
left: "-99999%",
|
|
21
|
-
maxWidth: "none",
|
|
22
|
-
maxHeight: "none",
|
|
23
|
-
border: "0",
|
|
24
|
-
width: "auto",
|
|
25
|
-
height: "auto",
|
|
26
|
-
margin: "0",
|
|
27
|
-
padding: "0",
|
|
28
|
-
transform: ""
|
|
29
|
-
});
|
|
30
|
-
document.body.appendChild(image);
|
|
31
|
-
if (image.complete && image.width > 0) onFinish();
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
exports.imageLoad = imageLoad;
|
|
35
|
-
//# sourceMappingURL=image.cjs.map
|
package/dist/image.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image.cjs","sources":["../src/image.ts"],"sourcesContent":["import { setStyle } from './dom';\n\n/**\n * 加载图片并返回一个包含 HTMLImageElement 的 Promise\n * @param {string} url - 图片的 URL 地址\n * @returns {Promise<HTMLImageElement>} 返回一个包含 HTMLImageElement 的 Promise\n * @example\n * const img = await imageLoad('https://example.com/image.png');\n * @throws {Error} 如果图片加载失败,抛出错误\n */\nexport async function imageLoad(url: string) {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n const onFinish = (isError?: boolean) => {\n image.onload = image.onerror = null;\n document.body.removeChild(image);\n isError ? reject(new Error('图片加载失败')) : resolve(image);\n };\n image.onload = () => onFinish();\n image.onerror = () => onFinish(true);\n image.crossOrigin = 'anonymous';\n image.src = url;\n\n // ios 拍照产生的图片,如果没有插入的 DOM 中获取到的图片尺寸是相反的\n setStyle(image, {\n visibility: 'hidden',\n position: 'absolute',\n top: '-99999%',\n left: '-99999%',\n maxWidth: 'none',\n maxHeight: 'none',\n border: '0',\n width: 'auto',\n height: 'auto',\n margin: '0',\n padding: '0',\n transform: '',\n });\n document.body.appendChild(image);\n\n if (image.complete && image.width > 0) onFinish();\n });\n}\n\n// 图片缩放函数\n"],"names":["setStyle"],"mappings":";;;AAUA,eAAsB,UAAU,KAAa;AAC3C,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AAClD,UAAA,QAAQ,IAAI,MAAM;AAClB,UAAA,WAAW,CAAC,YAAsB;AAChC,YAAA,SAAS,MAAM,UAAU;AACtB,eAAA,KAAK,YAAY,KAAK;AAC/B,gBAAU,OAAO,IAAI,MAAM,QAAQ,CAAC,IAAI,QAAQ,KAAK;AAAA,IACvD;AACM,UAAA,SAAS,MAAM,SAAS;AACxB,UAAA,UAAU,MAAM,SAAS,IAAI;AACnC,UAAM,cAAc;AACpB,UAAM,MAAM;AAGZA,QAAAA,SAAS,OAAO;AAAA,MACd,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,IAAA,CACZ;AACQ,aAAA,KAAK,YAAY,KAAK;AAE/B,QAAI,MAAM,YAAY,MAAM,QAAQ,EAAY,UAAA;AAAA,EAAA,CACjD;AACH;;"}
|
package/dist/image.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 加载图片并返回一个包含 HTMLImageElement 的 Promise
|
|
3
|
-
* @param {string} url - 图片的 URL 地址
|
|
4
|
-
* @returns {Promise<HTMLImageElement>} 返回一个包含 HTMLImageElement 的 Promise
|
|
5
|
-
* @example
|
|
6
|
-
* const img = await imageLoad('https://example.com/image.png');
|
|
7
|
-
* @throws {Error} 如果图片加载失败,抛出错误
|
|
8
|
-
*/
|
|
9
|
-
export declare function imageLoad(url: string): Promise<HTMLImageElement>;
|
package/dist/image.mjs
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { setStyle } from "./dom.mjs";
|
|
2
|
-
async function imageLoad(url) {
|
|
3
|
-
return new Promise((resolve, reject) => {
|
|
4
|
-
const image = new Image();
|
|
5
|
-
const onFinish = (isError) => {
|
|
6
|
-
image.onload = image.onerror = null;
|
|
7
|
-
document.body.removeChild(image);
|
|
8
|
-
isError ? reject(new Error("图片加载失败")) : resolve(image);
|
|
9
|
-
};
|
|
10
|
-
image.onload = () => onFinish();
|
|
11
|
-
image.onerror = () => onFinish(true);
|
|
12
|
-
image.crossOrigin = "anonymous";
|
|
13
|
-
image.src = url;
|
|
14
|
-
setStyle(image, {
|
|
15
|
-
visibility: "hidden",
|
|
16
|
-
position: "absolute",
|
|
17
|
-
top: "-99999%",
|
|
18
|
-
left: "-99999%",
|
|
19
|
-
maxWidth: "none",
|
|
20
|
-
maxHeight: "none",
|
|
21
|
-
border: "0",
|
|
22
|
-
width: "auto",
|
|
23
|
-
height: "auto",
|
|
24
|
-
margin: "0",
|
|
25
|
-
padding: "0",
|
|
26
|
-
transform: ""
|
|
27
|
-
});
|
|
28
|
-
document.body.appendChild(image);
|
|
29
|
-
if (image.complete && image.width > 0) onFinish();
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
export {
|
|
33
|
-
imageLoad
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=image.mjs.map
|
package/dist/image.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image.mjs","sources":["../src/image.ts"],"sourcesContent":["import { setStyle } from './dom';\n\n/**\n * 加载图片并返回一个包含 HTMLImageElement 的 Promise\n * @param {string} url - 图片的 URL 地址\n * @returns {Promise<HTMLImageElement>} 返回一个包含 HTMLImageElement 的 Promise\n * @example\n * const img = await imageLoad('https://example.com/image.png');\n * @throws {Error} 如果图片加载失败,抛出错误\n */\nexport async function imageLoad(url: string) {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n const onFinish = (isError?: boolean) => {\n image.onload = image.onerror = null;\n document.body.removeChild(image);\n isError ? reject(new Error('图片加载失败')) : resolve(image);\n };\n image.onload = () => onFinish();\n image.onerror = () => onFinish(true);\n image.crossOrigin = 'anonymous';\n image.src = url;\n\n // ios 拍照产生的图片,如果没有插入的 DOM 中获取到的图片尺寸是相反的\n setStyle(image, {\n visibility: 'hidden',\n position: 'absolute',\n top: '-99999%',\n left: '-99999%',\n maxWidth: 'none',\n maxHeight: 'none',\n border: '0',\n width: 'auto',\n height: 'auto',\n margin: '0',\n padding: '0',\n transform: '',\n });\n document.body.appendChild(image);\n\n if (image.complete && image.width > 0) onFinish();\n });\n}\n\n// 图片缩放函数\n"],"names":[],"mappings":";AAUA,eAAsB,UAAU,KAAa;AAC3C,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AAClD,UAAA,QAAQ,IAAI,MAAM;AAClB,UAAA,WAAW,CAAC,YAAsB;AAChC,YAAA,SAAS,MAAM,UAAU;AACtB,eAAA,KAAK,YAAY,KAAK;AAC/B,gBAAU,OAAO,IAAI,MAAM,QAAQ,CAAC,IAAI,QAAQ,KAAK;AAAA,IACvD;AACM,UAAA,SAAS,MAAM,SAAS;AACxB,UAAA,UAAU,MAAM,SAAS,IAAI;AACnC,UAAM,cAAc;AACpB,UAAM,MAAM;AAGZ,aAAS,OAAO;AAAA,MACd,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,IAAA,CACZ;AACQ,aAAA,KAAK,YAAY,KAAK;AAE/B,QAAI,MAAM,YAAY,MAAM,QAAQ,EAAY,UAAA;AAAA,EAAA,CACjD;AACH;"}
|
package/dist/index.cjs
DELETED
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["export const VERSION = PKG_VERSION;\n"],"names":[],"mappings":";;AAAO,MAAM,UAAU;;"}
|
package/dist/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const VERSION: string;
|
package/dist/index.mjs
DELETED
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["export const VERSION = PKG_VERSION;\n"],"names":[],"mappings":"AAAO,MAAM,UAAU;"}
|