@effect-atom/atom-react 0.4.5 → 0.4.6

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.
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/ScopedAtom.js",
3
+ "module": "../dist/esm/ScopedAtom.js",
4
+ "types": "../dist/dts/ScopedAtom.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * @since 1.0.0
5
+ */
6
+ "use client";
7
+
8
+ Object.defineProperty(exports, "__esModule", {
9
+ value: true
10
+ });
11
+ exports.make = exports.TypeId = void 0;
12
+ var React = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("react"));
13
+ function _interopRequireWildcard(e, t) {
14
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
15
+ n = new WeakMap();
16
+ return (_interopRequireWildcard = function (e, t) {
17
+ if (!t && e && e.__esModule) return e;
18
+ var o,
19
+ i,
20
+ f = {
21
+ __proto__: null,
22
+ default: e
23
+ };
24
+ if (null === e || "object" != typeof e && "function" != typeof e) return f;
25
+ if (o = t ? n : r) {
26
+ if (o.has(e)) return o.get(e);
27
+ o.set(e, f);
28
+ }
29
+ for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
30
+ return f;
31
+ })(e, t);
32
+ }
33
+ /**
34
+ * @since 1.0.0
35
+ * @category Type IDs
36
+ */
37
+ const TypeId = exports.TypeId = "~@effect-atom/atom-react/ScopedAtom";
38
+ /**
39
+ * @since 1.0.0
40
+ * @category constructors
41
+ */
42
+ const make = f => {
43
+ const Context = React.createContext(undefined);
44
+ const use = () => {
45
+ const atom = React.useContext(Context);
46
+ if (atom === undefined) {
47
+ throw new Error("ScopedAtom used outside of its Provider");
48
+ }
49
+ return atom;
50
+ };
51
+ const Provider = ({
52
+ children,
53
+ value
54
+ }) => {
55
+ const atom = React.useRef(null);
56
+ if (atom.current === null) {
57
+ atom.current = f(value);
58
+ }
59
+ return React.createElement(Context.Provider, {
60
+ value: atom.current
61
+ }, children);
62
+ };
63
+ return {
64
+ [TypeId]: TypeId,
65
+ use,
66
+ Provider: Provider,
67
+ Context
68
+ };
69
+ };
70
+ exports.make = make;
71
+ //# sourceMappingURL=ScopedAtom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopedAtom.js","names":["Object","defineProperty","exports","value","make","TypeId","React","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","getOwnPropertyDescriptor","Context","createContext","undefined","use","atom","useContext","Error","Provider","children","useRef","current","createElement"],"sources":["../../src/ScopedAtom.ts"],"sourcesContent":[null],"mappings":";;AAAA;;;AAGA,YAAY;;AAAAA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,IAAA,GAAAF,OAAA,CAAAG,MAAA;AAEZ,IAAAC,KAAA,gBAAAC,uBAAA,cAAAC,OAAA;AAA8B,SAAAD,wBAAAE,CAAA,EAAAC,CAAA;EAAA,yBAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA;IAAA,KAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA;IAAA,IAAAM,CAAA;MAAAC,CAAA;MAAAC,CAAA;QAAAC,SAAA;QAAAC,OAAA,EAAAV;MAAA;IAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA;IAAA,IAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA;MAAA,IAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA;MAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA;IAAA;IAAA,WAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAf,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAyB,wBAAA,CAAAhB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA;IAAA,OAAAO,CAAA;EAAA,GAAAR,CAAA,EAAAC,CAAA;AAAA;AAQ9B;;;;AAIO,MAAML,MAAM,GAAAH,OAAA,CAAAG,MAAA,GAAW,qCAAqC;AAcnE;;;;AAIO,MAAMD,IAAI,GACfa,CAAoC,IACZ;EACxB,MAAMS,OAAO,GAAGpB,KAAK,CAACqB,aAAa,CAAIC,SAAyB,CAAC;EAEjE,MAAMC,GAAG,GAAGA,CAAA,KAAQ;IAClB,MAAMC,IAAI,GAAGxB,KAAK,CAACyB,UAAU,CAACL,OAAO,CAAC;IACtC,IAAII,IAAI,KAAKF,SAAS,EAAE;MACtB,MAAM,IAAII,KAAK,CAAC,yCAAyC,CAAC;IAC5D;IACA,OAAOF,IAAI;EACb,CAAC;EAED,MAAMG,QAAQ,GAAyFA,CAAC;IACtGC,QAAQ;IACR/B;EAAK,CACN,KAAI;IACH,MAAM2B,IAAI,GAAGxB,KAAK,CAAC6B,MAAM,CAAW,IAAI,CAAC;IACzC,IAAIL,IAAI,CAACM,OAAO,KAAK,IAAI,EAAE;MACzBN,IAAI,CAACM,OAAO,GAAGnB,CAAC,CAACd,KAAK,CAAC;IACzB;IACA,OAAOG,KAAK,CAAC+B,aAAa,CAACX,OAAO,CAACO,QAAQ,EAAE;MAAE9B,KAAK,EAAE2B,IAAI,CAACM;IAAO,CAAE,EAAEF,QAAQ,CAAC;EACjF,CAAC;EAED,OAAO;IACL,CAAC7B,MAAM,GAAGA,MAAM;IAChBwB,GAAG;IACHI,QAAQ,EAAEA,QAAe;IACzBP;GACD;AACH,CAAC;AAAAxB,OAAA,CAAAE,IAAA,GAAAA,IAAA","ignoreList":[]}
package/dist/cjs/index.js CHANGED
@@ -10,9 +10,10 @@ var _exportNames = {
10
10
  AtomRef: true,
11
11
  AtomHttpApi: true,
12
12
  AtomRpc: true,
13
- Hydration: true
13
+ Hydration: true,
14
+ ScopedAtom: true
14
15
  };
15
- exports.Result = exports.Registry = exports.Hydration = exports.AtomRpc = exports.AtomRef = exports.AtomHttpApi = exports.Atom = void 0;
16
+ exports.ScopedAtom = exports.Result = exports.Registry = exports.Hydration = exports.AtomRpc = exports.AtomRef = exports.AtomHttpApi = exports.Atom = void 0;
16
17
  var _Atom = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect-atom/atom/Atom"));
17
18
  exports.Atom = _Atom;
18
19
  var _Registry = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect-atom/atom/Registry"));
@@ -27,6 +28,8 @@ var _AtomRpc = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effec
27
28
  exports.AtomRpc = _AtomRpc;
28
29
  var _Hydration = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect-atom/atom/Hydration"));
29
30
  exports.Hydration = _Hydration;
31
+ var _ScopedAtom = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./ScopedAtom.js"));
32
+ exports.ScopedAtom = _ScopedAtom;
30
33
  var _Hooks = /*#__PURE__*/require("./Hooks.js");
31
34
  Object.keys(_Hooks).forEach(function (key) {
32
35
  if (key === "default" || key === "__esModule") return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_Hooks","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_RegistryContext","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,IAAAA,MAAA,gBAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAMA,IAAAS,gBAAA,gBAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,gBAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,gBAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,gBAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AAAoC,SAAAU,wBAAAC,CAAA,EAAAC,CAAA;EAAA,yBAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA;IAAA,KAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA;IAAA,IAAAM,CAAA;MAAAC,CAAA;MAAAC,CAAA;QAAAC,SAAA;QAAAC,OAAA,EAAAV;MAAA;IAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA;IAAA,IAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA;MAAA,IAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAT,GAAA,CAAAG,CAAA;MAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,EAAAQ,CAAA;IAAA;IAAA,WAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAV,cAAA,CAAAC,IAAA,CAAAQ,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAApB,MAAA,CAAAS,cAAA,KAAAT,MAAA,CAAA2B,wBAAA,CAAAb,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA;IAAA,OAAAO,CAAA;EAAA,GAAAR,CAAA,EAAAC,CAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_Hooks","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_RegistryContext","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,IAAAA,MAAA,gBAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAMA,IAAAS,gBAAA,gBAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,gBAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,gBAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,gBAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AAAoC,SAAAU,wBAAAC,CAAA,EAAAC,CAAA;EAAA,yBAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA;IAAA,KAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA;IAAA,IAAAM,CAAA;MAAAC,CAAA;MAAAC,CAAA;QAAAC,SAAA;QAAAC,OAAA,EAAAV;MAAA;IAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA;IAAA,IAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA;MAAA,IAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAT,GAAA,CAAAG,CAAA;MAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,EAAAQ,CAAA;IAAA;IAAA,WAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAV,cAAA,CAAAC,IAAA,CAAAQ,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAApB,MAAA,CAAAS,cAAA,KAAAT,MAAA,CAAA2B,wBAAA,CAAAb,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA;IAAA,OAAAO,CAAA;EAAA,GAAAR,CAAA,EAAAC,CAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ import type * as Atom from "@effect-atom/atom/Atom";
2
+ import * as React from "react";
3
+ /**
4
+ * @since 1.0.0
5
+ * @category Type IDs
6
+ */
7
+ export type TypeId = "~@effect-atom/atom-react/ScopedAtom";
8
+ /**
9
+ * @since 1.0.0
10
+ * @category Type IDs
11
+ */
12
+ export declare const TypeId: TypeId;
13
+ /**
14
+ * @since 1.0.0
15
+ * @category models
16
+ */
17
+ export interface ScopedAtom<A extends Atom.Atom<any>, Input = never> {
18
+ readonly [TypeId]: TypeId;
19
+ use(): A;
20
+ Provider: Input extends never ? React.FC<{
21
+ readonly children?: React.ReactNode | undefined;
22
+ }> : React.FC<{
23
+ readonly children?: React.ReactNode | undefined;
24
+ readonly value: Input;
25
+ }>;
26
+ Context: React.Context<A>;
27
+ }
28
+ /**
29
+ * @since 1.0.0
30
+ * @category constructors
31
+ */
32
+ export declare const make: <A extends Atom.Atom<any>, Input = never>(f: (() => A) | ((input: Input) => A)) => ScopedAtom<A, Input>;
33
+ //# sourceMappingURL=ScopedAtom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopedAtom.d.ts","sourceRoot":"","sources":["../../src/ScopedAtom.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,IAAI,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,qCAAqC,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAA8C,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK;IACjE,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,GAAG,IAAI,CAAC,CAAA;IACR,QAAQ,EAAE,KAAK,SAAS,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;KAAE,CAAC,GACzF,KAAK,CAAC,EAAE,CAAC;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAAA;IACxF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAC1D,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,KACnC,UAAU,CAAC,CAAC,EAAE,KAAK,CA4BrB,CAAA"}
@@ -36,6 +36,11 @@ export * as AtomRpc from "@effect-atom/atom/AtomRpc";
36
36
  * @category re-exports
37
37
  */
38
38
  export * as Hydration from "@effect-atom/atom/Hydration";
39
+ /**
40
+ * @since 1.0.0
41
+ * @category re-exports
42
+ */
43
+ export * as ScopedAtom from "./ScopedAtom.js";
39
44
  /**
40
45
  * @since 1.0.0
41
46
  * @category hooks
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAA;AAE9C;;;GAGG;AACH,OAAO,KAAK,QAAQ,MAAM,4BAA4B,CAAA;AAEtD;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAA;AAElD;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAA;AAEpD;;;GAGG;AACH,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAA;AAE5D;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAA;AAEpD;;;GAGG;AACH,OAAO,KAAK,SAAS,MAAM,6BAA6B,CAAA;AAExD;;;GAGG;AACH,cAAc,YAAY,CAAA;AAE1B;;;GAGG;AACH,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAA;AAE9C;;;GAGG;AACH,OAAO,KAAK,QAAQ,MAAM,4BAA4B,CAAA;AAEtD;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAA;AAElD;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAA;AAEpD;;;GAGG;AACH,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAA;AAE5D;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAA;AAEpD;;;GAGG;AACH,OAAO,KAAK,SAAS,MAAM,6BAA6B,CAAA;AAExD;;;GAGG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C;;;GAGG;AACH,cAAc,YAAY,CAAA;AAE1B;;;GAGG;AACH,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ "use client";
5
+
6
+ import * as React from "react";
7
+ /**
8
+ * @since 1.0.0
9
+ * @category Type IDs
10
+ */
11
+ export const TypeId = "~@effect-atom/atom-react/ScopedAtom";
12
+ /**
13
+ * @since 1.0.0
14
+ * @category constructors
15
+ */
16
+ export const make = f => {
17
+ const Context = React.createContext(undefined);
18
+ const use = () => {
19
+ const atom = React.useContext(Context);
20
+ if (atom === undefined) {
21
+ throw new Error("ScopedAtom used outside of its Provider");
22
+ }
23
+ return atom;
24
+ };
25
+ const Provider = ({
26
+ children,
27
+ value
28
+ }) => {
29
+ const atom = React.useRef(null);
30
+ if (atom.current === null) {
31
+ atom.current = f(value);
32
+ }
33
+ return React.createElement(Context.Provider, {
34
+ value: atom.current
35
+ }, children);
36
+ };
37
+ return {
38
+ [TypeId]: TypeId,
39
+ use,
40
+ Provider: Provider,
41
+ Context
42
+ };
43
+ };
44
+ //# sourceMappingURL=ScopedAtom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopedAtom.js","names":["React","TypeId","make","f","Context","createContext","undefined","use","atom","useContext","Error","Provider","children","value","useRef","current","createElement"],"sources":["../../src/ScopedAtom.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,YAAY;;AAEZ,OAAO,KAAKA,KAAK,MAAM,OAAO;AAQ9B;;;;AAIA,OAAO,MAAMC,MAAM,GAAW,qCAAqC;AAcnE;;;;AAIA,OAAO,MAAMC,IAAI,GACfC,CAAoC,IACZ;EACxB,MAAMC,OAAO,GAAGJ,KAAK,CAACK,aAAa,CAAIC,SAAyB,CAAC;EAEjE,MAAMC,GAAG,GAAGA,CAAA,KAAQ;IAClB,MAAMC,IAAI,GAAGR,KAAK,CAACS,UAAU,CAACL,OAAO,CAAC;IACtC,IAAII,IAAI,KAAKF,SAAS,EAAE;MACtB,MAAM,IAAII,KAAK,CAAC,yCAAyC,CAAC;IAC5D;IACA,OAAOF,IAAI;EACb,CAAC;EAED,MAAMG,QAAQ,GAAyFA,CAAC;IACtGC,QAAQ;IACRC;EAAK,CACN,KAAI;IACH,MAAML,IAAI,GAAGR,KAAK,CAACc,MAAM,CAAW,IAAI,CAAC;IACzC,IAAIN,IAAI,CAACO,OAAO,KAAK,IAAI,EAAE;MACzBP,IAAI,CAACO,OAAO,GAAGZ,CAAC,CAACU,KAAK,CAAC;IACzB;IACA,OAAOb,KAAK,CAACgB,aAAa,CAACZ,OAAO,CAACO,QAAQ,EAAE;MAAEE,KAAK,EAAEL,IAAI,CAACO;IAAO,CAAE,EAAEH,QAAQ,CAAC;EACjF,CAAC;EAED,OAAO;IACL,CAACX,MAAM,GAAGA,MAAM;IAChBM,GAAG;IACHI,QAAQ,EAAEA,QAAe;IACzBP;GACD;AACH,CAAC","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -36,6 +36,11 @@ export * as AtomRpc from "@effect-atom/atom/AtomRpc";
36
36
  * @category re-exports
37
37
  */
38
38
  export * as Hydration from "@effect-atom/atom/Hydration";
39
+ /**
40
+ * @since 1.0.0
41
+ * @category re-exports
42
+ */
43
+ export * as ScopedAtom from "./ScopedAtom.js";
39
44
  /**
40
45
  * @since 1.0.0
41
46
  * @category hooks
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Atom","Registry","Result","AtomRef","AtomHttpApi","AtomRpc","Hydration"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;;;;AAIA,OAAO,KAAKA,IAAI,MAAM,wBAAwB;AAE9C;;;;AAIA,OAAO,KAAKC,QAAQ,MAAM,4BAA4B;AAEtD;;;;AAIA,OAAO,KAAKC,MAAM,MAAM,0BAA0B;AAElD;;;;AAIA,OAAO,KAAKC,OAAO,MAAM,2BAA2B;AAEpD;;;;AAIA,OAAO,KAAKC,WAAW,MAAM,+BAA+B;AAE5D;;;;AAIA,OAAO,KAAKC,OAAO,MAAM,2BAA2B;AAEpD;;;;AAIA,OAAO,KAAKC,SAAS,MAAM,6BAA6B;AAExD;;;;AAIA,cAAc,YAAY;AAE1B;;;;AAIA,cAAc,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Atom","Registry","Result","AtomRef","AtomHttpApi","AtomRpc","Hydration","ScopedAtom"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;;;;AAIA,OAAO,KAAKA,IAAI,MAAM,wBAAwB;AAE9C;;;;AAIA,OAAO,KAAKC,QAAQ,MAAM,4BAA4B;AAEtD;;;;AAIA,OAAO,KAAKC,MAAM,MAAM,0BAA0B;AAElD;;;;AAIA,OAAO,KAAKC,OAAO,MAAM,2BAA2B;AAEpD;;;;AAIA,OAAO,KAAKC,WAAW,MAAM,+BAA+B;AAE5D;;;;AAIA,OAAO,KAAKC,OAAO,MAAM,2BAA2B;AAEpD;;;;AAIA,OAAO,KAAKC,SAAS,MAAM,6BAA6B;AAExD;;;;AAIA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;;AAIA,cAAc,YAAY;AAE1B;;;;AAIA,cAAc,sBAAsB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-atom/atom-react",
3
- "version": "0.4.5",
3
+ "version": "0.4.6",
4
4
  "description": "Reactive toolkit for Effect",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -11,7 +11,7 @@
11
11
  "author": "Effect contributors",
12
12
  "homepage": "https://github.com/tim-smart/effect-atom",
13
13
  "dependencies": {
14
- "@effect-atom/atom": "^0.4.12"
14
+ "@effect-atom/atom": "^0.4.13"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "effect": "^3.19",
@@ -42,6 +42,11 @@
42
42
  "types": "./dist/dts/RegistryContext.d.ts",
43
43
  "import": "./dist/esm/RegistryContext.js",
44
44
  "default": "./dist/cjs/RegistryContext.js"
45
+ },
46
+ "./ScopedAtom": {
47
+ "types": "./dist/dts/ScopedAtom.d.ts",
48
+ "import": "./dist/esm/ScopedAtom.js",
49
+ "default": "./dist/cjs/ScopedAtom.js"
45
50
  }
46
51
  },
47
52
  "typesVersions": {
@@ -54,6 +59,9 @@
54
59
  ],
55
60
  "RegistryContext": [
56
61
  "./dist/dts/RegistryContext.d.ts"
62
+ ],
63
+ "ScopedAtom": [
64
+ "./dist/dts/ScopedAtom.d.ts"
57
65
  ]
58
66
  }
59
67
  }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ "use client"
5
+ import type * as Atom from "@effect-atom/atom/Atom"
6
+ import * as React from "react"
7
+
8
+ /**
9
+ * @since 1.0.0
10
+ * @category Type IDs
11
+ */
12
+ export type TypeId = "~@effect-atom/atom-react/ScopedAtom"
13
+
14
+ /**
15
+ * @since 1.0.0
16
+ * @category Type IDs
17
+ */
18
+ export const TypeId: TypeId = "~@effect-atom/atom-react/ScopedAtom"
19
+
20
+ /**
21
+ * @since 1.0.0
22
+ * @category models
23
+ */
24
+ export interface ScopedAtom<A extends Atom.Atom<any>, Input = never> {
25
+ readonly [TypeId]: TypeId
26
+ use(): A
27
+ Provider: Input extends never ? React.FC<{ readonly children?: React.ReactNode | undefined }>
28
+ : React.FC<{ readonly children?: React.ReactNode | undefined; readonly value: Input }>
29
+ Context: React.Context<A>
30
+ }
31
+
32
+ /**
33
+ * @since 1.0.0
34
+ * @category constructors
35
+ */
36
+ export const make = <A extends Atom.Atom<any>, Input = never>(
37
+ f: (() => A) | ((input: Input) => A)
38
+ ): ScopedAtom<A, Input> => {
39
+ const Context = React.createContext<A>(undefined as unknown as A)
40
+
41
+ const use = (): A => {
42
+ const atom = React.useContext(Context)
43
+ if (atom === undefined) {
44
+ throw new Error("ScopedAtom used outside of its Provider")
45
+ }
46
+ return atom
47
+ }
48
+
49
+ const Provider: React.FC<{ readonly children?: React.ReactNode | undefined; readonly value: Input }> = ({
50
+ children,
51
+ value
52
+ }) => {
53
+ const atom = React.useRef<A | null>(null)
54
+ if (atom.current === null) {
55
+ atom.current = f(value)
56
+ }
57
+ return React.createElement(Context.Provider, { value: atom.current }, children)
58
+ }
59
+
60
+ return {
61
+ [TypeId]: TypeId,
62
+ use,
63
+ Provider: Provider as any,
64
+ Context
65
+ }
66
+ }
package/src/index.ts CHANGED
@@ -44,6 +44,12 @@ export * as AtomRpc from "@effect-atom/atom/AtomRpc"
44
44
  */
45
45
  export * as Hydration from "@effect-atom/atom/Hydration"
46
46
 
47
+ /**
48
+ * @since 1.0.0
49
+ * @category re-exports
50
+ */
51
+ export * as ScopedAtom from "./ScopedAtom.js"
52
+
47
53
  /**
48
54
  * @since 1.0.0
49
55
  * @category hooks