@slidev/parser 52.11.4 → 52.12.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/dist/core.d.mts CHANGED
@@ -16,9 +16,14 @@ declare function stringify(data: SlidevMarkdown): string;
16
16
  declare function stringifySlide(data: SourceSlideInfo, idx?: number): string;
17
17
  declare function prettifySlide(data: SourceSlideInfo): SourceSlideInfo;
18
18
  declare function prettify(data: SlidevMarkdown): SlidevMarkdown;
19
+ /**
20
+ * Extract image URLs from slide content and frontmatter.
21
+ * Strips code blocks first to avoid false positives.
22
+ */
23
+ declare function extractImagesUsage(content: string, frontmatter: Record<string, any>): string[];
19
24
  declare function detectFeatures(code: string): SlidevDetectedFeatures;
20
25
  declare function parseSlide(raw: string, options?: SlidevParserOptions): Omit<SourceSlideInfo, 'filepath' | 'index' | 'start' | 'contentStart' | 'end'>;
21
26
  declare function parse(markdown: string, filepath: string, extensions?: SlidevPreparserExtension[], options?: SlidevParserOptions): Promise<SlidevMarkdown>;
22
27
  declare function parseSync(markdown: string, filepath: string, options?: SlidevParserOptions): SlidevMarkdown;
23
28
  //#endregion
24
- export { SlidevParserOptions, TimesplitInput, TimesplitOutput, detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
29
+ export { SlidevParserOptions, TimesplitInput, TimesplitOutput, detectFeatures, extractImagesUsage, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
package/dist/core.mjs CHANGED
@@ -51,7 +51,8 @@ function getDefaultConfig() {
51
51
  notesAutoRuby: {},
52
52
  duration: "30min",
53
53
  timer: "stopwatch",
54
- magicMoveDuration: 800
54
+ magicMoveDuration: 800,
55
+ preloadImages: true
55
56
  };
56
57
  }
57
58
  function resolveConfig(headmatter, themeMeta = {}, filepath, verify = false) {
@@ -220,6 +221,30 @@ function matter(code, options) {
220
221
  content
221
222
  };
222
223
  }
224
+ const IMAGE_EXTENSIONS = /\.(?:png|jpe?g|gif|svg|webp|avif|ico|bmp|tiff?)$/i;
225
+ /**
226
+ * Extract image URLs from slide content and frontmatter.
227
+ * Strips code blocks first to avoid false positives.
228
+ */
229
+ function extractImagesUsage(content, frontmatter) {
230
+ const images = /* @__PURE__ */ new Set();
231
+ for (const key of [
232
+ "image",
233
+ "backgroundImage",
234
+ "background"
235
+ ]) {
236
+ const val = frontmatter[key];
237
+ if (typeof val === "string" && val && !val.startsWith("data:")) if (key === "background") {
238
+ if (IMAGE_EXTENSIONS.test(val) || val.startsWith("/") || val.startsWith("http")) images.add(val);
239
+ } else images.add(val);
240
+ }
241
+ const stripped = content.replace(/^```[\s\S]+?^```/gm, "");
242
+ for (const [, url] of stripped.matchAll(/!\[[^\]]*\]\(([^)]+)\)/g)) if (url && !url.startsWith("data:")) images.add(url.trim());
243
+ for (const [, url] of stripped.matchAll(/\b(?:src|image)=["']([^"']+)["']/g)) if (url && !url.startsWith("data:") && !url.includes("{{") && IMAGE_EXTENSIONS.test(url)) images.add(url.trim());
244
+ for (const [, url] of stripped.matchAll(/:(?:src|image)=["']'([^']+)'["']/g)) if (url && !url.startsWith("data:") && IMAGE_EXTENSIONS.test(url)) images.add(url.trim());
245
+ for (const [, url] of stripped.matchAll(/url\(["']?([^"')]+)["']?\)/g)) if (url && !url.startsWith("data:") && IMAGE_EXTENSIONS.test(url)) images.add(url.trim());
246
+ return Array.from(images);
247
+ }
223
248
  function detectFeatures(code) {
224
249
  return {
225
250
  katex: !!code.match(/\$.*?\$/) || !!code.match(/\$\$/),
@@ -251,6 +276,7 @@ function parseSlide(raw, options = {}) {
251
276
  level = match?.[1]?.length;
252
277
  }
253
278
  if (frontmatter.level) level = frontmatter.level || 1;
279
+ const images = extractImagesUsage(content, frontmatter);
254
280
  return {
255
281
  raw,
256
282
  title,
@@ -262,7 +288,8 @@ function parseSlide(raw, options = {}) {
262
288
  frontmatterStyle: matterResult.type,
263
289
  frontmatterDoc: matterResult.doc,
264
290
  frontmatterRaw: matterResult.raw,
265
- note
291
+ note,
292
+ images
266
293
  };
267
294
  }
268
295
  async function parse(markdown, filepath, extensions, options = {}) {
@@ -400,4 +427,4 @@ function hash(str) {
400
427
  }
401
428
 
402
429
  //#endregion
403
- export { detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
430
+ export { detectFeatures, extractImagesUsage, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
package/dist/fs.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as TimesplitOutput, i as TimesplitInput, n as parseRangeString, o as parseTimesplits, r as parseTimeString, t as parseAspectRatio } from "./utils-BwHfBd2q.mjs";
2
- import { SlidevParserOptions, detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core.mjs";
2
+ import { SlidevParserOptions, detectFeatures, extractImagesUsage, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core.mjs";
3
3
  import { PreparserExtensionLoader, SlidevData, SlidevMarkdown } from "@slidev/types";
4
4
 
5
5
  //#region src/fs.d.ts
@@ -12,4 +12,4 @@ type LoadedSlidevData = Omit<SlidevData, 'config' | 'themeMeta'>;
12
12
  declare function load(userRoot: string, filepath: string, sources?: Record<string, string> | ((path: string) => Promise<string>), mode?: string): Promise<LoadedSlidevData>;
13
13
  declare function save(markdown: SlidevMarkdown): Promise<string>;
14
14
  //#endregion
15
- export { LoadedSlidevData, SlidevParserOptions, TimesplitInput, TimesplitOutput, detectFeatures, getDefaultConfig, injectPreparserExtensionLoader, load, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, save, stringify, stringifySlide, verifyConfig };
15
+ export { LoadedSlidevData, SlidevParserOptions, TimesplitInput, TimesplitOutput, detectFeatures, extractImagesUsage, getDefaultConfig, injectPreparserExtensionLoader, load, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, save, stringify, stringifySlide, verifyConfig };
package/dist/fs.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { i as parseTimeString, n as parseRangeString, r as parseTimesplits, t as parseAspectRatio } from "./utils-BiNCPCdQ.mjs";
2
- import { detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core.mjs";
2
+ import { detectFeatures, extractImagesUsage, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core.mjs";
3
3
  import { slash } from "@antfu/utils";
4
4
  import YAML from "yaml";
5
5
  import { existsSync } from "node:fs";
@@ -105,4 +105,4 @@ async function save(markdown) {
105
105
  }
106
106
 
107
107
  //#endregion
108
- export { detectFeatures, getDefaultConfig, injectPreparserExtensionLoader, load, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, save, stringify, stringifySlide, verifyConfig };
108
+ export { detectFeatures, extractImagesUsage, getDefaultConfig, injectPreparserExtensionLoader, load, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, save, stringify, stringifySlide, verifyConfig };
package/dist/index.d.mts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { a as TimesplitOutput, i as TimesplitInput, n as parseRangeString, o as parseTimesplits, r as parseTimeString, t as parseAspectRatio } from "./utils-BwHfBd2q.mjs";
2
- import { SlidevParserOptions, detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core.mjs";
3
- export { SlidevParserOptions, TimesplitInput, TimesplitOutput, detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
2
+ import { SlidevParserOptions, detectFeatures, extractImagesUsage, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core.mjs";
3
+ export { SlidevParserOptions, TimesplitInput, TimesplitOutput, detectFeatures, extractImagesUsage, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  import { i as parseTimeString, n as parseRangeString, r as parseTimesplits, t as parseAspectRatio } from "./utils-BiNCPCdQ.mjs";
2
- import { detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core.mjs";
2
+ import { detectFeatures, extractImagesUsage, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core.mjs";
3
3
 
4
- export { detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
4
+ export { detectFeatures, extractImagesUsage, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slidev/parser",
3
- "version": "52.11.4",
3
+ "version": "52.12.0",
4
4
  "description": "Markdown parser for Slidev",
5
5
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
6
6
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  "dependencies": {
32
32
  "@antfu/utils": "^9.3.0",
33
33
  "yaml": "^2.8.2",
34
- "@slidev/types": "52.11.4"
34
+ "@slidev/types": "52.12.0"
35
35
  },
36
36
  "scripts": {
37
37
  "build": "tsdown",