import { resolveEmojiAndHomepage } from "./entry-metadata.js" ;
import {
evaluateRequirementsFromMetadataWithRemote,
type RequirementConfigCheck,
type RequirementRemote,
type Requirements,
type RequirementsMetadata,
} from "./requirements.js" ;
export type EntryMetadataRequirementsParams = Parameters<
typeof evaluateEntryMetadataRequirements
>[0 ];
export function evaluateEntryMetadataRequirements(params: {
always: boolean ;
metadata?: (RequirementsMetadata & { emoji?: string; homepage?: string }) | null ;
frontmatter?: {
emoji?: string;
homepage?: string;
website?: string;
url?: string;
} | null ;
hasLocalBin: (bin: string) => boolean ;
localPlatform: string;
remote?: RequirementRemote;
isEnvSatisfied: (envName: string) => boolean ;
isConfigSatisfied: (pathStr: string) => boolean ;
}): {
emoji?: string;
homepage?: string;
required: Requirements;
missing: Requirements;
requirementsSatisfied: boolean ;
configChecks: RequirementConfigCheck[];
} {
const { emoji, homepage } = resolveEmojiAndHomepage({
metadata: params.metadata,
frontmatter: params.frontmatter,
});
const { required, missing, eligible, configChecks } = evaluateRequirementsFromMetadataWithRemote({
always: params.always,
metadata: params.metadata ?? undefined,
hasLocalBin: params.hasLocalBin,
localPlatform: params.localPlatform,
remote: params.remote,
isEnvSatisfied: params.isEnvSatisfied,
isConfigSatisfied: params.isConfigSatisfied,
});
return {
...(emoji ? { emoji } : {}),
...(homepage ? { homepage } : {}),
required,
missing,
requirementsSatisfied: eligible,
configChecks,
};
}
export function evaluateEntryMetadataRequirementsForCurrentPlatform(
params: Omit<EntryMetadataRequirementsParams, "localPlatform" >,
): ReturnType<typeof evaluateEntryMetadataRequirements> {
return evaluateEntryMetadataRequirements({
...params,
localPlatform: process.platform,
});
}
export function evaluateEntryRequirementsForCurrentPlatform(params: {
always: boolean ;
entry: {
metadata?: (RequirementsMetadata & { emoji?: string; homepage?: string }) | null ;
frontmatter?: {
emoji?: string;
homepage?: string;
website?: string;
url?: string;
} | null ;
};
hasLocalBin: (bin: string) => boolean ;
remote?: RequirementRemote;
isEnvSatisfied: (envName: string) => boolean ;
isConfigSatisfied: (pathStr: string) => boolean ;
}): ReturnType<typeof evaluateEntryMetadataRequirements> {
return evaluateEntryMetadataRequirementsForCurrentPlatform({
always: params.always,
metadata: params.entry.metadata,
frontmatter: params.entry.frontmatter,
hasLocalBin: params.hasLocalBin,
remote: params.remote,
isEnvSatisfied: params.isEnvSatisfied,
isConfigSatisfied: params.isConfigSatisfied,
});
}
Messung V0.5 in Prozent C=98 H=96 G=96
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland