@@ -7,35 +7,20 @@ import { type WorkspaceAdapter, WorkspaceAdapterError, type WorkspaceAdapterEntr
77import type { Interface as WorktreeService } from "@/worktree"
88import { WorktreeAdapterEntry , worktreeAdapter } from "./worktree"
99
10- export interface AdapterServices {
11- readonly worktree : WorktreeService
12- }
13-
14- const BUILTIN : Record < string , WorkspaceAdapterEntry > = {
15- worktree : { type : "worktree" , ...WorktreeAdapterEntry } ,
16- }
10+ const BUILTIN : WorkspaceAdapterEntry [ ] = [ { type : "worktree" , ...WorktreeAdapterEntry } ]
1711
18- const builtinAdapter = ( type : string , services : AdapterServices ) : WorkspaceAdapter | undefined => {
19- if ( type === "worktree" ) return worktreeAdapter ( services . worktree )
20- }
12+ export const makeBuiltinAdapters = ( worktree : WorktreeService ) =>
13+ new Map < string , WorkspaceAdapter > ( [ [ "worktree" , worktreeAdapter ( worktree ) ] ] )
2114
22- export const makeBuiltinAdapters = ( services : AdapterServices ) =>
23- new Map (
24- Object . keys ( BUILTIN ) . flatMap ( ( type ) => {
25- const adapter = builtinAdapter ( type , services )
26- return adapter ? [ [ type , adapter ] as const ] : [ ]
27- } ) ,
28- )
29-
30- const state = new Map < ProjectID , Map < string , WorkspaceAdapter > > ( )
15+ const plugins = new Map < ProjectID , Map < string , WorkspaceAdapter > > ( )
3116const emptyBuiltinAdapters = new Map < string , WorkspaceAdapter > ( )
3217
3318export function getAdapter (
3419 projectID : ProjectID ,
3520 type : string ,
3621 builtin : ReadonlyMap < string , WorkspaceAdapter > = emptyBuiltinAdapters ,
3722) : WorkspaceAdapter {
38- const custom = state . get ( projectID ) ?. get ( type )
23+ const custom = plugins . get ( projectID ) ?. get ( type )
3924 if ( custom ) return custom
4025
4126 const adapter = builtin . get ( type )
@@ -45,20 +30,12 @@ export function getAdapter(
4530}
4631
4732export async function listAdapters ( projectID : ProjectID ) : Promise < WorkspaceAdapterEntry [ ] > {
48- const custom = [ ...( state . get ( projectID ) ?. entries ( ) ?? [ ] ) ] . map ( ( [ type , adapter ] ) => ( {
33+ const custom = [ ...( plugins . get ( projectID ) ?. entries ( ) ?? [ ] ) ] . map ( ( [ type , adapter ] ) => ( {
4934 type,
5035 name : adapter . name ,
5136 description : adapter . description ,
5237 } ) )
53- return [ ...Object . values ( BUILTIN ) , ...custom ]
54- }
55-
56- // Plugins can be loaded per-project so we need to scope them. If you
57- // want to install a global one pass `ProjectID.global`
58- export function registerEffectAdapter ( projectID : ProjectID , type : string , adapter : WorkspaceAdapter ) {
59- const adapters = state . get ( projectID ) ?? new Map < string , WorkspaceAdapter > ( )
60- adapters . set ( type , adapter )
61- state . set ( projectID , adapters )
38+ return [ ...BUILTIN , ...custom ]
6239}
6340
6441const adapterError = ( cause : unknown ) => new WorkspaceAdapterError ( { message : errorMessage ( cause ) , cause } )
@@ -92,5 +69,9 @@ function fromPromiseAdapter(adapter: PluginWorkspaceAdapter): WorkspaceAdapter {
9269}
9370
9471export function registerAdapter ( projectID : ProjectID , type : string , adapter : PluginWorkspaceAdapter ) {
95- registerEffectAdapter ( projectID , type , fromPromiseAdapter ( adapter ) )
72+ // Plugins can be loaded per-project so we need to scope them. If you
73+ // want to install a global one pass `ProjectID.global`.
74+ const adapters = plugins . get ( projectID ) ?? new Map < string , WorkspaceAdapter > ( )
75+ adapters . set ( type , fromPromiseAdapter ( adapter ) )
76+ plugins . set ( projectID , adapters )
9677}
0 commit comments