@effect-atom/atom 0.1.3 → 0.1.4

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.
@@ -9,6 +9,7 @@ var Headers = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect
9
9
  var RpcClient = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect/rpc/RpcClient"));
10
10
  var RpcSchema = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect/rpc/RpcSchema"));
11
11
  var Data = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Data"));
12
+ var Duration = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Duration"));
12
13
  var Effect = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Effect"));
13
14
  var Equal = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Equal"));
14
15
  var _Function = /*#__PURE__*/require("effect/Function");
@@ -63,21 +64,26 @@ const make = (group, options) => {
63
64
  headers,
64
65
  payload,
65
66
  reactivityKeys,
66
- tag
67
+ tag,
68
+ timeToLive
67
69
  }) => {
68
70
  const rpc = group.requests.get(tag);
69
- const atom = RpcSchema.isStreamSchema(rpc.successSchema) ? Atom.pull(get => get.result(client).pipe(Effect.map(client => client(tag, payload, {
71
+ let atom = RpcSchema.isStreamSchema(rpc.successSchema) ? Atom.pull(get => get.result(client).pipe(Effect.map(client => client(tag, payload, {
70
72
  headers
71
73
  })), Stream.unwrap)) : Atom.make(get => get.result(client).pipe(Effect.flatMap(client => client(tag, payload, {
72
74
  headers
73
75
  }))));
76
+ if (timeToLive) {
77
+ atom = Duration.isFinite(timeToLive) ? Atom.setIdleTTL(atom, timeToLive) : Atom.keepAlive(atom);
78
+ }
74
79
  return reactivityKeys ? options.runtime.factory.withReactivity(reactivityKeys)(atom) : atom;
75
80
  });
76
81
  const query = (tag, payload, options) => queryFamily(new QueryKey({
77
82
  tag,
78
83
  payload: Data.struct(payload),
79
84
  headers: options?.headers ? Data.unsafeStruct(Headers.fromInput(options.headers)) : undefined,
80
- reactivityKeys: options?.reactivityKeys ? Data.array(options.reactivityKeys) : undefined
85
+ reactivityKeys: options?.reactivityKeys ? Data.array(options.reactivityKeys) : undefined,
86
+ timeToLive: options?.timeToLive ? Duration.decode(options.timeToLive) : undefined
81
87
  }));
82
88
  return {
83
89
  client,
@@ -88,10 +94,10 @@ const make = (group, options) => {
88
94
  exports.make = make;
89
95
  class QueryKey extends Data.Class {
90
96
  [Equal.symbol](that) {
91
- return this.tag === that.tag && Equal.equals(this.payload, that.payload) && Equal.equals(this.headers, that.headers) && Equal.equals(this.reactivityKeys, that.reactivityKeys);
97
+ return this.tag === that.tag && Equal.equals(this.payload, that.payload) && Equal.equals(this.headers, that.headers) && Equal.equals(this.reactivityKeys, that.reactivityKeys) && Equal.equals(this.timeToLive, that.timeToLive);
92
98
  }
93
99
  [Hash.symbol]() {
94
- return (0, _Function.pipe)(Hash.string(this.tag), Hash.combine(Hash.hash(this.payload)), Hash.combine(Hash.hash(this.headers)), Hash.combine(Hash.hash(this.reactivityKeys)), Hash.cached(this));
100
+ return (0, _Function.pipe)(Hash.string(this.tag), Hash.combine(Hash.hash(this.payload)), Hash.combine(Hash.hash(this.headers)), Hash.combine(Hash.hash(this.reactivityKeys)), Hash.combine(Hash.hash(this.timeToLive)), Hash.cached(this));
95
101
  }
96
102
  }
97
103
  //# sourceMappingURL=AtomRpc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AtomRpc.js","names":["Reactivity","_interopRequireWildcard","require","Headers","RpcClient","RpcSchema","Data","Effect","Equal","_Function","Hash","Stream","Atom","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","make","group","options","client","runtime","atom","flatten","mutation","family","tag","fn","fnUntraced","headers","payload","reactivityKeys","c","result","effect","queryFamily","rpc","requests","isStreamSchema","successSchema","pull","pipe","map","unwrap","flatMap","factory","withReactivity","query","QueryKey","struct","unsafeStruct","fromInput","undefined","array","exports","Class","symbol","that","equals","string","combine","hash","cached"],"sources":["../../src/AtomRpc.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AtomRpc.js","names":["Reactivity","_interopRequireWildcard","require","Headers","RpcClient","RpcSchema","Data","Duration","Effect","Equal","_Function","Hash","Stream","Atom","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","make","group","options","client","runtime","atom","flatten","mutation","family","tag","fn","fnUntraced","headers","payload","reactivityKeys","c","result","effect","queryFamily","timeToLive","rpc","requests","isStreamSchema","successSchema","pull","pipe","map","unwrap","flatMap","isFinite","setIdleTTL","keepAlive","factory","withReactivity","query","QueryKey","struct","unsafeStruct","fromInput","undefined","array","decode","exports","Class","symbol","that","equals","string","combine","hash","cached"],"sources":["../../src/AtomRpc.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -5,6 +5,7 @@ import type { RpcClientError } from "@effect/rpc/RpcClientError";
5
5
  import type * as RpcGroup from "@effect/rpc/RpcGroup";
6
6
  import type { RequestId } from "@effect/rpc/RpcMessage";
7
7
  import * as RpcSchema from "@effect/rpc/RpcSchema";
8
+ import * as Duration from "effect/Duration";
8
9
  import type { ReadonlyRecord } from "effect/Record";
9
10
  import * as Atom from "./Atom.js";
10
11
  import type * as Result from "./Result.js";
@@ -22,6 +23,7 @@ export interface AtomRpcClient<Rpcs extends Rpc.Any, E> {
22
23
  readonly query: <Tag extends Rpc.Tag<Rpcs>>(tag: Tag, payload: Rpc.PayloadConstructor<Rpc.ExtractTag<Rpcs, Tag>>, options?: {
23
24
  readonly headers?: Headers.Input | undefined;
24
25
  readonly reactivityKeys?: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>> | undefined;
26
+ readonly timeToLive?: Duration.DurationInput | undefined;
25
27
  }) => Rpc.ExtractTag<Rpcs, Tag> extends Rpc.Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? [_Success] extends [RpcSchema.Stream<infer _A, infer _E>] ? Atom.Writable<Atom.PullResult<_A, _E | _Error["Type"] | E | _Middleware["failure"]["Type"]>, void> : Atom.Atom<Result.Result<_Success["Type"], _Error["Type"] | E | _Middleware["failure"]["Type"]>> : never;
26
28
  }
27
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AtomRpc.d.ts","sourceRoot":"","sources":["../../src/AtomRpc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AtomRpc.d.ts","sourceRoot":"","sources":["../../src/AtomRpc.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import * as Headers from "@effect/platform/Headers";
6
6
  import * as RpcClient from "@effect/rpc/RpcClient";
7
7
  import * as RpcSchema from "@effect/rpc/RpcSchema";
8
8
  import * as Data from "effect/Data";
9
+ import * as Duration from "effect/Duration";
9
10
  import * as Effect from "effect/Effect";
10
11
  import * as Equal from "effect/Equal";
11
12
  import { pipe } from "effect/Function";
@@ -36,21 +37,26 @@ export const make = (group, options) => {
36
37
  headers,
37
38
  payload,
38
39
  reactivityKeys,
39
- tag
40
+ tag,
41
+ timeToLive
40
42
  }) => {
41
43
  const rpc = group.requests.get(tag);
42
- const atom = RpcSchema.isStreamSchema(rpc.successSchema) ? Atom.pull(get => get.result(client).pipe(Effect.map(client => client(tag, payload, {
44
+ let atom = RpcSchema.isStreamSchema(rpc.successSchema) ? Atom.pull(get => get.result(client).pipe(Effect.map(client => client(tag, payload, {
43
45
  headers
44
46
  })), Stream.unwrap)) : Atom.make(get => get.result(client).pipe(Effect.flatMap(client => client(tag, payload, {
45
47
  headers
46
48
  }))));
49
+ if (timeToLive) {
50
+ atom = Duration.isFinite(timeToLive) ? Atom.setIdleTTL(atom, timeToLive) : Atom.keepAlive(atom);
51
+ }
47
52
  return reactivityKeys ? options.runtime.factory.withReactivity(reactivityKeys)(atom) : atom;
48
53
  });
49
54
  const query = (tag, payload, options) => queryFamily(new QueryKey({
50
55
  tag,
51
56
  payload: Data.struct(payload),
52
57
  headers: options?.headers ? Data.unsafeStruct(Headers.fromInput(options.headers)) : undefined,
53
- reactivityKeys: options?.reactivityKeys ? Data.array(options.reactivityKeys) : undefined
58
+ reactivityKeys: options?.reactivityKeys ? Data.array(options.reactivityKeys) : undefined,
59
+ timeToLive: options?.timeToLive ? Duration.decode(options.timeToLive) : undefined
54
60
  }));
55
61
  return {
56
62
  client,
@@ -60,10 +66,10 @@ export const make = (group, options) => {
60
66
  };
61
67
  class QueryKey extends Data.Class {
62
68
  [Equal.symbol](that) {
63
- return this.tag === that.tag && Equal.equals(this.payload, that.payload) && Equal.equals(this.headers, that.headers) && Equal.equals(this.reactivityKeys, that.reactivityKeys);
69
+ return this.tag === that.tag && Equal.equals(this.payload, that.payload) && Equal.equals(this.headers, that.headers) && Equal.equals(this.reactivityKeys, that.reactivityKeys) && Equal.equals(this.timeToLive, that.timeToLive);
64
70
  }
65
71
  [Hash.symbol]() {
66
- return pipe(Hash.string(this.tag), Hash.combine(Hash.hash(this.payload)), Hash.combine(Hash.hash(this.headers)), Hash.combine(Hash.hash(this.reactivityKeys)), Hash.cached(this));
72
+ return pipe(Hash.string(this.tag), Hash.combine(Hash.hash(this.payload)), Hash.combine(Hash.hash(this.headers)), Hash.combine(Hash.hash(this.reactivityKeys)), Hash.combine(Hash.hash(this.timeToLive)), Hash.cached(this));
67
73
  }
68
74
  }
69
75
  //# sourceMappingURL=AtomRpc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AtomRpc.js","names":["Reactivity","Headers","RpcClient","RpcSchema","Data","Effect","Equal","pipe","Hash","Stream","Atom","make","group","options","client","runtime","atom","flatten","mutation","family","tag","fn","fnUntraced","headers","payload","reactivityKeys","get","c","result","effect","queryFamily","rpc","requests","isStreamSchema","successSchema","pull","map","unwrap","flatMap","factory","withReactivity","query","QueryKey","struct","unsafeStruct","fromInput","undefined","array","Class","symbol","that","equals","string","combine","hash","cached"],"sources":["../../src/AtomRpc.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AtomRpc.js","names":["Reactivity","Headers","RpcClient","RpcSchema","Data","Duration","Effect","Equal","pipe","Hash","Stream","Atom","make","group","options","client","runtime","atom","flatten","mutation","family","tag","fn","fnUntraced","headers","payload","reactivityKeys","get","c","result","effect","queryFamily","timeToLive","rpc","requests","isStreamSchema","successSchema","pull","map","unwrap","flatMap","isFinite","setIdleTTL","keepAlive","factory","withReactivity","query","QueryKey","struct","unsafeStruct","fromInput","undefined","array","decode","Class","symbol","that","equals","string","combine","hash","cached"],"sources":["../../src/AtomRpc.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,UAAU,MAAM,iCAAiC;AAC7D,OAAO,KAAKC,OAAO,MAAM,0BAA0B;AAEnD,OAAO,KAAKC,SAAS,MAAM,uBAAuB;AAIlD,OAAO,KAAKC,SAAS,MAAM,uBAAuB;AAClD,OAAO,KAAKC,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,IAAI,MAAM,aAAa;AAEnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,IAAI,MAAM,WAAW;AAmEjC;;;;AAIA,OAAO,MAAMC,IAAI,GAAGA,CAClBC,KAA8B,EAC9BC,OASC,KAC0B;EAC3B,MAAMC,MAAM,GAAGD,OAAO,CAACE,OAAO,CAACC,IAAI,CACjCf,SAAS,CAACU,IAAI,CAACC,KAAK,EAAE;IACpB,GAAGC,OAAO;IACVI,OAAO,EAAE;GACV,CAAC,CACH;EAED,MAAMC,QAAQ,GAAGR,IAAI,CAACS,MAAM,CAA6BC,GAAQ,IAC/DP,OAAO,CAACE,OAAO,CAACM,EAAE,EAOd,CACFhB,MAAM,CAACiB,UAAU,CAAC,WAAU;IAAEC,OAAO;IAAEC,OAAO;IAAEC;EAAc,CAAE,EAAEC,GAAG;IACnE,MAAMC,CAAC,GAAG,OAAOD,GAAG,CAACE,MAAM,CAACd,MAAM,CAAC;IACnC,MAAMe,MAAM,GAAGF,CAAC,CAACP,GAAG,EAAEI,OAAO,EAAE;MAAED;IAAO,CAAS,CAAC;IAClD,OAAO,OAAOE,cAAc,GACxB1B,UAAU,CAACmB,QAAQ,CAACW,MAAM,EAAEJ,cAAc,CAAC,GAC3CI,MAAM;EACZ,CAAC,CAAC,CACH,CACF;EAED,MAAMC,WAAW,GAAGpB,IAAI,CAACS,MAAM,CAAC,CAAC;IAAEI,OAAO;IAAEC,OAAO;IAAEC,cAAc;IAAEL,GAAG;IAAEW;EAAU,CAAY,KAAI;IAClG,MAAMC,GAAG,GAAGpB,KAAK,CAACqB,QAAQ,CAACP,GAAG,CAACN,GAAG,CAA6B;IAC/D,IAAIJ,IAAI,GAAGd,SAAS,CAACgC,cAAc,CAACF,GAAG,CAACG,aAAa,CAAC,GAClDzB,IAAI,CAAC0B,IAAI,CAAEV,GAAG,IACdA,GAAG,CAACE,MAAM,CAACd,MAAM,CAAC,CAACP,IAAI,CACrBF,MAAM,CAACgC,GAAG,CAAEvB,MAAM,IAAKA,MAAM,CAACM,GAAG,EAAEI,OAAO,EAAE;MAAED;IAAO,CAAS,CAAC,CAAC,EAChEd,MAAM,CAAC6B,MAAM,CACd,CACF,GACC5B,IAAI,CAACC,IAAI,CAAEe,GAAG,IACdA,GAAG,CACAE,MAAM,CAACd,MAAM,CAAC,CACdP,IAAI,CACHF,MAAM,CAACkC,OAAO,CAAEzB,MAAM,IAAKA,MAAM,CAACM,GAAG,EAAEI,OAAO,EAAE;MAAED;IAAO,CAAS,CAAC,CAAC,CACrE,CACJ;IACH,IAAIQ,UAAU,EAAE;MACdf,IAAI,GAAGZ,QAAQ,CAACoC,QAAQ,CAACT,UAAU,CAAC,GAAGrB,IAAI,CAAC+B,UAAU,CAACzB,IAAI,EAAEe,UAAU,CAAC,GAAGrB,IAAI,CAACgC,SAAS,CAAC1B,IAAI,CAAC;IACjG;IACA,OAAOS,cAAc,GAAGZ,OAAO,CAACE,OAAO,CAAC4B,OAAO,CAACC,cAAc,CAACnB,cAAc,CAAC,CAACT,IAAI,CAAC,GAAGA,IAAI;EAC7F,CAAC,CAAC;EAEF,MAAM6B,KAAK,GAAGA,CACZzB,GAAQ,EACRI,OAA0D,EAC1DX,OAIC,KAEDiB,WAAW,CACT,IAAIgB,QAAQ,CAAC;IACX1B,GAAG;IACHI,OAAO,EAAErB,IAAI,CAAC4C,MAAM,CAACvB,OAAO,CAAC;IAC7BD,OAAO,EAAEV,OAAO,EAAEU,OAAO,GACrBpB,IAAI,CAAC6C,YAAY,CAAChD,OAAO,CAACiD,SAAS,CAACpC,OAAO,CAACU,OAAO,CAAC,CAAC,GACrD2B,SAAS;IACbzB,cAAc,EAAEZ,OAAO,EAAEY,cAAc,GACnCtB,IAAI,CAACgD,KAAK,CAACtC,OAAO,CAACY,cAAc,CAAC,GAClCyB,SAAS;IACbnB,UAAU,EAAElB,OAAO,EAAEkB,UAAU,GAAG3B,QAAQ,CAACgD,MAAM,CAACvC,OAAO,CAACkB,UAAU,CAAC,GAAGmB;GACzE,CAAC,CACH;EAEH,OAAO;IACLpC,MAAM;IACNI,QAAQ;IACR2B;GACM;AACV,CAAC;AAED,MAAMC,QAAS,SAAQ3C,IAAI,CAACkD,KAM1B;EACA,CAAC/C,KAAK,CAACgD,MAAM,EAAEC,IAAc;IAC3B,OACE,IAAI,CAACnC,GAAG,KAAKmC,IAAI,CAACnC,GAAG,IACrBd,KAAK,CAACkD,MAAM,CAAC,IAAI,CAAChC,OAAO,EAAE+B,IAAI,CAAC/B,OAAO,CAAC,IACxClB,KAAK,CAACkD,MAAM,CAAC,IAAI,CAACjC,OAAO,EAAEgC,IAAI,CAAChC,OAAO,CAAC,IACxCjB,KAAK,CAACkD,MAAM,CAAC,IAAI,CAAC/B,cAAc,EAAE8B,IAAI,CAAC9B,cAAc,CAAC,IACtDnB,KAAK,CAACkD,MAAM,CAAC,IAAI,CAACzB,UAAU,EAAEwB,IAAI,CAACxB,UAAU,CAAC;EAElD;EACA,CAACvB,IAAI,CAAC8C,MAAM,IAAC;IACX,OAAO/C,IAAI,CACTC,IAAI,CAACiD,MAAM,CAAC,IAAI,CAACrC,GAAG,CAAC,EACrBZ,IAAI,CAACkD,OAAO,CAAClD,IAAI,CAACmD,IAAI,CAAC,IAAI,CAACnC,OAAO,CAAC,CAAC,EACrChB,IAAI,CAACkD,OAAO,CAAClD,IAAI,CAACmD,IAAI,CAAC,IAAI,CAACpC,OAAO,CAAC,CAAC,EACrCf,IAAI,CAACkD,OAAO,CAAClD,IAAI,CAACmD,IAAI,CAAC,IAAI,CAAClC,cAAc,CAAC,CAAC,EAC5CjB,IAAI,CAACkD,OAAO,CAAClD,IAAI,CAACmD,IAAI,CAAC,IAAI,CAAC5B,UAAU,CAAC,CAAC,EACxCvB,IAAI,CAACoD,MAAM,CAAC,IAAI,CAAC,CAClB;EACH","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-atom/atom",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Reactive toolkit for Effect",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/AtomRpc.ts CHANGED
@@ -10,6 +10,7 @@ import type * as RpcGroup from "@effect/rpc/RpcGroup"
10
10
  import type { RequestId } from "@effect/rpc/RpcMessage"
11
11
  import * as RpcSchema from "@effect/rpc/RpcSchema"
12
12
  import * as Data from "effect/Data"
13
+ import * as Duration from "effect/Duration"
13
14
  import * as Effect from "effect/Effect"
14
15
  import * as Equal from "effect/Equal"
15
16
  import { pipe } from "effect/Function"
@@ -59,6 +60,7 @@ export interface AtomRpcClient<Rpcs extends Rpc.Any, E> {
59
60
  | ReadonlyArray<unknown>
60
61
  | ReadonlyRecord<string, ReadonlyArray<unknown>>
61
62
  | undefined
63
+ readonly timeToLive?: Duration.DurationInput | undefined
62
64
  }
63
65
  ) => Rpc.ExtractTag<Rpcs, Tag> extends Rpc.Rpc<
64
66
  infer _Tag,
@@ -125,9 +127,9 @@ export const make = <Rpcs extends Rpc.Any, ER>(
125
127
  )
126
128
  )
127
129
 
128
- const queryFamily = Atom.family(({ headers, payload, reactivityKeys, tag }: QueryKey) => {
130
+ const queryFamily = Atom.family(({ headers, payload, reactivityKeys, tag, timeToLive }: QueryKey) => {
129
131
  const rpc = group.requests.get(tag)! as any as Rpc.AnyWithProps
130
- const atom = RpcSchema.isStreamSchema(rpc.successSchema)
132
+ let atom = RpcSchema.isStreamSchema(rpc.successSchema)
131
133
  ? Atom.pull((get) =>
132
134
  get.result(client).pipe(
133
135
  Effect.map((client) => client(tag, payload, { headers } as any)),
@@ -141,6 +143,9 @@ export const make = <Rpcs extends Rpc.Any, ER>(
141
143
  Effect.flatMap((client) => client(tag, payload, { headers } as any))
142
144
  )
143
145
  )
146
+ if (timeToLive) {
147
+ atom = Duration.isFinite(timeToLive) ? Atom.setIdleTTL(atom, timeToLive) : Atom.keepAlive(atom)
148
+ }
144
149
  return reactivityKeys ? options.runtime.factory.withReactivity(reactivityKeys)(atom) : atom
145
150
  })
146
151
 
@@ -150,6 +155,7 @@ export const make = <Rpcs extends Rpc.Any, ER>(
150
155
  options?: {
151
156
  readonly headers?: Headers.Input | undefined
152
157
  readonly reactivityKeys?: ReadonlyArray<unknown> | undefined
158
+ readonly timeToLive?: Duration.DurationInput | undefined
153
159
  }
154
160
  ) =>
155
161
  queryFamily(
@@ -161,7 +167,8 @@ export const make = <Rpcs extends Rpc.Any, ER>(
161
167
  : undefined,
162
168
  reactivityKeys: options?.reactivityKeys
163
169
  ? Data.array(options.reactivityKeys)
164
- : undefined
170
+ : undefined,
171
+ timeToLive: options?.timeToLive ? Duration.decode(options.timeToLive) : undefined
165
172
  })
166
173
  )
167
174
 
@@ -177,13 +184,15 @@ class QueryKey extends Data.Class<{
177
184
  payload: any
178
185
  headers?: Headers.Headers | undefined
179
186
  reactivityKeys?: ReadonlyArray<unknown> | undefined
187
+ timeToLive?: Duration.Duration | undefined
180
188
  }> {
181
189
  [Equal.symbol](that: QueryKey) {
182
190
  return (
183
191
  this.tag === that.tag &&
184
192
  Equal.equals(this.payload, that.payload) &&
185
193
  Equal.equals(this.headers, that.headers) &&
186
- Equal.equals(this.reactivityKeys, that.reactivityKeys)
194
+ Equal.equals(this.reactivityKeys, that.reactivityKeys) &&
195
+ Equal.equals(this.timeToLive, that.timeToLive)
187
196
  )
188
197
  }
189
198
  [Hash.symbol]() {
@@ -192,6 +201,7 @@ class QueryKey extends Data.Class<{
192
201
  Hash.combine(Hash.hash(this.payload)),
193
202
  Hash.combine(Hash.hash(this.headers)),
194
203
  Hash.combine(Hash.hash(this.reactivityKeys)),
204
+ Hash.combine(Hash.hash(this.timeToLive)),
195
205
  Hash.cached(this)
196
206
  )
197
207
  }