UNPKG

alepha

Version:

Easy-to-use modern TypeScript framework for building many kind of applications.

102 lines (86 loc) 2.01 kB
import { createPrimitive, KIND, Primitive } from "alepha"; import type { DurationLike } from "alepha/datetime"; /** * Create a new static file handler. */ export const $serve = (options: ServePrimitiveOptions = {}): ServePrimitive => { return createPrimitive(ServePrimitive, options); }; export interface ServePrimitiveOptions { /** * Prefix for the served path. * * @default "/" */ path?: string; /** * Path to the directory to serve. * * @default process.cwd() */ root?: string; /** * If true, primitive will be ignored. * * @default false */ disabled?: boolean; /** * Whether to keep dot files (e.g. `.gitignore`, `.env`) in the served directory. * * @default true */ ignoreDotEnvFiles?: boolean; /** * Whether to use the index.html file when the path is a directory. * * @default true */ indexFallback?: boolean; /** * Force all requests "not found" to be served with the index.html file. * This is useful for single-page applications (SPAs) that use client-side only routing. */ historyApiFallback?: boolean; /** * Optional name of the primitive. * This is used for logging and debugging purposes. * * @default Key name. */ name?: string; /** * Whether to use cache control headers. * * @default {} */ cacheControl?: Partial<CacheControlOptions> | false; /** * Whether to suppress logging for this primitive. * * @default false */ silent?: boolean; } export interface CacheControlOptions { /** * Whether to use cache control headers. * * @default [.js, .css] */ fileTypes: string[]; /** * The maximum age of the cache in seconds. * * @default 60 * 60 * 24 * 2 // 2 days */ maxAge: DurationLike; /** * Whether to use immutable cache control headers. * * @default true */ immutable: boolean; } export class ServePrimitive extends Primitive<ServePrimitiveOptions> {} $serve[KIND] = ServePrimitive;