@@ -134,7 +134,6 @@ export class VscodeHttpProvider extends HttpProvider {
134134 return { redirect : "/login" , query : { to : this . options . base } }
135135 }
136136 try {
137- this . persistRouteQuery ( request , route )
138137 return await this . getRoot ( request , route )
139138 } catch ( error ) {
140139 const message = `<div>VS Code failed to load.</div> ${
@@ -165,13 +164,6 @@ export class VscodeHttpProvider extends HttpProvider {
165164
166165 throw new HttpError ( "Not found" , HttpCode . NotFound )
167166 }
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- }
175167
176168 private async getRoot ( request : http . IncomingMessage , route : Route ) : Promise < HttpResponse > {
177169 const remoteAuthority = request . headers . host as string
@@ -191,11 +183,15 @@ export class VscodeHttpProvider extends HttpProvider {
191183 } ) ,
192184 ] )
193185
186+ let promise = Promise . resolve ( )
194187 if ( startPath ) {
195- settings . write ( {
196- lastVisited : startPath ,
197- } )
188+ promise = settings . write ( { lastVisited : startPath } )
198189 }
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+ } )
199195
200196 if ( ! this . isDev ) {
201197 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