From bb09d28b3be53639989bdeed302653cb693ceb02 Mon Sep 17 00:00:00 2001 From: PerfectPan Date: Sun, 2 Mar 2025 23:20:39 +0800 Subject: [PATCH 1/2] feat: upgrade shiki --- package.json | 88 +++++++++---------- pnpm-lock.yaml | 179 +++++++++++++++++++++++++++++++++----- src/pages/blog/[slug].tsx | 7 +- 3 files changed, 207 insertions(+), 67 deletions(-) diff --git a/package.json b/package.json index b94d8ba..ad6c92b 100644 --- a/package.json +++ b/package.json @@ -1,46 +1,46 @@ { - "name": "blog", - "version": "0.0.0", - "type": "module", - "private": true, - "scripts": { - "dev": "waku dev", - "build": "waku build && pnpm gen:rss", - "start": "waku start", - "gen:rss": "node ./scripts/gen-rss.mjs", - "prepare": "husky" - }, - "dependencies": { - "@shikijs/rehype": "^1.2.2", - "lodash-es": "^4.17.21", - "lucide-react": "^0.379.0", - "next-mdx-remote": "^4.4.1", - "react": "19.0.0-beta-e7d213dfb0-20240507", - "react-dom": "19.0.0-beta-e7d213dfb0-20240507", - "react-server-dom-webpack": "19.0.0-beta-e7d213dfb0-20240507", - "rehype-katex": "^7.0.0", - "remark": "^15.0.1", - "remark-frontmatter": "^5.0.0", - "remark-math": "^5.0.0", - "shiki": "^1.2.2", - "waku": "0.20.2", - "yaml": "^2.4.1" - }, - "devDependencies": { - "@biomejs/biome": "1.7.3", - "@types/dom-view-transitions": "^1.0.4", - "@types/lodash-es": "^4.17.12", - "@types/react": "18.2.55", - "@types/react-dom": "18.2.19", - "autoprefixer": "10.4.17", - "feed": "^4.2.2", - "husky": "^9.0.11", - "lint-staged": "^15.2.5", - "tailwindcss": "3.4.1", - "typescript": "5.3.3" - }, - "lint-staged": { - "*.{mjs,js,jsx,mts,ts,tsx,css,json,md}": "pnpm biome check --apply" - }, - "packageManager": "pnpm@8.15.5" + "name": "blog", + "version": "0.0.0", + "type": "module", + "private": true, + "scripts": { + "dev": "waku dev", + "build": "waku build && pnpm gen:rss", + "start": "waku start", + "gen:rss": "node ./scripts/gen-rss.mjs", + "prepare": "husky" + }, + "dependencies": { + "@shikijs/rehype": "^3.1.0", + "lodash-es": "^4.17.21", + "lucide-react": "^0.379.0", + "next-mdx-remote": "^4.4.1", + "react": "19.0.0-beta-e7d213dfb0-20240507", + "react-dom": "19.0.0-beta-e7d213dfb0-20240507", + "react-server-dom-webpack": "19.0.0-beta-e7d213dfb0-20240507", + "rehype-katex": "^7.0.0", + "remark": "^15.0.1", + "remark-frontmatter": "^5.0.0", + "remark-math": "^5.0.0", + "shiki": "^3.1.0", + "waku": "0.20.2", + "yaml": "^2.4.1" + }, + "devDependencies": { + "@biomejs/biome": "1.7.3", + "@types/dom-view-transitions": "^1.0.4", + "@types/lodash-es": "^4.17.12", + "@types/react": "18.2.55", + "@types/react-dom": "18.2.19", + "autoprefixer": "10.4.17", + "feed": "^4.2.2", + "husky": "^9.0.11", + "lint-staged": "^15.2.5", + "tailwindcss": "3.4.1", + "typescript": "5.3.3" + }, + "lint-staged": { + "*.{mjs,js,jsx,mts,ts,tsx,css,json,md}": "pnpm biome check --apply" + }, + "packageManager": "pnpm@8.15.5" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6383444..349c2df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@shikijs/rehype': - specifier: ^1.2.2 - version: 1.2.2 + specifier: ^3.1.0 + version: 3.1.0 lodash-es: specifier: ^4.17.21 version: 4.17.21 @@ -39,8 +39,8 @@ dependencies: specifier: ^5.0.0 version: 5.1.1 shiki: - specifier: ^1.2.2 - version: 1.2.2 + specifier: ^3.1.0 + version: 3.1.0 waku: specifier: 0.20.2 version: 0.20.2(react-dom@19.0.0-beta-e7d213dfb0-20240507)(react-server-dom-webpack@19.0.0-beta-e7d213dfb0-20240507)(react@19.0.0-beta-e7d213dfb0-20240507) @@ -824,25 +824,62 @@ packages: dev: false optional: true - /@shikijs/core@1.2.2: - resolution: {integrity: sha512-GXbTyNP6HlxpyWMR4eirW54Cxp84nVuivcV5hGVBgKnIl+UmD4AJgCX1uXuNRcFFAw58lB3HqryuezIc0iCLgw==} + /@shikijs/core@3.1.0: + resolution: {integrity: sha512-1ppAOyg3F18N8Ge9DmJjGqRVswihN33rOgPovR6gUHW17Hw1L4RlRhnmVQcsacSHh0A8IO1FIgNbtTxUFwodmg==} + dependencies: + '@shikijs/types': 3.1.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + dev: false + + /@shikijs/engine-javascript@3.1.0: + resolution: {integrity: sha512-/LwkhW17jYi7uPcdaaSQQDNW+xgrHXarkrxYPoC6WPzH2xW5mFMw12doHXJBqxmYvtcTbaatcv2MkH9+3PU1FA==} + dependencies: + '@shikijs/types': 3.1.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 3.1.1 dev: false - /@shikijs/rehype@1.2.2: - resolution: {integrity: sha512-CPQpd9Fn5E3ikRD2KM2K/UTh6wQC/hYfbKbng22T6fwePkHOs490GfmvT/chiOglLELQHam2foxeh5a9bHq+Rg==} + /@shikijs/engine-oniguruma@3.1.0: + resolution: {integrity: sha512-reRgy8VzDPdiDocuGDD60Rk/jLxgcgy+6H4n6jYLeN2Yw5ikasRjQQx8ERXtDM35yg2v/d6KolDBcK8hYYhcmw==} dependencies: - '@shikijs/transformers': 1.2.2 + '@shikijs/types': 3.1.0 + '@shikijs/vscode-textmate': 10.0.2 + dev: false + + /@shikijs/langs@3.1.0: + resolution: {integrity: sha512-hAM//sExPXAXG3ZDWjrmV6Vlw4zlWFOcT1ZXNhFRBwPP27scZu/ZIdZ+TdTgy06zSvyF4KIjnF8j6+ScKGu6ww==} + dependencies: + '@shikijs/types': 3.1.0 + dev: false + + /@shikijs/rehype@3.1.0: + resolution: {integrity: sha512-snfifm4fwSmkCbUUHrpgHP2F8oPWP6WUQOJrh+k0aQazqv2a0jYLLXs2mK1Y1w/JfQ/NnKNbRUmZQqS9zxTXGw==} + dependencies: + '@shikijs/types': 3.1.0 '@types/hast': 3.0.4 - hast-util-to-string: 3.0.0 - shiki: 1.2.2 - unified: 11.0.4 + hast-util-to-string: 3.0.1 + shiki: 3.1.0 + unified: 11.0.5 unist-util-visit: 5.0.0 dev: false - /@shikijs/transformers@1.2.2: - resolution: {integrity: sha512-GL03TlMh9oBeBLU5pcYBKpZnZZVdXSJ4ec7EQ/uw9+NrVaHs6qTjVN8F/0mvKd+sXLbBga8XZWDdob5F5tx5lw==} + /@shikijs/themes@3.1.0: + resolution: {integrity: sha512-A4MJmy9+ydLNbNCtkmdTp8a+ON+MMXoUe1KTkELkyu0+pHGOcbouhNuobhZoK59cL4cOST6CCz1x+kUdkp9UZA==} dependencies: - shiki: 1.2.2 + '@shikijs/types': 3.1.0 + dev: false + + /@shikijs/types@3.1.0: + resolution: {integrity: sha512-F8e7Fy4ihtcNpJG572BZZC1ErYrBrzJ5Cbc9Zi3REgWry43gIvjJ9lFAoUnuy7Bvy4IFz7grUSxL5edfrrjFEA==} + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + dev: false + + /@shikijs/vscode-textmate@10.0.2: + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} dev: false /@swc/core-darwin-arm64@1.4.17: @@ -1124,6 +1161,10 @@ packages: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} dev: false + /@ungap/structured-clone@1.3.0: + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + dev: false + /@vitejs/plugin-react@4.2.1(vite@5.2.11): resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1256,6 +1297,7 @@ packages: /acorn-import-assertions@1.9.0(acorn@8.11.3): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + deprecated: package has been renamed to acorn-import-attributes peerDependencies: acorn: ^8 dependencies: @@ -1622,6 +1664,10 @@ packages: /electron-to-chromium@1.4.673: resolution: {integrity: sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw==} + /emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + dev: false + /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} dev: true @@ -2014,8 +2060,24 @@ packages: - supports-color dev: false - /hast-util-to-string@3.0.0: - resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} + /hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.0.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.3 + zwitch: 2.0.4 + dev: false + + /hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} dependencies: '@types/hast': 3.0.4 dev: false @@ -2033,6 +2095,12 @@ packages: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} dev: false + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.4 + dev: false + /hastscript@8.0.0: resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} dependencies: @@ -2048,6 +2116,10 @@ packages: engines: {node: '>=16.0.0'} dev: false + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: false + /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -2462,6 +2534,20 @@ packages: unist-util-visit: 4.1.2 dev: false + /mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + dev: false + /mdast-util-to-markdown@1.5.0: resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: @@ -3102,6 +3188,14 @@ packages: mimic-fn: 4.0.0 dev: true + /oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} + dependencies: + emoji-regex-xs: 1.0.0 + regex: 6.0.1 + regex-recursion: 6.0.2 + dev: false + /parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: @@ -3257,6 +3351,10 @@ packages: resolution: {integrity: sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==} dev: false + /property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + dev: false + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3319,6 +3417,22 @@ packages: picomatch: 2.3.1 dev: true + /regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + dependencies: + regex-utilities: 2.3.0 + dev: false + + /regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + dev: false + + /regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + dependencies: + regex-utilities: 2.3.0 + dev: false + /rehype-katex@7.0.0: resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==} dependencies: @@ -3519,10 +3633,17 @@ packages: engines: {node: '>=8'} dev: true - /shiki@1.2.2: - resolution: {integrity: sha512-nqazfFgrU+DBLqk4+WjmGQz8sVWkcUcGriHqSM2zGk0GhjirVz4FyJ3AABEx91OpjGiKpuKBg2diYfRfQG3Fbg==} + /shiki@3.1.0: + resolution: {integrity: sha512-LdTNyWQlC5zdCaHdcp1zPA1OVA2ivb+KjGOOnGcy02tGaF5ja+dGibWFH7Ar8YlngUgK/scDqworK18Ys9cbYA==} dependencies: - '@shikijs/core': 1.2.2 + '@shikijs/core': 3.1.0 + '@shikijs/engine-javascript': 3.1.0 + '@shikijs/engine-oniguruma': 3.1.0 + '@shikijs/langs': 3.1.0 + '@shikijs/themes': 3.1.0 + '@shikijs/types': 3.1.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 dev: false /signal-exit@3.0.7: @@ -3819,6 +3940,18 @@ packages: vfile: 6.0.1 dev: false + /unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + dependencies: + '@types/unist': 3.0.2 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.1 + dev: false + /unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} dependencies: @@ -3854,6 +3987,12 @@ packages: '@types/unist': 2.0.10 dev: false + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.2 + dev: false + /unist-util-remove-position@4.0.2: resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} dependencies: diff --git a/src/pages/blog/[slug].tsx b/src/pages/blog/[slug].tsx index 0555d3b..cdfb850 100644 --- a/src/pages/blog/[slug].tsx +++ b/src/pages/blog/[slug].tsx @@ -5,7 +5,8 @@ import rehypeShikiFromHighlighter from '@shikijs/rehype/core'; import { compileMDX } from 'next-mdx-remote/rsc'; import rehypeKatex from 'rehype-katex'; import remarkMath from 'remark-math'; -import { getHighlighterCore } from 'shiki/core'; +import { createHighlighterCore } from 'shiki/core'; +import { createOnigurumaEngine } from 'shiki/engine/oniguruma'; import { Link } from 'waku'; import { MDXComponents } from '../../components/mdx-runtime/index.js'; import { MDXWrapper } from '../../components/mdx-wrapper.js'; @@ -17,7 +18,7 @@ type BlogArticlePageProps = { slug: string; }; -const highlighter = await getHighlighterCore({ +const highlighter = await createHighlighterCore({ themes: [ import('shiki/themes/vitesse-light.mjs'), import('shiki/themes/vitesse-dark.mjs'), @@ -28,7 +29,7 @@ const highlighter = await getHighlighterCore({ import('shiki/langs/html.mjs'), import('shiki/langs/typescript.mjs'), ], - loadWasm: import('shiki/wasm'), + engine: createOnigurumaEngine(() => import('shiki/wasm')), }); export default async function BlogArticlePage({ slug }: BlogArticlePageProps) { From 0729ee478d15631ed27bebbb8f6ae3475c711765 Mon Sep 17 00:00:00 2001 From: PerfectPan Date: Sun, 2 Mar 2025 23:47:10 +0800 Subject: [PATCH 2/2] feat: use latest corepack --- .github/workflows/pull-request.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 215010d..d6a31fd 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -18,6 +18,9 @@ jobs: - name: Install Dependencies run: | + echo "Before: corepack version => $(corepack --version || echo 'not installed')" + npm install -g corepack@latest + echo "After : corepack version => $(corepack --version)" corepack enable pnpm install