52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
/**
|
|
* 🔌 UNIVERSAL LANGUAGE RUNNER REGISTRY 🔌
|
|
* =========================================
|
|
* Verwaltet austauschbare Language-Runner für polyglotte Code-Ausführung
|
|
* (Python, JavaScript, SQL, Rust etc.) in der Monaco Web-IDE.
|
|
*/
|
|
|
|
(function () {
|
|
const runners = new Map();
|
|
|
|
window.RunnerRegistry = {
|
|
/**
|
|
* Registriert einen neuen Language Runner Adapter
|
|
* @param {Object} adapter
|
|
*/
|
|
register(adapter) {
|
|
if (!adapter || !adapter.id) {
|
|
throw new Error("Runner Adapter muss eine gültige 'id' besitzen.");
|
|
}
|
|
runners.set(adapter.id.toLowerCase(), adapter);
|
|
console.log(`🔌 [RunnerRegistry] Runner '${adapter.displayName || adapter.id}' erfolgreich registriert.`);
|
|
},
|
|
|
|
/**
|
|
* Ruft einen registrierten Runner anhand der Sprach-ID ab
|
|
* @param {string} languageId
|
|
* @returns {Object|null}
|
|
*/
|
|
get(languageId) {
|
|
if (!languageId) return null;
|
|
return runners.get(languageId.toLowerCase()) || null;
|
|
},
|
|
|
|
/**
|
|
* Gibt alle registrierten Sprach-IDs zurück
|
|
* @returns {string[]}
|
|
*/
|
|
list() {
|
|
return Array.from(runners.keys());
|
|
},
|
|
|
|
/**
|
|
* Prüft, ob ein Runner für eine Sprache verfügbar ist
|
|
* @param {string} languageId
|
|
* @returns {boolean}
|
|
*/
|
|
has(languageId) {
|
|
if (!languageId) return false;
|
|
return runners.has(languageId.toLowerCase());
|
|
}
|
|
};
|
|
})();
|