| 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, |
| }); |
| } |
|
|