@vedivad/typst-web-service 0.18.2 → 0.18.3
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/index.d.ts +6 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/typsten-worker.js +11 -0
- package/dist/typsten-worker.js.map +1 -1
- package/dist/typsten_bg.wasm +0 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -214,6 +214,12 @@ declare class TypstProject {
|
|
|
214
214
|
* `#set text(font: ...)` expects, instead of parsing the name table yourself.
|
|
215
215
|
*/
|
|
216
216
|
addFont(bytes: Uint8Array): Promise<string[]>;
|
|
217
|
+
/**
|
|
218
|
+
* Drop every font added via `addFont`, resetting to the embedded defaults,
|
|
219
|
+
* then recompile. The engine has no per-font removal, so to remove a font,
|
|
220
|
+
* call this and re-`addFont` the ones to keep.
|
|
221
|
+
*/
|
|
222
|
+
clearFonts(): Promise<void>;
|
|
217
223
|
/**
|
|
218
224
|
* Subscribe to compile results. Late subscribers get `lastResult` synchronously.
|
|
219
225
|
* Returns an unsubscribe function.
|
package/dist/index.js
CHANGED
|
@@ -339,6 +339,15 @@ var TypstProject = class _TypstProject {
|
|
|
339
339
|
this.scheduleCompile();
|
|
340
340
|
return families;
|
|
341
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* Drop every font added via `addFont`, resetting to the embedded defaults,
|
|
344
|
+
* then recompile. The engine has no per-font removal, so to remove a font,
|
|
345
|
+
* call this and re-`addFont` the ones to keep.
|
|
346
|
+
*/
|
|
347
|
+
async clearFonts() {
|
|
348
|
+
await this.engine.clearFonts();
|
|
349
|
+
this.scheduleCompile();
|
|
350
|
+
}
|
|
342
351
|
/**
|
|
343
352
|
* Subscribe to compile results. Late subscribers get `lastResult` synchronously.
|
|
344
353
|
* Returns an unsubscribe function.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/coords.ts","../src/identifiers.ts","../src/project.ts","../src/compile-scheduler.ts","../src/packages.ts"],"sourcesContent":["// typsten speaks UTF-8 byte offsets; CodeMirror/JS strings speak UTF-16 code\n// units. These convert between the two at code-point boundaries (where all\n// engine offsets land).\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n/** UTF-16 string offset (CodeMirror position) -> UTF-8 byte offset (typsten). */\nexport function cmOffsetToByte(text: string, offset: number): number {\n return encoder.encode(text.slice(0, offset)).length;\n}\n\n/** UTF-8 byte offset (typsten) -> UTF-16 string offset (CodeMirror position). */\nexport function byteToCmOffset(text: string, byte: number): number {\n if (byte <= 0) return 0;\n const bytes = encoder.encode(text);\n if (byte >= bytes.length) return text.length;\n return decoder.decode(bytes.subarray(0, byte)).length;\n}\n\n/** Whether `text` has any non-ASCII code unit (byte offset != UTF-16 offset). */\nfunction hasNonAscii(text: string): boolean {\n for (let i = 0; i < text.length; i++) {\n if (text.charCodeAt(i) > 0x7f) return true;\n }\n return false;\n}\n\n/** UTF-8 length in bytes of a Unicode code point. */\nfunction utf8Len(codePoint: number): number {\n if (codePoint < 0x80) return 1;\n if (codePoint < 0x800) return 2;\n if (codePoint < 0x10000) return 3;\n return 4;\n}\n\n/**\n * Map a batch of offsets from one coordinate space to the other in a single pass\n * over `text`, walking both running positions (`key` = input space, `val` =\n * output space) one code point at a time. `keyStep`/`valStep` give each space's\n * advance per code point. Input may be in any order (nested highlight spans\n * produce non-monotonic boundaries); the result is aligned with the input, and\n * offsets past the end clamp to the output length. Pure-ASCII text (where the\n * two spaces coincide) short-circuits to identity.\n */\nfunction mapOffsets(\n text: string,\n offsets: number[],\n keyStep: (codePoint: number, ch: string) => number,\n valStep: (codePoint: number, ch: string) => number,\n): number[] {\n if (offsets.length === 0 || !hasNonAscii(text)) return offsets;\n\n // Walk in ascending input order, but remember each offset's original slot.\n const order = offsets.map((offset, i) => [offset, i] as const);\n order.sort((a, b) => a[0] - b[0]);\n\n const out = new Array<number>(offsets.length);\n let key = 0;\n let val = 0;\n let next = 0;\n const flush = () => {\n while (next < order.length && order[next][0] <= key)\n out[order[next++][1]] = val;\n };\n flush(); // offsets at position 0\n for (const ch of text) {\n if (next >= order.length) break;\n const cp = ch.codePointAt(0)!;\n key += keyStep(cp, ch);\n val += valStep(cp, ch);\n flush();\n }\n // Past the end: the loop ran to completion, so `val` is the full output length.\n while (next < order.length) out[order[next++][1]] = val;\n return out;\n}\n\n/**\n * Convert a batch of UTF-8 byte offsets to UTF-16 (CodeMirror) offsets in one\n * pass. Unlike `byteToCmOffset` (which re-encodes a prefix per call, so N\n * offsets cost O(N * len)), this is O(len + N log N). Used to map highlight span\n * boundaries back to editor coordinates.\n */\nexport function byteOffsetsToCm(text: string, offsets: number[]): number[] {\n return mapOffsets(\n text,\n offsets,\n (cp) => utf8Len(cp),\n (_cp, ch) => ch.length,\n );\n}\n\n/**\n * Convert a batch of UTF-16 (CodeMirror) offsets to UTF-8 byte offsets in one\n * pass. The batched, ASCII-fast-path counterpart to `cmOffsetToByte` (which\n * re-encodes a prefix per call). Used for the highlight viewport bounds.\n */\nexport function cmOffsetsToByte(text: string, offsets: number[]): number[] {\n return mapOffsets(\n text,\n offsets,\n (_cp, ch) => ch.length,\n (cp) => utf8Len(cp),\n );\n}\n","/**\n * Project file paths. `/main.typ` form, leading slash, forward slashes only.\n * `@preview/...` package paths bypass this (they are pushed to the VFS verbatim).\n */\n\n/** `/path/to/file.typ`, leading-slash, forward slashes only. */\nexport type Path = string;\n\n/** Ensure a path starts with a leading slash. Idempotent. */\nexport function normalizePath(path: string): Path {\n return path.startsWith(\"/\") ? path : `/${path}`;\n}\n","import * as Comlink from \"comlink\";\nimport type { Remote } from \"comlink\";\nimport { CompileScheduler } from \"./compile-scheduler.js\";\nimport { byteOffsetsToCm, cmOffsetsToByte, cmOffsetToByte } from \"./coords.js\";\nimport { normalizePath, type Path } from \"./identifiers.js\";\nimport { createPackageLoader, type PackageLoader } from \"./packages.js\";\nimport type {\n CompileResult,\n CompletionResponse,\n HlSpan,\n Hover,\n RenderedSvgPage,\n} from \"./types.js\";\nimport type { TypstenWorkerApi } from \"./typsten-worker.js\";\n\nexport interface TypstProjectCreateOptions {\n /** Default entry file path. Default: \"/main.typ\". */\n entry?: string;\n /** Auto-compile scheduling after VFS mutations. */\n autoCompile?: AutoCompileOptions;\n}\n\nexport interface AutoCompileOptions {\n /** Idle time (ms) after the last mutation before a compile fires. Default: 0. */\n debounceMs?: number;\n /** Max time (ms) the debounce may defer during sustained edits. Default: 0. */\n maxWaitMs?: number;\n}\n\nexport type CompileListener = (result: CompileResult) => void;\n\nconst DEFAULT_ENTRY = \"/main.typ\";\nconst encoder = new TextEncoder();\n\nfunction errorAsCompileResult(err: unknown): CompileResult {\n const message = err instanceof Error ? err.message : String(err);\n return {\n pages: [],\n diagnostics: [\n { severity: \"error\", message, hints: [], location: undefined },\n ],\n };\n}\n\nfunction toBytes(content: ArrayBuffer | ArrayBufferView): Uint8Array {\n if (content instanceof Uint8Array) return content;\n if (ArrayBuffer.isView(content)) {\n return new Uint8Array(\n content.buffer,\n content.byteOffset,\n content.byteLength,\n );\n }\n return new Uint8Array(content);\n}\n\n/**\n * Multi-file Typst project backed by a single typsten wasm worker. Owns the\n * VFS; editors push `setText` edits as the user types; the project mirrors them\n * to the worker, fetches `@preview` packages on demand, and compiles or renders\n * against the current state.\n *\n * const project = await TypstProject.create();\n * await project.setMany({ \"/main.typ\": \"...\" });\n * const { pages } = await project.compile();\n * const svg = await project.renderPage(0);\n */\nexport class TypstProject {\n /**\n * Tracked project files: the text content for a text file, or `null` for a\n * binary one. Drives dedup, `getText`, `files`, and `clear`. (Cached `@preview`\n * package files live only in the worker VFS, never here.)\n */\n private readonly tracked = new Map<Path, string | null>();\n private readonly compileListeners = new Set<CompileListener>();\n private readonly scheduler: CompileScheduler;\n private readonly packageLoader: PackageLoader;\n private compileVersion = 0;\n private _lastResult: CompileResult | undefined;\n private _entry: Path;\n private destroyed = false;\n\n private constructor(\n private readonly engine: Remote<TypstenWorkerApi>,\n private readonly worker: Worker,\n options: TypstProjectCreateOptions,\n ) {\n this._entry = normalizePath(options.entry ?? DEFAULT_ENTRY);\n this.scheduler = new CompileScheduler({\n debounceMs: options.autoCompile?.debounceMs,\n maxWaitMs: options.autoCompile?.maxWaitMs,\n });\n this.packageLoader = createPackageLoader((path, bytes) =>\n this.engine.setFile(path, bytes),\n );\n }\n\n /** Create a project: spin up the worker, init the wasm, set the entry. */\n static async create(\n options: TypstProjectCreateOptions = {},\n ): Promise<TypstProject> {\n const worker = new Worker(new URL(\"./typsten-worker.js\", import.meta.url), {\n type: \"module\",\n });\n const engine = Comlink.wrap<TypstenWorkerApi>(worker);\n\n const wasmUrl = new URL(\"./typsten_bg.wasm\", import.meta.url).href;\n await engine.init(wasmUrl);\n\n const project = new TypstProject(engine, worker, options);\n await engine.setEntry(project._entry);\n\n return project;\n }\n\n private scheduleCompile(): void {\n if (this.destroyed) return;\n this.scheduler.schedule(() => {\n this.compile().catch((err) => console.error(\"[typst]\", err));\n });\n }\n\n /**\n * Mirror text into the VFS without scheduling a compile. Returns the in-flight\n * write to await, or `null` if the content is unchanged (deduped to a no-op).\n */\n private writeText(p: Path, content: string): Promise<unknown> | null {\n if (this.tracked.get(p) === content) return null;\n this.tracked.set(p, content);\n return this.engine.setFile(p, encoder.encode(content));\n }\n\n /** Mirror binary bytes into the VFS (always writes; binaries are not deduped). */\n private writeBinary(p: Path, bytes: Uint8Array): Promise<unknown> {\n this.tracked.set(p, null);\n return this.engine.setFile(p, bytes);\n }\n\n get entry(): Path {\n return this._entry;\n }\n\n set entry(path: Path) {\n const next = normalizePath(path);\n if (next === this._entry) return;\n this._entry = next;\n void this.engine.setEntry(next);\n this.scheduleCompile();\n }\n\n /** Most recent compile result, or `undefined` before the first compile. */\n get lastResult(): CompileResult | undefined {\n return this._lastResult;\n }\n\n /** Tracked text file paths, in insertion order (fresh array). */\n get files(): Path[] {\n return [...this.tracked]\n .filter(([, content]) => content !== null)\n .map(([path]) => path);\n }\n\n /** Current text for a tracked file, or `undefined` (binary or absent). */\n getText(path: Path): string | undefined {\n return this.tracked.get(normalizePath(path)) ?? undefined;\n }\n\n /** Add or overwrite a text file. No-op if unchanged. */\n async setText(path: Path, content: string): Promise<void> {\n const write = this.writeText(normalizePath(path), content);\n if (write) {\n await write;\n this.scheduleCompile();\n }\n }\n\n /** Add or overwrite a binary file (retires any text tracking for the path). */\n async setBinary(\n path: Path,\n content: ArrayBuffer | ArrayBufferView,\n ): Promise<void> {\n await this.writeBinary(normalizePath(path), toBytes(content));\n this.scheduleCompile();\n }\n\n /** Batch set files. Strings dedup against tracked content; binaries always write. */\n async setMany(files: Record<Path, string | Uint8Array>): Promise<void> {\n const writes: Promise<unknown>[] = [];\n for (const [path, content] of Object.entries(files)) {\n const p = normalizePath(path);\n const write =\n typeof content === \"string\"\n ? this.writeText(p, content)\n : this.writeBinary(p, content);\n if (write) writes.push(write);\n }\n if (writes.length === 0) return;\n await Promise.all(writes);\n this.scheduleCompile();\n }\n\n /** Remove a file from the VFS. */\n async remove(path: Path): Promise<void> {\n const p = normalizePath(path);\n await this.engine.remove(p);\n this.tracked.delete(p);\n this.scheduleCompile();\n }\n\n /** Remove all tracked project files (cached `@preview` packages are kept). */\n async clear(): Promise<void> {\n await Promise.all(\n [...this.tracked.keys()].map((p) => this.engine.remove(p)),\n );\n this.tracked.clear();\n this.scheduleCompile();\n }\n\n /**\n * Register a font (TTF/OTF, or TTC collection bytes) so compilation can use\n * it, then recompile. The engine bundles default body, math, and monospace\n * fonts; use this to add families it does not ship (e.g. CJK or a custom\n * font). Fonts persist for the project's lifetime.\n *\n * Returns the canonical family name of each added face, the name Typst\n * groups and matches by (width/weight/style folded into the variant, so e.g.\n * \"Roboto Condensed\" reports as \"Roboto\"). Use it to label the font the way\n * `#set text(font: ...)` expects, instead of parsing the name table yourself.\n */\n async addFont(bytes: Uint8Array): Promise<string[]> {\n const families = await this.engine.addFont(bytes);\n this.scheduleCompile();\n return families;\n }\n\n /**\n * Subscribe to compile results. Late subscribers get `lastResult` synchronously.\n * Returns an unsubscribe function.\n */\n onCompile(listener: CompileListener): () => void {\n this.compileListeners.add(listener);\n if (this._lastResult !== undefined) {\n try {\n listener(this._lastResult);\n } catch (err) {\n console.error(\"[typst] compile listener threw:\", err);\n }\n }\n return () => {\n this.compileListeners.delete(listener);\n };\n }\n\n /**\n * Compile the current VFS state. Fetches any referenced `@preview` packages\n * first. Errors become a synthetic diagnostic. Listeners fire only for the\n * most recent compile (stale results are dropped).\n */\n async compile(): Promise<CompileResult> {\n this.scheduler.cancel();\n const version = ++this.compileVersion;\n let result: CompileResult;\n try {\n await this.packageLoader.ensure(\n [...this.tracked.values()].filter((v): v is string => v !== null),\n );\n result = await this.engine.compile();\n } catch (err) {\n result = errorAsCompileResult(err);\n }\n if (version === this.compileVersion) {\n this._lastResult = result;\n for (const listener of this.compileListeners) {\n try {\n listener(result);\n } catch (err) {\n console.error(\"[typst] compile listener threw:\", err);\n }\n }\n }\n return result;\n }\n\n /** Render a single page of the last compile to SVG, or `undefined`. */\n renderPage(index: number): Promise<string | undefined> {\n return this.engine.renderPage(index);\n }\n\n /**\n * Render pages `[start, end)` as `RenderedSvgPage`s (index + dims + svg),\n * zipping the SVG strings with the page metadata from the last compile.\n */\n async renderedPages(start: number, end: number): Promise<RenderedSvgPage[]> {\n const pages = this._lastResult?.pages ?? [];\n const svgs = await this.engine.renderPages(start, end);\n return svgs.map((svg, i) => {\n const index = start + i;\n const dims = pages[index];\n return {\n index,\n width: dims?.width ?? 0,\n height: dims?.height ?? 0,\n svg,\n };\n });\n }\n\n /**\n * Export the last compile as a PDF, or `undefined` if nothing has compiled\n * yet. The bytes are a fresh `Uint8Array` (copied across the worker boundary).\n */\n exportPdf(): Promise<Uint8Array | undefined> {\n return this.engine.exportPdf();\n }\n\n /** Completions at a CodeMirror `offset` in `path`, using `source` as the live buffer. */\n async completion(\n path: Path,\n source: string,\n offset: number,\n explicit = false,\n ): Promise<CompletionResponse | undefined> {\n const p = normalizePath(path);\n await this.writeText(p, source);\n return this.engine.complete(p, cmOffsetToByte(source, offset), explicit);\n }\n\n /** Hover tooltip at a CodeMirror `offset` in `path`, using `source` as the live buffer. */\n async hover(\n path: Path,\n source: string,\n offset: number,\n ): Promise<Hover | undefined> {\n const p = normalizePath(path);\n await this.writeText(p, source);\n return this.engine.hover(p, cmOffsetToByte(source, offset));\n }\n\n /** Format `source` (the live buffer for `path`); returns the formatted text or `undefined`. */\n async format(path: Path, source: string): Promise<string | undefined> {\n const p = normalizePath(path);\n await this.writeText(p, source);\n return this.engine.format(p);\n }\n\n /**\n * Syntax-highlight `source` over the CodeMirror window `[from, to)` (UTF-16\n * offsets; defaults to the whole string). Returns spans whose `from`/`to` are\n * CodeMirror offsets, ready to drive decorations. Stateless: the worker parses\n * `source` directly via typst-syntax, so this neither reads nor mutates the\n * VFS and works for any text (the live buffer, a hover code snippet).\n */\n async highlight(\n source: string,\n from = 0,\n to = source.length,\n ): Promise<HlSpan[]> {\n const [byteFrom, byteTo] = cmOffsetsToByte(source, [from, to]);\n const spans = await this.engine.highlight(source, byteFrom, byteTo);\n if (spans.length === 0) return spans;\n // The worker speaks UTF-8 bytes; map every span boundary back to UTF-16\n // (CodeMirror) offsets in one pass over the source. Boundaries are not\n // monotonic (nested spans wrap inner ones), so byteOffsetsToCm sorts them.\n const cm = byteOffsetsToCm(\n source,\n spans.flatMap((s) => [s.from, s.to]),\n );\n return spans.map((s, i) => ({\n from: cm[i * 2],\n to: cm[i * 2 + 1],\n tag: s.tag,\n }));\n }\n\n /**\n * Syntax-highlight `source` to nested `<span class=\"typ-*\">` HTML for a static\n * context (e.g. a hover tooltip). Stateless, like `highlight`.\n */\n highlightHtml(source: string): Promise<string> {\n return this.engine.highlightHtml(source);\n }\n\n /** Tear down the worker and drop all state. Idempotent. */\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.scheduler.cancel();\n this.compileListeners.clear();\n this.tracked.clear();\n this._lastResult = undefined;\n this.engine[Comlink.releaseProxy]();\n this.worker.terminate();\n }\n}\n","interface CompileSchedulerOptions {\n /** Minimum idle time (ms) after the last request before firing. Default: 0. */\n debounceMs?: number;\n /**\n * Maximum time (ms) the debounce may keep deferring during continuous\n * requests. Guarantees a fire at least this often so users see progress\n * while typing. Default: 0 (no cap).\n */\n maxWaitMs?: number;\n}\n\n/**\n * Debounce helper with a max-wait ceiling for coalescing compile requests. A\n * burst of `schedule(cb)` calls within `debounceMs` collapses into one fire;\n * during sustained bursts, `maxWaitMs` caps how long the debounce may keep\n * deferring.\n */\nexport class CompileScheduler {\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private maxWaitTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private readonly options: CompileSchedulerOptions = {}) {}\n\n schedule(callback: () => void): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n\n const delay = Math.max(0, this.options.debounceMs ?? 0);\n this.debounceTimer = setTimeout(() => {\n this.debounceTimer = null;\n this.clearMaxWait();\n callback();\n }, delay);\n\n const maxWait = this.options.maxWaitMs;\n if (maxWait != null && maxWait > 0 && !this.maxWaitTimer) {\n this.maxWaitTimer = setTimeout(() => {\n this.maxWaitTimer = null;\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n callback();\n }\n }, maxWait);\n }\n }\n\n /** Cancel any pending scheduled fire without calling the callback. */\n cancel(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n this.clearMaxWait();\n }\n\n private clearMaxWait(): void {\n if (this.maxWaitTimer) {\n clearTimeout(this.maxWaitTimer);\n this.maxWaitTimer = null;\n }\n }\n}\n","// typsten resolves `@preview` packages from its in-memory VFS but does no I/O.\n// This is the JS side: scan sources for `@preview` imports, fetch the tarball\n// from the registry, unpack it, and push every member into the VFS. A package's\n// own sources may import further `@preview` packages, so after unpacking we scan\n// the fetched `.typ` files and follow those transitive imports to a fixed point.\n// (The eager import-scanner approach; a lazy JSPI fetch is a future typsten\n// milestone that would let the engine drive resolution instead.)\nimport { gunzipSync } from \"fflate\";\nimport { parseTar } from \"nanotar\";\n\nconst REGISTRY = \"https://packages.typst.org/preview\";\nconst PREVIEW_IMPORT = /@preview\\/([a-zA-Z0-9_-]+):(\\d+\\.\\d+\\.\\d+)/g;\n\nexport type SetFile = (path: string, bytes: Uint8Array) => Promise<void> | void;\n\nexport interface PackageLoader {\n /**\n * Ensure every `@preview` package referenced in `sources`, and transitively\n * by the packages they pull in, is present in the VFS, fetching any missing.\n */\n ensure(sources: Iterable<string>): Promise<void>;\n}\n\n/** Collect the `name:version` spec of every `@preview` import in `text`. */\nfunction specsIn(text: string): string[] {\n const specs: string[] = [];\n for (const m of text.matchAll(PREVIEW_IMPORT)) specs.push(`${m[1]}:${m[2]}`);\n return specs;\n}\n\nexport function createPackageLoader(setFile: SetFile): PackageLoader {\n const decoder = new TextDecoder();\n // spec (\"name:version\") -> the transitive specs found inside that package.\n // Doubles as the fetch cache: a settled entry means the package is resident.\n const fetched = new Map<string, Promise<string[]>>();\n\n async function fetchPackage(spec: string): Promise<string[]> {\n const [name, version] = spec.split(\":\");\n const qualified = `@preview/${spec}`;\n const res = await fetch(`${REGISTRY}/${name}-${version}.tar.gz`);\n if (!res.ok) {\n throw new Error(\n `failed to fetch ${qualified}: ${res.status} ${res.statusText}`,\n );\n }\n const tar = gunzipSync(new Uint8Array(await res.arrayBuffer()));\n const nested = new Set<string>();\n for (const entry of parseTar(tar)) {\n // Skip directories and anything without bytes.\n if (!entry.data || entry.name.endsWith(\"/\")) continue;\n await setFile(`${qualified}/${entry.name}`, entry.data);\n // A package's own `.typ` sources may import further `@preview` packages.\n if (entry.name.endsWith(\".typ\")) {\n for (const s of specsIn(decoder.decode(entry.data))) nested.add(s);\n }\n }\n return [...nested];\n }\n\n function fetchOnce(spec: string): Promise<string[]> {\n let task = fetched.get(spec);\n if (!task) {\n task = fetchPackage(spec).catch((err: unknown) => {\n // Drop failed fetches so a later compile can retry (transient network).\n fetched.delete(spec);\n throw err;\n });\n fetched.set(spec, task);\n }\n return task;\n }\n\n return {\n async ensure(sources) {\n const seen = new Set<string>();\n let frontier = new Set<string>();\n for (const text of sources) {\n for (const s of specsIn(text)) frontier.add(s);\n }\n // Breadth-first fetch to a fixed point; each package can reveal more.\n while (frontier.size > 0) {\n const batch = [...frontier].filter((s) => !seen.has(s));\n for (const s of batch) seen.add(s);\n frontier = new Set();\n const nestedLists = await Promise.all(batch.map(fetchOnce));\n for (const list of nestedLists) {\n for (const s of list) if (!seen.has(s)) frontier.add(s);\n }\n }\n },\n };\n}\n"],"mappings":"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","names":["decoder","encoder"]}
|
|
1
|
+
{"version":3,"sources":["../src/coords.ts","../src/identifiers.ts","../src/project.ts","../src/compile-scheduler.ts","../src/packages.ts"],"sourcesContent":["// typsten speaks UTF-8 byte offsets; CodeMirror/JS strings speak UTF-16 code\n// units. These convert between the two at code-point boundaries (where all\n// engine offsets land).\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n/** UTF-16 string offset (CodeMirror position) -> UTF-8 byte offset (typsten). */\nexport function cmOffsetToByte(text: string, offset: number): number {\n return encoder.encode(text.slice(0, offset)).length;\n}\n\n/** UTF-8 byte offset (typsten) -> UTF-16 string offset (CodeMirror position). */\nexport function byteToCmOffset(text: string, byte: number): number {\n if (byte <= 0) return 0;\n const bytes = encoder.encode(text);\n if (byte >= bytes.length) return text.length;\n return decoder.decode(bytes.subarray(0, byte)).length;\n}\n\n/** Whether `text` has any non-ASCII code unit (byte offset != UTF-16 offset). */\nfunction hasNonAscii(text: string): boolean {\n for (let i = 0; i < text.length; i++) {\n if (text.charCodeAt(i) > 0x7f) return true;\n }\n return false;\n}\n\n/** UTF-8 length in bytes of a Unicode code point. */\nfunction utf8Len(codePoint: number): number {\n if (codePoint < 0x80) return 1;\n if (codePoint < 0x800) return 2;\n if (codePoint < 0x10000) return 3;\n return 4;\n}\n\n/**\n * Map a batch of offsets from one coordinate space to the other in a single pass\n * over `text`, walking both running positions (`key` = input space, `val` =\n * output space) one code point at a time. `keyStep`/`valStep` give each space's\n * advance per code point. Input may be in any order (nested highlight spans\n * produce non-monotonic boundaries); the result is aligned with the input, and\n * offsets past the end clamp to the output length. Pure-ASCII text (where the\n * two spaces coincide) short-circuits to identity.\n */\nfunction mapOffsets(\n text: string,\n offsets: number[],\n keyStep: (codePoint: number, ch: string) => number,\n valStep: (codePoint: number, ch: string) => number,\n): number[] {\n if (offsets.length === 0 || !hasNonAscii(text)) return offsets;\n\n // Walk in ascending input order, but remember each offset's original slot.\n const order = offsets.map((offset, i) => [offset, i] as const);\n order.sort((a, b) => a[0] - b[0]);\n\n const out = new Array<number>(offsets.length);\n let key = 0;\n let val = 0;\n let next = 0;\n const flush = () => {\n while (next < order.length && order[next][0] <= key)\n out[order[next++][1]] = val;\n };\n flush(); // offsets at position 0\n for (const ch of text) {\n if (next >= order.length) break;\n const cp = ch.codePointAt(0)!;\n key += keyStep(cp, ch);\n val += valStep(cp, ch);\n flush();\n }\n // Past the end: the loop ran to completion, so `val` is the full output length.\n while (next < order.length) out[order[next++][1]] = val;\n return out;\n}\n\n/**\n * Convert a batch of UTF-8 byte offsets to UTF-16 (CodeMirror) offsets in one\n * pass. Unlike `byteToCmOffset` (which re-encodes a prefix per call, so N\n * offsets cost O(N * len)), this is O(len + N log N). Used to map highlight span\n * boundaries back to editor coordinates.\n */\nexport function byteOffsetsToCm(text: string, offsets: number[]): number[] {\n return mapOffsets(\n text,\n offsets,\n (cp) => utf8Len(cp),\n (_cp, ch) => ch.length,\n );\n}\n\n/**\n * Convert a batch of UTF-16 (CodeMirror) offsets to UTF-8 byte offsets in one\n * pass. The batched, ASCII-fast-path counterpart to `cmOffsetToByte` (which\n * re-encodes a prefix per call). Used for the highlight viewport bounds.\n */\nexport function cmOffsetsToByte(text: string, offsets: number[]): number[] {\n return mapOffsets(\n text,\n offsets,\n (_cp, ch) => ch.length,\n (cp) => utf8Len(cp),\n );\n}\n","/**\n * Project file paths. `/main.typ` form, leading slash, forward slashes only.\n * `@preview/...` package paths bypass this (they are pushed to the VFS verbatim).\n */\n\n/** `/path/to/file.typ`, leading-slash, forward slashes only. */\nexport type Path = string;\n\n/** Ensure a path starts with a leading slash. Idempotent. */\nexport function normalizePath(path: string): Path {\n return path.startsWith(\"/\") ? path : `/${path}`;\n}\n","import * as Comlink from \"comlink\";\nimport type { Remote } from \"comlink\";\nimport { CompileScheduler } from \"./compile-scheduler.js\";\nimport { byteOffsetsToCm, cmOffsetsToByte, cmOffsetToByte } from \"./coords.js\";\nimport { normalizePath, type Path } from \"./identifiers.js\";\nimport { createPackageLoader, type PackageLoader } from \"./packages.js\";\nimport type {\n CompileResult,\n CompletionResponse,\n HlSpan,\n Hover,\n RenderedSvgPage,\n} from \"./types.js\";\nimport type { TypstenWorkerApi } from \"./typsten-worker.js\";\n\nexport interface TypstProjectCreateOptions {\n /** Default entry file path. Default: \"/main.typ\". */\n entry?: string;\n /** Auto-compile scheduling after VFS mutations. */\n autoCompile?: AutoCompileOptions;\n}\n\nexport interface AutoCompileOptions {\n /** Idle time (ms) after the last mutation before a compile fires. Default: 0. */\n debounceMs?: number;\n /** Max time (ms) the debounce may defer during sustained edits. Default: 0. */\n maxWaitMs?: number;\n}\n\nexport type CompileListener = (result: CompileResult) => void;\n\nconst DEFAULT_ENTRY = \"/main.typ\";\nconst encoder = new TextEncoder();\n\nfunction errorAsCompileResult(err: unknown): CompileResult {\n const message = err instanceof Error ? err.message : String(err);\n return {\n pages: [],\n diagnostics: [\n { severity: \"error\", message, hints: [], location: undefined },\n ],\n };\n}\n\nfunction toBytes(content: ArrayBuffer | ArrayBufferView): Uint8Array {\n if (content instanceof Uint8Array) return content;\n if (ArrayBuffer.isView(content)) {\n return new Uint8Array(\n content.buffer,\n content.byteOffset,\n content.byteLength,\n );\n }\n return new Uint8Array(content);\n}\n\n/**\n * Multi-file Typst project backed by a single typsten wasm worker. Owns the\n * VFS; editors push `setText` edits as the user types; the project mirrors them\n * to the worker, fetches `@preview` packages on demand, and compiles or renders\n * against the current state.\n *\n * const project = await TypstProject.create();\n * await project.setMany({ \"/main.typ\": \"...\" });\n * const { pages } = await project.compile();\n * const svg = await project.renderPage(0);\n */\nexport class TypstProject {\n /**\n * Tracked project files: the text content for a text file, or `null` for a\n * binary one. Drives dedup, `getText`, `files`, and `clear`. (Cached `@preview`\n * package files live only in the worker VFS, never here.)\n */\n private readonly tracked = new Map<Path, string | null>();\n private readonly compileListeners = new Set<CompileListener>();\n private readonly scheduler: CompileScheduler;\n private readonly packageLoader: PackageLoader;\n private compileVersion = 0;\n private _lastResult: CompileResult | undefined;\n private _entry: Path;\n private destroyed = false;\n\n private constructor(\n private readonly engine: Remote<TypstenWorkerApi>,\n private readonly worker: Worker,\n options: TypstProjectCreateOptions,\n ) {\n this._entry = normalizePath(options.entry ?? DEFAULT_ENTRY);\n this.scheduler = new CompileScheduler({\n debounceMs: options.autoCompile?.debounceMs,\n maxWaitMs: options.autoCompile?.maxWaitMs,\n });\n this.packageLoader = createPackageLoader((path, bytes) =>\n this.engine.setFile(path, bytes),\n );\n }\n\n /** Create a project: spin up the worker, init the wasm, set the entry. */\n static async create(\n options: TypstProjectCreateOptions = {},\n ): Promise<TypstProject> {\n const worker = new Worker(new URL(\"./typsten-worker.js\", import.meta.url), {\n type: \"module\",\n });\n const engine = Comlink.wrap<TypstenWorkerApi>(worker);\n\n const wasmUrl = new URL(\"./typsten_bg.wasm\", import.meta.url).href;\n await engine.init(wasmUrl);\n\n const project = new TypstProject(engine, worker, options);\n await engine.setEntry(project._entry);\n\n return project;\n }\n\n private scheduleCompile(): void {\n if (this.destroyed) return;\n this.scheduler.schedule(() => {\n this.compile().catch((err) => console.error(\"[typst]\", err));\n });\n }\n\n /**\n * Mirror text into the VFS without scheduling a compile. Returns the in-flight\n * write to await, or `null` if the content is unchanged (deduped to a no-op).\n */\n private writeText(p: Path, content: string): Promise<unknown> | null {\n if (this.tracked.get(p) === content) return null;\n this.tracked.set(p, content);\n return this.engine.setFile(p, encoder.encode(content));\n }\n\n /** Mirror binary bytes into the VFS (always writes; binaries are not deduped). */\n private writeBinary(p: Path, bytes: Uint8Array): Promise<unknown> {\n this.tracked.set(p, null);\n return this.engine.setFile(p, bytes);\n }\n\n get entry(): Path {\n return this._entry;\n }\n\n set entry(path: Path) {\n const next = normalizePath(path);\n if (next === this._entry) return;\n this._entry = next;\n void this.engine.setEntry(next);\n this.scheduleCompile();\n }\n\n /** Most recent compile result, or `undefined` before the first compile. */\n get lastResult(): CompileResult | undefined {\n return this._lastResult;\n }\n\n /** Tracked text file paths, in insertion order (fresh array). */\n get files(): Path[] {\n return [...this.tracked]\n .filter(([, content]) => content !== null)\n .map(([path]) => path);\n }\n\n /** Current text for a tracked file, or `undefined` (binary or absent). */\n getText(path: Path): string | undefined {\n return this.tracked.get(normalizePath(path)) ?? undefined;\n }\n\n /** Add or overwrite a text file. No-op if unchanged. */\n async setText(path: Path, content: string): Promise<void> {\n const write = this.writeText(normalizePath(path), content);\n if (write) {\n await write;\n this.scheduleCompile();\n }\n }\n\n /** Add or overwrite a binary file (retires any text tracking for the path). */\n async setBinary(\n path: Path,\n content: ArrayBuffer | ArrayBufferView,\n ): Promise<void> {\n await this.writeBinary(normalizePath(path), toBytes(content));\n this.scheduleCompile();\n }\n\n /** Batch set files. Strings dedup against tracked content; binaries always write. */\n async setMany(files: Record<Path, string | Uint8Array>): Promise<void> {\n const writes: Promise<unknown>[] = [];\n for (const [path, content] of Object.entries(files)) {\n const p = normalizePath(path);\n const write =\n typeof content === \"string\"\n ? this.writeText(p, content)\n : this.writeBinary(p, content);\n if (write) writes.push(write);\n }\n if (writes.length === 0) return;\n await Promise.all(writes);\n this.scheduleCompile();\n }\n\n /** Remove a file from the VFS. */\n async remove(path: Path): Promise<void> {\n const p = normalizePath(path);\n await this.engine.remove(p);\n this.tracked.delete(p);\n this.scheduleCompile();\n }\n\n /** Remove all tracked project files (cached `@preview` packages are kept). */\n async clear(): Promise<void> {\n await Promise.all(\n [...this.tracked.keys()].map((p) => this.engine.remove(p)),\n );\n this.tracked.clear();\n this.scheduleCompile();\n }\n\n /**\n * Register a font (TTF/OTF, or TTC collection bytes) so compilation can use\n * it, then recompile. The engine bundles default body, math, and monospace\n * fonts; use this to add families it does not ship (e.g. CJK or a custom\n * font). Fonts persist for the project's lifetime.\n *\n * Returns the canonical family name of each added face, the name Typst\n * groups and matches by (width/weight/style folded into the variant, so e.g.\n * \"Roboto Condensed\" reports as \"Roboto\"). Use it to label the font the way\n * `#set text(font: ...)` expects, instead of parsing the name table yourself.\n */\n async addFont(bytes: Uint8Array): Promise<string[]> {\n const families = await this.engine.addFont(bytes);\n this.scheduleCompile();\n return families;\n }\n\n /**\n * Drop every font added via `addFont`, resetting to the embedded defaults,\n * then recompile. The engine has no per-font removal, so to remove a font,\n * call this and re-`addFont` the ones to keep.\n */\n async clearFonts(): Promise<void> {\n await this.engine.clearFonts();\n this.scheduleCompile();\n }\n\n /**\n * Subscribe to compile results. Late subscribers get `lastResult` synchronously.\n * Returns an unsubscribe function.\n */\n onCompile(listener: CompileListener): () => void {\n this.compileListeners.add(listener);\n if (this._lastResult !== undefined) {\n try {\n listener(this._lastResult);\n } catch (err) {\n console.error(\"[typst] compile listener threw:\", err);\n }\n }\n return () => {\n this.compileListeners.delete(listener);\n };\n }\n\n /**\n * Compile the current VFS state. Fetches any referenced `@preview` packages\n * first. Errors become a synthetic diagnostic. Listeners fire only for the\n * most recent compile (stale results are dropped).\n */\n async compile(): Promise<CompileResult> {\n this.scheduler.cancel();\n const version = ++this.compileVersion;\n let result: CompileResult;\n try {\n await this.packageLoader.ensure(\n [...this.tracked.values()].filter((v): v is string => v !== null),\n );\n result = await this.engine.compile();\n } catch (err) {\n result = errorAsCompileResult(err);\n }\n if (version === this.compileVersion) {\n this._lastResult = result;\n for (const listener of this.compileListeners) {\n try {\n listener(result);\n } catch (err) {\n console.error(\"[typst] compile listener threw:\", err);\n }\n }\n }\n return result;\n }\n\n /** Render a single page of the last compile to SVG, or `undefined`. */\n renderPage(index: number): Promise<string | undefined> {\n return this.engine.renderPage(index);\n }\n\n /**\n * Render pages `[start, end)` as `RenderedSvgPage`s (index + dims + svg),\n * zipping the SVG strings with the page metadata from the last compile.\n */\n async renderedPages(start: number, end: number): Promise<RenderedSvgPage[]> {\n const pages = this._lastResult?.pages ?? [];\n const svgs = await this.engine.renderPages(start, end);\n return svgs.map((svg, i) => {\n const index = start + i;\n const dims = pages[index];\n return {\n index,\n width: dims?.width ?? 0,\n height: dims?.height ?? 0,\n svg,\n };\n });\n }\n\n /**\n * Export the last compile as a PDF, or `undefined` if nothing has compiled\n * yet. The bytes are a fresh `Uint8Array` (copied across the worker boundary).\n */\n exportPdf(): Promise<Uint8Array | undefined> {\n return this.engine.exportPdf();\n }\n\n /** Completions at a CodeMirror `offset` in `path`, using `source` as the live buffer. */\n async completion(\n path: Path,\n source: string,\n offset: number,\n explicit = false,\n ): Promise<CompletionResponse | undefined> {\n const p = normalizePath(path);\n await this.writeText(p, source);\n return this.engine.complete(p, cmOffsetToByte(source, offset), explicit);\n }\n\n /** Hover tooltip at a CodeMirror `offset` in `path`, using `source` as the live buffer. */\n async hover(\n path: Path,\n source: string,\n offset: number,\n ): Promise<Hover | undefined> {\n const p = normalizePath(path);\n await this.writeText(p, source);\n return this.engine.hover(p, cmOffsetToByte(source, offset));\n }\n\n /** Format `source` (the live buffer for `path`); returns the formatted text or `undefined`. */\n async format(path: Path, source: string): Promise<string | undefined> {\n const p = normalizePath(path);\n await this.writeText(p, source);\n return this.engine.format(p);\n }\n\n /**\n * Syntax-highlight `source` over the CodeMirror window `[from, to)` (UTF-16\n * offsets; defaults to the whole string). Returns spans whose `from`/`to` are\n * CodeMirror offsets, ready to drive decorations. Stateless: the worker parses\n * `source` directly via typst-syntax, so this neither reads nor mutates the\n * VFS and works for any text (the live buffer, a hover code snippet).\n */\n async highlight(\n source: string,\n from = 0,\n to = source.length,\n ): Promise<HlSpan[]> {\n const [byteFrom, byteTo] = cmOffsetsToByte(source, [from, to]);\n const spans = await this.engine.highlight(source, byteFrom, byteTo);\n if (spans.length === 0) return spans;\n // The worker speaks UTF-8 bytes; map every span boundary back to UTF-16\n // (CodeMirror) offsets in one pass over the source. Boundaries are not\n // monotonic (nested spans wrap inner ones), so byteOffsetsToCm sorts them.\n const cm = byteOffsetsToCm(\n source,\n spans.flatMap((s) => [s.from, s.to]),\n );\n return spans.map((s, i) => ({\n from: cm[i * 2],\n to: cm[i * 2 + 1],\n tag: s.tag,\n }));\n }\n\n /**\n * Syntax-highlight `source` to nested `<span class=\"typ-*\">` HTML for a static\n * context (e.g. a hover tooltip). Stateless, like `highlight`.\n */\n highlightHtml(source: string): Promise<string> {\n return this.engine.highlightHtml(source);\n }\n\n /** Tear down the worker and drop all state. Idempotent. */\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.scheduler.cancel();\n this.compileListeners.clear();\n this.tracked.clear();\n this._lastResult = undefined;\n this.engine[Comlink.releaseProxy]();\n this.worker.terminate();\n }\n}\n","interface CompileSchedulerOptions {\n /** Minimum idle time (ms) after the last request before firing. Default: 0. */\n debounceMs?: number;\n /**\n * Maximum time (ms) the debounce may keep deferring during continuous\n * requests. Guarantees a fire at least this often so users see progress\n * while typing. Default: 0 (no cap).\n */\n maxWaitMs?: number;\n}\n\n/**\n * Debounce helper with a max-wait ceiling for coalescing compile requests. A\n * burst of `schedule(cb)` calls within `debounceMs` collapses into one fire;\n * during sustained bursts, `maxWaitMs` caps how long the debounce may keep\n * deferring.\n */\nexport class CompileScheduler {\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private maxWaitTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private readonly options: CompileSchedulerOptions = {}) {}\n\n schedule(callback: () => void): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n\n const delay = Math.max(0, this.options.debounceMs ?? 0);\n this.debounceTimer = setTimeout(() => {\n this.debounceTimer = null;\n this.clearMaxWait();\n callback();\n }, delay);\n\n const maxWait = this.options.maxWaitMs;\n if (maxWait != null && maxWait > 0 && !this.maxWaitTimer) {\n this.maxWaitTimer = setTimeout(() => {\n this.maxWaitTimer = null;\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n callback();\n }\n }, maxWait);\n }\n }\n\n /** Cancel any pending scheduled fire without calling the callback. */\n cancel(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n this.clearMaxWait();\n }\n\n private clearMaxWait(): void {\n if (this.maxWaitTimer) {\n clearTimeout(this.maxWaitTimer);\n this.maxWaitTimer = null;\n }\n }\n}\n","// typsten resolves `@preview` packages from its in-memory VFS but does no I/O.\n// This is the JS side: scan sources for `@preview` imports, fetch the tarball\n// from the registry, unpack it, and push every member into the VFS. A package's\n// own sources may import further `@preview` packages, so after unpacking we scan\n// the fetched `.typ` files and follow those transitive imports to a fixed point.\n// (The eager import-scanner approach; a lazy JSPI fetch is a future typsten\n// milestone that would let the engine drive resolution instead.)\nimport { gunzipSync } from \"fflate\";\nimport { parseTar } from \"nanotar\";\n\nconst REGISTRY = \"https://packages.typst.org/preview\";\nconst PREVIEW_IMPORT = /@preview\\/([a-zA-Z0-9_-]+):(\\d+\\.\\d+\\.\\d+)/g;\n\nexport type SetFile = (path: string, bytes: Uint8Array) => Promise<void> | void;\n\nexport interface PackageLoader {\n /**\n * Ensure every `@preview` package referenced in `sources`, and transitively\n * by the packages they pull in, is present in the VFS, fetching any missing.\n */\n ensure(sources: Iterable<string>): Promise<void>;\n}\n\n/** Collect the `name:version` spec of every `@preview` import in `text`. */\nfunction specsIn(text: string): string[] {\n const specs: string[] = [];\n for (const m of text.matchAll(PREVIEW_IMPORT)) specs.push(`${m[1]}:${m[2]}`);\n return specs;\n}\n\nexport function createPackageLoader(setFile: SetFile): PackageLoader {\n const decoder = new TextDecoder();\n // spec (\"name:version\") -> the transitive specs found inside that package.\n // Doubles as the fetch cache: a settled entry means the package is resident.\n const fetched = new Map<string, Promise<string[]>>();\n\n async function fetchPackage(spec: string): Promise<string[]> {\n const [name, version] = spec.split(\":\");\n const qualified = `@preview/${spec}`;\n const res = await fetch(`${REGISTRY}/${name}-${version}.tar.gz`);\n if (!res.ok) {\n throw new Error(\n `failed to fetch ${qualified}: ${res.status} ${res.statusText}`,\n );\n }\n const tar = gunzipSync(new Uint8Array(await res.arrayBuffer()));\n const nested = new Set<string>();\n for (const entry of parseTar(tar)) {\n // Skip directories and anything without bytes.\n if (!entry.data || entry.name.endsWith(\"/\")) continue;\n await setFile(`${qualified}/${entry.name}`, entry.data);\n // A package's own `.typ` sources may import further `@preview` packages.\n if (entry.name.endsWith(\".typ\")) {\n for (const s of specsIn(decoder.decode(entry.data))) nested.add(s);\n }\n }\n return [...nested];\n }\n\n function fetchOnce(spec: string): Promise<string[]> {\n let task = fetched.get(spec);\n if (!task) {\n task = fetchPackage(spec).catch((err: unknown) => {\n // Drop failed fetches so a later compile can retry (transient network).\n fetched.delete(spec);\n throw err;\n });\n fetched.set(spec, task);\n }\n return task;\n }\n\n return {\n async ensure(sources) {\n const seen = new Set<string>();\n let frontier = new Set<string>();\n for (const text of sources) {\n for (const s of specsIn(text)) frontier.add(s);\n }\n // Breadth-first fetch to a fixed point; each package can reveal more.\n while (frontier.size > 0) {\n const batch = [...frontier].filter((s) => !seen.has(s));\n for (const s of batch) seen.add(s);\n frontier = new Set();\n const nestedLists = await Promise.all(batch.map(fetchOnce));\n for (const list of nestedLists) {\n for (const s of list) if (!seen.has(s)) frontier.add(s);\n }\n }\n },\n };\n}\n"],"mappings":"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","names":["decoder","encoder"]}
|
package/dist/typsten-worker.js
CHANGED
|
@@ -29,6 +29,14 @@ var Project = class {
|
|
|
29
29
|
wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
|
|
30
30
|
return v2;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Drop every font added via `add_font`, resetting to the embedded defaults.
|
|
34
|
+
* The engine has no per-font removal, so to remove a font, call this and
|
|
35
|
+
* re-`add_font` the ones to keep.
|
|
36
|
+
*/
|
|
37
|
+
clear_fonts() {
|
|
38
|
+
wasm.project_clear_fonts(this.__wbg_ptr);
|
|
39
|
+
}
|
|
32
40
|
/**
|
|
33
41
|
* Compile the project, returning the rendered SVG and typed diagnostics.
|
|
34
42
|
*
|
|
@@ -492,6 +500,9 @@ var TypstenWorker = class {
|
|
|
492
500
|
addFont(bytes) {
|
|
493
501
|
return this.#p().add_font(bytes);
|
|
494
502
|
}
|
|
503
|
+
clearFonts() {
|
|
504
|
+
this.#p().clear_fonts();
|
|
505
|
+
}
|
|
495
506
|
remove(path) {
|
|
496
507
|
this.#p().remove_file(path);
|
|
497
508
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/typsten-worker.ts","../../typsten/pkg/typsten.js"],"sourcesContent":["// The single Web Worker that hosts the typsten wasm. Replaces the former\n// compiler / renderer / analyzer / formatter workers (typsten is one module).\n// Exposed over Comlink; the `Project` wasm object never crosses the boundary -\n// only plain data does.\nimport * as Comlink from \"comlink\";\nimport init, { Project } from \"typsten\";\n\nclass TypstenWorker {\n #project: Project | undefined;\n\n /** Initialize the wasm from `wasmUrl` and create the project handle. */\n async init(wasmUrl: string): Promise<void> {\n await init({ module_or_path: wasmUrl });\n this.#project = new Project();\n }\n\n #p(): Project {\n if (!this.#project) throw new Error(\"typsten worker: init() not called\");\n return this.#project;\n }\n\n setFile(path: string, bytes: Uint8Array): void {\n this.#p().set_file(path, bytes);\n }\n\n setEntry(path: string): void {\n this.#p().set_entry(path);\n }\n\n addFont(bytes: Uint8Array): string[] {\n return this.#p().add_font(bytes);\n }\n\n remove(path: string): void {\n this.#p().remove_file(path);\n }\n\n compile(): ReturnType<Project[\"compile\"]> {\n // WASM has no clock; refresh the date the world serves to `datetime.today()`\n // right before each compile, so a long-lived worker doesn't go stale.\n const now = new Date();\n this.#p().set_today(\n now.getFullYear(),\n now.getMonth() + 1,\n now.getDate(),\n now.getHours(),\n now.getMinutes(),\n now.getSeconds(),\n );\n return this.#p().compile();\n }\n\n renderPage(index: number): string | undefined {\n return this.#p().render_page(index);\n }\n\n renderPages(start: number, end: number): string[] {\n return this.#p().render_pages(start, end);\n }\n\n exportPdf(): Uint8Array | undefined {\n return this.#p().export_pdf();\n }\n\n complete(\n path: string,\n cursor: number,\n explicit: boolean,\n ): ReturnType<Project[\"complete\"]> {\n return this.#p().complete(path, cursor, explicit);\n }\n\n hover(path: string, cursor: number): ReturnType<Project[\"hover\"]> {\n return this.#p().hover(path, cursor);\n }\n\n format(path: string): string | undefined {\n return this.#p().format(path);\n }\n\n highlight(\n text: string,\n from: number,\n to: number,\n ): ReturnType<Project[\"highlight\"]> {\n return this.#p().highlight(text, from, to);\n }\n\n highlightHtml(text: string): string {\n return this.#p().highlight_html(text);\n }\n}\n\n/** The worker's RPC surface, for `Comlink.wrap<TypstenWorkerApi>` on the main thread. */\nexport type TypstenWorkerApi = TypstenWorker;\n\nComlink.expose(new TypstenWorker());\n","/* @ts-self-types=\"./typsten.d.ts\" */\n\n/**\n * The typsten project handle. JS pushes files in and asks for compiled output.\n */\nexport class Project {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n ProjectFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_project_free(ptr, 0);\n }\n /**\n * Register a font file (TTF/OTF, or a TTC collection) for compilation,\n * extending the embedded default fonts with families the engine does not\n * bundle (e.g. CJK or a custom font). Returns the canonical family name of\n * each added face (the name Typst groups and matches by).\n * @param {Uint8Array} bytes\n * @returns {string[]}\n */\n add_font(bytes) {\n const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_add_font(this.__wbg_ptr, ptr0, len0);\n var v2 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v2;\n }\n /**\n * Compile the project, returning the rendered SVG and typed diagnostics.\n *\n * A query, so `&self`: the `Source` cache it touches is interior-mutable.\n * @returns {CompileResult}\n */\n compile() {\n const ret = wasm.project_compile(this.__wbg_ptr);\n return ret;\n }\n /**\n * Completions at a byte-offset `cursor` in `path`. `explicit` is `true`\n * when the user explicitly requested completion (e.g. Ctrl-Space).\n * @param {string} path\n * @param {number} cursor\n * @param {boolean} explicit\n * @returns {CompletionResponse | undefined}\n */\n complete(path, cursor, explicit) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_complete(this.__wbg_ptr, ptr0, len0, cursor, explicit);\n return ret;\n }\n /**\n * Export the last compiled document as PDF bytes, or `None` if nothing has\n * compiled yet. Returns a `Uint8Array` across the boundary.\n * @returns {Uint8Array | undefined}\n */\n export_pdf() {\n const ret = wasm.project_export_pdf(this.__wbg_ptr);\n let v1;\n if (ret[0] !== 0) {\n v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n }\n return v1;\n }\n /**\n * Format the file at `path`, returning the formatted source or `None` if\n * it is absent or has syntax errors.\n * @param {string} path\n * @returns {string | undefined}\n */\n format(path) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_format(this.__wbg_ptr, ptr0, len0);\n let v2;\n if (ret[0] !== 0) {\n v2 = getStringFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n }\n return v2;\n }\n /**\n * Syntax-highlight `text`, returning the spans overlapping the byte window\n * `[from, to)` (the editor's visible viewport; pass `0..len` for all of it).\n * Stateless: it parses `text` directly, so it neither reads nor mutates the\n * VFS and works for the live buffer and hover snippets alike.\n * @param {string} text\n * @param {number} from\n * @param {number} to\n * @returns {HlSpan[]}\n */\n highlight(text, from, to) {\n const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_highlight(this.__wbg_ptr, ptr0, len0, from, to);\n var v2 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v2;\n }\n /**\n * Syntax-highlight `text` to nested `<span class=\"typ-*\">` HTML, for static\n * contexts like hover tooltips. Stateless, like `highlight`.\n * @param {string} text\n * @returns {string}\n */\n highlight_html(text) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_highlight_html(this.__wbg_ptr, ptr0, len0);\n deferred2_0 = ret[0];\n deferred2_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * Hover tooltip at a byte-offset `cursor` in `path`.\n * @param {string} path\n * @param {number} cursor\n * @returns {Hover | undefined}\n */\n hover(path, cursor) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_hover(this.__wbg_ptr, ptr0, len0, cursor);\n return ret;\n }\n constructor() {\n const ret = wasm.project_new();\n this.__wbg_ptr = ret;\n ProjectFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Remove a file from the VFS.\n * @param {string} path\n */\n remove_file(path) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.project_remove_file(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * Render a single page of the last compiled document to SVG, or `None` if\n * nothing has compiled yet or the index is out of range.\n * @param {number} index\n * @returns {string | undefined}\n */\n render_page(index) {\n const ret = wasm.project_render_page(this.__wbg_ptr, index);\n let v1;\n if (ret[0] !== 0) {\n v1 = getStringFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n }\n return v1;\n }\n /**\n * Render pages `[start, end)` of the last compiled document to SVG (`end`\n * clamped to the page count), the on-demand path for a virtualized viewer.\n * @param {number} start\n * @param {number} end\n * @returns {string[]}\n */\n render_pages(start, end) {\n const ret = wasm.project_render_pages(this.__wbg_ptr, start, end);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Set the entry (main) file that compilation starts from.\n * @param {string} path\n */\n set_entry(path) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.project_set_entry(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * Insert or replace a file in the VFS. Source files are just their UTF-8\n * bytes; package and asset bytes are stored the same way.\n * @param {string} path\n * @param {Uint8Array} bytes\n */\n set_file(path, bytes) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n wasm.project_set_file(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n }\n /**\n * Set the date `datetime.today()` returns. WASM has no clock, so JS\n * pushes this in (typically the user's local date) before each compile.\n * @param {number} year\n * @param {number} month\n * @param {number} day\n * @param {number} hour\n * @param {number} minute\n * @param {number} second\n */\n set_today(year, month, day, hour, minute, second) {\n wasm.project_set_today(this.__wbg_ptr, year, month, day, hour, minute, second);\n }\n /**\n * The Typst engine version this crate is built against, e.g. \"0.14.2\".\n * @returns {string}\n */\n version() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.project_version(this.__wbg_ptr);\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n }\n}\nif (Symbol.dispose) Project.prototype[Symbol.dispose] = Project.prototype.free;\n\nexport function start() {\n wasm.start();\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_ef53bc310eb298a0: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_1506f2235d1bdba0: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_ce1ab61c1c2b300d: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_d90091b82fdf5b91: function() {\n const ret = new Array();\n return ret;\n },\n __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n },\n __wbg_set_dca99999bba88a9a: function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbindgen_cast_0000000000000001: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_cast_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_cast_0000000000000003: function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./typsten_bg.js\": import0,\n };\n}\n\nconst ProjectFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_project_free(ptr, 1));\n\nfunction getArrayJsValueFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n const mem = getDataViewMemory0();\n const result = [];\n for (let i = ptr; i < ptr + 4 * len; i += 4) {\n result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));\n }\n wasm.__externref_drop_slice(ptr, len);\n return result;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('typsten_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n"],"mappings":"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","names":["ptr"]}
|
|
1
|
+
{"version":3,"sources":["../src/typsten-worker.ts","../../typsten/pkg/typsten.js"],"sourcesContent":["// The single Web Worker that hosts the typsten wasm. Replaces the former\n// compiler / renderer / analyzer / formatter workers (typsten is one module).\n// Exposed over Comlink; the `Project` wasm object never crosses the boundary -\n// only plain data does.\nimport * as Comlink from \"comlink\";\nimport init, { Project } from \"typsten\";\n\nclass TypstenWorker {\n #project: Project | undefined;\n\n /** Initialize the wasm from `wasmUrl` and create the project handle. */\n async init(wasmUrl: string): Promise<void> {\n await init({ module_or_path: wasmUrl });\n this.#project = new Project();\n }\n\n #p(): Project {\n if (!this.#project) throw new Error(\"typsten worker: init() not called\");\n return this.#project;\n }\n\n setFile(path: string, bytes: Uint8Array): void {\n this.#p().set_file(path, bytes);\n }\n\n setEntry(path: string): void {\n this.#p().set_entry(path);\n }\n\n addFont(bytes: Uint8Array): string[] {\n return this.#p().add_font(bytes);\n }\n\n clearFonts(): void {\n this.#p().clear_fonts();\n }\n\n remove(path: string): void {\n this.#p().remove_file(path);\n }\n\n compile(): ReturnType<Project[\"compile\"]> {\n // WASM has no clock; refresh the date the world serves to `datetime.today()`\n // right before each compile, so a long-lived worker doesn't go stale.\n const now = new Date();\n this.#p().set_today(\n now.getFullYear(),\n now.getMonth() + 1,\n now.getDate(),\n now.getHours(),\n now.getMinutes(),\n now.getSeconds(),\n );\n return this.#p().compile();\n }\n\n renderPage(index: number): string | undefined {\n return this.#p().render_page(index);\n }\n\n renderPages(start: number, end: number): string[] {\n return this.#p().render_pages(start, end);\n }\n\n exportPdf(): Uint8Array | undefined {\n return this.#p().export_pdf();\n }\n\n complete(\n path: string,\n cursor: number,\n explicit: boolean,\n ): ReturnType<Project[\"complete\"]> {\n return this.#p().complete(path, cursor, explicit);\n }\n\n hover(path: string, cursor: number): ReturnType<Project[\"hover\"]> {\n return this.#p().hover(path, cursor);\n }\n\n format(path: string): string | undefined {\n return this.#p().format(path);\n }\n\n highlight(\n text: string,\n from: number,\n to: number,\n ): ReturnType<Project[\"highlight\"]> {\n return this.#p().highlight(text, from, to);\n }\n\n highlightHtml(text: string): string {\n return this.#p().highlight_html(text);\n }\n}\n\n/** The worker's RPC surface, for `Comlink.wrap<TypstenWorkerApi>` on the main thread. */\nexport type TypstenWorkerApi = TypstenWorker;\n\nComlink.expose(new TypstenWorker());\n","/* @ts-self-types=\"./typsten.d.ts\" */\n\n/**\n * The typsten project handle. JS pushes files in and asks for compiled output.\n */\nexport class Project {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n ProjectFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_project_free(ptr, 0);\n }\n /**\n * Register a font file (TTF/OTF, or a TTC collection) for compilation,\n * extending the embedded default fonts with families the engine does not\n * bundle (e.g. CJK or a custom font). Returns the canonical family name of\n * each added face (the name Typst groups and matches by).\n * @param {Uint8Array} bytes\n * @returns {string[]}\n */\n add_font(bytes) {\n const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_add_font(this.__wbg_ptr, ptr0, len0);\n var v2 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v2;\n }\n /**\n * Drop every font added via `add_font`, resetting to the embedded defaults.\n * The engine has no per-font removal, so to remove a font, call this and\n * re-`add_font` the ones to keep.\n */\n clear_fonts() {\n wasm.project_clear_fonts(this.__wbg_ptr);\n }\n /**\n * Compile the project, returning the rendered SVG and typed diagnostics.\n *\n * A query, so `&self`: the `Source` cache it touches is interior-mutable.\n * @returns {CompileResult}\n */\n compile() {\n const ret = wasm.project_compile(this.__wbg_ptr);\n return ret;\n }\n /**\n * Completions at a byte-offset `cursor` in `path`. `explicit` is `true`\n * when the user explicitly requested completion (e.g. Ctrl-Space).\n * @param {string} path\n * @param {number} cursor\n * @param {boolean} explicit\n * @returns {CompletionResponse | undefined}\n */\n complete(path, cursor, explicit) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_complete(this.__wbg_ptr, ptr0, len0, cursor, explicit);\n return ret;\n }\n /**\n * Export the last compiled document as PDF bytes, or `None` if nothing has\n * compiled yet. Returns a `Uint8Array` across the boundary.\n * @returns {Uint8Array | undefined}\n */\n export_pdf() {\n const ret = wasm.project_export_pdf(this.__wbg_ptr);\n let v1;\n if (ret[0] !== 0) {\n v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n }\n return v1;\n }\n /**\n * Format the file at `path`, returning the formatted source or `None` if\n * it is absent or has syntax errors.\n * @param {string} path\n * @returns {string | undefined}\n */\n format(path) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_format(this.__wbg_ptr, ptr0, len0);\n let v2;\n if (ret[0] !== 0) {\n v2 = getStringFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n }\n return v2;\n }\n /**\n * Syntax-highlight `text`, returning the spans overlapping the byte window\n * `[from, to)` (the editor's visible viewport; pass `0..len` for all of it).\n * Stateless: it parses `text` directly, so it neither reads nor mutates the\n * VFS and works for the live buffer and hover snippets alike.\n * @param {string} text\n * @param {number} from\n * @param {number} to\n * @returns {HlSpan[]}\n */\n highlight(text, from, to) {\n const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_highlight(this.__wbg_ptr, ptr0, len0, from, to);\n var v2 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v2;\n }\n /**\n * Syntax-highlight `text` to nested `<span class=\"typ-*\">` HTML, for static\n * contexts like hover tooltips. Stateless, like `highlight`.\n * @param {string} text\n * @returns {string}\n */\n highlight_html(text) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_highlight_html(this.__wbg_ptr, ptr0, len0);\n deferred2_0 = ret[0];\n deferred2_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * Hover tooltip at a byte-offset `cursor` in `path`.\n * @param {string} path\n * @param {number} cursor\n * @returns {Hover | undefined}\n */\n hover(path, cursor) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.project_hover(this.__wbg_ptr, ptr0, len0, cursor);\n return ret;\n }\n constructor() {\n const ret = wasm.project_new();\n this.__wbg_ptr = ret;\n ProjectFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Remove a file from the VFS.\n * @param {string} path\n */\n remove_file(path) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.project_remove_file(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * Render a single page of the last compiled document to SVG, or `None` if\n * nothing has compiled yet or the index is out of range.\n * @param {number} index\n * @returns {string | undefined}\n */\n render_page(index) {\n const ret = wasm.project_render_page(this.__wbg_ptr, index);\n let v1;\n if (ret[0] !== 0) {\n v1 = getStringFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n }\n return v1;\n }\n /**\n * Render pages `[start, end)` of the last compiled document to SVG (`end`\n * clamped to the page count), the on-demand path for a virtualized viewer.\n * @param {number} start\n * @param {number} end\n * @returns {string[]}\n */\n render_pages(start, end) {\n const ret = wasm.project_render_pages(this.__wbg_ptr, start, end);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Set the entry (main) file that compilation starts from.\n * @param {string} path\n */\n set_entry(path) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.project_set_entry(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * Insert or replace a file in the VFS. Source files are just their UTF-8\n * bytes; package and asset bytes are stored the same way.\n * @param {string} path\n * @param {Uint8Array} bytes\n */\n set_file(path, bytes) {\n const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n wasm.project_set_file(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n }\n /**\n * Set the date `datetime.today()` returns. WASM has no clock, so JS\n * pushes this in (typically the user's local date) before each compile.\n * @param {number} year\n * @param {number} month\n * @param {number} day\n * @param {number} hour\n * @param {number} minute\n * @param {number} second\n */\n set_today(year, month, day, hour, minute, second) {\n wasm.project_set_today(this.__wbg_ptr, year, month, day, hour, minute, second);\n }\n /**\n * The Typst engine version this crate is built against, e.g. \"0.14.2\".\n * @returns {string}\n */\n version() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.project_version(this.__wbg_ptr);\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n }\n}\nif (Symbol.dispose) Project.prototype[Symbol.dispose] = Project.prototype.free;\n\nexport function start() {\n wasm.start();\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_ef53bc310eb298a0: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_1506f2235d1bdba0: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_ce1ab61c1c2b300d: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_d90091b82fdf5b91: function() {\n const ret = new Array();\n return ret;\n },\n __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n },\n __wbg_set_dca99999bba88a9a: function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbindgen_cast_0000000000000001: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_cast_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_cast_0000000000000003: function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./typsten_bg.js\": import0,\n };\n}\n\nconst ProjectFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_project_free(ptr, 1));\n\nfunction getArrayJsValueFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n const mem = getDataViewMemory0();\n const result = [];\n for (let i = ptr; i < ptr + 4 * len; i += 4) {\n result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));\n }\n wasm.__externref_drop_slice(ptr, len);\n return result;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('typsten_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n"],"mappings":"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","names":["ptr"]}
|
package/dist/typsten_bg.wasm
CHANGED
|
Binary file
|