Skip to content

Commit 8cbe3b0

Browse files
authored
[chore] deduplicate config types (#2030)
1 parent 77cefe5 commit 8cbe3b0

File tree

5 files changed

+37
-76
lines changed

5 files changed

+37
-76
lines changed

.changeset/olive-mayflies-retire.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@sveltejs/kit": patch
3+
---
4+
5+
Change `force` to `onError` in prerender config options

packages/kit/types/config.d.ts

+19-74
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import { UserConfig as ViteConfig } from 'vite';
2+
import { RecursiveRequired } from './helper';
13
import { ServerRequest } from './hooks';
24
import { Logger, TrailingSlash } from './internal';
3-
import { UserConfig as ViteConfig } from 'vite';
45

56
export interface AdapterUtils {
67
log: Logger;
@@ -11,20 +12,12 @@ export interface AdapterUtils {
1112
copy_static_files: (dest: string) => void;
1213
copy: (from: string, to: string, filter?: (basename: string) => boolean) => void;
1314
update_ignores: ({ patterns, log }: { patterns: string[]; log?: boolean }) => void;
14-
prerender: ({
15-
all,
16-
dest,
17-
fallback
18-
}: {
19-
all?: boolean;
20-
dest: string;
21-
fallback?: string;
22-
}) => Promise<void>;
15+
prerender: (options: { all?: boolean; dest: string; fallback?: string }) => Promise<void>;
2316
}
2417

2518
export interface Adapter {
2619
name: string;
27-
adapt: ({ utils, config }: { utils: AdapterUtils; config: ValidatedConfig }) => Promise<void>;
20+
adapt: (context: { utils: AdapterUtils; config: ValidatedConfig }) => Promise<void>;
2821
}
2922

3023
export interface PageOpts {
@@ -41,6 +34,17 @@ export interface PageOptsContext {
4134

4235
export type ScriptablePageOpt<T> = T | (({ request, page }: PageOptsContext) => Promise<T>);
4336

37+
export interface PrerenderErrorHandler {
38+
(details: {
39+
status: number;
40+
path: string;
41+
referrer: string | null;
42+
referenceType: 'linked' | 'fetched';
43+
}): void;
44+
}
45+
46+
export type PrerenderOnErrorValue = 'fail' | 'continue' | PrerenderErrorHandler;
47+
4448
export interface Config {
4549
compilerOptions?: any;
4650
extensions?: string[];
@@ -79,7 +83,7 @@ export interface Config {
7983
prerender?: {
8084
crawl?: boolean;
8185
enabled?: ScriptablePageOpt<boolean>;
82-
force?: boolean;
86+
onError?: PrerenderOnErrorValue;
8387
pages?: string[];
8488
};
8589
router?: ScriptablePageOpt<boolean>;
@@ -94,65 +98,6 @@ export interface Config {
9498
preprocess?: any;
9599
}
96100

97-
export type PrerenderErrorHandler = (errorDetails: {
98-
status: number;
99-
path: string;
100-
referrer: string | null;
101-
referenceType: 'linked' | 'fetched';
102-
}) => void | never;
103-
104-
export type PrerenderOnErrorValue = 'fail' | 'continue' | PrerenderErrorHandler;
105-
106-
export interface ValidatedConfig {
107-
compilerOptions: any;
108-
extensions: string[];
109-
kit: {
110-
adapter: Adapter;
111-
amp: boolean;
112-
appDir: string;
113-
files: {
114-
assets: string;
115-
hooks: string;
116-
lib: string;
117-
routes: string;
118-
serviceWorker: string;
119-
setup: string;
120-
template: string;
121-
};
122-
floc: boolean;
123-
host: string;
124-
hostHeader: string;
125-
hydrate: ScriptablePageOpt<boolean>;
126-
package: {
127-
dir: string;
128-
emitTypes: boolean;
129-
exports: {
130-
include: string[];
131-
exclude: string[];
132-
};
133-
files: {
134-
include: string[];
135-
exclude: string[];
136-
};
137-
};
138-
paths: {
139-
assets: string;
140-
base: string;
141-
};
142-
prerender: {
143-
crawl: boolean;
144-
enabled: ScriptablePageOpt<boolean>;
145-
onError: PrerenderOnErrorValue;
146-
pages: string[];
147-
};
148-
router: ScriptablePageOpt<boolean>;
149-
serviceWorker: {
150-
exclude: string[];
151-
};
152-
ssr: ScriptablePageOpt<boolean>;
153-
target: string;
154-
trailingSlash: TrailingSlash;
155-
vite: () => ViteConfig;
156-
};
157-
preprocess: any;
158-
}
101+
export type ValidatedConfig = RecursiveRequired<Config> & {
102+
kit: { files: { setup: string } }; // only for validated
103+
};

packages/kit/types/helper.d.ts

+11
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,14 @@ export type InferValue<T, Key extends keyof T, Default> = T extends Record<Key,
3131
: Default;
3232
export type MaybePromise<T> = T | Promise<T>;
3333
export type Rec<T = any> = Record<string, T>;
34+
export type RecursiveRequired<T> = {
35+
// Recursive implementation of TypeScript's Required utility type.
36+
// will continue until it reaches a primitive or union
37+
// with a Function in it, except for the 'vite' key
38+
// which we want the end result to be just a function
39+
[K in keyof T]-?: Extract<T[K], Function> extends never
40+
? RecursiveRequired<T[K]>
41+
: K extends 'vite'
42+
? Extract<T[K], Function>
43+
: T[K];
44+
};

packages/kit/types/index.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import './ambient-modules';
55

6-
export { Adapter, AdapterUtils, Config, ValidatedConfig, PrerenderErrorHandler } from './config';
6+
export { Adapter, AdapterUtils, Config, PrerenderErrorHandler, ValidatedConfig } from './config';
77
export { EndpointOutput, RequestHandler } from './endpoint';
88
export { ErrorLoad, ErrorLoadInput, Load, LoadInput, LoadOutput, Page } from './page';
99
export {

packages/kit/types/internal.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PageOpts, ScriptablePageOpt, ValidatedConfig } from './config';
1+
import { PageOpts, ScriptablePageOpt } from './config';
22
import { RequestHandler } from './endpoint';
33
import { Headers, Location, ParameterizedBody } from './helper';
44
import { GetSession, Handle, ServerResponse, ServerFetch, StrictBody } from './hooks';

0 commit comments

Comments
 (0)