@spoosh/angular 0.7.0 → 0.9.0

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
@@ -344,7 +344,7 @@ var import_core3 = require("@angular/core");
344
344
  var import_core4 = require("@spoosh/core");
345
345
  function createInjectWrite(options) {
346
346
  const { api, stateManager, pluginExecutor, eventEmitter } = options;
347
- return function injectWrite(writeFn) {
347
+ function injectWrite(writeFn, writeOptions) {
348
348
  const destroyRef = (0, import_core3.inject)(import_core3.DestroyRef);
349
349
  const captureSelector = () => {
350
350
  const selectorResult = {
@@ -358,12 +358,12 @@ function createInjectWrite(options) {
358
358
  }
359
359
  );
360
360
  writeFn(selectorProxy);
361
- if (!selectorResult.selector) {
361
+ if (!selectorResult.call) {
362
362
  throw new Error(
363
- 'injectWrite requires selecting an HTTP method (POST, PUT, PATCH, DELETE). Example: injectWrite((api) => api("posts").POST)'
363
+ 'injectWrite requires calling an HTTP method (POST, PUT, PATCH, DELETE). Example: injectWrite((api) => api("posts").POST())'
364
364
  );
365
365
  }
366
- return selectorResult.selector;
366
+ return selectorResult.call;
367
367
  };
368
368
  const instanceId = `angular-${Math.random().toString(36).slice(2)}`;
369
369
  let currentQueryKey = null;
@@ -426,7 +426,8 @@ function createInjectWrite(options) {
426
426
  }
427
427
  lastTriggerOptionsSignal.set(triggerOptions);
428
428
  loadingSignal.set(true);
429
- currentController.setPluginOptions({ ...triggerOptions, tags });
429
+ const mergedOptions = { ...writeOptions, ...triggerOptions, tags };
430
+ currentController.setPluginOptions(mergedOptions);
430
431
  try {
431
432
  const response = await currentController.execute(triggerOptions, {
432
433
  force: true
@@ -472,7 +473,8 @@ function createInjectWrite(options) {
472
473
  abort
473
474
  };
474
475
  return result;
475
- };
476
+ }
477
+ return injectWrite;
476
478
  }
477
479
 
478
480
  // src/injectInfiniteRead/index.ts
@@ -842,13 +844,21 @@ function create(instance) {
842
844
  eventEmitter,
843
845
  pluginExecutor
844
846
  });
847
+ const plugins = pluginExecutor.getPlugins();
848
+ const setupContext = {
849
+ stateManager,
850
+ eventEmitter,
851
+ pluginExecutor
852
+ };
853
+ for (const plugin of plugins) {
854
+ plugin.setup?.(setupContext);
855
+ }
845
856
  const instanceApiContext = {
846
857
  api,
847
858
  stateManager,
848
859
  eventEmitter,
849
860
  pluginExecutor
850
861
  };
851
- const plugins = pluginExecutor.getPlugins();
852
862
  const instanceApis = plugins.reduce(
853
863
  (acc, plugin) => {
854
864
  if (plugin.instanceApi) {
package/dist/index.mjs CHANGED
@@ -334,7 +334,7 @@ import {
334
334
  } from "@spoosh/core";
335
335
  function createInjectWrite(options) {
336
336
  const { api, stateManager, pluginExecutor, eventEmitter } = options;
337
- return function injectWrite(writeFn) {
337
+ function injectWrite(writeFn, writeOptions) {
338
338
  const destroyRef = inject2(DestroyRef2);
339
339
  const captureSelector = () => {
340
340
  const selectorResult = {
@@ -348,12 +348,12 @@ function createInjectWrite(options) {
348
348
  }
349
349
  );
350
350
  writeFn(selectorProxy);
351
- if (!selectorResult.selector) {
351
+ if (!selectorResult.call) {
352
352
  throw new Error(
353
- 'injectWrite requires selecting an HTTP method (POST, PUT, PATCH, DELETE). Example: injectWrite((api) => api("posts").POST)'
353
+ 'injectWrite requires calling an HTTP method (POST, PUT, PATCH, DELETE). Example: injectWrite((api) => api("posts").POST())'
354
354
  );
355
355
  }
356
- return selectorResult.selector;
356
+ return selectorResult.call;
357
357
  };
358
358
  const instanceId = `angular-${Math.random().toString(36).slice(2)}`;
359
359
  let currentQueryKey = null;
@@ -416,7 +416,8 @@ function createInjectWrite(options) {
416
416
  }
417
417
  lastTriggerOptionsSignal.set(triggerOptions);
418
418
  loadingSignal.set(true);
419
- currentController.setPluginOptions({ ...triggerOptions, tags });
419
+ const mergedOptions = { ...writeOptions, ...triggerOptions, tags };
420
+ currentController.setPluginOptions(mergedOptions);
420
421
  try {
421
422
  const response = await currentController.execute(triggerOptions, {
422
423
  force: true
@@ -462,7 +463,8 @@ function createInjectWrite(options) {
462
463
  abort
463
464
  };
464
465
  return result;
465
- };
466
+ }
467
+ return injectWrite;
466
468
  }
467
469
 
468
470
  // src/injectInfiniteRead/index.ts
@@ -844,13 +846,21 @@ function create(instance) {
844
846
  eventEmitter,
845
847
  pluginExecutor
846
848
  });
849
+ const plugins = pluginExecutor.getPlugins();
850
+ const setupContext = {
851
+ stateManager,
852
+ eventEmitter,
853
+ pluginExecutor
854
+ };
855
+ for (const plugin of plugins) {
856
+ plugin.setup?.(setupContext);
857
+ }
847
858
  const instanceApiContext = {
848
859
  api,
849
860
  stateManager,
850
861
  eventEmitter,
851
862
  pluginExecutor
852
863
  };
853
- const plugins = pluginExecutor.getPlugins();
854
864
  const instanceApis = plugins.reduce(
855
865
  (acc, plugin) => {
856
866
  if (plugin.instanceApi) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spoosh/angular",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "license": "MIT",
5
5
  "description": "Angular signals integration for Spoosh API toolkit",
6
6
  "keywords": [
@@ -34,13 +34,13 @@
34
34
  }
35
35
  },
36
36
  "peerDependencies": {
37
- "@spoosh/core": ">=0.12.0",
37
+ "@spoosh/core": ">=0.13.1",
38
38
  "@angular/core": ">=16.0.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@angular/core": "^19.0.0",
42
- "@spoosh/core": "0.12.0",
43
- "@spoosh/test-utils": "0.1.8"
41
+ "@angular/core": "^21.1.0",
42
+ "@spoosh/core": "0.13.1",
43
+ "@spoosh/test-utils": "0.2.0"
44
44
  },
45
45
  "scripts": {
46
46
  "dev": "tsup --watch",