@take-out/helpers 0.1.22 → 0.1.24

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.
@@ -25,52 +25,58 @@ __export(createStorage_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(createStorage_exports);
27
27
  var import_driver = require("./driver.cjs");
28
- const namespaces = /* @__PURE__ */new Set();
28
+ const globalKey = "__takeout_storage__",
29
+ globalCache = globalThis[globalKey] ??= {
30
+ namespaces: /* @__PURE__ */new Set(),
31
+ instances: /* @__PURE__ */new Map()
32
+ };
29
33
  function createStorage(namespace) {
30
- if (namespaces.has(namespace)) throw new Error(`storage namespace already exists: ${namespace}`);
31
- namespaces.add(namespace);
34
+ const existing = globalCache.instances.get(namespace);
35
+ if (existing) return existing;
36
+ globalCache.namespaces.add(namespace);
32
37
  const prefix = `${namespace}:`,
33
- prefixKey = key => `${prefix}${key}`;
34
- return {
35
- get(key) {
36
- const driver = (0, import_driver.getStorageDriver)();
37
- if (!driver) return;
38
- const raw = driver.getItem(prefixKey(key));
39
- if (raw != null) try {
40
- return JSON.parse(raw);
41
- } catch {
42
- return;
38
+ prefixKey = key => `${prefix}${key}`,
39
+ storage = {
40
+ get(key) {
41
+ const driver = (0, import_driver.getStorageDriver)();
42
+ if (!driver) return;
43
+ const raw = driver.getItem(prefixKey(key));
44
+ if (raw != null) try {
45
+ return JSON.parse(raw);
46
+ } catch {
47
+ return;
48
+ }
49
+ },
50
+ set(key, value) {
51
+ const driver = (0, import_driver.getStorageDriver)();
52
+ driver && driver.setItem(prefixKey(key), JSON.stringify(value));
53
+ },
54
+ remove(key) {
55
+ const driver = (0, import_driver.getStorageDriver)();
56
+ driver && driver.removeItem(prefixKey(key));
57
+ },
58
+ has(key) {
59
+ const driver = (0, import_driver.getStorageDriver)();
60
+ return driver ? driver.getItem(prefixKey(key)) != null : !1;
61
+ },
62
+ keys() {
63
+ const driver = (0, import_driver.getStorageDriver)();
64
+ return driver ? driver.getAllKeys().filter(k => k.startsWith(prefix)).map(k => k.slice(prefix.length)) : [];
65
+ },
66
+ clear() {
67
+ const driver = (0, import_driver.getStorageDriver)();
68
+ if (driver) for (const key of this.keys()) driver.removeItem(prefixKey(key));
69
+ },
70
+ getItem(key) {
71
+ const driver = (0, import_driver.getStorageDriver)();
72
+ return driver ? driver.getItem(prefixKey(key)) ?? null : null;
73
+ },
74
+ setItem(key, value) {
75
+ const driver = (0, import_driver.getStorageDriver)();
76
+ driver && driver.setItem(prefixKey(key), value);
43
77
  }
44
- },
45
- set(key, value) {
46
- const driver = (0, import_driver.getStorageDriver)();
47
- driver && driver.setItem(prefixKey(key), JSON.stringify(value));
48
- },
49
- remove(key) {
50
- const driver = (0, import_driver.getStorageDriver)();
51
- driver && driver.removeItem(prefixKey(key));
52
- },
53
- has(key) {
54
- const driver = (0, import_driver.getStorageDriver)();
55
- return driver ? driver.getItem(prefixKey(key)) != null : !1;
56
- },
57
- keys() {
58
- const driver = (0, import_driver.getStorageDriver)();
59
- return driver ? driver.getAllKeys().filter(k => k.startsWith(prefix)).map(k => k.slice(prefix.length)) : [];
60
- },
61
- clear() {
62
- const driver = (0, import_driver.getStorageDriver)();
63
- if (driver) for (const key of this.keys()) driver.removeItem(prefixKey(key));
64
- },
65
- getItem(key) {
66
- const driver = (0, import_driver.getStorageDriver)();
67
- return driver ? driver.getItem(prefixKey(key)) ?? null : null;
68
- },
69
- setItem(key, value) {
70
- const driver = (0, import_driver.getStorageDriver)();
71
- driver && driver.setItem(prefixKey(key), value);
72
- }
73
- };
78
+ };
79
+ return globalCache.instances.set(namespace, storage), storage;
74
80
  }
75
81
  function createStorageValue(key) {
76
82
  const storage = createStorage(`_v:${key}`);
@@ -19,13 +19,16 @@ __export(createStorage_exports, {
19
19
  });
20
20
  module.exports = __toCommonJS(createStorage_exports);
21
21
  var import_driver = require("./driver");
22
- const namespaces = /* @__PURE__ */ new Set();
22
+ const globalKey = "__takeout_storage__", globalCache = globalThis[globalKey] ??= {
23
+ namespaces: /* @__PURE__ */ new Set(),
24
+ instances: /* @__PURE__ */ new Map()
25
+ };
23
26
  function createStorage(namespace) {
24
- if (namespaces.has(namespace))
25
- throw new Error(`storage namespace already exists: ${namespace}`);
26
- namespaces.add(namespace);
27
- const prefix = `${namespace}:`, prefixKey = (key) => `${prefix}${key}`;
28
- return {
27
+ const existing = globalCache.instances.get(namespace);
28
+ if (existing)
29
+ return existing;
30
+ globalCache.namespaces.add(namespace);
31
+ const prefix = `${namespace}:`, prefixKey = (key) => `${prefix}${key}`, storage = {
29
32
  get(key) {
30
33
  const driver = (0, import_driver.getStorageDriver)();
31
34
  if (!driver) return;
@@ -68,6 +71,7 @@ function createStorage(namespace) {
68
71
  driver && driver.setItem(prefixKey(key), value);
69
72
  }
70
73
  };
74
+ return globalCache.instances.set(namespace, storage), storage;
71
75
  }
72
76
  function createStorageValue(key) {
73
77
  const storage = createStorage(`_v:${key}`);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/createStorage.ts"],
4
- "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiC;AAEjC,MAAM,aAAa,oBAAI,IAAY;AAmC5B,SAAS,cAAmC,WAAkC;AACnF,MAAI,WAAW,IAAI,SAAS;AAC1B,UAAM,IAAI,MAAM,qCAAqC,SAAS,EAAE;AAElE,aAAW,IAAI,SAAS;AAExB,QAAM,SAAS,GAAG,SAAS,KACrB,YAAY,CAAC,QAAgB,GAAG,MAAM,GAAG,GAAG;AAElD,SAAO;AAAA,IACL,IAAI,KAAuB;AACzB,YAAM,aAAS,gCAAiB;AAChC,UAAI,CAAC,OAAQ;AACb,YAAM,MAAM,OAAO,QAAQ,UAAU,GAAG,CAAC;AACzC,UAAI,OAAO;AACX,YAAI;AACF,iBAAO,KAAK,MAAM,GAAG;AAAA,QACvB,QAAQ;AACN;AAAA,QACF;AAAA,IACF;AAAA,IAEA,IAAI,KAAQ,OAAgB;AAC1B,YAAM,aAAS,gCAAiB;AAChC,MAAK,UACL,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,IACtD;AAAA,IAEA,OAAO,KAAc;AACnB,YAAM,aAAS,gCAAiB;AAChC,MAAK,UACL,OAAO,WAAW,UAAU,GAAG,CAAC;AAAA,IAClC;AAAA,IAEA,IAAI,KAAiB;AACnB,YAAM,aAAS,gCAAiB;AAChC,aAAK,SACE,OAAO,QAAQ,UAAU,GAAG,CAAC,KAAK,OADrB;AAAA,IAEtB;AAAA,IAEA,OAAY;AACV,YAAM,aAAS,gCAAiB;AAChC,aAAK,SACE,OACJ,WAAW,EACX,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,EAClC,IAAI,CAAC,MAAM,EAAE,MAAM,OAAO,MAAM,CAAM,IAJrB,CAAC;AAAA,IAKvB;AAAA,IAEA,QAAc;AACZ,YAAM,aAAS,gCAAiB;AAChC,UAAK;AACL,mBAAW,OAAO,KAAK,KAAK;AAC1B,iBAAO,WAAW,UAAU,GAAG,CAAC;AAAA,IAEpC;AAAA,IAEA,QAAQ,KAAuB;AAC7B,YAAM,aAAS,gCAAiB;AAChC,aAAK,SACE,OAAO,QAAQ,UAAU,GAAG,CAAC,KAAK,OADrB;AAAA,IAEtB;AAAA,IAEA,QAAQ,KAAQ,OAAqB;AACnC,YAAM,aAAS,gCAAiB;AAChC,MAAK,UACL,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK;AAAA,IACtC;AAAA,EACF;AACF;AA0BO,SAAS,mBAAsB,KAA8B;AAClE,QAAM,UAAU,cAA0B,MAAM,GAAG,EAAE;AACrD,SAAO;AAAA,IACL,KAAK,MAAqB,QAAQ,IAAI,OAAO;AAAA,IAC7C,KAAK,CAAC,UAAmB,QAAQ,IAAI,SAAS,KAAK;AAAA,IACnD,QAAQ,MAAY,QAAQ,OAAO,OAAO;AAAA,IAC1C,KAAK,MAAe,QAAQ,IAAI,OAAO;AAAA,EACzC;AACF;",
4
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiC;AAGjC,MAAM,YAAY,uBACZ,cAAgB,WAAmB,SAAS,MAAM;AAAA,EACtD,YAAY,oBAAI,IAAY;AAAA,EAC5B,WAAW,oBAAI,IAA+B;AAChD;AAsCO,SAAS,cAAmC,WAAkC;AAEnF,QAAM,WAAW,YAAY,UAAU,IAAI,SAAS;AACpD,MAAI;AACF,WAAO;AAGT,cAAY,WAAW,IAAI,SAAS;AAEpC,QAAM,SAAS,GAAG,SAAS,KACrB,YAAY,CAAC,QAAgB,GAAG,MAAM,GAAG,GAAG,IAE5C,UAAyB;AAAA,IAC7B,IAAI,KAAuB;AACzB,YAAM,aAAS,gCAAiB;AAChC,UAAI,CAAC,OAAQ;AACb,YAAM,MAAM,OAAO,QAAQ,UAAU,GAAG,CAAC;AACzC,UAAI,OAAO;AACX,YAAI;AACF,iBAAO,KAAK,MAAM,GAAG;AAAA,QACvB,QAAQ;AACN;AAAA,QACF;AAAA,IACF;AAAA,IAEA,IAAI,KAAQ,OAAgB;AAC1B,YAAM,aAAS,gCAAiB;AAChC,MAAK,UACL,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,IACtD;AAAA,IAEA,OAAO,KAAc;AACnB,YAAM,aAAS,gCAAiB;AAChC,MAAK,UACL,OAAO,WAAW,UAAU,GAAG,CAAC;AAAA,IAClC;AAAA,IAEA,IAAI,KAAiB;AACnB,YAAM,aAAS,gCAAiB;AAChC,aAAK,SACE,OAAO,QAAQ,UAAU,GAAG,CAAC,KAAK,OADrB;AAAA,IAEtB;AAAA,IAEA,OAAY;AACV,YAAM,aAAS,gCAAiB;AAChC,aAAK,SACE,OACJ,WAAW,EACX,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,EAClC,IAAI,CAAC,MAAM,EAAE,MAAM,OAAO,MAAM,CAAM,IAJrB,CAAC;AAAA,IAKvB;AAAA,IAEA,QAAc;AACZ,YAAM,aAAS,gCAAiB;AAChC,UAAK;AACL,mBAAW,OAAO,KAAK,KAAK;AAC1B,iBAAO,WAAW,UAAU,GAAG,CAAC;AAAA,IAEpC;AAAA,IAEA,QAAQ,KAAuB;AAC7B,YAAM,aAAS,gCAAiB;AAChC,aAAK,SACE,OAAO,QAAQ,UAAU,GAAG,CAAC,KAAK,OADrB;AAAA,IAEtB;AAAA,IAEA,QAAQ,KAAQ,OAAqB;AACnC,YAAM,aAAS,gCAAiB;AAChC,MAAK,UACL,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK;AAAA,IACtC;AAAA,EACF;AAEA,qBAAY,UAAU,IAAI,WAAW,OAAO,GACrC;AACT;AA0BO,SAAS,mBAAsB,KAA8B;AAClE,QAAM,UAAU,cAA0B,MAAM,GAAG,EAAE;AACrD,SAAO;AAAA,IACL,KAAK,MAAqB,QAAQ,IAAI,OAAO;AAAA,IAC7C,KAAK,CAAC,UAAmB,QAAQ,IAAI,SAAS,KAAK;AAAA,IACnD,QAAQ,MAAY,QAAQ,OAAO,OAAO;AAAA,IAC1C,KAAK,MAAe,QAAQ,IAAI,OAAO;AAAA,EACzC;AACF;",
5
5
  "names": []
6
6
  }
@@ -27,79 +27,88 @@ __export(createStorage_exports, {
27
27
  });
28
28
  module.exports = __toCommonJS(createStorage_exports);
29
29
  var import_driver = require("./driver.native.js"),
30
- namespaces = /* @__PURE__ */new Set();
30
+ _globalThis,
31
+ _globalKey,
32
+ globalKey = "__takeout_storage__",
33
+ _,
34
+ globalCache = (_ = (_globalThis = globalThis)[_globalKey = globalKey]) !== null && _ !== void 0 ? _ : _globalThis[_globalKey] = {
35
+ namespaces: /* @__PURE__ */new Set(),
36
+ instances: /* @__PURE__ */new Map()
37
+ };
31
38
  function createStorage(namespace) {
32
- if (namespaces.has(namespace)) throw new Error(`storage namespace already exists: ${namespace}`);
33
- namespaces.add(namespace);
39
+ var existing = globalCache.instances.get(namespace);
40
+ if (existing) return existing;
41
+ globalCache.namespaces.add(namespace);
34
42
  var prefix = `${namespace}:`,
35
43
  prefixKey = function (key) {
36
44
  return `${prefix}${key}`;
37
- };
38
- return {
39
- get(key) {
40
- var driver = (0, import_driver.getStorageDriver)();
41
- if (driver) {
42
- var raw = driver.getItem(prefixKey(key));
43
- if (raw != null) try {
44
- return JSON.parse(raw);
45
- } catch {
46
- return;
47
- }
48
- }
49
- },
50
- set(key, value) {
51
- var driver = (0, import_driver.getStorageDriver)();
52
- driver && driver.setItem(prefixKey(key), JSON.stringify(value));
53
- },
54
- remove(key) {
55
- var driver = (0, import_driver.getStorageDriver)();
56
- driver && driver.removeItem(prefixKey(key));
57
- },
58
- has(key) {
59
- var driver = (0, import_driver.getStorageDriver)();
60
- return driver ? driver.getItem(prefixKey(key)) != null : !1;
61
45
  },
62
- keys() {
63
- var driver = (0, import_driver.getStorageDriver)();
64
- return driver ? driver.getAllKeys().filter(function (k) {
65
- return k.startsWith(prefix);
66
- }).map(function (k) {
67
- return k.slice(prefix.length);
68
- }) : [];
69
- },
70
- clear() {
71
- var driver = (0, import_driver.getStorageDriver)();
72
- if (driver) {
73
- var _iteratorNormalCompletion = !0,
74
- _didIteratorError = !1,
75
- _iteratorError = void 0;
76
- try {
77
- for (var _iterator = this.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
78
- var key = _step.value;
79
- driver.removeItem(prefixKey(key));
46
+ storage = {
47
+ get(key) {
48
+ var driver = (0, import_driver.getStorageDriver)();
49
+ if (driver) {
50
+ var raw = driver.getItem(prefixKey(key));
51
+ if (raw != null) try {
52
+ return JSON.parse(raw);
53
+ } catch {
54
+ return;
80
55
  }
81
- } catch (err) {
82
- _didIteratorError = !0, _iteratorError = err;
83
- } finally {
56
+ }
57
+ },
58
+ set(key, value) {
59
+ var driver = (0, import_driver.getStorageDriver)();
60
+ driver && driver.setItem(prefixKey(key), JSON.stringify(value));
61
+ },
62
+ remove(key) {
63
+ var driver = (0, import_driver.getStorageDriver)();
64
+ driver && driver.removeItem(prefixKey(key));
65
+ },
66
+ has(key) {
67
+ var driver = (0, import_driver.getStorageDriver)();
68
+ return driver ? driver.getItem(prefixKey(key)) != null : !1;
69
+ },
70
+ keys() {
71
+ var driver = (0, import_driver.getStorageDriver)();
72
+ return driver ? driver.getAllKeys().filter(function (k) {
73
+ return k.startsWith(prefix);
74
+ }).map(function (k) {
75
+ return k.slice(prefix.length);
76
+ }) : [];
77
+ },
78
+ clear() {
79
+ var driver = (0, import_driver.getStorageDriver)();
80
+ if (driver) {
81
+ var _iteratorNormalCompletion = !0,
82
+ _didIteratorError = !1,
83
+ _iteratorError = void 0;
84
84
  try {
85
- !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
85
+ for (var _iterator = this.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
86
+ var key = _step.value;
87
+ driver.removeItem(prefixKey(key));
88
+ }
89
+ } catch (err) {
90
+ _didIteratorError = !0, _iteratorError = err;
86
91
  } finally {
87
- if (_didIteratorError) throw _iteratorError;
92
+ try {
93
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
94
+ } finally {
95
+ if (_didIteratorError) throw _iteratorError;
96
+ }
88
97
  }
89
98
  }
99
+ },
100
+ getItem(key) {
101
+ var driver = (0, import_driver.getStorageDriver)();
102
+ if (!driver) return null;
103
+ var _driver_getItem;
104
+ return (_driver_getItem = driver.getItem(prefixKey(key))) !== null && _driver_getItem !== void 0 ? _driver_getItem : null;
105
+ },
106
+ setItem(key, value) {
107
+ var driver = (0, import_driver.getStorageDriver)();
108
+ driver && driver.setItem(prefixKey(key), value);
90
109
  }
91
- },
92
- getItem(key) {
93
- var driver = (0, import_driver.getStorageDriver)();
94
- if (!driver) return null;
95
- var _driver_getItem;
96
- return (_driver_getItem = driver.getItem(prefixKey(key))) !== null && _driver_getItem !== void 0 ? _driver_getItem : null;
97
- },
98
- setItem(key, value) {
99
- var driver = (0, import_driver.getStorageDriver)();
100
- driver && driver.setItem(prefixKey(key), value);
101
- }
102
- };
110
+ };
111
+ return globalCache.instances.set(namespace, storage), storage;
103
112
  }
104
113
  function createStorageValue(key) {
105
114
  var storage = createStorage(`_v:${key}`);
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createStorage_exports","__export","createStorage","createStorageValue","module","exports","import_driver","require","namespaces","Set","namespace","has","Error","add","prefix","prefixKey","key","get","driver","getStorageDriver","raw","getItem","JSON","parse","set","setItem","stringify","remove","removeItem","keys","getAllKeys","filter","k","startsWith","map","slice","length","clear","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","err","return"],"sources":["../../../src/storage/createStorage.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createStorage_exports","__export","createStorage","createStorageValue","module","exports","import_driver","require","_globalThis","_globalKey","globalKey","_","globalCache","globalThis","namespaces","Set","instances","Map","namespace","existing","get","add","prefix","prefixKey","key","storage","driver","getStorageDriver","raw","getItem","JSON","parse","set","setItem","stringify","remove","removeItem","has","keys","getAllKeys","filter","k","startsWith","map","slice","length","clear","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","err","return"],"sources":["../../../src/storage/createStorage.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,14 @@
1
1
  import { getStorageDriver } from "./driver";
2
- const namespaces = /* @__PURE__ */ new Set();
2
+ const globalKey = "__takeout_storage__", globalCache = globalThis[globalKey] ??= {
3
+ namespaces: /* @__PURE__ */ new Set(),
4
+ instances: /* @__PURE__ */ new Map()
5
+ };
3
6
  function createStorage(namespace) {
4
- if (namespaces.has(namespace))
5
- throw new Error(`storage namespace already exists: ${namespace}`);
6
- namespaces.add(namespace);
7
- const prefix = `${namespace}:`, prefixKey = (key) => `${prefix}${key}`;
8
- return {
7
+ const existing = globalCache.instances.get(namespace);
8
+ if (existing)
9
+ return existing;
10
+ globalCache.namespaces.add(namespace);
11
+ const prefix = `${namespace}:`, prefixKey = (key) => `${prefix}${key}`, storage = {
9
12
  get(key) {
10
13
  const driver = getStorageDriver();
11
14
  if (!driver) return;
@@ -48,6 +51,7 @@ function createStorage(namespace) {
48
51
  driver && driver.setItem(prefixKey(key), value);
49
52
  }
50
53
  };
54
+ return globalCache.instances.set(namespace, storage), storage;
51
55
  }
52
56
  function createStorageValue(key) {
53
57
  const storage = createStorage(`_v:${key}`);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/storage/createStorage.ts"],
4
- "mappings": "AAAA,SAAS,wBAAwB;AAEjC,MAAM,aAAa,oBAAI,IAAY;AAmC5B,SAAS,cAAmC,WAAkC;AACnF,MAAI,WAAW,IAAI,SAAS;AAC1B,UAAM,IAAI,MAAM,qCAAqC,SAAS,EAAE;AAElE,aAAW,IAAI,SAAS;AAExB,QAAM,SAAS,GAAG,SAAS,KACrB,YAAY,CAAC,QAAgB,GAAG,MAAM,GAAG,GAAG;AAElD,SAAO;AAAA,IACL,IAAI,KAAuB;AACzB,YAAM,SAAS,iBAAiB;AAChC,UAAI,CAAC,OAAQ;AACb,YAAM,MAAM,OAAO,QAAQ,UAAU,GAAG,CAAC;AACzC,UAAI,OAAO;AACX,YAAI;AACF,iBAAO,KAAK,MAAM,GAAG;AAAA,QACvB,QAAQ;AACN;AAAA,QACF;AAAA,IACF;AAAA,IAEA,IAAI,KAAQ,OAAgB;AAC1B,YAAM,SAAS,iBAAiB;AAChC,MAAK,UACL,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,IACtD;AAAA,IAEA,OAAO,KAAc;AACnB,YAAM,SAAS,iBAAiB;AAChC,MAAK,UACL,OAAO,WAAW,UAAU,GAAG,CAAC;AAAA,IAClC;AAAA,IAEA,IAAI,KAAiB;AACnB,YAAM,SAAS,iBAAiB;AAChC,aAAK,SACE,OAAO,QAAQ,UAAU,GAAG,CAAC,KAAK,OADrB;AAAA,IAEtB;AAAA,IAEA,OAAY;AACV,YAAM,SAAS,iBAAiB;AAChC,aAAK,SACE,OACJ,WAAW,EACX,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,EAClC,IAAI,CAAC,MAAM,EAAE,MAAM,OAAO,MAAM,CAAM,IAJrB,CAAC;AAAA,IAKvB;AAAA,IAEA,QAAc;AACZ,YAAM,SAAS,iBAAiB;AAChC,UAAK;AACL,mBAAW,OAAO,KAAK,KAAK;AAC1B,iBAAO,WAAW,UAAU,GAAG,CAAC;AAAA,IAEpC;AAAA,IAEA,QAAQ,KAAuB;AAC7B,YAAM,SAAS,iBAAiB;AAChC,aAAK,SACE,OAAO,QAAQ,UAAU,GAAG,CAAC,KAAK,OADrB;AAAA,IAEtB;AAAA,IAEA,QAAQ,KAAQ,OAAqB;AACnC,YAAM,SAAS,iBAAiB;AAChC,MAAK,UACL,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK;AAAA,IACtC;AAAA,EACF;AACF;AA0BO,SAAS,mBAAsB,KAA8B;AAClE,QAAM,UAAU,cAA0B,MAAM,GAAG,EAAE;AACrD,SAAO;AAAA,IACL,KAAK,MAAqB,QAAQ,IAAI,OAAO;AAAA,IAC7C,KAAK,CAAC,UAAmB,QAAQ,IAAI,SAAS,KAAK;AAAA,IACnD,QAAQ,MAAY,QAAQ,OAAO,OAAO;AAAA,IAC1C,KAAK,MAAe,QAAQ,IAAI,OAAO;AAAA,EACzC;AACF;",
4
+ "mappings": "AAAA,SAAS,wBAAwB;AAGjC,MAAM,YAAY,uBACZ,cAAgB,WAAmB,SAAS,MAAM;AAAA,EACtD,YAAY,oBAAI,IAAY;AAAA,EAC5B,WAAW,oBAAI,IAA+B;AAChD;AAsCO,SAAS,cAAmC,WAAkC;AAEnF,QAAM,WAAW,YAAY,UAAU,IAAI,SAAS;AACpD,MAAI;AACF,WAAO;AAGT,cAAY,WAAW,IAAI,SAAS;AAEpC,QAAM,SAAS,GAAG,SAAS,KACrB,YAAY,CAAC,QAAgB,GAAG,MAAM,GAAG,GAAG,IAE5C,UAAyB;AAAA,IAC7B,IAAI,KAAuB;AACzB,YAAM,SAAS,iBAAiB;AAChC,UAAI,CAAC,OAAQ;AACb,YAAM,MAAM,OAAO,QAAQ,UAAU,GAAG,CAAC;AACzC,UAAI,OAAO;AACX,YAAI;AACF,iBAAO,KAAK,MAAM,GAAG;AAAA,QACvB,QAAQ;AACN;AAAA,QACF;AAAA,IACF;AAAA,IAEA,IAAI,KAAQ,OAAgB;AAC1B,YAAM,SAAS,iBAAiB;AAChC,MAAK,UACL,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,IACtD;AAAA,IAEA,OAAO,KAAc;AACnB,YAAM,SAAS,iBAAiB;AAChC,MAAK,UACL,OAAO,WAAW,UAAU,GAAG,CAAC;AAAA,IAClC;AAAA,IAEA,IAAI,KAAiB;AACnB,YAAM,SAAS,iBAAiB;AAChC,aAAK,SACE,OAAO,QAAQ,UAAU,GAAG,CAAC,KAAK,OADrB;AAAA,IAEtB;AAAA,IAEA,OAAY;AACV,YAAM,SAAS,iBAAiB;AAChC,aAAK,SACE,OACJ,WAAW,EACX,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,EAClC,IAAI,CAAC,MAAM,EAAE,MAAM,OAAO,MAAM,CAAM,IAJrB,CAAC;AAAA,IAKvB;AAAA,IAEA,QAAc;AACZ,YAAM,SAAS,iBAAiB;AAChC,UAAK;AACL,mBAAW,OAAO,KAAK,KAAK;AAC1B,iBAAO,WAAW,UAAU,GAAG,CAAC;AAAA,IAEpC;AAAA,IAEA,QAAQ,KAAuB;AAC7B,YAAM,SAAS,iBAAiB;AAChC,aAAK,SACE,OAAO,QAAQ,UAAU,GAAG,CAAC,KAAK,OADrB;AAAA,IAEtB;AAAA,IAEA,QAAQ,KAAQ,OAAqB;AACnC,YAAM,SAAS,iBAAiB;AAChC,MAAK,UACL,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK;AAAA,IACtC;AAAA,EACF;AAEA,qBAAY,UAAU,IAAI,WAAW,OAAO,GACrC;AACT;AA0BO,SAAS,mBAAsB,KAA8B;AAClE,QAAM,UAAU,cAA0B,MAAM,GAAG,EAAE;AACrD,SAAO;AAAA,IACL,KAAK,MAAqB,QAAQ,IAAI,OAAO;AAAA,IAC7C,KAAK,CAAC,UAAmB,QAAQ,IAAI,SAAS,KAAK;AAAA,IACnD,QAAQ,MAAY,QAAQ,OAAO,OAAO;AAAA,IAC1C,KAAK,MAAe,QAAQ,IAAI,OAAO;AAAA,EACzC;AACF;",
5
5
  "names": []
6
6
  }
@@ -1,50 +1,56 @@
1
1
  import { getStorageDriver } from "./driver.mjs";
2
- const namespaces = /* @__PURE__ */new Set();
2
+ const globalKey = "__takeout_storage__",
3
+ globalCache = globalThis[globalKey] ??= {
4
+ namespaces: /* @__PURE__ */new Set(),
5
+ instances: /* @__PURE__ */new Map()
6
+ };
3
7
  function createStorage(namespace) {
4
- if (namespaces.has(namespace)) throw new Error(`storage namespace already exists: ${namespace}`);
5
- namespaces.add(namespace);
8
+ const existing = globalCache.instances.get(namespace);
9
+ if (existing) return existing;
10
+ globalCache.namespaces.add(namespace);
6
11
  const prefix = `${namespace}:`,
7
- prefixKey = key => `${prefix}${key}`;
8
- return {
9
- get(key) {
10
- const driver = getStorageDriver();
11
- if (!driver) return;
12
- const raw = driver.getItem(prefixKey(key));
13
- if (raw != null) try {
14
- return JSON.parse(raw);
15
- } catch {
16
- return;
12
+ prefixKey = key => `${prefix}${key}`,
13
+ storage = {
14
+ get(key) {
15
+ const driver = getStorageDriver();
16
+ if (!driver) return;
17
+ const raw = driver.getItem(prefixKey(key));
18
+ if (raw != null) try {
19
+ return JSON.parse(raw);
20
+ } catch {
21
+ return;
22
+ }
23
+ },
24
+ set(key, value) {
25
+ const driver = getStorageDriver();
26
+ driver && driver.setItem(prefixKey(key), JSON.stringify(value));
27
+ },
28
+ remove(key) {
29
+ const driver = getStorageDriver();
30
+ driver && driver.removeItem(prefixKey(key));
31
+ },
32
+ has(key) {
33
+ const driver = getStorageDriver();
34
+ return driver ? driver.getItem(prefixKey(key)) != null : !1;
35
+ },
36
+ keys() {
37
+ const driver = getStorageDriver();
38
+ return driver ? driver.getAllKeys().filter(k => k.startsWith(prefix)).map(k => k.slice(prefix.length)) : [];
39
+ },
40
+ clear() {
41
+ const driver = getStorageDriver();
42
+ if (driver) for (const key of this.keys()) driver.removeItem(prefixKey(key));
43
+ },
44
+ getItem(key) {
45
+ const driver = getStorageDriver();
46
+ return driver ? driver.getItem(prefixKey(key)) ?? null : null;
47
+ },
48
+ setItem(key, value) {
49
+ const driver = getStorageDriver();
50
+ driver && driver.setItem(prefixKey(key), value);
17
51
  }
18
- },
19
- set(key, value) {
20
- const driver = getStorageDriver();
21
- driver && driver.setItem(prefixKey(key), JSON.stringify(value));
22
- },
23
- remove(key) {
24
- const driver = getStorageDriver();
25
- driver && driver.removeItem(prefixKey(key));
26
- },
27
- has(key) {
28
- const driver = getStorageDriver();
29
- return driver ? driver.getItem(prefixKey(key)) != null : !1;
30
- },
31
- keys() {
32
- const driver = getStorageDriver();
33
- return driver ? driver.getAllKeys().filter(k => k.startsWith(prefix)).map(k => k.slice(prefix.length)) : [];
34
- },
35
- clear() {
36
- const driver = getStorageDriver();
37
- if (driver) for (const key of this.keys()) driver.removeItem(prefixKey(key));
38
- },
39
- getItem(key) {
40
- const driver = getStorageDriver();
41
- return driver ? driver.getItem(prefixKey(key)) ?? null : null;
42
- },
43
- setItem(key, value) {
44
- const driver = getStorageDriver();
45
- driver && driver.setItem(prefixKey(key), value);
46
- }
47
- };
52
+ };
53
+ return globalCache.instances.set(namespace, storage), storage;
48
54
  }
49
55
  function createStorageValue(key) {
50
56
  const storage = createStorage(`_v:${key}`);
@@ -1 +1 @@
1
- {"version":3,"names":["getStorageDriver","namespaces","Set","createStorage","namespace","has","Error","add","prefix","prefixKey","key","get","driver","raw","getItem","JSON","parse","set","value","setItem","stringify","remove","removeItem","keys","getAllKeys","filter","k","startsWith","map","slice","length","clear","createStorageValue","storage"],"sources":["../../../src/storage/createStorage.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,QAAwB;AAEjC,MAAMC,UAAA,GAAa,mBAAIC,GAAA,CAAY;AAmC5B,SAASC,cAAmCC,SAAA,EAAkC;EACnF,IAAIH,UAAA,CAAWI,GAAA,CAAID,SAAS,GAC1B,MAAM,IAAIE,KAAA,CAAM,qCAAqCF,SAAS,EAAE;EAElEH,UAAA,CAAWM,GAAA,CAAIH,SAAS;EAExB,MAAMI,MAAA,GAAS,GAAGJ,SAAS;IACrBK,SAAA,GAAaC,GAAA,IAAgB,GAAGF,MAAM,GAAGE,GAAG;EAElD,OAAO;IACLC,IAAID,GAAA,EAAuB;MACzB,MAAME,MAAA,GAASZ,gBAAA,CAAiB;MAChC,IAAI,CAACY,MAAA,EAAQ;MACb,MAAMC,GAAA,GAAMD,MAAA,CAAOE,OAAA,CAAQL,SAAA,CAAUC,GAAG,CAAC;MACzC,IAAIG,GAAA,IAAO,MACX,IAAI;QACF,OAAOE,IAAA,CAAKC,KAAA,CAAMH,GAAG;MACvB,QAAQ;QACN;MACF;IACF;IAEAI,IAAIP,GAAA,EAAQQ,KAAA,EAAgB;MAC1B,MAAMN,MAAA,GAASZ,gBAAA,CAAiB;MAC3BY,MAAA,IACLA,MAAA,CAAOO,OAAA,CAAQV,SAAA,CAAUC,GAAG,GAAGK,IAAA,CAAKK,SAAA,CAAUF,KAAK,CAAC;IACtD;IAEAG,OAAOX,GAAA,EAAc;MACnB,MAAME,MAAA,GAASZ,gBAAA,CAAiB;MAC3BY,MAAA,IACLA,MAAA,CAAOU,UAAA,CAAWb,SAAA,CAAUC,GAAG,CAAC;IAClC;IAEAL,IAAIK,GAAA,EAAiB;MACnB,MAAME,MAAA,GAASZ,gBAAA,CAAiB;MAChC,OAAKY,MAAA,GACEA,MAAA,CAAOE,OAAA,CAAQL,SAAA,CAAUC,GAAG,CAAC,KAAK,OADrB;IAEtB;IAEAa,KAAA,EAAY;MACV,MAAMX,MAAA,GAASZ,gBAAA,CAAiB;MAChC,OAAKY,MAAA,GACEA,MAAA,CACJY,UAAA,CAAW,EACXC,MAAA,CAAQC,CAAA,IAAMA,CAAA,CAAEC,UAAA,CAAWnB,MAAM,CAAC,EAClCoB,GAAA,CAAKF,CAAA,IAAMA,CAAA,CAAEG,KAAA,CAAMrB,MAAA,CAAOsB,MAAM,CAAM,IAJrB,EAAC;IAKvB;IAEAC,MAAA,EAAc;MACZ,MAAMnB,MAAA,GAASZ,gBAAA,CAAiB;MAChC,IAAKY,MAAA,EACL,WAAWF,GAAA,IAAO,KAAKa,IAAA,CAAK,GAC1BX,MAAA,CAAOU,UAAA,CAAWb,SAAA,CAAUC,GAAG,CAAC;IAEpC;IAEAI,QAAQJ,GAAA,EAAuB;MAC7B,MAAME,MAAA,GAASZ,gBAAA,CAAiB;MAChC,OAAKY,MAAA,GACEA,MAAA,CAAOE,OAAA,CAAQL,SAAA,CAAUC,GAAG,CAAC,KAAK,OADrB;IAEtB;IAEAS,QAAQT,GAAA,EAAQQ,KAAA,EAAqB;MACnC,MAAMN,MAAA,GAASZ,gBAAA,CAAiB;MAC3BY,MAAA,IACLA,MAAA,CAAOO,OAAA,CAAQV,SAAA,CAAUC,GAAG,GAAGQ,KAAK;IACtC;EACF;AACF;AA0BO,SAASc,mBAAsBtB,GAAA,EAA8B;EAClE,MAAMuB,OAAA,GAAU9B,aAAA,CAA0B,MAAMO,GAAG,EAAE;EACrD,OAAO;IACLC,GAAA,EAAKA,CAAA,KAAqBsB,OAAA,CAAQtB,GAAA,CAAI,OAAO;IAC7CM,GAAA,EAAMC,KAAA,IAAmBe,OAAA,CAAQhB,GAAA,CAAI,SAASC,KAAK;IACnDG,MAAA,EAAQA,CAAA,KAAYY,OAAA,CAAQZ,MAAA,CAAO,OAAO;IAC1ChB,GAAA,EAAKA,CAAA,KAAe4B,OAAA,CAAQ5B,GAAA,CAAI,OAAO;EACzC;AACF","ignoreList":[]}
1
+ {"version":3,"names":["getStorageDriver","globalKey","globalCache","globalThis","namespaces","Set","instances","Map","createStorage","namespace","existing","get","add","prefix","prefixKey","key","storage","driver","raw","getItem","JSON","parse","set","value","setItem","stringify","remove","removeItem","has","keys","getAllKeys","filter","k","startsWith","map","slice","length","clear","createStorageValue"],"sources":["../../../src/storage/createStorage.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,QAAwB;AAGjC,MAAMC,SAAA,GAAY;EACZC,WAAA,GAAgBC,UAAA,CAAmBF,SAAS,MAAM;IACtDG,UAAA,EAAY,mBAAIC,GAAA,CAAY;IAC5BC,SAAA,EAAW,mBAAIC,GAAA,CAA+B;EAChD;AAsCO,SAASC,cAAmCC,SAAA,EAAkC;EAEnF,MAAMC,QAAA,GAAWR,WAAA,CAAYI,SAAA,CAAUK,GAAA,CAAIF,SAAS;EACpD,IAAIC,QAAA,EACF,OAAOA,QAAA;EAGTR,WAAA,CAAYE,UAAA,CAAWQ,GAAA,CAAIH,SAAS;EAEpC,MAAMI,MAAA,GAAS,GAAGJ,SAAS;IACrBK,SAAA,GAAaC,GAAA,IAAgB,GAAGF,MAAM,GAAGE,GAAG;IAE5CC,OAAA,GAAyB;MAC7BL,IAAII,GAAA,EAAuB;QACzB,MAAME,MAAA,GAASjB,gBAAA,CAAiB;QAChC,IAAI,CAACiB,MAAA,EAAQ;QACb,MAAMC,GAAA,GAAMD,MAAA,CAAOE,OAAA,CAAQL,SAAA,CAAUC,GAAG,CAAC;QACzC,IAAIG,GAAA,IAAO,MACX,IAAI;UACF,OAAOE,IAAA,CAAKC,KAAA,CAAMH,GAAG;QACvB,QAAQ;UACN;QACF;MACF;MAEAI,IAAIP,GAAA,EAAQQ,KAAA,EAAgB;QAC1B,MAAMN,MAAA,GAASjB,gBAAA,CAAiB;QAC3BiB,MAAA,IACLA,MAAA,CAAOO,OAAA,CAAQV,SAAA,CAAUC,GAAG,GAAGK,IAAA,CAAKK,SAAA,CAAUF,KAAK,CAAC;MACtD;MAEAG,OAAOX,GAAA,EAAc;QACnB,MAAME,MAAA,GAASjB,gBAAA,CAAiB;QAC3BiB,MAAA,IACLA,MAAA,CAAOU,UAAA,CAAWb,SAAA,CAAUC,GAAG,CAAC;MAClC;MAEAa,IAAIb,GAAA,EAAiB;QACnB,MAAME,MAAA,GAASjB,gBAAA,CAAiB;QAChC,OAAKiB,MAAA,GACEA,MAAA,CAAOE,OAAA,CAAQL,SAAA,CAAUC,GAAG,CAAC,KAAK,OADrB;MAEtB;MAEAc,KAAA,EAAY;QACV,MAAMZ,MAAA,GAASjB,gBAAA,CAAiB;QAChC,OAAKiB,MAAA,GACEA,MAAA,CACJa,UAAA,CAAW,EACXC,MAAA,CAAQC,CAAA,IAAMA,CAAA,CAAEC,UAAA,CAAWpB,MAAM,CAAC,EAClCqB,GAAA,CAAKF,CAAA,IAAMA,CAAA,CAAEG,KAAA,CAAMtB,MAAA,CAAOuB,MAAM,CAAM,IAJrB,EAAC;MAKvB;MAEAC,MAAA,EAAc;QACZ,MAAMpB,MAAA,GAASjB,gBAAA,CAAiB;QAChC,IAAKiB,MAAA,EACL,WAAWF,GAAA,IAAO,KAAKc,IAAA,CAAK,GAC1BZ,MAAA,CAAOU,UAAA,CAAWb,SAAA,CAAUC,GAAG,CAAC;MAEpC;MAEAI,QAAQJ,GAAA,EAAuB;QAC7B,MAAME,MAAA,GAASjB,gBAAA,CAAiB;QAChC,OAAKiB,MAAA,GACEA,MAAA,CAAOE,OAAA,CAAQL,SAAA,CAAUC,GAAG,CAAC,KAAK,OADrB;MAEtB;MAEAS,QAAQT,GAAA,EAAQQ,KAAA,EAAqB;QACnC,MAAMN,MAAA,GAASjB,gBAAA,CAAiB;QAC3BiB,MAAA,IACLA,MAAA,CAAOO,OAAA,CAAQV,SAAA,CAAUC,GAAG,GAAGQ,KAAK;MACtC;IACF;EAEA,OAAArB,WAAA,CAAYI,SAAA,CAAUgB,GAAA,CAAIb,SAAA,EAAWO,OAAO,GACrCA,OAAA;AACT;AA0BO,SAASsB,mBAAsBvB,GAAA,EAA8B;EAClE,MAAMC,OAAA,GAAUR,aAAA,CAA0B,MAAMO,GAAG,EAAE;EACrD,OAAO;IACLJ,GAAA,EAAKA,CAAA,KAAqBK,OAAA,CAAQL,GAAA,CAAI,OAAO;IAC7CW,GAAA,EAAMC,KAAA,IAAmBP,OAAA,CAAQM,GAAA,CAAI,SAASC,KAAK;IACnDG,MAAA,EAAQA,CAAA,KAAYV,OAAA,CAAQU,MAAA,CAAO,OAAO;IAC1CE,GAAA,EAAKA,CAAA,KAAeZ,OAAA,CAAQY,GAAA,CAAI,OAAO;EACzC;AACF","ignoreList":[]}
@@ -1,77 +1,86 @@
1
1
  import { getStorageDriver } from "./driver.native.js";
2
- var namespaces = /* @__PURE__ */new Set();
2
+ var _globalThis,
3
+ _globalKey,
4
+ globalKey = "__takeout_storage__",
5
+ _,
6
+ globalCache = (_ = (_globalThis = globalThis)[_globalKey = globalKey]) !== null && _ !== void 0 ? _ : _globalThis[_globalKey] = {
7
+ namespaces: /* @__PURE__ */new Set(),
8
+ instances: /* @__PURE__ */new Map()
9
+ };
3
10
  function createStorage(namespace) {
4
- if (namespaces.has(namespace)) throw new Error(`storage namespace already exists: ${namespace}`);
5
- namespaces.add(namespace);
11
+ var existing = globalCache.instances.get(namespace);
12
+ if (existing) return existing;
13
+ globalCache.namespaces.add(namespace);
6
14
  var prefix = `${namespace}:`,
7
15
  prefixKey = function (key) {
8
16
  return `${prefix}${key}`;
9
- };
10
- return {
11
- get(key) {
12
- var driver = getStorageDriver();
13
- if (driver) {
14
- var raw = driver.getItem(prefixKey(key));
15
- if (raw != null) try {
16
- return JSON.parse(raw);
17
- } catch {
18
- return;
19
- }
20
- }
21
- },
22
- set(key, value) {
23
- var driver = getStorageDriver();
24
- driver && driver.setItem(prefixKey(key), JSON.stringify(value));
25
- },
26
- remove(key) {
27
- var driver = getStorageDriver();
28
- driver && driver.removeItem(prefixKey(key));
29
- },
30
- has(key) {
31
- var driver = getStorageDriver();
32
- return driver ? driver.getItem(prefixKey(key)) != null : !1;
33
17
  },
34
- keys() {
35
- var driver = getStorageDriver();
36
- return driver ? driver.getAllKeys().filter(function (k) {
37
- return k.startsWith(prefix);
38
- }).map(function (k) {
39
- return k.slice(prefix.length);
40
- }) : [];
41
- },
42
- clear() {
43
- var driver = getStorageDriver();
44
- if (driver) {
45
- var _iteratorNormalCompletion = !0,
46
- _didIteratorError = !1,
47
- _iteratorError = void 0;
48
- try {
49
- for (var _iterator = this.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
50
- var key = _step.value;
51
- driver.removeItem(prefixKey(key));
18
+ storage = {
19
+ get(key) {
20
+ var driver = getStorageDriver();
21
+ if (driver) {
22
+ var raw = driver.getItem(prefixKey(key));
23
+ if (raw != null) try {
24
+ return JSON.parse(raw);
25
+ } catch {
26
+ return;
52
27
  }
53
- } catch (err) {
54
- _didIteratorError = !0, _iteratorError = err;
55
- } finally {
28
+ }
29
+ },
30
+ set(key, value) {
31
+ var driver = getStorageDriver();
32
+ driver && driver.setItem(prefixKey(key), JSON.stringify(value));
33
+ },
34
+ remove(key) {
35
+ var driver = getStorageDriver();
36
+ driver && driver.removeItem(prefixKey(key));
37
+ },
38
+ has(key) {
39
+ var driver = getStorageDriver();
40
+ return driver ? driver.getItem(prefixKey(key)) != null : !1;
41
+ },
42
+ keys() {
43
+ var driver = getStorageDriver();
44
+ return driver ? driver.getAllKeys().filter(function (k) {
45
+ return k.startsWith(prefix);
46
+ }).map(function (k) {
47
+ return k.slice(prefix.length);
48
+ }) : [];
49
+ },
50
+ clear() {
51
+ var driver = getStorageDriver();
52
+ if (driver) {
53
+ var _iteratorNormalCompletion = !0,
54
+ _didIteratorError = !1,
55
+ _iteratorError = void 0;
56
56
  try {
57
- !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
57
+ for (var _iterator = this.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
58
+ var key = _step.value;
59
+ driver.removeItem(prefixKey(key));
60
+ }
61
+ } catch (err) {
62
+ _didIteratorError = !0, _iteratorError = err;
58
63
  } finally {
59
- if (_didIteratorError) throw _iteratorError;
64
+ try {
65
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
66
+ } finally {
67
+ if (_didIteratorError) throw _iteratorError;
68
+ }
60
69
  }
61
70
  }
71
+ },
72
+ getItem(key) {
73
+ var driver = getStorageDriver();
74
+ if (!driver) return null;
75
+ var _driver_getItem;
76
+ return (_driver_getItem = driver.getItem(prefixKey(key))) !== null && _driver_getItem !== void 0 ? _driver_getItem : null;
77
+ },
78
+ setItem(key, value) {
79
+ var driver = getStorageDriver();
80
+ driver && driver.setItem(prefixKey(key), value);
62
81
  }
63
- },
64
- getItem(key) {
65
- var driver = getStorageDriver();
66
- if (!driver) return null;
67
- var _driver_getItem;
68
- return (_driver_getItem = driver.getItem(prefixKey(key))) !== null && _driver_getItem !== void 0 ? _driver_getItem : null;
69
- },
70
- setItem(key, value) {
71
- var driver = getStorageDriver();
72
- driver && driver.setItem(prefixKey(key), value);
73
- }
74
- };
82
+ };
83
+ return globalCache.instances.set(namespace, storage), storage;
75
84
  }
76
85
  function createStorageValue(key) {
77
86
  var storage = createStorage(`_v:${key}`);
@@ -1 +1 @@
1
- {"version":3,"names":["getStorageDriver","namespaces","Set","createStorage","namespace","has","Error","add","prefix","prefixKey","key","get","driver","raw","getItem","JSON","parse","set","value","setItem","stringify","remove","removeItem","keys","getAllKeys","filter","k","startsWith","map","slice","length","clear","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","err","return"],"sources":["../../../src/storage/createStorage.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,QAAwB;AAEjC,IAAAC,UAAM,kBAAa,IAAAC,GAAI;AAmChB,SAASC,cAAmCC,SAAA,EAAkC;EACnF,IAAIH,UAAA,CAAWI,GAAA,CAAID,SAAS,GAC1B,MAAM,IAAIE,KAAA,CAAM,qCAAqCF,SAAS,EAAE;EAElEH,UAAA,CAAWM,GAAA,CAAIH,SAAS;EAExB,IAAAI,MAAM,MAASJ,SAAG,GAAS;IAAAK,SACrB,YAAAA,CAAaC,GAAgB,EAAG;MAEtC,OAAO,GAAAF,MAAA,GAAAE,GAAA;IAAA;EAEH;IACAC,IAAAD,GAAK;MACL,IAAAE,MAAM,GAAMZ,gBAAe;MAC3B,IAAIY,MAAA,EAAO;QACX,IAAIC,GAAA,GAAAD,MAAA,CAAAE,OAAA,CAAAL,SAAA,CAAAC,GAAA;QACF,IAAAG,GAAA,IAAO,IAAK,EACd;UACE,OAAAE,IAAA,CAAAC,KAAA,CAAAH,GAAA;QACF;UACF;QAEI;MACF;IACA;IAEFI,IAAAP,GAAA,EAAAQ,KAAA;MAEA,IAAAN,MAAqB,GAAAZ,gBAAA;MACnBY,MAAM,IAAAA,MAAS,CAAAO,OAAA,CAAAV,SAAiB,CAAAC,GAAA,GAAAK,IAAA,CAAAK,SAAA,CAAAF,KAAA;IAChC;IAEFG,OAAAX,GAAA;MAEA,IAAIE,MAAiB,GAAAZ,gBAAA;MACnBY,MAAM,IAAAA,MAAS,CAAAU,UAAA,CAAAb,SAAiB,CAAAC,GAAA;IAChC;IAEFL,IAAAK,GAAA;MAEA,IAAAE,MAAY,GAAAZ,gBAAA;MACV,OAAMY,MAAA,GAASA,MAAA,CAAAE,OAAA,CAAAL,SAAiB,CAAAC,GAAA;IAChC;IAKFa,KAAA;MAEA,IAAAX,MAAc,GAAAZ,gBAAA;MACZ,OAAMY,MAAA,GAASA,MAAA,CAAAY,UAAiB,GAAAC,MAAA,WAAAC,CAAA;QAChC,OAAKA,CAAA,CAAAC,UAAA,CAAAnB,MAAA;MACL,GAAAoB,GAAA,WAAWF,CAAA;QACT,OAAAA,CAAA,CAAOG,KAAA,CAAArB,MAAW,CAAAsB,MAAA;MAEtB;IAEA;IACEC,MAAA,EAAM;MACN,IAAAnB,MAAK,GAAAZ,gBACS,EAAQ;MACxB,IAAAY,MAAA;QAEA,IAAQoB,yBAA6B;UAAAC,iBAAA;UAAAC,cAAA;QACnC,IAAM;UACD,SACLC,SAAO,GAAQ,KAAAZ,IAAA,CAAU,EAAAa,MAAM,CAAAC,QAAK,KAAAC,KAAA,IAAAN,yBAAA,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;YACtC,IAAAtB,GAAA,GAAA4B,KAAA,CAAApB,KAAA;YACFN,MAAA,CAAAU,UAAA,CAAAb,SAAA,CAAAC,GAAA;UACF;QA0BO,CAAS,QAAA+B,GAAA;UACRR,iBAAU,KAA0B,EAAAC,cAAW,GAAAO,GAAA;QACrD,CAAO;UACA;YACC,CAAAT,yBAA+B,IAASG,SAAK,CAAAO,MAAA,YAAAP,SAAA,CAAAO,MAAA;UACnD,UAAoB;YACf,IAAeT,iBAAY,EAClC,MAAAC,cAAA;UACF","ignoreList":[]}
1
+ {"version":3,"names":["getStorageDriver","_globalThis","_globalKey","globalKey","_","globalCache","globalThis","namespaces","Set","instances","Map","createStorage","namespace","existing","get","add","prefix","prefixKey","key","storage","driver","raw","getItem","JSON","parse","set","value","setItem","stringify","remove","removeItem","has","keys","getAllKeys","filter","k","startsWith","map","slice","length","clear","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","err","return"],"sources":["../../../src/storage/createStorage.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,QAAwB;AAGjC,IAAAC,WAAM;EAAAC,UAAY;EAAAC,SAAA,GACZ,qBAAgB;EAAAC,CAAA;EAAmBC,WAAS,GAAM,CAAAD,CAAA,IAAAH,WAAA,GAAAK,UAAA,EAAAJ,UAAA,GAAAC,SAAA,eAAAC,CAAA,cAAAA,CAAA,GAAAH,WAAA,CAAAC,UAAA;IACtDK,UAAA,EAAY,mBAAIC,GAAA,CAAY;IAC5BC,SAAA,EAAW,mBAAIC,GAAA,CAA+B;EAChD;AAsCO,SAASC,cAAmCC,SAAA,EAAkC;EAEnF,IAAAC,QAAM,GAAAR,WAAW,CAAAI,SAAY,CAAAK,GAAU,CAAAF,SAAI;EAC3C,IAAIC,QAAA,EACF,OAAOA,QAAA;EAGTR,WAAA,CAAYE,UAAA,CAAWQ,GAAA,CAAIH,SAAS;EAEpC,IAAAI,MAAM,MAASJ,SAAG,GAAS;IAAAK,SACrB,YAAAA,CAAaC,GAAgB,EAAG;MAGpC,OAAI,GAAuBF,MAAA,GAAAE,GAAA;IACzB;IAAAC,OAAM;MACNL,IAAAI,GAAK;QACL,IAAAE,MAAM,GAAMpB,gBAAe;QAC3B,IAAIoB,MAAA,EAAO;UACX,IAAIC,GAAA,GAAAD,MAAA,CAAAE,OAAA,CAAAL,SAAA,CAAAC,GAAA;UACF,IAAAG,GAAA,IAAO,IAAK,EACd;YACE,OAAAE,IAAA,CAAAC,KAAA,CAAAH,GAAA;UACF;YACF;UAEI;QACF;MACA;MAEFI,IAAAP,GAAA,EAAAQ,KAAA;QAEA,IAAAN,MAAqB,GAAApB,gBAAA;QACnBoB,MAAM,IAAAA,MAAS,CAAAO,OAAA,CAAAV,SAAiB,CAAAC,GAAA,GAAAK,IAAA,CAAAK,SAAA,CAAAF,KAAA;MAChC;MAEFG,OAAAX,GAAA;QAEA,IAAIE,MAAiB,GAAApB,gBAAA;QACnBoB,MAAM,IAAAA,MAAS,CAAAU,UAAA,CAAAb,SAAiB,CAAAC,GAAA;MAChC;MAEFa,IAAAb,GAAA;QAEA,IAAAE,MAAY,GAAApB,gBAAA;QACV,OAAMoB,MAAA,GAASA,MAAA,CAAAE,OAAA,CAAAL,SAAiB,CAAAC,GAAA;MAChC;MAKFc,KAAA;QAEA,IAAAZ,MAAc,GAAApB,gBAAA;QACZ,OAAMoB,MAAA,GAASA,MAAA,CAAAa,UAAiB,GAAAC,MAAA,WAAAC,CAAA;UAChC,OAAKA,CAAA,CAAAC,UAAA,CAAApB,MAAA;QACL,GAAAqB,GAAA,WAAWF,CAAA;UACT,OAAAA,CAAA,CAAOG,KAAA,CAAAtB,MAAW,CAAAuB,MAAA;QAEtB;MAEA;MACEC,MAAA,EAAM;QACN,IAAApB,MAAK,GAAApB,gBACS,EAAQ;QACxB,IAAAoB,MAAA;UAEA,IAAQqB,yBAA6B;YAAAC,iBAAA;YAAAC,cAAA;UACnC,IAAM;YACD,SACLC,SAAO,GAAQ,KAAAZ,IAAA,CAAU,EAAAa,MAAM,CAAAC,QAAK,KAAAC,KAAA,IAAAN,yBAAA,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;cACtC,IAAAvB,GAAA,GAAA6B,KAAA,CAAArB,KAAA;cACFN,MAAA,CAAAU,UAAA,CAAAb,SAAA,CAAAC,GAAA;YAEA;UAEF,SAAAgC,GAAA;YA0BgBR,iBAAA,GAAsB,IAA8BC,cAAA,GAAAO,GAAA;UAC5D,UAAU;YACT;cACA,CAAAT,yBAAwC,IAAAG,SAAA,CAAAO,MAAA,YAAAP,SAAA,CAAAO,MAAA;YACvC,UAAmB;cACjB,IAAAT,iBAA2B,EAC9B,MAAeC,cAAmB;YACzC;UACF","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@take-out/helpers",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "source": "src/index.ts",
@@ -1,6 +1,14 @@
1
1
  import { getStorageDriver } from './driver'
2
2
 
3
- const namespaces = new Set<string>()
3
+ // hmr-safe: store caches on globalThis so they survive module reloads
4
+ const globalKey = '__takeout_storage__'
5
+ const globalCache = ((globalThis as any)[globalKey] ??= {
6
+ namespaces: new Set<string>(),
7
+ instances: new Map<string, Storage<any, any>>(),
8
+ }) as {
9
+ namespaces: Set<string>
10
+ instances: Map<string, Storage<any, any>>
11
+ }
4
12
 
5
13
  /**
6
14
  * namespaced storage interface with JSON serialization
@@ -27,8 +35,8 @@ export interface Storage<K extends string = string, V = unknown> {
27
35
  }
28
36
 
29
37
  /**
30
- * create a namespaced storage instance
31
- * @param namespace - unique prefix for all keys (throws if already used)
38
+ * create a namespaced storage instance (hmr-safe, returns existing instance if already created)
39
+ * @param namespace - unique prefix for all keys
32
40
  * @returns storage instance with get/set (JSON) and getItem/setItem (raw) methods
33
41
  * @example
34
42
  * const store = createStorage<'token' | 'user', string>('auth')
@@ -36,15 +44,18 @@ export interface Storage<K extends string = string, V = unknown> {
36
44
  * store.get('token') // 'abc123'
37
45
  */
38
46
  export function createStorage<K extends string, V>(namespace: string): Storage<K, V> {
39
- if (namespaces.has(namespace)) {
40
- throw new Error(`storage namespace already exists: ${namespace}`)
47
+ // return existing instance for hmr safety
48
+ const existing = globalCache.instances.get(namespace)
49
+ if (existing) {
50
+ return existing as Storage<K, V>
41
51
  }
42
- namespaces.add(namespace)
52
+
53
+ globalCache.namespaces.add(namespace)
43
54
 
44
55
  const prefix = `${namespace}:`
45
56
  const prefixKey = (key: string) => `${prefix}${key}`
46
57
 
47
- return {
58
+ const storage: Storage<K, V> = {
48
59
  get(key: K): V | undefined {
49
60
  const driver = getStorageDriver()
50
61
  if (!driver) return undefined
@@ -104,6 +115,9 @@ export function createStorage<K extends string, V>(namespace: string): Storage<K
104
115
  driver.setItem(prefixKey(key), value)
105
116
  },
106
117
  }
118
+
119
+ globalCache.instances.set(namespace, storage)
120
+ return storage
107
121
  }
108
122
 
109
123
  /**