Files
electric-cherry/src/lib/server/fleet/promoted-artifacts.ts
T

27 lines
1.3 KiB
TypeScript

import { getVersion, getVersionContent, getVersionMetadata, listScripts } from './scripts.js';
function selectedArtifacts<Version>(game: string | null, map: string | null, readVersion: (id: number) => Version | undefined) {
return (['script', 'plugin'] as const).flatMap((kind) =>
listScripts(kind).flatMap((script) => {
const scopeMatches = script.scope_type === 'game' ? script.scope_value === game
: script.scope_type === 'map' ? script.scope_value === map : false;
if (!scopeMatches || !script.current_version_id) return [];
const version = readVersion(script.current_version_id);
return version ? [{ kind, script, version }] : [];
})
);
}
/** Published file artifacts shared by provisioning and drift reconciliation. */
export function promotedArtifacts(game: string | null, map: string | null) {
return selectedArtifacts(game, map, id => {
const version = getVersion(id);
return version ? { ...version, content: getVersionContent(id) } : undefined;
});
}
/** Metadata uses the same promotion and scope rules without reading file content. */
export function promotedArtifactMetadata(game: string | null, map: string | null) {
return selectedArtifacts(game, map, getVersionMetadata);
}