UNPKG

4.66 kBTypeScriptView Raw
1import { type Awaitable } from "./types";
2type Path<TParams extends string[], TPrefix extends string = string> = TParams extends [] ? "" : TParams extends [string] ? `${TPrefix}:${TParams[0]}${string}` : TParams extends readonly [string, ...infer Rest extends string[]] ? Path<Rest, `${TPrefix}:${TParams[0]}${string}`> : string;
3/**
4 * A function responsible for fetching the data required to render a given file
5 * at the provided path. Used for optimization like server side rendering or
6 * serverless.
7 */
8export type FilesDataFn<TGlobalData, TParams extends string[], TData> = (context: {
9 /** Path to get data for. */
10 path: string;
11 /** Path parameters if any. */
12 params: Record<TParams[number], string>;
13 /** Akte app global data. */
14 globalData: TGlobalData;
15}) => Awaitable<TData>;
16/** A function responsible for fetching all the data required to render files. */
17export type FilesBulkDataFn<TGlobalData, TData> = (context: {
18 /** Akte app global data. */
19 globalData: TGlobalData;
20}) => Awaitable<Record<string, TData>>;
21export type FilesDefinition<TGlobalData, TParams extends string[], TData> = {
22 /**
23 * Path pattern for the Akte files.
24 *
25 * @example
26 * "/";
27 * "/foo";
28 * "/bar.json";
29 * "/posts/:slug";
30 * "/posts/:taxonomy/:slug";
31 * "/pages/**";
32 * "/assets/**.json";
33 */
34 path: Path<TParams>;
35 /**
36 * A function responsible for fetching the data required to render a given
37 * file. Used for optimization like server side rendering or serverless.
38 *
39 * Throwing a {@link NotFoundError} makes the file at path to be treated as a
40 * 404, any other error makes it treated as a 500.
41 */
42 data?: FilesDataFn<TGlobalData, TParams, TData>;
43 /** A function responsible for fetching all the data required to render files. */
44 bulkData?: FilesBulkDataFn<TGlobalData, TData>;
45 /**
46 * A function responsible for rendering the file.
47 *
48 * @param context - Resolved file path, app global data, and data to render
49 * the file.
50 * @returns Rendered file.
51 */
52 render: (context: {
53 /** Path to render. */
54 path: string;
55 /** Akte app global data. */
56 globalData: TGlobalData;
57 /** File data for path. */
58 data: TData;
59 }) => Awaitable<string>;
60};
61/** An Akte files, managing its data cascade and rendering process. */
62export declare class AkteFiles<TGlobalData = unknown, TParams extends string[] = string[], TData = any> {
63 protected definition: FilesDefinition<TGlobalData, TParams, TData>;
64 /** Path pattern of this Akte files. */
65 get path(): string;
66 constructor(definition: FilesDefinition<TGlobalData, TParams, TData>);
67 /** @internal Prefer {@link AkteApp.render} or use at your own risks. */
68 render(args: {
69 path: string;
70 params: Record<TParams[number], string>;
71 globalData: TGlobalData;
72 data?: TData;
73 }): Promise<string>;
74 /** @internal Prefer {@link AkteApp.renderAll} or use at your own risks. */
75 renderAll(args: {
76 globalData: TGlobalData;
77 }): Promise<Record<string, string>>;
78 /** @internal Prefer {@link AkteApp.clearCache} or use at your own risks. */
79 clearCache(): void;
80 /**
81 * Readonly cache of files' definition `data` method.
82 *
83 * @experimental Programmatic API might still change not following SemVer.
84 */
85 get dataMapCache(): ReadonlyMap<string, Awaitable<TData>>;
86 private _dataMapCache;
87 /**
88 * Retrieves data from files' definition `data` method with given context.
89 *
90 * @param context - Context to get data with.
91 * @returns Retrieved data.
92 * @remark Returned data may come from cache.
93 * @experimental Programmatic API might still change not following SemVer.
94 */
95 getData: FilesDataFn<TGlobalData, TParams, TData>;
96 /**
97 * Readonly cache of files' definition `bulkData` method.
98 *
99 * @experimental Programmatic API might still change not following SemVer.
100 */
101 get bulkDataCache(): Awaitable<Record<string, TData>> | undefined;
102 private _bulkDataCache;
103 /**
104 * Retrieves data from files' definition `bulkData` method with given context.
105 *
106 * @param context - Context to get bulk data with.
107 * @returns Retrieved bulk data.
108 * @remark Returned bulk data may come from cache.
109 * @experimental Programmatic API might still change not following SemVer.
110 */
111 getBulkData: FilesBulkDataFn<TGlobalData, TData>;
112}
113export {};