@ensforge/react 0.1.0 → 0.2.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 (115) hide show
  1. package/README.md +17 -10
  2. package/dist/atoms/batch.d.ts +6 -6
  3. package/dist/atoms/batch.d.ts.map +1 -1
  4. package/dist/atoms/capabilities.d.ts +23 -23
  5. package/dist/atoms/capabilities.d.ts.map +1 -1
  6. package/dist/atoms/dns.d.ts +16 -14
  7. package/dist/atoms/dns.d.ts.map +1 -1
  8. package/dist/atoms/events.d.ts +42 -42
  9. package/dist/atoms/events.d.ts.map +1 -1
  10. package/dist/atoms/generic.d.ts +8 -5
  11. package/dist/atoms/generic.d.ts.map +1 -1
  12. package/dist/atoms/generic.js.map +1 -1
  13. package/dist/atoms/migration.d.ts +6 -6
  14. package/dist/atoms/migration.d.ts.map +1 -1
  15. package/dist/atoms/name.d.ts +24 -24
  16. package/dist/atoms/name.d.ts.map +1 -1
  17. package/dist/atoms/ownership.d.ts +2 -2
  18. package/dist/atoms/ownership.d.ts.map +1 -1
  19. package/dist/atoms/query.d.ts +6 -11
  20. package/dist/atoms/query.d.ts.map +1 -1
  21. package/dist/atoms/query.js +14 -11
  22. package/dist/atoms/query.js.map +1 -1
  23. package/dist/atoms/records.d.ts +13 -13
  24. package/dist/atoms/records.d.ts.map +1 -1
  25. package/dist/atoms/registration.d.ts +41 -11
  26. package/dist/atoms/registration.d.ts.map +1 -1
  27. package/dist/atoms/resolution.d.ts +10 -10
  28. package/dist/atoms/resolution.d.ts.map +1 -1
  29. package/dist/atoms/reverse.d.ts +2 -2
  30. package/dist/atoms/reverse.d.ts.map +1 -1
  31. package/dist/atoms/stream.d.ts +2 -2
  32. package/dist/atoms/stream.d.ts.map +1 -1
  33. package/dist/atoms/stream.js +6 -4
  34. package/dist/atoms/stream.js.map +1 -1
  35. package/dist/atoms/wrapping.d.ts +3 -3
  36. package/dist/atoms/wrapping.d.ts.map +1 -1
  37. package/dist/atoms.d.ts +3 -2
  38. package/dist/atoms.js +3 -2
  39. package/dist/cache/invalidation.d.ts +5 -5
  40. package/dist/cache/invalidation.d.ts.map +1 -1
  41. package/dist/cache/invalidation.js +3 -3
  42. package/dist/cache/invalidation.js.map +1 -1
  43. package/dist/cache/prefetch.d.ts +5 -4
  44. package/dist/cache/prefetch.d.ts.map +1 -1
  45. package/dist/cache/prefetch.js +3 -3
  46. package/dist/cache/prefetch.js.map +1 -1
  47. package/dist/cache/registry.d.ts +3 -3
  48. package/dist/cache/registry.d.ts.map +1 -1
  49. package/dist/cache/registry.js +2 -2
  50. package/dist/cache/registry.js.map +1 -1
  51. package/dist/cache.d.ts +4 -4
  52. package/dist/cache.js +4 -4
  53. package/dist/hooks/batch.d.ts +13 -13
  54. package/dist/hooks/batch.d.ts.map +1 -1
  55. package/dist/hooks/capabilities.d.ts +119 -119
  56. package/dist/hooks/capabilities.d.ts.map +1 -1
  57. package/dist/hooks/dns.d.ts +44 -40
  58. package/dist/hooks/dns.d.ts.map +1 -1
  59. package/dist/hooks/events.d.ts +132 -132
  60. package/dist/hooks/events.d.ts.map +1 -1
  61. package/dist/hooks/generic.d.ts +8 -6
  62. package/dist/hooks/generic.d.ts.map +1 -1
  63. package/dist/hooks/generic.js.map +1 -1
  64. package/dist/hooks/index.d.ts +4 -4
  65. package/dist/hooks/migration.d.ts +28 -28
  66. package/dist/hooks/migration.d.ts.map +1 -1
  67. package/dist/hooks/name.d.ts +77 -77
  68. package/dist/hooks/name.d.ts.map +1 -1
  69. package/dist/hooks/ownership.d.ts +5 -5
  70. package/dist/hooks/ownership.d.ts.map +1 -1
  71. package/dist/hooks/records.d.ts +70 -70
  72. package/dist/hooks/records.d.ts.map +1 -1
  73. package/dist/hooks/registration.d.ts +108 -48
  74. package/dist/hooks/registration.d.ts.map +1 -1
  75. package/dist/hooks/resolution.d.ts +35 -35
  76. package/dist/hooks/resolution.d.ts.map +1 -1
  77. package/dist/hooks/reverse.d.ts +9 -9
  78. package/dist/hooks/reverse.d.ts.map +1 -1
  79. package/dist/hooks/use-cache.d.ts +6 -6
  80. package/dist/hooks/use-cache.d.ts.map +1 -1
  81. package/dist/hooks/use-cache.js +4 -4
  82. package/dist/hooks/use-cache.js.map +1 -1
  83. package/dist/hooks/use-mutation.js +16 -31
  84. package/dist/hooks/use-mutation.js.map +1 -1
  85. package/dist/hooks/use-query.d.ts +6 -6
  86. package/dist/hooks/use-query.d.ts.map +1 -1
  87. package/dist/hooks/use-query.js +24 -52
  88. package/dist/hooks/use-query.js.map +1 -1
  89. package/dist/hooks/use-suspense-query.d.ts +9 -8
  90. package/dist/hooks/use-suspense-query.d.ts.map +1 -1
  91. package/dist/hooks/use-suspense-query.js +5 -5
  92. package/dist/hooks/use-suspense-query.js.map +1 -1
  93. package/dist/hooks/wrapping.d.ts +7 -7
  94. package/dist/hooks/wrapping.d.ts.map +1 -1
  95. package/dist/index.d.ts +13 -13
  96. package/dist/index.js +7 -7
  97. package/dist/mutation/options.d.ts +9 -7
  98. package/dist/mutation/options.d.ts.map +1 -1
  99. package/dist/mutation/result.d.ts +8 -10
  100. package/dist/mutation/result.d.ts.map +1 -1
  101. package/dist/provider/context.d.ts +4 -2
  102. package/dist/provider/context.d.ts.map +1 -1
  103. package/dist/provider/context.js.map +1 -1
  104. package/dist/provider/ensforge-provider.d.ts +2 -1
  105. package/dist/provider/ensforge-provider.d.ts.map +1 -1
  106. package/dist/provider/ensforge-provider.js +2 -1
  107. package/dist/provider/ensforge-provider.js.map +1 -1
  108. package/dist/query/options.d.ts +27 -24
  109. package/dist/query/options.d.ts.map +1 -1
  110. package/dist/query/options.js +26 -12
  111. package/dist/query/options.js.map +1 -1
  112. package/dist/query/result.d.ts +7 -13
  113. package/dist/query/result.d.ts.map +1 -1
  114. package/dist/query/result.js.map +1 -1
  115. package/package.json +3 -3
@@ -1,25 +1,23 @@
1
- import { EnsMutationCallbacks } from "./options.js";
1
+ import { EnsMutationExecutionOptions } from "./options.js";
2
2
  import { Cause, Effect } from "effect";
3
3
  import { AsyncResult } from "effect/unstable/reactivity";
4
4
  //#region src/mutation/result.d.ts
5
- type EnsMutationStatus = "idle" | "pending" | "success" | "error";
6
5
  interface EnsMutationResult<Parameters, Success, Failure> {
7
6
  readonly cause: Cause.Cause<Failure> | null;
8
7
  readonly data: Success | undefined;
9
8
  readonly error: Failure | Error | null;
10
- readonly interrupt: () => void;
11
- readonly isError: boolean;
12
- readonly isIdle: boolean;
13
- readonly isPending: boolean;
14
- readonly isSuccess: boolean;
15
- readonly mutate: (parameters: Parameters, callbacks?: EnsMutationCallbacks<Parameters, Success, Failure>) => void;
9
+ readonly mutate: (parameters: Parameters, options?: EnsMutationExecutionOptions<Parameters, Success, Failure>) => void;
16
10
  readonly mutateAsync: (parameters: Parameters) => Promise<Success>;
17
11
  readonly mutateEffect: (parameters: Parameters) => Effect.Effect<Success, Failure>;
12
+ readonly interrupt: () => void;
13
+ readonly isFailure: boolean;
14
+ readonly isInitial: boolean;
15
+ readonly isSuccess: boolean;
16
+ readonly isWaiting: boolean;
18
17
  readonly parameters: Parameters | undefined;
19
18
  readonly reset: () => void;
20
19
  readonly result: AsyncResult.AsyncResult<Success, Failure>;
21
- readonly status: EnsMutationStatus;
22
20
  }
23
21
  //#endregion
24
- export { EnsMutationResult, EnsMutationStatus };
22
+ export { EnsMutationResult };
25
23
  //# sourceMappingURL=result.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.d.ts","names":[],"sources":["../../src/mutation/result.ts"],"mappings":";;;;KAKY;UAEK,kBAAkB,YAAY,SAAS;WAC7C,OAAO,MAAM,MAAM;WACnB,MAAM;WACN,OAAO,UAAU;WACjB;WACA;WACA;WACA;WACA;WACA,SACP,YAAY,YACZ,YAAY,qBAAqB,YAAY,SAAS;WAE/C,cAAc,YAAY,eAAe,QAAQ;WACjD,eAAe,YAAY,eAAe,OAAO,OAAO,SAAS;WACjE,YAAY;WACZ;WACA,QAAQ,YAAY,YAAY,SAAS;WACzC,QAAQ"}
1
+ {"version":3,"file":"result.d.ts","names":[],"sources":["../../src/mutation/result.ts"],"mappings":";;;;UAKiB,kBAAkB,YAAY,SAAS;WAC7C,OAAO,MAAM,MAAM;WACnB,MAAM;WACN,OAAO,UAAU;WACjB,SACP,YAAY,YACZ,UAAU,4BAA4B,YAAY,SAAS;WAEpD,cAAc,YAAY,eAAe,QAAQ;WACjD,eAAe,YAAY,eAAe,OAAO,OAAO,SAAS;WACjE;WACA;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA,QAAQ,YAAY,YAAY,SAAS"}
@@ -1,8 +1,10 @@
1
- import { EnsQueryDefaults } from "../query/options.js";
1
+ import { EnsAtomDefaults } from "../query/options.js";
2
+ import { EnsMutationDefaults } from "../mutation/options.js";
2
3
  import { Ensforge } from "@ensforge/sdk";
3
4
  //#region src/provider/context.d.ts
4
5
  interface EnsforgeReactDefaults {
5
- readonly queries?: EnsQueryDefaults;
6
+ readonly atoms?: EnsAtomDefaults;
7
+ readonly mutations?: EnsMutationDefaults;
6
8
  }
7
9
  //#endregion
8
10
  export { EnsforgeReactDefaults };
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../src/provider/context.ts"],"mappings":";;;UAQiB;WACN,UAAU"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../src/provider/context.ts"],"mappings":";;;;UASiB;WACN,QAAQ;WACR,YAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../src/provider/context.ts"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nimport type { Ensforge } from \"@ensforge/sdk\";\n\nimport type { EnsQueryDefaults } from \"../query/options.js\";\n\nexport interface EnsforgeReactDefaults {\n readonly queries?: EnsQueryDefaults;\n}\n\nexport interface EnsforgeReactContextValue {\n readonly defaults: EnsforgeReactDefaults;\n readonly sdk: Ensforge;\n}\n\nexport const EnsforgeReactContext = createContext<EnsforgeReactContextValue | undefined>(undefined);\n\nexport const useEnsforgeContext = (): EnsforgeReactContextValue => {\n const value = useContext(EnsforgeReactContext);\n if (value === undefined) {\n throw new Error(\"Ensforge React hooks must be used inside an EnsforgeProvider\");\n }\n return value;\n};\n"],"mappings":";;;;;AAiBA,MAAa,uBAAuB,cAAqD,MAAS;AAElG,MAAa,2BAAsD;CACjE,MAAM,QAAQ,WAAW,oBAAoB;CAC7C,IAAI,UAAU,QACZ,MAAM,IAAI,MAAM,8DAA8D;CAEhF,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../src/provider/context.ts"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nimport type { Ensforge } from \"@ensforge/sdk\";\n\nimport type { EnsMutationDefaults } from \"../mutation/options.js\";\nimport type { EnsAtomDefaults } from \"../query/options.js\";\n\nexport interface EnsforgeReactDefaults {\n readonly atoms?: EnsAtomDefaults;\n readonly mutations?: EnsMutationDefaults;\n}\n\nexport interface EnsforgeReactContextValue {\n readonly defaults: EnsforgeReactDefaults;\n readonly sdk: Ensforge;\n}\n\nexport const EnsforgeReactContext = createContext<EnsforgeReactContextValue | undefined>(undefined);\n\nexport const useEnsforgeContext = (): EnsforgeReactContextValue => {\n const value = useContext(EnsforgeReactContext);\n if (value === undefined) {\n throw new Error(\"Ensforge React hooks must be used inside an EnsforgeProvider\");\n }\n return value;\n};\n"],"mappings":";;;;;AAmBA,MAAa,uBAAuB,cAAqD,MAAS;AAElG,MAAa,2BAAsD;CACjE,MAAM,QAAQ,WAAW,oBAAoB;CAC7C,IAAI,UAAU,QACZ,MAAM,IAAI,MAAM,8DAA8D;CAEhF,OAAO;AACT"}
@@ -2,6 +2,7 @@ import { EnsforgeReactDefaults } from "./context.js";
2
2
  import { CreateConfigParameters, Ensforge } from "@ensforge/sdk";
3
3
  import { AtomRegistry } from "effect/unstable/reactivity";
4
4
  import { ReactNode } from "react";
5
+ import { CreateWagmiConfigParameters } from "@ensforge/sdk/wagmi";
5
6
  //#region src/provider/ensforge-provider.d.ts
6
7
  interface SharedEnsforgeProviderProps {
7
8
  readonly children?: ReactNode;
@@ -10,7 +11,7 @@ interface SharedEnsforgeProviderProps {
10
11
  readonly registry?: AtomRegistry.AtomRegistry;
11
12
  }
12
13
  type EnsforgeProviderProps = SharedEnsforgeProviderProps & ({
13
- readonly config: CreateConfigParameters;
14
+ readonly config: CreateConfigParameters | CreateWagmiConfigParameters;
14
15
  readonly sdk?: never;
15
16
  } | {
16
17
  readonly config?: never;
@@ -1 +1 @@
1
- {"version":3,"file":"ensforge-provider.d.ts","names":[],"sources":["../../src/provider/ensforge-provider.tsx"],"mappings":";;;;;UAeU;WACC,WAAW;WACX;WACA,WAAW;WACX,WAAW,aAAa;;KAGvB,wBAAwB;WAGnB,QAAQ;WACR;;WAGA;WACA,KAAK;;cAIT,mBAAoB,OAAO,0CAAqB,IAAA"}
1
+ {"version":3,"file":"ensforge-provider.d.ts","names":[],"sources":["../../src/provider/ensforge-provider.tsx"],"mappings":";;;;;;UAmBU;WACC,WAAW;WACX;WACA,WAAW;WACX,WAAW,aAAa;;KAGvB,wBAAwB;WAGnB,QAAQ,yBAAyB;WACjC;;WAGA;WACA,KAAK;;cAIT,mBAAoB,OAAO,0CAAqB,IAAA"}
@@ -4,6 +4,7 @@ import { EnsforgeReactContext } from "./context.js";
4
4
  import { Ensforge } from "@ensforge/sdk";
5
5
  import { RegistryContext, RegistryProvider } from "@effect/atom-react";
6
6
  import { useRef } from "react";
7
+ import { createEnsforge } from "@ensforge/sdk/wagmi";
7
8
  import { jsx } from "react/jsx-runtime";
8
9
 
9
10
  //#region src/provider/ensforge-provider.tsx
@@ -11,7 +12,7 @@ const EnsforgeProvider = (props) => {
11
12
  const valueRef = useRef(void 0);
12
13
  if (valueRef.current === void 0) valueRef.current = Object.freeze({
13
14
  defaults: Object.freeze(props.defaults ?? {}),
14
- sdk: props.sdk ?? new Ensforge(props.config)
15
+ sdk: props.sdk ?? ("wagmiConfig" in props.config ? createEnsforge(props.config) : new Ensforge(props.config))
15
16
  });
16
17
  const children = /* @__PURE__ */ jsx(EnsforgeReactContext.Provider, {
17
18
  value: valueRef.current,
@@ -1 +1 @@
1
- {"version":3,"file":"ensforge-provider.js","names":[],"sources":["../../src/provider/ensforge-provider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useRef, type ReactNode } from \"react\";\n\nimport { RegistryContext, RegistryProvider } from \"@effect/atom-react\";\nimport type { AtomRegistry } from \"effect/unstable/reactivity\";\n\nimport { Ensforge, type CreateConfigParameters } from \"@ensforge/sdk\";\n\nimport {\n EnsforgeReactContext,\n type EnsforgeReactContextValue,\n type EnsforgeReactDefaults,\n} from \"./context.js\";\n\ninterface SharedEnsforgeProviderProps {\n readonly children?: ReactNode;\n readonly defaultIdleTTL?: number;\n readonly defaults?: EnsforgeReactDefaults;\n readonly registry?: AtomRegistry.AtomRegistry;\n}\n\nexport type EnsforgeProviderProps = SharedEnsforgeProviderProps &\n (\n | {\n readonly config: CreateConfigParameters;\n readonly sdk?: never;\n }\n | {\n readonly config?: never;\n readonly sdk: Ensforge;\n }\n );\n\nexport const EnsforgeProvider = (props: EnsforgeProviderProps) => {\n const valueRef = useRef<EnsforgeReactContextValue | undefined>(undefined);\n\n if (valueRef.current === undefined) {\n valueRef.current = Object.freeze({\n defaults: Object.freeze(props.defaults ?? {}),\n sdk: props.sdk ?? new Ensforge(props.config),\n });\n }\n\n const children = (\n <EnsforgeReactContext.Provider value={valueRef.current}>\n {props.children}\n </EnsforgeReactContext.Provider>\n );\n\n return props.registry === undefined ? (\n <RegistryProvider defaultIdleTTL={props.defaultIdleTTL}>{children}</RegistryProvider>\n ) : (\n <RegistryContext.Provider value={props.registry}>{children}</RegistryContext.Provider>\n );\n};\n"],"mappings":";;;;;;;;;AAkCA,MAAa,oBAAoB,UAAiC;CAChE,MAAM,WAAW,OAA8C,MAAS;CAExE,IAAI,SAAS,YAAY,QACvB,SAAS,UAAU,OAAO,OAAO;EAC/B,UAAU,OAAO,OAAO,MAAM,YAAY,CAAC,CAAC;EAC5C,KAAK,MAAM,OAAO,IAAI,SAAS,MAAM,MAAM;CAC7C,CAAC;CAGH,MAAM,WACJ,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO,SAAS;YAC5C,MAAM;CACsB;CAGjC,OAAO,MAAM,aAAa,SACxB,oBAAC,kBAAD;EAAkB,gBAAgB,MAAM;EAAiB;CAA2B,KAEpF,oBAAC,gBAAgB,UAAjB;EAA0B,OAAO,MAAM;EAAW;CAAmC;AAEzF"}
1
+ {"version":3,"file":"ensforge-provider.js","names":["createWagmiEnsforge"],"sources":["../../src/provider/ensforge-provider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useRef, type ReactNode } from \"react\";\n\nimport { RegistryContext, RegistryProvider } from \"@effect/atom-react\";\nimport type { AtomRegistry } from \"effect/unstable/reactivity\";\n\nimport { Ensforge, type CreateConfigParameters } from \"@ensforge/sdk\";\nimport {\n createEnsforge as createWagmiEnsforge,\n type CreateWagmiConfigParameters,\n} from \"@ensforge/sdk/wagmi\";\n\nimport {\n EnsforgeReactContext,\n type EnsforgeReactContextValue,\n type EnsforgeReactDefaults,\n} from \"./context.js\";\n\ninterface SharedEnsforgeProviderProps {\n readonly children?: ReactNode;\n readonly defaultIdleTTL?: number;\n readonly defaults?: EnsforgeReactDefaults;\n readonly registry?: AtomRegistry.AtomRegistry;\n}\n\nexport type EnsforgeProviderProps = SharedEnsforgeProviderProps &\n (\n | {\n readonly config: CreateConfigParameters | CreateWagmiConfigParameters;\n readonly sdk?: never;\n }\n | {\n readonly config?: never;\n readonly sdk: Ensforge;\n }\n );\n\nexport const EnsforgeProvider = (props: EnsforgeProviderProps) => {\n const valueRef = useRef<EnsforgeReactContextValue | undefined>(undefined);\n\n if (valueRef.current === undefined) {\n valueRef.current = Object.freeze({\n defaults: Object.freeze(props.defaults ?? {}),\n sdk:\n props.sdk ??\n (\"wagmiConfig\" in props.config\n ? createWagmiEnsforge(props.config)\n : new Ensforge(props.config)),\n });\n }\n\n const children = (\n <EnsforgeReactContext.Provider value={valueRef.current}>\n {props.children}\n </EnsforgeReactContext.Provider>\n );\n\n return props.registry === undefined ? (\n <RegistryProvider defaultIdleTTL={props.defaultIdleTTL}>{children}</RegistryProvider>\n ) : (\n <RegistryContext.Provider value={props.registry}>{children}</RegistryContext.Provider>\n );\n};\n"],"mappings":";;;;;;;;;;AAsCA,MAAa,oBAAoB,UAAiC;CAChE,MAAM,WAAW,OAA8C,MAAS;CAExE,IAAI,SAAS,YAAY,QACvB,SAAS,UAAU,OAAO,OAAO;EAC/B,UAAU,OAAO,OAAO,MAAM,YAAY,CAAC,CAAC;EAC5C,KACE,MAAM,QACL,iBAAiB,MAAM,SACpBA,eAAoB,MAAM,MAAM,IAChC,IAAI,SAAS,MAAM,MAAM;CACjC,CAAC;CAGH,MAAM,WACJ,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO,SAAS;YAC5C,MAAM;CACsB;CAGjC,OAAO,MAAM,aAAa,SACxB,oBAAC,kBAAD;EAAkB,gBAAgB,MAAM;EAAiB;CAA2B,KAEpF,oBAAC,gBAAgB,UAAjB;EAA0B,OAAO,MAAM;EAAW;CAAmC;AAEzF"}
@@ -1,31 +1,34 @@
1
+ import { Duration, Schedule } from "effect";
1
2
  //#region src/query/options.d.ts
2
- interface EnsQueryOptions<Success, Selected = Success> {
3
- readonly enabled?: boolean;
4
- readonly gcTime?: number;
5
- readonly refetchInterval?: false | number;
6
- readonly refetchOnWindowFocus?: boolean;
7
- readonly retry?: false | number;
8
- readonly select?: (value: Success) => Selected;
9
- readonly staleTime?: number;
3
+ interface EnsAtomSwrOptions {
4
+ readonly revalidateOnFocus?: boolean | "always";
5
+ readonly revalidateOnMount?: boolean;
6
+ readonly staleTime?: Duration.Input;
7
+ }
8
+ interface EnsAtomOptions<Failure = unknown> {
9
+ readonly idleTTL?: Duration.Input;
10
+ readonly refreshInterval?: false | Duration.Input;
11
+ readonly retry?: false | Schedule.Schedule<unknown, Failure>;
12
+ readonly swr?: false | EnsAtomSwrOptions;
10
13
  }
11
- interface EnsQueryDefaults {
12
- readonly gcTime?: number;
13
- readonly refetchInterval?: false | number;
14
- readonly refetchOnWindowFocus?: boolean;
15
- readonly retry?: false | number;
16
- readonly staleTime?: number;
14
+ type EnsAtomDefaults = EnsAtomOptions<unknown>;
15
+ interface ResolvedEnsAtomSwrOptions {
16
+ readonly revalidateOnFocus: boolean | "always";
17
+ readonly revalidateOnMount: boolean;
18
+ readonly staleTime: Duration.Input;
17
19
  }
18
- interface ResolvedEnsQueryOptions {
19
- readonly gcTime: number;
20
- readonly refetchInterval: false | number;
21
- readonly refetchOnWindowFocus: boolean;
22
- readonly retry: false | number;
23
- readonly staleTime: number;
20
+ interface ResolvedEnsAtomOptions<Failure = unknown> {
21
+ readonly idleTTL: Duration.Input;
22
+ readonly refreshInterval: false | Duration.Input;
23
+ readonly retry: false | Schedule.Schedule<unknown, Failure>;
24
+ readonly swr: false | ResolvedEnsAtomSwrOptions;
24
25
  }
25
- declare const defaultEnsQueryOptions: ResolvedEnsQueryOptions;
26
- type UseEnsQueryParameters<Parameters, Success, Selected = Success> = Parameters & {
27
- readonly query?: EnsQueryOptions<Success, Selected>;
26
+ declare const defaultEnsAtomOptions: ResolvedEnsAtomOptions;
27
+ type UseEnsAtomParameters<Parameters, Success, Failure, Mapped = Success> = Parameters & {
28
+ readonly atom?: EnsAtomOptions<Failure>;
29
+ readonly enabled?: boolean;
30
+ readonly map?: (value: Success) => Mapped;
28
31
  };
29
32
  //#endregion
30
- export { EnsQueryDefaults, EnsQueryOptions, ResolvedEnsQueryOptions, UseEnsQueryParameters, defaultEnsQueryOptions };
33
+ export { EnsAtomDefaults, EnsAtomOptions, EnsAtomSwrOptions, ResolvedEnsAtomOptions, ResolvedEnsAtomSwrOptions, UseEnsAtomParameters, defaultEnsAtomOptions };
31
34
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","names":[],"sources":["../../src/query/options.ts"],"mappings":";UAAiB,gBAAgB,SAAS,WAAW;WAC1C;WACA;WACA;WACA;WACA;WACA,UAAU,OAAO,YAAY;WAC7B;;UAGM;WACN;WACA;WACA;WACA;WACA;;UAGM;WACN;WACA;WACA;WACA;WACA;;cAGE,wBAAwB;KAuBzB,sBAAsB,YAAY,SAAS,WAAW,WAAW;WAClE,QAAQ,gBAAgB,SAAS"}
1
+ {"version":3,"file":"options.d.ts","names":[],"sources":["../../src/query/options.ts"],"mappings":";;UAEiB;WACN;WACA;WACA,YAAY,SAAS;;UAGf,eAAe;WACrB,UAAU,SAAS;WACnB,0BAA0B,SAAS;WACnC,gBAAgB,SAAS,kBAAkB;WAC3C,cAAc;;KAGb,kBAAkB;UAEb;WACN;WACA;WACA,WAAW,SAAS;;UAGd,uBAAuB;WAC7B,SAAS,SAAS;WAClB,yBAAyB,SAAS;WAClC,eAAe,SAAS,kBAAkB;WAC1C,aAAa;;cAGX,uBAAuB;KA6CxB,qBAAqB,YAAY,SAAS,SAAS,SAAS,WAAW;WACxE,OAAO,eAAe;WACtB;WACA,OAAO,OAAO,YAAY"}
@@ -1,19 +1,33 @@
1
1
  //#region src/query/options.ts
2
- const defaultEnsQueryOptions = Object.freeze({
3
- gcTime: 3e5,
4
- refetchInterval: false,
5
- refetchOnWindowFocus: false,
2
+ const defaultEnsAtomOptions = Object.freeze({
3
+ idleTTL: 3e5,
4
+ refreshInterval: false,
6
5
  retry: false,
7
- staleTime: 3e4
6
+ swr: Object.freeze({
7
+ revalidateOnFocus: false,
8
+ revalidateOnMount: true,
9
+ staleTime: 3e4
10
+ })
8
11
  });
9
- const resolveEnsQueryOptions = (defaults, options) => ({
10
- gcTime: options?.gcTime ?? defaults?.gcTime ?? defaultEnsQueryOptions.gcTime,
11
- refetchInterval: options?.refetchInterval ?? defaults?.refetchInterval ?? defaultEnsQueryOptions.refetchInterval,
12
- refetchOnWindowFocus: options?.refetchOnWindowFocus ?? defaults?.refetchOnWindowFocus ?? defaultEnsQueryOptions.refetchOnWindowFocus,
13
- retry: options?.retry ?? defaults?.retry ?? defaultEnsQueryOptions.retry,
14
- staleTime: options?.staleTime ?? defaults?.staleTime ?? defaultEnsQueryOptions.staleTime
12
+ const resolveSwrOptions = (defaults, options) => {
13
+ const selected = options?.swr ?? defaults?.swr ?? defaultEnsAtomOptions.swr;
14
+ if (selected === false) return false;
15
+ const fallback = defaultEnsAtomOptions.swr;
16
+ if (fallback === false) return false;
17
+ const defaultSwr = defaults?.swr === false ? void 0 : defaults?.swr;
18
+ return {
19
+ revalidateOnFocus: selected.revalidateOnFocus ?? defaultSwr?.revalidateOnFocus ?? fallback.revalidateOnFocus,
20
+ revalidateOnMount: selected.revalidateOnMount ?? defaultSwr?.revalidateOnMount ?? fallback.revalidateOnMount,
21
+ staleTime: selected.staleTime ?? defaultSwr?.staleTime ?? fallback.staleTime
22
+ };
23
+ };
24
+ const resolveEnsAtomOptions = (defaults, options) => ({
25
+ idleTTL: options?.idleTTL ?? defaults?.idleTTL ?? defaultEnsAtomOptions.idleTTL,
26
+ refreshInterval: options?.refreshInterval ?? defaults?.refreshInterval ?? defaultEnsAtomOptions.refreshInterval,
27
+ retry: options?.retry ?? defaults?.retry ?? false,
28
+ swr: resolveSwrOptions(defaults, options)
15
29
  });
16
30
 
17
31
  //#endregion
18
- export { defaultEnsQueryOptions, resolveEnsQueryOptions };
32
+ export { defaultEnsAtomOptions, resolveEnsAtomOptions };
19
33
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","names":[],"sources":["../../src/query/options.ts"],"sourcesContent":["export interface EnsQueryOptions<Success, Selected = Success> {\n readonly enabled?: boolean;\n readonly gcTime?: number;\n readonly refetchInterval?: false | number;\n readonly refetchOnWindowFocus?: boolean;\n readonly retry?: false | number;\n readonly select?: (value: Success) => Selected;\n readonly staleTime?: number;\n}\n\nexport interface EnsQueryDefaults {\n readonly gcTime?: number;\n readonly refetchInterval?: false | number;\n readonly refetchOnWindowFocus?: boolean;\n readonly retry?: false | number;\n readonly staleTime?: number;\n}\n\nexport interface ResolvedEnsQueryOptions {\n readonly gcTime: number;\n readonly refetchInterval: false | number;\n readonly refetchOnWindowFocus: boolean;\n readonly retry: false | number;\n readonly staleTime: number;\n}\n\nexport const defaultEnsQueryOptions: ResolvedEnsQueryOptions = Object.freeze({\n gcTime: 5 * 60_000,\n refetchInterval: false,\n refetchOnWindowFocus: false,\n retry: false,\n staleTime: 30_000,\n});\n\nexport const resolveEnsQueryOptions = (\n defaults: EnsQueryDefaults | undefined,\n options: EnsQueryDefaults | undefined,\n): ResolvedEnsQueryOptions => ({\n gcTime: options?.gcTime ?? defaults?.gcTime ?? defaultEnsQueryOptions.gcTime,\n refetchInterval:\n options?.refetchInterval ?? defaults?.refetchInterval ?? defaultEnsQueryOptions.refetchInterval,\n refetchOnWindowFocus:\n options?.refetchOnWindowFocus ??\n defaults?.refetchOnWindowFocus ??\n defaultEnsQueryOptions.refetchOnWindowFocus,\n retry: options?.retry ?? defaults?.retry ?? defaultEnsQueryOptions.retry,\n staleTime: options?.staleTime ?? defaults?.staleTime ?? defaultEnsQueryOptions.staleTime,\n});\n\nexport type UseEnsQueryParameters<Parameters, Success, Selected = Success> = Parameters & {\n readonly query?: EnsQueryOptions<Success, Selected>;\n};\n"],"mappings":";AA0BA,MAAa,yBAAkD,OAAO,OAAO;CAC3E,QAAQ;CACR,iBAAiB;CACjB,sBAAsB;CACtB,OAAO;CACP,WAAW;AACb,CAAC;AAED,MAAa,0BACX,UACA,aAC6B;CAC7B,QAAQ,SAAS,UAAU,UAAU,UAAU,uBAAuB;CACtE,iBACE,SAAS,mBAAmB,UAAU,mBAAmB,uBAAuB;CAClF,sBACE,SAAS,wBACT,UAAU,wBACV,uBAAuB;CACzB,OAAO,SAAS,SAAS,UAAU,SAAS,uBAAuB;CACnE,WAAW,SAAS,aAAa,UAAU,aAAa,uBAAuB;AACjF"}
1
+ {"version":3,"file":"options.js","names":[],"sources":["../../src/query/options.ts"],"sourcesContent":["import type { Duration, Schedule } from \"effect\";\n\nexport interface EnsAtomSwrOptions {\n readonly revalidateOnFocus?: boolean | \"always\";\n readonly revalidateOnMount?: boolean;\n readonly staleTime?: Duration.Input;\n}\n\nexport interface EnsAtomOptions<Failure = unknown> {\n readonly idleTTL?: Duration.Input;\n readonly refreshInterval?: false | Duration.Input;\n readonly retry?: false | Schedule.Schedule<unknown, Failure>;\n readonly swr?: false | EnsAtomSwrOptions;\n}\n\nexport type EnsAtomDefaults = EnsAtomOptions<unknown>;\n\nexport interface ResolvedEnsAtomSwrOptions {\n readonly revalidateOnFocus: boolean | \"always\";\n readonly revalidateOnMount: boolean;\n readonly staleTime: Duration.Input;\n}\n\nexport interface ResolvedEnsAtomOptions<Failure = unknown> {\n readonly idleTTL: Duration.Input;\n readonly refreshInterval: false | Duration.Input;\n readonly retry: false | Schedule.Schedule<unknown, Failure>;\n readonly swr: false | ResolvedEnsAtomSwrOptions;\n}\n\nexport const defaultEnsAtomOptions: ResolvedEnsAtomOptions = Object.freeze({\n idleTTL: 5 * 60_000,\n refreshInterval: false,\n retry: false,\n swr: Object.freeze({\n revalidateOnFocus: false,\n revalidateOnMount: true,\n staleTime: 30_000,\n }),\n});\n\nconst resolveSwrOptions = <Failure>(\n defaults: EnsAtomDefaults | undefined,\n options: EnsAtomOptions<Failure> | undefined,\n): false | ResolvedEnsAtomSwrOptions => {\n const selected = options?.swr ?? defaults?.swr ?? defaultEnsAtomOptions.swr;\n if (selected === false) return false;\n\n const fallback = defaultEnsAtomOptions.swr;\n if (fallback === false) return false;\n const defaultSwr = defaults?.swr === false ? undefined : defaults?.swr;\n\n return {\n revalidateOnFocus:\n selected.revalidateOnFocus ?? defaultSwr?.revalidateOnFocus ?? fallback.revalidateOnFocus,\n revalidateOnMount:\n selected.revalidateOnMount ?? defaultSwr?.revalidateOnMount ?? fallback.revalidateOnMount,\n staleTime: selected.staleTime ?? defaultSwr?.staleTime ?? fallback.staleTime,\n };\n};\n\nexport const resolveEnsAtomOptions = <Failure>(\n defaults: EnsAtomDefaults | undefined,\n options: EnsAtomOptions<Failure> | undefined,\n): ResolvedEnsAtomOptions<Failure> => ({\n idleTTL: options?.idleTTL ?? defaults?.idleTTL ?? defaultEnsAtomOptions.idleTTL,\n refreshInterval:\n options?.refreshInterval ?? defaults?.refreshInterval ?? defaultEnsAtomOptions.refreshInterval,\n retry:\n options?.retry ??\n (defaults?.retry as false | Schedule.Schedule<unknown, Failure> | undefined) ??\n false,\n swr: resolveSwrOptions(defaults, options),\n});\n\nexport type UseEnsAtomParameters<Parameters, Success, Failure, Mapped = Success> = Parameters & {\n readonly atom?: EnsAtomOptions<Failure>;\n readonly enabled?: boolean;\n readonly map?: (value: Success) => Mapped;\n};\n"],"mappings":";AA8BA,MAAa,wBAAgD,OAAO,OAAO;CACzE,SAAS;CACT,iBAAiB;CACjB,OAAO;CACP,KAAK,OAAO,OAAO;EACjB,mBAAmB;EACnB,mBAAmB;EACnB,WAAW;CACb,CAAC;AACH,CAAC;AAED,MAAM,qBACJ,UACA,YACsC;CACtC,MAAM,WAAW,SAAS,OAAO,UAAU,OAAO,sBAAsB;CACxE,IAAI,aAAa,OAAO,OAAO;CAE/B,MAAM,WAAW,sBAAsB;CACvC,IAAI,aAAa,OAAO,OAAO;CAC/B,MAAM,aAAa,UAAU,QAAQ,QAAQ,SAAY,UAAU;CAEnE,OAAO;EACL,mBACE,SAAS,qBAAqB,YAAY,qBAAqB,SAAS;EAC1E,mBACE,SAAS,qBAAqB,YAAY,qBAAqB,SAAS;EAC1E,WAAW,SAAS,aAAa,YAAY,aAAa,SAAS;CACrE;AACF;AAEA,MAAa,yBACX,UACA,aACqC;CACrC,SAAS,SAAS,WAAW,UAAU,WAAW,sBAAsB;CACxE,iBACE,SAAS,mBAAmB,UAAU,mBAAmB,sBAAsB;CACjF,OACE,SAAS,SACR,UAAU,SACX;CACF,KAAK,kBAAkB,UAAU,OAAO;AAC1C"}
@@ -1,25 +1,19 @@
1
1
  import { Cause, Effect } from "effect";
2
2
  import { AsyncResult } from "effect/unstable/reactivity";
3
3
  //#region src/query/result.d.ts
4
- type EnsQueryStatus = "pending" | "success" | "error";
5
- type EnsFetchStatus = "idle" | "fetching";
6
- interface EnsQueryResult<Success, Failure> {
4
+ interface EnsAtomResult<Success, Failure> {
7
5
  readonly cause: Cause.Cause<Failure> | null;
8
6
  readonly data: Success | undefined;
9
7
  readonly error: Failure | Error | null;
10
- readonly fetchStatus: EnsFetchStatus;
11
- readonly isError: boolean;
12
- readonly isFetching: boolean;
13
- readonly isLoading: boolean;
14
- readonly isPending: boolean;
15
- readonly isRefetching: boolean;
8
+ readonly isFailure: boolean;
9
+ readonly isInitial: boolean;
16
10
  readonly isSuccess: boolean;
17
- readonly refetch: () => Promise<Success>;
18
- readonly refetchEffect: () => Effect.Effect<Success, Failure>;
11
+ readonly isWaiting: boolean;
12
+ readonly refresh: () => Promise<Success>;
13
+ readonly refreshEffect: () => Effect.Effect<Success, Failure>;
19
14
  readonly result: AsyncResult.AsyncResult<Success, Failure>;
20
- readonly status: EnsQueryStatus;
21
15
  readonly updatedAt: number | undefined;
22
16
  }
23
17
  //#endregion
24
- export { EnsFetchStatus, EnsQueryResult, EnsQueryStatus };
18
+ export { EnsAtomResult };
25
19
  //# sourceMappingURL=result.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.d.ts","names":[],"sources":["../../src/query/result.ts"],"mappings":";;;KAGY;KACA;UAEK,eAAe,SAAS;WAC9B,OAAO,MAAM,MAAM;WACnB,MAAM;WACN,OAAO,UAAU;WACjB,aAAa;WACb;WACA;WACA;WACA;WACA;WACA;WACA,eAAe,QAAQ;WACvB,qBAAqB,OAAO,OAAO,SAAS;WAC5C,QAAQ,YAAY,YAAY,SAAS;WACzC,QAAQ;WACR"}
1
+ {"version":3,"file":"result.d.ts","names":[],"sources":["../../src/query/result.ts"],"mappings":";;;UAGiB,cAAc,SAAS;WAC7B,OAAO,MAAM,MAAM;WACnB,MAAM;WACN,OAAO,UAAU;WACjB;WACA;WACA;WACA;WACA,eAAe,QAAQ;WACvB,qBAAqB,OAAO,OAAO,SAAS;WAC5C,QAAQ,YAAY,YAAY,SAAS;WACzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","names":[],"sources":["../../src/query/result.ts"],"sourcesContent":["import { Cause, Option, type Effect } from \"effect\";\nimport { AsyncResult } from \"effect/unstable/reactivity\";\n\nexport type EnsQueryStatus = \"pending\" | \"success\" | \"error\";\nexport type EnsFetchStatus = \"idle\" | \"fetching\";\n\nexport interface EnsQueryResult<Success, Failure> {\n readonly cause: Cause.Cause<Failure> | null;\n readonly data: Success | undefined;\n readonly error: Failure | Error | null;\n readonly fetchStatus: EnsFetchStatus;\n readonly isError: boolean;\n readonly isFetching: boolean;\n readonly isLoading: boolean;\n readonly isPending: boolean;\n readonly isRefetching: boolean;\n readonly isSuccess: boolean;\n readonly refetch: () => Promise<Success>;\n readonly refetchEffect: () => Effect.Effect<Success, Failure>;\n readonly result: AsyncResult.AsyncResult<Success, Failure>;\n readonly status: EnsQueryStatus;\n readonly updatedAt: number | undefined;\n}\n\nexport const errorFromCause = <Failure>(cause: Cause.Cause<Failure>): Failure | Error => {\n const typedError = Cause.findErrorOption(cause);\n if (Option.isSome(typedError)) return typedError.value;\n\n const squashed = Cause.squash(cause);\n return squashed instanceof Error\n ? squashed\n : new Error(\"An unexpected Effect failure occurred\", { cause: squashed });\n};\n\nexport const resultUpdatedAt = <Success, Failure>(\n result: AsyncResult.AsyncResult<Success, Failure>,\n): number | undefined => {\n if (AsyncResult.isSuccess(result)) return result.timestamp;\n if (!AsyncResult.isFailure(result)) return undefined;\n return Option.getOrUndefined(result.previousSuccess)?.timestamp;\n};\n"],"mappings":";;;;AAwBA,MAAa,kBAA2B,UAAiD;CACvF,MAAM,aAAa,MAAM,gBAAgB,KAAK;CAC9C,IAAI,OAAO,OAAO,UAAU,GAAG,OAAO,WAAW;CAEjD,MAAM,WAAW,MAAM,OAAO,KAAK;CACnC,OAAO,oBAAoB,QACvB,WACA,IAAI,MAAM,yCAAyC,EAAE,OAAO,SAAS,CAAC;AAC5E;AAEA,MAAa,mBACX,WACuB;CACvB,IAAI,YAAY,UAAU,MAAM,GAAG,OAAO,OAAO;CACjD,IAAI,CAAC,YAAY,UAAU,MAAM,GAAG,OAAO;CAC3C,OAAO,OAAO,eAAe,OAAO,eAAe,CAAC,EAAE;AACxD"}
1
+ {"version":3,"file":"result.js","names":[],"sources":["../../src/query/result.ts"],"sourcesContent":["import { Cause, Option, type Effect } from \"effect\";\nimport { AsyncResult } from \"effect/unstable/reactivity\";\n\nexport interface EnsAtomResult<Success, Failure> {\n readonly cause: Cause.Cause<Failure> | null;\n readonly data: Success | undefined;\n readonly error: Failure | Error | null;\n readonly isFailure: boolean;\n readonly isInitial: boolean;\n readonly isSuccess: boolean;\n readonly isWaiting: boolean;\n readonly refresh: () => Promise<Success>;\n readonly refreshEffect: () => Effect.Effect<Success, Failure>;\n readonly result: AsyncResult.AsyncResult<Success, Failure>;\n readonly updatedAt: number | undefined;\n}\n\nexport const errorFromCause = <Failure>(cause: Cause.Cause<Failure>): Failure | Error => {\n const typedError = Cause.findErrorOption(cause);\n if (Option.isSome(typedError)) return typedError.value;\n\n const squashed = Cause.squash(cause);\n return squashed instanceof Error\n ? squashed\n : new Error(\"An unexpected Effect failure occurred\", { cause: squashed });\n};\n\nexport const resultUpdatedAt = <Success, Failure>(\n result: AsyncResult.AsyncResult<Success, Failure>,\n): number | undefined => {\n if (AsyncResult.isSuccess(result)) return result.timestamp;\n if (!AsyncResult.isFailure(result)) return undefined;\n return Option.getOrUndefined(result.previousSuccess)?.timestamp;\n};\n"],"mappings":";;;;AAiBA,MAAa,kBAA2B,UAAiD;CACvF,MAAM,aAAa,MAAM,gBAAgB,KAAK;CAC9C,IAAI,OAAO,OAAO,UAAU,GAAG,OAAO,WAAW;CAEjD,MAAM,WAAW,MAAM,OAAO,KAAK;CACnC,OAAO,oBAAoB,QACvB,WACA,IAAI,MAAM,yCAAyC,EAAE,OAAO,SAAS,CAAC;AAC5E;AAEA,MAAa,mBACX,WACuB;CACvB,IAAI,YAAY,UAAU,MAAM,GAAG,OAAO,OAAO;CACjD,IAAI,CAAC,YAAY,UAAU,MAAM,GAAG,OAAO;CAC3C,OAAO,OAAO,eAAe,OAAO,eAAe,CAAC,EAAE;AACxD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ensforge/react",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Reactive React hooks for ENS",
5
5
  "keywords": [
6
6
  "ens",
@@ -12,7 +12,7 @@
12
12
  "viem",
13
13
  "wagmi"
14
14
  ],
15
- "homepage": "https://github.com/envoy1084/ensforge#readme",
15
+ "homepage": "https://ensforge.envoy1084.xyz/react/",
16
16
  "bugs": "https://github.com/envoy1084/ensforge/issues",
17
17
  "license": "Apache-2.0",
18
18
  "repository": {
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@effect/atom-react": "4.0.0-rc.112",
43
- "@ensforge/sdk": "0.1.0"
43
+ "@ensforge/sdk": "0.2.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@testing-library/react": "16.3.0",