Home / File/ type-provider.d.ts — fastify Source File

type-provider.d.ts — fastify Source File

Architecture documentation for type-provider.d.ts, a typescript file in the fastify codebase. 3 imports, 0 dependents.

Entity Profile

Dependency Diagram

graph LR
  7d09979d_7619_9f51_4440_c6b16489e111["type-provider.d.ts"]
  6a6fa08e_3d60_0520_25ea_dea35398fc8f["./route"]
  7d09979d_7619_9f51_4440_c6b16489e111 --> 6a6fa08e_3d60_0520_25ea_dea35398fc8f
  79072a34_3222_2b87_85da_7f07094af121["./schema"]
  7d09979d_7619_9f51_4440_c6b16489e111 --> 79072a34_3222_2b87_85da_7f07094af121
  36d8862b_caf4_88a2_ba4d_4f7ed0738291["./utils"]
  7d09979d_7619_9f51_4440_c6b16489e111 --> 36d8862b_caf4_88a2_ba4d_4f7ed0738291
  style 7d09979d_7619_9f51_4440_c6b16489e111 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { RouteGenericInterface } from './route'
import { FastifySchema } from './schema'
import { HttpKeys, RecordKeysToLowercase } from './utils'

// -----------------------------------------------------------------------------------------------
// TypeProvider
// -----------------------------------------------------------------------------------------------

export interface FastifyTypeProvider {
  readonly schema: unknown,
  readonly validator: unknown,
  readonly serializer: unknown,
}

export interface FastifyTypeProviderDefault extends FastifyTypeProvider {}

export type CallValidatorTypeProvider<F extends FastifyTypeProvider, S> = (F & { schema: S })['validator']
export type CallSerializerTypeProvider<F extends FastifyTypeProvider, S> = (F & { schema: S })['serializer']

// -----------------------------------------------------------------------------------------------
// FastifyRequestType
// -----------------------------------------------------------------------------------------------

// Used to map undefined SchemaCompiler properties to unknown
//   Without brackets, UndefinedToUnknown<undefined | null> => unknown
type UndefinedToUnknown<T> = [T] extends [undefined] ? unknown : T

// union-aware keyof operator
//    keyof ({ a: number} | { b: number}) => never
//    KeysOf<{a: number} | {b: number}>   => "a" | "b"
// this exists to allow users to override faulty type-provider logic.
type KeysOf<T> = T extends any ? keyof T : never

// Resolves Request types either from generic argument or Type Provider.
type ResolveRequestParams<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =
  UndefinedToUnknown<KeysOf<RouteGeneric['Params']> extends never ? CallValidatorTypeProvider<TypeProvider, SchemaCompiler['params']> : RouteGeneric['Params']>
type ResolveRequestQuerystring<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =
  UndefinedToUnknown<KeysOf<RouteGeneric['Querystring']> extends never ? CallValidatorTypeProvider<TypeProvider, SchemaCompiler['querystring']> : RouteGeneric['Querystring']>
type ResolveRequestHeaders<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =
  UndefinedToUnknown<KeysOf<RouteGeneric['Headers']> extends never ? CallValidatorTypeProvider<TypeProvider, SchemaCompiler['headers']> : RouteGeneric['Headers']>
type ResolveRequestBody<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =
  UndefinedToUnknown<KeysOf<RouteGeneric['Body']> extends never ? CallValidatorTypeProvider<TypeProvider, SchemaCompiler['body']> : RouteGeneric['Body']>

// The target request type. This type is inferenced on fastify 'requests' via generic argument assignment
export interface FastifyRequestType<Params = unknown, Querystring = unknown, Headers = unknown, Body = unknown> {
  params: Params,
  query: Querystring,
  headers: Headers,
  body: Body
}

// Resolves the FastifyRequest generic parameters
export interface ResolveFastifyRequestType<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> extends FastifyRequestType {
  params: ResolveRequestParams<TypeProvider, SchemaCompiler, RouteGeneric>,
  query: ResolveRequestQuerystring<TypeProvider, SchemaCompiler, RouteGeneric>,
  headers: RecordKeysToLowercase<ResolveRequestHeaders<TypeProvider, SchemaCompiler, RouteGeneric>>,
  body: ResolveRequestBody<TypeProvider, SchemaCompiler, RouteGeneric>
}

// -----------------------------------------------------------------------------------------------
// ... (71 more lines)

Domain

Dependencies

  • ./route
  • ./schema
  • ./utils

Frequently Asked Questions

What does type-provider.d.ts do?
type-provider.d.ts is a source file in the fastify codebase, written in typescript. It belongs to the CoreKernel domain.
What does type-provider.d.ts depend on?
type-provider.d.ts imports 3 module(s): ./route, ./schema, ./utils.
Where is type-provider.d.ts in the architecture?
type-provider.d.ts is located at types/type-provider.d.ts (domain: CoreKernel, directory: types).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free