mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-20 21:23:23 +00:00
refactor(plugins): reuse canonical media contract registries
This commit is contained in:
20
src/plugins/contracts/media-provider-registry.test.ts
Normal file
20
src/plugins/contracts/media-provider-registry.test.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
musicGenerationProviderContractRegistry,
|
||||
videoGenerationProviderContractRegistry,
|
||||
} from "./media-provider-registry.js";
|
||||
import {
|
||||
musicGenerationProviderContractRegistry as canonicalMusicGenerationProviderContractRegistry,
|
||||
videoGenerationProviderContractRegistry as canonicalVideoGenerationProviderContractRegistry,
|
||||
} from "./registry.js";
|
||||
|
||||
describe("media provider registry", () => {
|
||||
it("re-exports the canonical video and music provider registries", () => {
|
||||
expect(videoGenerationProviderContractRegistry).toBe(
|
||||
canonicalVideoGenerationProviderContractRegistry,
|
||||
);
|
||||
expect(musicGenerationProviderContractRegistry).toBe(
|
||||
canonicalMusicGenerationProviderContractRegistry,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -1,92 +1,6 @@
|
||||
import { loadBundledCapabilityRuntimeRegistry } from "../bundled-capability-runtime.js";
|
||||
import { BUNDLED_PLUGIN_CONTRACT_SNAPSHOTS } from "./inventory/bundled-capability-metadata.js";
|
||||
import {
|
||||
loadVitestMusicGenerationProviderContractRegistry,
|
||||
loadVitestVideoGenerationProviderContractRegistry,
|
||||
type MusicGenerationProviderContractEntry,
|
||||
type VideoGenerationProviderContractEntry,
|
||||
} from "./speech-vitest-registry.js";
|
||||
// Narrow compatibility re-export for media provider contract registries.
|
||||
|
||||
function resolveBundledManifestPluginIdsForContract(
|
||||
contract: "videoGenerationProviders" | "musicGenerationProviders",
|
||||
): string[] {
|
||||
return BUNDLED_PLUGIN_CONTRACT_SNAPSHOTS.filter((entry) =>
|
||||
contract === "videoGenerationProviders"
|
||||
? entry.videoGenerationProviderIds.length > 0
|
||||
: entry.musicGenerationProviderIds.length > 0,
|
||||
)
|
||||
.map((entry) => entry.pluginId)
|
||||
.toSorted((left, right) => left.localeCompare(right));
|
||||
}
|
||||
|
||||
function createLazyArrayView<T>(load: () => T[]): T[] {
|
||||
return new Proxy([] as T[], {
|
||||
get(_target, prop) {
|
||||
const actual = load();
|
||||
const value = Reflect.get(actual, prop, actual);
|
||||
return typeof value === "function" ? value.bind(actual) : value;
|
||||
},
|
||||
has(_target, prop) {
|
||||
return Reflect.has(load(), prop);
|
||||
},
|
||||
ownKeys() {
|
||||
return Reflect.ownKeys(load());
|
||||
},
|
||||
getOwnPropertyDescriptor(_target, prop) {
|
||||
const actual = load();
|
||||
const descriptor = Reflect.getOwnPropertyDescriptor(actual, prop);
|
||||
if (descriptor) {
|
||||
return descriptor;
|
||||
}
|
||||
if (Reflect.has(actual, prop)) {
|
||||
return {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
writable: false,
|
||||
value: Reflect.get(actual, prop, actual),
|
||||
};
|
||||
}
|
||||
return undefined;
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
let videoGenerationProviderContractRegistryCache: VideoGenerationProviderContractEntry[] | null =
|
||||
null;
|
||||
let musicGenerationProviderContractRegistryCache: MusicGenerationProviderContractEntry[] | null =
|
||||
null;
|
||||
|
||||
function loadVideoGenerationProviderContractRegistry(): VideoGenerationProviderContractEntry[] {
|
||||
if (!videoGenerationProviderContractRegistryCache) {
|
||||
videoGenerationProviderContractRegistryCache = process.env.VITEST
|
||||
? loadVitestVideoGenerationProviderContractRegistry()
|
||||
: loadBundledCapabilityRuntimeRegistry({
|
||||
pluginIds: resolveBundledManifestPluginIdsForContract("videoGenerationProviders"),
|
||||
pluginSdkResolution: "dist",
|
||||
}).videoGenerationProviders.map((entry) => ({
|
||||
pluginId: entry.pluginId,
|
||||
provider: entry.provider,
|
||||
}));
|
||||
}
|
||||
return videoGenerationProviderContractRegistryCache;
|
||||
}
|
||||
|
||||
function loadMusicGenerationProviderContractRegistry(): MusicGenerationProviderContractEntry[] {
|
||||
if (!musicGenerationProviderContractRegistryCache) {
|
||||
musicGenerationProviderContractRegistryCache = process.env.VITEST
|
||||
? loadVitestMusicGenerationProviderContractRegistry()
|
||||
: loadBundledCapabilityRuntimeRegistry({
|
||||
pluginIds: resolveBundledManifestPluginIdsForContract("musicGenerationProviders"),
|
||||
pluginSdkResolution: "dist",
|
||||
}).musicGenerationProviders.map((entry) => ({
|
||||
pluginId: entry.pluginId,
|
||||
provider: entry.provider,
|
||||
}));
|
||||
}
|
||||
return musicGenerationProviderContractRegistryCache;
|
||||
}
|
||||
|
||||
export const videoGenerationProviderContractRegistry: VideoGenerationProviderContractEntry[] =
|
||||
createLazyArrayView(loadVideoGenerationProviderContractRegistry);
|
||||
export const musicGenerationProviderContractRegistry: MusicGenerationProviderContractEntry[] =
|
||||
createLazyArrayView(loadMusicGenerationProviderContractRegistry);
|
||||
export {
|
||||
musicGenerationProviderContractRegistry,
|
||||
videoGenerationProviderContractRegistry,
|
||||
} from "./registry.js";
|
||||
|
||||
Reference in New Issue
Block a user