import type { Config } from '../../../../tailwindcss/src/compat/plugin-api'
import type { DesignSystem } from '../../../../tailwindcss/src/design-system'
import type { Writable } from '../../utils/types'
import { baseCandidate, parseCandidate, printUnprefixedCandidate } from './candidates'
import { computeUtilitySignature } from './signatures'
const DEPRECATION_MAP = new Map([['order-none', 'order-0']])
export async function migrateDeprecatedUtilities(
designSystem: DesignSystem,
_userConfig: Config | null,
rawCandidate: string,
): Promise<string> {
let signatures = computeUtilitySignature.get(designSystem)
for (let readonlyCandidate of designSystem.parseCandidate(rawCandidate)) {
let candidate = structuredClone(readonlyCandidate) as Writable<typeof readonlyCandidate>
let targetCandidate = baseCandidate(candidate)
let targetCandidateString = printUnprefixedCandidate(designSystem, targetCandidate)
let replacementString = DEPRECATION_MAP.get(targetCandidateString) ?? null
if (replacementString === null) return rawCandidate
let legacySignature = signatures.get(targetCandidateString)
if (typeof legacySignature !== 'string') return rawCandidate
let replacementSignature = signatures.get(replacementString)
if (typeof replacementSignature !== 'string') return rawCandidate
if (legacySignature !== replacementSignature) return rawCandidate
let [replacement] = parseCandidate(designSystem, replacementString)
return designSystem.printCandidate(
Object.assign(structuredClone(replacement), {
variants: candidate.variants,
important: candidate.important,
}),
)
}
return rawCandidate
}