mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-10 03:09:50 +08:00
feat(vscodex): add remote Codex collaboration module
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import { createApp } from "vue";
|
||||
|
||||
import appRuntimeUrl from "../../public/app.js?url";
|
||||
import embedBridgeUrl from "../../public/embed-bridge.js?url";
|
||||
import i18nRuntimeUrl from "../../public/i18n.js?url";
|
||||
import "../../public/style.css";
|
||||
import App from "./App.vue";
|
||||
import { installRequestTemplate } from "./runtime/request-template";
|
||||
|
||||
type RuntimeAsset = {
|
||||
id: string;
|
||||
url: string;
|
||||
};
|
||||
|
||||
const runtimeAssets: RuntimeAsset[] = [
|
||||
{ id: "vscodex-i18n-runtime", url: i18nRuntimeUrl },
|
||||
{ id: "vscodex-embed-bridge", url: embedBridgeUrl },
|
||||
{ id: "vscodex-compat-runtime", url: appRuntimeUrl },
|
||||
];
|
||||
|
||||
function loadRuntimeAsset(asset: RuntimeAsset): Promise<void> {
|
||||
const existing = document.getElementById(asset.id) as HTMLScriptElement | null;
|
||||
if (existing?.dataset.loaded === "true") return Promise.resolve();
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const script = existing ?? document.createElement("script");
|
||||
script.id = asset.id;
|
||||
script.async = false;
|
||||
script.src = asset.url;
|
||||
script.addEventListener("load", () => {
|
||||
script.dataset.loaded = "true";
|
||||
resolve();
|
||||
}, { once: true });
|
||||
script.addEventListener("error", () => reject(new Error(`Unable to load ${asset.id}`)), { once: true });
|
||||
if (!existing) document.body.append(script);
|
||||
});
|
||||
}
|
||||
|
||||
async function startCompatibilityRuntime(): Promise<void> {
|
||||
for (const asset of runtimeAssets) await loadRuntimeAsset(asset);
|
||||
}
|
||||
|
||||
createApp(App).mount("#app");
|
||||
installRequestTemplate();
|
||||
|
||||
void startCompatibilityRuntime().catch((error: unknown) => {
|
||||
const message = error instanceof Error ? error.message : String(error);
|
||||
const status = document.getElementById("appState");
|
||||
if (status) status.textContent = message;
|
||||
document.body.dataset.runtimeError = "true";
|
||||
console.error("Failed to start the Codex compatibility runtime", error);
|
||||
});
|
||||
Reference in New Issue
Block a user