Files
WRNexusJS/packages/styles/src/compatibility.ts
T
Clintchiz 586a6db8ff
Quality / quality (ubuntu-latest) (push) Failing after 21s
Quality / quality (windows-latest) (push) Canceled after 0s
release: WRNexusJS 0.8.0
2026-08-02 23:18:51 +05:30

60 lines
2.1 KiB
TypeScript

export const CURRENT_COMPATIBILITY_DATE = "2026-08-02";
export const CURRENT_FRAMEWORK_BEHAVIOUR = 1;
export interface CompatibilityPolicy {
compatibilityDate?: string;
frameworkBehaviour?: number;
}
export interface CompatibilityReport {
configuredDate?: string;
effectiveDate: string;
currentDate: string;
configuredBehaviour?: number;
effectiveBehaviour: number;
currentBehaviour: number;
needsUpgrade: boolean;
future: boolean;
messages: string[];
}
export function isCompatibilityDate(value: string): boolean {
if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) return false;
const date = new Date(`${value}T00:00:00.000Z`);
return Number.isFinite(date.getTime()) && date.toISOString().slice(0, 10) === value;
}
export function resolveCompatibility(policy: CompatibilityPolicy): CompatibilityReport {
const configuredDate = policy.compatibilityDate;
const configuredBehaviour = policy.frameworkBehaviour;
const effectiveDate = configuredDate ?? "1970-01-01";
const effectiveBehaviour = configuredBehaviour ?? 0;
const future =
(configuredDate !== undefined && configuredDate > CURRENT_COMPATIBILITY_DATE) ||
(configuredBehaviour !== undefined && configuredBehaviour > CURRENT_FRAMEWORK_BEHAVIOUR);
const needsUpgrade =
!future &&
(effectiveDate < CURRENT_COMPATIBILITY_DATE ||
effectiveBehaviour < CURRENT_FRAMEWORK_BEHAVIOUR);
const messages: string[] = [];
if (!configuredDate) messages.push("compatibilityDate is not configured; legacy defaults apply.");
if (!configuredBehaviour)
messages.push("frameworkBehaviour is not configured; behaviour version 0 applies.");
if (future)
messages.push("Configuration targets framework behavior newer than this CLI supports.");
else if (needsUpgrade)
messages.push("A newer compatibility policy is available; review it before upgrading.");
else messages.push("Compatibility policy matches the current framework behavior.");
return {
configuredDate,
effectiveDate,
currentDate: CURRENT_COMPATIBILITY_DATE,
configuredBehaviour,
effectiveBehaviour,
currentBehaviour: CURRENT_FRAMEWORK_BEHAVIOUR,
needsUpgrade,
future,
messages,
};
}