pandoc-glance 0.1.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/cli.js ADDED
@@ -0,0 +1,355 @@
1
+ #!/usr/bin/env node
2
+ import { createHash, randomBytes } from "node:crypto";
3
+ import { realpathSync } from "node:fs";
4
+ import { readFile, readdir, mkdir, rename, stat, unlink, writeFile } from "node:fs/promises";
5
+ import { homedir } from "node:os";
6
+ import { basename, dirname, join, resolve } from "node:path";
7
+ import { fileURLToPath, pathToFileURL } from "node:url";
8
+ import { openInDefaultBrowser } from "./browser.js";
9
+ import { assertPandocAvailable, detectFormat, renderDocument, } from "./render.js";
10
+ import { startWatchPreview } from "./watch-preview.js";
11
+ export const VERSION = "0.1.0";
12
+ export const DEFAULT_FONT_SIZE_PX = 15;
13
+ export const MIN_FONT_SIZE_PX = 10;
14
+ export const MAX_FONT_SIZE_PX = 24;
15
+ export class CliArgumentError extends Error {
16
+ constructor(message) {
17
+ super(message);
18
+ this.name = "CliArgumentError";
19
+ }
20
+ }
21
+ function optionValue(argv, index, option, inlineValue) {
22
+ if (inlineValue !== undefined) {
23
+ if (!inlineValue)
24
+ throw new CliArgumentError(`${option} requires a value.`);
25
+ return { value: inlineValue, nextIndex: index };
26
+ }
27
+ const value = argv[index + 1];
28
+ if (value === undefined)
29
+ throw new CliArgumentError(`${option} requires a value.`);
30
+ return { value, nextIndex: index + 1 };
31
+ }
32
+ function parseFontSize(rawValue) {
33
+ if (!/^(?:\d+(?:\.\d+)?|\.\d+)$/.test(rawValue)) {
34
+ throw new CliArgumentError(`Invalid --font-size value: ${rawValue}. Expected a number from ${MIN_FONT_SIZE_PX} to ${MAX_FONT_SIZE_PX}.`);
35
+ }
36
+ const value = Number(rawValue);
37
+ if (!Number.isFinite(value) || value < MIN_FONT_SIZE_PX || value > MAX_FONT_SIZE_PX) {
38
+ throw new CliArgumentError(`--font-size must be between ${MIN_FONT_SIZE_PX} and ${MAX_FONT_SIZE_PX}px.`);
39
+ }
40
+ return Math.round(value * 10) / 10;
41
+ }
42
+ function parsePort(rawValue) {
43
+ if (!/^\d+$/.test(rawValue)) {
44
+ throw new CliArgumentError(`Invalid --port value: ${rawValue}. Expected an integer from 0 to 65535.`);
45
+ }
46
+ const value = Number(rawValue);
47
+ if (!Number.isSafeInteger(value) || value < 0 || value > 65_535) {
48
+ throw new CliArgumentError("--port must be an integer from 0 to 65535.");
49
+ }
50
+ return value;
51
+ }
52
+ export function parseCliArgs(argv) {
53
+ if (argv.includes("--help") || argv.includes("-h")) {
54
+ return {
55
+ action: "help",
56
+ watch: false,
57
+ open: true,
58
+ theme: "auto",
59
+ format: "auto",
60
+ fontSizePx: DEFAULT_FONT_SIZE_PX,
61
+ port: 0,
62
+ };
63
+ }
64
+ if (argv.includes("--version") || argv.includes("-v")) {
65
+ return {
66
+ action: "version",
67
+ watch: false,
68
+ open: true,
69
+ theme: "auto",
70
+ format: "auto",
71
+ fontSizePx: DEFAULT_FONT_SIZE_PX,
72
+ port: 0,
73
+ };
74
+ }
75
+ let watch = false;
76
+ let open = true;
77
+ let theme = "auto";
78
+ let format = "auto";
79
+ let fontSizePx = DEFAULT_FONT_SIZE_PX;
80
+ let port = 0;
81
+ const positional = [];
82
+ let positionalOnly = false;
83
+ for (let index = 0; index < argv.length; index += 1) {
84
+ const token = argv[index];
85
+ if (positionalOnly) {
86
+ positional.push(token);
87
+ continue;
88
+ }
89
+ if (token === "--") {
90
+ positionalOnly = true;
91
+ continue;
92
+ }
93
+ if (token === "--watch" || token === "-w") {
94
+ watch = true;
95
+ continue;
96
+ }
97
+ if (token === "--no-open") {
98
+ open = false;
99
+ continue;
100
+ }
101
+ const equalsIndex = token.indexOf("=");
102
+ const option = equalsIndex >= 0 ? token.slice(0, equalsIndex) : token;
103
+ const inlineValue = equalsIndex >= 0 ? token.slice(equalsIndex + 1) : undefined;
104
+ if (option === "--theme") {
105
+ const parsed = optionValue(argv, index, option, inlineValue);
106
+ index = parsed.nextIndex;
107
+ if (parsed.value !== "auto" && parsed.value !== "light" && parsed.value !== "dark") {
108
+ throw new CliArgumentError(`Invalid --theme value: ${parsed.value}. Expected auto, light, or dark.`);
109
+ }
110
+ theme = parsed.value;
111
+ continue;
112
+ }
113
+ if (option === "--format") {
114
+ const parsed = optionValue(argv, index, option, inlineValue);
115
+ index = parsed.nextIndex;
116
+ if (parsed.value !== "auto" && parsed.value !== "markdown" && parsed.value !== "latex") {
117
+ throw new CliArgumentError(`Invalid --format value: ${parsed.value}. Expected auto, markdown, or latex.`);
118
+ }
119
+ format = parsed.value;
120
+ continue;
121
+ }
122
+ if (option === "--font-size") {
123
+ const parsed = optionValue(argv, index, option, inlineValue);
124
+ index = parsed.nextIndex;
125
+ fontSizePx = parseFontSize(parsed.value);
126
+ continue;
127
+ }
128
+ if (option === "--port") {
129
+ const parsed = optionValue(argv, index, option, inlineValue);
130
+ index = parsed.nextIndex;
131
+ port = parsePort(parsed.value);
132
+ continue;
133
+ }
134
+ if (token.startsWith("-"))
135
+ throw new CliArgumentError(`Unknown option: ${token}`);
136
+ positional.push(token);
137
+ }
138
+ if (positional.length === 0)
139
+ throw new CliArgumentError("Missing input file. Run pandoc-glance --help for usage.");
140
+ if (positional.length > 1) {
141
+ throw new CliArgumentError(`Expected one input file, but received ${positional.length}: ${positional.join(", ")}`);
142
+ }
143
+ return {
144
+ action: "run",
145
+ inputPath: positional[0],
146
+ watch,
147
+ open,
148
+ theme,
149
+ format,
150
+ fontSizePx,
151
+ port,
152
+ };
153
+ }
154
+ export function helpText() {
155
+ return `pandoc-glance ${VERSION}
156
+
157
+ High-fidelity Markdown and LaTeX preview in your default browser.
158
+
159
+ Usage:
160
+ pandoc-glance [options] <file>
161
+ pandoc-glance --watch [options] <file>
162
+ pandoc-glance <file> --watch
163
+
164
+ Options:
165
+ -w, --watch Watch the file and refresh the existing browser tab
166
+ --no-open Do not launch a browser; print the path or URL
167
+ --theme <mode> auto, light, or dark (default: auto)
168
+ --format <format> auto, markdown, or latex (default: auto)
169
+ --font-size <px> Base font size, ${MIN_FONT_SIZE_PX}-${MAX_FONT_SIZE_PX} (default: ${DEFAULT_FONT_SIZE_PX})
170
+ --port <number> Watch-server port; 0 chooses an available port (default: 0)
171
+ -h, --help Show this help
172
+ -v, --version Show the version
173
+
174
+ Pandoc is required. Set PANDOC_PATH to use a non-default Pandoc binary.
175
+ Watch mode is save-based: it sees changes written to disk, not unsaved editor buffers.`;
176
+ }
177
+ async function validateInputFile(inputPath) {
178
+ let metadata;
179
+ try {
180
+ metadata = await stat(inputPath);
181
+ }
182
+ catch (error) {
183
+ const systemError = error;
184
+ if (systemError.code === "ENOENT")
185
+ throw new Error(`Input file does not exist: ${inputPath}`);
186
+ throw new Error(`Cannot access input file ${inputPath}: ${systemError.message}`, { cause: error });
187
+ }
188
+ if (!metadata.isFile())
189
+ throw new Error(`Input path is not a regular file: ${inputPath}`);
190
+ }
191
+ function cacheDirectory() {
192
+ const xdgCache = process.env.XDG_CACHE_HOME?.trim();
193
+ if (xdgCache)
194
+ return join(xdgCache, "pandoc-glance");
195
+ if (process.platform === "darwin")
196
+ return join(homedir(), "Library", "Caches", "pandoc-glance");
197
+ return join(homedir(), ".cache", "pandoc-glance");
198
+ }
199
+ async function pruneCache(directory, keepPath) {
200
+ let entries;
201
+ try {
202
+ entries = await readdir(directory, { withFileTypes: true });
203
+ }
204
+ catch {
205
+ return;
206
+ }
207
+ const htmlFiles = await Promise.all(entries
208
+ .filter((entry) => entry.isFile() && entry.name.endsWith(".html"))
209
+ .map(async (entry) => {
210
+ const filePath = join(directory, entry.name);
211
+ const metadata = await stat(filePath).catch(() => null);
212
+ return metadata ? { filePath, modified: metadata.mtimeMs } : null;
213
+ }));
214
+ const sorted = htmlFiles
215
+ .filter((entry) => entry !== null)
216
+ .sort((left, right) => right.modified - left.modified);
217
+ await Promise.all(sorted.slice(30).map(async (entry) => {
218
+ if (entry.filePath !== keepPath)
219
+ await unlink(entry.filePath).catch(() => undefined);
220
+ }));
221
+ }
222
+ async function writeOneShotHtml(inputPath, html, options) {
223
+ const directory = cacheDirectory();
224
+ await mkdir(directory, { recursive: true });
225
+ const key = createHash("sha256")
226
+ .update(resolve(inputPath))
227
+ .update("\0")
228
+ .update(options.theme)
229
+ .update("\0")
230
+ .update(options.format)
231
+ .update("\0")
232
+ .update(String(options.fontSizePx))
233
+ .digest("hex")
234
+ .slice(0, 24);
235
+ const outputPath = join(directory, `${key}.html`);
236
+ const temporaryPath = join(directory, `.${key}.${process.pid}.${randomBytes(4).toString("hex")}.tmp`);
237
+ await writeFile(temporaryPath, html, "utf8");
238
+ await rename(temporaryPath, outputPath);
239
+ await pruneCache(directory, outputPath);
240
+ return outputPath;
241
+ }
242
+ async function waitForShutdown(session) {
243
+ await new Promise((resolvePromise) => {
244
+ let shuttingDown = false;
245
+ const onInterrupt = () => shutdown("SIGINT");
246
+ const onTerminate = () => shutdown("SIGTERM");
247
+ const shutdown = (signal) => {
248
+ if (shuttingDown)
249
+ return;
250
+ shuttingDown = true;
251
+ process.off("SIGINT", onInterrupt);
252
+ process.off("SIGTERM", onTerminate);
253
+ process.stderr.write(`\nReceived ${signal}; shutting down preview server…\n`);
254
+ void session.close().then(resolvePromise, resolvePromise);
255
+ };
256
+ process.once("SIGINT", onInterrupt);
257
+ process.once("SIGTERM", onTerminate);
258
+ });
259
+ }
260
+ async function runOneShot(options, inputPath) {
261
+ const format = detectFormat(inputPath, options.format);
262
+ const source = await readFile(inputPath, "utf8");
263
+ const rendered = await renderDocument({
264
+ source,
265
+ sourcePath: inputPath,
266
+ resourceRoot: dirname(inputPath),
267
+ format,
268
+ theme: options.theme,
269
+ fontSizePx: options.fontSizePx,
270
+ title: `${basename(inputPath)} — pandoc-glance`,
271
+ });
272
+ for (const warning of rendered.pandocWarnings)
273
+ process.stderr.write(`Pandoc: ${warning}\n`);
274
+ const outputPath = await writeOneShotHtml(inputPath, rendered.html, options);
275
+ process.stdout.write(`HTML: ${outputPath}\n`);
276
+ if (options.open)
277
+ await openInDefaultBrowser(pathToFileURL(outputPath).href);
278
+ return 0;
279
+ }
280
+ async function runWatch(options, inputPath) {
281
+ const format = detectFormat(inputPath, options.format);
282
+ let recovered = false;
283
+ const session = await startWatchPreview({
284
+ inputPath,
285
+ format,
286
+ theme: options.theme,
287
+ fontSizePx: options.fontSizePx,
288
+ port: options.port,
289
+ onLog: (message, level) => {
290
+ const stream = level === "info" ? process.stdout : process.stderr;
291
+ stream.write(`${message}\n`);
292
+ },
293
+ onStatus: (status) => {
294
+ if (status.status === "success" && status.revision > 1)
295
+ recovered = true;
296
+ },
297
+ });
298
+ process.stdout.write(`Watching: ${inputPath}\n`);
299
+ process.stdout.write(`Preview URL: ${session.url}\n`);
300
+ process.stdout.write("Updates are save-based; unsaved editor buffers are not visible.\n");
301
+ if (session.initialError) {
302
+ process.stderr.write(`Initial render failed; watch mode remains active for recovery: ${session.initialError}\n`);
303
+ }
304
+ try {
305
+ if (options.open)
306
+ await openInDefaultBrowser(session.url);
307
+ }
308
+ catch (error) {
309
+ await session.close();
310
+ throw error;
311
+ }
312
+ await waitForShutdown(session);
313
+ return session.initialError && !recovered ? 1 : 0;
314
+ }
315
+ export async function runCli(argv) {
316
+ let options;
317
+ try {
318
+ options = parseCliArgs(argv);
319
+ }
320
+ catch (error) {
321
+ const message = error instanceof Error ? error.message : String(error);
322
+ process.stderr.write(`Error: ${message}\n`);
323
+ return 2;
324
+ }
325
+ if (options.action === "help") {
326
+ process.stdout.write(`${helpText()}\n`);
327
+ return 0;
328
+ }
329
+ if (options.action === "version") {
330
+ process.stdout.write(`${VERSION}\n`);
331
+ return 0;
332
+ }
333
+ if (Number(process.versions.node.split(".")[0]) < 22) {
334
+ process.stderr.write(`Error: pandoc-glance requires Node.js 22 or newer (found ${process.version}).\n`);
335
+ return 1;
336
+ }
337
+ const inputPath = resolve(options.inputPath);
338
+ try {
339
+ await validateInputFile(inputPath);
340
+ await assertPandocAvailable();
341
+ return options.watch ? await runWatch(options, inputPath) : await runOneShot(options, inputPath);
342
+ }
343
+ catch (error) {
344
+ process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
345
+ return 1;
346
+ }
347
+ }
348
+ const entryPoint = process.argv[1] ? realpathSync(resolve(process.argv[1])) : "";
349
+ const modulePath = realpathSync(fileURLToPath(import.meta.url));
350
+ if (entryPoint === modulePath) {
351
+ void runCli(process.argv.slice(2)).then((exitCode) => {
352
+ process.exitCode = exitCode;
353
+ });
354
+ }
355
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { DEFAULT_FONT_SIZE_PX, MAX_FONT_SIZE_PX, MIN_FONT_SIZE_PX, VERSION, CliArgumentError, helpText, parseCliArgs, runCli, type CliOptions, } from "./cli.js";
2
+ export { openInDefaultBrowser } from "./browser.js";
3
+ export { PandocError, assertPandocAvailable, buildInitialErrorHtml, buildPreviewHtml, detectFormat, normalizeMarkdownFencedBlocks, normalizeMathDelimiters, normalizeObsidianImages, prepareMarkdownForPandoc, renderDocument, renderPandocFragment, type BuildHtmlOptions, type LiveReloadConfig, type PreviewFormat, type PreviewFormatOption, type RenderDocumentOptions, type RenderDocumentResult, type ServerResourceConfig, } from "./render.js";
4
+ export { PreviewServer, ResourceAccessError, resolveSafeResourcePath, type PreviewServerOptions, type PreviewServerPaths, type PreviewServerState, } from "./server.js";
5
+ export { DARK_PALETTE, LIGHT_PALETTE, buildPreviewCss, type PreviewPalette, type PreviewTheme, } from "./styles.js";
6
+ export { WatchPreviewSession, startWatchPreview, type StartWatchPreviewOptions, type WatchPreviewStatus, type WatchRenderContext, type WatchRenderer, type WatchRenderResult, } from "./watch-preview.js";
7
+ export { DebouncedFileWatcher, type DebouncedFileWatcherOptions } from "./watcher.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,KAAK,UAAU,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { DEFAULT_FONT_SIZE_PX, MAX_FONT_SIZE_PX, MIN_FONT_SIZE_PX, VERSION, CliArgumentError, helpText, parseCliArgs, runCli, } from "./cli.js";
2
+ export { openInDefaultBrowser } from "./browser.js";
3
+ export { PandocError, assertPandocAvailable, buildInitialErrorHtml, buildPreviewHtml, detectFormat, normalizeMarkdownFencedBlocks, normalizeMathDelimiters, normalizeObsidianImages, prepareMarkdownForPandoc, renderDocument, renderPandocFragment, } from "./render.js";
4
+ export { PreviewServer, ResourceAccessError, resolveSafeResourcePath, } from "./server.js";
5
+ export { DARK_PALETTE, LIGHT_PALETTE, buildPreviewCss, } from "./styles.js";
6
+ export { WatchPreviewSession, startWatchPreview, } from "./watch-preview.js";
7
+ export { DebouncedFileWatcher } from "./watcher.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,MAAM,GAEP,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,oBAAoB,GAQrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,uBAAuB,GAIxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,GAGhB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAMlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAoC,MAAM,cAAc,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { type PreviewTheme } from "./styles.js";
2
+ export type PreviewFormat = "markdown" | "latex";
3
+ export type PreviewFormatOption = "auto" | PreviewFormat;
4
+ export interface LiveReloadConfig {
5
+ eventsPath: string;
6
+ revision: number;
7
+ storageKey: string;
8
+ initialError?: string;
9
+ }
10
+ export interface ServerResourceConfig {
11
+ resourcePath: string;
12
+ assetPath: string;
13
+ revision: number;
14
+ }
15
+ export interface RenderDocumentOptions {
16
+ source: string;
17
+ sourcePath: string;
18
+ resourceRoot: string;
19
+ format: PreviewFormat;
20
+ theme: PreviewTheme;
21
+ fontSizePx: number;
22
+ title?: string;
23
+ liveReload?: LiveReloadConfig;
24
+ serverResources?: ServerResourceConfig;
25
+ }
26
+ export interface RenderDocumentResult {
27
+ html: string;
28
+ fragmentHtml: string;
29
+ assets: Map<string, string>;
30
+ pandocWarnings: string[];
31
+ }
32
+ export interface BuildHtmlOptions {
33
+ fragmentHtml: string;
34
+ title: string;
35
+ resourceRoot?: string;
36
+ theme: PreviewTheme;
37
+ fontSizePx: number;
38
+ liveReload?: LiveReloadConfig;
39
+ }
40
+ export declare class PandocError extends Error {
41
+ constructor(message: string, options?: ErrorOptions);
42
+ }
43
+ export declare function detectFormat(filePath: string, requested: PreviewFormatOption): PreviewFormat;
44
+ export declare function assertPandocAvailable(): Promise<void>;
45
+ export declare function normalizeMathDelimiters(markdown: string): string;
46
+ export declare function normalizeObsidianImages(markdown: string): string;
47
+ export declare function normalizeMarkdownFencedBlocks(markdown: string): string;
48
+ export declare function prepareMarkdownForPandoc(markdown: string): string;
49
+ export declare function renderPandocFragment(source: string, format: PreviewFormat, resourceRoot: string): Promise<{
50
+ html: string;
51
+ warnings: string[];
52
+ }>;
53
+ export declare function buildPreviewHtml(options: BuildHtmlOptions): string;
54
+ export declare function buildInitialErrorHtml(options: {
55
+ title: string;
56
+ error: string;
57
+ theme: PreviewTheme;
58
+ fontSizePx: number;
59
+ liveReload: LiveReloadConfig;
60
+ }): string;
61
+ export declare function renderDocument(options: RenderDocumentOptions): Promise<RenderDocumentResult>;
62
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEpF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC;AACjD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,aAAa,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAYD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,GAAG,aAAa,CAW5F;AAkGD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3D;AA6BD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuChE;AAWD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhE;AAWD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwDtE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA0B/C;AA6iBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqBlE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC;CAC9B,GAAG,MAAM,CAST;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0BlG"}