@mdzip/editor 1.3.0 → 1.3.8

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 (48) hide show
  1. package/README.md +145 -8
  2. package/dist/archive-utils.d.ts.map +1 -1
  3. package/dist/archive-utils.js +1 -34
  4. package/dist/archive-utils.js.map +1 -1
  5. package/dist/asset-cache.d.ts +81 -0
  6. package/dist/asset-cache.d.ts.map +1 -0
  7. package/dist/asset-cache.js +365 -0
  8. package/dist/asset-cache.js.map +1 -0
  9. package/dist/diff-view-css.d.ts +2 -0
  10. package/dist/diff-view-css.d.ts.map +1 -0
  11. package/dist/diff-view-css.js +49 -0
  12. package/dist/diff-view-css.js.map +1 -0
  13. package/dist/diff-view.d.ts +112 -0
  14. package/dist/diff-view.d.ts.map +1 -0
  15. package/dist/diff-view.js +573 -0
  16. package/dist/diff-view.js.map +1 -0
  17. package/dist/diff.d.ts +2 -1
  18. package/dist/diff.d.ts.map +1 -1
  19. package/dist/diff.js +3 -1
  20. package/dist/diff.js.map +1 -1
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/library-info.d.ts +37 -0
  26. package/dist/library-info.d.ts.map +1 -0
  27. package/dist/library-info.js +46 -0
  28. package/dist/library-info.js.map +1 -0
  29. package/dist/preview.d.ts +10 -0
  30. package/dist/preview.d.ts.map +1 -0
  31. package/dist/preview.js +9 -0
  32. package/dist/preview.js.map +1 -0
  33. package/dist/rendering.d.ts +138 -2
  34. package/dist/rendering.d.ts.map +1 -1
  35. package/dist/rendering.js +108 -13
  36. package/dist/rendering.js.map +1 -1
  37. package/dist/view-css.d.ts.map +1 -1
  38. package/dist/view-css.js +109 -1
  39. package/dist/view-css.js.map +1 -1
  40. package/dist/view.d.ts +136 -1
  41. package/dist/view.d.ts.map +1 -1
  42. package/dist/view.js +733 -22
  43. package/dist/view.js.map +1 -1
  44. package/dist/workspace.d.ts +15 -0
  45. package/dist/workspace.d.ts.map +1 -1
  46. package/dist/workspace.js +28 -0
  47. package/dist/workspace.js.map +1 -1
  48. package/package.json +23 -4
package/README.md CHANGED
@@ -1,3 +1,8 @@
1
+ [![MDZip logo][mdzip-logo]][mdzip-url]
2
+
3
+ [mdzip-logo]: https://raw.githubusercontent.com/mdzip-project/mdzip-editor/main/resources/mdzip-mark.svg
4
+ [mdzip-url]: https://mdzip.org
5
+
1
6
  # @mdzip/editor
2
7
 
3
8
  Framework-independent MDZip workspace engine and browser view.
@@ -38,19 +43,41 @@ await view.open(markdownBytes, {
38
43
  });
39
44
  ```
40
45
 
46
+ CodeMirror is not initialized until a source or split layout is used. Consumers
47
+ that only need archive, rendering, and preview helpers can import from
48
+ `@mdzip/editor/preview`; that entry point excludes `MdzipWorkspaceView` and its
49
+ CodeMirror dependencies from the module graph.
50
+
41
51
  The filename normally selects the source format. Pass `sourceFormat:
42
52
  'markdown'` or `sourceFormat: 'mdz'` to override detection.
43
53
 
44
- Normalized `mdzip-core-js` workspaces can be opened without an initial archive
54
+ Normalized `@mdzip/core-js` workspaces can be opened without an initial archive
45
55
  rebuild:
46
56
 
47
57
  ```ts
48
58
  await view.openWorkspace(workspace, {
49
59
  mode: 'editable',
50
- fileName: 'document.mdz'
60
+ fileName: 'document.mdz',
61
+ assetSourceId: 'document-etag-or-content-id'
62
+ });
63
+ ```
64
+
65
+ Images are resolved only when referenced by the active document or selected in
66
+ the navigator. To reuse resolved bytes across sessions, inject the optional
67
+ bounded IndexedDB cache:
68
+
69
+ ```ts
70
+ import { MdzipIndexedDbAssetCache, MdzipWorkspaceView } from '@mdzip/editor';
71
+
72
+ const view = new MdzipWorkspaceView(container, {
73
+ assetCache: new MdzipIndexedDbAssetCache({ maxBytes: 64 * 1024 * 1024 })
51
74
  });
52
75
  ```
53
76
 
77
+ For `openWorkspace()`, provide a stable `assetSourceId` (or `archiveBytes`) so
78
+ cache hits can bypass lazy ZIP readers. Cache and storage failures automatically
79
+ fall back to archive reads.
80
+
54
81
  ## Editor Mode
55
82
 
56
83
  ```ts
@@ -127,27 +154,68 @@ flow (triggered by the nav button, Insert Image, or an image paste/drop):
127
154
 
128
155
  ```ts
129
156
  const view = new MdzipWorkspaceView(container, {
130
- onConversionRequested(action) {
157
+ async onConversionRequested(action, context) {
131
158
  // action.kind: 'navigation' | 'image-picker' | 'image-file' (with action.file)
132
- return hostHandlesConversion(action); // true suppresses the built-in dialog
159
+ const relativePath = await hostHandlesImage(action);
160
+ return relativePath
161
+ ? context.insertMarkdown(`![](${relativePath})`)
162
+ : false;
133
163
  }
134
164
  });
135
165
  ```
136
166
 
137
167
  Returning or resolving `false` (or omitting the callback) keeps the built-in
138
168
  conversion dialog. Errors thrown by the hook are reported via `onFailed` and
139
- fall back to the built-in dialog.
169
+ fall back to the built-in dialog. The context preserves the triggering
170
+ selection while a host dialog is open; it returns `false` if that document has
171
+ changed. `context.convertToMdz()` runs the built-in conversion and image action
172
+ against the same captured selection.
140
173
 
141
174
  `MdzipRenderingService` uses `defaultSafeMarkdownRenderer` when no renderer is
142
175
  injected. The default renderer sanitizes generated HTML and unsafe URL schemes.
143
176
 
177
+ ## Rendering Extensibility
178
+
179
+ The view accepts a custom markdown renderer, composable markdown pipeline
180
+ extensions, and entry renderers that replace the content area for selected
181
+ archive entries — all optional, with built-in behavior as the fallback:
182
+
183
+ ```ts
184
+ import { mdzipPathMatcher, type MdzipEntryRenderer } from '@mdzip/editor';
185
+
186
+ const manifestRenderer: MdzipEntryRenderer = {
187
+ id: 'host-manifest-editor',
188
+ priority: 100,
189
+ matches: mdzipPathMatcher('manifest.json'),
190
+ mount: (container, context) => mountManifestEditor(container, {
191
+ manifest: context.manifest,
192
+ editable: context.mode === 'editable',
193
+ onChange: (manifest) => context.updateManifest(manifest)
194
+ })
195
+ };
196
+
197
+ const view = new MdzipWorkspaceView(container, {
198
+ markdownRenderer, // optional full renderer replacement
199
+ markdownExtensions: [mermaidExt], // transformMarkdown/transformHtml/mount
200
+ entryRenderers: [manifestRenderer]
201
+ });
202
+ ```
203
+
204
+ Renderers may be asynchronous; stale results are dropped when the selection
205
+ moves on. Sanitization stays in the pipeline: string output from custom
206
+ renderers and transform hooks passes through DOMPurify before insertion. Entry
207
+ renderer handles are destroyed on selection change and `destroy()`. The same
208
+ options are available as inputs/props on the Angular, React, and Vue wrappers.
209
+ See the Developer Guide's Rendering Extensibility section for the contracts
210
+ and lifecycle rules.
211
+
144
212
  ## Developer Guide
145
213
 
146
- See the [Developer Guide](https://github.com/mdzip-project/@mdzip/editor/blob/main/docs/developer-guide.md)
214
+ See the [Developer Guide](https://github.com/mdzip-project/mdzip-editor/blob/main/docs/developer-guide.md)
147
215
  for granular host controls, height requirements, lifecycle events, persistence,
148
216
  theming, and Raw, Angular, React, and Vue examples.
149
217
 
150
- See the [Theming Guide](https://github.com/mdzip-project/@mdzip/editor/blob/main/docs/theming.md)
218
+ See the [Theming Guide](https://github.com/mdzip-project/mdzip-editor/blob/main/docs/theming.md)
151
219
  for custom theme examples and the complete CSS variable reference.
152
220
 
153
221
  ## Archive Helpers
@@ -161,4 +229,73 @@ import {
161
229
  } from '@mdzip/editor';
162
230
  ```
163
231
 
164
- These helpers are built on `mdzip-core-js` and are suitable for framework wrappers, desktop hosts, browser apps, and extension integrations.
232
+ These helpers are built on `@mdzip/core-js` and are suitable for framework wrappers, desktop hosts, browser apps, and extension integrations.
233
+
234
+ ## Archive Diff View
235
+
236
+ The optional diff entry point keeps merge dependencies out of normal editor
237
+ and preview bundles:
238
+
239
+ ```ts
240
+ import { MdzipDiffView } from '@mdzip/editor/diff-view';
241
+
242
+ const diff = new MdzipDiffView(container, {
243
+ before: { bytes: baseBytes, label: 'Git base' },
244
+ after: { bytes: workingBytes, label: 'Working tree' },
245
+ initialPath: 'index.md',
246
+ toolbarActions: [{
247
+ id: 'refresh',
248
+ label: 'Refresh comparison',
249
+ icon: 'refresh',
250
+ run: refreshComparison
251
+ }]
252
+ });
253
+ ```
254
+
255
+ Construction opens the initial comparison. Use `await diff.open(options)` to
256
+ replace both sides, `openPath(path)` to select an entry, and
257
+ `setShowUnchanged(false)` to focus the tree on changes. Toolbar actions may be
258
+ updated with `setToolbarActions()` without reopening either archive.
259
+
260
+ The library-owned toolbar provides a navigation toggle, Previous/Next change
261
+ buttons, and a Show-unchanged toggle. Drive change traversal in code with
262
+ `openPreviousChange()` / `openNextChange()` (they walk non-unchanged entries
263
+ and resolve `false` at the ends). Opt individual built-in controls out with
264
+ the `controls` option (`navigation`, `changeTraversal`, `showUnchanged`; all
265
+ default on). The navigation pane animates open/closed like the workspace nav
266
+ pane.
267
+
268
+ The read-only view shows the union of archive paths in a directory tree,
269
+ added/removed/changed status, side-by-side text diffs, explicit missing-side
270
+ states, image previews with metadata, and binary metadata. Entry content is
271
+ loaded only when selected. Call `destroy()` to release editors, listeners, and
272
+ image object URLs.
273
+
274
+ ## Preview Lifecycle Signals
275
+
276
+ To reveal or animate read-only preview content without scraping internal DOM,
277
+ use the preview lifecycle signals on `MdzipWorkspaceView`:
278
+
279
+ ```ts
280
+ const view = new MdzipWorkspaceView(container, {
281
+ controls: 'preview',
282
+ onPreviewRendered: (snapshot) => { /* preview HTML is mounted */ },
283
+ onAssetsHydrated: (snapshot) => { /* its images have finished loading */ }
284
+ });
285
+
286
+ // Or await the fullest "ready" point (mounted + images hydrated):
287
+ await view.whenRendered();
288
+ revealContent();
289
+ ```
290
+
291
+ `whenRendered()` resolves immediately when the latest preview is already
292
+ hydrated, and resolves (rather than hanging) if the view is destroyed.
293
+
294
+ The preview hydrates images progressively: the text mounts right away with each
295
+ archive image in a collapsed slot, so the reader gets a compact, readable text
296
+ block first. As each image resolves, its slot eases open to the height reserved
297
+ from dimensions sniffed out of the image header — a single slide to the exact
298
+ box, so the pixels arrive with no further reflow (and it snaps open instead
299
+ under `prefers-reduced-motion`). `onPreviewRendered` fires when the text is
300
+ mounted; `onAssetsHydrated` fires once every referenced image has resolved and
301
+ its final `src` is assigned.
@@ -1 +1 @@
1
- {"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../src/archive-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAI9E;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAsDhG;AAED,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,UAAU,EACzB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,UAAU,EACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,UAAU,EACzB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,+BAA+B,CACnD,aAAa,EAAE,UAAU,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,UAAU,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,UAAU,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,wBAAsB,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,6BAA6B,CACjD,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,SAAS,eAAe,EAAO,GACtC,OAAO,CAAC,UAAU,CAAC,CASrB;AAED,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAarB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAEjE"}
1
+ {"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../src/archive-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAI9E;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAqChG;AAED,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,UAAU,EACzB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,UAAU,EACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,UAAU,EACzB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,+BAA+B,CACnD,aAAa,EAAE,UAAU,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,UAAU,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,UAAU,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,wBAAsB,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,6BAA6B,CACjD,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,SAAS,eAAe,EAAO,GACtC,OAAO,CAAC,UAAU,CAAC,CASrB;AAED,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAarB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAEjE"}
@@ -30,28 +30,12 @@ export async function openedArchiveFromWorkspace(workspace) {
30
30
  isDirectory: false
31
31
  }))
32
32
  ].sort((a, b) => a.path.localeCompare(b.path, undefined, { sensitivity: 'base' }));
33
- const images = new Map();
34
- for (const asset of workspace.assets) {
35
- if (asset.kind !== 'image') {
36
- continue;
37
- }
38
- if (asset.readDataUri) {
39
- images.set(asset.path, await asset.readDataUri());
40
- continue;
41
- }
42
- const bytes = asset.bytes
43
- ? await binarySourceToBytes(asset.bytes)
44
- : await asset.readBytes?.();
45
- if (bytes) {
46
- images.set(asset.path, `data:${asset.mimeType};base64,${bytesToBase64(bytes)}`);
47
- }
48
- }
49
33
  return {
50
34
  paths,
51
35
  entryPoint,
52
36
  manifest: workspace.manifest,
53
37
  markdownText,
54
- images,
38
+ images: new Map(),
55
39
  orphanedAssetPaths: workspace.orphanedAssets?.orphanedAssetPaths ?? [],
56
40
  validation: workspace.validation
57
41
  };
@@ -128,21 +112,4 @@ export function isImagePath(path) {
128
112
  export async function blobToBytes(blob) {
129
113
  return new Uint8Array(await blob.arrayBuffer());
130
114
  }
131
- async function binarySourceToBytes(source) {
132
- if (source instanceof Uint8Array) {
133
- return source;
134
- }
135
- if (source instanceof ArrayBuffer) {
136
- return new Uint8Array(source);
137
- }
138
- return blobToBytes(source);
139
- }
140
- function bytesToBase64(bytes) {
141
- let binary = '';
142
- const chunkSize = 0x8000;
143
- for (let index = 0; index < bytes.length; index += chunkSize) {
144
- binary += String.fromCharCode(...bytes.subarray(index, index + chunkSize));
145
- }
146
- return btoa(binary);
147
- }
148
115
  //# sourceMappingURL=archive-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"archive-utils.js","sourceRoot":"","sources":["../src/archive-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive-utils.js","sourceRoot":"","sources":["../src/archive-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import type { MdzWorkspaceAsset } from '@mdzip/core-js';
2
+ import type { MdzipWorkspaceService } from './workspace.js';
3
+ export interface MdzipAssetCacheEntry {
4
+ bytes: Uint8Array;
5
+ mimeType: string;
6
+ }
7
+ export interface MdzipAssetCache {
8
+ get(contentKey: string): Promise<MdzipAssetCacheEntry | undefined>;
9
+ set(contentKey: string, entry: MdzipAssetCacheEntry): Promise<void>;
10
+ getReference(referenceKey: string): Promise<string | undefined>;
11
+ setReference(referenceKey: string, contentKey: string): Promise<void>;
12
+ }
13
+ export interface MdzipIndexedDbAssetCacheOptions {
14
+ databaseName?: string;
15
+ maxBytes?: number;
16
+ maxEntries?: number;
17
+ maxAgeMs?: number;
18
+ }
19
+ export declare class MdzipIndexedDbAssetCache implements MdzipAssetCache {
20
+ private readonly databaseName;
21
+ private readonly maxBytes;
22
+ private readonly maxEntries;
23
+ private readonly maxAgeMs;
24
+ private databasePromise;
25
+ constructor(options?: MdzipIndexedDbAssetCacheOptions);
26
+ get(contentKey: string): Promise<MdzipAssetCacheEntry | undefined>;
27
+ set(contentKey: string, entry: MdzipAssetCacheEntry): Promise<void>;
28
+ getReference(referenceKey: string): Promise<string | undefined>;
29
+ setReference(referenceKey: string, contentKey: string): Promise<void>;
30
+ private database;
31
+ private putStored;
32
+ private deleteAsset;
33
+ private prune;
34
+ }
35
+ export interface MdzipAssetSessionOptions {
36
+ cache?: MdzipAssetCache;
37
+ sourceId?: string | (() => Promise<string>);
38
+ onFailed?: (error: unknown) => void;
39
+ }
40
+ export interface MdzipResolvedImage {
41
+ url: string;
42
+ /** Intrinsic pixel width, when it could be sniffed from the image bytes. */
43
+ width?: number;
44
+ /** Intrinsic pixel height, when it could be sniffed from the image bytes. */
45
+ height?: number;
46
+ }
47
+ export declare class MdzipAssetSession {
48
+ private readonly workspace;
49
+ private readonly assets;
50
+ private readonly ownerDocument;
51
+ private readonly options;
52
+ private readonly urls;
53
+ private readonly sizes;
54
+ private readonly pending;
55
+ private sourceIdPromise;
56
+ private destroyed;
57
+ constructor(workspace: MdzipWorkspaceService, assets: readonly MdzWorkspaceAsset[], ownerDocument: Document, options?: MdzipAssetSessionOptions);
58
+ resolveKnown(path: string, currentPath: string): string | undefined;
59
+ resolve(path: string, currentPath: string): Promise<string | undefined>;
60
+ /**
61
+ * Resolves an image to its URL plus, when sniffable from the bytes, its
62
+ * intrinsic dimensions — enabling progressive hydration that reserves layout
63
+ * space before the image visually loads.
64
+ */
65
+ resolveImage(path: string, currentPath: string): Promise<MdzipResolvedImage | undefined>;
66
+ rewriteHtml(html: string, currentPath: string, signal: AbortSignal): Promise<string>;
67
+ destroy(): void;
68
+ private resolveAsset;
69
+ private storeUrl;
70
+ private referenceKey;
71
+ }
72
+ export declare function mdzipArchiveSourceId(bytes: Uint8Array): Promise<string>;
73
+ /**
74
+ * Reads intrinsic pixel dimensions from common image headers without decoding
75
+ * the image. Returns `undefined` for formats it does not recognize.
76
+ */
77
+ export declare function sniffImageSize(bytes: Uint8Array, mimeType: string): {
78
+ width: number;
79
+ height: number;
80
+ } | undefined;
81
+ //# sourceMappingURL=asset-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-cache.d.ts","sourceRoot":"","sources":["../src/asset-cache.ts"],"names":[],"mappings":"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"}