1 | export interface Spec<T> {
|
2 | |
3 |
|
4 |
|
5 | choices?: ReadonlyArray<T>;
|
6 | |
7 |
|
8 |
|
9 | desc?: string;
|
10 | |
11 |
|
12 |
|
13 | example?: string;
|
14 | |
15 |
|
16 |
|
17 | docs?: string;
|
18 | |
19 |
|
20 |
|
21 | default?: NonNullable<T> | undefined;
|
22 | |
23 |
|
24 |
|
25 |
|
26 | devDefault?: NonNullable<T> | undefined;
|
27 | }
|
28 | type OptionalAttrs<T> = {
|
29 | default: undefined;
|
30 | } | {
|
31 | devDefault: undefined;
|
32 | } | {
|
33 | default: undefined;
|
34 | devDefault: undefined;
|
35 | } | {
|
36 | default: NonNullable<T>;
|
37 | devDefault: undefined;
|
38 | } | {
|
39 | default: undefined;
|
40 | devDefault: NonNullable<T>;
|
41 | };
|
42 | type RequiredAttrs<T> = {
|
43 | default: NonNullable<T>;
|
44 | } | {
|
45 | devDefault: NonNullable<T>;
|
46 | } | {
|
47 | devDefault: NonNullable<T>;
|
48 | default: NonNullable<T>;
|
49 | } | {};
|
50 | type DefaultKeys = 'default' | 'devDefault';
|
51 | type OptionalSpec<T> = Spec<T> & OptionalAttrs<T>;
|
52 | type OptionalTypelessSpec = Omit<OptionalSpec<unknown>, 'choices'>;
|
53 | type RequiredSpec<T> = Spec<T> & RequiredAttrs<T>;
|
54 | type RequiredTypelessSpec = Omit<RequiredSpec<unknown>, 'choices' | DefaultKeys>;
|
55 | type ChoicelessOptionalSpec<T> = Omit<Spec<T>, 'choices' | DefaultKeys> & OptionalAttrs<T>;
|
56 | type ChoicelessRequiredSpec<T> = Omit<Spec<T>, 'choices' | DefaultKeys> & RequiredAttrs<T>;
|
57 | type WithParser<T> = {
|
58 | _parse: (input: string) => T;
|
59 | };
|
60 | export type RequiredValidatorSpec<T> = RequiredSpec<T> & WithParser<T>;
|
61 | export type OptionalValidatorSpec<T> = OptionalSpec<T> & WithParser<T>;
|
62 | export type ValidatorSpec<T> = RequiredValidatorSpec<T> | OptionalValidatorSpec<T>;
|
63 | export interface ExactValidator<T> {
|
64 | (spec: OptionalSpec<T>): OptionalValidatorSpec<T>;
|
65 | (spec?: RequiredSpec<T>): RequiredValidatorSpec<T>;
|
66 | }
|
67 | export interface BaseValidator<BaseT> {
|
68 | <T extends BaseT>(spec: OptionalSpec<T>): OptionalValidatorSpec<T>;
|
69 | (spec: ChoicelessRequiredSpec<BaseT>): RequiredValidatorSpec<BaseT>;
|
70 | <T extends BaseT>(spec?: RequiredSpec<T>): RequiredValidatorSpec<T>;
|
71 | }
|
72 | export interface StructuredValidator {
|
73 | (): RequiredValidatorSpec<any>;
|
74 | <T>(): RequiredValidatorSpec<T>;
|
75 | (spec: RequiredTypelessSpec): RequiredValidatorSpec<any>;
|
76 | (spec: OptionalTypelessSpec): OptionalValidatorSpec<any>;
|
77 | <T>(spec: ChoicelessOptionalSpec<T>): OptionalValidatorSpec<T>;
|
78 | <T>(spec: ChoicelessRequiredSpec<T>): RequiredValidatorSpec<T>;
|
79 | }
|
80 | export type SpecsOutput<S> = {
|
81 | [K in keyof S]: unknown;
|
82 | };
|
83 | export type CleanedEnv<S> = S extends Record<string, ValidatorSpec<unknown>> ? Readonly<{
|
84 | [K in keyof S]: S[K] extends OptionalValidatorSpec<infer U> ? U | undefined : S[K] extends RequiredValidatorSpec<infer U> ? U : never;
|
85 | } & CleanedEnvAccessors> : never;
|
86 | export interface CleanedEnvAccessors {
|
87 |
|
88 | readonly isDevelopment: boolean;
|
89 | readonly isDev: boolean;
|
90 |
|
91 | readonly isTest: boolean;
|
92 |
|
93 | readonly isProduction: boolean;
|
94 | readonly isProd: boolean;
|
95 | }
|
96 | export interface ReporterOptions<T> {
|
97 | errors: Partial<Record<keyof T, Error>>;
|
98 | env: unknown;
|
99 | }
|
100 | export interface CleanOptions<T> {
|
101 | |
102 |
|
103 |
|
104 |
|
105 | reporter?: ((opts: ReporterOptions<T>) => void) | null;
|
106 | }
|
107 | export interface StrictProxyMiddlewareOptions {
|
108 | /**
|
109 | * A list of extra inspectable properties to add to the middleware.
|
110 | *
|
111 | * This is useful if you want to add support for framework-specific values.
|
112 | */
|
113 | extraInspectables?: string[];
|
114 | }
|
115 | export {};
|
116 |
|
\ | No newline at end of file |