diff --git a/examples/angular/devtools-panel/src/app/components/lazy-load-devtools-panel-example.component.ts b/examples/angular/devtools-panel/src/app/components/lazy-load-devtools-panel-example.component.ts index 7145fa8498..cd2366a4ce 100644 --- a/examples/angular/devtools-panel/src/app/components/lazy-load-devtools-panel-example.component.ts +++ b/examples/angular/devtools-panel/src/app/components/lazy-load-devtools-panel-example.component.ts @@ -51,7 +51,9 @@ export default class LazyLoadDevtoolsPanelExampleComponent { this.devtools.set( import('@tanstack/angular-query-devtools-experimental').then( ({ injectDevtoolsPanel }) => - injectDevtoolsPanel(this.devToolsOptions, this.injector), + injectDevtoolsPanel(this.devToolsOptions, { + injector: this.injector, + }), ), ) } diff --git a/packages/angular-query-devtools-experimental/src/inject-devtools-panel.ts b/packages/angular-query-devtools-experimental/src/inject-devtools-panel.ts index 7c558840cd..0fdff618fc 100644 --- a/packages/angular-query-devtools-experimental/src/inject-devtools-panel.ts +++ b/packages/angular-query-devtools-experimental/src/inject-devtools-panel.ts @@ -18,6 +18,15 @@ import { isPlatformBrowser } from '@angular/common' import type { ElementRef } from '@angular/core' import type { DevtoolsErrorType } from '@tanstack/query-devtools' +export interface InjectDevtoolsPanelOptions { + /** + * The `Injector` in which to create the devtools panel. + * + * If this is not provided, the current injection context will be used instead (via `inject`). + */ + injector?: Injector +} + /** * Inject a TanStack Query devtools panel and render it in the DOM. * @@ -25,24 +34,24 @@ import type { DevtoolsErrorType } from '@tanstack/query-devtools' * the devtools as part of your own devtools. * * Consider `withDevtools` instead if you don't need this. - * @param optionsFn - A function that returns devtools panel options. - * @param injector - The Angular injector to use. + * @param injectDevtoolsPanelFn - A function that returns devtools panel options. + * @param options - Additional configuration * @returns DevtoolsPanelRef * @see https://tanstack.com/query/v5/docs/framework/angular/devtools */ export function injectDevtoolsPanel( - optionsFn: () => DevtoolsPanelOptions, - injector?: Injector, + injectDevtoolsPanelFn: () => DevtoolsPanelOptions, + options?: InjectDevtoolsPanelOptions, ): DevtoolsPanelRef { - !injector && assertInInjectionContext(injectDevtoolsPanel) - const currentInjector = injector ?? inject(Injector) + !options?.injector && assertInInjectionContext(injectDevtoolsPanel) + const currentInjector = options?.injector ?? inject(Injector) return runInInjectionContext(currentInjector, () => { const destroyRef = inject(DestroyRef) const isBrowser = isPlatformBrowser(inject(PLATFORM_ID)) const injectedClient = inject(QueryClient, { optional: true }) - const options = computed(optionsFn) + const queryOptions = computed(injectDevtoolsPanelFn) let devtools: TanstackQueryDevtoolsPanel | null = null const destroy = () => { @@ -63,7 +72,7 @@ export function injectDevtoolsPanel( shadowDOMTarget, onClose, hostElement, - } = options() + } = queryOptions() untracked(() => { if (!client) throw new Error('No QueryClient found') diff --git a/packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts b/packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts index a936bed70f..c91c004294 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts @@ -87,7 +87,9 @@ describe('injectInfiniteQuery', () => { initialPageParam: 0, getNextPageParam: () => 12, }), - TestBed.inject(Injector), + { + injector: TestBed.inject(Injector), + }, ) expect(query.status()).toBe('pending') diff --git a/packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts b/packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts index 41eaf17814..fbbe9a6f00 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts @@ -60,7 +60,9 @@ describe('injectIsFetching', () => { test('can be used outside injection context when passing an injector', () => { expect( - injectIsFetching(undefined, TestBed.inject(Injector)), + injectIsFetching(undefined, { + injector: TestBed.inject(Injector), + }), ).not.toThrow() }) }) diff --git a/packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts b/packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts index 4f55308b54..08b6961660 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts @@ -60,7 +60,9 @@ describe('injectIsMutating', () => { test('can be used outside injection context when passing an injector', () => { expect( - injectIsMutating(undefined, TestBed.inject(Injector)), + injectIsMutating(undefined, { + injector: TestBed.inject(Injector), + }), ).not.toThrow() }) }) diff --git a/packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts b/packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts index d774775c39..b61b4e25b0 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts @@ -466,7 +466,9 @@ describe('injectMutation', () => { mutationKey: ['injectionContextError'], mutationFn: () => Promise.resolve(), }), - TestBed.inject(Injector), + { + injector: TestBed.inject(Injector), + }, ) }).not.toThrow() }) diff --git a/packages/angular-query-experimental/src/__tests__/inject-query.test.ts b/packages/angular-query-experimental/src/__tests__/inject-query.test.ts index 39c660e172..849a7ef42e 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-query.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-query.test.ts @@ -551,7 +551,9 @@ describe('injectQuery', () => { queryKey: ['manualInjector'], queryFn: simpleFetcher, }), - TestBed.inject(Injector), + { + injector: TestBed.inject(Injector), + }, ) expect(query.status()).toBe('pending') diff --git a/packages/angular-query-experimental/src/inject-infinite-query.ts b/packages/angular-query-experimental/src/inject-infinite-query.ts index b6248ce75b..8f6bb75ed1 100644 --- a/packages/angular-query-experimental/src/inject-infinite-query.ts +++ b/packages/angular-query-experimental/src/inject-infinite-query.ts @@ -1,7 +1,6 @@ import { InfiniteQueryObserver } from '@tanstack/query-core' import { createBaseQuery } from './create-base-query' import { assertInjector } from './util/assert-injector/assert-injector' -import type { Injector } from '@angular/core' import type { DefaultError, InfiniteData, @@ -17,12 +16,22 @@ import type { DefinedInitialDataInfiniteOptions, UndefinedInitialDataInfiniteOptions, } from './infinite-query-options' +import type { Injector } from '@angular/core' + +export interface InjectInfiniteQueryOptions { + /** + * The `Injector` in which to create the infinite query. + * + * If this is not provided, the current injection context will be used instead (via `inject`). + */ + injector?: Injector +} /** * Injects an infinite query: a declarative dependency on an asynchronous source of data that is tied to a unique key. * Infinite queries can additively "load more" data onto an existing set of data or "infinite scroll" - * @param optionsFn - A function that returns infinite query options. - * @param injector - The Angular injector to use. + * @param injectInfiniteQueryFn - A function that returns infinite query options. + * @param options - Additional configuration. * @returns The infinite query result. * @public */ @@ -33,21 +42,21 @@ export function injectInfiniteQuery< TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, >( - optionsFn: () => DefinedInitialDataInfiniteOptions< + injectInfiniteQueryFn: () => DefinedInitialDataInfiniteOptions< TQueryFnData, TError, TData, TQueryKey, TPageParam >, - injector?: Injector, + options?: InjectInfiniteQueryOptions, ): DefinedCreateInfiniteQueryResult /** * Injects an infinite query: a declarative dependency on an asynchronous source of data that is tied to a unique key. * Infinite queries can additively "load more" data onto an existing set of data or "infinite scroll" - * @param optionsFn - A function that returns infinite query options. - * @param injector - The Angular injector to use. + * @param injectInfiniteQueryFn - A function that returns infinite query options. + * @param options - Additional configuration. * @returns The infinite query result. * @public */ @@ -58,21 +67,21 @@ export function injectInfiniteQuery< TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, >( - optionsFn: () => UndefinedInitialDataInfiniteOptions< + injectInfiniteQueryFn: () => UndefinedInitialDataInfiniteOptions< TQueryFnData, TError, TData, TQueryKey, TPageParam >, - injector?: Injector, + options?: InjectInfiniteQueryOptions, ): CreateInfiniteQueryResult /** * Injects an infinite query: a declarative dependency on an asynchronous source of data that is tied to a unique key. * Infinite queries can additively "load more" data onto an existing set of data or "infinite scroll" - * @param optionsFn - A function that returns infinite query options. - * @param injector - The Angular injector to use. + * @param injectInfiniteQueryFn - A function that returns infinite query options. + * @param options - Additional configuration. * @returns The infinite query result. * @public */ @@ -83,7 +92,7 @@ export function injectInfiniteQuery< TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, >( - optionsFn: () => CreateInfiniteQueryOptions< + injectInfiniteQueryFn: () => CreateInfiniteQueryOptions< TQueryFnData, TError, TData, @@ -91,22 +100,29 @@ export function injectInfiniteQuery< TQueryKey, TPageParam >, - injector?: Injector, + options?: InjectInfiniteQueryOptions, ): CreateInfiniteQueryResult /** * Injects an infinite query: a declarative dependency on an asynchronous source of data that is tied to a unique key. * Infinite queries can additively "load more" data onto an existing set of data or "infinite scroll" - * @param optionsFn - A function that returns infinite query options. - * @param injector - The Angular injector to use. + * @param injectInfiniteQueryFn - A function that returns infinite query options. + * @param options - Additional configuration. * @returns The infinite query result. * @public */ export function injectInfiniteQuery( - optionsFn: () => CreateInfiniteQueryOptions, - injector?: Injector, + injectInfiniteQueryFn: () => CreateInfiniteQueryOptions, + options?: InjectInfiniteQueryOptions, ) { - return assertInjector(injectInfiniteQuery, injector, () => - createBaseQuery(optionsFn, InfiniteQueryObserver as typeof QueryObserver), + return assertInjector(injectInfiniteQuery, options?.injector, () => + createBaseQuery( + injectInfiniteQueryFn, + InfiniteQueryObserver as typeof QueryObserver, + ), ) } + +export interface InjectInfiniteQueryOptions { + injector?: Injector +} diff --git a/packages/angular-query-experimental/src/inject-is-fetching.ts b/packages/angular-query-experimental/src/inject-is-fetching.ts index 3c728eea32..615f7077b9 100644 --- a/packages/angular-query-experimental/src/inject-is-fetching.ts +++ b/packages/angular-query-experimental/src/inject-is-fetching.ts @@ -4,21 +4,30 @@ import { assertInjector } from './util/assert-injector/assert-injector' import type { QueryFilters } from '@tanstack/query-core' import type { Injector, Signal } from '@angular/core' +export interface InjectIsFetchingOptions { + /** + * The `Injector` in which to create the isFetching signal. + * + * If this is not provided, the current injection context will be used instead (via `inject`). + */ + injector?: Injector +} + /** * Injects a signal that tracks the number of queries that your application is loading or * fetching in the background. * * Can be used for app-wide loading indicators * @param filters - The filters to apply to the query. - * @param injector - The Angular injector to use. + * @param options - Additional configuration * @returns signal with number of loading or fetching queries. * @public */ export function injectIsFetching( filters?: QueryFilters, - injector?: Injector, + options?: InjectIsFetchingOptions, ): Signal { - return assertInjector(injectIsFetching, injector, () => { + return assertInjector(injectIsFetching, options?.injector, () => { const destroyRef = inject(DestroyRef) const ngZone = inject(NgZone) const queryClient = inject(QueryClient) diff --git a/packages/angular-query-experimental/src/inject-is-mutating.ts b/packages/angular-query-experimental/src/inject-is-mutating.ts index 867b4ee68d..df6af1dea4 100644 --- a/packages/angular-query-experimental/src/inject-is-mutating.ts +++ b/packages/angular-query-experimental/src/inject-is-mutating.ts @@ -4,20 +4,29 @@ import { assertInjector } from './util/assert-injector/assert-injector' import type { MutationFilters } from '@tanstack/query-core' import type { Injector, Signal } from '@angular/core' +export interface InjectIsMutatingOptions { + /** + * The `Injector` in which to create the isMutating signal. + * + * If this is not provided, the current injection context will be used instead (via `inject`). + */ + injector?: Injector +} + /** * Injects a signal that tracks the number of mutations that your application is fetching. * * Can be used for app-wide loading indicators * @param filters - The filters to apply to the query. - * @param injector - The Angular injector to use. + * @param options - Additional configuration * @returns signal with number of fetching mutations. * @public */ export function injectIsMutating( filters?: MutationFilters, - injector?: Injector, + options?: InjectIsMutatingOptions, ): Signal { - return assertInjector(injectIsMutating, injector, () => { + return assertInjector(injectIsMutating, options?.injector, () => { const destroyRef = inject(DestroyRef) const ngZone = inject(NgZone) const queryClient = inject(QueryClient) diff --git a/packages/angular-query-experimental/src/inject-mutation-state.ts b/packages/angular-query-experimental/src/inject-mutation-state.ts index 9bd5c61cdc..5377f271ed 100644 --- a/packages/angular-query-experimental/src/inject-mutation-state.ts +++ b/packages/angular-query-experimental/src/inject-mutation-state.ts @@ -18,6 +18,11 @@ type MutationStateOptions = { select?: (mutation: Mutation) => TResult } +/** + * + * @param mutationCache + * @param options + */ function getResult( mutationCache: MutationCache, options: MutationStateOptions, @@ -34,18 +39,23 @@ function getResult( * @public */ export interface InjectMutationStateOptions { + /** + * The `Injector` in which to create the mutation state signal. + * + * If this is not provided, the current injection context will be used instead (via `inject`). + */ injector?: Injector } /** * Injects a signal that tracks the state of all mutations. - * @param mutationStateOptionsFn - A function that returns mutation state options. + * @param injectMutationStateFn - A function that returns mutation state options. * @param options - The Angular injector to use. * @returns The signal that tracks the state of all mutations. * @public */ export function injectMutationState( - mutationStateOptionsFn: () => MutationStateOptions = () => ({}), + injectMutationStateFn: () => MutationStateOptions = () => ({}), options?: InjectMutationStateOptions, ): Signal> { return assertInjector(injectMutationState, options?.injector, () => { @@ -61,7 +71,7 @@ export function injectMutationState( */ const resultFromOptionsSignal = computed(() => { return [ - getResult(mutationCache, mutationStateOptionsFn()), + getResult(mutationCache, injectMutationStateFn()), performance.now(), ] as const }) @@ -91,7 +101,7 @@ export function injectMutationState( const [lastResult] = effectiveResultSignal() const nextResult = replaceEqualDeep( lastResult, - getResult(mutationCache, mutationStateOptionsFn()), + getResult(mutationCache, injectMutationStateFn()), ) if (lastResult !== nextResult) { ngZone.run(() => { diff --git a/packages/angular-query-experimental/src/inject-mutation.ts b/packages/angular-query-experimental/src/inject-mutation.ts index 857bc0de2e..9daafb5d71 100644 --- a/packages/angular-query-experimental/src/inject-mutation.ts +++ b/packages/angular-query-experimental/src/inject-mutation.ts @@ -20,12 +20,21 @@ import type { DefaultError, MutationObserverResult } from '@tanstack/query-core' import type { CreateMutateFunction, CreateMutationResult } from './types' import type { CreateMutationOptions } from './mutation-options' +export interface InjectMutationOptions { + /** + * The `Injector` in which to create the mutation. + * + * If this is not provided, the current injection context will be used instead (via `inject`). + */ + injector?: Injector +} + /** * Injects a mutation: an imperative function that can be invoked which typically performs server side effects. * * Unlike queries, mutations are not run automatically. - * @param optionsFn - A function that returns mutation options. - * @param injector - The Angular injector to use. + * @param injectMutationFn - A function that returns mutation options. + * @param options - Additional configuration * @returns The mutation. * @public */ @@ -35,10 +44,15 @@ export function injectMutation< TVariables = void, TContext = unknown, >( - optionsFn: () => CreateMutationOptions, - injector?: Injector, + injectMutationFn: () => CreateMutationOptions< + TData, + TError, + TVariables, + TContext + >, + options?: InjectMutationOptions, ): CreateMutationResult { - return assertInjector(injectMutation, injector, () => { + return assertInjector(injectMutation, options?.injector, () => { const destroyRef = inject(DestroyRef) const ngZone = inject(NgZone) const queryClient = inject(QueryClient) @@ -48,7 +62,7 @@ export function injectMutation< * making it reactive. Wrapping options in a function ensures embedded expressions * are preserved and can keep being applied after signal changes */ - const optionsSignal = computed(optionsFn) + const optionsSignal = computed(injectMutationFn) const observerSignal = (() => { let instance: MutationObserver< @@ -93,14 +107,14 @@ export function injectMutation< effect( () => { const observer = observerSignal() - const options = optionsSignal() + const observerOptions = optionsSignal() untracked(() => { - observer.setOptions(options) + observer.setOptions(observerOptions) }) }, { - injector, + injector: options?.injector, }, ) @@ -133,7 +147,7 @@ export function injectMutation< }) }, { - injector, + injector: options?.injector, }, ) diff --git a/packages/angular-query-experimental/src/inject-queries.ts b/packages/angular-query-experimental/src/inject-queries.ts index 7bee74df46..ea96688f72 100644 --- a/packages/angular-query-experimental/src/inject-queries.ts +++ b/packages/angular-query-experimental/src/inject-queries.ts @@ -197,6 +197,7 @@ export type QueriesResults< * @param root0.queries * @param root0.combine * @param injector + * @param injector * @public */ export function injectQueries< diff --git a/packages/angular-query-experimental/src/inject-query.ts b/packages/angular-query-experimental/src/inject-query.ts index c72af3748a..e5a19e8a29 100644 --- a/packages/angular-query-experimental/src/inject-query.ts +++ b/packages/angular-query-experimental/src/inject-query.ts @@ -13,6 +13,15 @@ import type { UndefinedInitialDataOptions, } from './query-options' +export interface InjectQueryOptions { + /** + * The `Injector` in which to create the query. + * + * If this is not provided, the current injection context will be used instead (via `inject`). + */ + injector?: Injector +} + /** * Injects a query: a declarative dependency on an asynchronous source of data that is tied to a unique key. * @@ -44,8 +53,8 @@ import type { * })) * } * ``` - * @param optionsFn - A function that returns query options. - * @param injector - The Angular injector to use. + * @param injectQueryFn - A function that returns query options. + * @param options - Additional configuration * @returns The query result. * @public * @see https://tanstack.com/query/latest/docs/framework/angular/guides/queries @@ -56,13 +65,13 @@ export function injectQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - optionsFn: () => DefinedInitialDataOptions< + injectQueryFn: () => DefinedInitialDataOptions< TQueryFnData, TError, TData, TQueryKey >, - injector?: Injector, + options?: InjectQueryOptions, ): DefinedCreateQueryResult /** @@ -96,8 +105,8 @@ export function injectQuery< * })) * } * ``` - * @param optionsFn - A function that returns query options. - * @param injector - The Angular injector to use. + * @param injectQueryFn - A function that returns query options. + * @param options - Additional configuration * @returns The query result. * @public * @see https://tanstack.com/query/latest/docs/framework/angular/guides/queries @@ -108,13 +117,13 @@ export function injectQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - optionsFn: () => UndefinedInitialDataOptions< + injectQueryFn: () => UndefinedInitialDataOptions< TQueryFnData, TError, TData, TQueryKey >, - injector?: Injector, + options?: InjectQueryOptions, ): CreateQueryResult /** @@ -148,8 +157,8 @@ export function injectQuery< * })) * } * ``` - * @param optionsFn - A function that returns query options. - * @param injector - The Angular injector to use. + * @param injectQueryFn - A function that returns query options. + * @param options - Additional configuration * @returns The query result. * @public * @see https://tanstack.com/query/latest/docs/framework/angular/guides/queries @@ -160,8 +169,13 @@ export function injectQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - optionsFn: () => CreateQueryOptions, - injector?: Injector, + injectQueryFn: () => CreateQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey + >, + options?: InjectQueryOptions, ): CreateQueryResult /** @@ -195,17 +209,17 @@ export function injectQuery< * })) * } * ``` - * @param optionsFn - A function that returns query options. - * @param injector - The Angular injector to use. + * @param injectQueryFn - A function that returns query options. + * @param options - Additional configuration * @returns The query result. * @public * @see https://tanstack.com/query/latest/docs/framework/angular/guides/queries */ export function injectQuery( - optionsFn: () => CreateQueryOptions, - injector?: Injector, + injectQueryFn: () => CreateQueryOptions, + options?: InjectQueryOptions, ) { - return assertInjector(injectQuery, injector, () => - createBaseQuery(optionsFn, QueryObserver), + return assertInjector(injectQuery, options?.injector, () => + createBaseQuery(injectQueryFn, QueryObserver), ) as unknown as CreateQueryResult } diff --git a/packages/angular-query-experimental/src/providers.ts b/packages/angular-query-experimental/src/providers.ts index 6c43fb417c..19070be32c 100644 --- a/packages/angular-query-experimental/src/providers.ts +++ b/packages/angular-query-experimental/src/providers.ts @@ -233,17 +233,17 @@ export interface DevtoolsOptions { * If you need more control over when devtools are loaded, you can use the `loadDevtools` option. This is particularly useful if you want to load devtools based on environment configurations. For instance, you might have a test environment running in production mode but still require devtools to be available. * * If you need more control over where devtools are rendered, consider `injectDevtoolsPanel`. This allows rendering devtools inside your own devtools for example. - * @param optionsFn - A function that returns `DevtoolsOptions`. + * @param withDevtoolsFn - A function that returns `DevtoolsOptions`. * @returns A set of providers for use with `provideTanStackQuery`. * @public * @see {@link provideTanStackQuery} * @see {@link DevtoolsOptions} */ export function withDevtools( - optionsFn?: () => DevtoolsOptions, + withDevtoolsFn?: () => DevtoolsOptions, ): DeveloperToolsFeature { let providers: Array = [] - if (!isDevMode() && !optionsFn) { + if (!isDevMode() && !withDevtoolsFn) { providers = [] } else { providers = [ @@ -258,7 +258,7 @@ export function withDevtools( }) const destroyRef = inject(DestroyRef) - const options = computed(() => optionsFn?.() ?? {}) + const options = computed(() => withDevtoolsFn?.() ?? {}) let devtools: TanstackQueryDevtools | null = null let el: HTMLElement | null = null diff --git a/packages/angular-query-experimental/src/util/assert-injector/assert-injector.ts b/packages/angular-query-experimental/src/util/assert-injector/assert-injector.ts index bfbcf8afc8..9a18cc442e 100644 --- a/packages/angular-query-experimental/src/util/assert-injector/assert-injector.ts +++ b/packages/angular-query-experimental/src/util/assert-injector/assert-injector.ts @@ -23,13 +23,11 @@ import { * After assertion, `assertInjector` runs the `runner` function with the guaranteed `Injector` * whether it is the default `Injector` within the current **Injection Context** * or the custom `Injector` that was passed in. - * * @template {() => any} Runner - Runner is a function that can return anything - * @param {Function} fn - the Function to pass in `assertInInjectionContext` - * @param {Injector | undefined | null} injector - the optional "custom" Injector - * @param {Runner} runner - the runner fn - * @returns {ReturnType} result - returns the result of the Runner - * + * @param fn - the Function to pass in `assertInInjectionContext` + * @param injector - the optional "custom" Injector + * @param runner - the runner fn + * @returns result - returns the result of the Runner * @example * ```ts * function injectValue(injector?: Injector) { @@ -48,11 +46,9 @@ export function assertInjector any>( * `assertInjector` extends `assertInInjectionContext` with an optional `Injector` * After assertion, `assertInjector` returns a guaranteed `Injector` whether it is the default `Injector` * within the current **Injection Context** or the custom `Injector` that was passed in. - * - * @param {Function} fn - the Function to pass in `assertInInjectionContext` - * @param {Injector | undefined | null} injector - the optional "custom" Injector + * @param fn - the Function to pass in `assertInInjectionContext` + * @param injector - the optional "custom" Injector * @returns Injector - * * @example * ```ts * function injectDestroy(injector?: Injector) { @@ -68,6 +64,12 @@ export function assertInjector( fn: Function, injector: Injector | undefined | null, ): Injector +/** + * @param fn - the Function to pass in `assertInInjectionContext` + * @param injector - the optional "custom" Injector + * @param runner - the runner fn + * @returns any + */ export function assertInjector( fn: Function, injector: Injector | undefined | null,