@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.
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/AtomHttpApi.js",
3
+ "module": "../dist/esm/AtomHttpApi.js",
4
+ "types": "../dist/dts/AtomHttpApi.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -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":[]}
@@ -3,17 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.make = void 0;
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 make = (group, options) => {
48
- const client = options.runtime.atom(RpcClient.make(group, {
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
- const mutation = Atom.family(tag => options.runtime.fn()(Effect.fnUntraced(function* ({
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
- }, get) {
57
- const c = yield* get.result(client);
58
- const effect = c(tag, payload, {
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) ? Atom.pull(get => get.result(client).pipe(Effect.map(client => client(tag, payload, {
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)) : Atom.make(get => get.result(client).pipe(Effect.flatMap(client => client(tag, payload, {
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 ? options.runtime.factory.withReactivity(reactivityKeys)(atom) : atom;
83
+ return reactivityKeys ? self.runtime.factory.withReactivity(reactivityKeys)(atom) : atom;
80
84
  });
81
- const query = (tag, payload, options) => queryFamily(new QueryKey({
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.make = make;
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);
@@ -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","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":[]}
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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"}
@@ -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
- readonly client: Atom.Atom<Result.Result<RpcClient.RpcClient.Flat<Rpcs, RpcClientError>, E>>;
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> | ReadonlyRecord<string, ReadonlyArray<unknown>> | undefined;
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 make: <Rpcs extends Rpc.Any, ER>(group: RpcGroup.RpcGroup<Rpcs>, options: {
34
- readonly runtime: Atom.AtomRuntime<RpcClient.Protocol | Rpc.MiddlewareClient<Rpcs> | Rpc.Context<Rpcs>, ER>;
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":"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"}
1
+ {"version":3,"file":"AtomRpc.d.ts","sourceRoot":"","sources":["../../src/AtomRpc.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,10 @@
2
2
  * @since 1.0.0
3
3
  */
4
4
  export * as Atom from "./Atom.js";
5
+ /**
6
+ * @since 1.0.0
7
+ */
8
+ export * as AtomHttpApi from "./AtomHttpApi.js";
5
9
  /**
6
10
  * @since 1.0.0
7
11
  */
@@ -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":[]}
@@ -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 make = (group, options) => {
21
- const client = options.runtime.atom(RpcClient.make(group, {
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
- const mutation = Atom.family(tag => options.runtime.fn()(Effect.fnUntraced(function* ({
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
- }, get) {
30
- const c = yield* get.result(client);
31
- const effect = c(tag, payload, {
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) ? Atom.pull(get => get.result(client).pipe(Effect.map(client => client(tag, payload, {
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)) : Atom.make(get => get.result(client).pipe(Effect.flatMap(client => client(tag, payload, {
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 ? options.runtime.factory.withReactivity(reactivityKeys)(atom) : atom;
56
+ return reactivityKeys ? self.runtime.factory.withReactivity(reactivityKeys)(atom) : atom;
53
57
  });
54
- const query = (tag, payload, options) => queryFamily(new QueryKey({
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) {
@@ -1 +1 @@
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":[]}
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
@@ -2,6 +2,10 @@
2
2
  * @since 1.0.0
3
3
  */
4
4
  export * as Atom from "./Atom.js";
5
+ /**
6
+ * @since 1.0.0
7
+ */
8
+ export * as AtomHttpApi from "./AtomHttpApi.js";
5
9
  /**
6
10
  * @since 1.0.0
7
11
  */
@@ -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.8",
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
- readonly client: Atom.Atom<
29
- Result.Result<RpcClient.RpcClient.Flat<Rpcs, RpcClientError>, E>
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 make = <Rpcs extends Rpc.Any, ER>(
92
- group: RpcGroup.RpcGroup<Rpcs>,
103
+ export const Tag = <Self>() =>
104
+ <const Id extends string, Rpcs extends Rpc.Any, ER>(
105
+ id: Id,
93
106
  options: {
94
- readonly runtime: Atom.AtomRuntime<
95
- RpcClient.Protocol | Rpc.MiddlewareClient<Rpcs> | Rpc.Context<Rpcs>,
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 client = options.runtime.atom(
105
- RpcClient.make(group, {
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
- const mutation = Atom.family(<Tag extends Rpc.Tag<Rpcs>>(tag: Tag) =>
112
- options.runtime.fn<{
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 }, get) {
121
- const c = yield* get.result(client)
122
- const effect = c(tag, payload, { headers } as any)
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(({ headers, payload, reactivityKeys, tag, timeToLive }: QueryKey) => {
131
- const rpc = group.requests.get(tag)! as any as Rpc.AnyWithProps
132
- let atom = RpcSchema.isStreamSchema(rpc.successSchema)
133
- ? Atom.pull((get) =>
134
- get.result(client).pipe(
135
- Effect.map((client) => client(tag, payload, { headers } as any)),
136
- Stream.unwrap
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
- if (timeToLive) {
147
- atom = Duration.isFinite(timeToLive) ? Atom.setIdleTTL(atom, timeToLive) : Atom.keepAlive(atom)
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
- return reactivityKeys ? options.runtime.factory.withReactivity(reactivityKeys)(atom) : atom
150
- })
175
+ )
151
176
 
152
- const query = <Tag extends Rpc.Tag<Rpcs>>(
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 ? Duration.decode(options.timeToLive) : undefined
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<{
package/src/index.ts CHANGED
@@ -3,6 +3,11 @@
3
3
  */
4
4
  export * as Atom from "./Atom.js"
5
5
 
6
+ /**
7
+ * @since 1.0.0
8
+ */
9
+ export * as AtomHttpApi from "./AtomHttpApi.js"
10
+
6
11
  /**
7
12
  * @since 1.0.0
8
13
  */