@livestore/utils 0.0.46 → 0.0.47-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 +13 -2
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +9 -1
- package/dist/effect/Effect.js.map +1 -1
- package/dist/effect/Stream.d.ts +6 -0
- package/dist/effect/Stream.d.ts.map +1 -0
- package/dist/effect/Stream.js +5 -0
- package/dist/effect/Stream.js.map +1 -0
- package/dist/effect/WebLock.d.ts +4 -0
- package/dist/effect/WebLock.d.ts.map +1 -0
- package/dist/effect/WebLock.js +34 -0
- package/dist/effect/WebLock.js.map +1 -0
- package/dist/effect/index.d.ts +6 -2
- package/dist/effect/index.d.ts.map +1 -1
- package/dist/effect/index.js +6 -2
- package/dist/effect/index.js.map +1 -1
- package/package.json +10 -7
- package/src/effect/Effect.ts +45 -2
- package/src/effect/Stream.ts +17 -0
- package/src/effect/WebLock.ts +45 -0
- package/src/effect/index.ts +7 -2
package/dist/effect/Effect.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Context } from 'effect';
|
|
2
|
-
import { Effect } from 'effect';
|
|
1
|
+
import type { Context, Duration } from 'effect';
|
|
2
|
+
import { Deferred, Effect } from 'effect';
|
|
3
|
+
import type { LazyArg } from 'effect/Function';
|
|
3
4
|
export * from 'effect/Effect';
|
|
4
5
|
export declare const log: <A>(message: A, ...rest: any[]) => Effect.Effect<void>;
|
|
5
6
|
export declare const logWarn: <A>(message: A, ...rest: any[]) => Effect.Effect<void>;
|
|
@@ -8,4 +9,14 @@ export declare const logError: <A>(message: A, ...rest: any[]) => Effect.Effect<
|
|
|
8
9
|
export declare const tapCauseLogPretty: <R, E, A>(eff: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
9
10
|
export declare const tapSync: <A>(tapFn: (a: A) => unknown) => <R, E>(eff: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
10
11
|
export declare const debugLogEnv: (msg?: string) => Effect.Effect<Context.Context<never>>;
|
|
12
|
+
export declare const timeoutDie: <E1>(options: {
|
|
13
|
+
onTimeout: LazyArg<E1>;
|
|
14
|
+
duration: Duration.DurationInput;
|
|
15
|
+
}) => <R, E, A>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
16
|
+
export declare const timeoutDieMsg: (options: {
|
|
17
|
+
error: string;
|
|
18
|
+
duration: Duration.DurationInput;
|
|
19
|
+
}) => <R, E, A>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
20
|
+
export declare const toForkedDeferred: <R, E, A>(eff: Effect.Effect<A, E, R>) => Effect.Effect<Deferred.Deferred<A, E>, never, R>;
|
|
21
|
+
export declare const withPerformanceMeasure: (meaureLabel: string) => <R, E, A>(eff: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
11
22
|
//# sourceMappingURL=Effect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Effect.d.ts","sourceRoot":"","sources":["../../src/effect/Effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"Effect.d.ts","sourceRoot":"","sources":["../../src/effect/Effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAS,QAAQ,EAAE,MAAM,EAAQ,MAAM,QAAQ,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAK9C,cAAc,eAAe,CAAA;AAE7B,eAAO,MAAM,GAAG,eAAgB,CAAC,WAAW,GAAG,EAAE,KAAG,aAAa,CAAC,IAAI,CAGlE,CAAA;AAEJ,eAAO,MAAM,OAAO,eAAgB,CAAC,WAAW,GAAG,EAAE,KAAG,aAAa,CAAC,IAAI,CAGtE,CAAA;AAEJ,eAAO,MAAM,QAAQ,eAAgB,CAAC,WAAW,GAAG,EAAE,KAAG,aAAa,CAAC,IAAI,CAGvE,CAAA;AAEJ,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,iBAAkB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAU1F,CAAA;AAEJ,eAAO,MAAM,OAAO,iBACH,CAAC,KAAK,OAAO,iBAChB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACL,CAAA;AAEvD,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAI5E,CAAA;AAEH,eAAO,MAAM,UAAU,gBACP;IAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,SAAS,aAAa,CAAA;CAAE,qBAC1D,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACb,CAAA;AAEnD,eAAO,MAAM,aAAa,YACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,aAAa,CAAA;CAAE,qBAC7C,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAK3D,CAAA;AAEL,eAAO,MAAM,gBAAgB,iBACtB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC1B,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAU/C,CAAA;AAEH,eAAO,MAAM,sBAAsB,gBACnB,MAAM,oBACL,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAS1D,CAAA"}
|
package/dist/effect/Effect.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Cause, Effect, pipe } from 'effect';
|
|
1
|
+
import { Cause, Deferred, Effect, pipe } from 'effect';
|
|
2
2
|
import { isNonEmptyString } from '../index.js';
|
|
3
|
+
import { UnknownError } from './Error.js';
|
|
3
4
|
export * from 'effect/Effect';
|
|
4
5
|
export const log = (message, ...rest) => Effect.sync(() => {
|
|
5
6
|
console.log(message, ...rest);
|
|
@@ -20,4 +21,11 @@ export const tapCauseLogPretty = (eff) => Effect.tapErrorCause(eff, (err) => {
|
|
|
20
21
|
});
|
|
21
22
|
export const tapSync = (tapFn) => (eff) => Effect.tap(eff, (a) => Effect.sync(() => tapFn(a)));
|
|
22
23
|
export const debugLogEnv = (msg) => pipe(Effect.context(), Effect.tap((env) => log(msg ?? 'debugLogEnv', env)));
|
|
24
|
+
export const timeoutDie = (options) => (self) => Effect.orDie(Effect.timeoutFail(options)(self));
|
|
25
|
+
export const timeoutDieMsg = (options) => (self) => Effect.orDie(Effect.timeoutFail({ onTimeout: () => new UnknownError({ error: options.error }), duration: options.duration })(self));
|
|
26
|
+
export const toForkedDeferred = (eff) => pipe(Deferred.make(), Effect.tap((deferred) => pipe(Effect.exit(eff), Effect.flatMap((ex) => Deferred.done(deferred, ex)), Effect.forkDaemon)));
|
|
27
|
+
export const withPerformanceMeasure = (meaureLabel) => (eff) => Effect.acquireUseRelease(Effect.sync(() => performance.mark(`${meaureLabel}:start`)), () => eff, () => Effect.sync(() => {
|
|
28
|
+
performance.mark(`${meaureLabel}:end`);
|
|
29
|
+
performance.measure(meaureLabel, `${meaureLabel}:start`, `${meaureLabel}:end`);
|
|
30
|
+
}));
|
|
23
31
|
//# sourceMappingURL=Effect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Effect.js","sourceRoot":"","sources":["../../src/effect/Effect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"Effect.js","sourceRoot":"","sources":["../../src/effect/Effect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from 'effect/Stream';
|
|
2
|
+
import type { Chunk } from 'effect';
|
|
3
|
+
import { Effect, Stream } from 'effect';
|
|
4
|
+
export declare const tapLog: <R, E, A>(stream: Stream.Stream<A, E, R>) => Stream.Stream<A, E, R>;
|
|
5
|
+
export declare const tapChunk: <R1, E1, A, Z>(f: (a: Chunk.Chunk<A>) => Effect.Effect<Z, E1, R1>) => <R, E>(self: Stream.Stream<A, E, R>) => Stream.Stream<A, E1 | E, R1 | R>;
|
|
6
|
+
//# sourceMappingURL=Stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stream.d.ts","sourceRoot":"","sources":["../../src/effect/Stream.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAE7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,MAAM,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE7C,eAAO,MAAM,MAAM,oBAAqB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACU,CAAA;AAEhG,eAAO,MAAM,QAAQ,wBACG,WAAW,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,kBACpD,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAMlE,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from 'effect/Stream';
|
|
2
|
+
import { Effect, pipe, Stream } from 'effect';
|
|
3
|
+
export const tapLog = (stream) => tapChunk(Effect.forEach((_) => Effect.succeed(console.log(_))))(stream);
|
|
4
|
+
export const tapChunk = (f) => (self) => Stream.mapChunksEffect(self, (chunks) => pipe(f(chunks), Effect.map(() => chunks)));
|
|
5
|
+
//# sourceMappingURL=Stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stream.js","sourceRoot":"","sources":["../../src/effect/Stream.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAG7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE7C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAU,MAA8B,EAA0B,EAAE,CACxF,QAAQ,CAAwB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhG,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAe,CAAkD,EAAE,EAAE,CACrE,CAAO,IAA4B,EAAoC,EAAE,CACvE,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CACtC,IAAI,CACF,CAAC,CAAC,MAAM,CAAC,EACT,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CACzB,CACF,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Deferred, Effect } from 'effect';
|
|
2
|
+
export declare const withLock: (lockName: string, options?: Omit<LockOptions, 'signal'>) => <Ctx, E, A>(eff: Effect.Effect<A, E, Ctx>) => Effect.Effect<A | void, E, Ctx>;
|
|
3
|
+
export declare const waitForDeferredLock: (deferred: Deferred.Deferred<void>, lockName: string) => Effect.Effect<void, never, never>;
|
|
4
|
+
//# sourceMappingURL=WebLock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebLock.d.ts","sourceRoot":"","sources":["../../src/effect/WebLock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAW,MAAM,QAAQ,CAAA;AAGlD,eAAO,MAAM,QAAQ,aACR,MAAM,YAAY,KAAK,WAAW,EAAE,QAAQ,CAAC,sBACvC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAG,aAAa,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,CAyBtE,CAAA;AAEN,eAAO,MAAM,mBAAmB,aAAc,iBAAiB,CAAC,IAAI,CAAC,YAAY,MAAM,sCAWnF,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Deferred, Effect, Runtime } from 'effect';
|
|
2
|
+
// See https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API
|
|
3
|
+
export const withLock = (lockName, options) => (eff) => Effect.gen(function* ($) {
|
|
4
|
+
const runtime = yield* $(Effect.runtime());
|
|
5
|
+
const exit = yield* $(Effect.tryPromise({
|
|
6
|
+
try: (signal) => {
|
|
7
|
+
// NOTE The 'signal' and 'ifAvailable' options cannot be used together.
|
|
8
|
+
const requestOptions = options?.ifAvailable === true ? options : { ...options, signal };
|
|
9
|
+
return navigator.locks.request(lockName, requestOptions, async (lock) => {
|
|
10
|
+
if (lock === null)
|
|
11
|
+
return;
|
|
12
|
+
// TODO also propagate Effect interruption to the execution
|
|
13
|
+
return Runtime.runPromiseExit(runtime)(eff);
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
catch: (err) => err,
|
|
17
|
+
}));
|
|
18
|
+
if (exit._tag === 'Failure') {
|
|
19
|
+
return yield* $(Effect.failCause(exit.cause));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return exit.value;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
export const waitForDeferredLock = (deferred, lockName) => Effect.async((cb, signal) => {
|
|
26
|
+
navigator.locks.request(lockName, { signal, mode: 'exclusive', ifAvailable: false }, async (_lock) => {
|
|
27
|
+
// immediately continuing calling Effect since we have the lock
|
|
28
|
+
cb(Effect.unit);
|
|
29
|
+
// the code below is still running
|
|
30
|
+
// holding lock until deferred is resolved
|
|
31
|
+
await Effect.runPromise(Deferred.await(deferred));
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=WebLock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebLock.js","sourceRoot":"","sources":["../../src/effect/WebLock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAElD,qEAAqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAC,QAAgB,EAAE,OAAqC,EAAE,EAAE,CAC5D,CAAY,GAA6B,EAAmC,EAAE,CAC5E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAO,CAAC,CAAA;IAE/C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CACnB,MAAM,CAAC,UAAU,CAAqB;QACpC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;YACd,uEAAuE;YACvE,MAAM,cAAc,GAAG,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAA;YACvF,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtE,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAM;gBAEzB,2DAA2D;gBAC3D,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAA;YAC7C,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAe;KAChC,CAAC,CACH,CAAA;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;AACH,CAAC,CAAC,CAAA;AAEN,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAiC,EAAE,QAAgB,EAAE,EAAE,CACzF,MAAM,CAAC,KAAK,CAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;IAChC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACnG,+DAA+D;QAC/D,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEf,kCAAkC;QAElC,0CAA0C;QAC1C,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/effect/index.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import '../global.js';
|
|
2
|
-
export { Scope, Ref, SynchronizedRef, Queue, Fiber, FiberId, RuntimeFlags, PubSub, Exit, Cause, Runtime, Scheduler, FiberRef, FiberRefs, FiberRefsPatch, Deferred, Metric, MetricState, Request, Tracer, Context, Data, Either, Brand, Hash, Equal, Chunk, Duration, ReadonlyArray, ReadonlyRecord, SortedMap, HashMap, HashSet, MutableHashSet, Option, Layer,
|
|
3
|
-
export
|
|
2
|
+
export { Scope, Ref, SynchronizedRef, Queue, Fiber, FiberId, RuntimeFlags, PubSub, Exit, Cause, Runtime, Scheduler, FiberRef, FiberRefs, FiberRefsPatch, Deferred, Metric, MetricState, Request, Tracer, Context, Data, Either, Brand, Hash, Equal, Chunk, Duration, ReadonlyArray, ReadonlyRecord, SortedMap, HashMap, HashSet, MutableHashSet, Option, Layer, Channel, SubscriptionRef, pipe, identity, Match, } from 'effect';
|
|
3
|
+
export * as Stream from './Stream.js';
|
|
4
|
+
export { Schema, TreeFormatter, AST as SchemaAST, Pretty as SchemaPretty, Serializable } from '@effect/schema';
|
|
4
5
|
export * as OtelTracer from '@effect/opentelemetry/Tracer';
|
|
6
|
+
export { Transferable, FileSystem, Worker, WorkerError, WorkerRunner, Terminal } from '@effect/platform';
|
|
7
|
+
export { BrowserWorker, BrowserWorkerRunner } from '@effect/platform-browser';
|
|
5
8
|
export * as Effect from './Effect.js';
|
|
6
9
|
export * as Schedule from './Schedule.js';
|
|
7
10
|
export * from './Error.js';
|
|
8
11
|
export * as ServiceContext from './ServiceContext.js';
|
|
12
|
+
export * as WebLock from './WebLock.js';
|
|
9
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,EACL,GAAG,EACH,eAAe,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,SAAS,EACT,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,KAAK,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,EACL,GAAG,EACH,eAAe,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,SAAS,EACT,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,KAAK,EACL,OAAO,EACP,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,KAAK,GACN,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,SAAS,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC9G,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACxG,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
|
package/dist/effect/index.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import '../global.js';
|
|
2
|
-
export { Scope, Ref, SynchronizedRef, Queue, Fiber, FiberId, RuntimeFlags, PubSub, Exit, Cause, Runtime, Scheduler, FiberRef, FiberRefs, FiberRefsPatch, Deferred, Metric, MetricState, Request, Tracer, Context, Data, Either, Brand, Hash, Equal, Chunk, Duration, ReadonlyArray, ReadonlyRecord, SortedMap, HashMap, HashSet, MutableHashSet, Option, Layer,
|
|
3
|
-
export
|
|
2
|
+
export { Scope, Ref, SynchronizedRef, Queue, Fiber, FiberId, RuntimeFlags, PubSub, Exit, Cause, Runtime, Scheduler, FiberRef, FiberRefs, FiberRefsPatch, Deferred, Metric, MetricState, Request, Tracer, Context, Data, Either, Brand, Hash, Equal, Chunk, Duration, ReadonlyArray, ReadonlyRecord, SortedMap, HashMap, HashSet, MutableHashSet, Option, Layer, Channel, SubscriptionRef, pipe, identity, Match, } from 'effect';
|
|
3
|
+
export * as Stream from './Stream.js';
|
|
4
|
+
export { Schema, TreeFormatter, AST as SchemaAST, Pretty as SchemaPretty, Serializable } from '@effect/schema';
|
|
4
5
|
export * as OtelTracer from '@effect/opentelemetry/Tracer';
|
|
6
|
+
export { Transferable, FileSystem, Worker, WorkerError, WorkerRunner, Terminal } from '@effect/platform';
|
|
7
|
+
export { BrowserWorker, BrowserWorkerRunner } from '@effect/platform-browser';
|
|
5
8
|
export * as Effect from './Effect.js';
|
|
6
9
|
export * as Schedule from './Schedule.js';
|
|
7
10
|
export * from './Error.js';
|
|
8
11
|
export * as ServiceContext from './ServiceContext.js';
|
|
12
|
+
export * as WebLock from './WebLock.js';
|
|
9
13
|
//# sourceMappingURL=index.js.map
|
package/dist/effect/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,EACL,GAAG,EACH,eAAe,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,SAAS,EACT,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,KAAK,EACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,EACL,GAAG,EACH,eAAe,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,SAAS,EACT,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,KAAK,EACL,OAAO,EACP,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,KAAK,GACN,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,SAAS,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC9G,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACxG,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/utils",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.47-dev.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -32,17 +32,20 @@
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@effect/
|
|
36
|
-
"@effect/
|
|
35
|
+
"@effect/experimental": "^0.14.0",
|
|
36
|
+
"@effect/platform": "0.48.15",
|
|
37
|
+
"@effect/platform-browser": "0.31.15",
|
|
38
|
+
"@effect/opentelemetry": "^0.31.21",
|
|
39
|
+
"@effect/schema": "0.64.11",
|
|
37
40
|
"@opentelemetry/api": "^1.8.0",
|
|
38
|
-
"date-fns": "^3.
|
|
39
|
-
"effect": "2.4.
|
|
41
|
+
"date-fns": "^3.6.0",
|
|
42
|
+
"effect": "2.4.11",
|
|
40
43
|
"otel-websocket-exporter": "^0.0.27",
|
|
41
44
|
"pretty-bytes": "^6.1.1",
|
|
42
|
-
"effect-db-schema": "0.0.
|
|
45
|
+
"effect-db-schema": "0.0.47-dev.0"
|
|
43
46
|
},
|
|
44
47
|
"devDependencies": {
|
|
45
|
-
"@types/node": "^20.11.
|
|
48
|
+
"@types/node": "^20.11.30",
|
|
46
49
|
"@types/web": "^0.0.142"
|
|
47
50
|
},
|
|
48
51
|
"publishConfig": {
|
package/src/effect/Effect.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { Context } from 'effect'
|
|
2
|
-
import { Cause, Effect, pipe } from 'effect'
|
|
1
|
+
import type { Context, Duration } from 'effect'
|
|
2
|
+
import { Cause, Deferred, Effect, pipe } from 'effect'
|
|
3
|
+
import type { LazyArg } from 'effect/Function'
|
|
3
4
|
|
|
4
5
|
import { isNonEmptyString } from '../index.js'
|
|
6
|
+
import { UnknownError } from './Error.js'
|
|
5
7
|
|
|
6
8
|
export * from 'effect/Effect'
|
|
7
9
|
|
|
@@ -43,3 +45,44 @@ export const debugLogEnv = (msg?: string): Effect.Effect<Context.Context<never>>
|
|
|
43
45
|
Effect.context<never>(),
|
|
44
46
|
Effect.tap((env) => log(msg ?? 'debugLogEnv', env)),
|
|
45
47
|
)
|
|
48
|
+
|
|
49
|
+
export const timeoutDie =
|
|
50
|
+
<E1>(options: { onTimeout: LazyArg<E1>; duration: Duration.DurationInput }) =>
|
|
51
|
+
<R, E, A>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
52
|
+
Effect.orDie(Effect.timeoutFail(options)(self))
|
|
53
|
+
|
|
54
|
+
export const timeoutDieMsg =
|
|
55
|
+
(options: { error: string; duration: Duration.DurationInput }) =>
|
|
56
|
+
<R, E, A>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
57
|
+
Effect.orDie(
|
|
58
|
+
Effect.timeoutFail({ onTimeout: () => new UnknownError({ error: options.error }), duration: options.duration })(
|
|
59
|
+
self,
|
|
60
|
+
),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
export const toForkedDeferred = <R, E, A>(
|
|
64
|
+
eff: Effect.Effect<A, E, R>,
|
|
65
|
+
): Effect.Effect<Deferred.Deferred<A, E>, never, R> =>
|
|
66
|
+
pipe(
|
|
67
|
+
Deferred.make<A, E>(),
|
|
68
|
+
Effect.tap((deferred) =>
|
|
69
|
+
pipe(
|
|
70
|
+
Effect.exit(eff),
|
|
71
|
+
Effect.flatMap((ex) => Deferred.done(deferred, ex)),
|
|
72
|
+
Effect.forkDaemon,
|
|
73
|
+
),
|
|
74
|
+
),
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
export const withPerformanceMeasure =
|
|
78
|
+
(meaureLabel: string) =>
|
|
79
|
+
<R, E, A>(eff: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
80
|
+
Effect.acquireUseRelease(
|
|
81
|
+
Effect.sync(() => performance.mark(`${meaureLabel}:start`)),
|
|
82
|
+
() => eff,
|
|
83
|
+
() =>
|
|
84
|
+
Effect.sync(() => {
|
|
85
|
+
performance.mark(`${meaureLabel}:end`)
|
|
86
|
+
performance.measure(meaureLabel, `${meaureLabel}:start`, `${meaureLabel}:end`)
|
|
87
|
+
}),
|
|
88
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from 'effect/Stream'
|
|
2
|
+
|
|
3
|
+
import type { Chunk } from 'effect'
|
|
4
|
+
import { Effect, pipe, Stream } from 'effect'
|
|
5
|
+
|
|
6
|
+
export const tapLog = <R, E, A>(stream: Stream.Stream<A, E, R>): Stream.Stream<A, E, R> =>
|
|
7
|
+
tapChunk<never, never, A, void>(Effect.forEach((_) => Effect.succeed(console.log(_))))(stream)
|
|
8
|
+
|
|
9
|
+
export const tapChunk =
|
|
10
|
+
<R1, E1, A, Z>(f: (a: Chunk.Chunk<A>) => Effect.Effect<Z, E1, R1>) =>
|
|
11
|
+
<R, E>(self: Stream.Stream<A, E, R>): Stream.Stream<A, E1 | E, R1 | R> =>
|
|
12
|
+
Stream.mapChunksEffect(self, (chunks) =>
|
|
13
|
+
pipe(
|
|
14
|
+
f(chunks),
|
|
15
|
+
Effect.map(() => chunks),
|
|
16
|
+
),
|
|
17
|
+
)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Exit } from 'effect'
|
|
2
|
+
import { Deferred, Effect, Runtime } from 'effect'
|
|
3
|
+
|
|
4
|
+
// See https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API
|
|
5
|
+
export const withLock =
|
|
6
|
+
(lockName: string, options?: Omit<LockOptions, 'signal'>) =>
|
|
7
|
+
<Ctx, E, A>(eff: Effect.Effect<A, E, Ctx>): Effect.Effect<A | void, E, Ctx> =>
|
|
8
|
+
Effect.gen(function* ($) {
|
|
9
|
+
const runtime = yield* $(Effect.runtime<Ctx>())
|
|
10
|
+
|
|
11
|
+
const exit = yield* $(
|
|
12
|
+
Effect.tryPromise<Exit.Exit<A, E>, E>({
|
|
13
|
+
try: (signal) => {
|
|
14
|
+
// NOTE The 'signal' and 'ifAvailable' options cannot be used together.
|
|
15
|
+
const requestOptions = options?.ifAvailable === true ? options : { ...options, signal }
|
|
16
|
+
return navigator.locks.request(lockName, requestOptions, async (lock) => {
|
|
17
|
+
if (lock === null) return
|
|
18
|
+
|
|
19
|
+
// TODO also propagate Effect interruption to the execution
|
|
20
|
+
return Runtime.runPromiseExit(runtime)(eff)
|
|
21
|
+
})
|
|
22
|
+
},
|
|
23
|
+
catch: (err) => err as any as E,
|
|
24
|
+
}),
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
if (exit._tag === 'Failure') {
|
|
28
|
+
return yield* $(Effect.failCause(exit.cause))
|
|
29
|
+
} else {
|
|
30
|
+
return exit.value
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
export const waitForDeferredLock = (deferred: Deferred.Deferred<void>, lockName: string) =>
|
|
35
|
+
Effect.async<void>((cb, signal) => {
|
|
36
|
+
navigator.locks.request(lockName, { signal, mode: 'exclusive', ifAvailable: false }, async (_lock) => {
|
|
37
|
+
// immediately continuing calling Effect since we have the lock
|
|
38
|
+
cb(Effect.unit)
|
|
39
|
+
|
|
40
|
+
// the code below is still running
|
|
41
|
+
|
|
42
|
+
// holding lock until deferred is resolved
|
|
43
|
+
await Effect.runPromise(Deferred.await(deferred))
|
|
44
|
+
})
|
|
45
|
+
})
|
package/src/effect/index.ts
CHANGED
|
@@ -37,7 +37,6 @@ export {
|
|
|
37
37
|
MutableHashSet,
|
|
38
38
|
Option,
|
|
39
39
|
Layer,
|
|
40
|
-
Stream,
|
|
41
40
|
Channel,
|
|
42
41
|
SubscriptionRef,
|
|
43
42
|
pipe,
|
|
@@ -45,10 +44,16 @@ export {
|
|
|
45
44
|
Match,
|
|
46
45
|
} from 'effect'
|
|
47
46
|
|
|
48
|
-
export
|
|
47
|
+
export * as Stream from './Stream.js'
|
|
48
|
+
|
|
49
|
+
export { Schema, TreeFormatter, AST as SchemaAST, Pretty as SchemaPretty, Serializable } from '@effect/schema'
|
|
49
50
|
export * as OtelTracer from '@effect/opentelemetry/Tracer'
|
|
50
51
|
|
|
52
|
+
export { Transferable, FileSystem, Worker, WorkerError, WorkerRunner, Terminal } from '@effect/platform'
|
|
53
|
+
export { BrowserWorker, BrowserWorkerRunner } from '@effect/platform-browser'
|
|
54
|
+
|
|
51
55
|
export * as Effect from './Effect.js'
|
|
52
56
|
export * as Schedule from './Schedule.js'
|
|
53
57
|
export * from './Error.js'
|
|
54
58
|
export * as ServiceContext from './ServiceContext.js'
|
|
59
|
+
export * as WebLock from './WebLock.js'
|