@alibarbar/common 1.0.7 → 1.0.8

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 (55) hide show
  1. package/dist/algorithm.js +1 -0
  2. package/dist/algorithm.mjs +1 -0
  3. package/dist/array.js +1 -0
  4. package/dist/array.mjs +1 -0
  5. package/dist/chunk-FJ6ZGZIA.mjs +39 -0
  6. package/dist/chunk-FJ6ZGZIA.mjs.map +1 -0
  7. package/dist/{chunk-HME2N3VY.mjs → chunk-OIXQ3E6W.mjs} +2 -2
  8. package/dist/{chunk-HME2N3VY.mjs.map → chunk-OIXQ3E6W.mjs.map} +1 -1
  9. package/dist/chunk-PR4QN5HX.js +44 -0
  10. package/dist/chunk-PR4QN5HX.js.map +1 -0
  11. package/dist/{chunk-XVUE53T3.js → chunk-WZDOPUJW.js} +2 -2
  12. package/dist/{chunk-XVUE53T3.js.map → chunk-WZDOPUJW.js.map} +1 -1
  13. package/dist/color.js +1 -0
  14. package/dist/color.mjs +1 -0
  15. package/dist/crypto.js +1 -0
  16. package/dist/crypto.mjs +1 -0
  17. package/dist/data-structure.js +1 -0
  18. package/dist/data-structure.mjs +1 -0
  19. package/dist/date.js +1 -0
  20. package/dist/date.mjs +1 -0
  21. package/dist/dom.js +1 -0
  22. package/dist/dom.mjs +1 -0
  23. package/dist/file.js +1 -0
  24. package/dist/file.mjs +1 -0
  25. package/dist/i18n.js +1 -0
  26. package/dist/i18n.mjs +1 -0
  27. package/dist/index.d.mts +159 -1
  28. package/dist/index.d.ts +159 -1
  29. package/dist/index.js +17148 -7
  30. package/dist/index.js.map +1 -1
  31. package/dist/index.mjs +17134 -1
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/network.js +1 -0
  34. package/dist/network.mjs +1 -0
  35. package/dist/number.js +1 -0
  36. package/dist/number.mjs +1 -0
  37. package/dist/object.js +1 -0
  38. package/dist/object.mjs +1 -0
  39. package/dist/performance.js +1 -0
  40. package/dist/performance.mjs +1 -0
  41. package/dist/storage.js +8 -7
  42. package/dist/storage.mjs +2 -1
  43. package/dist/string.js +1 -0
  44. package/dist/string.mjs +1 -0
  45. package/dist/tracking.js +1 -0
  46. package/dist/tracking.mjs +1 -0
  47. package/dist/transform.js +1 -0
  48. package/dist/transform.mjs +1 -0
  49. package/dist/upload.js +1 -0
  50. package/dist/upload.mjs +1 -0
  51. package/dist/url.js +1 -0
  52. package/dist/url.mjs +1 -0
  53. package/dist/validation.js +1 -0
  54. package/dist/validation.mjs +1 -0
  55. package/package.json +4 -1
package/dist/algorithm.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkO3O67R4I_js = require('./chunk-O3O67R4I.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
@@ -1,3 +1,4 @@
1
1
  export { binarySearch, bubbleSort, factorial, fibonacci, fibonacciSequence, gcd, lcm, mergeSort, quickSort } from './chunk-JHZ7M2MR.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=algorithm.mjs.map
3
4
  //# sourceMappingURL=algorithm.mjs.map
package/dist/array.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkLOAZSPGQ_js = require('./chunk-LOAZSPGQ.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
package/dist/array.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { chunk, compact, difference, drop, dropWhile, findIndexBy, flatten, groupBy, intersection, partition, sample, shuffle, sortBy, take, takeWhile, union, unique, unzip, zip } from './chunk-2R2QWFJC.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=array.mjs.map
3
4
  //# sourceMappingURL=array.mjs.map
@@ -0,0 +1,39 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
13
+ var __commonJS = (cb, mod) => function __require2() {
14
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
+ };
16
+ var __export = (target, all) => {
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
+ // If the importer is in node compatibility mode or this is not an ESM
30
+ // file that has been converted to a CommonJS file using a Babel-
31
+ // compatible transform (i.e. "__esModule" has not been set), then set
32
+ // "default" to the CommonJS "module.exports" for node compatibility.
33
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
+ mod
35
+ ));
36
+
37
+ export { __commonJS, __export, __require, __toESM };
38
+ //# sourceMappingURL=chunk-FJ6ZGZIA.mjs.map
39
+ //# sourceMappingURL=chunk-FJ6ZGZIA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-FJ6ZGZIA.mjs"}
@@ -350,5 +350,5 @@ var storage = {
350
350
  };
351
351
 
352
352
  export { cookie, getStorageKeyPair, localStorage, sessionStorage, setStorageKeyPair, storage };
353
- //# sourceMappingURL=chunk-HME2N3VY.mjs.map
354
- //# sourceMappingURL=chunk-HME2N3VY.mjs.map
353
+ //# sourceMappingURL=chunk-OIXQ3E6W.mjs.map
354
+ //# sourceMappingURL=chunk-OIXQ3E6W.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser/storage.ts"],"names":["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,OAAO,UAAA,CAAW,OAAO,SAAS,CAAA;AACpC;AAQA,eAAe,YAAA,CAAa,gBAAwB,UAAA,EAAwC;AAC1F,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,UAAA,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,cAAkB,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,cAAkB,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,cAAkB,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,cAAkB,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,cAAkB,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,cAAkB,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,MAAWA,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-HME2N3VY.mjs","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"]}
1
+ {"version":3,"sources":["../src/browser/storage.ts"],"names":["cookie"],"mappings":"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","file":"chunk-OIXQ3E6W.mjs","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,44 @@
1
+ 'use strict';
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
11
+ }) : x)(function(x) {
12
+ if (typeof require !== "undefined") return require.apply(this, arguments);
13
+ throw Error('Dynamic require of "' + x + '" is not supported');
14
+ });
15
+ var __commonJS = (cb, mod) => function __require2() {
16
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
17
+ };
18
+ var __export = (target, all) => {
19
+ for (var name in all)
20
+ __defProp(target, name, { get: all[name], enumerable: true });
21
+ };
22
+ var __copyProps = (to, from, except, desc) => {
23
+ if (from && typeof from === "object" || typeof from === "function") {
24
+ for (let key of __getOwnPropNames(from))
25
+ if (!__hasOwnProp.call(to, key) && key !== except)
26
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
27
+ }
28
+ return to;
29
+ };
30
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
31
+ // If the importer is in node compatibility mode or this is not an ESM
32
+ // file that has been converted to a CommonJS file using a Babel-
33
+ // compatible transform (i.e. "__esModule" has not been set), then set
34
+ // "default" to the CommonJS "module.exports" for node compatibility.
35
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
36
+ mod
37
+ ));
38
+
39
+ exports.__commonJS = __commonJS;
40
+ exports.__export = __export;
41
+ exports.__require = __require;
42
+ exports.__toESM = __toESM;
43
+ //# sourceMappingURL=chunk-PR4QN5HX.js.map
44
+ //# sourceMappingURL=chunk-PR4QN5HX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-PR4QN5HX.js"}
@@ -357,5 +357,5 @@ exports.localStorage = localStorage;
357
357
  exports.sessionStorage = sessionStorage;
358
358
  exports.setStorageKeyPair = setStorageKeyPair;
359
359
  exports.storage = storage;
360
- //# sourceMappingURL=chunk-XVUE53T3.js.map
361
- //# sourceMappingURL=chunk-XVUE53T3.js.map
360
+ //# sourceMappingURL=chunk-WZDOPUJW.js.map
361
+ //# sourceMappingURL=chunk-WZDOPUJW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser/storage.ts"],"names":["rsaEncrypt","rsaDecrypt","cookie"],"mappings":"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","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"]}
1
+ {"version":3,"sources":["../src/browser/storage.ts"],"names":["rsaEncrypt","rsaDecrypt","cookie"],"mappings":"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","file":"chunk-WZDOPUJW.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"]}
package/dist/color.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkY364QIQH_js = require('./chunk-Y364QIQH.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
package/dist/color.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { contrast, darken, hexToRgb, hslToRgb, lighten, mix, rgbToHex, rgbToHsl } from './chunk-QIOC54LQ.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=color.mjs.map
3
4
  //# sourceMappingURL=color.mjs.map
package/dist/crypto.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkDYBSRI7V_js = require('./chunk-DYBSRI7V.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
package/dist/crypto.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { base64Decode, base64Encode, exportPrivateKey, exportPublicKey, generateRSAKeyPair, generateRandomString, generateUUID, hash, importPrivateKey, importPublicKey, rsaDecrypt, rsaEncrypt, sha256 } from './chunk-HLDFI7R2.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=crypto.mjs.map
3
4
  //# sourceMappingURL=crypto.mjs.map
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkBHCRFURU_js = require('./chunk-BHCRFURU.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
@@ -1,3 +1,4 @@
1
1
  export { BinaryTree, DataQueue, Graph, LRUCache, LinkedList, Stack } from './chunk-A4SWQXX7.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=data-structure.mjs.map
3
4
  //# sourceMappingURL=data-structure.mjs.map
package/dist/date.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkI3L42475_js = require('./chunk-I3L42475.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
package/dist/date.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { addDays, addMonths, addYears, diffDays, endOfDay, formatDate, getDateFormatByGMT, getQuarter, getRelativeTime, getTimeFromGMT, getWeekNumber, isToday, isWeekday, isWeekend, isYesterday, startOfDay } from './chunk-5BGSUGTI.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=date.mjs.map
3
4
  //# sourceMappingURL=date.mjs.map
package/dist/dom.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkJK2SE3I2_js = require('./chunk-JK2SE3I2.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
package/dist/dom.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { $, $$, addClass, copyToClipboard, getElementOffset, getScrollPosition, getStyle, isInViewport, removeClass, scrollTo, setStyle, toggleClass } from './chunk-LF4CILQS.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=dom.mjs.map
3
4
  //# sourceMappingURL=dom.mjs.map
package/dist/file.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk7V5UQXIO_js = require('./chunk-7V5UQXIO.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
package/dist/file.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { calculateBlobMD5, calculateFileMD5, formatFileSize, getFileExtension, getFileNameWithoutExtension, splitFileIntoChunks } from './chunk-ZVJ6NQUM.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=file.mjs.map
3
4
  //# sourceMappingURL=file.mjs.map
package/dist/i18n.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkOX5PLOWB_js = require('./chunk-OX5PLOWB.js');
4
+ require('./chunk-PR4QN5HX.js');
4
5
 
5
6
 
6
7
 
package/dist/i18n.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { createTranslator, formatCurrencyI18n, formatDateI18n, formatNumberI18n, formatRelativeTime, getLocale, pluralize, translate } from './chunk-QIBE7GVN.mjs';
2
+ import './chunk-FJ6ZGZIA.mjs';
2
3
  //# sourceMappingURL=i18n.mjs.map
3
4
  //# sourceMappingURL=i18n.mjs.map