@slidev/parser 52.4.0 → 52.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.
@@ -1,4 +1,4 @@
1
- import { parseAspectRatio } from "./utils-CLLoIRbA.mjs";
1
+ import { t as parseAspectRatio } from "./utils-DDsoDrrS.mjs";
2
2
  import { ensurePrefix, toArray, uniq } from "@antfu/utils";
3
3
  import YAML from "yaml";
4
4
 
@@ -46,7 +46,10 @@ function getDefaultConfig() {
46
46
  wakeLock: true,
47
47
  remote: false,
48
48
  mdc: false,
49
- seoMeta: {}
49
+ seoMeta: {},
50
+ notesAutoRuby: {},
51
+ duration: "30min",
52
+ timer: "stopwatch"
50
53
  };
51
54
  }
52
55
  function resolveConfig(headmatter, themeMeta = {}, filepath, verify = false) {
@@ -396,4 +399,4 @@ function hash(str) {
396
399
  }
397
400
 
398
401
  //#endregion
399
- export { detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
402
+ export { prettify as a, stringifySlide as c, resolveFonts as d, verifyConfig as f, parseSync as i, getDefaultConfig as l, parse as n, prettifySlide as o, parseSlide as r, stringify as s, detectFeatures as t, resolveConfig as u };
@@ -20,4 +20,4 @@ declare function parseSlide(raw: string, options?: SlidevParserOptions): Omit<So
20
20
  declare function parse(markdown: string, filepath: string, extensions?: SlidevPreparserExtension[], options?: SlidevParserOptions): Promise<SlidevMarkdown>;
21
21
  declare function parseSync(markdown: string, filepath: string, options?: SlidevParserOptions): SlidevMarkdown;
22
22
  //#endregion
23
- export { SlidevParserOptions, detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
23
+ export { parseSync as a, stringify as c, resolveConfig as d, resolveFonts as f, parseSlide as i, stringifySlide as l, detectFeatures as n, prettify as o, verifyConfig as p, parse as r, prettifySlide as s, SlidevParserOptions as t, getDefaultConfig as u };
package/dist/core.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import { SlidevParserOptions, detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core-CFXrG3vf.mjs";
2
- import { parseAspectRatio, parseRangeString } from "./utils-CHgwOjtL.mjs";
3
- export { SlidevParserOptions, detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
1
+ import { a as parseSync, c as stringify, d as resolveConfig, f as resolveFonts, i as parseSlide, l as stringifySlide, n as detectFeatures, o as prettify, p as verifyConfig, r as parse, s as prettifySlide, t as SlidevParserOptions, u as getDefaultConfig } from "./core-zMJEga1E.mjs";
2
+ import { a as TimesplitOutput, i as TimesplitInput, n as parseRangeString, o as parseTimesplits, r as parseTimeString, t as parseAspectRatio } from "./utils-BwHfBd2q.mjs";
3
+ export { SlidevParserOptions, TimesplitInput, TimesplitOutput, detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
package/dist/core.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { parseAspectRatio, parseRangeString } from "./utils-CLLoIRbA.mjs";
2
- import { detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core-Y81PGkhC.mjs";
1
+ import { i as parseTimeString, n as parseRangeString, r as parseTimesplits, t as parseAspectRatio } from "./utils-DDsoDrrS.mjs";
2
+ import { a as prettify, c as stringifySlide, d as resolveFonts, f as verifyConfig, i as parseSync, l as getDefaultConfig, n as parse, o as prettifySlide, r as parseSlide, s as stringify, t as detectFeatures, u as resolveConfig } from "./core-DFEnpsJg.mjs";
3
3
 
4
- export { detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
4
+ export { detectFeatures, 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
- import { SlidevParserOptions, detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core-CFXrG3vf.mjs";
2
- import { parseAspectRatio, parseRangeString } from "./utils-CHgwOjtL.mjs";
1
+ import { a as parseSync, c as stringify, d as resolveConfig, f as resolveFonts, i as parseSlide, l as stringifySlide, n as detectFeatures, o as prettify, p as verifyConfig, r as parse, s as prettifySlide, t as SlidevParserOptions, u as getDefaultConfig } from "./core-zMJEga1E.mjs";
2
+ import { a as TimesplitOutput, i as TimesplitInput, n as parseRangeString, o as parseTimesplits, r as parseTimeString, t as parseAspectRatio } from "./utils-BwHfBd2q.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, loadedSource?: Record<string, string>, mode?: string): Promise<LoadedSlidevData>;
13
13
  declare function save(markdown: SlidevMarkdown): Promise<string>;
14
14
  //#endregion
15
- export { LoadedSlidevData, SlidevParserOptions, detectFeatures, getDefaultConfig, injectPreparserExtensionLoader, load, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, save, stringify, stringifySlide, verifyConfig };
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 };
package/dist/fs.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { parseAspectRatio, parseRangeString } from "./utils-CLLoIRbA.mjs";
2
- import { detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core-Y81PGkhC.mjs";
1
+ import { i as parseTimeString, n as parseRangeString, r as parseTimesplits, t as parseAspectRatio } from "./utils-DDsoDrrS.mjs";
2
+ import { a as prettify, c as stringifySlide, d as resolveFonts, f as verifyConfig, i as parseSync, l as getDefaultConfig, n as parse, o as prettifySlide, r as parseSlide, s as stringify, t as detectFeatures, u as resolveConfig } from "./core-DFEnpsJg.mjs";
3
3
  import { slash } from "@antfu/utils";
4
4
  import YAML from "yaml";
5
5
  import fs from "node:fs";
@@ -103,4 +103,4 @@ async function save(markdown) {
103
103
  }
104
104
 
105
105
  //#endregion
106
- export { detectFeatures, getDefaultConfig, injectPreparserExtensionLoader, load, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, save, stringify, stringifySlide, verifyConfig };
106
+ export { detectFeatures, 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
- import { SlidevParserOptions, detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core-CFXrG3vf.mjs";
2
- import { parseAspectRatio, parseRangeString } from "./utils-CHgwOjtL.mjs";
3
- export { SlidevParserOptions, detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
1
+ import { a as parseSync, c as stringify, d as resolveConfig, f as resolveFonts, i as parseSlide, l as stringifySlide, n as detectFeatures, o as prettify, p as verifyConfig, r as parse, s as prettifySlide, t as SlidevParserOptions, u as getDefaultConfig } from "./core-zMJEga1E.mjs";
2
+ import { a as TimesplitOutput, i as TimesplitInput, n as parseRangeString, o as parseTimesplits, r as parseTimeString, t as parseAspectRatio } from "./utils-BwHfBd2q.mjs";
3
+ export { SlidevParserOptions, TimesplitInput, TimesplitOutput, detectFeatures, 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
- import { parseAspectRatio, parseRangeString } from "./utils-CLLoIRbA.mjs";
2
- import { detectFeatures, getDefaultConfig, parse, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig } from "./core-Y81PGkhC.mjs";
1
+ import { i as parseTimeString, n as parseRangeString, r as parseTimesplits, t as parseAspectRatio } from "./utils-DDsoDrrS.mjs";
2
+ import { a as prettify, c as stringifySlide, d as resolveFonts, f as verifyConfig, i as parseSync, l as getDefaultConfig, n as parse, o as prettifySlide, r as parseSlide, s as stringify, t as detectFeatures, u as resolveConfig } from "./core-DFEnpsJg.mjs";
3
3
 
4
- export { detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
4
+ export { detectFeatures, getDefaultConfig, parse, parseAspectRatio, parseRangeString, parseSlide, parseSync, parseTimeString, parseTimesplits, prettify, prettifySlide, resolveConfig, resolveFonts, stringify, stringifySlide, verifyConfig };
@@ -0,0 +1,47 @@
1
+ //#region src/timesplit/timesplit.d.ts
2
+ interface TimesplitInput {
3
+ no: number;
4
+ timesplit: string;
5
+ title?: string;
6
+ }
7
+ interface TimesplitOutput {
8
+ timestampStart: number;
9
+ timestampEnd: number;
10
+ noStart: number;
11
+ noEnd: number;
12
+ title?: string;
13
+ }
14
+ declare function parseTimesplits(inputs: TimesplitInput[]): TimesplitOutput[];
15
+ //#endregion
16
+ //#region src/timesplit/timestring.d.ts
17
+ /**
18
+ * Parse timestamp into seconds
19
+ *
20
+ * Accepts:
21
+ * - 10:50.1
22
+ * - 10s
23
+ * - 5m
24
+ * - 3min
25
+ * - 3mins 5secs
26
+ * - 10.5m3s
27
+ * - +10s
28
+ * - 1h10m30s
29
+ * - 1h4s
30
+ * - 1:1:1
31
+ */
32
+ declare function parseTimeString(timestamp: string | number): {
33
+ seconds: number;
34
+ relative: boolean;
35
+ };
36
+ //#endregion
37
+ //#region src/utils.d.ts
38
+ /**
39
+ * 1,3-5,8 => [1, 3, 4, 5, 8]
40
+ */
41
+ declare function parseRangeString(total: number, rangeStr?: string): number[];
42
+ /**
43
+ * Accepts `16/9` `1:1` `3x4`
44
+ */
45
+ declare function parseAspectRatio(str: string | number): number;
46
+ //#endregion
47
+ export { TimesplitOutput as a, TimesplitInput as i, parseRangeString as n, parseTimesplits as o, parseTimeString as r, parseAspectRatio as t };
@@ -0,0 +1,146 @@
1
+ import { isNumber, range, uniq } from "@antfu/utils";
2
+
3
+ //#region src/timesplit/timestring.ts
4
+ /**
5
+ * Parse timestamp into seconds
6
+ *
7
+ * Accepts:
8
+ * - 10:50.1
9
+ * - 10s
10
+ * - 5m
11
+ * - 3min
12
+ * - 3mins 5secs
13
+ * - 10.5m3s
14
+ * - +10s
15
+ * - 1h10m30s
16
+ * - 1h4s
17
+ * - 1:1:1
18
+ */
19
+ function parseTimeString(timestamp) {
20
+ if (typeof timestamp === "number") return {
21
+ seconds: timestamp,
22
+ relative: false
23
+ };
24
+ const relative = timestamp.startsWith("+");
25
+ if (relative) timestamp = timestamp.slice(1);
26
+ let seconds = 0;
27
+ if (timestamp.includes(":")) {
28
+ const parts = timestamp.split(":").map(Number);
29
+ let h = 0;
30
+ let m = 0;
31
+ let s = 0;
32
+ if (parts.length === 3) {
33
+ h = parts[0];
34
+ m = parts[1];
35
+ s = parts[2];
36
+ } else if (parts.length === 2) {
37
+ m = parts[0];
38
+ s = parts[1];
39
+ } else if (parts.length === 1) s = parts[0];
40
+ else throw new TypeError("Invalid timestamp format");
41
+ if (Number.isNaN(h) || Number.isNaN(m) || Number.isNaN(s)) throw new TypeError("Invalid timestamp format");
42
+ seconds = (h || 0) * 3600 + (m || 0) * 60 + (s || 0);
43
+ } else if (!timestamp.match(/[a-z]/i)) seconds = Number(timestamp);
44
+ else {
45
+ const unitMap = {
46
+ s: 1,
47
+ sec: 1,
48
+ secs: 1,
49
+ m: 60,
50
+ min: 60,
51
+ mins: 60,
52
+ h: 3600,
53
+ hr: 3600,
54
+ hrs: 3600,
55
+ hour: 3600,
56
+ hours: 3600,
57
+ day: 86400,
58
+ days: 86400,
59
+ week: 604800,
60
+ weeks: 604800,
61
+ month: 2629746,
62
+ months: 2629746,
63
+ year: 31556952,
64
+ years: 31556952
65
+ };
66
+ const regex = /([\d.]+)([a-z]+)/gi;
67
+ const matches = timestamp.matchAll(regex);
68
+ if (matches) for (const match of matches) {
69
+ const value = Number(match[1]);
70
+ if (Number.isNaN(value)) throw new TypeError(`Invalid timestamp value: ${match[1]}`);
71
+ const unit = match[2].toLowerCase();
72
+ if (!(unit in unitMap)) throw new TypeError(`Invalid timestamp unit: ${unit}`);
73
+ seconds += value * unitMap[unit];
74
+ }
75
+ const remaining = timestamp.replace(regex, "").trim();
76
+ if (remaining) throw new TypeError(`Unknown timestamp remaining: ${remaining}`);
77
+ }
78
+ return {
79
+ seconds,
80
+ relative
81
+ };
82
+ }
83
+
84
+ //#endregion
85
+ //#region src/timesplit/timesplit.ts
86
+ function parseTimesplits(inputs) {
87
+ let ts = 0;
88
+ const outputs = [];
89
+ let current = {
90
+ timestampStart: ts,
91
+ timestampEnd: ts,
92
+ noStart: 0,
93
+ noEnd: 0,
94
+ title: "[start]"
95
+ };
96
+ outputs.push(current);
97
+ for (const input of inputs) {
98
+ const time = parseTimeString(input.timesplit);
99
+ const end = time.relative ? ts + time.seconds : time.seconds;
100
+ if (end < ts) throw new Error(`Timesplit end ${end} is before start ${ts}`);
101
+ current.timestampEnd = end;
102
+ current.noEnd = input.no;
103
+ if (input.title) current.title = input.title;
104
+ ts = end;
105
+ current = {
106
+ timestampStart: end,
107
+ timestampEnd: end,
108
+ noStart: input.no,
109
+ noEnd: input.no
110
+ };
111
+ outputs.push(current);
112
+ }
113
+ return outputs;
114
+ }
115
+
116
+ //#endregion
117
+ //#region src/utils.ts
118
+ /**
119
+ * 1,3-5,8 => [1, 3, 4, 5, 8]
120
+ */
121
+ function parseRangeString(total, rangeStr) {
122
+ if (!rangeStr || rangeStr === "all" || rangeStr === "*") return range(1, total + 1);
123
+ if (rangeStr === "none") return [];
124
+ const indexes = [];
125
+ for (const part of rangeStr.split(/[,;]/g)) if (!part.includes("-")) indexes.push(+part);
126
+ else {
127
+ const [start, end] = part.split("-", 2);
128
+ indexes.push(...range(+start, !end ? total + 1 : +end + 1));
129
+ }
130
+ return uniq(indexes).filter((i) => i <= total).sort((a, b) => a - b);
131
+ }
132
+ /**
133
+ * Accepts `16/9` `1:1` `3x4`
134
+ */
135
+ function parseAspectRatio(str) {
136
+ if (isNumber(str)) return str;
137
+ if (!Number.isNaN(+str)) return +str;
138
+ const [wStr = "", hStr = ""] = str.split(/[:/x|]/);
139
+ const w = Number.parseFloat(wStr.trim());
140
+ const h = Number.parseFloat(hStr.trim());
141
+ if (Number.isNaN(w) || Number.isNaN(h) || h === 0) throw new Error(`Invalid aspect ratio "${str}"`);
142
+ return w / h;
143
+ }
144
+
145
+ //#endregion
146
+ export { parseTimeString as i, parseRangeString as n, parseTimesplits as r, parseAspectRatio as t };
package/dist/utils.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { parseAspectRatio, parseRangeString } from "./utils-CHgwOjtL.mjs";
2
- export { parseAspectRatio, parseRangeString };
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
+ export { TimesplitInput, TimesplitOutput, parseAspectRatio, parseRangeString, parseTimeString, parseTimesplits };
package/dist/utils.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { parseAspectRatio, parseRangeString } from "./utils-CLLoIRbA.mjs";
1
+ import { i as parseTimeString, n as parseRangeString, r as parseTimesplits, t as parseAspectRatio } from "./utils-DDsoDrrS.mjs";
2
2
 
3
- export { parseAspectRatio, parseRangeString };
3
+ export { parseAspectRatio, parseRangeString, parseTimeString, parseTimesplits };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slidev/parser",
3
- "version": "52.4.0",
3
+ "version": "52.6.0",
4
4
  "description": "Markdown parser for Slidev",
5
5
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
6
6
  "license": "MIT",
@@ -12,26 +12,15 @@
12
12
  },
13
13
  "bugs": "https://github.com/slidevjs/slidev/issues",
14
14
  "exports": {
15
- ".": {
16
- "types": "./dist/index.d.mts",
17
- "import": "./dist/index.mjs"
18
- },
19
- "./core": {
20
- "types": "./dist/core.d.mts",
21
- "import": "./dist/core.mjs"
22
- },
23
- "./fs": {
24
- "types": "./dist/fs.d.mts",
25
- "import": "./dist/fs.mjs"
26
- },
27
- "./utils": {
28
- "types": "./dist/utils.d.mts",
29
- "import": "./dist/utils.mjs"
30
- }
15
+ ".": "./dist/index.mjs",
16
+ "./core": "./dist/core.mjs",
17
+ "./fs": "./dist/fs.mjs",
18
+ "./utils": "./dist/utils.mjs",
19
+ "./package.json": "./package.json"
31
20
  },
32
- "main": "dist/index.mjs",
33
- "module": "dist/index.mjs",
34
- "types": "dist/index.d.mts",
21
+ "main": "./dist/index.mjs",
22
+ "module": "./dist/index.mjs",
23
+ "types": "./dist/index.d.mts",
35
24
  "files": [
36
25
  "*.d.ts",
37
26
  "dist"
@@ -42,10 +31,10 @@
42
31
  "dependencies": {
43
32
  "@antfu/utils": "^9.3.0",
44
33
  "yaml": "^2.8.1",
45
- "@slidev/types": "52.4.0"
34
+ "@slidev/types": "52.6.0"
46
35
  },
47
36
  "scripts": {
48
- "build": "tsdown src/index.ts src/core.ts src/fs.ts src/utils.ts",
37
+ "build": "tsdown",
49
38
  "dev": "nr build --watch"
50
39
  }
51
40
  }
@@ -1,11 +0,0 @@
1
- //#region src/utils.d.ts
2
- /**
3
- * 1,3-5,8 => [1, 3, 4, 5, 8]
4
- */
5
- declare function parseRangeString(total: number, rangeStr?: string): number[];
6
- /**
7
- * Accepts `16/9` `1:1` `3x4`
8
- */
9
- declare function parseAspectRatio(str: string | number): number;
10
- //#endregion
11
- export { parseAspectRatio, parseRangeString };
@@ -1,32 +0,0 @@
1
- import { isNumber, range, uniq } from "@antfu/utils";
2
-
3
- //#region src/utils.ts
4
- /**
5
- * 1,3-5,8 => [1, 3, 4, 5, 8]
6
- */
7
- function parseRangeString(total, rangeStr) {
8
- if (!rangeStr || rangeStr === "all" || rangeStr === "*") return range(1, total + 1);
9
- if (rangeStr === "none") return [];
10
- const indexes = [];
11
- for (const part of rangeStr.split(/[,;]/g)) if (!part.includes("-")) indexes.push(+part);
12
- else {
13
- const [start, end] = part.split("-", 2);
14
- indexes.push(...range(+start, !end ? total + 1 : +end + 1));
15
- }
16
- return uniq(indexes).filter((i) => i <= total).sort((a, b) => a - b);
17
- }
18
- /**
19
- * Accepts `16/9` `1:1` `3x4`
20
- */
21
- function parseAspectRatio(str) {
22
- if (isNumber(str)) return str;
23
- if (!Number.isNaN(+str)) return +str;
24
- const [wStr = "", hStr = ""] = str.split(/[:/x|]/);
25
- const w = Number.parseFloat(wStr.trim());
26
- const h = Number.parseFloat(hStr.trim());
27
- if (Number.isNaN(w) || Number.isNaN(h) || h === 0) throw new Error(`Invalid aspect ratio "${str}"`);
28
- return w / h;
29
- }
30
-
31
- //#endregion
32
- export { parseAspectRatio, parseRangeString };