Clarify watermark features across packages

This commit is contained in:
Codex Agent
2026-01-20 13:10:49 +01:00
parent 620dfa415a
commit 1ce0fad720
13 changed files with 157 additions and 29 deletions

View File

@@ -41,11 +41,26 @@ function normalizePackageFeatures(pkg: Package | null): string[] {
}
export function getEnabledPackageFeatures(pkg: Package): string[] {
return normalizePackageFeatures(pkg);
const features = normalizePackageFeatures(pkg);
const watermarkFeature = resolvePackageWatermarkFeatureKey(pkg, features);
if (watermarkFeature) {
const cleaned = features.filter(
(feature) => !['watermark', 'watermark_allowed', 'no_watermark', 'watermark_base', 'watermark_custom'].includes(feature)
);
cleaned.push(watermarkFeature);
return Array.from(new Set(cleaned));
}
return features;
}
function collectFeatures(pkg: Package | null): Set<string> {
return new Set(normalizePackageFeatures(pkg));
if (!pkg) {
return new Set();
}
return new Set(getEnabledPackageFeatures(pkg));
}
function compareLimit(candidate: number | null, active: number | null): number {
@@ -119,9 +134,12 @@ export function selectRecommendedPackageId(
return null;
}
const candidates = feature === 'watermark_allowed'
? packages.filter((pkg) => pkg.watermark_allowed === true)
: packages.filter((pkg) => normalizePackageFeatures(pkg).includes(feature));
const candidates =
feature === 'watermark_allowed'
? packages.filter((pkg) => pkg.watermark_allowed === true)
: feature?.startsWith('watermark')
? packages.filter((pkg) => resolvePackageWatermarkFeatureKey(pkg, normalizePackageFeatures(pkg)) === feature)
: packages.filter((pkg) => normalizePackageFeatures(pkg).includes(feature));
if (candidates.length === 0) {
return null;
}
@@ -151,7 +169,7 @@ export function buildPackageComparisonRows(packages: Package[]): PackageComparis
const featureKeys = new Set<string>();
packages.forEach((pkg) => {
normalizePackageFeatures(pkg).forEach((key) => {
getEnabledPackageFeatures(pkg).forEach((key) => {
if (key !== 'photos') {
featureKeys.add(key);
}
@@ -168,3 +186,23 @@ export function buildPackageComparisonRows(packages: Package[]): PackageComparis
return [...limitRows, ...featureRows];
}
function resolvePackageWatermarkFeatureKey(pkg: Package, features: string[]): string | null {
if (pkg.type === 'reseller') {
return null;
}
if (pkg.watermark_allowed === false) {
return 'watermark_base';
}
if (features.includes('no_watermark')) {
return 'no_watermark';
}
if (pkg.watermark_allowed === true) {
return 'watermark_custom';
}
return null;
}