@livestore/utils 0.0.47 → 0.0.48-dev.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 (46) hide show
  1. package/dist/.tsbuildinfo.json +1 -1
  2. package/dist/effect/Effect.d.ts.map +1 -1
  3. package/dist/effect/Effect.js +1 -1
  4. package/dist/effect/Schema.d.ts +4 -0
  5. package/dist/effect/Schema.d.ts.map +1 -0
  6. package/dist/effect/Schema.js +15 -0
  7. package/dist/effect/Schema.js.map +1 -0
  8. package/dist/effect/ServiceContext.d.ts.map +1 -1
  9. package/dist/effect/ServiceContext.js +1 -1
  10. package/dist/effect/Stream.d.ts +1 -0
  11. package/dist/effect/Stream.d.ts.map +1 -1
  12. package/dist/effect/Stream.js +1 -0
  13. package/dist/effect/Stream.js.map +1 -1
  14. package/dist/effect/SubscriptionRef.d.ts +4 -0
  15. package/dist/effect/SubscriptionRef.d.ts.map +1 -0
  16. package/dist/effect/SubscriptionRef.js +4 -0
  17. package/dist/effect/SubscriptionRef.js.map +1 -0
  18. package/dist/effect/WebLock.d.ts +1 -0
  19. package/dist/effect/WebLock.d.ts.map +1 -1
  20. package/dist/effect/WebLock.js +9 -1
  21. package/dist/effect/WebLock.js.map +1 -1
  22. package/dist/effect/effect-polyfill.d.ts +2 -0
  23. package/dist/effect/effect-polyfill.d.ts.map +1 -0
  24. package/dist/effect/effect-polyfill.js +8 -0
  25. package/dist/effect/effect-polyfill.js.map +1 -0
  26. package/dist/effect/index.d.ts +6 -3
  27. package/dist/effect/index.d.ts.map +1 -1
  28. package/dist/effect/index.js +7 -3
  29. package/dist/effect/index.js.map +1 -1
  30. package/dist/index.d.ts +3 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +19 -5
  33. package/dist/index.js.map +1 -1
  34. package/dist/object/index.d.ts.map +1 -1
  35. package/dist/promise.d.ts.map +1 -1
  36. package/package.json +12 -12
  37. package/src/ambient.d.ts +3 -0
  38. package/src/effect/Effect.ts +1 -1
  39. package/src/effect/Schema.ts +18 -0
  40. package/src/effect/ServiceContext.ts +1 -1
  41. package/src/effect/Stream.ts +5 -0
  42. package/src/effect/SubscriptionRef.ts +6 -0
  43. package/src/effect/WebLock.ts +13 -1
  44. package/src/effect/effect-polyfill.ts +7 -0
  45. package/src/effect/index.ts +11 -5
  46. package/src/index.ts +25 -5
package/src/index.ts CHANGED
@@ -30,6 +30,8 @@ export type Primitive = null | undefined | string | number | boolean | symbol |
30
30
 
31
31
  export type LiteralUnion<LiteralType, BaseType extends Primitive> = LiteralType | (BaseType & Record<never, never>)
32
32
 
33
+ export type GetValForKey<T, K> = K extends keyof T ? T[K] : never
34
+
33
35
  export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
34
36
 
35
37
  export const times = (n: number, fn: (index: number) => {}): void => {
@@ -100,14 +102,18 @@ export function casesHandled(unexpectedCase: never): never {
100
102
  }
101
103
 
102
104
  export const shouldNeverHappen = (msg?: string): never => {
103
- debugger
104
- throw new Error(`This should never happen ${msg}`)
105
+ if (import.meta.env.DEV) {
106
+ console.error(msg)
107
+ debugger
108
+ }
109
+
110
+ throw new Error(`This should never happen: ${msg}`)
105
111
  }
106
112
 
107
113
  export const assertNever = (failIfFalse: boolean, msg?: string): void => {
108
114
  if (failIfFalse === false) {
109
115
  debugger
110
- throw new Error(`This should never happen ${msg}`)
116
+ throw new Error(`This should never happen: ${msg}`)
111
117
  }
112
118
  }
113
119
 
@@ -126,7 +132,7 @@ const truncate = (str: string, length: number): string => {
126
132
 
127
133
  export const notYetImplemented = (msg?: string): never => {
128
134
  debugger
129
- throw new Error(`Not yet implemented ${msg}`)
135
+ throw new Error(`Not yet implemented: ${msg}`)
130
136
  }
131
137
 
132
138
  export const noop = () => {}
@@ -199,7 +205,7 @@ export const assertTag = <TObj extends { _tag: string }, TTag extends TObj['_tag
199
205
  return obj as any
200
206
  }
201
207
 
202
- export const memoize = <T extends (...args: any[]) => any>(fn: T): T => {
208
+ export const memoizeByStringifyArgs = <T extends (...args: any[]) => any>(fn: T): T => {
203
209
  const cache = new Map<string, ReturnType<T>>()
204
210
 
205
211
  return ((...args: any[]) => {
@@ -214,6 +220,20 @@ export const memoize = <T extends (...args: any[]) => any>(fn: T): T => {
214
220
  }) as any
215
221
  }
216
222
 
223
+ export const memoizeByRef = <T extends (arg: any) => any>(fn: T): T => {
224
+ const cache = new Map<Parameters<T>[0], ReturnType<T>>()
225
+
226
+ return ((arg: any) => {
227
+ if (cache.has(arg)) {
228
+ return cache.get(arg)
229
+ }
230
+
231
+ const result = fn(arg)
232
+ cache.set(arg, result)
233
+ return result
234
+ }) as any
235
+ }
236
+
217
237
  export const isNonEmptyString = (str: string | undefined | null) => str === undefined || str === null || str === ''
218
238
 
219
239
  export const isPromise = (value: any): value is Promise<unknown> => typeof value?.then === 'function'