diff --git a/docs/.vitepress/api/gh-icon/stroke-width/[...data].get.ts b/docs/.vitepress/api/gh-icon/stroke-width/[...data].get.ts new file mode 100644 index 0000000..5618ec5 --- /dev/null +++ b/docs/.vitepress/api/gh-icon/stroke-width/[...data].get.ts @@ -0,0 +1,35 @@ +import { eventHandler, setResponseHeader, defaultContentType } from 'h3' +import { renderToString } from 'react-dom/server' +import { createElement } from 'react' +import SvgPreview from '../../../lib/SvgPreview/index.tsx'; +import createLucideIcon, { IconNode } from 'lucide-react/src/createLucideIcon' +import { parseSync } from 'svgson'; + +export default eventHandler((event) => { + const { params } = event.context + + const [strokeWidth, svgData] = params.data.split('/'); + const data = svgData.slice(0, -4); + + const src = Buffer.from(data, 'base64').toString('utf8'); + + const Icon = createLucideIcon( + 'icon', + parseSync(src.includes('${src}`).children.map( + ({ name, attributes }) => [name, attributes] + ) as IconNode + ); + + const svg = Buffer.from( + // We can't use jsx here, is not supported here by nitro. + renderToString(createElement(Icon, { strokeWidth })).replace( + />/, + '>' + ) + ).toString('utf8'); + + defaultContentType(event, 'image/svg+xml') + setResponseHeader(event, 'Cache-Control', 'public,max-age=31536000') + + return svg +}) diff --git a/docs/package.json b/docs/package.json index ca814ab..cc0ac5e 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,7 +16,7 @@ "postbuild:vercelJson": "node ../scripts/writeVercelOutput.mjs", "dev": "npx nitropack dev", "build:api": "npx nitropack build", - "prebuild": "pnpm build:iconNodes && pnpm build:metaJson && pnpm build:releaseJson && pnpm build:relatedIcons && pnpm build:iconDetails", + "prebuild": "pnpm prebuild:iconNodes && pnpm prebuild:metaJson && pnpm prebuild:releaseJson && pnpm prebuild:relatedIcons && pnpm prebuild:iconDetails", "build": "pnpm run \"/^prebuild:.*/\" && pnpm build:api && pnpm build:docs && pnpm postbuild:vercelJson", "preview": "node .output/server/index.mjs" }, @@ -47,6 +47,7 @@ "shiki-processor": "^0.1.3", "simple-git": "^3.18.0", "svg-pathdata": "^6.0.3", + "svgson": "^5.2.1", "vue": "^3.2.47" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b23e00..d072d91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -111,6 +111,9 @@ importers: svg-pathdata: specifier: ^6.0.3 version: 6.0.3 + svgson: + specifier: ^5.2.1 + version: 5.2.1 vue: specifier: ^3.2.47 version: 3.2.47 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1ad0ae0..32430fc 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,4 @@ packages: - 'packages/*' - 'tools/*' - - 'site' - 'docs'