3 changed files with 45 additions and 0 deletions
@ -0,0 +1,43 @@ |
|||||||
|
/** |
||||||
|
* 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)); |
Loading…
Reference in new issue