@@ -69,32 +69,28 @@ export const useAppStore = defineStore("app", () => {
6969
7070 const loadedExtensions = ref ( new Map ( ) )
7171 const extensionAPI = ref ( null )
72+ const codeTransformer = ref ( null )
7273
7374 function setExtensionAPI ( api ) {
7475 extensionAPI . value = api
7576 }
7677
77- function getExtension ( path ) {
78- return loadedExtensions . value . get ( path )
78+ function setCodeTransformer ( transformer ) {
79+ codeTransformer . value = transformer
7980 }
8081
81- async function loadExtension ( path , codeTransformer = null ) {
82- try {
83- if ( loadedExtensions . value . has ( path ) ) {
84- console . warn ( `[AppStore] Extension already loaded from this path: ${ path } ` )
85- throw new Error ( 'This extension file is already loaded' )
86- }
87-
88- if ( ! extensionAPI . value ) {
89- throw new Error ( "Extension API not initialized" )
90- }
82+ function getExtension ( id ) {
83+ return loadedExtensions . value . get ( id )
84+ }
9185
86+ async function loadExtension ( path ) {
87+ try {
9288 let finalURL = path
9389
94- if ( codeTransformer && path . startsWith ( 'blob:' ) ) {
90+ if ( codeTransformer . value && path . startsWith ( 'blob:' ) ) {
9591 const response = await fetch ( path )
9692 const code = await response . text ( )
97- const transformedCode = codeTransformer ( code )
93+ const transformedCode = codeTransformer . value ( code )
9894
9995 const newBlob = new Blob ( [ transformedCode ] , { type : 'application/javascript' } )
10096 finalURL = URL . createObjectURL ( newBlob )
@@ -106,30 +102,37 @@ export const useAppStore = defineStore("app", () => {
106102 URL . revokeObjectURL ( finalURL )
107103 }
108104
109- const extensionName = extensionModule . metadata ?. name
110- if ( extensionName ) {
111- const alreadyLoaded = Array . from ( loadedExtensions . value . values ( ) ) . find (
112- ext => ext . metadata ?. name === extensionName
113- )
114- if ( alreadyLoaded ) {
115- console . warn ( `[AppStore] Extension "${ extensionName } " is already loaded` )
116- throw new Error ( `Extension "${ extensionName } " is already loaded.` )
117- }
105+ if ( ! extensionModule . metadata ?. id ) {
106+ throw new Error ( 'Extension must have metadata.id' )
107+ }
108+
109+ const extensionId = extensionModule . metadata . id
110+
111+ if ( loadedExtensions . value . has ( extensionId ) ) {
112+ console . warn ( `[AppStore] Extension "${ extensionId } " is already loaded` )
113+ throw new Error ( `Extension "${ extensionId } " is already loaded.` )
114+ }
115+
116+ if ( ! extensionAPI . value ) {
117+ throw new Error ( "Extension API not initialized" )
118118 }
119119
120120 if ( typeof extensionModule . install === 'function' ) {
121- await extensionModule . install ( extensionAPI . value , path )
121+ extensionAPI . value . setCurrentExtensionId ( extensionId )
122+ await extensionModule . install ( extensionAPI . value )
123+ extensionAPI . value . clearCurrentExtensionId ( )
122124
123125 const extensionData = {
124126 module : extensionModule ,
127+ id : extensionId ,
125128 path,
126129 loadedAt : new Date ( ) . toISOString ( ) ,
127- metadata : extensionModule . metadata || { } ,
130+ metadata : extensionModule . metadata ,
128131 enabled : true ,
129132 }
130- loadedExtensions . value . set ( path , extensionData )
133+ loadedExtensions . value . set ( extensionId , extensionData )
131134
132- console . log ( `[AppStore] Extension loaded successfully: ${ path } ` )
135+ console . log ( `[AppStore] Extension loaded successfully: ${ extensionId } ` )
133136
134137 return extensionModule
135138 } else {
@@ -145,48 +148,48 @@ export const useAppStore = defineStore("app", () => {
145148 return Array . from ( loadedExtensions . value . values ( ) )
146149 }
147150
148- function unloadExtension ( path ) {
149- const extensionData = getExtension ( path )
151+ function unloadExtension ( id ) {
152+ const extensionData = getExtension ( id )
150153 if ( ! extensionData ) return false
151154
152155 if ( extensionData . module && typeof extensionData . module . uninstall === 'function' ) {
153156 try {
154- extensionData . module . uninstall ( extensionAPI . value , path )
155- console . log ( `[AppStore] Extension uninstall called: ${ path } ` )
157+ extensionData . module . uninstall ( extensionAPI . value )
158+ console . log ( `[AppStore] Extension uninstall called: ${ id } ` )
156159 } catch ( error ) {
157- console . error ( `[AppStore] Error calling uninstall for ${ path } :` , error )
160+ console . error ( `[AppStore] Error calling uninstall for ${ id } :` , error )
158161 }
159162 }
160163
161164 if ( extensionAPI . value && typeof extensionAPI . value . unregisterToolsByExtension === 'function' ) {
162- extensionAPI . value . unregisterToolsByExtension ( path )
165+ extensionAPI . value . unregisterToolsByExtension ( id )
163166 }
164167
165- loadedExtensions . value . delete ( path )
166- console . log ( `[AppStore] Extension unloaded: ${ path } ` )
168+ loadedExtensions . value . delete ( id )
169+ console . log ( `[AppStore] Extension unloaded: ${ id } ` )
167170 return true
168171 }
169172
170- function toggleExtension ( path ) {
171- const extensionData = getExtension ( path )
173+ function toggleExtension ( id ) {
174+ const extensionData = getExtension ( id )
172175 if ( ! extensionData ) return false
173176
174177 extensionData . enabled = ! extensionData . enabled
175- console . log ( `[AppStore] Extension ${ extensionData . enabled ? 'enabled' : 'disabled' } : ${ path } ` )
178+ console . log ( `[AppStore] Extension ${ extensionData . enabled ? 'enabled' : 'disabled' } : ${ id } ` )
176179 return extensionData . enabled
177180 }
178181
179- function setExtensionEnabled ( path , enabled ) {
180- const extensionData = getExtension ( path )
182+ function setExtensionEnabled ( id , enabled ) {
183+ const extensionData = getExtension ( id )
181184 if ( ! extensionData ) return false
182185
183186 extensionData . enabled = enabled
184- console . log ( `[AppStore] Extension ${ enabled ? 'enabled' : 'disabled' } : ${ path } ` )
187+ console . log ( `[AppStore] Extension ${ enabled ? 'enabled' : 'disabled' } : ${ id } ` )
185188 return true
186189 }
187190
188- function getExtensionEnabled ( path ) {
189- return getExtension ( path ) ?. enabled ?? false
191+ function getExtensionEnabled ( id ) {
192+ return getExtension ( id ) ?. enabled ?? false
190193 }
191194
192195 return {
@@ -196,6 +199,7 @@ export const useAppStore = defineStore("app", () => {
196199 importStores,
197200 loadedExtensions,
198201 setExtensionAPI,
202+ setCodeTransformer,
199203 loadExtension,
200204 getLoadedExtensions,
201205 unloadExtension,
0 commit comments