@effect-atom/atom 0.1.8 → 0.1.10
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/AtomHttpApi/package.json +6 -0
- package/dist/cjs/AtomHttpApi.js +101 -0
- package/dist/cjs/AtomHttpApi.js.map +1 -0
- package/dist/cjs/AtomRpc.js +20 -20
- package/dist/cjs/AtomRpc.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/dts/AtomHttpApi.d.ts +55 -0
- package/dist/dts/AtomHttpApi.d.ts.map +1 -0
- package/dist/dts/AtomRpc.d.ts +18 -7
- package/dist/dts/AtomRpc.d.ts.map +1 -1
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/AtomHttpApi.js +73 -0
- package/dist/esm/AtomHttpApi.js.map +1 -0
- package/dist/esm/AtomRpc.js +18 -18
- package/dist/esm/AtomRpc.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +9 -1
- package/src/AtomHttpApi.ts +296 -0
- package/src/AtomRpc.ts +72 -49
- package/src/index.ts +5 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Tag = void 0;
|
|
7
|
+
var Reactivity = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect/experimental/Reactivity"));
|
|
8
|
+
var HttpApiClient = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect/platform/HttpApiClient"));
|
|
9
|
+
var Context = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Context"));
|
|
10
|
+
var Data = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Data"));
|
|
11
|
+
var Duration = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Duration"));
|
|
12
|
+
var Effect = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Effect"));
|
|
13
|
+
var Equal = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Equal"));
|
|
14
|
+
var _Function = /*#__PURE__*/require("effect/Function");
|
|
15
|
+
var Hash = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Hash"));
|
|
16
|
+
var Layer = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Layer"));
|
|
17
|
+
var Atom = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./Atom.js"));
|
|
18
|
+
function _interopRequireWildcard(e, t) {
|
|
19
|
+
if ("function" == typeof WeakMap) var r = new WeakMap(),
|
|
20
|
+
n = new WeakMap();
|
|
21
|
+
return (_interopRequireWildcard = function (e, t) {
|
|
22
|
+
if (!t && e && e.__esModule) return e;
|
|
23
|
+
var o,
|
|
24
|
+
i,
|
|
25
|
+
f = {
|
|
26
|
+
__proto__: null,
|
|
27
|
+
default: e
|
|
28
|
+
};
|
|
29
|
+
if (null === e || "object" != typeof e && "function" != typeof e) return f;
|
|
30
|
+
if (o = t ? n : r) {
|
|
31
|
+
if (o.has(e)) return o.get(e);
|
|
32
|
+
o.set(e, f);
|
|
33
|
+
}
|
|
34
|
+
for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
|
|
35
|
+
return f;
|
|
36
|
+
})(e, t);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @since 1.0.0
|
|
44
|
+
* @category Constructors
|
|
45
|
+
*/
|
|
46
|
+
const Tag = () => (id, options) => {
|
|
47
|
+
const self = Context.Tag(id)();
|
|
48
|
+
self.layer = Layer.scoped(self, HttpApiClient.make(options.api, options)).pipe(Layer.provide(options.httpClient));
|
|
49
|
+
self.runtime = Atom.runtime(self.layer);
|
|
50
|
+
const mutationFamily = Atom.family(({
|
|
51
|
+
endpoint,
|
|
52
|
+
group
|
|
53
|
+
}) => self.runtime.fn()(Effect.fnUntraced(function* (opts) {
|
|
54
|
+
const client = yield* self;
|
|
55
|
+
const effect = client[group][endpoint](opts);
|
|
56
|
+
return yield* opts.reactivityKeys ? Reactivity.mutation(effect, opts.reactivityKeys) : effect;
|
|
57
|
+
})));
|
|
58
|
+
self.mutation = (group, endpoint) => mutationFamily(new MutationKey({
|
|
59
|
+
group,
|
|
60
|
+
endpoint
|
|
61
|
+
}));
|
|
62
|
+
const queryFamily = Atom.family(opts => {
|
|
63
|
+
let atom = self.runtime.atom(Effect.flatMap(self, client_ => {
|
|
64
|
+
const client = client_;
|
|
65
|
+
return client[opts.group][opts.endpoint](opts);
|
|
66
|
+
}));
|
|
67
|
+
if (opts.timeToLive) {
|
|
68
|
+
atom = Duration.isFinite(opts.timeToLive) ? Atom.setIdleTTL(atom, opts.timeToLive) : Atom.keepAlive(atom);
|
|
69
|
+
}
|
|
70
|
+
return opts.reactivityKeys ? self.runtime.factory.withReactivity(opts.reactivityKeys)(atom) : atom;
|
|
71
|
+
});
|
|
72
|
+
self.query = (group, endpoint, request) => queryFamily(new QueryKey({
|
|
73
|
+
group,
|
|
74
|
+
endpoint,
|
|
75
|
+
path: request.path && Data.struct(request.path),
|
|
76
|
+
urlParams: request.urlParams && Data.struct(request.urlParams),
|
|
77
|
+
payload: request.payload && Data.struct(request.payload),
|
|
78
|
+
headers: request.headers && Data.struct(request.headers),
|
|
79
|
+
reactivityKeys: request.reactivityKeys ? Data.array(request.reactivityKeys) : undefined,
|
|
80
|
+
timeToLive: request.timeToLive ? Duration.decode(request.timeToLive) : undefined
|
|
81
|
+
}));
|
|
82
|
+
return self;
|
|
83
|
+
};
|
|
84
|
+
exports.Tag = Tag;
|
|
85
|
+
class MutationKey extends Data.Class {
|
|
86
|
+
[Equal.symbol](that) {
|
|
87
|
+
return this.group === that.group && this.endpoint === that.endpoint;
|
|
88
|
+
}
|
|
89
|
+
[Hash.symbol]() {
|
|
90
|
+
return (0, _Function.pipe)(Hash.string(`${this.group}/${this.endpoint}`), Hash.cached(this));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
class QueryKey extends Data.Class {
|
|
94
|
+
[Equal.symbol](that) {
|
|
95
|
+
return this.group === that.group && this.endpoint === that.endpoint && Equal.equals(this.path, that.path) && Equal.equals(this.urlParams, that.urlParams) && Equal.equals(this.payload, that.payload) && Equal.equals(this.headers, that.headers) && Equal.equals(this.reactivityKeys, that.reactivityKeys) && Equal.equals(this.timeToLive, that.timeToLive);
|
|
96
|
+
}
|
|
97
|
+
[Hash.symbol]() {
|
|
98
|
+
return (0, _Function.pipe)(Hash.string(`${this.group}/${this.endpoint}`), Hash.combine(Hash.hash(this.path)), Hash.combine(Hash.hash(this.urlParams)), 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));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=AtomHttpApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AtomHttpApi.js","names":["Reactivity","_interopRequireWildcard","require","HttpApiClient","Context","Data","Duration","Effect","Equal","_Function","Hash","Layer","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","api","pipe","provide","httpClient","runtime","mutationFamily","family","endpoint","group","fn","fnUntraced","opts","client","effect","reactivityKeys","mutation","MutationKey","queryFamily","atom","flatMap","client_","timeToLive","isFinite","setIdleTTL","keepAlive","factory","withReactivity","query","request","QueryKey","path","struct","urlParams","payload","headers","array","undefined","decode","exports","Class","symbol","that","string","cached","equals","combine","hash"],"sources":["../../src/AtomHttpApi.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
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/cjs/index.js
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Result = exports.Registry = exports.Hydration = exports.AtomRpc = exports.AtomRef = exports.Atom = void 0;
|
|
6
|
+
exports.Result = exports.Registry = exports.Hydration = exports.AtomRpc = exports.AtomRef = exports.AtomHttpApi = exports.Atom = void 0;
|
|
7
7
|
var _Atom = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./Atom.js"));
|
|
8
8
|
exports.Atom = _Atom;
|
|
9
|
+
var _AtomHttpApi = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./AtomHttpApi.js"));
|
|
10
|
+
exports.AtomHttpApi = _AtomHttpApi;
|
|
9
11
|
var _AtomRef = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./AtomRef.js"));
|
|
10
12
|
exports.AtomRef = _AtomRef;
|
|
11
13
|
var _AtomRpc = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("./AtomRpc.js"));
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type * as HttpApi from "@effect/platform/HttpApi";
|
|
2
|
+
import * as HttpApiClient from "@effect/platform/HttpApiClient";
|
|
3
|
+
import type * as HttpApiEndpoint from "@effect/platform/HttpApiEndpoint";
|
|
4
|
+
import type * as HttpApiGroup from "@effect/platform/HttpApiGroup";
|
|
5
|
+
import type * as HttpApiMiddleware from "@effect/platform/HttpApiMiddleware";
|
|
6
|
+
import type * as HttpClient from "@effect/platform/HttpClient";
|
|
7
|
+
import type * as HttpClientError from "@effect/platform/HttpClientError";
|
|
8
|
+
import * as Context from "effect/Context";
|
|
9
|
+
import * as Duration from "effect/Duration";
|
|
10
|
+
import * as Effect from "effect/Effect";
|
|
11
|
+
import * as Layer from "effect/Layer";
|
|
12
|
+
import type * as ParseResult from "effect/ParseResult";
|
|
13
|
+
import type { ReadonlyRecord } from "effect/Record";
|
|
14
|
+
import type { NoInfer, Simplify } from "effect/Types";
|
|
15
|
+
import * as Atom from "./Atom.js";
|
|
16
|
+
import type * as Result from "./Result.js";
|
|
17
|
+
/**
|
|
18
|
+
* @since 1.0.0
|
|
19
|
+
* @category Models
|
|
20
|
+
*/
|
|
21
|
+
export interface AtomHttpApiClient<Self, Id extends string, Groups extends HttpApiGroup.HttpApiGroup.Any, ApiE, E> extends Context.Tag<Self, Simplify<HttpApiClient.Client<Groups, ApiE, never>>> {
|
|
22
|
+
new (_: never): Context.TagClassShape<Id, Simplify<HttpApiClient.Client<Groups, ApiE, never>>>;
|
|
23
|
+
readonly layer: Layer.Layer<Self, E>;
|
|
24
|
+
readonly runtime: Atom.AtomRuntime<Self, E>;
|
|
25
|
+
readonly mutation: <GroupName extends HttpApiGroup.HttpApiGroup.Name<Groups>, Name extends HttpApiEndpoint.HttpApiEndpoint.Name<HttpApiGroup.HttpApiGroup.Endpoints<Group>>, Group extends HttpApiGroup.HttpApiGroup.Any = HttpApiGroup.HttpApiGroup.WithName<Groups, GroupName>, Endpoint extends HttpApiEndpoint.HttpApiEndpoint.Any = HttpApiEndpoint.HttpApiEndpoint.WithName<HttpApiGroup.HttpApiGroup.Endpoints<Group>, Name>>(group: GroupName, endpoint: Name) => [Endpoint] extends [
|
|
26
|
+
HttpApiEndpoint.HttpApiEndpoint<infer _Name, infer _Method, infer _Path, infer _UrlParams, infer _Payload, infer _Headers, infer _Success, infer _Error, infer _R, infer _RE>
|
|
27
|
+
] ? Atom.AtomResultFn<Simplify<HttpApiEndpoint.HttpApiEndpoint.ClientRequest<_Path, _UrlParams, _Payload, _Headers, false> & {
|
|
28
|
+
readonly reactivityKeys?: ReadonlyArray<unknown> | undefined;
|
|
29
|
+
}>, _Success, _Error | HttpApiGroup.HttpApiGroup.Error<Group> | E | HttpClientError.HttpClientError | ParseResult.ParseError> : never;
|
|
30
|
+
readonly query: <GroupName extends HttpApiGroup.HttpApiGroup.Name<Groups>, Name extends HttpApiEndpoint.HttpApiEndpoint.Name<HttpApiGroup.HttpApiGroup.Endpoints<Group>>, Group extends HttpApiGroup.HttpApiGroup.Any = HttpApiGroup.HttpApiGroup.WithName<Groups, GroupName>, Endpoint extends HttpApiEndpoint.HttpApiEndpoint.Any = HttpApiEndpoint.HttpApiEndpoint.WithName<HttpApiGroup.HttpApiGroup.Endpoints<Group>, Name>>(group: Group, endpoint: Name, request: [Endpoint] extends [
|
|
31
|
+
HttpApiEndpoint.HttpApiEndpoint<infer _Name, infer _Method, infer _Path, infer _UrlParams, infer _Payload, infer _Headers, infer _Success, infer _Error, infer _R, infer _RE>
|
|
32
|
+
] ? Simplify<HttpApiEndpoint.HttpApiEndpoint.ClientRequest<_Path, _UrlParams, _Payload, _Headers, false> & {
|
|
33
|
+
readonly reactivityKeys?: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>> | undefined;
|
|
34
|
+
readonly timeToLive?: Duration.DurationInput | undefined;
|
|
35
|
+
}> : never) => [Endpoint] extends [
|
|
36
|
+
HttpApiEndpoint.HttpApiEndpoint<infer _Name, infer _Method, infer _Path, infer _UrlParams, infer _Payload, infer _Headers, infer _Success, infer _Error, infer _R, infer _RE>
|
|
37
|
+
] ? Atom.Atom<Result.Result<_Success, _Error | HttpApiGroup.HttpApiGroup.Error<Group> | E | HttpClientError.HttpClientError | ParseResult.ParseError>> : never;
|
|
38
|
+
}
|
|
39
|
+
declare global {
|
|
40
|
+
interface ErrorConstructor {
|
|
41
|
+
stackTraceLimit: number;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @since 1.0.0
|
|
46
|
+
* @category Constructors
|
|
47
|
+
*/
|
|
48
|
+
export declare const Tag: <Self>() => <const Id extends string, ApiId extends string, Groups extends HttpApiGroup.HttpApiGroup.Any, ApiE, E, R>(id: Id, options: {
|
|
49
|
+
readonly api: HttpApi.HttpApi<ApiId, Groups, ApiE, R>;
|
|
50
|
+
readonly httpClient: Layer.Layer<HttpApiMiddleware.HttpApiMiddleware.Without<NoInfer<R> | HttpApiGroup.HttpApiGroup.ClientContext<NoInfer<Groups>>> | HttpClient.HttpClient, E>;
|
|
51
|
+
readonly transformClient?: ((client: HttpClient.HttpClient) => HttpClient.HttpClient) | undefined;
|
|
52
|
+
readonly transformResponse?: ((effect: Effect.Effect<unknown, unknown>) => Effect.Effect<unknown, unknown>) | undefined;
|
|
53
|
+
readonly baseUrl?: URL | string | undefined;
|
|
54
|
+
}) => AtomHttpApiClient<Self, Id, Groups, ApiE, E>;
|
|
55
|
+
//# sourceMappingURL=AtomHttpApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AtomHttpApi.d.ts","sourceRoot":"","sources":["../../src/AtomHttpApi.ts"],"names":[],"mappings":"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"}
|
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":"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;AAClD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAK3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,KAAK,EAAW,OAAO,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAE1C;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,IAAI,EAAE,EAAE,SAAS,MAAM,EAAE,IAAI,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,CAC7E,SAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAEzE,KACE,CAAC,EAAE,KAAK,GACP,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAA;IAE5E,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAE3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAC3C,GAAG,EAAE,GAAG,KACL,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,CAC5C,MAAM,IAAI,EACV,MAAM,QAAQ,EACd,MAAM,QAAQ,EACd,MAAM,MAAM,EACZ,MAAM,WAAW,CAClB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,GACjE,IAAI,CAAC,YAAY,CACjB;QACE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;QACnE,QAAQ,CAAC,cAAc,CAAC,EACpB,aAAa,CAAC,OAAO,CAAC,GACtB,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,GAC9C,SAAS,CAAA;QACb,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAA;KAC7C,EACD,QAAQ,CAAC,MAAM,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CACpD,GACC,KAAK,CAAA;IAET,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EACxC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAC1D,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAA;QAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;QAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAA;KACzD,KACE,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,CAC5C,MAAM,IAAI,EACV,MAAM,QAAQ,EACd,MAAM,QAAQ,EACd,MAAM,MAAM,EACZ,MAAM,WAAW,CAClB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CACvE,IAAI,CAAC,UAAU,CACb,EAAE,CAAC,MAAM,CAAC,EACV,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CACjE,EACD,IAAI,CACL,GACD,IAAI,CAAC,IAAI,CACT,MAAM,CAAC,MAAM,CACX,QAAQ,CAAC,MAAM,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CACpD,CACF,GACC,KAAK,CAAA;CACV;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,gBAAgB;QACxB,eAAe,EAAE,MAAM,CAAA;KACxB;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,GAAG,GAAI,IAAI,QACvB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,IAAI,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAChD,IAAI,EAAE,EACN,SAAS;IACP,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAC1B,SAAS,CAAC,QAAQ,GAClB,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GACnC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAC5B,EAAE,CACH,CAAA;IACD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAC7D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,SAAS,CAAC,GAAG,SAAS,CAAA;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9C,KACA,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAoFlC,CAAA"}
|
package/dist/dts/index.d.ts
CHANGED
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Reactivity from "@effect/experimental/Reactivity";
|
|
5
|
+
import * as HttpApiClient from "@effect/platform/HttpApiClient";
|
|
6
|
+
import * as Context from "effect/Context";
|
|
7
|
+
import * as Data from "effect/Data";
|
|
8
|
+
import * as Duration from "effect/Duration";
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import * as Equal from "effect/Equal";
|
|
11
|
+
import { pipe } from "effect/Function";
|
|
12
|
+
import * as Hash from "effect/Hash";
|
|
13
|
+
import * as Layer from "effect/Layer";
|
|
14
|
+
import * as Atom from "./Atom.js";
|
|
15
|
+
/**
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
* @category Constructors
|
|
18
|
+
*/
|
|
19
|
+
export const Tag = () => (id, options) => {
|
|
20
|
+
const self = Context.Tag(id)();
|
|
21
|
+
self.layer = Layer.scoped(self, HttpApiClient.make(options.api, options)).pipe(Layer.provide(options.httpClient));
|
|
22
|
+
self.runtime = Atom.runtime(self.layer);
|
|
23
|
+
const mutationFamily = Atom.family(({
|
|
24
|
+
endpoint,
|
|
25
|
+
group
|
|
26
|
+
}) => self.runtime.fn()(Effect.fnUntraced(function* (opts) {
|
|
27
|
+
const client = yield* self;
|
|
28
|
+
const effect = client[group][endpoint](opts);
|
|
29
|
+
return yield* opts.reactivityKeys ? Reactivity.mutation(effect, opts.reactivityKeys) : effect;
|
|
30
|
+
})));
|
|
31
|
+
self.mutation = (group, endpoint) => mutationFamily(new MutationKey({
|
|
32
|
+
group,
|
|
33
|
+
endpoint
|
|
34
|
+
}));
|
|
35
|
+
const queryFamily = Atom.family(opts => {
|
|
36
|
+
let atom = self.runtime.atom(Effect.flatMap(self, client_ => {
|
|
37
|
+
const client = client_;
|
|
38
|
+
return client[opts.group][opts.endpoint](opts);
|
|
39
|
+
}));
|
|
40
|
+
if (opts.timeToLive) {
|
|
41
|
+
atom = Duration.isFinite(opts.timeToLive) ? Atom.setIdleTTL(atom, opts.timeToLive) : Atom.keepAlive(atom);
|
|
42
|
+
}
|
|
43
|
+
return opts.reactivityKeys ? self.runtime.factory.withReactivity(opts.reactivityKeys)(atom) : atom;
|
|
44
|
+
});
|
|
45
|
+
self.query = (group, endpoint, request) => queryFamily(new QueryKey({
|
|
46
|
+
group,
|
|
47
|
+
endpoint,
|
|
48
|
+
path: request.path && Data.struct(request.path),
|
|
49
|
+
urlParams: request.urlParams && Data.struct(request.urlParams),
|
|
50
|
+
payload: request.payload && Data.struct(request.payload),
|
|
51
|
+
headers: request.headers && Data.struct(request.headers),
|
|
52
|
+
reactivityKeys: request.reactivityKeys ? Data.array(request.reactivityKeys) : undefined,
|
|
53
|
+
timeToLive: request.timeToLive ? Duration.decode(request.timeToLive) : undefined
|
|
54
|
+
}));
|
|
55
|
+
return self;
|
|
56
|
+
};
|
|
57
|
+
class MutationKey extends Data.Class {
|
|
58
|
+
[Equal.symbol](that) {
|
|
59
|
+
return this.group === that.group && this.endpoint === that.endpoint;
|
|
60
|
+
}
|
|
61
|
+
[Hash.symbol]() {
|
|
62
|
+
return pipe(Hash.string(`${this.group}/${this.endpoint}`), Hash.cached(this));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
class QueryKey extends Data.Class {
|
|
66
|
+
[Equal.symbol](that) {
|
|
67
|
+
return this.group === that.group && this.endpoint === that.endpoint && Equal.equals(this.path, that.path) && Equal.equals(this.urlParams, that.urlParams) && Equal.equals(this.payload, that.payload) && Equal.equals(this.headers, that.headers) && Equal.equals(this.reactivityKeys, that.reactivityKeys) && Equal.equals(this.timeToLive, that.timeToLive);
|
|
68
|
+
}
|
|
69
|
+
[Hash.symbol]() {
|
|
70
|
+
return pipe(Hash.string(`${this.group}/${this.endpoint}`), Hash.combine(Hash.hash(this.path)), Hash.combine(Hash.hash(this.urlParams)), 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));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=AtomHttpApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AtomHttpApi.js","names":["Reactivity","HttpApiClient","Context","Data","Duration","Effect","Equal","pipe","Hash","Layer","Atom","Tag","id","options","self","layer","scoped","make","api","provide","httpClient","runtime","mutationFamily","family","endpoint","group","fn","fnUntraced","opts","client","effect","reactivityKeys","mutation","MutationKey","queryFamily","atom","flatMap","client_","timeToLive","isFinite","setIdleTTL","keepAlive","factory","withReactivity","query","request","QueryKey","path","struct","urlParams","payload","headers","array","undefined","decode","Class","symbol","that","string","cached","equals","combine","hash"],"sources":["../../src/AtomHttpApi.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
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/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Atom","AtomRef","AtomRpc","Hydration","Registry","Result"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,IAAI,MAAM,WAAW;AAEjC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Atom","AtomHttpApi","AtomRef","AtomRpc","Hydration","Registry","Result"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,IAAI,MAAM,WAAW;AAEjC;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-atom/atom",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "Reactive toolkit for Effect",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -31,6 +31,11 @@
|
|
|
31
31
|
"import": "./dist/esm/Atom.js",
|
|
32
32
|
"default": "./dist/cjs/Atom.js"
|
|
33
33
|
},
|
|
34
|
+
"./AtomHttpApi": {
|
|
35
|
+
"types": "./dist/dts/AtomHttpApi.d.ts",
|
|
36
|
+
"import": "./dist/esm/AtomHttpApi.js",
|
|
37
|
+
"default": "./dist/cjs/AtomHttpApi.js"
|
|
38
|
+
},
|
|
34
39
|
"./AtomRef": {
|
|
35
40
|
"types": "./dist/dts/AtomRef.d.ts",
|
|
36
41
|
"import": "./dist/esm/AtomRef.js",
|
|
@@ -62,6 +67,9 @@
|
|
|
62
67
|
"Atom": [
|
|
63
68
|
"./dist/dts/Atom.d.ts"
|
|
64
69
|
],
|
|
70
|
+
"AtomHttpApi": [
|
|
71
|
+
"./dist/dts/AtomHttpApi.d.ts"
|
|
72
|
+
],
|
|
65
73
|
"AtomRef": [
|
|
66
74
|
"./dist/dts/AtomRef.d.ts"
|
|
67
75
|
],
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Reactivity from "@effect/experimental/Reactivity"
|
|
5
|
+
import type * as HttpApi from "@effect/platform/HttpApi"
|
|
6
|
+
import * as HttpApiClient from "@effect/platform/HttpApiClient"
|
|
7
|
+
import type * as HttpApiEndpoint from "@effect/platform/HttpApiEndpoint"
|
|
8
|
+
import type * as HttpApiGroup from "@effect/platform/HttpApiGroup"
|
|
9
|
+
import type * as HttpApiMiddleware from "@effect/platform/HttpApiMiddleware"
|
|
10
|
+
import type * as HttpClient from "@effect/platform/HttpClient"
|
|
11
|
+
import type * as HttpClientError from "@effect/platform/HttpClientError"
|
|
12
|
+
import * as Context from "effect/Context"
|
|
13
|
+
import * as Data from "effect/Data"
|
|
14
|
+
import * as Duration from "effect/Duration"
|
|
15
|
+
import * as Effect from "effect/Effect"
|
|
16
|
+
import * as Equal from "effect/Equal"
|
|
17
|
+
import { pipe } from "effect/Function"
|
|
18
|
+
import * as Hash from "effect/Hash"
|
|
19
|
+
import * as Layer from "effect/Layer"
|
|
20
|
+
import type * as ParseResult from "effect/ParseResult"
|
|
21
|
+
import type { ReadonlyRecord } from "effect/Record"
|
|
22
|
+
import type { Mutable, NoInfer, Simplify } from "effect/Types"
|
|
23
|
+
import * as Atom from "./Atom.js"
|
|
24
|
+
import type * as Result from "./Result.js"
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
* @category Models
|
|
29
|
+
*/
|
|
30
|
+
export interface AtomHttpApiClient<Self, Id extends string, Groups extends HttpApiGroup.HttpApiGroup.Any, ApiE, E>
|
|
31
|
+
extends Context.Tag<Self, Simplify<HttpApiClient.Client<Groups, ApiE, never>>>
|
|
32
|
+
{
|
|
33
|
+
new(
|
|
34
|
+
_: never
|
|
35
|
+
): Context.TagClassShape<Id, Simplify<HttpApiClient.Client<Groups, ApiE, never>>>
|
|
36
|
+
|
|
37
|
+
readonly layer: Layer.Layer<Self, E>
|
|
38
|
+
readonly runtime: Atom.AtomRuntime<Self, E>
|
|
39
|
+
|
|
40
|
+
readonly mutation: <
|
|
41
|
+
GroupName extends HttpApiGroup.HttpApiGroup.Name<Groups>,
|
|
42
|
+
Name extends HttpApiEndpoint.HttpApiEndpoint.Name<HttpApiGroup.HttpApiGroup.Endpoints<Group>>,
|
|
43
|
+
Group extends HttpApiGroup.HttpApiGroup.Any = HttpApiGroup.HttpApiGroup.WithName<Groups, GroupName>,
|
|
44
|
+
Endpoint extends HttpApiEndpoint.HttpApiEndpoint.Any = HttpApiEndpoint.HttpApiEndpoint.WithName<
|
|
45
|
+
HttpApiGroup.HttpApiGroup.Endpoints<Group>,
|
|
46
|
+
Name
|
|
47
|
+
>
|
|
48
|
+
>(
|
|
49
|
+
group: GroupName,
|
|
50
|
+
endpoint: Name
|
|
51
|
+
) => [Endpoint] extends [
|
|
52
|
+
HttpApiEndpoint.HttpApiEndpoint<
|
|
53
|
+
infer _Name,
|
|
54
|
+
infer _Method,
|
|
55
|
+
infer _Path,
|
|
56
|
+
infer _UrlParams,
|
|
57
|
+
infer _Payload,
|
|
58
|
+
infer _Headers,
|
|
59
|
+
infer _Success,
|
|
60
|
+
infer _Error,
|
|
61
|
+
infer _R,
|
|
62
|
+
infer _RE
|
|
63
|
+
>
|
|
64
|
+
] ? Atom.AtomResultFn<
|
|
65
|
+
Simplify<
|
|
66
|
+
HttpApiEndpoint.HttpApiEndpoint.ClientRequest<_Path, _UrlParams, _Payload, _Headers, false> & {
|
|
67
|
+
readonly reactivityKeys?: ReadonlyArray<unknown> | undefined
|
|
68
|
+
}
|
|
69
|
+
>,
|
|
70
|
+
_Success,
|
|
71
|
+
_Error | HttpApiGroup.HttpApiGroup.Error<Group> | E | HttpClientError.HttpClientError | ParseResult.ParseError
|
|
72
|
+
>
|
|
73
|
+
: never
|
|
74
|
+
|
|
75
|
+
readonly query: <
|
|
76
|
+
GroupName extends HttpApiGroup.HttpApiGroup.Name<Groups>,
|
|
77
|
+
Name extends HttpApiEndpoint.HttpApiEndpoint.Name<HttpApiGroup.HttpApiGroup.Endpoints<Group>>,
|
|
78
|
+
Group extends HttpApiGroup.HttpApiGroup.Any = HttpApiGroup.HttpApiGroup.WithName<Groups, GroupName>,
|
|
79
|
+
Endpoint extends HttpApiEndpoint.HttpApiEndpoint.Any = HttpApiEndpoint.HttpApiEndpoint.WithName<
|
|
80
|
+
HttpApiGroup.HttpApiGroup.Endpoints<Group>,
|
|
81
|
+
Name
|
|
82
|
+
>
|
|
83
|
+
>(
|
|
84
|
+
group: Group,
|
|
85
|
+
endpoint: Name,
|
|
86
|
+
request: [Endpoint] extends [
|
|
87
|
+
HttpApiEndpoint.HttpApiEndpoint<
|
|
88
|
+
infer _Name,
|
|
89
|
+
infer _Method,
|
|
90
|
+
infer _Path,
|
|
91
|
+
infer _UrlParams,
|
|
92
|
+
infer _Payload,
|
|
93
|
+
infer _Headers,
|
|
94
|
+
infer _Success,
|
|
95
|
+
infer _Error,
|
|
96
|
+
infer _R,
|
|
97
|
+
infer _RE
|
|
98
|
+
>
|
|
99
|
+
] ? Simplify<
|
|
100
|
+
HttpApiEndpoint.HttpApiEndpoint.ClientRequest<_Path, _UrlParams, _Payload, _Headers, false> & {
|
|
101
|
+
readonly reactivityKeys?:
|
|
102
|
+
| ReadonlyArray<unknown>
|
|
103
|
+
| ReadonlyRecord<string, ReadonlyArray<unknown>>
|
|
104
|
+
| undefined
|
|
105
|
+
readonly timeToLive?: Duration.DurationInput | undefined
|
|
106
|
+
}
|
|
107
|
+
>
|
|
108
|
+
: never
|
|
109
|
+
) => [Endpoint] extends [
|
|
110
|
+
HttpApiEndpoint.HttpApiEndpoint<
|
|
111
|
+
infer _Name,
|
|
112
|
+
infer _Method,
|
|
113
|
+
infer _Path,
|
|
114
|
+
infer _UrlParams,
|
|
115
|
+
infer _Payload,
|
|
116
|
+
infer _Headers,
|
|
117
|
+
infer _Success,
|
|
118
|
+
infer _Error,
|
|
119
|
+
infer _R,
|
|
120
|
+
infer _RE
|
|
121
|
+
>
|
|
122
|
+
] ? Atom.Atom<
|
|
123
|
+
Result.Result<
|
|
124
|
+
_Success,
|
|
125
|
+
_Error | HttpApiGroup.HttpApiGroup.Error<Group> | E | HttpClientError.HttpClientError | ParseResult.ParseError
|
|
126
|
+
>
|
|
127
|
+
>
|
|
128
|
+
: never
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
declare global {
|
|
132
|
+
interface ErrorConstructor {
|
|
133
|
+
stackTraceLimit: number
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @since 1.0.0
|
|
139
|
+
* @category Constructors
|
|
140
|
+
*/
|
|
141
|
+
export const Tag =
|
|
142
|
+
<Self>() =>
|
|
143
|
+
<const Id extends string, ApiId extends string, Groups extends HttpApiGroup.HttpApiGroup.Any, ApiE, E, R>(
|
|
144
|
+
id: Id,
|
|
145
|
+
options: {
|
|
146
|
+
readonly api: HttpApi.HttpApi<ApiId, Groups, ApiE, R>
|
|
147
|
+
readonly httpClient: Layer.Layer<
|
|
148
|
+
| HttpApiMiddleware.HttpApiMiddleware.Without<
|
|
149
|
+
NoInfer<R> | HttpApiGroup.HttpApiGroup.ClientContext<NoInfer<Groups>>
|
|
150
|
+
>
|
|
151
|
+
| HttpClient.HttpClient,
|
|
152
|
+
E
|
|
153
|
+
>
|
|
154
|
+
readonly transformClient?: ((client: HttpClient.HttpClient) => HttpClient.HttpClient) | undefined
|
|
155
|
+
readonly transformResponse?:
|
|
156
|
+
| ((effect: Effect.Effect<unknown, unknown>) => Effect.Effect<unknown, unknown>)
|
|
157
|
+
| undefined
|
|
158
|
+
readonly baseUrl?: URL | string | undefined
|
|
159
|
+
}
|
|
160
|
+
): AtomHttpApiClient<Self, Id, Groups, ApiE, E> => {
|
|
161
|
+
const self: Mutable<AtomHttpApiClient<Self, Id, Groups, ApiE, E>> = Context.Tag(id)<
|
|
162
|
+
Self,
|
|
163
|
+
HttpApiClient.Client<Groups, E, R>
|
|
164
|
+
>() as any
|
|
165
|
+
|
|
166
|
+
self.layer = Layer.scoped(
|
|
167
|
+
self,
|
|
168
|
+
HttpApiClient.make(options.api, options)
|
|
169
|
+
).pipe(Layer.provide(options.httpClient)) as Layer.Layer<Self, E>
|
|
170
|
+
self.runtime = Atom.runtime(self.layer)
|
|
171
|
+
|
|
172
|
+
const mutationFamily = (Atom.family(({ endpoint, group }: MutationKey) =>
|
|
173
|
+
self.runtime.fn<{
|
|
174
|
+
path: any
|
|
175
|
+
urlParams: any
|
|
176
|
+
headers: any
|
|
177
|
+
payload: any
|
|
178
|
+
reactivityKeys?: ReadonlyArray<unknown> | undefined
|
|
179
|
+
}>()(
|
|
180
|
+
Effect.fnUntraced(function*(opts) {
|
|
181
|
+
const client = (yield* self) as any
|
|
182
|
+
const effect = client[group][endpoint](opts) as Effect.Effect<any>
|
|
183
|
+
return yield* opts.reactivityKeys
|
|
184
|
+
? Reactivity.mutation(effect, opts.reactivityKeys)
|
|
185
|
+
: effect
|
|
186
|
+
})
|
|
187
|
+
)
|
|
188
|
+
)) as any
|
|
189
|
+
|
|
190
|
+
self.mutation = ((group: string, endpoint: string) =>
|
|
191
|
+
mutationFamily(
|
|
192
|
+
new MutationKey({
|
|
193
|
+
group,
|
|
194
|
+
endpoint
|
|
195
|
+
})
|
|
196
|
+
)) as any
|
|
197
|
+
|
|
198
|
+
const queryFamily = Atom.family(
|
|
199
|
+
(opts: QueryKey) => {
|
|
200
|
+
let atom = self.runtime.atom(Effect.flatMap(self, (client_) => {
|
|
201
|
+
const client = client_ as any
|
|
202
|
+
return client[opts.group][opts.endpoint](opts) as Effect.Effect<any>
|
|
203
|
+
}))
|
|
204
|
+
if (opts.timeToLive) {
|
|
205
|
+
atom = Duration.isFinite(opts.timeToLive)
|
|
206
|
+
? Atom.setIdleTTL(atom, opts.timeToLive)
|
|
207
|
+
: Atom.keepAlive(atom)
|
|
208
|
+
}
|
|
209
|
+
return opts.reactivityKeys
|
|
210
|
+
? self.runtime.factory.withReactivity(opts.reactivityKeys)(atom)
|
|
211
|
+
: atom
|
|
212
|
+
}
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
self.query = ((
|
|
216
|
+
group: string,
|
|
217
|
+
endpoint: string,
|
|
218
|
+
request: {
|
|
219
|
+
readonly path?: any
|
|
220
|
+
readonly urlParams?: any
|
|
221
|
+
readonly payload?: any
|
|
222
|
+
readonly headers?: any
|
|
223
|
+
readonly reactivityKeys?: ReadonlyArray<unknown> | undefined
|
|
224
|
+
readonly timeToLive?: Duration.DurationInput | undefined
|
|
225
|
+
}
|
|
226
|
+
) =>
|
|
227
|
+
queryFamily(
|
|
228
|
+
new QueryKey({
|
|
229
|
+
group,
|
|
230
|
+
endpoint,
|
|
231
|
+
path: request.path && Data.struct(request.path),
|
|
232
|
+
urlParams: request.urlParams && Data.struct(request.urlParams),
|
|
233
|
+
payload: request.payload && Data.struct(request.payload),
|
|
234
|
+
headers: request.headers && Data.struct(request.headers),
|
|
235
|
+
reactivityKeys: request.reactivityKeys
|
|
236
|
+
? Data.array(request.reactivityKeys)
|
|
237
|
+
: undefined,
|
|
238
|
+
timeToLive: request.timeToLive
|
|
239
|
+
? Duration.decode(request.timeToLive)
|
|
240
|
+
: undefined
|
|
241
|
+
})
|
|
242
|
+
)) as any
|
|
243
|
+
|
|
244
|
+
return self as AtomHttpApiClient<Self, Id, Groups, ApiE, E>
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
class MutationKey extends Data.Class<{
|
|
248
|
+
group: string
|
|
249
|
+
endpoint: string
|
|
250
|
+
}> {
|
|
251
|
+
[Equal.symbol](that: QueryKey) {
|
|
252
|
+
return this.group === that.group && this.endpoint === that.endpoint
|
|
253
|
+
}
|
|
254
|
+
[Hash.symbol]() {
|
|
255
|
+
return pipe(
|
|
256
|
+
Hash.string(`${this.group}/${this.endpoint}`),
|
|
257
|
+
Hash.cached(this)
|
|
258
|
+
)
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
class QueryKey extends Data.Class<{
|
|
263
|
+
group: string
|
|
264
|
+
endpoint: string
|
|
265
|
+
path: any
|
|
266
|
+
urlParams: any
|
|
267
|
+
headers: any
|
|
268
|
+
payload: any
|
|
269
|
+
reactivityKeys?: ReadonlyArray<unknown> | undefined
|
|
270
|
+
timeToLive?: Duration.Duration | undefined
|
|
271
|
+
}> {
|
|
272
|
+
[Equal.symbol](that: QueryKey) {
|
|
273
|
+
return (
|
|
274
|
+
this.group === that.group &&
|
|
275
|
+
this.endpoint === that.endpoint &&
|
|
276
|
+
Equal.equals(this.path, that.path) &&
|
|
277
|
+
Equal.equals(this.urlParams, that.urlParams) &&
|
|
278
|
+
Equal.equals(this.payload, that.payload) &&
|
|
279
|
+
Equal.equals(this.headers, that.headers) &&
|
|
280
|
+
Equal.equals(this.reactivityKeys, that.reactivityKeys) &&
|
|
281
|
+
Equal.equals(this.timeToLive, that.timeToLive)
|
|
282
|
+
)
|
|
283
|
+
}
|
|
284
|
+
[Hash.symbol]() {
|
|
285
|
+
return pipe(
|
|
286
|
+
Hash.string(`${this.group}/${this.endpoint}`),
|
|
287
|
+
Hash.combine(Hash.hash(this.path)),
|
|
288
|
+
Hash.combine(Hash.hash(this.urlParams)),
|
|
289
|
+
Hash.combine(Hash.hash(this.payload)),
|
|
290
|
+
Hash.combine(Hash.hash(this.headers)),
|
|
291
|
+
Hash.combine(Hash.hash(this.reactivityKeys)),
|
|
292
|
+
Hash.combine(Hash.hash(this.timeToLive)),
|
|
293
|
+
Hash.cached(this)
|
|
294
|
+
)
|
|
295
|
+
}
|
|
296
|
+
}
|
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<{
|