@springbrand/file-renderers 0.1.0-alpha.0 → 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +7 -1
  2. package/dist/file-renderers/src/attachment-format.d.ts +1 -1
  3. package/dist/file-renderers/src/attachment-format.js +21 -21
  4. package/dist/file-renderers/src/attachment.d.ts +3 -3
  5. package/dist/file-renderers/src/attachment.js +4 -4
  6. package/dist/file-renderers/src/code/index.d.ts +3 -3
  7. package/dist/file-renderers/src/code/index.js +2 -2
  8. package/dist/file-renderers/src/code/mime.d.ts +1 -1
  9. package/dist/file-renderers/src/code/mime.js +1 -1
  10. package/dist/file-renderers/src/config/index.d.ts +8 -8
  11. package/dist/file-renderers/src/config/index.js +11 -11
  12. package/dist/file-renderers/src/config/limits.js +1 -1
  13. package/dist/file-renderers/src/config/mime.d.ts +1 -1
  14. package/dist/file-renderers/src/config/mime.js +1 -1
  15. package/dist/file-renderers/src/config/toml.d.ts +1 -1
  16. package/dist/file-renderers/src/config/toml.js +1 -1
  17. package/dist/file-renderers/src/config/xml.d.ts +1 -1
  18. package/dist/file-renderers/src/config/xml.js +1 -1
  19. package/dist/file-renderers/src/config/yaml.d.ts +2 -2
  20. package/dist/file-renderers/src/config/yaml.js +1 -1
  21. package/dist/file-renderers/src/contracts.d.ts +2 -0
  22. package/dist/file-renderers/src/csv/index.d.ts +2 -2
  23. package/dist/file-renderers/src/csv/index.js +2 -2
  24. package/dist/file-renderers/src/csv/mime.d.ts +1 -1
  25. package/dist/file-renderers/src/csv/mime.js +1 -1
  26. package/dist/file-renderers/src/docx/index.d.ts +2 -2
  27. package/dist/file-renderers/src/docx/index.js +4 -4
  28. package/dist/file-renderers/src/docx/mime.d.ts +1 -1
  29. package/dist/file-renderers/src/docx/mime.js +1 -1
  30. package/dist/file-renderers/src/drawio/index.d.ts +5 -5
  31. package/dist/file-renderers/src/drawio/index.js +4 -4
  32. package/dist/file-renderers/src/drawio/mime.d.ts +1 -1
  33. package/dist/file-renderers/src/drawio/mime.js +1 -1
  34. package/dist/file-renderers/src/drawio/parse.d.ts +1 -1
  35. package/dist/file-renderers/src/excalidraw/index.d.ts +2 -2
  36. package/dist/file-renderers/src/excalidraw/index.js +3 -3
  37. package/dist/file-renderers/src/excalidraw/mime.d.ts +1 -1
  38. package/dist/file-renderers/src/excalidraw/mime.js +1 -1
  39. package/dist/file-renderers/src/file-format.js +21 -21
  40. package/dist/file-renderers/src/glb/index.d.ts +3 -3
  41. package/dist/file-renderers/src/glb/index.js +4 -4
  42. package/dist/file-renderers/src/glb/mime.d.ts +1 -1
  43. package/dist/file-renderers/src/glb/mime.js +1 -1
  44. package/dist/file-renderers/src/glb/parse.js +1 -1
  45. package/dist/file-renderers/src/html/index.d.ts +2 -2
  46. package/dist/file-renderers/src/html/index.js +2 -2
  47. package/dist/file-renderers/src/html/mime.d.ts +1 -1
  48. package/dist/file-renderers/src/html/mime.js +1 -1
  49. package/dist/file-renderers/src/html/preview-project.d.ts +2 -3
  50. package/dist/file-renderers/src/html/preview-project.js +13 -53
  51. package/dist/file-renderers/src/html/preview.d.ts +3 -3
  52. package/dist/file-renderers/src/html/preview.js +2 -2
  53. package/dist/file-renderers/src/image/index.d.ts +2 -2
  54. package/dist/file-renderers/src/image/index.js +2 -2
  55. package/dist/file-renderers/src/image/mime.d.ts +1 -1
  56. package/dist/file-renderers/src/image/mime.js +1 -1
  57. package/dist/file-renderers/src/index.d.ts +28 -27
  58. package/dist/file-renderers/src/index.js +28 -27
  59. package/dist/file-renderers/src/json/index.d.ts +4 -4
  60. package/dist/file-renderers/src/json/index.js +5 -5
  61. package/dist/file-renderers/src/json/json.typecheck.js +2 -2
  62. package/dist/file-renderers/src/json/jsonl.d.ts +4 -4
  63. package/dist/file-renderers/src/json/jsonl.js +5 -5
  64. package/dist/file-renderers/src/json/mime.d.ts +1 -1
  65. package/dist/file-renderers/src/json/mime.js +2 -2
  66. package/dist/file-renderers/src/json/parse.d.ts +1 -1
  67. package/dist/file-renderers/src/json/parse.js +1 -1
  68. package/dist/file-renderers/src/markdown/index.d.ts +2 -2
  69. package/dist/file-renderers/src/markdown/index.js +2 -2
  70. package/dist/file-renderers/src/markdown/mime.d.ts +1 -1
  71. package/dist/file-renderers/src/markdown/mime.js +1 -1
  72. package/dist/file-renderers/src/media/index.d.ts +5 -5
  73. package/dist/file-renderers/src/media/index.js +3 -3
  74. package/dist/file-renderers/src/media/mime.d.ts +1 -1
  75. package/dist/file-renderers/src/media/mime.js +1 -1
  76. package/dist/file-renderers/src/mermaid/frame.d.ts +1 -1
  77. package/dist/file-renderers/src/mermaid/frame.js +1 -1
  78. package/dist/file-renderers/src/mermaid/index.d.ts +3 -3
  79. package/dist/file-renderers/src/mermaid/index.js +4 -4
  80. package/dist/file-renderers/src/mermaid/mime.d.ts +1 -1
  81. package/dist/file-renderers/src/mermaid/mime.js +1 -1
  82. package/dist/file-renderers/src/notebook/index.d.ts +4 -4
  83. package/dist/file-renderers/src/notebook/index.js +8 -8
  84. package/dist/file-renderers/src/notebook/mime.d.ts +1 -1
  85. package/dist/file-renderers/src/notebook/mime.js +1 -1
  86. package/dist/file-renderers/src/notebook/parse.d.ts +2 -2
  87. package/dist/file-renderers/src/notebook/parse.js +4 -4
  88. package/dist/file-renderers/src/pdf/index.d.ts +2 -2
  89. package/dist/file-renderers/src/pdf/index.js +2 -2
  90. package/dist/file-renderers/src/pdf/mime.d.ts +1 -1
  91. package/dist/file-renderers/src/pdf/mime.js +1 -1
  92. package/dist/file-renderers/src/ppt/index.d.ts +2 -2
  93. package/dist/file-renderers/src/ppt/index.js +3 -3
  94. package/dist/file-renderers/src/ppt/mime.d.ts +1 -1
  95. package/dist/file-renderers/src/ppt/mime.js +1 -1
  96. package/dist/file-renderers/src/preview-content.d.ts +1 -1
  97. package/dist/file-renderers/src/preview-content.js +11 -11
  98. package/dist/file-renderers/src/preview-host.d.ts +23 -23
  99. package/dist/file-renderers/src/preview-host.js +24 -24
  100. package/dist/file-renderers/src/preview-surface.d.ts +2 -2
  101. package/dist/file-renderers/src/preview-surface.js +3 -3
  102. package/dist/file-renderers/src/registry.d.ts +1 -1
  103. package/dist/file-renderers/src/resource-path.d.ts +7 -0
  104. package/dist/file-renderers/src/resource-path.js +37 -0
  105. package/dist/file-renderers/src/svg/index.d.ts +3 -3
  106. package/dist/file-renderers/src/svg/index.js +5 -5
  107. package/dist/file-renderers/src/svg/mime.d.ts +1 -1
  108. package/dist/file-renderers/src/svg/mime.js +1 -1
  109. package/dist/file-renderers/src/svg/parse.d.ts +1 -1
  110. package/dist/file-renderers/src/svg/parse.js +1 -1
  111. package/dist/file-renderers/src/svg/svg.typecheck.js +1 -1
  112. package/dist/file-renderers/src/wasm/index.d.ts +4 -4
  113. package/dist/file-renderers/src/wasm/index.js +4 -4
  114. package/dist/file-renderers/src/wasm/mime.d.ts +1 -1
  115. package/dist/file-renderers/src/wasm/mime.js +1 -1
  116. package/dist/file-renderers/src/wasm/parse.js +1 -1
  117. package/dist/file-renderers/src/wasm/wasm.typecheck.js +1 -1
  118. package/dist/file-renderers/src/xlsx/index.d.ts +2 -2
  119. package/dist/file-renderers/src/xlsx/index.js +4 -4
  120. package/dist/file-renderers/src/xlsx/mime.d.ts +1 -1
  121. package/dist/file-renderers/src/xlsx/mime.js +1 -1
  122. package/dist/file-renderers/src/zip/index.d.ts +4 -4
  123. package/dist/file-renderers/src/zip/index.js +5 -5
  124. package/dist/file-renderers/src/zip/mime.d.ts +1 -1
  125. package/dist/file-renderers/src/zip/mime.js +1 -1
  126. package/dist/file-renderers/src/zip/parse.js +1 -1
  127. package/dist/utils/src/index.d.ts +12 -12
  128. package/dist/utils/src/index.js +12 -12
  129. package/dist/utils/src/ooxml.d.ts +1 -1
  130. package/dist/utils/src/ooxml.js +1 -1
  131. package/dist/utils/src/uuid.js +1 -1
  132. package/package.json +9 -5
package/README.md CHANGED
@@ -99,7 +99,13 @@ The shared renderer classifies references and their purpose (`image`,
99
99
  the authoritative file snapshot. That resolver owns authentication, Workspace
100
100
  access, authorization, caching, and the decision to return a safe URL,
101
101
  text/bytes, `missing`, or `blocked`. Renderers never call Workspace APIs
102
- directly, and hosts do not duplicate format-specific reference parsing. The
102
+ directly, and hosts do not duplicate format-specific reference parsing.
103
+ Resource requests carry an exact decoded `basePath` directory and a raw URL
104
+ `reference`, including any percent escapes, query and fragment. Hosts use
105
+ `rendererResourcePath` from `./resource-path` to obtain the exact decoded source
106
+ inventory path once. HTML keeps absolute URL references encoded when forwarding
107
+ them to the host; Markdown and Notebook use the same contract. The helper never
108
+ resolves against the browser page origin or an external resource origin. The
103
109
  Markdown renderer preserves relative `href` and `src` references through its
104
110
  Streamdown pipeline before resolving them through this boundary, so the browser
105
111
  cannot reinterpret them against the SP page origin. Notebook Markdown cells
@@ -1,4 +1,4 @@
1
- import { type DetectedFileFormat, type FileFormatInput } from "./file-format";
1
+ import { type DetectedFileFormat, type FileFormatInput } from "./file-format.js";
2
2
  /**
3
3
  * Formats which can cross the Attachment boundary. `text` is the Canvas
4
4
  * source fallback for plain text files; `unknown` never crosses the boundary.
@@ -1,24 +1,24 @@
1
- import { codeLanguageFor, normalizedCodeMimeType, } from "./code/mime";
2
- import { configMimeTypeFor } from "./config/mime";
3
- import { csvMimeTypeFor } from "./csv/mime";
4
- import { docxMimeTypeFor } from "./docx/mime";
5
- import { drawioMimeTypeFor } from "./drawio/mime";
6
- import { excalidrawMimeTypeFor } from "./excalidraw/mime";
7
- import { fileFormatFor } from "./file-format";
8
- import { glbMimeTypeFor } from "./glb/mime";
9
- import { htmlMimeTypeFor } from "./html/mime";
10
- import { imageMimeTypeFor, isSupportedImageMimeType } from "./image/mime";
11
- import { jsonlMimeTypeFor, jsonMimeTypeFor } from "./json/mime";
12
- import { isSupportedMarkdownInput } from "./markdown/mime";
13
- import { canonicalMediaMimeType, mediaMimeTypeFor } from "./media/mime";
14
- import { mermaidMimeTypeFor } from "./mermaid/mime";
15
- import { NOTEBOOK_MIME_TYPE } from "./notebook/mime";
16
- import { pdfMimeTypeFor } from "./pdf/mime";
17
- import { pptMimeTypeFor } from "./ppt/mime";
18
- import { svgMimeTypeFor } from "./svg/mime";
19
- import { wasmMimeTypeFor } from "./wasm/mime";
20
- import { xlsxMimeTypeFor } from "./xlsx/mime";
21
- import { ZIP_MIME_TYPE, isSupportedZipInput } from "./zip/mime";
1
+ import { codeLanguageFor, normalizedCodeMimeType, } from "./code/mime.js";
2
+ import { configMimeTypeFor } from "./config/mime.js";
3
+ import { csvMimeTypeFor } from "./csv/mime.js";
4
+ import { docxMimeTypeFor } from "./docx/mime.js";
5
+ import { drawioMimeTypeFor } from "./drawio/mime.js";
6
+ import { excalidrawMimeTypeFor } from "./excalidraw/mime.js";
7
+ import { fileFormatFor } from "./file-format.js";
8
+ import { glbMimeTypeFor } from "./glb/mime.js";
9
+ import { htmlMimeTypeFor } from "./html/mime.js";
10
+ import { imageMimeTypeFor, isSupportedImageMimeType } from "./image/mime.js";
11
+ import { jsonlMimeTypeFor, jsonMimeTypeFor } from "./json/mime.js";
12
+ import { isSupportedMarkdownInput } from "./markdown/mime.js";
13
+ import { canonicalMediaMimeType, mediaMimeTypeFor } from "./media/mime.js";
14
+ import { mermaidMimeTypeFor } from "./mermaid/mime.js";
15
+ import { NOTEBOOK_MIME_TYPE } from "./notebook/mime.js";
16
+ import { pdfMimeTypeFor } from "./pdf/mime.js";
17
+ import { pptMimeTypeFor } from "./ppt/mime.js";
18
+ import { svgMimeTypeFor } from "./svg/mime.js";
19
+ import { wasmMimeTypeFor } from "./wasm/mime.js";
20
+ import { xlsxMimeTypeFor } from "./xlsx/mime.js";
21
+ import { ZIP_MIME_TYPE, isSupportedZipInput } from "./zip/mime.js";
22
22
  /**
23
23
  * These are the canonical media types returned by the upload boundary. The
24
24
  * list is intentionally owned by the renderer package so HTTP, Web, and Agent
@@ -1,6 +1,6 @@
1
- import { type AttachmentFormat, type AttachmentMediaType } from "./attachment-format";
2
- import type { FileFormatInput } from "./file-format";
3
- export * from "./attachment-format";
1
+ import { type AttachmentFormat, type AttachmentMediaType } from "./attachment-format.js";
2
+ import type { FileFormatInput } from "./file-format.js";
3
+ export * from "./attachment-format.js";
4
4
  export type AttachmentImageMediaTypeReader = (bytes: Uint8Array) => Promise<string | null>;
5
5
  export type ValidatedAttachment = {
6
6
  readonly format: AttachmentFormat;
@@ -1,8 +1,8 @@
1
1
  import { hasZipSignature, inspectSafeOoxml, isStrictUtf8 } from "../../utils/src/index.js";
2
- import { attachmentFormatFor, attachmentMediaTypeFor, isAttachmentMediaType, } from "./attachment-format";
3
- import { isSupportedImageMimeType } from "./image/mime";
4
- import { isValidMediaBytes } from "./media/validate";
5
- export * from "./attachment-format";
2
+ import { attachmentFormatFor, attachmentMediaTypeFor, isAttachmentMediaType, } from "./attachment-format.js";
3
+ import { isSupportedImageMimeType } from "./image/mime.js";
4
+ import { isValidMediaBytes } from "./media/validate.js";
5
+ export * from "./attachment-format.js";
6
6
  /**
7
7
  * Validates the byte-level facts needed before an Attachment becomes durable.
8
8
  * Renderer parsing remains responsible for parse diagnostics and format-specific
@@ -1,6 +1,6 @@
1
- import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts";
2
- import { type CodeLanguage } from "./mime";
3
- export { codeLanguageFor, type CodeLanguage } from "./mime";
1
+ import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts.js";
2
+ import { type CodeLanguage } from "./mime.js";
3
+ export { codeLanguageFor, type CodeLanguage } from "./mime.js";
4
4
  type CodeFrame = {
5
5
  readonly text: string;
6
6
  readonly language: CodeLanguage;
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Fragment, useEffect, useState } from "react";
3
- import { codeLanguageFor } from "./mime";
3
+ import { codeLanguageFor } from "./mime.js";
4
4
  import styles from "./source.module.css";
5
- export { codeLanguageFor } from "./mime";
5
+ export { codeLanguageFor } from "./mime.js";
6
6
  const MAX_HIGHLIGHT_CHARACTERS = 64 * 1024;
7
7
  export class UnsupportedCodeLanguageError extends Error {
8
8
  fileName;
@@ -1,4 +1,4 @@
1
- import type { RendererInput } from "../contracts";
1
+ import type { RendererInput } from "../contracts.js";
2
2
  export type CodeLanguage = "bash" | "css" | "javascript" | "jsx" | "python" | "scss" | "sql" | "tsx" | "typescript";
3
3
  export declare function normalizedCodeMimeType(mimeType: string): string;
4
4
  export declare function codeLanguageFor(input: Pick<RendererInput<"code">, "name" | "mimeType">): CodeLanguage | null;
@@ -1,4 +1,4 @@
1
- import { filenameSuffix } from "../file-name";
1
+ import { filenameSuffix } from "../file-name.js";
2
2
  const LANGUAGE_BY_SUFFIX = new Map([
3
3
  ["bash", "bash"],
4
4
  ["cjs", "javascript"],
@@ -1,11 +1,11 @@
1
- import type { FileRenderer, FrameDocumentModel, RendererInput, StructuredDocumentModel } from "../contracts";
2
- import { type ConfigFormat } from "./mime";
3
- import { type ConfigTree } from "./yaml";
4
- export { CONFIG_PREVIEW_MAX_BYTES, configMimeTypeFor, type ConfigFormat } from "./mime";
5
- export { ConfigPreviewLimitError, InvalidConfigError } from "./limits";
6
- export { parseYaml, type ConfigTree } from "./yaml";
7
- export { parseToml } from "./toml";
8
- export { parseXml } from "./xml";
1
+ import type { FileRenderer, FrameDocumentModel, RendererInput, StructuredDocumentModel } from "../contracts.js";
2
+ import { type ConfigFormat } from "./mime.js";
3
+ import { type ConfigTree } from "./yaml.js";
4
+ export { CONFIG_PREVIEW_MAX_BYTES, configMimeTypeFor, type ConfigFormat } from "./mime.js";
5
+ export { ConfigPreviewLimitError, InvalidConfigError } from "./limits.js";
6
+ export { parseYaml, type ConfigTree } from "./yaml.js";
7
+ export { parseToml } from "./toml.js";
8
+ export { parseXml } from "./xml.js";
9
9
  export type ConfigStructuredModel<Format extends ConfigFormat> = StructuredDocumentModel<Format, ConfigTree> & {
10
10
  readonly name: string;
11
11
  readonly source: string;
@@ -1,17 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { StructuredTree } from "../structured-tree/tree";
2
+ import { StructuredTree } from "../structured-tree/tree.js";
3
3
  import styles from "../structured-tree/tree.module.css";
4
- import { assertConfigSource, ConfigPreviewLimitError, InvalidConfigError } from "./limits";
5
- import { configMimeTypeFor } from "./mime";
6
- import { parseToml } from "./toml";
7
- import { parseXml } from "./xml";
8
- import { parseYaml } from "./yaml";
4
+ import { assertConfigSource, ConfigPreviewLimitError, InvalidConfigError } from "./limits.js";
5
+ import { configMimeTypeFor } from "./mime.js";
6
+ import { parseToml } from "./toml.js";
7
+ import { parseXml } from "./xml.js";
8
+ import { parseYaml } from "./yaml.js";
9
9
  import { TomlError } from "smol-toml";
10
- export { CONFIG_PREVIEW_MAX_BYTES, configMimeTypeFor } from "./mime";
11
- export { ConfigPreviewLimitError, InvalidConfigError } from "./limits";
12
- export { parseYaml } from "./yaml";
13
- export { parseToml } from "./toml";
14
- export { parseXml } from "./xml";
10
+ export { CONFIG_PREVIEW_MAX_BYTES, configMimeTypeFor } from "./mime.js";
11
+ export { ConfigPreviewLimitError, InvalidConfigError } from "./limits.js";
12
+ export { parseYaml } from "./yaml.js";
13
+ export { parseToml } from "./toml.js";
14
+ export { parseXml } from "./xml.js";
15
15
  export class UnsupportedConfigTypeError extends Error {
16
16
  constructor(input) {
17
17
  super(`No configuration renderer is registered for ${input.name || input.mimeType || "this file"}`);
@@ -1,4 +1,4 @@
1
- import { CONFIG_PREVIEW_MAX_BYTES } from "./mime";
1
+ import { CONFIG_PREVIEW_MAX_BYTES } from "./mime.js";
2
2
  const MAX_DEPTH = 64;
3
3
  const MAX_NODES = 20_000;
4
4
  export class ConfigPreviewLimitError extends Error {
@@ -1,4 +1,4 @@
1
- import type { RendererInput } from "../contracts";
1
+ import type { RendererInput } from "../contracts.js";
2
2
  export declare const CONFIG_PREVIEW_MAX_BYTES: number;
3
3
  export type ConfigFormat = "yaml" | "toml" | "xml";
4
4
  export declare function configMimeTypeFor(input: Pick<RendererInput<ConfigFormat>, "name" | "mimeType">): ConfigFormat | null;
@@ -1,4 +1,4 @@
1
- import { filenameSuffix } from "../file-name";
1
+ import { filenameSuffix } from "../file-name.js";
2
2
  export const CONFIG_PREVIEW_MAX_BYTES = 512 * 1024;
3
3
  const CONFIG_BY_SUFFIX = new Map([
4
4
  ["yaml", "yaml"],
@@ -1,2 +1,2 @@
1
- import type { ConfigTree } from "./yaml";
1
+ import type { ConfigTree } from "./yaml.js";
2
2
  export declare function parseToml(source: string, signal: AbortSignal): ConfigTree;
@@ -1,5 +1,5 @@
1
1
  import { parse, TomlDate } from "smol-toml";
2
- import { ConfigBudget } from "./limits";
2
+ import { ConfigBudget } from "./limits.js";
3
3
  export function parseToml(source, signal) {
4
4
  signal.throwIfAborted();
5
5
  const value = parse(source, { maxDepth: 64, integersAsBigInt: true });
@@ -1,2 +1,2 @@
1
- import type { ConfigTree } from "./yaml";
1
+ import type { ConfigTree } from "./yaml.js";
2
2
  export declare function parseXml(source: string, signal: AbortSignal): ConfigTree;
@@ -1,5 +1,5 @@
1
1
  import { SaxesParser } from "saxes";
2
- import { ConfigBudget, InvalidConfigError, ConfigPreviewLimitError } from "./limits";
2
+ import { ConfigBudget, InvalidConfigError, ConfigPreviewLimitError } from "./limits.js";
3
3
  export function parseXml(source, signal) {
4
4
  signal.throwIfAborted();
5
5
  const budget = new ConfigBudget(signal);
@@ -1,5 +1,5 @@
1
- import type { RendererDiagnostic } from "../contracts";
2
- import type { TreeViewNode } from "../structured-tree/tree";
1
+ import type { RendererDiagnostic } from "../contracts.js";
2
+ import type { TreeViewNode } from "../structured-tree/tree.js";
3
3
  export type ConfigTree = TreeViewNode & {
4
4
  readonly children: readonly ConfigTree[];
5
5
  };
@@ -1,5 +1,5 @@
1
1
  import { isAlias, isMap, isScalar, isSeq, parseDocument } from "yaml";
2
- import { ConfigBudget, InvalidConfigError } from "./limits";
2
+ import { ConfigBudget, InvalidConfigError } from "./limits.js";
3
3
  export function parseYaml(source, signal) {
4
4
  signal.throwIfAborted();
5
5
  const document = parseDocument(source, {
@@ -55,7 +55,9 @@ export type StructuredDocumentModel<F extends FileRendererFormat, Node extends C
55
55
  export type RendererModel<F extends FileRendererFormat> = FrameDocumentModel<F> | StructuredDocumentModel<F>;
56
56
  export type RendererResourcePurpose = "navigate" | "image" | "stylesheet" | "script" | "font" | "media" | "document";
57
57
  export type RendererResourceRequest = {
58
+ /** Exact decoded directory within the source root, including literal %, ? and #. */
58
59
  readonly basePath: string;
60
+ /** Raw URL reference. Percent escapes, query and fragment retain URL semantics until host resolution. */
59
61
  readonly reference: string;
60
62
  readonly purpose: RendererResourcePurpose;
61
63
  };
@@ -1,6 +1,6 @@
1
1
  import "react-data-grid/lib/styles.css";
2
- import type { FileRenderer, FrameDocumentModel, RendererInput, TextRendererPayload } from "../contracts";
3
- export { csvMimeTypeFor, isSupportedCsvInput, normalizedCsvMimeType } from "./mime";
2
+ import type { FileRenderer, FrameDocumentModel, RendererInput, TextRendererPayload } from "../contracts.js";
3
+ export { csvMimeTypeFor, isSupportedCsvInput, normalizedCsvMimeType } from "./mime.js";
4
4
  export type CsvRow = {
5
5
  readonly cells: readonly string[];
6
6
  };
@@ -2,9 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useEffect, useMemo, useRef, useState } from "react";
3
3
  import { DataGrid } from "react-data-grid";
4
4
  import "react-data-grid/lib/styles.css";
5
- import { csvMimeTypeFor, isSupportedCsvInput, normalizedCsvMimeType, } from "./mime";
5
+ import { csvMimeTypeFor } from "./mime.js";
6
6
  import styles from "./csv.module.css";
7
- export { csvMimeTypeFor, isSupportedCsvInput, normalizedCsvMimeType } from "./mime";
7
+ export { csvMimeTypeFor, isSupportedCsvInput, normalizedCsvMimeType } from "./mime.js";
8
8
  export class UnsupportedCsvTypeError extends Error {
9
9
  fileName;
10
10
  mimeType;
@@ -1,4 +1,4 @@
1
- import type { RendererInput } from "../contracts";
1
+ import type { RendererInput } from "../contracts.js";
2
2
  export declare function normalizedCsvMimeType(mimeType: string): string;
3
3
  export declare function csvMimeTypeFor(input: Pick<RendererInput<"csv">, "name" | "mimeType">): string | null;
4
4
  export declare function isSupportedCsvInput(input: Pick<RendererInput<"csv">, "name" | "mimeType">): boolean;
@@ -1,4 +1,4 @@
1
- import { filenameSuffix } from "../file-name";
1
+ import { filenameSuffix } from "../file-name.js";
2
2
  const CSV_MIME_TYPES = new Set([
3
3
  "application/csv",
4
4
  "text/comma-separated-values",
@@ -1,5 +1,5 @@
1
- import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts";
2
- export { docxMimeTypeFor, isSupportedDocxInput, normalizedDocxMimeType, } from "./mime";
1
+ import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts.js";
2
+ export { docxMimeTypeFor, isSupportedDocxInput, normalizedDocxMimeType, } from "./mime.js";
3
3
  export type DocxFrame = {
4
4
  readonly name: string;
5
5
  readonly mimeType: string;
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { inspectSafeOoxml, safeOoxmlExternalHyperlinkUrl } from "../../../utils/src/index.js";
3
- import { OfficePreview, OOXML_VIEWER_RESOURCE_LIMITS, } from "../office/preview";
4
- import { DocxAccessibleView } from "./accessible-view";
5
- import { docxMimeTypeFor } from "./mime";
6
- export { docxMimeTypeFor, isSupportedDocxInput, normalizedDocxMimeType, } from "./mime";
3
+ import { OfficePreview, OOXML_VIEWER_RESOURCE_LIMITS, } from "../office/preview.js";
4
+ import { DocxAccessibleView } from "./accessible-view.js";
5
+ import { docxMimeTypeFor } from "./mime.js";
6
+ export { docxMimeTypeFor, isSupportedDocxInput, normalizedDocxMimeType, } from "./mime.js";
7
7
  export class UnsupportedDocxTypeError extends Error {
8
8
  fileName;
9
9
  mimeType;
@@ -1,4 +1,4 @@
1
- import type { RendererInput } from "../contracts";
1
+ import type { RendererInput } from "../contracts.js";
2
2
  export declare function normalizedDocxMimeType(mimeType: string): string;
3
3
  export declare function docxMimeTypeFor(input: Pick<RendererInput<"docx">, "name" | "mimeType">): string | null;
4
4
  export declare function isSupportedDocxInput(input: Pick<RendererInput<"docx">, "name" | "mimeType">): boolean;
@@ -1,4 +1,4 @@
1
- import { filenameSuffix } from "../file-name";
1
+ import { filenameSuffix } from "../file-name.js";
2
2
  const DOCX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
3
3
  export function normalizedDocxMimeType(mimeType) {
4
4
  return mimeType.split(";", 1)[0]?.trim().toLowerCase() ?? "";
@@ -1,8 +1,8 @@
1
- import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts";
2
- import { type DrawioPage } from "./parse";
3
- export { drawioMimeTypeFor, DRAWIO_MIME_TYPE, DRAWIO_PREVIEW_MAX_BYTES, isSupportedDrawioInput, normalizedDrawioMimeType, } from "./mime";
4
- export { InvalidDrawioError, parseDrawio } from "./parse";
5
- export type { DrawioEdge, DrawioPage, DrawioPreview, DrawioVertex } from "./parse";
1
+ import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts.js";
2
+ import { type DrawioPage } from "./parse.js";
3
+ export { drawioMimeTypeFor, DRAWIO_MIME_TYPE, DRAWIO_PREVIEW_MAX_BYTES, isSupportedDrawioInput, normalizedDrawioMimeType, } from "./mime.js";
4
+ export { InvalidDrawioError, parseDrawio } from "./parse.js";
5
+ export type { DrawioEdge, DrawioPage, DrawioPreview, DrawioVertex } from "./parse.js";
6
6
  export type DrawioFrame = {
7
7
  readonly name: string;
8
8
  readonly mimeType: string;
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useId, useState } from "react";
3
- import { InvalidDrawioError, parseDrawio, } from "./parse";
4
- import { drawioMimeTypeFor, DRAWIO_PREVIEW_MAX_BYTES } from "./mime";
5
- export { drawioMimeTypeFor, DRAWIO_MIME_TYPE, DRAWIO_PREVIEW_MAX_BYTES, isSupportedDrawioInput, normalizedDrawioMimeType, } from "./mime";
6
- export { InvalidDrawioError, parseDrawio } from "./parse";
3
+ import { InvalidDrawioError, parseDrawio, } from "./parse.js";
4
+ import { drawioMimeTypeFor, DRAWIO_PREVIEW_MAX_BYTES } from "./mime.js";
5
+ export { drawioMimeTypeFor, DRAWIO_MIME_TYPE, DRAWIO_PREVIEW_MAX_BYTES, isSupportedDrawioInput, normalizedDrawioMimeType, } from "./mime.js";
6
+ export { InvalidDrawioError, parseDrawio } from "./parse.js";
7
7
  export class UnsupportedDrawioTypeError extends Error {
8
8
  constructor(input) {
9
9
  super(`No Drawio renderer is registered for ${input.name || input.mimeType || "this file"}`);
@@ -1,4 +1,4 @@
1
- import type { RendererInput } from "../contracts";
1
+ import type { RendererInput } from "../contracts.js";
2
2
  export declare const DRAWIO_MIME_TYPE = "application/vnd.jgraph.mxfile";
3
3
  export declare const DRAWIO_PREVIEW_MAX_BYTES: number;
4
4
  export declare function normalizedDrawioMimeType(mimeType: string): string;
@@ -1,4 +1,4 @@
1
- import { filenameSuffix } from "../file-name";
1
+ import { filenameSuffix } from "../file-name.js";
2
2
  export const DRAWIO_MIME_TYPE = "application/vnd.jgraph.mxfile";
3
3
  export const DRAWIO_PREVIEW_MAX_BYTES = 2 * 1024 * 1024;
4
4
  const DRAWIO_MIME_TYPES = new Set([
@@ -1,4 +1,4 @@
1
- import type { RendererDiagnostic } from "../contracts";
1
+ import type { RendererDiagnostic } from "../contracts.js";
2
2
  export type DrawioVertex = {
3
3
  readonly id: string;
4
4
  readonly label: string;
@@ -1,7 +1,7 @@
1
1
  import type { ExcalidrawElement } from "@excalidraw/excalidraw/element/types";
2
2
  import type { BinaryFiles } from "@excalidraw/excalidraw/types";
3
- import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts";
4
- export { excalidrawMimeTypeFor, EXCALIDRAW_MIME_TYPE, EXCALIDRAW_PREVIEW_MAX_BYTES, isSupportedExcalidrawInput, normalizedExcalidrawMimeType, } from "./mime";
3
+ import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts.js";
4
+ export { excalidrawMimeTypeFor, EXCALIDRAW_MIME_TYPE, EXCALIDRAW_PREVIEW_MAX_BYTES, isSupportedExcalidrawInput, normalizedExcalidrawMimeType, } from "./mime.js";
5
5
  export type ExcalidrawFrame = {
6
6
  readonly name: string;
7
7
  readonly mimeType: string;
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from "react";
3
- import { StaticSvgFrame } from "../static-svg-frame";
4
- import { excalidrawMimeTypeFor, EXCALIDRAW_PREVIEW_MAX_BYTES } from "./mime";
5
- export { excalidrawMimeTypeFor, EXCALIDRAW_MIME_TYPE, EXCALIDRAW_PREVIEW_MAX_BYTES, isSupportedExcalidrawInput, normalizedExcalidrawMimeType, } from "./mime";
3
+ import { StaticSvgFrame } from "../static-svg-frame.js";
4
+ import { excalidrawMimeTypeFor, EXCALIDRAW_PREVIEW_MAX_BYTES } from "./mime.js";
5
+ export { excalidrawMimeTypeFor, EXCALIDRAW_MIME_TYPE, EXCALIDRAW_PREVIEW_MAX_BYTES, isSupportedExcalidrawInput, normalizedExcalidrawMimeType, } from "./mime.js";
6
6
  export class UnsupportedExcalidrawTypeError extends Error {
7
7
  constructor(input) {
8
8
  super(`No Excalidraw renderer is registered for ${input.name || input.mimeType || "this file"}`);
@@ -1,4 +1,4 @@
1
- import type { RendererInput } from "../contracts";
1
+ import type { RendererInput } from "../contracts.js";
2
2
  export declare const EXCALIDRAW_MIME_TYPE = "application/vnd.excalidraw+json";
3
3
  export declare const EXCALIDRAW_PREVIEW_MAX_BYTES: number;
4
4
  export declare function normalizedExcalidrawMimeType(mimeType: string): string;
@@ -1,4 +1,4 @@
1
- import { filenameSuffix } from "../file-name";
1
+ import { filenameSuffix } from "../file-name.js";
2
2
  export const EXCALIDRAW_MIME_TYPE = "application/vnd.excalidraw+json";
3
3
  export const EXCALIDRAW_PREVIEW_MAX_BYTES = 10 * 1024 * 1024;
4
4
  export function normalizedExcalidrawMimeType(mimeType) {
@@ -1,24 +1,24 @@
1
- import { codeLanguageFor } from "./code/mime";
2
- import { configMimeTypeFor } from "./config/mime";
3
- import { isSupportedCsvInput } from "./csv/mime";
4
- import { docxMimeTypeFor } from "./docx/mime";
5
- import { drawioMimeTypeFor } from "./drawio/mime";
6
- import { excalidrawMimeTypeFor } from "./excalidraw/mime";
7
- import { glbMimeTypeFor } from "./glb/mime";
8
- import { htmlMimeTypeFor } from "./html/mime";
9
- import { imageMimeTypeFor } from "./image/mime";
10
- import { isSupportedJsonInput, isSupportedJsonlInput } from "./json/mime";
11
- import { isSupportedMarkdownInput } from "./markdown/mime";
12
- import { mediaMimeTypeFor } from "./media/mime";
13
- import { mermaidMimeTypeFor } from "./mermaid/mime";
14
- import { isSupportedNotebookInput } from "./notebook/mime";
15
- import { pdfMimeTypeFor } from "./pdf/mime";
16
- import { pptMimeTypeFor } from "./ppt/mime";
17
- import { isSupportedSvgInput } from "./svg/mime";
18
- import { isSupportedWasmInput } from "./wasm/mime";
19
- import { xlsxMimeTypeFor } from "./xlsx/mime";
20
- import { isSupportedZipInput } from "./zip/mime";
21
- import { filenameSuffix } from "./file-name";
1
+ import { codeLanguageFor } from "./code/mime.js";
2
+ import { configMimeTypeFor } from "./config/mime.js";
3
+ import { isSupportedCsvInput } from "./csv/mime.js";
4
+ import { docxMimeTypeFor } from "./docx/mime.js";
5
+ import { drawioMimeTypeFor } from "./drawio/mime.js";
6
+ import { excalidrawMimeTypeFor } from "./excalidraw/mime.js";
7
+ import { glbMimeTypeFor } from "./glb/mime.js";
8
+ import { htmlMimeTypeFor } from "./html/mime.js";
9
+ import { imageMimeTypeFor } from "./image/mime.js";
10
+ import { isSupportedJsonInput, isSupportedJsonlInput } from "./json/mime.js";
11
+ import { isSupportedMarkdownInput } from "./markdown/mime.js";
12
+ import { mediaMimeTypeFor } from "./media/mime.js";
13
+ import { mermaidMimeTypeFor } from "./mermaid/mime.js";
14
+ import { isSupportedNotebookInput } from "./notebook/mime.js";
15
+ import { pdfMimeTypeFor } from "./pdf/mime.js";
16
+ import { pptMimeTypeFor } from "./ppt/mime.js";
17
+ import { isSupportedSvgInput } from "./svg/mime.js";
18
+ import { isSupportedWasmInput } from "./wasm/mime.js";
19
+ import { xlsxMimeTypeFor } from "./xlsx/mime.js";
20
+ import { isSupportedZipInput } from "./zip/mime.js";
21
+ import { filenameSuffix } from "./file-name.js";
22
22
  const APPLICATION_TEXT_MIME_TYPES = new Set([
23
23
  "application/javascript",
24
24
  ]);
@@ -1,6 +1,6 @@
1
- import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts";
2
- export { GLB_MIME_TYPE, GLB_PREVIEW_MAX_BYTES, glbMimeTypeFor, isSupportedGlbInput, normalizedGlbMimeType, } from "./mime";
3
- export { InvalidGlbError, validateGlb } from "./parse";
1
+ import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts.js";
2
+ export { GLB_MIME_TYPE, GLB_PREVIEW_MAX_BYTES, glbMimeTypeFor, isSupportedGlbInput, normalizedGlbMimeType, } from "./mime.js";
3
+ export { InvalidGlbError, validateGlb } from "./parse.js";
4
4
  export type GlbFrame = {
5
5
  readonly name: string;
6
6
  readonly mimeType: string;
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { createElement, useEffect, useRef, useState } from "react";
3
- import { glbMimeTypeFor } from "./mime";
4
- import { validateGlb } from "./parse";
5
- export { GLB_MIME_TYPE, GLB_PREVIEW_MAX_BYTES, glbMimeTypeFor, isSupportedGlbInput, normalizedGlbMimeType, } from "./mime";
6
- export { InvalidGlbError, validateGlb } from "./parse";
3
+ import { glbMimeTypeFor } from "./mime.js";
4
+ import { validateGlb } from "./parse.js";
5
+ export { GLB_MIME_TYPE, GLB_PREVIEW_MAX_BYTES, glbMimeTypeFor, isSupportedGlbInput, normalizedGlbMimeType, } from "./mime.js";
6
+ export { InvalidGlbError, validateGlb } from "./parse.js";
7
7
  export class UnsupportedGlbTypeError extends Error {
8
8
  constructor(input) {
9
9
  super(`No GLB renderer is registered for ${input.name || input.mimeType || "this file"}`);
@@ -1,4 +1,4 @@
1
- import type { RendererInput } from "../contracts";
1
+ import type { RendererInput } from "../contracts.js";
2
2
  export declare const GLB_MIME_TYPE = "model/gltf-binary";
3
3
  export declare const GLB_PREVIEW_MAX_BYTES: number;
4
4
  export declare function normalizedGlbMimeType(mimeType: string): string;
@@ -1,4 +1,4 @@
1
- import { filenameSuffix } from "../file-name";
1
+ import { filenameSuffix } from "../file-name.js";
2
2
  export const GLB_MIME_TYPE = "model/gltf-binary";
3
3
  export const GLB_PREVIEW_MAX_BYTES = 10 * 1024 * 1024;
4
4
  export function normalizedGlbMimeType(mimeType) {
@@ -1,4 +1,4 @@
1
- import { GLB_PREVIEW_MAX_BYTES } from "./mime";
1
+ import { GLB_PREVIEW_MAX_BYTES } from "./mime.js";
2
2
  const GLB_MAGIC = 0x46546c67;
3
3
  const JSON_CHUNK = 0x4e4f534a;
4
4
  const BIN_CHUNK = 0x004e4942;
@@ -1,5 +1,5 @@
1
- import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts";
2
- export { htmlMimeTypeFor, isSupportedHtmlInput, normalizedHtmlMimeType, } from "./mime";
1
+ import type { FileRenderer, FrameDocumentModel, RendererInput } from "../contracts.js";
2
+ export { htmlMimeTypeFor, isSupportedHtmlInput, normalizedHtmlMimeType, } from "./mime.js";
3
3
  export type HtmlFrame = {
4
4
  readonly name: string;
5
5
  readonly mimeType: string;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { htmlMimeTypeFor } from "./mime";
3
- export { htmlMimeTypeFor, isSupportedHtmlInput, normalizedHtmlMimeType, } from "./mime";
2
+ import { htmlMimeTypeFor } from "./mime.js";
3
+ export { htmlMimeTypeFor, isSupportedHtmlInput, normalizedHtmlMimeType, } from "./mime.js";
4
4
  export class UnsupportedHtmlTypeError extends Error {
5
5
  fileName;
6
6
  mimeType;
@@ -1,4 +1,4 @@
1
- import type { RendererInput } from "../contracts";
1
+ import type { RendererInput } from "../contracts.js";
2
2
  export declare function normalizedHtmlMimeType(mimeType: string): string;
3
3
  export declare function isSupportedHtmlInput(input: Pick<RendererInput<"html">, "name" | "mimeType">): boolean;
4
4
  export declare function htmlMimeTypeFor(input: Pick<RendererInput<"html">, "name" | "mimeType">): string | null;
@@ -1,4 +1,4 @@
1
- import { filenameSuffix } from "../file-name";
1
+ import { filenameSuffix } from "../file-name.js";
2
2
  const HTML_MIME_TYPES = new Set(["application/xhtml+xml", "text/html"]);
3
3
  const HTML_MIME_BY_SUFFIX = new Map([
4
4
  ["htm", "text/html"],
@@ -1,5 +1,5 @@
1
- import type { RendererResourceRequest, RendererResourceResolver } from "../contracts";
2
- import type { HtmlFrame } from "./index";
1
+ import type { RendererResourceResolver } from "../contracts.js";
2
+ import type { HtmlFrame } from "./index.js";
3
3
  export declare const HTML_LINKED_RESOURCE_MAX_BYTES: number;
4
4
  export type ProjectedHtmlPreview = {
5
5
  readonly document: string;
@@ -8,7 +8,6 @@ export type ProjectedHtmlPreview = {
8
8
  export declare class HtmlPreviewLimitError extends Error {
9
9
  constructor(message: string);
10
10
  }
11
- export declare function htmlWorkspaceResourcePath({ basePath, reference, }: Pick<RendererResourceRequest, "basePath" | "reference">): string | null;
12
11
  export declare function projectHtmlPreview(frame: HtmlFrame, context: {
13
12
  readonly basePath: string;
14
13
  readonly resources: RendererResourceResolver;