@qxs-bns/utils 0.0.9 → 0.0.11

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 (68) hide show
  1. package/README.md +65 -0
  2. package/es/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.mjs +2142 -0
  3. package/es/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.mjs.map +1 -0
  4. package/es/index.d.ts +7 -0
  5. package/es/index.mjs +26 -0
  6. package/es/index.mjs.map +1 -0
  7. package/es/src/argo-log.d.ts +32 -0
  8. package/es/src/argo-log.mjs +56 -0
  9. package/es/src/argo-log.mjs.map +1 -0
  10. package/es/src/device.d.ts +4 -0
  11. package/{src/device.js → es/src/device.mjs} +2 -1
  12. package/es/src/device.mjs.map +1 -0
  13. package/es/src/file-operations.d.ts +42 -0
  14. package/es/src/file-operations.mjs +79 -0
  15. package/es/src/file-operations.mjs.map +1 -0
  16. package/es/src/json.d.ts +16 -0
  17. package/es/src/json.mjs +37 -0
  18. package/es/src/json.mjs.map +1 -0
  19. package/es/src/storage.d.ts +31 -0
  20. package/{src/storage.js → es/src/storage.mjs} +9 -8
  21. package/es/src/storage.mjs.map +1 -0
  22. package/es/src/types.d.ts +20 -0
  23. package/es/src/types.mjs +30 -0
  24. package/es/src/types.mjs.map +1 -0
  25. package/es/src/use-api.d.ts +0 -0
  26. package/es/src/watermark.d.ts +47 -0
  27. package/es/src/watermark.mjs +147 -0
  28. package/es/src/watermark.mjs.map +1 -0
  29. package/lib/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.js +30 -0
  30. package/lib/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.js.map +1 -0
  31. package/lib/index.d.ts +7 -0
  32. package/lib/index.js +2 -0
  33. package/lib/index.js.map +1 -0
  34. package/lib/src/argo-log.d.ts +32 -0
  35. package/lib/src/argo-log.js +2 -0
  36. package/lib/src/argo-log.js.map +1 -0
  37. package/lib/src/device.d.ts +4 -0
  38. package/lib/src/device.js +2 -0
  39. package/lib/src/device.js.map +1 -0
  40. package/lib/src/file-operations.d.ts +42 -0
  41. package/lib/src/file-operations.js +2 -0
  42. package/lib/src/file-operations.js.map +1 -0
  43. package/lib/src/json.d.ts +16 -0
  44. package/lib/src/json.js +2 -0
  45. package/lib/src/json.js.map +1 -0
  46. package/lib/src/storage.d.ts +31 -0
  47. package/{src/storage.cjs → lib/src/storage.js} +2 -1
  48. package/lib/src/storage.js.map +1 -0
  49. package/lib/src/types.d.ts +20 -0
  50. package/lib/src/types.js +2 -0
  51. package/lib/src/types.js.map +1 -0
  52. package/lib/src/use-api.d.ts +0 -0
  53. package/lib/src/watermark.d.ts +47 -0
  54. package/lib/src/watermark.js +32 -0
  55. package/lib/src/watermark.js.map +1 -0
  56. package/package.json +22 -47
  57. package/index.cjs +0 -1
  58. package/index.js +0 -21
  59. package/src/device.cjs +0 -1
  60. package/src/file-operations.cjs +0 -1
  61. package/src/file-operations.js +0 -90
  62. package/src/media.cjs +0 -1
  63. package/src/media.js +0 -6
  64. package/src/types.cjs +0 -1
  65. package/src/types.js +0 -16
  66. package/src/watermark.cjs +0 -31
  67. package/src/watermark.js +0 -157
  68. package/types/index.d.ts +0 -140
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var l=(t,r,e)=>r in t?c(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e;var s=(t,r,e)=>l(t,typeof r!="symbol"?r+"":r,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.js"),o=class o{constructor(r){s(this,"track",(r,e)=>{try{if(!r){console.warn("[ArgoLog] track: name is required");return}n.default.track(r,e)}catch(i){console.warn("[ArgoLog] track failed:",i)}});s(this,"setProfile",r=>{try{if(!r){console.warn("[ArgoLog] setProfile: info is required");return}n.default.profileSet(r)}catch(e){console.warn("[ArgoLog] setProfile failed:",e)}});s(this,"setAlias",r=>{try{if(!r){console.warn("[ArgoLog] setAlias: code is required");return}n.default.alias(r)}catch(e){console.warn("[ArgoLog] setAlias failed:",e)}});try{const e=JSON.stringify(r),i=o.instances.get(e);if(i)return i;r||console.error("envConfig is required"),n.default.init(r),o.instances.set(e,this)}catch(e){return console.warn("[ArgoLog] Init failed:",e),this}return this}};s(o,"instances",new Map);let a=o;exports.ArgoLog=a;
2
+ //# sourceMappingURL=argo-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argo-log.js","sources":["../../../../packages/utils/src/argo-log.ts"],"sourcesContent":["import AnalysysAgent from 'ans-javascript-sdk'\n\n// 定义配置项的类型别名\ninterface EnvironmentConfig {\n encryptType?: number\n debugMode?: number\n appkey: string\n uploadURL: string\n autoProfile?: boolean\n autoTrack?: boolean\n}\n\n/**\n * ArgoLog 类 - 用于处理埋点统计的工具类\n *\n * @class ArgoLog\n * @description 基于 AnalysysAgent SDK 封装的埋点工具类,提供了埋点追踪、用户画像设置和用户别名设置等功能\n * @example\n * ```typescript\n * const argoLog = new ArgoLog({\n * appkey: 'your-app-key',\n * uploadURL: 'your-upload-url'\n * });\n *\n * // 追踪事件\n * argoLog.track('event_name', { key: 'value' });\n * ```\n */\nexport class ArgoLog {\n private static instances = new Map<string, ArgoLog>()\n\n constructor(envConfig: EnvironmentConfig) {\n try {\n const configKey = JSON.stringify(envConfig)\n const existingInstance = ArgoLog.instances.get(configKey)\n\n if (existingInstance) {\n return existingInstance\n }\n\n if (!envConfig) {\n console.error('envConfig is required')\n }\n\n AnalysysAgent.init(envConfig)\n ArgoLog.instances.set(configKey, this)\n }\n catch (error) {\n console.warn('[ArgoLog] Init failed:', error)\n // 仍然返回实例,让后续操作可以继续\n return this\n }\n\n return this\n }\n\n track = (name: string, opt?: Record<string, any>): void => {\n try {\n if (!name) {\n console.warn('[ArgoLog] track: name is required')\n return\n }\n AnalysysAgent.track(name, opt)\n }\n catch (error) {\n console.warn('[ArgoLog] track failed:', error)\n }\n }\n\n setProfile = (info: Record<string, any>): void => {\n try {\n if (!info) {\n console.warn('[ArgoLog] setProfile: info is required')\n return\n }\n AnalysysAgent.profileSet(info)\n }\n catch (error) {\n console.warn('[ArgoLog] setProfile failed:', error)\n }\n }\n\n setAlias = (code: string): void => {\n try {\n if (!code) {\n console.warn('[ArgoLog] setAlias: code is required')\n return\n }\n AnalysysAgent.alias(code)\n }\n catch (error) {\n console.warn('[ArgoLog] setAlias failed:', error)\n }\n }\n}\n"],"names":["_ArgoLog","envConfig","__publicField","name","opt","AnalysysAgent","error","info","code","configKey","existingInstance","ArgoLog"],"mappings":"0UA4BaA,EAAN,MAAMA,CAAQ,CAGnB,YAAYC,EAA8B,CAyB1CC,EAAA,aAAQ,CAACC,EAAcC,IAAoC,CACrD,GAAA,CACF,GAAI,CAACD,EAAM,CACT,QAAQ,KAAK,mCAAmC,EAChD,MAAA,CAEYE,UAAA,MAAMF,EAAMC,CAAG,QAExBE,EAAO,CACJ,QAAA,KAAK,0BAA2BA,CAAK,CAAA,CAEjD,GAEAJ,EAAA,kBAAcK,GAAoC,CAC5C,GAAA,CACF,GAAI,CAACA,EAAM,CACT,QAAQ,KAAK,wCAAwC,EACrD,MAAA,CAEFF,EAAA,QAAc,WAAWE,CAAI,QAExBD,EAAO,CACJ,QAAA,KAAK,+BAAgCA,CAAK,CAAA,CAEtD,GAEAJ,EAAA,gBAAYM,GAAuB,CAC7B,GAAA,CACF,GAAI,CAACA,EAAM,CACT,QAAQ,KAAK,sCAAsC,EACnD,MAAA,CAEFH,EAAA,QAAc,MAAMG,CAAI,QAEnBF,EAAO,CACJ,QAAA,KAAK,6BAA8BA,CAAK,CAAA,CAEpD,GA7DM,GAAA,CACI,MAAAG,EAAY,KAAK,UAAUR,CAAS,EACpCS,EAAmBV,EAAQ,UAAU,IAAIS,CAAS,EAExD,GAAIC,EACK,OAAAA,EAGJT,GACH,QAAQ,MAAM,uBAAuB,EAGvCI,EAAA,QAAc,KAAKJ,CAAS,EACpBD,EAAA,UAAU,IAAIS,EAAW,IAAI,QAEhCH,EAAO,CACJ,eAAA,KAAK,yBAA0BA,CAAK,EAErC,IAAA,CAGF,OAAA,IAAA,CAyCX,EAjEEJ,EADWF,EACI,YAAY,IAAI,KAD1B,IAAMW,EAANX"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 判断是移动端还是pc端
3
+ */
4
+ export declare function isMobile(): boolean | "确保在浏览器环境中";
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function o(){if(typeof navigator<"u"){const i=navigator.userAgent,n=["Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"];let t=!1;for(let e=0;e<n.length;e++)if(i.indexOf(n[e])>0){t=!0;break}return t}return"确保在浏览器环境中"}exports.isMobile=o;
2
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sources":["../../../../packages/utils/src/device.ts"],"sourcesContent":["/**\n * 判断是移动端还是pc端\n */\nexport function isMobile() {\n if (typeof navigator !== 'undefined') {\n const userAgentInfo = navigator.userAgent\n const Agents = ['Android', 'iPhone',\n 'SymbianOS', 'Windows Phone',\n 'iPad', 'iPod']\n let flag = false\n for (let v = 0; v < Agents.length; v++) {\n if (userAgentInfo.indexOf(Agents[v]) > 0) {\n flag = true\n break\n }\n }\n return flag\n }\n return '确保在浏览器环境中'\n}\n"],"names":["isMobile","userAgentInfo","Agents","flag","v"],"mappings":"gFAGO,SAASA,GAAW,CACrB,GAAA,OAAO,UAAc,IAAa,CACpC,MAAMC,EAAgB,UAAU,UAC1BC,EAAS,CAAC,UAAW,SACzB,YAAa,gBACb,OAAQ,MAAM,EAChB,IAAIC,EAAO,GACX,QAASC,EAAI,EAAGA,EAAIF,EAAO,OAAQE,IACjC,GAAIH,EAAc,QAAQC,EAAOE,CAAC,CAAC,EAAI,EAAG,CACjCD,EAAA,GACP,KAAA,CAGG,OAAAA,CAAA,CAEF,MAAA,WACT"}
@@ -0,0 +1,42 @@
1
+ declare global {
2
+ interface Window {
3
+ AliyunUpload: any;
4
+ OSS: any;
5
+ }
6
+ }
7
+ export interface UploadInfo {
8
+ file: File;
9
+ videoId?: string;
10
+ }
11
+ interface VideoUploadOptions {
12
+ onUploadFailed?: (uploadInfo: any, code: string, message: string) => void;
13
+ onUploadSucceed?: (uploadInfo: any) => void;
14
+ onUploadProgress?: (uploadInfo: UploadInfo, totalSize: number, percent: number) => void;
15
+ onUploadTokenExpired?: (response: any) => void;
16
+ onUploadstarted?: (uploadInfo: UploadInfo) => Promise<{
17
+ uploadAuth: string;
18
+ uploadAddress: string;
19
+ videoId: string;
20
+ }>;
21
+ }
22
+ interface VideoUploadResult {
23
+ videoId: string;
24
+ uploadInfo: any;
25
+ }
26
+ export interface IVideoUploader {
27
+ uploader: any;
28
+ upload: (file: File) => Promise<VideoUploadResult>;
29
+ }
30
+ /**
31
+ * 创建阿里云视频上传器实例
32
+ * @param options - 上传配置选项,包含各种回调函数
33
+ * @returns 返回一个包含上传器实例和上传方法的对象
34
+ */
35
+ export declare function createVideoUploader(options: VideoUploadOptions): Promise<IVideoUploader>;
36
+ /**
37
+ * 下载文件,创建一个隐藏的链接元素,设置下载属性并触发点击事件,然后移除该链接元素
38
+ * @param url - 文件的URL
39
+ * @param fileName - 文件的名称
40
+ */
41
+ export declare function downloadFile(url: string, fileName: string): void;
42
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});async function c(r){return new Promise((d,o)=>{try{const e=document.createElement("script");e.src=r,e.onload=()=>{d()},e.onerror=()=>{o(new Error(`Failed to load script from ${r}`))},document.head.appendChild(e)}catch(e){console.error("loadScript error:",e),o(e)}})}async function s(){try{if(await c("https://gosspublic.alicdn.com/aliyun-oss-sdk.min.js"),await c("https://cdnfile.yaomaitong.cn/cdn/js/aliyun-upload-sdk1.3.1.min.js"),!window.AliyunUpload)throw new Error("SDK 加载成功但未找到 AliyunUpload 对象")}catch(r){throw console.error("无法加载阿里云上传SDK:",r),r}}async function u(r){if(typeof window>"u")throw new TypeError("VideoUploader 只能在浏览器环境中使用");window.AliyunUpload||await s();let d=null,o=null;const e=new window.AliyunUpload.Vod({onUploadProgress:r.onUploadProgress,onUploadTokenExpired:r.onUploadTokenExpired||(()=>{}),onUploadstarted:async a=>{var l;try{const{uploadAuth:n,uploadAddress:t,videoId:i}=await((l=r.onUploadstarted)==null?void 0:l.call(r,a))||{};n&&t&&i&&e.setUploadAuthAndAddress(a,n,t,i)}catch(n){throw console.error("onUploadstarted error: ",n),n}},onUploadSucceed:a=>{d==null||d(a)},onUploadFailed:(a,l,n)=>{console.log("info: ",a),o==null||o(new Error(`${n} ${l}`))}});return{uploader:e,upload:async a=>new Promise((l,n)=>{d=l,o=n;const t=JSON.stringify({Vod:{UserData:{IsShowWaterMark:"false",Priority:"7"}}});e.addFile(a,null,null,null,t),e.startUpload()})}}function p(r,d){const o=document.createElement("a");o.download=d,o.style.display="none",o.href=r,document.body.appendChild(o),o.click(),document.body.removeChild(o)}exports.createVideoUploader=u;exports.downloadFile=p;
2
+ //# sourceMappingURL=file-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-operations.js","sources":["../../../../packages/utils/src/file-operations.ts"],"sourcesContent":["/// <reference types=\"vite/client\" />\n\ndeclare global {\n interface Window {\n AliyunUpload: any\n OSS: any\n }\n}\n\nasync function loadScript(src: string): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n const script = document.createElement('script')\n script.src = src\n script.onload = () => {\n resolve()\n }\n script.onerror = () => {\n reject(new Error(`Failed to load script from ${src}`))\n }\n document.head.appendChild(script)\n }\n catch (error) {\n console.error('loadScript error:', error)\n reject(error)\n }\n })\n}\nasync function initAliyunSDK() {\n try {\n await loadScript('https://gosspublic.alicdn.com/aliyun-oss-sdk.min.js')\n await loadScript('https://cdnfile.yaomaitong.cn/cdn/js/aliyun-upload-sdk1.3.1.min.js')\n\n if (!window.AliyunUpload) {\n throw new Error('SDK 加载成功但未找到 AliyunUpload 对象')\n }\n }\n catch (error) {\n console.error('无法加载阿里云上传SDK:', error)\n throw error\n }\n}\n\nexport interface UploadInfo {\n file: File\n videoId?: string\n}\n\ninterface VideoUploadOptions {\n onUploadFailed?: (uploadInfo: any, code: string, message: string) => void\n onUploadSucceed?: (uploadInfo: any) => void\n onUploadProgress?: (uploadInfo: UploadInfo, totalSize: number, percent: number) => void\n onUploadTokenExpired?: (response: any) => void\n onUploadstarted?: (uploadInfo: UploadInfo) => Promise<{ uploadAuth: string, uploadAddress: string, videoId: string }>\n}\n\ninterface VideoUploadResult {\n videoId: string\n uploadInfo: any\n}\nexport interface IVideoUploader {\n uploader: any\n upload: (file: File) => Promise<VideoUploadResult>\n}\n\n/**\n * 创建阿里云视频上传器实例\n * @param options - 上传配置选项,包含各种回调函数\n * @returns 返回一个包含上传器实例和上传方法的对象\n */\nexport async function createVideoUploader(options: VideoUploadOptions): Promise<IVideoUploader> {\n // 检查是否在浏览器环境中运行\n if (typeof window === 'undefined') {\n throw new TypeError('VideoUploader 只能在浏览器环境中使用')\n }\n\n // 如果阿里云SDK未加载,则初始化SDK\n if (!window.AliyunUpload) {\n await initAliyunSDK()\n }\n\n // 声明Promise的resolve和reject函数,用于控制上传过程\n let currentResolve: ((value: VideoUploadResult) => void) | null = null\n let currentReject: ((reason: any) => void) | null = null\n\n // 创建阿里云上传实例\n const uploader = new window.AliyunUpload.Vod({\n // 上传进度回调\n onUploadProgress: options.onUploadProgress,\n // 上传凭证过期回调\n onUploadTokenExpired: options.onUploadTokenExpired || (() => {}),\n // 开始上传回调,用于设置上传凭证和地址\n onUploadstarted: async (uploadInfo: UploadInfo) => {\n try {\n const { uploadAuth, uploadAddress, videoId } = await options.onUploadstarted?.(uploadInfo) || {}\n if (uploadAuth && uploadAddress && videoId) {\n uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId)\n }\n }\n catch (error) {\n console.error('onUploadstarted error: ', error)\n throw error\n }\n },\n // 上传成功回调\n onUploadSucceed: (uploadInfo: any) => {\n currentResolve?.(uploadInfo)\n },\n // 上传失败回调\n onUploadFailed: (info: any, code: string, message: string) => {\n console.log('info: ', info)\n currentReject?.(new Error(`${message} ${code}`))\n },\n })\n\n /**\n * 上传文件方法\n * @param file - 要上传的文件对象\n * @returns Promise,解析为上传结果\n */\n const upload = async (file: File): Promise<VideoUploadResult> => {\n return new Promise((resolve, reject) => {\n currentResolve = resolve\n currentReject = reject\n\n // 设置上传的用户自定义数据\n const userData = JSON.stringify({\n Vod: {\n UserData: {\n IsShowWaterMark: 'false', // 不显示水印\n Priority: '7', // 上传优先级\n },\n },\n })\n\n // 添加文件到上传队列并开始上传\n uploader.addFile(file, null, null, null, userData)\n uploader.startUpload()\n })\n }\n\n // 返回上传器实例和上传方法\n return {\n uploader,\n upload,\n }\n}\n\n/**\n * 下载文件,创建一个隐藏的链接元素,设置下载属性并触发点击事件,然后移除该链接元素\n * @param url - 文件的URL\n * @param fileName - 文件的名称\n */\nexport function downloadFile(url: string, fileName: string) {\n const link = document.createElement('a')\n link.download = fileName\n link.style.display = 'none'\n link.href = url\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n"],"names":["loadScript","src","resolve","reject","script","error","initAliyunSDK","createVideoUploader","options","currentResolve","currentReject","uploader","uploadInfo","uploadAuth","uploadAddress","videoId","_a","info","code","message","file","userData","downloadFile","url","fileName","link"],"mappings":"gFASA,eAAeA,EAAWC,EAA4B,CACpD,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAClC,GAAA,CACI,MAAAC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAMH,EACbG,EAAO,OAAS,IAAM,CACZF,EAAA,CACV,EACAE,EAAO,QAAU,IAAM,CACrBD,EAAO,IAAI,MAAM,8BAA8BF,CAAG,EAAE,CAAC,CACvD,EACS,SAAA,KAAK,YAAYG,CAAM,QAE3BC,EAAO,CACJ,QAAA,MAAM,oBAAqBA,CAAK,EACxCF,EAAOE,CAAK,CAAA,CACd,CACD,CACH,CACA,eAAeC,GAAgB,CACzB,GAAA,CAIE,GAHJ,MAAMN,EAAW,qDAAqD,EACtE,MAAMA,EAAW,oEAAoE,EAEjF,CAAC,OAAO,aACJ,MAAA,IAAI,MAAM,8BAA8B,QAG3CK,EAAO,CACJ,cAAA,MAAM,gBAAiBA,CAAK,EAC9BA,CAAA,CAEV,CA6BA,eAAsBE,EAAoBC,EAAsD,CAE1F,GAAA,OAAO,OAAW,IACd,MAAA,IAAI,UAAU,2BAA2B,EAI5C,OAAO,cACV,MAAMF,EAAc,EAItB,IAAIG,EAA8D,KAC9DC,EAAgD,KAGpD,MAAMC,EAAW,IAAI,OAAO,aAAa,IAAI,CAE3C,iBAAkBH,EAAQ,iBAE1B,qBAAsBA,EAAQ,uBAAyB,IAAM,CAAA,GAE7D,gBAAiB,MAAOI,GAA2B,OAC7C,GAAA,CACI,KAAA,CAAE,WAAAC,EAAY,cAAAC,EAAe,QAAAC,CAAQ,EAAI,OAAMC,EAAAR,EAAQ,kBAAR,YAAAQ,EAAA,KAAAR,EAA0BI,KAAe,CAAC,EAC3FC,GAAcC,GAAiBC,GACjCJ,EAAS,wBAAwBC,EAAYC,EAAYC,EAAeC,CAAO,QAG5EV,EAAO,CACJ,cAAA,MAAM,0BAA2BA,CAAK,EACxCA,CAAA,CAEV,EAEA,gBAAkBO,GAAoB,CACpCH,GAAA,MAAAA,EAAiBG,EACnB,EAEA,eAAgB,CAACK,EAAWC,EAAcC,IAAoB,CACpD,QAAA,IAAI,SAAUF,CAAI,EAC1BP,GAAA,MAAAA,EAAgB,IAAI,MAAM,GAAGS,CAAO,IAAID,CAAI,EAAE,EAAC,CACjD,CACD,EA6BM,MAAA,CACL,SAAAP,EACA,OAxBa,MAAOS,GACb,IAAI,QAAQ,CAAClB,EAASC,IAAW,CACrBM,EAAAP,EACDQ,EAAAP,EAGV,MAAAkB,EAAW,KAAK,UAAU,CAC9B,IAAK,CACH,SAAU,CACR,gBAAiB,QACjB,SAAU,GAAA,CACZ,CACF,CACD,EAGDV,EAAS,QAAQS,EAAM,KAAM,KAAM,KAAMC,CAAQ,EACjDV,EAAS,YAAY,CAAA,CACtB,CAOH,CACF,CAOgB,SAAAW,EAAaC,EAAaC,EAAkB,CACpD,MAAAC,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,SAAWD,EAChBC,EAAK,MAAM,QAAU,OACrBA,EAAK,KAAOF,EACH,SAAA,KAAK,YAAYE,CAAI,EAC9BA,EAAK,MAAM,EACF,SAAA,KAAK,YAAYA,CAAI,CAChC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 将JSON数据导出为Excel文件
3
+ * @param title - Excel文件的标题
4
+ * @param json - JSON数据
5
+ * @param merge - 合并单元格的配置
6
+ * @returns 如果JSON数据为空,则返回undefined,否则返回Excel文件的名称
7
+ */
8
+ export declare function JsonToExcel(title?: string, json?: (string | number)[][], merge?: any): Error | undefined;
9
+ /**
10
+ * 将Excel数据转换为JSON
11
+ * @param data - Excel数据
12
+ * @param cb - 回调函数,用于处理转换后的JSON数据
13
+ * @param start - 开始行号
14
+ * @returns 转换后的JSON数组
15
+ */
16
+ export declare function excelToJson(data: any[], cb: (json: any[]) => void, start: number): any[];
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("xlsx");function w(c="",s=[],n){try{if(!s.length)return;const e=t.utils.aoa_to_sheet(s);n&&(e["!merges"]=n);const o=t.utils.book_new();t.utils.book_append_sheet(o,e,""),t.writeFile(o,`${c}.xlsx`)}catch(e){return console.log("e: ",e),new Error("数据导出失败")}}function y(c,s,n){const e=t.read(c,{type:"binary"}),o=[];for(const l in e.Sheets)if(Object.prototype.hasOwnProperty.call(e.Sheets,l)){let r=[];const i=e.Sheets[l]["!ref"]||"",h=i.split(":"),u=n+h[1].toString();r=r.concat(t.utils.sheet_to_json(e.Sheets[l],{header:1,range:n?u:i}));const f=r[0];r.shift();const p=r.map(x=>{const a={};return f.forEach((b,k)=>{a[b]=x[k]}),a});o.push(...p)}return s&&s(o),o}exports.JsonToExcel=w;exports.excelToJson=y;
2
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sources":["../../../../packages/utils/src/json.ts"],"sourcesContent":["import { read, utils, writeFile } from 'xlsx'\n\n/**\n * 将JSON数据导出为Excel文件\n * @param title - Excel文件的标题\n * @param json - JSON数据\n * @param merge - 合并单元格的配置\n * @returns 如果JSON数据为空,则返回undefined,否则返回Excel文件的名称\n */\nexport function JsonToExcel(title = '', json: (string | number)[][] = [], merge?: any) {\n try {\n if (!json.length) {\n return\n }\n // 创建worksheet\n const worksheet = utils.aoa_to_sheet(json)\n if (merge) {\n worksheet['!merges'] = merge\n }\n // 新建空workbook,加入worksheet\n const workbook = utils.book_new()\n utils.book_append_sheet(workbook, worksheet, '')\n writeFile(workbook, `${title}.xlsx`)\n }\n catch (e) {\n console.log('e: ', e)\n return new Error('数据导出失败')\n }\n}\n\n/**\n * 将Excel数据转换为JSON\n * @param data - Excel数据\n * @param cb - 回调函数,用于处理转换后的JSON数据\n * @param start - 开始行号\n * @returns 转换后的JSON数组\n */\nexport function excelToJson(data: any[], cb: (json: any[]) => void, start: number): any[] {\n const workbook = read(data, { type: 'binary' })\n // 遍历每张表读取\n const json = []\n for (const sheet in workbook.Sheets) {\n if (Object.prototype.hasOwnProperty.call(workbook.Sheets, sheet)) {\n let arr: string[][] = []\n const fromTo = workbook.Sheets[sheet]['!ref'] || ''\n const end = fromTo.split(':')\n const space = start + end[1].toString()\n arr = arr.concat(utils.sheet_to_json(workbook.Sheets[sheet], { header: 1, range: start ? space : fromTo }))\n const titleArr = arr[0]\n arr.shift()\n const excelJsonArr = arr.map((item) => {\n const obj: {\n [key: string]: any\n } = {}\n titleArr.forEach((titleItem: string, index: number) => {\n obj[titleItem] = item[index]\n })\n return obj\n })\n json.push(...excelJsonArr)\n }\n }\n if (cb) {\n cb(json)\n }\n return json\n}\n"],"names":["JsonToExcel","title","json","merge","worksheet","utils","workbook","writeFile","excelToJson","data","cb","start","read","sheet","arr","fromTo","end","space","titleArr","excelJsonArr","item","obj","titleItem","index"],"mappings":"wGASO,SAASA,EAAYC,EAAQ,GAAIC,EAA8B,CAAA,EAAIC,EAAa,CACjF,GAAA,CACE,GAAA,CAACD,EAAK,OACR,OAGI,MAAAE,EAAYC,EAAAA,MAAM,aAAaH,CAAI,EACrCC,IACFC,EAAU,SAAS,EAAID,GAGnB,MAAAG,EAAWD,QAAM,SAAS,EAC1BA,EAAAA,MAAA,kBAAkBC,EAAUF,EAAW,EAAE,EACrCG,EAAAA,UAAAD,EAAU,GAAGL,CAAK,OAAO,QAE9B,EAAG,CACA,eAAA,IAAI,MAAO,CAAC,EACb,IAAI,MAAM,QAAQ,CAAA,CAE7B,CASgB,SAAAO,EAAYC,EAAaC,EAA2BC,EAAsB,CACxF,MAAML,EAAWM,EAAAA,KAAKH,EAAM,CAAE,KAAM,SAAU,EAExCP,EAAO,CAAC,EACH,UAAAW,KAASP,EAAS,OAC3B,GAAI,OAAO,UAAU,eAAe,KAAKA,EAAS,OAAQO,CAAK,EAAG,CAChE,IAAIC,EAAkB,CAAC,EACvB,MAAMC,EAAST,EAAS,OAAOO,CAAK,EAAE,MAAM,GAAK,GAC3CG,EAAMD,EAAO,MAAM,GAAG,EACtBE,EAAQN,EAAQK,EAAI,CAAC,EAAE,SAAS,EACtCF,EAAMA,EAAI,OAAOT,EAAA,MAAM,cAAcC,EAAS,OAAOO,CAAK,EAAG,CAAE,OAAQ,EAAG,MAAOF,EAAQM,EAAQF,CAAA,CAAQ,CAAC,EACpG,MAAAG,EAAWJ,EAAI,CAAC,EACtBA,EAAI,MAAM,EACV,MAAMK,EAAeL,EAAI,IAAKM,GAAS,CACrC,MAAMC,EAEF,CAAC,EACI,OAAAH,EAAA,QAAQ,CAACI,EAAmBC,IAAkB,CACjDF,EAAAC,CAAS,EAAIF,EAAKG,CAAK,CAAA,CAC5B,EACMF,CAAA,CACR,EACInB,EAAA,KAAK,GAAGiB,CAAY,CAAA,CAG7B,OAAIT,GACFA,EAAGR,CAAI,EAEFA,CACT"}
@@ -0,0 +1,31 @@
1
+ declare class Storage {
2
+ private readonly prefix;
3
+ private constructor();
4
+ static init(prefix?: string): Storage;
5
+ static getInstance(): Storage;
6
+ private getTopLevelDomain;
7
+ local: {
8
+ has: (key: string) => boolean;
9
+ get: (key: string) => string | null;
10
+ set: (key: string, value: string) => void;
11
+ remove: (key: string) => void;
12
+ clear: () => void;
13
+ };
14
+ session: {
15
+ has: (key: string) => boolean;
16
+ get: (key: string) => string | null;
17
+ set: (key: string, value: string) => void;
18
+ remove: (key: string) => void;
19
+ clear: () => void;
20
+ };
21
+ cookie: {
22
+ has: (key: string) => boolean;
23
+ get: (key: string) => string | null;
24
+ set: (key: string, value: string, expires?: number, path?: string, domain?: string) => void;
25
+ remove: (key: string, path?: string, domain?: string) => void;
26
+ clear: () => void;
27
+ };
28
+ }
29
+ export declare const initStorage: typeof Storage.init;
30
+ export declare const useStorage: typeof Storage.getInstance;
31
+ export {};
@@ -1 +1,2 @@
1
- "use strict";var m=Object.defineProperty;var h=(r,e,t)=>e in r?m(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var n=(r,e,t)=>h(r,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let o=null;class i{constructor(e){n(this,"prefix");n(this,"local",{has:e=>Object.prototype.hasOwnProperty.call(localStorage,`${this.prefix}${e}`),get:e=>localStorage.getItem(`${this.prefix}${e}`),set:(e,t)=>{localStorage.setItem(`${this.prefix}${e}`,t)},remove:e=>{localStorage.removeItem(`${this.prefix}${e}`)},clear:()=>{localStorage.clear()}});n(this,"session",{has:e=>Object.prototype.hasOwnProperty.call(sessionStorage,`${this.prefix}${e}`),get:e=>sessionStorage.getItem(`${this.prefix}${e}`),set:(e,t)=>{sessionStorage.setItem(`${this.prefix}${e}`,t)},remove:e=>{sessionStorage.removeItem(`${this.prefix}${e}`)},clear:()=>{sessionStorage.clear()}});n(this,"cookie",{has:e=>new RegExp(`(^|;)\\s*${e}=`).test(document.cookie),get:e=>{const t=document.cookie.match(new RegExp(`(^|;)\\s*${e}=([^;]*)`));return t?decodeURIComponent(t[2]):null},set:(e,t,a=1,l="/",c=this.getTopLevelDomain())=>{const s=new Date;s.setTime(s.getTime()+a*24*60*60*1e3);const p=`;expires=${s.toUTCString()}`,$=`;path=${l}`,g=c?`;domain=${c}`:"";document.cookie=`${e}=${encodeURIComponent(t)}${p}${$}${g}`},remove:(e,t="/",a=this.getTopLevelDomain())=>{const l=`;expires=${new Date(0).toUTCString()}`,c=`;path=${t}`,s=a?`;domain=${a}`:"";document.cookie=`${e}=;${l}${c}${s}`},clear:()=>{const e=document.cookie.match(/[^ =;]+(?==)/g);e&&e.forEach(t=>{document.cookie=`${t}=;expires=${new Date(0).toUTCString()};path=/`})}});this.prefix=e}static init(e="qxs_"){return o||(o=new i(e),o)}static getInstance(){return o||(o=new i("qxs_")),o}getTopLevelDomain(e=window.location.hostname){const t=e.split(".");return t.length>2?t.slice(-2).join("."):e}}const u=i.init,S=i.getInstance;exports.initStorage=u;exports.useStorage=S;
1
+ "use strict";var m=Object.defineProperty;var h=(r,e,t)=>e in r?m(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var n=(r,e,t)=>h(r,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let o=null;class i{constructor(e){n(this,"prefix");n(this,"local",{has:e=>Object.prototype.hasOwnProperty.call(localStorage,`${this.prefix}${e}`),get:e=>localStorage.getItem(`${this.prefix}${e}`),set:(e,t)=>{localStorage.setItem(`${this.prefix}${e}`,t)},remove:e=>{localStorage.removeItem(`${this.prefix}${e}`)},clear:()=>{localStorage.clear()}});n(this,"session",{has:e=>Object.prototype.hasOwnProperty.call(sessionStorage,`${this.prefix}${e}`),get:e=>sessionStorage.getItem(`${this.prefix}${e}`),set:(e,t)=>{sessionStorage.setItem(`${this.prefix}${e}`,t)},remove:e=>{sessionStorage.removeItem(`${this.prefix}${e}`)},clear:()=>{sessionStorage.clear()}});n(this,"cookie",{has:e=>new RegExp(`(^|;)\\s*${e}=`).test(document.cookie),get:e=>{const t=document.cookie.match(new RegExp(`(^|;)\\s*${e}=([^;]*)`));return t?decodeURIComponent(t[2]):null},set:(e,t,a=1,l="/",c=this.getTopLevelDomain())=>{const s=new Date;s.setTime(s.getTime()+a*24*60*60*1e3);const p=`;expires=${s.toUTCString()}`,$=`;path=${l}`,g=c?`;domain=${c}`:"";document.cookie=`${e}=${encodeURIComponent(t)}${p}${$}${g}`},remove:(e,t="/",a=this.getTopLevelDomain())=>{const l=`;expires=${new Date(0).toUTCString()}`,c=`;path=${t}`,s=a?`;domain=${a}`:"";document.cookie=`${e}=;${l}${c}${s}`},clear:()=>{const e=document.cookie.match(/[^ =;]+(?==)/g);e&&e.forEach(t=>{document.cookie=`${t}=;expires=${new Date(0).toUTCString()};path=/`})}});this.prefix=e}static init(e="qxs_"){return o?(console.warn("Storage has already been initialized"),o):(o=new i(e),o)}static getInstance(){return o||(o=new i("qxs_")),o}getTopLevelDomain(e=window.location.hostname){const t=e.split(".");return t.length>2?t.slice(-2).join("."):e}}const u=i.init,S=i.getInstance;exports.initStorage=u;exports.useStorage=S;
2
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sources":["../../../../packages/utils/src/storage.ts"],"sourcesContent":["// 使用单例模式\nlet instance: Storage | null = null\n\nclass Storage {\n private readonly prefix: string\n\n private constructor(prefix: string) {\n this.prefix = prefix\n }\n\n static init(prefix = 'qxs_'): Storage {\n if (instance) {\n // throw new Error('Storage has already been initialized')\n console.warn('Storage has already been initialized')\n return instance\n }\n instance = new Storage(prefix)\n return instance\n }\n\n static getInstance(): Storage {\n if (!instance) {\n instance = new Storage('qxs_') // 使用默认前缀\n }\n return instance\n }\n\n private getTopLevelDomain(hostname = window.location.hostname) {\n const parts = hostname.split('.')\n if (parts.length > 2) {\n return parts.slice(-2).join('.')\n }\n return hostname\n }\n\n local = {\n has: (key: string) => {\n return Object.prototype.hasOwnProperty.call(localStorage, `${this.prefix}${key}`)\n },\n get: (key: string) => {\n return localStorage.getItem(`${this.prefix}${key}`)\n },\n set: (key: string, value: string) => {\n localStorage.setItem(`${this.prefix}${key}`, value)\n },\n remove: (key: string) => {\n localStorage.removeItem(`${this.prefix}${key}`)\n },\n clear: () => {\n localStorage.clear()\n },\n }\n\n session = {\n has: (key: string) => {\n return Object.prototype.hasOwnProperty.call(sessionStorage, `${this.prefix}${key}`)\n },\n get: (key: string) => {\n return sessionStorage.getItem(`${this.prefix}${key}`)\n },\n set: (key: string, value: string) => {\n sessionStorage.setItem(`${this.prefix}${key}`, value)\n },\n remove: (key: string) => {\n sessionStorage.removeItem(`${this.prefix}${key}`)\n },\n clear: () => {\n sessionStorage.clear()\n },\n }\n\n cookie = {\n has: (key: string) => {\n return new RegExp(`(^|;)\\\\s*${key}=`).test(document.cookie)\n },\n\n get: (key: string) => {\n const match = document.cookie.match(new RegExp(`(^|;)\\\\s*${key}=([^;]*)`))\n return match ? decodeURIComponent(match[2]) : null\n },\n\n set: (key: string, value: string, expires = 1, path = '/', domain = this.getTopLevelDomain()) => {\n const expiresDate = new Date()\n expiresDate.setTime(expiresDate.getTime() + expires * 24 * 60 * 60 * 1000)\n const expiresStr = `;expires=${expiresDate.toUTCString()}`\n const pathStr = `;path=${path}`\n const domainStr = domain ? `;domain=${domain}` : ''\n\n document.cookie = `${key}=${encodeURIComponent(value)}${expiresStr}${pathStr}${domainStr}`\n },\n\n remove: (key: string, path = '/', domain = this.getTopLevelDomain()) => {\n // 如果设置了域,那么确保域和路径与设置cookie时相同,以确保删除成功\n const expiresStr = `;expires=${new Date(0).toUTCString()}`\n const pathStr = `;path=${path}`\n const domainStr = domain ? `;domain=${domain}` : ''\n\n document.cookie = `${key}=;${expiresStr}${pathStr}${domainStr}`\n },\n\n clear: () => {\n const keys = document.cookie.match(/[^ =;]+(?==)/g)\n if (keys) {\n keys.forEach((key) => {\n document.cookie = `${key}=;expires=${new Date(0).toUTCString()};path=/`\n })\n }\n },\n }\n}\n\n// 导出两个方法\nexport const initStorage = Storage.init\nexport const useStorage = Storage.getInstance\n"],"names":["instance","Storage","prefix","__publicField","key","value","match","expires","path","domain","expiresDate","expiresStr","pathStr","domainStr","keys","hostname","parts","initStorage","useStorage"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare const isUndefined: (val: any) => val is undefined;
2
+ export declare const isBoolean: (val: any) => val is boolean;
3
+ export declare const isNumber: (val: any) => val is number;
4
+ export declare function isElement(e: unknown): e is Element;
5
+ export declare function isWindow(val: unknown): val is Window;
6
+ /**
7
+ * 判断字符串是否为JSON字符串
8
+ * @param str - 要判断的字符串
9
+ * @returns 如果字符串是JSON字符串,则返回true,否则返回false
10
+ */
11
+ export declare function isJSONString(str: string): boolean;
12
+ /**
13
+ * 通过 MIME 类型判断文件是否为图片
14
+ * @param file - 要检查的文件对象
15
+ * @returns {boolean} 如果文件是图片类型返回 true,否则返回 false
16
+ * @example
17
+ * const file = new File([''], 'test.png', { type: 'image/png' });
18
+ * isImageByMimeType(file); // true
19
+ */
20
+ export declare function isImageByMimeType(file: File): boolean;
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=e=>e===void 0,i=e=>typeof e=="boolean",r=e=>typeof e=="number";function s(e){return typeof Element>"u"?!1:e instanceof Element}function o(e){return e===window}function u(e){return/^[\],:{}\s]*$/.test(e.replace(/\\["\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))&&l(e)}function l(e){try{return JSON.parse(e),!0}catch(n){return console.log("e: ",n),!1}}function a(e){return e.type.startsWith("image/")}exports.isBoolean=i;exports.isElement=s;exports.isImageByMimeType=a;exports.isJSONString=u;exports.isNumber=r;exports.isUndefined=t;exports.isWindow=o;
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../../packages/utils/src/types.ts"],"sourcesContent":["export const isUndefined = (val: any): val is undefined => val === undefined\nexport const isBoolean = (val: any): val is boolean => typeof val === 'boolean'\nexport const isNumber = (val: any): val is number => typeof val === 'number'\n\nexport function isElement(e: unknown): e is Element {\n if (typeof Element === 'undefined') {\n return false\n }\n return e instanceof Element\n}\n\nexport function isWindow(val: unknown): val is Window {\n return val === window\n}\n\n/**\n * 判断字符串是否为JSON字符串\n * @param str - 要判断的字符串\n * @returns 如果字符串是JSON字符串,则返回true,否则返回false\n */\nexport function isJSONString(str: string) {\n const jsonStringRegex = /^[\\],:{}\\s]*$/\n .test(str.replace(/\\\\[\"\\\\/bfnrtu]/g, '@')\n .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\n .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))\n\n return jsonStringRegex && isValidJSON(str)\n}\n\n/**\n * 判断字符串是否为有效的JSON字符串\n * @param str - 要判断的字符串\n * @returns 如果字符串是有效的JSON字符串,则返回true,否则返回false\n */\nfunction isValidJSON(str: string) {\n try {\n JSON.parse(str)\n return true\n }\n catch (e) {\n console.log('e: ', e)\n return false\n }\n}\n\n/**\n * 通过 MIME 类型判断文件是否为图片\n * @param file - 要检查的文件对象\n * @returns {boolean} 如果文件是图片类型返回 true,否则返回 false\n * @example\n * const file = new File([''], 'test.png', { type: 'image/png' });\n * isImageByMimeType(file); // true\n */\nexport function isImageByMimeType(file: File) {\n return file.type.startsWith('image/')\n}\n"],"names":["isUndefined","val","isBoolean","isNumber","isElement","isWindow","isJSONString","str","isValidJSON","e","isImageByMimeType","file"],"mappings":"gFAAa,MAAAA,EAAeC,GAA+BA,IAAQ,OACtDC,EAAaD,GAA6B,OAAOA,GAAQ,UACzDE,EAAYF,GAA4B,OAAOA,GAAQ,SAE7D,SAASG,EAAU,EAA0B,CAC9C,OAAA,OAAO,QAAY,IACd,GAEF,aAAa,OACtB,CAEO,SAASC,EAASJ,EAA6B,CACpD,OAAOA,IAAQ,MACjB,CAOO,SAASK,EAAaC,EAAa,CAMjC,MALiB,gBACrB,KAAKA,EAAI,QAAQ,kBAAmB,GAAG,EACrC,QAAQ,mEAAoE,GAAG,EAC/E,QAAQ,uBAAwB,EAAE,CAAC,GAEdC,EAAYD,CAAG,CAC3C,CAOA,SAASC,EAAYD,EAAa,CAC5B,GAAA,CACF,YAAK,MAAMA,CAAG,EACP,SAEFE,EAAG,CACA,eAAA,IAAI,MAAOA,CAAC,EACb,EAAA,CAEX,CAUO,SAASC,EAAkBC,EAAY,CACrC,OAAAA,EAAK,KAAK,WAAW,QAAQ,CACtC"}
File without changes
@@ -0,0 +1,47 @@
1
+ interface SettingsType {
2
+ /** 水印总体的id */
3
+ id?: string;
4
+ /** 小水印的id前缀 */
5
+ prefix?: string;
6
+ /** 水印文案 */
7
+ text?: string;
8
+ /** 水印起始位置x轴坐标 */
9
+ x?: number;
10
+ /** 水印起始位置Y轴坐标 */
11
+ y?: number;
12
+ /** 水印行数 */
13
+ rows?: number;
14
+ /** 水印列数 */
15
+ cols?: number;
16
+ /** 水印x轴间隔 */
17
+ x_space?: number;
18
+ /** 水印y轴间隔 */
19
+ y_space?: number;
20
+ /** 水印字体 */
21
+ font?: string;
22
+ /** 水印字体颜色 */
23
+ color?: string;
24
+ /** 水印字体大小 */
25
+ fontsize?: string;
26
+ /** 水印透明度,要求设置在大于等于0.005 */
27
+ alpha?: number;
28
+ /** 水印宽度 */
29
+ width?: number;
30
+ /** 水印长度 */
31
+ height?: number;
32
+ /** 水印倾斜度数 */
33
+ angle?: number;
34
+ /** 水印的总体宽度(默认值:body的scrollWidth和clientWidth的较大值) */
35
+ parent_width?: number;
36
+ /** 水印的总体高度(默认值:body的scrollHeight和clientHeight的较大值) */
37
+ parent_height?: number;
38
+ /** 水印插件挂载的父元素element,不输入则默认挂在body */
39
+ parent_node?: HTMLElement | null;
40
+ /** 是否监控,true: 不可删除水印; false: 可删水印 */
41
+ monitor?: boolean;
42
+ }
43
+ export declare function watermark(): {
44
+ addMark: (settings: Partial<SettingsType>) => void;
45
+ removeMark: () => void;
46
+ };
47
+ export {};
@@ -0,0 +1,32 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const $={id:"wm_div_id",prefix:"mask_div_id",text:"测试水印",x:0,y:0,rows:0,cols:0,width:0,height:0,x_space:100,y_space:40,font:"微软雅黑",color:"black",fontsize:"18px",alpha:.15,angle:15,parent_width:0,parent_height:0,parent_node:null,monitor:!0};function C(t,r,c){const u=document.createElement("canvas").getContext("2d");if(!u)return{width:100,height:100};u.font=`${c} ${r}`;const s=u.measureText(t.trim()),l=Number.parseFloat(c),p=s.actualBoundingBoxAscent!==void 0&&s.actualBoundingBoxDescent!==void 0?s.actualBoundingBoxAscent+s.actualBoundingBoxDescent:l;return{width:Math.ceil(s.width),height:Math.ceil(p)}}function M(){const t={...$};let r=!1;const c=new MutationObserver(k),w=new ResizeObserver(()=>{r||l(t)});function u(i,e){const h=i-t.x,n=e-t.y,o=t.x_space||20,d=t.y_space||20,m=Math.ceil(h/(t.width+o)),g=Math.ceil(n/(t.height+d));return{cols:m,rows:g,x_space:o,y_space:d}}function s(i,e,h){const n=document.createElement("div");return n.textContent=t.text,n.id=`${t.prefix}${h}`,n.style.cssText=`
2
+ transform: rotate(-${t.angle}deg);
3
+ position: absolute;
4
+ left: ${i}px;
5
+ top: ${e}px;
6
+ overflow: hidden;
7
+ z-index: 9999999;
8
+ opacity: ${t.alpha};
9
+ font-size: ${t.fontsize};
10
+ font-family: ${t.font};
11
+ color: ${t.color};
12
+ text-align: center;
13
+ width: ${t.width}px;
14
+ height: ${t.height}px;
15
+ line-height: ${t.height}px;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ user-select: none;
20
+ visibility: visible;
21
+ `.replace(/\s+/g," ").trim(),n}function l(i){if(p(),Object.assign(t,i),t.width===0&&t.height===0||t.width===0||t.height===0){const a=C(t.text,t.font,t.fontsize),f=10;t.width===0&&(t.width=a.width+f),t.height===0&&(t.height=a.height+f)}const e=t.parent_node||document.body,h=Math.max(e.scrollWidth,e.clientWidth),n=Math.max(e.scrollHeight,e.clientHeight),o=document.createElement("div");o.id=t.id,e.closest("body")&&getComputedStyle(e).position==="static"&&(e.style.position="relative"),o.style.cssText=`
22
+ pointer-events: none;
23
+ display: block;
24
+ position: absolute;
25
+ top: 0;
26
+ left: 0;
27
+ width: 100%;
28
+ height: 100%;
29
+ z-index: 9999999;
30
+ overflow: hidden;
31
+ `.replace(/\s+/g," ").trim();const d=o.attachShadow?o.attachShadow({mode:"open"}):o;e.appendChild(o);const{cols:m,rows:g,x_space:v,y_space:y}=u(h,n);t.cols=m,t.rows=g,t.x_space=v,t.y_space=y;const b=document.createDocumentFragment();for(let a=0;a<g;a++){const f=t.y+(t.height+y)*a;for(let x=0;x<m;x++){const _=t.x+(t.width+v)*x;b.appendChild(s(_,f,a*m+x))}}if(d.appendChild(b),t.monitor){w.observe(e);const a={attributes:!0,childList:!0,subtree:!0,characterData:!0};c.observe(o,a),d!==o&&c.observe(d,a)}}function p(){var e;const i=document.getElementById(t.id);c.disconnect(),i&&((e=i.parentNode)==null||e.removeChild(i))}function k(i){if(r){r=!1;return}if(!document.getElementById(t.id)){l(t);return}i.some(n=>n.type==="childList"||n.type==="attributes"||n.type==="characterData")&&l(t)}return{addMark:l,removeMark:()=>{r=!0,p()}}}exports.watermark=M;
32
+ //# sourceMappingURL=watermark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watermark.js","sources":["../../../../packages/utils/src/watermark.ts"],"sourcesContent":["interface SettingsType {\n /** 水印总体的id */\n id?: string\n /** 小水印的id前缀 */\n prefix?: string\n /** 水印文案 */\n text?: string\n /** 水印起始位置x轴坐标 */\n x?: number\n /** 水印起始位置Y轴坐标 */\n y?: number\n /** 水印行数 */\n rows?: number\n /** 水印列数 */\n cols?: number\n /** 水印x轴间隔 */\n x_space?: number\n /** 水印y轴间隔 */\n y_space?: number\n /** 水印字体 */\n font?: string\n /** 水印字体颜色 */\n color?: string\n /** 水印字体大小 */\n fontsize?: string\n /** 水印透明度,要求设置在大于等于0.005 */\n alpha?: number\n /** 水印宽度 */\n width?: number\n /** 水印长度 */\n height?: number\n /** 水印倾斜度数 */\n angle?: number\n /** 水印的总体宽度(默认值:body的scrollWidth和clientWidth的较大值) */\n parent_width?: number\n /** 水印的总体高度(默认值:body的scrollHeight和clientHeight的较大值) */\n parent_height?: number\n /** 水印插件挂载的父元素element,不输入则默认挂在body */\n parent_node?: HTMLElement | null\n /** 是否监控,true: 不可删除水印; false: 可删水印 */\n monitor?: boolean\n}\n\n// 默认配置\nconst initialSettings: Required<SettingsType> = {\n id: 'wm_div_id',\n prefix: 'mask_div_id',\n text: '测试水印',\n x: 0,\n y: 0,\n rows: 0,\n cols: 0,\n width: 0,\n height: 0,\n x_space: 100,\n y_space: 40,\n font: '微软雅黑',\n color: 'black',\n fontsize: '18px',\n alpha: 0.15,\n angle: 15,\n parent_width: 0,\n parent_height: 0,\n parent_node: null,\n monitor: true,\n}\n\nfunction calculateTextDimensions(text: string, font: string, fontSize: string): { width: number, height: number } {\n const canvas = document.createElement('canvas')\n const context = canvas.getContext('2d')\n if (!context) {\n return { width: 100, height: 100 }\n }\n\n context.font = `${fontSize} ${font}`\n const metrics = context.measureText(text.trim())\n const fontSizeNum = Number.parseFloat(fontSize)\n\n // 移除 DPI 缩放,直接使用原始值\n const height = (metrics.actualBoundingBoxAscent !== undefined && metrics.actualBoundingBoxDescent !== undefined)\n ? (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent)\n : fontSizeNum\n\n return {\n width: Math.ceil(metrics.width),\n height: Math.ceil(height),\n }\n}\n\nexport function watermark() {\n const globalSetting: Required<SettingsType> = { ...initialSettings }\n let forceRemove = false\n const watermarkDom = new MutationObserver(domChangeCallback)\n const resizeObserver = new ResizeObserver(() => {\n if (!forceRemove) {\n loadMark(globalSetting)\n }\n })\n\n // 计算水印布局\n function calculateWatermarkLayout(pageWidth: number, pageHeight: number) {\n const availableWidth = pageWidth - globalSetting.x\n const availableHeight = pageHeight - globalSetting.y\n\n // 使用固定间距\n const x_space = globalSetting.x_space || 20 // 如果未设置则使用默认值\n const y_space = globalSetting.y_space || 20 // 如果未设置则使用默认值\n\n // 计算能容纳的行数和列数\n const cols = Math.ceil(availableWidth / (globalSetting.width + x_space))\n const rows = Math.ceil(availableHeight / (globalSetting.height + y_space))\n\n return {\n cols,\n rows,\n x_space,\n y_space,\n }\n }\n\n // 创建水印元素\n function createWatermarkElement(x: number, y: number, index: number): HTMLElement {\n const maskDiv = document.createElement('div')\n maskDiv.textContent = globalSetting.text\n maskDiv.id = `${globalSetting.prefix}${index}`\n\n maskDiv.style.cssText = `\n transform: rotate(-${globalSetting.angle}deg);\n position: absolute;\n left: ${x}px;\n top: ${y}px;\n overflow: hidden;\n z-index: 9999999;\n opacity: ${globalSetting.alpha};\n font-size: ${globalSetting.fontsize};\n font-family: ${globalSetting.font};\n color: ${globalSetting.color};\n text-align: center;\n width: ${globalSetting.width}px;\n height: ${globalSetting.height}px;\n line-height: ${globalSetting.height}px;\n display: flex;\n align-items: center;\n justify-content: center;\n user-select: none;\n visibility: visible;\n `.replace(/\\s+/g, ' ').trim()\n\n return maskDiv\n }\n\n // 加载水印\n function loadMark(settings: Partial<SettingsType>) {\n removeMark()\n Object.assign(globalSetting, settings)\n\n if ((globalSetting.width === 0 && globalSetting.height === 0) || globalSetting.width === 0 || globalSetting.height === 0) {\n // 计算文本尺寸\n const textDimensions = calculateTextDimensions(\n globalSetting.text,\n globalSetting.font,\n globalSetting.fontsize,\n )\n const padding = 10\n if (globalSetting.width === 0) {\n globalSetting.width = textDimensions.width + padding\n }\n if (globalSetting.height === 0) {\n globalSetting.height = textDimensions.height + padding\n }\n }\n\n const parentElement = globalSetting.parent_node || document.body\n const pageWidth = Math.max(parentElement.scrollWidth, parentElement.clientWidth)\n const pageHeight = Math.max(parentElement.scrollHeight, parentElement.clientHeight)\n\n const watermarkContainer = document.createElement('div')\n watermarkContainer.id = globalSetting.id\n\n // 处理父元素定位\n if (parentElement.closest('body') && getComputedStyle(parentElement).position === 'static') {\n parentElement.style.position = 'relative'\n }\n\n watermarkContainer.style.cssText = `\n pointer-events: none;\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 9999999;\n overflow: hidden;\n `.replace(/\\s+/g, ' ').trim()\n\n const shadowRoot = watermarkContainer.attachShadow ? watermarkContainer.attachShadow({ mode: 'open' }) : watermarkContainer\n\n parentElement.appendChild(watermarkContainer)\n\n const { cols, rows, x_space, y_space } = calculateWatermarkLayout(pageWidth, pageHeight)\n globalSetting.cols = cols\n globalSetting.rows = rows\n globalSetting.x_space = x_space\n globalSetting.y_space = y_space\n\n const fragment = document.createDocumentFragment()\n for (let i = 0; i < rows; i++) {\n const y = globalSetting.y + (globalSetting.height + y_space) * i\n for (let j = 0; j < cols; j++) {\n const x = globalSetting.x + (globalSetting.width + x_space) * j\n fragment.appendChild(createWatermarkElement(x, y, i * cols + j))\n }\n }\n shadowRoot.appendChild(fragment)\n\n if (globalSetting.monitor) {\n // 监听父元素大小变化\n resizeObserver.observe(parentElement)\n\n // 监听水印容器及其子元素\n const config: MutationObserverInit = {\n attributes: true, // 监听属性变化\n childList: true, // 监听子元素变化\n subtree: true, // 监听子树变化\n characterData: true, // 监听文本内容变化\n }\n\n // 监听水印容器\n watermarkDom.observe(watermarkContainer, config)\n\n // 如果使用了 Shadow DOM,还需要监听 shadowRoot 内的元素\n if (shadowRoot !== watermarkContainer) {\n watermarkDom.observe(shadowRoot, config)\n }\n }\n }\n\n // 移除水印\n function removeMark() {\n const watermarkElement = document.getElementById(globalSetting.id)\n watermarkDom.disconnect()\n if (watermarkElement) {\n watermarkElement.parentNode?.removeChild(watermarkElement)\n }\n }\n\n // 监听DOM变化\n function domChangeCallback(records: MutationRecord[]) {\n if (forceRemove) {\n forceRemove = false\n return\n }\n\n const watermarkElement = document.getElementById(globalSetting.id)\n if (!watermarkElement) {\n // 如果水印容器被删除,重新创建\n loadMark(globalSetting)\n return\n }\n\n // 检查是否有任何修改\n const hasChanges = records.some((record) => {\n // 检查元素是否被删除或添加\n if (record.type === 'childList') {\n return true\n }\n\n // 检查属性是否被修改\n if (record.type === 'attributes') {\n return true\n }\n\n // 检查文本内容是否被修改\n if (record.type === 'characterData') {\n return true\n }\n\n return false\n })\n\n if (hasChanges) {\n loadMark(globalSetting)\n }\n }\n\n return {\n addMark: loadMark,\n removeMark: () => {\n forceRemove = true\n // 删除这行,不重置全局配置\n // Object.assign(globalSetting, initialSettings)\n removeMark()\n },\n }\n}\n"],"names":["initialSettings","calculateTextDimensions","text","font","fontSize","context","metrics","fontSizeNum","height","watermark","globalSetting","forceRemove","watermarkDom","domChangeCallback","resizeObserver","loadMark","calculateWatermarkLayout","pageWidth","pageHeight","availableWidth","availableHeight","x_space","y_space","cols","rows","createWatermarkElement","x","y","index","maskDiv","settings","removeMark","textDimensions","padding","parentElement","watermarkContainer","shadowRoot","fragment","i","j","config","watermarkElement","_a","records","record"],"mappings":"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"}
package/package.json CHANGED
@@ -1,58 +1,33 @@
1
1
  {
2
2
  "name": "@qxs-bns/utils",
3
- "version": "0.0.9",
4
- "main": "./index.cjs",
5
- "module": "./index.js",
6
- "types": "./types/index.d.ts",
7
- "files": [
8
- "index.js",
9
- "index.cjs",
10
- "src",
11
- "types",
12
- "lib"
13
- ],
3
+ "version": "0.0.11",
4
+ "main": "lib/index.js",
5
+ "module": "es/index.mjs",
6
+ "types": "es/index.d.ts",
7
+ "type": "module",
14
8
  "exports": {
15
9
  ".": {
16
- "types": "./types/index.d.ts",
17
- "import": "./index.js",
18
- "require": "./index.cjs"
19
- },
20
- "./src/file-operations": {
21
- "types": "./types/index.d.ts",
22
- "import": "./src/file-operations.js",
23
- "require": "./src/file-operations.cjs"
24
- },
25
- "./src/media": {
26
- "types": "./types/index.d.ts",
27
- "import": "./src/media.js",
28
- "require": "./src/media.cjs"
29
- },
30
- "./src/device": {
31
- "types": "./types/index.d.ts",
32
- "import": "./src/device.js",
33
- "require": "./src/device.cjs"
10
+ "types": "./es/index.d.ts",
11
+ "import": "./es/index.mjs",
12
+ "require": "./lib/index.js"
34
13
  },
35
- "./src/storage": {
36
- "types": "./types/index.d.ts",
37
- "import": "./src/storage.js",
38
- "require": "./src/storage.cjs"
14
+ "./es": {
15
+ "types": "./es/index.d.ts",
16
+ "import": "./es/index.mjs",
17
+ "require": "./lib/index.js"
39
18
  },
40
- "./src/type": {
41
- "types": "./types/index.d.ts",
42
- "import": "./src/type.js",
43
- "require": "./src/type.cjs"
44
- },
45
- "./src/watermark": {
46
- "types": "./types/index.d.ts",
47
- "import": "./src/watermark.js",
48
- "require": "./src/watermark.cjs"
19
+ "./*": {
20
+ "types": "./es/*/index.d.ts",
21
+ "import": "./es/*/index.mjs",
22
+ "require": "./lib/*/index.js"
49
23
  }
50
24
  },
25
+ "files": [
26
+ "es",
27
+ "lib"
28
+ ],
51
29
  "dependencies": {
52
- "ali-oss": "^6.22.0"
53
- },
54
- "publishConfig": {
55
- "access": "public",
56
- "registry": "https://registry.npmjs.org/"
30
+ "ans-javascript-sdk": "^4.5.5",
31
+ "xlsx": "^0.18.5"
57
32
  }
58
33
  }
package/index.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./src/device.cjs"),t=require("./src/file-operations.cjs"),o=require("./src/media.cjs"),i=require("./src/storage.cjs"),e=require("./src/types.cjs"),s=require("./src/watermark.cjs"),a=require("vue");exports.isMobile=r.isMobile;exports.createVideoUploader=t.createVideoUploader;exports.isImageByMimeType=o.isImageByMimeType;exports.initStorage=i.initStorage;exports.useStorage=i.useStorage;exports.isBoolean=e.isBoolean;exports.isElement=e.isElement;exports.isNumber=e.isNumber;exports.isUndefined=e.isUndefined;exports.isWindow=e.isWindow;exports.watermark=s.watermark;Object.defineProperty(exports,"isVNode",{enumerable:!0,get:()=>a.isVNode});
package/index.js DELETED
@@ -1,21 +0,0 @@
1
- import { isMobile as r } from "./src/device.js";
2
- import { createVideoUploader as t } from "./src/file-operations.js";
3
- import { isImageByMimeType as p } from "./src/media.js";
4
- import { initStorage as a, useStorage as f } from "./src/storage.js";
5
- import { isBoolean as d, isElement as n, isNumber as l, isUndefined as g, isWindow as b } from "./src/types.js";
6
- import { watermark as w } from "./src/watermark.js";
7
- import { isVNode as B } from "vue";
8
- export {
9
- t as createVideoUploader,
10
- a as initStorage,
11
- d as isBoolean,
12
- n as isElement,
13
- p as isImageByMimeType,
14
- r as isMobile,
15
- l as isNumber,
16
- g as isUndefined,
17
- B as isVNode,
18
- b as isWindow,
19
- f as useStorage,
20
- w as watermark
21
- };
package/src/device.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function o(){if(typeof navigator!="undefined"){const i=navigator.userAgent,n=["Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"];let t=!1;for(let e=0;e<n.length;e++)if(i.indexOf(n[e])>0){t=!0;break}return t}return"确保在浏览器环境中"}exports.isMobile=o;
@@ -1 +0,0 @@
1
- "use strict";var s=(r,l,a)=>new Promise((o,c)=>{var e=n=>{try{d(a.next(n))}catch(i){c(i)}},t=n=>{try{d(a.throw(n))}catch(i){c(i)}},d=n=>n.done?o(n.value):Promise.resolve(n.value).then(e,t);d((a=a.apply(r,l)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function u(r){return s(this,null,function*(){return new Promise((l,a)=>{try{const o=document.createElement("script");o.src=r,o.onload=()=>{l()},o.onerror=()=>{a(new Error(`Failed to load script from ${r}`))},document.head.appendChild(o)}catch(o){a(o)}})})}function p(){return s(this,null,function*(){try{if(yield u("https://gosspublic.alicdn.com/aliyun-oss-sdk.min.js"),yield u("https://cdnfile.yaomaitong.cn/cdn/js/aliyun-upload-sdk1.3.1.min.js"),!window.AliyunUpload)throw new Error("SDK 加载成功但未找到 AliyunUpload 对象")}catch(r){throw r}})}function w(r){return s(this,null,function*(){if(typeof window=="undefined")throw new TypeError("VideoUploader 只能在浏览器环境中使用");window.AliyunUpload||(yield p());let l=null,a=null;const o=new window.AliyunUpload.Vod({onUploadProgress:r.onUploadProgress,onUploadTokenExpired:r.onUploadTokenExpired||(()=>{}),onUploadstarted:e=>s(this,null,function*(){var t;try{const{uploadAuth:d,uploadAddress:n,videoId:i}=(yield(t=r.onUploadstarted)==null?void 0:t.call(r,e))||{};d&&n&&i&&o.setUploadAuthAndAddress(e,d,n,i)}catch(d){throw d}}),onUploadSucceed:e=>{l==null||l(e)},onUploadFailed:(e,t,d)=>{a==null||a(new Error(`${d} ${t}`))}});return{uploader:o,upload:e=>s(this,null,function*(){return new Promise((t,d)=>{l=t,a=d;const n=JSON.stringify({Vod:{UserData:{IsShowWaterMark:"false",Priority:"7"}}});o.addFile(e,null,null,null,n),o.startUpload()})})}})}exports.createVideoUploader=w;
@@ -1,90 +0,0 @@
1
- var s = (r, l, a) => new Promise((o, c) => {
2
- var e = (d) => {
3
- try {
4
- n(a.next(d));
5
- } catch (i) {
6
- c(i);
7
- }
8
- }, t = (d) => {
9
- try {
10
- n(a.throw(d));
11
- } catch (i) {
12
- c(i);
13
- }
14
- }, n = (d) => d.done ? o(d.value) : Promise.resolve(d.value).then(e, t);
15
- n((a = a.apply(r, l)).next());
16
- });
17
- function p(r) {
18
- return s(this, null, function* () {
19
- return new Promise((l, a) => {
20
- try {
21
- const o = document.createElement("script");
22
- o.src = r, o.onload = () => {
23
- l();
24
- }, o.onerror = () => {
25
- a(new Error(`Failed to load script from ${r}`));
26
- }, document.head.appendChild(o);
27
- } catch (o) {
28
- a(o);
29
- }
30
- });
31
- });
32
- }
33
- function u() {
34
- return s(this, null, function* () {
35
- try {
36
- if (yield p("https://gosspublic.alicdn.com/aliyun-oss-sdk.min.js"), yield p("https://cdnfile.yaomaitong.cn/cdn/js/aliyun-upload-sdk1.3.1.min.js"), !window.AliyunUpload)
37
- throw new Error("SDK 加载成功但未找到 AliyunUpload 对象");
38
- } catch (r) {
39
- throw r;
40
- }
41
- });
42
- }
43
- function y(r) {
44
- return s(this, null, function* () {
45
- if (typeof window == "undefined")
46
- throw new TypeError("VideoUploader 只能在浏览器环境中使用");
47
- window.AliyunUpload || (yield u());
48
- let l = null, a = null;
49
- const o = new window.AliyunUpload.Vod({
50
- onUploadProgress: r.onUploadProgress,
51
- onUploadTokenExpired: r.onUploadTokenExpired || (() => {
52
- }),
53
- onUploadstarted: (e) => s(this, null, function* () {
54
- var t;
55
- try {
56
- const { uploadAuth: n, uploadAddress: d, videoId: i } = (yield (t = r.onUploadstarted) == null ? void 0 : t.call(r, e)) || {};
57
- n && d && i && o.setUploadAuthAndAddress(e, n, d, i);
58
- } catch (n) {
59
- throw n;
60
- }
61
- }),
62
- onUploadSucceed: (e) => {
63
- l == null || l(e);
64
- },
65
- onUploadFailed: (e, t, n) => {
66
- a == null || a(new Error(`${n} ${t}`));
67
- }
68
- });
69
- return {
70
- uploader: o,
71
- upload: (e) => s(this, null, function* () {
72
- return new Promise((t, n) => {
73
- l = t, a = n;
74
- const d = JSON.stringify({
75
- Vod: {
76
- UserData: {
77
- IsShowWaterMark: "false",
78
- Priority: "7"
79
- }
80
- }
81
- });
82
- o.addFile(e, null, null, null, d), o.startUpload();
83
- });
84
- })
85
- };
86
- });
87
- }
88
- export {
89
- y as createVideoUploader
90
- };
package/src/media.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function t(e){return e.type.startsWith("image/")}exports.isImageByMimeType=t;
package/src/media.js DELETED
@@ -1,6 +0,0 @@
1
- function t(e) {
2
- return e.type.startsWith("image/");
3
- }
4
- export {
5
- t as isImageByMimeType
6
- };
package/src/types.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("vue"),i=e=>e===void 0,o=e=>typeof e=="boolean",t=e=>typeof e=="number";function s(e){return typeof Element=="undefined"?!1:e instanceof Element}function r(e){return e===window}Object.defineProperty(exports,"isVNode",{enumerable:!0,get:()=>n.isVNode});exports.isBoolean=o;exports.isElement=s;exports.isNumber=t;exports.isUndefined=i;exports.isWindow=r;
package/src/types.js DELETED
@@ -1,16 +0,0 @@
1
- import { isVNode as d } from "vue";
2
- const n = (e) => e === void 0, o = (e) => typeof e == "boolean", t = (e) => typeof e == "number";
3
- function i(e) {
4
- return typeof Element == "undefined" ? !1 : e instanceof Element;
5
- }
6
- function f(e) {
7
- return e === window;
8
- }
9
- export {
10
- o as isBoolean,
11
- i as isElement,
12
- t as isNumber,
13
- n as isUndefined,
14
- d as isVNode,
15
- f as isWindow
16
- };