@alibarbar/common 1.0.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.
- package/README.md +338 -0
- package/dist/algorithm.d.mts +66 -0
- package/dist/algorithm.d.ts +66 -0
- package/dist/algorithm.js +44 -0
- package/dist/algorithm.js.map +1 -0
- package/dist/algorithm.mjs +3 -0
- package/dist/algorithm.mjs.map +1 -0
- package/dist/array.d.mts +139 -0
- package/dist/array.d.ts +139 -0
- package/dist/array.js +84 -0
- package/dist/array.js.map +1 -0
- package/dist/array.mjs +3 -0
- package/dist/array.mjs.map +1 -0
- package/dist/chunk-27UDDVLZ.js +259 -0
- package/dist/chunk-27UDDVLZ.js.map +1 -0
- package/dist/chunk-2FFSQ573.mjs +138 -0
- package/dist/chunk-2FFSQ573.mjs.map +1 -0
- package/dist/chunk-4RGXV4SJ.js +106 -0
- package/dist/chunk-4RGXV4SJ.js.map +1 -0
- package/dist/chunk-56W6YECK.js +374 -0
- package/dist/chunk-56W6YECK.js.map +1 -0
- package/dist/chunk-5BGSUGTI.mjs +128 -0
- package/dist/chunk-5BGSUGTI.mjs.map +1 -0
- package/dist/chunk-7E6GELHJ.mjs +302 -0
- package/dist/chunk-7E6GELHJ.mjs.map +1 -0
- package/dist/chunk-7V5UQXIO.js +89 -0
- package/dist/chunk-7V5UQXIO.js.map +1 -0
- package/dist/chunk-A4SWQXX7.mjs +484 -0
- package/dist/chunk-A4SWQXX7.mjs.map +1 -0
- package/dist/chunk-ALDC6LRJ.mjs +85 -0
- package/dist/chunk-ALDC6LRJ.mjs.map +1 -0
- package/dist/chunk-BHCRFURU.js +491 -0
- package/dist/chunk-BHCRFURU.js.map +1 -0
- package/dist/chunk-D7CS5EKF.js +110 -0
- package/dist/chunk-D7CS5EKF.js.map +1 -0
- package/dist/chunk-DYBSRI7V.js +189 -0
- package/dist/chunk-DYBSRI7V.js.map +1 -0
- package/dist/chunk-F3LAGHPG.js +332 -0
- package/dist/chunk-F3LAGHPG.js.map +1 -0
- package/dist/chunk-HLDFI7R2.mjs +175 -0
- package/dist/chunk-HLDFI7R2.mjs.map +1 -0
- package/dist/chunk-HME2N3VY.mjs +354 -0
- package/dist/chunk-HME2N3VY.mjs.map +1 -0
- package/dist/chunk-I3L42475.js +145 -0
- package/dist/chunk-I3L42475.js.map +1 -0
- package/dist/chunk-JBLX27WD.mjs +240 -0
- package/dist/chunk-JBLX27WD.mjs.map +1 -0
- package/dist/chunk-JHZ7M2MR.mjs +133 -0
- package/dist/chunk-JHZ7M2MR.mjs.map +1 -0
- package/dist/chunk-JK2SE3I2.js +100 -0
- package/dist/chunk-JK2SE3I2.js.map +1 -0
- package/dist/chunk-JQZBPAPO.js +157 -0
- package/dist/chunk-JQZBPAPO.js.map +1 -0
- package/dist/chunk-JXYGC2C5.mjs +100 -0
- package/dist/chunk-JXYGC2C5.mjs.map +1 -0
- package/dist/chunk-KGFTD255.js +104 -0
- package/dist/chunk-KGFTD255.js.map +1 -0
- package/dist/chunk-LBHBNPNJ.mjs +148 -0
- package/dist/chunk-LBHBNPNJ.mjs.map +1 -0
- package/dist/chunk-LCXGZISK.js +158 -0
- package/dist/chunk-LCXGZISK.js.map +1 -0
- package/dist/chunk-LF4CILQS.mjs +87 -0
- package/dist/chunk-LF4CILQS.mjs.map +1 -0
- package/dist/chunk-MMR6XQNX.js +98 -0
- package/dist/chunk-MMR6XQNX.js.map +1 -0
- package/dist/chunk-NSSDYX2U.mjs +80 -0
- package/dist/chunk-NSSDYX2U.mjs.map +1 -0
- package/dist/chunk-O3O67R4I.js +143 -0
- package/dist/chunk-O3O67R4I.js.map +1 -0
- package/dist/chunk-OX5PLOWB.js +90 -0
- package/dist/chunk-OX5PLOWB.js.map +1 -0
- package/dist/chunk-PJ7UCTX4.mjs +362 -0
- package/dist/chunk-PJ7UCTX4.mjs.map +1 -0
- package/dist/chunk-QIBE7GVN.mjs +81 -0
- package/dist/chunk-QIBE7GVN.mjs.map +1 -0
- package/dist/chunk-QIOC54LQ.mjs +130 -0
- package/dist/chunk-QIOC54LQ.mjs.map +1 -0
- package/dist/chunk-QV6MIQ7H.mjs +328 -0
- package/dist/chunk-QV6MIQ7H.mjs.map +1 -0
- package/dist/chunk-TQN37HIN.js +94 -0
- package/dist/chunk-TQN37HIN.js.map +1 -0
- package/dist/chunk-XJTZDXSR.mjs +94 -0
- package/dist/chunk-XJTZDXSR.mjs.map +1 -0
- package/dist/chunk-XVUE53T3.js +361 -0
- package/dist/chunk-XVUE53T3.js.map +1 -0
- package/dist/chunk-Y364QIQH.js +139 -0
- package/dist/chunk-Y364QIQH.js.map +1 -0
- package/dist/chunk-YXM6Q4JS.mjs +94 -0
- package/dist/chunk-YXM6Q4JS.mjs.map +1 -0
- package/dist/chunk-ZDMFMUDR.js +309 -0
- package/dist/chunk-ZDMFMUDR.js.map +1 -0
- package/dist/chunk-ZVJ6NQUM.mjs +82 -0
- package/dist/chunk-ZVJ6NQUM.mjs.map +1 -0
- package/dist/color.d.mts +74 -0
- package/dist/color.d.ts +74 -0
- package/dist/color.js +40 -0
- package/dist/color.js.map +1 -0
- package/dist/color.mjs +3 -0
- package/dist/color.mjs.map +1 -0
- package/dist/crypto.d.mts +92 -0
- package/dist/crypto.d.ts +92 -0
- package/dist/crypto.js +60 -0
- package/dist/crypto.js.map +1 -0
- package/dist/crypto.mjs +3 -0
- package/dist/crypto.mjs.map +1 -0
- package/dist/data-structure.d.mts +213 -0
- package/dist/data-structure.d.ts +213 -0
- package/dist/data-structure.js +32 -0
- package/dist/data-structure.js.map +1 -0
- package/dist/data-structure.mjs +3 -0
- package/dist/data-structure.mjs.map +1 -0
- package/dist/date.d.mts +108 -0
- package/dist/date.d.ts +108 -0
- package/dist/date.js +72 -0
- package/dist/date.js.map +1 -0
- package/dist/date.mjs +3 -0
- package/dist/date.mjs.map +1 -0
- package/dist/dom.d.mts +92 -0
- package/dist/dom.d.ts +92 -0
- package/dist/dom.js +56 -0
- package/dist/dom.js.map +1 -0
- package/dist/dom.mjs +3 -0
- package/dist/dom.mjs.map +1 -0
- package/dist/file.d.mts +44 -0
- package/dist/file.d.ts +44 -0
- package/dist/file.js +32 -0
- package/dist/file.js.map +1 -0
- package/dist/file.mjs +3 -0
- package/dist/file.mjs.map +1 -0
- package/dist/i18n.d.mts +77 -0
- package/dist/i18n.d.ts +77 -0
- package/dist/i18n.js +40 -0
- package/dist/i18n.js.map +1 -0
- package/dist/i18n.mjs +3 -0
- package/dist/i18n.mjs.map +1 -0
- package/dist/index.d.mts +155 -0
- package/dist/index.d.ts +155 -0
- package/dist/index.js +839 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +22 -0
- package/dist/index.mjs.map +1 -0
- package/dist/network.d.mts +47 -0
- package/dist/network.d.ts +47 -0
- package/dist/network.js +28 -0
- package/dist/network.js.map +1 -0
- package/dist/network.mjs +3 -0
- package/dist/network.mjs.map +1 -0
- package/dist/number.d.mts +100 -0
- package/dist/number.d.ts +100 -0
- package/dist/number.js +56 -0
- package/dist/number.js.map +1 -0
- package/dist/number.mjs +3 -0
- package/dist/number.mjs.map +1 -0
- package/dist/object.d.mts +132 -0
- package/dist/object.d.ts +132 -0
- package/dist/object.js +80 -0
- package/dist/object.js.map +1 -0
- package/dist/object.mjs +3 -0
- package/dist/object.mjs.map +1 -0
- package/dist/performance.d.mts +85 -0
- package/dist/performance.d.ts +85 -0
- package/dist/performance.js +40 -0
- package/dist/performance.js.map +1 -0
- package/dist/performance.mjs +3 -0
- package/dist/performance.mjs.map +1 -0
- package/dist/storage.d.mts +176 -0
- package/dist/storage.d.ts +176 -0
- package/dist/storage.js +33 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.mjs +4 -0
- package/dist/storage.mjs.map +1 -0
- package/dist/string.d.mts +105 -0
- package/dist/string.d.ts +105 -0
- package/dist/string.js +68 -0
- package/dist/string.js.map +1 -0
- package/dist/string.mjs +3 -0
- package/dist/string.mjs.map +1 -0
- package/dist/tracking.d.mts +182 -0
- package/dist/tracking.d.ts +182 -0
- package/dist/tracking.js +52 -0
- package/dist/tracking.js.map +1 -0
- package/dist/tracking.mjs +3 -0
- package/dist/tracking.mjs.map +1 -0
- package/dist/transform.d.mts +53 -0
- package/dist/transform.d.ts +53 -0
- package/dist/transform.js +32 -0
- package/dist/transform.js.map +1 -0
- package/dist/transform.mjs +3 -0
- package/dist/transform.mjs.map +1 -0
- package/dist/upload-DzlQtUBc.d.mts +202 -0
- package/dist/upload-DzlQtUBc.d.ts +202 -0
- package/dist/upload.d.mts +1 -0
- package/dist/upload.d.ts +1 -0
- package/dist/upload.js +17 -0
- package/dist/upload.js.map +1 -0
- package/dist/upload.mjs +4 -0
- package/dist/upload.mjs.map +1 -0
- package/dist/url.d.mts +82 -0
- package/dist/url.d.ts +82 -0
- package/dist/url.js +44 -0
- package/dist/url.js.map +1 -0
- package/dist/url.mjs +3 -0
- package/dist/url.mjs.map +1 -0
- package/dist/validation.d.mts +83 -0
- package/dist/validation.d.ts +83 -0
- package/dist/validation.js +60 -0
- package/dist/validation.js.map +1 -0
- package/dist/validation.mjs +3 -0
- package/dist/validation.mjs.map +1 -0
- package/package.json +170 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/browser/storage.ts"],"names":["rsaEncrypt","rsaDecrypt","cookie"],"mappings":";;;;;AA2BA,IAAI,aAAA,GAAmC,IAAA;AAMhC,SAAS,kBAAkB,OAAA,EAA2B;AAC3D,EAAA,aAAA,GAAgB,OAAA;AAClB;AAMO,SAAS,iBAAA,GAAuC;AACrD,EAAA,OAAO,aAAA;AACT;AAQA,eAAe,YAAA,CAAa,OAAe,SAAA,EAAuC;AAChF,EAAA,OAAOA,2BAAA,CAAW,OAAO,SAAS,CAAA;AACpC;AAQA,eAAe,YAAA,CAAa,gBAAwB,UAAA,EAAwC;AAC1F,EAAA,IAAI;AACF,IAAA,OAAO,MAAMC,2BAAA,CAAW,cAAA,EAAgB,UAAU,CAAA;AAAA,EACpD,CAAA,CAAA,MAAQ;AAGN,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,MAAM,cAAc,CAAA;AACzB,MAAA,OAAO,cAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AAAA,EACF;AACF;AAKO,IAAM,YAAA,GAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ1B,MAAM,GAAA,CACJ,GAAA,EACA,KAAA,EACA,OAAA,GAGI,EAAC,EACU;AACf,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AACzD,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAU,GAAI,OAAA;AAC9B,IAAA,MAAM,IAAA,GAAuB;AAAA,MAC3B,KAAA;AAAA,MACA,MAAA,EAAQ,MAAA,GAAS,IAAA,CAAK,GAAA,KAAQ,MAAA,GAAS;AAAA,KACzC;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAGnC,MAAA,MAAM,QAAA,GAAW,aAAa,aAAA,EAAe,SAAA;AAC7C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,OAAA,EAAS,QAAQ,CAAA;AACtD,QAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,SAAS,CAAA;AAAA,MAC5C,CAAA,MAAO;AAEL,QAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,aAAkB,CAAA;AACxD,QAAA,MAAM,OAAA,GAAU,aAAa,OAAO,CAAA;AACpC,QAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,OAAO,CAAA;AAAA,MAC1C;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,KAAK,CAAA;AAC9C,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,GAAA,CACJ,GAAA,EACA,OAAA,GAGI,EAAC,EACmB;AACxB,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AACzD,MAAA,OAAO,OAAA,CAAQ,YAAA;AAAA,IACjB;AAEA,IAAA,MAAM,EAAE,YAAA,EAAc,UAAA,EAAW,GAAI,OAAA;AAErC,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AACpD,MAAA,IAAI,CAAC,cAAc,OAAO,YAAA;AAE1B,MAAA,IAAI,YAAA;AAGJ,MAAA,MAAM,QAAA,GAAW,cAAc,aAAA,EAAe,UAAA;AAC9C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI;AACF,UAAA,YAAA,GAAe,MAAM,YAAA,CAAa,YAAA,EAAc,QAAQ,CAAA;AAAA,QAC1D,CAAA,CAAA,MAAQ;AAEN,UAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,aAAkB,CAAA;AACxD,UAAA,IAAI;AACF,YAAA,YAAA,GAAe,aAAa,YAAY,CAAA;AAAA,UAC1C,CAAA,CAAA,MAAQ;AACN,YAAA,OAAO,YAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,aAAkB,CAAA;AACxD,QAAA,IAAI;AACF,UAAA,YAAA,GAAe,aAAa,YAAY,CAAA;AAAA,QAC1C,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,YAAA;AAAA,QACT;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAuB,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AAGpD,MAAA,IAAI,KAAK,MAAA,IAAU,IAAA,CAAK,GAAA,EAAI,GAAI,KAAK,MAAA,EAAQ;AAC3C,QAAA,MAAA,CAAO,YAAA,CAAa,WAAW,GAAG,CAAA;AAClC,QAAA,OAAO,YAAA;AAAA,MACT;AAEA,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,GAAA,EAAmB;AACxB,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AAC3D,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,IACpC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AAAA,IACnD;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AAC3D,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,aAAa,KAAA,EAAM;AAAA,IAC5B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAAA,IAClD;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAA,GAAiB;AACf,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,MAAA,CAAO,YAAA,SAAqB,EAAC;AACnE,IAAA,MAAM,OAAiB,EAAC;AACxB,IAAA,IAAI;AACF,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AACnD,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA;AACrC,QAAA,IAAI,GAAA,EAAK,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,MACxB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,KAAK,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKO,IAAM,cAAA,GAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ5B,MAAM,GAAA,CACJ,GAAA,EACA,KAAA,EACA,OAAA,GAEI,EAAC,EACU;AACf,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,cAAA,EAAgB;AAC3D,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,EAAE,WAAU,GAAI,OAAA;AAEtB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAGpC,MAAA,MAAM,QAAA,GAAW,aAAa,aAAA,EAAe,SAAA;AAC7C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,OAAA,EAAS,QAAQ,CAAA;AACtD,QAAA,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,SAAS,CAAA;AAAA,MAC9C,CAAA,MAAO;AAEL,QAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,aAAkB,CAAA;AACxD,QAAA,MAAM,OAAA,GAAU,aAAa,OAAO,CAAA;AACpC,QAAA,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,OAAO,CAAA;AAAA,MAC5C;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAChD,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,GAAA,CACJ,GAAA,EACA,OAAA,GAGI,EAAC,EACmB;AACxB,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,cAAA,EAAgB;AAC3D,MAAA,OAAO,OAAA,CAAQ,YAAA;AAAA,IACjB;AAEA,IAAA,MAAM,EAAE,YAAA,EAAc,UAAA,EAAW,GAAI,OAAA;AAErC,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA;AACtD,MAAA,IAAI,CAAC,cAAc,OAAO,YAAA;AAE1B,MAAA,IAAI,YAAA;AAGJ,MAAA,MAAM,QAAA,GAAW,cAAc,aAAA,EAAe,UAAA;AAC9C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI;AACF,UAAA,YAAA,GAAe,MAAM,YAAA,CAAa,YAAA,EAAc,QAAQ,CAAA;AAAA,QAC1D,CAAA,CAAA,MAAQ;AAEN,UAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,aAAkB,CAAA;AACxD,UAAA,IAAI;AACF,YAAA,YAAA,GAAe,aAAa,YAAY,CAAA;AAAA,UAC1C,CAAA,CAAA,MAAQ;AACN,YAAA,OAAO,YAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,aAAkB,CAAA;AACxD,QAAA,IAAI;AACF,UAAA,YAAA,GAAe,aAAa,YAAY,CAAA;AAAA,QAC1C,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,YAAA;AAAA,QACT;AAAA,MACF;AAEA,MAAA,OAAO,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,GAAA,EAAmB;AACxB,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,cAAA,EAAgB;AAC7D,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,cAAA,CAAe,WAAW,GAAG,CAAA;AAAA,IACtC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,KAAK,CAAA;AAAA,IACrD;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,cAAA,EAAgB;AAC7D,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,eAAe,KAAA,EAAM;AAAA,IAC9B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,+BAA+B,KAAK,CAAA;AAAA,IACpD;AAAA,EACF;AACF;AAKO,IAAM,MAAA,GAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpB,GAAA,CACE,GAAA,EACA,KAAA,EACA,OAAA,GAMI,EAAC,EACC;AACN,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,SAAA,GAAY,GAAG,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAEvE,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,cACJ,OAAA,CAAQ,OAAA,YAAmB,IAAA,GACvB,OAAA,CAAQ,UACR,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,KAAQ,OAAA,CAAQ,OAAA,GAAU,EAAA,GAAK,EAAA,GAAK,KAAK,GAAI,CAAA;AACjE,MAAA,SAAA,IAAa,CAAA,UAAA,EAAa,WAAA,CAAY,WAAA,EAAa,CAAA,CAAA;AAAA,IACrD;AAEA,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,SAAA,IAAa,CAAA,OAAA,EAAU,QAAQ,IAAI,CAAA,CAAA;AACrD,IAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,SAAA,IAAa,CAAA,SAAA,EAAY,QAAQ,MAAM,CAAA,CAAA;AAC3D,IAAA,IAAI,OAAA,CAAQ,QAAQ,SAAA,IAAa,UAAA;AACjC,IAAA,IAAI,OAAA,CAAQ,QAAA,EAAU,SAAA,IAAa,CAAA,WAAA,EAAc,QAAQ,QAAQ,CAAA,CAAA;AAEjE,IAAA,QAAA,CAAS,MAAA,GAAS,SAAA;AAAA,EACpB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,GAAA,EAAiC;AACnC,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,MAAA;AAE5C,IAAA,MAAM,IAAA,GAAO,mBAAmB,GAAG,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAEzC,IAAA,KAAA,MAAWC,WAAU,OAAA,EAAS;AAC5B,MAAA,MAAM,CAAC,WAAW,WAAW,CAAA,GAAIA,QAAO,IAAA,EAAK,CAAE,MAAM,GAAG,CAAA;AACxD,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAA,OAAO,mBAAmB,WAAW,CAAA;AAAA,MACvC;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,CAAO,GAAA,EAAa,OAAA,GAA8C,EAAC,EAAS;AAC1E,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,EAAA,EAAI;AAAA,MAClB,GAAG,OAAA;AAAA,MACH,OAAA,kBAAS,IAAI,IAAA,CAAK,CAAC;AAAA,KACpB,CAAA;AAAA,EACH,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAiC;AAC/B,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,EAAC;AAE7C,IAAA,MAAM,UAAkC,EAAC;AACzC,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,QAAQ,CAAA,SAAA,KAAa;AAC9C,MAAA,MAAM,CAAC,KAAK,KAAK,CAAA,GAAI,UAAU,IAAA,EAAK,CAAE,MAAM,GAAG,CAAA;AAC/C,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,kBAAA,CAAmB,GAAG,CAAC,CAAA,GAAI,mBAAmB,KAAK,CAAA;AAAA,MAC7D;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAKO,IAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrB,MAAM,GAAA,CACJ,GAAA,EACA,KAAA,EACA,OAAA,GAGI,EAAC,EACU;AACf,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,KAAA,EAAO,OAAO,CAAA;AAAA,IAC5C,CAAA,CAAA,MAAQ;AACN,MAAA,IAAI;AACF,QAAA,MAAM,cAAA,CAAe,IAAI,GAAA,EAAK,KAAA,EAAO,EAAE,SAAA,EAAW,OAAA,CAAQ,WAAW,CAAA;AAAA,MACvE,CAAA,CAAA,MAAQ;AACN,QAAA,OAAA,CAAQ,KAAK,wDAAwD,CAAA;AAAA,MACvE;AAAA,IACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,GAAA,CACJ,GAAA,EACA,OAAA,GAGI,EAAC,EACmB;AACxB,IAAA,MAAM,UAAA,GAAa,MAAM,YAAA,CAAa,GAAA,CAAO,KAAK,OAAO,CAAA;AACzD,IAAA,IAAI,UAAA,KAAe,QAAW,OAAO,UAAA;AAErC,IAAA,MAAM,YAAA,GAAe,MAAM,cAAA,CAAe,GAAA,CAAO,KAAK,OAAO,CAAA;AAC7D,IAAA,OAAO,YAAA,KAAiB,MAAA,GAAY,YAAA,GAAe,OAAA,CAAQ,YAAA;AAAA,EAC7D,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,GAAA,EAAmB;AACxB,IAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,IAAA,cAAA,CAAe,OAAO,GAAG,CAAA;AAAA,EAC3B,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,YAAA,CAAa,KAAA,EAAM;AACnB,IAAA,cAAA,CAAe,KAAA,EAAM;AAAA,EACvB;AACF","file":"chunk-XVUE53T3.js","sourcesContent":["/**\n * 存储工具函数\n */\n\nimport { rsaEncrypt, rsaDecrypt, type RSAKeyPair } from '../helper/crypto';\n\n/**\n * 存储项配置\n */\ninterface StorageItem<T> {\n value: T;\n expiry?: number; // 过期时间戳\n}\n\n/**\n * 存储配置选项\n */\nexport interface StorageOptions {\n /** RSA公钥(用于加密) */\n publicKey?: CryptoKey;\n /** RSA私钥(用于解密) */\n privateKey?: CryptoKey;\n /** 是否启用加密,默认为 true */\n encrypt?: boolean;\n}\n\n// 全局密钥对(可选,用户也可以传入)\nlet globalKeyPair: RSAKeyPair | null = null;\n\n/**\n * 设置全局RSA密钥对\n * @param keyPair - RSA密钥对\n */\nexport function setStorageKeyPair(keyPair: RSAKeyPair): void {\n globalKeyPair = keyPair;\n}\n\n/**\n * 获取全局密钥对\n * @returns 全局密钥对或null\n */\nexport function getStorageKeyPair(): RSAKeyPair | null {\n return globalKeyPair;\n}\n\n/**\n * 加密存储值\n * @param value - 要加密的值\n * @param publicKey - RSA公钥\n * @returns Promise<string> 加密后的Base64字符串\n */\nasync function encryptValue(value: string, publicKey: CryptoKey): Promise<string> {\n return rsaEncrypt(value, publicKey);\n}\n\n/**\n * 解密存储值\n * @param encryptedValue - 加密后的Base64字符串\n * @param privateKey - RSA私钥\n * @returns Promise<string> 解密后的字符串\n */\nasync function decryptValue(encryptedValue: string, privateKey: CryptoKey): Promise<string> {\n try {\n return await rsaDecrypt(encryptedValue, privateKey);\n } catch {\n // 如果解密失败,可能是旧数据(未加密)或格式错误\n // 尝试直接解析 JSON(向后兼容)\n try {\n JSON.parse(encryptedValue);\n return encryptedValue; // 如果是有效的 JSON,返回原值\n } catch {\n throw new Error('Failed to decrypt storage value');\n }\n }\n}\n\n/**\n * localStorage封装(支持过期时间和RSA加密)\n */\nexport const localStorage = {\n /**\n * 设置值\n * @param key - 键\n * @param value - 值\n * @param options - 选项(过期时间、密钥等)\n * @returns Promise<void>\n */\n async set<T>(\n key: string,\n value: T,\n options: {\n expiry?: number;\n publicKey?: CryptoKey;\n } = {}\n ): Promise<void> {\n if (typeof window === 'undefined' || !window.localStorage) {\n throw new Error('localStorage is not available');\n }\n\n const { expiry, publicKey } = options;\n const item: StorageItem<T> = {\n value,\n expiry: expiry ? Date.now() + expiry : undefined,\n };\n\n try {\n const jsonStr = JSON.stringify(item);\n\n // 如果提供了公钥或全局密钥对存在,使用RSA加密\n const keyToUse = publicKey || globalKeyPair?.publicKey;\n if (keyToUse) {\n const encrypted = await encryptValue(jsonStr, keyToUse);\n window.localStorage.setItem(key, encrypted);\n } else {\n // 如果没有密钥,使用Base64编码(向后兼容)\n const { base64Encode } = await import('../helper/crypto');\n const encoded = base64Encode(jsonStr);\n window.localStorage.setItem(key, encoded);\n }\n } catch (error) {\n console.error('localStorage.set error:', error);\n throw error;\n }\n },\n\n /**\n * 获取值\n * @param key - 键\n * @param options - 选项(默认值、私钥等)\n * @returns Promise<T | undefined> 值或默认值\n */\n async get<T>(\n key: string,\n options: {\n defaultValue?: T;\n privateKey?: CryptoKey;\n } = {}\n ): Promise<T | undefined> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return options.defaultValue;\n }\n\n const { defaultValue, privateKey } = options;\n\n try {\n const encryptedStr = window.localStorage.getItem(key);\n if (!encryptedStr) return defaultValue;\n\n let decryptedStr: string;\n\n // 如果提供了私钥或全局密钥对存在,使用RSA解密\n const keyToUse = privateKey || globalKeyPair?.privateKey;\n if (keyToUse) {\n try {\n decryptedStr = await decryptValue(encryptedStr, keyToUse);\n } catch {\n // RSA解密失败,尝试Base64解码(向后兼容)\n const { base64Decode } = await import('../helper/crypto');\n try {\n decryptedStr = base64Decode(encryptedStr);\n } catch {\n return defaultValue;\n }\n }\n } else {\n // 如果没有密钥,尝试Base64解码\n const { base64Decode } = await import('../helper/crypto');\n try {\n decryptedStr = base64Decode(encryptedStr);\n } catch {\n return defaultValue;\n }\n }\n\n const item: StorageItem<T> = JSON.parse(decryptedStr);\n\n // 检查是否过期\n if (item.expiry && Date.now() > item.expiry) {\n window.localStorage.removeItem(key);\n return defaultValue;\n }\n\n return item.value;\n } catch {\n return defaultValue;\n }\n },\n\n /**\n * 移除值\n * @param key - 键\n */\n remove(key: string): void {\n if (typeof window === 'undefined' || !window.localStorage) return;\n try {\n window.localStorage.removeItem(key);\n } catch (error) {\n console.error('localStorage.remove error:', error);\n }\n },\n\n /**\n * 清空所有值\n */\n clear(): void {\n if (typeof window === 'undefined' || !window.localStorage) return;\n try {\n window.localStorage.clear();\n } catch (error) {\n console.error('localStorage.clear error:', error);\n }\n },\n\n /**\n * 获取所有键\n * @returns 键数组\n */\n keys(): string[] {\n if (typeof window === 'undefined' || !window.localStorage) return [];\n const keys: string[] = [];\n try {\n for (let i = 0; i < window.localStorage.length; i++) {\n const key = window.localStorage.key(i);\n if (key) keys.push(key);\n }\n } catch (error) {\n console.error('localStorage.keys error:', error);\n }\n return keys;\n },\n};\n\n/**\n * sessionStorage封装(支持RSA加密)\n */\nexport const sessionStorage = {\n /**\n * 设置值\n * @param key - 键\n * @param value - 值\n * @param options - 选项(公钥等)\n * @returns Promise<void>\n */\n async set<T>(\n key: string,\n value: T,\n options: {\n publicKey?: CryptoKey;\n } = {}\n ): Promise<void> {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n throw new Error('sessionStorage is not available');\n }\n\n const { publicKey } = options;\n\n try {\n const jsonStr = JSON.stringify(value);\n\n // 如果提供了公钥或全局密钥对存在,使用RSA加密\n const keyToUse = publicKey || globalKeyPair?.publicKey;\n if (keyToUse) {\n const encrypted = await encryptValue(jsonStr, keyToUse);\n window.sessionStorage.setItem(key, encrypted);\n } else {\n // 如果没有密钥,使用Base64编码(向后兼容)\n const { base64Encode } = await import('../helper/crypto');\n const encoded = base64Encode(jsonStr);\n window.sessionStorage.setItem(key, encoded);\n }\n } catch (error) {\n console.error('sessionStorage.set error:', error);\n throw error;\n }\n },\n\n /**\n * 获取值\n * @param key - 键\n * @param options - 选项(默认值、私钥等)\n * @returns Promise<T | undefined> 值或默认值\n */\n async get<T>(\n key: string,\n options: {\n defaultValue?: T;\n privateKey?: CryptoKey;\n } = {}\n ): Promise<T | undefined> {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return options.defaultValue;\n }\n\n const { defaultValue, privateKey } = options;\n\n try {\n const encryptedStr = window.sessionStorage.getItem(key);\n if (!encryptedStr) return defaultValue;\n\n let decryptedStr: string;\n\n // 如果提供了私钥或全局密钥对存在,使用RSA解密\n const keyToUse = privateKey || globalKeyPair?.privateKey;\n if (keyToUse) {\n try {\n decryptedStr = await decryptValue(encryptedStr, keyToUse);\n } catch {\n // RSA解密失败,尝试Base64解码(向后兼容)\n const { base64Decode } = await import('../helper/crypto');\n try {\n decryptedStr = base64Decode(encryptedStr);\n } catch {\n return defaultValue;\n }\n }\n } else {\n // 如果没有密钥,尝试Base64解码\n const { base64Decode } = await import('../helper/crypto');\n try {\n decryptedStr = base64Decode(encryptedStr);\n } catch {\n return defaultValue;\n }\n }\n\n return JSON.parse(decryptedStr) as T;\n } catch {\n return defaultValue;\n }\n },\n\n /**\n * 移除值\n * @param key - 键\n */\n remove(key: string): void {\n if (typeof window === 'undefined' || !window.sessionStorage) return;\n try {\n window.sessionStorage.removeItem(key);\n } catch (error) {\n console.error('sessionStorage.remove error:', error);\n }\n },\n\n /**\n * 清空所有值\n */\n clear(): void {\n if (typeof window === 'undefined' || !window.sessionStorage) return;\n try {\n window.sessionStorage.clear();\n } catch (error) {\n console.error('sessionStorage.clear error:', error);\n }\n },\n};\n\n/**\n * Cookie操作封装\n */\nexport const cookie = {\n /**\n * 设置Cookie\n * @param key - 键\n * @param value - 值\n * @param options - Cookie选项\n */\n set(\n key: string,\n value: string,\n options: {\n expires?: number | Date; // 过期时间(天数或Date对象)\n path?: string;\n domain?: string;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n } = {}\n ): void {\n if (typeof document === 'undefined') {\n throw new Error('document is not available');\n }\n\n let cookieStr = `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n const expiresDate =\n options.expires instanceof Date\n ? options.expires\n : new Date(Date.now() + options.expires * 24 * 60 * 60 * 1000);\n cookieStr += `; expires=${expiresDate.toUTCString()}`;\n }\n\n if (options.path) cookieStr += `; path=${options.path}`;\n if (options.domain) cookieStr += `; domain=${options.domain}`;\n if (options.secure) cookieStr += '; secure';\n if (options.sameSite) cookieStr += `; sameSite=${options.sameSite}`;\n\n document.cookie = cookieStr;\n },\n\n /**\n * 获取Cookie\n * @param key - 键\n * @returns Cookie值\n */\n get(key: string): string | undefined {\n if (typeof document === 'undefined') return undefined;\n\n const name = encodeURIComponent(key);\n const cookies = document.cookie.split(';');\n\n for (const cookie of cookies) {\n const [cookieKey, cookieValue] = cookie.trim().split('=');\n if (cookieKey === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n\n return undefined;\n },\n\n /**\n * 移除Cookie\n * @param key - 键\n * @param options - Cookie选项\n */\n remove(key: string, options: { path?: string; domain?: string } = {}): void {\n cookie.set(key, '', {\n ...options,\n expires: new Date(0),\n });\n },\n\n /**\n * 获取所有Cookie\n * @returns Cookie对象\n */\n getAll(): Record<string, string> {\n if (typeof document === 'undefined') return {};\n\n const cookies: Record<string, string> = {};\n document.cookie.split(';').forEach(cookieStr => {\n const [key, value] = cookieStr.trim().split('=');\n if (key && value) {\n cookies[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n });\n\n return cookies;\n },\n};\n\n/**\n * 统一存储接口(自动选择存储方式,支持RSA加密)\n */\nexport const storage = {\n /**\n * 设置值(优先使用localStorage,失败则使用sessionStorage)\n * @param key - 键\n * @param value - 值\n * @param options - 选项(过期时间、公钥等)\n * @returns Promise<void>\n */\n async set<T>(\n key: string,\n value: T,\n options: {\n expiry?: number;\n publicKey?: CryptoKey;\n } = {}\n ): Promise<void> {\n try {\n await localStorage.set(key, value, options);\n } catch {\n try {\n await sessionStorage.set(key, value, { publicKey: options.publicKey });\n } catch {\n console.warn('Both localStorage and sessionStorage are not available');\n }\n }\n },\n\n /**\n * 获取值\n * @param key - 键\n * @param options - 选项(默认值、私钥等)\n * @returns Promise<T | undefined> 值或默认值\n */\n async get<T>(\n key: string,\n options: {\n defaultValue?: T;\n privateKey?: CryptoKey;\n } = {}\n ): Promise<T | undefined> {\n const localValue = await localStorage.get<T>(key, options);\n if (localValue !== undefined) return localValue;\n\n const sessionValue = await sessionStorage.get<T>(key, options);\n return sessionValue !== undefined ? sessionValue : options.defaultValue;\n },\n\n /**\n * 移除值\n * @param key - 键\n */\n remove(key: string): void {\n localStorage.remove(key);\n sessionStorage.remove(key);\n },\n\n /**\n * 清空所有值\n */\n clear(): void {\n localStorage.clear();\n sessionStorage.clear();\n },\n};\n"]}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/format/color.ts
|
|
4
|
+
function hexToRgb(hex) {
|
|
5
|
+
const cleanHex = hex.replace("#", "");
|
|
6
|
+
if (!/^[0-9A-Fa-f]{6}$/.test(cleanHex)) {
|
|
7
|
+
throw new Error("Invalid hex color format");
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
r: parseInt(cleanHex.substring(0, 2), 16),
|
|
11
|
+
g: parseInt(cleanHex.substring(2, 4), 16),
|
|
12
|
+
b: parseInt(cleanHex.substring(4, 6), 16)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function rgbToHex(rgb) {
|
|
16
|
+
let r;
|
|
17
|
+
let g;
|
|
18
|
+
let b;
|
|
19
|
+
if (typeof rgb === "string") {
|
|
20
|
+
const match = rgb.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
|
|
21
|
+
if (!match) {
|
|
22
|
+
throw new Error("Invalid RGB string format");
|
|
23
|
+
}
|
|
24
|
+
r = parseInt(match[1], 10);
|
|
25
|
+
g = parseInt(match[2], 10);
|
|
26
|
+
b = parseInt(match[3], 10);
|
|
27
|
+
} else {
|
|
28
|
+
r = rgb.r;
|
|
29
|
+
g = rgb.g;
|
|
30
|
+
b = rgb.b;
|
|
31
|
+
}
|
|
32
|
+
r = Math.max(0, Math.min(255, Math.round(r)));
|
|
33
|
+
g = Math.max(0, Math.min(255, Math.round(g)));
|
|
34
|
+
b = Math.max(0, Math.min(255, Math.round(b)));
|
|
35
|
+
return `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`.toUpperCase();
|
|
36
|
+
}
|
|
37
|
+
function rgbToHsl(rgb) {
|
|
38
|
+
const r = rgb.r / 255;
|
|
39
|
+
const g = rgb.g / 255;
|
|
40
|
+
const b = rgb.b / 255;
|
|
41
|
+
const max = Math.max(r, g, b);
|
|
42
|
+
const min = Math.min(r, g, b);
|
|
43
|
+
const delta = max - min;
|
|
44
|
+
let h = 0;
|
|
45
|
+
let s = 0;
|
|
46
|
+
const l = (max + min) / 2;
|
|
47
|
+
if (delta !== 0) {
|
|
48
|
+
s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);
|
|
49
|
+
if (max === r) {
|
|
50
|
+
h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;
|
|
51
|
+
} else if (max === g) {
|
|
52
|
+
h = ((b - r) / delta + 2) / 6;
|
|
53
|
+
} else {
|
|
54
|
+
h = ((r - g) / delta + 4) / 6;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
h: Math.round(h * 360),
|
|
59
|
+
s: Math.round(s * 100),
|
|
60
|
+
l: Math.round(l * 100)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function hslToRgb(hsl) {
|
|
64
|
+
const h = hsl.h / 360;
|
|
65
|
+
const s = hsl.s / 100;
|
|
66
|
+
const l = hsl.l / 100;
|
|
67
|
+
let r;
|
|
68
|
+
let g;
|
|
69
|
+
let b;
|
|
70
|
+
if (s === 0) {
|
|
71
|
+
r = g = b = l;
|
|
72
|
+
} else {
|
|
73
|
+
const hue2rgb = (p2, q2, t) => {
|
|
74
|
+
if (t < 0) t += 1;
|
|
75
|
+
if (t > 1) t -= 1;
|
|
76
|
+
if (t < 1 / 6) return p2 + (q2 - p2) * 6 * t;
|
|
77
|
+
if (t < 1 / 2) return q2;
|
|
78
|
+
if (t < 2 / 3) return p2 + (q2 - p2) * (2 / 3 - t) * 6;
|
|
79
|
+
return p2;
|
|
80
|
+
};
|
|
81
|
+
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
82
|
+
const p = 2 * l - q;
|
|
83
|
+
r = hue2rgb(p, q, h + 1 / 3);
|
|
84
|
+
g = hue2rgb(p, q, h);
|
|
85
|
+
b = hue2rgb(p, q, h - 1 / 3);
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
r: Math.round(r * 255),
|
|
89
|
+
g: Math.round(g * 255),
|
|
90
|
+
b: Math.round(b * 255)
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function lighten(color, amount) {
|
|
94
|
+
const rgb = typeof color === "string" ? hexToRgb(color) : color;
|
|
95
|
+
const hsl = rgbToHsl(rgb);
|
|
96
|
+
hsl.l = Math.min(100, hsl.l + amount);
|
|
97
|
+
return rgbToHex(hslToRgb(hsl));
|
|
98
|
+
}
|
|
99
|
+
function darken(color, amount) {
|
|
100
|
+
const rgb = typeof color === "string" ? hexToRgb(color) : color;
|
|
101
|
+
const hsl = rgbToHsl(rgb);
|
|
102
|
+
hsl.l = Math.max(0, hsl.l - amount);
|
|
103
|
+
return rgbToHex(hslToRgb(hsl));
|
|
104
|
+
}
|
|
105
|
+
function mix(color1, color2, ratio) {
|
|
106
|
+
const rgb1 = hexToRgb(color1);
|
|
107
|
+
const rgb2 = hexToRgb(color2);
|
|
108
|
+
const r = Math.round(rgb1.r * (1 - ratio) + rgb2.r * ratio);
|
|
109
|
+
const g = Math.round(rgb1.g * (1 - ratio) + rgb2.g * ratio);
|
|
110
|
+
const b = Math.round(rgb1.b * (1 - ratio) + rgb2.b * ratio);
|
|
111
|
+
return rgbToHex({ r, g, b });
|
|
112
|
+
}
|
|
113
|
+
function contrast(color1, color2) {
|
|
114
|
+
const rgb1 = hexToRgb(color1);
|
|
115
|
+
const rgb2 = hexToRgb(color2);
|
|
116
|
+
const getLuminance = (rgb) => {
|
|
117
|
+
const normalize = (value) => {
|
|
118
|
+
value = value / 255;
|
|
119
|
+
return value <= 0.03928 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4);
|
|
120
|
+
};
|
|
121
|
+
return 0.2126 * normalize(rgb.r) + 0.7152 * normalize(rgb.g) + 0.0722 * normalize(rgb.b);
|
|
122
|
+
};
|
|
123
|
+
const lum1 = getLuminance(rgb1);
|
|
124
|
+
const lum2 = getLuminance(rgb2);
|
|
125
|
+
const lighter = Math.max(lum1, lum2);
|
|
126
|
+
const darker = Math.min(lum1, lum2);
|
|
127
|
+
return (lighter + 0.05) / (darker + 0.05);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
exports.contrast = contrast;
|
|
131
|
+
exports.darken = darken;
|
|
132
|
+
exports.hexToRgb = hexToRgb;
|
|
133
|
+
exports.hslToRgb = hslToRgb;
|
|
134
|
+
exports.lighten = lighten;
|
|
135
|
+
exports.mix = mix;
|
|
136
|
+
exports.rgbToHex = rgbToHex;
|
|
137
|
+
exports.rgbToHsl = rgbToHsl;
|
|
138
|
+
//# sourceMappingURL=chunk-Y364QIQH.js.map
|
|
139
|
+
//# sourceMappingURL=chunk-Y364QIQH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/format/color.ts"],"names":["p","q"],"mappings":"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","file":"chunk-Y364QIQH.js","sourcesContent":["/**\n * 颜色工具函数\n */\n\n/**\n * RGB颜色类型\n */\nexport interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * HSL颜色类型\n */\nexport interface HSL {\n h: number; // 色相 (0-360)\n s: number; // 饱和度 (0-100)\n l: number; // 亮度 (0-100)\n}\n\n/**\n * 十六进制转RGB\n * @param hex - 十六进制颜色值(如 '#FF0000' 或 'FF0000')\n * @returns RGB对象\n */\nexport function hexToRgb(hex: string): RGB {\n // 移除 # 号\n const cleanHex = hex.replace('#', '');\n\n // 验证格式\n if (!/^[0-9A-Fa-f]{6}$/.test(cleanHex)) {\n throw new Error('Invalid hex color format');\n }\n\n return {\n r: parseInt(cleanHex.substring(0, 2), 16),\n g: parseInt(cleanHex.substring(2, 4), 16),\n b: parseInt(cleanHex.substring(4, 6), 16),\n };\n}\n\n/**\n * RGB转十六进制\n * @param rgb - RGB对象或字符串(如 'rgb(255, 0, 0)')\n * @returns 十六进制颜色值(如 '#FF0000')\n */\nexport function rgbToHex(rgb: RGB | string): string {\n let r: number;\n let g: number;\n let b: number;\n\n if (typeof rgb === 'string') {\n const match = rgb.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (!match) {\n throw new Error('Invalid RGB string format');\n }\n r = parseInt(match[1], 10);\n g = parseInt(match[2], 10);\n b = parseInt(match[3], 10);\n } else {\n r = rgb.r;\n g = rgb.g;\n b = rgb.b;\n }\n\n // 确保值在有效范围内\n r = Math.max(0, Math.min(255, Math.round(r)));\n g = Math.max(0, Math.min(255, Math.round(g)));\n b = Math.max(0, Math.min(255, Math.round(b)));\n\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`.toUpperCase();\n}\n\n/**\n * RGB转HSL\n * @param rgb - RGB对象\n * @returns HSL对象\n */\nexport function rgbToHsl(rgb: RGB): HSL {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (delta !== 0) {\n s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n if (max === r) {\n h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n h = ((b - r) / delta + 2) / 6;\n } else {\n h = ((r - g) / delta + 4) / 6;\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\n/**\n * HSL转RGB\n * @param hsl - HSL对象\n * @returns RGB对象\n */\nexport function hslToRgb(hsl: HSL): RGB {\n const h = hsl.h / 360;\n const s = hsl.s / 100;\n const l = hsl.l / 100;\n\n let r: number;\n let g: number;\n let b: number;\n\n if (s === 0) {\n r = g = b = l; // 无色彩\n } else {\n const hue2rgb = (p: number, q: number, t: number): number => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n}\n\n/**\n * 颜色变亮\n * @param color - 十六进制颜色值或RGB对象\n * @param amount - 变亮程度(0-100)\n * @returns 新的十六进制颜色值\n */\nexport function lighten(color: string | RGB, amount: number): string {\n const rgb = typeof color === 'string' ? hexToRgb(color) : color;\n const hsl = rgbToHsl(rgb);\n\n hsl.l = Math.min(100, hsl.l + amount);\n\n return rgbToHex(hslToRgb(hsl));\n}\n\n/**\n * 颜色变暗\n * @param color - 十六进制颜色值或RGB对象\n * @param amount - 变暗程度(0-100)\n * @returns 新的十六进制颜色值\n */\nexport function darken(color: string | RGB, amount: number): string {\n const rgb = typeof color === 'string' ? hexToRgb(color) : color;\n const hsl = rgbToHsl(rgb);\n\n hsl.l = Math.max(0, hsl.l - amount);\n\n return rgbToHex(hslToRgb(hsl));\n}\n\n/**\n * 颜色混合\n * @param color1 - 第一个颜色(十六进制)\n * @param color2 - 第二个颜色(十六进制)\n * @param ratio - 混合比例(0-1),0表示完全使用color1,1表示完全使用color2\n * @returns 混合后的十六进制颜色值\n */\nexport function mix(color1: string, color2: string, ratio: number): string {\n const rgb1 = hexToRgb(color1);\n const rgb2 = hexToRgb(color2);\n\n const r = Math.round(rgb1.r * (1 - ratio) + rgb2.r * ratio);\n const g = Math.round(rgb1.g * (1 - ratio) + rgb2.g * ratio);\n const b = Math.round(rgb1.b * (1 - ratio) + rgb2.b * ratio);\n\n return rgbToHex({ r, g, b });\n}\n\n/**\n * 计算颜色对比度(WCAG标准)\n * @param color1 - 第一个颜色(十六进制)\n * @param color2 - 第二个颜色(十六进制)\n * @returns 对比度比值(1-21,4.5以上为可接受对比度)\n */\nexport function contrast(color1: string, color2: string): number {\n const rgb1 = hexToRgb(color1);\n const rgb2 = hexToRgb(color2);\n\n // 计算相对亮度\n const getLuminance = (rgb: RGB): number => {\n const normalize = (value: number): number => {\n value = value / 255;\n return value <= 0.03928 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4);\n };\n\n return 0.2126 * normalize(rgb.r) + 0.7152 * normalize(rgb.g) + 0.0722 * normalize(rgb.b);\n };\n\n const lum1 = getLuminance(rgb1);\n const lum2 = getLuminance(rgb2);\n\n const lighter = Math.max(lum1, lum2);\n const darker = Math.min(lum1, lum2);\n\n return (lighter + 0.05) / (darker + 0.05);\n}\n"]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// src/format/url.ts
|
|
2
|
+
function parseUrl(url) {
|
|
3
|
+
try {
|
|
4
|
+
const urlObj = new URL(url);
|
|
5
|
+
return {
|
|
6
|
+
protocol: urlObj.protocol,
|
|
7
|
+
host: urlObj.host,
|
|
8
|
+
hostname: urlObj.hostname,
|
|
9
|
+
port: urlObj.port,
|
|
10
|
+
pathname: urlObj.pathname,
|
|
11
|
+
search: urlObj.search,
|
|
12
|
+
hash: urlObj.hash,
|
|
13
|
+
origin: urlObj.origin
|
|
14
|
+
};
|
|
15
|
+
} catch {
|
|
16
|
+
throw new Error(`Invalid URL: ${url}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function buildUrl(parts) {
|
|
20
|
+
const { protocol = "https:", host = "", pathname = "/", search = "", hash = "" } = parts;
|
|
21
|
+
return `${protocol}//${host}${pathname}${search}${hash}`;
|
|
22
|
+
}
|
|
23
|
+
function getQueryParams(url) {
|
|
24
|
+
const searchParams = url ? new URL(url).searchParams : new URLSearchParams(window.location.search);
|
|
25
|
+
const params = {};
|
|
26
|
+
searchParams.forEach((value, key) => {
|
|
27
|
+
params[key] = value;
|
|
28
|
+
});
|
|
29
|
+
return params;
|
|
30
|
+
}
|
|
31
|
+
function setQueryParams(url, params) {
|
|
32
|
+
try {
|
|
33
|
+
const urlObj = new URL(url);
|
|
34
|
+
Object.keys(params).forEach((key) => {
|
|
35
|
+
urlObj.searchParams.set(key, String(params[key]));
|
|
36
|
+
});
|
|
37
|
+
return urlObj.toString();
|
|
38
|
+
} catch {
|
|
39
|
+
throw new Error(`Invalid URL: ${url}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function removeQueryParams(url, keys) {
|
|
43
|
+
try {
|
|
44
|
+
const urlObj = new URL(url);
|
|
45
|
+
keys.forEach((key) => {
|
|
46
|
+
urlObj.searchParams.delete(key);
|
|
47
|
+
});
|
|
48
|
+
return urlObj.toString();
|
|
49
|
+
} catch {
|
|
50
|
+
throw new Error(`Invalid URL: ${url}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function updateQueryParams(url, params) {
|
|
54
|
+
try {
|
|
55
|
+
const urlObj = new URL(url);
|
|
56
|
+
Object.keys(params).forEach((key) => {
|
|
57
|
+
const value = params[key];
|
|
58
|
+
if (value === null) {
|
|
59
|
+
urlObj.searchParams.delete(key);
|
|
60
|
+
} else {
|
|
61
|
+
urlObj.searchParams.set(key, String(value));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return urlObj.toString();
|
|
65
|
+
} catch {
|
|
66
|
+
throw new Error(`Invalid URL: ${url}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function isAbsoluteUrl(url) {
|
|
70
|
+
try {
|
|
71
|
+
new URL(url);
|
|
72
|
+
return true;
|
|
73
|
+
} catch {
|
|
74
|
+
return /^https?:\/\//i.test(url);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function joinUrl(baseUrl, ...paths) {
|
|
78
|
+
const base = baseUrl.replace(/\/+$/, "");
|
|
79
|
+
const joinedPaths = paths.map((path) => path.replace(/^\/+|\/+$/g, "")).filter((path) => path.length > 0).join("/");
|
|
80
|
+
return `${base}/${joinedPaths}`;
|
|
81
|
+
}
|
|
82
|
+
function normalizeUrl(url) {
|
|
83
|
+
try {
|
|
84
|
+
const urlObj = new URL(url);
|
|
85
|
+
urlObj.pathname = urlObj.pathname.replace(/\/+/g, "/");
|
|
86
|
+
return urlObj.toString();
|
|
87
|
+
} catch {
|
|
88
|
+
return url;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export { buildUrl, getQueryParams, isAbsoluteUrl, joinUrl, normalizeUrl, parseUrl, removeQueryParams, setQueryParams, updateQueryParams };
|
|
93
|
+
//# sourceMappingURL=chunk-YXM6Q4JS.mjs.map
|
|
94
|
+
//# sourceMappingURL=chunk-YXM6Q4JS.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/format/url.ts"],"names":[],"mappings":"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","file":"chunk-YXM6Q4JS.mjs","sourcesContent":["/**\n * URL工具函数\n */\n\n/**\n * URL解析结果\n */\nexport interface ParsedUrl {\n protocol: string;\n host: string;\n hostname: string;\n port: string;\n pathname: string;\n search: string;\n hash: string;\n origin: string;\n}\n\n/**\n * URL解析\n * @param url - URL字符串\n * @returns 解析后的URL对象\n */\nexport function parseUrl(url: string): ParsedUrl {\n try {\n const urlObj = new URL(url);\n return {\n protocol: urlObj.protocol,\n host: urlObj.host,\n hostname: urlObj.hostname,\n port: urlObj.port,\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n origin: urlObj.origin,\n };\n } catch {\n throw new Error(`Invalid URL: ${url}`);\n }\n}\n\n/**\n * URL构建\n * @param parts - URL组成部分\n * @returns 构建后的URL字符串\n */\nexport function buildUrl(parts: {\n protocol?: string;\n host?: string;\n pathname?: string;\n search?: string;\n hash?: string;\n}): string {\n const { protocol = 'https:', host = '', pathname = '/', search = '', hash = '' } = parts;\n return `${protocol}//${host}${pathname}${search}${hash}`;\n}\n\n/**\n * 获取查询参数\n * @param url - URL字符串,默认为当前页面URL\n * @returns 查询参数对象\n */\nexport function getQueryParams(url?: string): Record<string, string> {\n const searchParams = url\n ? new URL(url).searchParams\n : new URLSearchParams(window.location.search);\n const params: Record<string, string> = {};\n searchParams.forEach((value, key) => {\n params[key] = value;\n });\n return params;\n}\n\n/**\n * 设置查询参数\n * @param url - URL字符串\n * @param params - 查询参数对象\n * @returns 设置后的URL字符串\n */\nexport function setQueryParams(\n url: string,\n params: Record<string, string | number | boolean>\n): string {\n try {\n const urlObj = new URL(url);\n Object.keys(params).forEach(key => {\n urlObj.searchParams.set(key, String(params[key]));\n });\n return urlObj.toString();\n } catch {\n throw new Error(`Invalid URL: ${url}`);\n }\n}\n\n/**\n * 移除查询参数\n * @param url - URL字符串\n * @param keys - 要移除的查询参数键数组\n * @returns 移除后的URL字符串\n */\nexport function removeQueryParams(url: string, keys: string[]): string {\n try {\n const urlObj = new URL(url);\n keys.forEach(key => {\n urlObj.searchParams.delete(key);\n });\n return urlObj.toString();\n } catch {\n throw new Error(`Invalid URL: ${url}`);\n }\n}\n\n/**\n * 更新查询参数\n * @param url - URL字符串\n * @param params - 要更新的查询参数对象\n * @returns 更新后的URL字符串\n */\nexport function updateQueryParams(\n url: string,\n params: Record<string, string | number | boolean | null>\n): string {\n try {\n const urlObj = new URL(url);\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (value === null) {\n urlObj.searchParams.delete(key);\n } else {\n urlObj.searchParams.set(key, String(value));\n }\n });\n return urlObj.toString();\n } catch {\n throw new Error(`Invalid URL: ${url}`);\n }\n}\n\n/**\n * 判断是否为绝对URL\n * @param url - URL字符串\n * @returns 是否为绝对URL\n */\nexport function isAbsoluteUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return /^https?:\\/\\//i.test(url);\n }\n}\n\n/**\n * URL拼接\n * @param baseUrl - 基础URL\n * @param ...paths - 路径片段\n * @returns 拼接后的URL\n */\nexport function joinUrl(baseUrl: string, ...paths: string[]): string {\n const base = baseUrl.replace(/\\/+$/, '');\n const joinedPaths = paths\n .map(path => path.replace(/^\\/+|\\/+$/g, ''))\n .filter(path => path.length > 0)\n .join('/');\n return `${base}/${joinedPaths}`;\n}\n\n/**\n * URL标准化\n * @param url - URL字符串\n * @returns 标准化后的URL\n */\nexport function normalizeUrl(url: string): string {\n try {\n const urlObj = new URL(url);\n urlObj.pathname = urlObj.pathname.replace(/\\/+/g, '/');\n return urlObj.toString();\n } catch {\n return url;\n }\n}\n"]}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/data/transform.ts
|
|
4
|
+
function csvToJson(csv, options = {}) {
|
|
5
|
+
const { delimiter = ",", headers, skipEmptyLines = true } = options;
|
|
6
|
+
const lines = csv.split(/\r?\n/).filter((line) => {
|
|
7
|
+
if (skipEmptyLines) {
|
|
8
|
+
return line.trim().length > 0;
|
|
9
|
+
}
|
|
10
|
+
return true;
|
|
11
|
+
});
|
|
12
|
+
if (lines.length === 0) return [];
|
|
13
|
+
const headerRow = headers || lines[0].split(delimiter).map((h) => h.trim());
|
|
14
|
+
const dataLines = headers ? lines : lines.slice(1);
|
|
15
|
+
return dataLines.map((line) => {
|
|
16
|
+
const values = parseCsvLine(line, delimiter);
|
|
17
|
+
const obj = {};
|
|
18
|
+
headerRow.forEach((header, index) => {
|
|
19
|
+
const val = values[index];
|
|
20
|
+
obj[header] = val !== void 0 ? val : "";
|
|
21
|
+
});
|
|
22
|
+
return obj;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function parseCsvLine(line, delimiter) {
|
|
26
|
+
const result = [];
|
|
27
|
+
let current = "";
|
|
28
|
+
let inQuotes = false;
|
|
29
|
+
for (let i = 0; i < line.length; i++) {
|
|
30
|
+
const char = line[i];
|
|
31
|
+
const nextChar = line[i + 1];
|
|
32
|
+
if (char === '"') {
|
|
33
|
+
if (inQuotes && nextChar === '"') {
|
|
34
|
+
current += '"';
|
|
35
|
+
i++;
|
|
36
|
+
} else {
|
|
37
|
+
inQuotes = !inQuotes;
|
|
38
|
+
}
|
|
39
|
+
} else if (char === delimiter && !inQuotes) {
|
|
40
|
+
result.push(current.trim());
|
|
41
|
+
current = "";
|
|
42
|
+
} else {
|
|
43
|
+
current += char;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
result.push(current.trim());
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
function jsonToCsv(data, options = {}) {
|
|
50
|
+
const { delimiter = ",", headers, includeHeaders = true } = options;
|
|
51
|
+
if (data.length === 0) return "";
|
|
52
|
+
const headerRow = headers || Object.keys(data[0]);
|
|
53
|
+
const lines = [];
|
|
54
|
+
if (includeHeaders) {
|
|
55
|
+
lines.push(headerRow.map(escapeCsvValue).join(delimiter));
|
|
56
|
+
}
|
|
57
|
+
data.forEach((item) => {
|
|
58
|
+
const values = headerRow.map((header) => {
|
|
59
|
+
const value = item[header];
|
|
60
|
+
return escapeCsvValue(value != null ? String(value) : "");
|
|
61
|
+
});
|
|
62
|
+
lines.push(values.join(delimiter));
|
|
63
|
+
});
|
|
64
|
+
return lines.join("\n");
|
|
65
|
+
}
|
|
66
|
+
function escapeCsvValue(value) {
|
|
67
|
+
if (value.includes(",") || value.includes('"') || value.includes("\n")) {
|
|
68
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
function xmlToJson(xml) {
|
|
73
|
+
const parser = new DOMParser();
|
|
74
|
+
const doc = parser.parseFromString(xml, "text/xml");
|
|
75
|
+
const parseError = doc.querySelector("parsererror");
|
|
76
|
+
if (parseError) {
|
|
77
|
+
throw new Error("Invalid XML: " + parseError.textContent);
|
|
78
|
+
}
|
|
79
|
+
const result = xmlNodeToJson(doc.documentElement);
|
|
80
|
+
if (typeof result === "object" && result !== null && !Array.isArray(result)) {
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
return { value: result };
|
|
84
|
+
}
|
|
85
|
+
function xmlNodeToJson(node) {
|
|
86
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
87
|
+
const text = node.textContent?.trim();
|
|
88
|
+
return text || null;
|
|
89
|
+
}
|
|
90
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
91
|
+
const element = node;
|
|
92
|
+
const result = {};
|
|
93
|
+
if (element.attributes.length > 0) {
|
|
94
|
+
const attrs = {};
|
|
95
|
+
for (let i = 0; i < element.attributes.length; i++) {
|
|
96
|
+
const attr = element.attributes[i];
|
|
97
|
+
attrs[attr.name] = attr.value;
|
|
98
|
+
}
|
|
99
|
+
result["@attributes"] = attrs;
|
|
100
|
+
}
|
|
101
|
+
const children = {};
|
|
102
|
+
let hasText = false;
|
|
103
|
+
let textContent = "";
|
|
104
|
+
for (let i = 0; i < element.childNodes.length; i++) {
|
|
105
|
+
const child = element.childNodes[i];
|
|
106
|
+
if (child.nodeType === Node.TEXT_NODE) {
|
|
107
|
+
const text = child.textContent?.trim();
|
|
108
|
+
if (text) {
|
|
109
|
+
textContent += text;
|
|
110
|
+
hasText = true;
|
|
111
|
+
}
|
|
112
|
+
} else if (child.nodeType === Node.ELEMENT_NODE) {
|
|
113
|
+
const childElement = child;
|
|
114
|
+
const childName = childElement.tagName;
|
|
115
|
+
const childValue = xmlNodeToJson(childElement);
|
|
116
|
+
if (!children[childName]) {
|
|
117
|
+
children[childName] = [];
|
|
118
|
+
}
|
|
119
|
+
children[childName].push(childValue);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (hasText && Object.keys(children).length === 0) {
|
|
123
|
+
return textContent;
|
|
124
|
+
}
|
|
125
|
+
Object.keys(children).forEach((key) => {
|
|
126
|
+
result[key] = children[key].length === 1 ? children[key][0] : children[key];
|
|
127
|
+
});
|
|
128
|
+
if (hasText) {
|
|
129
|
+
result["#text"] = textContent;
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
function jsonToXml(json, rootTag = "root") {
|
|
136
|
+
return jsonToXmlElement(json, rootTag);
|
|
137
|
+
}
|
|
138
|
+
function jsonToXmlElement(obj, tagName) {
|
|
139
|
+
if (obj === null || obj === void 0) {
|
|
140
|
+
return `<${tagName}></${tagName}>`;
|
|
141
|
+
}
|
|
142
|
+
if (typeof obj === "string" || typeof obj === "number" || typeof obj === "boolean") {
|
|
143
|
+
return `<${tagName}>${escapeXml(String(obj))}</${tagName}>`;
|
|
144
|
+
}
|
|
145
|
+
if (Array.isArray(obj)) {
|
|
146
|
+
return obj.map((item) => jsonToXmlElement(item, tagName)).join("");
|
|
147
|
+
}
|
|
148
|
+
if (typeof obj === "object") {
|
|
149
|
+
const record = obj;
|
|
150
|
+
let xml = `<${tagName}`;
|
|
151
|
+
if (record["@attributes"]) {
|
|
152
|
+
const attrs = record["@attributes"];
|
|
153
|
+
Object.keys(attrs).forEach((key) => {
|
|
154
|
+
xml += ` ${key}="${escapeXml(String(attrs[key]))}"`;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
xml += ">";
|
|
158
|
+
if (record["#text"]) {
|
|
159
|
+
xml += escapeXml(String(record["#text"]));
|
|
160
|
+
}
|
|
161
|
+
Object.keys(record).forEach((key) => {
|
|
162
|
+
if (key !== "@attributes" && key !== "#text") {
|
|
163
|
+
const value = record[key];
|
|
164
|
+
if (Array.isArray(value)) {
|
|
165
|
+
value.forEach((item) => {
|
|
166
|
+
xml += jsonToXmlElement(item, key);
|
|
167
|
+
});
|
|
168
|
+
} else {
|
|
169
|
+
xml += jsonToXmlElement(value, key);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
xml += `</${tagName}>`;
|
|
174
|
+
return xml;
|
|
175
|
+
}
|
|
176
|
+
return `<${tagName}></${tagName}>`;
|
|
177
|
+
}
|
|
178
|
+
function escapeXml(str) {
|
|
179
|
+
return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
180
|
+
}
|
|
181
|
+
function yamlToJson(yaml) {
|
|
182
|
+
const lines = yaml.split(/\r?\n/);
|
|
183
|
+
const result = {};
|
|
184
|
+
const stack = [
|
|
185
|
+
{ obj: result, indent: -1 }
|
|
186
|
+
];
|
|
187
|
+
for (let i = 0; i < lines.length; i++) {
|
|
188
|
+
const line = lines[i];
|
|
189
|
+
const trimmed = line.trim();
|
|
190
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
191
|
+
const indent = line.length - line.trimStart().length;
|
|
192
|
+
const current = stack[stack.length - 1];
|
|
193
|
+
while (stack.length > 1 && indent <= current.indent) {
|
|
194
|
+
stack.pop();
|
|
195
|
+
}
|
|
196
|
+
const match = trimmed.match(/^([^:]+):\s*(.*)$/);
|
|
197
|
+
if (match) {
|
|
198
|
+
const key = match[1].trim();
|
|
199
|
+
const valueStr = match[2].trim();
|
|
200
|
+
let parsedValue;
|
|
201
|
+
if (valueStr === "") {
|
|
202
|
+
parsedValue = {};
|
|
203
|
+
} else if (valueStr === "[]") {
|
|
204
|
+
parsedValue = [];
|
|
205
|
+
} else if (valueStr.startsWith("[") && valueStr.endsWith("]")) {
|
|
206
|
+
parsedValue = parseYamlArray(valueStr);
|
|
207
|
+
} else if (valueStr === "true" || valueStr === "True") {
|
|
208
|
+
parsedValue = true;
|
|
209
|
+
} else if (valueStr === "false" || valueStr === "False") {
|
|
210
|
+
parsedValue = false;
|
|
211
|
+
} else if (valueStr === "null" || valueStr === "Null" || valueStr === "~") {
|
|
212
|
+
parsedValue = null;
|
|
213
|
+
} else if (/^-?\d+$/.test(valueStr)) {
|
|
214
|
+
parsedValue = parseInt(valueStr, 10);
|
|
215
|
+
} else if (/^-?\d+\.\d+$/.test(valueStr)) {
|
|
216
|
+
parsedValue = parseFloat(valueStr);
|
|
217
|
+
} else if (valueStr.startsWith('"') && valueStr.endsWith('"')) {
|
|
218
|
+
parsedValue = valueStr.slice(1, -1).replace(/\\"/g, '"');
|
|
219
|
+
} else if (valueStr.startsWith("'") && valueStr.endsWith("'")) {
|
|
220
|
+
parsedValue = valueStr.slice(1, -1);
|
|
221
|
+
} else {
|
|
222
|
+
parsedValue = valueStr;
|
|
223
|
+
}
|
|
224
|
+
const currentObj = stack[stack.length - 1].obj;
|
|
225
|
+
if (typeof parsedValue === "object" && parsedValue !== null && !Array.isArray(parsedValue)) {
|
|
226
|
+
stack.push({ obj: parsedValue, indent });
|
|
227
|
+
}
|
|
228
|
+
currentObj[key] = parsedValue;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
function parseYamlArray(str) {
|
|
234
|
+
const content = str.slice(1, -1).trim();
|
|
235
|
+
if (!content) return [];
|
|
236
|
+
const items = [];
|
|
237
|
+
const parts = content.split(",").map((s) => s.trim());
|
|
238
|
+
parts.forEach((part) => {
|
|
239
|
+
if (part.startsWith('"') && part.endsWith('"')) {
|
|
240
|
+
items.push(part.slice(1, -1).replace(/\\"/g, '"'));
|
|
241
|
+
} else if (part.startsWith("'") && part.endsWith("'")) {
|
|
242
|
+
items.push(part.slice(1, -1));
|
|
243
|
+
} else if (part === "true" || part === "True") {
|
|
244
|
+
items.push(true);
|
|
245
|
+
} else if (part === "false" || part === "False") {
|
|
246
|
+
items.push(false);
|
|
247
|
+
} else if (part === "null" || part === "Null") {
|
|
248
|
+
items.push(null);
|
|
249
|
+
} else if (/^-?\d+$/.test(part)) {
|
|
250
|
+
items.push(parseInt(part, 10));
|
|
251
|
+
} else if (/^-?\d+\.\d+$/.test(part)) {
|
|
252
|
+
items.push(parseFloat(part));
|
|
253
|
+
} else {
|
|
254
|
+
items.push(part);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
return items;
|
|
258
|
+
}
|
|
259
|
+
function jsonToYaml(json, indent = 2) {
|
|
260
|
+
return jsonToYamlValue(json, 0, indent);
|
|
261
|
+
}
|
|
262
|
+
function jsonToYamlValue(value, level, indent) {
|
|
263
|
+
const spaces = " ".repeat(level * indent);
|
|
264
|
+
if (value === null) {
|
|
265
|
+
return "null";
|
|
266
|
+
}
|
|
267
|
+
if (typeof value === "string") {
|
|
268
|
+
if (value.includes(":") || value.includes("\n") || value.includes('"')) {
|
|
269
|
+
return `"${value.replace(/"/g, '\\"')}"`;
|
|
270
|
+
}
|
|
271
|
+
return value;
|
|
272
|
+
}
|
|
273
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
274
|
+
return String(value);
|
|
275
|
+
}
|
|
276
|
+
if (Array.isArray(value)) {
|
|
277
|
+
if (value.length === 0) {
|
|
278
|
+
return "[]";
|
|
279
|
+
}
|
|
280
|
+
return value.map((item) => `${spaces}- ${jsonToYamlValue(item, level + 1, indent)}`).join("\n");
|
|
281
|
+
}
|
|
282
|
+
if (typeof value === "object") {
|
|
283
|
+
const obj = value;
|
|
284
|
+
const keys = Object.keys(obj);
|
|
285
|
+
if (keys.length === 0) {
|
|
286
|
+
return "{}";
|
|
287
|
+
}
|
|
288
|
+
return keys.map((key) => {
|
|
289
|
+
const val = obj[key];
|
|
290
|
+
const keyStr = /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key) ? key : `"${key}"`;
|
|
291
|
+
const valStr = jsonToYamlValue(val, level + 1, indent);
|
|
292
|
+
if (typeof val === "object" && val !== null) {
|
|
293
|
+
return `${spaces}${keyStr}:
|
|
294
|
+
${valStr}`;
|
|
295
|
+
}
|
|
296
|
+
return `${spaces}${keyStr}: ${valStr}`;
|
|
297
|
+
}).join("\n");
|
|
298
|
+
}
|
|
299
|
+
return String(value);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
exports.csvToJson = csvToJson;
|
|
303
|
+
exports.jsonToCsv = jsonToCsv;
|
|
304
|
+
exports.jsonToXml = jsonToXml;
|
|
305
|
+
exports.jsonToYaml = jsonToYaml;
|
|
306
|
+
exports.xmlToJson = xmlToJson;
|
|
307
|
+
exports.yamlToJson = yamlToJson;
|
|
308
|
+
//# sourceMappingURL=chunk-ZDMFMUDR.js.map
|
|
309
|
+
//# sourceMappingURL=chunk-ZDMFMUDR.js.map
|