zenn-markdown-html 0.2.11-alpha.5 → 0.2.12-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,329 +3,252 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.getHighlighter = getHighlighter;
6
7
  exports.highlight = highlight;
7
- var _prismCore = _interopRequireDefault(require("prismjs/components/prism-core"));
8
- require("prismjs/components/prism-markup");
9
- require("prismjs/components/prism-css");
10
- require("prismjs/components/prism-clike");
11
- require("prismjs/components/prism-regex");
12
- require("prismjs/components/prism-javascript");
13
- require("prismjs/components/prism-abap");
14
- require("prismjs/components/prism-abnf");
15
- require("prismjs/components/prism-actionscript");
16
- require("prismjs/components/prism-ada");
17
- require("prismjs/components/prism-agda");
18
- require("prismjs/components/prism-al");
19
- require("prismjs/components/prism-antlr4");
20
- require("prismjs/components/prism-apacheconf");
21
- require("prismjs/components/prism-sql");
22
- require("prismjs/components/prism-apex");
23
- require("prismjs/components/prism-apl");
24
- require("prismjs/components/prism-applescript");
25
- require("prismjs/components/prism-aql");
26
- require("prismjs/components/prism-c");
27
- require("prismjs/components/prism-cpp");
28
- require("prismjs/components/prism-arduino");
29
- require("prismjs/components/prism-arff");
30
- require("prismjs/components/prism-armasm");
31
- require("prismjs/components/prism-bash");
32
- require("prismjs/components/prism-yaml");
33
- require("prismjs/components/prism-markdown");
34
- require("prismjs/components/prism-arturo");
35
- require("prismjs/components/prism-asciidoc");
36
- require("prismjs/components/prism-csharp");
37
- require("prismjs/components/prism-aspnet");
38
- require("prismjs/components/prism-asm6502");
39
- require("prismjs/components/prism-asmatmel");
40
- require("prismjs/components/prism-autohotkey");
41
- require("prismjs/components/prism-autoit");
42
- require("prismjs/components/prism-avisynth");
43
- require("prismjs/components/prism-avro-idl");
44
- require("prismjs/components/prism-awk");
45
- require("prismjs/components/prism-basic");
46
- require("prismjs/components/prism-batch");
47
- require("prismjs/components/prism-bbcode");
48
- require("prismjs/components/prism-bbj");
49
- require("prismjs/components/prism-bicep");
50
- require("prismjs/components/prism-birb");
51
- require("prismjs/components/prism-bison");
52
- require("prismjs/components/prism-bnf");
53
- require("prismjs/components/prism-bqn");
54
- require("prismjs/components/prism-brainfuck");
55
- require("prismjs/components/prism-brightscript");
56
- require("prismjs/components/prism-bro");
57
- require("prismjs/components/prism-bsl");
58
- require("prismjs/components/prism-cfscript");
59
- require("prismjs/components/prism-chaiscript");
60
- require("prismjs/components/prism-cil");
61
- require("prismjs/components/prism-cilkc");
62
- require("prismjs/components/prism-cilkcpp");
63
- require("prismjs/components/prism-clojure");
64
- require("prismjs/components/prism-cmake");
65
- require("prismjs/components/prism-cobol");
66
- require("prismjs/components/prism-coffeescript");
67
- require("prismjs/components/prism-concurnas");
68
- require("prismjs/components/prism-csp");
69
- require("prismjs/components/prism-cooklang");
70
- require("prismjs/components/prism-coq");
71
- require("prismjs/components/prism-ruby");
72
- require("prismjs/components/prism-crystal");
73
- require("prismjs/components/prism-css-extras");
74
- require("prismjs/components/prism-csv");
75
- require("prismjs/components/prism-cue");
76
- require("prismjs/components/prism-cypher");
77
- require("prismjs/components/prism-d");
78
- require("prismjs/components/prism-dart");
79
- require("prismjs/components/prism-dataweave");
80
- require("prismjs/components/prism-dax");
81
- require("prismjs/components/prism-dhall");
82
- require("prismjs/components/prism-diff");
83
- require("prismjs/components/prism-markup-templating");
84
- require("prismjs/components/prism-django");
85
- require("prismjs/components/prism-dns-zone-file");
86
- require("prismjs/components/prism-docker");
87
- require("prismjs/components/prism-dot");
88
- require("prismjs/components/prism-ebnf");
89
- require("prismjs/components/prism-editorconfig");
90
- require("prismjs/components/prism-eiffel");
91
- require("prismjs/components/prism-ejs");
92
- require("prismjs/components/prism-elixir");
93
- require("prismjs/components/prism-elm");
94
- require("prismjs/components/prism-lua");
95
- require("prismjs/components/prism-etlua");
96
- require("prismjs/components/prism-erb");
97
- require("prismjs/components/prism-erlang");
98
- require("prismjs/components/prism-excel-formula");
99
- require("prismjs/components/prism-fsharp");
100
- require("prismjs/components/prism-factor");
101
- require("prismjs/components/prism-false");
102
- require("prismjs/components/prism-firestore-security-rules");
103
- require("prismjs/components/prism-flow");
104
- require("prismjs/components/prism-fortran");
105
- require("prismjs/components/prism-ftl");
106
- require("prismjs/components/prism-gml");
107
- require("prismjs/components/prism-gap");
108
- require("prismjs/components/prism-gcode");
109
- require("prismjs/components/prism-gdscript");
110
- require("prismjs/components/prism-gedcom");
111
- require("prismjs/components/prism-gettext");
112
- require("prismjs/components/prism-gherkin");
113
- require("prismjs/components/prism-git");
114
- require("prismjs/components/prism-glsl");
115
- require("prismjs/components/prism-gn");
116
- require("prismjs/components/prism-linker-script");
117
- require("prismjs/components/prism-go");
118
- require("prismjs/components/prism-go-module");
119
- require("prismjs/components/prism-gradle");
120
- require("prismjs/components/prism-graphql");
121
- require("prismjs/components/prism-groovy");
122
- require("prismjs/components/prism-less");
123
- require("prismjs/components/prism-scss");
124
- require("prismjs/components/prism-textile");
125
- require("prismjs/components/prism-haml");
126
- require("prismjs/components/prism-handlebars");
127
- require("prismjs/components/prism-haskell");
128
- require("prismjs/components/prism-haxe");
129
- require("prismjs/components/prism-hcl");
130
- require("prismjs/components/prism-hlsl");
131
- require("prismjs/components/prism-hoon");
132
- require("prismjs/components/prism-hpkp");
133
- require("prismjs/components/prism-hsts");
134
- require("prismjs/components/prism-json");
135
- require("prismjs/components/prism-uri");
136
- require("prismjs/components/prism-http");
137
- require("prismjs/components/prism-ichigojam");
138
- require("prismjs/components/prism-icon");
139
- require("prismjs/components/prism-icu-message-format");
140
- require("prismjs/components/prism-idris");
141
- require("prismjs/components/prism-ignore");
142
- require("prismjs/components/prism-inform7");
143
- require("prismjs/components/prism-ini");
144
- require("prismjs/components/prism-io");
145
- require("prismjs/components/prism-j");
146
- require("prismjs/components/prism-java");
147
- require("prismjs/components/prism-php");
148
- require("prismjs/components/prism-javadoclike");
149
- require("prismjs/components/prism-scala");
150
- require("prismjs/components/prism-javadoc");
151
- require("prismjs/components/prism-javastacktrace");
152
- require("prismjs/components/prism-jexl");
153
- require("prismjs/components/prism-jolie");
154
- require("prismjs/components/prism-jq");
155
- require("prismjs/components/prism-js-templates");
156
- require("prismjs/components/prism-typescript");
157
- require("prismjs/components/prism-jsdoc");
158
- require("prismjs/components/prism-n4js");
159
- require("prismjs/components/prism-js-extras");
160
- require("prismjs/components/prism-json5");
161
- require("prismjs/components/prism-jsonp");
162
- require("prismjs/components/prism-jsstacktrace");
163
- require("prismjs/components/prism-julia");
164
- require("prismjs/components/prism-keepalived");
165
- require("prismjs/components/prism-keyman");
166
- require("prismjs/components/prism-kotlin");
167
- require("prismjs/components/prism-kumir");
168
- require("prismjs/components/prism-kusto");
169
- require("prismjs/components/prism-latex");
170
- require("prismjs/components/prism-latte");
171
- require("prismjs/components/prism-scheme");
172
- require("prismjs/components/prism-lilypond");
173
- require("prismjs/components/prism-liquid");
174
- require("prismjs/components/prism-lisp");
175
- require("prismjs/components/prism-livescript");
176
- require("prismjs/components/prism-llvm");
177
- require("prismjs/components/prism-log");
178
- require("prismjs/components/prism-lolcode");
179
- require("prismjs/components/prism-magma");
180
- require("prismjs/components/prism-makefile");
181
- require("prismjs/components/prism-mata");
182
- require("prismjs/components/prism-matlab");
183
- require("prismjs/components/prism-maxscript");
184
- require("prismjs/components/prism-mel");
185
- require("prismjs/components/prism-mermaid");
186
- require("prismjs/components/prism-metafont");
187
- require("prismjs/components/prism-mizar");
188
- require("prismjs/components/prism-mongodb");
189
- require("prismjs/components/prism-monkey");
190
- require("prismjs/components/prism-moonscript");
191
- require("prismjs/components/prism-n1ql");
192
- require("prismjs/components/prism-nand2tetris-hdl");
193
- require("prismjs/components/prism-naniscript");
194
- require("prismjs/components/prism-nasm");
195
- require("prismjs/components/prism-neon");
196
- require("prismjs/components/prism-nevod");
197
- require("prismjs/components/prism-nginx");
198
- require("prismjs/components/prism-nim");
199
- require("prismjs/components/prism-nix");
200
- require("prismjs/components/prism-nsis");
201
- require("prismjs/components/prism-objectivec");
202
- require("prismjs/components/prism-ocaml");
203
- require("prismjs/components/prism-odin");
204
- require("prismjs/components/prism-opencl");
205
- require("prismjs/components/prism-openqasm");
206
- require("prismjs/components/prism-oz");
207
- require("prismjs/components/prism-parigp");
208
- require("prismjs/components/prism-parser");
209
- require("prismjs/components/prism-pascal");
210
- require("prismjs/components/prism-pascaligo");
211
- require("prismjs/components/prism-psl");
212
- require("prismjs/components/prism-pcaxis");
213
- require("prismjs/components/prism-peoplecode");
214
- require("prismjs/components/prism-perl");
215
- require("prismjs/components/prism-phpdoc");
216
- require("prismjs/components/prism-php-extras");
217
- require("prismjs/components/prism-plant-uml");
218
- require("prismjs/components/prism-plsql");
219
- require("prismjs/components/prism-powerquery");
220
- require("prismjs/components/prism-powershell");
221
- require("prismjs/components/prism-processing");
222
- require("prismjs/components/prism-prolog");
223
- require("prismjs/components/prism-promql");
224
- require("prismjs/components/prism-properties");
225
- require("prismjs/components/prism-protobuf");
226
- require("prismjs/components/prism-stylus");
227
- require("prismjs/components/prism-twig");
228
- require("prismjs/components/prism-pug");
229
- require("prismjs/components/prism-puppet");
230
- require("prismjs/components/prism-pure");
231
- require("prismjs/components/prism-purebasic");
232
- require("prismjs/components/prism-purescript");
233
- require("prismjs/components/prism-python");
234
- require("prismjs/components/prism-qsharp");
235
- require("prismjs/components/prism-q");
236
- require("prismjs/components/prism-qml");
237
- require("prismjs/components/prism-qore");
238
- require("prismjs/components/prism-r");
239
- require("prismjs/components/prism-racket");
240
- require("prismjs/components/prism-cshtml");
241
- require("prismjs/components/prism-jsx");
242
- require("prismjs/components/prism-tsx");
243
- require("prismjs/components/prism-reason");
244
- require("prismjs/components/prism-rego");
245
- require("prismjs/components/prism-renpy");
246
- require("prismjs/components/prism-rescript");
247
- require("prismjs/components/prism-rest");
248
- require("prismjs/components/prism-rip");
249
- require("prismjs/components/prism-roboconf");
250
- require("prismjs/components/prism-robotframework");
251
- require("prismjs/components/prism-rust");
252
- require("prismjs/components/prism-sas");
253
- require("prismjs/components/prism-sass");
254
- require("prismjs/components/prism-shell-session");
255
- require("prismjs/components/prism-smali");
256
- require("prismjs/components/prism-smalltalk");
257
- require("prismjs/components/prism-smarty");
258
- require("prismjs/components/prism-sml");
259
- require("prismjs/components/prism-solidity");
260
- require("prismjs/components/prism-solution-file");
261
- require("prismjs/components/prism-soy");
262
- require("prismjs/components/prism-turtle");
263
- require("prismjs/components/prism-sparql");
264
- require("prismjs/components/prism-splunk-spl");
265
- require("prismjs/components/prism-sqf");
266
- require("prismjs/components/prism-squirrel");
267
- require("prismjs/components/prism-stan");
268
- require("prismjs/components/prism-stata");
269
- require("prismjs/components/prism-iecst");
270
- require("prismjs/components/prism-supercollider");
271
- require("prismjs/components/prism-swift");
272
- require("prismjs/components/prism-systemd");
273
- require("prismjs/components/prism-t4-templating");
274
- require("prismjs/components/prism-t4-cs");
275
- require("prismjs/components/prism-vbnet");
276
- require("prismjs/components/prism-t4-vb");
277
- require("prismjs/components/prism-tap");
278
- require("prismjs/components/prism-tcl");
279
- require("prismjs/components/prism-tt2");
280
- require("prismjs/components/prism-toml");
281
- require("prismjs/components/prism-tremor");
282
- require("prismjs/components/prism-typoscript");
283
- require("prismjs/components/prism-unrealscript");
284
- require("prismjs/components/prism-uorazor");
285
- require("prismjs/components/prism-v");
286
- require("prismjs/components/prism-vala");
287
- require("prismjs/components/prism-velocity");
288
- require("prismjs/components/prism-verilog");
289
- require("prismjs/components/prism-vhdl");
290
- require("prismjs/components/prism-vim");
291
- require("prismjs/components/prism-visual-basic");
292
- require("prismjs/components/prism-warpscript");
293
- require("prismjs/components/prism-wasm");
294
- require("prismjs/components/prism-web-idl");
295
- require("prismjs/components/prism-wgsl");
296
- require("prismjs/components/prism-wiki");
297
- require("prismjs/components/prism-wolfram");
298
- require("prismjs/components/prism-wren");
299
- require("prismjs/components/prism-xeora");
300
- require("prismjs/components/prism-xml-doc");
301
- require("prismjs/components/prism-xojo");
302
- require("prismjs/components/prism-xquery");
303
- require("prismjs/components/prism-yang");
304
- require("prismjs/components/prism-zig");
305
- var _markdownIt = require("./markdown-it");
306
- var _prismDiffHighlight = require("../prism-plugins/prism-diff-highlight");
307
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
308
- // diffプラグインを有効化
309
- (0, _prismDiffHighlight.enableDiffHighlight)();
310
- function highlightContent({
311
- text,
312
- prismGrammar,
313
- langName,
314
- hasDiff
315
- }) {
316
- if (prismGrammar && langName) {
317
- if (hasDiff) return _prismCore.default.highlight(text, _prismCore.default.languages.diff, `diff-${langName}`);
318
- return _prismCore.default.highlight(text, prismGrammar, langName);
8
+ var _shiki = require("shiki");
9
+ /**
10
+ * Shiki によるシンタックスハイライト処理
11
+ *
12
+ * このモジュールは Phase 2(applyHighlighting)から呼び出され、
13
+ * 個々のコードブロックをハイライトする役割を持つ。
14
+ *
15
+ * ## 特徴
16
+ *
17
+ * - シングルトン: ハイライターインスタンスは1つだけ作成され再利用される
18
+ * - 遅延ロード: 言語定義は初回使用時にのみロードされる
19
+ * - diff サポート: ベース言語のハイライト + diff 背景色の両方を適用
20
+ * - transformers: Shiki の transformers API で AST レベルの変換を実行
21
+ *
22
+ * ## 関連ファイル
23
+ *
24
+ * - `md-renderer-fence.ts`: Phase 1(収集)と Phase 3(置換)
25
+ * - `index.ts`: 全体の統合
26
+ */
27
+
28
+ /**
29
+ * Shiki ハイライターのシングルトンインスタンス
30
+ * getHighlighter() で初期化され、以降は再利用される
31
+ */
32
+ let highlighterInstance = null;
33
+ const SHIKI_THEME = 'github-dark';
34
+
35
+ /**
36
+ * Shiki ハイライターを初期化する
37
+ * 最初は最低限のセットで初期化し、必要に応じて言語をロードする
38
+ */
39
+ async function getHighlighter() {
40
+ if (highlighterInstance) {
41
+ return highlighterInstance;
42
+ }
43
+
44
+ // 最初は空の言語セットで初期化(高速)
45
+ highlighterInstance = await (0, _shiki.createHighlighter)({
46
+ themes: [SHIKI_THEME],
47
+ langs: []
48
+ });
49
+ return highlighterInstance;
50
+ }
51
+
52
+ /**
53
+ * 言語がサポートされているかチェックし、必要に応じてロードする
54
+ */
55
+ async function ensureLanguageLoaded(highlighter, langName) {
56
+ // 既にロード済みかチェック
57
+ const loadedLangs = highlighter.getLoadedLanguages();
58
+ if (loadedLangs.includes(langName)) {
59
+ return true;
60
+ }
61
+
62
+ // bundledLanguages に含まれているかチェック
63
+ if (langName in _shiki.bundledLanguages) {
64
+ await highlighter.loadLanguage(langName);
65
+ return true;
66
+ }
67
+ return false;
68
+ }
69
+
70
+ /**
71
+ * ハイライトオプション
72
+ */
73
+
74
+ /**
75
+ * diff プレフィックスの定義
76
+ * Prism.js の diff-highlight プラグインと互換性を持たせる
77
+ */
78
+ const DIFF_PREFIXES = {
79
+ // 削除行
80
+ '-': 'remove',
81
+ // deleted-sign
82
+ '<': 'remove',
83
+ // deleted-arrow
84
+ // 挿入行
85
+ '+': 'add',
86
+ // inserted-sign
87
+ '>': 'add' // inserted-arrow
88
+ };
89
+
90
+ /** コンテキスト行(変更なし)のプレフィックス */
91
+ const DIFF_CONTEXT_PREFIX = ' ';
92
+
93
+ /**
94
+ * diff 行スタイルを適用する transformer を作成
95
+ * 行頭のプレフィックス (+, -, <, >, スペース) を検出して処理
96
+ * - +, -, <, >: 挿入/削除のクラスを追加し、プレフィックスをラップ
97
+ * - スペース: プレフィックスのみラップ(コンテキスト行)
98
+ */
99
+ function createDiffTransformer() {
100
+ return {
101
+ line(node, lineNumber) {
102
+ // ソースコードの該当行を取得
103
+ const lines = this.source.split('\n');
104
+ const lineText = lines[lineNumber - 1] ?? '';
105
+ const firstChar = lineText.charAt(0);
106
+ if (firstChar in DIFF_PREFIXES) {
107
+ // 追加/削除行
108
+ this.addClassToHast(node, 'diff');
109
+ this.addClassToHast(node, DIFF_PREFIXES[firstChar]);
110
+ wrapDiffPrefix(node, firstChar);
111
+ } else if (firstChar === DIFF_CONTEXT_PREFIX) {
112
+ // コンテキスト行(先頭スペース)
113
+ wrapDiffPrefix(node, firstChar);
114
+ }
115
+ }
116
+ };
117
+ }
118
+
119
+ /**
120
+ * 行の最初の文字(diff プレフィックス)を別の span 要素にラップする
121
+ * これにより CSS で user-select: none を適用可能になる
122
+ */
123
+ function wrapDiffPrefix(
124
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
125
+ lineNode, prefix) {
126
+ const line = lineNode;
127
+ if (!line.children || line.children.length === 0) return;
128
+ const firstChild = line.children[0];
129
+
130
+ // 最初の子要素がテキストノードの場合(実際には発生しないはずだが念の為)
131
+ if (firstChild.type === 'text' && firstChild.value.startsWith(prefix)) {
132
+ // プレフィックスを分離
133
+ const prefixSpan = {
134
+ type: 'element',
135
+ tagName: 'span',
136
+ properties: {
137
+ class: 'diff-prefix'
138
+ },
139
+ children: [{
140
+ type: 'text',
141
+ value: prefix
142
+ }]
143
+ };
144
+ firstChild.value = firstChild.value.slice(1);
145
+
146
+ // 空になった場合は削除
147
+ if (firstChild.value === '') {
148
+ line.children.shift();
149
+ }
150
+
151
+ // プレフィックス span を先頭に挿入
152
+ line.children.unshift(prefixSpan);
153
+ return;
154
+ }
155
+
156
+ // 最初の子要素が element(span など)の場合
157
+ if (firstChild.type === 'element' && firstChild.children && firstChild.children.length > 0) {
158
+ const innerFirst = firstChild.children[0];
159
+ if (innerFirst.type === 'text' && innerFirst.value.startsWith(prefix)) {
160
+ // プレフィックスを分離
161
+ const prefixSpan = {
162
+ type: 'element',
163
+ tagName: 'span',
164
+ properties: {
165
+ class: 'diff-prefix'
166
+ },
167
+ children: [{
168
+ type: 'text',
169
+ value: prefix
170
+ }]
171
+ };
172
+ innerFirst.value = innerFirst.value.slice(1);
173
+
174
+ // 空になった場合は削除
175
+ if (innerFirst.value === '') {
176
+ firstChild.children.shift();
177
+ }
178
+
179
+ // プレフィックス span を先頭に挿入
180
+ line.children.unshift(prefixSpan);
181
+ }
319
182
  }
320
- if (hasDiff) return _prismCore.default.highlight(text, _prismCore.default.languages.diff, 'diff');
321
- return _markdownIt.md.utils.escapeHtml(text);
322
183
  }
323
- function highlight(text, langName, hasDiff) {
324
- const prismGrammar = _prismCore.default.languages[langName];
325
- return highlightContent({
326
- text,
327
- prismGrammar,
328
- langName,
329
- hasDiff
184
+
185
+ /**
186
+ * pre/code タグにクラスと属性を追加する transformer を作成
187
+ */
188
+ function createClassTransformer(options) {
189
+ const {
190
+ className,
191
+ line
192
+ } = options;
193
+ return {
194
+ pre(node) {
195
+ if (className) {
196
+ this.addClassToHast(node, className);
197
+ }
198
+ },
199
+ code(node) {
200
+ this.addClassToHast(node, 'code-line');
201
+ if (className) {
202
+ this.addClassToHast(node, className);
203
+ }
204
+ if (line !== undefined) {
205
+ node.properties['data-line'] = line;
206
+ }
207
+ }
208
+ };
209
+ }
210
+
211
+ /**
212
+ * [Phase 2 の実処理] コードをハイライトする
213
+ *
214
+ * applyHighlighting() から各コードブロックに対して呼び出される。
215
+ * 言語が未ロードの場合は自動的にロードする(遅延ロード)。
216
+ * Shiki の transformers API を使用して AST レベルで変換を行う。
217
+ *
218
+ * @param text - ハイライト対象のコード文字列
219
+ * @param langName - 言語名(例: "javascript", "python")
220
+ * @param options - ハイライトオプション
221
+ * @returns ハイライト済み HTML(常に <pre><code> 構造)
222
+ */
223
+ async function highlight(text, langName, options) {
224
+ const {
225
+ hasDiff,
226
+ className,
227
+ line
228
+ } = options;
229
+ const highlighter = await getHighlighter();
230
+
231
+ // 言語がサポートされているか確認し、必要に応じてロード
232
+ const isSupported = langName ? await ensureLanguageLoaded(highlighter, langName) : false;
233
+
234
+ // サポートされていない言語は text(プレーンテキスト)として処理
235
+ // ref: https://shiki.style/languages#plain-text
236
+ const lang = isSupported ? langName : 'text';
237
+ if (!isSupported) {
238
+ await ensureLanguageLoaded(highlighter, 'text');
239
+ }
240
+
241
+ // transformers を構築
242
+ const transformers = [createClassTransformer({
243
+ className,
244
+ line
245
+ })];
246
+ if (hasDiff) {
247
+ transformers.push(createDiffTransformer());
248
+ }
249
+ return highlighter.codeToHtml(text, {
250
+ lang,
251
+ theme: SHIKI_THEME,
252
+ transformers
330
253
  });
331
254
  }