27 lines
1.3 KiB
TypeScript
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);
|
|
}
|