@@ -59,7 +59,8 @@ export interface DevContainerFromImageConfig {
5959 remoteUser ?: string ;
6060 updateRemoteUserUID ?: boolean ;
6161 userEnvProbe ?: UserEnvProbe ;
62- features ?: DevContainerFeature [ ] | Record < string , string | boolean | Record < string , string | boolean > > ;
62+ features ?: Record < string , string | boolean | Record < string , string | boolean > > ;
63+ overrideFeatureInstallOrder ?: string [ ] ;
6364 hostRequirements ?: HostRequirements ;
6465}
6566
@@ -90,7 +91,8 @@ export type DevContainerFromDockerfileConfig = {
9091 remoteUser ?: string ;
9192 updateRemoteUserUID ?: boolean ;
9293 userEnvProbe ?: UserEnvProbe ;
93- features ?: DevContainerFeature [ ] | Record < string , string | boolean | Record < string , string | boolean > > ;
94+ features ?: Record < string , string | boolean | Record < string , string | boolean > > ;
95+ overrideFeatureInstallOrder ?: string [ ] ;
9496 hostRequirements ?: HostRequirements ;
9597} & (
9698 {
@@ -137,7 +139,8 @@ export interface DevContainerFromDockerComposeConfig {
137139 remoteUser ?: string ;
138140 updateRemoteUserUID ?: boolean ;
139141 userEnvProbe ?: UserEnvProbe ;
140- features ?: DevContainerFeature [ ] | Record < string , string | boolean | Record < string , string | boolean > > ;
142+ features ?: Record < string , string | boolean | Record < string , string | boolean > > ;
143+ overrideFeatureInstallOrder ?: string [ ] ;
141144 hostRequirements ?: HostRequirements ;
142145}
143146
@@ -196,42 +199,40 @@ export function getDockerfile(config: DevContainerFromDockerfileConfig) {
196199 return 'dockerFile' in config ? config . dockerFile : config . build . dockerfile ;
197200}
198201
199- export async function getDockerComposeFilePaths ( cliHost : FileHost , config : DevContainerFromDockerComposeConfig , envForComposeFile ? : NodeJS . ProcessEnv , cwdForDefaultFiles ? : string ) {
202+ export async function getDockerComposeFilePaths ( cliHost : FileHost , config : DevContainerFromDockerComposeConfig , envForComposeFile : NodeJS . ProcessEnv , cwdForDefaultFiles : string ) {
200203 if ( Array . isArray ( config . dockerComposeFile ) ) {
201204 if ( config . dockerComposeFile . length ) {
202205 return config . dockerComposeFile . map ( composeFile => uriToFsPath ( getConfigFilePath ( cliHost , config , composeFile ) , cliHost . platform ) ) ;
203206 }
204207 } else if ( typeof config . dockerComposeFile === 'string' ) {
205208 return [ uriToFsPath ( getConfigFilePath ( cliHost , config , config . dockerComposeFile ) , cliHost . platform ) ] ;
206209 }
207- if ( cwdForDefaultFiles ) {
208- const envComposeFile = envForComposeFile ?. COMPOSE_FILE ;
209- if ( envComposeFile ) {
210- return envComposeFile . split ( cliHost . path . delimiter )
210+
211+ const envComposeFile = envForComposeFile ?. COMPOSE_FILE ;
212+ if ( envComposeFile ) {
213+ return envComposeFile . split ( cliHost . path . delimiter )
214+ . map ( composeFile => cliHost . path . resolve ( cwdForDefaultFiles , composeFile ) ) ;
215+ }
216+
217+ try {
218+ const envPath = cliHost . path . join ( cwdForDefaultFiles , '.env' ) ;
219+ const buffer = await cliHost . readFile ( envPath ) ;
220+ const match = / ^ C O M P O S E _ F I L E = ( .+ ) $ / m. exec ( buffer . toString ( ) ) ;
221+ const envFileComposeFile = match && match [ 1 ] . trim ( ) ;
222+ if ( envFileComposeFile ) {
223+ return envFileComposeFile . split ( cliHost . path . delimiter )
211224 . map ( composeFile => cliHost . path . resolve ( cwdForDefaultFiles , composeFile ) ) ;
212225 }
213-
214- try {
215- const envPath = cliHost . path . join ( cwdForDefaultFiles , '.env' ) ;
216- const buffer = await cliHost . readFile ( envPath ) ;
217- const match = / ^ C O M P O S E _ F I L E = ( .+ ) $ / m. exec ( buffer . toString ( ) ) ;
218- const envFileComposeFile = match && match [ 1 ] . trim ( ) ;
219- if ( envFileComposeFile ) {
220- return envFileComposeFile . split ( cliHost . path . delimiter )
221- . map ( composeFile => cliHost . path . resolve ( cwdForDefaultFiles , composeFile ) ) ;
222- }
223- } catch ( err ) {
224- if ( ! ( err && ( err . code === 'ENOENT' || err . code === 'EISDIR' ) ) ) {
225- throw err ;
226- }
226+ } catch ( err ) {
227+ if ( ! ( err && ( err . code === 'ENOENT' || err . code === 'EISDIR' ) ) ) {
228+ throw err ;
227229 }
230+ }
228231
229- const defaultFiles = [ cliHost . path . resolve ( cwdForDefaultFiles , 'docker-compose.yml' ) ] ;
230- const override = cliHost . path . resolve ( cwdForDefaultFiles , 'docker-compose.override.yml' ) ;
231- if ( await cliHost . isFile ( override ) ) {
232- defaultFiles . push ( override ) ;
233- }
234- return defaultFiles ;
232+ const defaultFiles = [ cliHost . path . resolve ( cwdForDefaultFiles , 'docker-compose.yml' ) ] ;
233+ const override = cliHost . path . resolve ( cwdForDefaultFiles , 'docker-compose.override.yml' ) ;
234+ if ( await cliHost . isFile ( override ) ) {
235+ defaultFiles . push ( override ) ;
235236 }
236- return [ ] ;
237+ return defaultFiles ;
237238}
0 commit comments