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('`).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'