@@ -122,6 +122,9 @@ export interface DesktopSavedEnvironmentsShape {
122122 readonly setRegistry : (
123123 records : readonly PersistedSavedEnvironmentRecord [ ] ,
124124 ) => Effect . Effect < void , DesktopSavedEnvironmentsWriteError > ;
125+ readonly removeEnvironment : (
126+ environmentId : string ,
127+ ) => Effect . Effect < void , DesktopSavedEnvironmentsWriteError > ;
125128 readonly getSecret : (
126129 environmentId : string ,
127130 ) => Effect . Effect < Option . Option < string > , DesktopSavedEnvironmentsGetSecretError > ;
@@ -303,6 +306,23 @@ export const layer = Layer.effect(
303306 ) ;
304307 yield * writeDocument ( preserveExistingSecrets ( currentDocument , records ) ) ;
305308 } ) ,
309+ removeEnvironment : Effect . fn ( "desktop.savedEnvironments.removeEnvironment" ) (
310+ function * ( environmentId ) {
311+ yield * Effect . annotateCurrentSpan ( { environmentId } ) ;
312+ const document = yield * readRegistryDocument (
313+ fileSystem ,
314+ environment . savedEnvironmentRegistryPath ,
315+ ) ;
316+ if ( ! document . records . some ( ( record ) => record . environmentId === environmentId ) ) {
317+ return ;
318+ }
319+
320+ yield * writeDocument ( {
321+ version : document . version ,
322+ records : document . records . filter ( ( record ) => record . environmentId !== environmentId ) ,
323+ } ) ;
324+ } ,
325+ ) ,
306326 getSecret : Effect . fn ( "desktop.savedEnvironments.getSecret" ) ( function * ( environmentId ) {
307327 yield * Effect . annotateCurrentSpan ( { environmentId } ) ;
308328 const document = yield * readRegistryDocument (
@@ -403,6 +423,18 @@ export const layerTest = (input?: {
403423 return DesktopSavedEnvironments . of ( {
404424 getRegistry : Ref . get ( recordsRef ) ,
405425 setRegistry : ( records ) => Ref . set ( recordsRef , records ) ,
426+ removeEnvironment : ( environmentId ) =>
427+ Ref . update ( recordsRef , ( records ) =>
428+ records . filter ( ( record ) => record . environmentId !== environmentId ) ,
429+ ) . pipe (
430+ Effect . andThen (
431+ Ref . update ( secretsRef , ( secrets ) => {
432+ const nextSecrets = new Map ( secrets ) ;
433+ nextSecrets . delete ( environmentId ) ;
434+ return nextSecrets ;
435+ } ) ,
436+ ) ,
437+ ) ,
406438 getSecret : ( environmentId ) =>
407439 Ref . get ( secretsRef ) . pipe (
408440 Effect . map ( ( secrets ) => Option . fromNullishOr ( secrets . get ( environmentId ) ) ) ,
0 commit comments