+35
docs/.vitepress/api/gh-icon/stroke-width/[...data].get.ts
+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
+2
-1
docs/package.json
···
16
16
"postbuild:vercelJson": "node ../scripts/writeVercelOutput.mjs",
17
17
"dev": "npx nitropack dev",
18
18
"build:api": "npx nitropack build",
19
-
"prebuild": "pnpm build:iconNodes && pnpm build:metaJson && pnpm build:releaseJson && pnpm build:relatedIcons && pnpm build:iconDetails",
19
+
"prebuild": "pnpm prebuild:iconNodes && pnpm prebuild:metaJson && pnpm prebuild:releaseJson && pnpm prebuild:relatedIcons && pnpm prebuild:iconDetails",
20
20
"build": "pnpm run \"/^prebuild:.*/\" && pnpm build:api && pnpm build:docs && pnpm postbuild:vercelJson",
21
21
"preview": "node .output/server/index.mjs"
22
22
},
···
47
47
"shiki-processor": "^0.1.3",
48
48
"simple-git": "^3.18.0",
49
49
"svg-pathdata": "^6.0.3",
50
+
"svgson": "^5.2.1",
50
51
"vue": "^3.2.47"
51
52
}
52
53
}
+3
pnpm-lock.yaml
+3
pnpm-lock.yaml