@take-out/helpers 0.0.32 → 0.0.34

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 (128) hide show
  1. package/dist/cjs/async/useAsync.native.js +1 -1
  2. package/dist/cjs/async/useAsyncEffect.js.map +1 -1
  3. package/dist/cjs/async/useLazyMount.js.map +1 -1
  4. package/dist/cjs/async/useLazyValue.js.map +1 -1
  5. package/dist/cjs/emitter.cjs +1 -1
  6. package/dist/cjs/emitter.js +1 -1
  7. package/dist/cjs/emitter.js.map +1 -1
  8. package/dist/cjs/emitter.native.js +1 -1
  9. package/dist/cjs/emitter.native.js.map +1 -1
  10. package/dist/cjs/index.cjs +1 -2
  11. package/dist/cjs/index.js +1 -2
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/index.native.js +2 -4
  14. package/dist/cjs/index.native.js.map +1 -1
  15. package/dist/cjs/react/createGlobalContext.js.map +1 -1
  16. package/dist/cjs/storage/createStorage.cjs +83 -0
  17. package/dist/cjs/storage/createStorage.js +81 -0
  18. package/dist/cjs/storage/createStorage.js.map +6 -0
  19. package/dist/cjs/storage/createStorage.native.js +118 -0
  20. package/dist/cjs/storage/createStorage.native.js.map +6 -0
  21. package/dist/cjs/storage/driver.cjs +38 -0
  22. package/dist/cjs/storage/driver.js +33 -0
  23. package/dist/cjs/storage/driver.js.map +6 -0
  24. package/dist/cjs/storage/driver.native.js +47 -0
  25. package/dist/cjs/storage/driver.native.js.map +6 -0
  26. package/dist/cjs/storage/index.cjs +30 -0
  27. package/dist/cjs/storage/index.js +24 -0
  28. package/dist/cjs/storage/index.js.map +6 -0
  29. package/dist/cjs/storage/index.native.js +32 -0
  30. package/dist/cjs/storage/index.native.js.map +6 -0
  31. package/dist/cjs/storage/types.cjs +16 -0
  32. package/dist/cjs/storage/types.js +14 -0
  33. package/dist/cjs/storage/types.js.map +6 -0
  34. package/dist/cjs/storage/types.native.js +15 -0
  35. package/dist/cjs/storage/types.native.js.map +6 -0
  36. package/dist/esm/async/useAsync.native.js +1 -1
  37. package/dist/esm/async/useAsyncEffect.js.map +1 -1
  38. package/dist/esm/async/useAsyncEffect.mjs.map +1 -1
  39. package/dist/esm/async/useAsyncEffect.native.js.map +1 -1
  40. package/dist/esm/async/useLazyMount.js.map +1 -1
  41. package/dist/esm/async/useLazyMount.mjs.map +1 -1
  42. package/dist/esm/async/useLazyMount.native.js.map +1 -1
  43. package/dist/esm/async/useLazyValue.js.map +1 -1
  44. package/dist/esm/async/useLazyValue.mjs.map +1 -1
  45. package/dist/esm/async/useLazyValue.native.js.map +1 -1
  46. package/dist/esm/emitter.js +1 -1
  47. package/dist/esm/emitter.js.map +1 -1
  48. package/dist/esm/emitter.mjs +1 -1
  49. package/dist/esm/emitter.mjs.map +1 -1
  50. package/dist/esm/emitter.native.js +1 -1
  51. package/dist/esm/emitter.native.js.map +1 -1
  52. package/dist/esm/index.js +1 -2
  53. package/dist/esm/index.js.map +1 -1
  54. package/dist/esm/index.mjs +1 -2
  55. package/dist/esm/index.mjs.map +1 -1
  56. package/dist/esm/index.native.js +1 -2
  57. package/dist/esm/index.native.js.map +1 -1
  58. package/dist/esm/react/createGlobalContext.js.map +1 -1
  59. package/dist/esm/react/createGlobalContext.mjs.map +1 -1
  60. package/dist/esm/react/createGlobalContext.native.js.map +1 -1
  61. package/dist/esm/storage/createStorage.js +65 -0
  62. package/dist/esm/storage/createStorage.js.map +6 -0
  63. package/dist/esm/storage/createStorage.mjs +59 -0
  64. package/dist/esm/storage/createStorage.mjs.map +1 -0
  65. package/dist/esm/storage/createStorage.native.js +94 -0
  66. package/dist/esm/storage/createStorage.native.js.map +1 -0
  67. package/dist/esm/storage/driver.js +17 -0
  68. package/dist/esm/storage/driver.js.map +6 -0
  69. package/dist/esm/storage/driver.mjs +14 -0
  70. package/dist/esm/storage/driver.mjs.map +1 -0
  71. package/dist/esm/storage/driver.native.js +22 -0
  72. package/dist/esm/storage/driver.native.js.map +1 -0
  73. package/dist/esm/storage/index.js +9 -0
  74. package/dist/esm/storage/index.js.map +6 -0
  75. package/dist/esm/storage/index.mjs +4 -0
  76. package/dist/esm/storage/index.mjs.map +1 -0
  77. package/dist/esm/storage/index.native.js +4 -0
  78. package/dist/esm/storage/index.native.js.map +1 -0
  79. package/dist/esm/storage/types.js +1 -0
  80. package/dist/esm/storage/types.js.map +6 -0
  81. package/dist/esm/storage/types.mjs +2 -0
  82. package/dist/esm/storage/types.mjs.map +1 -0
  83. package/dist/esm/storage/types.native.js +2 -0
  84. package/dist/esm/storage/types.native.js.map +1 -0
  85. package/package.json +6 -6
  86. package/src/async/asyncContext.ts +2 -2
  87. package/src/async/useAsync.ts +1 -1
  88. package/src/async/useAsyncEffect.ts +3 -2
  89. package/src/async/useLazyMount.ts +3 -1
  90. package/src/async/useLazyValue.ts +1 -0
  91. package/src/emitter.tsx +8 -7
  92. package/src/index.ts +3 -2
  93. package/src/object/object.ts +1 -1
  94. package/src/react/createGlobalContext.ts +1 -0
  95. package/src/storage/createStorage.ts +141 -0
  96. package/src/storage/driver.ts +20 -0
  97. package/src/storage/index.ts +4 -0
  98. package/src/storage/types.ts +6 -0
  99. package/types/async/asyncContext.d.ts.map +1 -1
  100. package/types/async/useAsync.d.ts.map +1 -1
  101. package/types/async/useAsyncEffect.d.ts.map +2 -2
  102. package/types/async/useLazyMount.d.ts +1 -1
  103. package/types/async/useLazyMount.d.ts.map +2 -2
  104. package/types/async/useLazyValue.d.ts.map +2 -2
  105. package/types/emitter.d.ts.map +2 -2
  106. package/types/index.d.ts +2 -2
  107. package/types/index.d.ts.map +2 -2
  108. package/types/object/object.d.ts +1 -1
  109. package/types/object/object.d.ts.map +2 -2
  110. package/types/react/createGlobalContext.d.ts.map +2 -2
  111. package/types/storage/createStorage.d.ts +65 -0
  112. package/types/storage/createStorage.d.ts.map +18 -0
  113. package/types/storage/driver.d.ts +5 -0
  114. package/types/storage/driver.d.ts.map +13 -0
  115. package/types/storage/index.d.ts +6 -0
  116. package/types/storage/index.d.ts.map +11 -0
  117. package/types/storage/types.d.ts +8 -0
  118. package/types/storage/types.d.ts.map +14 -0
  119. package/src/array/fuzzy.ts +0 -39
  120. package/src/browser/localStorage.ts +0 -311
  121. package/types/ensure/catchEnsureErrors.d.ts +0 -3
  122. package/types/ensure/catchEnsureErrors.d.ts.map +0 -13
  123. package/types/ensure/ensureSingleton.d.ts +0 -7
  124. package/types/ensure/ensureSingleton.d.ts.map +0 -14
  125. package/types/files/download.d.ts +0 -4
  126. package/types/files/download.d.ts.map +0 -16
  127. package/types/global/globalContext.d.ts +0 -6
  128. package/types/global/globalContext.d.ts.map +0 -14
@@ -1,6 +1,5 @@
1
1
  export * from "./constants.native.js";
2
2
  export * from "./emitter.native.js";
3
- export * from "./array/fuzzy.native.js";
4
3
  export * from "./array/getRandomItem.native.js";
5
4
  export * from "./array/takeLast.native.js";
6
5
  export * from "./array/uniqBy.native.js";
@@ -17,7 +16,6 @@ export * from "./async/useLazyMount.native.js";
17
16
  export * from "./async/useLazyValue.native.js";
18
17
  export * from "./browser/clearIndexedDB.native.js";
19
18
  export * from "./browser/isActiveElementFormField.native.js";
20
- export * from "./browser/localStorage.native.js";
21
19
  export * from "./browser/openPopup.native.js";
22
20
  export * from "./debug/debugLog.native.js";
23
21
  export * from "./debug/debugUseState.native.js";
@@ -41,6 +39,7 @@ export * from "./object/object.native.js";
41
39
  export * from "./object/objectUniqueKey.native.js";
42
40
  export * from "./react/createGlobalContext.native.js";
43
41
  export * from "./react/getCurrentComponentStack.native.js";
42
+ export * from "./storage";
44
43
  export * from "./server/ensureEnv.native.js";
45
44
  export * from "./server/getHeaders.native.js";
46
45
  export * from "./server/prettyPrintRequest.native.js";
@@ -1 +1 @@
1
- {"version":3,"names":["isEqualDeepLite"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AAKd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,SAASA,eAAA,QAAuB;AAChC,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAUd,cAAc;AACd,cAAc","ignoreList":[]}
1
+ {"version":3,"names":["isEqualDeepLite"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AAKd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,SAASA,eAAA,QAAuB;AAChC,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAUd,cAAc;AACd,cAAc","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/react/createGlobalContext.ts"],
4
- "mappings": "AAAA,SAAuB,qBAAqB;AAC5C,SAAS,mBAAmB;AAKrB,SAAS,oBAAuB,KAAa,cAA6B;AAC/E,SAAO,YAAY,KAAK,MAAM,cAAiB,YAAY,CAAC;AAC9D;",
4
+ "mappings": "AAAA,SAAuB,qBAAqB;AAE5C,SAAS,mBAAmB;AAKrB,SAAS,oBAAuB,KAAa,cAA6B;AAC/E,SAAO,YAAY,KAAK,MAAM,cAAiB,YAAY,CAAC;AAC9D;",
5
5
  "names": []
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","globalValue","createGlobalContext","key","defaultValue"],"sources":["../../../src/react/createGlobalContext.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAuBA,aAAA,QAAqB;AAC5C,SAASC,WAAA,QAAmB;AAKrB,SAASC,oBAAuBC,GAAA,EAAaC,YAAA,EAA6B;EAC/E,OAAOH,WAAA,CAAYE,GAAA,EAAK,MAAMH,aAAA,CAAiBI,YAAY,CAAC;AAC9D","ignoreList":[]}
1
+ {"version":3,"names":["createContext","globalValue","createGlobalContext","key","defaultValue"],"sources":["../../../src/react/createGlobalContext.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAuBA,aAAA,QAAqB;AAE5C,SAASC,WAAA,QAAmB;AAKrB,SAASC,oBAAuBC,GAAA,EAAaC,YAAA,EAA6B;EAC/E,OAAOH,WAAA,CAAYE,GAAA,EAAK,MAAMH,aAAA,CAAiBI,YAAY,CAAC;AAC9D","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","globalValue","createGlobalContext","key","defaultValue"],"sources":["../../../src/react/createGlobalContext.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAuBA,aAAA,QAAqB;AAC5C,SAASC,WAAA,QAAmB;AAKrB,SAASC,oBAAuBC,GAAA,EAAaC,YAAA,EAA6B;EAC/E,OAAOH,WAAA,CAAYE,GAAA,EAAK,YAAM;IAChC,OAAAH,aAAA,CAAAI,YAAA","ignoreList":[]}
1
+ {"version":3,"names":["createContext","globalValue","createGlobalContext","key","defaultValue"],"sources":["../../../src/react/createGlobalContext.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAuBA,aAAA,QAAqB;AAE5C,SAASC,WAAA,QAAmB;AAKrB,SAASC,oBAAuBC,GAAA,EAAaC,YAAA,EAA6B;EAC/E,OAAOH,WAAA,CAAYE,GAAA,EAAK,YAAM;IAChC,OAAAH,aAAA,CAAAI,YAAA","ignoreList":[]}
@@ -0,0 +1,65 @@
1
+ import { getStorageDriver } from "./driver";
2
+ const namespaces = /* @__PURE__ */ new Set();
3
+ 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 {
9
+ get(key) {
10
+ const driver = getStorageDriver();
11
+ if (!driver) return;
12
+ const raw = driver.getItem(prefixKey(key));
13
+ if (raw != null)
14
+ try {
15
+ return JSON.parse(raw);
16
+ } catch {
17
+ return;
18
+ }
19
+ },
20
+ set(key, value) {
21
+ const driver = getStorageDriver();
22
+ driver && driver.setItem(prefixKey(key), JSON.stringify(value));
23
+ },
24
+ remove(key) {
25
+ const driver = getStorageDriver();
26
+ driver && driver.removeItem(prefixKey(key));
27
+ },
28
+ has(key) {
29
+ const driver = getStorageDriver();
30
+ return driver ? driver.getItem(prefixKey(key)) != null : !1;
31
+ },
32
+ keys() {
33
+ const driver = getStorageDriver();
34
+ return driver ? driver.getAllKeys().filter((k) => k.startsWith(prefix)).map((k) => k.slice(prefix.length)) : [];
35
+ },
36
+ clear() {
37
+ const driver = getStorageDriver();
38
+ if (driver)
39
+ for (const key of this.keys())
40
+ driver.removeItem(prefixKey(key));
41
+ },
42
+ getItem(key) {
43
+ const driver = getStorageDriver();
44
+ return driver ? driver.getItem(prefixKey(key)) ?? null : null;
45
+ },
46
+ setItem(key, value) {
47
+ const driver = getStorageDriver();
48
+ driver && driver.setItem(prefixKey(key), value);
49
+ }
50
+ };
51
+ }
52
+ function createStorageValue(key) {
53
+ const storage = createStorage(`_v:${key}`);
54
+ return {
55
+ get: () => storage.get("value"),
56
+ set: (value) => storage.set("value", value),
57
+ remove: () => storage.remove("value"),
58
+ has: () => storage.has("value")
59
+ };
60
+ }
61
+ export {
62
+ createStorage,
63
+ createStorageValue
64
+ };
65
+ //# sourceMappingURL=createStorage.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 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;",
5
+ "names": []
6
+ }
@@ -0,0 +1,59 @@
1
+ import { getStorageDriver } from "./driver.mjs";
2
+ const namespaces = /* @__PURE__ */new Set();
3
+ function createStorage(namespace) {
4
+ if (namespaces.has(namespace)) throw new Error(`storage namespace already exists: ${namespace}`);
5
+ namespaces.add(namespace);
6
+ 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;
17
+ }
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
+ };
48
+ }
49
+ function createStorageValue(key) {
50
+ const storage = createStorage(`_v:${key}`);
51
+ return {
52
+ get: () => storage.get("value"),
53
+ set: value => storage.set("value", value),
54
+ remove: () => storage.remove("value"),
55
+ has: () => storage.has("value")
56
+ };
57
+ }
58
+ export { createStorage, createStorageValue };
59
+ //# sourceMappingURL=createStorage.mjs.map
@@ -0,0 +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":"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","ignoreList":[]}
@@ -0,0 +1,94 @@
1
+ import { getStorageDriver } from "./driver.native.js";
2
+ var namespaces = /* @__PURE__ */new Set();
3
+ function createStorage(namespace) {
4
+ if (namespaces.has(namespace)) throw new Error(`storage namespace already exists: ${namespace}`);
5
+ namespaces.add(namespace);
6
+ var prefix = `${namespace}:`,
7
+ prefixKey = function (key) {
8
+ 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
+ },
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));
52
+ }
53
+ } catch (err) {
54
+ _didIteratorError = !0, _iteratorError = err;
55
+ } finally {
56
+ try {
57
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
58
+ } finally {
59
+ if (_didIteratorError) throw _iteratorError;
60
+ }
61
+ }
62
+ }
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
+ };
75
+ }
76
+ function createStorageValue(key) {
77
+ var storage = createStorage(`_v:${key}`);
78
+ return {
79
+ get: function () {
80
+ return storage.get("value");
81
+ },
82
+ set: function (value) {
83
+ return storage.set("value", value);
84
+ },
85
+ remove: function () {
86
+ return storage.remove("value");
87
+ },
88
+ has: function () {
89
+ return storage.has("value");
90
+ }
91
+ };
92
+ }
93
+ export { createStorage, createStorageValue };
94
+ //# sourceMappingURL=createStorage.native.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,17 @@
1
+ let driver = null;
2
+ function setStorageDriver(d) {
3
+ driver = d;
4
+ }
5
+ function getStorageDriver() {
6
+ return driver || (typeof localStorage < "u" ? {
7
+ getItem: (key) => localStorage.getItem(key),
8
+ setItem: (key, value) => localStorage.setItem(key, value),
9
+ removeItem: (key) => localStorage.removeItem(key),
10
+ getAllKeys: () => Object.keys(localStorage)
11
+ } : null);
12
+ }
13
+ export {
14
+ getStorageDriver,
15
+ setStorageDriver
16
+ };
17
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/storage/driver.ts"],
4
+ "mappings": "AAEA,IAAI,SAA+B;AAE5B,SAAS,iBAAiB,GAAwB;AACvD,WAAS;AACX;AAEO,SAAS,mBAAyC;AACvD,SAAI,WACA,OAAO,eAAiB,MACnB;AAAA,IACL,SAAS,CAAC,QAAQ,aAAa,QAAQ,GAAG;AAAA,IAC1C,SAAS,CAAC,KAAK,UAAU,aAAa,QAAQ,KAAK,KAAK;AAAA,IACxD,YAAY,CAAC,QAAQ,aAAa,WAAW,GAAG;AAAA,IAChD,YAAY,MAAM,OAAO,KAAK,YAAY;AAAA,EAC5C,IAEK;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,14 @@
1
+ let driver = null;
2
+ function setStorageDriver(d) {
3
+ driver = d;
4
+ }
5
+ function getStorageDriver() {
6
+ return driver || (typeof localStorage < "u" ? {
7
+ getItem: key => localStorage.getItem(key),
8
+ setItem: (key, value) => localStorage.setItem(key, value),
9
+ removeItem: key => localStorage.removeItem(key),
10
+ getAllKeys: () => Object.keys(localStorage)
11
+ } : null);
12
+ }
13
+ export { getStorageDriver, setStorageDriver };
14
+ //# sourceMappingURL=driver.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["driver","setStorageDriver","d","getStorageDriver","localStorage","getItem","key","setItem","value","removeItem","getAllKeys","Object","keys"],"sources":["../../../src/storage/driver.ts"],"sourcesContent":[null],"mappings":"AAEA,IAAIA,MAAA,GAA+B;AAE5B,SAASC,iBAAiBC,CAAA,EAAwB;EACvDF,MAAA,GAASE,CAAA;AACX;AAEO,SAASC,iBAAA,EAAyC;EACvD,OAAIH,MAAA,KACA,OAAOI,YAAA,GAAiB,MACnB;IACLC,OAAA,EAAUC,GAAA,IAAQF,YAAA,CAAaC,OAAA,CAAQC,GAAG;IAC1CC,OAAA,EAASA,CAACD,GAAA,EAAKE,KAAA,KAAUJ,YAAA,CAAaG,OAAA,CAAQD,GAAA,EAAKE,KAAK;IACxDC,UAAA,EAAaH,GAAA,IAAQF,YAAA,CAAaK,UAAA,CAAWH,GAAG;IAChDI,UAAA,EAAYA,CAAA,KAAMC,MAAA,CAAOC,IAAA,CAAKR,YAAY;EAC5C,IAEK;AACT","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ var driver = null;
2
+ function setStorageDriver(d) {
3
+ driver = d;
4
+ }
5
+ function getStorageDriver() {
6
+ return driver || (typeof localStorage < "u" ? {
7
+ getItem: function (key) {
8
+ return localStorage.getItem(key);
9
+ },
10
+ setItem: function (key, value) {
11
+ return localStorage.setItem(key, value);
12
+ },
13
+ removeItem: function (key) {
14
+ return localStorage.removeItem(key);
15
+ },
16
+ getAllKeys: function () {
17
+ return Object.keys(localStorage);
18
+ }
19
+ } : null);
20
+ }
21
+ export { getStorageDriver, setStorageDriver };
22
+ //# sourceMappingURL=driver.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["driver","setStorageDriver","d","getStorageDriver","localStorage","getItem","key","setItem","value"],"sources":["../../../src/storage/driver.ts"],"sourcesContent":[null],"mappings":"AAEA,IAAIA,MAAA,GAA+B;AAE5B,SAASC,iBAAiBC,CAAA,EAAwB;EACvDF,MAAA,GAASE,CAAA;AACX;AAEO,SAASC,iBAAA,EAAyC;EACvD,OAAIH,MAAA,KACA,OAAOI,YAAA,GAAiB,MACnB;IACLC,OAAA,EAAS,SAAAA,CAASC,GAAA;MAClB,OAASF,YAAM,CAAAC,OAAU,CAAAC,GAAA;IACzB;IACAC,OAAA,WAAAA,CAAkBD,GAAA,EAAAE,KAAO,EAAK;MAG3B,OAAAJ,YAAA,CAAAG,OAAA,CAAAD,GAAA,EAAAE,KAAA;IACT","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import { createStorage, createStorageValue } from "./createStorage";
2
+ import { getStorageDriver, setStorageDriver } from "./driver";
3
+ export {
4
+ createStorage,
5
+ createStorageValue,
6
+ getStorageDriver,
7
+ setStorageDriver
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/storage/index.ts"],
4
+ "mappings": "AAAA,SAAS,eAAe,0BAA0B;AAElD,SAAS,kBAAkB,wBAAwB;",
5
+ "names": []
6
+ }
@@ -0,0 +1,4 @@
1
+ import { createStorage, createStorageValue } from "./createStorage.mjs";
2
+ import { getStorageDriver, setStorageDriver } from "./driver.mjs";
3
+ export { createStorage, createStorageValue, getStorageDriver, setStorageDriver };
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createStorage","createStorageValue","getStorageDriver","setStorageDriver"],"sources":["../../../src/storage/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAA,EAAeC,kBAAA,QAA0B;AAElD,SAASC,gBAAA,EAAkBC,gBAAA,QAAwB","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import { createStorage, createStorageValue } from "./createStorage.native.js";
2
+ import { getStorageDriver, setStorageDriver } from "./driver.native.js";
3
+ export { createStorage, createStorageValue, getStorageDriver, setStorageDriver };
4
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createStorage","createStorageValue","getStorageDriver","setStorageDriver"],"sources":["../../../src/storage/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAA,EAAeC,kBAAA,QAA0B;AAElD,SAASC,gBAAA,EAAkBC,gBAAA,QAAwB","ignoreList":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "mappings": "",
5
+ "names": []
6
+ }
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@take-out/helpers",
3
- "version": "0.0.32",
3
+ "version": "0.0.34",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "source": "src/index.ts",
@@ -16,8 +16,8 @@
16
16
  "build": "tamagui-build",
17
17
  "watch": "tamagui-build --watch",
18
18
  "typecheck": "tko run typecheck",
19
- "lint": "biome check src",
20
- "lint:fix": "biome check --write src",
19
+ "lint": "oxlint src",
20
+ "lint:fix": "oxfmt src && oxlint --fix --fix-suggestions src",
21
21
  "clean": "tamagui-build clean",
22
22
  "clean:build": "tamagui-build clean:build"
23
23
  },
@@ -56,8 +56,7 @@
56
56
  },
57
57
  "dependencies": {
58
58
  "@tamagui/constants": "*",
59
- "dequal": "^2.0.3",
60
- "fuse.js": "^7.1.0"
59
+ "dequal": "^2.0.3"
61
60
  },
62
61
  "peerDependencies": {
63
62
  "@rocicorp/zero": "*",
@@ -65,10 +64,11 @@
65
64
  "react-native": "*"
66
65
  },
67
66
  "devDependencies": {
68
- "@biomejs/biome": "^2.1.2",
69
67
  "@tamagui/build": "1.135.2",
70
68
  "@types/node": "24.0.3",
71
69
  "@types/react": "^19.0.8",
70
+ "oxfmt": "^0.16.0",
71
+ "oxlint": "^1.31.0",
72
72
  "react": "*",
73
73
  "react-native": "*"
74
74
  },
@@ -96,7 +96,7 @@ function createBrowserAsyncContext<T>(): AsyncContext<T> {
96
96
  }
97
97
 
98
98
  // patch Promise methods to capture and restore context
99
- // biome-ignore lint/suspicious/noThenProperty: intentional patching for context propagation
99
+ // eslint-disable-next-line no-then-property -- intentional patching for context propagation
100
100
  OriginalPromise.prototype.then = function (
101
101
  this: Promise<any>,
102
102
  onFulfilled?: any,
@@ -131,7 +131,7 @@ function createBrowserAsyncContext<T>(): AsyncContext<T> {
131
131
  return result
132
132
  } finally {
133
133
  // restore original Promise methods
134
- // biome-ignore lint/suspicious/noThenProperty: restoring original methods
134
+ // eslint-disable-next-line no-then-property -- restoring original methods
135
135
  OriginalPromise.prototype.then = OriginalThen
136
136
  OriginalPromise.prototype.catch = OriginalCatch
137
137
  OriginalPromise.prototype.finally = OriginalFinally
@@ -31,7 +31,7 @@ export function useAsync<T>(
31
31
  return () => {
32
32
  isMounted = false
33
33
  }
34
- // biome-ignore lint/correctness/useExhaustiveDependencies: ignore
34
+ // eslint-disable-next-line react-hooks/exhaustive-deps
35
35
  }, args)
36
36
 
37
37
  return [data as T, error ? 'error' : loading ? 'loading' : 'idle', error]
@@ -1,6 +1,7 @@
1
1
  // adopted from https://github.com/franciscop/use-async/blob/master/src/index.js
2
2
 
3
3
  import { useEffect, useId, useLayoutEffect } from 'react'
4
+
4
5
  import { EMPTY_OBJECT } from '../constants'
5
6
  import { handleAbortError } from './abortable'
6
7
 
@@ -40,7 +41,7 @@ function useAsyncEffectImpl(
40
41
  options: AsyncEffectOptions = EMPTY_OBJECT
41
42
  ): void {
42
43
  const effectHook = isLayoutEffect ? useLayoutEffect : useEffect
43
- // biome-ignore lint/correctness/useHookAtTopLevel: ignore
44
+ // eslint-disable-next-line react-hooks/rules-of-hooks
44
45
  const effectId = process.env.NODE_ENV === 'development' ? useId() : ''
45
46
 
46
47
  effectHook(() => {
@@ -103,7 +104,7 @@ if (process.env.NODE_ENV === 'development') {
103
104
  const message = `🚨 useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`
104
105
  if (process.env.NODE_ENV === 'development') {
105
106
  console.error(message)
106
- // biome-ignore lint/suspicious/noDebugger: ignore
107
+ // eslint-disable-next-line no-debugger
107
108
  debugger
108
109
  } else {
109
110
  alert(message)
@@ -1,8 +1,10 @@
1
- import type React from 'react'
2
1
  import { startTransition, useState } from 'react'
2
+
3
3
  import { idle, type IdleOptions } from './idle'
4
4
  import { useAsyncEffect } from './useAsyncEffect'
5
5
 
6
+ import type React from 'react'
7
+
6
8
  export type LazyMountProps = IdleOptions
7
9
 
8
10
  export const useLazyMount = (props: LazyMountProps = { max: 100 }): boolean => {
@@ -1,4 +1,5 @@
1
1
  import { startTransition, useState } from 'react'
2
+
2
3
  import { idle, type IdleOptions } from './idle'
3
4
  import { useAsyncEffect } from './useAsyncEffect'
4
5
 
package/src/emitter.tsx CHANGED
@@ -1,12 +1,14 @@
1
1
  import { dequal } from 'dequal'
2
- import type { JSX, PropsWithChildren } from 'react'
3
2
  import * as React from 'react'
4
3
  import { use, useLayoutEffect, useState } from 'react'
4
+
5
5
  import { handleAbortError } from './async/abortable'
6
6
  import { DEBUG_LEVEL, EMPTY_ARRAY } from './constants'
7
7
  import { AbortError } from './error/errors'
8
- import { createGlobalContext } from './react/createGlobalContext'
9
8
  import { globalValue } from './global/globalValue'
9
+ import { createGlobalContext } from './react/createGlobalContext'
10
+
11
+ import type { JSX, PropsWithChildren } from 'react'
10
12
 
11
13
  // keeps a reference to the current value easily
12
14
 
@@ -121,9 +123,8 @@ export function createEmitter<T>(
121
123
  return new Emitter<T>(existing || defaultValue, { name, ...options })
122
124
  }
123
125
 
124
- export type EmitterType<E extends Emitter<any>> = E extends Emitter<infer Val>
125
- ? Val
126
- : never
126
+ export type EmitterType<E extends Emitter<any>> =
127
+ E extends Emitter<infer Val> ? Val : never
127
128
 
128
129
  export const useEmitter = <E extends Emitter<any>>(
129
130
  emitter: E,
@@ -207,7 +208,7 @@ export const useEmitterSelector = <E extends Emitter<any>, T extends EmitterType
207
208
  }
208
209
  }
209
210
 
210
- // biome-ignore lint/correctness/useExhaustiveDependencies: we are using args fine
211
+ // eslint-disable-next-line react-hooks/exhaustive-deps
211
212
  useLayoutEffect(() => {
212
213
  if (disabled) return
213
214
  return emitter.listen((val) => {
@@ -240,7 +241,7 @@ export const useEmittersSelector = <const E extends readonly Emitter<any>[], R>(
240
241
  return getSelector()(values)
241
242
  })
242
243
 
243
- // biome-ignore lint/correctness/useExhaustiveDependencies: ignore
244
+ // eslint-disable-next-line react-hooks/exhaustive-deps
244
245
  useLayoutEffect(() => {
245
246
  if (disabled) {
246
247
  return
package/src/index.ts CHANGED
@@ -2,7 +2,6 @@ export * from './constants'
2
2
  export * from './emitter'
3
3
 
4
4
  // array
5
- export * from './array/fuzzy'
6
5
  export * from './array/getRandomItem'
7
6
  export * from './array/takeLast'
8
7
  export * from './array/uniqBy'
@@ -25,7 +24,6 @@ export * from './async/useLazyValue'
25
24
  // browser
26
25
  export * from './browser/clearIndexedDB'
27
26
  export * from './browser/isActiveElementFormField'
28
- export * from './browser/localStorage'
29
27
  export * from './browser/openPopup'
30
28
 
31
29
  // debug
@@ -68,6 +66,9 @@ export * from './object/objectUniqueKey'
68
66
  export * from './react/createGlobalContext'
69
67
  export * from './react/getCurrentComponentStack'
70
68
 
69
+ // storage
70
+ export * from './storage'
71
+
71
72
  // server
72
73
  export * from './server/ensureEnv'
73
74
  export * from './server/getHeaders'
@@ -22,7 +22,7 @@ export function objectFromEntries<ARR_T extends EntriesType>(
22
22
  return Object.fromEntries(arr) as EntriesToObject<ARR_T>
23
23
  }
24
24
 
25
- export function objectKeys<O extends Object>(obj: O) {
25
+ export function objectKeys<O extends object>(obj: O) {
26
26
  return Object.keys(obj) as Array<keyof O>
27
27
  }
28
28
 
@@ -1,4 +1,5 @@
1
1
  import { type Context, createContext } from 'react'
2
+
2
3
  import { globalValue } from '../global/globalValue'
3
4
 
4
5
  // create or retrieve a React context that is stored on `globalThis`.