import warning from '../../warning'; import type { DerivativeFunc, TokenType } from './interface'; let uuid = 0; /** * Theme with algorithms to derive tokens from design tokens. * Use `createTheme` first which will help to manage the theme instance cache. */ export default class Theme { private derivatives: DerivativeFunc[]; public readonly id: number; constructor( derivatives: | DerivativeFunc | DerivativeFunc[], ) { this.derivatives = Array.isArray(derivatives) ? derivatives : [derivatives]; this.id = uuid; if (derivatives.length === 0) { warning( derivatives.length > 0, '[Ant Design Vue CSS-in-JS] Theme should have at least one derivative function.', ); } uuid += 1; } getDerivativeToken(token: DesignToken): DerivativeToken { return this.derivatives.reduce( (result, derivative) => derivative(token, result), undefined as any, ); } }