Skip to content

Commit 818b489

Browse files
authored
select adapter immediately on startup (#4299)
* select adapter immediately on startup * simplify * changesets * lint
1 parent 2f21125 commit 818b489

File tree

5 files changed

+54
-29
lines changed

5 files changed

+54
-29
lines changed

.changeset/cool-crabs-listen.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
Allow adapter.adapt to be synchronous

.changeset/tasty-squids-share.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/adapter-auto': patch
3+
---
4+
5+
Select adapter immediately

packages/adapter-auto/index.js

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,52 @@
11
import { adapters } from './adapters.js';
22

3-
/** @type {import('.')} **/
4-
export default function () {
5-
return {
6-
name: '@sveltejs/adapter-auto',
3+
/** @type {import('./index')} */
4+
let fn;
5+
6+
for (const candidate of adapters) {
7+
if (candidate.test()) {
8+
/** @type {{ default: () => import('@sveltejs/kit').Adapter }} */
9+
let module;
710

8-
async adapt(builder) {
9-
for (const candidate of adapters) {
10-
if (candidate.test()) {
11-
builder.log.info(`Detected environment: ${candidate.name}. Using ${candidate.module}`);
12-
13-
let module;
14-
15-
try {
16-
module = await import(candidate.module);
17-
} catch (error) {
18-
if (
19-
error.code === 'ERR_MODULE_NOT_FOUND' &&
20-
error.message.startsWith(`Cannot find package '${candidate.module}'`)
21-
) {
22-
throw new Error(
23-
`It looks like ${candidate.module} is not installed. Please install it and try building your project again.`
24-
);
25-
}
26-
27-
throw error;
11+
try {
12+
module = await import(candidate.module);
13+
14+
fn = () => {
15+
const adapter = module.default();
16+
return {
17+
...adapter,
18+
adapt: (builder) => {
19+
builder.log.info(`Detected environment: ${candidate.name}. Using ${candidate.module}`);
20+
return adapter.adapt(builder);
2821
}
22+
};
23+
};
2924

30-
const adapter = module.default();
31-
return adapter.adapt(builder);
32-
}
25+
break;
26+
} catch (error) {
27+
if (
28+
error.code === 'ERR_MODULE_NOT_FOUND' &&
29+
error.message.startsWith(`Cannot find package '${candidate.module}'`)
30+
) {
31+
throw new Error(
32+
`It looks like ${candidate.module} is not installed. Please install it and try building your project again.`
33+
);
3334
}
3435

36+
throw error;
37+
}
38+
}
39+
}
40+
41+
if (!fn) {
42+
fn = () => ({
43+
name: '@sveltejs/adapter-auto',
44+
adapt: (builder) => {
3545
builder.log.warn(
3646
'Could not detect a supported production environment. See https://kit.svelte.dev/docs/adapters to learn how to configure your app to run on the platform of your choosing'
3747
);
3848
}
39-
};
49+
});
4050
}
51+
52+
export default fn;

packages/adapter-auto/tsconfig.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
"checkJs": true,
55
"noEmit": true,
66
"noImplicitAny": true,
7+
"module": "esnext",
8+
"target": "esnext",
9+
"moduleResolution": "node",
710
"baseUrl": ".",
811
"paths": {
912
"@sveltejs/kit": ["../kit/types/index"]

packages/kit/types/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { SSRNodeLoader, SSRRoute, ValidatedConfig } from './internal';
2828

2929
export interface Adapter {
3030
name: string;
31-
adapt(builder: Builder): Promise<void>;
31+
adapt(builder: Builder): MaybePromise<void>;
3232
}
3333

3434
export interface Builder {

0 commit comments

Comments
 (0)