@effect-atom/atom 0.1.8 → 0.1.9
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 +20 -20
- package/dist/cjs/AtomRpc.js.map +1 -1
- package/dist/dts/AtomRpc.d.ts +18 -7
- package/dist/dts/AtomRpc.d.ts.map +1 -1
- package/dist/esm/AtomRpc.js +18 -18
- package/dist/esm/AtomRpc.js.map +1 -1
- package/package.json +1 -1
- package/src/AtomRpc.ts +72 -49
package/dist/cjs/AtomRpc.js
CHANGED
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.Tag = void 0;
|
|
7
7
|
var Reactivity = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect/experimental/Reactivity"));
|
|
8
8
|
var Headers = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect/platform/Headers"));
|
|
9
9
|
var RpcClient = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect/rpc/RpcClient"));
|
|
10
10
|
var RpcSchema = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect/rpc/RpcSchema"));
|
|
11
|
+
var Context = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Context"));
|
|
11
12
|
var Data = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Data"));
|
|
12
13
|
var Duration = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Duration"));
|
|
13
14
|
var Effect = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Effect"));
|
|
14
15
|
var Equal = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Equal"));
|
|
15
16
|
var _Function = /*#__PURE__*/require("effect/Function");
|
|
16
17
|
var Hash = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Hash"));
|
|
18
|
+
var Layer = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Layer"));
|
|
17
19
|
var Stream = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Stream"));
|
|
18
20
|
var Atom = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./Atom.js"));
|
|
19
21
|
function _interopRequireWildcard(e, t) {
|
|
@@ -44,18 +46,20 @@ function _interopRequireWildcard(e, t) {
|
|
|
44
46
|
* @since 1.0.0
|
|
45
47
|
* @category Constructors
|
|
46
48
|
*/
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
+
const Tag = () => (id, options) => {
|
|
50
|
+
const self = Context.Tag(id)();
|
|
51
|
+
self.layer = Layer.scoped(self, RpcClient.make(options.group, {
|
|
49
52
|
...options,
|
|
50
53
|
flatten: true
|
|
51
|
-
}));
|
|
52
|
-
|
|
54
|
+
})).pipe(Layer.provide(options.protocol));
|
|
55
|
+
self.runtime = Atom.runtime(self.layer);
|
|
56
|
+
self.mutation = Atom.family(tag => self.runtime.fn()(Effect.fnUntraced(function* ({
|
|
53
57
|
headers,
|
|
54
58
|
payload,
|
|
55
59
|
reactivityKeys
|
|
56
|
-
}
|
|
57
|
-
const
|
|
58
|
-
const effect =
|
|
60
|
+
}) {
|
|
61
|
+
const client = yield* self;
|
|
62
|
+
const effect = client(tag, payload, {
|
|
59
63
|
headers
|
|
60
64
|
});
|
|
61
65
|
return yield* reactivityKeys ? Reactivity.mutation(effect, reactivityKeys) : effect;
|
|
@@ -67,31 +71,27 @@ const make = (group, options) => {
|
|
|
67
71
|
tag,
|
|
68
72
|
timeToLive
|
|
69
73
|
}) => {
|
|
70
|
-
const rpc = group.requests.get(tag);
|
|
71
|
-
let atom = RpcSchema.isStreamSchema(rpc.successSchema) ?
|
|
74
|
+
const rpc = options.group.requests.get(tag);
|
|
75
|
+
let atom = RpcSchema.isStreamSchema(rpc.successSchema) ? self.runtime.pull(self.pipe(Effect.map(client => client(tag, payload, {
|
|
72
76
|
headers
|
|
73
|
-
})), Stream.unwrap)) :
|
|
77
|
+
})), Stream.unwrap)) : self.runtime.atom(Effect.flatMap(self, client => client(tag, payload, {
|
|
74
78
|
headers
|
|
75
|
-
})))
|
|
79
|
+
})));
|
|
76
80
|
if (timeToLive) {
|
|
77
81
|
atom = Duration.isFinite(timeToLive) ? Atom.setIdleTTL(atom, timeToLive) : Atom.keepAlive(atom);
|
|
78
82
|
}
|
|
79
|
-
return reactivityKeys ?
|
|
83
|
+
return reactivityKeys ? self.runtime.factory.withReactivity(reactivityKeys)(atom) : atom;
|
|
80
84
|
});
|
|
81
|
-
|
|
85
|
+
self.query = (tag, payload, options) => queryFamily(new QueryKey({
|
|
82
86
|
tag,
|
|
83
87
|
payload: Data.struct(payload),
|
|
84
88
|
headers: options?.headers ? Data.unsafeStruct(Headers.fromInput(options.headers)) : undefined,
|
|
85
89
|
reactivityKeys: options?.reactivityKeys ? Data.array(options.reactivityKeys) : undefined,
|
|
86
90
|
timeToLive: options?.timeToLive ? Duration.decode(options.timeToLive) : undefined
|
|
87
91
|
}));
|
|
88
|
-
return
|
|
89
|
-
client,
|
|
90
|
-
mutation,
|
|
91
|
-
query
|
|
92
|
-
};
|
|
92
|
+
return self;
|
|
93
93
|
};
|
|
94
|
-
exports.
|
|
94
|
+
exports.Tag = Tag;
|
|
95
95
|
class QueryKey extends Data.Class {
|
|
96
96
|
[Equal.symbol](that) {
|
|
97
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);
|
package/dist/cjs/AtomRpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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","
|
|
1
|
+
{"version":3,"file":"AtomRpc.js","names":["Reactivity","_interopRequireWildcard","require","Headers","RpcClient","RpcSchema","Context","Data","Duration","Effect","Equal","_Function","Hash","Layer","Stream","Atom","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Tag","id","options","self","layer","scoped","make","group","flatten","pipe","provide","protocol","runtime","mutation","family","tag","fn","fnUntraced","headers","payload","reactivityKeys","client","effect","queryFamily","timeToLive","rpc","requests","atom","isStreamSchema","successSchema","pull","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,36 +5,47 @@ 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 Context from "effect/Context";
|
|
8
9
|
import * as Duration from "effect/Duration";
|
|
10
|
+
import * as Layer from "effect/Layer";
|
|
9
11
|
import type { ReadonlyRecord } from "effect/Record";
|
|
12
|
+
import type { NoInfer } from "effect/Types";
|
|
10
13
|
import * as Atom from "./Atom.js";
|
|
11
14
|
import type * as Result from "./Result.js";
|
|
12
15
|
/**
|
|
13
16
|
* @since 1.0.0
|
|
14
17
|
* @category Models
|
|
15
18
|
*/
|
|
16
|
-
export interface AtomRpcClient<Rpcs extends Rpc.Any, E> {
|
|
17
|
-
|
|
19
|
+
export interface AtomRpcClient<Self, Id extends string, Rpcs extends Rpc.Any, E> extends Context.Tag<Self, RpcClient.RpcClient.Flat<Rpcs, RpcClientError>> {
|
|
20
|
+
new (_: never): Context.TagClassShape<Id, RpcClient.RpcClient.Flat<Rpcs, RpcClientError>>;
|
|
21
|
+
readonly layer: Layer.Layer<Self, E>;
|
|
22
|
+
readonly runtime: Atom.AtomRuntime<Self, E>;
|
|
18
23
|
readonly mutation: <Tag extends Rpc.Tag<Rpcs>>(arg: Tag) => 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>] ? never : Atom.AtomResultFn<{
|
|
19
24
|
readonly payload: Rpc.PayloadConstructor<Rpc.ExtractTag<Rpcs, Tag>>;
|
|
20
|
-
readonly reactivityKeys?: ReadonlyRecord<string, ReadonlyArray<unknown>> | undefined;
|
|
25
|
+
readonly reactivityKeys?: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>> | undefined;
|
|
21
26
|
readonly headers?: Headers.Input | undefined;
|
|
22
27
|
}, _Success["Type"], _Error["Type"] | E | _Middleware["failure"]["Type"]> : never;
|
|
23
28
|
readonly query: <Tag extends Rpc.Tag<Rpcs>>(tag: Tag, payload: Rpc.PayloadConstructor<Rpc.ExtractTag<Rpcs, Tag>>, options?: {
|
|
24
29
|
readonly headers?: Headers.Input | undefined;
|
|
25
|
-
readonly reactivityKeys?: ReadonlyArray<unknown> |
|
|
30
|
+
readonly reactivityKeys?: ReadonlyArray<unknown> | undefined;
|
|
26
31
|
readonly timeToLive?: Duration.DurationInput | undefined;
|
|
27
32
|
}) => 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;
|
|
28
33
|
}
|
|
34
|
+
declare global {
|
|
35
|
+
interface ErrorConstructor {
|
|
36
|
+
stackTraceLimit: number;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
29
39
|
/**
|
|
30
40
|
* @since 1.0.0
|
|
31
41
|
* @category Constructors
|
|
32
42
|
*/
|
|
33
|
-
export declare const
|
|
34
|
-
readonly
|
|
43
|
+
export declare const Tag: <Self>() => <const Id extends string, Rpcs extends Rpc.Any, ER>(id: Id, options: {
|
|
44
|
+
readonly group: RpcGroup.RpcGroup<Rpcs>;
|
|
45
|
+
readonly protocol: Layer.Layer<RpcClient.Protocol | Rpc.MiddlewareClient<NoInfer<Rpcs>> | Rpc.Context<NoInfer<Rpcs>>, ER>;
|
|
35
46
|
readonly spanPrefix?: string | undefined;
|
|
36
47
|
readonly spanAttributes?: Record<string, unknown> | undefined;
|
|
37
48
|
readonly generateRequestId?: (() => RequestId) | undefined;
|
|
38
49
|
readonly disableTracing?: boolean | undefined;
|
|
39
|
-
}) => AtomRpcClient<Rpcs, ER>;
|
|
50
|
+
}) => AtomRpcClient<Self, Id, Rpcs, ER>;
|
|
40
51
|
//# sourceMappingURL=AtomRpc.d.ts.map
|
|
@@ -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
|
@@ -5,30 +5,34 @@ import * as Reactivity from "@effect/experimental/Reactivity";
|
|
|
5
5
|
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
|
+
import * as Context from "effect/Context";
|
|
8
9
|
import * as Data from "effect/Data";
|
|
9
10
|
import * as Duration from "effect/Duration";
|
|
10
11
|
import * as Effect from "effect/Effect";
|
|
11
12
|
import * as Equal from "effect/Equal";
|
|
12
13
|
import { pipe } from "effect/Function";
|
|
13
14
|
import * as Hash from "effect/Hash";
|
|
15
|
+
import * as Layer from "effect/Layer";
|
|
14
16
|
import * as Stream from "effect/Stream";
|
|
15
17
|
import * as Atom from "./Atom.js";
|
|
16
18
|
/**
|
|
17
19
|
* @since 1.0.0
|
|
18
20
|
* @category Constructors
|
|
19
21
|
*/
|
|
20
|
-
export const
|
|
21
|
-
const
|
|
22
|
+
export const Tag = () => (id, options) => {
|
|
23
|
+
const self = Context.Tag(id)();
|
|
24
|
+
self.layer = Layer.scoped(self, RpcClient.make(options.group, {
|
|
22
25
|
...options,
|
|
23
26
|
flatten: true
|
|
24
|
-
}));
|
|
25
|
-
|
|
27
|
+
})).pipe(Layer.provide(options.protocol));
|
|
28
|
+
self.runtime = Atom.runtime(self.layer);
|
|
29
|
+
self.mutation = Atom.family(tag => self.runtime.fn()(Effect.fnUntraced(function* ({
|
|
26
30
|
headers,
|
|
27
31
|
payload,
|
|
28
32
|
reactivityKeys
|
|
29
|
-
}
|
|
30
|
-
const
|
|
31
|
-
const effect =
|
|
33
|
+
}) {
|
|
34
|
+
const client = yield* self;
|
|
35
|
+
const effect = client(tag, payload, {
|
|
32
36
|
headers
|
|
33
37
|
});
|
|
34
38
|
return yield* reactivityKeys ? Reactivity.mutation(effect, reactivityKeys) : effect;
|
|
@@ -40,29 +44,25 @@ export const make = (group, options) => {
|
|
|
40
44
|
tag,
|
|
41
45
|
timeToLive
|
|
42
46
|
}) => {
|
|
43
|
-
const rpc = group.requests.get(tag);
|
|
44
|
-
let atom = RpcSchema.isStreamSchema(rpc.successSchema) ?
|
|
47
|
+
const rpc = options.group.requests.get(tag);
|
|
48
|
+
let atom = RpcSchema.isStreamSchema(rpc.successSchema) ? self.runtime.pull(self.pipe(Effect.map(client => client(tag, payload, {
|
|
45
49
|
headers
|
|
46
|
-
})), Stream.unwrap)) :
|
|
50
|
+
})), Stream.unwrap)) : self.runtime.atom(Effect.flatMap(self, client => client(tag, payload, {
|
|
47
51
|
headers
|
|
48
|
-
})))
|
|
52
|
+
})));
|
|
49
53
|
if (timeToLive) {
|
|
50
54
|
atom = Duration.isFinite(timeToLive) ? Atom.setIdleTTL(atom, timeToLive) : Atom.keepAlive(atom);
|
|
51
55
|
}
|
|
52
|
-
return reactivityKeys ?
|
|
56
|
+
return reactivityKeys ? self.runtime.factory.withReactivity(reactivityKeys)(atom) : atom;
|
|
53
57
|
});
|
|
54
|
-
|
|
58
|
+
self.query = (tag, payload, options) => queryFamily(new QueryKey({
|
|
55
59
|
tag,
|
|
56
60
|
payload: Data.struct(payload),
|
|
57
61
|
headers: options?.headers ? Data.unsafeStruct(Headers.fromInput(options.headers)) : undefined,
|
|
58
62
|
reactivityKeys: options?.reactivityKeys ? Data.array(options.reactivityKeys) : undefined,
|
|
59
63
|
timeToLive: options?.timeToLive ? Duration.decode(options.timeToLive) : undefined
|
|
60
64
|
}));
|
|
61
|
-
return
|
|
62
|
-
client,
|
|
63
|
-
mutation,
|
|
64
|
-
query
|
|
65
|
-
};
|
|
65
|
+
return self;
|
|
66
66
|
};
|
|
67
67
|
class QueryKey extends Data.Class {
|
|
68
68
|
[Equal.symbol](that) {
|
package/dist/esm/AtomRpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AtomRpc.js","names":["Reactivity","Headers","RpcClient","RpcSchema","Data","Duration","Effect","Equal","pipe","Hash","Stream","Atom","
|
|
1
|
+
{"version":3,"file":"AtomRpc.js","names":["Reactivity","Headers","RpcClient","RpcSchema","Context","Data","Duration","Effect","Equal","pipe","Hash","Layer","Stream","Atom","Tag","id","options","self","layer","scoped","make","group","flatten","provide","protocol","runtime","mutation","family","tag","fn","fnUntraced","headers","payload","reactivityKeys","client","effect","queryFamily","timeToLive","rpc","requests","get","atom","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
|
@@ -9,14 +9,17 @@ import type { RpcClientError } from "@effect/rpc/RpcClientError"
|
|
|
9
9
|
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
|
+
import * as Context from "effect/Context"
|
|
12
13
|
import * as Data from "effect/Data"
|
|
13
14
|
import * as Duration from "effect/Duration"
|
|
14
15
|
import * as Effect from "effect/Effect"
|
|
15
16
|
import * as Equal from "effect/Equal"
|
|
16
17
|
import { pipe } from "effect/Function"
|
|
17
18
|
import * as Hash from "effect/Hash"
|
|
19
|
+
import * as Layer from "effect/Layer"
|
|
18
20
|
import type { ReadonlyRecord } from "effect/Record"
|
|
19
21
|
import * as Stream from "effect/Stream"
|
|
22
|
+
import type { Mutable, NoInfer } from "effect/Types"
|
|
20
23
|
import * as Atom from "./Atom.js"
|
|
21
24
|
import type * as Result from "./Result.js"
|
|
22
25
|
|
|
@@ -24,10 +27,15 @@ import type * as Result from "./Result.js"
|
|
|
24
27
|
* @since 1.0.0
|
|
25
28
|
* @category Models
|
|
26
29
|
*/
|
|
27
|
-
export interface AtomRpcClient<Rpcs extends Rpc.Any, E>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
export interface AtomRpcClient<Self, Id extends string, Rpcs extends Rpc.Any, E>
|
|
31
|
+
extends Context.Tag<Self, RpcClient.RpcClient.Flat<Rpcs, RpcClientError>>
|
|
32
|
+
{
|
|
33
|
+
new(
|
|
34
|
+
_: never
|
|
35
|
+
): Context.TagClassShape<Id, RpcClient.RpcClient.Flat<Rpcs, RpcClientError>>
|
|
36
|
+
|
|
37
|
+
readonly layer: Layer.Layer<Self, E>
|
|
38
|
+
readonly runtime: Atom.AtomRuntime<Self, E>
|
|
31
39
|
|
|
32
40
|
readonly mutation: <Tag extends Rpc.Tag<Rpcs>>(
|
|
33
41
|
arg: Tag
|
|
@@ -42,6 +50,7 @@ export interface AtomRpcClient<Rpcs extends Rpc.Any, E> {
|
|
|
42
50
|
{
|
|
43
51
|
readonly payload: Rpc.PayloadConstructor<Rpc.ExtractTag<Rpcs, Tag>>
|
|
44
52
|
readonly reactivityKeys?:
|
|
53
|
+
| ReadonlyArray<unknown>
|
|
45
54
|
| ReadonlyRecord<string, ReadonlyArray<unknown>>
|
|
46
55
|
| undefined
|
|
47
56
|
readonly headers?: Headers.Input | undefined
|
|
@@ -56,10 +65,7 @@ export interface AtomRpcClient<Rpcs extends Rpc.Any, E> {
|
|
|
56
65
|
payload: Rpc.PayloadConstructor<Rpc.ExtractTag<Rpcs, Tag>>,
|
|
57
66
|
options?: {
|
|
58
67
|
readonly headers?: Headers.Input | undefined
|
|
59
|
-
readonly reactivityKeys?:
|
|
60
|
-
| ReadonlyArray<unknown>
|
|
61
|
-
| ReadonlyRecord<string, ReadonlyArray<unknown>>
|
|
62
|
-
| undefined
|
|
68
|
+
readonly reactivityKeys?: ReadonlyArray<unknown> | undefined
|
|
63
69
|
readonly timeToLive?: Duration.DurationInput | undefined
|
|
64
70
|
}
|
|
65
71
|
) => Rpc.ExtractTag<Rpcs, Tag> extends Rpc.Rpc<
|
|
@@ -84,15 +90,25 @@ export interface AtomRpcClient<Rpcs extends Rpc.Any, E> {
|
|
|
84
90
|
: never
|
|
85
91
|
}
|
|
86
92
|
|
|
93
|
+
declare global {
|
|
94
|
+
interface ErrorConstructor {
|
|
95
|
+
stackTraceLimit: number
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
87
99
|
/**
|
|
88
100
|
* @since 1.0.0
|
|
89
101
|
* @category Constructors
|
|
90
102
|
*/
|
|
91
|
-
export const
|
|
92
|
-
|
|
103
|
+
export const Tag = <Self>() =>
|
|
104
|
+
<const Id extends string, Rpcs extends Rpc.Any, ER>(
|
|
105
|
+
id: Id,
|
|
93
106
|
options: {
|
|
94
|
-
readonly
|
|
95
|
-
|
|
107
|
+
readonly group: RpcGroup.RpcGroup<Rpcs>
|
|
108
|
+
readonly protocol: Layer.Layer<
|
|
109
|
+
| RpcClient.Protocol
|
|
110
|
+
| Rpc.MiddlewareClient<NoInfer<Rpcs>>
|
|
111
|
+
| Rpc.Context<NoInfer<Rpcs>>,
|
|
96
112
|
ER
|
|
97
113
|
>
|
|
98
114
|
readonly spanPrefix?: string | undefined
|
|
@@ -100,16 +116,23 @@ export const make = <Rpcs extends Rpc.Any, ER>(
|
|
|
100
116
|
readonly generateRequestId?: (() => RequestId) | undefined
|
|
101
117
|
readonly disableTracing?: boolean | undefined
|
|
102
118
|
}
|
|
103
|
-
): AtomRpcClient<Rpcs, ER> => {
|
|
104
|
-
const
|
|
105
|
-
|
|
119
|
+
): AtomRpcClient<Self, Id, Rpcs, ER> => {
|
|
120
|
+
const self: Mutable<AtomRpcClient<Self, Id, Rpcs, ER>> = Context.Tag(id)<
|
|
121
|
+
Self,
|
|
122
|
+
RpcClient.RpcClient.Flat<Rpcs, RpcClientError>
|
|
123
|
+
>() as any
|
|
124
|
+
|
|
125
|
+
self.layer = Layer.scoped(
|
|
126
|
+
self,
|
|
127
|
+
RpcClient.make(options.group, {
|
|
106
128
|
...options,
|
|
107
129
|
flatten: true
|
|
108
130
|
})
|
|
109
|
-
)
|
|
131
|
+
).pipe(Layer.provide(options.protocol)) as Layer.Layer<Self, ER>
|
|
132
|
+
self.runtime = Atom.runtime(self.layer)
|
|
110
133
|
|
|
111
|
-
|
|
112
|
-
|
|
134
|
+
self.mutation = Atom.family(<Tag extends Rpc.Tag<Rpcs>>(tag: Tag) =>
|
|
135
|
+
self.runtime.fn<{
|
|
113
136
|
readonly payload: Rpc.PayloadConstructor<Rpc.ExtractTag<Rpcs, Tag>>
|
|
114
137
|
readonly reactivityKeys?:
|
|
115
138
|
| ReadonlyArray<unknown>
|
|
@@ -117,39 +140,41 @@ export const make = <Rpcs extends Rpc.Any, ER>(
|
|
|
117
140
|
| undefined
|
|
118
141
|
readonly headers?: Headers.Input | undefined
|
|
119
142
|
}>()(
|
|
120
|
-
Effect.fnUntraced(function*({ headers, payload, reactivityKeys }
|
|
121
|
-
const
|
|
122
|
-
const effect =
|
|
143
|
+
Effect.fnUntraced(function*({ headers, payload, reactivityKeys }) {
|
|
144
|
+
const client = yield* self
|
|
145
|
+
const effect = client(tag, payload, { headers } as any)
|
|
123
146
|
return yield* reactivityKeys
|
|
124
147
|
? Reactivity.mutation(effect, reactivityKeys)
|
|
125
148
|
: effect
|
|
126
149
|
})
|
|
127
150
|
)
|
|
128
|
-
)
|
|
151
|
+
) as any
|
|
129
152
|
|
|
130
|
-
const queryFamily = Atom.family(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
)
|
|
139
|
-
: Atom.make((get) =>
|
|
140
|
-
get
|
|
141
|
-
.result(client)
|
|
142
|
-
.pipe(
|
|
143
|
-
Effect.flatMap((client) => client(tag, payload, { headers } as any))
|
|
153
|
+
const queryFamily = Atom.family(
|
|
154
|
+
({ headers, payload, reactivityKeys, tag, timeToLive }: QueryKey) => {
|
|
155
|
+
const rpc = options.group.requests.get(tag)! as any as Rpc.AnyWithProps
|
|
156
|
+
let atom = RpcSchema.isStreamSchema(rpc.successSchema)
|
|
157
|
+
? self.runtime.pull(
|
|
158
|
+
self.pipe(
|
|
159
|
+
Effect.map((client) => client(tag, payload, { headers } as any)),
|
|
160
|
+
Stream.unwrap
|
|
144
161
|
)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
162
|
+
)
|
|
163
|
+
: self.runtime.atom(
|
|
164
|
+
Effect.flatMap(self, (client) => client(tag, payload, { headers } as any))
|
|
165
|
+
)
|
|
166
|
+
if (timeToLive) {
|
|
167
|
+
atom = Duration.isFinite(timeToLive)
|
|
168
|
+
? Atom.setIdleTTL(atom, timeToLive)
|
|
169
|
+
: Atom.keepAlive(atom)
|
|
170
|
+
}
|
|
171
|
+
return reactivityKeys
|
|
172
|
+
? self.runtime.factory.withReactivity(reactivityKeys)(atom)
|
|
173
|
+
: atom
|
|
148
174
|
}
|
|
149
|
-
|
|
150
|
-
})
|
|
175
|
+
)
|
|
151
176
|
|
|
152
|
-
|
|
177
|
+
self.query = <Tag extends Rpc.Tag<Rpcs>>(
|
|
153
178
|
tag: Tag,
|
|
154
179
|
payload: Rpc.PayloadConstructor<Rpc.ExtractTag<Rpcs, Tag>>,
|
|
155
180
|
options?: {
|
|
@@ -168,15 +193,13 @@ export const make = <Rpcs extends Rpc.Any, ER>(
|
|
|
168
193
|
reactivityKeys: options?.reactivityKeys
|
|
169
194
|
? Data.array(options.reactivityKeys)
|
|
170
195
|
: undefined,
|
|
171
|
-
timeToLive: options?.timeToLive
|
|
196
|
+
timeToLive: options?.timeToLive
|
|
197
|
+
? Duration.decode(options.timeToLive)
|
|
198
|
+
: undefined
|
|
172
199
|
})
|
|
173
|
-
)
|
|
200
|
+
) as any
|
|
174
201
|
|
|
175
|
-
return
|
|
176
|
-
client,
|
|
177
|
-
mutation,
|
|
178
|
-
query
|
|
179
|
-
} as any
|
|
202
|
+
return self as AtomRpcClient<Self, Id, Rpcs, ER>
|
|
180
203
|
}
|
|
181
204
|
|
|
182
205
|
class QueryKey extends Data.Class<{
|