ly-utils-lib 1.0.12 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1002 -685
  3. package/dist/array.cjs +237 -0
  4. package/dist/array.cjs.map +1 -0
  5. package/dist/array.d.cts +2 -0
  6. package/dist/array.d.ts +2 -0
  7. package/dist/array.js +150 -0
  8. package/dist/array.js.map +1 -0
  9. package/dist/crypto.cjs +193 -0
  10. package/dist/crypto.cjs.map +1 -0
  11. package/dist/crypto.d.cts +3 -0
  12. package/dist/crypto.d.ts +3 -0
  13. package/dist/crypto.js +144 -0
  14. package/dist/crypto.js.map +1 -0
  15. package/dist/date.cjs +563 -0
  16. package/dist/date.cjs.map +1 -0
  17. package/dist/date.d.cts +2 -0
  18. package/dist/date.d.ts +2 -0
  19. package/dist/date.js +451 -0
  20. package/dist/date.js.map +1 -0
  21. package/dist/excel.cjs +227 -0
  22. package/dist/excel.cjs.map +1 -0
  23. package/dist/excel.d.cts +2 -0
  24. package/dist/excel.d.ts +2 -0
  25. package/dist/excel.js +196 -0
  26. package/dist/excel.js.map +1 -0
  27. package/dist/index-B80SEVzM.d.cts +382 -0
  28. package/dist/index-B80SEVzM.d.ts +382 -0
  29. package/dist/index-Ba1rjTzj.d.cts +299 -0
  30. package/dist/index-Ba1rjTzj.d.ts +299 -0
  31. package/dist/index-Bg1ise7y.d.cts +253 -0
  32. package/dist/index-Bg1ise7y.d.ts +253 -0
  33. package/dist/index-BoqNpwNa.d.cts +203 -0
  34. package/dist/index-BoqNpwNa.d.ts +203 -0
  35. package/dist/index-C0qUnb9Y.d.cts +533 -0
  36. package/dist/index-C0qUnb9Y.d.ts +533 -0
  37. package/dist/index-Cq1GhjpY.d.cts +229 -0
  38. package/dist/index-Cq1GhjpY.d.ts +229 -0
  39. package/dist/index-Cy-mb5v_.d.cts +262 -0
  40. package/dist/index-Cy-mb5v_.d.ts +262 -0
  41. package/dist/index-D1f9Sym2.d.cts +148 -0
  42. package/dist/index-D1f9Sym2.d.ts +148 -0
  43. package/dist/index-Dan5oF-5.d.cts +213 -0
  44. package/dist/index-Dan5oF-5.d.ts +213 -0
  45. package/dist/index-XABfrs7z.d.cts +596 -0
  46. package/dist/index-XABfrs7z.d.ts +596 -0
  47. package/dist/index-YXWfKCK7.d.cts +109 -0
  48. package/dist/index-YXWfKCK7.d.ts +109 -0
  49. package/dist/index.cjs +3691 -0
  50. package/dist/index.cjs.map +1 -0
  51. package/dist/index.d.cts +22 -0
  52. package/dist/index.d.ts +22 -0
  53. package/dist/index.js +3629 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/map.cjs +839 -0
  56. package/dist/map.cjs.map +1 -0
  57. package/dist/map.d.cts +6 -0
  58. package/dist/map.d.ts +6 -0
  59. package/dist/map.js +811 -0
  60. package/dist/map.js.map +1 -0
  61. package/dist/object.cjs +316 -0
  62. package/dist/object.cjs.map +1 -0
  63. package/dist/object.d.cts +2 -0
  64. package/dist/object.d.ts +2 -0
  65. package/dist/object.js +247 -0
  66. package/dist/object.js.map +1 -0
  67. package/dist/pdf.cjs +197 -0
  68. package/dist/pdf.cjs.map +1 -0
  69. package/dist/pdf.d.cts +3 -0
  70. package/dist/pdf.d.ts +3 -0
  71. package/dist/pdf.js +173 -0
  72. package/dist/pdf.js.map +1 -0
  73. package/dist/storage.cjs +255 -0
  74. package/dist/storage.cjs.map +1 -0
  75. package/dist/storage.d.cts +1 -0
  76. package/dist/storage.d.ts +1 -0
  77. package/dist/storage.js +226 -0
  78. package/dist/storage.js.map +1 -0
  79. package/dist/string.cjs +232 -0
  80. package/dist/string.cjs.map +1 -0
  81. package/dist/string.d.cts +2 -0
  82. package/dist/string.d.ts +2 -0
  83. package/dist/string.js +170 -0
  84. package/dist/string.js.map +1 -0
  85. package/dist/utils.cjs +429 -0
  86. package/dist/utils.cjs.map +1 -0
  87. package/dist/utils.d.cts +2 -0
  88. package/dist/utils.d.ts +2 -0
  89. package/dist/utils.js +371 -0
  90. package/dist/utils.js.map +1 -0
  91. package/dist/websocket.cjs +338 -0
  92. package/dist/websocket.cjs.map +1 -0
  93. package/dist/websocket.d.cts +1 -0
  94. package/dist/websocket.d.ts +1 -0
  95. package/dist/websocket.js +330 -0
  96. package/dist/websocket.js.map +1 -0
  97. package/package.json +159 -33
  98. package/dist/ly-utils-lib.cjs.js +0 -115
  99. package/dist/ly-utils-lib.cjs.js.map +0 -1
  100. package/dist/ly-utils-lib.es.js +0 -58589
  101. package/dist/ly-utils-lib.es.js.map +0 -1
  102. package/dist/ly-utils-lib.umd.js +0 -115
  103. package/dist/ly-utils-lib.umd.js.map +0 -1
  104. package/dist/types/index.d.ts +0 -15
  105. package/dist/types/utils/esToolkit.d.ts +0 -2
  106. package/dist/types/utils/ol.d.ts +0 -175
  107. package/dist/types/utils/router.d.ts +0 -10
  108. package/dist/types/utils/storage.d.ts +0 -42
  109. package/dist/types/utils/time.d.ts +0 -66
  110. package/dist/types/utils/tool.d.ts +0 -80
  111. package/dist/vite.svg +0 -1
package/dist/pdf.js ADDED
@@ -0,0 +1,173 @@
1
+ import html2canvas from 'html2canvas';
2
+ export { default as html2canvas } from 'html2canvas';
3
+ import { jsPDF } from 'jspdf';
4
+ export { jsPDF } from 'jspdf';
5
+
6
+ // src/modules/pdf/index.ts
7
+ var captureToPDF = async (element, options = {}) => {
8
+ const {
9
+ filename = "download.pdf",
10
+ scale = 2,
11
+ useCORS = true,
12
+ backgroundColor = "#ffffff",
13
+ logging = false,
14
+ margin = 10
15
+ } = options;
16
+ const canvas = await html2canvas(element, {
17
+ scale,
18
+ useCORS,
19
+ backgroundColor,
20
+ logging
21
+ });
22
+ const imgData = canvas.toDataURL("image/png");
23
+ const imgWidth = canvas.width;
24
+ const imgHeight = canvas.height;
25
+ const pdfWidth = imgWidth / scale;
26
+ const pdfHeight = imgHeight / scale;
27
+ const pdf = new jsPDF({
28
+ orientation: pdfWidth > pdfHeight ? "l" : "p",
29
+ unit: "pt",
30
+ format: [pdfWidth + margin * 2, pdfHeight + margin * 2]
31
+ });
32
+ pdf.addImage(imgData, "PNG", margin, margin, pdfWidth, pdfHeight);
33
+ pdf.save(filename);
34
+ };
35
+ var captureToPDFWithPagination = async (element, options = {}) => {
36
+ const {
37
+ filename = "download.pdf",
38
+ scale = 2,
39
+ useCORS = true,
40
+ backgroundColor = "#ffffff",
41
+ logging = false,
42
+ margin = 10
43
+ } = options;
44
+ const canvas = await html2canvas(element, {
45
+ scale,
46
+ useCORS,
47
+ backgroundColor,
48
+ logging
49
+ });
50
+ const imgData = canvas.toDataURL("image/png");
51
+ const imgWidth = canvas.width;
52
+ const imgHeight = canvas.height;
53
+ const pdf = new jsPDF("p", "pt", "a4");
54
+ const pdfWidth = pdf.internal.pageSize.getWidth();
55
+ const pdfHeight = pdf.internal.pageSize.getHeight();
56
+ const imgWidthInPDF = pdfWidth - margin * 2;
57
+ const imgHeightInPDF = imgHeight / imgWidth * imgWidthInPDF;
58
+ let heightLeft = imgHeightInPDF;
59
+ let position = margin;
60
+ pdf.addImage(imgData, "PNG", margin, position, imgWidthInPDF, imgHeightInPDF);
61
+ heightLeft -= pdfHeight - margin * 2;
62
+ while (heightLeft > 0) {
63
+ position = heightLeft - imgHeightInPDF + margin;
64
+ pdf.addPage();
65
+ pdf.addImage(imgData, "PNG", margin, position, imgWidthInPDF, imgHeightInPDF);
66
+ heightLeft -= pdfHeight - margin * 2;
67
+ }
68
+ pdf.save(filename);
69
+ };
70
+ var captureToImage = async (element, options = {}) => {
71
+ const canvas = await html2canvas(element, {
72
+ scale: 2,
73
+ useCORS: true,
74
+ backgroundColor: "#ffffff",
75
+ logging: false,
76
+ ...options
77
+ });
78
+ return canvas.toDataURL("image/png");
79
+ };
80
+ var captureToImageDownload = async (element, filename = "screenshot.png", options = {}) => {
81
+ const dataUrl = await captureToImage(element, options);
82
+ const link = document.createElement("a");
83
+ link.href = dataUrl;
84
+ link.download = filename;
85
+ link.click();
86
+ };
87
+ var createPDF = (options = {}) => {
88
+ return new jsPDF(options);
89
+ };
90
+ var addTextToPDF = (pdf, text, x, y, options = {}) => {
91
+ const { maxWidth, align = "left", fontSize = 12, fontStyle = "normal" } = options;
92
+ pdf.setFontSize(fontSize);
93
+ pdf.setFont("helvetica", fontStyle);
94
+ pdf.text(text, x, y, { maxWidth, align });
95
+ };
96
+ var addImageToPDF = (pdf, imageData, x, y, width, height) => {
97
+ pdf.addImage(imageData, "PNG", x, y, width, height);
98
+ };
99
+ var addTableToPDF = (pdf, headers, data, options = {}) => {
100
+ const {
101
+ x = 10,
102
+ y = 10,
103
+ cellWidth = 50,
104
+ cellHeight = 20,
105
+ headerBackgroundColor = "#4472C4",
106
+ headerTextColor = "#ffffff",
107
+ textColor = "#000000",
108
+ fontSize = 10,
109
+ lineWidth = 0.1,
110
+ lineColor = [200, 200, 200]
111
+ } = options;
112
+ pdf.setFontSize(fontSize);
113
+ let currentY = y;
114
+ headers.forEach((header, index) => {
115
+ const cellX = x + index * cellWidth;
116
+ pdf.setFillColor(
117
+ parseInt(headerBackgroundColor.slice(1, 3), 16),
118
+ parseInt(headerBackgroundColor.slice(3, 5), 16),
119
+ parseInt(headerBackgroundColor.slice(5, 7), 16)
120
+ );
121
+ pdf.rect(cellX, currentY, cellWidth, cellHeight, "F");
122
+ pdf.setDrawColor(lineColor[0], lineColor[1], lineColor[2]);
123
+ pdf.setLineWidth(lineWidth);
124
+ pdf.rect(cellX, currentY, cellWidth, cellHeight, "S");
125
+ pdf.setTextColor(
126
+ parseInt(headerTextColor.slice(1, 3), 16),
127
+ parseInt(headerTextColor.slice(3, 5), 16),
128
+ parseInt(headerTextColor.slice(5, 7), 16)
129
+ );
130
+ pdf.text(header, cellX + cellWidth / 2, currentY + cellHeight / 2 + fontSize / 4, {
131
+ align: "center"
132
+ });
133
+ });
134
+ currentY += cellHeight;
135
+ pdf.setTextColor(
136
+ parseInt(textColor.slice(1, 3), 16),
137
+ parseInt(textColor.slice(3, 5), 16),
138
+ parseInt(textColor.slice(5, 7), 16)
139
+ );
140
+ data.forEach((row) => {
141
+ row.forEach((cell, index) => {
142
+ const cellX = x + index * cellWidth;
143
+ pdf.setDrawColor(lineColor[0], lineColor[1], lineColor[2]);
144
+ pdf.setLineWidth(lineWidth);
145
+ pdf.rect(cellX, currentY, cellWidth, cellHeight, "S");
146
+ pdf.text(cell, cellX + cellWidth / 2, currentY + cellHeight / 2 + fontSize / 4, {
147
+ align: "center"
148
+ });
149
+ });
150
+ currentY += cellHeight;
151
+ });
152
+ };
153
+ var addPage = (pdf) => {
154
+ pdf.addPage();
155
+ };
156
+ var savePDF = (pdf, filename = "download.pdf") => {
157
+ pdf.save(filename);
158
+ };
159
+ var pdfToDataURL = (pdf) => {
160
+ return pdf.output("dataurlstring");
161
+ };
162
+ var pdfToBlob = (pdf) => {
163
+ return pdf.output("blob");
164
+ };
165
+ var mergePDFs = (_pdfs) => {
166
+ return Promise.reject(
167
+ new Error("mergePDFs \u529F\u80FD\u9700\u8981\u4F7F\u7528 pdf-lib \u5E93\u5B9E\u73B0\u3002\u8BF7\u5B89\u88C5 pdf-lib \u5E76\u4F7F\u7528\u5176\u63D0\u4F9B\u7684\u5408\u5E76\u529F\u80FD\u3002")
168
+ );
169
+ };
170
+
171
+ export { addImageToPDF, addPage, addTableToPDF, addTextToPDF, captureToImage, captureToImageDownload, captureToPDF, captureToPDFWithPagination, createPDF, mergePDFs, pdfToBlob, pdfToDataURL, savePDF };
172
+ //# sourceMappingURL=pdf.js.map
173
+ //# sourceMappingURL=pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/pdf/index.ts"],"names":[],"mappings":"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","file":"pdf.js","sourcesContent":["/**\n * PDF 工具模块\n * 基于 html2canvas 和 jspdf 封装,提供常用的 PDF 处理功能\n */\n\nimport html2canvas, { type Options as Html2CanvasOptions } from 'html2canvas'\nimport { jsPDF } from 'jspdf'\n\nexport interface CaptureToPDFOptions {\n filename?: string\n scale?: number\n useCORS?: boolean\n backgroundColor?: string\n logging?: boolean\n pagebreak?: { mode?: string; before?: string; after?: string }\n margin?: number\n}\n\nexport interface PDFOptions {\n orientation?: 'p' | 'portrait' | 'l' | 'landscape'\n unit?: 'pt' | 'mm' | 'cm' | 'in'\n format?: 'a0' | 'a1' | 'a2' | 'a3' | 'a4' | 'legal' | 'letter' | [number, number]\n}\n\n/**\n * 将 DOM 元素转换为 PDF\n * @param element DOM 元素\n * @param options 选项\n */\nexport const captureToPDF = async (\n element: HTMLElement,\n options: CaptureToPDFOptions = {}\n): Promise<void> => {\n const {\n filename = 'download.pdf',\n scale = 2,\n useCORS = true,\n backgroundColor = '#ffffff',\n logging = false,\n margin = 10,\n } = options\n\n // 使用 html2canvas 将 DOM 转换为 canvas\n const canvas = await html2canvas(element, {\n scale,\n useCORS,\n backgroundColor,\n logging,\n })\n\n // 获取 canvas 的尺寸\n const imgData = canvas.toDataURL('image/png')\n const imgWidth = canvas.width\n const imgHeight = canvas.height\n\n // 计算 PDF 尺寸\n const pdfWidth = imgWidth / scale\n const pdfHeight = imgHeight / scale\n\n // 创建 PDF\n const pdf = new jsPDF({\n orientation: pdfWidth > pdfHeight ? 'l' : 'p',\n unit: 'pt',\n format: [pdfWidth + margin * 2, pdfHeight + margin * 2],\n })\n\n // 添加图片到 PDF\n pdf.addImage(imgData, 'PNG', margin, margin, pdfWidth, pdfHeight)\n pdf.save(filename)\n}\n\n/**\n * 将 DOM 元素转换为 PDF(分页)\n * @param element DOM 元素\n * @param options 选项\n */\nexport const captureToPDFWithPagination = async (\n element: HTMLElement,\n options: CaptureToPDFOptions = {}\n): Promise<void> => {\n const {\n filename = 'download.pdf',\n scale = 2,\n useCORS = true,\n backgroundColor = '#ffffff',\n logging = false,\n margin = 10,\n } = options\n\n // 使用 html2canvas 将 DOM 转换为 canvas\n const canvas = await html2canvas(element, {\n scale,\n useCORS,\n backgroundColor,\n logging,\n })\n\n // 获取 canvas 的尺寸\n const imgData = canvas.toDataURL('image/png')\n const imgWidth = canvas.width\n const imgHeight = canvas.height\n\n // 创建 PDF (A4)\n const pdf = new jsPDF('p', 'pt', 'a4')\n const pdfWidth = pdf.internal.pageSize.getWidth()\n const pdfHeight = pdf.internal.pageSize.getHeight()\n\n // 计算图片在 PDF 中的尺寸\n const imgWidthInPDF = pdfWidth - margin * 2\n const imgHeightInPDF = (imgHeight / imgWidth) * imgWidthInPDF\n\n let heightLeft = imgHeightInPDF\n let position = margin\n\n // 第一页\n pdf.addImage(imgData, 'PNG', margin, position, imgWidthInPDF, imgHeightInPDF)\n heightLeft -= pdfHeight - margin * 2\n\n // 分页\n while (heightLeft > 0) {\n position = heightLeft - imgHeightInPDF + margin\n pdf.addPage()\n pdf.addImage(imgData, 'PNG', margin, position, imgWidthInPDF, imgHeightInPDF)\n heightLeft -= pdfHeight - margin * 2\n }\n\n pdf.save(filename)\n}\n\n/**\n * 截取 DOM 元素为图片\n * @param element DOM 元素\n * @param options html2canvas 选项\n */\nexport const captureToImage = async (\n element: HTMLElement,\n options: Partial<Html2CanvasOptions> = {}\n): Promise<string> => {\n const canvas = await html2canvas(element, {\n scale: 2,\n useCORS: true,\n backgroundColor: '#ffffff',\n logging: false,\n ...options,\n })\n\n return canvas.toDataURL('image/png')\n}\n\n/**\n * 截取 DOM 元素并下载为图片\n * @param element DOM 元素\n * @param filename 文件名\n * @param options html2canvas 选项\n */\nexport const captureToImageDownload = async (\n element: HTMLElement,\n filename = 'screenshot.png',\n options: Partial<Html2CanvasOptions> = {}\n): Promise<void> => {\n const dataUrl = await captureToImage(element, options)\n\n const link = document.createElement('a')\n link.href = dataUrl\n link.download = filename\n link.click()\n}\n\n/**\n * 创建空白 PDF\n * @param options PDF 选项\n */\nexport const createPDF = (options: PDFOptions = {}): jsPDF => {\n return new jsPDF(options)\n}\n\n/**\n * 添加文本到 PDF\n * @param pdf PDF 实例\n * @param text 文本\n * @param x X 坐标\n * @param y Y 坐标\n * @param options 选项\n */\nexport const addTextToPDF = (\n pdf: jsPDF,\n text: string,\n x: number,\n y: number,\n options: {\n maxWidth?: number\n align?: 'left' | 'center' | 'right'\n fontSize?: number\n fontStyle?: 'normal' | 'bold' | 'italic' | 'bolditalic'\n } = {}\n): void => {\n const { maxWidth, align = 'left', fontSize = 12, fontStyle = 'normal' } = options\n\n pdf.setFontSize(fontSize)\n pdf.setFont('helvetica', fontStyle)\n pdf.text(text, x, y, { maxWidth, align })\n}\n\n/**\n * 添加图片到 PDF\n * @param pdf PDF 实例\n * @param imageData 图片数据(DataURL 或 URL)\n * @param x X 坐标\n * @param y Y 坐标\n * @param width 宽度\n * @param height 高度\n */\nexport const addImageToPDF = (\n pdf: jsPDF,\n imageData: string,\n x: number,\n y: number,\n width: number,\n height: number\n): void => {\n pdf.addImage(imageData, 'PNG', x, y, width, height)\n}\n\n/**\n * 添加表格到 PDF\n * @param pdf PDF 实例\n * @param headers 表头\n * @param data 数据\n * @param options 选项\n */\nexport const addTableToPDF = (\n pdf: jsPDF,\n headers: string[],\n data: string[][],\n options: {\n x?: number\n y?: number\n cellWidth?: number\n cellHeight?: number\n headerBackgroundColor?: string\n headerTextColor?: string\n textColor?: string\n fontSize?: number\n lineWidth?: number\n lineColor?: number[]\n } = {}\n): void => {\n const {\n x = 10,\n y = 10,\n cellWidth = 50,\n cellHeight = 20,\n headerBackgroundColor = '#4472C4',\n headerTextColor = '#ffffff',\n textColor = '#000000',\n fontSize = 10,\n lineWidth = 0.1,\n lineColor = [200, 200, 200],\n } = options\n\n pdf.setFontSize(fontSize)\n let currentY = y\n\n // 绘制表头\n headers.forEach((header, index) => {\n const cellX = x + index * cellWidth\n\n // 绘制背景\n pdf.setFillColor(\n parseInt(headerBackgroundColor.slice(1, 3), 16),\n parseInt(headerBackgroundColor.slice(3, 5), 16),\n parseInt(headerBackgroundColor.slice(5, 7), 16)\n )\n pdf.rect(cellX, currentY, cellWidth, cellHeight, 'F')\n\n // 绘制边框\n pdf.setDrawColor(lineColor[0], lineColor[1], lineColor[2])\n pdf.setLineWidth(lineWidth)\n pdf.rect(cellX, currentY, cellWidth, cellHeight, 'S')\n\n // 绘制文本\n pdf.setTextColor(\n parseInt(headerTextColor.slice(1, 3), 16),\n parseInt(headerTextColor.slice(3, 5), 16),\n parseInt(headerTextColor.slice(5, 7), 16)\n )\n pdf.text(header, cellX + cellWidth / 2, currentY + cellHeight / 2 + fontSize / 4, {\n align: 'center',\n })\n })\n\n currentY += cellHeight\n\n // 绘制数据\n pdf.setTextColor(\n parseInt(textColor.slice(1, 3), 16),\n parseInt(textColor.slice(3, 5), 16),\n parseInt(textColor.slice(5, 7), 16)\n )\n\n data.forEach(row => {\n row.forEach((cell, index) => {\n const cellX = x + index * cellWidth\n\n // 绘制边框\n pdf.setDrawColor(lineColor[0], lineColor[1], lineColor[2])\n pdf.setLineWidth(lineWidth)\n pdf.rect(cellX, currentY, cellWidth, cellHeight, 'S')\n\n // 绘制文本\n pdf.text(cell, cellX + cellWidth / 2, currentY + cellHeight / 2 + fontSize / 4, {\n align: 'center',\n })\n })\n currentY += cellHeight\n })\n}\n\n/**\n * 添加新页面\n * @param pdf PDF 实例\n */\nexport const addPage = (pdf: jsPDF): void => {\n pdf.addPage()\n}\n\n/**\n * 保存 PDF\n * @param pdf PDF 实例\n * @param filename 文件名\n */\nexport const savePDF = (pdf: jsPDF, filename = 'download.pdf'): void => {\n pdf.save(filename)\n}\n\n/**\n * PDF 转 DataURL\n * @param pdf PDF 实例\n */\nexport const pdfToDataURL = (pdf: jsPDF): string => {\n return pdf.output('dataurlstring')\n}\n\n/**\n * PDF 转 Blob\n * @param pdf PDF 实例\n */\nexport const pdfToBlob = (pdf: jsPDF): Blob => {\n return pdf.output('blob')\n}\n\n/**\n * 合并多个 PDF(需要使用 pdf-lib 库实现)\n * @param _pdfs PDF 实例数组\n */\nexport const mergePDFs = (_pdfs: jsPDF[]): Promise<jsPDF> => {\n return Promise.reject(\n new Error('mergePDFs 功能需要使用 pdf-lib 库实现。请安装 pdf-lib 并使用其提供的合并功能。')\n )\n}\n\n/**\n * 导出 jsPDF 和 html2canvas 原始对象,方便高级用法\n */\nexport { jsPDF, html2canvas }\n"]}
@@ -0,0 +1,255 @@
1
+ 'use strict';
2
+
3
+ var Cookies = require('js-cookie');
4
+
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var Cookies__default = /*#__PURE__*/_interopDefault(Cookies);
8
+
9
+ // src/modules/storage/index.ts
10
+ function safeParse(json) {
11
+ if (!json || json === "undefined" || json === "null") {
12
+ return void 0;
13
+ }
14
+ try {
15
+ return JSON.parse(json);
16
+ } catch {
17
+ return json;
18
+ }
19
+ }
20
+ function isStorageAvailable(storage) {
21
+ try {
22
+ const testKey = "__storage_test__";
23
+ storage.setItem(testKey, testKey);
24
+ storage.removeItem(testKey);
25
+ return true;
26
+ } catch {
27
+ return false;
28
+ }
29
+ }
30
+ function setLocal(key, value, options) {
31
+ if (!isStorageAvailable(window.localStorage)) {
32
+ console.warn("LocalStorage is not available");
33
+ return;
34
+ }
35
+ const data = options?.ttl ? {
36
+ value,
37
+ expires: Date.now() + options.ttl
38
+ } : value;
39
+ window.localStorage.setItem(key, JSON.stringify(data));
40
+ }
41
+ function getLocal(key) {
42
+ if (!isStorageAvailable(window.localStorage)) {
43
+ return void 0;
44
+ }
45
+ const json = window.localStorage.getItem(key);
46
+ if (!json) {
47
+ return void 0;
48
+ }
49
+ const data = safeParse(json);
50
+ if (data && typeof data === "object" && "expires" in data && "value" in data) {
51
+ if (data.expires && Date.now() > data.expires) {
52
+ removeLocal(key);
53
+ return void 0;
54
+ }
55
+ return data.value;
56
+ }
57
+ return data;
58
+ }
59
+ function removeLocal(key) {
60
+ if (isStorageAvailable(window.localStorage)) {
61
+ window.localStorage.removeItem(key);
62
+ }
63
+ }
64
+ function clearLocal() {
65
+ if (isStorageAvailable(window.localStorage)) {
66
+ window.localStorage.clear();
67
+ }
68
+ }
69
+ function getLocalKeys() {
70
+ if (!isStorageAvailable(window.localStorage)) {
71
+ return [];
72
+ }
73
+ return Object.keys(window.localStorage);
74
+ }
75
+ function getLocalSize() {
76
+ return getLocalKeys().length;
77
+ }
78
+ function setSession(key, value, options) {
79
+ if (!isStorageAvailable(window.sessionStorage)) {
80
+ console.warn("SessionStorage is not available");
81
+ return;
82
+ }
83
+ const data = options?.ttl ? {
84
+ value,
85
+ expires: Date.now() + options.ttl
86
+ } : value;
87
+ window.sessionStorage.setItem(key, JSON.stringify(data));
88
+ }
89
+ function getSession(key) {
90
+ if (!isStorageAvailable(window.sessionStorage)) {
91
+ return void 0;
92
+ }
93
+ const json = window.sessionStorage.getItem(key);
94
+ if (!json) {
95
+ return void 0;
96
+ }
97
+ const data = safeParse(json);
98
+ if (data && typeof data === "object" && "expires" in data && "value" in data) {
99
+ if (data.expires && Date.now() > data.expires) {
100
+ removeSession(key);
101
+ return void 0;
102
+ }
103
+ return data.value;
104
+ }
105
+ return data;
106
+ }
107
+ function removeSession(key) {
108
+ if (isStorageAvailable(window.sessionStorage)) {
109
+ window.sessionStorage.removeItem(key);
110
+ }
111
+ }
112
+ function clearSession() {
113
+ if (isStorageAvailable(window.sessionStorage)) {
114
+ window.sessionStorage.clear();
115
+ }
116
+ }
117
+ function getSessionKeys() {
118
+ if (!isStorageAvailable(window.sessionStorage)) {
119
+ return [];
120
+ }
121
+ return Object.keys(window.sessionStorage);
122
+ }
123
+ function getSessionSize() {
124
+ return getSessionKeys().length;
125
+ }
126
+ function setCookie(key, value, options) {
127
+ const cookieOptions = {};
128
+ if (options?.days) {
129
+ cookieOptions.expires = options.days;
130
+ } else if (options?.expires !== void 0) {
131
+ cookieOptions.expires = options.expires;
132
+ }
133
+ if (options?.path !== void 0) {
134
+ cookieOptions.path = options.path;
135
+ }
136
+ if (options?.domain !== void 0) {
137
+ cookieOptions.domain = options.domain;
138
+ }
139
+ if (options?.secure !== void 0) {
140
+ cookieOptions.secure = options.secure;
141
+ }
142
+ if (options?.sameSite !== void 0) {
143
+ cookieOptions.sameSite = options.sameSite;
144
+ }
145
+ Cookies__default.default.set(key, value, cookieOptions);
146
+ }
147
+ function getCookie(key) {
148
+ return Cookies__default.default.get(key);
149
+ }
150
+ function removeCookie(key, options) {
151
+ Cookies__default.default.remove(key, options);
152
+ }
153
+ function getAllCookies() {
154
+ return Cookies__default.default.get() || {};
155
+ }
156
+ function hasCookie(key) {
157
+ return Cookies__default.default.get(key) !== void 0;
158
+ }
159
+ function getCookieJSON(key) {
160
+ const value = Cookies__default.default.get(key);
161
+ if (!value) {
162
+ return void 0;
163
+ }
164
+ try {
165
+ return JSON.parse(value);
166
+ } catch {
167
+ return void 0;
168
+ }
169
+ }
170
+ function setCookieJSON(key, value, options) {
171
+ setCookie(key, JSON.stringify(value), options);
172
+ }
173
+ function getCookieSize() {
174
+ return Object.keys(getAllCookies()).length;
175
+ }
176
+ function setStorage(type, key, value, options) {
177
+ switch (type) {
178
+ case "local":
179
+ setLocal(key, value, options);
180
+ break;
181
+ case "session":
182
+ setSession(key, value, options);
183
+ break;
184
+ case "cookie":
185
+ setCookie(key, value, options);
186
+ break;
187
+ }
188
+ }
189
+ function getStorage(type, key) {
190
+ switch (type) {
191
+ case "local":
192
+ return getLocal(key);
193
+ case "session":
194
+ return getSession(key);
195
+ case "cookie":
196
+ return getCookie(key);
197
+ }
198
+ }
199
+ function removeStorage(type, key) {
200
+ switch (type) {
201
+ case "local":
202
+ removeLocal(key);
203
+ break;
204
+ case "session":
205
+ removeSession(key);
206
+ break;
207
+ case "cookie":
208
+ removeCookie(key);
209
+ break;
210
+ }
211
+ }
212
+ function clearStorage(type) {
213
+ switch (type) {
214
+ case "local":
215
+ clearLocal();
216
+ break;
217
+ case "session":
218
+ clearSession();
219
+ break;
220
+ case "cookie": {
221
+ const cookies = getAllCookies();
222
+ for (const key of Object.keys(cookies)) {
223
+ removeCookie(key);
224
+ }
225
+ break;
226
+ }
227
+ }
228
+ }
229
+
230
+ exports.clearLocal = clearLocal;
231
+ exports.clearSession = clearSession;
232
+ exports.clearStorage = clearStorage;
233
+ exports.getAllCookies = getAllCookies;
234
+ exports.getCookie = getCookie;
235
+ exports.getCookieJSON = getCookieJSON;
236
+ exports.getCookieSize = getCookieSize;
237
+ exports.getLocal = getLocal;
238
+ exports.getLocalKeys = getLocalKeys;
239
+ exports.getLocalSize = getLocalSize;
240
+ exports.getSession = getSession;
241
+ exports.getSessionKeys = getSessionKeys;
242
+ exports.getSessionSize = getSessionSize;
243
+ exports.getStorage = getStorage;
244
+ exports.hasCookie = hasCookie;
245
+ exports.removeCookie = removeCookie;
246
+ exports.removeLocal = removeLocal;
247
+ exports.removeSession = removeSession;
248
+ exports.removeStorage = removeStorage;
249
+ exports.setCookie = setCookie;
250
+ exports.setCookieJSON = setCookieJSON;
251
+ exports.setLocal = setLocal;
252
+ exports.setSession = setSession;
253
+ exports.setStorage = setStorage;
254
+ //# sourceMappingURL=storage.cjs.map
255
+ //# sourceMappingURL=storage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/storage/index.ts"],"names":["Cookies"],"mappings":"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","file":"storage.cjs","sourcesContent":["/**\n * Storage Module - 浏览器存储工具\n *\n * 提供统一的浏览器存储操作 API\n */\n\nimport Cookies from 'js-cookie'\n\n// ==================== 类型定义 ====================\n\n/**\n * 存储数据类型\n */\nexport type StorageValue = string | number | boolean | null | undefined | object | unknown[]\n\n/**\n * 存储选项\n */\nexport interface StorageOptions {\n /** 过期时间(毫秒),0 表示永不过期 */\n ttl?: number\n}\n\n/**\n * Cookie 选项\n */\nexport interface CookieOptions extends Cookies.CookieAttributes {\n /** 过期天数 */\n days?: number\n}\n\n// ==================== 工具函数 ====================\n\n/**\n * 安全解析 JSON\n */\nfunction safeParse<T = StorageValue>(json: string | null): T | undefined {\n if (!json || json === 'undefined' || json === 'null') {\n return undefined\n }\n try {\n return JSON.parse(json) as T\n } catch {\n return json as T\n }\n}\n\n/**\n * 检查存储是否可用\n */\nfunction isStorageAvailable(storage: Storage): boolean {\n try {\n const testKey = '__storage_test__'\n storage.setItem(testKey, testKey)\n storage.removeItem(testKey)\n return true\n } catch {\n return false\n }\n}\n\n// ==================== LocalStorage ====================\n\n/**\n * 设置永久缓存\n * @param key - 缓存名称\n * @param value - 缓存内容\n * @param options - 存储选项\n * @example\n * ```ts\n * setLocal('user', { name: 'Alice', age: 25 })\n * setLocal('token', 'abc123', { ttl: 3600000 }) // 1小时后过期\n * ```\n */\nexport function setLocal<T = StorageValue>(key: string, value: T, options?: StorageOptions): void {\n if (!isStorageAvailable(window.localStorage)) {\n console.warn('LocalStorage is not available')\n return\n }\n\n const data = options?.ttl\n ? {\n value,\n expires: Date.now() + options.ttl,\n }\n : value\n\n window.localStorage.setItem(key, JSON.stringify(data))\n}\n\n/**\n * 获取永久缓存\n * @param key - 缓存名称\n * @returns 缓存内容,不存在或已过期返回 undefined\n * @example\n * ```ts\n * const user = getLocal<{ name: string; age: number }>('user')\n * console.log(user?.name) // 'Alice'\n * ```\n */\nexport function getLocal<T = StorageValue>(key: string): T | undefined {\n if (!isStorageAvailable(window.localStorage)) {\n return undefined\n }\n\n const json = window.localStorage.getItem(key)\n if (!json) {\n return undefined\n }\n\n const data = safeParse<{ value: T; expires?: number }>(json)\n\n // 检查是否有过期时间\n if (data && typeof data === 'object' && 'expires' in data && 'value' in data) {\n if (data.expires && Date.now() > data.expires) {\n removeLocal(key)\n return undefined\n }\n return data.value\n }\n\n return data as T\n}\n\n/**\n * 移除永久缓存\n * @param key - 缓存名称\n * @example\n * ```ts\n * removeLocal('user')\n * ```\n */\nexport function removeLocal(key: string): void {\n if (isStorageAvailable(window.localStorage)) {\n window.localStorage.removeItem(key)\n }\n}\n\n/**\n * 移除全部永久缓存\n * @example\n * ```ts\n * clearLocal()\n * ```\n */\nexport function clearLocal(): void {\n if (isStorageAvailable(window.localStorage)) {\n window.localStorage.clear()\n }\n}\n\n/**\n * 获取所有 localStorage 的键\n * @returns 键数组\n */\nexport function getLocalKeys(): string[] {\n if (!isStorageAvailable(window.localStorage)) {\n return []\n }\n return Object.keys(window.localStorage)\n}\n\n/**\n * 获取 localStorage 中键的数量\n * @returns 键的数量\n */\nexport function getLocalSize(): number {\n return getLocalKeys().length\n}\n\n// ==================== SessionStorage ====================\n\n/**\n * 设置临时缓存\n * @param key - 缓存名称\n * @param value - 缓存内容\n * @param options - 存储选项\n * @example\n * ```ts\n * setSession('temp', { data: [1, 2, 3] })\n * setSession('session', 'abc123', { ttl: 60000 }) // 1分钟后过期\n * ```\n */\nexport function setSession<T = StorageValue>(\n key: string,\n value: T,\n options?: StorageOptions\n): void {\n if (!isStorageAvailable(window.sessionStorage)) {\n console.warn('SessionStorage is not available')\n return\n }\n\n const data = options?.ttl\n ? {\n value,\n expires: Date.now() + options.ttl,\n }\n : value\n\n window.sessionStorage.setItem(key, JSON.stringify(data))\n}\n\n/**\n * 获取临时缓存\n * @param key - 缓存名称\n * @returns 缓存内容,不存在或已过期返回 undefined\n * @example\n * ```ts\n * const temp = getSession<{ data: number[] }>('temp')\n * console.log(temp?.data) // [1, 2, 3]\n * ```\n */\nexport function getSession<T = StorageValue>(key: string): T | undefined {\n if (!isStorageAvailable(window.sessionStorage)) {\n return undefined\n }\n\n const json = window.sessionStorage.getItem(key)\n if (!json) {\n return undefined\n }\n\n const data = safeParse<{ value: T; expires?: number }>(json)\n\n // 检查是否有过期时间\n if (data && typeof data === 'object' && 'expires' in data && 'value' in data) {\n if (data.expires && Date.now() > data.expires) {\n removeSession(key)\n return undefined\n }\n return data.value\n }\n\n return data as T\n}\n\n/**\n * 移除临时缓存\n * @param key - 缓存名称\n * @example\n * ```ts\n * removeSession('temp')\n * ```\n */\nexport function removeSession(key: string): void {\n if (isStorageAvailable(window.sessionStorage)) {\n window.sessionStorage.removeItem(key)\n }\n}\n\n/**\n * 移除全部临时缓存\n * @example\n * ```ts\n * clearSession()\n * ```\n */\nexport function clearSession(): void {\n if (isStorageAvailable(window.sessionStorage)) {\n window.sessionStorage.clear()\n }\n}\n\n/**\n * 获取所有 sessionStorage 的键\n * @returns 键数组\n */\nexport function getSessionKeys(): string[] {\n if (!isStorageAvailable(window.sessionStorage)) {\n return []\n }\n return Object.keys(window.sessionStorage)\n}\n\n/**\n * 获取 sessionStorage 中键的数量\n * @returns 键的数量\n */\nexport function getSessionSize(): number {\n return getSessionKeys().length\n}\n\n// ==================== Cookie ====================\n\n/**\n * 设置 Cookie\n * @param key - Cookie 名称\n * @param value - Cookie 值\n * @param options - Cookie 选项\n * @example\n * ```ts\n * setCookie('token', 'abc123', { days: 7 })\n * setCookie('user', { name: 'Alice' }, { secure: true }) // 自动序列化对象\n * ```\n */\nexport function setCookie(key: string, value: string | object, options?: CookieOptions): void {\n const cookieOptions: Cookies.CookieAttributes = {}\n\n // 处理过期时间\n if (options?.days) {\n cookieOptions.expires = options.days\n } else if (options?.expires !== undefined) {\n cookieOptions.expires = options.expires\n }\n\n // 复制其他选项\n if (options?.path !== undefined) {\n cookieOptions.path = options.path\n }\n if (options?.domain !== undefined) {\n cookieOptions.domain = options.domain\n }\n if (options?.secure !== undefined) {\n cookieOptions.secure = options.secure\n }\n if (options?.sameSite !== undefined) {\n cookieOptions.sameSite = options.sameSite\n }\n\n // 设置 cookie\n Cookies.set(key, value as any, cookieOptions)\n}\n\n/**\n * 获取 Cookie\n * @param key - Cookie 名称\n * @returns Cookie 值,不存在返回 undefined\n * @example\n * ```ts\n * const token = getCookie('token')\n * console.log(token) // 'abc123'\n * ```\n */\nexport function getCookie(key: string): string | undefined {\n return Cookies.get(key)\n}\n\n/**\n * 移除 Cookie\n * @param key - Cookie 名称\n * @param options - Cookie 选项(需要匹配设置时的 path 和 domain)\n * @example\n * ```ts\n * removeCookie('token')\n * removeCookie('user', { path: '/', domain: '.example.com' })\n * ```\n */\nexport function removeCookie(key: string, options?: CookieOptions): void {\n Cookies.remove(key, options)\n}\n\n/**\n * 获取所有 Cookie\n * @returns Cookie 对象\n * @example\n * ```ts\n * const cookies = getAllCookies()\n * console.log(cookies) // { token: 'abc123', user: '{\"name\":\"Alice\"}' }\n * ```\n */\nexport function getAllCookies(): Record<string, string> {\n return Cookies.get() || {}\n}\n\n/**\n * 检查 Cookie 是否存在\n * @param key - Cookie 名称\n * @returns 是否存在\n * @example\n * ```ts\n * if (hasCookie('token')) {\n * console.log('Token exists')\n * }\n * ```\n */\nexport function hasCookie(key: string): boolean {\n return Cookies.get(key) !== undefined\n}\n\n/**\n * 获取 JSON 格式的 Cookie\n * @param key - Cookie 名称\n * @returns 解析后的对象,不存在或解析失败返回 undefined\n * @example\n * ```ts\n * const user = getCookieJSON<{ name: string; age: number }>('user')\n * console.log(user?.name) // 'Alice'\n * ```\n */\nexport function getCookieJSON<T = object>(key: string): T | undefined {\n const value = Cookies.get(key)\n if (!value) {\n return undefined\n }\n try {\n return JSON.parse(value) as T\n } catch {\n return undefined\n }\n}\n\n/**\n * 设置 JSON 格式的 Cookie(自动序列化)\n * @param key - Cookie 名称\n * @param value - 对象值\n * @param options - Cookie 选项\n * @example\n * ```ts\n * setCookieJSON('user', { name: 'Alice', age: 25 }, { days: 7 })\n * ```\n */\nexport function setCookieJSON<T = object>(key: string, value: T, options?: CookieOptions): void {\n setCookie(key, JSON.stringify(value), options)\n}\n\n/**\n * 获取所有 Cookie 的数量\n * @returns Cookie 数量\n * @example\n * ```ts\n * console.log(getCookieSize()) // 3\n * ```\n */\nexport function getCookieSize(): number {\n return Object.keys(getAllCookies()).length\n}\n\n// ==================== 统一接口 ====================\n\n/**\n * 存储类型\n */\nexport type StorageType = 'local' | 'session' | 'cookie'\n\n/**\n * 统一设置存储\n * @param type - 存储类型\n * @param key - 键\n * @param value - 值\n * @param options - 选项\n * @example\n * ```ts\n * setStorage('local', 'user', { name: 'Alice' })\n * setStorage('cookie', 'token', 'abc123', { days: 7 })\n * ```\n */\nexport function setStorage<T extends string | object>(\n type: 'local',\n key: string,\n value: T,\n options?: StorageOptions\n): void\nexport function setStorage<T extends string | object>(\n type: 'session',\n key: string,\n value: T,\n options?: StorageOptions\n): void\nexport function setStorage<T extends string | object>(\n type: 'cookie',\n key: string,\n value: T,\n options?: CookieOptions\n): void\nexport function setStorage<T extends string | object>(\n type: StorageType,\n key: string,\n value: T,\n options?: StorageOptions | CookieOptions\n): void {\n switch (type) {\n case 'local':\n setLocal(key, value, options as StorageOptions)\n break\n case 'session':\n setSession(key, value, options as StorageOptions)\n break\n case 'cookie':\n setCookie(key, value, options as CookieOptions)\n break\n }\n}\n\n/**\n * 统一获取存储\n * @param type - 存储类型\n * @param key - 键\n * @returns 值\n * @example\n * ```ts\n * const user = getStorage<{ name: string }>('local', 'user')\n * const token = getStorage('cookie', 'token')\n * ```\n */\nexport function getStorage<T = StorageValue>(type: 'local', key: string): T | undefined\nexport function getStorage<T = StorageValue>(type: 'session', key: string): T | undefined\nexport function getStorage(type: 'cookie', key: string): string | undefined\nexport function getStorage<T = StorageValue>(\n type: StorageType,\n key: string\n): T | string | undefined {\n switch (type) {\n case 'local':\n return getLocal<T>(key)\n case 'session':\n return getSession<T>(key)\n case 'cookie':\n return getCookie(key)\n }\n}\n\n/**\n * 统一移除存储\n * @param type - 存储类型\n * @param key - 键\n * @example\n * ```ts\n * removeStorage('local', 'user')\n * removeStorage('cookie', 'token')\n * ```\n */\nexport function removeStorage(type: StorageType, key: string): void {\n switch (type) {\n case 'local':\n removeLocal(key)\n break\n case 'session':\n removeSession(key)\n break\n case 'cookie':\n removeCookie(key)\n break\n }\n}\n\n/**\n * 统一清除存储\n * @param type - 存储类型\n * @example\n * ```ts\n * clearStorage('local')\n * clearStorage('session')\n * clearStorage('cookie') // 注意:cookie 只能逐个删除\n * ```\n */\nexport function clearStorage(type: StorageType): void {\n switch (type) {\n case 'local':\n clearLocal()\n break\n case 'session':\n clearSession()\n break\n case 'cookie': {\n const cookies = getAllCookies()\n for (const key of Object.keys(cookies)) {\n removeCookie(key)\n }\n break\n }\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export { C as CookieOptions, S as StorageOptions, a as StorageType, b as StorageValue, c as clearLocal, d as clearSession, e as clearStorage, g as getAllCookies, f as getCookie, h as getCookieJSON, j as getCookieSize, k as getLocal, l as getLocalKeys, m as getLocalSize, n as getSession, o as getSessionKeys, p as getSessionSize, q as getStorage, r as hasCookie, s as removeCookie, t as removeLocal, u as removeSession, v as removeStorage, w as setCookie, x as setCookieJSON, y as setLocal, z as setSession, A as setStorage } from './index-Ba1rjTzj.cjs';
@@ -0,0 +1 @@
1
+ export { C as CookieOptions, S as StorageOptions, a as StorageType, b as StorageValue, c as clearLocal, d as clearSession, e as clearStorage, g as getAllCookies, f as getCookie, h as getCookieJSON, j as getCookieSize, k as getLocal, l as getLocalKeys, m as getLocalSize, n as getSession, o as getSessionKeys, p as getSessionSize, q as getStorage, r as hasCookie, s as removeCookie, t as removeLocal, u as removeSession, v as removeStorage, w as setCookie, x as setCookieJSON, y as setLocal, z as setSession, A as setStorage } from './index-Ba1rjTzj.js';