File size: 1,941 Bytes
df23150 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import { PLUGIN_SCHEMA_VERSION } from "../constants.js";
import type { GlobalProviderConfig, GlobalProviderRecord } from "../types.js";
function compareProviders(left: GlobalProviderRecord, right: GlobalProviderRecord) {
return left.name.localeCompare(right.name) || left.id.localeCompare(right.id);
}
export function createEmptyConfig(): GlobalProviderConfig {
return {
schemaVersion: PLUGIN_SCHEMA_VERSION,
providers: [],
};
}
export function normalizePluginConfig(value: unknown): GlobalProviderConfig {
if (!value || typeof value !== "object" || Array.isArray(value)) {
return createEmptyConfig();
}
const record = value as Record<string, unknown>;
const providers = Array.isArray(record.providers)
? record.providers.filter((provider): provider is GlobalProviderRecord => {
return Boolean(provider && typeof provider === "object" && !Array.isArray(provider));
}).map((provider) => ({
...provider,
defaultModel: provider.defaultModel ?? null,
modelCatalog: Array.isArray(provider.modelCatalog) ? provider.modelCatalog : [],
lastSyncedAt: provider.lastSyncedAt ?? null,
lastSyncError: provider.lastSyncError ?? null,
}))
: [];
return {
schemaVersion: typeof record.schemaVersion === "number" ? record.schemaVersion : PLUGIN_SCHEMA_VERSION,
providers: [...providers].sort(compareProviders),
};
}
export function upsertProvider(
config: GlobalProviderConfig,
provider: GlobalProviderRecord,
): GlobalProviderConfig {
const withoutCurrent = config.providers.filter((existing) => existing.id !== provider.id);
return {
...config,
providers: [...withoutCurrent, provider].sort(compareProviders),
};
}
export function removeProvider(
config: GlobalProviderConfig,
providerId: string,
): GlobalProviderConfig {
return {
...config,
providers: config.providers.filter((provider) => provider.id !== providerId),
};
}
|