kobalt
Version:
A cli to generate a theme from figma projects.
51 lines (50 loc) • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTypescriptThemeFormat = void 0;
const capitalize_1 = require("../utilities/capitalize");
const templates_1 = require("./templates");
const createColorName = (token) => {
if (token.attributes) {
const { type, item, category } = token.attributes;
return `${type}${(0, capitalize_1.capitalize)(item)}${(0, capitalize_1.capitalize)(category)}`;
}
return "";
};
const createFontName = (token) => {
if (token.attributes) {
const { type, item } = token.attributes;
return `${(0, capitalize_1.capitalize)(type)}${(0, capitalize_1.capitalize)(item)}`;
}
return "";
};
const createTypescriptThemeFormat = ({ dictionary, options, }) => {
const body = dictionary.allTokens
.map((token) => {
let value = JSON.stringify(token.value);
if (!token.attributes) {
throw new Error("No attributes available to read from.");
}
switch (token.attributes.category) {
case "color": {
return (0, templates_1.createVariable)(createColorName(token), value);
}
case "font": {
if (options.outputReferences) {
if (dictionary.usesReference(token.original.value)) {
const refs = dictionary.getReferences(token.original.value);
refs.forEach((ref) => {
value = value.replace(`"${ref.value}"`, () => createColorName(ref));
});
}
}
return (0, templates_1.createStyledComponentFont)(createFontName(token), value);
}
default: {
throw new Error(`Unknown category: ${token.attributes.category}`);
}
}
})
.join(`\n`);
return (0, templates_1.createTemplate)(body);
};
exports.createTypescriptThemeFormat = createTypescriptThemeFormat;