Fix gh-api for strokewidths

Changed files
+40 -2
docs
.vitepress
api
gh-icon
stroke-width
+35
docs/.vitepress/api/gh-icon/stroke-width/[...data].get.ts
···
··· 1 + import { eventHandler, setResponseHeader, defaultContentType } from 'h3' 2 + import { renderToString } from 'react-dom/server' 3 + import { createElement } from 'react' 4 + import SvgPreview from '../../../lib/SvgPreview/index.tsx'; 5 + import createLucideIcon, { IconNode } from 'lucide-react/src/createLucideIcon' 6 + import { parseSync } from 'svgson'; 7 + 8 + export default eventHandler((event) => { 9 + const { params } = event.context 10 + 11 + const [strokeWidth, svgData] = params.data.split('/'); 12 + const data = svgData.slice(0, -4); 13 + 14 + const src = Buffer.from(data, 'base64').toString('utf8'); 15 + 16 + const Icon = createLucideIcon( 17 + 'icon', 18 + parseSync(src.includes('<svg') ? src : `<svg>${src}</svg>`).children.map( 19 + ({ name, attributes }) => [name, attributes] 20 + ) as IconNode 21 + ); 22 + 23 + const svg = Buffer.from( 24 + // We can't use jsx here, is not supported here by nitro. 25 + renderToString(createElement(Icon, { strokeWidth })).replace( 26 + />/, 27 + '><style>@media screen and (prefers-color-scheme: dark) { svg { stroke: #fff } }</style>' 28 + ) 29 + ).toString('utf8'); 30 + 31 + defaultContentType(event, 'image/svg+xml') 32 + setResponseHeader(event, 'Cache-Control', 'public,max-age=31536000') 33 + 34 + return svg 35 + })
+2 -1
docs/package.json
··· 16 "postbuild:vercelJson": "node ../scripts/writeVercelOutput.mjs", 17 "dev": "npx nitropack dev", 18 "build:api": "npx nitropack build", 19 - "prebuild": "pnpm build:iconNodes && pnpm build:metaJson && pnpm build:releaseJson && pnpm build:relatedIcons && pnpm build:iconDetails", 20 "build": "pnpm run \"/^prebuild:.*/\" && pnpm build:api && pnpm build:docs && pnpm postbuild:vercelJson", 21 "preview": "node .output/server/index.mjs" 22 }, ··· 47 "shiki-processor": "^0.1.3", 48 "simple-git": "^3.18.0", 49 "svg-pathdata": "^6.0.3", 50 "vue": "^3.2.47" 51 } 52 }
··· 16 "postbuild:vercelJson": "node ../scripts/writeVercelOutput.mjs", 17 "dev": "npx nitropack dev", 18 "build:api": "npx nitropack build", 19 + "prebuild": "pnpm prebuild:iconNodes && pnpm prebuild:metaJson && pnpm prebuild:releaseJson && pnpm prebuild:relatedIcons && pnpm prebuild:iconDetails", 20 "build": "pnpm run \"/^prebuild:.*/\" && pnpm build:api && pnpm build:docs && pnpm postbuild:vercelJson", 21 "preview": "node .output/server/index.mjs" 22 }, ··· 47 "shiki-processor": "^0.1.3", 48 "simple-git": "^3.18.0", 49 "svg-pathdata": "^6.0.3", 50 + "svgson": "^5.2.1", 51 "vue": "^3.2.47" 52 } 53 }
+3
pnpm-lock.yaml
··· 111 svg-pathdata: 112 specifier: ^6.0.3 113 version: 6.0.3 114 vue: 115 specifier: ^3.2.47 116 version: 3.2.47
··· 111 svg-pathdata: 112 specifier: ^6.0.3 113 version: 6.0.3 114 + svgson: 115 + specifier: ^5.2.1 116 + version: 5.2.1 117 vue: 118 specifier: ^3.2.47 119 version: 3.2.47
-1
pnpm-workspace.yaml
··· 1 packages: 2 - 'packages/*' 3 - 'tools/*' 4 - - 'site' 5 - 'docs'
··· 1 packages: 2 - 'packages/*' 3 - 'tools/*' 4 - 'docs'