Skip to content

Commit cdca994

Browse files
authored
feat!: drop Node v18 support, remove deprecated APIs (#1249)
1 parent 2b33c0c commit cdca994

File tree

72 files changed

+992
-13189
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+992
-13189
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@ jobs:
6767
include:
6868
- node: 20.x
6969
os: ubuntu-latest
70-
- node: 18.x
71-
os: ubuntu-latest
7270
fail-fast: false
7371

7472
permissions:

docs/.vitepress/config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ const INTEGRATIONS = [
5252
] as const satisfies (DefaultTheme.NavItemWithLink | DefaultTheme.SidebarItem)[]
5353

5454
const BLOGS: DefaultTheme.NavItemWithLink[] = [
55+
{ text: 'Shiki v4.0', link: '/blog/v4' },
5556
{ text: 'Shiki v3.0', link: '/blog/v3' },
5657
{ text: 'Shiki v2.0', link: '/blog/v2' },
5758
{ text: 'The Evolution of Shiki v1.0', link: 'https://nuxt.com/blog/shiki-v1' },
@@ -63,6 +64,7 @@ const VERSIONS: (DefaultTheme.NavItemWithLink | DefaultTheme.NavItemChildren)[]
6364
{ text: `Contributing`, link: 'https://github.com/shikijs/shiki/blob/main/CONTRIBUTING.md' },
6465
{
6566
items: [
67+
{ text: 'Migration from v3.0', link: '/blog/v4' },
6668
{ text: 'Migration from v2.0', link: '/blog/v3' },
6769
{ text: 'Migration from v1.0', link: '/blog/v2' },
6870
{ text: 'Migration from v0.14', link: '/guide/migrate#migrate-from-v0-14' },
@@ -134,7 +136,7 @@ export default withTwoslashInlineCache(withMermaid(defineConfig({
134136
name: 'shiki:inline-decorations',
135137
preprocess(code, options) {
136138
const reg = /^\/\/ @decorations:(.*)\n/
137-
code = code.replace(reg, (match, decorations) => {
139+
code = code.replace(reg, (_match, decorations) => {
138140
options.decorations ||= []
139141
options.decorations.push(...JSON.parse(decorations))
140142
return ''

docs/blog/v4.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
outline: deep
3+
---
4+
5+
# Shiki v4.0.0
6+
7+
Shiki v4.0.0 drops support for Node.js 18 and remove deprecated APIs.
8+
9+
In Shiki, new features are shipped in minor releases progressively, while the major releases are for cleaning up and removing deprecated APIs.
10+
11+
## Breaking Changes
12+
13+
### Node.js 18 Dropped
14+
15+
Shiki v4 requires **Node.js ≥ 20**. Node.js 18 reached End-of-Life in April 2025 and is no longer supported.
16+
17+
If you are running Node.js 18, please upgrade to Node.js 20 LTS or later before upgrading to Shiki v4.
18+
19+
### Deprecated APIs Removed
20+
21+
#### `CreatedBundledHighlighterOptions` Removed
22+
23+
The `CreatedBundledHighlighterOptions` interface (a typo, with "Created" instead of "Create") has been removed. Use `CreateBundledHighlighterOptions` instead:
24+
25+
```ts
26+
import type { CreatedBundledHighlighterOptions } from 'shiki' // [!code --]
27+
import type { CreateBundledHighlighterOptions } from 'shiki' // [!code ++]
28+
```
29+
30+
#### `createdBundledHighlighter` Removed
31+
32+
The `createdBundledHighlighter` function (a typo, with "created" instead of "create") has been removed. Use `createBundledHighlighter` instead:
33+
34+
```ts
35+
import { createdBundledHighlighter } from 'shiki' // [!code --]
36+
import { createBundledHighlighter } from 'shiki' // [!code ++]
37+
```
38+
39+
#### `theme` Option Removed in `TwoslashFloatingVue`
40+
41+
The singular `theme` option passed to `TwoslashFloatingVue` (from `@shikijs/vitepress-twoslash`) has been removed. Use `themes` instead:
42+
43+
```ts
44+
app.use(TwoslashFloatingVue, {
45+
theme: { /* ... */ }, // [!code --]
46+
themes: { /* ... */ }, // [!code ++]
47+
})
48+
```
49+
50+
#### CSS Class `twoslash-query-presisted` Removed
51+
52+
The misspelled CSS class `twoslash-query-presisted` (note the typo — missing the second `s`) has been removed. Use the correct `twoslash-query-persisted` instead.

docs/guide/decorations.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ Meanwhile, if you want to append decorations within a transformer, you can do th
9494

9595
```ts twoslash
9696
// @twoslash-cache: {"v":1,"hash":"168dce1d7598844e087d729942232d5910c63363a3eb6408ae7bc5c39ff399c8","data":"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"}
97-
/* eslint-disable import/no-duplicates */
9897
import { DecorationItem } from 'shiki'
9998

10099
function doSomethingWithCode(code: string): DecorationItem[] {

docs/guide/migrate.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ outline: deep
66

77
We suggest you to migrate step by step, following each version's migration guide.
88

9+
## Migrate from v3.0
10+
11+
If you are on v3.0, v4.0 only drops support for Node.js 18 and remove deprecated APIs, so you should be able to directly bump to v4.0. Read [Shiki v4.0](/blog/v4) for more details.
12+
913
## Migrate from v2.0
1014

1115
If you are on v2.0 and there is no warning in your usage, you should be able to directly bump to v3.0, read [Shiki v3.0](/blog/v3) for more details.

eslint.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export default antfu(
1515
'unicorn/prefer-node-protocol': 'off',
1616
'import/first': 'off',
1717
'ts/explicit-function-return-type': 'off',
18+
'import/no-duplicates': 'off',
1819
},
1920
},
2021
vue: {

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
"version": "3.23.0",
44
"private": true,
55
"packageManager": "pnpm@10.30.2",
6+
"engines": {
7+
"node": ">=20"
8+
},
69
"scripts": {
710
"lint": "eslint . --cache",
811
"release": "bumpp",
@@ -77,9 +80,9 @@
7780
"tinyexec": "catalog:bundling",
7881
"tm-grammars": "catalog:inlined",
7982
"tm-themes": "catalog:inlined",
83+
"tsdown": "catalog:bundling",
8084
"tsx": "catalog:cli",
8185
"typescript": "catalog:cli",
82-
"unbuild": "catalog:bundling",
8386
"unist-util-visit": "catalog:integrations",
8487
"vite": "catalog:bundling",
8588
"vite-tsconfig-paths": "catalog:bundling",

packages/cli/build.config.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

packages/cli/package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,12 @@
3535
"bin.mjs",
3636
"dist"
3737
],
38+
"engines": {
39+
"node": ">=20"
40+
},
3841
"scripts": {
39-
"build": "unbuild",
40-
"dev": "unbuild --stub",
42+
"build": "tsdown",
43+
"dev": "tsdown --watch",
4144
"prepublishOnly": "nr build"
4245
},
4346
"dependencies": {

packages/cli/tsdown.config.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { defineConfig } from 'tsdown'
2+
import pkg from './package.json' with { type: 'json' }
3+
4+
export default defineConfig({
5+
entry: [
6+
'src/index.ts',
7+
'src/cli.ts',
8+
],
9+
dts: {
10+
compilerOptions: {
11+
paths: {},
12+
},
13+
},
14+
external: ['hast', ...Object.keys(pkg.dependencies)],
15+
})

0 commit comments

Comments
 (0)