@@ -3,115 +3,113 @@ import { stringify as yamlStringify } from "yaml";
3
3
import { fileURLToPath } from "url" ;
4
4
import { dirname } from "path" ;
5
5
import fsExtra from "fs-extra" ;
6
- import { exec } from "child_process"
7
- import { createRequire } from ' module' ;
8
- import path from ' path' ;
9
- import type { AstroAdapter , AstroIntegration } from ' astro' ;
10
- import { AstroError } from ' astro/errors' ;
11
- import type { Options , UserOptions } from ' ./types.js' ;
6
+ import { exec } from "child_process" ;
7
+ import { createRequire } from " module" ;
8
+ import path from " path" ;
9
+ import type { AstroAdapter , AstroIntegration } from " astro" ;
10
+ import { AstroError } from " astro/errors" ;
11
+ import type { Options , UserOptions } from " ./types.js" ;
12
12
import { OutputBundleConfig , Availability } from "@apphosting/common" ;
13
13
export const { move, exists, writeFile, readJson, readdir, readFileSync, existsSync, mkdir } =
14
- fsExtra ;
14
+ fsExtra ;
15
15
16
16
export function getAdapter ( options : Options ) : AstroAdapter {
17
17
const require = createRequire ( import . meta. url ) ;
18
- const serverEntrypoint = path . join ( require . resolve ( ' @astrojs/node' ) , ' ../server.js' ) ;
19
- const previewEntrypoint = path . join ( require . resolve ( ' @astrojs/node' ) , ' ../preview.js' ) ;
20
- return {
18
+ const serverEntrypoint = path . join ( require . resolve ( " @astrojs/node" ) , " ../server.js" ) ;
19
+ const previewEntrypoint = path . join ( require . resolve ( " @astrojs/node" ) , " ../preview.js" ) ;
20
+ return {
21
21
name : "@apphosting/astro-adapter" ,
22
22
serverEntrypoint : serverEntrypoint ,
23
23
previewEntrypoint : previewEntrypoint ,
24
- exports : [ ' handler' , ' startServer' , ' options' ] ,
25
- args : options ,
26
- adapterFeatures : {
27
- buildOutput : ' server' ,
28
- edgeMiddleware : false ,
29
- } ,
30
- supportedAstroFeatures : {
31
- hybridOutput : ' stable' ,
32
- staticOutput : ' stable' ,
33
- serverOutput : ' stable' ,
34
- sharpImageService : ' stable' ,
35
- i18nDomains : ' experimental' ,
36
- envGetSecret : ' stable' ,
37
- } ,
38
- } ;
24
+ exports : [ " handler" , " startServer" , " options" ] ,
25
+ args : options ,
26
+ adapterFeatures : {
27
+ buildOutput : " server" ,
28
+ edgeMiddleware : false ,
29
+ } ,
30
+ supportedAstroFeatures : {
31
+ hybridOutput : " stable" ,
32
+ staticOutput : " stable" ,
33
+ serverOutput : " stable" ,
34
+ sharpImageService : " stable" ,
35
+ i18nDomains : " experimental" ,
36
+ envGetSecret : " stable" ,
37
+ } ,
38
+ } ;
39
39
}
40
40
41
41
export default function createIntegration ( userOptions : UserOptions ) : AstroIntegration {
42
- if ( ! userOptions ?. mode ) {
43
- throw new AstroError ( `Setting the 'mode' option is required.` ) ;
44
- }
42
+ if ( ! userOptions ?. mode ) {
43
+ throw new AstroError ( `Setting the 'mode' option is required.` ) ;
44
+ }
45
45
46
- let _options : Options ;
47
- return {
48
- name : '@apphosting/astro-adapter' ,
49
- hooks : {
50
- 'astro:config:setup' : async ( { updateConfig, config } ) => {
51
- updateConfig ( {
52
- image : {
53
- endpoint : config . image . endpoint ?? 'astro/assets/endpoint/node' ,
54
- } ,
55
- vite : {
56
- ssr : {
57
- noExternal : [ '@apphosting/astro-adapter' ] ,
58
- } ,
59
- } ,
60
- } ) ;
61
- } ,
62
- 'astro:config:done' : ( { setAdapter, config } ) => {
63
- _options = {
64
- ...userOptions ,
65
- client : config . build . client ?. toString ( ) ,
66
- server : config . build . server ?. toString ( ) ,
67
- host : config . server . host ,
68
- port : config . server . port ,
69
- assets : config . build . assets ,
70
- } ;
71
- setAdapter ( getAdapter ( _options ) ) ;
72
- } ,
73
- 'astro:build:done' : async ( config ) => {
74
- await fs . mkdir ( "./.apphosting" )
75
- const directoryName = dirname ( fileURLToPath ( import . meta. url ) ) ;
76
- const packageJsonPath = `${ directoryName } /../package.json` ;
77
- if ( ! existsSync ( packageJsonPath ) ) {
78
- throw new Error ( `Astro adapter package.json file does not exist at ${ packageJsonPath } ` ) ;
79
- }
80
- const packageJson = JSON . parse ( readFileSync ( packageJsonPath , "utf-8" ) ) ;
81
- const packageName = "astro" ;
82
- const packageVersion = await getPackageVersion ( packageName ) ;
83
- const outputBundle : OutputBundleConfig = {
84
- version : "v1" ,
85
- runConfig : {
86
- runCommand : `node dist/server/entry.mjs` ,
87
- environmentVariables : [ { variable :"HOST" , value :"0.0.0.0" , availability :[ Availability . Runtime ] } ]
88
- } ,
89
- metadata : {
90
- adapterPackageName : packageJson . name ,
91
- adapterVersion : packageJson . version ,
92
- framework : packageName ,
93
- frameworkVersion : packageVersion
94
- } ,
95
- } ;
96
- await fs . writeFile (
97
- `./.apphosting/bundle.yaml` ,
98
- yamlStringify ( outputBundle )
99
- ) ;
100
- } ,
101
- } ,
102
- } ;
46
+ let _options : Options ;
47
+ return {
48
+ name : "@apphosting/astro-adapter" ,
49
+ hooks : {
50
+ "astro:config:setup" : async ( { updateConfig, config } ) => {
51
+ updateConfig ( {
52
+ image : {
53
+ endpoint : config . image . endpoint ?? "astro/assets/endpoint/node" ,
54
+ } ,
55
+ vite : {
56
+ ssr : {
57
+ noExternal : [ "@apphosting/astro-adapter" ] ,
58
+ } ,
59
+ } ,
60
+ } ) ;
61
+ } ,
62
+ "astro:config:done" : ( { setAdapter, config } ) => {
63
+ _options = {
64
+ ...userOptions ,
65
+ client : config . build . client ?. toString ( ) ,
66
+ server : config . build . server ?. toString ( ) ,
67
+ host : config . server . host ,
68
+ port : config . server . port ,
69
+ assets : config . build . assets ,
70
+ } ;
71
+ setAdapter ( getAdapter ( _options ) ) ;
72
+ } ,
73
+ "astro:build:done" : async ( config ) => {
74
+ await fs . mkdir ( "./.apphosting" ) ;
75
+ const directoryName = dirname ( fileURLToPath ( import . meta. url ) ) ;
76
+ const packageJsonPath = `${ directoryName } /../package.json` ;
77
+ if ( ! existsSync ( packageJsonPath ) ) {
78
+ throw new Error ( `Astro adapter package.json file does not exist at ${ packageJsonPath } ` ) ;
79
+ }
80
+ const packageJson = JSON . parse ( readFileSync ( packageJsonPath , "utf-8" ) ) ;
81
+ const packageName = "astro" ;
82
+ const packageVersion = await getPackageVersion ( packageName ) ;
83
+ const outputBundle : OutputBundleConfig = {
84
+ version : "v1" ,
85
+ runConfig : {
86
+ runCommand : `node dist/server/entry.mjs` ,
87
+ environmentVariables : [
88
+ { variable : "HOST" , value : "0.0.0.0" , availability : [ Availability . Runtime ] } ,
89
+ ] ,
90
+ } ,
91
+ metadata : {
92
+ adapterPackageName : packageJson . name ,
93
+ adapterVersion : packageJson . version ,
94
+ framework : packageName ,
95
+ frameworkVersion : packageVersion ,
96
+ } ,
97
+ } ;
98
+ await fs . writeFile ( `./.apphosting/bundle.yaml` , yamlStringify ( outputBundle ) ) ;
99
+ } ,
100
+ } ,
101
+ } ;
103
102
}
104
103
105
104
function getPackageVersion ( packageName : string ) : Promise < string > {
106
105
return new Promise ( ( resolve , reject ) => {
107
106
exec ( `npm view ${ packageName } version` , ( error , stdout , stderr ) => {
108
107
if ( error ) {
109
- reject ( error ) ;
108
+ reject ( error ) ;
110
109
return ;
111
110
}
112
111
const version = stdout . trim ( ) ;
113
- resolve ( version ) ;
112
+ resolve ( version ) ;
114
113
} ) ;
115
114
} ) ;
116
115
}
117
-
0 commit comments