@livestore/utils 0.0.47-dev.0 → 0.0.48-dev.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.
- package/dist/.tsbuildinfo.json +1 -1
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +1 -1
- package/dist/effect/Schema.d.ts +4 -0
- package/dist/effect/Schema.d.ts.map +1 -0
- package/dist/effect/Schema.js +15 -0
- package/dist/effect/Schema.js.map +1 -0
- package/dist/effect/ServiceContext.d.ts.map +1 -1
- package/dist/effect/ServiceContext.js +1 -1
- package/dist/effect/Stream.d.ts +1 -0
- package/dist/effect/Stream.d.ts.map +1 -1
- package/dist/effect/Stream.js +1 -0
- package/dist/effect/Stream.js.map +1 -1
- package/dist/effect/SubscriptionRef.d.ts +4 -0
- package/dist/effect/SubscriptionRef.d.ts.map +1 -0
- package/dist/effect/SubscriptionRef.js +4 -0
- package/dist/effect/SubscriptionRef.js.map +1 -0
- package/dist/effect/WebLock.d.ts +1 -0
- package/dist/effect/WebLock.d.ts.map +1 -1
- package/dist/effect/WebLock.js +9 -1
- package/dist/effect/WebLock.js.map +1 -1
- package/dist/effect/effect-polyfill.d.ts +2 -0
- package/dist/effect/effect-polyfill.d.ts.map +1 -0
- package/dist/effect/effect-polyfill.js +4 -0
- package/dist/effect/effect-polyfill.js.map +1 -0
- package/dist/effect/index.d.ts +6 -3
- package/dist/effect/index.d.ts.map +1 -1
- package/dist/effect/index.js +7 -3
- package/dist/effect/index.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -5
- package/dist/index.js.map +1 -1
- package/dist/object/index.d.ts.map +1 -1
- package/dist/promise.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/ambient.d.ts +3 -0
- package/src/effect/Effect.ts +1 -1
- package/src/effect/Schema.ts +18 -0
- package/src/effect/ServiceContext.ts +1 -1
- package/src/effect/Stream.ts +5 -0
- package/src/effect/SubscriptionRef.ts +6 -0
- package/src/effect/WebLock.ts +13 -1
- package/src/effect/effect-polyfill.ts +2 -0
- package/src/effect/index.ts +11 -5
- 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
|
-
|
|
104
|
-
|
|
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
|
|
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'
|