@slidev/cli 51.4.0 → 51.6.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.
package/README.md CHANGED
@@ -36,7 +36,7 @@ Presentation <b>slide</b>s for <b>dev</b>elopers 🧑‍💻👩‍💻👨‍
36
36
 
37
37
  ## Features
38
38
 
39
- - 📝 [**Markdown-based**](https://sli.dev/guide/syntax) - foucus on content and use your favorite editor
39
+ - 📝 [**Markdown-based**](https://sli.dev/guide/syntax) - focus on content and use your favorite editor
40
40
  - 🧑‍💻 [**Developer Friendly**](https://sli.dev/guide/syntax#code-blocks) - built-in code highlighting, live coding, etc.
41
41
  - 🎨 [**Themable**](https://sli.dev/resources/theme-gallery) - theme can be shared and used with npm packages
42
42
  - 🌈 [**Stylish**](https://sli.dev/guide/syntax#embedded-styles) - on-demand utilities via [UnoCSS](https://github.com/unocss/unocss).
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveViteConfigs
3
- } from "./chunk-IKMQKKTG.js";
3
+ } from "./chunk-Y2DHOFI5.js";
4
4
  import "./chunk-TJFRPB4N.js";
5
5
 
6
6
  // node/commands/build.ts
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveViteConfigs
3
- } from "./chunk-IKMQKKTG.js";
3
+ } from "./chunk-Y2DHOFI5.js";
4
4
 
5
5
  // node/commands/serve.ts
6
6
  import { join } from "node:path";
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-TJFRPB4N.js";
10
10
 
11
11
  // package.json
12
- var version = "51.4.0";
12
+ var version = "51.6.0";
13
13
 
14
14
  // node/utils.ts
15
15
  import { fileURLToPath } from "node:url";
@@ -51,8 +51,8 @@ function updateFrontmatterPatch(source, frontmatter) {
51
51
  const valueNode = doc.createNode(value);
52
52
  let found = false;
53
53
  YAML.visit(doc.contents, {
54
- Pair(_key, node, path4) {
55
- if (path4.length === 1 && YAML.isScalar(node.key) && node.key.value === key) {
54
+ Pair(_key, node, path5) {
55
+ if (path5.length === 1 && YAML.isScalar(node.key) && node.key.value === key) {
56
56
  node.value = valueNode;
57
57
  found = true;
58
58
  return YAML.visit.BREAK;
@@ -99,10 +99,10 @@ var officialThemes = {
99
99
  };
100
100
  var resolveTheme = createResolver("theme", officialThemes);
101
101
  async function getThemeMeta(name, root) {
102
- const path4 = join(root, "package.json");
103
- if (!existsSync(path4))
102
+ const path5 = join(root, "package.json");
103
+ if (!existsSync(path5))
104
104
  return {};
105
- const { slidev = {}, engines = {} } = JSON.parse(await fs.readFile(path4, "utf-8"));
105
+ const { slidev = {}, engines = {} } = JSON.parse(await fs.readFile(path5, "utf-8"));
106
106
  if (engines.slidev && !satisfies(version, engines.slidev, { includePrerelease: true }))
107
107
  throw new Error(`[slidev] theme "${name}" requires Slidev version range "${engines.slidev}" but found "${version}"`);
108
108
  return slidev;
@@ -112,7 +112,7 @@ async function getThemeMeta(name, root) {
112
112
  import * as parser from "@slidev/parser/fs";
113
113
 
114
114
  // node/options.ts
115
- import path3 from "node:path";
115
+ import path4 from "node:path";
116
116
  import { objectMap as objectMap2, uniq as uniq5 } from "@antfu/utils";
117
117
  import Debug from "debug";
118
118
  import fg4 from "fast-glob";
@@ -145,14 +145,15 @@ async function resolveAddons(addonsInConfig) {
145
145
  }
146
146
 
147
147
  // node/setups/indexHtml.ts
148
- import { existsSync as existsSync12, readFileSync as readFileSync2 } from "node:fs";
148
+ import { existsSync as existsSync13, readFileSync as readFileSync2 } from "node:fs";
149
149
  import { join as join13 } from "node:path";
150
150
  import { slash as slash4 } from "@antfu/utils";
151
151
  import { white, yellow as yellow2 } from "ansis";
152
152
  import { escapeHtml } from "markdown-it/lib/common/utils.mjs";
153
+ import { createHead, extractUnheadInputFromHtml, transformHtmlTemplate } from "unhead/server";
153
154
 
154
155
  // node/commands/shared.ts
155
- import { existsSync as existsSync11 } from "node:fs";
156
+ import { existsSync as existsSync12 } from "node:fs";
156
157
  import { join as join12 } from "node:path";
157
158
  import MarkdownIt2 from "markdown-it";
158
159
  import { loadConfigFromFile, mergeConfig as mergeConfig2 } from "vite";
@@ -747,7 +748,7 @@ var templateGlobalLayers = {
747
748
  let n = 0;
748
749
  function getComponent(names) {
749
750
  const components = roots.flatMap((root) => names.map((name) => join4(root, name))).filter((i) => existsSync2(i));
750
- imports.push(components.map((path4, i) => `import __n${n}_${i} from '${toAtFS(path4)}'`).join("\n"));
751
+ imports.push(components.map((path5, i) => `import __n${n}_${i} from '${toAtFS(path5)}'`).join("\n"));
751
752
  const render = components.map((_, i) => `h(__n${n}_${i})`).join(",");
752
753
  n++;
753
754
  return `{ render: () => [${render}] }`;
@@ -894,12 +895,12 @@ function createSetupTemplate(name) {
894
895
  id: `/@slidev/setups/${name}`,
895
896
  getContent({ roots }) {
896
897
  const setups = roots.flatMap((i) => {
897
- const path4 = join7(i, "setup", name);
898
- return [".ts", ".mts", ".js", ".mjs"].map((ext) => path4 + ext);
898
+ const path5 = join7(i, "setup", name);
899
+ return [".ts", ".mts", ".js", ".mjs"].map((ext) => path5 + ext);
899
900
  }).filter((i) => existsSync4(i));
900
901
  const imports = [];
901
- setups.forEach((path4, idx) => {
902
- imports.push(`import __n${idx} from '${toAtFS(path4)}'`);
902
+ setups.forEach((path5, idx) => {
903
+ imports.push(`import __n${idx} from '${toAtFS(path5)}'`);
903
904
  });
904
905
  imports.push(`export default [${setups.map((_, idx) => `__n${idx}`).join(",")}]`);
905
906
  return imports.join("\n");
@@ -1698,9 +1699,9 @@ import { deepMergeWithArray } from "@antfu/utils";
1698
1699
  async function loadSetups(roots, filename, args, extraLoader) {
1699
1700
  const returns = [];
1700
1701
  for (const root of roots) {
1701
- const path4 = resolve4(root, "setup", filename);
1702
- if (existsSync6(path4)) {
1703
- const { default: setup } = await loadModule(path4);
1702
+ const path5 = resolve4(root, "setup", filename);
1703
+ if (existsSync6(path5)) {
1704
+ const { default: setup } = await loadModule(path5);
1704
1705
  const ret = await setup(...args);
1705
1706
  if (ret)
1706
1707
  returns.push(ret);
@@ -2229,11 +2230,11 @@ async function loadDrawings(options) {
2229
2230
  suppressErrors: true
2230
2231
  });
2231
2232
  const obj = {};
2232
- await Promise.all(files.map(async (path4) => {
2233
- const num = +basename(path4, ".svg");
2233
+ await Promise.all(files.map(async (path5) => {
2234
+ const num = +basename(path5, ".svg");
2234
2235
  if (Number.isNaN(num))
2235
2236
  return;
2236
- const content = await fs6.readFile(path4, "utf8");
2237
+ const content = await fs6.readFile(path5, "utf8");
2237
2238
  const lines = content.split(/\n/g);
2238
2239
  obj[num.toString()] = lines.slice(1, -1).join("\n");
2239
2240
  }));
@@ -2377,6 +2378,21 @@ async function createUnocssPlugin(options, pluginOptions) {
2377
2378
  });
2378
2379
  }
2379
2380
 
2381
+ // node/vite/userPlugins.ts
2382
+ import { existsSync as existsSync11 } from "node:fs";
2383
+ import path3 from "node:path";
2384
+ async function createUserVitePlugins(options) {
2385
+ const createPluginTasks = options.roots.map(async (root) => {
2386
+ const modulePath = path3.join(root, "setup", "vite-plugins.ts");
2387
+ if (existsSync11(modulePath)) {
2388
+ const module = await loadModule(modulePath);
2389
+ return module.default(options);
2390
+ }
2391
+ return [];
2392
+ });
2393
+ return (await Promise.all(createPluginTasks)).flatMap((p) => p);
2394
+ }
2395
+
2380
2396
  // node/vite/vue.ts
2381
2397
  import Vue from "@vitejs/plugin-vue";
2382
2398
  import VueJsx from "@vitejs/plugin-vue-jsx";
@@ -2455,7 +2471,8 @@ function ViteSlidevPlugin(options, pluginOptions = {}, serverOptions = {}) {
2455
2471
  createVueCompilerFlagsPlugin(options),
2456
2472
  createUnocssPlugin(options, pluginOptions),
2457
2473
  createStaticCopyPlugin(options, pluginOptions),
2458
- createInspectPlugin(options, pluginOptions)
2474
+ createInspectPlugin(options, pluginOptions),
2475
+ createUserVitePlugins(options)
2459
2476
  ]);
2460
2477
  }
2461
2478
 
@@ -2475,7 +2492,7 @@ async function resolveViteConfigs(options, baseConfig, overrideConfigs, command,
2475
2492
  };
2476
2493
  const files = options.roots.map((i) => join12(i, "vite.config.ts"));
2477
2494
  for (const file of files) {
2478
- if (!existsSync11(file))
2495
+ if (!existsSync12(file))
2479
2496
  continue;
2480
2497
  const viteConfig = await loadConfigFromFile(configEnv, file);
2481
2498
  if (!viteConfig?.config)
@@ -2499,51 +2516,74 @@ async function resolveViteConfigs(options, baseConfig, overrideConfigs, command,
2499
2516
  function toAttrValue(unsafe) {
2500
2517
  return JSON.stringify(escapeHtml(String(unsafe)));
2501
2518
  }
2502
- function setupIndexHtml({ mode, entry, clientRoot, userRoot, roots, data, base }) {
2519
+ async function setupIndexHtml({ mode, entry, clientRoot, userRoot, roots, data, base }) {
2503
2520
  let main = readFileSync2(join13(clientRoot, "index.html"), "utf-8");
2504
- let head = "";
2505
2521
  let body = "";
2506
- const { info, author, keywords } = data.headmatter;
2507
- head += [
2508
- `<meta name="slidev:version" content="${version}">`,
2509
- mode === "dev" && `<meta charset="slidev:entry" content="${slash4(entry)}">`,
2510
- `<link rel="icon" href="${data.config.favicon}">`,
2511
- `<title>${getSlideTitle(data)}</title>`,
2512
- info && `<meta name="description" content=${toAttrValue(info)}>`,
2513
- author && `<meta name="author" content=${toAttrValue(author)}>`,
2514
- keywords && `<meta name="keywords" content=${toAttrValue(Array.isArray(keywords) ? keywords.join(", ") : keywords)}>`
2515
- ].filter(Boolean).join("\n");
2522
+ const inputs = [];
2516
2523
  for (const root of roots) {
2517
- const path4 = join13(root, "index.html");
2518
- if (!existsSync12(path4))
2524
+ const path5 = join13(root, "index.html");
2525
+ if (!existsSync13(path5))
2519
2526
  continue;
2520
- const index = readFileSync2(path4, "utf-8");
2521
- if (root === userRoot && index.includes("<!DOCTYPE")) {
2522
- console.error(yellow2(`[Slidev] Ignored provided index.html with doctype declaration. (${white(path4)})`));
2527
+ const html2 = readFileSync2(path5, "utf-8");
2528
+ if (root === userRoot && html2.includes("<!DOCTYPE")) {
2529
+ console.error(yellow2(`[Slidev] Ignored provided index.html with doctype declaration. (${white(path5)})`));
2523
2530
  console.error(yellow2("This file may be generated by Slidev, please remove it from your project."));
2524
2531
  continue;
2525
2532
  }
2526
- head += `
2527
- ${(index.match(/<head>([\s\S]*?)<\/head>/i)?.[1] || "").trim()}`;
2533
+ inputs.push(extractUnheadInputFromHtml(html2).input);
2528
2534
  body += `
2529
- ${(index.match(/<body>([\s\S]*?)<\/body>/i)?.[1] || "").trim()}`;
2535
+ ${(html2.match(/<body>([\s\S]*?)<\/body>/i)?.[1] || "").trim()}`;
2530
2536
  }
2531
- if (data.features.tweet)
2537
+ if (data.features.tweet) {
2532
2538
  body += '\n<script async src="https://platform.twitter.com/widgets.js"></script>';
2539
+ }
2540
+ const webFontsLink = [];
2533
2541
  if (data.config.fonts.webfonts.length) {
2534
2542
  const { provider } = data.config.fonts;
2535
- if (provider === "google")
2536
- head += `
2537
- <link rel="stylesheet" href="${generateGoogleFontsUrl(data.config.fonts)}" type="text/css">`;
2538
- else if (provider === "coollabs")
2539
- head += `
2540
- <link rel="stylesheet" href="${generateCoollabsFontsUrl(data.config.fonts)}" type="text/css">`;
2543
+ if (provider === "google") {
2544
+ webFontsLink.push({ rel: "stylesheet", href: generateGoogleFontsUrl(data.config.fonts), type: "text/css" });
2545
+ } else if (provider === "coollabs") {
2546
+ webFontsLink.push({ rel: "stylesheet", href: generateCoollabsFontsUrl(data.config.fonts), type: "text/css" });
2547
+ }
2541
2548
  }
2542
- if (data.headmatter.lang)
2543
- main = main.replace('<html lang="en">', `<html lang="${data.headmatter.lang}">`);
2549
+ const { info, author, keywords } = data.headmatter;
2550
+ const seoMeta = data.headmatter.seoMeta ?? {};
2551
+ const title = getSlideTitle(data);
2552
+ const description = info ? toAttrValue(info) : null;
2553
+ const unhead = createHead({
2554
+ init: [
2555
+ {
2556
+ htmlAttrs: data.headmatter.lang ? { lang: data.headmatter.lang } : void 0,
2557
+ title,
2558
+ link: [
2559
+ data.config.favicon ? { rel: "icon", href: data.config.favicon } : null,
2560
+ ...webFontsLink
2561
+ ].filter((x) => x),
2562
+ meta: [
2563
+ { property: "slidev:version", content: version },
2564
+ { charset: "slidev:entry", content: mode === "dev" && slash4(entry) },
2565
+ { name: "description", content: description },
2566
+ { name: "author", content: author ? toAttrValue(author) : null },
2567
+ { name: "keywords", content: keywords ? toAttrValue(Array.isArray(keywords) ? keywords.join(", ") : keywords) : null },
2568
+ { property: "og:title", content: seoMeta.ogTitle || title },
2569
+ { property: "og:description", content: seoMeta.ogDescription || description },
2570
+ { property: "og:image", content: seoMeta.ogImage },
2571
+ { property: "og:url", content: seoMeta.ogUrl },
2572
+ { property: "twitter:card", content: seoMeta.twitterCard },
2573
+ { property: "twitter:site", content: seoMeta.twitterSite },
2574
+ { property: "twitter:title", content: seoMeta.twitterTitle },
2575
+ { property: "twitter:description", content: seoMeta.twitterDescription },
2576
+ { property: "twitter:image", content: seoMeta.twitterImage },
2577
+ { property: "twitter:url", content: seoMeta.twitterUrl }
2578
+ ].filter((x) => x.content)
2579
+ },
2580
+ ...inputs
2581
+ ]
2582
+ });
2544
2583
  const baseInDev = mode === "dev" && base ? base.slice(0, -1) : "";
2545
- main = main.replace("__ENTRY__", baseInDev + toAtFS(join13(clientRoot, "main.ts"))).replace("<!-- head -->", head).replace("<!-- body -->", body);
2546
- return main;
2584
+ main = main.replace("__ENTRY__", baseInDev + toAtFS(join13(clientRoot, "main.ts"))).replace("<!-- body -->", body);
2585
+ const html = await transformHtmlTemplate(unhead, main);
2586
+ return html;
2547
2587
  }
2548
2588
 
2549
2589
  // node/setups/katex.ts
@@ -2569,9 +2609,9 @@ async function setupShiki(roots) {
2569
2609
  "shiki.ts",
2570
2610
  [{
2571
2611
  /** @deprecated */
2572
- async loadTheme(path4) {
2612
+ async loadTheme(path5) {
2573
2613
  console.warn("[slidev] `loadTheme` in `setup/shiki.ts` is deprecated. Pass directly the theme name it's supported by Shiki. For custom themes, load it manually via `JSON.parse(fs.readFileSync(path, 'utf-8'))` and pass the raw JSON object instead.");
2574
- return JSON.parse(await fs8.readFile(path4, "utf-8"));
2614
+ return JSON.parse(await fs8.readFile(path5, "utf-8"));
2575
2615
  }
2576
2616
  }]
2577
2617
  );
@@ -2659,7 +2699,7 @@ async function createDataUtils(resolved) {
2659
2699
  return {
2660
2700
  ...await setupShiki(resolved.roots),
2661
2701
  katexOptions: await setupKatex(resolved.roots),
2662
- indexHtml: setupIndexHtml(resolved),
2702
+ indexHtml: await setupIndexHtml(resolved),
2663
2703
  define: getDefine(resolved),
2664
2704
  iconsResolvePath: [resolved.clientRoot, ...resolved.roots].reverse(),
2665
2705
  isMonacoTypesIgnored: (pkg) => monacoTypesIgnorePackagesMatches.some((i) => i.test(pkg)),
@@ -2675,7 +2715,7 @@ async function createDataUtils(resolved) {
2675
2715
  suppressErrors: true
2676
2716
  });
2677
2717
  for (const layoutPath of layoutPaths) {
2678
- const layoutName = path3.basename(layoutPath).replace(/\.\w+$/, "");
2718
+ const layoutName = path4.basename(layoutPath).replace(/\.\w+$/, "");
2679
2719
  layouts[layoutName] = layoutPath;
2680
2720
  }
2681
2721
  }
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-QPS5SZU6.js";
3
+ } from "./chunk-BCA62OS7.js";
4
4
  import {
5
5
  getThemeMeta,
6
6
  loadSetups,
@@ -10,7 +10,7 @@ import {
10
10
  resolveTheme,
11
11
  updateFrontmatterPatch,
12
12
  version
13
- } from "./chunk-IKMQKKTG.js";
13
+ } from "./chunk-Y2DHOFI5.js";
14
14
  import {
15
15
  getRoots,
16
16
  isInstalledGlobally,
@@ -55,7 +55,8 @@ var CONFIG_RESTART_FIELDS = [
55
55
  "css",
56
56
  "mdc",
57
57
  "editor",
58
- "theme"
58
+ "theme",
59
+ "seoMeta"
59
60
  ];
60
61
  var FILES_CREATE_RESTART = [
61
62
  "global-bottom.vue",
@@ -338,7 +339,7 @@ cli.command(
338
339
  }).strict().help(),
339
340
  async (args) => {
340
341
  const { entry, theme, base, download, out, inspect } = args;
341
- const { build } = await import("./build-BALTUPSD.js");
342
+ const { build } = await import("./build-Z7GTSSXD.js");
342
343
  for (const entryFile of entry) {
343
344
  const options = await resolveOptions({ entry: entryFile, theme, inspect, download, base }, "build");
344
345
  printInfo(options);
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-QPS5SZU6.js";
3
+ } from "./chunk-BCA62OS7.js";
4
4
  import {
5
5
  ViteSlidevPlugin,
6
6
  createDataUtils,
7
7
  parser,
8
8
  resolveOptions
9
- } from "./chunk-IKMQKKTG.js";
9
+ } from "./chunk-Y2DHOFI5.js";
10
10
  import "./chunk-TJFRPB4N.js";
11
11
  export {
12
12
  ViteSlidevPlugin,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@slidev/cli",
3
3
  "type": "module",
4
- "version": "51.4.0",
4
+ "version": "51.6.0",
5
5
  "description": "Presentation slides for developers",
6
6
  "author": "antfu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -42,19 +42,19 @@
42
42
  }
43
43
  },
44
44
  "dependencies": {
45
- "@antfu/ni": "^24.1.0",
46
- "@antfu/utils": "^9.1.0",
45
+ "@antfu/ni": "^24.3.0",
46
+ "@antfu/utils": "^9.2.0",
47
47
  "@iconify-json/carbon": "^1.2.8",
48
48
  "@iconify-json/ph": "^1.2.2",
49
49
  "@iconify-json/svg-spinners": "^1.2.2",
50
50
  "@lillallol/outline-pdf": "^4.0.0",
51
- "@shikijs/markdown-it": "^3.1.0",
52
- "@shikijs/twoslash": "^3.1.0",
53
- "@shikijs/vitepress-twoslash": "^3.1.0",
51
+ "@shikijs/markdown-it": "^3.3.0",
52
+ "@shikijs/twoslash": "^3.3.0",
53
+ "@shikijs/vitepress-twoslash": "^3.3.0",
54
54
  "@unocss/extractor-mdc": "^66.0.0",
55
55
  "@unocss/reset": "^66.0.0",
56
- "@vitejs/plugin-vue": "^5.2.1",
57
- "@vitejs/plugin-vue-jsx": "^4.1.1",
56
+ "@vitejs/plugin-vue": "^5.2.3",
57
+ "@vitejs/plugin-vue-jsx": "^4.1.2",
58
58
  "ansis": "^3.17.0",
59
59
  "chokidar": "^4.0.3",
60
60
  "cli-progress": "^3.12.0",
@@ -67,7 +67,7 @@
67
67
  "htmlparser2": "^10.0.0",
68
68
  "is-installed-globally": "^1.0.0",
69
69
  "jiti": "^2.4.2",
70
- "katex": "^0.16.21",
70
+ "katex": "^0.16.22",
71
71
  "local-pkg": "^1.1.1",
72
72
  "lz-string": "^1.5.0",
73
73
  "magic-string": "^0.30.17",
@@ -77,7 +77,7 @@
77
77
  "markdown-it-mdc": "^0.2.5",
78
78
  "mlly": "^1.7.4",
79
79
  "monaco-editor": "0.51.0",
80
- "open": "^10.1.0",
80
+ "open": "^10.1.1",
81
81
  "pdf-lib": "^1.17.1",
82
82
  "picomatch": "^4.0.2",
83
83
  "plantuml-encoder": "^1.4.0",
@@ -88,38 +88,39 @@
88
88
  "resolve-from": "^5.0.0",
89
89
  "resolve-global": "^2.0.0",
90
90
  "semver": "^7.7.1",
91
- "shiki": "^3.1.0",
92
- "shiki-magic-move": "^1.0.1",
91
+ "shiki": "^3.3.0",
92
+ "shiki-magic-move": "^1.1.0",
93
93
  "sirv": "^3.0.1",
94
94
  "source-map-js": "^1.2.1",
95
- "typescript": "^5.8.2",
95
+ "typescript": "^5.8.3",
96
+ "unhead": "^2.0.8",
96
97
  "unocss": "^66.0.0",
97
98
  "unplugin-icons": "^22.1.0",
98
- "unplugin-vue-components": "^28.4.1",
99
+ "unplugin-vue-components": "^28.5.0",
99
100
  "unplugin-vue-markdown": "^28.3.1",
100
101
  "untun": "^0.1.3",
101
102
  "uqr": "^0.1.2",
102
- "vite": "^6.2.1",
103
- "vite-plugin-inspect": "^11.0.0",
104
- "vite-plugin-remote-assets": "^1.0.0",
105
- "vite-plugin-static-copy": "^2.3.0",
103
+ "vite": "^6.3.2",
104
+ "vite-plugin-inspect": "^11.0.1",
105
+ "vite-plugin-remote-assets": "^2.0.0",
106
+ "vite-plugin-static-copy": "^2.3.1",
106
107
  "vite-plugin-vue-server-ref": "^1.0.0",
107
108
  "vitefu": "^1.0.6",
108
109
  "vue": "^3.5.13",
109
- "yaml": "^2.7.0",
110
+ "yaml": "^2.7.1",
110
111
  "yargs": "^17.7.2",
111
- "@slidev/parser": "51.4.0",
112
- "@slidev/types": "51.4.0",
113
- "@slidev/client": "51.4.0"
112
+ "@slidev/client": "51.6.0",
113
+ "@slidev/parser": "51.6.0",
114
+ "@slidev/types": "51.6.0"
114
115
  },
115
116
  "devDependencies": {
116
117
  "@hedgedoc/markdown-it-plugins": "^2.1.4",
117
- "@types/picomatch": "^3.0.2",
118
+ "@types/picomatch": "^4.0.0",
118
119
  "@types/plantuml-encoder": "^1.4.2"
119
120
  },
120
121
  "scripts": {
121
122
  "build": "rimraf dist && tsup node/index.ts node/cli.ts",
122
123
  "dev": "nr build --watch",
123
- "start": "esno node/cli.ts"
124
+ "start": "tsx node/cli.ts"
124
125
  }
125
126
  }