import { getOpConfig } from '@/scripts/op-config' import { semverLt, semverGt, semverValid } from '@/scripts/semver' import type { ConstraintValidator } from '@/types' export const onesVersion: ConstraintValidator<{ range: [string, string?] deprecateHint?: string }> = ({ range, deprecateHint }) => { return async ({ type }) => { const opConfig = await getOpConfig() const { onesVersion: targetOnesVersion } = opConfig if (targetOnesVersion) { if (!semverValid(targetOnesVersion)) { throw `Invalid ones version: ${targetOnesVersion}` } const [releaseVersion, deprecatedVersion] = range if (semverLt(targetOnesVersion, releaseVersion)) { throw `Unable to add ${type} because it was released at ONES v${releaseVersion} while your target ONES version is ${targetOnesVersion}` } if (deprecatedVersion && semverGt(targetOnesVersion, deprecatedVersion)) { throw ( deprecateHint || `Unable to add ${type} because it was deprecated at ONES v${deprecatedVersion} while your target ONES version is ${targetOnesVersion}` ) } } } }