@alessiofrittoli/next-api
Version:
Next.js API utility library
132 lines (129 loc) • 4.49 kB
text/typescript
import { P as Page } from '../page-DAsxsEeP.mjs';
import { ResolvingMetadata, Metadata } from 'next';
/**
* Check if function is a Next.js React.FC Page component or `generateMetadata` function.
*
*/
declare const isPageReactFC: <T = unknown>(input: unknown, parent?: ResolvingMetadata | Awaited<ResolvingMetadata>) => input is React.FC<T>;
/**
* Await Next.js Page `props.params` and `props.searchParams`.
*
* @template T Custom type assigned to `props.params`.
* @template U Custom type joined with the default type for `props.searchParams`.
* @template V Indicates whether `props.searchParams` are awaited or not. Default: `false`.
*
* @param Page The Next.js Page `React.FunctionComponent`.
* @param awaitSearchParams Indicates whether to await `searchParams` or not. Default: `false`.\
* ⚠️ Keep in mind that awaiting `searchParams` will cause the page to render for each request.
*
* @returns The Next.js Page `React.FunctionComponent` Wrapper that Next.js executes while rendering the page.
*
* @example
*
* #### Awaited page params (no `searchParams` usage).
*
* ```tsx
* withAwaitedParams<{ dynamicPageSlug: string }>( props => {
* const { params } = props
*
* return (
* <h1>My Dynamic Page - { params.dynamicPageSlug }</h1>
* )
* } )
* ```
*
* @example
*
* #### Awaited page params with manual `searchParams` resolution.
*
* ```tsx
* withAwaitedParams<{ dynamicPageSlug: string }>( async props => {
* const { params } = props
* const searchParams = await props.searchParams
*
* console.log( 'utm_source', searchParams?.utm_source )
*
* return (
* <h1>My Dynamic Page - { params.dynamicPageSlug }</h1>
* )
* } )
* ```
*
* @example
*
* #### Awaited page params with auto `searchParams` resolution.
*
* ```tsx
* withAwaitedParams<{ dynamicPageSlug: string }, { utm_source: string }, true>( props => {
* const { params } = props
* const { searchParams } = props
*
* console.log( 'utm_source', searchParams?.utm_source )
*
* return (
* <h1>My Dynamic Page - { params.dynamicPageSlug }</h1>
* )
* }, true )
* ```
*/
declare function withAwaitedParams<T extends Page.Params = Page.Params, U extends Record<string, Page.SearchParam> = Record<string, Page.SearchParam>, V extends boolean = false>(Page: React.FC<React.PropsWithChildren<Page.AwaitedProps<T, U, V>>>, awaitSearchParams?: V): ((props: Page.Props<T, U>) => Promise<React.JSX.Element>);
/**
* Await Next.js Page metadata `props.params`, `props.searchParams` and `parent` ResolvingMetadata.
*
* @template T Custom type assigned to `props.params`.
* @template U Custom type joined with the default type for `props.searchParams`.
* @template V Indicates whether `props.searchParams` are awaited or not. Default: `false`.
*
* @param generateMetadata The Next.js Page `generateMetadata` handler.
* @param awaitSearchParams Indicates whether to await `searchParams` or not. Default: `false`.\
* ⚠️ Keep in mind that awaiting `searchParams` will cause the page to render for each request.
*
* @returns The Next.js Page `generateMetadata` Wrapper that Next.js executes while rendering the page.
*
* @example
*
* #### Awaited page params (no `searchParams` usage).
*
* ```ts
* withAwaitedParams<{ dynamicPageSlug: string }>(
* async ( props, parent ) => {
*
* const { params } = props
*
* console.log( 'dynamicPageSlug', params.dynamicPageSlug )
* console.log( 'parent metadata', parent )
*
* return {
* // ... page metadata ...
* }
*
* }
* )
* ```
*
* @example
*
* #### Awaited page params with auto `searchParams` resolution.
*
* ```ts
* withAwaitedParams<{ dynamicPageSlug: string }, { utm_source: string }, true>(
* async ( props, parent ) => {
*
* const { params } = props
* const { searchParams } = props
*
* console.log( 'dynamicPageSlug', params.dynamicPageSlug )
* console.log( 'utm_source', searchParams?.utm_source )
*
* console.log( 'parent metadata', parent )
*
* return {
* // ... page metadata ...
* }
*
* }, true
* )
* ```
*/
declare function withAwaitedParams<T extends Page.Params = Page.Params, U extends Record<string, Page.SearchParam> = Record<string, Page.SearchParam>, V extends boolean = false>(generateMetadata: Page.GenerateMetadata<Page.AwaitedProps<T, U, V>>, awaitSearchParams?: V): ((props: Page.Props<T, U>, parent: ResolvingMetadata) => Promise<Metadata>);
export { isPageReactFC, withAwaitedParams };