You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
801 B
27 lines
801 B
import ThemeCache from './ThemeCache';
|
|
import Theme from './Theme';
|
|
import type { DerivativeFunc, TokenType } from './interface';
|
|
|
|
const cacheThemes = new ThemeCache();
|
|
|
|
/**
|
|
* Same as new Theme, but will always return same one if `derivative` not changed.
|
|
*/
|
|
export default function createTheme<
|
|
DesignToken extends TokenType,
|
|
DerivativeToken extends TokenType,
|
|
>(
|
|
derivatives:
|
|
| DerivativeFunc<DesignToken, DerivativeToken>[]
|
|
| DerivativeFunc<DesignToken, DerivativeToken>,
|
|
) {
|
|
const derivativeArr = Array.isArray(derivatives) ? derivatives : [derivatives];
|
|
// Create new theme if not exist
|
|
if (!cacheThemes.has(derivativeArr)) {
|
|
cacheThemes.set(derivativeArr, new Theme(derivativeArr));
|
|
}
|
|
|
|
// Get theme from cache and return
|
|
return cacheThemes.get(derivativeArr)!;
|
|
}
|