@slidev/cli 52.17.2 → 52.18.1

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.
@@ -1,4 +1,4 @@
1
- import { n as resolveViteConfigs } from "./serve-CDMTHA3C.mjs";
1
+ import { n as resolveViteConfigs } from "./serve-C3LqO47C.mjs";
2
2
  import { join, resolve } from "pathe";
3
3
  import { build as build$1 } from "vite";
4
4
  import { existsSync } from "node:fs";
@@ -10,7 +10,7 @@ import sirv from "sirv";
10
10
  async function build(options, viteConfig = {}, args) {
11
11
  const indexHtmlId = resolve(options.userRoot, "index.html");
12
12
  let config = void 0;
13
- await build$1(await resolveViteConfigs(options, {
13
+ const inlineConfig = await resolveViteConfigs(options, {
14
14
  plugins: [{
15
15
  name: "slidev:build",
16
16
  configResolved(_config) {
@@ -34,7 +34,8 @@ async function build(options, viteConfig = {}, args) {
34
34
  chunkSizeWarningLimit: 2e3,
35
35
  rollupOptions: { input: { index: indexHtmlId } }
36
36
  }
37
- }, viteConfig, "build"));
37
+ }, viteConfig, "build");
38
+ await build$1(inlineConfig);
38
39
  const outDir = resolve(options.userRoot, config.build.outDir);
39
40
  if (options.data.config.seoMeta?.ogImage === "auto" || options.data.config.seoMeta?.ogImage?.startsWith(".")) {
40
41
  const filename = options.data.config.seoMeta?.ogImage === "auto" ? "og-image.png" : options.data.config.seoMeta.ogImage;
@@ -51,7 +52,7 @@ async function build(options, viteConfig = {}, args) {
51
52
  dev: true
52
53
  }));
53
54
  server.listen(port);
54
- const { exportSlides } = await import("./export-CtL3Az7M.mjs");
55
+ const { exportSlides } = await import("./export-B_maVZXE.mjs");
55
56
  const tempDir = resolve(outDir, "temp");
56
57
  await fs$1.mkdir(tempDir, { recursive: true });
57
58
  await exportSlides({
@@ -92,7 +93,7 @@ async function build(options, viteConfig = {}, args) {
92
93
  "true",
93
94
  "auto"
94
95
  ].includes(options.data.config.download)) {
95
- const { exportSlides, getExportOptions } = await import("./export-CtL3Az7M.mjs");
96
+ const { exportSlides, getExportOptions } = await import("./export-B_maVZXE.mjs");
96
97
  const port = 12445;
97
98
  const app = connect();
98
99
  const server = http.createServer(app);
package/dist/cli.d.mts CHANGED
@@ -1 +1 @@
1
- export { };
1
+ export {}
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { i as resolveEntry, r as isInstalledGlobally } from "./resolver-BV2a2pHC.mjs";
2
- import { c as getThemeMeta, d as loadSetups, f as updateFrontmatterPatch, l as resolveTheme, o as resolveOptions, s as parser, t as createServer, u as version } from "./serve-CDMTHA3C.mjs";
1
+ import { i as isInstalledGlobally, o as resolveEntry } from "./resolver-BIhhHpe7.mjs";
2
+ import { c as getThemeMeta, d as loadSetups, f as updateFrontmatterPatch, l as resolveTheme, o as resolveOptions, s as parser, t as createServer, u as version } from "./serve-C3LqO47C.mjs";
3
3
  import process from "node:process";
4
4
  import path from "pathe";
5
5
  import fs from "node:fs/promises";
@@ -126,7 +126,8 @@ cli.command("* [entry]", "Start a local server for Slidev", (args) => commonOpti
126
126
  port,
127
127
  strictPort: true,
128
128
  host,
129
- force
129
+ force,
130
+ ...tunnel && remote != null ? { allowedHosts: [".trycloudflare.com"] } : {}
130
131
  },
131
132
  optimizeDeps: { force },
132
133
  logLevel: log,
@@ -202,7 +203,8 @@ cli.command("* [entry]", "Start a local server for Slidev", (args) => commonOpti
202
203
  name: "e",
203
204
  fullname: "edit",
204
205
  action() {
205
- execFile(process.env.EDITOR || "code", [entry]);
206
+ const editor = process.env.EDITOR || "code";
207
+ execFile(editor, [entry]);
206
208
  }
207
209
  },
208
210
  {
@@ -300,7 +302,7 @@ cli.command("build [entry..]", "Build hostable SPA", (args) => exportOptions(com
300
302
  describe: "enable the inspect plugin for debugging"
301
303
  }).strict().help(), async (args) => {
302
304
  const { entry, theme, base, download, out, inspect, "without-notes": withoutNotes, "router-mode": routerMode } = args;
303
- const { build } = await import("./build-C6LBmXd-.mjs");
305
+ const { build } = await import("./build-CMhuImLu.mjs");
304
306
  for (const entryFile of entry) {
305
307
  const options = await resolveOptions({
306
308
  entry: entryFile,
@@ -329,7 +331,7 @@ cli.command("format [entry..]", "Format the markdown file", (args) => commonOpti
329
331
  }
330
332
  });
331
333
  cli.command("mcp [entry]", "Start an MCP (Model Context Protocol) server over stdio for AI agents to inspect and edit the slides", (args) => commonOptions(args).strict().help(), async ({ entry }) => {
332
- const { startMcpStdioServer } = await import("./stdio-Cq1YeFUk.mjs");
334
+ const { startMcpStdioServer } = await import("./stdio-BBaEvAO6.mjs");
333
335
  await startMcpStdioServer(await resolveEntry(entry));
334
336
  });
335
337
  cli.command("theme [subcommand]", "Theme related operations", (command) => {
@@ -369,7 +371,7 @@ cli.command("theme [subcommand]", "Theme related operations", (command) => {
369
371
  });
370
372
  cli.command("export [entry..]", "Export slides to PDF", (args) => exportOptions(commonOptions(args)).strict().help(), async (args) => {
371
373
  const { entry, theme } = args;
372
- const { exportSlides, getExportOptions } = await import("./export-CtL3Az7M.mjs");
374
+ const { exportSlides, getExportOptions } = await import("./export-B_maVZXE.mjs");
373
375
  const candidatePort = await getPort(12445);
374
376
  let warned = false;
375
377
  for (const entryFile of entry) {
@@ -421,7 +423,7 @@ cli.command("export-notes [entry..]", "Export slide notes to PDF", (args) => arg
421
423
  type: "number",
422
424
  describe: "wait for the specified ms before exporting"
423
425
  }).strict().help(), async ({ entry, output, timeout, wait }) => {
424
- const { exportNotes } = await import("./export-CtL3Az7M.mjs");
426
+ const { exportNotes } = await import("./export-B_maVZXE.mjs");
425
427
  const candidatePort = await getPort(12445);
426
428
  for (const entryFile of entry) {
427
429
  const options = await resolveOptions({ entry: entryFile }, "export");
@@ -551,7 +553,7 @@ function printInfo(options, port, base, remote, tunnelUrl, publicIp) {
551
553
  if (options.inspect) console.log(`${dim(" vite inspector")} > ${yellow(`${baseUrl}/__inspect/`)}`);
552
554
  let lastRemoteUrl = "";
553
555
  if (remote !== void 0) {
554
- Object.values(os.networkInterfaces()).forEach((v) => (v || []).filter((details) => String(details.family).slice(-1) === "4" && !details.address.includes("127.0.0.1")).forEach(({ address }) => {
556
+ Object.values(os.networkInterfaces()).forEach((v) => (v || []).filter((details) => String(details.family).endsWith("4") && !details.address.includes("127.0.0.1")).forEach(({ address }) => {
555
557
  lastRemoteUrl = `http://${address}:${portAndBase}${entryPath}`;
556
558
  console.log(`${dim(" remote control ")} > ${blue(lastRemoteUrl)}`);
557
559
  }));
@@ -1,4 +1,4 @@
1
- import { n as getRoots } from "./resolver-BV2a2pHC.mjs";
1
+ import { n as getRoots } from "./resolver-BIhhHpe7.mjs";
2
2
  import process from "node:process";
3
3
  import path, { dirname, relative } from "pathe";
4
4
  import fs from "node:fs/promises";
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { a as createDataUtils, o as resolveOptions, r as ViteSlidevPlugin, s as parser, t as createServer } from "./serve-CDMTHA3C.mjs";
1
+ import { a as createDataUtils, o as resolveOptions, r as ViteSlidevPlugin, s as parser, t as createServer } from "./serve-C3LqO47C.mjs";
2
2
  export { ViteSlidevPlugin, createDataUtils, createServer, parser, resolveOptions };
@@ -7,7 +7,7 @@ import { parseNi, run } from "@antfu/ni";
7
7
  import { ensurePrefix, slash } from "@antfu/utils";
8
8
  import { underline, yellow } from "ansis";
9
9
  import globalDirs from "global-directory";
10
- import { resolvePath } from "mlly";
10
+ import { resolve as resolve$1, resolvePath } from "mlly";
11
11
  import prompts from "prompts";
12
12
  import { resolveGlobal } from "resolve-global";
13
13
  import { findClosestPkgJsonPath, findDepPkgJsonPath } from "vitefu";
@@ -119,6 +119,52 @@ async function resolveImportPath(importName, ensure = false) {
119
119
  }
120
120
  if (ensure) throw new Error(`Failed to resolve package "${importName}"`);
121
121
  }
122
+ /**
123
+ * Import an optional dependency (typically an optional peer dependency such as
124
+ * `vite-plugin-pwa`) that the user may or may not have installed. Resolution is
125
+ * attempted, in order, from the user's project root, the workspace root, the
126
+ * global registry (when Slidev runs globally), and finally the cli's own
127
+ * dependencies. Returns `undefined` when the package can't be resolved anywhere.
128
+ */
129
+ async function importOptionalDependency(name) {
130
+ const roots = [];
131
+ try {
132
+ const { userRoot, userWorkspaceRoot } = await getRoots();
133
+ roots.push(userRoot);
134
+ if (userWorkspaceRoot !== userRoot) roots.push(userWorkspaceRoot);
135
+ } catch {}
136
+ for (const root of roots) try {
137
+ return await import(await resolve$1(name, { url: pathToFileURL(`${root}${sep}`).href }));
138
+ } catch {}
139
+ if (isInstalledGlobally.value) try {
140
+ return await import(resolveGlobal(name));
141
+ } catch {}
142
+ try {
143
+ return await import(name);
144
+ } catch {}
145
+ }
146
+ /**
147
+ * Prompt the user to install a missing optional dependency, then install it
148
+ * with the detected package manager. Exits the process when the user declines
149
+ * or when stdin isn't interactive (so it can't prompt).
150
+ *
151
+ * `purpose` describes why the package is needed, e.g. `The "pwa" option`.
152
+ */
153
+ async function promptForOptionalInstallation(pkgName, purpose) {
154
+ if (!process.stdin.isTTY) {
155
+ console.error(`${purpose} requires the "${pkgName}" package, which is not installed, and cannot prompt for installation. Install it with \`npm i -D ${pkgName}\` (or your package manager's equivalent) and try again.`);
156
+ process.exit(1);
157
+ }
158
+ const { confirm } = await prompts({
159
+ name: "confirm",
160
+ initial: "Y",
161
+ type: "confirm",
162
+ message: `${purpose} requires the "${yellow(pkgName)}" package, which is not installed ${underline(isInstalledGlobally.value ? "globally" : "in your project")}. Install it now?`
163
+ });
164
+ if (!confirm) process.exit(1);
165
+ if (isInstalledGlobally.value) await run(parseNi, ["-g", pkgName]);
166
+ else await run(parseNi, [pkgName]);
167
+ }
122
168
  async function findPkgRoot(dep, parent, ensure = false) {
123
169
  const pkgJsonPath = await findDepPkgJsonPath(dep, parent);
124
170
  const path = pkgJsonPath ? dirname(pkgJsonPath) : isInstalledGlobally.value ? await findGlobalPkgRoot(dep, false) : void 0;
@@ -257,4 +303,4 @@ function resolveSourceFiles(roots, subpath, extensions = [
257
303
  return results;
258
304
  }
259
305
  //#endregion
260
- export { resolveImportPath as a, toAtFS as c, resolveEntry as i, getRoots as n, resolveImportUrl as o, isInstalledGlobally as r, resolveSourceFiles as s, createResolver as t };
306
+ export { promptForOptionalInstallation as a, resolveImportUrl as c, isInstalledGlobally as i, resolveSourceFiles as l, getRoots as n, resolveEntry as o, importOptionalDependency as r, resolveImportPath as s, createResolver as t, toAtFS as u };
@@ -1,4 +1,4 @@
1
- import { a as resolveImportPath, c as toAtFS, i as resolveEntry, n as getRoots, o as resolveImportUrl, r as isInstalledGlobally, s as resolveSourceFiles, t as createResolver } from "./resolver-BV2a2pHC.mjs";
1
+ import { a as promptForOptionalInstallation, c as resolveImportUrl, i as isInstalledGlobally, l as resolveSourceFiles, n as getRoots, o as resolveEntry, r as importOptionalDependency, s as resolveImportPath, t as createResolver, u as toAtFS } from "./resolver-BIhhHpe7.mjs";
2
2
  import { builtinModules } from "node:module";
3
3
  import process from "node:process";
4
4
  import path, { basename, dirname, isAbsolute, join, relative, resolve, win32 } from "pathe";
@@ -44,7 +44,6 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
44
44
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
45
45
  import { z } from "zod";
46
46
  import ServerRef from "vite-plugin-vue-server-ref";
47
- import { VitePWA } from "vite-plugin-pwa";
48
47
  import UnoCSS from "unocss/vite";
49
48
  import { mergeConfigs, presetIcons } from "unocss";
50
49
  import Vue from "@vitejs/plugin-vue";
@@ -141,6 +140,7 @@ function createSlideImportGuardPlugin() {
141
140
  if (!isSlideMarkdownId(id) || !config?.server.fs.strict) return null;
142
141
  const importer = filePathFromId(id) ?? id;
143
142
  await Promise.all(extractImportSources(code, id).map(async ({ value, start }) => {
143
+ if (isPublicAsset(value, config)) return;
144
144
  const resolved = await this.resolve(value, importer, { skipSelf: true });
145
145
  if (!resolved || resolved.external) return;
146
146
  const filePath = filePathFromId(resolved.id);
@@ -169,6 +169,20 @@ function filePathFromId(id) {
169
169
  function isAllowedFile(filePath, allowRoots) {
170
170
  return allowRoots.some((root) => isFileInRoot(root, filePath));
171
171
  }
172
+ /**
173
+ * Whether a static import `value` is a public-directory asset, i.e. a
174
+ * root-absolute Vite URL (`/foo.png`) that maps to an existing file under
175
+ * `config.publicDir`. The Vue SFC compiler turns `<img src="/foo.png">` into a
176
+ * static `import`, but public assets are served by URL rather than
177
+ * module-resolved, so `/foo.png` is a Vite URL — not a filesystem-absolute path
178
+ * — and must be exempted from the `server.fs.allow` check.
179
+ */
180
+ function isPublicAsset(value, config) {
181
+ if (!config.publicDir || !value.startsWith("/") || value.startsWith("/@")) return false;
182
+ const publicDir = normalizeFsPath(config.publicDir);
183
+ const publicPath = normalizeFsPath(path.join(publicDir, cleanUrl$1(value).slice(1)));
184
+ return isFileInRoot(publicDir, publicPath) && existsSync(publicPath);
185
+ }
172
186
  function extractImportSources(code, id) {
173
187
  const result = parseSync(id, code);
174
188
  const sources = [];
@@ -698,7 +712,7 @@ function createLayoutWrapperPlugin({ data, utils }) {
698
712
  }
699
713
  //#endregion
700
714
  //#region package.json
701
- var version = "52.17.2";
715
+ var version = "52.18.1";
702
716
  //#endregion
703
717
  //#region node/integrations/addons.ts
704
718
  async function resolveAddons(addonsInConfig) {
@@ -2008,7 +2022,7 @@ function todoify(token, options) {
2008
2022
  }
2009
2023
  function generateIdForToken(token) {
2010
2024
  if (token.map) return `task-item-${token.map[0]}`;
2011
- else return `task-item-${Math.ceil(Math.random() * (1e4 * 1e3) - 1e3)}`;
2025
+ else return `task-item-${Math.ceil(Math.random() * 1e7 - 1e3)}`;
2012
2026
  }
2013
2027
  function createCheckboxToken(token, enabled, id) {
2014
2028
  const checkbox = new Token("taskListItemCheckbox", "", 0);
@@ -2373,7 +2387,8 @@ function MarkdownItVDrag(md, markdownTransformMap) {
2373
2387
  const sourceMap = s.generateMap();
2374
2388
  smc = new SourceMapConsumer({
2375
2389
  ...sourceMap,
2376
- version: sourceMap.version.toString()
2390
+ version: sourceMap.version.toString(),
2391
+ sourcesContent: sourceMap.sourcesContent?.map((content) => content ?? "")
2377
2392
  });
2378
2393
  sourceMapConsumers.set(s, smc);
2379
2394
  return smc;
@@ -2905,7 +2920,8 @@ function createSlidevMcpServer(ctx) {
2905
2920
  */
2906
2921
  function isSafeDrawingKey(dir, key) {
2907
2922
  if (!/^\d+$/.test(key)) return false;
2908
- const rel = relative(dir, join(dir, `${key}.svg`));
2923
+ const target = join(dir, `${key}.svg`);
2924
+ const rel = relative(dir, target);
2909
2925
  return !rel.startsWith("..") && !isAbsolute(rel);
2910
2926
  }
2911
2927
  function resolveDrawingsDir(options) {
@@ -3184,24 +3200,24 @@ function createPatchMonacoSourceMapPlugin() {
3184
3200
  }
3185
3201
  //#endregion
3186
3202
  //#region node/vite/pwa.ts
3187
- function createPWAPlugin(options) {
3203
+ const PWA_PACKAGE = "vite-plugin-pwa";
3204
+ async function createPWAPlugin(options) {
3188
3205
  const matchMode = (mode) => mode === true || mode === options.mode;
3189
- const enabled = matchMode(options.data.config.pwa);
3206
+ if (!matchMode(options.data.config.pwa)) return createPWARegisterStubPlugin();
3207
+ const VitePWA = await resolveVitePWA();
3190
3208
  const base = options.base ?? "/";
3191
- const title = options.data.config.title || "Slidev";
3192
3209
  return VitePWA({
3193
- disable: !enabled,
3194
3210
  registerType: "autoUpdate",
3195
3211
  injectRegister: null,
3196
3212
  base,
3197
3213
  workbox: {
3198
- maximumFileSizeToCacheInBytes: 100 * 1024 * 1024,
3214
+ maximumFileSizeToCacheInBytes: 104857600,
3199
3215
  globPatterns: ["**/*.{js,css,html,woff,woff2,ttf,png,jpg,jpeg,svg,gif,webp,avif,ico,mp4,webm,ogv,mov,m4v,mp3,wav,ogg,oga,m4a,aac,flac,opus,weba}"],
3200
3216
  navigateFallback: "index.html",
3201
3217
  navigateFallbackDenylist: [/^\/(presenter|notes|overview|print|export)/]
3202
3218
  },
3203
3219
  manifest: {
3204
- name: title,
3220
+ name: options.data.config.title || "Slidev",
3205
3221
  short_name: "Slidev",
3206
3222
  start_url: base,
3207
3223
  display: "fullscreen",
@@ -3210,6 +3226,40 @@ function createPWAPlugin(options) {
3210
3226
  }
3211
3227
  });
3212
3228
  }
3229
+ /**
3230
+ * Resolve `vite-plugin-pwa`'s `VitePWA` factory, prompting the user to install
3231
+ * the optional peer dependency when the `pwa` option is enabled but the package
3232
+ * is missing.
3233
+ */
3234
+ async function resolveVitePWA() {
3235
+ let mod = await importOptionalDependency(PWA_PACKAGE);
3236
+ if (!mod?.VitePWA && !mod?.default?.VitePWA) {
3237
+ await promptForOptionalInstallation(PWA_PACKAGE, "The \"pwa\" option");
3238
+ mod = await importOptionalDependency(PWA_PACKAGE);
3239
+ }
3240
+ const VitePWA = mod?.VitePWA ?? mod?.default?.VitePWA;
3241
+ if (!VitePWA) throw new Error(`[slidev] Failed to load "${PWA_PACKAGE}", which is required by the "pwa" option.`);
3242
+ return VitePWA;
3243
+ }
3244
+ /**
3245
+ * When PWA is disabled, resolve `virtual:pwa-register` to a no-op module. The
3246
+ * client only imports it behind the `__SLIDEV_FEATURE_PWA__` guard (stripped
3247
+ * from the build when off), but the guarded dynamic import must still resolve
3248
+ * during dev — without pulling in the optional `vite-plugin-pwa` dependency.
3249
+ */
3250
+ function createPWARegisterStubPlugin() {
3251
+ const VIRTUAL_ID = "virtual:pwa-register";
3252
+ const RESOLVED_ID = `\0${VIRTUAL_ID}`;
3253
+ return {
3254
+ name: "slidev:pwa-register-stub",
3255
+ resolveId(id) {
3256
+ return id === VIRTUAL_ID ? RESOLVED_ID : void 0;
3257
+ },
3258
+ load(id) {
3259
+ if (id === RESOLVED_ID) return "export function registerSW() { return () => Promise.resolve() }";
3260
+ }
3261
+ };
3262
+ }
3213
3263
  //#endregion
3214
3264
  //#region node/vite/remoteAssets.ts
3215
3265
  async function createRemoteAssetsPlugin({ data: { config }, mode }, pluginOptions) {
@@ -3254,7 +3304,7 @@ async function setupUnocss({ clientRoot, roots, data, utils }) {
3254
3304
  return "default" in loaded ? loaded.default : loaded;
3255
3305
  });
3256
3306
  }
3257
- const config = mergeConfigs([
3307
+ const configs = [
3258
3308
  {
3259
3309
  presets: [presetIcons({
3260
3310
  collectionsNodeResolvePath: utils.iconsResolvePath,
@@ -3264,7 +3314,8 @@ async function setupUnocss({ clientRoot, roots, data, utils }) {
3264
3314
  },
3265
3315
  (await loadModule(resolve(clientRoot, "uno.config.ts"))).default,
3266
3316
  ...await loadSetups(roots, "unocss.ts", [], loadFileConfigs)
3267
- ].filter(Boolean));
3317
+ ].filter(Boolean);
3318
+ const config = mergeConfigs(configs);
3268
3319
  config.theme ||= {};
3269
3320
  config.theme.fontFamily ||= {};
3270
3321
  config.theme.fontFamily.sans ||= data.config.fonts.sans.join(",");
@@ -3402,7 +3453,8 @@ async function resolveViteConfigs(options, baseConfig, overrideConfigs, command,
3402
3453
  //#region node/commands/serve.ts
3403
3454
  async function createServer$1(options, viteConfig = {}, serverOptions) {
3404
3455
  process.env.EDITOR = process.env.EDITOR || "code";
3405
- return await createServer(await resolveViteConfigs(options, { optimizeDeps: { entries: [join(options.clientRoot, "main.ts")] } }, viteConfig, "serve", serverOptions));
3456
+ const inlineConfig = await resolveViteConfigs(options, { optimizeDeps: { entries: [join(options.clientRoot, "main.ts")] } }, viteConfig, "serve", serverOptions);
3457
+ return await createServer(inlineConfig);
3406
3458
  }
3407
3459
  //#endregion
3408
3460
  export { createDataUtils as a, getThemeMeta as c, loadSetups as d, updateFrontmatterPatch as f, createSlidevMcpServer as i, resolveTheme as l, resolveViteConfigs as n, resolveOptions as o, ViteSlidevPlugin as r, parser as s, createServer$1 as t, version as u };
@@ -1,5 +1,5 @@
1
- import { n as getRoots } from "./resolver-BV2a2pHC.mjs";
2
- import { i as createSlidevMcpServer, s as parser, u as version } from "./serve-CDMTHA3C.mjs";
1
+ import { n as getRoots } from "./resolver-BIhhHpe7.mjs";
2
+ import { i as createSlidevMcpServer, s as parser, u as version } from "./serve-C3LqO47C.mjs";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  //#region node/mcp/stdio.ts
5
5
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@slidev/cli",
3
3
  "type": "module",
4
- "version": "52.17.2",
4
+ "version": "52.18.1",
5
5
  "description": "Presentation slides for developers",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -35,29 +35,33 @@
35
35
  "node": ">=20.12.0"
36
36
  },
37
37
  "peerDependencies": {
38
- "playwright-chromium": "^1.10.0"
38
+ "playwright-chromium": "^1.10.0",
39
+ "vite-plugin-pwa": "^1.0.0"
39
40
  },
40
41
  "peerDependenciesMeta": {
41
42
  "playwright-chromium": {
42
43
  "optional": true
44
+ },
45
+ "vite-plugin-pwa": {
46
+ "optional": true
43
47
  }
44
48
  },
45
49
  "dependencies": {
46
- "@antfu/ni": "^30.2.0",
50
+ "@antfu/ni": "^30.3.0",
47
51
  "@antfu/utils": "^9.3.0",
48
52
  "@comark/markdown-it": "^0.3.4",
49
53
  "@iconify-json/carbon": "^1.2.24",
50
54
  "@iconify-json/ph": "^1.2.2",
51
55
  "@iconify-json/svg-spinners": "^1.2.4",
52
56
  "@lillallol/outline-pdf": "^4.0.0",
53
- "@modelcontextprotocol/sdk": "^1.29.0",
57
+ "@modelcontextprotocol/sdk": "^1.30.0",
54
58
  "@shikijs/magic-move": "^4.3.1",
55
59
  "@shikijs/markdown-it": "^4.3.1",
56
60
  "@shikijs/twoslash": "^4.3.1",
57
61
  "@shikijs/vitepress-twoslash": "^4.3.1",
58
62
  "@unocss/extractor-mdc": "^66.7.5",
59
63
  "@unocss/reset": "^66.7.5",
60
- "@vitejs/plugin-vue": "^6.0.7",
64
+ "@vitejs/plugin-vue": "^6.0.8",
61
65
  "@vitejs/plugin-vue-jsx": "^5.1.6",
62
66
  "ansis": "^4.3.1",
63
67
  "chokidar": "^5.0.0",
@@ -70,17 +74,17 @@
70
74
  "htmlparser2": "^12.0.0",
71
75
  "is-installed-globally": "^1.0.0",
72
76
  "jiti": "^2.7.0",
73
- "katex": "^0.17.0",
77
+ "katex": "^0.18.1",
74
78
  "local-pkg": "^1.2.1",
75
79
  "lz-string": "^1.5.0",
76
- "magic-string": "^0.30.21",
77
- "magic-string-stack": "^1.1.0",
80
+ "magic-string": "^1.1.0",
81
+ "magic-string-stack": "^2.0.0",
78
82
  "markdown-exit": "^1.1.0-beta.2",
79
83
  "markdown-it-footnote": "^4.0.0",
80
84
  "markdown-it-github-alerts": "^1.0.1",
81
85
  "mlly": "^1.8.2",
82
- "monaco-editor": "^0.55.1",
83
- "obug": "^2.1.3",
86
+ "monaco-editor": "^0.56.0",
87
+ "obug": "^2.1.4",
84
88
  "open": "^11.0.0",
85
89
  "pathe": "^2.0.3",
86
90
  "pdf-lib": "^1.17.1",
@@ -97,27 +101,26 @@
97
101
  "sirv": "^3.0.2",
98
102
  "source-map-js": "^1.2.1",
99
103
  "typescript": "^6.0.3",
100
- "unhead": "^3.1.7",
104
+ "unhead": "^3.2.3",
101
105
  "unocss": "^66.7.5",
102
106
  "unplugin-icons": "^23.0.1",
103
107
  "unplugin-vue-components": "^32.1.0",
104
108
  "unplugin-vue-markdown": "^32.0.0",
105
- "untun": "^0.1.3",
109
+ "untun": "^0.2.2",
106
110
  "uqr": "^0.1.3",
107
- "vite": "^8.1.3",
111
+ "vite": "^8.1.5",
108
112
  "vite-plugin-inspect": "^11.4.1",
109
- "vite-plugin-pwa": "^1.3.0",
110
113
  "vite-plugin-remote-assets": "^2.1.0",
111
114
  "vite-plugin-static-copy": "^4.1.1",
112
115
  "vite-plugin-vue-server-ref": "^1.0.0",
113
116
  "vitefu": "^1.1.3",
114
- "vue": "^3.5.39",
117
+ "vue": "^3.5.40",
115
118
  "yaml": "^2.9.0",
116
- "yargs": "^18.0.0",
119
+ "yargs": "^18.1.0",
117
120
  "zod": "^3.25.76",
118
- "@slidev/client": "52.17.2",
119
- "@slidev/parser": "52.17.2",
120
- "@slidev/types": "52.17.2"
121
+ "@slidev/parser": "52.18.1",
122
+ "@slidev/client": "52.18.1",
123
+ "@slidev/types": "52.18.1"
121
124
  },
122
125
  "devDependencies": {
123
126
  "@hedgedoc/markdown-it-plugins": "^2.1.4",