|
|
|
import * as entry from '../../../app/layout.js' |
|
import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js' |
|
|
|
type TEntry = typeof import('../../../app/layout.js') |
|
|
|
|
|
checkFields<Diff<{ |
|
default: Function |
|
config?: {} |
|
generateStaticParams?: Function |
|
revalidate?: RevalidateRange<TEntry> | false |
|
dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static' |
|
dynamicParams?: boolean |
|
fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache' |
|
preferredRegion?: 'auto' | 'global' | 'home' | string | string[] |
|
runtime?: 'nodejs' | 'experimental-edge' | 'edge' |
|
maxDuration?: number |
|
|
|
metadata?: any |
|
generateMetadata?: Function |
|
viewport?: any |
|
generateViewport?: Function |
|
|
|
}, TEntry, ''>>() |
|
|
|
|
|
checkFields<Diff<LayoutProps, FirstArg<TEntry['default']>, 'default'>>() |
|
|
|
|
|
if ('generateMetadata' in entry) { |
|
checkFields<Diff<LayoutProps, FirstArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>() |
|
checkFields<Diff<ResolvingMetadata, SecondArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>() |
|
} |
|
|
|
|
|
if ('generateViewport' in entry) { |
|
checkFields<Diff<LayoutProps, FirstArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>() |
|
checkFields<Diff<ResolvingViewport, SecondArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>() |
|
} |
|
|
|
|
|
if ('generateStaticParams' in entry) { |
|
checkFields<Diff<{ params: PageParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>() |
|
checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>() |
|
} |
|
|
|
type PageParams = any |
|
export interface PageProps { |
|
params?: any |
|
searchParams?: any |
|
} |
|
export interface LayoutProps { |
|
children?: React.ReactNode |
|
|
|
params?: any |
|
} |
|
|
|
|
|
|
|
type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never |
|
|
|
|
|
type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K> |
|
type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message> |
|
|
|
type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never |
|
type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never |
|
type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never |
|
|
|
|
|
|
|
function checkFields<_ extends { [k in keyof any]: never }>() {} |
|
|
|
|
|
type Numeric = number | bigint |
|
type Zero = 0 | 0n |
|
type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never |
|
type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__' |
|
|