@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.
Files changed (65) hide show
  1. package/Atom/package.json +6 -0
  2. package/AtomRef/package.json +6 -0
  3. package/Hydration/package.json +6 -0
  4. package/LICENSE +21 -0
  5. package/README.md +3 -0
  6. package/Registry/package.json +6 -0
  7. package/Result/package.json +6 -0
  8. package/dist/cjs/Atom.js +1079 -0
  9. package/dist/cjs/Atom.js.map +1 -0
  10. package/dist/cjs/AtomRef.js +261 -0
  11. package/dist/cjs/AtomRef.js.map +1 -0
  12. package/dist/cjs/Hydration.js +100 -0
  13. package/dist/cjs/Hydration.js.map +1 -0
  14. package/dist/cjs/Registry.js +128 -0
  15. package/dist/cjs/Registry.js.map +1 -0
  16. package/dist/cjs/Result.js +454 -0
  17. package/dist/cjs/Result.js.map +1 -0
  18. package/dist/cjs/index.js +37 -0
  19. package/dist/cjs/index.js.map +1 -0
  20. package/dist/cjs/internal/registry.js +701 -0
  21. package/dist/cjs/internal/registry.js.map +1 -0
  22. package/dist/cjs/internal/runtime.js +92 -0
  23. package/dist/cjs/internal/runtime.js.map +1 -0
  24. package/dist/dts/Atom.d.ts +597 -0
  25. package/dist/dts/Atom.d.ts.map +1 -0
  26. package/dist/dts/AtomRef.d.ts +55 -0
  27. package/dist/dts/AtomRef.d.ts.map +1 -0
  28. package/dist/dts/Hydration.d.ts +27 -0
  29. package/dist/dts/Hydration.d.ts.map +1 -0
  30. package/dist/dts/Registry.d.ts +115 -0
  31. package/dist/dts/Registry.d.ts.map +1 -0
  32. package/dist/dts/Result.d.ts +351 -0
  33. package/dist/dts/Result.d.ts.map +1 -0
  34. package/dist/dts/index.d.ts +21 -0
  35. package/dist/dts/index.d.ts.map +1 -0
  36. package/dist/dts/internal/registry.d.ts +2 -0
  37. package/dist/dts/internal/registry.d.ts.map +1 -0
  38. package/dist/dts/internal/runtime.d.ts +2 -0
  39. package/dist/dts/internal/runtime.d.ts.map +1 -0
  40. package/dist/esm/Atom.js +1029 -0
  41. package/dist/esm/Atom.js.map +1 -0
  42. package/dist/esm/AtomRef.js +232 -0
  43. package/dist/esm/AtomRef.js.map +1 -0
  44. package/dist/esm/Hydration.js +71 -0
  45. package/dist/esm/Hydration.js.map +1 -0
  46. package/dist/esm/Registry.js +98 -0
  47. package/dist/esm/Registry.js.map +1 -0
  48. package/dist/esm/Result.js +403 -0
  49. package/dist/esm/Result.js.map +1 -0
  50. package/dist/esm/index.js +21 -0
  51. package/dist/esm/index.js.map +1 -0
  52. package/dist/esm/internal/registry.js +672 -0
  53. package/dist/esm/internal/registry.js.map +1 -0
  54. package/dist/esm/internal/runtime.js +64 -0
  55. package/dist/esm/internal/runtime.js.map +1 -0
  56. package/dist/esm/package.json +4 -0
  57. package/package.json +72 -0
  58. package/src/Atom.ts +1865 -0
  59. package/src/AtomRef.ts +282 -0
  60. package/src/Hydration.ts +98 -0
  61. package/src/Registry.ts +204 -0
  62. package/src/Result.ts +767 -0
  63. package/src/index.ts +24 -0
  64. package/src/internal/registry.ts +810 -0
  65. 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
+ }