store.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. type Store = typeof localStorage | typeof sessionStorage
  2. type SetTransform<T> = (args: T) => string
  3. type GetTransform<T> = (args: null | string) => T
  4. export function get(store: Store, name: string): string | null
  5. export function get<T>(
  6. store: Store,
  7. name: string,
  8. transform: GetTransform<T>
  9. ): T
  10. export function get<T>(
  11. store: Store,
  12. name: string,
  13. transform?: GetTransform<T>
  14. ) {
  15. const value = store.getItem(name)
  16. if (transform) {
  17. return transform(value)
  18. } else {
  19. return value
  20. }
  21. }
  22. export function set(store: Store, name: string, value: string): string
  23. export function set<T>(
  24. store: Store,
  25. name: string,
  26. value: T,
  27. transform: SetTransform<T>
  28. ): string
  29. export function set<T>(
  30. store: Store,
  31. name: string,
  32. value: T,
  33. transform?: SetTransform<T>
  34. ) {
  35. store.setItem(name, transform ? transform(value) : (value as string))
  36. return value
  37. }
  38. export function getFactory(store: Store): (name: string) => string | null
  39. export function getFactory<T>(
  40. store: Store,
  41. transform: GetTransform<T>
  42. ): (name: string | null) => T
  43. export function getFactory<T>(store: Store, transform?: GetTransform<T>) {
  44. return (name: string | null) =>
  45. transform ? get(store, name!, transform) : get(store, name!)
  46. }
  47. export function setFactory(
  48. store: Store
  49. ): (name: string, value: string) => string
  50. export function setFactory<T>(
  51. store: Store,
  52. transform: SetTransform<T>
  53. ): (name: string, value: T) => string
  54. export function setFactory<T>(store: Store, transform?: SetTransform<T>) {
  55. return (name: string, value: T) =>
  56. transform
  57. ? set(store, name, transform(value))
  58. : set(store, name, value as string)
  59. }
  60. export function localGetFactory(): (name: string) => string | null
  61. export function localGetFactory<T>(
  62. transform: GetTransform<T>
  63. ): (name: string | null) => T
  64. export function localGetFactory<T>(transform?: GetTransform<T>) {
  65. return getFactory(localStorage, transform!)
  66. }
  67. export function localSetFactory(): (name: string, value: string) => string
  68. export function localSetFactory<T>(
  69. transform: SetTransform<T>
  70. ): (name: string, value: T) => string
  71. export function localSetFactory<T>(transform?: SetTransform<T>) {
  72. return setFactory(localStorage, transform!)
  73. }
  74. export function localDel(key: string) {
  75. localStorage.removeItem(key)
  76. }
  77. export const local = {
  78. get: localGetFactory(),
  79. set: localSetFactory(),
  80. del: localDel
  81. }