@studiometa/js-toolkit 3.4.3 → 3.6.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/Base/Base.d.ts +21 -1
  2. package/Base/Base.js +47 -5
  3. package/Base/Base.js.map +2 -2
  4. package/Base/managers/AbstractManager.d.ts +2 -2
  5. package/Base/managers/EventsManager.js +1 -1
  6. package/Base/managers/EventsManager.js.map +2 -2
  7. package/Base/utils.d.ts +1 -1
  8. package/Base/utils.js +1 -2
  9. package/Base/utils.js.map +2 -2
  10. package/decorators/withBreakpointManager.js +1 -1
  11. package/decorators/withBreakpointManager.js.map +2 -2
  12. package/helpers/createApp.js +8 -17
  13. package/helpers/createApp.js.map +2 -2
  14. package/helpers/defineFeatures.d.ts +7 -0
  15. package/helpers/defineFeatures.js +21 -0
  16. package/helpers/defineFeatures.js.map +7 -0
  17. package/helpers/getDirectChildren.js +4 -3
  18. package/helpers/getDirectChildren.js.map +2 -2
  19. package/helpers/index.d.ts +3 -0
  20. package/helpers/index.js +12 -0
  21. package/helpers/index.js.map +2 -2
  22. package/helpers/logTree.d.ts +17 -0
  23. package/helpers/logTree.js +59 -0
  24. package/helpers/logTree.js.map +7 -0
  25. package/helpers/queryComponent.d.ts +28 -0
  26. package/helpers/queryComponent.js +66 -0
  27. package/helpers/queryComponent.js.map +7 -0
  28. package/index.d.ts +1 -1
  29. package/index.js +1 -1
  30. package/index.js.map +1 -1
  31. package/package.json +1 -1
  32. package/services/AbstractService.d.ts +1 -1
  33. package/services/AbstractService.js +1 -1
  34. package/services/AbstractService.js.map +2 -2
  35. package/services/DragService.d.ts +5 -5
  36. package/services/RafService.d.ts +1 -1
  37. package/services/RafService.js +13 -7
  38. package/services/RafService.js.map +2 -2
  39. package/services/ScrollService.d.ts +21 -3
  40. package/services/ScrollService.js +55 -7
  41. package/services/ScrollService.js.map +2 -2
  42. package/utils/collide/boundingRectToCircle.d.ts +2 -2
  43. package/utils/css/animate.js +166 -96
  44. package/utils/css/animate.js.map +2 -2
  45. package/utils/css/transform.js +12 -13
  46. package/utils/css/transform.js.map +2 -2
  47. package/utils/index.d.ts +1 -0
  48. package/utils/index.js +1 -0
  49. package/utils/index.js.map +2 -2
  50. package/utils/math/smoothTo.d.ts +24 -6
  51. package/utils/memoize.d.ts +1 -1
  52. package/utils/object/getAllProperties.js +4 -2
  53. package/utils/object/getAllProperties.js.map +2 -2
  54. package/utils/scheduler.d.ts +1 -1
  55. package/utils/storage/createLocalStorageProvider.d.ts +2 -0
  56. package/utils/storage/createLocalStorageProvider.js +32 -0
  57. package/utils/storage/createLocalStorageProvider.js.map +7 -0
  58. package/utils/storage/createMemoryStorageProvider.d.ts +2 -0
  59. package/utils/storage/createMemoryStorageProvider.js +27 -0
  60. package/utils/storage/createMemoryStorageProvider.js.map +7 -0
  61. package/utils/storage/createNoopProvider.d.ts +2 -0
  62. package/utils/storage/createNoopProvider.js +23 -0
  63. package/utils/storage/createNoopProvider.js.map +7 -0
  64. package/utils/storage/createSessionStorageProvider.d.ts +2 -0
  65. package/utils/storage/createSessionStorageProvider.js +31 -0
  66. package/utils/storage/createSessionStorageProvider.js.map +7 -0
  67. package/utils/storage/createStorage.d.ts +2 -0
  68. package/utils/storage/createStorage.js +100 -0
  69. package/utils/storage/createStorage.js.map +7 -0
  70. package/utils/storage/createUrlSearchParamsInHashProvider.d.ts +2 -0
  71. package/utils/storage/createUrlSearchParamsInHashProvider.js +57 -0
  72. package/utils/storage/createUrlSearchParamsInHashProvider.js.map +7 -0
  73. package/utils/storage/createUrlSearchParamsProvider.d.ts +2 -0
  74. package/utils/storage/createUrlSearchParamsProvider.js +41 -0
  75. package/utils/storage/createUrlSearchParamsProvider.js.map +7 -0
  76. package/utils/storage/getBrowserContext.d.ts +1 -0
  77. package/utils/storage/getBrowserContext.js +17 -0
  78. package/utils/storage/getBrowserContext.js.map +7 -0
  79. package/utils/storage/getGlobalStorage.d.ts +1 -0
  80. package/utils/storage/getGlobalStorage.js +7 -0
  81. package/utils/storage/getGlobalStorage.js.map +7 -0
  82. package/utils/storage/getStorageKeys.d.ts +1 -0
  83. package/utils/storage/getStorageKeys.js +12 -0
  84. package/utils/storage/getStorageKeys.js.map +7 -0
  85. package/utils/storage/index.d.ts +8 -0
  86. package/utils/storage/index.js +62 -0
  87. package/utils/storage/index.js.map +7 -0
  88. package/utils/storage/providers.d.ts +11 -0
  89. package/utils/storage/providers.js +30 -0
  90. package/utils/storage/providers.js.map +7 -0
  91. package/utils/storage/serializers.d.ts +2 -0
  92. package/utils/storage/serializers.js +14 -0
  93. package/utils/storage/serializers.js.map +7 -0
  94. package/utils/storage/types.d.ts +33 -0
  95. package/utils/storage/types.js +1 -0
  96. package/utils/storage/types.js.map +7 -0
  97. package/utils/storage.d.ts +1 -0
  98. package/utils/storage.js +2 -0
  99. package/utils/storage.js.map +7 -0
  100. package/utils/string/changeCase.js +1 -1
  101. package/utils/string/changeCase.js.map +2 -2
  102. package/utils/tween.js +5 -5
  103. package/utils/tween.js.map +2 -2
  104. package/tsconfig.build.tsbuildinfo +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/index.ts"],
4
- "sourcesContent": ["export { debounce } from './debounce.js';\nexport * from './trapFocus.js';\nexport { keyCodes } from './keyCodes.js';\nexport { memoize } from './memoize.js';\nexport { nextFrame } from './nextFrame.js';\nexport { nextTick } from './nextTick.js';\nexport { nextMicrotask } from './nextMicrotask.js';\nexport { throttle } from './throttle.js';\nexport { scrollTo } from './scrollTo.js';\nexport { getComponentResolver } from './getComponentResolver.js';\nexport * from './is.js';\nexport * from './has.js';\nexport * from './css/index.js';\nexport {\n objectToURLSearchParams,\n push as historyPush,\n replace as historyReplace,\n} from './history.js';\nexport * from './collide/index.js';\nexport * from './math/index.js';\nexport * from './string/index.js';\nexport * from './scheduler.js';\nexport * from './noop.js';\nexport { tween } from './tween.js';\nexport { Queue } from './Queue.js';\nexport { SmartQueue } from './SmartQueue.js';\nexport * from './dom/index.js';\nexport * from './wait.js';\nexport * from './random.js';\nexport * from './memo.js';\nexport * from './loadElement.js';\nexport * from './cache.js';\n"],
5
- "mappings": "AAAA,SAAS,gBAAgB;AACzB,cAAc;AACd,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;AACrC,cAAc;AACd,cAAc;AACd,cAAc;AACd;AAAA,EACE;AAAA,EACQ;AAAA,EACG;AAAA,OACN;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAC3B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "sourcesContent": ["export { debounce } from './debounce.js';\nexport * from './trapFocus.js';\nexport { keyCodes } from './keyCodes.js';\nexport { memoize } from './memoize.js';\nexport { nextFrame } from './nextFrame.js';\nexport { nextTick } from './nextTick.js';\nexport { nextMicrotask } from './nextMicrotask.js';\nexport { throttle } from './throttle.js';\nexport { scrollTo } from './scrollTo.js';\nexport { getComponentResolver } from './getComponentResolver.js';\nexport * from './is.js';\nexport * from './has.js';\nexport * from './css/index.js';\nexport {\n objectToURLSearchParams,\n push as historyPush,\n replace as historyReplace,\n} from './history.js';\nexport * from './collide/index.js';\nexport * from './math/index.js';\nexport * from './string/index.js';\nexport * from './scheduler.js';\nexport * from './noop.js';\nexport { tween } from './tween.js';\nexport { Queue } from './Queue.js';\nexport { SmartQueue } from './SmartQueue.js';\nexport * from './dom/index.js';\nexport * from './wait.js';\nexport * from './random.js';\nexport * from './memo.js';\nexport * from './loadElement.js';\nexport * from './cache.js';\nexport * from './storage.js';\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB;AACzB,cAAc;AACd,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;AACrC,cAAc;AACd,cAAc;AACd,cAAc;AACd;AAAA,EACE;AAAA,EACQ;AAAA,EACG;AAAA,OACN;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAC3B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }
@@ -42,10 +42,28 @@ export declare function smoothTo(start?: number, options?: SmoothToOptions): {
42
42
  * Unsubscribe a callback from the value update.
43
43
  */
44
44
  unsubscribe: (fn: (value: number) => any) => boolean;
45
- raw(): number;
46
- add(val: number): number;
47
- damping(val?: number): number;
48
- precision(val?: number): number;
49
- stiffness(val?: number): number;
50
- spring(val?: boolean): boolean;
45
+ /**
46
+ * Get the raw target value.
47
+ */
48
+ raw: () => number;
49
+ /**
50
+ * Add the given value to the current raw value.
51
+ */
52
+ add: (val: number) => number;
53
+ /**
54
+ * Get or set the damping factor.
55
+ */
56
+ damping: (val?: number) => number;
57
+ /**
58
+ * Get or set the precision.
59
+ */
60
+ precision: (val?: number) => number;
61
+ /**
62
+ * Get or set the stiffness factor.
63
+ */
64
+ stiffness: (val?: number) => number;
65
+ /**
66
+ * Get or set the spring option.
67
+ */
68
+ spring: (val?: boolean) => boolean;
51
69
  };
@@ -18,4 +18,4 @@ export interface MemoizeOptions<T> {
18
18
  * Memoize the output of a function.
19
19
  * @link https://js-toolkit.studiometa.dev/utils/memoize.html
20
20
  */
21
- export declare function memoize<T extends (...args: unknown[]) => unknown>(fn: T, { maxAge, cacheKey, cache, }?: MemoizeOptions<ReturnType<T>>): (...args: Parameters<T>) => ReturnType<T>;
21
+ export declare function memoize<T extends (...args: unknown[]) => unknown>(fn: T, { maxAge, cacheKey, cache }?: MemoizeOptions<ReturnType<T>>): (...args: Parameters<T>) => ReturnType<T>;
@@ -8,8 +8,10 @@ function getAllProperties(object, props = [], testFn = null) {
8
8
  if (isFunction(testFn)) {
9
9
  foundProps = foundProps.filter((name) => testFn(name, proto));
10
10
  }
11
- const formatedProps = foundProps.map((name) => [name, proto]).reduce((acc, val) => [...acc, val], props);
12
- return getAllProperties(proto, formatedProps, testFn);
11
+ for (const name of foundProps) {
12
+ props.push([name, proto]);
13
+ }
14
+ return getAllProperties(proto, props, testFn);
13
15
  }
14
16
  export {
15
17
  getAllProperties
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/js-toolkit/utils/object/getAllProperties.ts"],
4
- "sourcesContent": ["import { isFunction } from '../is.js';\n\n/**\n * Gets all non-builtin properties up the prototype chain.\n *\n * @param {Object} object\n * The object to get the propeties from.\n * @param {Array} [props=[]]\n * The already existing properties.\n * @param {(name:string, proto:any) => boolean} testFn\n * @return {Array<[string, Object]>} An array of properties and the prototype they belong to.\n */\nexport function getAllProperties(\n object: unknown,\n props: Array<[string, unknown]> = [],\n testFn: (name: string, proto: unknown) => boolean = null,\n): Array<[string, unknown]> {\n const proto = Object.getPrototypeOf(object);\n\n if (proto === Object.prototype || proto === null) {\n return props;\n }\n\n let foundProps = Object.getOwnPropertyNames(proto);\n\n if (isFunction(testFn)) {\n foundProps = foundProps.filter((name) => testFn(name, proto));\n }\n\n const formatedProps = foundProps\n .map<[string, unknown]>((name) => [name, proto])\n .reduce<Array<[string, unknown]>>((acc, val) => [...acc, val], props);\n\n return getAllProperties(proto, formatedProps, testFn);\n}\n"],
5
- "mappings": "AAAA,SAAS,kBAAkB;AAYpB,SAAS,iBACd,QACA,QAAkC,CAAC,GACnC,SAAoD,MAC1B;AAC1B,QAAM,QAAQ,OAAO,eAAe,MAAM;AAE1C,MAAI,UAAU,OAAO,aAAa,UAAU,MAAM;AAChD,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,OAAO,oBAAoB,KAAK;AAEjD,MAAI,WAAW,MAAM,GAAG;AACtB,iBAAa,WAAW,OAAO,CAAC,SAAS,OAAO,MAAM,KAAK,CAAC;AAAA,EAC9D;AAEA,QAAM,gBAAgB,WACnB,IAAuB,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAC9C,OAAiC,CAAC,KAAK,QAAQ,CAAC,GAAG,KAAK,GAAG,GAAG,KAAK;AAEtE,SAAO,iBAAiB,OAAO,eAAe,MAAM;AACtD;",
4
+ "sourcesContent": ["import { isFunction } from '../is.js';\n\n/**\n * Gets all non-builtin properties up the prototype chain.\n *\n * @param {Object} object\n * The object to get the propeties from.\n * @param {Array} [props=[]]\n * The already existing properties.\n * @param {(name:string, proto:any) => boolean} testFn\n * @return {Array<[string, Object]>} An array of properties and the prototype they belong to.\n */\nexport function getAllProperties(\n object: unknown,\n props: Array<[string, unknown]> = [],\n testFn: (name: string, proto: unknown) => boolean = null,\n): Array<[string, unknown]> {\n const proto = Object.getPrototypeOf(object);\n\n if (proto === Object.prototype || proto === null) {\n return props;\n }\n\n let foundProps = Object.getOwnPropertyNames(proto);\n\n if (isFunction(testFn)) {\n foundProps = foundProps.filter((name) => testFn(name, proto));\n }\n\n for (const name of foundProps) {\n props.push([name, proto]);\n }\n\n return getAllProperties(proto, props, testFn);\n}\n"],
5
+ "mappings": "AAAA,SAAS,kBAAkB;AAYpB,SAAS,iBACd,QACA,QAAkC,CAAC,GACnC,SAAoD,MAC1B;AAC1B,QAAM,QAAQ,OAAO,eAAe,MAAM;AAE1C,MAAI,UAAU,OAAO,aAAa,UAAU,MAAM;AAChD,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,OAAO,oBAAoB,KAAK;AAEjD,MAAI,WAAW,MAAM,GAAG;AACtB,iBAAa,WAAW,OAAO,CAAC,SAAS,OAAO,MAAM,KAAK,CAAC;AAAA,EAC9D;AAEA,aAAW,QAAQ,YAAY;AAC7B,UAAM,KAAK,CAAC,MAAM,KAAK,CAAC;AAAA,EAC1B;AAEA,SAAO,iBAAiB,OAAO,OAAO,MAAM;AAC9C;",
6
6
  "names": []
7
7
  }
@@ -11,5 +11,5 @@ export declare function useScheduler<T extends string>(steps?: T[]): ReturnType<
11
11
  * DOM-oriented scheduler using read/write/afterWrite steps.
12
12
  * @link https://js-toolkit.studiometa.dev/utils/domScheduler.html
13
13
  */
14
- export declare const domScheduler: Record<"read" | "write" | "afterWrite", (fn: () => unknown) => void>;
14
+ export declare const domScheduler: Record<"afterWrite" | "read" | "write", (fn: () => unknown) => void>;
15
15
  export {};
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider } from './types.js';
2
+ export declare function createLocalStorageProvider(): StorageProvider;
@@ -0,0 +1,32 @@
1
+ import { getGlobalStorage } from "./getGlobalStorage.js";
2
+ import { getStorageKeys } from "./getStorageKeys.js";
3
+ function createLocalStorageProvider() {
4
+ return {
5
+ syncEvent: "storage",
6
+ get storageArea() {
7
+ return getGlobalStorage("localStorage");
8
+ },
9
+ get(key) {
10
+ return getGlobalStorage("localStorage")?.getItem(key) ?? null;
11
+ },
12
+ set(key, value) {
13
+ getGlobalStorage("localStorage")?.setItem(key, value);
14
+ },
15
+ remove(key) {
16
+ getGlobalStorage("localStorage")?.removeItem(key);
17
+ },
18
+ has(key) {
19
+ return getGlobalStorage("localStorage")?.getItem(key) !== null;
20
+ },
21
+ keys() {
22
+ return getStorageKeys(getGlobalStorage("localStorage"));
23
+ },
24
+ clear() {
25
+ getGlobalStorage("localStorage")?.clear();
26
+ }
27
+ };
28
+ }
29
+ export {
30
+ createLocalStorageProvider
31
+ };
32
+ //# sourceMappingURL=createLocalStorageProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createLocalStorageProvider.ts"],
4
+ "sourcesContent": ["import type { StorageProvider } from './types.js';\nimport { getGlobalStorage } from './getGlobalStorage.js';\nimport { getStorageKeys } from './getStorageKeys.js';\n\nexport function createLocalStorageProvider(): StorageProvider {\n return {\n syncEvent: 'storage',\n get storageArea() {\n return getGlobalStorage('localStorage');\n },\n get(key) {\n return getGlobalStorage('localStorage')?.getItem(key) ?? null;\n },\n set(key, value) {\n getGlobalStorage('localStorage')?.setItem(key, value);\n },\n remove(key) {\n getGlobalStorage('localStorage')?.removeItem(key);\n },\n has(key) {\n return getGlobalStorage('localStorage')?.getItem(key) !== null;\n },\n keys() {\n return getStorageKeys(getGlobalStorage('localStorage'));\n },\n clear() {\n getGlobalStorage('localStorage')?.clear();\n },\n };\n}\n"],
5
+ "mappings": "AACA,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAExB,SAAS,6BAA8C;AAC5D,SAAO;AAAA,IACL,WAAW;AAAA,IACX,IAAI,cAAc;AAChB,aAAO,iBAAiB,cAAc;AAAA,IACxC;AAAA,IACA,IAAI,KAAK;AACP,aAAO,iBAAiB,cAAc,GAAG,QAAQ,GAAG,KAAK;AAAA,IAC3D;AAAA,IACA,IAAI,KAAK,OAAO;AACd,uBAAiB,cAAc,GAAG,QAAQ,KAAK,KAAK;AAAA,IACtD;AAAA,IACA,OAAO,KAAK;AACV,uBAAiB,cAAc,GAAG,WAAW,GAAG;AAAA,IAClD;AAAA,IACA,IAAI,KAAK;AACP,aAAO,iBAAiB,cAAc,GAAG,QAAQ,GAAG,MAAM;AAAA,IAC5D;AAAA,IACA,OAAO;AACL,aAAO,eAAe,iBAAiB,cAAc,CAAC;AAAA,IACxD;AAAA,IACA,QAAQ;AACN,uBAAiB,cAAc,GAAG,MAAM;AAAA,IAC1C;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider } from './types.js';
2
+ export declare function createMemoryStorageProvider(): StorageProvider;
@@ -0,0 +1,27 @@
1
+ function createMemoryStorageProvider() {
2
+ const map = /* @__PURE__ */ new Map();
3
+ return {
4
+ get(key) {
5
+ return map.get(key) ?? null;
6
+ },
7
+ set(key, value) {
8
+ map.set(key, value);
9
+ },
10
+ remove(key) {
11
+ map.delete(key);
12
+ },
13
+ has(key) {
14
+ return map.has(key);
15
+ },
16
+ keys() {
17
+ return [...map.keys()];
18
+ },
19
+ clear() {
20
+ map.clear();
21
+ }
22
+ };
23
+ }
24
+ export {
25
+ createMemoryStorageProvider
26
+ };
27
+ //# sourceMappingURL=createMemoryStorageProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createMemoryStorageProvider.ts"],
4
+ "sourcesContent": ["import type { StorageProvider } from './types.js';\n\nexport function createMemoryStorageProvider(): StorageProvider {\n const map = new Map<string, string>();\n\n return {\n get(key) {\n return map.get(key) ?? null;\n },\n set(key, value) {\n map.set(key, value);\n },\n remove(key) {\n map.delete(key);\n },\n has(key) {\n return map.has(key);\n },\n keys() {\n return [...map.keys()];\n },\n clear() {\n map.clear();\n },\n };\n}\n"],
5
+ "mappings": "AAEO,SAAS,8BAA+C;AAC7D,QAAM,MAAM,oBAAI,IAAoB;AAEpC,SAAO;AAAA,IACL,IAAI,KAAK;AACP,aAAO,IAAI,IAAI,GAAG,KAAK;AAAA,IACzB;AAAA,IACA,IAAI,KAAK,OAAO;AACd,UAAI,IAAI,KAAK,KAAK;AAAA,IACpB;AAAA,IACA,OAAO,KAAK;AACV,UAAI,OAAO,GAAG;AAAA,IAChB;AAAA,IACA,IAAI,KAAK;AACP,aAAO,IAAI,IAAI,GAAG;AAAA,IACpB;AAAA,IACA,OAAO;AACL,aAAO,CAAC,GAAG,IAAI,KAAK,CAAC;AAAA,IACvB;AAAA,IACA,QAAQ;AACN,UAAI,MAAM;AAAA,IACZ;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider } from './types.js';
2
+ export declare function createNoopProvider(): StorageProvider;
@@ -0,0 +1,23 @@
1
+ function createNoopProvider() {
2
+ return {
3
+ get() {
4
+ return null;
5
+ },
6
+ set() {
7
+ },
8
+ remove() {
9
+ },
10
+ has() {
11
+ return false;
12
+ },
13
+ keys() {
14
+ return [];
15
+ },
16
+ clear() {
17
+ }
18
+ };
19
+ }
20
+ export {
21
+ createNoopProvider
22
+ };
23
+ //# sourceMappingURL=createNoopProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createNoopProvider.ts"],
4
+ "sourcesContent": ["import type { StorageProvider } from './types.js';\n\nexport function createNoopProvider(): StorageProvider {\n return {\n get() {\n return null;\n },\n set() {},\n remove() {},\n has() {\n return false;\n },\n keys() {\n return [];\n },\n clear() {},\n };\n}\n"],
5
+ "mappings": "AAEO,SAAS,qBAAsC;AACpD,SAAO;AAAA,IACL,MAAM;AACJ,aAAO;AAAA,IACT;AAAA,IACA,MAAM;AAAA,IAAC;AAAA,IACP,SAAS;AAAA,IAAC;AAAA,IACV,MAAM;AACJ,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,aAAO,CAAC;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider } from './types.js';
2
+ export declare function createSessionStorageProvider(): StorageProvider;
@@ -0,0 +1,31 @@
1
+ import { getGlobalStorage } from "./getGlobalStorage.js";
2
+ import { getStorageKeys } from "./getStorageKeys.js";
3
+ function createSessionStorageProvider() {
4
+ return {
5
+ get storageArea() {
6
+ return getGlobalStorage("sessionStorage");
7
+ },
8
+ get(key) {
9
+ return getGlobalStorage("sessionStorage")?.getItem(key) ?? null;
10
+ },
11
+ set(key, value) {
12
+ getGlobalStorage("sessionStorage")?.setItem(key, value);
13
+ },
14
+ remove(key) {
15
+ getGlobalStorage("sessionStorage")?.removeItem(key);
16
+ },
17
+ has(key) {
18
+ return getGlobalStorage("sessionStorage")?.getItem(key) !== null;
19
+ },
20
+ keys() {
21
+ return getStorageKeys(getGlobalStorage("sessionStorage"));
22
+ },
23
+ clear() {
24
+ getGlobalStorage("sessionStorage")?.clear();
25
+ }
26
+ };
27
+ }
28
+ export {
29
+ createSessionStorageProvider
30
+ };
31
+ //# sourceMappingURL=createSessionStorageProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createSessionStorageProvider.ts"],
4
+ "sourcesContent": ["import type { StorageProvider } from './types.js';\nimport { getGlobalStorage } from './getGlobalStorage.js';\nimport { getStorageKeys } from './getStorageKeys.js';\n\nexport function createSessionStorageProvider(): StorageProvider {\n return {\n get storageArea() {\n return getGlobalStorage('sessionStorage');\n },\n get(key) {\n return getGlobalStorage('sessionStorage')?.getItem(key) ?? null;\n },\n set(key, value) {\n getGlobalStorage('sessionStorage')?.setItem(key, value);\n },\n remove(key) {\n getGlobalStorage('sessionStorage')?.removeItem(key);\n },\n has(key) {\n return getGlobalStorage('sessionStorage')?.getItem(key) !== null;\n },\n keys() {\n return getStorageKeys(getGlobalStorage('sessionStorage'));\n },\n clear() {\n getGlobalStorage('sessionStorage')?.clear();\n },\n };\n}\n"],
5
+ "mappings": "AACA,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAExB,SAAS,+BAAgD;AAC9D,SAAO;AAAA,IACL,IAAI,cAAc;AAChB,aAAO,iBAAiB,gBAAgB;AAAA,IAC1C;AAAA,IACA,IAAI,KAAK;AACP,aAAO,iBAAiB,gBAAgB,GAAG,QAAQ,GAAG,KAAK;AAAA,IAC7D;AAAA,IACA,IAAI,KAAK,OAAO;AACd,uBAAiB,gBAAgB,GAAG,QAAQ,KAAK,KAAK;AAAA,IACxD;AAAA,IACA,OAAO,KAAK;AACV,uBAAiB,gBAAgB,GAAG,WAAW,GAAG;AAAA,IACpD;AAAA,IACA,IAAI,KAAK;AACP,aAAO,iBAAiB,gBAAgB,GAAG,QAAQ,GAAG,MAAM;AAAA,IAC9D;AAAA,IACA,OAAO;AACL,aAAO,eAAe,iBAAiB,gBAAgB,CAAC;AAAA,IAC1D;AAAA,IACA,QAAQ;AACN,uBAAiB,gBAAgB,GAAG,MAAM;AAAA,IAC5C;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageInstance, StorageOptions } from './types.js';
2
+ export declare function createStorage<T extends Record<string, any> = Record<string, any>>(options?: StorageOptions): StorageInstance<T>;
@@ -0,0 +1,100 @@
1
+ import { hasWindow } from "../has.js";
2
+ import { localStorageProvider } from "./providers.js";
3
+ import { jsonSerializer } from "./serializers.js";
4
+ function createStorage(options = {}) {
5
+ const {
6
+ provider = localStorageProvider,
7
+ serializer = jsonSerializer,
8
+ prefix = ""
9
+ } = options;
10
+ const listeners = /* @__PURE__ */ new Map();
11
+ function resolveKey(key) {
12
+ return `${prefix}${key}`;
13
+ }
14
+ function syncHandler(event) {
15
+ if (event instanceof StorageEvent) {
16
+ if (provider.storageArea && event.storageArea !== provider.storageArea) {
17
+ return;
18
+ }
19
+ const rawKey = event.key;
20
+ for (const [listenerKey, callbacks] of listeners) {
21
+ if (resolveKey(listenerKey) === rawKey) {
22
+ const newValue = event.newValue ? serializer.deserialize(event.newValue) : void 0;
23
+ callbacks.forEach((callback) => callback(newValue));
24
+ break;
25
+ }
26
+ }
27
+ return;
28
+ }
29
+ listeners.forEach((callbacks, key) => {
30
+ const value = provider.get(resolveKey(key));
31
+ const newValue = value !== null ? serializer.deserialize(value) : void 0;
32
+ callbacks.forEach((callback) => callback(newValue));
33
+ });
34
+ }
35
+ if (hasWindow() && provider.syncEvent) {
36
+ window.addEventListener(provider.syncEvent, syncHandler);
37
+ }
38
+ return {
39
+ get(key, defaultValue) {
40
+ const storedValue = provider.get(resolveKey(key));
41
+ if (storedValue !== null) {
42
+ const deserialized = serializer.deserialize(storedValue);
43
+ if (deserialized !== void 0) {
44
+ return deserialized;
45
+ }
46
+ }
47
+ return defaultValue;
48
+ },
49
+ set(key, value) {
50
+ provider.set(resolveKey(key), serializer.serialize(value));
51
+ listeners.get(key)?.forEach((callback) => callback(value));
52
+ },
53
+ delete(key) {
54
+ provider.remove(resolveKey(key));
55
+ listeners.get(key)?.forEach((callback) => callback(void 0));
56
+ },
57
+ has(key) {
58
+ return provider.has(resolveKey(key));
59
+ },
60
+ keys() {
61
+ const allKeys = provider.keys();
62
+ if (!prefix) {
63
+ return allKeys;
64
+ }
65
+ return allKeys.filter((key) => key.startsWith(prefix)).map((key) => key.slice(prefix.length));
66
+ },
67
+ clear() {
68
+ if (prefix) {
69
+ provider.keys().filter((key) => key.startsWith(prefix)).forEach((key) => provider.remove(key));
70
+ } else {
71
+ provider.clear();
72
+ }
73
+ listeners.forEach((callbacks) => {
74
+ callbacks.forEach((callback) => callback(void 0));
75
+ });
76
+ },
77
+ subscribe(key, callback) {
78
+ if (!listeners.has(key)) {
79
+ listeners.set(key, /* @__PURE__ */ new Set());
80
+ }
81
+ listeners.get(key)?.add(callback);
82
+ return () => {
83
+ listeners.get(key)?.delete(callback);
84
+ if (listeners.get(key)?.size === 0) {
85
+ listeners.delete(key);
86
+ }
87
+ };
88
+ },
89
+ destroy() {
90
+ listeners.clear();
91
+ if (hasWindow() && provider.syncEvent) {
92
+ window.removeEventListener(provider.syncEvent, syncHandler);
93
+ }
94
+ }
95
+ };
96
+ }
97
+ export {
98
+ createStorage
99
+ };
100
+ //# 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 {\n provider = localStorageProvider,\n serializer = jsonSerializer,\n prefix = '',\n } = 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(\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 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,8BACd,UAA8B,CAAC,GACd;AACjB,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\n ? globalThis[name]\n : undefined;\n}\n"],
5
+ "mappings": "AAAO,SAAS,iBAAiB,MAA8D;AAC7F,SAAO,OAAO,eAAe,eAAe,QAAQ,aAChD,WAAW,IAAI,IACf;AACN;",
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>;