@@ -134,7 +134,6 @@ export class VscodeHttpProvider extends HttpProvider {
134
134
return { redirect : "/login" , query : { to : this . options . base } }
135
135
}
136
136
try {
137
- this . persistRouteQuery ( request , route )
138
137
return await this . getRoot ( request , route )
139
138
} catch ( error ) {
140
139
const message = `<div>VS Code failed to load.</div> ${
@@ -165,13 +164,6 @@ export class VscodeHttpProvider extends HttpProvider {
165
164
166
165
throw new HttpError ( "Not found" , HttpCode . NotFound )
167
166
}
168
-
169
- private persistRouteQuery ( request : http . IncomingMessage , route : Route ) : void {
170
- const content = Object . keys ( route . query ) . reduce ( ( content , next ) => {
171
- return ( content += `${ next } =${ route . query [ next ] } \n` )
172
- } , "" )
173
- fs . writeFile ( path . resolve ( paths . data , "query" ) , content )
174
- }
175
167
176
168
private async getRoot ( request : http . IncomingMessage , route : Route ) : Promise < HttpResponse > {
177
169
const remoteAuthority = request . headers . host as string
@@ -191,11 +183,15 @@ export class VscodeHttpProvider extends HttpProvider {
191
183
} ) ,
192
184
] )
193
185
186
+ let promise = Promise . resolve ( )
194
187
if ( startPath ) {
195
- settings . write ( {
196
- lastVisited : startPath ,
197
- } )
188
+ promise = settings . write ( { lastVisited : startPath } )
198
189
}
190
+ // `settings.write` depends on `settings.read` internally. To avoid race conditions, a promise is added here to synchronize.
191
+ promise . then ( ( ) => {
192
+ // the query should not be extends, but should be replaced directly.
193
+ settings . write ( { query : route . query } , true )
194
+ } )
199
195
200
196
if ( ! this . isDev ) {
201
197
response . content = response . content . replace ( / < ! - - P R O D _ O N L Y / g, "" ) . replace ( / E N D _ P R O D _ O N L Y - - > / g, "" )
0 commit comments