/** * This script turns output from the figma plugin "style to JSON" into a usuable theme. * It expects a format of "themes/{NAME}/anythinghere" */ import fs from "fs"; const fileLocation = "./figmaTokens.json"; const theme = "blue"; const fileContents = fs.readFileSync(fileLocation, { encoding: "utf-8" }); const tokens = JSON.parse(fileContents); const themeTokens = tokens.themes[theme]; const output = {}; function setKey(obj, key, defaultVal) { const realKey = key.match(/^\d+$/g) ? "c" + key : key; if (obj[key]) return obj[key]; obj[realKey] = defaultVal; return obj[realKey]; } function handleToken(token, path) { if (typeof token.name === "string" && typeof token.description === "string") { let ref = output; const lastKey = path.pop(); path.forEach((v) => { ref = setKey(ref, v, {}); }); setKey(ref, lastKey, token.hex); return; } for (let key in token) { handleToken(token[key], [...path, key]); } } handleToken(themeTokens, []); console.log(JSON.stringify(output, null, 2));