added addons support

This commit is contained in:
SrGooglo 2025-03-25 22:53:45 +00:00
parent 2f77c50635
commit 243ce4731c
2 changed files with 53 additions and 0 deletions

23
src/addons.js Normal file
View File

@ -0,0 +1,23 @@
export default class AddonsManager {
addons = new Map()
register(name, addon) {
this.addons.set(name, addon)
}
get(name) {
return this.addons.get(name)
}
// search all addons registered, and find all addons that has a addon[operation] function
getByOperation(operation) {
return Array.from(this.addons.values())
.filter((addon) => addon[operation])
.map((addon) => {
return {
id: addon.constructor.id,
fn: addon[operation],
}
})
}
}

View File

@ -0,0 +1,30 @@
export default async function processAddons({
operation,
initialData,
fnArguments,
normalizeAddonResult,
}) {
const addons = __comty_shared_state.addons.getByOperation(operation)
let processedData = initialData
if (typeof fnArguments === "undefined") {
fnArguments = []
}
for (const addon of addons) {
try {
const addonResult = await addon.fn(...fnArguments)
processedData = normalizeAddonResult({
operation,
currentData: processedData,
addonResult,
})
} catch (error) {
console.error(`Error in [${operation}] addon:`, error)
}
}
return processedData
}