@spoosh/angular 0.8.0 → 0.9.1

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/README.md CHANGED
@@ -91,7 +91,7 @@ Trigger mutations with loading and error states.
91
91
  export class CreateUserComponent {
92
92
  title = signal("");
93
93
 
94
- createUser = injectWrite((api) => api("users").POST);
94
+ createUser = injectWrite((api) => api("users").POST());
95
95
 
96
96
  async handleSubmit() {
97
97
  const result = await this.createUser.trigger({
@@ -105,7 +105,7 @@ export class CreateUserComponent {
105
105
  }
106
106
 
107
107
  // With path parameters
108
- updateUser = injectWrite((api) => api("users/:id").PUT);
108
+ updateUser = injectWrite((api) => api("users/:id").PUT());
109
109
 
110
110
  async updateUserName(userId: number, name: string) {
111
111
  await this.updateUser.trigger({
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _spoosh_core from '@spoosh/core';
2
- import { PluginArray, StateManager, EventEmitter, PluginExecutor, MethodOptionsMap, CoreRequestOptionsBase, ReadClient, TagOptions, SpooshPlugin, PluginTypeConfig, SpooshResponse, InfiniteRequestOptions, ResolveTypes, ResolverContext, WriteClient, ResolveResultTypes, MergePluginInstanceApi } from '@spoosh/core';
2
+ import { PluginArray, StateManager, EventEmitter, PluginExecutor, MethodOptionsMap, CoreRequestOptionsBase, ReadClient, TagOptions, SpooshPlugin, PluginTypeConfig, SpooshResponse, InfiniteRequestOptions, ResolveTypes, ResolverContext, WriteSelectorClient, SpooshBody, ResolveResultTypes, MergePluginInstanceApi } from '@spoosh/core';
3
3
  import { Signal } from '@angular/core';
4
4
 
5
5
  interface SpooshInstanceShape<TApi, TSchema, TDefaultError, TPlugins extends PluginArray> {
@@ -122,7 +122,31 @@ interface BaseWriteResult<TData, TError, TOptions, TPluginResult = Record<string
122
122
  meta: Signal<TPluginResult>;
123
123
  abort: () => void;
124
124
  }
125
- type WriteApiClient<TSchema, TDefaultError> = WriteClient<TSchema, TDefaultError>;
125
+ type TriggerAwaitedReturn<T> = T extends (...args: any[]) => infer R ? Awaited<R> : never;
126
+ type ExtractInputFromResponse$1<T> = T extends {
127
+ input: infer I;
128
+ } ? I : never;
129
+ type ExtractTriggerQuery$1<I> = I extends {
130
+ query: infer Q;
131
+ } ? undefined extends Q ? {
132
+ query?: Exclude<Q, undefined>;
133
+ } : {
134
+ query: Q;
135
+ } : unknown;
136
+ type ExtractTriggerBody$1<I> = I extends {
137
+ body: infer B;
138
+ } ? undefined extends B ? {
139
+ body?: Exclude<B, undefined> | SpooshBody<Exclude<B, undefined>>;
140
+ } : {
141
+ body: B | SpooshBody<B>;
142
+ } : unknown;
143
+ type ExtractTriggerParams$1<I> = I extends {
144
+ params: infer P;
145
+ } ? {
146
+ params: P;
147
+ } : unknown;
148
+ type WriteTriggerInput<T> = ExtractInputFromResponse$1<TriggerAwaitedReturn<T>> extends infer I ? [I] extends [never] ? object : ExtractTriggerQuery$1<I> & ExtractTriggerBody$1<I> & ExtractTriggerParams$1<I> : object;
149
+ type WriteApiClient<TSchema, TDefaultError> = WriteSelectorClient<TSchema, TDefaultError>;
126
150
 
127
151
  type SuccessResponse<T> = Extract<T, {
128
152
  data: unknown;
@@ -163,64 +187,83 @@ type ExtractMethodBody<T> = ExtractMethodOptions<T> extends {
163
187
  body: infer B;
164
188
  } ? B : never;
165
189
 
166
- declare function createInjectWrite<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TMethod extends (...args: never[]) => Promise<SpooshResponse<unknown, unknown>>, TWriteOpts extends (TMethod extends (...args: infer A) => unknown ? A[0] : never) & _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
167
- writeOptions: infer W_1;
168
- } ? W_1 : object : object : never : never) extends infer T_4 ? T_4 extends (TPlugins[number] extends infer T_5 ? T_5 extends TPlugins[number] ? T_5 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
169
- writeOptions: infer W_1;
170
- } ? W_1 : object : object : never : never) ? T_4 extends unknown ? (x: T_4) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TMethod extends (...args: never[]) => infer R ? Extract<Awaited<R>, {
190
+ declare function createInjectWrite<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TWriteFn extends (api: WriteApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<unknown, unknown>>, TWriteOpts extends _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
191
+ writeOptions: infer W;
192
+ } ? W : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
193
+ writeOptions: infer W;
194
+ } ? W : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TWriteFn extends (...args: any[]) => infer R ? Extract<Awaited<R>, {
171
195
  data: unknown;
172
196
  error?: undefined;
173
197
  }> extends {
174
198
  data: infer D;
175
- } ? D : unknown : unknown, [TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
199
+ } ? D : unknown : unknown, [TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
176
200
  error: unknown;
177
201
  data?: undefined;
178
202
  }> extends {
179
203
  error: infer E;
180
- } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
204
+ } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
181
205
  error: unknown;
182
206
  data?: undefined;
183
207
  }> extends {
184
208
  error: infer E;
185
- } ? E : unknown : unknown, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>>> = (TMethod extends (...args: infer A) => unknown ? A[0] : never) & _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T_6 ? T_6 extends TPlugins[number] ? T_6 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
186
- writeOptions: infer W_1;
187
- } ? W_1 : object : object : never : never) extends infer T_7 ? T_7 extends (TPlugins[number] extends infer T_8 ? T_8 extends TPlugins[number] ? T_8 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
188
- writeOptions: infer W_1;
189
- } ? W_1 : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TMethod extends (...args: never[]) => infer R ? Extract<Awaited<R>, {
209
+ } ? E : unknown : unknown, ExtractMethodQuery<TWriteFn>, ExtractMethodBody<TWriteFn>, ExtractResponseParamNames<TWriteFn> extends never ? never : Record<ExtractResponseParamNames<TWriteFn>, string | number>>> = _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
210
+ writeOptions: infer W;
211
+ } ? W : object : object : never : never) extends infer T_4 ? T_4 extends (TPlugins[number] extends infer T_5 ? T_5 extends TPlugins[number] ? T_5 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
212
+ writeOptions: infer W;
213
+ } ? W : object : object : never : never) ? T_4 extends unknown ? (x: T_4) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TWriteFn extends (...args: any[]) => infer R ? Extract<Awaited<R>, {
190
214
  data: unknown;
191
215
  error?: undefined;
192
216
  }> extends {
193
217
  data: infer D;
194
- } ? D : unknown : unknown, [TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
218
+ } ? D : unknown : unknown, [TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
195
219
  error: unknown;
196
220
  data?: undefined;
197
221
  }> extends {
198
222
  error: infer E;
199
- } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
223
+ } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
200
224
  error: unknown;
201
225
  data?: undefined;
202
226
  }> extends {
203
227
  error: infer E;
204
- } ? E : unknown : unknown, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>>>>(writeFn: (api: WriteApiClient<TSchema, TDefaultError>) => TMethod) => BaseWriteResult<TMethod extends (...args: never[]) => infer R ? Extract<Awaited<R>, {
228
+ } ? E : unknown : unknown, ExtractMethodQuery<TWriteFn>, ExtractMethodBody<TWriteFn>, ExtractResponseParamNames<TWriteFn> extends never ? never : Record<ExtractResponseParamNames<TWriteFn>, string | number>>>>(writeFn: TWriteFn, writeOptions?: TWriteOpts) => BaseWriteResult<TWriteFn extends (...args: any[]) => infer R ? Extract<Awaited<R>, {
205
229
  data: unknown;
206
230
  error?: undefined;
207
231
  }> extends {
208
232
  data: infer D;
209
- } ? D : unknown : unknown, [TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
233
+ } ? D : unknown : unknown, [TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
210
234
  error: unknown;
211
235
  data?: undefined;
212
236
  }> extends {
213
237
  error: infer E;
214
- } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
238
+ } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
215
239
  error: unknown;
216
240
  data?: undefined;
217
241
  }> extends {
218
242
  error: infer E;
219
- } ? E : unknown : unknown, TWriteOpts, ResolveResultTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
220
- writeResult: infer W;
221
- } ? W : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
222
- writeResult: infer W;
223
- } ? W : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, TWriteOpts>> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseParamNames<TMethod>>;
243
+ } ? E : unknown : unknown, WriteTriggerInput<TWriteFn> & _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T_6 ? T_6 extends TPlugins[number] ? T_6 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
244
+ writeTriggerOptions: infer W_1;
245
+ } ? W_1 : object : object : never : never) extends infer T_7 ? T_7 extends (TPlugins[number] extends infer T_8 ? T_8 extends TPlugins[number] ? T_8 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
246
+ writeTriggerOptions: infer W_1;
247
+ } ? W_1 : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TWriteFn extends (...args: any[]) => infer R ? Extract<Awaited<R>, {
248
+ data: unknown;
249
+ error?: undefined;
250
+ }> extends {
251
+ data: infer D;
252
+ } ? D : unknown : unknown, [TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
253
+ error: unknown;
254
+ data?: undefined;
255
+ }> extends {
256
+ error: infer E;
257
+ } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
258
+ error: unknown;
259
+ data?: undefined;
260
+ }> extends {
261
+ error: infer E;
262
+ } ? E : unknown : unknown, ExtractMethodQuery<TWriteFn>, ExtractMethodBody<TWriteFn>, ExtractResponseParamNames<TWriteFn> extends never ? never : Record<ExtractResponseParamNames<TWriteFn>, string | number>>>, ResolveResultTypes<((TPlugins[number] extends infer T_9 ? T_9 extends TPlugins[number] ? T_9 extends SpooshPlugin<infer Types_2 extends PluginTypeConfig> ? Types_2 extends {
263
+ writeResult: infer W_2;
264
+ } ? W_2 : object : object : never : never) extends infer T_10 ? T_10 extends (TPlugins[number] extends infer T_11 ? T_11 extends TPlugins[number] ? T_11 extends SpooshPlugin<infer Types_2 extends PluginTypeConfig> ? Types_2 extends {
265
+ writeResult: infer W_2;
266
+ } ? W_2 : object : object : never : never) ? T_10 extends unknown ? (x: T_10) => void : never : never : never) extends (x: infer I) => void ? I : never, TWriteOpts>> & WriteResponseInputFields<ExtractResponseQuery<TWriteFn>, ExtractResponseBody<TWriteFn>, ExtractResponseParamNames<TWriteFn>>;
224
267
 
225
268
  interface BaseReadOptions extends TagOptions {
226
269
  enabled?: EnabledOption;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _spoosh_core from '@spoosh/core';
2
- import { PluginArray, StateManager, EventEmitter, PluginExecutor, MethodOptionsMap, CoreRequestOptionsBase, ReadClient, TagOptions, SpooshPlugin, PluginTypeConfig, SpooshResponse, InfiniteRequestOptions, ResolveTypes, ResolverContext, WriteClient, ResolveResultTypes, MergePluginInstanceApi } from '@spoosh/core';
2
+ import { PluginArray, StateManager, EventEmitter, PluginExecutor, MethodOptionsMap, CoreRequestOptionsBase, ReadClient, TagOptions, SpooshPlugin, PluginTypeConfig, SpooshResponse, InfiniteRequestOptions, ResolveTypes, ResolverContext, WriteSelectorClient, SpooshBody, ResolveResultTypes, MergePluginInstanceApi } from '@spoosh/core';
3
3
  import { Signal } from '@angular/core';
4
4
 
5
5
  interface SpooshInstanceShape<TApi, TSchema, TDefaultError, TPlugins extends PluginArray> {
@@ -122,7 +122,31 @@ interface BaseWriteResult<TData, TError, TOptions, TPluginResult = Record<string
122
122
  meta: Signal<TPluginResult>;
123
123
  abort: () => void;
124
124
  }
125
- type WriteApiClient<TSchema, TDefaultError> = WriteClient<TSchema, TDefaultError>;
125
+ type TriggerAwaitedReturn<T> = T extends (...args: any[]) => infer R ? Awaited<R> : never;
126
+ type ExtractInputFromResponse$1<T> = T extends {
127
+ input: infer I;
128
+ } ? I : never;
129
+ type ExtractTriggerQuery$1<I> = I extends {
130
+ query: infer Q;
131
+ } ? undefined extends Q ? {
132
+ query?: Exclude<Q, undefined>;
133
+ } : {
134
+ query: Q;
135
+ } : unknown;
136
+ type ExtractTriggerBody$1<I> = I extends {
137
+ body: infer B;
138
+ } ? undefined extends B ? {
139
+ body?: Exclude<B, undefined> | SpooshBody<Exclude<B, undefined>>;
140
+ } : {
141
+ body: B | SpooshBody<B>;
142
+ } : unknown;
143
+ type ExtractTriggerParams$1<I> = I extends {
144
+ params: infer P;
145
+ } ? {
146
+ params: P;
147
+ } : unknown;
148
+ type WriteTriggerInput<T> = ExtractInputFromResponse$1<TriggerAwaitedReturn<T>> extends infer I ? [I] extends [never] ? object : ExtractTriggerQuery$1<I> & ExtractTriggerBody$1<I> & ExtractTriggerParams$1<I> : object;
149
+ type WriteApiClient<TSchema, TDefaultError> = WriteSelectorClient<TSchema, TDefaultError>;
126
150
 
127
151
  type SuccessResponse<T> = Extract<T, {
128
152
  data: unknown;
@@ -163,64 +187,83 @@ type ExtractMethodBody<T> = ExtractMethodOptions<T> extends {
163
187
  body: infer B;
164
188
  } ? B : never;
165
189
 
166
- declare function createInjectWrite<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TMethod extends (...args: never[]) => Promise<SpooshResponse<unknown, unknown>>, TWriteOpts extends (TMethod extends (...args: infer A) => unknown ? A[0] : never) & _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
167
- writeOptions: infer W_1;
168
- } ? W_1 : object : object : never : never) extends infer T_4 ? T_4 extends (TPlugins[number] extends infer T_5 ? T_5 extends TPlugins[number] ? T_5 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
169
- writeOptions: infer W_1;
170
- } ? W_1 : object : object : never : never) ? T_4 extends unknown ? (x: T_4) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TMethod extends (...args: never[]) => infer R ? Extract<Awaited<R>, {
190
+ declare function createInjectWrite<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TWriteFn extends (api: WriteApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<unknown, unknown>>, TWriteOpts extends _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
191
+ writeOptions: infer W;
192
+ } ? W : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
193
+ writeOptions: infer W;
194
+ } ? W : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TWriteFn extends (...args: any[]) => infer R ? Extract<Awaited<R>, {
171
195
  data: unknown;
172
196
  error?: undefined;
173
197
  }> extends {
174
198
  data: infer D;
175
- } ? D : unknown : unknown, [TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
199
+ } ? D : unknown : unknown, [TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
176
200
  error: unknown;
177
201
  data?: undefined;
178
202
  }> extends {
179
203
  error: infer E;
180
- } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
204
+ } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
181
205
  error: unknown;
182
206
  data?: undefined;
183
207
  }> extends {
184
208
  error: infer E;
185
- } ? E : unknown : unknown, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>>> = (TMethod extends (...args: infer A) => unknown ? A[0] : never) & _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T_6 ? T_6 extends TPlugins[number] ? T_6 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
186
- writeOptions: infer W_1;
187
- } ? W_1 : object : object : never : never) extends infer T_7 ? T_7 extends (TPlugins[number] extends infer T_8 ? T_8 extends TPlugins[number] ? T_8 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
188
- writeOptions: infer W_1;
189
- } ? W_1 : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TMethod extends (...args: never[]) => infer R ? Extract<Awaited<R>, {
209
+ } ? E : unknown : unknown, ExtractMethodQuery<TWriteFn>, ExtractMethodBody<TWriteFn>, ExtractResponseParamNames<TWriteFn> extends never ? never : Record<ExtractResponseParamNames<TWriteFn>, string | number>>> = _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
210
+ writeOptions: infer W;
211
+ } ? W : object : object : never : never) extends infer T_4 ? T_4 extends (TPlugins[number] extends infer T_5 ? T_5 extends TPlugins[number] ? T_5 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
212
+ writeOptions: infer W;
213
+ } ? W : object : object : never : never) ? T_4 extends unknown ? (x: T_4) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TWriteFn extends (...args: any[]) => infer R ? Extract<Awaited<R>, {
190
214
  data: unknown;
191
215
  error?: undefined;
192
216
  }> extends {
193
217
  data: infer D;
194
- } ? D : unknown : unknown, [TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
218
+ } ? D : unknown : unknown, [TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
195
219
  error: unknown;
196
220
  data?: undefined;
197
221
  }> extends {
198
222
  error: infer E;
199
- } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
223
+ } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
200
224
  error: unknown;
201
225
  data?: undefined;
202
226
  }> extends {
203
227
  error: infer E;
204
- } ? E : unknown : unknown, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>>>>(writeFn: (api: WriteApiClient<TSchema, TDefaultError>) => TMethod) => BaseWriteResult<TMethod extends (...args: never[]) => infer R ? Extract<Awaited<R>, {
228
+ } ? E : unknown : unknown, ExtractMethodQuery<TWriteFn>, ExtractMethodBody<TWriteFn>, ExtractResponseParamNames<TWriteFn> extends never ? never : Record<ExtractResponseParamNames<TWriteFn>, string | number>>>>(writeFn: TWriteFn, writeOptions?: TWriteOpts) => BaseWriteResult<TWriteFn extends (...args: any[]) => infer R ? Extract<Awaited<R>, {
205
229
  data: unknown;
206
230
  error?: undefined;
207
231
  }> extends {
208
232
  data: infer D;
209
- } ? D : unknown : unknown, [TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
233
+ } ? D : unknown : unknown, [TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
210
234
  error: unknown;
211
235
  data?: undefined;
212
236
  }> extends {
213
237
  error: infer E;
214
- } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TMethod extends (...args: never[]) => infer R_1 ? Extract<Awaited<R_1>, {
238
+ } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
215
239
  error: unknown;
216
240
  data?: undefined;
217
241
  }> extends {
218
242
  error: infer E;
219
- } ? E : unknown : unknown, TWriteOpts, ResolveResultTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
220
- writeResult: infer W;
221
- } ? W : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
222
- writeResult: infer W;
223
- } ? W : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, TWriteOpts>> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseParamNames<TMethod>>;
243
+ } ? E : unknown : unknown, WriteTriggerInput<TWriteFn> & _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T_6 ? T_6 extends TPlugins[number] ? T_6 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
244
+ writeTriggerOptions: infer W_1;
245
+ } ? W_1 : object : object : never : never) extends infer T_7 ? T_7 extends (TPlugins[number] extends infer T_8 ? T_8 extends TPlugins[number] ? T_8 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
246
+ writeTriggerOptions: infer W_1;
247
+ } ? W_1 : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, TWriteFn extends (...args: any[]) => infer R ? Extract<Awaited<R>, {
248
+ data: unknown;
249
+ error?: undefined;
250
+ }> extends {
251
+ data: infer D;
252
+ } ? D : unknown : unknown, [TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
253
+ error: unknown;
254
+ data?: undefined;
255
+ }> extends {
256
+ error: infer E;
257
+ } ? E : unknown : unknown] extends [unknown] ? TDefaultError : TWriteFn extends (...args: any[]) => infer R_1 ? Extract<Awaited<R_1>, {
258
+ error: unknown;
259
+ data?: undefined;
260
+ }> extends {
261
+ error: infer E;
262
+ } ? E : unknown : unknown, ExtractMethodQuery<TWriteFn>, ExtractMethodBody<TWriteFn>, ExtractResponseParamNames<TWriteFn> extends never ? never : Record<ExtractResponseParamNames<TWriteFn>, string | number>>>, ResolveResultTypes<((TPlugins[number] extends infer T_9 ? T_9 extends TPlugins[number] ? T_9 extends SpooshPlugin<infer Types_2 extends PluginTypeConfig> ? Types_2 extends {
263
+ writeResult: infer W_2;
264
+ } ? W_2 : object : object : never : never) extends infer T_10 ? T_10 extends (TPlugins[number] extends infer T_11 ? T_11 extends TPlugins[number] ? T_11 extends SpooshPlugin<infer Types_2 extends PluginTypeConfig> ? Types_2 extends {
265
+ writeResult: infer W_2;
266
+ } ? W_2 : object : object : never : never) ? T_10 extends unknown ? (x: T_10) => void : never : never : never) extends (x: infer I) => void ? I : never, TWriteOpts>> & WriteResponseInputFields<ExtractResponseQuery<TWriteFn>, ExtractResponseBody<TWriteFn>, ExtractResponseParamNames<TWriteFn>>;
224
267
 
225
268
  interface BaseReadOptions extends TagOptions {
226
269
  enabled?: EnabledOption;
package/dist/index.js CHANGED
@@ -103,6 +103,7 @@ function createInjectRead(options) {
103
103
  const hasData = dataSignal() !== void 0;
104
104
  loadingSignal.set(!hasData);
105
105
  fetchingSignal.set(true);
106
+ errorSignal.set(void 0);
106
107
  try {
107
108
  const execOptions = overrideOptions ? {
108
109
  ...currentController?.getContext().request,
@@ -344,7 +345,7 @@ var import_core3 = require("@angular/core");
344
345
  var import_core4 = require("@spoosh/core");
345
346
  function createInjectWrite(options) {
346
347
  const { api, stateManager, pluginExecutor, eventEmitter } = options;
347
- return function injectWrite(writeFn) {
348
+ function injectWrite(writeFn, writeOptions) {
348
349
  const destroyRef = (0, import_core3.inject)(import_core3.DestroyRef);
349
350
  const captureSelector = () => {
350
351
  const selectorResult = {
@@ -358,12 +359,12 @@ function createInjectWrite(options) {
358
359
  }
359
360
  );
360
361
  writeFn(selectorProxy);
361
- if (!selectorResult.selector) {
362
+ if (!selectorResult.call) {
362
363
  throw new Error(
363
- 'injectWrite requires selecting an HTTP method (POST, PUT, PATCH, DELETE). Example: injectWrite((api) => api("posts").POST)'
364
+ 'injectWrite requires calling an HTTP method (POST, PUT, PATCH, DELETE). Example: injectWrite((api) => api("posts").POST())'
364
365
  );
365
366
  }
366
- return selectorResult.selector;
367
+ return selectorResult.call;
367
368
  };
368
369
  const instanceId = `angular-${Math.random().toString(36).slice(2)}`;
369
370
  let currentQueryKey = null;
@@ -426,7 +427,9 @@ function createInjectWrite(options) {
426
427
  }
427
428
  lastTriggerOptionsSignal.set(triggerOptions);
428
429
  loadingSignal.set(true);
429
- currentController.setPluginOptions({ ...triggerOptions, tags });
430
+ errorSignal.set(void 0);
431
+ const mergedOptions = { ...writeOptions, ...triggerOptions, tags };
432
+ currentController.setPluginOptions(mergedOptions);
430
433
  try {
431
434
  const response = await currentController.execute(triggerOptions, {
432
435
  force: true
@@ -472,7 +475,8 @@ function createInjectWrite(options) {
472
475
  abort
473
476
  };
474
477
  return result;
475
- };
478
+ }
479
+ return injectWrite;
476
480
  }
477
481
 
478
482
  // src/injectInfiniteRead/index.ts
@@ -555,6 +559,7 @@ function createInjectInfiniteRead(options) {
555
559
  if (currentState.data === void 0 && !isFetching) {
556
560
  loadingSignal.set(true);
557
561
  fetchingNextSignal.set(true);
562
+ errorSignal.set(void 0);
558
563
  currentController.fetchNext().finally(() => {
559
564
  updateSignalsFromState();
560
565
  loadingSignal.set(false);
package/dist/index.mjs CHANGED
@@ -88,6 +88,7 @@ function createInjectRead(options) {
88
88
  const hasData = dataSignal() !== void 0;
89
89
  loadingSignal.set(!hasData);
90
90
  fetchingSignal.set(true);
91
+ errorSignal.set(void 0);
91
92
  try {
92
93
  const execOptions = overrideOptions ? {
93
94
  ...currentController?.getContext().request,
@@ -334,7 +335,7 @@ import {
334
335
  } from "@spoosh/core";
335
336
  function createInjectWrite(options) {
336
337
  const { api, stateManager, pluginExecutor, eventEmitter } = options;
337
- return function injectWrite(writeFn) {
338
+ function injectWrite(writeFn, writeOptions) {
338
339
  const destroyRef = inject2(DestroyRef2);
339
340
  const captureSelector = () => {
340
341
  const selectorResult = {
@@ -348,12 +349,12 @@ function createInjectWrite(options) {
348
349
  }
349
350
  );
350
351
  writeFn(selectorProxy);
351
- if (!selectorResult.selector) {
352
+ if (!selectorResult.call) {
352
353
  throw new Error(
353
- 'injectWrite requires selecting an HTTP method (POST, PUT, PATCH, DELETE). Example: injectWrite((api) => api("posts").POST)'
354
+ 'injectWrite requires calling an HTTP method (POST, PUT, PATCH, DELETE). Example: injectWrite((api) => api("posts").POST())'
354
355
  );
355
356
  }
356
- return selectorResult.selector;
357
+ return selectorResult.call;
357
358
  };
358
359
  const instanceId = `angular-${Math.random().toString(36).slice(2)}`;
359
360
  let currentQueryKey = null;
@@ -416,7 +417,9 @@ function createInjectWrite(options) {
416
417
  }
417
418
  lastTriggerOptionsSignal.set(triggerOptions);
418
419
  loadingSignal.set(true);
419
- currentController.setPluginOptions({ ...triggerOptions, tags });
420
+ errorSignal.set(void 0);
421
+ const mergedOptions = { ...writeOptions, ...triggerOptions, tags };
422
+ currentController.setPluginOptions(mergedOptions);
420
423
  try {
421
424
  const response = await currentController.execute(triggerOptions, {
422
425
  force: true
@@ -462,7 +465,8 @@ function createInjectWrite(options) {
462
465
  abort
463
466
  };
464
467
  return result;
465
- };
468
+ }
469
+ return injectWrite;
466
470
  }
467
471
 
468
472
  // src/injectInfiniteRead/index.ts
@@ -557,6 +561,7 @@ function createInjectInfiniteRead(options) {
557
561
  if (currentState.data === void 0 && !isFetching) {
558
562
  loadingSignal.set(true);
559
563
  fetchingNextSignal.set(true);
564
+ errorSignal.set(void 0);
560
565
  currentController.fetchNext().finally(() => {
561
566
  updateSignalsFromState();
562
567
  loadingSignal.set(false);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spoosh/angular",
3
- "version": "0.8.0",
3
+ "version": "0.9.1",
4
4
  "license": "MIT",
5
5
  "description": "Angular signals integration for Spoosh API toolkit",
6
6
  "keywords": [
@@ -34,12 +34,12 @@
34
34
  }
35
35
  },
36
36
  "peerDependencies": {
37
- "@spoosh/core": ">=0.13.0",
37
+ "@spoosh/core": ">=0.13.2",
38
38
  "@angular/core": ">=16.0.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@angular/core": "^19.0.0",
42
- "@spoosh/core": "0.13.0",
41
+ "@angular/core": "^21.1.0",
42
+ "@spoosh/core": "0.13.2",
43
43
  "@spoosh/test-utils": "0.2.0"
44
44
  },
45
45
  "scripts": {