Skip to content

Commit 7a8393e

Browse files
committed
transformer edit
1 parent c66dc70 commit 7a8393e

File tree

1 file changed

+47
-43
lines changed

1 file changed

+47
-43
lines changed

app/stores/app.js

Lines changed: 47 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)