@effect-atom/atom 0.1.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/Atom/package.json +6 -0
- package/AtomRef/package.json +6 -0
- package/Hydration/package.json +6 -0
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/Registry/package.json +6 -0
- package/Result/package.json +6 -0
- package/dist/cjs/Atom.js +1079 -0
- package/dist/cjs/Atom.js.map +1 -0
- package/dist/cjs/AtomRef.js +261 -0
- package/dist/cjs/AtomRef.js.map +1 -0
- package/dist/cjs/Hydration.js +100 -0
- package/dist/cjs/Hydration.js.map +1 -0
- package/dist/cjs/Registry.js +128 -0
- package/dist/cjs/Registry.js.map +1 -0
- package/dist/cjs/Result.js +454 -0
- package/dist/cjs/Result.js.map +1 -0
- package/dist/cjs/index.js +37 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/registry.js +701 -0
- package/dist/cjs/internal/registry.js.map +1 -0
- package/dist/cjs/internal/runtime.js +92 -0
- package/dist/cjs/internal/runtime.js.map +1 -0
- package/dist/dts/Atom.d.ts +597 -0
- package/dist/dts/Atom.d.ts.map +1 -0
- package/dist/dts/AtomRef.d.ts +55 -0
- package/dist/dts/AtomRef.d.ts.map +1 -0
- package/dist/dts/Hydration.d.ts +27 -0
- package/dist/dts/Hydration.d.ts.map +1 -0
- package/dist/dts/Registry.d.ts +115 -0
- package/dist/dts/Registry.d.ts.map +1 -0
- package/dist/dts/Result.d.ts +351 -0
- package/dist/dts/Result.d.ts.map +1 -0
- package/dist/dts/index.d.ts +21 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/internal/registry.d.ts +2 -0
- package/dist/dts/internal/registry.d.ts.map +1 -0
- package/dist/dts/internal/runtime.d.ts +2 -0
- package/dist/dts/internal/runtime.d.ts.map +1 -0
- package/dist/esm/Atom.js +1029 -0
- package/dist/esm/Atom.js.map +1 -0
- package/dist/esm/AtomRef.js +232 -0
- package/dist/esm/AtomRef.js.map +1 -0
- package/dist/esm/Hydration.js +71 -0
- package/dist/esm/Hydration.js.map +1 -0
- package/dist/esm/Registry.js +98 -0
- package/dist/esm/Registry.js.map +1 -0
- package/dist/esm/Result.js +403 -0
- package/dist/esm/Result.js.map +1 -0
- package/dist/esm/index.js +21 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/registry.js +672 -0
- package/dist/esm/internal/registry.js.map +1 -0
- package/dist/esm/internal/runtime.js +64 -0
- package/dist/esm/internal/runtime.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/package.json +72 -0
- package/src/Atom.ts +1865 -0
- package/src/AtomRef.ts +282 -0
- package/src/Hydration.ts +98 -0
- package/src/Registry.ts +204 -0
- package/src/Result.ts +767 -0
- package/src/index.ts +24 -0
- package/src/internal/registry.ts +810 -0
- package/src/internal/runtime.ts +63 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import { NoSuchElementException } from "effect/Cause"
|
|
5
|
+
import type * as Effect from "effect/Effect"
|
|
6
|
+
import * as Exit from "effect/Exit"
|
|
7
|
+
import * as FiberId from "effect/FiberId"
|
|
8
|
+
import * as Runtime from "effect/Runtime"
|
|
9
|
+
import { SyncScheduler } from "effect/Scheduler"
|
|
10
|
+
|
|
11
|
+
const fastPath = <R, E, A>(effect: Effect.Effect<A, E, R>): Exit.Exit<A, E> | undefined => {
|
|
12
|
+
const op = effect as any
|
|
13
|
+
switch (op._tag) {
|
|
14
|
+
case "Failure":
|
|
15
|
+
case "Success": {
|
|
16
|
+
return op
|
|
17
|
+
}
|
|
18
|
+
case "Left": {
|
|
19
|
+
return Exit.fail(op.left)
|
|
20
|
+
}
|
|
21
|
+
case "Right": {
|
|
22
|
+
return Exit.succeed(op.right)
|
|
23
|
+
}
|
|
24
|
+
case "Some": {
|
|
25
|
+
return Exit.succeed(op.value)
|
|
26
|
+
}
|
|
27
|
+
case "None": {
|
|
28
|
+
// @ts-expect-error
|
|
29
|
+
return Exit.fail(new NoSuchElementException())
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** @internal */
|
|
35
|
+
export const runCallbackSync = <R, ER = never>(runtime: Runtime.Runtime<R>) => {
|
|
36
|
+
const runFork = Runtime.runFork(runtime)
|
|
37
|
+
return <A, E>(
|
|
38
|
+
effect: Effect.Effect<A, E, R>,
|
|
39
|
+
onExit: (exit: Exit.Exit<A, E | ER>) => void,
|
|
40
|
+
uninterruptible = false
|
|
41
|
+
): (() => void) | undefined => {
|
|
42
|
+
const op = fastPath(effect)
|
|
43
|
+
if (op) {
|
|
44
|
+
onExit(op)
|
|
45
|
+
return undefined
|
|
46
|
+
}
|
|
47
|
+
const scheduler = new SyncScheduler()
|
|
48
|
+
const fiberRuntime = runFork(effect, { scheduler })
|
|
49
|
+
scheduler.flush()
|
|
50
|
+
const result = fiberRuntime.unsafePoll()
|
|
51
|
+
if (result) {
|
|
52
|
+
onExit(result)
|
|
53
|
+
return undefined
|
|
54
|
+
}
|
|
55
|
+
fiberRuntime.addObserver(onExit)
|
|
56
|
+
return function() {
|
|
57
|
+
fiberRuntime.removeObserver(onExit)
|
|
58
|
+
if (!uninterruptible) {
|
|
59
|
+
fiberRuntime.unsafeInterruptAsFork(FiberId.none)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|