/
makeDurationTokens.ts
37 lines (31 loc) · 1.19 KB
/
makeDurationTokens.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { FRAME as Frame } from '../../../contracts/Figma';
import { DurationTokens } from '../../../contracts/Tokens';
import { sanitizeString } from '../../../frameworks/string/sanitizeString';
import {
ErrorMakeDurationTokensNoFrame,
ErrorMakeDurationTokensNoChildren,
ErrorMakeDurationTokensMissingProps
} from '../../../frameworks/errors/errors';
/**
* @description Places all Figma durations into a clean object
*/
export function makeDurationTokens(
durationFrame: Frame,
camelizeTokenNames?: boolean
): DurationTokens {
if (!durationFrame) throw Error(ErrorMakeDurationTokensNoFrame);
if (!durationFrame.children) throw Error(ErrorMakeDurationTokensNoChildren);
const durations: Record<string, unknown> = {};
const TOKENS = durationFrame.children.reverse();
TOKENS.forEach((item: Frame) => makeDurationToken(item, durations, camelizeTokenNames));
return durations;
}
function makeDurationToken(
item: Frame,
durations: Record<string, unknown>,
camelizeTokenNames?: boolean
) {
if (!item.name || !item.characters) throw Error(ErrorMakeDurationTokensMissingProps);
const NAME = sanitizeString(item.name, camelizeTokenNames);
durations[NAME] = parseFloat(item.characters);
}