@studiometa/js-toolkit 3.5.0 → 3.6.0-beta.1

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 (240) hide show
  1. package/Base/Base.d.ts +2 -2
  2. package/Base/Base.js.map +2 -2
  3. package/Base/managers/AbstractManager.d.ts +2 -2
  4. package/Base/types.d.ts +3 -3
  5. package/Base/utils.d.ts +1 -1
  6. package/Base/utils.js +1 -2
  7. package/Base/utils.js.map +2 -2
  8. package/README.md +10 -0
  9. package/decorators/withBreakpointManager.d.ts +1 -1
  10. package/decorators/withBreakpointManager.js.map +1 -1
  11. package/decorators/withBreakpointObserver.d.ts +1 -1
  12. package/decorators/withBreakpointObserver.js.map +1 -1
  13. package/decorators/withDrag.d.ts +1 -1
  14. package/decorators/withDrag.js.map +1 -1
  15. package/decorators/withExtraConfig.d.ts +1 -1
  16. package/decorators/withExtraConfig.js.map +1 -1
  17. package/decorators/withFreezedOptions.d.ts +1 -1
  18. package/decorators/withFreezedOptions.js.map +1 -1
  19. package/decorators/withGroup.js.map +2 -2
  20. package/decorators/withIntersectionObserver.d.ts +1 -1
  21. package/decorators/withIntersectionObserver.js.map +1 -1
  22. package/decorators/withMountOnMediaQuery.d.ts +1 -1
  23. package/decorators/withMountOnMediaQuery.js.map +1 -1
  24. package/decorators/withMountWhenInView.d.ts +1 -1
  25. package/decorators/withMountWhenInView.js.map +1 -1
  26. package/decorators/withMutation.d.ts +1 -1
  27. package/decorators/withMutation.js.map +1 -1
  28. package/decorators/withRelativePointer.d.ts +1 -1
  29. package/decorators/withRelativePointer.js.map +1 -1
  30. package/decorators/withResponsiveOptions.d.ts +1 -1
  31. package/decorators/withResponsiveOptions.js.map +1 -1
  32. package/decorators/withScrolledInView/withScrolledInView.d.ts +1 -1
  33. package/decorators/withScrolledInView/withScrolledInView.js.map +1 -1
  34. package/helpers/createApp.d.ts +1 -1
  35. package/helpers/createApp.js +6 -4
  36. package/helpers/createApp.js.map +2 -2
  37. package/helpers/getClosestParent.d.ts +1 -1
  38. package/helpers/getClosestParent.js.map +1 -1
  39. package/helpers/getDirectChildren.d.ts +2 -2
  40. package/helpers/getDirectChildren.js.map +1 -1
  41. package/helpers/getInstanceFromElement.d.ts +1 -1
  42. package/helpers/getInstanceFromElement.js.map +1 -1
  43. package/helpers/importOnInteraction.d.ts +1 -1
  44. package/helpers/importOnInteraction.js.map +1 -1
  45. package/helpers/importOnMediaQuery.d.ts +1 -1
  46. package/helpers/importOnMediaQuery.js.map +1 -1
  47. package/helpers/importWhenIdle.d.ts +1 -1
  48. package/helpers/importWhenIdle.js.map +1 -1
  49. package/helpers/importWhenPrefersMotion.d.ts +1 -1
  50. package/helpers/importWhenPrefersMotion.js.map +1 -1
  51. package/helpers/importWhenVisible.d.ts +1 -1
  52. package/helpers/importWhenVisible.js.map +1 -1
  53. package/helpers/index.d.ts +1 -0
  54. package/helpers/index.js +1 -0
  55. package/helpers/index.js.map +2 -2
  56. package/helpers/logTree.d.ts +17 -0
  57. package/helpers/logTree.js +59 -0
  58. package/helpers/logTree.js.map +7 -0
  59. package/helpers/queryComponent.js +9 -10
  60. package/helpers/queryComponent.js.map +2 -2
  61. package/index.d.ts +1 -1
  62. package/index.js +1 -1
  63. package/index.js.map +1 -1
  64. package/package.json +1 -1
  65. package/services/AbstractService.d.ts +1 -1
  66. package/services/AbstractService.js +1 -1
  67. package/services/AbstractService.js.map +2 -2
  68. package/services/DragService.d.ts +6 -6
  69. package/services/DragService.js.map +1 -1
  70. package/services/KeyService.d.ts +1 -1
  71. package/services/KeyService.js.map +1 -1
  72. package/services/LoadService.d.ts +1 -1
  73. package/services/LoadService.js.map +1 -1
  74. package/services/MutationService.d.ts +1 -1
  75. package/services/MutationService.js.map +1 -1
  76. package/services/PointerService.d.ts +1 -1
  77. package/services/PointerService.js.map +1 -1
  78. package/services/RafService.d.ts +2 -2
  79. package/services/RafService.js +13 -7
  80. package/services/RafService.js.map +2 -2
  81. package/services/ResizeService.d.ts +1 -1
  82. package/services/ResizeService.js.map +1 -1
  83. package/services/ScrollService.d.ts +22 -4
  84. package/services/ScrollService.js +55 -7
  85. package/services/ScrollService.js.map +2 -2
  86. package/utils/cache.d.ts +1 -1
  87. package/utils/cache.js.map +1 -1
  88. package/utils/collide/boundingRectToCircle.d.ts +3 -3
  89. package/utils/collide/boundingRectToCircle.js.map +1 -1
  90. package/utils/collide/collideCircleCircle.d.ts +1 -1
  91. package/utils/collide/collideCircleCircle.js.map +1 -1
  92. package/utils/collide/collideCircleRect.d.ts +1 -1
  93. package/utils/collide/collideCircleRect.js.map +1 -1
  94. package/utils/collide/collidePointCircle.d.ts +1 -1
  95. package/utils/collide/collidePointCircle.js.map +1 -1
  96. package/utils/collide/collidePointRect.d.ts +1 -1
  97. package/utils/collide/collidePointRect.js.map +1 -1
  98. package/utils/collide/collideRectRect.d.ts +1 -1
  99. package/utils/collide/collideRectRect.js.map +1 -1
  100. package/utils/css/animate.d.ts +1 -1
  101. package/utils/css/animate.js +162 -96
  102. package/utils/css/animate.js.map +2 -2
  103. package/utils/css/classes.d.ts +3 -3
  104. package/utils/css/classes.js.map +1 -1
  105. package/utils/css/getOffsetSizes.d.ts +1 -1
  106. package/utils/css/getOffsetSizes.js.map +1 -1
  107. package/utils/css/matrix.d.ts +1 -1
  108. package/utils/css/matrix.js.map +1 -1
  109. package/utils/css/styles.d.ts +2 -2
  110. package/utils/css/styles.js.map +1 -1
  111. package/utils/css/transform.d.ts +1 -1
  112. package/utils/css/transform.js +12 -13
  113. package/utils/css/transform.js.map +2 -2
  114. package/utils/css/transition.d.ts +1 -1
  115. package/utils/css/transition.js.map +1 -1
  116. package/utils/debounce.d.ts +1 -1
  117. package/utils/debounce.js.map +1 -1
  118. package/utils/history.d.ts +3 -3
  119. package/utils/history.js.map +1 -1
  120. package/utils/index.d.ts +1 -0
  121. package/utils/index.js +1 -0
  122. package/utils/index.js.map +2 -2
  123. package/utils/is.d.ts +10 -10
  124. package/utils/is.js.map +1 -1
  125. package/utils/loadElement.d.ts +5 -5
  126. package/utils/loadElement.js.map +1 -1
  127. package/utils/math/clamp.d.ts +1 -1
  128. package/utils/math/clamp.js.map +1 -1
  129. package/utils/math/clamp01.d.ts +1 -1
  130. package/utils/math/clamp01.js.map +1 -1
  131. package/utils/math/createEases.d.ts +2 -2
  132. package/utils/math/createEases.js.map +1 -1
  133. package/utils/math/createRange.d.ts +1 -1
  134. package/utils/math/createRange.js.map +1 -1
  135. package/utils/math/damp.d.ts +1 -1
  136. package/utils/math/damp.js.map +2 -2
  137. package/utils/math/inertiaFinalValue.d.ts +1 -1
  138. package/utils/math/inertiaFinalValue.js.map +1 -1
  139. package/utils/math/lerp.d.ts +1 -1
  140. package/utils/math/lerp.js.map +1 -1
  141. package/utils/math/map.d.ts +1 -1
  142. package/utils/math/map.js.map +1 -1
  143. package/utils/math/round.d.ts +1 -1
  144. package/utils/math/round.js.map +1 -1
  145. package/utils/math/smoothTo.d.ts +24 -6
  146. package/utils/math/wrap.d.ts +1 -1
  147. package/utils/math/wrap.js.map +1 -1
  148. package/utils/memo.d.ts +1 -1
  149. package/utils/memo.js.map +1 -1
  150. package/utils/memoize.d.ts +2 -2
  151. package/utils/memoize.js.map +1 -1
  152. package/utils/nextFrame.d.ts +1 -1
  153. package/utils/nextFrame.js.map +1 -1
  154. package/utils/nextMicrotask.d.ts +1 -1
  155. package/utils/nextMicrotask.js.map +1 -1
  156. package/utils/nextTick.d.ts +1 -1
  157. package/utils/nextTick.js.map +1 -1
  158. package/utils/object/getAllProperties.js +4 -2
  159. package/utils/object/getAllProperties.js.map +2 -2
  160. package/utils/random.d.ts +3 -3
  161. package/utils/random.js.map +1 -1
  162. package/utils/scheduler.d.ts +3 -3
  163. package/utils/scheduler.js.map +1 -1
  164. package/utils/scrollTo.d.ts +1 -1
  165. package/utils/scrollTo.js.map +1 -1
  166. package/utils/storage/createLocalStorageProvider.d.ts +2 -0
  167. package/utils/storage/createLocalStorageProvider.js +32 -0
  168. package/utils/storage/createLocalStorageProvider.js.map +7 -0
  169. package/utils/storage/createMemoryStorageProvider.d.ts +2 -0
  170. package/utils/storage/createMemoryStorageProvider.js +27 -0
  171. package/utils/storage/createMemoryStorageProvider.js.map +7 -0
  172. package/utils/storage/createNoopProvider.d.ts +2 -0
  173. package/utils/storage/createNoopProvider.js +23 -0
  174. package/utils/storage/createNoopProvider.js.map +7 -0
  175. package/utils/storage/createSessionStorageProvider.d.ts +2 -0
  176. package/utils/storage/createSessionStorageProvider.js +31 -0
  177. package/utils/storage/createSessionStorageProvider.js.map +7 -0
  178. package/utils/storage/createStorage.d.ts +2 -0
  179. package/utils/storage/createStorage.js +96 -0
  180. package/utils/storage/createStorage.js.map +7 -0
  181. package/utils/storage/createUrlSearchParamsInHashProvider.d.ts +2 -0
  182. package/utils/storage/createUrlSearchParamsInHashProvider.js +57 -0
  183. package/utils/storage/createUrlSearchParamsInHashProvider.js.map +7 -0
  184. package/utils/storage/createUrlSearchParamsProvider.d.ts +2 -0
  185. package/utils/storage/createUrlSearchParamsProvider.js +41 -0
  186. package/utils/storage/createUrlSearchParamsProvider.js.map +7 -0
  187. package/utils/storage/getBrowserContext.d.ts +1 -0
  188. package/utils/storage/getBrowserContext.js +17 -0
  189. package/utils/storage/getBrowserContext.js.map +7 -0
  190. package/utils/storage/getGlobalStorage.d.ts +1 -0
  191. package/utils/storage/getGlobalStorage.js +7 -0
  192. package/utils/storage/getGlobalStorage.js.map +7 -0
  193. package/utils/storage/getStorageKeys.d.ts +1 -0
  194. package/utils/storage/getStorageKeys.js +12 -0
  195. package/utils/storage/getStorageKeys.js.map +7 -0
  196. package/utils/storage/index.d.ts +8 -0
  197. package/utils/storage/index.js +62 -0
  198. package/utils/storage/index.js.map +7 -0
  199. package/utils/storage/providers.d.ts +11 -0
  200. package/utils/storage/providers.js +30 -0
  201. package/utils/storage/providers.js.map +7 -0
  202. package/utils/storage/serializers.d.ts +2 -0
  203. package/utils/storage/serializers.js +14 -0
  204. package/utils/storage/serializers.js.map +7 -0
  205. package/utils/storage/types.d.ts +33 -0
  206. package/utils/storage/types.js +1 -0
  207. package/utils/storage/types.js.map +7 -0
  208. package/utils/storage.d.ts +1 -0
  209. package/utils/storage.js +2 -0
  210. package/utils/storage.js.map +7 -0
  211. package/utils/string/changeCase.d.ts +6 -6
  212. package/utils/string/changeCase.js +1 -1
  213. package/utils/string/changeCase.js.map +2 -2
  214. package/utils/string/withLeadingCharacters.d.ts +1 -1
  215. package/utils/string/withLeadingCharacters.js.map +1 -1
  216. package/utils/string/withLeadingSlash.d.ts +1 -1
  217. package/utils/string/withLeadingSlash.js.map +1 -1
  218. package/utils/string/withTrailingCharacters.d.ts +1 -1
  219. package/utils/string/withTrailingCharacters.js.map +1 -1
  220. package/utils/string/withTrailingSlash.d.ts +1 -1
  221. package/utils/string/withTrailingSlash.js.map +1 -1
  222. package/utils/string/withoutLeadingCharacters.d.ts +1 -1
  223. package/utils/string/withoutLeadingCharacters.js.map +1 -1
  224. package/utils/string/withoutLeadingCharactersRecursive.d.ts +1 -1
  225. package/utils/string/withoutLeadingCharactersRecursive.js.map +1 -1
  226. package/utils/string/withoutLeadingSlash.d.ts +1 -1
  227. package/utils/string/withoutLeadingSlash.js.map +1 -1
  228. package/utils/string/withoutTrailingCharacters.d.ts +1 -1
  229. package/utils/string/withoutTrailingCharacters.js.map +1 -1
  230. package/utils/string/withoutTrailingCharactersRecursive.d.ts +1 -1
  231. package/utils/string/withoutTrailingCharactersRecursive.js.map +1 -1
  232. package/utils/string/withoutTrailingSlash.d.ts +1 -1
  233. package/utils/string/withoutTrailingSlash.js.map +1 -1
  234. package/utils/throttle.d.ts +1 -1
  235. package/utils/throttle.js.map +1 -1
  236. package/utils/trapFocus.d.ts +2 -2
  237. package/utils/trapFocus.js.map +1 -1
  238. package/utils/tween.js +5 -5
  239. package/utils/tween.js.map +2 -2
  240. package/tsconfig.build.tsbuildinfo +0 -1
@@ -0,0 +1,96 @@
1
+ import { hasWindow } from "../has.js";
2
+ import { localStorageProvider } from "./providers.js";
3
+ import { jsonSerializer } from "./serializers.js";
4
+ function createStorage(options = {}) {
5
+ const { provider = localStorageProvider, serializer = jsonSerializer, prefix = "" } = options;
6
+ const listeners = /* @__PURE__ */ new Map();
7
+ function resolveKey(key) {
8
+ return `${prefix}${key}`;
9
+ }
10
+ function syncHandler(event) {
11
+ if (event instanceof StorageEvent) {
12
+ if (provider.storageArea && event.storageArea !== provider.storageArea) {
13
+ return;
14
+ }
15
+ const rawKey = event.key;
16
+ for (const [listenerKey, callbacks] of listeners) {
17
+ if (resolveKey(listenerKey) === rawKey) {
18
+ const newValue = event.newValue ? serializer.deserialize(event.newValue) : void 0;
19
+ callbacks.forEach((callback) => callback(newValue));
20
+ break;
21
+ }
22
+ }
23
+ return;
24
+ }
25
+ listeners.forEach((callbacks, key) => {
26
+ const value = provider.get(resolveKey(key));
27
+ const newValue = value !== null ? serializer.deserialize(value) : void 0;
28
+ callbacks.forEach((callback) => callback(newValue));
29
+ });
30
+ }
31
+ if (hasWindow() && provider.syncEvent) {
32
+ window.addEventListener(provider.syncEvent, syncHandler);
33
+ }
34
+ return {
35
+ get(key, defaultValue) {
36
+ const storedValue = provider.get(resolveKey(key));
37
+ if (storedValue !== null) {
38
+ const deserialized = serializer.deserialize(storedValue);
39
+ if (deserialized !== void 0) {
40
+ return deserialized;
41
+ }
42
+ }
43
+ return defaultValue;
44
+ },
45
+ set(key, value) {
46
+ provider.set(resolveKey(key), serializer.serialize(value));
47
+ listeners.get(key)?.forEach((callback) => callback(value));
48
+ },
49
+ delete(key) {
50
+ provider.remove(resolveKey(key));
51
+ listeners.get(key)?.forEach((callback) => callback(void 0));
52
+ },
53
+ has(key) {
54
+ return provider.has(resolveKey(key));
55
+ },
56
+ keys() {
57
+ const allKeys = provider.keys();
58
+ if (!prefix) {
59
+ return allKeys;
60
+ }
61
+ return allKeys.filter((key) => key.startsWith(prefix)).map((key) => key.slice(prefix.length));
62
+ },
63
+ clear() {
64
+ if (prefix) {
65
+ provider.keys().filter((key) => key.startsWith(prefix)).forEach((key) => provider.remove(key));
66
+ } else {
67
+ provider.clear();
68
+ }
69
+ listeners.forEach((callbacks) => {
70
+ callbacks.forEach((callback) => callback(void 0));
71
+ });
72
+ },
73
+ subscribe(key, callback) {
74
+ if (!listeners.has(key)) {
75
+ listeners.set(key, /* @__PURE__ */ new Set());
76
+ }
77
+ listeners.get(key)?.add(callback);
78
+ return () => {
79
+ listeners.get(key)?.delete(callback);
80
+ if (listeners.get(key)?.size === 0) {
81
+ listeners.delete(key);
82
+ }
83
+ };
84
+ },
85
+ destroy() {
86
+ listeners.clear();
87
+ if (hasWindow() && provider.syncEvent) {
88
+ window.removeEventListener(provider.syncEvent, syncHandler);
89
+ }
90
+ }
91
+ };
92
+ }
93
+ export {
94
+ createStorage
95
+ };
96
+ //# sourceMappingURL=createStorage.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createStorage.ts"],
4
+ "sourcesContent": ["import { hasWindow } from '../has.js';\nimport { localStorageProvider } from './providers.js';\nimport { jsonSerializer } from './serializers.js';\nimport type { StorageInstance, StorageOptions } from './types.js';\n\nexport function createStorage<T extends Record<string, any> = Record<string, any>>(\n options: StorageOptions = {},\n): StorageInstance<T> {\n const { provider = localStorageProvider, serializer = jsonSerializer, prefix = '' } = options;\n\n const listeners = new Map<keyof T, Set<(value: any) => void>>();\n\n function resolveKey(key: string): string {\n return `${prefix}${key}`;\n }\n\n function syncHandler(event: Event): void {\n if (event instanceof StorageEvent) {\n if (provider.storageArea && event.storageArea !== provider.storageArea) {\n return;\n }\n\n const rawKey = event.key;\n for (const [listenerKey, callbacks] of listeners) {\n if (resolveKey(listenerKey as string) === rawKey) {\n const newValue = event.newValue ? serializer.deserialize(event.newValue) : undefined;\n callbacks.forEach((callback) => callback(newValue));\n break;\n }\n }\n return;\n }\n\n listeners.forEach((callbacks, key) => {\n const value = provider.get(resolveKey(key as string));\n const newValue = value !== null ? serializer.deserialize(value) : undefined;\n callbacks.forEach((callback) => callback(newValue));\n });\n }\n\n if (hasWindow() && provider.syncEvent) {\n window.addEventListener(provider.syncEvent, syncHandler);\n }\n\n return {\n get(key, defaultValue?) {\n const storedValue = provider.get(resolveKey(key as string));\n if (storedValue !== null) {\n const deserialized = serializer.deserialize(storedValue);\n if (deserialized !== undefined) {\n return deserialized;\n }\n }\n return defaultValue;\n },\n set(key, value) {\n provider.set(resolveKey(key as string), serializer.serialize(value));\n listeners.get(key)?.forEach((callback) => callback(value));\n },\n delete(key) {\n provider.remove(resolveKey(key as string));\n listeners.get(key)?.forEach((callback) => callback(undefined));\n },\n has(key) {\n return provider.has(resolveKey(key as string));\n },\n keys() {\n const allKeys = provider.keys();\n if (!prefix) {\n return allKeys as (keyof T)[];\n }\n\n return allKeys\n .filter((key) => key.startsWith(prefix))\n .map((key) => key.slice(prefix.length) as keyof T);\n },\n clear() {\n if (prefix) {\n provider\n .keys()\n .filter((key) => key.startsWith(prefix))\n .forEach((key) => provider.remove(key));\n } else {\n provider.clear();\n }\n\n listeners.forEach((callbacks) => {\n callbacks.forEach((callback) => callback(undefined));\n });\n },\n subscribe(key, callback) {\n if (!listeners.has(key)) {\n listeners.set(key, new Set());\n }\n\n listeners.get(key)?.add(callback);\n\n return () => {\n listeners.get(key)?.delete(callback);\n if (listeners.get(key)?.size === 0) {\n listeners.delete(key);\n }\n };\n },\n destroy() {\n listeners.clear();\n if (hasWindow() && provider.syncEvent) {\n window.removeEventListener(provider.syncEvent, syncHandler);\n }\n },\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider, UrlProviderOptions } from './types.js';
2
+ export declare function createUrlSearchParamsInHashProvider(options?: UrlProviderOptions): StorageProvider;
@@ -0,0 +1,57 @@
1
+ import { createNoopProvider } from "./createNoopProvider.js";
2
+ import { getBrowserContext } from "./getBrowserContext.js";
3
+ function createUrlSearchParamsInHashProvider(options = {}) {
4
+ const browserContext = getBrowserContext();
5
+ if (!browserContext) {
6
+ return createNoopProvider();
7
+ }
8
+ const { push = false } = options;
9
+ const { location, history } = browserContext;
10
+ function getParamsFromHash() {
11
+ return new URLSearchParams(location.hash.slice(1));
12
+ }
13
+ return {
14
+ syncEvent: "hashchange",
15
+ get(key) {
16
+ return getParamsFromHash().get(key);
17
+ },
18
+ set(key, value) {
19
+ const params = getParamsFromHash();
20
+ params.set(key, value);
21
+ const newHash = params.toString();
22
+ if (push) {
23
+ location.hash = newHash;
24
+ } else {
25
+ history.replaceState({}, "", `${location.pathname}${location.search}#${newHash}`);
26
+ }
27
+ },
28
+ remove(key) {
29
+ const params = getParamsFromHash();
30
+ params.delete(key);
31
+ const newHash = params.toString();
32
+ if (push) {
33
+ location.hash = newHash;
34
+ } else {
35
+ const url = newHash ? `${location.pathname}${location.search}#${newHash}` : `${location.pathname}${location.search}`;
36
+ history.replaceState({}, "", url);
37
+ }
38
+ },
39
+ has(key) {
40
+ return getParamsFromHash().has(key);
41
+ },
42
+ keys() {
43
+ return [...getParamsFromHash().keys()];
44
+ },
45
+ clear() {
46
+ if (push) {
47
+ location.hash = "";
48
+ } else {
49
+ history.replaceState({}, "", `${location.pathname}${location.search}`);
50
+ }
51
+ }
52
+ };
53
+ }
54
+ export {
55
+ createUrlSearchParamsInHashProvider
56
+ };
57
+ //# sourceMappingURL=createUrlSearchParamsInHashProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createUrlSearchParamsInHashProvider.ts"],
4
+ "sourcesContent": ["import { createNoopProvider } from './createNoopProvider.js';\nimport { getBrowserContext } from './getBrowserContext.js';\nimport type { StorageProvider, UrlProviderOptions } from './types.js';\n\nexport function createUrlSearchParamsInHashProvider(\n options: UrlProviderOptions = {},\n): StorageProvider {\n const browserContext = getBrowserContext();\n\n if (!browserContext) {\n return createNoopProvider();\n }\n\n const { push = false } = options;\n const { location, history } = browserContext;\n\n function getParamsFromHash(): URLSearchParams {\n return new URLSearchParams(location.hash.slice(1));\n }\n\n return {\n syncEvent: 'hashchange',\n get(key) {\n return getParamsFromHash().get(key);\n },\n set(key, value) {\n const params = getParamsFromHash();\n params.set(key, value);\n const newHash = params.toString();\n\n if (push) {\n location.hash = newHash;\n } else {\n history.replaceState({}, '', `${location.pathname}${location.search}#${newHash}`);\n }\n },\n remove(key) {\n const params = getParamsFromHash();\n params.delete(key);\n const newHash = params.toString();\n\n if (push) {\n location.hash = newHash;\n } else {\n const url = newHash\n ? `${location.pathname}${location.search}#${newHash}`\n : `${location.pathname}${location.search}`;\n history.replaceState({}, '', url);\n }\n },\n has(key) {\n return getParamsFromHash().has(key);\n },\n keys() {\n return [...getParamsFromHash().keys()];\n },\n clear() {\n if (push) {\n location.hash = '';\n } else {\n history.replaceState({}, '', `${location.pathname}${location.search}`);\n }\n },\n };\n}\n"],
5
+ "mappings": "AAAA,SAAS,0BAA0B;AACnC,SAAS,yBAAyB;AAG3B,SAAS,oCACd,UAA8B,CAAC,GACd;AACjB,QAAM,iBAAiB,kBAAkB;AAEzC,MAAI,CAAC,gBAAgB;AACnB,WAAO,mBAAmB;AAAA,EAC5B;AAEA,QAAM,EAAE,OAAO,MAAM,IAAI;AACzB,QAAM,EAAE,UAAU,QAAQ,IAAI;AAE9B,WAAS,oBAAqC;AAC5C,WAAO,IAAI,gBAAgB,SAAS,KAAK,MAAM,CAAC,CAAC;AAAA,EACnD;AAEA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,IAAI,KAAK;AACP,aAAO,kBAAkB,EAAE,IAAI,GAAG;AAAA,IACpC;AAAA,IACA,IAAI,KAAK,OAAO;AACd,YAAM,SAAS,kBAAkB;AACjC,aAAO,IAAI,KAAK,KAAK;AACrB,YAAM,UAAU,OAAO,SAAS;AAEhC,UAAI,MAAM;AACR,iBAAS,OAAO;AAAA,MAClB,OAAO;AACL,gBAAQ,aAAa,CAAC,GAAG,IAAI,GAAG,SAAS,QAAQ,GAAG,SAAS,MAAM,IAAI,OAAO,EAAE;AAAA,MAClF;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AACV,YAAM,SAAS,kBAAkB;AACjC,aAAO,OAAO,GAAG;AACjB,YAAM,UAAU,OAAO,SAAS;AAEhC,UAAI,MAAM;AACR,iBAAS,OAAO;AAAA,MAClB,OAAO;AACL,cAAM,MAAM,UACR,GAAG,SAAS,QAAQ,GAAG,SAAS,MAAM,IAAI,OAAO,KACjD,GAAG,SAAS,QAAQ,GAAG,SAAS,MAAM;AAC1C,gBAAQ,aAAa,CAAC,GAAG,IAAI,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,IACA,IAAI,KAAK;AACP,aAAO,kBAAkB,EAAE,IAAI,GAAG;AAAA,IACpC;AAAA,IACA,OAAO;AACL,aAAO,CAAC,GAAG,kBAAkB,EAAE,KAAK,CAAC;AAAA,IACvC;AAAA,IACA,QAAQ;AACN,UAAI,MAAM;AACR,iBAAS,OAAO;AAAA,MAClB,OAAO;AACL,gBAAQ,aAAa,CAAC,GAAG,IAAI,GAAG,SAAS,QAAQ,GAAG,SAAS,MAAM,EAAE;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider, UrlProviderOptions } from './types.js';
2
+ export declare function createUrlSearchParamsProvider(options?: UrlProviderOptions): StorageProvider;
@@ -0,0 +1,41 @@
1
+ import { createNoopProvider } from "./createNoopProvider.js";
2
+ import { getBrowserContext } from "./getBrowserContext.js";
3
+ function createUrlSearchParamsProvider(options = {}) {
4
+ const browserContext = getBrowserContext();
5
+ if (!browserContext) {
6
+ return createNoopProvider();
7
+ }
8
+ const { push = false } = options;
9
+ const method = push ? "pushState" : "replaceState";
10
+ const { location, history } = browserContext;
11
+ return {
12
+ syncEvent: "popstate",
13
+ get(key) {
14
+ return new URLSearchParams(location.search).get(key);
15
+ },
16
+ set(key, value) {
17
+ const params = new URLSearchParams(location.search);
18
+ params.set(key, value);
19
+ history[method]({}, "", `${location.pathname}?${params.toString()}${location.hash}`);
20
+ },
21
+ remove(key) {
22
+ const params = new URLSearchParams(location.search);
23
+ params.delete(key);
24
+ const search = params.toString();
25
+ history[method]({}, "", `${location.pathname}${search ? `?${search}` : ""}${location.hash}`);
26
+ },
27
+ has(key) {
28
+ return new URLSearchParams(location.search).has(key);
29
+ },
30
+ keys() {
31
+ return [...new URLSearchParams(location.search).keys()];
32
+ },
33
+ clear() {
34
+ history[method]({}, "", `${location.pathname}${location.hash}`);
35
+ }
36
+ };
37
+ }
38
+ export {
39
+ createUrlSearchParamsProvider
40
+ };
41
+ //# sourceMappingURL=createUrlSearchParamsProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createUrlSearchParamsProvider.ts"],
4
+ "sourcesContent": ["import { createNoopProvider } from './createNoopProvider.js';\nimport { getBrowserContext } from './getBrowserContext.js';\nimport type { StorageProvider, UrlProviderOptions } from './types.js';\n\nexport function createUrlSearchParamsProvider(options: UrlProviderOptions = {}): StorageProvider {\n const browserContext = getBrowserContext();\n\n if (!browserContext) {\n return createNoopProvider();\n }\n\n const { push = false } = options;\n const method = push ? 'pushState' : 'replaceState';\n const { location, history } = browserContext;\n\n return {\n syncEvent: 'popstate',\n get(key) {\n return new URLSearchParams(location.search).get(key);\n },\n set(key, value) {\n const params = new URLSearchParams(location.search);\n params.set(key, value);\n history[method]({}, '', `${location.pathname}?${params.toString()}${location.hash}`);\n },\n remove(key) {\n const params = new URLSearchParams(location.search);\n params.delete(key);\n const search = params.toString();\n history[method]({}, '', `${location.pathname}${search ? `?${search}` : ''}${location.hash}`);\n },\n has(key) {\n return new URLSearchParams(location.search).has(key);\n },\n keys() {\n return [...new URLSearchParams(location.search).keys()];\n },\n clear() {\n history[method]({}, '', `${location.pathname}${location.hash}`);\n },\n };\n}\n"],
5
+ "mappings": "AAAA,SAAS,0BAA0B;AACnC,SAAS,yBAAyB;AAG3B,SAAS,8BAA8B,UAA8B,CAAC,GAAoB;AAC/F,QAAM,iBAAiB,kBAAkB;AAEzC,MAAI,CAAC,gBAAgB;AACnB,WAAO,mBAAmB;AAAA,EAC5B;AAEA,QAAM,EAAE,OAAO,MAAM,IAAI;AACzB,QAAM,SAAS,OAAO,cAAc;AACpC,QAAM,EAAE,UAAU,QAAQ,IAAI;AAE9B,SAAO;AAAA,IACL,WAAW;AAAA,IACX,IAAI,KAAK;AACP,aAAO,IAAI,gBAAgB,SAAS,MAAM,EAAE,IAAI,GAAG;AAAA,IACrD;AAAA,IACA,IAAI,KAAK,OAAO;AACd,YAAM,SAAS,IAAI,gBAAgB,SAAS,MAAM;AAClD,aAAO,IAAI,KAAK,KAAK;AACrB,cAAQ,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,QAAQ,IAAI,OAAO,SAAS,CAAC,GAAG,SAAS,IAAI,EAAE;AAAA,IACrF;AAAA,IACA,OAAO,KAAK;AACV,YAAM,SAAS,IAAI,gBAAgB,SAAS,MAAM;AAClD,aAAO,OAAO,GAAG;AACjB,YAAM,SAAS,OAAO,SAAS;AAC/B,cAAQ,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,QAAQ,GAAG,SAAS,IAAI,MAAM,KAAK,EAAE,GAAG,SAAS,IAAI,EAAE;AAAA,IAC7F;AAAA,IACA,IAAI,KAAK;AACP,aAAO,IAAI,gBAAgB,SAAS,MAAM,EAAE,IAAI,GAAG;AAAA,IACrD;AAAA,IACA,OAAO;AACL,aAAO,CAAC,GAAG,IAAI,gBAAgB,SAAS,MAAM,EAAE,KAAK,CAAC;AAAA,IACxD;AAAA,IACA,QAAQ;AACN,cAAQ,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,QAAQ,GAAG,SAAS,IAAI,EAAE;AAAA,IAChE;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export declare function getBrowserContext(): Pick<Window, 'location' | 'history'> | undefined;
@@ -0,0 +1,17 @@
1
+ function getBrowserContext() {
2
+ if (typeof globalThis === "undefined" || !("window" in globalThis)) {
3
+ return void 0;
4
+ }
5
+ const { window } = globalThis;
6
+ if (!window || !window.location || !window.history) {
7
+ return void 0;
8
+ }
9
+ return {
10
+ location: window.location,
11
+ history: window.history
12
+ };
13
+ }
14
+ export {
15
+ getBrowserContext
16
+ };
17
+ //# sourceMappingURL=getBrowserContext.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/getBrowserContext.ts"],
4
+ "sourcesContent": ["export function getBrowserContext(): Pick<Window, 'location' | 'history'> | undefined {\n if (typeof globalThis === 'undefined' || !('window' in globalThis)) {\n return undefined;\n }\n\n const { window } = globalThis;\n\n if (!window || !window.location || !window.history) {\n return undefined;\n }\n\n return {\n location: window.location,\n history: window.history,\n };\n}\n"],
5
+ "mappings": "AAAO,SAAS,oBAAsE;AACpF,MAAI,OAAO,eAAe,eAAe,EAAE,YAAY,aAAa;AAClE,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,OAAO,IAAI;AAEnB,MAAI,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,OAAO,SAAS;AAClD,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,UAAU,OAAO;AAAA,IACjB,SAAS,OAAO;AAAA,EAClB;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export declare function getGlobalStorage(name: 'localStorage' | 'sessionStorage'): Storage | undefined;
@@ -0,0 +1,7 @@
1
+ function getGlobalStorage(name) {
2
+ return typeof globalThis !== "undefined" && name in globalThis ? globalThis[name] : void 0;
3
+ }
4
+ export {
5
+ getGlobalStorage
6
+ };
7
+ //# sourceMappingURL=getGlobalStorage.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/getGlobalStorage.ts"],
4
+ "sourcesContent": ["export function getGlobalStorage(name: 'localStorage' | 'sessionStorage'): Storage | undefined {\n return typeof globalThis !== 'undefined' && name in globalThis ? globalThis[name] : undefined;\n}\n"],
5
+ "mappings": "AAAO,SAAS,iBAAiB,MAA8D;AAC7F,SAAO,OAAO,eAAe,eAAe,QAAQ,aAAa,WAAW,IAAI,IAAI;AACtF;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export declare function getStorageKeys(storage: Storage | undefined): string[];
@@ -0,0 +1,12 @@
1
+ function getStorageKeys(storage) {
2
+ if (!storage) {
3
+ return [];
4
+ }
5
+ return Array.from({ length: storage.length }, (_, index) => storage.key(index)).filter(
6
+ (key) => key !== null
7
+ );
8
+ }
9
+ export {
10
+ getStorageKeys
11
+ };
12
+ //# sourceMappingURL=getStorageKeys.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/getStorageKeys.ts"],
4
+ "sourcesContent": ["export function getStorageKeys(storage: Storage | undefined): string[] {\n if (!storage) {\n return [];\n }\n\n return Array.from({ length: storage.length }, (_, index) => storage.key(index)).filter(\n (key): key is string => key !== null,\n );\n}\n"],
5
+ "mappings": "AAAO,SAAS,eAAe,SAAwC;AACrE,MAAI,CAAC,SAAS;AACZ,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,MAAM,KAAK,EAAE,QAAQ,QAAQ,OAAO,GAAG,CAAC,GAAG,UAAU,QAAQ,IAAI,KAAK,CAAC,EAAE;AAAA,IAC9E,CAAC,QAAuB,QAAQ;AAAA,EAClC;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ export type { StorageInstance, StorageOptions, StorageProvider, StorageSerializer, UrlProviderOptions, } from './types.js';
2
+ export { createLocalStorageProvider, createMemoryStorageProvider, createNoopProvider, createSessionStorageProvider, createUrlSearchParamsInHashProvider, createUrlSearchParamsProvider, localStorageProvider, memoryStorageProvider, sessionStorageProvider, urlSearchParamsInHashProvider, urlSearchParamsProvider, } from './providers.js';
3
+ export { createStorage } from './createStorage.js';
4
+ import type { StorageInstance, StorageOptions, UrlProviderOptions } from './types.js';
5
+ export declare function createLocalStorage<T extends Record<string, any> = Record<string, any>>(options?: Omit<StorageOptions, 'provider'>): StorageInstance<T>;
6
+ export declare function createSessionStorage<T extends Record<string, any> = Record<string, any>>(options?: Omit<StorageOptions, 'provider'>): StorageInstance<T>;
7
+ export declare function createUrlSearchParamsStorage<T extends Record<string, any> = Record<string, any>>(options?: Omit<StorageOptions, 'provider'> & UrlProviderOptions): StorageInstance<T>;
8
+ export declare function createUrlSearchParamsInHashStorage<T extends Record<string, any> = Record<string, any>>(options?: Omit<StorageOptions, 'provider'> & UrlProviderOptions): StorageInstance<T>;
@@ -0,0 +1,62 @@
1
+ import {
2
+ createLocalStorageProvider,
3
+ createMemoryStorageProvider,
4
+ createNoopProvider,
5
+ createSessionStorageProvider,
6
+ createUrlSearchParamsInHashProvider,
7
+ createUrlSearchParamsProvider,
8
+ localStorageProvider,
9
+ memoryStorageProvider,
10
+ sessionStorageProvider,
11
+ urlSearchParamsInHashProvider,
12
+ urlSearchParamsProvider
13
+ } from "./providers.js";
14
+ import { createStorage } from "./createStorage.js";
15
+ import { createStorage as createStorage2 } from "./createStorage.js";
16
+ import {
17
+ createUrlSearchParamsInHashProvider as createUrlSearchParamsInHashProvider2,
18
+ createUrlSearchParamsProvider as createUrlSearchParamsProvider2,
19
+ localStorageProvider as localStorageProvider2,
20
+ sessionStorageProvider as sessionStorageProvider2,
21
+ urlSearchParamsInHashProvider as urlSearchParamsInHashProvider2,
22
+ urlSearchParamsProvider as urlSearchParamsProvider2
23
+ } from "./providers.js";
24
+ function createLocalStorage(options) {
25
+ return createStorage2({ ...options, provider: localStorageProvider2 });
26
+ }
27
+ function createSessionStorage(options) {
28
+ return createStorage2({ ...options, provider: sessionStorageProvider2 });
29
+ }
30
+ function createUrlSearchParamsStorage(options) {
31
+ const { push, ...storageOptions } = options ?? {};
32
+ return createStorage2({
33
+ ...storageOptions,
34
+ provider: push ? createUrlSearchParamsProvider2({ push }) : urlSearchParamsProvider2
35
+ });
36
+ }
37
+ function createUrlSearchParamsInHashStorage(options) {
38
+ const { push, ...storageOptions } = options ?? {};
39
+ return createStorage2({
40
+ ...storageOptions,
41
+ provider: push ? createUrlSearchParamsInHashProvider2({ push }) : urlSearchParamsInHashProvider2
42
+ });
43
+ }
44
+ export {
45
+ createLocalStorage,
46
+ createLocalStorageProvider,
47
+ createMemoryStorageProvider,
48
+ createNoopProvider,
49
+ createSessionStorage,
50
+ createSessionStorageProvider,
51
+ createStorage,
52
+ createUrlSearchParamsInHashProvider,
53
+ createUrlSearchParamsInHashStorage,
54
+ createUrlSearchParamsProvider,
55
+ createUrlSearchParamsStorage,
56
+ localStorageProvider,
57
+ memoryStorageProvider,
58
+ sessionStorageProvider,
59
+ urlSearchParamsInHashProvider,
60
+ urlSearchParamsProvider
61
+ };
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/index.ts"],
4
+ "sourcesContent": ["export type {\n StorageInstance,\n StorageOptions,\n StorageProvider,\n StorageSerializer,\n UrlProviderOptions,\n} from './types.js';\n\nexport {\n createLocalStorageProvider,\n createMemoryStorageProvider,\n createNoopProvider,\n createSessionStorageProvider,\n createUrlSearchParamsInHashProvider,\n createUrlSearchParamsProvider,\n localStorageProvider,\n memoryStorageProvider,\n sessionStorageProvider,\n urlSearchParamsInHashProvider,\n urlSearchParamsProvider,\n} from './providers.js';\nexport { createStorage } from './createStorage.js';\n\nimport type { StorageInstance, StorageOptions, UrlProviderOptions } from './types.js';\nimport { createStorage } from './createStorage.js';\nimport {\n createUrlSearchParamsInHashProvider,\n createUrlSearchParamsProvider,\n localStorageProvider,\n sessionStorageProvider,\n urlSearchParamsInHashProvider,\n urlSearchParamsProvider,\n} from './providers.js';\n\nexport function createLocalStorage<T extends Record<string, any> = Record<string, any>>(\n options?: Omit<StorageOptions, 'provider'>,\n): StorageInstance<T> {\n return createStorage({ ...options, provider: localStorageProvider });\n}\n\nexport function createSessionStorage<T extends Record<string, any> = Record<string, any>>(\n options?: Omit<StorageOptions, 'provider'>,\n): StorageInstance<T> {\n return createStorage({ ...options, provider: sessionStorageProvider });\n}\n\nexport function createUrlSearchParamsStorage<T extends Record<string, any> = Record<string, any>>(\n options?: Omit<StorageOptions, 'provider'> & UrlProviderOptions,\n): StorageInstance<T> {\n const { push, ...storageOptions } = options ?? {};\n return createStorage({\n ...storageOptions,\n provider: push ? createUrlSearchParamsProvider({ push }) : urlSearchParamsProvider,\n });\n}\n\nexport function createUrlSearchParamsInHashStorage<\n T extends Record<string, any> = Record<string, any>,\n>(options?: Omit<StorageOptions, 'provider'> & UrlProviderOptions): StorageInstance<T> {\n const { push, ...storageOptions } = options ?? {};\n return createStorage({\n ...storageOptions,\n provider: push ? createUrlSearchParamsInHashProvider({ push }) : urlSearchParamsInHashProvider,\n });\n}\n"],
5
+ "mappings": "AAQA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,qBAAqB;AAG9B,SAAS,iBAAAA,sBAAqB;AAC9B;AAAA,EACE,uCAAAC;AAAA,EACA,iCAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,0BAAAC;AAAA,EACA,iCAAAC;AAAA,EACA,2BAAAC;AAAA,OACK;AAEA,SAAS,mBACd,SACoB;AACpB,SAAON,eAAc,EAAE,GAAG,SAAS,UAAUG,sBAAqB,CAAC;AACrE;AAEO,SAAS,qBACd,SACoB;AACpB,SAAOH,eAAc,EAAE,GAAG,SAAS,UAAUI,wBAAuB,CAAC;AACvE;AAEO,SAAS,6BACd,SACoB;AACpB,QAAM,EAAE,MAAM,GAAG,eAAe,IAAI,WAAW,CAAC;AAChD,SAAOJ,eAAc;AAAA,IACnB,GAAG;AAAA,IACH,UAAU,OAAOE,+BAA8B,EAAE,KAAK,CAAC,IAAII;AAAA,EAC7D,CAAC;AACH;AAEO,SAAS,mCAEd,SAAqF;AACrF,QAAM,EAAE,MAAM,GAAG,eAAe,IAAI,WAAW,CAAC;AAChD,SAAON,eAAc;AAAA,IACnB,GAAG;AAAA,IACH,UAAU,OAAOC,qCAAoC,EAAE,KAAK,CAAC,IAAII;AAAA,EACnE,CAAC;AACH;",
6
+ "names": ["createStorage", "createUrlSearchParamsInHashProvider", "createUrlSearchParamsProvider", "localStorageProvider", "sessionStorageProvider", "urlSearchParamsInHashProvider", "urlSearchParamsProvider"]
7
+ }
@@ -0,0 +1,11 @@
1
+ export { createLocalStorageProvider } from './createLocalStorageProvider.js';
2
+ export { createMemoryStorageProvider } from './createMemoryStorageProvider.js';
3
+ export { createNoopProvider } from './createNoopProvider.js';
4
+ export { createSessionStorageProvider } from './createSessionStorageProvider.js';
5
+ export { createUrlSearchParamsInHashProvider } from './createUrlSearchParamsInHashProvider.js';
6
+ export { createUrlSearchParamsProvider } from './createUrlSearchParamsProvider.js';
7
+ export declare const localStorageProvider: import("./types.js").StorageProvider;
8
+ export declare const memoryStorageProvider: import("./types.js").StorageProvider;
9
+ export declare const sessionStorageProvider: import("./types.js").StorageProvider;
10
+ export declare const urlSearchParamsProvider: import("./types.js").StorageProvider;
11
+ export declare const urlSearchParamsInHashProvider: import("./types.js").StorageProvider;
@@ -0,0 +1,30 @@
1
+ import { createLocalStorageProvider } from "./createLocalStorageProvider.js";
2
+ import { createMemoryStorageProvider } from "./createMemoryStorageProvider.js";
3
+ import { createSessionStorageProvider } from "./createSessionStorageProvider.js";
4
+ import { createUrlSearchParamsInHashProvider } from "./createUrlSearchParamsInHashProvider.js";
5
+ import { createUrlSearchParamsProvider } from "./createUrlSearchParamsProvider.js";
6
+ import { createLocalStorageProvider as createLocalStorageProvider2 } from "./createLocalStorageProvider.js";
7
+ import { createMemoryStorageProvider as createMemoryStorageProvider2 } from "./createMemoryStorageProvider.js";
8
+ import { createNoopProvider } from "./createNoopProvider.js";
9
+ import { createSessionStorageProvider as createSessionStorageProvider2 } from "./createSessionStorageProvider.js";
10
+ import { createUrlSearchParamsInHashProvider as createUrlSearchParamsInHashProvider2 } from "./createUrlSearchParamsInHashProvider.js";
11
+ import { createUrlSearchParamsProvider as createUrlSearchParamsProvider2 } from "./createUrlSearchParamsProvider.js";
12
+ const localStorageProvider = createLocalStorageProvider();
13
+ const memoryStorageProvider = createMemoryStorageProvider();
14
+ const sessionStorageProvider = createSessionStorageProvider();
15
+ const urlSearchParamsProvider = createUrlSearchParamsProvider();
16
+ const urlSearchParamsInHashProvider = createUrlSearchParamsInHashProvider();
17
+ export {
18
+ createLocalStorageProvider2 as createLocalStorageProvider,
19
+ createMemoryStorageProvider2 as createMemoryStorageProvider,
20
+ createNoopProvider,
21
+ createSessionStorageProvider2 as createSessionStorageProvider,
22
+ createUrlSearchParamsInHashProvider2 as createUrlSearchParamsInHashProvider,
23
+ createUrlSearchParamsProvider2 as createUrlSearchParamsProvider,
24
+ localStorageProvider,
25
+ memoryStorageProvider,
26
+ sessionStorageProvider,
27
+ urlSearchParamsInHashProvider,
28
+ urlSearchParamsProvider
29
+ };
30
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/providers.ts"],
4
+ "sourcesContent": ["import { createLocalStorageProvider } from './createLocalStorageProvider.js';\nimport { createMemoryStorageProvider } from './createMemoryStorageProvider.js';\nimport { createSessionStorageProvider } from './createSessionStorageProvider.js';\nimport { createUrlSearchParamsInHashProvider } from './createUrlSearchParamsInHashProvider.js';\nimport { createUrlSearchParamsProvider } from './createUrlSearchParamsProvider.js';\n\nexport { createLocalStorageProvider } from './createLocalStorageProvider.js';\nexport { createMemoryStorageProvider } from './createMemoryStorageProvider.js';\nexport { createNoopProvider } from './createNoopProvider.js';\nexport { createSessionStorageProvider } from './createSessionStorageProvider.js';\nexport { createUrlSearchParamsInHashProvider } from './createUrlSearchParamsInHashProvider.js';\nexport { createUrlSearchParamsProvider } from './createUrlSearchParamsProvider.js';\n\nexport const localStorageProvider = createLocalStorageProvider();\nexport const memoryStorageProvider = createMemoryStorageProvider();\nexport const sessionStorageProvider = createSessionStorageProvider();\nexport const urlSearchParamsProvider = createUrlSearchParamsProvider();\nexport const urlSearchParamsInHashProvider = createUrlSearchParamsInHashProvider();\n"],
5
+ "mappings": "AAAA,SAAS,kCAAkC;AAC3C,SAAS,mCAAmC;AAC5C,SAAS,oCAAoC;AAC7C,SAAS,2CAA2C;AACpD,SAAS,qCAAqC;AAE9C,SAAS,8BAAAA,mCAAkC;AAC3C,SAAS,+BAAAC,oCAAmC;AAC5C,SAAS,0BAA0B;AACnC,SAAS,gCAAAC,qCAAoC;AAC7C,SAAS,uCAAAC,4CAA2C;AACpD,SAAS,iCAAAC,sCAAqC;AAEvC,MAAM,uBAAuB,2BAA2B;AACxD,MAAM,wBAAwB,4BAA4B;AAC1D,MAAM,yBAAyB,6BAA6B;AAC5D,MAAM,0BAA0B,8BAA8B;AAC9D,MAAM,gCAAgC,oCAAoC;",
6
+ "names": ["createLocalStorageProvider", "createMemoryStorageProvider", "createSessionStorageProvider", "createUrlSearchParamsInHashProvider", "createUrlSearchParamsProvider"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageSerializer } from './types.js';
2
+ export declare const jsonSerializer: StorageSerializer;
@@ -0,0 +1,14 @@
1
+ const jsonSerializer = {
2
+ serialize: (value) => JSON.stringify(value),
3
+ deserialize: (value) => {
4
+ try {
5
+ return JSON.parse(value);
6
+ } catch {
7
+ return void 0;
8
+ }
9
+ }
10
+ };
11
+ export {
12
+ jsonSerializer
13
+ };
14
+ //# sourceMappingURL=serializers.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/serializers.ts"],
4
+ "sourcesContent": ["import type { StorageSerializer } from './types.js';\n\nexport const jsonSerializer: StorageSerializer = {\n serialize: <T>(value: T): string => JSON.stringify(value),\n deserialize: <T>(value: string): T | undefined => {\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n },\n};\n"],
5
+ "mappings": "AAEO,MAAM,iBAAoC;AAAA,EAC/C,WAAW,CAAI,UAAqB,KAAK,UAAU,KAAK;AAAA,EACxD,aAAa,CAAI,UAAiC;AAChD,QAAI;AACF,aAAO,KAAK,MAAM,KAAK;AAAA,IACzB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,33 @@
1
+ export interface StorageProvider {
2
+ get(key: string): string | null;
3
+ set(key: string, value: string): void;
4
+ remove(key: string): void;
5
+ has(key: string): boolean;
6
+ keys(): string[];
7
+ clear(): void;
8
+ syncEvent?: string;
9
+ storageArea?: Storage;
10
+ }
11
+ export interface StorageInstance<T = any> {
12
+ get<K extends keyof T>(key: K): T[K] | undefined;
13
+ get<K extends keyof T>(key: K, defaultValue: T[K]): T[K];
14
+ set<K extends keyof T>(key: K, value: T[K]): void;
15
+ delete<K extends keyof T>(key: K): void;
16
+ has<K extends keyof T>(key: K): boolean;
17
+ keys(): (keyof T)[];
18
+ clear(): void;
19
+ subscribe<K extends keyof T>(key: K, callback: (value: T[K] | undefined) => void): () => void;
20
+ destroy(): void;
21
+ }
22
+ export interface StorageSerializer {
23
+ serialize: (value: any) => string;
24
+ deserialize: (value: string) => any;
25
+ }
26
+ export interface StorageOptions {
27
+ provider?: StorageProvider;
28
+ serializer?: StorageSerializer;
29
+ prefix?: string;
30
+ }
31
+ export interface UrlProviderOptions {
32
+ push?: boolean;
33
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export * from './storage/index.js';
@@ -0,0 +1,2 @@
1
+ export * from "./storage/index.js";
2
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/utils/storage.ts"],
4
+ "sourcesContent": ["export * from './storage/index.js';\n"],
5
+ "mappings": "AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -1,30 +1,30 @@
1
1
  /**
2
2
  * Convert a string to lowercase.
3
3
  * @link https://js-toolkit.studiometa.dev/utils/string/lowerCase.html
4
- */
4
+ */
5
5
  export declare function lowerCase(string: string): string;
6
6
  /**
7
7
  * Convert a string to UPPERCASE.
8
8
  * @link https://js-toolkit.studiometa.dev/utils/string/upperCase.html
9
- */
9
+ */
10
10
  export declare function upperCase(string: string): string;
11
11
  /**
12
12
  * Convert a string to camelCase.
13
13
  * @link https://js-toolkit.studiometa.dev/utils/string/camelCase.html
14
- */
14
+ */
15
15
  export declare const camelCase: (string: string) => string;
16
16
  /**
17
17
  * Convert a string to PascalCase.
18
18
  * @link https://js-toolkit.studiometa.dev/utils/string/pascalCase.html
19
- */
19
+ */
20
20
  export declare const pascalCase: (string: string) => string;
21
21
  /**
22
22
  * Convert a string to snake_case.
23
23
  * @link https://js-toolkit.studiometa.dev/utils/string/snakeCase.html
24
- */
24
+ */
25
25
  export declare const snakeCase: (string: string) => string;
26
26
  /**
27
27
  * Convert a string to dash-case.
28
28
  * @link https://js-toolkit.studiometa.dev/utils/string/dashCase.html
29
- */
29
+ */
30
30
  export declare const dashCase: (string: string) => string;
@@ -12,7 +12,7 @@ function split(value) {
12
12
  while (result.charAt(start) === "\0") start++;
13
13
  if (start === end) return [];
14
14
  while (result.charAt(end - 1) === "\0") end--;
15
- return result.slice(start, end).split(/\0/g);
15
+ return result.slice(start, end).split("\0");
16
16
  }
17
17
  function delimitedCase(string, delimiter) {
18
18
  return split(string).map((word) => lowerCase(word)).join(delimiter);