UNPKG

2.1 kBPlain TextView Raw
1import {
2 AkteFiles,
3 type FilesBulkDataFn,
4 type FilesDataFn,
5 type FilesDefinition,
6} from "./AkteFiles";
7
8import type { Empty } from "./types";
9
10/**
11 * Creates an Akte files instance.
12 *
13 * @example
14 * const posts = defineAkteFiles().from({
15 * path: "/posts/:slug",
16 * bulkData() {
17 * return {
18 * "/posts/foo": {},
19 * "/posts/bar": {},
20 * "/posts/baz": {},
21 * };
22 * },
23 * render(context) {
24 * return "...";
25 * },
26 * });
27 *
28 * @typeParam TGlobalData - Global data the Akte files expects.
29 * @typeParam TParams - Parameters the Akte files expects.
30 * @typeParam TData - Data the Akte files expects (inferred by default)
31 * @returns A factory to create the Akte files from.
32 */
33export const defineAkteFiles = <
34 TGlobalData,
35 TParams extends string[] | Empty = Empty,
36 TData = Empty,
37>(): {
38 /**
39 * Creates an Akte files instance from a definition.
40 *
41 * @param definition - The definition to create the instance from.
42 * @returns The created Akte files.
43 */
44 from: <
45 _TGlobalData extends TGlobalData,
46 _TParams extends TParams extends Empty
47 ? _TDataFn extends FilesDataFn<_TGlobalData, string[], unknown>
48 ? Exclude<keyof Parameters<_TDataFn>[0]["params"], Symbol | number>[]
49 : string[]
50 : TParams,
51 _TData extends TData extends Empty
52 ? _TDataFn extends FilesDataFn<_TGlobalData, string[], unknown>
53 ? Awaited<ReturnType<_TDataFn>>
54 : _TBulkDataFn extends FilesBulkDataFn<_TGlobalData, unknown>
55 ? Awaited<ReturnType<_TBulkDataFn>>[keyof Awaited<
56 ReturnType<_TBulkDataFn>
57 >]
58 : undefined
59 : TData,
60 _TDataFn extends FilesDataFn<_TGlobalData, string[], unknown> | undefined,
61 _TBulkDataFn extends _TDataFn extends FilesDataFn<
62 _TGlobalData,
63 string[],
64 unknown
65 >
66 ? FilesBulkDataFn<_TGlobalData, Awaited<ReturnType<_TDataFn>>> | undefined
67 : FilesBulkDataFn<_TGlobalData, unknown> | undefined,
68 >(
69 definition: FilesDefinition<_TGlobalData, _TParams, _TData>,
70 ) => AkteFiles<_TGlobalData, _TParams, _TData>;
71} => {
72 return {
73 from: (definition) => {
74 return new AkteFiles(definition);
75 },
76 };
77};