@effect-atom/atom 0.1.3 → 0.1.5
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/dist/cjs/AtomRpc.js +11 -5
- package/dist/cjs/AtomRpc.js.map +1 -1
- package/dist/dts/AtomRpc.d.ts +3 -1
- package/dist/dts/AtomRpc.d.ts.map +1 -1
- package/dist/esm/AtomRpc.js +11 -5
- package/dist/esm/AtomRpc.js.map +1 -1
- package/package.json +1 -1
- package/src/AtomRpc.ts +16 -6
package/dist/cjs/AtomRpc.js
CHANGED
|
@@ -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
|
-
|
|
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
|
package/dist/cjs/AtomRpc.js.map
CHANGED
|
@@ -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":";;;;;;AAGA,IAAAA,UAAA,gBAAAC,uBAAA,cAAAC,OAAA;AACA,IAAAC,OAAA,gBAAAF,uBAAA,cAAAC,OAAA;AAEA,IAAAE,SAAA,gBAAAH,uBAAA,cAAAC,OAAA;AAIA,IAAAG,SAAA,gBAAAJ,uBAAA,cAAAC,OAAA;AACA,IAAAI,IAAA,gBAAAL,uBAAA,cAAAC,OAAA;AACA,IAAAK,
|
|
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":[]}
|
package/dist/dts/AtomRpc.d.ts
CHANGED
|
@@ -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,7 +23,8 @@ 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;
|
|
25
|
-
|
|
26
|
+
readonly timeToLive?: Duration.DurationInput | undefined;
|
|
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["Type"], _E["Type"] | _Error["Type"] | E | _Middleware["failure"]["Type"]>, void> : Atom.Atom<Result.Result<_Success["Type"], _Error["Type"] | E | _Middleware["failure"]["Type"]>> : never;
|
|
26
28
|
}
|
|
27
29
|
/**
|
|
28
30
|
* @since 1.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AtomRpc.d.ts","sourceRoot":"","sources":["../../src/AtomRpc.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"AtomRpc.d.ts","sourceRoot":"","sources":["../../src/AtomRpc.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/AtomRpc.js
CHANGED
|
@@ -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
|
-
|
|
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
|
package/dist/esm/AtomRpc.js.map
CHANGED
|
@@ -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":"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,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;
|
|
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":"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","ignoreList":[]}
|
package/package.json
CHANGED
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,
|
|
@@ -68,8 +70,8 @@ export interface AtomRpcClient<Rpcs extends Rpc.Any, E> {
|
|
|
68
70
|
infer _Middleware
|
|
69
71
|
> ? [_Success] extends [RpcSchema.Stream<infer _A, infer _E>] ? Atom.Writable<
|
|
70
72
|
Atom.PullResult<
|
|
71
|
-
_A,
|
|
72
|
-
_E | _Error["Type"] | E | _Middleware["failure"]["Type"]
|
|
73
|
+
_A["Type"],
|
|
74
|
+
_E["Type"] | _Error["Type"] | E | _Middleware["failure"]["Type"]
|
|
73
75
|
>,
|
|
74
76
|
void
|
|
75
77
|
>
|
|
@@ -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
|
-
|
|
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
|
}
|