Skip to content

Commit

Permalink
feat: update generated styles
Browse files Browse the repository at this point in the history
  • Loading branch information
blksnk committed Dec 13, 2023
1 parent 97270a0 commit 731ae35
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 6 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
"typescript": "^5.0.0"
},
"scripts": {
"generate": "bun src/scripts/generate.ts"
"generate": "bun src/scripts/generate.ts",
"update": "bun src/scripts/update.ts"
},
"type": "module"
}
10 changes: 5 additions & 5 deletions src/scripts/generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,21 @@ const updateTeamStyles = async (
figmaApiClient: FigmaApiClient,
teamId: FigmaTeamId,
fileKeyFilters?: FigmaFileKey[]
) => {
): Promise<Token[]> => {
info("Staring team styles update...");
const teamStyleTokens = await fetchAndFormatTeamStyles(figmaApiClient, teamId, fileKeyFilters);
const rootTokenCollection = groupTokens(teamStyleTokens, logger)
debug(rootTokenCollection, "root token collection")
const tokenValues = unwrapTokenValues(rootTokenCollection)
debug(tokenValues)
await generateExportedTS(rootTokenCollection, tokenValues, teamStyleTokens);
return teamStyleTokens;
}

/**
* Fetches up to date figma files and Updates exported theme values.
*/
const main = async () => {
export const generate = async () => {
debug("Validating config...");
const config = validateConfig({
FIGMA_TOKEN,
Expand All @@ -77,10 +78,9 @@ const main = async () => {
debug("Initializing Figma API client...")
const figmaApiClient = new FigmaApiClient(config.FIGMA_TOKEN);
info("Figma API client initialized");
await updateTeamStyles(
const allTokens = await updateTeamStyles(
figmaApiClient, config.FIGMA_TEAM_ID,
extractConfigFileKeys(config.FIGMA_FILE_URLS, logger)
)
return allTokens;
}

main();
68 changes: 68 additions & 0 deletions src/scripts/update.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import { LIB_TOKENS, readFile } from "../utils/export.utils";
import { Logger } from "../utils/log.utils";
import { Token } from "../types/global/export.types";
import { generate } from "./generate";

const logger = Logger();

/**
* Fetches previously generated tokens
*/
const fetchPreviousTokens = async (): Promise<Token[]> => {
logger.info("Fetching previouly generated tokens...")
try {
const { tokens } = await import(`../.${LIB_TOKENS}`);
logger.info(`Found ${tokens.length} previously generated tokens.`)
return [...tokens] as Token[];
} catch(e) {
logger.warn("No previously generated tokens found")
return [];
}
}

const getCurrentVersion = async () => {
const { version } = await import("../../package.json");
return version;
}

const getNewVersion = (previousVersion: string) => {

}

const diffTokens = (previousTokens: Token[], freshTokens: Token[]) => {
logger.info("Comparing new tokens to old tokens");
const previousTokenNames = previousTokens.map(({ name }) => name);
const freshTokenNames = freshTokens.map(({ name }) => name);

const addedTokens = [...freshTokens].filter((freshToken) => !previousTokenNames.includes(freshToken.name))
logger.info(`Generated ${addedTokens.length} new tokens.`)
const removedTokens = [...previousTokens].filter((prevToken) => !freshTokenNames.includes(prevToken.name))
logger.info(`Deleted ${removedTokens.length} previous tokens.`)
const updatedTokens = [...freshTokens].filter((freshToken) => {
const correspondingToken = previousTokens.find(prevToken => prevToken.name === freshToken.name)
if (!correspondingToken) return false;
return correspondingToken.value !== freshToken.value;
})
logger.info(`Updated ${updatedTokens.length} existing tokens.`)

return {
addedTokens,
removedTokens,
updatedTokens,
}
}

/**
* Generates a fresh batch of tokens from figma api
* and compares them with previously generated tokens.
*
* @returns commit message for version bump
*/
export const update = async () => {
const previousTokens = await fetchPreviousTokens();
const freshTokens = await generate();
const diffs = diffTokens(previousTokens, freshTokens)
logger.debug(diffs)
}

update();
5 changes: 5 additions & 0 deletions src/utils/export.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ export const writeFile = async (path: string, data: string) => {
await Bun.write(path, data)
}

export const readFile = async (path: string): Promise<string> => {
const file = Bun.file(path)
return await file.text();
};

export const tsConst = (
constName: string,
constValue: object
Expand Down

0 comments on commit 731ae35

Please sign in to comment.