MCPcopy Index your code
hub / github.com/TanStack/router / createStartHandler

Function createStartHandler

packages/start-server-core/src/createStartHandler.ts:353–650  ·  view source on GitHub ↗
(
  cbOrOptions: HandlerCallback<AnyRouter> | CreateStartHandlerOptions,
)

Source from the content-addressed store, hash-verified

351 * ```
352 */
353export function createStartHandler<TRegister = Register>(
354 cbOrOptions: HandlerCallback<AnyRouter> | CreateStartHandlerOptions,
355): RequestHandler<TRegister> {
356 // Normalize the overloaded argument
357 const cb: HandlerCallback<AnyRouter> =
358 typeof cbOrOptions === 'function' ? cbOrOptions : cbOrOptions.handler
359 const transformAssetUrlsOption: TransformAssetUrls | undefined =
360 typeof cbOrOptions === 'function'
361 ? undefined
362 : cbOrOptions.transformAssetUrls
363
364 const warmupTransformManifest =
365 !!transformAssetUrlsOption &&
366 typeof transformAssetUrlsOption === 'object' &&
367 transformAssetUrlsOption.warmup === true
368
369 // Pre-resolve the transform function and cache flag
370 const resolvedTransformConfig = transformAssetUrlsOption
371 ? resolveTransformConfig(transformAssetUrlsOption)
372 : undefined
373 const cache = resolvedTransformConfig ? resolvedTransformConfig.cache : true
374
375 // Memoize a single createTransform() result when caching is enabled.
376 let cachedCreateTransformPromise: Promise<TransformAssetUrlsFn> | undefined
377
378 const getTransformFn = async (
379 opts: { warmup: true } | { warmup: false; request: Request },
380 ): Promise<TransformAssetUrlsFn | undefined> => {
381 if (!resolvedTransformConfig) return undefined
382 if (resolvedTransformConfig.type === 'createTransform') {
383 if (cache) {
384 if (!cachedCreateTransformPromise) {
385 cachedCreateTransformPromise = Promise.resolve(
386 resolvedTransformConfig.createTransform(opts),
387 )
388 }
389 return cachedCreateTransformPromise
390 }
391 return resolvedTransformConfig.createTransform(opts)
392 }
393 return resolvedTransformConfig.transformFn
394 }
395
396 // Background warmup for cached transforms (production only)
397 if (
398 warmupTransformManifest &&
399 cache &&
400 process.env.TSS_DEV_SERVER !== 'true' &&
401 !cachedFinalManifestPromise
402 ) {
403 // NOTE: Do not call resolveManifest() here.
404 // resolveManifest() reads from cachedFinalManifestPromise, and since we set
405 // cachedFinalManifestPromise to this warmup promise, that would create a
406 // self-referential promise and hang forever.
407 const warmupPromise = (async () => {
408 const base = await getBaseManifest(undefined)
409 const transformFn = await getTransformFn({ warmup: true })
410 return transformFn

Callers 5

server.tsFile · 0.90
server.tsFile · 0.90
server.tsFile · 0.90
server.tsFile · 0.90
server.tsFile · 0.90

Calls 7

resolveTransformConfigFunction · 0.90
transformManifestUrlsFunction · 0.90
requestHandlerFunction · 0.90
getBaseManifestFunction · 0.85
getTransformFnFunction · 0.85
catchMethod · 0.65

Tested by

no test coverage detected