@cloudcome/utils-browser 1.2.16 → 1.2.17

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.
Files changed (47) hide show
  1. package/README.md +1 -1
  2. package/dist/base64.cjs +21 -8
  3. package/dist/base64.cjs.map +1 -1
  4. package/dist/base64.mjs +22 -11
  5. package/dist/base64.mjs.map +1 -1
  6. package/dist/cache.cjs +91 -79
  7. package/dist/cache.cjs.map +1 -1
  8. package/dist/cache.d.ts +1 -1
  9. package/dist/cache.mjs +91 -82
  10. package/dist/cache.mjs.map +1 -1
  11. package/dist/canvas.cjs +64 -48
  12. package/dist/canvas.cjs.map +1 -1
  13. package/dist/canvas.mjs +64 -51
  14. package/dist/canvas.mjs.map +1 -1
  15. package/dist/clipboard.cjs +34 -15
  16. package/dist/clipboard.cjs.map +1 -1
  17. package/dist/clipboard.mjs +35 -17
  18. package/dist/clipboard.mjs.map +1 -1
  19. package/dist/cookie.cjs +42 -41
  20. package/dist/cookie.cjs.map +1 -1
  21. package/dist/cookie.mjs +42 -44
  22. package/dist/cookie.mjs.map +1 -1
  23. package/dist/dom.cjs +30 -11
  24. package/dist/dom.cjs.map +1 -1
  25. package/dist/dom.mjs +30 -13
  26. package/dist/dom.mjs.map +1 -1
  27. package/dist/download.cjs +24 -12
  28. package/dist/download.cjs.map +1 -1
  29. package/dist/download.mjs +25 -15
  30. package/dist/download.mjs.map +1 -1
  31. package/dist/image.cjs +44 -34
  32. package/dist/image.cjs.map +1 -1
  33. package/dist/image.mjs +44 -35
  34. package/dist/image.mjs.map +1 -1
  35. package/dist/index.cjs +8 -3
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.mjs +9 -5
  38. package/dist/index.mjs.map +1 -1
  39. package/dist/timer.cjs +40 -37
  40. package/dist/timer.cjs.map +1 -1
  41. package/dist/timer.mjs +40 -38
  42. package/dist/timer.mjs.map +1 -1
  43. package/dist/video.cjs +24 -14
  44. package/dist/video.cjs.map +1 -1
  45. package/dist/video.mjs +25 -16
  46. package/dist/video.mjs.map +1 -1
  47. package/package.json +46 -47
package/dist/canvas.cjs CHANGED
@@ -1,58 +1,74 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const object = require("@cloudcome/utils-core/object");
4
- const image = require("./image.cjs");
2
+ const require_image = require("./image.cjs");
3
+ let _cloudcome_utils_core_object = require("@cloudcome/utils-core/object");
4
+ //#region src/canvas.ts
5
+ /**
6
+ * 将 Canvas 转换为 Base64 编码的字符串
7
+ * @param {HTMLCanvasElement} canvas - 需要转换的 Canvas 元素
8
+ * @param {string} [type] - 图片格式,默认为 'image/png'
9
+ * @param {number} [quality] - 图片质量,范围 0 到 1,仅适用于 'image/jpeg' 或 'image/webp'
10
+ * @returns {string} Base64 编码的图片数据
11
+ * @example
12
+ * const base64 = canvasToBase64(canvas, 'image/jpeg', 0.8);
13
+ */
5
14
  function canvasToBase64(canvas, type, quality) {
6
- return canvas.toDataURL(type, quality);
15
+ return canvas.toDataURL(type, quality);
7
16
  }
17
+ /**
18
+ * 将 Canvas 转换为 Blob 对象
19
+ * @param {HTMLCanvasElement} canvas - 需要转换的 Canvas 元素
20
+ * @param {string} [type] - 图片格式,默认为 'image/png'
21
+ * @param {number} [quality] - 图片质量,范围 0 到 1,仅适用于 'image/jpeg' 或 'image/webp'
22
+ * @returns {Promise<Blob>} 返回一个包含 Blob 对象的 Promise
23
+ * @example
24
+ * const blob = await canvasToBlob(canvas, 'image/jpeg', 0.8);
25
+ */
8
26
  async function canvasToBlob(canvas, type, quality) {
9
- return new Promise((resolve, reject) => {
10
- canvas.toBlob(
11
- (blob) => {
12
- if (blob) {
13
- resolve(blob);
14
- } else {
15
- reject(new Error("canvas 导出二进制对象失败"));
16
- }
17
- },
18
- type,
19
- quality
20
- );
21
- });
27
+ return new Promise((resolve, reject) => {
28
+ canvas.toBlob((blob) => {
29
+ if (blob) resolve(blob);
30
+ else reject(/* @__PURE__ */ new Error("canvas 导出二进制对象失败"));
31
+ }, type, quality);
32
+ });
22
33
  }
34
+ /**
35
+ * 在 Canvas 上绘制图片
36
+ * @param {HTMLCanvasElement} canvas - 目标 Canvas 元素
37
+ * @param {string} url - 图片的 URL
38
+ * @param {CanvasDrawImageOptions} [options] - 绘制图片的配置选项
39
+ * @returns {Promise<void>} 返回一个 Promise,表示绘制完成
40
+ * @example
41
+ * await canvasDrawImage(canvas, 'https://example.com/image.png', {
42
+ * srcLeft: 10,
43
+ * srcTop: 10,
44
+ * srcWidth: 100,
45
+ * srcHeight: 100,
46
+ * destLeft: 0,
47
+ * destTop: 0,
48
+ * destWidth: 200,
49
+ * destHeight: 200
50
+ * });
51
+ */
23
52
  async function canvasDrawImage(canvas, url, options) {
24
- const ctx = canvas.getContext("2d");
25
- if (!ctx) throw new Error("canvas context is null");
26
- const img = await image.imageLoad(url);
27
- const defaults = {
28
- srcLeft: 0,
29
- srcTop: 0,
30
- srcWidth: img.width,
31
- srcHeight: img.height,
32
- destLeft: 0,
33
- destTop: 0,
34
- destWidth: canvas.width,
35
- destHeight: canvas.height
36
- };
37
- const { srcLeft, srcTop, srcWidth, srcHeight, destLeft, destTop, destWidth, destHeight } = object.objectDefaults(
38
- options || {},
39
- defaults
40
- );
41
- ctx.drawImage(
42
- img,
43
- // source
44
- srcLeft,
45
- srcTop,
46
- srcWidth,
47
- srcHeight,
48
- // dest
49
- destLeft,
50
- destTop,
51
- destWidth,
52
- destHeight
53
- );
53
+ const ctx = canvas.getContext("2d");
54
+ if (!ctx) throw new Error("canvas context is null");
55
+ const img = await require_image.imageLoad(url);
56
+ const defaults = {
57
+ srcLeft: 0,
58
+ srcTop: 0,
59
+ srcWidth: img.width,
60
+ srcHeight: img.height,
61
+ destLeft: 0,
62
+ destTop: 0,
63
+ destWidth: canvas.width,
64
+ destHeight: canvas.height
65
+ };
66
+ const { srcLeft, srcTop, srcWidth, srcHeight, destLeft, destTop, destWidth, destHeight } = (0, _cloudcome_utils_core_object.objectDefaults)(options || {}, defaults);
67
+ ctx.drawImage(img, srcLeft, srcTop, srcWidth, srcHeight, destLeft, destTop, destWidth, destHeight);
54
68
  }
69
+ //#endregion
55
70
  exports.canvasDrawImage = canvasDrawImage;
56
71
  exports.canvasToBase64 = canvasToBase64;
57
72
  exports.canvasToBlob = canvasToBlob;
58
- //# sourceMappingURL=canvas.cjs.map
73
+
74
+ //# sourceMappingURL=canvas.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.cjs","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":["imageLoad","objectDefaults"],"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,MAAMA,MAAA,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,IAAeC,OAAA;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;;;;"}
1
+ {"version":3,"file":"canvas.cjs","names":[],"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(\n canvas: HTMLCanvasElement,\n type?: string,\n quality?: number,\n) {\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(\n canvas: HTMLCanvasElement,\n type?: string,\n quality?: number,\n) {\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(\n canvas: HTMLCanvasElement,\n url: string,\n options?: CanvasDrawImageOptions,\n) {\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 {\n srcLeft,\n srcTop,\n srcWidth,\n srcHeight,\n destLeft,\n destTop,\n destWidth,\n destHeight,\n } = 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"],"mappings":";;;;;;;;;;;;;AAYA,SAAgB,eACd,QACA,MACA,SACA;CACA,OAAO,OAAO,UAAU,MAAM,QAAQ;;;;;;;;;;;AAYxC,eAAsB,aACpB,QACA,MACA,SACA;CACA,OAAO,IAAI,SAAe,SAAS,WAAW;EAC5C,OAAO,QACJ,SAAS;GACR,IAAI,MACF,QAAQ,KAAK;QAEb,uBAAO,IAAI,MAAM,mBAAmB,CAAC;KAGzC,MACA,QACD;GACD;;;;;;;;;;;;;;;;;;;;AA4EJ,eAAsB,gBACpB,QACA,KACA,SACA;CACA,MAAM,MAAM,OAAO,WAAW,KAAK;CACnC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,yBAAyB;CAEnD,MAAM,MAAM,MAAM,cAAA,UAAU,IAAI;CAChC,MAAM,WAAmC;EACvC,SAAS;EACT,QAAQ;EACR,UAAU,IAAI;EACd,WAAW,IAAI;EACf,UAAU;EACV,SAAS;EACT,WAAW,OAAO;EAClB,YAAY,OAAO;EACpB;CACD,MAAM,EACJ,SACA,QACA,UACA,WACA,UACA,SACA,WACA,gBAAA,GAAA,6BAAA,gBAEA,WAAW,EAAE,EACb,SACD;CACD,IAAI,UACF,KAEA,SACA,QACA,UACA,WAEA,UACA,SACA,WACA,WACD"}
package/dist/canvas.mjs CHANGED
@@ -1,58 +1,71 @@
1
- import { objectDefaults } from "@cloudcome/utils-core/object";
2
1
  import { imageLoad } from "./image.mjs";
2
+ import { objectDefaults } from "@cloudcome/utils-core/object";
3
+ //#region src/canvas.ts
4
+ /**
5
+ * 将 Canvas 转换为 Base64 编码的字符串
6
+ * @param {HTMLCanvasElement} canvas - 需要转换的 Canvas 元素
7
+ * @param {string} [type] - 图片格式,默认为 'image/png'
8
+ * @param {number} [quality] - 图片质量,范围 0 到 1,仅适用于 'image/jpeg' 或 'image/webp'
9
+ * @returns {string} Base64 编码的图片数据
10
+ * @example
11
+ * const base64 = canvasToBase64(canvas, 'image/jpeg', 0.8);
12
+ */
3
13
  function canvasToBase64(canvas, type, quality) {
4
- return canvas.toDataURL(type, quality);
14
+ return canvas.toDataURL(type, quality);
5
15
  }
16
+ /**
17
+ * 将 Canvas 转换为 Blob 对象
18
+ * @param {HTMLCanvasElement} canvas - 需要转换的 Canvas 元素
19
+ * @param {string} [type] - 图片格式,默认为 'image/png'
20
+ * @param {number} [quality] - 图片质量,范围 0 到 1,仅适用于 'image/jpeg' 或 'image/webp'
21
+ * @returns {Promise<Blob>} 返回一个包含 Blob 对象的 Promise
22
+ * @example
23
+ * const blob = await canvasToBlob(canvas, 'image/jpeg', 0.8);
24
+ */
6
25
  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
- });
26
+ return new Promise((resolve, reject) => {
27
+ canvas.toBlob((blob) => {
28
+ if (blob) resolve(blob);
29
+ else reject(/* @__PURE__ */ new Error("canvas 导出二进制对象失败"));
30
+ }, type, quality);
31
+ });
20
32
  }
33
+ /**
34
+ * 在 Canvas 上绘制图片
35
+ * @param {HTMLCanvasElement} canvas - 目标 Canvas 元素
36
+ * @param {string} url - 图片的 URL
37
+ * @param {CanvasDrawImageOptions} [options] - 绘制图片的配置选项
38
+ * @returns {Promise<void>} 返回一个 Promise,表示绘制完成
39
+ * @example
40
+ * await canvasDrawImage(canvas, 'https://example.com/image.png', {
41
+ * srcLeft: 10,
42
+ * srcTop: 10,
43
+ * srcWidth: 100,
44
+ * srcHeight: 100,
45
+ * destLeft: 0,
46
+ * destTop: 0,
47
+ * destWidth: 200,
48
+ * destHeight: 200
49
+ * });
50
+ */
21
51
  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
+ const ctx = canvas.getContext("2d");
53
+ if (!ctx) throw new Error("canvas context is null");
54
+ const img = await imageLoad(url);
55
+ const defaults = {
56
+ srcLeft: 0,
57
+ srcTop: 0,
58
+ srcWidth: img.width,
59
+ srcHeight: img.height,
60
+ destLeft: 0,
61
+ destTop: 0,
62
+ destWidth: canvas.width,
63
+ destHeight: canvas.height
64
+ };
65
+ const { srcLeft, srcTop, srcWidth, srcHeight, destLeft, destTop, destWidth, destHeight } = objectDefaults(options || {}, defaults);
66
+ ctx.drawImage(img, srcLeft, srcTop, srcWidth, srcHeight, destLeft, destTop, destWidth, destHeight);
52
67
  }
53
- export {
54
- canvasDrawImage,
55
- canvasToBase64,
56
- canvasToBlob
57
- };
58
- //# sourceMappingURL=canvas.mjs.map
68
+ //#endregion
69
+ export { canvasDrawImage, canvasToBase64, canvasToBlob };
70
+
71
+ //# sourceMappingURL=canvas.mjs.map
@@ -1 +1 @@
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;"}
1
+ {"version":3,"file":"canvas.mjs","names":[],"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(\n canvas: HTMLCanvasElement,\n type?: string,\n quality?: number,\n) {\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(\n canvas: HTMLCanvasElement,\n type?: string,\n quality?: number,\n) {\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(\n canvas: HTMLCanvasElement,\n url: string,\n options?: CanvasDrawImageOptions,\n) {\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 {\n srcLeft,\n srcTop,\n srcWidth,\n srcHeight,\n destLeft,\n destTop,\n destWidth,\n destHeight,\n } = 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"],"mappings":";;;;;;;;;;;;AAYA,SAAgB,eACd,QACA,MACA,SACA;CACA,OAAO,OAAO,UAAU,MAAM,QAAQ;;;;;;;;;;;AAYxC,eAAsB,aACpB,QACA,MACA,SACA;CACA,OAAO,IAAI,SAAe,SAAS,WAAW;EAC5C,OAAO,QACJ,SAAS;GACR,IAAI,MACF,QAAQ,KAAK;QAEb,uBAAO,IAAI,MAAM,mBAAmB,CAAC;KAGzC,MACA,QACD;GACD;;;;;;;;;;;;;;;;;;;;AA4EJ,eAAsB,gBACpB,QACA,KACA,SACA;CACA,MAAM,MAAM,OAAO,WAAW,KAAK;CACnC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,yBAAyB;CAEnD,MAAM,MAAM,MAAM,UAAU,IAAI;CAChC,MAAM,WAAmC;EACvC,SAAS;EACT,QAAQ;EACR,UAAU,IAAI;EACd,WAAW,IAAI;EACf,UAAU;EACV,SAAS;EACT,WAAW,OAAO;EAClB,YAAY,OAAO;EACpB;CACD,MAAM,EACJ,SACA,QACA,UACA,WACA,UACA,SACA,WACA,eACE,eACF,WAAW,EAAE,EACb,SACD;CACD,IAAI,UACF,KAEA,SACA,QACA,UACA,WAEA,UACA,SACA,WACA,WACD"}
@@ -1,19 +1,38 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/clipboard.ts
3
+ /**
4
+ * 将文本复制到剪贴板
5
+ * 该方法使用传统的 execCommand 方法实现文本复制
6
+ *
7
+ * @param text - 要复制到剪贴板的文本内容
8
+ * @returns void
9
+ *
10
+ * @example
11
+ * // 基本用法
12
+ * await copyText('Hello World');
13
+ *
14
+ * @example
15
+ * // 处理复制结果
16
+ * copyText('Hello World')
17
+ * .then(() => console.log('复制成功'))
18
+ * .catch(() => console.error('复制失败'));
19
+ */
3
20
  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
- try {
13
- document.execCommand("copy");
14
- } finally {
15
- document.body.removeChild(textArea);
16
- }
21
+ const textArea = document.createElement("textarea");
22
+ textArea.value = text;
23
+ textArea.style.position = "fixed";
24
+ textArea.style.left = "-9999px";
25
+ textArea.style.top = "-9999px";
26
+ document.body.appendChild(textArea);
27
+ textArea.focus();
28
+ textArea.select();
29
+ try {
30
+ document.execCommand("copy");
31
+ } finally {
32
+ document.body.removeChild(textArea);
33
+ }
17
34
  }
35
+ //#endregion
18
36
  exports.copyText = copyText;
19
- //# sourceMappingURL=clipboard.cjs.map
37
+
38
+ //# sourceMappingURL=clipboard.cjs.map
@@ -1 +1 @@
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 try {\n document.execCommand('copy');\n } finally {\n document.body.removeChild(textArea);\n }\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;AACZ,MAAA;AACF,aAAS,YAAY,MAAM;AAAA,EAAA,UAC3B;AACS,aAAA,KAAK,YAAY,QAAQ;AAAA,EAAA;AAEtC;;"}
1
+ {"version":3,"file":"clipboard.cjs","names":[],"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 try {\n document.execCommand('copy');\n } finally {\n document.body.removeChild(textArea);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiBA,SAAgB,SAAS,MAAc;CACrC,MAAM,WAAW,SAAS,cAAc,WAAW;CACnD,SAAS,QAAQ;CACjB,SAAS,MAAM,WAAW;CAC1B,SAAS,MAAM,OAAO;CACtB,SAAS,MAAM,MAAM;CACrB,SAAS,KAAK,YAAY,SAAS;CACnC,SAAS,OAAO;CAChB,SAAS,QAAQ;CACjB,IAAI;EACF,SAAS,YAAY,OAAO;WACpB;EACR,SAAS,KAAK,YAAY,SAAS"}
@@ -1,19 +1,37 @@
1
+ //#region src/clipboard.ts
2
+ /**
3
+ * 将文本复制到剪贴板
4
+ * 该方法使用传统的 execCommand 方法实现文本复制
5
+ *
6
+ * @param text - 要复制到剪贴板的文本内容
7
+ * @returns void
8
+ *
9
+ * @example
10
+ * // 基本用法
11
+ * await copyText('Hello World');
12
+ *
13
+ * @example
14
+ * // 处理复制结果
15
+ * copyText('Hello World')
16
+ * .then(() => console.log('复制成功'))
17
+ * .catch(() => console.error('复制失败'));
18
+ */
1
19
  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
- try {
11
- document.execCommand("copy");
12
- } finally {
13
- document.body.removeChild(textArea);
14
- }
20
+ const textArea = document.createElement("textarea");
21
+ textArea.value = text;
22
+ textArea.style.position = "fixed";
23
+ textArea.style.left = "-9999px";
24
+ textArea.style.top = "-9999px";
25
+ document.body.appendChild(textArea);
26
+ textArea.focus();
27
+ textArea.select();
28
+ try {
29
+ document.execCommand("copy");
30
+ } finally {
31
+ document.body.removeChild(textArea);
32
+ }
15
33
  }
16
- export {
17
- copyText
18
- };
19
- //# sourceMappingURL=clipboard.mjs.map
34
+ //#endregion
35
+ export { copyText };
36
+
37
+ //# sourceMappingURL=clipboard.mjs.map
@@ -1 +1 @@
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 try {\n document.execCommand('copy');\n } finally {\n document.body.removeChild(textArea);\n }\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;AACZ,MAAA;AACF,aAAS,YAAY,MAAM;AAAA,EAAA,UAC3B;AACS,aAAA,KAAK,YAAY,QAAQ;AAAA,EAAA;AAEtC;"}
1
+ {"version":3,"file":"clipboard.mjs","names":[],"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 try {\n document.execCommand('copy');\n } finally {\n document.body.removeChild(textArea);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,SAAgB,SAAS,MAAc;CACrC,MAAM,WAAW,SAAS,cAAc,WAAW;CACnD,SAAS,QAAQ;CACjB,SAAS,MAAM,WAAW;CAC1B,SAAS,MAAM,OAAO;CACtB,SAAS,MAAM,MAAM;CACrB,SAAS,KAAK,YAAY,SAAS;CACnC,SAAS,OAAO;CAChB,SAAS,QAAQ;CACjB,IAAI;EACF,SAAS,YAAY,OAAO;WACpB;EACR,SAAS,KAAK,YAAY,SAAS"}
package/dist/cookie.cjs CHANGED
@@ -1,51 +1,52 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const date = require("@cloudcome/utils-core/date");
2
+ let _cloudcome_utils_core_date = require("@cloudcome/utils-core/date");
3
+ //#region src/cookie.ts
4
+ /**
5
+ * 获取指定名称的 Cookie 值。
6
+ * @param {string} name - Cookie 的名称。
7
+ * @returns {string} - 返回对应的 Cookie 值,如果不存在则返回空字符串。
8
+ */
4
9
  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
- try {
10
- return decodeURIComponent(cookie.slice(name.length + 1));
11
- } catch {
12
- return cookie.slice(name.length + 1);
13
- }
14
- }
15
- }
16
- return "";
10
+ const cookies = document.cookie.split(";");
11
+ for (let i = 0; i < cookies.length; i++) {
12
+ const cookie = cookies[i].trim();
13
+ if (cookie.startsWith(`${name}=`)) try {
14
+ return decodeURIComponent(cookie.slice(name.length + 1));
15
+ } catch {
16
+ return cookie.slice(name.length + 1);
17
+ }
18
+ }
19
+ return "";
17
20
  }
21
+ /**
22
+ * 设置 Cookie。
23
+ * @param {string} name - Cookie 的名称。
24
+ * @param {string} value - Cookie 的值。
25
+ * @param {CookieOptions} [options] - 可选的 Cookie 配置项。
26
+ */
18
27
  function cookieSet(name, value, options) {
19
- const { expires, maxAge, path, domain, sameSite, secure } = options || {};
20
- let cookie = `${name}=${encodeURIComponent(value)}`;
21
- const expiresAt = expires ? date.dateParse(expires) : maxAge ? date.dateParse(Date.now() + maxAge * 1e3) : null;
22
- const metas = [];
23
- if (expiresAt) {
24
- metas.push(["expires", expiresAt.toISOString()]);
25
- }
26
- if (path) {
27
- metas.push(["path", path]);
28
- }
29
- if (domain) {
30
- metas.push(["domain", domain]);
31
- }
32
- if (sameSite) {
33
- metas.push(["sameSite", sameSite]);
34
- }
35
- if (secure) {
36
- metas.push(["secure", "true"]);
37
- }
38
- for (const [key, value2] of metas) {
39
- cookie += `; ${key}=${value2}`;
40
- }
41
- document.cookie = cookie;
28
+ const { expires, maxAge, path, domain, sameSite, secure } = options || {};
29
+ let cookie = `${name}=${encodeURIComponent(value)}`;
30
+ const expiresAt = expires ? (0, _cloudcome_utils_core_date.dateParse)(expires) : maxAge ? (0, _cloudcome_utils_core_date.dateParse)(Date.now() + maxAge * 1e3) : null;
31
+ const metas = [];
32
+ if (expiresAt) metas.push(["expires", expiresAt.toISOString()]);
33
+ if (path) metas.push(["path", path]);
34
+ if (domain) metas.push(["domain", domain]);
35
+ if (sameSite) metas.push(["sameSite", sameSite]);
36
+ if (secure) metas.push(["secure", "true"]);
37
+ for (const [key, value] of metas) cookie += `; ${key}=${value}`;
38
+ document.cookie = cookie;
42
39
  }
40
+ /**
41
+ * 删除指定名称的 Cookie。
42
+ * @param {string} name - 要删除的 Cookie 名称。
43
+ */
43
44
  function cookieDel(name) {
44
- cookieSet(name, "", {
45
- expires: 0
46
- });
45
+ cookieSet(name, "", { expires: 0 });
47
46
  }
47
+ //#endregion
48
48
  exports.cookieDel = cookieDel;
49
49
  exports.cookieGet = cookieGet;
50
50
  exports.cookieSet = cookieSet;
51
- //# sourceMappingURL=cookie.cjs.map
51
+
52
+ //# sourceMappingURL=cookie.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cookie.cjs","sources":["../src/cookie.ts"],"sourcesContent":["import type { DateValue } 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 try {\n return decodeURIComponent(cookie.slice(name.length + 1));\n } catch {\n return cookie.slice(name.length + 1);\n }\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?: DateValue;\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 * 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, sameSite, secure } = options || {};\n let cookie = `${name}=${encodeURIComponent(value)}`;\n\n const expiresAt = expires ? dateParse(expires) : maxAge ? dateParse(Date.now() + maxAge * 1000) : 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 (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;AAC7B,UAAA;AACF,eAAO,mBAAmB,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC;AAAA,MAAA,QACjD;AACN,eAAO,OAAO,MAAM,KAAK,SAAS,CAAC;AAAA,MAAA;AAAA,IACrC;AAAA,EACF;AAGK,SAAA;AACT;AA8CgB,SAAA,UAAU,MAAc,OAAe,SAAyB;AACxE,QAAA,EAAE,SAAS,QAAQ,MAAM,QAAQ,UAAU,WAAW,WAAW,CAAC;AACxE,MAAI,SAAS,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC;AAEjD,QAAM,YAAY,UAAUA,eAAU,OAAO,IAAI,SAASA,eAAU,KAAK,IAAI,IAAI,SAAS,GAAI,IAAI;AAClG,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,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;;;;"}
1
+ {"version":3,"file":"cookie.cjs","names":[],"sources":["../src/cookie.ts"],"sourcesContent":["import type { DateValue } 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 try {\n return decodeURIComponent(cookie.slice(name.length + 1));\n } catch {\n return cookie.slice(name.length + 1);\n }\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?: DateValue;\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 * 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(\n name: string,\n value: string,\n options?: CookieOptions,\n) {\n const { expires, maxAge, path, domain, sameSite, secure } = options || {};\n let cookie = `${name}=${encodeURIComponent(value)}`;\n\n const expiresAt = expires\n ? dateParse(expires)\n : maxAge\n ? dateParse(Date.now() + maxAge * 1000)\n : 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 (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 // biome-ignore lint/suspicious/noDocumentCookie: 暂时方案\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"],"mappings":";;;;;;;;AAQA,SAAgB,UAAU,MAAc;CACtC,MAAM,UAAU,SAAS,OAAO,MAAM,IAAI;CAE1C,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,MAAM,SAAS,QAAQ,GAAG,MAAM;EAEhC,IAAI,OAAO,WAAW,GAAG,KAAK,GAAG,EAC/B,IAAI;GACF,OAAO,mBAAmB,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;UAClD;GACN,OAAO,OAAO,MAAM,KAAK,SAAS,EAAE;;;CAK1C,OAAO;;;;;;;;AA+CT,SAAgB,UACd,MACA,OACA,SACA;CACA,MAAM,EAAE,SAAS,QAAQ,MAAM,QAAQ,UAAU,WAAW,WAAW,EAAE;CACzE,IAAI,SAAS,GAAG,KAAK,GAAG,mBAAmB,MAAM;CAEjD,MAAM,YAAY,WAAA,GAAA,2BAAA,WACJ,QAAQ,GAClB,UAAA,GAAA,2BAAA,WACY,KAAK,KAAK,GAAG,SAAS,IAAK,GACrC;CACN,MAAM,QAA4B,EAAE;CAEpC,IAAI,WACF,MAAM,KAAK,CAAC,WAAW,UAAU,aAAa,CAAC,CAAC;CAGlD,IAAI,MACF,MAAM,KAAK,CAAC,QAAQ,KAAK,CAAC;CAG5B,IAAI,QACF,MAAM,KAAK,CAAC,UAAU,OAAO,CAAC;CAGhC,IAAI,UACF,MAAM,KAAK,CAAC,YAAY,SAAS,CAAC;CAGpC,IAAI,QACF,MAAM,KAAK,CAAC,UAAU,OAAO,CAAC;CAGhC,KAAK,MAAM,CAAC,KAAK,UAAU,OACzB,UAAU,KAAK,IAAI,GAAG;CAIxB,SAAS,SAAS;;;;;;AAOpB,SAAgB,UAAU,MAAc;CACtC,UAAU,MAAM,IAAI,EAClB,SAAS,GACV,CAAC"}