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
1 year ago
|
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)!;
|
||
|
}
|