From 824bb897cfc28691dca69c89a07d9f3dc6f01d6e Mon Sep 17 00:00:00 2001 From: Karsa Date: Tue, 14 May 2024 22:44:52 +0200 Subject: [PATCH] feat(figma): add data API endpoint for new plugin (#2018) * feat(figma): add data API endpoint with every metadata needed by new Figma plugin * chore(docs/api): extract data as static const --------- Co-authored-by: Karsa --- docs/.vitepress/api/data/index.get.ts | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 docs/.vitepress/api/data/index.get.ts diff --git a/docs/.vitepress/api/data/index.get.ts b/docs/.vitepress/api/data/index.get.ts new file mode 100644 index 000000000..16dc6d4ef --- /dev/null +++ b/docs/.vitepress/api/data/index.get.ts @@ -0,0 +1,41 @@ +import { eventHandler, setResponseHeader } from 'h3'; +import iconNodes from '../../data/iconNodes'; +import { IconNodeWithKeys } from '../../theme/types.ts'; +import iconMetaData from '../../data/iconMetaData.ts'; +import releaseMeta from '../../data/releaseMetaData.json'; +import { getAllCategoryFiles } from '../../lib/categories.ts'; + +const dataResponse = { + icons: Object.entries(iconNodes).reduce((acc, [name, iconNode]) => { + const newIconNode = (iconNode as IconNodeWithKeys).map(([name, { key, ...attrs }]) => { + return [name, attrs]; + }); + + acc[name] = { + iconNode: newIconNode, + aliases: (iconMetaData[name]?.aliases ?? []).map((alias) => + typeof alias === 'string' ? alias : alias.name, + ), + tags: iconMetaData[name].tags ?? [], + categories: iconMetaData[name].categories ?? [], + ...releaseMeta[name], + }; + + return acc; + }, {}), + aliases: Object.entries(iconNodes).reduce((acc, [name]) => { + for (const alias of iconMetaData[name]?.aliases ?? []) { + acc[typeof alias === 'string' ? alias : alias.name] = name; + } + + return acc; + }, {}), + categories: getAllCategoryFiles(), +}; + +export default eventHandler((event) => { + setResponseHeader(event, 'Cache-Control', 'public, max-age=86400'); + setResponseHeader(event, 'Access-Control-Allow-Origin', '*'); + + return dataResponse; +});