@effect-app/vue 2.67.0 → 2.67.2

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/src/mutate.ts CHANGED
@@ -17,6 +17,10 @@ export const getQueryKey = (h: { id: string }) => {
17
17
  return k
18
18
  }
19
19
 
20
+ export const getQueryKeyInt = (id: string) => {
21
+ return getQueryKey({ id })
22
+ }
23
+
20
24
  export function mutationResultToVue<A, E>(
21
25
  mutationResult: Result.Result<A, E>
22
26
  ): Res<A, E> {
@@ -141,74 +145,79 @@ export const asResult: {
141
145
  return tuple(computed(() => state.value), act) as any
142
146
  }
143
147
 
148
+ export const useInvalidateQueries = (id: string, options?: MutationOptionsBase["queryInvalidation"]) => {
149
+ const queryClient = useQueryClient()
150
+
151
+ const invalidateQueries = (
152
+ filters?: InvalidateQueryFilters,
153
+ options?: InvalidateOptions
154
+ ) =>
155
+ Effect.currentSpan.pipe(
156
+ Effect.orElseSucceed(() => null),
157
+ Effect.flatMap((span) =>
158
+ Effect.promise(() => queryClient.invalidateQueries(filters, { ...options, updateMeta: { span } }))
159
+ )
160
+ )
161
+
162
+ const invalidateCache = Effect.suspend(() => {
163
+ const queryKey = getQueryKeyInt(id)
164
+
165
+ if (options) {
166
+ const opts = options(queryKey, id)
167
+ if (!opts.length) {
168
+ return Effect.void
169
+ }
170
+ return Effect
171
+ .andThen(
172
+ Effect.annotateCurrentSpan({ queryKey, opts }),
173
+ Effect.forEach(opts, (_) => invalidateQueries(_.filters, _.options), { concurrency: "inherit" })
174
+ )
175
+ .pipe(Effect.withSpan("client.query.invalidation", { captureStackTrace: false }))
176
+ }
177
+
178
+ if (!queryKey) return Effect.void
179
+
180
+ return Effect
181
+ .andThen(
182
+ Effect.annotateCurrentSpan({ queryKey }),
183
+ invalidateQueries({ queryKey })
184
+ )
185
+ .pipe(Effect.withSpan("client.query.invalidation", { captureStackTrace: false }))
186
+ })
187
+
188
+ const handle = <A, E, R>(self: Effect.Effect<A, E, R>) =>
189
+ Effect.tapBoth(self, { onFailure: () => invalidateCache, onSuccess: () => invalidateCache })
190
+
191
+ return handle
192
+ }
193
+
144
194
  export const makeMutation = () => {
145
195
  const useMutation: {
146
196
  /**
147
197
  * Pass a function that returns an Effect, e.g from a client action
148
198
  * Executes query cache invalidation based on default rules or provided option.
149
199
  */
150
- <I, E, A, R, Request extends TaggedRequestClassAny, Name extends string>(
151
- self: RequestHandlerWithInput<I, A, E, R, Request, Name>,
200
+ <I, E, A, R, Request extends TaggedRequestClassAny, Id extends string>(
201
+ self: RequestHandlerWithInput<I, A, E, R, Request, Id>,
152
202
  options?: MutationOptionsBase
153
- ): (i: I) => Effect.Effect<A, E, R>
203
+ ): ((i: I) => Effect.Effect<A, E, R>) & { readonly id: Id }
154
204
  /**
155
205
  * Pass an Effect, e.g from a client action
156
206
  * Executes query cache invalidation based on default rules or provided option.
157
207
  */
158
- <E, A, R, Request extends TaggedRequestClassAny, Name extends string>(
159
- self: RequestHandler<A, E, R, Request, Name>,
208
+ <E, A, R, Request extends TaggedRequestClassAny, Id extends string>(
209
+ self: RequestHandler<A, E, R, Request, Id>,
160
210
  options?: MutationOptionsBase
161
- ): Effect.Effect<A, E, R>
162
- } = <I, E, A, R, Request extends TaggedRequestClassAny, Name extends string>(
163
- self: RequestHandlerWithInput<I, A, E, R, Request, Name> | RequestHandler<A, E, R, Request, Name>,
211
+ ): Effect.Effect<A, E, R> & { readonly id: Id }
212
+ } = <I, E, A, R, Request extends TaggedRequestClassAny, Id extends string>(
213
+ self: RequestHandlerWithInput<I, A, E, R, Request, Id> | RequestHandler<A, E, R, Request, Id>,
164
214
  options?: MutationOptionsBase
165
215
  ) => {
166
- const queryClient = useQueryClient()
167
-
168
- const invalidateQueries = (
169
- filters?: InvalidateQueryFilters,
170
- options?: InvalidateOptions
171
- ) =>
172
- Effect.currentSpan.pipe(
173
- Effect.orElseSucceed(() => null),
174
- Effect.flatMap((span) =>
175
- Effect.promise(() => queryClient.invalidateQueries(filters, { ...options, updateMeta: { span } }))
176
- )
177
- )
178
-
179
- const invalidateCache = Effect.suspend(() => {
180
- const queryKey = getQueryKey(self)
181
-
182
- if (options?.queryInvalidation) {
183
- const opts = options.queryInvalidation(queryKey, self.id)
184
- if (!opts.length) {
185
- return Effect.void
186
- }
187
- return Effect
188
- .andThen(
189
- Effect.annotateCurrentSpan({ queryKey, opts }),
190
- Effect.forEach(opts, (_) => invalidateQueries(_.filters, _.options), { concurrency: "inherit" })
191
- )
192
- .pipe(Effect.withSpan("client.query.invalidation", { captureStackTrace: false }))
193
- }
194
-
195
- if (!queryKey) return Effect.void
196
-
197
- return Effect
198
- .andThen(
199
- Effect.annotateCurrentSpan({ queryKey }),
200
- invalidateQueries({ queryKey })
201
- )
202
- .pipe(Effect.withSpan("client.query.invalidation", { captureStackTrace: false }))
203
- })
204
-
205
- const handle = (self: Effect.Effect<A, E, R>) =>
206
- Effect.tapBoth(self, { onFailure: () => invalidateCache, onSuccess: () => invalidateCache })
207
-
216
+ const handle = useInvalidateQueries(self.id, options?.queryInvalidation)
208
217
  const handler = self.handler
209
218
  const r = Effect.isEffect(handler) ? handle(handler) : (i: I) => handle(handler(i))
210
219
 
211
- return r as any
220
+ return Object.assign(r, { id: self.id }) as any
212
221
  }
213
222
  return useMutation
214
223
  }
@@ -9,22 +9,22 @@ export declare const useExperimental: (options?: {
9
9
  messages?: Record<string, string> | Record<string, MessageFormatElement[]>;
10
10
  toasts: any[];
11
11
  }) => {
12
- alt: <const Id extends string>(id: Id) => <Args extends Array<unknown>, A, E, R_1 extends Toast.Toast | WithToast | import("../src/experimental/commander.js").CommandContext>(handler: (...args: Args) => Effect.Effect<A, E, R_1>) => Commander.CommandOut<Args, A, E, R_1, Id>;
12
+ alt: <const Id extends string>(id: Id) => Commander.CommandContextLocal<Id> & (<Args extends Array<unknown>, A, E, R_1 extends Toast.Toast | WithToast | import("../src/experimental/commander.js").CommandContext>(handler: (...args: Args) => Effect.Effect<A, E, R_1>) => Commander.CommandOut<Args, A, E, R_1, Id>);
13
13
  fn: <const Id extends string>(id: Id) => Commander.Gen<Toast.Toast | WithToast, Id> & Commander.NonGen<Toast.Toast | WithToast, Id>;
14
14
  wrap: <const Id extends string, Args extends Array<unknown>, A_1, E_1, R_2>(mutation: {
15
15
  mutate: (...args: Args) => Effect.Effect<A_1, E_1, R_2>;
16
16
  id: Id;
17
17
  } | (((...args: Args) => Effect.Effect<A_1, E_1, R_2>) & {
18
18
  id: Id;
19
- })) => Commander.GenWrap<Toast.Toast | WithToast, Id, Args, A_1, E_1, R_2> & Commander.NonGenWrap<Toast.Toast | WithToast, Id, Args, A_1, E_1, R_2>;
19
+ })) => Commander.CommandContextLocal<Id> & Commander.GenWrap<Toast.Toast | WithToast, Id, Args, A_1, E_1, R_2> & Commander.NonGenWrap<Toast.Toast | WithToast, Id, Args, A_1, E_1, R_2>;
20
20
  alt2: <const Id extends string, MutArgs extends Array<unknown>, MutA, MutE, MutR>(id: Id | {
21
21
  id: Id;
22
22
  mutate: (...args: MutArgs) => Effect.Effect<MutA, MutE, MutR>;
23
23
  } | (((...args: MutArgs) => Effect.Effect<MutA, MutE, MutR>) & {
24
24
  id: Id;
25
- })) => <Args_1 extends Array<unknown>, A_2, E_2, R_3 extends Toast.Toast | WithToast | import("../src/experimental/commander.js").CommandContext>(handler: (ctx: Effect.fn.Gen & Effect.fn.NonGen & Commander.CommandContextLocal<Id> & {
25
+ })) => Commander.CommandContextLocal<Id> & (<Args_1 extends Array<unknown>, A_2, E_2, R_3 extends Toast.Toast | WithToast | import("../src/experimental/commander.js").CommandContext>(handler: (ctx: Effect.fn.Gen & Effect.fn.NonGen & Commander.CommandContextLocal<Id> & {
26
26
  mutate: (...args: MutArgs) => Effect.Effect<MutA, MutE, MutR>;
27
- }) => (...args: Args_1) => Effect.Effect<A_2, E_2, R_3>) => Commander.CommandOut<Args_1, A_2, E_2, R_3, Id>;
27
+ }) => (...args: Args_1) => Effect.Effect<A_2, E_2, R_3>) => Commander.CommandOut<Args_1, A_2, E_2, R_3, Id>);
28
28
  takeOver: <Args_1 extends any[], A_3, E_3, R_4, const Id extends string>(command: Commander.CommandOut<Args_1, A_3, E_3, R_4, Id>) => (...args: Args_1) => Effect.Effect<A_3, E_3, import("../src/experimental/commander.js").CommandContext | Exclude<Exclude<R_4, import("../src/experimental/commander.js").CommandContext>, import("effect/Tracer").ParentSpan>>;
29
29
  confirmOrInterrupt: (message?: string | undefined) => Effect.Effect<void, never, import("../src/experimental/commander.js").CommandContext>;
30
30
  confirm: (message?: string | undefined) => Effect.Effect<boolean, never, import("../src/experimental/commander.js").CommandContext>;
@@ -1 +1 @@
1
- {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../stubs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAElD,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AA4C5D,eAAO,MAAM,aAAa,GAAI,WAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAM,oCAgBzG,CAAA;AAEH,eAAO,MAAM,eAAe,GAC1B,UAAU;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAA;CAAE;;;;;;;;;;;;;;;;;2IAjC9F,GAAE;gCAUD,CAAC;qBAIuF,CAAC;oFAK3D,GAAG,6EAG7B,GAChB;iJAUoB,GAAI,qEAAoE,GAAI,gEAEjD,CAAC,4BAC9B,GAAI,8FACoC,GAAI;;;;mFAEgB,CAAC,4BAEtD,GAAI,8DAA6D,GAAI;4EAEG,CAAC;qBAAyB,CAAC,2BAA0B,GAAI;iBAAsD,CAAC,6BAA4B,GAAI;iBAAiF,CAAC,qCAAoC,GAAI;2DAA0H,GAAI;;CADxe,CAAA"}
1
+ {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../stubs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAElD,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AA4C5D,eAAO,MAAM,aAAa,GAAI,WAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAM,oCAgBzG,CAAA;AAEH,eAAO,MAAM,eAAe,GAC1B,UAAU;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAA;CAAE;;;;;;;;;;;;;;;;;2IA3BnG,GAAC;gCAQyF,CAAC;qBAI9E,CAAC;oFAOR,GACZ,6EAC8D,GAC9D;iJAOmB,GAAI,qEACW,GAAI,gEACO,CAAC,4BAA2B,GAAI,8FACH,GAAI;;;;mFAKnE,CAAC,4BAA2B,GAAI,8DAA6D,GAAI;4EAAqG,CAAC;qBAAyB,CAAC,2BAA0B,GAAI;iBAAsD,CAAC,6BAA4B,GAAI;iBAAiF,CAAC,qCAAoC,GAAI;2DAA0H,GAAI;;CADxlB,CAAA"}