Skip to content

Commit 59c6f07

Browse files
committed
docs: update gen og image
1 parent d95e3c6 commit 59c6f07

11 files changed

+391
-26
lines changed

Diff for: docs/.vitepress/config.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ import { defineConfig } from 'vitepress'
22
import { defaultHoverInfoProcessor, transformerTwoslash } from '@shikijs/vitepress-twoslash'
33
import { transformerRemoveNotationEscape } from '@shikijs/transformers'
44
import { getLocaleConfig } from './locale'
5+
import { transformHead } from './transformHead'
56

67
const docsLink = 'https://js-utils-es.vercel.app'
78

89
export default defineConfig({
9-
lastUpdated: true,
10+
lang: 'en-US',
11+
ignoreDeadLinks: true,
1012
locales: {
1113
root: getLocaleConfig('en'),
1214
},
@@ -39,6 +41,7 @@ export default defineConfig({
3941
sitemap: {
4042
hostname: docsLink,
4143
},
44+
transformHead,
4245
markdown: {
4346
codeTransformers: [
4447
{
@@ -97,4 +100,4 @@ export default defineConfig({
97100
transformerRemoveNotationEscape(),
98101
],
99102
},
100-
})
103+
});

Diff for: docs/.vitepress/locale.ts

+17-18
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@ export function getLocaleConfig(lang: string) {
1515
const head: HeadConfig[] = [
1616
['meta', { property: 'og:title', content: title }],
1717
['meta', { property: 'og:description', content: description }],
18-
['meta', { property: 'og:image', content: `${docsLink}/og.png` }],
1918
['meta', { property: 'og:type', content: 'website' }],
2019
['meta', { property: 'og:url', content: docsLink }],
2120
['meta', { property: 'twitter:card', content: 'summary_large_image' }],
22-
['meta', { property: 'twitter:image', content: `${docsLink}/og.png` }],
2321
['link', { rel: 'icon', href: '/logo.svg', type: 'image/svg+xml' }],
2422
['meta', { name: 'theme-color', content: '#914796' }],
23+
['link', { rel: 'apple-touch-icon', href: '/apple-touch-icon.png', sizes: '180x180' }],
2524
]
2625

2726
const nav: DefaultTheme.NavItem[] = [
@@ -194,22 +193,22 @@ export function getLocaleConfig(lang: string) {
194193
},
195194
}
196195

197-
if (lang === 'zh-CN') {
198-
Object.assign(themeConfig, {
199-
outline: {
200-
label: '页面导航',
201-
},
202-
lastUpdatedText: '最后更新于',
203-
darkModeSwitchLabel: '外观',
204-
sidebarMenuLabel: '目录',
205-
returnToTopLabel: '返回顶部',
206-
langMenuLabel: '选择语言',
207-
docFooter: {
208-
prev: '上一页',
209-
next: '下一页',
210-
},
211-
} satisfies DefaultTheme.Config)
212-
}
196+
// if (lang === 'zh-CN') {
197+
// Object.assign(themeConfig, {
198+
// outline: {
199+
// label: '页面导航',
200+
// },
201+
// lastUpdatedText: '最后更新于',
202+
// darkModeSwitchLabel: '外观',
203+
// sidebarMenuLabel: '目录',
204+
// returnToTopLabel: '返回顶部',
205+
// langMenuLabel: '选择语言',
206+
// docFooter: {
207+
// prev: '上一页',
208+
// next: '下一页',
209+
// },
210+
// } satisfies DefaultTheme.Config)
211+
// }
213212

214213
const localeConfig: LocaleConfig<DefaultTheme.Config>[string] = {
215214
label: t('English'),

Diff for: docs/.vitepress/transformHead.ts

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import fs from 'node:fs/promises'
2+
import sharp from 'sharp'
3+
// import removeMD from 'remove-markdown'
4+
import type { HeadConfig, TransformContext } from 'vitepress'
5+
import funcUtils from '../../scripts/funcUtils.json';
6+
7+
const ogSVGPromise = fs.readFile('../scripts/og-template.svg', 'utf-8')
8+
9+
export async function transformHead({ pageData }: TransformContext) {
10+
const head: HeadConfig[] = [];
11+
12+
if (pageData.relativePath === 'index.md') {
13+
head.push(
14+
['meta', { property: 'og:image', content: 'https://js-utils-es.vercel.app/og.png' }],
15+
['meta', { property: 'twitter:image', content: 'https://js-utils-es.vercel.app/og.png' }],
16+
)
17+
return head
18+
}
19+
20+
const fn = funcUtils.find(i => i.name === `${pageData.title}.ts`);
21+
if (fn?.name) {
22+
const ogName = fn.name.replace('.ts', '');
23+
await generateSVG(fn, `../docs/.vitepress/dist/og-${ogName}.png`);
24+
head.push(
25+
['meta', { property: 'og:image', content: `https://js-utils-es.vercel.app/og-${ogName}.png` }],
26+
['meta', { property: 'twitter:image', content: `https://js-utils-es.vercel.app/og-${ogName}.png` }],
27+
)
28+
}
29+
else {
30+
head.push(
31+
['meta', { property: 'og:image', content: 'https://js-utils-es.vercel.app/og.png' }],
32+
['meta', { property: 'twitter:image', content: 'https://js-utils-es.vercel.app/og.png' }],
33+
)
34+
}
35+
36+
return head;
37+
}
38+
39+
async function generateSVG(fn: any, output: string) {
40+
// let desc = removeMD(fn.description!)
41+
// .replace(/&/g, '&amp;')
42+
// .replace(/</g, '&lt;')
43+
// .replace(/>/g, '&gt;')
44+
// desc = desc[0].toUpperCase() + desc.slice(1)
45+
// const lines = desc.replace(/(?![^\n]{1,45}$)([^\n]{1,45})\s/g, '$1\n')
46+
// .split('\n');
47+
48+
const ogName = fn.name.replace('.ts', '');
49+
50+
const data = {
51+
name: ogName,
52+
package: `js-utils-es/${fn.package}`,
53+
line1: 'A state-of-the-art, high-performance JavaScript utility',
54+
line2: '',
55+
line3: '',
56+
}
57+
const ogSVg = await ogSVGPromise
58+
const svg = ogSVg.replace(/\{\{([^}]+)\}\}/g, (_, name: keyof typeof data) => data[name])
59+
60+
// eslint-disable-next-line no-console
61+
console.log(`Generating ${output}`);
62+
63+
try {
64+
// eslint-disable-next-line node/prefer-global/buffer
65+
await sharp(Buffer.from(svg))
66+
.resize(1200 * 1.1, 630 * 1.1)
67+
.png()
68+
.toFile(output)
69+
}
70+
catch (e) {
71+
console.error('Error generating', { filename: output, ...data, svg })
72+
console.error(e)
73+
}
74+
}

Diff for: docs/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"@nolebase/vitepress-plugin-highlight-targeted-heading": "^2.2.1",
2121
"@shikijs/vitepress-twoslash": "^1.10.3",
2222
"@vitejs/plugin-vue-jsx": "^4.0.0",
23+
"sharp": "^0.33.4",
2324
"unocss": "^0.61.3",
2425
"vite": "^5.3.3",
2526
"vitepress": "^1.3.0",

Diff for: docs/public/android-chrome-192x192.png

5.69 KB
Loading

Diff for: docs/public/android-chrome-512x512.png

17.2 KB
Loading

Diff for: docs/public/apple-touch-icon.png

5.14 KB
Loading

Diff for: docs/public/favicon-16x16.png

404 Bytes
Loading

Diff for: docs/public/favicon-32x32.png

776 Bytes
Loading

0 commit comments

Comments
 (0)